[SCM] csound/master: Imported Upstream version 5.15.0~dfsg

fsateler at users.alioth.debian.org fsateler at users.alioth.debian.org
Wed Dec 28 01:38:57 UTC 2011


The following commit has been merged in the master branch:
commit b77fbe6a79533990fd358fb3255405bbfce027ac
Author: Felipe Sateler <fsateler at debian.org>
Date:   Sat Dec 24 17:10:56 2011 -0300

    Imported Upstream version 5.15.0~dfsg

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 034ded1..d928977 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -28,6 +28,7 @@ endif()
 
 include(TestBigEndian)
 include(CheckFunctionExists)
+include(CheckIncludeFile)
 
 # Utility function to make plugins. All plugin targets should use this as it
 # sets up output directory set in top-level CmakeLists.txt
@@ -203,11 +204,12 @@ option(BUILD_UTILITIES "Build stand-alone executables for utilities that can als
 option(BUILD_NEW_PARSER "Enable building new parser (requires Flex/Bison)" ON)
 option(NEW_PARSER_DEBUG "Enable tracing of new parser" OFF)
 
-option(BUILD_MULTI_CORE "Enable building for multicore system (requires BUILD_NEW_PARSER)" OFF)
+option(BUILD_MULTI_CORE "Enable building for multicore system (requires BUILD_NEW_PARSER)" ON)
 
 option(FAIL_MISSING "Fail when a required external dependency is not present (useful for packagers)" OFF)
 
- # Optional targets, they should all default to ON (check_deps will disable them if not possible to build)
+
+# Optional targets, they should all default to ON (check_deps will disable them if not possible to build)
 
 
 set(BUILD_DIR ${CMAKE_CURRENT_BINARY_DIR})
@@ -277,10 +279,10 @@ set(CMAKE_REQUIRED_LIBRARIES pthread)
 # Now, non required library searches #
 
 find_library(VORBISFILE_LIBRARY vorbisfile)
-find_file(USE_GETTEXT libintl.h)
+check_include_file(libintl.h USE_GETTEXT)
 find_library(LIBINTL_LIBRARY intl)
 
-set(HEADERS_TO_CHECK 
+set(HEADERS_TO_CHECK
     unistd.h io.h fcntl.h stdint.h
     sys/time.h sys/types.h termios.h
     values.h winsock.h sys/socket.h
@@ -290,7 +292,7 @@ foreach(header ${HEADERS_TO_CHECK})
     # Convert to uppercase and replace [./] with _
     string(TOUPPER ${header} tmp)
     string(REGEX REPLACE [./] "_" upper_header ${tmp})
-    find_file(HAVE_${upper_header} ${header})
+    check_include_file(${header} HAVE_${upper_header})
 endforeach()
 
 # Flex/Bison for the new parser
@@ -332,6 +334,7 @@ endif()
 set(libcsound_SRCS
     Engine/auxfd.c
     Engine/cfgvar.c
+    Engine/corfiles.c
     Engine/entry1.c
     Engine/envvar.c
     Engine/express.c
@@ -351,6 +354,7 @@ set(libcsound_SRCS
     Engine/sort.c
     Engine/sread.c
     Engine/swrite.c
+    Engine/swritestr.c
     Engine/twarp.c
     InOut/libsnd.c
     InOut/libsnd_u.c
@@ -392,6 +396,59 @@ set(libcsound_SRCS
     OOps/ugrw1.c
     OOps/ugrw2.c
     OOps/vdelay.c
+    Opcodes/babo.c
+    Opcodes/bilbar.c
+    Opcodes/compress.c
+    Opcodes/eqfil.c
+    Opcodes/Vosim.c
+    Opcodes/pitch.c 
+    Opcodes/pitch0.c  
+    Opcodes/spectra.c 
+    Opcodes/ambicode1.c
+    Opcodes/sfont.c 
+    Opcodes/grain4.c 
+    Opcodes/hrtferX.c 
+    Opcodes/loscilx.c
+    Opcodes/minmax.c 
+    Opcodes/pan2.c 
+    Opcodes/tabvars.c 
+    Opcodes/phisem.c
+    Opcodes/hrtfopcodes.c 
+    Opcodes/stackops.c 
+    Opcodes/vbap.c 
+    Opcodes/vbap_eight.c 
+    Opcodes/vbap_four.c 
+    Opcodes/vbap_sixteen.c
+    Opcodes/vbap_zak.c  
+    Opcodes/vaops.c 
+    Opcodes/ugakbari.c 
+    Opcodes/harmon.c 
+    Opcodes/pitchtrack.c 
+    Opcodes/partikkel.c 
+    Opcodes/shape.c 
+    Opcodes/tabsum.c
+    Opcodes/crossfm.c 
+    Opcodes/pvlock.c 
+    Opcodes/fareyseq.c 
+    Opcodes/modmatrix.c 
+    Opcodes/scoreline.c 
+    Opcodes/modal4.c
+    Opcodes/physutil.c 
+    Opcodes/physmod.c 
+    Opcodes/mandolin.c 
+    Opcodes/singwave.c
+    Opcodes/fm4op.c 
+    Opcodes/moog1.c 
+    Opcodes/shaker.c 
+    Opcodes/bowedbar.c
+    Opcodes/gab/tabmorph.c
+    Opcodes/gab/hvs.c
+    Opcodes/gab/sliderTable.c
+    Opcodes/gab/newgabopc.c
+    Opcodes/ftest.c
+    Opcodes/hrtfearly.c
+    Opcodes/hrtfreverb.c
+    Opcodes/cpumeter.c
     Top/argdecode.c
     Top/cscore_internal.c
     Top/cscorfns.c
@@ -405,6 +462,75 @@ set(libcsound_SRCS
     Top/threads.c
     Top/utility.c)
 
+set(stdopcod_SRCS 
+    Opcodes/ambicode.c      
+    Opcodes/bbcut.c         
+    Opcodes/biquad.c
+    Opcodes/butter.c        
+    Opcodes/clfilt.c        
+    Opcodes/cross2.c
+    Opcodes/dam.c           
+    Opcodes/dcblockr.c      
+    Opcodes/filter.c
+    Opcodes/flanger.c       
+    Opcodes/follow.c        
+    Opcodes/fout.c
+    Opcodes/freeverb.c      
+    Opcodes/ftconv.c        
+    Opcodes/ftgen.c
+    Opcodes/gab/gab.c       
+    Opcodes/gab/vectorial.c 
+    Opcodes/grain.c
+    Opcodes/locsig.c        
+    Opcodes/lowpassr.c      
+    Opcodes/metro.c
+    Opcodes/midiops2.c      
+    Opcodes/midiops3.c      
+    Opcodes/newfils.c
+    Opcodes/nlfilt.c        
+    Opcodes/oscbnk.c        
+    Opcodes/pluck.c
+    Opcodes/repluck.c       
+    Opcodes/reverbsc.c      
+    Opcodes/seqtime.c
+    Opcodes/sndloop.c       
+    Opcodes/sndwarp.c       
+    Opcodes/space.c
+    Opcodes/spat3d.c        
+    Opcodes/syncgrain.c     
+    Opcodes/ugens7.c
+    Opcodes/ugens9.c        
+    Opcodes/ugensa.c        
+    Opcodes/uggab.c
+    Opcodes/ugmoss.c        
+    Opcodes/ugnorman.c      
+    Opcodes/ugsc.c
+    Opcodes/wave-terrain.c  
+    Opcodes/stdopcod.c)
+
+set(cs_pvs_ops_SRCS
+    Opcodes/ifd.c 
+    Opcodes/partials.c 
+    Opcodes/psynth.c 
+    Opcodes/pvsbasic.c
+    Opcodes/pvscent.c 
+    Opcodes/pvsdemix.c 
+    Opcodes/pvs_ops.c 
+    Opcodes/pvsband.c
+    Opcodes/pvsbuffer.c)
+
+set(oldpvoc_SRCS
+    Opcodes/dsputil.c 
+    Opcodes/pvadd.c 
+    Opcodes/pvinterp.c 
+    Opcodes/pvocext.c
+    Opcodes/pvread.c 
+    Opcodes/ugens8.c 
+    Opcodes/vpvoc.c 
+    Opcodes/pvoc.c)
+
+list(APPEND libcsound_SRCS ${stdopcod_SRCS} ${cs_pvs_ops_SRCS} ${oldpvoc_SRCS})
+
 # Handling New Parser
 
 check_deps(BUILD_NEW_PARSER FLEX_EXECUTABLE BISON_EXECUTABLE)
@@ -477,6 +603,8 @@ else()
     set(CSOUNDLIB "csound")
 endif()
 
+set(CSOUNDLIB_STATIC "${CSOUNDLIB}-static")
+
 add_library(${CSOUNDLIB} SHARED ${libcsound_SRCS})
 set_target_properties(${CSOUNDLIB} PROPERTIES
     # Do not pull extra libs when linking against shared libcsound
@@ -553,6 +681,15 @@ endif()
 if(HAVE_TERMIOS_H)
     list(APPEND libcsound_CFLAGS -DHAVE_TERMIOS_H)
 endif()
+if(HAVE_VALUES_H)
+    list(APPEND libcsound_CFLAGS -DHAVE_VALUES_H)
+endif()
+#if(CMAKE_C_COMPILER MATCHES "gcc")
+#    list(APPEND libcsound_CFLAGS -fno-strict-aliasing)
+#endif()
+if(BIG_ENDIAN)
+    list(APPEND libcsound_CFLAGS -DWORDS_BIGENDIAN)
+endif()
 
 expand_list(expanded_libcsound_CFLAGS ${libcsound_CFLAGS})
 set_property(
@@ -566,6 +703,26 @@ set_target_properties(${CSOUNDLIB} PROPERTIES
     LIBRARY_OUTPUT_DIRECTORY ${BUILD_LIB_DIR}
     ARCHIVE_OUTPUT_DIRECTORY ${BUILD_LIB_DIR})
 
+
+add_library(${CSOUNDLIB_STATIC} STATIC ${libcsound_SRCS})
+SET_TARGET_PROPERTIES(${CSOUNDLIB_STATIC} PROPERTIES OUTPUT_NAME ${CSOUNDLIB})
+SET_TARGET_PROPERTIES(${CSOUNDLIB_STATIC} PROPERTIES PREFIX "lib")
+set_property(
+    TARGET ${CSOUNDLIB_STATIC}
+    PROPERTY COMPILE_FLAGS "${expanded_libcsound_CFLAGS}")
+
+target_link_libraries(${CSOUNDLIB_STATIC} ${libcsound_LIBS})
+
+set_target_properties(${CSOUNDLIB_STATIC} PROPERTIES
+    RUNTIME_OUTPUT_DIRECTORY ${BUILD_BIN_DIR}
+    LIBRARY_OUTPUT_DIRECTORY ${BUILD_LIB_DIR}
+    ARCHIVE_OUTPUT_DIRECTORY ${BUILD_LIB_DIR})
+
+# Add the install target
+install(TARGETS ${CSOUNDLIB_STATIC}
+    LIBRARY DESTINATION "${LIBRARY_INSTALL_DIR}"
+    ARCHIVE DESTINATION "${LIBRARY_INSTALL_DIR}")
+
 option(BUILD_CATALOG "Build the opcode/library catalog" OFF)
 check_deps(BUILD_CATALOG)
 if(BUILD_CATALOG)
diff --git a/ChangeLog b/ChangeLog
index 251f90d..ba624f6 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,21 @@
+2011-11-30  john ffitch  <jpff at codemist.co.uk>
+
+	* Opcodes/pitch.c (impulse): If next is negative time, make it
+	absolute value
+
+2011-10-28  john ffitch  <jpff at codemist.co.uk>
+
+	* Opcodes/socksend.c (send_send, send_sendS): Added optional
+	format message as INT16_LE and remove MTFU check
+
+2011-10-14  John ff  <jpff at cs.bath.ac.uk>
+
+	* Opcodes/tabvars.c (ftab2tab):
+	(tab2ftab):  New opcodes
+
+2011-10-12 John ff 
+	* VERSION 5.14
+
 2011-06-21  john ffitch  <jpff at codemist.co.uk>
 
 	* Opcodes/wiimote.c (wii_data_init): Return value missing
diff --git a/Engine/auxfd.c b/Engine/auxfd.c
index 53b0197..e5dd419 100644
--- a/Engine/auxfd.c
+++ b/Engine/auxfd.c
@@ -104,7 +104,7 @@ void auxchfree(CSOUND *csound, INSDS *ip)
 {
     if (UNLIKELY(csound->oparms->odebug))
       auxchprint(csound, ip);
-    while (LIKELY(ip->auxchp != NULL)) {            /* for all auxp's in chain: */
+    while (LIKELY(ip->auxchp != NULL)) {        /* for all auxp's in chain: */
       void  *auxp = (void*) ip->auxchp->auxp;
       AUXCH *nxt = ip->auxchp->nxtchp;
       memset((void*) ip->auxchp, 0, sizeof(AUXCH)); /*  delete the pntr     */
@@ -146,7 +146,8 @@ static CS_NOINLINE void auxchprint(CSOUND *csound, INSDS *ip)
       csound->Message(csound, Str("auxlist for instr %s [%d] (%p):\n"),
                       name, ip->insno, ip);
     else
-      csound->Message(csound, Str("auxlist for instr %d (%p):\n"), ip->insno, ip);
+      csound->Message(csound, Str("auxlist for instr %d (%p):\n"),
+                      ip->insno, ip);
     /* chain through auxlocs */
     for (curchp = ip->auxchp; curchp != NULL; curchp = curchp->nxtchp)
       csound->Message(csound,
diff --git a/Engine/corfiles.c b/Engine/corfiles.c
new file mode 100644
index 0000000..f489142
--- /dev/null
+++ b/Engine/corfiles.c
@@ -0,0 +1,190 @@
+/*
+    corfiles.c:
+
+    Copyright (C) 2011 John ffitch
+
+    This file is part of Csound.
+
+    The Csound Library is free software; you can redistribute it
+    and/or modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    Csound 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 Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with Csound; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+    02111-1307 USA
+*/
+
+#include "csoundCore.h"     /*                              CORFILES.C      */
+#include <string.h>
+#include <stdio.h>
+
+extern int csoundFileClose(CSOUND*, void*);
+
+CORFIL *corfile_create_w(void)
+{
+    CORFIL *ans = (CORFIL*)malloc(sizeof(CORFIL));
+    ans->body = (char*)calloc(100,1);
+    ans->len = 100;
+    ans->p = 0;
+    return ans;
+}
+
+CORFIL *corfile_create_r(const char *text)
+{
+    char *strdup(const char *);
+    CORFIL *ans = (CORFIL*)malloc(sizeof(CORFIL));
+    ans->body = strdup(text);
+    ans->len = strlen(text)+1;
+    ans->p = 0;
+    return ans;
+}
+
+void corfile_putc(int c, CORFIL *f)
+{
+    if (f->p+1 >= f->len)
+      f->body = (char*) realloc(f->body, f->len+=100);
+    f->body[f->p] = c;
+    f->body[++f->p] = '\0';
+}
+
+void corfile_puts(char *s, CORFIL *f)
+{
+    int slen = strlen(s);
+    while (f->p+slen+1>=f->len)
+      f->body = (char*) realloc(f->body, f->len+=100);
+    strcat(f->body, s);
+    f->p += slen;
+}
+
+void corfile_flush(CORFIL *f)
+{
+    f->len = strlen(f->body)+1;
+    f->body = (char*)realloc(f->body, f->len);
+    f->p = 0;
+}
+
+#undef corfile_length
+int corfile_length(CORFIL *f)
+{
+    return strlen(f->body);
+}
+
+void corfile_rm(CORFIL **ff)
+{
+    CORFIL *f = *ff;
+    if (f!=NULL) {
+      free(f->body);
+      free(f);
+      *ff = NULL;
+    }
+}
+
+int corfile_getc(CORFIL *f)
+{
+    int c = f->body[f->p];
+    if (c=='\0') return EOF;
+    f->p++;
+    return c;
+}
+
+#undef corfile_ungetc
+void corfile_ungetc(CORFIL *f)
+{
+    --f->p;
+}
+
+MYFLT corfile_get_flt(CORFIL *f)
+{
+    int n;
+    MYFLT ans;
+#ifdef USE_DOUBLE
+    sscanf(&f->body[f->p], "%lf%n", &ans, &n);
+#else
+    sscanf(&f->body[f->p], "%f%n", &ans, &n);
+#endif
+    f->p += n;
+    return ans;
+}
+
+#undef corfile_rewind
+void corfile_rewind(CORFIL *f)
+{
+    f->p = 0;
+}
+
+#undef corfile_reset
+void corfile_reset(CORFIL *f)
+{
+    f->p = 0;
+    f->body[0] = '\0';
+}
+
+#undef corfile_tell
+int corfile_tell(CORFIL *f)
+{
+    return f->p;
+}
+
+#undef corfile_set
+void corfile_set(CORFIL *f, int n)
+{
+    f->p = n;
+}
+
+void corfile_seek(CORFIL *f, int n, int dir)
+{
+    if (dir == SEEK_SET) f->p = n;
+    else if (dir == SEEK_CUR) f->p += n;
+    else if (dir == SEEK_END) f->p = strlen(f->body)-n;
+    if (f->p < 0 || f->p > strlen(f->body)) {
+      printf("INTERNAL ERROR: Corfile seek out of range\n");
+      exit(1);
+    }
+}
+
+
+#undef corfile_body
+char *corfile_body(CORFIL *f)
+{
+    return f->body;
+}
+
+#undef corfile_current
+char *corfile_current(CORFIL *f)
+{
+    return f->body+f->p;
+}
+
+/* *** THIS NEEDS TO TAKE ACCOUNT OF SEARCH PATH *** */
+void *fopen_path(CSOUND *csound, FILE **fp, char *name, char *basename,
+                 char *env, int fromScore);
+CORFIL *copy_to_corefile(CSOUND *csound, char *fname, char *env, int fromScore)
+{
+    CORFIL *mm;
+    FILE *ff;
+    void *fd;
+    int n;
+    char buffer[1024];
+
+    fd = fopen_path(csound, &ff, fname, NULL, env, fromScore);
+    if (ff==NULL) return NULL;
+    mm = corfile_create_w();
+    memset(buffer, '\0', 1024);
+    while ((n = fread(buffer, 1, 1023, ff))) {
+      corfile_puts(buffer, mm);
+      memset(buffer, '\0', 1024);
+    }
+    corfile_putc('\0', mm);     /* For use in bison/flex */
+    corfile_putc('\0', mm);     /* For use in bison/flex */
+    corfile_flush(mm);
+    csoundFileClose(csound, fd);
+    return mm;
+}
+
diff --git a/Engine/cs_par_base.c b/Engine/cs_par_base.c
index 4915156..9a1d7d6 100644
--- a/Engine/cs_par_base.c
+++ b/Engine/cs_par_base.c
@@ -54,7 +54,7 @@ int csp_thread_index_get(CSOUND *csound)
 }
 
 
-/* ************ An implementation of Barriers for MAC that lacks them ******** */
+/* **** An implementation of Barriers for MAC that lacks them **** */
 #ifdef __MACH__
 /*#define BARRIER_SERIAL_THREAD (-1)
 
@@ -194,7 +194,8 @@ void csp_barrier_dealloc(CSOUND *csound, pthread_barrier_t **barrier)
 //
 //void csp_semaphore_wait(CSOUND *csound, sem_t *sem)
 //{
-//    if (UNLIKELY(sem == NULL)) csound->Die(csound, "Invalid NULL Parameter sem");
+//    if (UNLIKELY(sem == NULL))
+//       csound->Die(csound, "Invalid NULL Parameter sem");
 //
 //    TRACE_1("[%i] wait:\n", csp_thread_index_get(csound));
 //    {
@@ -214,10 +215,12 @@ void csp_barrier_dealloc(CSOUND *csound, pthread_barrier_t **barrier)
 //{
 //    /* int val, res; */
 //    /* res = sem_getvalue(sem, &val); */
-//    /* fprintf(stdout, "before sem_grow: %d %i\t", val, csp_thread_index_get(csound)); */
+//    /* fprintf(stdout, "before sem_grow: %d %i\t", 
+//               val, csp_thread_index_get(csound)); */
 //    sem_post(sem);
 //    /* res = sem_getvalue(sem, &val); */
-//    /* fprintf(stdout, "after sem_grow: %d %i\n", val, csp_thread_index_get(csound)); */
+//    /* fprintf(stdout, "after sem_grow: %d %i\n",
+//               val, csp_thread_index_get(csound)); */
 //}
 //
 //void csp_semaphore_release(CSOUND *csound, sem_t *sem)
@@ -246,7 +249,8 @@ void csp_barrier_dealloc(CSOUND *csound, pthread_barrier_t **barrier)
 //void csp_semaphore_release_print(CSOUND *csound, sem_t *sem)
 //{
 //    int val, res;
-//    if (UNLIKELY(sem == NULL)) csound->Die(csound, "Invalid NULL Parameter sem");
+//    if (UNLIKELY(sem == NULL)) 
+//      csound->Die(csound, "Invalid NULL Parameter sem");
 //    res = sem_getvalue(sem, &val);
 //    fprintf(stdout, "sem_release_print: %d %p\n",
 //            val, csp_thread_index_get(csound));
@@ -260,18 +264,24 @@ void csp_barrier_dealloc(CSOUND *csound, pthread_barrier_t **barrier)
 #pragma mark Set
 
 /* static prototypes */
-static int set_element_delloc(CSOUND *csound, struct set_element_t **set_element);
+static int set_element_delloc(CSOUND *csound, 
+                              struct set_element_t **set_element);
 static int set_element_alloc(CSOUND *csound,
-                             struct set_element_t **set_element, char *data);
+                             struct set_element_t **set_element, 
+                             char *data);
 static int set_is_set(CSOUND *csound, struct set_t *set);
-static int set_element_is_set_element(CSOUND *csound,
-                                      struct set_element_t *set_element);
+#if 0
+static int 
+  set_element_is_set_element(CSOUND *csound,
+                             struct set_element_t *set_element);
+#endif
 
 int csp_set_alloc(CSOUND *csound, struct set_t **set,
                   set_element_data_eq *ele_eq_func,
                   set_element_data_print *ele_print_func)
 {
-    if (UNLIKELY(set == NULL)) csound->Die(csound, "Invalid NULL Parameter set");
+    if (UNLIKELY(set == NULL))
+      csound->Die(csound, "Invalid NULL Parameter set");
 
     *set = csound->Malloc(csound, sizeof(struct set_t));
     if (UNLIKELY(*set == NULL)) {
@@ -288,7 +298,7 @@ int csp_set_alloc(CSOUND *csound, struct set_t **set,
 
 int csp_set_dealloc(CSOUND *csound, struct set_t **set)
 {
-    struct set_element_t *ele, *next = NULL;
+    struct set_element_t *ele;
     if (UNLIKELY(set == NULL || *set == NULL))
       csound->Die(csound, "Invalid NULL Parameter set");
     if (UNLIKELY(!set_is_set(csound, *set)))
@@ -298,8 +308,9 @@ int csp_set_dealloc(CSOUND *csound, struct set_t **set)
 
     ele = (*set)->head;
     while (ele != NULL) {
-      next = ele->next;
+      struct set_element_t *next = ele->next;
       set_element_delloc(csound, &ele);
+      ele = next;
     }
 
     csound->Free(csound, *set);
@@ -309,7 +320,8 @@ int csp_set_dealloc(CSOUND *csound, struct set_t **set)
 }
 
 static int set_element_alloc(CSOUND *csound,
-                             struct set_element_t **set_element, char *data)
+                             struct set_element_t **set_element,
+                             char *data)
 {
     if (UNLIKELY(set_element == NULL || data == NULL))
       csound->Die(csound, "Invalid NULL Parameter data");
@@ -325,7 +337,8 @@ static int set_element_alloc(CSOUND *csound,
     return CSOUND_SUCCESS;
 }
 
-static int set_element_delloc(CSOUND *csound, struct set_element_t **set_element)
+static int set_element_delloc(CSOUND *csound,
+                              struct set_element_t **set_element)
 {
     if (UNLIKELY(set_element == NULL || *set_element == NULL))
       csound->Die(csound, "Invalid NULL Parameter set_element");
@@ -344,8 +357,10 @@ static int set_is_set(CSOUND *csound, struct set_t *set)
     return strcmp(buf, SET_HDR) == 0;
 }
 
-static int set_element_is_set_element(CSOUND *csound,
-                                      struct set_element_t *set_element)
+#if 0
+static int 
+  set_element_is_set_element(CSOUND *csound,
+                             struct set_element_t *set_element)
 {
     char buf[4];
     if (set_element == NULL) return 0;
@@ -353,11 +368,13 @@ static int set_element_is_set_element(CSOUND *csound,
     buf[3] = 0;
     return strcmp(buf, SET_ELEMENT_HDR) == 0;
 }
+#endif
 
 int csp_set_alloc_string(CSOUND *csound, struct set_t **set)
 {
     return csp_set_alloc(csound, set,
-                         csp_set_element_string_eq, csp_set_element_string_print);
+                         csp_set_element_string_eq,
+                         csp_set_element_string_print);
 }
 
 int csp_set_element_string_eq(struct set_element_t *ele1,
@@ -366,17 +383,20 @@ int csp_set_element_string_eq(struct set_element_t *ele1,
     return strcmp((char *)ele1->data, (char *)ele2->data) == 0;
 }
 
-int csp_set_element_ptr_eq(struct set_element_t *ele1, struct set_element_t *ele2)
+int csp_set_element_ptr_eq(struct set_element_t *ele1,
+                           struct set_element_t *ele2)
 {
     return (ele1->data == ele2->data);
 }
 
-void csp_set_element_string_print(CSOUND *csound, struct set_element_t *ele)
+void csp_set_element_string_print(CSOUND *csound,
+                                  struct set_element_t *ele)
 {
     csound->Message(csound, "%s", (char *)ele->data);
 }
 
-void csp_set_element_ptr_print(CSOUND *csound, struct set_element_t *ele)
+void csp_set_element_ptr_print(CSOUND *csound,
+                               struct set_element_t *ele)
 {
     csound->Message(csound, "%p", ele->data);
 }
@@ -390,8 +410,9 @@ static int set_update_cache(CSOUND *csound, struct set_t *set)
     if (set->count > 0) {
       struct set_element_t *ele;
       int ctr = 0;
-      set->cache = csound->Malloc(csound,
-                                  sizeof(struct set_element_t *) * set->count);
+      set->cache = 
+        csound->Malloc(csound,
+                       sizeof(struct set_element_t *) * set->count);
       ele = set->head;
       while (ele != NULL) {
         set->cache[ctr] = ele;
@@ -403,15 +424,18 @@ static int set_update_cache(CSOUND *csound, struct set_t *set)
 }
 
 /*
- * if out_set_element is not NULL and the element corresponding to data is not found
- * it will not be changed
+ * if out_set_element is not NULL and the element corresponding to
+ * data is not found it will not be changed
  */
 static int set_element_get(CSOUND *csound, struct set_t *set,
-                           char *data, struct set_element_t **out_set_element)
+                           char *data,
+                           struct set_element_t **out_set_element)
 {
 #ifdef SET_DEBUG
-    if (UNLIKELY(set == NULL)) csound->Die(csound, "Invalid NULL Parameter set");
-    if (UNLIKELY(data == NULL)) csound->Die(csound, "Invalid NULL Parameter data");
+    if (UNLIKELY(set == NULL))
+      csound->Die(csound, "Invalid NULL Parameter set");
+    if (UNLIKELY(data == NULL))
+      csound->Die(csound, "Invalid NULL Parameter data");
     if (UNLIKELY(out_set_element == NULL))
       csound->Die(csound, "Invalid NULL Parameter out_set_element");
 #endif
@@ -433,8 +457,10 @@ int csp_set_add(CSOUND *csound, struct set_t *set, void *data)
 {
     struct set_element_t *ele = NULL;
 #ifdef SET_DEBUG
-    if (UNLIKELY(set == NULL)) csound->Die(csound, "Invalid NULL Parameter set");
-    if (UNLIKELY(data == NULL)) csound->Die(csound, "Invalid NULL Parameter data");
+    if (UNLIKELY(set == NULL))
+      csound->Die(csound, "Invalid NULL Parameter set");
+    if (UNLIKELY(data == NULL))
+      csound->Die(csound, "Invalid NULL Parameter data");
 #endif
 
     if (csp_set_exists(csound, set, data)) {
@@ -460,8 +486,10 @@ int csp_set_add(CSOUND *csound, struct set_t *set, void *data)
 int csp_set_remove(CSOUND *csound, struct set_t *set, void *data)
 {
 #ifdef SET_DEBUG
-    if (UNLIKELY(set == NULL)) csound->Die(csound, "Invalid NULL Parameter set");
-    if (UNLIKELY(data == NULL)) csound->Die(csound, "Invalid NULL Parameter data");
+    if (UNLIKELY(set == NULL))
+      csound->Die(csound, "Invalid NULL Parameter set");
+    if (UNLIKELY(data == NULL))
+      csound->Die(csound, "Invalid NULL Parameter data");
 #endif
     {
       struct set_element_t *ele = set->head, *prev = NULL;
@@ -495,10 +523,11 @@ int csp_set_exists(CSOUND *csound, struct set_t *set, void *data)
 {
     struct set_element_t *ele = NULL;
 #ifdef SET_DEBUG
-    if (UNLIKELY(set == NULL)) csound->Die(csound, "Invalid NULL Parameter set");
-    if (UNLIKELY(data == NULL)) csound->Die(csound, "Invalid NULL Parameter data");
+    if (UNLIKELY(set == NULL))
+      csound->Die(csound, "Invalid NULL Parameter set");
+    if (UNLIKELY(data == NULL))
+      csound->Die(csound, "Invalid NULL Parameter data");
 #endif
-
     set_element_get(csound, set, data, &ele);
 
     return (ele == NULL ? 0 : 1);
@@ -508,7 +537,8 @@ int csp_set_print(CSOUND *csound, struct set_t *set)
 {
     struct set_element_t *ele;
 #ifdef SET_DEBUG
-    if (UNLIKELY(set == NULL)) csound->Die(csound, "Invalid NULL Parameter set");
+    if (UNLIKELY(set == NULL))
+      csound->Die(csound, "Invalid NULL Parameter set");
     if (UNLIKELY(!set_is_set(csound, set)))
       csound->Die(csound, "Invalid Parameter set not a set");
 #endif
@@ -532,7 +562,8 @@ int csp_set_print(CSOUND *csound, struct set_t *set)
 int inline csp_set_count(CSOUND *csound, struct set_t *set)
 {
 #ifdef SET_DEBUG
-    if (UNLIKELY(set == NULL)) csound->Die(csound, "Invalid NULL Parameter set");
+    if (UNLIKELY(set == NULL))
+      csound->Die(csound, "Invalid NULL Parameter set");
     if (UNLIKELY(!set_is_set(csound, set)))
       csound->Die(csound, "Invalid Parameter set not a set");
 #endif
@@ -541,15 +572,18 @@ int inline csp_set_count(CSOUND *csound, struct set_t *set)
 }
 
 /* 0 indexed */
-int inline csp_set_get_num(CSOUND *csound, struct set_t *set, int num, void **data)
+int inline csp_set_get_num(CSOUND *csound,
+                           struct set_t *set, int num, void **data)
 {
 #ifdef SET_DEBUG
-    if (UNLIKELY(set == NULL)) csound->Die(csound, "Invalid NULL Parameter set");
+    if (UNLIKELY(set == NULL))
+      csound->Die(csound, "Invalid NULL Parameter set");
     if (UNLIKELY(!set_is_set(csound, set)))
       csound->Die(csound, "Invalid Parameter set not a set");
     if (UNLIKELY(um >= set->count))
       csound->Die(csound, "Invalid Parameter num is out of bounds");
-    if (UNLIKELY(data == NULL)) csound->Die(csound, "Invalid NULL Parameter data");
+    if (UNLIKELY(data == NULL))
+      csound->Die(csound, "Invalid NULL Parameter data");
 #endif
 
     *data = set->cache[num]->data;
@@ -590,10 +624,12 @@ int csp_set_union(CSOUND *csound, struct set_t *first,
     if (UNLIKELY(result == NULL))
  csound->Die(csound, "Invalid NULL Parameter result");
     if (UNLIKELY(first->ele_eq_func != second->ele_eq_func))
-      csound->Die(csound, "Invalid sets for comparison (different equality)");
+      csound->Die(csound,
+                  "Invalid sets for comparison (different equality)");
 #endif
 
-    csp_set_alloc(csound, result, first->ele_eq_func, first->ele_print_func);
+    csp_set_alloc(csound, result,
+                  first->ele_eq_func, first->ele_print_func);
 
     first_len = csp_set_count(csound, first);
     second_len = csp_set_count(csound, second);
@@ -623,21 +659,22 @@ int csp_set_intersection(CSOUND *csound, struct set_t *first,
     int first_len;
 #ifdef SET_DEBUG
     if (UNLIKELY(first == NULL))
- csound->Die(csound, "Invalid NULL Parameter first");
+      csound->Die(csound, "Invalid NULL Parameter first");
     if (UNLIKELY(!set_is_set(csound, first)))
       csound->Die(csound, "Invalid Parameter set not a first");
     if (UNLIKELY(second == NULL))
- csound->Die(csound, "Invalid NULL Parameter second");
+      csound->Die(csound, "Invalid NULL Parameter second");
     if (UNLIKELY(!set_is_set(csound, second)))
       csound->Die(csound, "Invalid Parameter set not a second");
     if (UNLIKELY(result == NULL))
- csound->Die(csound, "Invalid NULL Parameter result");
+      csound->Die(csound, "Invalid NULL Parameter result");
     if (UNLIKELY(first->ele_eq_func != second->ele_eq_func))
-
-      csound->Die(csound, "Invalid sets for comparison (different equality)");
+      csound->Die(csound,
+                  "Invalid sets for comparison (different equality)");
 #endif
 
-    csp_set_alloc(csound, result, first->ele_eq_func, first->ele_print_func);
+    csp_set_alloc(csound, result,
+                  first->ele_eq_func, first->ele_print_func);
 
     first_len = csp_set_count(csound, first);
 
diff --git a/Engine/cs_par_dispatch.c b/Engine/cs_par_dispatch.c
index 4058c7d..2b35dc6 100644
--- a/Engine/cs_par_dispatch.c
+++ b/Engine/cs_par_dispatch.c
@@ -32,6 +32,7 @@
 #include "cs_par_dispatch.h"
 
 #include "cs_par_ops.h"
+#include "cs_par_structs.h"
 
 /***********************************************************************
  * external prototypes not in headers
@@ -102,40 +103,43 @@ struct global_var_lock_t {
   struct global_var_lock_t    *next;
 };
 
-static struct global_var_lock_t *global_var_lock_root;
-static int global_var_lock_count;
-static struct global_var_lock_t **global_var_lock_cache;
+//static struct global_var_lock_t *global_var_lock_root;
+//static int global_var_lock_count;
+//static struct global_var_lock_t **global_var_lock_cache;
 
 
 void inline csp_locks_lock(CSOUND * csound, int global_index)
 {
-    if (UNLIKELY(global_index >= global_var_lock_count)) {
-      csound->Die(csound, Str("Poorly specified global lock index: %i [max: %i]\n"),
-                  global_index, global_var_lock_count);
+    if (UNLIKELY(global_index >= csound->global_var_lock_count)) {
+      csound->Die(csound,
+                  Str("Poorly specified global lock index: %i [max: %i]\n"),
+                  global_index, csound->global_var_lock_count);
     }
     TRACE_2("Locking:   %i [%p %s]\n", global_index,
-            global_var_lock_cache[global_index],
-            global_var_lock_cache[global_index]->name);
-    TAKE_LOCK(&(global_var_lock_cache[global_index]->lock));
+            csound->global_var_lock_cache[global_index],
+            csound->global_var_lock_cache[global_index]->name);
+    TAKE_LOCK(&(csound->global_var_lock_cache[global_index]->lock));
 }
 
 void inline csp_locks_unlock(CSOUND * csound, int global_index)
 {
-    if (UNLIKELY(global_index >= global_var_lock_count)) {
-      csound->Die(csound, Str("Poorly specified global lock index: %i [max: %i]\n"),
-                  global_index, global_var_lock_count);
+    if (UNLIKELY(global_index >= csound->global_var_lock_count)) {
+      csound->Die(csound,
+                  Str("Poorly specified global lock index: %i [max: %i]\n"),
+                  global_index, csound->global_var_lock_count);
     }
-    RELS_LOCK(&(global_var_lock_cache[global_index]->lock));
+    RELS_LOCK(&(csound->global_var_lock_cache[global_index]->lock));
     TRACE_2("UnLocking: %i [%p %s]\n",
-            global_index, global_var_lock_cache[global_index],
-            global_var_lock_cache[global_index]->name);
+            global_index, csound->global_var_lock_cache[global_index],
+            csound->global_var_lock_cache[global_index]->name);
 }
 
 static struct global_var_lock_t *global_var_lock_alloc(CSOUND *csound,
                                                        char *name, int index)
 {
     if (UNLIKELY(name == NULL))
-      csound->Die(csound, Str("Invalid NULL parameter name for a global variable\n"));
+      csound->Die(csound,
+                  Str("Invalid NULL parameter name for a global variable\n"));
 
     struct global_var_lock_t *ret =
       csound->Malloc(csound, sizeof(struct global_var_lock_t));
@@ -145,23 +149,25 @@ static struct global_var_lock_t *global_var_lock_alloc(CSOUND *csound,
     ret->name = name;
     ret->index = index;
 
-    global_var_lock_count++;
+    csound->global_var_lock_count++;
 
     return ret;
 }
 
-static struct global_var_lock_t *global_var_lock_find(CSOUND *csound, char *name)
+static struct global_var_lock_t 
+  *global_var_lock_find(CSOUND *csound, char *name)
 {
     if (UNLIKELY(name == NULL))
       csound->Die(csound,
                   Str("Invalid NULL parameter name for a global variable\n"));
 
-    if (global_var_lock_root == NULL) {
-      global_var_lock_root = global_var_lock_alloc(csound, name, 0);
-      return global_var_lock_root;
+    if (csound->global_var_lock_root == NULL) {
+      csound->global_var_lock_root = global_var_lock_alloc(csound, name, 0);
+      return csound->global_var_lock_root;
     }
     else {
-      struct global_var_lock_t *current = global_var_lock_root, *previous = NULL;
+      struct global_var_lock_t *current = csound->global_var_lock_root,
+        *previous = NULL;
       int ctr = 0;
       while (current != NULL) {
         if (strcmp(current->name, name) == 0) {
@@ -184,17 +190,18 @@ static struct global_var_lock_t *global_var_lock_find(CSOUND *csound, char *name
 /* static void locks_print(CSOUND *csound)
    {
    csound->Message(csound, Str("Current Global Locks\n"));
-   struct global_var_lock_t *current_global = global_var_lock_root;
-   while (current_global != NULL) {
-   csound->Message(csound, "[%i] %s [%p]\n", current_global->index,
-   current_global->name, current_global);
-   current_global = current_global->next;
+   struct global_var_lock_t *cg = csound->global_var_lock_root;
+   while (cg != NULL) {
+   csound->Message(csound, "[%i] %s [%p]\n", cg->index,
+                   cg->name, cg);
+   cg = cg->next;
    }
    } */
 
 TREE *csp_locks_insert(CSOUND *csound, TREE *root)
 {
-    csound->Message(csound, "Inserting Parallelism Constructs into AST\n");
+    csound->Message(csound,
+                    "Inserting Parallelism Constructs into AST\n");
 
     TREE *anchor = NULL;
 
@@ -204,8 +211,9 @@ TREE *csp_locks_insert(CSOUND *csound, TREE *root)
 
     while(current != NULL) {
       switch(current->type) {
-      case T_INSTR:
-        instr = csp_orc_sa_instr_get_by_name(current->left->value->lexeme);
+      case INSTR_TOKEN:
+        instr = csp_orc_sa_instr_get_by_name(csound,
+                                             current->left->value->lexeme);
         if (instr->read_write->count > 0 &&
             instr->read->count == 0 &&
             instr->write->count == 0) {
@@ -213,12 +221,12 @@ TREE *csp_locks_insert(CSOUND *csound, TREE *root)
         }
         break;
 
-      case T_UDO:
-      case T_IF:
+      case UDO_TOKEN:
+      case IF_TOKEN:
         break;
 
       default:
-        if (current->type == S_ASSIGN) {
+        if (current->type == '=') {
           struct set_t *left = NULL, *right  = NULL;
           left = csp_orc_sa_globals_find(csound, current->left);
           right = csp_orc_sa_globals_find(csound, current->right);
@@ -243,10 +251,10 @@ TREE *csp_locks_insert(CSOUND *csound, TREE *root)
             ORCTOKEN *unlock_tok = lookup_token(csound, "##globalunlock");
             ORCTOKEN *var_tok    = make_int(csound, buf);
 
-            TREE *lock_leaf = make_leaf(csound, T_OPCODE, lock_tok);
-            lock_leaf->right = make_leaf(csound, T_INTGR, var_tok);
-            TREE *unlock_leaf = make_leaf(csound, T_OPCODE, unlock_tok);
-            unlock_leaf->right = make_leaf(csound, T_INTGR, var_tok);
+            TREE *lock_leaf = make_leaf(csound, current->line, T_OPCODE, lock_tok);
+            lock_leaf->right = make_leaf(csound, current->line, INTEGER_TOKEN, var_tok);
+            TREE *unlock_leaf = make_leaf(csound, current->line, T_OPCODE, unlock_tok);
+            unlock_leaf->right = make_leaf(csound, current->line, INTEGER_TOKEN, var_tok);
 
             if (previous == NULL) {
               TREE *old_current = lock_leaf;
@@ -279,7 +287,8 @@ TREE *csp_locks_insert(CSOUND *csound, TREE *root)
 
     }
 
-    csound->Message(csound, "[End Inserting Parallelism Constructs into AST]\n");
+    csound->Message(csound,
+                    "[End Inserting Parallelism Constructs into AST]\n");
 
     return anchor;
 }
@@ -288,26 +297,28 @@ void csp_locks_cache_build(CSOUND *csound)
 {
     int ctr = 0;
     struct global_var_lock_t *glob;
-    if (UNLIKELY(global_var_lock_count < 1)) {
+    if (UNLIKELY(csound->global_var_lock_count < 1)) {
       return;
     }
 
-    global_var_lock_cache =
+    csound->global_var_lock_cache =
       csound->Malloc(csound,
-                     sizeof(struct global_var_lock_t *) * global_var_lock_count);
+                     sizeof(struct global_var_lock_t *) *
+                     csound->global_var_lock_count);
 
-    glob = global_var_lock_root;
-    while (glob != NULL && ctr < global_var_lock_count) {
-      global_var_lock_cache[ctr] = glob;
+    glob = csound->global_var_lock_root;
+    while (glob != NULL && ctr < csound->global_var_lock_count) {
+      csound->global_var_lock_cache[ctr] = glob;
       glob = glob->next;
       ctr++;
     }
 
     /* csound->Message(csound, "Global Locks Cache\n");
        ctr = 0;
-       while (ctr < global_var_lock_count) {
-       csound->Message(csound, "[%i] %s\n", global_var_lock_cache[ctr]->index,
-       global_var_lock_cache[ctr]->name);
+       while (ctr < csound->global_var_lock_count) {
+       csound->Message(csound, "[%i] %s\n", 
+                       csound->global_var_lock_cache[ctr]->index,
+       csound->global_var_lock_cache[ctr]->name);
        ctr++;
        } */
 }
@@ -333,7 +344,8 @@ int globalunlock(CSOUND *csound, GLOBAL_LOCK_UNLOCK *p)
 #pragma mark -
 #pragma mark Instr weightings
 
-/* static struct instr_weight_info_t *instr_weight_info_alloc(CSOUND *csound)
+/* static struct instr_weight_info_t 
+   *instr_weight_info_alloc(CSOUND *csound)
    {
    struct instr_weight_info_t *ret =
    csound->Malloc(csound, sizeof(struct instr_weight_info_t));
@@ -357,25 +369,29 @@ static void csp_weights_calculate_instr(CSOUND *csound, TREE *root,
 
     while(current != NULL) {
       switch(current->type) {
-      case T_INSTR:
-        nested_instr = csp_orc_sa_instr_get_by_name(current->left->value->lexeme);
+      case INSTR_TOKEN:
+        nested_instr = 
+          csp_orc_sa_instr_get_by_name(csound,
+                                       current->left->value->lexeme);
         /* if (nested_instr->weight == NULL) {
            nested_instr->weight = instr_weight_info_alloc(csound);
            } */
-        csp_weights_calculate_instr(csound, current->right, nested_instr);
+        csp_weights_calculate_instr(csound,
+                                    current->right, nested_instr);
         break;
 
 #ifdef LOOKUP_WEIGHTS
       case T_OPCODE:
       case T_OPCODE0:
-        instr->weight += csp_opcode_weight_fetch(csound, current->value->lexeme);
+        instr->weight += csp_opcode_weight_fetch(csound,
+                                                 current->value->lexeme);
         break;
 #else
       case T_OPCODE:
       case T_OPCODE0:
         instr->weight += WEIGHT_OPCODE_NODE;
         break;
-      case S_ASSIGN:
+      case '=':
         instr->weight += WEIGHT_S_ASSIGN_NODE;
         break;
 #endif
@@ -391,7 +407,8 @@ static void csp_weights_calculate_instr(CSOUND *csound, TREE *root,
       current = current->next;
     }
 
-    csound->Message(csound, "[End Calculating Instrument weight from AST]\n");
+    csound->Message(csound,
+                    "[End Calculating Instrument weight from AST]\n");
 }
 
 void csp_weights_calculate(CSOUND *csound, TREE *root)
@@ -403,8 +420,9 @@ void csp_weights_calculate(CSOUND *csound, TREE *root)
 
     while(current != NULL) {
       switch(current->type) {
-      case T_INSTR:
-        instr = csp_orc_sa_instr_get_by_name(current->left->value->lexeme);
+      case INSTR_TOKEN:
+        instr = csp_orc_sa_instr_get_by_name(csound,
+                                             current->left->value->lexeme);
         /* if (instr->weight == NULL) {
            instr->weight = instr_weight_info_alloc(csound);
            } */
@@ -418,7 +436,8 @@ void csp_weights_calculate(CSOUND *csound, TREE *root)
       current = current->next;
     }
 
-    csound->Message(csound, "[End Calculating Instrument weights from AST]\n");
+    csound->Message(csound,
+                    "[End Calculating Instrument weights from AST]\n");
 }
 
 static void csp_orc_sa_opcode_dump_instr(CSOUND *csound, TREE *root)
@@ -427,7 +446,7 @@ static void csp_orc_sa_opcode_dump_instr(CSOUND *csound, TREE *root)
 
     while(current != NULL) {
       switch(current->type) {
-      case T_INSTR:
+      case INSTR_TOKEN:
         break;
 
       case T_OPCODE:
@@ -435,7 +454,7 @@ static void csp_orc_sa_opcode_dump_instr(CSOUND *csound, TREE *root)
         csound->Message(csound, "OPCODE: %s\n", current->value->lexeme);
         break;
 
-      case S_ASSIGN:
+      case '=':
         break;
 
       default:
@@ -456,7 +475,7 @@ void csp_orc_sa_opcode_dump(CSOUND *csound, TREE *root)
 
     while(current != NULL) {
       switch(current->type) {
-      case T_INSTR:
+      case INSTR_TOKEN:
         csp_orc_sa_opcode_dump_instr(csound, current->right);
         break;
 
@@ -486,19 +505,21 @@ struct opcode_weight_cache_entry_t {
   uint32_t                            weight;
 };
 
-#define OPCODE_WEIGHT_CACHE_SIZE     128
+//#define OPCODE_WEIGHT_CACHE_SIZE     128
 
-static int opcode_weight_cache_ctr;
-static struct opcode_weight_cache_entry_t *
-       opcode_weight_cache[OPCODE_WEIGHT_CACHE_SIZE];
+//static int opcode_weight_cache_ctr;
+//static struct opcode_weight_cache_entry_t *
+//       opcode_weight_cache[OPCODE_WEIGHT_CACHE_SIZE];
 
-static int opcode_weight_have_cache;
+//static int opcode_weight_have_cache;
 
-static void opcode_weight_entry_add(CSOUND *csound, char *name, uint32_t weight);
+static void opcode_weight_entry_add(CSOUND *csound,
+                                    char *name, uint32_t weight);
 
-static int opcode_weight_entry_alloc(CSOUND *csound,
-                                     struct opcode_weight_cache_entry_t **entry,
-                                     char *name, uint32_t weight, uint32_t hash_val)
+static int 
+  opcode_weight_entry_alloc(CSOUND *csound,
+                            struct opcode_weight_cache_entry_t **entry,
+                            char *name, uint32_t weight, uint32_t hash_val)
 {
 #ifdef CAUTIOUS
     if (UNLIKELY(entry == NULL))
@@ -507,9 +528,11 @@ static int opcode_weight_entry_alloc(CSOUND *csound,
       csound->Die(csound, Str("Invalid NULL Parameter name"));
 #endif
 
-    *entry = csound->Malloc(csound, sizeof(struct opcode_weight_cache_entry_t));
+    *entry = csound->Malloc(csound,
+                            sizeof(struct opcode_weight_cache_entry_t));
     if (UNLIKELY(*entry == NULL)) {
-      csound->Die(csound, Str("Failed to allocate Opcode Weight cache entry"));
+      csound->Die(csound,
+                  Str("Failed to allocate Opcode Weight cache entry"));
     }
     memset(*entry, 0, sizeof(struct opcode_weight_cache_entry_t));
 
@@ -520,8 +543,10 @@ static int opcode_weight_entry_alloc(CSOUND *csound,
     return CSOUND_SUCCESS;
 }
 
-static int opcode_weight_entry_dealloc(CSOUND *csound,
-                                       struct opcode_weight_cache_entry_t **entry)
+#if 0
+static int 
+  opcode_weight_entry_dealloc(CSOUND *csound,
+                              struct opcode_weight_cache_entry_t **entry)
 {
 #ifdef CAUTIOUS
     if (UNLIKELY(entry == NULL || *entry == NULL))
@@ -533,6 +558,7 @@ static int opcode_weight_entry_dealloc(CSOUND *csound,
 
     return CSOUND_SUCCESS;
 }
+#endif
 
 uint32_t csp_opcode_weight_fetch(CSOUND *csound, char *name)
 {
@@ -541,12 +567,13 @@ uint32_t csp_opcode_weight_fetch(CSOUND *csound, char *name)
       csound->Die(csound, Str("Invalid NULL Parameter name"));
 #endif
 
-    if (opcode_weight_have_cache == 0) {
+    if (csound->opcode_weight_have_cache == 0) {
       return WEIGHT_OPCODE_NODE;
     }
     else {
       uint32_t hash_val = hash_string(name, OPCODE_WEIGHT_CACHE_SIZE);
-      struct opcode_weight_cache_entry_t *curr = opcode_weight_cache[hash_val];
+      struct opcode_weight_cache_entry_t *curr =
+        csound->opcode_weight_cache[hash_val];
       while (curr != NULL) {
         if (UNLIKELY(strcmp(curr->name, name) == 0)) {
           return curr->weight;
@@ -554,7 +581,8 @@ uint32_t csp_opcode_weight_fetch(CSOUND *csound, char *name)
         curr = curr->next;
       }
       /* no weight for this opcode use default */
-      csound->Message(csound, "WARNING: no weight found for opcode: %s\n", name);
+      csound->Message(csound,
+                      "WARNING: no weight found for opcode: %s\n", name);
       return WEIGHT_OPCODE_NODE;
     }
 }
@@ -566,12 +594,13 @@ void csp_opcode_weight_set(CSOUND *csound, char *name, double play_time)
       csound->Die(csound, Str("Invalid NULL Parameter name"));
 #endif
 
-    if (opcode_weight_have_cache == 0) {
+    if (csound->opcode_weight_have_cache == 0) {
       return;
     }
     else {
       uint32_t hash_val = hash_string(name, OPCODE_WEIGHT_CACHE_SIZE);
-      struct opcode_weight_cache_entry_t *curr = opcode_weight_cache[hash_val];
+      struct opcode_weight_cache_entry_t *curr =
+        csound->opcode_weight_cache[hash_val];
       TRACE_0("Adding %s [%u]\n", name, hash_val);
 
       while (curr != NULL) {
@@ -598,7 +627,8 @@ void csp_opcode_weight_set(CSOUND *csound, char *name, double play_time)
     }
 }
 
-static void opcode_weight_entry_add(CSOUND *csound, char *name, uint32_t weight)
+static void opcode_weight_entry_add(CSOUND *csound,
+                                    char *name, uint32_t weight)
 {
 #ifdef CAUTIOUS
     if (UNLIKELY(name == NULL))
@@ -606,7 +636,8 @@ static void opcode_weight_entry_add(CSOUND *csound, char *name, uint32_t weight)
 #endif
 
     uint32_t hash_val = hash_string(name, OPCODE_WEIGHT_CACHE_SIZE);
-    struct opcode_weight_cache_entry_t *curr = opcode_weight_cache[hash_val];
+    struct opcode_weight_cache_entry_t *curr =
+      csound-> opcode_weight_cache[hash_val];
     int found = 0;
     TRACE_0("entry_add %s [%u]\n", name, hash_val);
     while (curr != NULL) {
@@ -619,27 +650,30 @@ static void opcode_weight_entry_add(CSOUND *csound, char *name, uint32_t weight)
     if (found == 0) {
       TRACE_0("Allocing %s\n", name);
       opcode_weight_entry_alloc(csound, &curr, name, weight, hash_val);
-      opcode_weight_cache_ctr++;
+      csound->opcode_weight_cache_ctr++;
 
-      curr->next = opcode_weight_cache[hash_val];
-      opcode_weight_cache[hash_val] = curr;
+      curr->next = csound->opcode_weight_cache[hash_val];
+      csound->opcode_weight_cache[hash_val] = curr;
     }
 }
 
 void csp_weights_dump(CSOUND *csound)
 {
-    if (UNLIKELY(opcode_weight_have_cache == 0)) {
-          csound->Message(csound, Str("No Weights to Dump (Using Defaults)\n"));
+    if (UNLIKELY(csound->opcode_weight_have_cache == 0)) {
+          csound->Message(csound,
+                          Str("No Weights to Dump (Using Defaults)\n"));
       return;
     }
     else {
       uint32_t bin_ctr = 0;
       csound->Message(csound, "Weights Dump\n");
       while (bin_ctr < OPCODE_WEIGHT_CACHE_SIZE) {
-        struct opcode_weight_cache_entry_t *entry = opcode_weight_cache[bin_ctr];
+        struct opcode_weight_cache_entry_t *entry =
+          csound->opcode_weight_cache[bin_ctr];
 
         while (entry != NULL) {
-          csound->Message(csound, "%s => %u\n", entry->name, entry->weight);
+          csound->Message(csound, "%s => %u\n",
+                          entry->name, entry->weight);
           entry = entry->next;
         }
 
@@ -655,7 +689,7 @@ void csp_weights_dump_file(CSOUND *csound)
     FILE *f;
     uint32_t bin_ctr = 0;
     double min = 0, max = 0;
-    if (UNLIKELY(opcode_weight_have_cache == 0)) {
+    if (UNLIKELY(csound->opcode_weight_have_cache == 0)) {
       csound->Message(csound, "No Weights to Dump to file\n");
       return;
     }
@@ -667,11 +701,13 @@ void csp_weights_dump_file(CSOUND *csound)
 
     f = fopen(path, "w+");
     if (UNLIKELY(f == NULL)) {
-      csound->Die(csound, Str("Opcode Weight Spec File not found at: %s"), path);
+      csound->Die(csound,
+                  Str("Opcode Weight Spec File not found at: %s"), path);
     }
 
     while (bin_ctr < OPCODE_WEIGHT_CACHE_SIZE) {
-      struct opcode_weight_cache_entry_t *entry = opcode_weight_cache[bin_ctr];
+      struct opcode_weight_cache_entry_t *entry =
+        csound->opcode_weight_cache[bin_ctr];
 
       while (entry != NULL) {
         if (min == 0) {
@@ -696,7 +732,8 @@ void csp_weights_dump_file(CSOUND *csound)
 
       bin_ctr = 0;
       while (bin_ctr < OPCODE_WEIGHT_CACHE_SIZE) {
-        struct opcode_weight_cache_entry_t *entry = opcode_weight_cache[bin_ctr];
+        struct opcode_weight_cache_entry_t *entry =
+          csound->opcode_weight_cache[bin_ctr];
 
         while (entry != NULL) {
           uint32_t weight = floor((entry->play_time - min) * scale) + 1;
@@ -714,14 +751,15 @@ void csp_weights_dump_normalised(CSOUND *csound)
 {
     uint32_t bin_ctr = 0;
     double min = 0, max = 0;
-    if (UNLIKELY(opcode_weight_have_cache == 0)) {
+    if (UNLIKELY(csound->opcode_weight_have_cache == 0)) {
       csound->Message(csound, Str("No Weights to Dump (Using Defaults)\n"));
       return;
     }
 
     csound->Message(csound, Str("Weights Dump\n"));
     while (bin_ctr < OPCODE_WEIGHT_CACHE_SIZE) {
-      struct opcode_weight_cache_entry_t *entry = opcode_weight_cache[bin_ctr];
+      struct opcode_weight_cache_entry_t *entry =
+        csound->opcode_weight_cache[bin_ctr];
 
       while (entry != NULL) {
         if (min == 0) {
@@ -751,7 +789,8 @@ void csp_weights_dump_normalised(CSOUND *csound)
 
       bin_ctr = 0;
       while (bin_ctr < OPCODE_WEIGHT_CACHE_SIZE) {
-        struct opcode_weight_cache_entry_t *entry = opcode_weight_cache[bin_ctr];
+        struct opcode_weight_cache_entry_t *entry =
+          csound->opcode_weight_cache[bin_ctr];
 
         while (entry != NULL) {
           uint32_t weight = floor((entry->play_time - min) * scale) + 1;
@@ -781,17 +820,19 @@ void csp_weights_load(CSOUND *csound)
     int col = 0;
     int c;
     if (path == NULL) {
-      opcode_weight_have_cache = 0;
+      csound->opcode_weight_have_cache = 0;
       return;
     }
-    opcode_weight_have_cache = 1;
+    csound->opcode_weight_have_cache = 1;
 
-    memset(opcode_weight_cache, 0,
-           sizeof(struct opcode_weight_cache_entry_t *) * OPCODE_WEIGHT_CACHE_SIZE);
+    memset(csound->opcode_weight_cache, 0,
+           sizeof(struct opcode_weight_cache_entry_t *) *
+           OPCODE_WEIGHT_CACHE_SIZE);
 
     f = fopen(path, "r");
     if (UNLIKELY(f == NULL)) {
-      csound->Die(csound, Str("Opcode Weight Spec File not found at: %s"), path);
+      csound->Die(csound,
+                  Str("Opcode Weight Spec File not found at: %s"), path);
     }
 
     while ((c = fgetc(f)) != EOF) {
@@ -958,7 +999,8 @@ static inline void csp_dag_prepare_use_insds(CSOUND *csound, DAG *dag,
 void csp_dag_alloc(CSOUND *csound, DAG **dag)
 {
 #ifdef CAUTIOUS
-    if (UNLIKELY(dag == NULL)) csound->Die(csound, Str("Invalid NULL Parameter dag"));
+    if (UNLIKELY(dag == NULL))
+      csound->Die(csound, Str("Invalid NULL Parameter dag"));
 #endif
 
     *dag = (DAG*)csound->Malloc(csound, sizeof(DAG));
@@ -994,7 +1036,8 @@ void csp_dag_dealloc(CSOUND *csound, DAG **dag)
     if ((*dag)->all          != NULL) csound->Free(csound, (*dag)->all);
     if ((*dag)->roots_ori    != NULL) csound->Free(csound, (*dag)->roots_ori);
     if ((*dag)->roots        != NULL) csound->Free(csound, (*dag)->roots);
-    if ((*dag)->root_seen_ori!= NULL) csound->Free(csound, (*dag)->root_seen_ori);
+    if ((*dag)->root_seen_ori!= NULL)
+      csound->Free(csound, (*dag)->root_seen_ori);
     if ((*dag)->root_seen    != NULL) csound->Free(csound, (*dag)->root_seen);
     if ((*dag)->table_ori    != NULL) csound->Free(csound, (*dag)->table_ori);
     if ((*dag)->table        != NULL) csound->Free(csound, (*dag)->table);
@@ -1077,12 +1120,13 @@ void csp_dag_add(CSOUND *csound, DAG *dag,
 {
     DAG_NODE *dag_node = NULL;
     DAG_NODE **old = dag->all;
-    int ctr = 0;
+    //int ctr = 0;
     dag_node_2_alloc(csound, &dag_node, instr, insds);
 
     TRACE_1("dag->count = %d\n", dag->count);
-    //    dag->all = (DAG_NODE **)csound->Malloc(csound,
-    //                                           sizeof(DAG_NODE *) * (dag->count + 1));
+    //    dag->all = 
+    //     (DAG_NODE **)csound->Malloc(csound,
+    //                                 sizeof(DAG_NODE *) * (dag->count + 1));
     /* Can not this be done with memcpy or Realloc */
     //    while (ctr < dag->count) {
     //      dag->all[ctr] = old[ctr];
@@ -1090,8 +1134,9 @@ void csp_dag_add(CSOUND *csound, DAG *dag,
     //    }
     //    dag->all[ctr] = dag_node;
     //    if (old != NULL) csound->Free(csound, old);
-    dag->all = (DAG_NODE **)csound->ReAlloc(csound, old,
-                                            sizeof(DAG_NODE *) * (dag->count + 1));
+    dag->all =
+      (DAG_NODE **)csound->ReAlloc(csound, old,
+                                   sizeof(DAG_NODE *) * (dag->count + 1));
     dag->all[dag->count++] = dag_node;
     //dag->count++;
 
@@ -1106,16 +1151,19 @@ void csp_dag_add(CSOUND *csound, DAG *dag,
 inline static void csp_dag_build_prepare(CSOUND *csound, DAG *dag)
 {
 #ifdef CAUTIOUS
-    if (dag == NULL) csound->Die(csound, Str("Invalid NULL Parameter dag"));
+    if (dag == NULL) csound->Die(csound,
+                                 Str("Invalid NULL Parameter dag"));
 #endif
 
     if (dag->roots_ori       != NULL) csound->Free(csound, dag->roots_ori);
     if (dag->roots           != NULL) csound->Free(csound, dag->roots);
-    if (dag->root_seen_ori   != NULL) csound->Free(csound, dag->root_seen_ori);
+    if (dag->root_seen_ori   != NULL)
+      csound->Free(csound, dag->root_seen_ori);
     if (dag->root_seen       != NULL) csound->Free(csound, dag->root_seen);
     if (dag->remaining_count_ori != NULL)
       csound->Free(csound, dag->remaining_count_ori);
-    if (dag->remaining_count != NULL) csound->Free(csound, dag->remaining_count);
+    if (dag->remaining_count != NULL)
+      csound->Free(csound, dag->remaining_count);
     if (dag->table_ori       != NULL) csound->Free(csound, dag->table_ori);
     if (dag->table           != NULL) csound->Free(csound, dag->table);
 
@@ -1136,8 +1184,10 @@ inline static void csp_dag_build_prepare(CSOUND *csound, DAG *dag)
     dag->roots = csound->Malloc(csound, sizeof(DAG_NODE *) * dag->count);
     dag->root_seen_ori = csound->Malloc(csound, sizeof(uint8_t) * dag->count);
     dag->root_seen     = csound->Malloc(csound, sizeof(uint8_t) * dag->count);
-    dag->remaining_count_ori = csound->Malloc(csound, sizeof(int) * dag->count);
-    dag->remaining_count     = csound->Malloc(csound, sizeof(int) * dag->count);
+    dag->remaining_count_ori =
+      csound->Malloc(csound, sizeof(int) * dag->count);
+    dag->remaining_count     =
+      csound->Malloc(csound, sizeof(int) * dag->count);
     {
       long int ss = (sizeof(uint8_t *) * dag->count) +
                     (sizeof(uint8_t) * dag->count * dag->count);
@@ -1151,9 +1201,11 @@ inline static void csp_dag_build_prepare(CSOUND *csound, DAG *dag)
       int ctr = 0;
       while (ctr < dag->count) {
         dag->table_ori[ctr] = ((uint8_t *)dag->table_ori) +
-          (sizeof(uint8_t *) * dag->count) + (sizeof(uint8_t) * dag->count * ctr);
+          (sizeof(uint8_t *) * dag->count) +
+          (sizeof(uint8_t) * dag->count * ctr);
         dag->table[ctr]     = ((uint8_t *)dag->table) +
-          (sizeof(uint8_t *) * dag->count) + (sizeof(uint8_t) * dag->count * ctr);
+          (sizeof(uint8_t *) * dag->count) +
+          (sizeof(uint8_t) * dag->count * ctr);
         ctr++;
       }
     }
@@ -1161,26 +1213,29 @@ inline static void csp_dag_build_prepare(CSOUND *csound, DAG *dag)
     memset(dag->roots,     0,        sizeof(DAG_NODE *) * dag->count);
     memset(dag->root_seen_ori, 0,    sizeof(uint8_t) * dag->count);
     memset(dag->root_seen, 0,        sizeof(uint8_t) * dag->count);
-    memset(dag->remaining_count_ori, 0,           sizeof(int) * dag->count);
-    memset(dag->remaining_count,     0,           sizeof(int) * dag->count);
+    memset(dag->remaining_count_ori, 0, sizeof(int) * dag->count);
+    memset(dag->remaining_count,     0, sizeof(int) * dag->count);
     memset(dag->table_ori[0], DAG_NO_LINK,
            sizeof(uint8_t) * dag->count * dag->count);
-    memset(dag->table[0], DAG_NO_LINK, sizeof(uint8_t) * dag->count * dag->count);
+    memset(dag->table[0], DAG_NO_LINK,
+           sizeof(uint8_t) * dag->count * dag->count);
 }
 
 inline static DAG *csp_dag_build_initial(CSOUND *csound, INSDS *chain)
 {
     DAG *dag = NULL;
 #ifdef CAUTIOUS
-    if (chain == NULL) csound->Die(csound, Str("Invalid NULL Parameter chain"));
+    if (UNLIKELY(chain == NULL))
+      csound->Die(csound, Str("Invalid NULL Parameter chain"));
 #endif
     csp_dag_alloc(csound, &dag);
     while (chain != NULL) {
       INSTR_SEMANTICS *current_instr =
-        csp_orc_sa_instr_get_by_num(chain->insno);
+        csp_orc_sa_instr_get_by_num(csound, chain->insno);
       if (current_instr == NULL)
         csound->Die(csound,
-                    Str("Failed to find semantic information for instrument '%i'"),
+                    Str("Failed to find semantic information"
+                        " for instrument '%i'"),
                         chain->insno);
       csp_dag_add(csound, dag, current_instr, chain);
       dag->weight += current_instr->weight;
@@ -1192,7 +1247,8 @@ inline static DAG *csp_dag_build_initial(CSOUND *csound, INSDS *chain)
 inline static void csp_dag_build_edges(CSOUND *csound, DAG *dag)
 {
 #ifdef CAUTIOUS
-    if (dag == NULL) csound->Die(csound, Str("Invalid NULL Parameter dag"));
+    if (UNLIKELY(dag == NULL))
+      csound->Die(csound, Str("Invalid NULL Parameter dag"));
 #endif
 
     int dag_root_ctr = 0;
@@ -1214,7 +1270,8 @@ inline static void csp_dag_build_edges(CSOUND *csound, DAG *dag)
         }
         csp_set_dealloc(csound, &write_intersection);
 
-        /* csound->Message(csound, "write_intersection depends: %i\n", depends);
+        /* csound->Message(csound, 
+                           "write_intersection depends: %i\n", depends);
            csp_set_print(csound, dag->all[dag_root_ctr]->instr->write);
            csp_set_print(csound, dag->all[dag_curr_ctr]->instr->read); */
 
@@ -1227,7 +1284,8 @@ inline static void csp_dag_build_edges(CSOUND *csound, DAG *dag)
         }
         csp_set_dealloc(csound, &read_intersection);
 
-        /* csound->Message(csound, "read_intersection depends: %i\n", depends);
+        /* csound->Message(csound,
+                           "read_intersection depends: %i\n", depends);
            csp_set_print(csound, dag->all[dag_root_ctr]->instr->read);
            csp_set_print(csound, dag->all[dag_curr_ctr]->instr->write); */
 
@@ -1246,7 +1304,8 @@ inline static void csp_dag_build_edges(CSOUND *csound, DAG *dag)
            csp_set_print(csound, dag->all[dag_curr_ctr]->instr->write); */
 
         struct set_t *readwrite_write_intersection = NULL;
-        csp_set_intersection(csound, dag->all[dag_root_ctr]->instr->read_write,
+        csp_set_intersection(csound,
+                             dag->all[dag_root_ctr]->instr->read_write,
                              dag->all[dag_curr_ctr]->instr->write,
                              &readwrite_write_intersection);
         if (csp_set_count(csound, readwrite_write_intersection) != 0) {
@@ -1254,13 +1313,15 @@ inline static void csp_dag_build_edges(CSOUND *csound, DAG *dag)
         }
         csp_set_dealloc(csound, &readwrite_write_intersection);
 
-        /* csound->Message(csound, "readwrite_write_intersection depends: %i\n",
+        /* csound->Message(csound, 
+                           "readwrite_write_intersection depends: %i\n",
                            depends);
            csp_set_print(csound, dag->all[dag_root_ctr]->instr->read_write);
            csp_set_print(csound, dag->all[dag_curr_ctr]->instr->write); */
 
         struct set_t *readwrite_read_intersection = NULL;
-        csp_set_intersection(csound, dag->all[dag_root_ctr]->instr->read_write,
+        csp_set_intersection(csound, 
+                             dag->all[dag_root_ctr]->instr->read_write,
                              dag->all[dag_curr_ctr]->instr->read,
                              &readwrite_read_intersection);
         if (csp_set_count(csound, readwrite_read_intersection) != 0) {
@@ -1268,8 +1329,11 @@ inline static void csp_dag_build_edges(CSOUND *csound, DAG *dag)
         }
         csp_set_dealloc(csound, &readwrite_read_intersection);
 
-        /* csound->Message(csound, "readwrite_read_intersection depends: %i\n", depends);
-           csp_set_print(csound, dag->all[dag_root_ctr]->instr->read_write);
+        /* csound->Message(csound,
+                           "readwrite_read_intersection depends: %i\n",
+                           depends);
+           csp_set_print(csound, 
+                         dag->all[dag_root_ctr]->instr->read_write);
            csp_set_print(csound, dag->all[dag_curr_ctr]->instr->write); */
 
         struct set_t *read_readwrite_intersection = NULL;
@@ -1281,9 +1345,12 @@ inline static void csp_dag_build_edges(CSOUND *csound, DAG *dag)
         }
         csp_set_dealloc(csound, &read_readwrite_intersection);
 
-        /* csound->Message(csound, "read_readwrite_intersection depends: %i\n", depends);
+        /* csound->Message(csound, 
+                           "read_readwrite_intersection depends: %i\n",
+                           depends);
            csp_set_print(csound, dag->all[dag_root_ctr]->instr->read);
-           csp_set_print(csound, dag->all[dag_curr_ctr]->instr->read_write); */
+           csp_set_print(csound, 
+                         dag->all[dag_curr_ctr]->instr->read_write); */
 
         struct set_t *write_readwrite_intersection = NULL;
         csp_set_intersection(csound, dag->all[dag_root_ctr]->instr->write,
@@ -1294,24 +1361,30 @@ inline static void csp_dag_build_edges(CSOUND *csound, DAG *dag)
         }
         csp_set_dealloc(csound, &write_readwrite_intersection);
 
-        /* csound->Message(csound, "write_readwrite_intersection depends: %i\n",
+        /* csound->Message(csound,
+                           "write_readwrite_intersection depends: %i\n",
                            depends);
            csp_set_print(csound, dag->all[dag_root_ctr]->instr->write);
-           csp_set_print(csound, dag->all[dag_curr_ctr]->instr->read_write); */
+           csp_set_print(csound,
+                          dag->all[dag_curr_ctr]->instr->read_write); */
 
         struct set_t *readwrite_readwrite_intersection = NULL;
-        csp_set_intersection(csound, dag->all[dag_root_ctr]->instr->read_write,
+        csp_set_intersection(csound,
+                             dag->all[dag_root_ctr]->instr->read_write,
                              dag->all[dag_curr_ctr]->instr->read_write,
                              &readwrite_readwrite_intersection);
-        if (csp_set_count(csound, readwrite_readwrite_intersection) != 0) {
+        if (csp_set_count(csound,
+                          readwrite_readwrite_intersection) != 0) {
           depends |= DAG_WEAK_LINK;
         }
         csp_set_dealloc(csound, &readwrite_readwrite_intersection);
 
         /* csound->Message(csound,
-                      "readwrite_readwrite_intersection depends: %i\n", depends);
+                           "readwrite_readwrite_intersection depends: %i\n",
+                           depends);
            csp_set_print(csound, dag->all[dag_root_ctr]->instr->read_write);
-           csp_set_print(csound, dag->all[dag_curr_ctr]->instr->read_write); */
+           csp_set_print(csound, 
+                         dag->all[dag_curr_ctr]->instr->read_write); */
 
         if (depends & DAG_STRONG_LINK) {
           dag->table_ori[dag_root_ctr][dag_curr_ctr] = DAG_STRONG_LINK;
@@ -1429,8 +1502,10 @@ static void csp_dag_calculate_max_roots(CSOUND *csound, DAG *dag)
 void csp_dag_build(CSOUND *csound, DAG **dag, INSDS *chain)
 {
 #ifdef CAUTIOUS
-    if (dag == NULL) csound->Die(csound, Str("Invalid NULL Parameter dag"));
-    if (chain == NULL) csound->Die(csound, Str("Invalid NULL Parameter chain"));
+    if (dag == NULL)
+      csound->Die(csound, Str("Invalid NULL Parameter dag"));
+    if (chain == NULL)
+      csound->Die(csound, Str("Invalid NULL Parameter chain"));
 #endif
 
     TRACE_5("DAG BUILD\n");
@@ -1449,7 +1524,8 @@ void csp_dag_build(CSOUND *csound, DAG **dag, INSDS *chain)
 int inline csp_dag_is_finished(CSOUND *csound, DAG *dag)
 {
 #ifdef CAUTIOUS
-    if (dag == NULL) csound->Die(csound, Str("Invalid NULL Parameter dag"));
+    if (dag == NULL)
+      csound->Die(csound, Str("Invalid NULL Parameter dag"));
 #endif
     /* TAKE_LOCK(&(dag->spinlock));
        int res = (dag->remaining <= 0);
@@ -1463,7 +1539,7 @@ int inline csp_dag_is_finished(CSOUND *csound, DAG *dag)
 /*
  * consume an instr and update the first root cache
  */
-static int waiting_for_ending=0;
+//static int waiting_for_ending=0;
 void csp_dag_consume(CSOUND *csound, DAG *dag,
                      DAG_NODE **node, int *update_hdl)
 {
@@ -1481,7 +1557,8 @@ void csp_dag_consume(CSOUND *csound, DAG *dag,
 #endif
 
     TRACE_2("[%i] Consuming PreLock [%i, %i] +++++\n",
-            csp_thread_index_get(csound), dag->first_root, dag->consume_spinlock);
+            csp_thread_index_get(csound),
+            dag->first_root, dag->consume_spinlock);
 
     TAKE_LOCK(&(dag->consume_spinlock));
 
@@ -1503,22 +1580,23 @@ void csp_dag_consume(CSOUND *csound, DAG *dag,
       //      csp_dag_print(csound, dag);
 
       /* csound->Die(csound, */
-      /*             Str("Expected a root to perform. Found none (%i remaining)"), */
-      /*             dag->remaining); */
+      /*     Str("Expected a root to perform. Found none (%i remaining)"), */
+      /*     dag->remaining); */
       RELS_LOCK(&(dag->consume_spinlock));
       /* RELS_LOCK(&(dag->spinlock)); */
       *node = NULL;
       *update_hdl = -1;
-      { struct timespec tt = {0, 100};
+      //{ struct timespec tt = {0, 100};
         //        nanosleep(&tt, NULL);
-      }
+      //}
       /* Really ought to wait until someone leaves comsume_dag_update */
       return;
     }
 
     first_root = dag->first_root;
 
-    TRACE_5("[%i] Consuming root:%i\n", csp_thread_index_get(csound), first_root);
+    TRACE_5("[%i] Consuming root:%i\n",
+            csp_thread_index_get(csound), first_root);
 
     dag_node = dag->roots[first_root];
     dag->roots[first_root] = NULL;
@@ -2302,7 +2380,7 @@ struct dag_cache_entry_t {
   int16                       chain[];
 };
 
-#define DAG_2_CACHE_SIZE     128
+//#define DAG_2_CACHE_SIZE     128
 #define DAG_2_DECAY_COMP     1
 #define DAG_2_MIN_USE_LIMIT  5000
 /* aiming for 8 passes of the cache update before a new entry
@@ -2311,7 +2389,7 @@ struct dag_cache_entry_t {
 #define DAG_2_AGE_START      131072
 
 static int cache_ctr;
-static struct dag_cache_entry_t *cache[DAG_2_CACHE_SIZE];
+//static struct dag_cache_entry_t *cache[DAG_2_CACHE_SIZE];
 
 /* #ifdef HYBRID_HASH_CACHE */
 /* static struct dag_cache_entry_t *cache_last; */
@@ -2322,11 +2400,13 @@ static uint32_t update_ctr;
 static int csp_dag_cache_entry_alloc(CSOUND *csound,
                                      struct dag_cache_entry_t **entry,
                                      INSDS *chain, uint32_t hash_val);
-static int csp_dag_cache_entry_dealloc(CSOUND *csound,
-                                       struct dag_cache_entry_t **entry);
 static int csp_dag_cache_compare(CSOUND *csound,
                                  struct dag_cache_entry_t *entry, INSDS *chain);
+#if 0
+static int csp_dag_cache_entry_dealloc(CSOUND *csound,
+                                       struct dag_cache_entry_t **entry);
 static void csp_dag_cache_update(CSOUND *csound);
+#endif
 static void csp_dag_cache_print_weights_dump(CSOUND *csound);
 
 void csp_dag_cache_print(CSOUND *csound)
@@ -2340,7 +2420,7 @@ void csp_dag_cache_print(CSOUND *csound)
 
     csound->Message(csound, "Dag2 Cache Size: %i\n", cache_ctr);
     while (bin_ctr < DAG_2_CACHE_SIZE) {
-      struct dag_cache_entry_t *entry = cache[bin_ctr];
+      struct dag_cache_entry_t *entry = csound->cache[bin_ctr];
 
       if (entry == NULL) bins_empty++;
       else bins_used++;
@@ -2419,7 +2499,7 @@ static void csp_dag_cache_print_weights_dump(CSOUND *csound)
 #endif
 
     while (bin_ctr < DAG_2_CACHE_SIZE) {
-      struct dag_cache_entry_t *entry = cache[bin_ctr];
+      struct dag_cache_entry_t *entry = csound->cache[bin_ctr];
       char *dag_str;
 
       while (entry != NULL) {
@@ -2499,6 +2579,7 @@ static int csp_dag_cache_entry_alloc(CSOUND *csound,
     return CSOUND_SUCCESS;
 }
 
+#if 0
 static int csp_dag_cache_entry_dealloc(CSOUND *csound,
                                        struct dag_cache_entry_t **entry)
 {
@@ -2516,7 +2597,9 @@ static int csp_dag_cache_entry_dealloc(CSOUND *csound,
 
     return CSOUND_SUCCESS;
 }
+#endif
 
+#if 0
 static void csp_dag_cache_update(CSOUND *csound)
 {
     uint32_t bin_ctr = 0;
@@ -2527,7 +2610,7 @@ static void csp_dag_cache_update(CSOUND *csound)
     csound->Message(csound, Str("Cache Update\n"));
 
     while (bin_ctr < DAG_2_CACHE_SIZE) {
-      struct dag_cache_entry_t *entry = cache[bin_ctr], *prev = NULL;
+      struct dag_cache_entry_t *entry = csound->cache[bin_ctr], *prev = NULL;
 
       if (entry == NULL) {
         bin_ctr++;
@@ -2540,14 +2623,14 @@ static void csp_dag_cache_update(CSOUND *csound)
         if (entry->uses < DAG_2_MIN_USE_LIMIT &&
             entry->age < DAG_2_MIN_AGE_LIMIT) {
           if (prev == NULL) {
-            cache[bin_ctr] = entry->next;
+            csound->cache[bin_ctr] = entry->next;
           }
           else {
             prev->next = entry->next;
           }
           csp_dag_cache_entry_dealloc(csound, &entry);
           if (prev == NULL) {
-            entry = cache[bin_ctr];
+            entry = csound->cache[bin_ctr];
           }
           else {
             entry = prev->next;
@@ -2562,6 +2645,7 @@ static void csp_dag_cache_update(CSOUND *csound)
       bin_ctr++;
     }
 }
+#endif
 
 static int csp_dag_cache_compare(CSOUND *csound,
                                  struct dag_cache_entry_t *entry, INSDS *chain)
@@ -2628,7 +2712,7 @@ void csp_dag_cache_fetch(CSOUND *csound, DAG **dag, INSDS *chain)
 /* #endif */
 
     uint32_t hash_val = hash_chain(chain, DAG_2_CACHE_SIZE);
-    struct dag_cache_entry_t *curr = cache[hash_val];
+    struct dag_cache_entry_t *curr = csound->cache[hash_val];
     while (curr != NULL) {
       if (csp_dag_cache_compare(csound, curr, chain)) {
         TRACE_2("Cache Hit [%i]\n", cache_ctr);
@@ -2654,8 +2738,8 @@ void csp_dag_cache_fetch(CSOUND *csound, DAG **dag, INSDS *chain)
       cache_ctr++;
       *dag = curr->dag;
 
-      curr->next = cache[hash_val];
-      cache[hash_val] = curr;
+      curr->next = csound->cache[hash_val];
+      csound->cache[hash_val] = curr;
 /* #ifdef HYBRID_HASH_CACHE */
 /*       cache_last = curr; */
 /* #endif */
diff --git a/Engine/cs_par_orc_semantic_analysis.c b/Engine/cs_par_orc_semantic_analysis.c
index 6e72185..390bb8e 100644
--- a/Engine/cs_par_orc_semantic_analysis.c
+++ b/Engine/cs_par_orc_semantic_analysis.c
@@ -31,7 +31,9 @@
 #include "cs_par_base.h"
 #include "cs_par_orc_semantics.h"
 
+#include "interlocks.h"
 
+int find_opcode(CSOUND *, char *);
 /***********************************************************************
  * static function prototypes
  */
@@ -66,12 +68,12 @@ static INSTR_SEMANTICS *instr_semantics_alloc(CSOUND *csound, char *name)
  * parse time support
  */
 
-static INSTR_SEMANTICS *curr;
-static INSTR_SEMANTICS *root;
+//static INSTR_SEMANTICS *curr;
+//static INSTR_SEMANTICS *root;
 
 void csp_orc_sa_cleanup(CSOUND *csound)
 {
-    INSTR_SEMANTICS *current = root, *h = NULL;
+    INSTR_SEMANTICS *current = csound->instRoot, *h = NULL;
     while (current != NULL) {
 
       csp_set_dealloc(csound, &(current->read));
@@ -83,14 +85,14 @@ void csp_orc_sa_cleanup(CSOUND *csound)
       csound->Free(csound, h);
     }
 
-    curr = NULL;
-    root = NULL;
+    csound->instCurr = NULL;
+    csound->instRoot = NULL;
 }
 
 void csp_orc_sa_print_list(CSOUND *csound)
 {
     csound->Message(csound, "Semantic Analysis\n");
-    INSTR_SEMANTICS *current = root;
+    INSTR_SEMANTICS *current = csound->instRoot;
     while (current != NULL) {
       csound->Message(csound, "Instr: %s\n", current->name);
       csound->Message(csound, "  read: ");
@@ -113,7 +115,7 @@ void csp_orc_sa_global_read_write_add_list(CSOUND *csound,
                                            struct set_t *write,
                                            struct set_t *read)
 {
-    if (curr == NULL) {
+    if (csound->instCurr == NULL) {
       csound->Message(csound,
                       "Add global read, write lists without any instruments\n");
     }
@@ -128,9 +130,9 @@ void csp_orc_sa_global_read_write_add_list(CSOUND *csound,
       if (write->count == 1 && read->count == 1 && new->count == 1) {
         /* this is a read_write list thing */
         struct set_t *new_read_write = NULL;
-        csp_set_union(csound, curr->read_write, new, &new_read_write);
-        csp_set_dealloc(csound, &curr->read_write);
-        curr->read_write = new_read_write;
+        csp_set_union(csound, csound->instCurr->read_write, new, &new_read_write);
+        csp_set_dealloc(csound, &csound->instCurr->read_write);
+        csound->instCurr->read_write = new_read_write;
       }
       else {
         csp_orc_sa_global_write_add_list(csound, write);
@@ -143,7 +145,7 @@ void csp_orc_sa_global_read_write_add_list(CSOUND *csound,
 
 void csp_orc_sa_global_write_add_list(CSOUND *csound, struct set_t *set)
 {
-    if (curr == NULL) {
+    if (csound->instCurr == NULL) {
       csound->Message(csound,
                       "Add a global write_list without any instruments\n");
     }
@@ -153,18 +155,18 @@ void csp_orc_sa_global_write_add_list(CSOUND *csound, struct set_t *set)
     }
     else {
       struct set_t *new = NULL;
-      csp_set_union(csound, curr->write, set, &new);
+      csp_set_union(csound, csound->instCurr->write, set, &new);
 
-      csp_set_dealloc(csound, &curr->write);
+      csp_set_dealloc(csound, &csound->instCurr->write);
       csp_set_dealloc(csound, &set);
 
-      curr->write = new;
+      csound->instCurr->write = new;
     }
 }
 
 void csp_orc_sa_global_read_add_list(CSOUND *csound, struct set_t *set)
 {
-    if (curr == NULL) {
+    if (csound->instCurr == NULL) {
       csound->Message(csound, "add a global read_list without any instruments\n");
     }
     else if (UNLIKELY(set == NULL)) {
@@ -173,46 +175,98 @@ void csp_orc_sa_global_read_add_list(CSOUND *csound, struct set_t *set)
     }
     else {
       struct set_t *new = NULL;
-      csp_set_union(csound, curr->read, set, &new);
+      csp_set_union(csound, csound->instCurr->read, set, &new);
 
-      csp_set_dealloc(csound, &curr->read);
+      csp_set_dealloc(csound, &csound->instCurr->read);
       csp_set_dealloc(csound, &set);
 
-      curr->read = new;
+      csound->instCurr->read = new;
     }
 }
 
-static int inInstr = 0;
+void csp_orc_sa_interlocksf(CSOUND *csound, int code)
+{
+    if (code&0xfff8) {
+      /* zak etc */
+      struct set_t *rr = NULL;
+      struct set_t *ww = NULL;
+      csp_set_alloc_string(csound, &ww);
+      csp_set_alloc_string(csound, &rr);
+      switch (code&0xfff8) {
+      case ZR:
+        csp_set_add(csound, rr, "##zak");
+        break;
+      case ZW:
+        csp_set_add(csound, ww, "##zak");
+        break;
+      case ZB:
+        csp_set_add(csound, rr, "##zak");
+        csp_set_add(csound, ww, "##zak");
+        break;
+      case TR:
+        csp_set_add(csound, rr, "##tab");
+        break;
+      case TW:
+        csp_set_add(csound, ww, "##tab");
+        break;
+      case TB:
+        csp_set_add(csound, rr, "##tab");
+        csp_set_add(csound, ww, "##tab");
+        break;
+      case CR:
+        csp_set_add(csound, rr, "##chn");
+        break;
+      case CW:
+        csp_set_add(csound, ww, "##chn");
+        break;
+      case CB:
+        csp_set_add(csound, rr, "##chn");
+        csp_set_add(csound, ww, "##chn");
+        break;
+      }
+      csp_orc_sa_global_read_write_add_list(csound, ww, rr);
+    }
+}
+
+void csp_orc_sa_interlocks(CSOUND *csound, ORCTOKEN *opcode)
+{
+    char *name = opcode->lexeme;
+    int32 opnum = find_opcode(csound, name);
+    OENTRY *ep = csound->opcodlst + opnum;
+    csp_orc_sa_interlocksf(csound, ep->thread);
+}
+
+//static int inInstr = 0;
 
 void csp_orc_sa_instr_add(CSOUND *csound, char *name)
 {
-    inInstr = 1;
-    if (root == NULL) {
-      root = instr_semantics_alloc(csound, name);
-      curr = root;
+    csound->inInstr = 1;
+    if (csound->instRoot == NULL) {
+      csound->instRoot = instr_semantics_alloc(csound, name);
+      csound->instCurr = csound->instRoot;
     }
-    else if (curr == NULL) {
-      INSTR_SEMANTICS *prev = root;
-      curr = prev->next;
-      while (curr != NULL) {
-        prev = curr;
-        curr = curr->next;
+    else if (csound->instCurr == NULL) {
+      INSTR_SEMANTICS *prev = csound->instRoot;
+      csound->instCurr = prev->next;
+      while (csound->instCurr != NULL) {
+        prev = csound->instCurr;
+        csound->instCurr = csound->instCurr->next;
       }
       prev->next = instr_semantics_alloc(csound, name);
-      curr = prev->next;
+      csound->instCurr = prev->next;
     }
     else {
-      curr->next = instr_semantics_alloc(csound, name);
-      curr = curr->next;
+      csound->instCurr->next = instr_semantics_alloc(csound, name);
+      csound->instCurr = csound->instCurr->next;
     }
-    // curr->insno = named_instr_find(name);
+    // csound->instCurr->insno = named_instr_find(name);
 }
 
 /* New code to deal with lists of integer instruments -- JPff */
 void csp_orc_sa_instr_add_tree(CSOUND *csound, TREE *x)
 {
     while (x) {
-      if (x->type == T_INTGR) {
+      if (x->type == INTEGER_TOKEN) {
         csp_orc_sa_instr_add(csound, x->value->lexeme);
         return;
       }
@@ -231,8 +285,8 @@ void csp_orc_sa_instr_add_tree(CSOUND *csound, TREE *x)
 
 void csp_orc_sa_instr_finalize(CSOUND *csound)
 {
-    curr = NULL;
-    inInstr = 0;
+    csound->instCurr = NULL;
+    csound->inInstr = 0;
 }
 
 struct set_t *csp_orc_sa_globals_find(CSOUND *csound, TREE *node)
@@ -279,9 +333,9 @@ struct set_t *csp_orc_sa_globals_find(CSOUND *csound, TREE *node)
     return current_set;
 }
 
-INSTR_SEMANTICS *csp_orc_sa_instr_get_by_name(char *instr_name)
+INSTR_SEMANTICS *csp_orc_sa_instr_get_by_name(CSOUND *csound, char *instr_name)
 {
-    INSTR_SEMANTICS *current_instr = root;
+    INSTR_SEMANTICS *current_instr = csound->instRoot;
     while (current_instr != NULL) {
       if (strcmp(current_instr->name, instr_name) == 0) {
         return current_instr;
@@ -291,10 +345,10 @@ INSTR_SEMANTICS *csp_orc_sa_instr_get_by_name(char *instr_name)
     return NULL;
 }
 
-INSTR_SEMANTICS *csp_orc_sa_instr_get_by_num(int16 insno)
+INSTR_SEMANTICS *csp_orc_sa_instr_get_by_num(CSOUND *csound, int16 insno)
 {
 #define BUF_LENGTH 8
-    INSTR_SEMANTICS *current_instr = root;
+    INSTR_SEMANTICS *current_instr = csound->instRoot;
     char buf[BUF_LENGTH];
     while (current_instr != NULL) {
       if (current_instr->insno != -1 && current_instr->insno == insno) {
@@ -305,7 +359,7 @@ INSTR_SEMANTICS *csp_orc_sa_instr_get_by_num(int16 insno)
 
     snprintf(buf, BUF_LENGTH, "%i", insno);
 
-    current_instr = csp_orc_sa_instr_get_by_name(buf);
+    current_instr = csp_orc_sa_instr_get_by_name(csound, buf);
     if (current_instr != NULL) {
       current_instr->insno = insno;
     }
diff --git a/Engine/csound_orc.l b/Engine/csound_orc.l
index 8187311..5b012b2 100644
--- a/Engine/csound_orc.l
+++ b/Engine/csound_orc.l
@@ -27,6 +27,7 @@
 #include <stdio.h>
 #include <string.h>
 #include <stdlib.h>
+#include <ctype.h>
 #include "csoundCore.h"
 #define YYSTYPE TREE*
 #define YYLTYPE ORCTOKEN*
@@ -34,10 +35,12 @@
 #define YY_DECL int yylex (YYLTYPE *lvalp, CSOUND *csound, yyscan_t yyscanner)
 #include "csound_orcparse.h"
 #include "csound_orc.h"
+#include "corfile.h"
 YYSTYPE *yylval_param;
 YYLTYPE *yylloc_param;
 ORCTOKEN *make_string(CSOUND *, char *);
-extern ORCTOKEN *lookup_token(CSOUND *csound, char *, void *);
+extern ORCTOKEN *lookup_token(CSOUND *, char *, void *);
+extern  void    *fopen_path(CSOUND *, FILE **, char *, char *, char *, int);
 ORCTOKEN *new_token(CSOUND *csound, int type);
 ORCTOKEN *make_int(CSOUND *, char *);
 ORCTOKEN *make_num(CSOUND *, char *);
@@ -49,6 +52,8 @@ void do_include(CSOUND *, int, yyscan_t);
 void do_macro_arg(CSOUND *, char *, yyscan_t);
 void do_macro(CSOUND *, char *, yyscan_t);
 void do_umacro(CSOUND *, char *, yyscan_t);
+void do_ifdef(CSOUND *, char *, yyscan_t);
+void do_ifdef_skip_code(CSOUND *, yyscan_t);
 #define udoflag csound->parserUdoflag
 #define namedInstrFlag csound->parserNamedInstrFlag
 //extern int udoflag;
@@ -59,15 +64,16 @@ void do_umacro(CSOUND *, char *, yyscan_t);
 #define YY_EXTRA_TYPE  PARSE_PARM *
 #define PARM    yyget_extra(yyscanner)
 
-#define YY_INPUT(buf,result,max_size)  {\
-    result = get_next_char(buf, max_size, yyg); \
-    if ( UNLIKELY( result <= 0  )) \
-      result = YY_NULL; \
-    }
-
+/* #define YY_INPUT(buf,result,max_size)  {\ */
+/*     result = get_next_char(buf, max_size, yyg); \ */
+/*     if ( UNLIKELY( result <= 0  )) \ */
+/*       result = YY_NULL; \ */
+/*     } */
+#define YY_USER_INIT csound_orcset_lineno(csound->orcLineOffset, yyscanner);
 
 struct yyguts_t;
 ORCTOKEN *do_at(CSOUND *, int, struct yyguts_t*);
+int get_next_char(char *, int, struct yyguts_t*);
 %}
 %option reentrant
 %option bison-bridge
@@ -86,19 +92,23 @@ MACRONAMEA      "$"[a-zA-Z0-9_]+\(
 MACRONAMEDA     "$"[a-zA-Z0-9_]+\.\(
 INTGR           [0-9]+
 NUMBER          [0-9]+\.[0-9]*(e[-+]?[0-9]+)?|\.[0-9]+(e[-+]?[0-9]+)?
-STCOM           "/"\*
+STCOM           \/\*
 WHITE           [ \t]+
 OPTWHITE        [ \t]*
 INCLUDE         "#include"
 DEFINE          "#define"
 UNDEF           "#undef"
-CONT            \\[[ \t]*\n
+IFDEF           #ifn?def
+ELSE            #else[ \t]*(;.*)?$
+END             #end(if)?[ \t]*(;.*)?\n
+CONT            \\[ \t]*(;.*)?\n
 XSTR            "{{"
 EXSTR           "}}"
 
 %x incl
 %x macro
 %x umacro
+%x ifdef
 %x xstr
 
 %%
@@ -106,92 +116,99 @@ EXSTR           "}}"
 {CONT}          { csound_orcset_lineno(1+csound_orcget_lineno(yyscanner),
                                        yyscanner);
  }
-"\n"            {
-                  return S_NL; }
-"//"            { comment(yyscanner); return S_NL; }
-";"             { comment(yyscanner); return S_NL; }
+"\n"            { csound_orcset_lineno(1+csound_orcget_lineno(yyscanner),
+                                       yyscanner);
+                  return NEWLINE; }
+"//"            { comment(yyscanner); return NEWLINE; }
+";"             { comment(yyscanner); return NEWLINE; }
 {STCOM}         { do_comment(yyscanner); }
-"("             { return S_LB; }
-")"             { return S_RB; }
-"["             { return S_SLB; }
-"]"             { return S_SRB; }
-"+"             { return S_PLUS; }
-"-"             { return S_MINUS; }
-"*"             { return S_TIMES; }
-"/"             { return S_DIV; }
-"%"             { return S_MOD; }
-"\^"            { return S_POW; }
-"?"             { return S_Q; }
-":"             { return S_COL; }
-","             { return S_COM; }
-"!"             { return S_NOT; }
+"("             { return '('; }
+")"             { return ')'; }
+"["             { return '['; }
+"]"             { return ']'; }
+"+"             { return '+'; }
+"-"             { return '-'; }
+"*"             { return '*'; }
+"/"             { return '/'; }
+"%"             { return '%'; }
+"\^"            { return '^'; }
+"?"             { return '?'; }
+":"             { return ':'; }
+","             { return ','; }
+"!"             { return '!'; }
 "!="            { return S_NEQ; }
 "&&"            { return S_AND; }
 "||"            { return S_OR; }
-"<<"            { return S_BITSHL; }
-">>"            { return S_BITSHR; }
+"<<"            { return S_BITSHIFT_LEFT; }
+">>"            { return S_BITSHIFT_RIGHT; }
 "<"             { return S_LT; }
 "<="            { return S_LE; }
 "=="            { return S_EQ; }
 "="             { *lvalp = make_token(csound, yytext);
-                  (*lvalp)->type = S_ASSIGN;
-                  return S_ASSIGN; }
+                  (*lvalp)->type = '=';
+                  return '='; }
 ">"             { return S_GT; }
 ">="            { return S_GE; }
-"|"             { return S_BITOR; }
-"&"             { return S_BITAND; }
-"#"             { return S_NEQV; }
-"¬"             { return S_BITNOT; }
-"~"             { return S_BITNOT; }
-"@@"{OPTWHITE}{INTGR}     { *lvalp = do_at(csound, 1, yyg); return T_INTGR; }
-"@"{OPTWHITE}{INTGR}      { *lvalp = do_at(csound, 0, yyg); return T_INTGR; }
-"if"            { return T_IF; }
-"then"          { return T_THEN; }
-"ithen"         { return T_ITHEN; }
-"kthen"         { return T_KTHEN; }
-"elseif"        { return T_ELSEIF; }
-"else"          { return T_ELSE; }
-"endif"         { return T_ENDIF; }
-"until"         { return T_UNTIL; }
-"do"            { return T_DO; }
-"od"            { return T_OD; }
+"|"             { return '|'; }
+"&"             { return '&'; }
+"#"             { return '#'; }
+"¬"             { return '~'; }
+"~"             { return '~'; }
+"@@"{OPTWHITE}{INTGR}     { *lvalp = do_at(csound, 1, yyg); return INTEGER_TOKEN; }
+"@"{OPTWHITE}{INTGR}      { *lvalp = do_at(csound, 0, yyg); return INTEGER_TOKEN; }
+"if"            { return IF_TOKEN; }
+"then"          { return THEN_TOKEN; }
+"ithen"         { return ITHEN_TOKEN; }
+"kthen"         { return KTHEN_TOKEN; }
+"elseif"        { return ELSEIF_TOKEN; }
+"else"          { return ELSE_TOKEN; }
+"endif"         { return ENDIF_TOKEN; }
+"until"         { return UNTIL_TOKEN; }
+"do"            { return DO_TOKEN; }
+"od"            { return OD_TOKEN; }
 
 "goto"          { *lvalp = make_token(csound, yytext);
-                  (*lvalp)->type = T_GOTO;
-                  return T_GOTO; };
+                  (*lvalp)->type = GOTO_TOKEN;
+                  return GOTO_TOKEN; };
 "igoto"         { *lvalp = make_token(csound, yytext);
-                  (*lvalp)->type = T_IGOTO;
-                  return T_IGOTO; };
+                  (*lvalp)->type = IGOTO_TOKEN;
+                  return IGOTO_TOKEN; };
 "kgoto"         { *lvalp = make_token(csound, yytext);
-                  (*lvalp)->type = T_KGOTO;
-                  return T_KGOTO; };
+                  (*lvalp)->type = KGOTO_TOKEN;
+                  return KGOTO_TOKEN; };
 
 "sr"            { *lvalp = make_token(csound, yytext);
-                  (*lvalp)->type = T_SRATE;
-                  return T_SRATE; }
+                  (*lvalp)->type = SRATE_TOKEN;
+                  return SRATE_TOKEN; }
 "kr"            { *lvalp = make_token(csound, yytext);
-                  (*lvalp)->type = T_KRATE;
-                  return T_KRATE; }
+                  (*lvalp)->type = KRATE_TOKEN;
+                  return KRATE_TOKEN; }
 "ksmps"         { *lvalp = make_token(csound, yytext);
-                  (*lvalp)->type = T_KSMPS;
-                  return T_KSMPS; }
+                  (*lvalp)->type = KSMPS_TOKEN;
+                  return KSMPS_TOKEN; }
 "nchnls"        { *lvalp = make_token(csound, yytext);
-                  (*lvalp)->type = T_NCHNLS;
-                  return T_NCHNLS; }
+                  (*lvalp)->type = NCHNLS_TOKEN;
+                  return NCHNLS_TOKEN; }
 "nchnls_i"      { *lvalp = make_token(csound, yytext);
-                  (*lvalp)->type = T_NCHNLSI;
-                  return T_NCHNLSI; }
+                  (*lvalp)->type = NCHNLSI_TOKEN;
+                  return NCHNLSI_TOKEN; }
 "instr"         {
                   namedInstrFlag = 1;
-                  return T_INSTR;
+                  return INSTR_TOKEN;
+                }
+"endin"         { return ENDIN_TOKEN; }
+"opcode"        {
+                  PARM->clearBufferAfterEOF = 0;
+                  return UDOSTART_DEFINITION;
+                }
+"endop"         {
+                  PARM->clearBufferAfterEOF = PARM->isInclude;
+                  *lvalp = new_token(csound, UDOEND_TOKEN); return UDOEND_TOKEN;
                 }
-"endin"         { return T_ENDIN; }
-"opcode"        { return T_UDOSTART; }
-"endop"         { *lvalp = new_token(csound, T_UDOEND); return T_UDOEND; }
 
 {LABEL}         { char *pp = yytext;
                   while (*pp==' ' || *pp=='\t') pp++;
-                  *lvalp = make_label(csound, pp); return T_LABEL;
+                  *lvalp = make_label(csound, pp); return LABEL_TOKEN;
                 }
 
 "\{\{"          {
@@ -208,7 +225,7 @@ EXSTR           "}}"
                   PARM->xstrbuff[PARM->xstrptr] = '\0';
                   *lvalp = make_string(csound, PARM->xstrbuff);
                   free(PARM->xstrbuff);
-                  return T_STRCONST;
+                  return STRING_TOKEN;
                 }
 
 <xstr>"\n"     { /* THe next two should be one case but I cannot get that to work */
@@ -232,18 +249,19 @@ EXSTR           "}}"
                   PARM->xstrbuff[PARM->xstrptr] = '\0';
                 }
 
-{STRCONST}      { *lvalp = make_string(csound, yytext); return (T_STRCONST); }
+{STRCONST}      { *lvalp = make_string(csound, yytext); return (STRING_TOKEN); }
 
 {STRCONSTe}     { *lvalp = make_string(csound, yytext);
                   csound->Message(csound,
                           Str("unterminated string found on line %d >>%s<<\n"),
-                          csound_orcget_lineno(yyscanner), yytext);
-                  return (T_STRCONST); }
+                          csound_orcget_lineno(yyscanner),
+                          yytext);
+                  return (STRING_TOKEN); }
 
 "0dbfs"         { *lvalp = make_token(csound, yytext);
-                  (*lvalp)->type = T_0DBFS;
+                  (*lvalp)->type = ZERODBFS_TOKEN;
                   /* csound->Message(csound,"%d\n", (*lvalp)->type); */
-                  return T_0DBFS; }
+                  return ZERODBFS_TOKEN; }
 {IDENT}         { *lvalp = lookup_token(csound, yytext, yyscanner);
                   /* csound->Message(csound,"%s -> %d\n",
                                      yytext, (*lvalp)->type); */
@@ -294,13 +312,13 @@ EXSTR           "}}"
                   }
                   PARM->alt_stack[PARM->macro_stack_ptr].n = 0;
                   PARM->alt_stack[PARM->macro_stack_ptr++].s = NULL;
-                  /* printf("Push buffer %p -> ", YY_CURRENT_BUFFER); */
+                  /* printf("Push buffer %p -> ", YY_CURRENBUFFER_TOKEN); */
                   yypush_buffer_state(YY_CURRENT_BUFFER, yyscanner);
                   yy_scan_string(mm->body, yyscanner);
                   /* printf("%p\n", YY_CURRENT_BUFFER); */
                 }
 {MACRONAMEA}    {
-                  MACRO     *mm = PARM->macros, *last = PARM->macros;
+                  MACRO     *mm = PARM->macros;
                   int c, i, j;
                   printf("Macro with arguments call %s\n", yytext);
                   yytext[yyleng-1] = '\0';
@@ -353,7 +371,7 @@ EXSTR           "}}"
                   yy_scan_string(mm->body, yyscanner);
                 }
 {MACRONAMEDA}    {
-                  MACRO     *mm = PARM->macros, *last = PARM->macros;
+                  MACRO     *mm = PARM->macros;
                   int c, i, j;
                   printf("Macro with arguments call %s\n", yytext);
                   yytext[yyleng-2] = '\0';
@@ -405,19 +423,20 @@ EXSTR           "}}"
                   yy_scan_string(mm->body, yyscanner);
                 }
 {INTGR}         {
-                    if(udoflag == 0) {
-                        *lvalp = lookup_token(csound, yytext, yyscanner);
-                    } else if(udoflag == 1) {
-                        *lvalp = lookup_token(csound, yytext, yyscanner);
-                        (*lvalp)->type = T_UDO_ARGS;
+                    if (udoflag == 0) {
+                        *lvalp = make_string(csound, yytext);
+                        (*lvalp)->type = UDO_ANS_TOKEN;
+                    } else if (udoflag == 1) {
+                        *lvalp = make_string(csound, yytext);
+                        (*lvalp)->type = UDO_ARGS_TOKEN;
                     } else {
-                        *lvalp = make_int(csound, yytext); return (T_INTGR);
+                        *lvalp = make_int(csound, yytext); return (INTEGER_TOKEN);
                     }
 
                     csound->Message(csound,"%d\n", (*lvalp)->type);
                     return ((*lvalp)->type);
                 }
-{NUMBER}        { *lvalp = make_num(csound, yytext); return (T_NUMBER); }
+{NUMBER}        { *lvalp = make_num(csound, yytext); return (NUMBER_TOKEN); }
 {WHITE}         { }
 {INCLUDE}       BEGIN(incl);
 <incl>[ \t]*     /* eat the whitespace */
@@ -432,6 +451,10 @@ EXSTR           "}}"
                   yypop_buffer_state(yyscanner);
                   if ( !YY_CURRENT_BUFFER ) yyterminate();
                   printf("End of input; popping to %p\n", YY_CURRENT_BUFFER);
+                  if (PARM->clearBufferAfterEOF)
+                    PARM->lBuffer =
+                      PARM->clearBufferAfterEOF =
+                      PARM->isInclude = 0;
                   n = PARM->alt_stack[--PARM->macro_stack_ptr].n;
                   printf("n=%d\n", n);
                   if (n!=0) {
@@ -446,10 +469,10 @@ EXSTR           "}}"
                       PARM->macros = x;
                     }
                     else {
-                      MACRO *nxt;
+                      MACRO *nxt = y->next;
                       while (x->next != y) x = x->next;
                       while (n>0) {
-                        MACRO *nxt = y->next;
+                        nxt = y->next;
                         mfree(csound, y->name); mfree(csound, y); y=nxt; n--;
                       }
                       x->next = nxt;
@@ -485,6 +508,36 @@ EXSTR           "}}"
                                  csound_orcget_lineno(yyscanner),
                                  yytext[0],yytext[0]);
                 }
+{IFDEF}         {
+                  PARM->isIfndef = (yytext[3] == 'n');  /* #ifdef or #ifndef */
+                  BEGIN(ifdef);
+                }
+<ifdef>[ \t]*     /* eat the whitespace */
+<ifdef>{IDENT}  {
+                  do_ifdef(csound, yytext, yyscanner);
+                  BEGIN(INITIAL);
+                }
+{ELSE}          { 
+                  if (PARM->ifdefStack == NULL) {
+                    csound->Message(csound, Str("#else without #if\n"));
+                    csound->LongJmp(csound, 1); 
+                  }
+                  else if (PARM->ifdefStack->isElse) {
+                    csound->Message(csound, Str("#else after #else\n"));
+                    csound->LongJmp(csound, 1);
+                  }
+                  PARM->ifdefStack->isElse = 1;
+                  do_ifdef_skip_code(csound, yyscanner);
+                }
+{END}           {
+                  IFDEFSTACK *pp = PARM->ifdefStack;
+                  if (UNLIKELY(pp == NULL)) {
+                    csound->Message(csound, Str("Unmatched #end\n"));
+                    csound->LongJmp(csound, 1);
+                  }
+                  PARM->ifdefStack = pp->prv;
+                  mfree(csound, pp);
+                }
 
 
 %%
@@ -500,10 +553,12 @@ void do_comment(yyscan_t yyscanner)              /* Skip until * and / chars */
 {
     char c;
     for (;;) {
-      while ((c=input(yyscanner)) != '*')
-          if (UNLIKELY(c=='\n')) /* skip */
-            csound_orcset_lineno(1+csound_orcget_lineno(yyscanner),yyscanner);
-      if ((c=input(yyscanner))=='/') return;
+      c = input(yyscanner);
+      if (UNLIKELY(c=='\n')) /* skip */
+          csound_orcset_lineno(1+csound_orcget_lineno(yyscanner),yyscanner);
+      if (c != '*') continue;
+      while ((c=input(yyscanner))=='*');
+      if (c=='/') return;
       if (UNLIKELY(c=='\n'))
         csound_orcset_lineno(1+csound_orcget_lineno(yyscanner),yyscanner);
     }
@@ -514,6 +569,7 @@ void do_include(CSOUND *csound, int term, yyscan_t yyscanner)
     char buffer[100];
     int p=0;
     int c;
+    CORFIL *cf;
     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
     while ((c=input(yyscanner))!=term) {
       buffer[p] = c;
@@ -521,14 +577,12 @@ void do_include(CSOUND *csound, int term, yyscan_t yyscanner)
     }
     buffer[p] = '\0';
     while ((c=input(yyscanner))!='\n');
-    yyin = fopen( buffer, "r" );
-    if (UNLIKELY( ! yyin )) {
-      csound->Message(csound, Str("Cannot open file \"%s\"\n"), buffer);
-      exit(1);
-    }
+    cf = copy_to_corefile(csound, buffer, "INCDIR", 0);
     PARM->alt_stack[PARM->macro_stack_ptr].n = 0;
     PARM->alt_stack[PARM->macro_stack_ptr++].s = NULL;
-    yypush_buffer_state(yy_create_buffer( yyin, YY_BUF_SIZE, yyscanner), yyscanner);
+    PARM->isInclude = PARM->clearBufferAfterEOF = 1;
+    yypush_buffer_state(YY_CURRENT_BUFFER, yyscanner);
+    yy_scan_string(cf->body, yyscanner);
 }
 
 static inline int isNameChar(int c, int pos)
@@ -595,7 +649,7 @@ void do_macro_arg(CSOUND *csound, char *name0, yyscan_t yyscanner)
 void do_macro(CSOUND *csound, char *name0, yyscan_t yyscanner)
 {
     MACRO *mm = (MACRO*) mmalloc(csound, sizeof(MACRO));
-    int   arg = 0, i, c;
+    int   i, c;
     int   size = 100;
     mm->margs = MARGS;    /* Initial size */
     //    printf("Macro definition for %s\n", name0);
@@ -654,6 +708,74 @@ void do_umacro(CSOUND *csound, char *name0, yyscan_t yyscanner)
     csound_orcset_lineno(1+csound_orcget_lineno(yyscanner),yyscanner);
 }
 
+void do_ifdef(CSOUND *csound, char *name0, yyscan_t yyscanner)
+{
+    int c;
+    MACRO *mm;
+    IFDEFSTACK *pp;
+    pp = (IFDEFSTACK*) mcalloc(csound, sizeof(IFDEFSTACK));
+    pp->prv = PARM->ifdefStack;
+    pp->isDef = PARM->isIfndef;
+    for (mm = PARM->macros; mm != NULL; mm = mm->next) {
+      if (strcmp(name0, mm->name) == 0) {
+        pp->isDef ^= (unsigned char) 1;
+        break;
+      }
+    }
+    PARM->ifdefStack = pp;
+    pp->isSkip = pp->isDef ^ (unsigned char) 1;
+    if (pp->isSkip)
+      do_ifdef_skip_code(csound, yyscanner);
+    else
+      while ((c = input(yyscanner)) != '\n' && c != EOF);
+}
+
+void do_ifdef_skip_code(CSOUND *csound, yyscan_t yyscanner)
+{
+    int i, c, nested_ifdef = 0;
+    char *buf;
+    IFDEFSTACK *pp;
+    buf = (char*)malloc(8*sizeof(char));
+    pp = PARM->ifdefStack;
+    c = input(yyscanner);
+    for (;;) {
+      while (c!='\n') {
+        if (UNLIKELY(c == EOF)) {
+          csound->Message(csound, Str("Unmatched #if%sdef\n"),
+                          PARM->isIfndef ? "n" : "");
+          csound->LongJmp(csound, 1);
+        }
+        c = input(yyscanner);
+      }
+      while (isblank(c = input(yyscanner)));  /* eat the whitespace */
+      if (c == '#') {
+        for (i=0; islower(c = input(yyscanner)) && i < 7; i++)
+          buf[i] = c;
+        buf[i] = '\0';
+        if (strcmp("end", buf) == 0 || strcmp("endif", buf) == 0) {
+          if (nested_ifdef-- == 0) {
+            PARM->ifdefStack = pp->prv;
+            mfree(csound, pp);
+            break;
+          }
+        }
+        else if (strcmp("ifdef", buf) == 0 || strcmp("ifndef", buf) == 0) {
+          nested_ifdef++;
+        }
+        else if (strcmp("else", buf) == 0 && nested_ifdef == 0) {
+          if (pp->isElse) {
+            csound->Message(csound, Str("#else after #else\n"));
+            csound->LongJmp(csound, 1);
+          }
+          pp->isElse = 1;
+          break;
+        }
+      }
+    }
+    free(buf);
+    while (c != '\n' && c != EOF) c = input(yyscanner);
+}
+
 ORCTOKEN *new_token(CSOUND *csound, int type)
 {
     ORCTOKEN *ans = (ORCTOKEN*)mcalloc(csound, sizeof(ORCTOKEN));
@@ -663,7 +785,7 @@ ORCTOKEN *new_token(CSOUND *csound, int type)
 
 ORCTOKEN *make_token(CSOUND *csound, char *s)
 {
-    ORCTOKEN *ans = new_token(csound, T_STRCONST);
+    ORCTOKEN *ans = new_token(csound, STRING_TOKEN);
     int len = strlen(s);
     ans->lexeme = (char*)mcalloc(csound, len + 1);
     strcpy(ans->lexeme, s);
@@ -672,7 +794,7 @@ ORCTOKEN *make_token(CSOUND *csound, char *s)
 
 ORCTOKEN *make_label(CSOUND *csound, char *s)
 {
-    ORCTOKEN *ans = new_token(csound, T_LABEL);
+    ORCTOKEN *ans = new_token(csound, LABEL_TOKEN);
     int len = strlen(s);
     ans->lexeme = (char*)mcalloc(csound, len);
     strncpy(ans->lexeme, s, len - 1); /* Not the trailing colon */
@@ -681,7 +803,7 @@ ORCTOKEN *make_label(CSOUND *csound, char *s)
 
 ORCTOKEN *make_string(CSOUND *csound, char *s)
 {
-    ORCTOKEN *ans = new_token(csound, T_STRCONST);
+    ORCTOKEN *ans = new_token(csound, STRING_TOKEN);
     int len = strlen(s);
 /* Keep the quote marks */
     /* ans->lexeme = (char*)mcalloc(csound, len-1); */
@@ -702,7 +824,7 @@ ORCTOKEN *do_at(CSOUND *csound, int k, struct yyguts_t *yyg)
     while (*s=='@') s++;
     n = atoi(s);
     while (i<=n-k && i< 0x4000000) i <<= 1;
-    ans = new_token(csound, T_INTGR);
+    ans = new_token(csound, INTEGER_TOKEN);
     sprintf(buf, "%d", i+k);
     len = strlen(buf);
     ans->lexeme = (char*)mcalloc(csound, len + 1);
@@ -714,7 +836,7 @@ ORCTOKEN *do_at(CSOUND *csound, int k, struct yyguts_t *yyg)
 ORCTOKEN *make_int(CSOUND *csound, char *s)
 {
     int n = atoi(s);
-    ORCTOKEN *ans = new_token(csound, T_INTGR);
+    ORCTOKEN *ans = new_token(csound, INTEGER_TOKEN);
     int len = strlen(s);
     ans->lexeme = (char*)mcalloc(csound, len + 1);
     strncpy(ans->lexeme, s, len);
@@ -725,7 +847,7 @@ ORCTOKEN *make_int(CSOUND *csound, char *s)
 ORCTOKEN *make_num(CSOUND *csound, char *s)
 {
     double n = atof(s);
-    ORCTOKEN *ans = new_token(csound, T_NUMBER);
+    ORCTOKEN *ans = new_token(csound, NUMBER_TOKEN);
     int len = strlen(s);
     ans->lexeme = (char*)mcalloc(csound, len + 1);
     strncpy(ans->lexeme, s, len);
@@ -755,20 +877,20 @@ static void add_math_const_macro(CSOUND *csound, void* yyscanner,
 void cs_init_math_constants_macros(CSOUND *csound, void* yyscanner)
  {
      PARM->macros = NULL;
-     add_math_const_macro(csound, yyscanner, "E", "2.7182818284590452354");
-     add_math_const_macro(csound, yyscanner, "LOG2E", "1.4426950408889634074");
-     add_math_const_macro(csound, yyscanner, "LOG10E", "0.43429448190325182765");
-     add_math_const_macro(csound, yyscanner, "LN2", "0.69314718055994530942");
-     add_math_const_macro(csound, yyscanner, "LN10", "2.30258509299404568402");
-     add_math_const_macro(csound, yyscanner, "PI", "3.14159265358979323846");
-     add_math_const_macro(csound, yyscanner, "PI_2", "1.57079632679489661923");
-     add_math_const_macro(csound, yyscanner, "PI_4", "0.78539816339744830962");
-     add_math_const_macro(csound, yyscanner, "1_PI", "0.31830988618379067154");
-     add_math_const_macro(csound, yyscanner, "2_PI", "0.63661977236758134308");
-     add_math_const_macro(csound, yyscanner, "2_SQRTPI", "1.12837916709551257390");
+     add_math_const_macro(csound, yyscanner, "E",     "2.71828182845904523536");
+     add_math_const_macro(csound, yyscanner, "LOG2E", "1.44269504088896340736");
+     add_math_const_macro(csound, yyscanner, "LOG10E","0.43429448190325182765");
+     add_math_const_macro(csound, yyscanner, "LN2",   "0.69314718055994530942");
+     add_math_const_macro(csound, yyscanner, "LN10",  "2.30258509299404568402");
+     add_math_const_macro(csound, yyscanner, "PI",    "3.14159265358979323846");
+     add_math_const_macro(csound, yyscanner, "PI_2",  "1.57079632679489661923");
+     add_math_const_macro(csound, yyscanner, "PI_4",  "0.78539816339744830962");
+     add_math_const_macro(csound, yyscanner, "1_PI",  "0.31830988618379067154");
+     add_math_const_macro(csound, yyscanner, "2_PI",  "0.63661977236758134308");
+     add_math_const_macro(csound, yyscanner,"2_SQRTPI", "1.12837916709551257390");
      add_math_const_macro(csound, yyscanner, "SQRT2", "1.41421356237309504880");
-     add_math_const_macro(csound, yyscanner, "SQRT1_2", "0.70710678118654752440");
-     add_math_const_macro(csound, yyscanner, "INF", "2147483647.0"); /* ~7 years */
+     add_math_const_macro(csound, yyscanner,"SQRT1_2","0.70710678118654752440");
+     add_math_const_macro(csound, yyscanner, "INF",   "2147483647.0"); /* ~7 years */
 }
 
 void cs_init_omacros(CSOUND *csound, void *yyscanner, NAMES *nn)
@@ -813,17 +935,19 @@ void cs_init_omacros(CSOUND *csound, void *yyscanner, NAMES *nn)
 }
 
 
-/* Functions for working with grabbing input one line aa time */
+#if 0
+/* Functions for working with grabbing input one line at a time */
+/* These two functions assume reading from a file */
 
 int get_next_line(struct yyguts_t * yyg)
 {
-    int i;
     char *p;
     void *yyscanner = yyg;
 
     PARM->nBuffer = 0;
 
     p = fgets(yyextra->buffer, lMaxBuffer, yyin);
+    printf("get_next_line: %s\n", yyextra->buffer);
     if (UNLIKELY(p == NULL)) {
       if (ferror(yyin))
         return -1;
@@ -843,7 +967,7 @@ int get_next_char(char *b, int maxBuffer, struct yyguts_t* yyg)
     void *yyscanner = yyg;
     if (UNLIKELY( feof(yyin)  ))
       return 0;
-
+    printf("get_next_char: %s\n", yyextra->buffer);
     while (  PARM->nBuffer >= PARM->lBuffer  ) {
       frc = get_next_line(yyg);
       if (UNLIKELY(  frc != 0  ))
@@ -853,6 +977,12 @@ int get_next_char(char *b, int maxBuffer, struct yyguts_t* yyg)
     b[0] = yyextra->buffer[PARM->nBuffer];
     PARM->nBuffer += 1;
 
-    return b[0]==0?0:1;
+    return b[0]=='\0'?0:1;
 }
+#endif
 
+char *csound_orcget_current_pointer(void *yyscanner)
+{
+    struct yyguts_t *yyg  = (struct yyguts_t*)yyscanner;
+    return yyg->yy_c_buf_p;
+}
diff --git a/Engine/csound_orc.y b/Engine/csound_orc.y
index c39a41b..8a46b65 100644
--- a/Engine/csound_orc.y
+++ b/Engine/csound_orc.y
@@ -27,57 +27,38 @@
 %lex-param { CSOUND * csound }
 %lex-param {yyscan_t *scanner}
 
-%token S_COM
-%token S_Q
-%token S_COL
-%token S_NOT
-%token S_PLUS
-%token S_MINUS
-%token S_TIMES
-%token S_DIV
-%token S_MOD
-%token S_POW
-%token S_NL
-%token S_LB
-%token S_RB
-%token S_SLB
-%token S_SRB
+%token NEWLINE
 %token S_NEQ
 %token S_AND
 %token S_OR
 %token S_LT
 %token S_LE
 %token S_EQ
-%token S_ASSIGN
 %token S_TASSIGN
 %token S_TABREF
 %token S_GT
 %token S_GE
-%token S_BITAND
-%token S_BITOR
-%token S_NEQV
-%token S_BITSHL
-%token S_BITSHR
-%token S_BITNOT
+%token S_BITSHIFT_LEFT
+%token S_BITSHIFT_RRIGHT
 
-%token T_LABEL
-%token T_IF
+%token LABEL_TOKEN
+%token IF_TOKEN
 
 %token T_OPCODE0
 %token T_OPCODE
 
-%token T_UDO
-%token T_UDOSTART
-%token T_UDOEND
-%token T_UDO_ANS
-%token T_UDO_ARGS
+%token UDO_TOKEN
+%token UDOSTART_DEFINITION
+%token UDOEND_TOKEN
+%token UDO_ANS_TOKEN
+%token UDO_ARGS_TOKEN
 
 %token T_ERROR
 
 %token T_FUNCTION
 
-%token T_INSTR
-%token T_ENDIN
+%token INSTR_TOKEN
+%token ENDIN_TOKEN
 %token T_STRSET
 %token T_PSET
 %token T_CTRLINIT
@@ -87,17 +68,17 @@
 %token T_ZAKINIT
 %token T_FTGEN
 %token T_INIT
-%token T_GOTO
-%token T_KGOTO
-%token T_IGOTO
-
-%token T_SRATE
-%token T_KRATE
-%token T_KSMPS
-%token T_NCHNLS
-%token T_NCHNLSI
-%token T_0DBFS
-%token T_STRCONST
+%token GOTO_TOKEN
+%token KGOTO_TOKEN
+%token IGOTO_TOKEN
+
+%token SRATE_TOKEN
+%token KRATE_TOKEN
+%token KSMPS_TOKEN
+%token NCHNLS_TOKEN
+%token NCHNLSI_TOKEN
+%token ZERODBFS_TOKEN
+%token STRING_TOKEN
 %token T_IDENT
 
 %token T_IDENT_I
@@ -117,37 +98,37 @@
 %token T_IDENT_P
 %token T_IDENT_B
 %token T_IDENT_b
-%token T_INTGR
-%token T_NUMBER
-%token T_THEN
-%token T_ITHEN
-%token T_KTHEN
-%token T_ELSEIF
-%token T_ELSE
-%token T_ENDIF
-%token T_UNTIL
-%token T_DO
-%token T_OD
+%token INTEGER_TOKEN
+%token NUMBER_TOKEN
+%token THEN_TOKEN
+%token ITHEN_TOKEN
+%token KTHEN_TOKEN
+%token ELSEIF_TOKEN
+%token ELSE_TOKEN
+%token ENDIF_TOKEN
+%token UNTIL_TOKEN
+%token DO_TOKEN
+%token OD_TOKEN
 
 %token T_INSTLIST
 
 %start orcfile
 %left S_AND S_OR
-%nonassoc T_THEN T_ITHEN T_KTHEN T_ELSE /* NOT SURE IF THIS IS NECESSARY */
-%left S_PLUS S_MINUS
-%left S_STAR S_SLASH S_MOD
-%left S_POW
-%left S_BITOR
-%left S_BITAND
-%left S_NEQV
-%left S_BITSHL
-%left S_BITSHR
-%right S_BITNOT
+%nonassoc THEN_TOKEN ITHEN_TOKEN KTHEN_TOKEN ELSE_TOKEN /* NOT SURE IF THIS IS NECESSARY */
+%left '+' '-'
+%left '*' '/' '%'
+%left '^'
+%left '|'
+%left '&'
+%left '#'
+%left S_BITSHIFT_LEFT
+%left S_BITSHIFT_RIGHT
+%right '~'
 %right S_UNOT
 %right S_UMINUS
 %right S_ATAT
 %right S_AT
-%left S_Q
+%left '?'
 %nonassoc S_LT S_GT S_LEQ S_GEQ S_EQ S_NEQ
 %token S_GOTO
 %token T_HIGHEST
@@ -186,15 +167,18 @@
 extern TREE* appendToTree(CSOUND * csound, TREE *first, TREE *newlast);
 extern int csound_orclex(TREE**, CSOUND *, void *);
 extern void print_tree(CSOUND *, char *msg, TREE *);
-extern void csound_orcerror(PARSE_PARM *, void *, CSOUND *, TREE*, char*);
+extern void csound_orcerror(PARSE_PARM *, void *, CSOUND *, TREE*, const char*);
 extern void add_udo_definition(CSOUND*, char *, char *, char *);
 extern ORCTOKEN *lookup_token(CSOUND*,char*,void*);
+#define LINE csound_orcget_lineno(scanner)
+extern int csound_orcget_lineno(void *);
 %}
 %%
 
 orcfile           : rootstatement
                         {
                             *astTree = *((TREE *)$1);
+                            csound->synterrcnt = csound_orcnerrs;
                             //print_tree(csound, "ALL", $1);
                         }
                   ;
@@ -216,55 +200,39 @@ rootstatement     : rootstatement topstatement
                   | udodecl
                   ;
 
-/* FIXME: Does not allow "instr 2,3,4,5,6" syntax */
-instlist  : T_INTGR S_COM instlist
-              { $$ = make_node(csound, T_INSTLIST,
-                               make_leaf(csound, T_INTGR, (ORCTOKEN *)$1), $3); }
-          | T_IDENT S_COM instlist
+instlist  : INTEGER_TOKEN ',' instlist
+              { $$ = make_node(csound,LINE, T_INSTLIST,
+                               make_leaf(csound, LINE,
+                                         INTEGER_TOKEN, (ORCTOKEN *)$1), $3); }
+          | T_IDENT ',' instlist
               {
 #ifdef PARCS
                   csp_orc_sa_instr_add(csound, ((ORCTOKEN *)$1)->lexeme);
 #endif
-                  $$ = make_node(csound, T_INSTLIST,
-                               make_leaf(csound, T_IDENT, (ORCTOKEN *)$1), $3); }
-          | T_INTGR { $$ = make_leaf(csound, T_INTGR, (ORCTOKEN *)$1); }
-          | T_IDENT { $$ = make_leaf(csound, T_IDENT, (ORCTOKEN *)$1); }
+                  $$ = make_node(csound,LINE, T_INSTLIST,
+                               make_leaf(csound, LINE,
+                                         T_IDENT, (ORCTOKEN *)$1), $3); }
+          | INTEGER_TOKEN { $$ = make_leaf(csound, LINE,
+                                           INTEGER_TOKEN, (ORCTOKEN *)$1); }
+          | T_IDENT { $$ = make_leaf(csound, LINE, T_IDENT, (ORCTOKEN *)$1); }
           ;
 
-instrdecl : T_INSTR
+instrdecl : INSTR_TOKEN
                 { namedInstrFlag = 1; }
-            instlist S_NL
+            instlist NEWLINE
                 { namedInstrFlag = 0;
 #ifdef PARCS
                   csp_orc_sa_instr_add_tree(csound, $3);
 #endif
                 }
-            statementlist T_ENDIN S_NL
+            statementlist ENDIN_TOKEN NEWLINE
                 {
-                    $$ = make_node(csound, T_INSTR, $3, $6);
+                    $$ = make_node(csound, LINE, INSTR_TOKEN, $3, $6);
 #ifdef PARCS
                     csp_orc_sa_instr_finalize(csound);
 #endif
                 }
-
-/*           | T_INSTR */
-/*                 { namedInstrFlag = 1; } */
-/*             T_IDENT S_NL */
-/*                 { namedInstrFlag = 0; */
-/* #ifdef PARCS */
-/*                   csp_orc_sa_instr_add(csound, ((ORCTOKEN *)$3)->lexeme); */
-/* #endif */
-/*                 } */
-/*             statementlist T_ENDIN S_NL */
-/*                 { */
-/*                     TREE *ident = make_leaf(csound, T_IDENT, (ORCTOKEN *)$3); */
-/*                     $$ = make_node(csound, T_INSTR, ident, $6); */
-/* #ifdef PARCS */
-/*                     csp_orc_sa_instr_finalize(csound); */
-/* #endif */
-/*                 } */
-
-          | T_INSTR S_NL error
+          | INSTR_TOKEN NEWLINE error
                 {
                     namedInstrFlag = 0;
                     csound->Message(csound, Str("No number following instr\n"));
@@ -274,15 +242,15 @@ instrdecl : T_INSTR
                 }
           ;
 
-udodecl   : T_UDOSTART
+udodecl   : UDOSTART_DEFINITION
                                                 { udoflag = -2; }
                   T_IDENT
                                                 { udoflag = -1; }
-                  S_COM
+                  ','
                                                 { udoflag = 0;}
-              T_UDO_ANS
+              UDO_ANS_TOKEN
                         { udoflag = 1; }
-              S_COM T_UDO_ARGS S_NL
+              ',' UDO_ARGS_TOKEN NEWLINE
               {
                 udoflag = 2;
                 add_udo_definition(csound,
@@ -290,12 +258,16 @@ udodecl   : T_UDOSTART
                         ((ORCTOKEN *)$7)->lexeme,
                         ((ORCTOKEN *)$10)->lexeme);
               }
-              statementlist T_UDOEND S_NL
+              statementlist UDOEND_TOKEN NEWLINE
               {
-                TREE *udoTop = make_leaf(csound, T_UDO, (ORCTOKEN *)NULL);
-                TREE *ident = make_leaf(csound, T_IDENT, (ORCTOKEN *)$3);
-                TREE *udoAns = make_leaf(csound, T_UDO_ANS, (ORCTOKEN *)$7);
-                TREE *udoArgs = make_leaf(csound, T_UDO_ARGS, (ORCTOKEN *)$10);
+                TREE *udoTop = make_leaf(csound, LINE, UDO_TOKEN,
+                                         (ORCTOKEN *)NULL);
+                TREE *ident = make_leaf(csound, LINE, T_IDENT,
+                                        (ORCTOKEN *)$3);
+                TREE *udoAns = make_leaf(csound, LINE, UDO_ANS_TOKEN,
+                                         (ORCTOKEN *)$7);
+                TREE *udoArgs = make_leaf(csound, LINE, UDO_ARGS_TOKEN,
+                                          (ORCTOKEN *)$10);
                 udoflag = -1;
                 if (UNLIKELY(PARSER_DEBUG))
                   csound->Message(csound, "UDO COMPLETE\n");
@@ -322,10 +294,10 @@ statementlist : statementlist statement
                 | /* null */          { $$ = NULL; }
                 ;
 
-topstatement : rident S_ASSIGN expr S_NL
+topstatement : rident '=' expr NEWLINE
                 {
 
-                  TREE *ans = make_leaf(csound, S_ASSIGN, (ORCTOKEN *)$2);
+                  TREE *ans = make_leaf(csound,LINE, '=', (ORCTOKEN *)$2);
                   ans->left = (TREE *)$1;
                   ans->right = (TREE *)$3;
                   /* ans->value->lexeme = get_assignment_type(csound,
@@ -337,9 +309,9 @@ topstatement : rident S_ASSIGN expr S_NL
 
              ;
 
-statement : ident S_ASSIGN expr S_NL
+statement : ident '=' expr NEWLINE
                 {
-                  TREE *ans = make_leaf(csound, S_ASSIGN, (ORCTOKEN *)$2);
+                  TREE *ans = make_leaf(csound,LINE, '=', (ORCTOKEN *)$2);
                   ans->left = (TREE *)$1;
                   ans->right = (TREE *)$3;
                   /* ans->value->lexeme = get_assignment_type(csound,
@@ -352,18 +324,18 @@ statement : ident S_ASSIGN expr S_NL
                                     csp_orc_sa_globals_find(csound, ans->right));
 #endif
                 }
-          | T_IDENT_T S_ASSIGN T_IDENT_T S_NL
+          | T_IDENT_T '=' T_IDENT_T NEWLINE
           {
               ORCTOKEN *op = lookup_token(csound, "#copytab", NULL);
-              TREE *ans = make_leaf(csound, T_OPCODE, op);
-              ans->left = make_leaf(csound, T_IDENT_T, (ORCTOKEN *)$1);
-              ans->right = make_leaf(csound, T_IDENT_T, (ORCTOKEN *)$3);
+              TREE *ans = make_leaf(csound,LINE, T_OPCODE, op);
+              ans->left = make_leaf(csound,LINE, T_IDENT_T, (ORCTOKEN *)$1);
+              ans->right = make_leaf(csound,LINE, T_IDENT_T, (ORCTOKEN *)$3);
               $$ = ans;
           }
-          | T_IDENT_T S_SLB iexp S_SRB S_ASSIGN expr S_NL
+          | T_IDENT_T '[' iexp ']' '=' expr NEWLINE
           {
-              TREE *ans = make_leaf(csound, S_ASSIGN, (ORCTOKEN *)$5);
-              ans->left = make_leaf(csound, T_IDENT_T, (ORCTOKEN *)$1);
+              TREE *ans = make_leaf(csound,LINE, '=', (ORCTOKEN *)$5);
+              ans->left = make_leaf(csound,LINE, T_IDENT_T, (ORCTOKEN *)$1);
               ans->right = appendToTree(csound, $3, $6);
                   /* ans->value->lexeme = get_assignment_type(csound,
                      ans->left->value->lexeme, ans->right->value->lexeme); */
@@ -371,11 +343,11 @@ statement : ident S_ASSIGN expr S_NL
               $$ = ans;
   /* #ifdef PARCS */
   /*                   csp_orc_sa_global_read_write_add_list(csound, */
-  /*                                     csp_orc_sa_globals_find(csound, ans->left) */
-  /*                                     csp_orc_sa_globals_find(csound, ans->right)); */
+  /*                      csp_orc_sa_globals_find(csound, ans->left) */
+  /*                   csp_orc_sa_globals_find(csound, ans->right)); */
   /* #endif */
           }
-          | ans opcode exprlist S_NL
+          | ans opcode exprlist NEWLINE
                 {
 
                   $2->left = $1;
@@ -386,9 +358,10 @@ statement : ident S_ASSIGN expr S_NL
                   csp_orc_sa_global_read_write_add_list(csound,
                                     csp_orc_sa_globals_find(csound, $2->left),
                                     csp_orc_sa_globals_find(csound, $2->right));
+                  csp_orc_sa_interlocks(csound, $2->value);
 #endif
                 }
-          | opcode0 exprlist S_NL
+          | opcode0 exprlist NEWLINE
                 {
                   ((TREE *)$1)->left = NULL;
                   ((TREE *)$1)->right = (TREE *)$2;
@@ -398,70 +371,85 @@ statement : ident S_ASSIGN expr S_NL
                   csp_orc_sa_global_read_add_list(csound,
                                   csp_orc_sa_globals_find(csound,
                                                           $1->right));
+                  csp_orc_sa_interlocks(csound, $1->value);
 #endif
                 }
-          | T_LABEL
+          | LABEL_TOKEN
                 {
-                    $$ = make_leaf(csound, T_LABEL, (ORCTOKEN *)$1);
+                    $$ = make_leaf(csound,LINE, LABEL_TOKEN, (ORCTOKEN *)$1);
                 }
-          | goto label S_NL
+          | goto label NEWLINE
                 {
                     $1->left = NULL;
-                    $1->right = make_leaf(csound, T_LABEL, (ORCTOKEN *)$2);
+                    $1->right = make_leaf(csound, LINE,
+                                          LABEL_TOKEN, (ORCTOKEN *)$2);
                     $$ = $1;
                 }
-          | T_IF expr goto label S_NL
+          | IF_TOKEN bexpr goto label NEWLINE
                 {
                     $3->left = NULL;
-                    $3->right = make_leaf(csound, T_LABEL, (ORCTOKEN *)$4);
-                    $$ = make_node(csound, T_IF, $2, $3);
+                    $3->right = make_leaf(csound, LINE,
+                                          LABEL_TOKEN, (ORCTOKEN *)$4);
+                    $$ = make_node(csound,LINE, IF_TOKEN, $2, $3);
                 }
           | ifthen
-          | T_UNTIL expr T_DO statementlist T_OD
+          | UNTIL_TOKEN bexpr DO_TOKEN statementlist OD_TOKEN
               {
-                  $$ = make_leaf(csound, T_UNTIL, (ORCTOKEN *)$1);
+                  $$ = make_leaf(csound,LINE, UNTIL_TOKEN, (ORCTOKEN *)$1);
                   $$->left = $2;
                   $$->right = $4;
               }
-          | S_NL { $$ = NULL; }
+          | NEWLINE { $$ = NULL; }
           ;
-
 ans       : ident               { $$ = $1; }
-          | ans S_COM ident     { $$ = appendToTree(csound, $1, $3); }
+          | T_IDENT error       
+              { csound->Message(csound,
+                      "Unexpected untyped word %s when expecting a variable\n", 
+                      ((ORCTOKEN*)$1)->lexeme);
+                $$ = NULL;
+              }
+          | ans ',' ident     { $$ = appendToTree(csound, $1, $3); }
+          | ans ',' T_IDENT error  
+              { csound->Message(csound,
+                      "Unexpected untyped word %s when expecting a variable\n", 
+                               ((ORCTOKEN*)$3)->lexeme);
+                $$ = appendToTree(csound, $1, NULL);
+              }
           ;
 
-ifthen    : T_IF expr then S_NL statementlist T_ENDIF S_NL
+ifthen    : IF_TOKEN bexpr then NEWLINE statementlist ENDIF_TOKEN NEWLINE
           {
             $3->right = $5;
-            $$ = make_node(csound, T_IF, $2, $3);
+            $$ = make_node(csound,LINE, IF_TOKEN, $2, $3);
             //print_tree(csound, "if-endif", $$);
           }
-          | T_IF expr then S_NL statementlist T_ELSE statementlist T_ENDIF S_NL
+          | IF_TOKEN bexpr then NEWLINE statementlist ELSE_TOKEN
+                                        statementlist ENDIF_TOKEN NEWLINE
           {
             $3->right = $5;
-            $3->next = make_node(csound, T_ELSE, NULL, $7);
-            $$ = make_node(csound, T_IF, $2, $3);
+            $3->next = make_node(csound,LINE, ELSE_TOKEN, NULL, $7);
+            $$ = make_node(csound,LINE, IF_TOKEN, $2, $3);
             //print_tree(csound, "if-else", $$);
 
           }
-          | T_IF expr then S_NL statementlist elseiflist T_ENDIF S_NL
+        | IF_TOKEN bexpr then NEWLINE statementlist elseiflist ENDIF_TOKEN NEWLINE
           {
             if (UNLIKELY(PARSER_DEBUG))
                 csound->Message(csound, "IF-ELSEIF FOUND!\n");
             $3->right = $5;
             $3->next = $6;
-            $$ = make_node(csound, T_IF, $2, $3);
+            $$ = make_node(csound, LINE, IF_TOKEN, $2, $3);
             //print_tree(csound, "if-elseif\n", $$);
           }
-          | T_IF expr then S_NL statementlist elseiflist T_ELSE
-            statementlist T_ENDIF S_NL
+          | IF_TOKEN bexpr then NEWLINE statementlist elseiflist ELSE_TOKEN
+            statementlist ENDIF_TOKEN NEWLINE
           {
             TREE * tempLastNode;
 
             $3->right = $5;
             $3->next = $6;
 
-            $$ = make_node(csound, T_IF, $2, $3);
+            $$ = make_node(csound, LINE, IF_TOKEN, $2, $3);
 
             tempLastNode = $$;
 
@@ -469,7 +457,8 @@ ifthen    : T_IF expr then S_NL statementlist T_ENDIF S_NL
                 tempLastNode = tempLastNode->right->next;
             }
 
-            tempLastNode->right->next = make_node(csound, T_ELSE, NULL, $8);
+            tempLastNode->right->next = make_node(csound, LINE,
+                                                  ELSE_TOKEN, NULL, $8);
             //print_tree(csound, "IF TREE", $$);
           }
           ;
@@ -478,7 +467,8 @@ elseiflist : elseiflist elseif
             {
                 TREE * tempLastNode = $1;
 
-                while (tempLastNode->right!=NULL && tempLastNode->right->next!=NULL) {
+                while (tempLastNode->right!=NULL &&
+                       tempLastNode->right->next!=NULL) {
                     tempLastNode = tempLastNode->right->next;
                 }
 
@@ -488,30 +478,30 @@ elseiflist : elseiflist elseif
             | elseif { $$ = $1; }
            ;
 
-elseif    : T_ELSEIF expr then S_NL statementlist
+elseif    : ELSEIF_TOKEN bexpr then NEWLINE statementlist
             {
                 if (UNLIKELY(PARSER_DEBUG))
                   csound->Message(csound, "ELSEIF FOUND!\n");
                 $3->right = $5;
-                $$ = make_node(csound, T_ELSEIF, $2, $3);
+                $$ = make_node(csound,LINE, ELSEIF_TOKEN, $2, $3);
                 //print_tree(csound, "ELSEIF", $$);
             }
           ;
 
-then      : T_THEN
-            { $$ = make_leaf(csound, T_THEN, (ORCTOKEN *)$1); }
-          | T_KTHEN
-            { $$ = make_leaf(csound, T_KTHEN, (ORCTOKEN *)$1); }
-          | T_ITHEN
-            { $$ = make_leaf(csound, T_ITHEN, (ORCTOKEN *)$1); }
+then      : THEN_TOKEN
+            { $$ = make_leaf(csound,LINE, THEN_TOKEN, (ORCTOKEN *)$1); }
+          | KTHEN_TOKEN
+            { $$ = make_leaf(csound,LINE, KTHEN_TOKEN, (ORCTOKEN *)$1); }
+          | ITHEN_TOKEN
+            { $$ = make_leaf(csound,LINE, ITHEN_TOKEN, (ORCTOKEN *)$1); }
           ;
 
-goto  : T_GOTO
-            { $$ = make_leaf(csound, T_GOTO, (ORCTOKEN *)$1); }
-          | T_KGOTO
-            { $$ = make_leaf(csound, T_KGOTO, (ORCTOKEN *)$1); }
-          | T_IGOTO
-            { $$ = make_leaf(csound, T_IGOTO, (ORCTOKEN *)$1); }
+goto  : GOTO_TOKEN
+            { $$ = make_leaf(csound,LINE, GOTO_TOKEN, (ORCTOKEN *)$1); }
+          | KGOTO_TOKEN
+            { $$ = make_leaf(csound,LINE, KGOTO_TOKEN, (ORCTOKEN *)$1); }
+          | IGOTO_TOKEN
+            { $$ = make_leaf(csound,LINE, IGOTO_TOKEN, (ORCTOKEN *)$1); }
           ;
 
 /* Allow all words as a label */
@@ -536,155 +526,175 @@ label : T_OPCODE    { $$ = (TREE *)$1; }
       ;
 
 
-exprlist  : exprlist S_COM expr
+exprlist  : exprlist ',' expr
                 {
-                    /* $$ = make_node(S_COM, $1, $3); */
+                    /* $$ = make_node(',', $1, $3); */
                     $$ = appendToTree(csound, $1, $3);
                 }
-          | exprlist S_COM label
+          | exprlist ',' label
                 {
-                    /* $$ = make_node(S_COM, $1, $3); */
+                    /* $$ = make_node(',', $1, $3); */
                     $$ = appendToTree(csound, $1,
-                                      make_leaf(csound, T_LABEL, (ORCTOKEN *)$3));
+                                      make_leaf(csound, LINE,
+                                                LABEL_TOKEN, (ORCTOKEN *)$3));
                 }
-          | exprlist S_COM error
+          | exprlist ',' error
           | expr { $$ = $1;     }
-          | T_IDENT { $$ = make_leaf(csound, T_LABEL, (ORCTOKEN *)$1);     }
+          | T_IDENT { $$ = make_leaf(csound, LINE, LABEL_TOKEN, (ORCTOKEN *)$1); }
           | /* null */          { $$ = NULL; }
           ;
 
-expr      : expr S_Q expr S_COL expr %prec S_Q
-            { $$ = make_node(csound, S_Q, $1,
-                             make_node(csound, S_COL, $3, $5)); }
-          | expr S_Q expr S_COL error
-          | expr S_Q expr error
-          | expr S_Q error
-          | expr S_LE expr      { $$ = make_node(csound, S_LE, $1, $3); }
+bexpr     : '(' bexpr ')'       { $$ = $2; }
+          | expr S_LE expr      { $$ = make_node(csound, LINE, S_LE, $1, $3); }
           | expr S_LE error
-          | expr S_GE expr      { $$ = make_node(csound, S_GE, $1, $3); }
+          | expr S_GE expr      { $$ = make_node(csound, LINE, S_GE, $1, $3); }
           | expr S_GE error
-          | expr S_NEQ expr     { $$ = make_node(csound, S_NEQ, $1, $3); }
+          | expr S_NEQ expr     { $$ = make_node(csound, LINE, S_NEQ, $1, $3); }
           | expr S_NEQ error
-          | expr S_EQ expr      { $$ = make_node(csound, S_EQ, $1, $3); }
+          | expr S_EQ expr      { $$ = make_node(csound, LINE, S_EQ, $1, $3); }
           | expr S_EQ error
-          | expr S_ASSIGN expr  { $$ = make_node(csound, S_EQ, $1, $3); }
-          | expr S_ASSIGN error
-          | expr S_GT expr      { $$ = make_node(csound, S_GT, $1, $3); }
+          | expr '=' expr       { $$ = make_node(csound, LINE, S_EQ, $1, $3); }
+          | expr '=' error
+          | expr S_GT expr      { $$ = make_node(csound, LINE, S_GT, $1, $3); }
           | expr S_GT error
-          | expr S_LT expr      { $$ = make_node(csound, S_LT, $1, $3); }
+          | expr S_LT expr      { $$ = make_node(csound, LINE, S_LT, $1, $3); }
           | expr S_LT error
-          | expr S_AND expr     { $$ = make_node(csound, S_AND, $1, $3); }
-          | expr S_AND error
-          | expr S_OR expr      { $$ = make_node(csound, S_OR, $1, $3); }
-          | expr S_OR error
-          | S_NOT expr %prec S_UNOT { $$ = make_node(csound, S_UNOT, $2, NULL); }
-          | S_NOT error
+          | bexpr S_AND bexpr   { $$ = make_node(csound, LINE, S_AND, $1, $3); }
+          | bexpr S_AND error
+          | bexpr S_OR bexpr    { $$ = make_node(csound, LINE, S_OR, $1, $3); }
+          | bexpr S_OR error
+          | '!' bexpr %prec S_UNOT { $$ = make_node(csound, LINE,
+                                                    S_UNOT, $2, NULL); }
+          | '!' error
+          ;
+
+expr      : bexpr '?' expr ':' expr %prec '?'
+            { $$ = make_node(csound,LINE, '?', $1,
+                             make_node(csound, LINE, ':', $3, $5)); }
+          | bexpr '?' expr ':' error
+          | bexpr '?' expr error
+          | bexpr '?' error
           | iexp                { $$ = $1; }
           ;
 
-iexp      : iexp S_PLUS iterm   { $$ = make_node(csound, S_PLUS, $1, $3); }
-          | iexp S_PLUS error
-          | iexp S_MINUS iterm  { $$ = make_node(csound, S_MINUS, $1, $3); }
-          | iexp S_MINUS error
+iexp      : iexp '+' iterm   { $$ = make_node(csound, LINE, '+', $1, $3); }
+          | iexp '+' error
+          | iexp '-' iterm  { $$ = make_node(csound ,LINE, '-', $1, $3); }
+          | iexp '-' error
           | iterm               { $$ = $1; }
           ;
 
-iterm     : iterm S_TIMES ifac  { $$ = make_node(csound, S_TIMES, $1, $3); }
-          | iterm S_TIMES error
-          | iterm S_DIV ifac    { $$ = make_node(csound, S_DIV, $1, $3); }
-          | iterm S_DIV error
-          | iterm S_MOD ifac    { $$ = make_node(csound, S_MOD, $1, $3); }
-          | iterm S_MOD error
+iterm     : iterm '*' ifac  { $$ = make_node(csound, LINE, '*', $1, $3); }
+          | iterm '*' error
+          | iterm '/' ifac    { $$ = make_node(csound, LINE, '/', $1, $3); }
+          | iterm '/' error
+          | iterm '%' ifac    { $$ = make_node(csound, LINE, '%', $1, $3); }
+          | iterm '%' error
           | ifac                { $$ = $1; }
           ;
 
 ifac      : ident               { $$ = $1; }
           | constant            { $$ = $1; }
-          | T_IDENT_T S_SLB iexp S_SRB
+          | T_IDENT_T '[' iexp ']'
           {
-              $$ = make_node(csound, S_TABREF,
-                             make_leaf(csound, T_IDENT_T, (ORCTOKEN*)$1), $3);
+              $$ = make_node(csound,LINE, S_TABREF,
+                             make_leaf(csound, LINE,
+                                       T_IDENT_T, (ORCTOKEN*)$1), $3);
           }
-          | S_MINUS ifac %prec S_UMINUS
+          | '-' ifac %prec S_UMINUS
             {
-                $$ = make_node(csound, S_UMINUS, NULL, $2);
+                $$ = make_node(csound,LINE, S_UMINUS, NULL, $2);
             }
-          | S_PLUS ifac %prec S_UMINUS
+          | '+' ifac %prec S_UMINUS
             {
                 $$ = $2;
             }
-          | ifac S_POW ifac   { $$ = make_node(csound, S_POW, $1, $3); }
-          | ifac S_BITOR ifac   { $$ = make_node(csound, S_BITOR, $1, $3); }
-          | ifac S_BITAND ifac   { $$ = make_node(csound, S_BITAND, $1, $3); }
-          | ifac S_NEQV ifac   { $$ = make_node(csound, S_NEQV, $1, $3); }
-          | ifac S_BITSHL ifac   { $$ = make_node(csound, S_BITSHL, $1, $3); }
-          | ifac S_BITSHR ifac   { $$ = make_node(csound, S_BITSHR, $1, $3); }
-          | S_BITNOT ifac %prec S_UMINUS
-            { $$ = make_node(csound, S_BITNOT, NULL, $2);}
-          | S_MINUS error
-          | S_LB expr S_RB      { $$ = $2; }
-          | S_LB expr error
-          | S_LB error
-          | function S_LB exprlist S_RB
+          | ifac '^' ifac        { $$ = make_node(csound, LINE, '^', $1, $3); }
+          | ifac '|' ifac        { $$ = make_node(csound, LINE, '|', $1, $3); }
+          | ifac '&' ifac        { $$ = make_node(csound, LINE, '&', $1, $3); }
+          | ifac '#' ifac        { $$ = make_node(csound, LINE, '#', $1, $3); }
+          | ifac S_BITSHIFT_LEFT ifac   
+                 { $$ = make_node(csound, LINE, S_BITSHIFT_LEFT, $1, $3); }
+          | ifac S_BITSHIFT_RIGHT ifac
+                 { $$ = make_node(csound, LINE, S_BITSHIFT_RIGHT, $1, $3); }
+          | '~' ifac %prec S_UMINUS
+            { $$ = make_node(csound, LINE, '~', NULL, $2);}
+          | '-' error
+          | '(' expr ')'      { $$ = $2; }
+          | '(' expr error
+          | '(' error
+          | function '(' exprlist ')'
             {
                 $1->left = NULL;
                 $1->right = $3;
 
                 $$ = $1;
             }
-          | function S_LB error
+          | function '(' error
           ;
 
-function  : T_FUNCTION  { $$ = make_leaf(csound, T_FUNCTION, (ORCTOKEN *)$1); }
-          ;
+function  : T_FUNCTION  { 
+             printf("FUNCTION ans=%p, token=%p %p\n",
+                    $1, ((ORCTOKEN *)$1)->value);
+#ifdef PARCS
+    //                if ((ORCTOKEN *)$1->value != 0)
+             csp_orc_sa_interlocksf(csound, ((ORCTOKEN *)$1)->value);
+#endif
+             $$ = make_leaf(csound, LINE, T_FUNCTION, (ORCTOKEN *)$1); 
+                }
 
-/* exprstrlist    : exprstrlist S_COM expr
-                                        { $$ = make_node(csound, S_COM, $1, $3); }
-          | exprstrlist S_COM T_STRCONST
-                 { $$ = make_node(csound, S_COM, $1,
-                   make_leaf(csound, T_STRCONST, (ORCTOKEN *)$3)); }
-          | exprstrlist S_COM error
-          | expr                { $$ = $1; }
-          ;
- */
-
-rident    : T_SRATE     { $$ = make_leaf(csound, T_SRATE, (ORCTOKEN *)$1); }
-          | T_KRATE     { $$ = make_leaf(csound, T_KRATE, (ORCTOKEN *)$1); }
-          | T_KSMPS     { $$ = make_leaf(csound, T_KSMPS, (ORCTOKEN *)$1); }
-          | T_NCHNLS    { $$ = make_leaf(csound, T_NCHNLS, (ORCTOKEN *)$1); }
-          | T_NCHNLSI   { $$ = make_leaf(csound, T_NCHNLSI, (ORCTOKEN *)$1); }
-          | T_0DBFS     { $$ = make_leaf(csound, T_0DBFS, (ORCTOKEN *)$1); }
+rident    : SRATE_TOKEN     { $$ = make_leaf(csound, LINE,
+                                             SRATE_TOKEN, (ORCTOKEN *)$1); }
+          | KRATE_TOKEN     { $$ = make_leaf(csound, LINE,
+                                             KRATE_TOKEN, (ORCTOKEN *)$1); }
+          | KSMPS_TOKEN     { $$ = make_leaf(csound, LINE,
+                                             KSMPS_TOKEN, (ORCTOKEN *)$1); }
+          | NCHNLS_TOKEN    { $$ = make_leaf(csound, LINE,
+                                             NCHNLS_TOKEN, (ORCTOKEN *)$1); }
+          | NCHNLSI_TOKEN   { $$ = make_leaf(csound, LINE,
+                                             NCHNLSI_TOKEN, (ORCTOKEN *)$1); }
+          | ZERODBFS_TOKEN  { $$ = make_leaf(csound, LINE,
+                                             ZERODBFS_TOKEN, (ORCTOKEN *)$1); }
           ;
 
-ident     : T_IDENT_I   { $$ = make_leaf(csound, T_IDENT_I, (ORCTOKEN *)$1); }
-          | T_IDENT_K   { $$ = make_leaf(csound, T_IDENT_K, (ORCTOKEN *)$1); }
-          | T_IDENT_F   { $$ = make_leaf(csound, T_IDENT_F, (ORCTOKEN *)$1); }
-          | T_IDENT_W   { $$ = make_leaf(csound, T_IDENT_W, (ORCTOKEN *)$1); }
-          | T_IDENT_S   { $$ = make_leaf(csound, T_IDENT_S, (ORCTOKEN *)$1); }
-          | T_IDENT_T   { $$ = make_leaf(csound, T_IDENT_T, (ORCTOKEN *)$1); }
-          | T_IDENT_A   { $$ = make_leaf(csound, T_IDENT_A, (ORCTOKEN *)$1); }
-          | T_IDENT_P   { $$ = make_leaf(csound, T_IDENT_P, (ORCTOKEN *)$1); }
-          | gident      { $$ = $1; }
+ident     : T_IDENT_I  { $$ = make_leaf(csound, LINE, T_IDENT_I, (ORCTOKEN *)$1); }
+          | T_IDENT_K  { $$ = make_leaf(csound, LINE, T_IDENT_K, (ORCTOKEN *)$1); }
+          | T_IDENT_F  { $$ = make_leaf(csound, LINE, T_IDENT_F, (ORCTOKEN *)$1); }
+          | T_IDENT_W  { $$ = make_leaf(csound, LINE, T_IDENT_W, (ORCTOKEN *)$1); }
+          | T_IDENT_S  { $$ = make_leaf(csound, LINE, T_IDENT_S, (ORCTOKEN *)$1); }
+          | T_IDENT_T  { $$ = make_leaf(csound, LINE, T_IDENT_T, (ORCTOKEN *)$1); }
+          | T_IDENT_A  { $$ = make_leaf(csound, LINE, T_IDENT_A, (ORCTOKEN *)$1); }
+          | T_IDENT_P  { $$ = make_leaf(csound, LINE, T_IDENT_P, (ORCTOKEN *)$1); }
+          | gident     { $$ = $1; }
           ;
 
-gident    : T_IDENT_GI  { $$ = make_leaf(csound, T_IDENT_GI, (ORCTOKEN *)$1); }
-          | T_IDENT_GK  { $$ = make_leaf(csound, T_IDENT_GK, (ORCTOKEN *)$1); }
-          | T_IDENT_GF  { $$ = make_leaf(csound, T_IDENT_GF, (ORCTOKEN *)$1); }
-          | T_IDENT_GW  { $$ = make_leaf(csound, T_IDENT_GW, (ORCTOKEN *)$1); }
-          | T_IDENT_GS  { $$ = make_leaf(csound, T_IDENT_GS, (ORCTOKEN *)$1); }
-          | T_IDENT_GT  { $$ = make_leaf(csound, T_IDENT_GS, (ORCTOKEN *)$1); }
-          | T_IDENT_GA  { $$ = make_leaf(csound, T_IDENT_GA, (ORCTOKEN *)$1); }
+gident    : T_IDENT_GI { $$ = make_leaf(csound, LINE, T_IDENT_GI, (ORCTOKEN *)$1); }
+          | T_IDENT_GK { $$ = make_leaf(csound, LINE, T_IDENT_GK, (ORCTOKEN *)$1); }
+          | T_IDENT_GF { $$ = make_leaf(csound, LINE, T_IDENT_GF, (ORCTOKEN *)$1); }
+          | T_IDENT_GW { $$ = make_leaf(csound, LINE, T_IDENT_GW, (ORCTOKEN *)$1); }
+          | T_IDENT_GS { $$ = make_leaf(csound, LINE, T_IDENT_GS, (ORCTOKEN *)$1); }
+          | T_IDENT_GT { $$ = make_leaf(csound, LINE, T_IDENT_GS, (ORCTOKEN *)$1); }
+          | T_IDENT_GA { $$ = make_leaf(csound, LINE, T_IDENT_GA, (ORCTOKEN *)$1); }
           ;
 
-constant  : T_INTGR     { $$ = make_leaf(csound, T_INTGR, (ORCTOKEN *)$1); }
-          | T_NUMBER    { $$ = make_leaf(csound, T_NUMBER, (ORCTOKEN *)$1); }
-          | T_STRCONST  { $$ = make_leaf(csound, T_STRCONST, (ORCTOKEN *)$1); }
-          | T_SRATE     { $$ = make_leaf(csound, T_NUMBER, (ORCTOKEN *)$1); }
-          | T_KRATE     { $$ = make_leaf(csound, T_NUMBER, (ORCTOKEN *)$1); }
-          | T_KSMPS     { $$ = make_leaf(csound, T_NUMBER, (ORCTOKEN *)$1); }
-          | T_NCHNLS    { $$ = make_leaf(csound, T_NUMBER, (ORCTOKEN *)$1); }
-          | T_NCHNLSI   { $$ = make_leaf(csound, T_NUMBER, (ORCTOKEN *)$1); }
-          | T_0DBFS     { $$ = make_leaf(csound, T_NUMBER, (ORCTOKEN *)$1); }
+constant  : INTEGER_TOKEN { $$ = make_leaf(csound, LINE,
+                                           INTEGER_TOKEN, (ORCTOKEN *)$1); }
+          | NUMBER_TOKEN  { $$ = make_leaf(csound, LINE,
+                                           NUMBER_TOKEN, (ORCTOKEN *)$1); }
+          | STRING_TOKEN  { $$ = make_leaf(csound, LINE,
+                                           STRING_TOKEN, (ORCTOKEN *)$1); }
+          | SRATE_TOKEN   { $$ = make_leaf(csound, LINE,
+                                           NUMBER_TOKEN, (ORCTOKEN *)$1); }
+          | KRATE_TOKEN   { $$ = make_leaf(csound, LINE,
+                                           NUMBER_TOKEN, (ORCTOKEN *)$1); }
+          | KSMPS_TOKEN   { $$ = make_leaf(csound, LINE,
+                                           NUMBER_TOKEN, (ORCTOKEN *)$1); }
+          | NCHNLS_TOKEN  { $$ = make_leaf(csound, LINE,
+                                           NUMBER_TOKEN, (ORCTOKEN *)$1); }
+          | NCHNLSI_TOKEN { $$ = make_leaf(csound, LINE,
+                                           NUMBER_TOKEN, (ORCTOKEN *)$1); }
+          | ZERODBFS_TOKEN { $$ = make_leaf(csound, LINE,
+                                            NUMBER_TOKEN, (ORCTOKEN *)$1); }
           ;
 
 opcode0   : T_OPCODE0
@@ -692,11 +702,11 @@ opcode0   : T_OPCODE0
                 if (UNLIKELY(PARSER_DEBUG))
                   csound->Message(csound, "opcode0 $1=%p (%s)\n",
                                   $1,((ORCTOKEN *)$1)->lexeme );
-                $$ = make_leaf(csound, T_OPCODE0, (ORCTOKEN *)$1);
+                $$ = make_leaf(csound,LINE, T_OPCODE0, (ORCTOKEN *)$1);
             }
           ;
 
-opcode    : T_OPCODE    { $$ = make_leaf(csound, T_OPCODE, (ORCTOKEN *)$1); }
+opcode    : T_OPCODE    { $$ = make_leaf(csound,LINE, T_OPCODE, (ORCTOKEN *)$1); }
           ;
 
 %%
@@ -709,7 +719,8 @@ yyerror(char *s, ...)
   va_start(ap, s);
 
   if(yylloc.first_line)
-    fprintf(stderr, "%d.%d-%d.%d: error: ", yylloc.first_line, yylloc.first_column,
+    fprintf(stderr, "%d.%d-%d.%d: error: ",
+            yylloc.first_line, yylloc.first_column,
 	    yylloc.last_line, yylloc.last_column);
   vfprintf(stderr, s, ap);
   fprintf(stderr, "\n");
diff --git a/Engine/csound_orc_compile.c b/Engine/csound_orc_compile.c
index 76cef3e..78e136d 100644
--- a/Engine/csound_orc_compile.c
+++ b/Engine/csound_orc_compile.c
@@ -35,8 +35,7 @@
 #include "typetabl.h"
 
 typedef struct NAME_ {
-    char          *namep;
-    struct NAME_  *nxt;
+    char          *namep;    struct NAME_  *nxt;
     int           type, count;
 } NAME;
 
@@ -54,6 +53,9 @@ typedef struct {
     int32      poolcount, strpool_cnt, argoffsize;
     int       nconsts;
     int       *constTbl;
+    int32     *typemask_tabl;
+    int32     *typemask_tabl_in, *typemask_tabl_out;
+    int       lgprevdef;
 } OTRAN_GLOBALS;
 
 static  int     gexist(CSOUND *, char *), gbloffndx(CSOUND *, char *);
@@ -61,11 +63,11 @@ static  int     lcloffndx(CSOUND *, char *);
 static  int     constndx(CSOUND *, const char *);
 static  int     strconstndx(CSOUND *, const char *);
 static  void    insprep(CSOUND *, INSTRTXT *);
-static  void    lgbuild(CSOUND *, char *);
+static  void    lgbuild(CSOUND *, char *, int inarg);
 static  void    gblnamset(CSOUND *, char *);
 static  int     plgndx(CSOUND *, char *);
 static  NAME    *lclnamset(CSOUND *, char *);
-        int     lgexist(CSOUND *, const char *);
+/*        int     lgexist(CSOUND *, const char *);*/
 static  void    delete_global_namepool(CSOUND *);
 static  void    delete_local_namepool(CSOUND *);
 static  int     pnum(char *s) ;
@@ -106,10 +108,59 @@ static void lblclear(CSOUND *csound)
 }
 #endif
 
+static void intyperr(CSOUND *csound, int n, char *s, char *opname,
+                     char tfound, char expect, int line)
+{
+    char    t[10];
+
+    switch (tfound) {
+    case 'w':
+    case 'f':
+    case 'a':
+    case 'k':
+    case 'i':
+    case 'P':
+    case 't':
+    case 'p': t[0] = tfound;
+      t[1] = '\0';
+      break;
+    case 'r':
+    case 'c': strcpy(t,"const");
+      break;
+    case 'S': strcpy(t,"string");
+      break;
+    case 'b':
+    case 'B': strcpy(t,"boolean");
+      break;
+    case '?': strcpy(t,"?");
+      break;
+  }
+    synterr(csound, Str("input arg %d '%s' of type %s not allowed when "
+                        "expecting %c (for opcode %s), line %d\n"),
+            n+1, s, t, expect, opname, line);
+}
+
+static void lblrequest(CSOUND *csound, char *s)
+{
+    int     req;
+
+    /* for (req=0; req<ST(lblcnt); req++) */
+    /*   if (strcmp(ST(lblreq)[req].label,s) == 0) */
+    /*     return; */
+    /* if (++ST(lblcnt) >= ST(lblmax)) { */
+    /*   LBLREQ *tmp; */
+    /*   ST(lblmax) += LBLMAX; */
+    /*   tmp = mrealloc(csound, ST(lblreq), ST(lblmax) * sizeof(LBLREQ)); */
+    /*   ST(lblreq) = tmp; */
+    /* } */
+    /* ST(lblreq)[req].reqline = ST(curline); */
+    /* ST(lblreq)[req].label =s; */
+}
+
 static inline void resetouts(CSOUND *csound)
 {
-    csound->acount = csound->kcount = csound->icount = 0;
-    csound->Bcount = csound->bcount = 0;
+    csound->acount = csound->kcount = csound->icount = 
+      csound->Bcount = csound->bcount = 0;
 }
 
 /* Unused */
@@ -126,7 +177,7 @@ int tree_arg_list_count(TREE * root)
     int count = 0;
     TREE * current = root;
 
-    while(current != NULL) {
+    while (current != NULL) {
       current = current->next;
       count++;
     }
@@ -140,7 +191,7 @@ static OPTXT * last_optxt(OPTXT *optxt)
 {
     OPTXT *current = optxt;
 
-    while(current->nxtop != NULL) {
+    while (current->nxtop != NULL) {
       current = current->nxtop;
     }
     return current;
@@ -149,7 +200,7 @@ static OPTXT * last_optxt(OPTXT *optxt)
 /**
  * Append OPTXT op2 to end of OPTXT chain op1
  */
-static void append_optxt(OPTXT *op1, OPTXT *op2)
+static inline void append_optxt(OPTXT *op1, OPTXT *op2)
 {
     last_optxt(op1)->nxtop = op2;
 }
@@ -167,7 +218,7 @@ void update_lclcount(CSOUND *csound, INSTRTXT *ip, TREE *argslist)
 {
     TREE * current = argslist;
 
-    while(current != NULL) {
+    while (current != NULL) {
       switch(current->type) {
       case T_IDENT_S:
         ip->lclscnt++;
@@ -187,8 +238,8 @@ void update_lclcount(CSOUND *csound, INSTRTXT *ip, TREE *argslist)
       case T_IDENT_K:
       case T_IDENT_F:
       case T_IDENT_I:
-      case T_NUMBER:
-      case T_INTGR:
+      case NUMBER_TOKEN:
+      case INTEGER_TOKEN:
       default:
         ip->lclkcnt++;
         if (UNLIKELY(PARSER_DEBUG))
@@ -199,7 +250,7 @@ void update_lclcount(CSOUND *csound, INSTRTXT *ip, TREE *argslist)
 }
 */
 
-void set_xincod(CSOUND *csound, TEXT *tp, OENTRY *ep)
+void set_xincod(CSOUND *csound, TEXT *tp, OENTRY *ep, int line)
 {
     int n = tp->inlist->count;
     char *s;
@@ -219,9 +270,12 @@ void set_xincod(CSOUND *csound, TEXT *tp, OENTRY *ep)
     }
 
     while (n--) {                     /* inargs:   */
+      int32    tfound_m, treqd_m = 0L;
       s = tp->inlist->arg[n];
 
       if (n >= nreqd) {               /* det type required */
+        csound->DebugMsg(csound, "%s(%d): type required: %c\n",
+                         __FILE__, __LINE__, types[nreqd-1]);
         switch (types[nreqd-1]) {
         case 'M':
         case 'N':
@@ -232,55 +286,62 @@ void set_xincod(CSOUND *csound, TEXT *tp, OENTRY *ep)
         }
       }
       else treqd = types[n];          /*       or given)   */
+      csound->DebugMsg(csound, "%s(%d): treqd: %c\n", __FILE__, __LINE__, treqd);
       if (treqd == 'l') {             /* if arg takes lbl  */
         csound->DebugMsg(csound, "treqd = l");
-        /*lblrequest(csound, s);*/        /*      req a search */
+        lblrequest(csound, s);        /*      req a search */
         continue;                     /*      chk it later */
       }
       tfound = argtyp2(csound, s);     /* else get arg type */
       /* IV - Oct 31 2002 */
-      /*tfound_m = ST(typemask_tabl)[(unsigned char) tfound];
-        if (!(tfound_m & (ARGTYP_c|ARGTYP_p)) && !ST(lgprevdef) && *s != '"') {
-        synterr(csound, Str("input arg '%s' used before defined"), s);
-        }*/
-      csound->DebugMsg(csound, "treqd %c, tfound %c", treqd, tfound);
-      if (tfound == 'a' && n < 31)    /* JMC added for FOG */
-                                      /* 4 for FOF, 8 for FOG; expanded to 15  */
+      tfound_m = ST(typemask_tabl)[(unsigned char) tfound];
+      csound->DebugMsg(csound, "%s(%d): treqd: %c, tfound %c\n",
+                       __FILE__, __LINE__,treqd, tfound);
+      csound->DebugMsg(csound, "treqd %c, tfound_m %d ST(lgprevdef) %d\n",
+                       treqd, tfound_m);
+      if (!(tfound_m & (ARGTYP_c|ARGTYP_p)) && !ST(lgprevdef) && *s != '"') {
+        synterr(csound,
+                Str("input arg '%s' used before defined (in opcode %s),"
+                    " line %d\n"),
+                s, ep->opname, line);
+      }
+      if (tfound == 'a' && n < 31) /* JMC added for FOG */
+                                   /* 4 for FOF, 8 for FOG; expanded to 15  */
         tp->xincod |= (1 << n);
       if (tfound == 'S' && n < 31)
         tp->xincod_str |= (1 << n);
       /* IV - Oct 31 2002: simplified code */
-      /* if (!(tfound_m & ST(typemask_tabl_in)[(unsigned char) treqd])) { */
+      if (!(tfound_m & ST(typemask_tabl_in)[(unsigned char) treqd])) {
       /* check for exceptional types */
-      /*switch (treqd) {*/
-      /*case 'Z':*/                             /* indef kakaka ... */
-      /*if (!(tfound_m & (n & 1 ? ARGTYP_a : ARGTYP_ipcrk)))
-        intyperr(csound, n, tfound, treqd);
+      switch (treqd) {
+      case 'Z':                             /* indef kakaka ... */
+        if (!(tfound_m & (n & 1 ? ARGTYP_a : ARGTYP_ipcrk)))
+          intyperr(csound, n, s, ep->opname, tfound, treqd, line);
         break;
-        case 'x':
-        treqd_m = ARGTYP_ipcr;*/              /* also allows i-rate */
-      /*case 's':*/                             /* a- or k-rate */
-      /*treqd_m |= ARGTYP_a | ARGTYP_k;
-        if (tfound_m & treqd_m) {
-        if (tfound == 'a' && tp->outlist != ST(nullist)) {*/
-      /*long outyp_m =*/                  /* ??? */
-      /*ST(typemask_tabl)[(unsigned char) argtyp(csound,
-        tp->outlist->arg[0])];
-        if (outyp_m & (ARGTYP_a | ARGTYP_w)) break;
+      case 'x':
+        treqd_m = ARGTYP_ipcr;              /* also allows i-rate */
+      case 's':                             /* a- or k-rate */
+      treqd_m |= ARGTYP_a | ARGTYP_k;
+      if (tfound_m & treqd_m) {
+        if (tfound == 'a' && tp->outlist->count != 0) {
+          long outyp_m =                  /* ??? */
+            ST(typemask_tabl)[(unsigned char) argtyp2(csound,
+                                                     tp->outlist->arg[0])];
+          if (outyp_m & (ARGTYP_a | ARGTYP_w)) break;
         }
         else
+          break;
+      }
+      default:
+        intyperr(csound, n, s, ep->opname, tfound, treqd, line);
         break;
-        }
-        default:
-        intyperr(csound, n, tfound, treqd);
-        break;
-        }
-        }*/
+      }
+      }
     }
     csound->DebugMsg(csound, "xincod = %d", tp->xincod);
 }
 
-void set_xoutcod(CSOUND *csound, TEXT *tp, OENTRY *ep)
+void set_xoutcod(CSOUND *csound, TEXT *tp, OENTRY *ep, int line)
 {
     int n = tp->outlist->count;
     char *s;
@@ -290,7 +351,7 @@ void set_xoutcod(CSOUND *csound, TEXT *tp, OENTRY *ep)
 
     if (nreqd < 0)    /* for other opcodes */
       nreqd = strlen(types = ep->outypes);
-/*      if ((n != nreqd) &&       */        /* IV - Oct 24 2002: end of new code */
+/* if ((n != nreqd) && */        /* IV - Oct 24 2002: end of new code */
 /*          !(n > 0 && n < nreqd &&
             (types[n] == (char) 'm' || types[n] == (char) 'z' ||
              types[n] == (char) 'X' || types[n] == (char) 'N' ||
@@ -302,27 +363,30 @@ void set_xoutcod(CSOUND *csound, TEXT *tp, OENTRY *ep)
 
 
     while (n--) {                                     /* outargs:  */
-      /*        long    tfound_m;*/       /* IV - Oct 31 2002 */
+      long    tfound_m;       /* IV - Oct 31 2002 */
       s = tp->outlist->arg[n];
       treqd = types[n];
       tfound = argtyp2(csound, s);                     /*  found    */
       /* IV - Oct 31 2002 */
-      /*tfound_m = ST(typemask_tabl)[(unsigned char) tfound];*/
+      tfound_m = ST(typemask_tabl)[(unsigned char) tfound];
       /* IV - Sep 1 2002: xoutcod is the same as xincod for input */
       if (tfound == 'a' && n < 31)
         tp->xoutcod |= (1 << n);
       if (tfound == 'S' && n < 31)
         tp->xoutcod_str |= (1 << n);
       csound->DebugMsg(csound, "treqd %c, tfound %c", treqd, tfound);
-      /*if (tfound_m & ARGTYP_w)
+      if (tfound_m & ARGTYP_w)
         if (ST(lgprevdef)) {
-        synterr(csound, Str("output name previously used, "
-        "type '%c' must be uniquely defined"), tfound);
-        }*/
+          synterr(csound, Str("output name previously used, "
+                              "type '%c' must be uniquely defined, line %d"),
+                  tfound, line);
+        }
       /* IV - Oct 31 2002: simplified code */
-      /*if (!(tfound_m & ST(typemask_tabl_out)[(unsigned char) treqd])) {
-        synterr(csound, Str("output arg '%s' illegal type"), s);
-        }*/
+      if (!(tfound_m & ST(typemask_tabl_out)[(unsigned char) treqd])) {
+        synterr(csound, Str("output arg '%s' illegal type (for opcode %s),"
+                            " line %d\n"),
+                s, ep->opname, line);
+      }
     }
 }
 
@@ -343,7 +407,7 @@ OPTXT *create_opcode(CSOUND *csound, TREE *root, INSTRTXT *ip)
     tp = &(optxt->t);
 
     switch(root->type) {
-    case T_LABEL:
+    case LABEL_TOKEN:
       /* TODO - Need to verify here or elsewhere that this label is not
          already defined */
       tp->opnum = LABEL;
@@ -358,12 +422,12 @@ OPTXT *create_opcode(CSOUND *csound, TREE *root, INSTRTXT *ip)
       ip->opdstot += csound->opcodlst[LABEL].dsblksiz;
 
       break;
-    case T_GOTO:
-    case T_IGOTO:
-    case T_KGOTO:
+    case GOTO_TOKEN:
+    case IGOTO_TOKEN:
+    case KGOTO_TOKEN:
     case T_OPCODE:
     case T_OPCODE0:
-    case S_ASSIGN:
+    case '=':
       if (UNLIKELY(PARSER_DEBUG))
         csound->Message(csound,
                         "create_opcode: Found node for opcode %s\n",
@@ -407,9 +471,11 @@ OPTXT *create_opcode(CSOUND *csound, TREE *root, INSTRTXT *ip)
           if ((n = pnum(arg)) >= 0) {
             if (n > ip->pmax)  ip->pmax = n;
           }
-          else {
-            lgbuild(csound, arg);
-          }
+          /* VL 14/12/11 : calling lgbuild here seems to be problematic for
+             undef arg checks */
+	  else {
+	    lgbuild(csound, arg, 1);
+	  } 
 
 
         }
@@ -430,7 +496,7 @@ OPTXT *create_opcode(CSOUND *csound, TREE *root, INSTRTXT *ip)
             if (n > ip->pmax)  ip->pmax = n;
           }
           else {
-            lgbuild(csound, arg);
+            lgbuild(csound, arg, 0);
           }
 
         }
@@ -445,9 +511,9 @@ OPTXT *create_opcode(CSOUND *csound, TREE *root, INSTRTXT *ip)
 
         //        csound->Message(csound, "Opcode InTypes: %s\n", ep->intypes);
         //        csound->Message(csound, "Opcode OutTypes: %s\n", ep->outypes);
-
-        set_xincod(csound, tp, ep);
-        set_xoutcod(csound, tp, ep);
+  
+        set_xincod(csound, tp, ep, root->line);
+        set_xoutcod(csound, tp, ep, root->line);
 
         if (root->right != NULL) {
           if (ep->intypes[0] != 'l') {     /* intype defined by 1st inarg */
@@ -465,9 +531,9 @@ OPTXT *create_opcode(CSOUND *csound, TREE *root, INSTRTXT *ip)
           tp->pftype = tp->intype;
         }
 
-        //        csound->Message(csound,
-        //                        Str("create_opcode[%s]: opnum for opcode: %d\n"),
-        //                        root->value->lexeme, opnum);
+//        csound->Message(csound,
+//                        Str("create_opcode[%s]: opnum for opcode: %d\n"),
+//                        root->value->lexeme, opnum);
       }
       break;
     default:
@@ -548,49 +614,50 @@ INSTRTXT *create_instrument0(CSOUND *csound, TREE *root)
     ip->t.inlist->arg[0] = strsav_string(csound, "0");
 
 
-    while(current != NULL) {
+    while (current != NULL) {
 
-      if (current->type != T_INSTR && current->type != T_UDO) {
+      if (current->type != INSTR_TOKEN && current->type != UDO_TOKEN) {
 
         if (UNLIKELY(PARSER_DEBUG))
           csound->Message(csound, "In INSTR 0: %s\n", current->value->lexeme);
 
-        if (current->type == S_ASSIGN
+        if (current->type == '='
            && strcmp(current->value->lexeme, "=.r") == 0) {
 
           MYFLT val = csound->pool[constndx(csound,
                                             current->right->value->lexeme)];
 
 
-          /* if (current->right->type == T_INTGR) {
+          /* if (current->right->type == INTEGER_TOKEN) {
              val = FL(current->right->value->value);
              } else {
              val = FL(current->right->value->fvalue);
              }*/
 
           /* modify otran defaults*/
-          if (current->left->type == T_SRATE) {
+          if (current->left->type == SRATE_TOKEN) {
             csound->tran_sr = val;
           }
-          else if (current->left->type == T_KRATE) {
+          else if (current->left->type == KRATE_TOKEN) {
             csound->tran_kr = val;
           }
-          else if (current->left->type == T_KSMPS) {
+          else if (current->left->type == KSMPS_TOKEN) {
             csound->tran_ksmps = val;
           }
-          else if (current->left->type == T_NCHNLS) {
+          else if (current->left->type == NCHNLS_TOKEN) {
             csound->tran_nchnls = current->right->value->value;
           }
-          else if (current->left->type == T_NCHNLSI) {
+          else if (current->left->type == NCHNLSI_TOKEN) {
             csound->tran_nchnlsi = current->right->value->value;
-            /* csound->Message(csound, "SETTING NCHNLS: %d\n", csound->tran_nchnls); */
+            /* csound->Message(csound, "SETTING NCHNLS: %d\n",
+                               csound->tran_nchnls); */
           }
-          else if (current->left->type == T_0DBFS) {
+          else if (current->left->type == ZERODBFS_TOKEN) {
             csound->tran_0dbfs = val;
-            csound->Message(csound, "SETTING 0DBFS: %f\n", csound->tran_0dbfs);
+            /* csound->Message(csound, "SETTING 0DBFS: %f\n",
+                               csound->tran_0dbfs); */
           }
 
-          /* TODO - Implement 0dbfs constant  -- surely done?? */
         }
 
         op->nxtop = create_opcode(csound, current, ip);
@@ -660,7 +727,7 @@ INSTRTXT *create_instrument(CSOUND *csound, TREE *root)
      * Note2: For now am not checking if root->left is a list (i.e. checking
      * root->left->next is NULL or not to indicate list)
      */
-    if (root->left->type == T_INTGR) { /* numbered instrument */
+    if (root->left->type == INTEGER_TOKEN) { /* numbered instrument */
       int32 instrNum = (int32)root->left->value->value; /* Not used! */
 
       c = csound->Malloc(csound, 10); /* arbritrarily chosen number of digits */
@@ -751,7 +818,8 @@ void close_instrument(CSOUND *csound, INSTRTXT * ip)
           ip->lclkcnt = (ip->lclkcnt + 1) & (~1);
     }
 
-    ip->lclfixed = ip->lclkcnt + ip->lclwcnt * Wfloats * ip->lclpcnt * Pfloats;*/
+    ip->lclfixed = ip->lclkcnt + 
+                   ip->lclwcnt * Wfloats * ip->lclpcnt * Pfloats;*/
 
     ip->mdepends = ip->mdepends >> 4;
 
@@ -796,125 +864,6 @@ void append_instrument(CSOUND * csound, INSTRTXT * instrtxt)
     current->nxtinstxt = instrtxt;
 }
 
-
-/* IV - Oct 12 2002: new function to parse arguments of opcode definitions */
-
-#if 0
-static int parse_opcode_args(CSOUND *csound, OENTRY *opc)
-{
-    OPCODINFO   *inm = (OPCODINFO*) opc->useropinfo;
-    char    *types, *otypes;
-    int     i, i_incnt, a_incnt, k_incnt, i_outcnt, a_outcnt, k_outcnt, err;
-    int16   *a_inlist, *k_inlist, *i_inlist, *a_outlist, *k_outlist, *i_outlist;
-
-    /* count the number of arguments, and check types */
-    i = i_incnt = a_incnt = k_incnt = i_outcnt = a_outcnt = k_outcnt = err = 0;
-    types = inm->intypes; otypes = opc->intypes;
-    opc->dsblksiz = (uint16) sizeof(UOPCODE);
-    if (!strcmp(types, "0"))
-      types++;                  /* no input args */
-    while (*types) {
-      switch (*types) {
-      case 'a':
-        a_incnt++; *otypes++ = *types;
-        break;
-      case 'K':
-        i_incnt++;              /* also updated at i-time */
-      case 'k':
-        k_incnt++; *otypes++ = 'k';
-        break;
-      case 'i':
-      case 'o':
-      case 'p':
-      case 'j':
-        i_incnt++; *otypes++ = *types;
-        break;
-      default:
-        synterr(csound, Str("invalid input type for opcode %s"), inm->name);
-        err++; i--;
-      }
-      i++; types++;
-      if (i > OPCODENUMOUTS_MAX) {
-        synterr(csound, Str("too many input args for opcode %s"), inm->name);
-        csound->LongJmp(csound, 1);
-      }
-    }
-    *otypes++ = 'o'; *otypes = '\0';    /* optional arg for local ksmps */
-    inm->inchns = i;                    /* total number of input chnls */
-    inm->perf_incnt = a_incnt + k_incnt;
-    opc->dsblksiz += (uint16) (sizeof(MYFLT*) * i);
-    /* same for outputs */
-    i = 0;
-    types = inm->outtypes; otypes = opc->outypes;
-    if (!strcmp(types, "0"))
-      types++;                  /* no output args */
-    while (*types) {
-      if (i >= OPCODENUMOUTS_MAX) {
-        synterr(csound, Str("too many output args for opcode %s"), inm->name);
-        csound->LongJmp(csound, 1);
-      }
-      switch (*types) {
-      case 'a':
-        a_outcnt++; *otypes++ = *types;
-        break;
-      case 'K':
-        i_outcnt++;             /* also updated at i-time */
-      case 'k':
-        k_outcnt++; *otypes++ = 'k';
-        break;
-      case 'i':
-        i_outcnt++; *otypes++ = *types;
-        break;
-      default:
-        synterr(csound, Str("invalid output type for opcode %s"), inm->name);
-        err++; i--;
-      }
-      i++; types++;
-    }
-    *otypes = '\0';
-    inm->outchns = i;                   /* total number of output chnls */
-    inm->perf_outcnt = a_outcnt + k_outcnt;
-    opc->dsblksiz += (uint16) (sizeof(MYFLT*) * i);
-    opc->dsblksiz = ((opc->dsblksiz + (uint16) 15)
-                     & (~((uint16) 15)));   /* align (needed ?) */
-    /* now build index lists for the various types of arguments */
-    i = i_incnt + inm->perf_incnt + i_outcnt + inm->perf_outcnt;
-    i_inlist = inm->in_ndx_list = (int16*) mmalloc(csound,
-                                                   sizeof(int16) * (i + 6));
-    a_inlist = i_inlist + i_incnt + 1;
-    k_inlist = a_inlist + a_incnt + 1;
-    i = 0; types = inm->intypes;
-    while (*types) {
-      switch (*types++) {
-        case 'a': *a_inlist++ = i; break;
-        case 'k': *k_inlist++ = i; break;
-        case 'K': *k_inlist++ = i;      /* also updated at i-time */
-        case 'i':
-        case 'o':
-        case 'p':
-        case 'j': *i_inlist++ = i;
-      }
-      i++;
-    }
-    *i_inlist = *a_inlist = *k_inlist = -1;     /* put delimiters */
-    i_outlist = inm->out_ndx_list = k_inlist + 1;
-    a_outlist = i_outlist + i_outcnt + 1;
-    k_outlist = a_outlist + a_outcnt + 1;
-    i = 0; types = inm->outtypes;
-    while (*types) {
-      switch (*types++) {
-        case 'a': *a_outlist++ = i; break;
-        case 'k': *k_outlist++ = i; break;
-        case 'K': *k_outlist++ = i;     /* also updated at i-time */
-        case 'i': *i_outlist++ = i;
-      }
-      i++;
-    }
-    *i_outlist = *a_outlist = *k_outlist = -1;  /* put delimiters */
-    return err;
-}
-#endif
-
 static int pnum(char *s)        /* check a char string for pnum format  */
                                 /*   and return the pnum ( >= 0 )       */
 {                               /* else return -1                       */
@@ -958,7 +907,8 @@ void insert_instrtxt(CSOUND *csound, INSTRTXT *instrtxt, int32 instrNum) {
     csound->instrtxtp[instrNum] = instrtxt;
 }
 
-OPCODINFO *find_opcode_info(CSOUND *csound, char *opname) {
+OPCODINFO *find_opcode_info(CSOUND *csound, char *opname) 
+{
     OPCODINFO *opinfo = csound->opcodeInfo;
     if (UNLIKELY(opinfo == NULL)) {
       csound->Message(csound, Str("!!! csound->opcodeInfo is NULL !!!\n"));
@@ -979,8 +929,9 @@ OPCODINFO *find_opcode_info(CSOUND *csound, char *opname) {
 /**
  * Compile the given TREE node into structs for Csound to use
  */
-void csound_orc_compile(CSOUND *csound, TREE *root) {
-    //    csound->Message(csound, "Begin Compiling AST (Currently Implementing)\n");
+void csound_orc_compile(CSOUND *csound, TREE *root) 
+{
+//    csound->Message(csound, "Begin Compiling AST (Currently Implementing)\n");
 
     OPARMS      *O = csound->oparms;
     INSTRTXT    *instrtxt = NULL;
@@ -994,7 +945,7 @@ void csound_orc_compile(CSOUND *csound, TREE *root) {
 
     strsav_create(csound);
 
-    if (csound->otranGlobals == NULL) {
+    if (UNLIKELY(csound->otranGlobals == NULL)) {
       csound->otranGlobals = csound->Calloc(csound, sizeof(OTRAN_GLOBALS));
     }
     csound->instrtxtp = (INSTRTXT **) mcalloc(csound, (1 + csound->maxinsno)
@@ -1019,6 +970,27 @@ void csound_orc_compile(CSOUND *csound, TREE *root) {
     ST(constTbl) = (int*) mcalloc(csound, (256 + NCONSTS) * sizeof(int));
     constndx(csound, "0");
 
+    if (!ST(typemask_tabl)) {
+      const int32 *ptr = typetabl1;
+      ST(typemask_tabl) = (int32*) mcalloc(csound, sizeof(int32) * 256);
+      ST(typemask_tabl_in) = (int32*) mcalloc(csound, sizeof(int32) * 256);
+      ST(typemask_tabl_out) = (int32*) mcalloc(csound, sizeof(int32) * 256);
+      while (*ptr) {            /* basic types (both for input */
+        int32 pos = *ptr++;      /* and output) */
+        ST(typemask_tabl)[pos] = ST(typemask_tabl_in)[pos] =
+          ST(typemask_tabl_out)[pos] = *ptr++;
+      }
+      ptr = typetabl2;
+      while (*ptr) {            /* input types */
+        int32 pos = *ptr++;
+        ST(typemask_tabl_in)[pos] = *ptr++;
+      }
+      ptr = typetabl3;
+      while (*ptr) {            /* output types */
+        int32 pos = *ptr++;
+        ST(typemask_tabl_out)[pos] = *ptr++;
+      }
+    }
     instr0 = create_instrument0(csound, root);
     prvinstxt = prvinstxt->nxtinstxt = instr0;
     insert_instrtxt(csound, instr0, 0);
@@ -1027,10 +999,10 @@ void csound_orc_compile(CSOUND *csound, TREE *root) {
 
       switch (current->type) {
       case T_INIT:
-      case S_ASSIGN:
+      case '=':
         /* csound->Message(csound, "Assignment found\n"); */
         break;
-      case T_INSTR:
+      case INSTR_TOKEN:
         /* csound->Message(csound, "Instrument found\n"); */
 
         resetouts(csound); /* reset #out counts */
@@ -1040,12 +1012,12 @@ void csound_orc_compile(CSOUND *csound, TREE *root) {
 
         prvinstxt = prvinstxt->nxtinstxt = instrtxt;
 
-        /* Handle Inserting into CSOUND here by checking id's (name or
+        /* Handle Inserting into CSOUND here by checking ids (name or
          * numbered) and using new insert_instrtxt?
          */
         //printf("Starting to install instruments\n");
         /* Temporarily using the following code */
-        if (current->left->type == T_INTGR) { /* numbered instrument */
+        if (current->left->type == INTEGER_TOKEN) { /* numbered instrument */
           int32 instrNum = (int32)current->left->value->value;
 
           insert_instrtxt(csound, instrtxt, instrNum);
@@ -1054,14 +1026,14 @@ void csound_orc_compile(CSOUND *csound, TREE *root) {
           TREE *p =  current->left;
           //printf("instlist case:\n"); /* This code is suspect */
           while (p) {
-            print_tree(csound, "Top of loop\n", p);
+            if (PARSER_DEBUG) print_tree(csound, "Top of loop\n", p);
             if (p->left) {
               //print_tree(csound, "Left\n", p->left);
-              if (p->left->type == T_INTGR)
+              if (p->left->type == INTEGER_TOKEN)
                 insert_instrtxt(csound, instrtxt, p->left->value->value);
             }
             else {
-              if (p->type == T_INTGR)
+              if (p->type == INTEGER_TOKEN)
                 insert_instrtxt(csound, instrtxt, p->value->value);
               break;
             }
@@ -1069,7 +1041,7 @@ void csound_orc_compile(CSOUND *csound, TREE *root) {
           }
         }
         break;
-      case T_UDO:
+      case UDO_TOKEN:
         /* csound->Message(csound, "UDO found\n"); */
 
         resetouts(csound); /* reset #out counts */
@@ -1169,7 +1141,8 @@ void csound_orc_compile(CSOUND *csound, TREE *root) {
       if (UNLIKELY(p->tran_kr <= FL(0.0)))
         synterr(p, Str("%s invalid control rate"), err_msg);
       else if (UNLIKELY(p->tran_ksmps < FL(0.75) ||
-                        FLOAT_COMPARE(p->tran_ksmps, MYFLT2LRND(p->tran_ksmps))))
+                        FLOAT_COMPARE(p->tran_ksmps,
+                                      MYFLT2LRND(p->tran_ksmps))))
         synterr(p, Str("%s invalid ksmps value"), err_msg);
       else if (UNLIKELY(FLOAT_COMPARE(p->tran_sr,
                                       (double) p->tran_kr * p->tran_ksmps)))
@@ -1183,10 +1156,12 @@ void csound_orc_compile(CSOUND *csound, TREE *root) {
       int thread, opnum = bp->t.opnum;
       if (opnum == ENDIN) break;
       if (opnum == LABEL) continue;
-      if (PARSER_DEBUG) printf("Instr 0 check on opcode=%s\n", bp->t.opcod);
+      if (PARSER_DEBUG)
+        csound->DebugMsg(csound, "Instr 0 check on opcode=%s\n", bp->t.opcod);
       if (UNLIKELY((thread = csound->opcodlst[opnum].thread) & 06 ||
                    (!thread && bp->t.pftype != 'b'))) {
-        printf("***opcode=%s thread=%d pftype=%c\n", bp->t.opcod, thread, bp->t.pftype);
+        csound->DebugMsg(csound, "***opcode=%s thread=%d pftype=%c\n", 
+               bp->t.opcod, thread, bp->t.pftype);
         synterr(csound, Str("perf-pass statements illegal in header blk\n"));
       }
     }
@@ -1402,10 +1377,23 @@ static void insprep(CSOUND *csound, INSTRTXT *tp)
     mfree(csound, larg);
 }
 
+/* returns non-zero if 's' is defined in the global or local pool of names */
+
+static int lgexist2(CSOUND *csound, const char *s)
+{
+    unsigned char h = name_hash(csound, s);
+    NAME          *p = NULL;
+    for (p = ST(gblNames)[h]; p != NULL && sCmp(p->namep, s); p = p->nxt);
+    if (p != NULL)
+      return 1;
+    for (p = ST(lclNames)[h]; p != NULL && sCmp(p->namep, s); p = p->nxt);
+    return (p == NULL ? 0 : 1);
+}
+
 /* build pool of floating const values  */
 /* build lcl/gbl list of ds names, offsets */
 /* (no need to save the returned values) */
-static void lgbuild(CSOUND *csound, char *s)
+static void lgbuild(CSOUND *csound, char *s, int inarg)
 {
     char    c;
 
@@ -1416,7 +1404,7 @@ static void lgbuild(CSOUND *csound, char *s)
       constndx(csound, s);
     else if (c == '"')
       strconstndx(csound, s);
-    else if (!(lgexist(csound, s))) {
+    else if (!(lgexist2(csound, s)) && !inarg) {
       if (c == 'g' || (c == '#' && s[1] == 'g'))
         gblnamset(csound, s);
       else
@@ -1777,9 +1765,14 @@ static void convert_strconst_pool(CSOUND *csound, MYFLT *dst)
 #endif
 
 char argtyp2(CSOUND *csound, char *s)
-{                       /* find arg type:  d, w, a, k, i, c, p, r, S, B, b, t */
-    char c = *s;        /*   also set lgprevdef if !c && !p && !S */
+{                   /* find arg type:  d, w, a, k, i, c, p, r, S, B, b, t */
+    char c = *s;    /*   also set lgprevdef if !c && !p && !S */
 
+    /* VL: added this to make sure the object exists before we try to read 
+       from it */
+    if (UNLIKELY(csound->otranGlobals == NULL)) {
+      csound->otranGlobals = csound->Calloc(csound, sizeof(OTRAN_GLOBALS));
+    }
     /* csound->Message(csound, "\nArgtyp2: received %s\n", s); */
 
     /*trap this before parsing for a number! */
@@ -1793,7 +1786,7 @@ char argtyp2(CSOUND *csound, char *s)
       return('p');                              /* pnum */
     if (c == '"')
       return('S');                              /* quoted String */
-      /* ST(lgprevdef) = lgexist(csound, s);  */             /* (lgprev) */
+     ST(lgprevdef) = lgexist2(csound, s);         /* (lgprev) */
     if (strcmp(s,"sr") == 0    || strcmp(s,"kr") == 0 ||
         strcmp(s,"0dbfs") == 0 || strcmp(s,"nchnls_i") == 0 ||
         strcmp(s,"ksmps") == 0 || strcmp(s,"nchnls") == 0)
diff --git a/Engine/csound_orc_expressions.c b/Engine/csound_orc_expressions.c
index 6776969..709fe95 100644
--- a/Engine/csound_orc_expressions.c
+++ b/Engine/csound_orc_expressions.c
@@ -31,16 +31,17 @@ extern void handle_polymorphic_opcode(CSOUND*, TREE *);
 extern void handle_optional_args(CSOUND *, TREE *);
 extern ORCTOKEN *make_token(CSOUND *, char *);
 extern ORCTOKEN *make_label(CSOUND *, char *);
+extern int find_opcode(CSOUND *csound, char *opname);
 
-TREE* create_boolean_expression(CSOUND*, TREE*);
-TREE * create_expression(CSOUND *, TREE *);
+TREE* create_boolean_expression(CSOUND*, TREE*, int);
+TREE * create_expression(CSOUND *, TREE *, int);
 
 static int genlabs = 300;
 
 char *create_out_arg(CSOUND *csound, char outype)
 {
-    char* s = (char *)csound->Malloc(csound, 8);
-
+    char* s = (char *)csound->Malloc(csound, 16);
+    
     switch(outype) {
     case 'a': sprintf(s, "#a%d", csound->acount++); break;
     case 'K':
@@ -145,7 +146,7 @@ TREE *create_minus_token(CSOUND *csound)
       /* fprintf(stderr, "Out of memory\n"); */
       exit(1);
     }
-    ans->type = T_INTGR;
+    ans->type = INTEGER_TOKEN;
     ans->left = NULL;
     ans->right = NULL;
     ans->next = NULL;
@@ -186,17 +187,17 @@ TREE * create_goto_token(CSOUND *csound, char * booleanVar,
     TREE *opTree, *bVar;
 
     switch(gotoNode->type) {
-    case T_KGOTO:
+    case KGOTO_TOKEN:
       sprintf(op, "ckgoto");
       break;
-    case T_IGOTO:
+    case IGOTO_TOKEN:
       sprintf(op, "cigoto");
       break;
-    case T_ITHEN:
+    case ITHEN_TOKEN:
       sprintf(op, "cngoto");
       break;
-    case T_THEN:
-    case T_KTHEN:
+    case THEN_TOKEN:
+    case KTHEN_TOKEN:
       sprintf(op, "cngoto");
       break;
     default:
@@ -217,7 +218,8 @@ TREE * create_goto_token(CSOUND *csound, char * booleanVar,
     return opTree;
 }
 
-/* THIS PROBABLY NEEDS TO CHANGE TO RETURN DIFFERENT GOTO TYPES LIKE IGOTO, ETC */
+/* THIS PROBABLY NEEDS TO CHANGE TO RETURN DIFFERENT GOTO 
+   TYPES LIKE IGOTO, ETC */
 TREE *create_simple_goto_token(CSOUND *csound, TREE *label, int type)
 {
     char* op = (char *)csound->Calloc(csound, 6);
@@ -239,21 +241,21 @@ static int is_expression_node(TREE *node)
     }
 
     switch(node->type) {
-    case S_PLUS:
-    case S_MINUS:
-    case S_TIMES:
-    case S_DIV:
-    case S_MOD:
-    case S_POW:
+    case '+':
+    case '-':
+    case '*':
+    case '/':
+    case '%':
+    case '^':
     case T_FUNCTION:
     case S_UMINUS:
-    case S_BITOR:
-    case S_BITAND:
-    case S_BITSHR:
-    case S_BITSHL:
-    case S_NEQV:
-    case S_BITNOT:
-    case S_Q:
+    case '|':
+    case '&':
+    case S_BITSHIFT_RIGHT:
+    case S_BITSHIFT_LEFT:
+    case '#':
+    case '~':
+    case '?':
     case S_TABREF:
       return 1;
     }
@@ -281,20 +283,21 @@ static int is_boolean_expression_node(TREE *node)
     return 0;
 }
 
-static TREE *create_cond_expression(CSOUND *csound, TREE *root)
+static TREE *create_cond_expression(CSOUND *csound, TREE *root, int line)
 {
-    char *op = (char*)mmalloc(csound, 4), arg1, arg2, *outarg = NULL;
-    char outype, *s;
-    TREE *anchor = create_boolean_expression(csound, root->left), *last;
+    char *op = (char*)mmalloc(csound, 4), arg1, arg2, ans, *outarg = NULL;
+    char outype;
+    TREE *anchor = create_boolean_expression(csound, root->left, line), *last;
     TREE * opTree;
-    TREE *b= create_ans_token(csound, anchor->left->value->lexeme);;
+    TREE *b;
     TREE *c = root->right->left, *d = root->right->right;
     last = anchor;
     while (last->next != NULL) {
       last = last->next;
     }
+    b= create_ans_token(csound, last->left->value->lexeme);
     if (is_expression_node(c)) {
-      last->next = create_expression(csound, c);
+      last->next = create_expression(csound, c, line);
       /* TODO - Free memory of old left node
          freetree */
       last = last->next;
@@ -304,7 +307,7 @@ static TREE *create_cond_expression(CSOUND *csound, TREE *root)
       c = create_ans_token(csound, last->left->value->lexeme);
     }
     if (is_expression_node(d)) {
-      last->next = create_expression(csound, d);
+      last->next = create_expression(csound, d, line);
       /* TODO - Free memory of old left node
          freetree */
       last = last->next;
@@ -316,18 +319,20 @@ static TREE *create_cond_expression(CSOUND *csound, TREE *root)
 
     arg1 = argtyp2(csound, c->value->lexeme);
     arg2 = argtyp2(csound, d->value->lexeme);
+    ans  = argtyp2(csound, b->value->lexeme);
     if (arg1 == 'a' || arg2 == 'a') {
       strcpy(op,":a");
       outype = 'a';
     }
-    else if (arg1 == 'k' || arg2 == 'k') {
+    else if (arg1 == 'k' || arg2 == 'k' || ans == 'B') {
       strcpy(op,":k");
       outype = 'k';
     }
     else {
       strcpy(op,":i");
       outype = 'i';
-      }
+    }
+
     outarg = create_out_arg(csound, outype);
     opTree = create_opcode_token(csound, op);
     opTree->left = create_ans_token(csound, outarg);
@@ -344,17 +349,18 @@ static TREE *create_cond_expression(CSOUND *csound, TREE *root)
  * Create a chain of Opcode (OPTXT) text from the AST node given. Called from
  * create_opcode when an expression node has been found as an argument
  */
-TREE * create_expression(CSOUND *csound, TREE *root)
+TREE * create_expression(CSOUND *csound, TREE *root, int line)
 {
     char *op, arg1, arg2, c, *outarg = NULL;
     TREE *anchor = NULL, *last;
     TREE * opTree;
+    int opnum;
     /* HANDLE SUB EXPRESSIONS */
 
-    if (root->type==S_Q) return create_cond_expression(csound, root);
+    if (root->type=='?') return create_cond_expression(csound, root, line);
 
     if (is_expression_node(root->left)) {
-      anchor = create_expression(csound, root->left);
+      anchor = create_expression(csound, root->left, line);
 
       /* TODO - Free memory of old left node
          freetree */
@@ -366,7 +372,7 @@ TREE * create_expression(CSOUND *csound, TREE *root)
     }
 
     if (is_expression_node(root->right)) {
-      TREE * newRight = create_expression(csound, root->right);
+      TREE * newRight = create_expression(csound, root->right, line);
       if (anchor == NULL) {
         anchor = newRight;
       }
@@ -395,36 +401,36 @@ TREE * create_expression(CSOUND *csound, TREE *root)
     op = mcalloc(csound, 80);
 
      switch(root->type) {
-    case S_PLUS:
+    case '+':
       strncpy(op, "add", 80);
       outarg = set_expression_type(csound, op, arg1, arg2);
       break;
-    case S_MINUS:
+    case '-':
       strncpy(op, "sub", 80);
       outarg = set_expression_type(csound, op, arg1, arg2);
       break;
-    case S_TIMES:
+    case '*':
       strncpy(op, "mul", 80);
       outarg = set_expression_type(csound, op, arg1, arg2);
       break;
-    case S_MOD:
+    case '%':
       strncpy(op, "mod", 80);
       outarg = set_expression_type(csound, op, arg1, arg2);
       break;
-    case S_DIV:
+    case '/':
       strncpy(op, "div", 80);
       outarg = set_expression_type(csound, op, arg1, arg2);
       break;
-    case S_POW:
+    case '^':
       { int outype = 'i';
         strncpy(op, "pow.", 80);
-        if (arg1 == 'a') {
+        if (arg1 == 'a' || arg2 == 'a') {
           strncat(op, "a", 80);
-          outype = arg1;
+          outype = (arg1 == 'a' ? arg1 : arg2);
         }
-        else if (arg1 == 'k') {
+        else if (arg1 == 'k' || arg2 == 'k') {
           strncat(op, "k", 80);
-          outype = arg1;
+          outype = (arg1 == 'k' ? arg1 : arg2);
         }
         else
           strncat(op, "i", 80);
@@ -432,45 +438,60 @@ TREE * create_expression(CSOUND *csound, TREE *root)
       }
       break;
     case S_TABREF:
-      strncpy(op, "tabref", 80);
-      if (UNLIKELY(PARSER_DEBUG)) csound->Message(csound, "Found TABREF: %s\n", op);
+      strncpy(op, "##tabref", 80);
+      if (UNLIKELY(PARSER_DEBUG))
+        csound->Message(csound, "Found TABREF: %s\n", op);
       outarg = create_out_arg(csound, 'k');
       break;
     case T_FUNCTION: /* assumes on single arg input */
       c = arg2;
       if (c == 'p' || c == 'c')   c = 'i';
       sprintf(op, "%s.%c", root->value->lexeme, c);
-      if (UNLIKELY(PARSER_DEBUG)) csound->Message(csound, "Found OP: %s\n", op);
+      if (UNLIKELY(PARSER_DEBUG))
+        csound->Message(csound, "Found OP: %s\n", op);   
+      /* VL: some non-existing functions were appearing here 
+         looking for opcodes that did not exist */   
+      if ((opnum = find_opcode(csound, op))==0) {    
+                                /* This is a little like overkill */
+        strncpy(op, "##error", 80);
+        opnum = find_opcode(csound, op);
+	csound->Warning(csound,
+                    Str("error: function %s with arg type %c not found, "
+                        "line %d \n"),
+                    root->value->lexeme, c, line);        
+      }
+      c = csound->opcodlst[opnum].outypes[0];
       outarg = create_out_arg(csound, c);
       break;
     case S_UMINUS:
-      if (UNLIKELY(PARSER_DEBUG)) csound->Message(csound, "HANDLING UNARY MINUS!");
+      if (UNLIKELY(PARSER_DEBUG))
+        csound->Message(csound, "HANDLING UNARY MINUS!");
       root->left = create_minus_token(csound);
       arg1 = 'i';
       strncpy(op, "mul", 80);
       outarg = set_expression_type(csound, op, arg1, arg2);
       break;
-    case S_BITOR:
+    case '|':
       strncpy(op, "or", 80);
       outarg = set_expression_type(csound, op, arg1, arg2);
       break;
-    case S_BITAND:
+    case '&':
       strncpy(op, "and", 80);
       outarg = set_expression_type(csound, op, arg1, arg2);
       break;
-    case S_BITSHR:
+    case S_BITSHIFT_RIGHT:
       strncpy(op, "shr", 80);
       outarg = set_expression_type(csound, op, arg1, arg2);
       break;
-    case S_BITSHL:
+    case S_BITSHIFT_LEFT:
       strncpy(op, "shl", 80);
       outarg = set_expression_type(csound, op, arg1, arg2);
       break;
-    case S_NEQV:
+    case '#':
       strncpy(op, "xor", 80);
       outarg = set_expression_type(csound, op, arg1, arg2);
       break;
-    case S_BITNOT:
+    case '~':
       strncpy(op, "not", 80);
       outarg = set_expression_type(csound, op, arg1, '\0');
       break;
@@ -480,11 +501,13 @@ TREE * create_expression(CSOUND *csound, TREE *root)
       opTree->right = root->left;
       opTree->right->next = root->right;
       opTree->left = create_ans_token(csound, outarg);
+      opTree->line = line;
       //print_tree(csound, "making expression", opTree);
     }
     else {
       opTree->right = root->right;
       opTree->left = create_ans_token(csound, outarg);
+      opTree->line = line;
     }
 
     if (anchor == NULL) {
@@ -505,38 +528,39 @@ TREE * create_expression(CSOUND *csound, TREE *root)
  * Create a chain of Opcode (OPTXT) text from the AST node given. Called from
  * create_opcode when an expression node has been found as an argument
  */
-TREE * create_boolean_expression(CSOUND *csound, TREE *root)
+TREE * create_boolean_expression(CSOUND *csound, TREE *root, int line)
 {
     char *op, *outarg;
     TREE *anchor = NULL, *last;
     TREE * opTree;
 
-    /*   if (UNLIKELY(PARSER_DEBUG)) */csound->Message(csound, "Creating boolean expression\n");
+    /*   if (UNLIKELY(PARSER_DEBUG)) */
+    csound->Message(csound, "Creating boolean expression\n");
     /* HANDLE SUB EXPRESSIONS */
     if (is_boolean_expression_node(root->left)) {
-        anchor = create_boolean_expression(csound, root->left);
-        last = anchor;
-        while (last->next != NULL) {
-            last = last->next;
-        }
-        /* TODO - Free memory of old left node
-           freetree */
-        root->left = create_ans_token(csound, anchor->left->value->lexeme);
+      anchor = create_boolean_expression(csound, root->left, line);
+      last = anchor;
+      while (last->next != NULL) {
+        last = last->next;
+      }
+      /* TODO - Free memory of old left node
+         freetree */
+      root->left = create_ans_token(csound, last->left->value->lexeme);
     } else if (is_expression_node(root->left)) {
-        anchor = create_expression(csound, root->left);
-        
-        /* TODO - Free memory of old left node
+      anchor = create_expression(csound, root->left, line);
+      
+      /* TODO - Free memory of old left node
          freetree */
-        last = anchor;
-        while (last->next != NULL) {
-            last = last->next;
-        }
-        root->left = create_ans_token(csound, last->left->value->lexeme);
+      last = anchor;
+      while (last->next != NULL) {
+        last = last->next;
+      }
+      root->left = create_ans_token(csound, last->left->value->lexeme);
     }
 
     
     if (is_boolean_expression_node(root->right)) {
-      TREE * newRight = create_boolean_expression(csound, root->right);
+      TREE * newRight = create_boolean_expression(csound, root->right, line);
       if (anchor == NULL) {
         anchor = newRight;
       }
@@ -547,30 +571,37 @@ TREE * create_boolean_expression(CSOUND *csound, TREE *root)
         }
         last->next = newRight;
       }
+      last = newRight;
+
+      while (last->next != NULL) {
+        last = last->next;
+      }
       /* TODO - Free memory of old right node
          freetree */
-      root->right = create_ans_token(csound, newRight->left->value->lexeme);
-    } else if (is_expression_node(root->right)) {
-        TREE * newRight = create_expression(csound, root->right);
-        if (anchor == NULL) {
-            anchor = newRight;
-        }
-        else {
-            last = anchor;
-            while (last->next != NULL) {
-                last = last->next;
-            }
-            last->next = newRight;
-        }
-        last = newRight;
-        
+      root->right = create_ans_token(csound, last->left->value->lexeme);
+    }
+    else if (is_expression_node(root->right)) {
+      TREE * newRight = create_expression(csound, root->right, line);
+      if (anchor == NULL) {
+        anchor = newRight;
+      }
+      else {
+        last = anchor;
         while (last->next != NULL) {
-            last = last->next;
+          last = last->next;
         }
+        last->next = newRight;
+      }
+      last = newRight;
         
-        /* TODO - Free memory of old right node
+      while (last->next != NULL) {
+        last = last->next;
+      }
+        
+      /* TODO - Free memory of old right node
          freetree */
-        root->right = create_ans_token(csound, last->left->value->lexeme);
+      root->right = create_ans_token(csound, last->left->value->lexeme);
+      root->line = line;
     }
 
     op = mcalloc(csound, 80);
@@ -606,15 +637,17 @@ TREE * create_boolean_expression(CSOUND *csound, TREE *root)
                       argtyp2(csound, root->left->value->lexeme),
                       argtyp2(csound, root->right->value->lexeme));
 
-    outarg = get_boolean_arg(csound,
-                             argtyp2(csound, root->left->value->lexeme)=='k' ||
-                             argtyp2(csound, root->right->value->lexeme)=='k');
+    outarg = get_boolean_arg(
+                 csound,
+                 argtyp2(csound, root->left->value->lexeme) =='k' ||
+                 argtyp2(csound, root->right->value->lexeme)=='k' ||
+                 argtyp2(csound, root->left->value->lexeme) =='B' ||
+                 argtyp2(csound, root->right->value->lexeme)=='B');
 
     opTree = create_opcode_token(csound, op);
     opTree->right = root->left;
     opTree->right->next = root->right;
     opTree->left = create_ans_token(csound, outarg);
-
     if (anchor == NULL) {
       anchor = opTree;
     }
@@ -640,7 +673,7 @@ static TREE *create_synthetic_ident(CSOUND *csound, int32 count)
       csound->Message(csound, "Creating Synthetic T_IDENT: %s\n", label);
     token = make_token(csound, label);
     token->type = T_IDENT;
-    return make_leaf(csound, T_IDENT, token);
+    return make_leaf(csound, -1, T_IDENT, token);
 }
 
 TREE *create_synthetic_label(CSOUND *csound, int32 count)
@@ -650,7 +683,7 @@ TREE *create_synthetic_label(CSOUND *csound, int32 count)
     sprintf(label, "__synthetic_%ld:", count);
     if (UNLIKELY(PARSER_DEBUG))
       csound->Message(csound, "Creating Synthetic label: %s\n", label);
-    return make_leaf(csound, T_LABEL, make_label(csound, label));
+    return make_leaf(csound, -1, LABEL_TOKEN, make_label(csound, label));
 }
 
 /* Expands expression nodes into opcode calls
@@ -690,28 +723,31 @@ TREE *csound_orc_expand_expressions(CSOUND * csound, TREE *root)
 
     while (current != NULL) {
       switch(current->type) {
-      case T_INSTR:
-        if (UNLIKELY(PARSER_DEBUG)) csound->Message(csound, "Instrument found\n");
+      case INSTR_TOKEN:
+        if (UNLIKELY(PARSER_DEBUG))
+          csound->Message(csound, "Instrument found\n");
         current->right = csound_orc_expand_expressions(csound, current->right);
         //        print_tree(csound, "AFTER", current);
         break;
-      case T_UDO:
+      case UDO_TOKEN:
         if (UNLIKELY(PARSER_DEBUG)) csound->Message(csound, "UDO found\n");
         current->right = csound_orc_expand_expressions(csound, current->right);
         break;
-      case T_IF:
-        if (UNLIKELY(PARSER_DEBUG)) csound->Message(csound, "Found IF statement\n");
+      case IF_TOKEN:
+        if (UNLIKELY(PARSER_DEBUG))
+          csound->Message(csound, "Found IF statement\n");
         {
           TREE * left = current->left;
           TREE * right = current->right;
           TREE* last;
           TREE * gotoToken;
 
-          if (right->type == T_IGOTO ||
-              right->type == T_KGOTO ||
-              right->type == T_GOTO) {
-            if (UNLIKELY(PARSER_DEBUG)) csound->Message(csound, "Found if-goto\n");
-            expressionNodes = create_boolean_expression(csound, left);
+          if (right->type == IGOTO_TOKEN ||
+              right->type == KGOTO_TOKEN ||
+              right->type == GOTO_TOKEN) {
+            if (UNLIKELY(PARSER_DEBUG))
+              csound->Message(csound, "Found if-goto\n");
+            expressionNodes = create_boolean_expression(csound, left, right->line);
             /* Set as anchor if necessary */
             if (anchor == NULL) {
               anchor = expressionNodes;
@@ -735,9 +771,9 @@ TREE *csound_orc_expand_expressions(CSOUND * csound, TREE *root)
             current = gotoToken;
             previous = last;
           }
-          else if (right->type == T_THEN ||
-                   right->type == T_ITHEN ||
-                   right->type == T_KTHEN) {
+          else if (right->type == THEN_TOKEN ||
+                   right->type == ITHEN_TOKEN ||
+                   right->type == KTHEN_TOKEN) {
             int endLabelCounter = -1;
             TREE *tempLeft;
             TREE *tempRight;
@@ -745,7 +781,8 @@ TREE *csound_orc_expand_expressions(CSOUND * csound, TREE *root)
             TREE *ifBlockCurrent = current;
             TREE *ifBlockLast = NULL;
 
-            if (UNLIKELY(PARSER_DEBUG)) csound->Message(csound, "Found if-then\n");
+            if (UNLIKELY(PARSER_DEBUG))
+              csound->Message(csound, "Found if-then\n");
             if (right->next != NULL) {
               endLabelCounter = genlabs++;
             }
@@ -753,31 +790,33 @@ TREE *csound_orc_expand_expressions(CSOUND * csound, TREE *root)
             while (ifBlockCurrent != NULL) {
               tempLeft = ifBlockCurrent->left;
               tempRight = ifBlockCurrent->right;
-              if (ifBlockCurrent->type == T_ELSE) {
-                //                print_tree(csound, "ELSE case\n", ifBlockCurrent);
+              if (ifBlockCurrent->type == ELSE_TOKEN) {
+                //  print_tree(csound, "ELSE case\n", ifBlockCurrent);
                 ifBlockLast->next =
                   csound_orc_expand_expressions(csound, tempRight);
                 while (ifBlockLast->next != NULL) {
                   ifBlockLast = ifBlockLast->next;
                 }
-                //                print_tree(csound, "ELSE transformed\n", ifBlockCurrent);
+                // print_tree(csound, "ELSE transformed\n", ifBlockCurrent);
                 break;
               }
-              else if (ifBlockCurrent->type == T_ELSEIF) { /* JPff code */
-                //                print_tree(csound, "ELSEIF case\n", ifBlockCurrent);
-                ifBlockCurrent->type = T_IF;
-                ifBlockCurrent = make_node(csound, T_ELSE, NULL, ifBlockCurrent);
+              else if (ifBlockCurrent->type == ELSEIF_TOKEN) { /* JPff code */
+                // print_tree(csound, "ELSEIF case\n", ifBlockCurrent);
+                ifBlockCurrent->type = IF_TOKEN;
+                ifBlockCurrent = make_node(csound, ifBlockCurrent->line, ELSE_TOKEN,
+                                           NULL, ifBlockCurrent);
                 //tempLeft = NULL;
                 /*   ifBlockLast->next = */
                 /*     csound_orc_expand_expressions(csound, ifBlockCurrent); */
                 /* while (ifBlockLast->next != NULL) { */
                 /*   ifBlockLast = ifBlockLast->next; */
                 /* } */
-                //                print_tree(csound, "ELSEIF transformed\n", ifBlockCurrent);
+                // print_tree(csound, "ELSEIF transformed\n", ifBlockCurrent);
                 //break;
               }
 
-              expressionNodes = create_boolean_expression(csound, tempLeft);
+              expressionNodes =
+                create_boolean_expression(csound, tempLeft, tempLeft->line);
                             /* Set as anchor if necessary */
               if (ifBlockStart == NULL) {
                 ifBlockStart = expressionNodes;
@@ -799,15 +838,15 @@ TREE *csound_orc_expand_expressions(CSOUND * csound, TREE *root)
                 label = create_synthetic_ident(csound, genlabs);
                 labelEnd = create_synthetic_label(csound, genlabs++);
                 tempRight->right = label;
-//                printf("goto types %c %c %c %c %d\n",
-//                       expressionNodes->left->type, tempRight->type,
-//                       argtyp2(csound, last->left->value->lexeme),
-//                       argtyp2(csound, tempRight->value->lexeme),
-//                       (argtyp2(csound, last->left->value->lexeme) == 'k') ||
-//                       (argtyp2(csound, tempRight->value->lexeme) == 'k'));
-//                print_tree(csound, "expression nodes", expressionNodes);
+//              printf("goto types %c %c %c %c %d\n",
+//                     expressionNodes->left->type, tempRight->type,
+//                     argtyp2(csound, last->left->value->lexeme),
+//                     argtyp2(csound, tempRight->value->lexeme),
+//                     (argtyp2(csound, last->left->value->lexeme) == 'k') ||
+//                     (argtyp2(csound, tempRight->value->lexeme) == 'k'));
+//              print_tree(csound, "expression nodes", expressionNodes);
                 gotoType = (argtyp2(csound, last->left->value->lexeme) == 'B') ||
-                  (argtyp2(csound, tempRight->value->lexeme) == 'k');
+                           (argtyp2(csound, tempRight->value->lexeme) == 'k');
                 gotoToken =
                   create_goto_token(csound,
                    last->left->value->lexeme,
@@ -816,13 +855,22 @@ TREE *csound_orc_expand_expressions(CSOUND * csound, TREE *root)
                 /* relinking */
                 last->next = gotoToken;
                 gotoToken->next = statements;
+                /* VL: added as means of dealing with empty conditionals,
+                   may need revision */
+                if(statements == NULL) 
+                   csound->Die(csound,
+                               Str("error: non-existent statement in "
+                                   "conditional, line %d \n"),
+                               last->right->line); 
                 while (statements->next != NULL) {
                   statements = statements->next;
                 }
                 if (endLabelCounter > 0) {
                   TREE *endLabel = create_synthetic_ident(csound,
                                                           endLabelCounter);
-                  int type = (gotoType == 1) ? 0 : 1;
+                  int type = (gotoType == 1) ? 0 : 2;
+                  /* csound->DebugMsg(csound, "%s(%d): type = %d %d\n", */
+                  /*        __FILE__, __LINE__, type, gotoType); */
                   TREE *gotoEndLabelToken =
                     create_simple_goto_token(csound, endLabel, type);
                   if (UNLIKELY(PARSER_DEBUG))
@@ -864,28 +912,30 @@ TREE *csound_orc_expand_expressions(CSOUND * csound, TREE *root)
             current = ifBlockStart;
           }
           else {
-            csound->Message(csound, "ERROR: Neither if-goto or if-then found!!!");
+            csound->Message(csound,
+                            "ERROR: Neither if-goto or if-then found on line %d!!!",
+                            right->line);
           }
         }
         break;
-      case T_UNTIL:
+      case UNTIL_TOKEN:
         if (UNLIKELY(PARSER_DEBUG))
           csound->Message(csound, "Found UNTIL statement\n");
         {
-          TREE * left = current->left;
-          TREE * right = current->right;
-          TREE* last;
+          //TREE * left = current->left;
+          //TREE * right = current->right;
+          //TREE* last;
           TREE * gotoToken;
 
           int32 topLabelCounter = genlabs++;
           int32 endLabelCounter = genlabs++;
           TREE *tempLeft = current->left;
           TREE *tempRight = current->right;
-          TREE *ifBlockStart = current;
+          //TREE *ifBlockStart = current;
           TREE *ifBlockCurrent = current;
           TREE *ifBlockLast = current;
-          TREE *next = current->next;
-          TREE *statements, *label, *labelEnd;
+          //TREE *next = current->next;
+          TREE *statements, *labelEnd;
           int type;
           /* *** Stage 1: Create a top label (overwriting *** */
           {                           /* Change UNTIL to label and add IF */
@@ -896,7 +946,7 @@ TREE *csound_orc_expand_expressions(CSOUND * csound, TREE *root)
             ifBlockCurrent->left = tempLeft;
             ifBlockCurrent->right = tempRight;
             ifBlockCurrent->next = current->next;
-            ifBlockCurrent->type = T_IF;
+            ifBlockCurrent->type = IF_TOKEN;
             current->next = t;
           }
           /* *** Stage 2: Boolean expression *** */
@@ -904,11 +954,11 @@ TREE *csound_orc_expand_expressions(CSOUND * csound, TREE *root)
           tempRight = ifBlockCurrent->right;
           expressionNodes =
             ifBlockLast->next = create_boolean_expression(csound,
-                                                          ifBlockCurrent->left);
+                                                          ifBlockCurrent->left,
+                                                          ifBlockCurrent->line);
           ifBlockLast = ifBlockLast->next;
           /* *** Stage 3: Create the goto *** */
           statements = tempRight;     /* the body of the loop */
-          label    = create_synthetic_ident(csound, topLabelCounter);
           labelEnd = create_synthetic_label(csound, endLabelCounter);
           gotoToken =
             create_goto_token(csound,
@@ -916,10 +966,10 @@ TREE *csound_orc_expand_expressions(CSOUND * csound, TREE *root)
                               labelEnd,
                               type =
                               ((argtyp2(csound,
-                                        expressionNodes->left->value->lexeme)=='B')
+                                  expressionNodes->left->value->lexeme)=='B')
                                ||
                                (argtyp2(csound,
-                                        tempRight->value->lexeme) == 'k')));
+                                   tempRight->value->lexeme) == 'k')));
           /* relinking */
           tempRight = ifBlockLast->next;
           ifBlockLast->next = gotoToken;
@@ -944,13 +994,16 @@ TREE *csound_orc_expand_expressions(CSOUND * csound, TREE *root)
           ifBlockCurrent = tempRight->next;
         }
         break;
+      case LABEL_TOKEN:
+        break;
       default:
         { /* This is WRONG in optional argsq */
           TREE* previousArg = NULL;
           TREE* currentArg = current->right;
-          if (UNLIKELY(PARSER_DEBUG)) csound->Message(csound, "Found Statement.\n");
+          if (UNLIKELY(PARSER_DEBUG))
+            csound->Message(csound, "Found Statement.\n");
 
-          /* if (current->type == S_ASSIGN) { */
+          /* if (current->type == '=') { */
           /*   //csound->Message(csound, "Assignment Statement.\n"); */
           /* } */
           while (currentArg != NULL) {
@@ -961,7 +1014,8 @@ TREE *csound_orc_expand_expressions(CSOUND * csound, TREE *root)
               char * newArg;
               if (UNLIKELY(PARSER_DEBUG))
                 csound->Message(csound, "Found Expression.\n");
-              expressionNodes = create_expression(csound, currentArg);
+              expressionNodes =
+                create_expression(csound, currentArg, currentArg->line);
 
               /* Set as anchor if necessary */
               if (anchor == NULL) {
diff --git a/Engine/csound_orc_optimize.c b/Engine/csound_orc_optimize.c
index 88d7eb6..17ff524 100644
--- a/Engine/csound_orc_optimize.c
+++ b/Engine/csound_orc_optimize.c
@@ -37,17 +37,17 @@ TREE* csound_orc_optimize(CSOUND * csound, TREE *root)
 
     while(current != NULL) {
       switch(current->type) {
-      case T_INSTR:
+      case INSTR_TOKEN:
         if (PARSER_DEBUG) csound->Message(csound, "Instrument found\n");
         current->right = csound_orc_optimize(csound, current->right);
 
         break;
-      case T_UDO:
+      case UDO_TOKEN:
         if (PARSER_DEBUG) csound->Message(csound, "UDO found\n");
 
         break;
 
-      case T_IF:
+      case IF_TOKEN:
 
         break;
 
@@ -56,8 +56,8 @@ TREE* csound_orc_optimize(CSOUND * csound, TREE *root)
         if (current->right != NULL) {
           if (PARSER_DEBUG) csound->Message(csound, "Found Statement.\n");
 
-          if (current->type == S_ASSIGN && previous != NULL) {
-            /* S_ASSIGN should be guaranteed to have left and right
+          if (current->type == '=' && previous != NULL) {
+            /* '=' should be guaranteed to have left and right
              * arg by the time it gets here */
             if (previous->left != NULL && previous->left->value != NULL) {
               if (strcmp(previous->left->value->lexeme,
diff --git a/Engine/csound_orc_semantics.c b/Engine/csound_orc_semantics.c
index c830364..b4286ce 100644
--- a/Engine/csound_orc_semantics.c
+++ b/Engine/csound_orc_semantics.c
@@ -48,42 +48,51 @@ TREE * verify_tree(CSOUND *csound, TREE *root)
     //csound->Message(csound, "Verifying AST (NEED TO IMPLEMENT)\n");
     //    print_tree(csound, "Verify", root);
     if (root==NULL) return NULL;
-    if (root->left)  {
-      root->left = verify_tree(csound, root->left);
-      if (root->right) {
-        root->right= verify_tree(csound, root->right);
-        if ((root->left->type  == T_INTGR || root->left->type  == T_NUMBER) &&
-            (root->right->type == T_INTGR || root->right->type == T_NUMBER)) {
-          lval = (root->left->type == T_INTGR ?
+    if (root->right) {
+      root->right = verify_tree(csound, root->right);
+      if (root->left) {
+        root->left= verify_tree(csound, root->left);
+        if ((root->left->type  == INTEGER_TOKEN || root->left->type  == NUMBER_TOKEN) &&
+            (root->right->type == INTEGER_TOKEN || root->right->type == NUMBER_TOKEN)) {
+          lval = (root->left->type == INTEGER_TOKEN ?
                   (double)root->left->value->value :root->left->value->fvalue);
-          rval = (root->right->type == T_INTGR ?
+          rval = (root->right->type == INTEGER_TOKEN ?
                   (double)root->right->value->value :root->left->value->fvalue);
           ans = root->left;
-          ans->type = ans->value->type = T_NUMBER;
+          ans->type = ans->value->type = NUMBER_TOKEN;
+          /* **** Something wrong here -- subtractuon confuses memory **** */
           switch (root->type) {
-          case S_PLUS:
+          case '+':
             ans->value->fvalue = lval+rval;
-            mrealloc(csound, ans->value->lexeme, 24);
+            ans->value->lexeme =
+              (char*)mrealloc(csound, ans->value->lexeme, 24);
             sprintf(ans->value->lexeme, "%f", ans->value->fvalue);
-            //Memory leak!! mfree(csound, root); mfree(csound, root->right);
+            //Memory leak!! 
+            //mfree(csound, root); mfree(csound root->right);
             return ans;
-          case S_MINUS:
+          case '-':
             ans->value->fvalue = lval-rval;
-            mrealloc(csound, ans->value->lexeme, 24);
+            ans->value->lexeme =
+              (char*)mrealloc(csound, ans->value->lexeme, 24);
             sprintf(ans->value->lexeme, "%f", ans->value->fvalue);
-            //Memory leak!! mfree(csound, root); mfree(csound, root->right);
+            //Memory leak!! 
+            //mfree(csound, root); mfree(csound, root->right);
             return ans;
-          case S_TIMES:
+          case '*':
             ans->value->fvalue = lval*rval;
-            mrealloc(csound, ans->value->lexeme, 24);
+            ans->value->lexeme =
+              (char*)mrealloc(csound, ans->value->lexeme, 24);
             sprintf(ans->value->lexeme, "%f", ans->value->fvalue);
-            //Memory leak!! mfree(csound, root); mfree(csound, root->right);
+            //Memory leak!! 
+            //mfree(csound, root); mfree(csound, root->right);
             return ans;
-          case S_DIV:
+          case '/':
             ans->value->fvalue = lval/rval;
-            mrealloc(csound, ans->value->lexeme, 24);
+            ans->value->lexeme =
+              (char*)mrealloc(csound, ans->value->lexeme, 24);
             sprintf(ans->value->lexeme, "%f", ans->value->fvalue);
-            //Memory leak!! mfree(csound, root); mfree(csound, root->right);
+            //Memory leak!! 
+            //mfree(csound, root); mfree(csound, root->right);
             return ans;
             /* case S_NEQ: */
             /*   break; */
@@ -105,6 +114,24 @@ TREE * verify_tree(CSOUND *csound, TREE *root)
           }
         }
       }
+      else if (root->right->type == INTEGER_TOKEN ||
+               root->right->type == NUMBER_TOKEN) {
+        switch (root->type) {
+        case S_UMINUS:
+          print_tree(csound, "root", root);
+          ans = root->right;
+          ans->value->fvalue = -(ans->type==INTEGER_TOKEN ? ans->value->value
+                                 : ans->value->fvalue);
+          ans->value->lexeme =
+            (char*)mrealloc(csound, ans->value->lexeme, 24);
+          sprintf(ans->value->lexeme, "%f", ans->value->fvalue);
+          ans->type = ans->value->type = NUMBER_TOKEN;
+          print_tree(csound, "ans", ans);
+          return ans;
+        default:
+          break;
+        }
+      }
     }
     return root;
 }
@@ -113,23 +140,45 @@ TREE * verify_tree(CSOUND *csound, TREE *root)
 /* BISON PARSER FUNCTION */
 int csound_orcwrap()
 {
-    printf("END OF INPUT\n");
+    printf("\n === END OF INPUT ===\n");
     return (1);
 }
 
+extern int csound_orcget_lineno(void*);
+extern char *csound_orcget_current_pointer(void *);
 /* BISON PARSER FUNCTION */
 void csound_orcerror(PARSE_PARM *pp, void *yyscanner,
-                     CSOUND *csound, TREE *astTree, char *str)
+                     CSOUND *csound, TREE *astTree, const char *str)
 {
-    //??    extern int yyline;
-    //    extern char* buffer;
-
-    csound->Message(csound, Str("error: %s (token \"%s\")"),
+    char ch;
+    char *p = csound_orcget_current_pointer(yyscanner)-1;
+    int line = csound_orcget_lineno(yyscanner);
+    if (*p=='\0') line--;
+    csound->Message(csound, Str("\nerror: %s  (token \"%s\")"),
                     str, csound_orcget_text(yyscanner));
-    csound->Message(csound, Str(" line %d: %s"),
-                    csound_orcget_lineno(yyscanner), pp->buffer); // buffer has \n at end
+    csound->Message(csound, Str(" line %d:\n>>>"), line);
+    /* if(!strcmp(csound_orcget_text(yyscanner), "\n")) { */
+    /*  csound->Message(csound, Str("error: %s (\"\\n\")"), */
+    /*                 str); */
+    /*  csound->Message(csound, Str(" line %d:\n>>> "), */
+    /*     	     csound_orcget_lineno(yyscanner)); */
+    /* } */
+    /* else { */
+    /*  csound->Message(csound, Str("\nerror: %s  (token \"%s\")"), */
+    /*                 str, csound_orcget_text(yyscanner)); */
+    /* csound->Message(csound, Str(" line %d:\n>>> "), */
+    /*                 csound_orcget_lineno(yyscanner)+1); */
+    /* } */
+    while ((ch=*--p) != '\n' && ch != '\0');
+    do {
+      ch = *++p;
+      if(ch == '\n') break;
+      csound->Message(csound, "%c", ch);
+    } while (ch != '\n' && ch != '\0');
+    csound->Message(csound, " <<<\n");
 }
 
+
 /**
  * Appends TREE * node to TREE * node using ->next field in struct; walks
  * down the linked list to append at end; checks for NULL's and returns
@@ -148,8 +197,8 @@ TREE* appendToTree(CSOUND * csound, TREE *first, TREE *newlast) {
     /* HACK - Checks to see if first node is uninitialized (sort of)
      * This occurs for rules like in topstatement where the left hand
      * topstatement the first time around is not initialized to anything
-     * useful; the number 400 is arbitrary, chosen as it seemed to be a value
-     * higher than all the type numbers that were being printed out
+     * useful; the number 400 is arbitrary, chosen as it seemed to be a
+     * value higher than all the type numbers that were being printed out
      */
     if (first->type > 400 || first-> type < 0) {
         return newlast;
@@ -168,7 +217,7 @@ TREE* appendToTree(CSOUND * csound, TREE *first, TREE *newlast) {
 
 
 /* USED BY PARSER TO ASSEMBLE TREE NODES */
-TREE* make_node(CSOUND *csound, int type, TREE* left, TREE* right)
+TREE* make_node(CSOUND *csound, int line, int type, TREE* left, TREE* right)
 {
     TREE *ans;
     ans = (TREE*)mmalloc(csound, sizeof(TREE));
@@ -182,10 +231,12 @@ TREE* make_node(CSOUND *csound, int type, TREE* left, TREE* right)
     ans->next = NULL;
     ans->len = 2;
     ans->rate = -1;
+    ans->line = line;
+    csound->DebugMsg(csound, "%s(%d) line = %d\n", __FILE__, __LINE__, line);
     return ans;
 }
 
-TREE* make_leaf(CSOUND *csound, int type, ORCTOKEN *v)
+TREE* make_leaf(CSOUND *csound, int line, int type, ORCTOKEN *v)
 {
     TREE *ans;
     ans = (TREE*)mmalloc(csound, sizeof(TREE));
@@ -200,6 +251,8 @@ TREE* make_leaf(CSOUND *csound, int type, ORCTOKEN *v)
     ans->len = 0;
     ans->rate = -1;
     ans->value = v;
+    ans->line = line;
+    csound->DebugMsg(csound, "%s(%d) line = %d\n", __FILE__, __LINE__, line);
     return ans;
 }
 
@@ -247,94 +300,84 @@ void print_tree_i(CSOUND *csound, TREE *l, int n)
     csound->Message(csound, "TYPE: %d ", l->type);
 
     switch (l->type) {
-    case S_COM:
-      csound->Message(csound,"S_COM:\n"); break;
-    case S_Q:
-      csound->Message(csound,"S_Q:\n"); break;
-    case S_COL:
-      csound->Message(csound,"S_COL:\n"); break;
-    case S_NOT:
-      csound->Message(csound,"S_NOT:\n"); break;
-    case S_PLUS:
-      csound->Message(csound,"S_PLUS:\n"); break;
-    case S_MINUS:
-      csound->Message(csound,"S_MINUS:\n"); break;
-    case S_TIMES:
-      csound->Message(csound,"S_TIMES:\n"); break;
-    case S_DIV:
-      csound->Message(csound,"S_DIV:\n"); break;
-    case S_MOD:
-      csound->Message(csound,"S_MOD:\n"); break;
-    case S_POW:
-      csound->Message(csound,"S_POW:\n"); break;
-    case S_NL:
-      csound->Message(csound,"S_NL:\n"); break;
-    case S_LB:
-      csound->Message(csound,"S_LB:\n"); break;
-    case S_RB:
-      csound->Message(csound,"S_RB:\n"); break;
+    case ',':
+    case '?':
+    case ':':
+    case '!':
+    case '+':
+    case '-':
+    case '*':
+    case '/':
+    case '%':
+    case '^':
+    case '(':
+    case ')':
+    case '=':
+      csound->Message(csound,"%c:(%d)\n", l->type, l->line); break;
+    case NEWLINE:
+      csound->Message(csound,"NEWLINE:(%d)\n", l->line); break;
     case S_NEQ:
-      csound->Message(csound,"S_NEQ:\n"); break;
+      csound->Message(csound,"S_NEQ:(%d)\n", l->line); break;
     case S_AND:
-      csound->Message(csound,"S_AND:\n"); break;
+      csound->Message(csound,"S_AND:(%d)\n", l->line); break;
     case S_OR:
-      csound->Message(csound,"S_OR:\n"); break;
+      csound->Message(csound,"S_OR:(%d)\n", l->line); break;
     case S_LT:
-      csound->Message(csound,"S_LT:\n"); break;
+      csound->Message(csound,"S_LT:(%d)\n", l->line); break;
     case S_LE:
-      csound->Message(csound,"S_LE:\n"); break;
+      csound->Message(csound,"S_LE:(%d)\n", l->line); break;
     case S_EQ:
-      csound->Message(csound,"S_EQ:\n"); break;
-    case S_ASSIGN:
-      csound->Message(csound,"S_ASSIGN:\n"); break;
+      csound->Message(csound,"S_EQ:(%d)\n", l->line); break;
     case S_TASSIGN:
-      csound->Message(csound,"S_TASSIGN:\n"); break;
+      csound->Message(csound,"S_TASSIGN:(%d)\n", l->line); break;
     case S_TABREF:
-      csound->Message(csound,"S_TABREF:\n"); break;
+      csound->Message(csound,"S_TABREF:(%d)\n", l->line); break;
     case S_GT:
-      csound->Message(csound,"S_GT:\n"); break;
+      csound->Message(csound,"S_GT:(%d)\n", l->line); break;
     case S_GE:
-      csound->Message(csound,"S_GE:\n"); break;
-    case T_LABEL:
-      csound->Message(csound,"T_LABEL: %s\n", l->value->lexeme); break;
-    case T_IF:
-      csound->Message(csound,"T_IF:\n"); break;
-    case T_THEN:
-          csound->Message(csound,"T_THEN:\n"); break;
-    case T_ITHEN:
-          csound->Message(csound,"T_ITHEN:\n"); break;
-    case T_KTHEN:
-          csound->Message(csound,"T_KTHEN:\n"); break;
-    case T_ELSEIF:
-          csound->Message(csound,"T_ELSEIF:\n"); break;
-    case T_ELSE:
-          csound->Message(csound,"T_ELSE:\n"); break;
-    case T_UNTIL:
-          csound->Message(csound,"T_UNTIL:\n"); break;
-    case T_DO:
-          csound->Message(csound,"T_DO:\n"); break;
-    case T_OD:
-          csound->Message(csound,"T_OD:\n"); break;
-    case T_GOTO:
-      csound->Message(csound,"T_GOTO:\n"); break;
-    case T_IGOTO:
-      csound->Message(csound,"T_IGOTO:\n"); break;
-    case T_KGOTO:
-      csound->Message(csound,"T_KGOTO:\n"); break;
-    case T_SRATE:
-      csound->Message(csound,"T_SRATE:\n"); break;
-    case T_KRATE:
-      csound->Message(csound,"T_KRATE:\n"); break;
-    case T_KSMPS:
-      csound->Message(csound,"T_KSMPS:\n"); break;
-    case T_NCHNLS:
-      csound->Message(csound,"T_NCHNLS:\n"); break;
-    case T_NCHNLSI:
-      csound->Message(csound,"T_NCHNLSI:\n"); break;
-    case T_INSTR:
-      csound->Message(csound,"T_INSTR:\n"); break;
-    case T_STRCONST:
-      csound->Message(csound,"T_STRCONST: %s\n", l->value->lexeme); break;
+      csound->Message(csound,"S_GE:(%d)\n", l->line); break;
+    case LABEL_TOKEN:
+      csound->Message(csound,"LABEL_TOKEN: %s\n", l->value->lexeme); break;
+    case IF_TOKEN:
+      csound->Message(csound,"IF_TOKEN:(%d)\n", l->line); break;
+    case THEN_TOKEN:
+          csound->Message(csound,"THEN_TOKEN:(%d)\n", l->line); break;
+    case ITHEN_TOKEN:
+          csound->Message(csound,"ITHEN_TOKEN:(%d)\n", l->line); break;
+    case KTHEN_TOKEN:
+          csound->Message(csound,"KTHEN_TOKEN:(%d)\n", l->line); break;
+    case ELSEIF_TOKEN:
+          csound->Message(csound,"ELSEIF_TOKEN:(%d)\n", l->line); break;
+    case ELSE_TOKEN:
+          csound->Message(csound,"ELSE_TOKEN:(%d)\n", l->line); break;
+    case UNTIL_TOKEN:
+          csound->Message(csound,"UNTIL_TOKEN:(%d)\n", l->line); break;
+    case DO_TOKEN:
+          csound->Message(csound,"DO_TOKEN:(%d)\n", l->line); break;
+    case OD_TOKEN:
+          csound->Message(csound,"OD_TOKEN:(%d)\n", l->line); break;
+    case GOTO_TOKEN:
+      csound->Message(csound,"GOTO_TOKEN:(%d)\n", l->line); break;
+    case IGOTO_TOKEN:
+      csound->Message(csound,"IGOTO_TOKEN:(%d)\n", l->line); break;
+    case KGOTO_TOKEN:
+      csound->Message(csound,"KGOTO_TOKEN:(%d)\n", l->line); break;
+    case SRATE_TOKEN:
+      csound->Message(csound,"SRATE_TOKEN:(%d)\n", l->line); break;
+    case KRATE_TOKEN:
+      csound->Message(csound,"KRATE_TOKEN:(%d)\n", l->line); break;
+    case ZERODBFS_TOKEN:
+      csound->Message(csound,"ZERODFFS_TOKEN:(%d)\n", l->line); break;
+    case KSMPS_TOKEN:
+      csound->Message(csound,"KSMPS_TOKEN:(%d)\n", l->line); break;
+    case NCHNLS_TOKEN:
+      csound->Message(csound,"NCHNLS_TOKEN:(%d)\n", l->line); break;
+    case NCHNLSI_TOKEN:
+      csound->Message(csound,"NCHNLSI_TOKEN:(%d)\n", l->line); break;
+    case INSTR_TOKEN:
+      csound->Message(csound,"INSTR_TOKEN:(%d)\n", l->line); break;
+    case STRING_TOKEN:
+      csound->Message(csound,"STRING_TOKEN: %s\n", l->value->lexeme); break;
     case T_IDENT:
       csound->Message(csound,"T_IDENT: %s\n", l->value->lexeme); break;
     case T_IDENT_I:
@@ -371,14 +414,14 @@ void print_tree_i(CSOUND *csound, TREE *l, int n)
       csound->Message(csound,"IDENT_B: %s\n", l->value->lexeme); break;
     case T_IDENT_b:
       csound->Message(csound,"IDENT_b: %s\n", l->value->lexeme); break;
-    case T_INTGR:
-      csound->Message(csound,"T_INTGR: %d\n", l->value->value); break;
-    case T_NUMBER:
-      csound->Message(csound,"T_NUMBER: %f\n", l->value->fvalue); break;
+    case INTEGER_TOKEN:
+      csound->Message(csound,"INTEGER_TOKEN: %d\n", l->value->value); break;
+    case NUMBER_TOKEN:
+      csound->Message(csound,"NUMBER_TOKEN: %f\n", l->value->fvalue); break;
     case S_ANDTHEN:
-      csound->Message(csound,"S_ANDTHEN:\n"); break;
+      csound->Message(csound,"S_ANDTHEN:(%d)\n", l->line); break;
     case S_APPLY:
-      csound->Message(csound,"S_APPLY:\n"); break;
+      csound->Message(csound,"S_APPLY:(%d)\n", l->line); break;
     case T_OPCODE0:
       csound->Message(csound,"T_OPCODE0: %s\n", l->value->lexeme); break;
     case T_OPCODE:
@@ -386,11 +429,11 @@ void print_tree_i(CSOUND *csound, TREE *l, int n)
     case T_FUNCTION:
       csound->Message(csound,"T_FUNCTION: %s\n", l->value->lexeme); break;
     case S_UMINUS:
-        csound->Message(csound,"S_UMINUS:\n"); break;
+        csound->Message(csound,"S_UMINUS:(%d)\n", l->line); break;
     case T_INSTLIST:
-        csound->Message(csound,"T_INSTLIST:\n"); break;
+        csound->Message(csound,"T_INSTLIST:(%d)\n", l->line); break;
     default:
-      csound->Message(csound,"t:%d\n", l->type);
+      csound->Message(csound,"unknown:%d(%d)\n", l->type, l->line);
     }
 
     print_tree_i(csound, l->left,n+1);
@@ -416,32 +459,26 @@ static void print_tree_xml(CSOUND *csound, TREE *l, int n, int which)
     csound->Message(csound, "<tree%s type=\"%d\" ", child[which], l->type);
 
     switch (l->type) {
-    case S_COM:
-      csound->Message(csound,"name=\"S_COM\""); break;
-    case S_Q:
-      csound->Message(csound,"name=\"S_Q\""); break;
-    case S_COL:
-      csound->Message(csound,"name=\"S_COL\""); break;
-    case S_NOT:
-      csound->Message(csound,"name=\"S_NOT\""); break;
-    case S_PLUS:
-      csound->Message(csound,"name=\"S_PLUS\""); break;
-    case S_MINUS:
-      csound->Message(csound,"name=\"S_MINUS\""); break;
-    case S_TIMES:
-      csound->Message(csound,"name=\"S_TIMES\""); break;
-    case S_DIV:
-      csound->Message(csound,"name=\"S_DIV\""); break;
-    case S_MOD:
-      csound->Message(csound,"name=\"S_MOD\""); break;
-    case S_POW:
-      csound->Message(csound,"name=\"S_POW\""); break;
-    case S_NL:
-      csound->Message(csound,"name=\"S_NL\""); break;
-    case S_LB:
-      csound->Message(csound,"name=\"S_LB\""); break;
-    case S_RB:
-      csound->Message(csound,"name=\"S_RB\""); break;
+    case ',':
+    case '?':
+    case ':':
+    case '!':
+    case '+':
+    case '-':
+    case '*':
+    case '/':
+    case '%':
+    case '^':
+    case '(':
+    case ')':
+    case '=':
+    case '|':
+    case '&':
+    case '#':
+    case '~':
+      csound->Message(csound,"name=\"%c\"", l->type); break;
+    case NEWLINE:
+      csound->Message(csound,"name=\"NEWLINE\""); break;
     case S_NEQ:
       csound->Message(csound,"name=\"S_NEQ\""); break;
     case S_AND:
@@ -454,8 +491,6 @@ static void print_tree_xml(CSOUND *csound, TREE *l, int n, int which)
       csound->Message(csound,"name=\"S_LE\""); break;
     case S_EQ:
       csound->Message(csound,"name=\"S_EQ\""); break;
-    case S_ASSIGN:
-      csound->Message(csound,"name=\"S_ASSIGN\""); break;
     case S_TASSIGN:
       csound->Message(csound,"name=\"S_TASSIGN\""); break;
     case S_TABREF:
@@ -464,58 +499,52 @@ static void print_tree_xml(CSOUND *csound, TREE *l, int n, int which)
       csound->Message(csound,"name=\"S_GT\""); break;
     case S_GE:
       csound->Message(csound,"name=\"S_GE\""); break;
-    case S_BITOR:
-      csound->Message(csound,"name=\"S_BITOR\""); break;
-    case S_BITAND:
-      csound->Message(csound,"name=\"S_BITAND\""); break;
-    case S_BITSHR:
-      csound->Message(csound,"name=\"S_BITSHR\""); break;
-    case S_BITSHL:
-      csound->Message(csound,"name=\"S_BITSHL\""); break;
-    case S_NEQV:
-      csound->Message(csound,"name=\"S_NEQV\""); break;
-    case S_BITNOT:
-      csound->Message(csound,"name=\"S_BITNOT\""); break;
-    case T_LABEL:
-      csound->Message(csound,"name=\"T_LABEL\" label=\"%s\"",
+    case S_BITSHIFT_RIGHT:
+      csound->Message(csound,"name=\"S_BITSHIFT_RIGHT\""); break;
+    case S_BITSHIFT_LEFT:
+      csound->Message(csound,"name=\"S_BITSHIFT_LEFT\""); break;
+    case LABEL_TOKEN:
+      csound->Message(csound,"name=\"LABEL_TOKEN\" label=\"%s\"",
                       l->value->lexeme); break;
-    case T_IF:
-      csound->Message(csound,"name=\"T_IF\""); break;
-    case T_THEN:
-          csound->Message(csound,"name=\"T_THEN\""); break;
-    case T_ITHEN:
-          csound->Message(csound,"name=\"T_ITHEN\""); break;
-    case T_KTHEN:
-          csound->Message(csound,"name=\"T_KTHEN\""); break;
-    case T_ELSEIF:
-          csound->Message(csound,"name=\"T_ELSEIF\""); break;
-    case T_ELSE:
-          csound->Message(csound,"name=\"T_ELSE\""); break;
-    case T_UNTIL:
-          csound->Message(csound,"name=\"T_UNTIL\""); break;
-    case T_DO:
-          csound->Message(csound,"name=\"T_DO\""); break;
-    case T_OD:
-          csound->Message(csound,"name=\"T_OD\""); break;
-    case T_GOTO:
-      csound->Message(csound,"name=\"T_GOTO\""); break;
-    case T_IGOTO:
-      csound->Message(csound,"name=\"T_IGOTO\""); break;
-    case T_KGOTO:
-      csound->Message(csound,"name=\"T_KGOTO\""); break;
-    case T_SRATE:
-      csound->Message(csound,"name=\"T_SRATE\""); break;
-    case T_KRATE:
-      csound->Message(csound,"name=\"T_KRATE\""); break;
-    case T_KSMPS:
-      csound->Message(csound,"name=\"T_KSMPS\""); break;
-    case T_NCHNLS:
-      csound->Message(csound,"name=\"T_NCHNLS\""); break;
-    case T_NCHNLSI:
-      csound->Message(csound,"name=\"T_NCHNLSI\""); break;
-    case T_INSTR:
-      csound->Message(csound,"name=\"T_INSTR\""); break;
-    case T_STRCONST:
+    case IF_TOKEN:
+      csound->Message(csound,"name=\"IF_TOKEN\""); break;
+    case THEN_TOKEN:
+          csound->Message(csound,"name=\"THEN_TOKEN\""); break;
+    case ITHEN_TOKEN:
+          csound->Message(csound,"name=\"ITHEN_TOKEN\""); break;
+    case KTHEN_TOKEN:
+          csound->Message(csound,"name=\"KTHEN_TOKEN\""); break;
+    case ELSEIF_TOKEN:
+          csound->Message(csound,"name=\"ELSEIF_TOKEN\""); break;
+    case ELSE_TOKEN:
+          csound->Message(csound,"name=\"ELSE_TOKEN\""); break;
+    case UNTIL_TOKEN:
+          csound->Message(csound,"name=\"UNTIL_TOKEN\""); break;
+    case DO_TOKEN:
+          csound->Message(csound,"name=\"DO_TOKEN\""); break;
+    case OD_TOKEN:
+          csound->Message(csound,"name=\"OD_TOKEN\""); break;
+    case GOTO_TOKEN:
+      csound->Message(csound,"name=\"GOTO_TOKEN\""); break;
+    case IGOTO_TOKEN:
+      csound->Message(csound,"name=\"IGOTO_TOKEN\""); break;
+    case KGOTO_TOKEN:
+      csound->Message(csound,"name=\"KGOTO_TOKEN\""); break;
+    case SRATE_TOKEN:
+      csound->Message(csound,"name=\"SRATE_TOKEN\""); break;
+    case KRATE_TOKEN:
+      csound->Message(csound,"name=\"KRATE_TOKEN\""); break;
+    case ZERODBFS_TOKEN:
+      csound->Message(csound,"name=\"ZERODBFS_TOKEN\""); break;
+    case KSMPS_TOKEN:
+      csound->Message(csound,"name=\"KSMPS_TOKEN\""); break;
+    case NCHNLS_TOKEN:
+      csound->Message(csound,"name=\"NCHNLS_TOKEN\""); break;
+    case NCHNLSI_TOKEN:
+      csound->Message(csound,"name=\"NCHNLSI_TOKEN\""); break;
+    case INSTR_TOKEN:
+      csound->Message(csound,"name=\"INSTR_TOKEN\""); break;
+    case STRING_TOKEN:
       csound->Message(csound,"name=\"T_STRCONST\" str=\"%s\"",
                       l->value->lexeme); break;
     case T_IDENT:
@@ -572,11 +601,11 @@ static void print_tree_xml(CSOUND *csound, TREE *l, int n, int which)
     case T_IDENT_b:
       csound->Message(csound,"name=\"IDENT_b\" varname=\"%s\"",
                       l->value->lexeme); break;
-    case T_INTGR:
-      csound->Message(csound,"name=\"T_INTGR\" value=\"%d\"",
+    case INTEGER_TOKEN:
+      csound->Message(csound,"name=\"INTEGER_TOKEN\" value=\"%d\"",
                       l->value->value); break;
-    case T_NUMBER:
-      csound->Message(csound,"name=\"T_NUMBER\" value=\"%f\" type=%d",
+    case NUMBER_TOKEN:
+      csound->Message(csound,"name=\"NUMBER_TOKEN\" value=\"%f\" type=%d",
                       l->value->fvalue, l->value->type); break;
     case S_ANDTHEN:
       csound->Message(csound,"name=\"S_ANDTHEN\""); break;
@@ -595,19 +624,19 @@ static void print_tree_xml(CSOUND *csound, TREE *l, int n, int which)
         csound->Message(csound,"name=\"S_UMINUS\""); break;
     case T_INSTLIST:
         csound->Message(csound,"name=\"T_INSTLIST\""); break;
-    case T_UDO:
-        csound->Message(csound,"name=\"T_UDO\""); break;
-    case T_UDO_ANS:
-        csound->Message(csound,"name=\"T_UDO_ANS\" signature=\"%s\"",
+    case UDO_TOKEN:
+        csound->Message(csound,"name=\"UDO_TOKEN\""); break;
+    case UDO_ANS_TOKEN:
+        csound->Message(csound,"name=\"UDO_ANS_TOKEN\" signature=\"%s\"",
                         l->value->lexeme); break;
-    case T_UDO_ARGS:
-        csound->Message(csound,"name=\"T_UDO_ARGS\" signature=\"%s\"",
+    case UDO_ARGS_TOKEN:
+        csound->Message(csound,"name=\"UDO_ARGS_TOKEN\" signature=\"%s\"",
                         l->value->lexeme); break;
     default:
-      csound->Message(csound,"name=\"unknown\"");
+      csound->Message(csound,"name=\"unknown\"(%d)", l->type);
     }
 
-    csound->Message(csound, " >\n");
+    csound->Message(csound, " (%d)>\n", l->line);
 
     print_tree_xml(csound, l->left,n+1, TREE_LEFT);
     print_tree_xml(csound, l->right,n+1, TREE_RIGHT);
@@ -638,7 +667,7 @@ void print_tree(CSOUND * csound, char* msg, TREE *l)
 
 void handle_optional_args(CSOUND *csound, TREE *l)
 {
-    if (l == NULL || l->type == T_LABEL) return;
+    if (l == NULL || l->type == LABEL_TOKEN) return;
 
     int opnum = find_opcode(csound, l->value->lexeme);
     OENTRY *ep = csound->opcodlst + opnum;
@@ -660,36 +689,36 @@ void handle_optional_args(CSOUND *csound, TREE *l)
         switch (ep->intypes[incnt]) {
         case 'O':             /* Will this work?  Doubtful code.... */
         case 'o':
-          temp = make_leaf(csound, T_INTGR, make_int(csound, "0"));
+          temp = make_leaf(csound, l->line, INTEGER_TOKEN, make_int(csound, "0"));
           if (l->right==NULL) l->right = temp;
           else appendToTree(csound, l->right, temp);
           break;
         case 'P':
         case 'p':
-          temp = make_leaf(csound, T_INTGR, make_int(csound, "1"));
+          temp = make_leaf(csound, l->line, INTEGER_TOKEN, make_int(csound, "1"));
           if (l->right==NULL) l->right = temp;
           else appendToTree(csound, l->right, temp);
           break;
         case 'q':
-          temp = make_leaf(csound, T_INTGR, make_int(csound, "10"));
+          temp = make_leaf(csound, l->line, INTEGER_TOKEN, make_int(csound, "10"));
           if (l->right==NULL) l->right = temp;
           else appendToTree(csound, l->right, temp);
           break;
 
         case 'V':
         case 'v':
-          temp = make_leaf(csound, T_NUMBER, make_num(csound, ".5"));
+          temp = make_leaf(csound, l->line, NUMBER_TOKEN, make_num(csound, ".5"));
           if (l->right==NULL) l->right = temp;
           else appendToTree(csound, l->right, temp);
           break;
         case 'h':
-          temp = make_leaf(csound, T_INTGR, make_int(csound, "127"));
+          temp = make_leaf(csound, l->line, INTEGER_TOKEN, make_int(csound, "127"));
           if (l->right==NULL) l->right = temp;
           else appendToTree(csound, l->right, temp);
           break;
         case 'J':
         case 'j':
-          temp = make_leaf(csound, T_INTGR, make_int(csound, "-1"));
+          temp = make_leaf(csound, l->line, INTEGER_TOKEN, make_int(csound, "-1"));
           if (l->right==NULL) l->right = temp;
           else appendToTree(csound, l->right, temp);
           break;
@@ -699,7 +728,9 @@ void handle_optional_args(CSOUND *csound, TREE *l)
           nreqd--;
           break;
         default:
-          synterr(csound, Str("insufficient required arguments"));
+          synterr(csound,
+                  Str("insufficient required arguments for opcode %s on line %d\n"),
+                  ep->opname, l->line);
         }
         incnt++;
       } while (incnt < nreqd);
@@ -707,7 +738,7 @@ void handle_optional_args(CSOUND *csound, TREE *l)
 }
 
 char tree_argtyp(CSOUND *csound, TREE *tree) {
-    if (tree->type == T_INTGR || tree->type == T_NUMBER) {
+    if (tree->type == INTEGER_TOKEN || tree->type == NUMBER_TOKEN) {
       return 'i';
     }
 
@@ -715,15 +746,13 @@ char tree_argtyp(CSOUND *csound, TREE *tree) {
 }
 
 void handle_polymorphic_opcode(CSOUND* csound, TREE * tree) {
-    if (tree->type == S_ASSIGN) {
+    if (tree->type == '=') {
       /* BUG: tree->right->value may be NULL */
       /* if (tree->right->value) */
-        tree->value->lexeme = get_assignment_type(csound,
-                                                  tree->left->value->lexeme,
-                                                  tree->right/*->value->lexeme*/);
-      /* else {                    /\* Conditional expression so broken  *\/ */
-      /*   print_tree(csound, "Odd case\n", tree); */
-      /* } */
+      tree->value->lexeme =
+        get_assignment_type(csound,
+                            tree->left->value->lexeme,
+                            tree->right/*->value->lexeme*/);
       return;
     }
     else if (tree->type==0) {
@@ -755,13 +784,13 @@ void handle_polymorphic_opcode(CSOUND* csound, TREE * tree) {
 
           if (PARSER_DEBUG) csound->Message(csound, "New Value: %s\n", str);
 
-          /*if (find_opcode(csound, str) == 0) {*/
-          /* synterr(csound, Str("failed to find %s, output arg '%s' illegal type"),
-             str, ST(group)[ST(nxtest)]);*/    /* report syntax error     */
-          /*ST(nxtest) = 100; */                    /* step way over this line */
-          /*goto tstnxt;*/                          /* & go to next            */
-          /*break;*/
-          /*}*/
+     /*if (find_opcode(csound, str) == 0) {*/
+     /* synterr(csound, Str("failed to find %s, output arg '%s' illegal type"),
+        str, ST(group)[ST(nxtest)]);*/    /* report syntax error     */
+     /*ST(nxtest) = 100; */                    /* step way over this line */
+     /*goto tstnxt;*/                          /* & go to next            */
+     /*break;*/
+     /*}*/
           tree->value->lexeme = (char *)mrealloc(csound, tree->value->lexeme,
                                                  strlen(str) + 1);
           strcpy(tree->value->lexeme, str);
@@ -825,15 +854,14 @@ void handle_polymorphic_opcode(CSOUND* csound, TREE * tree) {
         default:
           csound->Message(csound, "Impossible case\n");
           break;
-          /*strcpy(str, ST(linopcod));*/  /* unknown code: use original opcode   */
         }
 
-        /*if (!(isopcod(csound, str))) {*/
-        /* if opcode is not found: report syntax error     */
-        /*synterr(csound, Str("failed to find %s, input arg illegal type"), str);*/
-        /*ST(nxtest) = 100;*/                       /* step way over this line */
-        /*goto tstnxt;*/                            /* & go to next            */
-        /*}
+   /*if (!(isopcod(csound, str))) {*/
+   /* if opcode is not found: report syntax error     */
+   /*synterr(csound, Str("failed to find %s, input arg illegal type"), str);*/
+   /*ST(nxtest) = 100;*/                       /* step way over this line */
+   /*goto tstnxt;*/                            /* & go to next            */
+   /*}
           ST(linopnum) = ST(opnum);
           ST(linopcod) = ST(opcod);
           csound->DebugMsg(csound, Str("modified opcod: %s"), ST(opcod));*/
diff --git a/Engine/entry1.c b/Engine/entry1.c
index 9ea7b79..6bdc39b 100644
--- a/Engine/entry1.c
+++ b/Engine/entry1.c
@@ -22,6 +22,7 @@
 */
 
 #include "entry1.h"             /*                      ENTRY1.C        */
+#include "interlocks.h"
 
 /* thread vals, where isub=1, ksub=2, asub=4:
                 0 =     1  OR   2  (B out only)
@@ -121,20 +122,20 @@ OENTRY opcodlst_1[] = {
 { "pchmidib",0xffff                                                     },
 { "poisson", 0xffff                                                     },
 { "pow",     0xffff,                                                    },
-{ "tableng", 0xffff,                                                    },
+{ "tableng", 0xffff,  TR                                                },
 { "taninv2", 0xffff                                                     },
 { "timek",   0xffff,                                                    },
 { "times",   0xffff,                                                    },
 { "trirand", 0xffff                                                     },
 { "unirand", 0xffff,                                                    },
 { "weibull", 0xffff                                                     },
-{ "oscil",   0xfffe                                                     },
-{ "oscil3",  0xfffe                                                     },
-{ "oscili",  0xfffe                                                     },
+{ "oscil",   0xfffe, TW                                                 },
+{ "oscil3",  0xfffe, TW                                                 },
+{ "oscili",  0xfffe, TW                                                 },
 { "peak",    0xfffd                                                     },
 { "rtclock", 0xffff                                                     },
-{ "tablew",  0xfffe                                                     },
-{ "tablewkt",0xfffe                                                     },
+{ "tablew",  0xfffe, TW                                                 },
+{ "tablewkt",0xfffe, TW                                                 },
 { "ihold",  S(LINK),    1,      "",     "",     ihold                   },
 { "turnoff",S(LINK),    2,      "",     "",     NULL,   turnoff         },
 { "=.r",    S(ASSIGN),  1,      "r",    "i",    rassign                 },
@@ -146,7 +147,7 @@ OENTRY opcodlst_1[] = {
 { "init.k", S(ASSIGNM), 1,      "zzzzzzzzzzzzzzzzzzzzzzzz", "m", minit  },
 { "init.a", S(ASSIGNM), 1,      "mmmmmmmmmmmmmmmmmmmmmmmm", "m", mainit },
 { "init.t", S(ASSIGNM), 1,      "t",    "io",                    tinit  },
-{ "tabref", S(TABREF),  3,      "k",    "tk",   tabref_check, tabref, NULL },
+{ "##tabref", S(TABREF),3,      "k",    "tk",   tabref_check, tabref, NULL },
 { ">",      S(RELAT),   0,      "B",    "kk",   gt,     gt              },
 { ">=",     S(RELAT),   0,      "B",    "kk",   ge,     ge              },
 { "<",      S(RELAT),   0,      "B",    "kk",   lt,     lt              },
@@ -329,13 +330,13 @@ OENTRY opcodlst_1[] = {
 { "expsegr",S(EXPSEG),  7,      "s",    "iin",  xsgrset,kxpsegr,expsegr },
 { "linen",  S(LINEN),   7,      "s",    "xiii", lnnset, klinen, linen   },
 { "linenr", S(LINENR),  7,      "s",    "xiii", lnrset, klinenr,linenr  },
-{ "envlpx", S(ENVLPX),  7,      "s","xiiiiiio", evxset, knvlpx, envlpx  },
-{ "envlpxr", S(ENVLPR), 7,      "s","xiiiiioo", evrset, knvlpxr,envlpxr },
+{ "envlpx", S(ENVLPX),  TR|7,   "s","xiiiiiio", evxset, knvlpx, envlpx  },
+{ "envlpxr", S(ENVLPR), TR|7,   "s","xiiiiioo", evrset, knvlpxr,envlpxr },
 { "phasor", S(PHSOR),   7,      "s",    "xo",   phsset, kphsor, phsor   },
-{ "ephasor", S(EPHSOR),   5,    "ss",    "xko",  ephsset, NULL, ephsor   },
-{ "table",  0xffff                                                      },
-{ "tablei", 0xffff                                                      },
-{ "table3", 0xffff                                                      },
+{ "ephasor", S(EPHSOR),  5,    "ss",    "xko",  ephsset, NULL, ephsor   },
+{ "table",  0xffff, TR                                                  },
+{ "tablei", 0xffff, TR                                                  },
+{ "table3", 0xffff, TR                                                  },
 { "table.i",  S(TABLE), 1,      "i",    "iiooo",itable                  },
 { "table.k",  S(TABLE), 3,      "k",    "xiooo",tblset, ktable          },
 { "table.a",  S(TABLE), 5,      "a",    "xiooo",tblset, NULL, tablefn   },
@@ -345,9 +346,9 @@ OENTRY opcodlst_1[] = {
 { "table3.i", S(TABLE), 1,      "i",    "iiooo",itabl3                  },
 { "table3.k", S(TABLE), 3,      "k",    "xiooo",tblset, ktabl3          },
 { "table3.a", S(TABLE), 5,      "a",    "xiooo",tblset, NULL, tabl3     },
-{ "oscil1", S(OSCIL1),  3,      "k",    "ikii", ko1set, kosc1           },
-{ "oscil1i",S(OSCIL1),  3,      "k",    "ikii", ko1set, kosc1i          },
-{ "osciln", S(OSCILN),  5,      "a",    "kiii", oscnset,NULL,   osciln  },
+{ "oscil1", S(OSCIL1),  TR|3,      "k",    "ikii", ko1set, kosc1           },
+{ "oscil1i",S(OSCIL1),  TR|3,      "k",    "ikii", ko1set, kosc1i          },
+{ "osciln", S(OSCILN),  TR|5,      "a",    "kiii", oscnset,NULL,   osciln  },
 { "oscil.kk",S(OSC),    7,      "s",    "kkio", oscset, koscil, osckk   },
 { "oscil.ka",S(OSC),    5,      "a",    "kaio", oscset, NULL,   oscka   },
 { "oscil.ak",S(OSC),    5,      "a",    "akio", oscset, NULL,   oscak   },
@@ -360,14 +361,14 @@ OENTRY opcodlst_1[] = {
 { "oscil3.ka",S(OSC),   5,      "a",    "kaio", oscset, NULL,   oscka3  },
 { "oscil3.ak",S(OSC),   5,      "a",    "akio", oscset, NULL,   oscak3  },
 { "oscil3.aa",S(OSC),   5,      "a",    "aaio", oscset, NULL,   oscaa3  },
-{ "foscil", S(FOSC),    5,      "a",  "xkxxkio",foscset,NULL,   foscil  },
-{ "foscili",S(FOSC),    5,      "a",  "xkxxkio",foscset,NULL,   foscili },
-{ "loscil", S(LOSC),    5,      "mm","xkiojoojoo",losset,NULL, loscil   },
-{ "loscil3", S(LOSC),   5,      "mm","xkiojoojoo",losset,NULL, loscil3  },
+{ "foscil", S(FOSC),    TR|5,      "a",  "xkxxkio",foscset,NULL,   foscil  },
+{ "foscili",S(FOSC),    TR|5,      "a",  "xkxxkio",foscset,NULL,   foscili },
+{ "loscil", S(LOSC),    TR|5,      "mm","xkiojoojoo",losset,NULL, loscil   },
+{ "loscil3", S(LOSC),   TR|5,      "mm","xkiojoojoo",losset,NULL, loscil3  },
 { "adsyn",  S(ADSYN),   5,      "a",    "kkkTo", adset, NULL,   adsyn   },
-{ "buzz",   S(BUZZ),    5,      "a",  "xxkio",  bzzset, NULL,   buzz    },
-{ "gbuzz",  S(GBUZZ),   5,      "a",  "xxkkkio",gbzset, NULL,   gbuzz   },
-{ "pluck",  S(PLUCK),   5,      "a",  "kkiiioo",plukset,NULL,   pluck   },
+{ "buzz",   S(BUZZ),    TR|5,      "a",  "xxkio",  bzzset, NULL,   buzz    },
+{ "gbuzz",  S(GBUZZ),   TR|5,      "a",  "xxkkkio",gbzset, NULL,   gbuzz   },
+{ "pluck",  S(PLUCK),   TR|5,      "a",  "kkiiioo",plukset,NULL,   pluck   },
 { "rand",   S(RAND),    7,      "s",    "xvoo", rndset, krand,  arand   },
 { "randh",  S(RANDH),   7,      "s",    "xxvoo", rhset, krandh, randh   },
 { "randi",  S(RANDI),   7,      "s",    "xxvoo", riset, krandi, randi   },
@@ -391,20 +392,28 @@ OENTRY opcodlst_1[] = {
 { "pan",    S(PAN),   5, "aaaa", "akkioo",(SUBR)panset,NULL, (SUBR)pan  },
 { "soundin",S(SOUNDIN_),5,"mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm","Toooo",
                                                 sndinset, NULL, soundin   },
-{ "soundout",S(SNDOUT), 5,      "",     "aTo",  sndo1set, NULL, soundout  },
-{ "soundouts",S(SNDOUTS),5,     "",     "aaTo", sndo1set, NULL, soundouts },
+{ "soundout",S(SNDOUT), DP|5,   "",     "aTo",  sndo1set, NULL, soundout  },
+{ "soundouts",S(SNDOUTS),DP|5,  "",     "aaTo", sndo1set, NULL, soundouts },
 { "in",     S(INM),     4,      "a",    "",     NULL,   NULL,   in      },
 { "ins",    S(INS),     4,      "aa",   "",     NULL,   NULL,   ins     },
 { "inq",    S(INQ),     4,      "aaaa", "",     NULL,   NULL,   inq     },
   /* Note that there is code in rdorch.c that assumes that opcodes starting
      with the charcters out followed by a s, q, h, o or x are in this group
      ***BEWARE***
+     CODE REMOVED 2011-Dec-14
    */
-{ "out",    S(OUTM),    4,      "",     "a",    NULL,   NULL,   out     },
-{ "outs",   S(OUTS),    4,      "",     "aa",   NULL,   NULL,   outs    },
+{ "out",    S(OUTX),     4,      "",     "y",    NULL,   NULL,   outall },
+{ "outs",   S(OUTX),     4,      "",     "y",    NULL,   NULL,   outall },
+{ "outq",   S(OUTX),     4,      "",     "y",    NULL,   NULL,   outall },
+{ "outh",   S(OUTX),     4,      "",     "y",    NULL,   NULL,   outall },
+{ "outo",   S(OUTX),     4,      "",     "y",    NULL,   NULL,   outall },
+{ "outx",   S(OUTX),     4,      "",     "y",    NULL,   NULL,   outall },
+{ "out32",  S(OUTX),     4,      "",     "y",    NULL,   NULL,   outall },
+/* { "out",    S(OUTM),    4,      "",     "a",    NULL,   NULL,   out     }, */
+/* { "outs",   S(OUTS),    4,      "",     "aa",   NULL,   NULL,   outs    }, */
 { "outs1",  S(OUTM),    4,      "",     "a",    NULL,   NULL,   outs1   },
 { "outs2",  S(OUTM),    4,      "",     "a",    NULL,   NULL,   outs2   },
-{ "outq",   S(OUTQ),    4,      "",     "aaaa", NULL,   NULL,   outq    },
+/* { "outq",   S(OUTQ),    4,      "",     "aaaa", NULL,   NULL,   outq    }, */
 { "outq1",  S(OUTM),    4,      "",     "a",    NULL,   NULL,   outq1   },
 { "outq2",  S(OUTM),    4,      "",     "a",    NULL,   NULL,   outq2   },
 { "outq3",  S(OUTM),    4,      "",     "a",    NULL,   NULL,   outq3   },
@@ -440,7 +449,7 @@ OENTRY opcodlst_1[] = {
 { "pow.i",    S(POW),   1,      "i",    "iip",  ipow,    NULL,  NULL    },
 { "pow.k",    S(POW),   2,      "k",    "kkp",  NULL,    ipow,  NULL    },
 { "pow.a",    S(POW),   4,      "a",    "akp",  NULL,    NULL,  apow    },
-{ "oscilx",   S(OSCILN),5,      "a",    "kiii", oscnset,NULL,   osciln  },
+{ "oscilx",   S(OSCILN),TR|5,   "a",    "kiii", oscnset,NULL,   osciln  },
 { "linrand.i",S(PRAND), 1,      "i",    "k",    iklinear, NULL, NULL    },
 { "linrand.k",S(PRAND), 2,      "k",    "k",    NULL, iklinear, NULL    },
 { "linrand.a",S(PRAND), 4,      "a",    "k",    NULL, NULL,     alinear },
@@ -475,9 +484,11 @@ OENTRY opcodlst_1[] = {
 { "unirand.i",S(PRAND), 1,     "i",     "k",    ikuniform, NULL,  NULL  },
 { "unirand.k",S(PRAND), 2,     "k",     "k",    NULL,    ikuniform, NULL},
 { "unirand.a",S(PRAND), 4,     "a",     "k",    NULL,    NULL, auniform },
-{ "diskin",S(SOUNDINEW),5,  "mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm", "Tkooooo",
+{ "diskin",S(SOUNDINEW),DP|5, "mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm", 
+                            "Tkooooo",
                             (SUBR) newsndinset, NULL, (SUBR) soundinew  },
-{ "diskin2",S(DISKIN2), 5,  "mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm", "Tkoooooo",
+{ "diskin2",S(DISKIN2), 5,  "mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm", 
+                            "Tkoooooo",
                             (SUBR) diskin2_init, (SUBR) NULL,
                             (SUBR) diskin2_perf                         },
 { "noteon", S(OUT_ON),  1,      "",     "iii",  iout_on, NULL,   NULL   },
@@ -521,42 +532,46 @@ OENTRY opcodlst_1[] = {
 { "filevalid", S(FILEVALID), 1,  "i",   "T",    filevalid, NULL, NULL      },
 /*  { "nlalp", S(NLALP),     5,     "a",    "akkoo", nlalp_set, NULL, nlalp }, */
 /* Robin Whittle */
-{ "tableiw",  S(TABLEW),1,     "",      "iiiooo", (SUBR)itablew, NULL, NULL},
-{ "tablew.kk", S(TABLEW),3,    "", "kkiooo",(SUBR)tblsetw,(SUBR)ktablew, NULL},
-{ "tablew.aa", S(TABLEW),5,    "", "aaiooo",(SUBR)tblsetw, NULL, (SUBR)tablew},
-{ "tablewkt.kk", S(TABLEW),3, "",  "kkkooo",(SUBR)tblsetwkt,(SUBR)ktablewkt,NULL},
-{ "tablewkt.aa", S(TABLEW),5, "",  "aakooo",(SUBR)tblsetwkt,NULL,(SUBR)tablewkt},
+{ "tableiw",  S(TABLEW),TW|1,     "",      "iiiooo", (SUBR)itablew, NULL, NULL},
+{ "tablew.kk", S(TABLEW),TW|3,    "", "kkiooo",(SUBR)tblsetw,(SUBR)ktablew, NULL},
+{ "tablew.aa", S(TABLEW),TW|5,    "", "aaiooo",(SUBR)tblsetw, NULL, (SUBR)tablew},
+{ "tablewkt.kk", S(TABLEW),TW|3, "",  "kkkooo",
+                          (SUBR)tblsetwkt,(SUBR)ktablewkt,NULL},
+{ "tablewkt.aa", S(TABLEW),TW|5, "",  "aakooo",
+                          (SUBR)tblsetwkt,NULL,(SUBR)tablewkt},
 { "tableng.i", S(TABLENG),1,  "i",     "i",    (SUBR)itableng, NULL,  NULL},
 { "tableng.k",  S(TABLENG),2, "k",     "k",    NULL,   (SUBR)tableng, NULL},
-{ "tableigpw",S(TABLENG),1,   "",  "i",    (SUBR)itablegpw, NULL,  NULL},
+{ "tableigpw",S(TABLENG),TB|1,   "",  "i",    (SUBR)itablegpw, NULL,  NULL},
 { "tablegpw", S(TABLENG),2,   "",  "k",    NULL,   (SUBR)tablegpw, NULL},
-{ "tableimix",S(TABLEMIX),1,  "",  "iiiiiiiii", (SUBR)itablemix, NULL, NULL},
-{ "tablemix", S(TABLEMIX),2,  "",  "kkkkkkkkk",
+{ "tableimix",S(TABLEMIX),TB|1,  "",  "iiiiiiiii", (SUBR)itablemix, NULL, NULL},
+{ "tablemix", S(TABLEMIX),TB|2,  "",  "kkkkkkkkk",
                                    (SUBR)tablemixset, (SUBR)tablemix, NULL},
-{ "tableicopy",S(TABLECOPY),1, "", "ii",   (SUBR)itablecopy, NULL, NULL},
-{ "tablecopy", S(TABLECOPY),2, "", "kk",
+{ "tableicopy",S(TABLECOPY),TB|1, "", "ii",   (SUBR)itablecopy, NULL, NULL},
+{ "tablecopy", S(TABLECOPY),TB|2, "", "kk",
                                       (SUBR)tablecopyset, (SUBR)tablecopy, NULL},
-{ "tablera", S(TABLERA),5,   "a",  "kkk",  (SUBR)tableraset, NULL, (SUBR)tablera},
-{ "tablewa", S(TABLEWA),5,   "k",  "kak",  (SUBR)tablewaset, NULL, (SUBR)tablewa},
-{ "tablekt",  S(TABLE), 7,     "s",  "xkooo",tblsetkt,  ktablekt, tablekt },
-{ "tableikt", S(TABLE), 7,     "s",  "xkooo",tblsetkt,  ktablikt, tablikt },
-{ "zakinit", S(ZAKINIT), 1,  "",   "ii",   (SUBR)zakinit, NULL,  NULL},
-{ "zir",    S(ZKR),     1,   "i",  "i",    (SUBR)zir,     NULL,  NULL},
-{ "zkr",    S(ZKR),     3,   "k",  "k",    (SUBR)zkset,   (SUBR)zkr,   NULL},
-{ "ziw",    S(ZKW),     1,   "",   "ii",   (SUBR)ziw,     NULL,  NULL},
-{ "zkw",    S(ZKW),     3,   "",   "kk",   (SUBR)zkset,   (SUBR)zkw,   NULL},
-{ "ziwm",   S(ZKWM),    1,   "",   "iip",  (SUBR)ziwm,    NULL,  NULL},
-{ "zkwm",   S(ZKWM),    3,   "",   "kkp",  (SUBR)zkset,   (SUBR)zkwm,  NULL},
-{ "zkmod",  S(ZKMOD),   2,   "k",  "kk",   NULL,    (SUBR)zkmod, NULL},
-{ "zkcl",   S(ZKCL),    3,   "",  "kk",   (SUBR)zkset,   (SUBR)zkcl,  NULL},
-{ "zar",    S(ZAR),     5,   "a", "k",    (SUBR)zaset,   NULL,  (SUBR)zar},
-{ "zarg",   S(ZARG),    5,   "a", "kk",   (SUBR)zaset,   NULL,  (SUBR)zarg},
-{ "zaw",    S(ZAW),     5,   "",  "ak",   (SUBR)zaset,   NULL,  (SUBR)zaw},
-{ "zawm",   S(ZAWM),    5,   "",  "akp",  (SUBR)zaset,   NULL,  (SUBR)zawm},
-{ "zamod",  S(ZAMOD),   4,   "a", "ak",   NULL,    NULL,  (SUBR)zamod},
-{ "zacl",   S(ZACL),    5,   "",  "kk",   (SUBR)zaset,   NULL,  (SUBR)zacl},
-{ "inz",    S(IOZ),     4,   "",   "k",    (SUBR)zaset,  NULL,   (SUBR)inz  },
-{ "outz",   S(IOZ),     4,   "",   "k",    (SUBR)zaset,  NULL,   (SUBR)outz },
+{ "tablera", S(TABLERA),TR|5,   "a",  "kkk",  
+                                      (SUBR)tableraset, NULL, (SUBR)tablera},
+{ "tablewa", S(TABLEWA),TW|5,   "k",  "kak",
+                                      (SUBR)tablewaset, NULL, (SUBR)tablewa},
+{ "tablekt",  S(TABLE), TR|7,     "s",  "xkooo",tblsetkt,  ktablekt, tablekt },
+{ "tableikt", S(TABLE), TR|7,     "s",  "xkooo",tblsetkt,  ktablikt, tablikt },
+{ "zakinit", S(ZAKINIT), ZB|1,  "",   "ii",   (SUBR)zakinit, NULL,  NULL},
+{ "zir",    S(ZKR),     ZR|1,   "i",  "i",    (SUBR)zir,     NULL,  NULL},
+{ "zkr",    S(ZKR),     ZR|3,   "k",  "k",    (SUBR)zkset,   (SUBR)zkr,   NULL},
+{ "ziw",    S(ZKW),     ZW|1,   "",   "ii",   (SUBR)ziw,     NULL,  NULL},
+{ "zkw",    S(ZKW),     ZW|3,   "",   "kk",   (SUBR)zkset,   (SUBR)zkw,   NULL},
+{ "ziwm",   S(ZKWM),    ZB|1,   "",   "iip",  (SUBR)ziwm,    NULL,  NULL},
+{ "zkwm",   S(ZKWM),    ZB|3,   "",   "kkp",  (SUBR)zkset,   (SUBR)zkwm,  NULL},
+{ "zkmod",  S(ZKMOD),   ZB|2,   "k",  "kk",   NULL,    (SUBR)zkmod, NULL},
+{ "zkcl",   S(ZKCL),    ZW|3,   "",  "kk",   (SUBR)zkset,   (SUBR)zkcl,  NULL},
+{ "zar",    S(ZAR),     ZR|5,   "a", "k",    (SUBR)zaset,   NULL,  (SUBR)zar},
+{ "zarg",   S(ZARG),    ZB|5,   "a", "kk",   (SUBR)zaset,   NULL,  (SUBR)zarg},
+{ "zaw",    S(ZAW),     ZW|5,   "",  "ak",   (SUBR)zaset,   NULL,  (SUBR)zaw},
+{ "zawm",   S(ZAWM),    ZB|5,   "",  "akp",  (SUBR)zaset,   NULL,  (SUBR)zawm},
+{ "zamod",  S(ZAMOD),   ZB|4,   "a", "ak",   NULL,    NULL,  (SUBR)zamod},
+{ "zacl",   S(ZACL),    ZW|5,   "",  "kk",   (SUBR)zaset,   NULL,  (SUBR)zacl},
+{ "inz",    S(IOZ),     ZW|4,   "",   "k",    (SUBR)zaset,  NULL,   (SUBR)inz  },
+{ "outz",   S(IOZ),     ZR|4,   "",   "k",    (SUBR)zaset,  NULL,   (SUBR)outz },
 { "timek.i", S(RDTIME), 1,   "i",  "",     (SUBR)timek,   NULL,  NULL },
 { "times.i", S(RDTIME), 1,   "i",  "",     (SUBR)timesr,  NULL,  NULL },
 { "timek.k",  S(RDTIME), 2,  "k",  "",     NULL,    (SUBR)timek, NULL },
@@ -592,18 +607,19 @@ OENTRY opcodlst_1[] = {
   /* Note that there is code in rdorch.c that assumes that opcodes starting
      with the charcters out followed by a s, q, h, o or x are in this group
      ***BEWARE***
+     CODE REMOVED 2011-Dec-14
    */
-{ "outh",   S(OUTH),    4,      "",     "aaaaaa",NULL,  NULL,   outh    },
-{ "outo",   S(OUTO),    4,      "",     "aaaaaaaa",NULL,NULL,   outo    },
-{ "outx",   S(OUTX),    4,      "",     "aaaaaaaaaaaaaaaa",NULL,NULL, outx },
-{ "out32",  S(OUTX),    4,      "",     "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-                                                NULL,   NULL,   outX    },
+/* { "outh",   S(OUTH),    4,      "",     "aaaaaa",NULL,  NULL,   outh    }, */
+/* { "outo",   S(OUTO),    4,      "",     "aaaaaaaa",NULL,NULL,   outo    }, */
+/* { "outx",   S(OUTX),    4,      "",     "aaaaaaaaaaaaaaaa",NULL,NULL, outx }, */
+/* { "out32",  S(OUTX),    4,      "",     "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", */
+                                                /* NULL,   NULL,   outX    }, */
 { "outch",  S(OUTCH),   4,      "",     "Z",    NULL,   NULL,   outch   },
 { "outc",   S(OUTX),    4,      "",     "y",    NULL,   NULL,   outall  },
-{ "cpsxpch", S(XENH),   1,      "i",    "iiii", cpsxpch, NULL,  NULL    },
-{ "cps2pch", S(XENH),   1,      "i",    "ii",   cps2pch, NULL,  NULL    },
-{ "cpstun", S(CPSTUN),  2,      "k",    "kkk",   NULL,   cpstun         },
-{ "cpstuni",S(CPSTUNI), 1,      "i",    "ii",   cpstun_i,               },
+{ "cpsxpch", S(XENH),TR|1,      "i",    "iiii", cpsxpch, NULL,  NULL    },
+{ "cps2pch", S(XENH),TR|1,      "i",    "ii",   cps2pch, NULL,  NULL    },
+{ "cpstun", S(CPSTUN),  TR|2,      "k",    "kkk",   NULL,   cpstun         },
+{ "cpstuni",S(CPSTUNI), TR|1,      "i",    "ii",   cpstun_i,               },
 { "cpstmid", S(CPSTABLE), 1, "i", "i",    (SUBR)cpstmid                    },
 { "adsr", S(LINSEG),     7,     "s",    "iiiio",adsrset,klnseg, linseg     },
 { "madsr", S(LINSEG),    7,     "s",    "iiiioj", madsrset,klnsegr, linsegr },
@@ -617,11 +633,16 @@ OENTRY opcodlst_1[] = {
 { "event", S(LINEVENT),  2,     "",     "SUz",  NULL, eventOpcode, NULL   },
 { "event_i", S(LINEVENT),1,     "",     "STm",  eventOpcodeI, NULL, NULL  },
 { "lfo", S(LFO),         7,     "s",    "kko",  lfoset,   lfok,   lfoa    },
-{ "oscils",   S(OSCILS), 5,     "a", "iiio",     (SUBR)oscils_set, NULL, (SUBR)oscils       },
-{ "lphasor",  S(LPHASOR),5,     "a", "xooooooo" ,(SUBR)lphasor_set, NULL, (SUBR)lphasor     },
-{ "tablexkt", S(TABLEXKT),5,    "a", "xkkiooo",  (SUBR)tablexkt_set, NULL, (SUBR)tablexkt   },
-{ "reverb2",  S(NREV2),  5,     "a",    "akkoojoj", (SUBR)reverbx_set,NULL,(SUBR)reverbx    },
-{ "nreverb",  S(NREV2),  5,     "a",    "akkoojoj", (SUBR)reverbx_set,NULL,(SUBR) reverbx    },
+{ "oscils",   S(OSCILS), 5,     "a", "iiio",     
+                                         (SUBR)oscils_set, NULL, (SUBR)oscils },
+{ "lphasor",  S(LPHASOR),5,     "a", "xooooooo" ,
+                                         (SUBR)lphasor_set, NULL, (SUBR)lphasor },
+{ "tablexkt", S(TABLEXKT),TR|5,    "a", "xkkiooo",
+                                         (SUBR)tablexkt_set, NULL, (SUBR)tablexkt },
+{ "reverb2",  S(NREV2),  5,     "a",    "akkoojoj",
+                                         (SUBR)reverbx_set,NULL,(SUBR)reverbx },
+{ "nreverb",  S(NREV2),  5,     "a",    "akkoojoj", 
+                                         (SUBR)reverbx_set,NULL,(SUBR) reverbx },
 { "=.f",      S(FASSIGN), 2,    "f",   "f",      NULL, fassign, NULL    },
 { "init.f",   S(FASSIGN), 2,    "f",   "f",      fassign, NULL, NULL    },
 { "pvsanal",  S(PVSANAL), 5,    "f",   "aiiiioo",  pvsanalset, NULL, pvsanal  },
@@ -630,8 +651,8 @@ OENTRY opcodlst_1[] = {
 { "pvscross", S(PVSCROSS),3,    "f",   "ffkk",   pvscrosset, pvscross, NULL },
 { "pvsfread", S(PVSFREAD),3,    "f",   "kTo",    pvsfreadset, pvsfread, NULL  },
 { "pvsmaska", S(PVSMASKA),3,    "f",   "fik",    pvsmaskaset, pvsmaska, NULL  },
-{ "pvsftw",   S(PVSFTW),  3,    "k",   "fio",    pvsftwset, pvsftw, NULL  },
-{ "pvsftr",   S(PVSFTR),  3,    "",    "fio",    pvsftrset, pvsftr, NULL  },
+{ "pvsftw",   S(PVSFTW),  TW|3,    "k",   "fio",    pvsftwset, pvsftw, NULL  },
+{ "pvsftr",   S(PVSFTR),  TR|3,    "",    "fio",    pvsftrset, pvsftr, NULL  },
 { "pvsinfo",  S(PVSINFO), 1,    "iiii","f",      pvsinfo, NULL, NULL    },
 { "octave",   0xffff                                                    },
 { "semitone", 0xffff                                                    },
@@ -671,15 +692,20 @@ OENTRY opcodlst_1[] = {
                    3, "", "xoh",midichannelaftertouch, midichannelaftertouch },
 { "midipitchbend", S(MIDIPITCHBEND),3, "", "xoh", midipitchbend, midipitchbend },
 { "mididefault", S(MIDIDEFAULT), 3, "", "xx",   mididefault, mididefault },
-{ "invalue",   0xFFFF,   0,     NULL,   NULL,   NULL, NULL, NULL            },
+{ "invalue",   0xFFFF,   CR,    NULL,   NULL,   NULL, NULL, NULL            },
 { "invalue.k", S(INVAL), 3,     "k",    "T",    invalset, kinval, NULL      },
 { "invalue.S", S(INVAL), 3,     "S",    "T",    invalset_S, kinval_S, NULL  },
-{ "outvalue", S(OUTVAL), 3,     "",     "TU",   outvalset, koutval, NULL    },
+{ "outvalue", S(OUTVAL), CW|3,     "",     "TU",   outvalset, koutval, NULL    },
 /* IV - Oct 20 2002 */
 { "subinstr", S(SUBINST), 5, "mmmmmmmm", "Tm",  subinstrset, NULL, subinstr },
 { "subinstrinit", S(SUBINST), 1, "",    "Tm",   subinstrset, NULL, NULL  },
 { "nstrnum", S(NSTRNUM), 1,     "i",    "T",    nstrnumset, NULL, NULL   },
-{ "turnoff2",S(TURNOFF2),2,     "",     "kkk",  NULL, turnoff2, NULL     },
+{ "turnoff2",   0xFFFB,   CW,    NULL,   NULL,   NULL, NULL, NULL  },
+{ "turnoff2.S",S(TURNOFF2),2,     "",     "Skk",  NULL, turnoff2S, NULL     },
+{ "turnoff2.c",S(TURNOFF2),2,     "",     "ikk",  NULL, turnoff2k, NULL     },
+{ "turnoff2.k",S(TURNOFF2),2,     "",     "kkk",  NULL, turnoff2k, NULL     },
+{ "turnoff2.i",S(TURNOFF2),2,     "",     "ikk",  NULL, turnoff2k, NULL     },
+{ "turnoff2.r",S(TURNOFF2),2,     "",     "ikk",  NULL, turnoff2k, NULL     },
 { "cngoto", S(CGOTO),   3,      "",     "Bl",   ingoto, kngoto, NULL     },
 { "cogoto", S(CGOTO),   3,      "",     "bl",   iingoto, kingoto, NULL   },
 /* IV - Sep 8 2002 - added entries for user defined opcodes, xin, xout */
@@ -708,7 +734,8 @@ OENTRY opcodlst_1[] = {
 { "a.k",    S(INTERP),  5,  "a", "k",    (SUBR)a_k_set,NULL,   (SUBR)interp  },
 { "integ", S(INDIFF), 7, "s", "xo", (SUBR)indfset,(SUBR)kntegrate,(SUBR)integrate},
 { "diff",   S(INDIFF),  7,  "s", "xo",   (SUBR)indfset,(SUBR)kdiff, (SUBR)diff },
-{ "samphold",S(SAMPHOLD),7, "s", "xxoo", (SUBR)samphset,(SUBR)ksmphold,(SUBR)samphold},
+{ "samphold",S(SAMPHOLD),7, "s", "xxoo", 
+                                 (SUBR)samphset,(SUBR)ksmphold,(SUBR)samphold},
 { "delay",  S(DELAY),   5,  "a", "aio",  (SUBR)delset, NULL,   (SUBR)delay   },
 { "delayr", S(DELAYR),  5,  "aX","io",   (SUBR)delrset,NULL,   (SUBR)delayr  },
 { "delayw", S(DELAYW),  5,  "",  "a",    (SUBR)delwset,NULL,   (SUBR)delayw  },
@@ -720,15 +747,18 @@ OENTRY opcodlst_1[] = {
 { "reverb", S(REVERB),  5,  "a", "ako",  (SUBR)rvbset, NULL,   (SUBR)reverb  },
 { "vdelay",   S(VDEL),  5,  "a", "axio", (SUBR)vdelset, NULL,  (SUBR)vdelay  },
 { "vdelay3",  S(VDEL),  5,  "a", "axio", (SUBR)vdelset, NULL,  (SUBR)vdelay3 },
-{ "vdelayxwq",S(VDELXQ),5,  "aaaa", "aaaaaiio", (SUBR)vdelxqset, NULL, (SUBR)vdelayxwq},
+{ "vdelayxwq",S(VDELXQ),5,  "aaaa", "aaaaaiio", 
+                                         (SUBR)vdelxqset, NULL, (SUBR)vdelayxwq},
 { "vdelayxws",S(VDELXS),5,  "aa", "aaaiio", (SUBR)vdelxsset, NULL, (SUBR)vdelayxws},
 { "vdelayxw", S(VDELX), 5,  "a",  "aaiio", (SUBR)vdelxset, NULL, (SUBR)vdelayxw},
-{ "vdelayxq", S(VDELXQ),5,  "aaaa", "aaaaaiio", (SUBR)vdelxqset, NULL, (SUBR)vdelayxq},
+{ "vdelayxq", S(VDELXQ),5,  "aaaa", "aaaaaiio",
+                                         (SUBR)vdelxqset, NULL, (SUBR)vdelayxq},
 { "vdelayxs", S(VDELXS),5,  "aa", "aaaiio", (SUBR)vdelxsset, NULL, (SUBR)vdelayxs},
 { "vdelayx",  S(VDELX), 5,  "a",  "aaiio", (SUBR)vdelxset, NULL, (SUBR)vdelayx},
 { "deltapx",  S(DELTAPX),5, "a",  "aio",  (SUBR)tapxset, NULL,  (SUBR)deltapx },
 { "deltapxw", S(DELTAPX),5,  "",  "aaio", (SUBR)tapxset, NULL, (SUBR)deltapxw },
-{ "multitap", S(MDEL),  5,   "a", "am",   (SUBR)multitap_set,NULL,(SUBR)multitap_play},
+{ "multitap", S(MDEL),  5,   "a", "am",
+                                   (SUBR)multitap_set,NULL,(SUBR)multitap_play},
 { "comb",   S(COMB),    5,  "a",  "akioo", (SUBR)cmbset,NULL,   (SUBR)comb    },
 { "alpass", S(COMB),    5,  "a",  "akioo", (SUBR)cmbset,NULL,   (SUBR)alpass  },
 {  "strset",   S(STRSET_OP),   1,  "",     "iS",
@@ -807,8 +837,7 @@ OENTRY opcodlst_1[] = {
 { "loop_le.k", S(LOOP_OPS),  2,  "", "kkkl", NULL, (SUBR) loop_le_p, NULL  },
 { "loop_gt.k", S(LOOP_OPS),  2,  "", "kkkl", NULL, (SUBR) loop_g_p, NULL   },
 { "loop_ge.k", S(LOOP_OPS),  2,  "", "kkkl", NULL, (SUBR) loop_ge_p, NULL  },
-{ "chnget",      0xFFFF,              0,      NULL,           NULL,
-   (SUBR) NULL, (SUBR) NULL, (SUBR) NULL                               },
+{ "chnget",      0xFFFF,    CR                                             },
 { "chnget.i",    S(CHNGET),           1,      "i",            "S",
    (SUBR) chnget_opcode_init_i, (SUBR) NULL, (SUBR) NULL               },
 { "chnget.k",    S(CHNGET),           3,      "k",            "S",
@@ -817,8 +846,7 @@ OENTRY opcodlst_1[] = {
    (SUBR) chnget_opcode_init_a, (SUBR) NULL, (SUBR) notinit_opcode_stub },
 { "chnget.S",    S(CHNGET),           1,      "S",            "S",
    (SUBR) chnget_opcode_init_S, (SUBR) NULL, (SUBR) NULL               },
-{ "chnset",      0xFFFB,              0,      NULL,           NULL,
-   (SUBR) NULL, (SUBR) NULL, (SUBR) NULL                               },
+{ "chnset",      0xFFFB,              CW                               },
 { "chnset.i",    S(CHNGET),           1,      "",             "iS",
    (SUBR) chnset_opcode_init_i, (SUBR) NULL, (SUBR) NULL               },
 { "chnset.r",    S(CHNGET),           1,      "",             "iS",
@@ -831,15 +859,15 @@ OENTRY opcodlst_1[] = {
    (SUBR) chnset_opcode_init_a, (SUBR) NULL, (SUBR) notinit_opcode_stub },
 { "chnset.S",    S(CHNGET),           1,      "",             "SS",
    (SUBR) chnset_opcode_init_S, (SUBR) NULL, (SUBR) NULL               },
-{ "chnmix",      S(CHNGET),           5,      "",             "aS",
+{ "chnmix",      S(CHNGET),           CB|5,      "",             "aS",
    (SUBR) chnmix_opcode_init, (SUBR) NULL, (SUBR) notinit_opcode_stub  },
-{ "chnclear",    S(CHNCLEAR),         5,      "",             "S",
+{ "chnclear",    S(CHNCLEAR),         CW|5,      "",             "S",
    (SUBR) chnclear_opcode_init, (SUBR) NULL, (SUBR) notinit_opcode_stub },
-{ "chn_k",       S(CHN_OPCODE_K),     1,      "",             "Sioooo",
+{ "chn_k",       S(CHN_OPCODE_K),     CW|1,      "",             "Sioooo",
    (SUBR) chn_k_opcode_init, (SUBR) NULL, (SUBR) NULL                  },
-{ "chn_a",       S(CHN_OPCODE),       1,      "",             "Si",
+{ "chn_a",       S(CHN_OPCODE),       CW|1,      "",             "Si",
    (SUBR) chn_a_opcode_init, (SUBR) NULL, (SUBR) NULL                  },
-{ "chn_S",       S(CHN_OPCODE),       1,      "",             "Si",
+{ "chn_S",       S(CHN_OPCODE),       CW|1,      "",             "Si",
    (SUBR) chn_S_opcode_init, (SUBR) NULL, (SUBR) NULL                  },
 { "chnexport",   0xFFFF,              0,      NULL,           NULL,
    (SUBR) NULL, (SUBR) NULL, (SUBR) NULL                               },
@@ -851,13 +879,13 @@ OENTRY opcodlst_1[] = {
    (SUBR) chnexport_opcode_init, (SUBR) NULL, (SUBR) NULL              },
 { "chnexport.S", S(CHNEXPORT_OPCODE), 1,      "S",            "Si",
    (SUBR) chnexport_opcode_init, (SUBR) NULL, (SUBR) NULL              },
-{ "chnparams",   S(CHNPARAMS_OPCODE), 1,      "iiiiii",       "S",
+{ "chnparams",   S(CHNPARAMS_OPCODE), CR|1,      "iiiiii",       "S",
    (SUBR) chnparams_opcode_init, (SUBR) NULL, (SUBR) NULL              },
-{ "chnrecv",     S(CHNSEND),          3,      "",             "So",
+{ "chnrecv",     S(CHNSEND),          CR|3,      "",             "So",
    (SUBR) chnrecv_opcode_init, (SUBR) notinit_opcode_stub, (SUBR) NULL },
 { "chnsend",     S(CHNSEND),          3,      "",             "So",
    (SUBR) chnsend_opcode_init, (SUBR) notinit_opcode_stub, (SUBR) NULL },
-{ "chano",       0xFFFD,              0,      NULL,           NULL,
+{ "chano",       0xFFFD,               CW,      NULL,           NULL,
    (SUBR) NULL, (SUBR) NULL, (SUBR) NULL                               },
 { "chano.k",     S(ASSIGN),           2,      "",             "kk",
    (SUBR) NULL, (SUBR) chano_opcode_perf_k, (SUBR) NULL                },
@@ -865,7 +893,7 @@ OENTRY opcodlst_1[] = {
    (SUBR) NULL, (SUBR) NULL, (SUBR) chano_opcode_perf_a                },
 { "pvsout",     S(FCHAN),           2,      "",             "fk",
    (SUBR) NULL, (SUBR) pvsout_perf, (SUBR) NULL                        },
-{ "chani",       0xFFFF,              0,      NULL,           NULL,
+{ "chani",       0xFFFF,              CR,      NULL,           NULL,
    (SUBR) NULL, (SUBR) NULL, (SUBR) NULL                               },
 { "chani.k",     S(ASSIGN),           2,      "k",            "k",
    (SUBR) NULL, (SUBR) chani_opcode_perf_k, (SUBR) NULL                },
@@ -880,9 +908,12 @@ OENTRY opcodlst_1[] = {
 { "remove",      S(DELETEIN),         1,      "",             "T",
    (SUBR) delete_instr, (SUBR) NULL, (SUBR) NULL                       },
 #ifdef PARCS
-{ "##globallock",   S(GLOBAL_LOCK_UNLOCK), 3, "", "k", globallock,   globallock,   NULL},
-{ "##globalunlock", S(GLOBAL_LOCK_UNLOCK), 3, "", "k", globalunlock, globalunlock, NULL},
+{ "##globallock",   S(GLOBAL_LOCK_UNLOCK), 3, "", "k", 
+                    globallock,   globallock,   NULL},
+{ "##globalunlock", S(GLOBAL_LOCK_UNLOCK), 3, "", "k", 
+                    globalunlock, globalunlock, NULL},
 #endif
+{ "##error",S(ERRFN), 1,          "i",     "i",   error_fn, NULL,    NULL    },
 { "exprandi.i",S(PRANDI), 1,      "i",    "kxx",  iexprndi, NULL,    NULL    },
 { "exprandi.k",S(PRANDI), 3,      "k",    "kxx",  exprndiset, kexprndi, NULL },
 { "exprandi.a",S(PRANDI), 4,      "a",    "kxx",  exprndiset, NULL, aexprndi },
@@ -892,6 +923,8 @@ OENTRY opcodlst_1[] = {
 { "gaussi.i", S(PRANDI), 1,      "i",    "kxx",  igaussi, NULL,    NULL    },
 { "gaussi.k", S(PRANDI), 3,      "k",    "kxx",  gaussiset, kgaussi, NULL },
 { "gaussi.a", S(PRANDI), 4,      "a",    "kxx",  gaussiset, NULL, agaussi },
+{ "ftresizei", S(RESIZE), TB|1, "i", "ii", (SUBR) resize_table, NULL, NULL },
+{ "ftresize",  S(RESIZE), TB|2, "k", "kk", NULL, (SUBR) resize_table, NULL },
 /* terminate list */
 {  NULL, 0, 0, NULL, NULL, (SUBR) NULL, (SUBR) NULL, (SUBR) NULL       }
 };
diff --git a/Engine/envvar.c b/Engine/envvar.c
index f47cacc..8e70fba 100644
--- a/Engine/envvar.c
+++ b/Engine/envvar.c
@@ -637,7 +637,8 @@ int csoundIsNameJustFilename(const char *name)
  *  conform to the conventions for the current platform (begin with ':'
  *  on MacOS 9 and not begin with DIRSEP on others).
  */
-char* csoundConcatenatePaths(CSOUND* csound, const char *path1, const char *path2)
+char* csoundConcatenatePaths(CSOUND* csound, const char *path1,
+                             const char *path2)
 {
     char *result;
     const char *start2;
@@ -814,7 +815,7 @@ static FILE *csoundFindFile_Std(CSOUND *csound, char **fullName,
 {
     FILE  *f;
     char  *name, *name2, **searchPath;
-    int   len;
+    //int   len;
 
     *fullName = NULL;
     if ((name = csoundConvertPathname(csound, filename)) == NULL)
@@ -845,7 +846,7 @@ static FILE *csoundFindFile_Std(CSOUND *csound, char **fullName,
     if (envList != NULL && envList[0] != '\0' &&
         (searchPath = csoundGetSearchPathFromEnv((CSOUND*) csound, envList))
           != NULL) {
-      len = (int) strlen(name) + 1;
+      //len = (int) strlen(name) + 1;
       while (*searchPath != NULL) {
         name2 = csoundConcatenatePaths(csound, *searchPath, name);
         f = fopen(name2, mode);
@@ -876,7 +877,7 @@ static int csoundFindFile_Fd(CSOUND *csound, char **fullName,
                              const char *envList)
 {
     char  *name, *name2, **searchPath;
-    int   len, fd;
+    int   fd;
 
     *fullName = NULL;
     if ((name = csoundConvertPathname(csound, filename)) == NULL)
@@ -907,7 +908,7 @@ static int csoundFindFile_Fd(CSOUND *csound, char **fullName,
     if (envList != NULL && envList[0] != '\0' &&
         (searchPath = csoundGetSearchPathFromEnv((CSOUND*) csound, envList))
           != NULL) {
-      len = (int) strlen(name) + 1;
+      //len = (int) strlen(name) + 1;
       while (*searchPath != NULL) {
         name2 = csoundConcatenatePaths(csound, *searchPath, name);
         if (!write_mode)
@@ -1062,7 +1063,7 @@ void *csoundFileOpen(CSOUND *csound, void *fd, int type,
  * used as metadata to be passed to the host application's FileOpenCallback.
  *
  * int csFileType:
- *   A value from the enumeration CSOUND_FILETYPES (see CsoundCore.h)
+ *   A value from the enumeration CSOUND_FILETYPES (see soundCore.h)
  * int isTemporary:
  *   1 if this file will be deleted when Csound is finished.
  *   Otherwise, 0.
@@ -1191,7 +1192,8 @@ void *csoundFileOpenWithType(CSOUND *csound, void *fd, int type,
                       (type == CSFILE_STD && ((char*)param)[0] == 'w'));
       if (csFileType == CSFTYPE_UNKNOWN_AUDIO && type == CSFILE_SND_R)
         csFileType = sftype2csfiletype(((SF_INFO*)param)->format);
-      csound->FileOpenCallback_(csound, p->fullName, csFileType, writing, isTemporary);
+      csound->FileOpenCallback_(csound, p->fullName, csFileType,
+                                writing, isTemporary);
     }
     /* return with opaque file handle */
     return (void*) p;
diff --git a/Engine/fgens.c b/Engine/fgens.c
index 99513fb..ac60537 100644
--- a/Engine/fgens.c
+++ b/Engine/fgens.c
@@ -61,11 +61,7 @@ static int gn1314(FGDATA *, FUNC *, MYFLT, MYFLT);
 static int gen51(FGDATA *, FUNC *), gen52(FGDATA *, FUNC *);
 static int gen53(FGDATA *, FUNC *);
 static int GENUL(FGDATA *, FUNC *);
-#ifdef INC_MP3
 static int gen49(FGDATA *, FUNC *);
-#else
-#define gen49 GENUL
-#endif
 
 static const GEN or_sub[GENMAX + 1] = {
     GENUL,
@@ -194,8 +190,8 @@ int hfgens(CSOUND *csound, FUNC **ftpp, const EVTBLK *evtblkp, int mode)
     if (!ff.flen) {
       /* defer alloc to gen01|gen23|gen28 */
       ff.guardreq = 1;
-      if (UNLIKELY(genum != 1 && genum != 23 && genum != 28)) {
-        return fterror(&ff, Str("deferred size for GENs 1, 23 or 28 only"));
+      if (UNLIKELY(genum != 1 && genum != 23 && genum != 28 && genum != 49)) {
+        return fterror(&ff, Str("deferred size for GENs 1, 23, 28 or 49 only"));
       }
       if (msg_enabled)
         csound->Message(csound, Str("ftable %d:\n"), ff.fno);
@@ -2081,13 +2077,13 @@ static int gen41(FGDATA *ff, FUNC *ftp)   /*gab d5*/
 {
     MYFLT   *fp = ftp->ftable, *pp = &ff->e.p[5];
     int     j, k, width;
-    int32    tot_prob = 0;
+    MYFLT    tot_prob = FL(0.0);
     int     nargs = ff->e.pcnt - 4;
 
     for (j=0; j < nargs; j+=2) {
       if (pp[j+1]<0)
         return fterror(ff, Str("Gen41: negative probability not allowed"));
-      tot_prob += (int32) pp[j+1];
+      tot_prob += pp[j+1];
     }
     for (j=0; j< nargs; j+=2) {
       width = (int) ((pp[j+1]/tot_prob) * ff->flen +.5);
@@ -2104,16 +2100,15 @@ static int gen42(FGDATA *ff, FUNC *ftp) /*gab d5*/
 {
     MYFLT   *fp = ftp->ftable, inc;
     int     j, k, width;
-    int32    tot_prob = 0;
+    MYFLT    tot_prob = FL(0.0);
     int     nargs = ff->e.pcnt - 4;
     CSOUND  *csound = ff->csound;
     int nsw = 1;
-    MYFLT   *valp = &ff->e.p[2];
+    MYFLT   *valp = &ff->e.p[5];
 
     if (ff->e.pcnt>=PMAX)
       csound->Warning(csound, Str("using extended arguments\n"));
     for (j=0; j < nargs; j+=3) {
-      tot_prob += (int32) *valp++;
       if (UNLIKELY(nsw && valp>=&ff->e.p[PMAX-1]))
         nsw =0, valp = &(ff->e.c.extra[1]);
       valp++;
@@ -2122,8 +2117,9 @@ static int gen42(FGDATA *ff, FUNC *ftp) /*gab d5*/
       valp++;
       if (UNLIKELY(nsw && valp>=&ff->e.p[PMAX-1]))
         nsw =0, valp = &(ff->e.c.extra[1]);
+      tot_prob += *valp++;
     }
-    nsw = 1; valp = &ff->e.p[2];
+    nsw = 1; valp = &ff->e.p[5];
     for (j=0; j< nargs; j+=3) {
       MYFLT p1, p2, p3;
       p1 = *valp++;
@@ -2135,7 +2131,7 @@ static int gen42(FGDATA *ff, FUNC *ftp) /*gab d5*/
       p3 = *valp++;
       if (UNLIKELY(nsw && valp>=&ff->e.p[PMAX-1]))
         nsw =0, valp = &(ff->e.c.extra[1]);
-      width = (int) ((p3/tot_prob) * ff->flen +FL(0.5));
+      width = (int) ((p3/tot_prob) * ff->flen +FL(0.5)); 
       inc = (p2-p1) / (MYFLT) (width-1);
       for ( k=0; k < width; k++) {
         *fp++ = p1+(inc*k);
@@ -2258,6 +2254,7 @@ FUNC *csoundFTFind(CSOUND *csound, MYFLT *argp)
     return ftp;
 }
 
+/* **** SOMETHING WRONG HERE __ NOT CALLED **** */
 static CS_NOINLINE FUNC *gen01_defer_load(CSOUND *csound, int fno)
 {
     FGDATA  ff;
@@ -2473,9 +2470,9 @@ static int gen01raw(FGDATA *ff, FUNC *ftp)
       if (csound->oparms->msglevel & 7)
         csound->Message(csound, Str("  defer length %d\n"), ff->flen - 1);
        if (p->channel == ALLCHNLS)
-	 ff->flen *= p->nchanls;
+         ff->flen *= p->nchanls;
       ff->guardreq  = 1;                      /* presum this includes guard */
-      /*ff->flen     -= 1;*/                  /* VL: this was causing tables to exclude last point  */
+/*ff->flen     -= 1;*/ /* VL: this was causing tables to exclude last point  */
       ftp           = ftalloc(ff);            /*   alloc now, and           */
       ftp->lenmask  = 0L;                     /*   mark hdr partly filled   */
       /*if (p->channel==ALLCHNLS) ftp->nchanls  = p->nchanls;
@@ -2498,7 +2495,7 @@ static int gen01raw(FGDATA *ff, FUNC *ftp)
       SF_INSTRUMENT lpd;
       int ans = sf_command(fd, SFC_GET_INSTRUMENT, &lpd, sizeof(SF_INSTRUMENT));
       if (ans) {
-        double natcps, gainfac;
+        double natcps;
 #ifdef BETA
         if ((csound->oparms_.msglevel & 7) == 7) {
           csound->Message(csound,
@@ -2520,7 +2517,7 @@ static int gen01raw(FGDATA *ff, FUNC *ftp)
         natcps = pow(2.0, ((double) ((int) lpd.basenote - 69)
                            + (double) lpd.detune * 0.01) / 12.0) * 440.0;
         /* As far as I can tell this gainfac value is never used! */
-        gainfac = exp((double) lpd.gain * LOG10D20);
+        //gainfac = exp((double) lpd.gain * LOG10D20);
      /* if (lpd.basenote == 0)
           lpd.basenote = ftp->cvtbas; */
         ftp->cpscvt = ftp->cvtbas / natcps;
@@ -2669,9 +2666,9 @@ static int gen43(FGDATA *ff, FUNC *ftp)
     return OK;
 }
 
-#ifdef INC_MP3
 #include "mp3dec.h"
-static int gen49(FGDATA *ff, FUNC *ftp)
+
+static int gen49raw(FGDATA *ff, FUNC *ftp)
 {
     CSOUND  *csound        = ff->csound;
     MYFLT   *fp            = ftp->ftable;
@@ -2685,7 +2682,6 @@ static int gen49(FGDATA *ff, FUNC *ftp)
     char    sfname[1024];
     mpadec_info_t mpainfo;
     uint32_t bufsize, bufused = 0;
-    uint64_t maxsize;
     uint8_t *buffer;
     int size = 0x1000;
     int flen;
@@ -2755,9 +2751,9 @@ static int gen49(FGDATA *ff, FUNC *ftp)
       return fterror(ff, mp3dec_error(r));
     }
     ftp->gen01args.sample_rate = mpainfo.frequency;
-    maxsize = mpainfo.decoded_sample_size
-      *mpainfo.decoded_frame_samples
-      *mpainfo.frames;
+    /* maxsize = mpainfo.decoded_sample_size */
+    /*   *mpainfo.decoded_frame_samples */
+    /*   *mpainfo.frames; */
     {
       char temp[80];
       if (mpainfo.frequency < 16000) strcpy(temp, "MPEG-2.5 ");
@@ -2807,7 +2803,53 @@ static int gen49(FGDATA *ff, FUNC *ftp)
     r |= mp3dec_uninit(mpa);
     return ((r == MP3DEC_RETCODE_OK) ? OK : NOTOK);
 }
-#endif
+
+static int gen49(FGDATA *ff, FUNC *ftp)
+{
+    if (UNLIKELY(ff->e.pcnt < 7)) {
+      return fterror(ff, Str("insufficient arguments"));
+    }
+    if (ff->csound->oparms->gen01defer) {
+      /* We're deferring the soundfile load until performance time,
+         so allocate the function table descriptor, save the arguments,
+         and get out */
+      ftp = ftalloc(ff);
+      ftp->gen01args.gen01 = ff->e.p[4];
+      ftp->gen01args.ifilno = ff->e.p[5];
+      ftp->gen01args.iskptim = ff->e.p[6];
+      ftp->gen01args.iformat = ff->e.p[7];
+      ftp->gen01args.channel = ff->e.p[8];
+      strcpy(ftp->gen01args.strarg, ff->e.strarg);
+      return OK;
+    }
+    return gen49raw(ff, ftp);
+}
+
+static CS_NOINLINE FUNC *gen49_defer_load(CSOUND *csound, int fno)
+{
+    FGDATA  ff;
+    char    strarg[SSTRSIZ];
+    FUNC    *ftp = csound->flist[fno];
+
+    /* The soundfile hasn't been loaded yet, so call GEN49 */
+    strcpy(strarg, ftp->gen01args.strarg);
+    memset(&ff, 0, sizeof(FGDATA));
+    ff.fno = fno;
+    ff.e.strarg = strarg;
+    ff.e.opcod = 'f';
+    ff.e.pcnt = 8;
+    ff.e.p[1] = (MYFLT) fno;
+    ff.e.p[4] = ftp->gen01args.gen01;
+    ff.e.p[5] = ftp->gen01args.ifilno;
+    ff.e.p[6] = ftp->gen01args.iskptim;
+    ff.e.p[7] = ftp->gen01args.iformat;
+    ff.e.p[8] = ftp->gen01args.channel;
+    if (UNLIKELY(gen49raw(&ff, ftp) != 0)) {
+      csoundErrorMsg(csound, Str("Deferred load of '%s' failed"), strarg);
+      return NULL;
+    }
+    return csound->flist[fno];
+}
 
 static int gen51(FGDATA *ff, FUNC *ftp)    /* Gab 1/3/2005 */
 {
@@ -3105,3 +3147,24 @@ int allocgen(CSOUND *csound, char *s, GEN fn)
     return csound->genmax-1;
 }
 
+#include "resize.h"
+
+ static int warned = 0;
+int resize_table(CSOUND *csound, RESIZE *p)
+{
+    int fsize  = (int) MYFLT2LRND(*p->nsize);
+    int fno  = (int) MYFLT2LRND(*p->fn);
+    FUNC *ftp;
+
+    if (warned==0) {
+      printf("WARNING: EXPERIMENTAL CODE\n");
+      warned = 1;
+    }
+    if ((ftp = csound->FTFind(csound, p->fn)) == NULL)
+      return NOTOK;
+    if (ftp->flen<fsize) 
+      ftp = (FUNC*) csound->ReAlloc(csound, ftp, sizeof(FUNC)+sizeof(MYFLT)*fsize);
+    ftp->flen = fsize;
+    csound->flist[fno] = ftp;
+    return OK;
+}
diff --git a/Engine/insert.c b/Engine/insert.c
index 9197f57..f0b9ea7 100644
--- a/Engine/insert.c
+++ b/Engine/insert.c
@@ -30,7 +30,7 @@
 #include "midiops.h"
 #include "namedins.h"   /* IV - Oct 31 2002 */
 #include "pstream.h"
-extern MYFLT cpsocfrc[];        /* Needed by CPSOCTL */
+/*extern MYFLT cpsocfrc[]; */       /* Needed by CPSOCTL */
 
 static  void    showallocs(CSOUND *);
 static  void    deact(CSOUND *, INSDS *);
@@ -371,7 +371,7 @@ int MIDIinsert(CSOUND *csound, int insno, MCHNBLK *chn, MEVENT *mep)
       MYFLT value = (MYFLT) ip->m_pitch;
       pfields[index] = value;
       if (O->msglevel & WARNMSG) {
-        csound->Message(csound, "  midiKey:         pfield: %3d  value: %3d\n",
+        csound->Message(csound, "  midiKey:         pfield: %3d  value: %.3f\n",
                         pfield, (int) pfields[index]);
       }
     }
@@ -431,7 +431,7 @@ int MIDIinsert(CSOUND *csound, int insno, MCHNBLK *chn, MEVENT *mep)
     }
     else if (O->midiVelocityAmp) {
       int pfield = O->midiVelocityAmp;
-      int index = pfield - 1;
+      int index = pfield - 1; 
       MYFLT *pfields = &ip->p1;
       MYFLT value = (MYFLT) ip->m_veloc;
       value = value * value / FL(16239.0);
@@ -439,9 +439,28 @@ int MIDIinsert(CSOUND *csound, int insno, MCHNBLK *chn, MEVENT *mep)
       pfields[index] = value;
       if (UNLIKELY(O->msglevel & WARNMSG)) {
         csound->Message(csound, "  midiVelocityAmp: pfield: %3d  value: %3d\n",
-                        pfield, (int) pfields[index]);
+                        pfield, pfields[index]);
       }
     }
+    /* 
+       the code above assumes &p1 is a pointer to an array of N pfields, but 
+       this is wrong. It overwrites memory and uses it for passing p-field
+       values. When the overwritten memory is taken to be a pointer in the
+       loop below, the loop does not stop at the end of the opcode list
+       and causes iopadr to be garbage, leading to a segfault. 
+       This happens where there is exactly one opcode in an instrument. 
+       It is a nasty bug that needs to be fixed. 
+        
+       A possible solution is to  allocate always a minimum of 5 p-fields (see line
+       approx 1809 below). The extra p-fields appear to be hanging at the end of 
+       an INSDS structure, and &p1 appears to be a legal array start address.
+       This allows p4 and p5 to be mapped, but no further p-fields (possibly).
+
+       This fix is a bit of hack IMHO. But I have implemented it here, as it
+       seemingly prevents the crashes.
+
+       (JPff) a safer fix to readthe extra arg numbers
+     */
 
     csound->curip = ip;
     csound->ids = (OPDS *)ip;
@@ -962,6 +981,9 @@ int useropcdset(CSOUND *csound, UOPCODE *p)
       /* initialise perf time address lists */
       buf->iobufp_ptrs[0] = buf->iobufp_ptrs[1] = NULL;
       buf->iobufp_ptrs[2] = buf->iobufp_ptrs[3] = NULL;
+      buf->iobufp_ptrs[4] = buf->iobufp_ptrs[5] = NULL;
+      buf->iobufp_ptrs[6] = buf->iobufp_ptrs[7] = NULL;
+
       /* store parameters of input and output channels, and parent ip */
       buf->uopcode_struct = (void*) p;
       buf->parent_ip = p->parent_ip = parent_ip;
@@ -1081,19 +1103,33 @@ int xinset(CSOUND *csound, XIN *p)
     *(tmp++) = NULL;            /* put delimiter */
     /* ... same for k-rate */
     while (*++ndx_list >= 0) {
-      *(tmp++) = *(bufs + *ndx_list);   /* "from" address */
+      *(tmp++) = *(bufs + *ndx_list);   /* "from" address */   
       *(tmp++) = *(p->args + *ndx_list);/* "to" address */
     }
     *(tmp++) = NULL;            /* put delimiter */
-    /* fsigs: we'll need to do extra work 
-    while (*++ndx_list >= 0) {
-      *(tmp++) = *(bufs + *ndx_list);   
-      *(tmp++) = *(p->args + *ndx_list);
-    }
-    *(tmp++) = NULL;       */
-
+    /* fsigs: we'll need to do extra work */
+     while (*++ndx_list >= 0) {
+       void *in, *out;
+       in = (void *)*(bufs + *ndx_list);
+       *(tmp++) = (MYFLT *) in;   
+       out = (void *) *(p->args + *ndx_list);
+       *(tmp++) = (MYFLT *) out;
+       memcpy(out, in, sizeof(PVSDAT));    
+    }
+     *(tmp++) = NULL;
+    /* tsigs: similar to avove */
+     while (*++ndx_list >= 0) {
+       void *in, *out;
+       in = (void *)*(bufs + *ndx_list);
+       *(tmp++) = (MYFLT *) in;   
+       out = (void *) *(p->args + *ndx_list);
+       *(tmp++) = (MYFLT *) out;
+       memcpy(out, in, sizeof(TABDAT));   
+    }
+     *(tmp++) = NULL;
+   
     /* fix for case when xout is omitted */
-    *(tmp++) = NULL; *tmp = NULL;
+    *(tmp++) = NULL;  *(tmp++) = NULL;  *(tmp++) = NULL; *tmp = NULL;
     return OK;
 }
 
@@ -1103,7 +1139,7 @@ int xoutset(CSOUND *csound, XOUT *p)
     OPCODINFO   *inm;
     int16       *ndx_list;
     MYFLT       **tmp, **bufs;
-
+    
     (void) csound;
     buf = (OPCOD_IOBUFS*) p->h.insdshead->opcod_iobufs;
     inm = buf->opcode_info;
@@ -1123,14 +1159,15 @@ int xoutset(CSOUND *csound, XOUT *p)
         *(dst++) = *(src++);
       *dst = '\0';
     }
-
-    /* skip input pointers, including the two delimiter NULLs */
+    /* skip input pointers, including the three delimiter NULLs */
     tmp = buf->iobufp_ptrs;
-    if (*tmp || *(tmp + 1)) tmp += (inm->perf_incnt << 1);
-    tmp += 2;
+    /* VL: needs to check if there are not 4 nulls in a sequence, which
+       would indicate no a, k, f or t sigs */
+    if (*tmp || *(tmp + 1) || *(tmp + 2) || *(tmp + 3)) tmp += (inm->perf_incnt << 1);
+    tmp += 4;  /* VL: this was 2, now 4 with fsigs and tsigs added */
     if (*tmp || *(tmp + 1))
-      return OK;
-
+    return OK;
+   
     /* find a-rate variables and add to list of perf-time buf ptrs ... */
     while (*++ndx_list >= 0) {
       *(tmp++) = *(p->args + *ndx_list);/* "from" address */
@@ -1142,13 +1179,28 @@ int xoutset(CSOUND *csound, XOUT *p)
       *(tmp++) = *(p->args + *ndx_list);/* "from" address */
       *(tmp++) = *(bufs + *ndx_list);   /* "to" address */
     }
-    *tmp = NULL;                /* put delimiter */
-      /* fsigs: we'll need to do extra work 
+    *(tmp++) = NULL;                /* put delimiter */
+ 
+    /* fsigs: we'll need to do extra work */
+    while (*++ndx_list >= 0) {
+      void *in, *out;
+      in =  (void *) *(p->args + *ndx_list);
+      *(tmp++) = (MYFLT *) in;
+      out = (void *) *(bufs + *ndx_list); 
+      *(tmp++) = (MYFLT *) out;
+      memcpy(out, in, sizeof(PVSDAT));
+    }
+    *(tmp++) = NULL; 
+   /* tsigs: as above */
     while (*++ndx_list >= 0) {
-      *(tmp++) = *(p->args + *ndx_list);
-      *(tmp++) = *(bufs + *ndx_list);   
+      void *in, *out;
+      in =  (void *) *(p->args + *ndx_list);
+      *(tmp++) = (MYFLT *) in;
+      out = (void *) *(bufs + *ndx_list); 
+      *(tmp++) = (MYFLT *) out;
+      memcpy(out, in, sizeof(TABDAT));
     }
-    *tmp = NULL; */
+    *tmp = NULL;
 
     return OK;
 }
@@ -1540,6 +1592,17 @@ int useropcd1(CSOUND *csound, UOPCODE *p)
         while (*(++tmp)) {              /* k-rate */
           ptr1 = *tmp; *(*(++tmp)) = *ptr1;
         }
+        /* VL: fsigs in need to be dealt with here */
+        while (*(++tmp)) {                
+         ptr1 = *tmp; 
+         memcpy((void *)(*(++tmp)), (void *) ptr1, sizeof(PVSDAT)); 
+         }
+        /* and tsigs */
+        while (*(++tmp)) {                
+         ptr1 = *tmp; 
+         memcpy((void *)(*(++tmp)), (void *) ptr1, sizeof(TABDAT)); 
+         }
+        
         /*  run each opcode  */
         csound->pds = (OPDS *) (p->ip);
         while ((csound->pds = csound->pds->nxtp)) {
@@ -1566,6 +1629,16 @@ int useropcd1(CSOUND *csound, UOPCODE *p)
         while (*(++tmp)) {              /* k-rate */
           ptr1 = *tmp; *(*(++tmp)) = *ptr1;
         }
+        /* VL: fsigs in need to be dealt with here */
+        while (*(++tmp)) {                
+         ptr1 = *tmp; 
+         memcpy((void *)(*(++tmp)), (void *) ptr1, sizeof(PVSDAT)); 
+         }
+        /* and tsigs */
+        while (*(++tmp)) {                
+         ptr1 = *tmp; 
+         memcpy((void *)(*(++tmp)), (void *) ptr1, sizeof(TABDAT)); 
+         } 
         /*  run each opcode  */
         csound->pds = (OPDS *) (p->ip);
         while ((csound->pds = csound->pds->nxtp)) {
@@ -1585,9 +1658,20 @@ int useropcd1(CSOUND *csound, UOPCODE *p)
     /* k-rate outputs are copied only in the last sub-kperiod, */
     /* so we do it now */
     while (*(++tmp)) {                  /* k-rate */
-      ptr1 = *tmp; *(*(++tmp)) = *ptr1;
+      ptr1 = *tmp; 
+      *(*(++tmp)) = *ptr1;
     }
-
+    /* VL: fsigs out need to be dealt with here */
+     while (*(++tmp)) {                
+       ptr1 = *tmp;
+       memcpy((void *)(*(++tmp)), (void *)ptr1, sizeof(PVSDAT));
+    }
+     /* tsigs  */
+    while (*(++tmp)) {                
+       ptr1 = *tmp;
+       memcpy((void *)(*(++tmp)), (void *)ptr1, sizeof(TABDAT));
+    }
+    
     /* restore globals */
     csound->ksmps = g_ksmps;
     csound->pool[csound->poolcount + 2] = (MYFLT) g_ksmps;
@@ -1610,13 +1694,16 @@ int useropcd2(CSOUND *csound, UOPCODE *p)
     OPDS    *saved_pds = csound->pds;
     int     n;
     MYFLT   **tmp, *ptr1, *ptr2;
+    
+     if (!(csound->pds = (OPDS*) (p->ip->nxtp))) goto endop; /* no perf code */
 
-    if (!(csound->pds = (OPDS*) (p->ip->nxtp))) goto endop; /* no perf code */
+    //csound->Message(csound, "end input\n"); /* FOR SOME REASON the opcode has no perf code */ 
     /* IV - Nov 16 2002: update release flag */
     p->ip->relesing = p->parent_ip->relesing;
-
+   
     tmp = p->buf->iobufp_ptrs;
     if (csound->ksmps != 1) {           /* generic case for kr != sr */
+
       /* copy inputs */
       while (*tmp) {                    /* a-rate */
         ptr1 = *(tmp++); ptr2 = *(tmp++);
@@ -1625,9 +1712,23 @@ int useropcd2(CSOUND *csound, UOPCODE *p)
           *(ptr2++) = *(ptr1++);
         } while (--n);
       }
+   
       while (*(++tmp)) {                /* k-rate */
         ptr1 = *tmp; *(*(++tmp)) = *ptr1;
       }
+  
+      /* VL: fsigs in need to be dealt with here */
+       while (*(++tmp)) {                
+         ptr1 = *tmp; 
+         memcpy((void *)(*(++tmp)), (void *) ptr1, sizeof(PVSDAT)); 
+         } 
+       /* VL: tsigs */
+        while (*(++tmp)) {                
+         ptr1 = *tmp; 
+         memcpy((void *)(*(++tmp)), (void *) ptr1, sizeof(TABDAT)); 
+         } 
+       
+        
       /*  run each opcode  */
       do {
         (*csound->pds->opadr)(csound, csound->pds);
@@ -1644,11 +1745,22 @@ int useropcd2(CSOUND *csound, UOPCODE *p)
     else {                      /* special case for kr == sr */
       /* copy inputs */
       while (*tmp) {                    /* a-rate */
-        ptr1 = *(tmp++); *(*(tmp++)) = *ptr1;
+        ptr1 = *(tmp++); 
+        *(*(tmp++)) = *ptr1;
       }
       while (*(++tmp)) {                /* k-rate */
         ptr1 = *tmp; *(*(++tmp)) = *ptr1;
       }
+      /* VL: fsigs in need to be dealt with here */
+       while (*(++tmp)) {                
+         ptr1 = *tmp; 
+         memcpy((void *)(*(++tmp)), (void *) ptr1, sizeof(PVSDAT)); 
+         }
+       /* VL: tsigs */
+       while (*(++tmp)) {                
+         ptr1 = *tmp; 
+         memcpy((void *)(*(++tmp)), (void *) ptr1, sizeof(TABDAT)); 
+         } 
       /*  run each opcode  */
       do {
         (*csound->pds->opadr)(csound, csound->pds);
@@ -1661,6 +1773,16 @@ int useropcd2(CSOUND *csound, UOPCODE *p)
     while (*(++tmp)) {                  /* k-rate */
       ptr1 = *tmp; *(*(++tmp)) = *ptr1;
     }
+    /* VL: fsigs out need to be dealt with here */
+     while (*(++tmp)) {                
+       ptr1 = *tmp;
+       memcpy((void *)(*(++tmp)), (void *)ptr1, sizeof(PVSDAT));
+       }
+     /* tsigs */
+    while (*(++tmp)) {                
+       ptr1 = *tmp;
+       memcpy((void *)(*(++tmp)), (void *)ptr1, sizeof(TABDAT));
+       } 
  endop:
     /* restore globals */
     csound->pds = saved_pds;
@@ -1686,12 +1808,22 @@ static void instance(CSOUND *csound, int insno)
     char      *nxtopds, *opdslim;
     MYFLT     **argpp, *lclbas, *gbloffbas, *lcloffbas;
     int       *ndxp;
-    int       odebug = csound->oparms->odebug;
+    OPARMS    *O = csound->oparms;
+    int       odebug = O->odebug;
 
     lopdsp = csound->lopds;
     largp = (LARGNO*) csound->larg;
     tp = csound->instrtxtp[insno];
-    pextent = sizeof(INSDS) + tp->pextrab;      /* alloc new space,  */
+    /* VL: added 2 extra MYFLT pointers to the memory to account for possible
+       use by midi mapping flags */
+    n = 3;
+    if (O->midiKey>n) n = O->midiKey;
+    if (O->midiKeyCps>n) n = O->midiKeyCps;
+    if (O->midiKeyOct>n) n = O->midiKeyOct;
+    if (O->midiKeyPch>n) n = O->midiKeyPch;
+    if (O->midiVelocity>n) n = O->midiVelocity;
+    if (O->midiVelocityAmp>n) n = O->midiVelocityAmp;
+    pextent = sizeof(INSDS) + tp->pextrab + (n-3)*sizeof(MYFLT *);      /* alloc new space,  */
     ip = (INSDS*) mcalloc(csound, (size_t) pextent + tp->localen + tp->opdstot);
     ip->csound = csound;
     ip->m_chnbp = (MCHNBLK*) NULL;
diff --git a/Engine/memfiles.c b/Engine/memfiles.c
index 7348e3e..61fc234 100644
--- a/Engine/memfiles.c
+++ b/Engine/memfiles.c
@@ -28,6 +28,7 @@
 #include "pstream.h"
 #include "namedins.h"
 #include <sndfile.h>
+#include <string.h>
 
 static int Load_File_(CSOUND *csound, const char *filnam,
                        char **allocp, int32 *len, int csFileType)
diff --git a/Engine/musmon.c b/Engine/musmon.c
index df9b662..bef5a64 100644
--- a/Engine/musmon.c
+++ b/Engine/musmon.c
@@ -30,6 +30,7 @@
 #include "remote.h"
 #include <math.h>
 # include "cscore.h"
+#include "corfile.h"
 
 #define SEGAMPS AMPLMSG
 #define SORMSG  RNGEMSG
@@ -39,6 +40,7 @@ extern  int     insert(CSOUND *, int, EVTBLK*);
 extern  void    MidiOpen(CSOUND *);
 extern  void    m_chn_init_all(CSOUND *);
 extern  void    scsort(CSOUND *, FILE *, FILE *);
+extern  void    scsortstr(CSOUND *, CORFIL *);
 extern  void    infoff(CSOUND*, MYFLT), orcompact(CSOUND*);
 extern  void    beatexpire(CSOUND *, double), timexpire(CSOUND *, double);
 extern  void    sfopenin(CSOUND *), sfopenout(CSOUND*), sfnopenout(CSOUND*);
@@ -271,14 +273,8 @@ int musmon(CSOUND *csound)
         sfnopenout(csound);
     }
 
-    if (!(csound->scfp = fopen(O->playscore, "r"))) {
-      if (UNLIKELY(!O->Linein)) {
-        csoundDie(csound, Str("cannot reopen %s"), O->playscore);
-      }
-    }
-    /* notify the host if it asked */
-    csoundNotifyFileOpened(csound, O->playscore, CSFTYPE_SCORE_OUT, 0,
-                             (csound->tempStatus & csPlayScoMask)!=0);
+    corfile_flush(O->playscore);
+    //csound->scfp
     if (UNLIKELY(O->usingcscore)) {
       if (ST(lsect) == NULL) {
         ST(lsect) = (EVENT*) mmalloc(csound, sizeof(EVENT));
@@ -307,13 +303,12 @@ int musmon(CSOUND *csound)
         csoundDie(csound, Str("cannot reopen cscore.srt"));
       csoundNotifyFileOpened(csound, "cscore.srt", CSFTYPE_SCORE_OUT, 1, 0);
       csound->Message(csound, Str("sorting cscore.out ..\n"));
-      scsort(csound, csound->scfp, csound->oscfp);  /* call the sorter again */
+      csound->scorestr = copy_to_corefile(csound, "cscore.srt", NULL, 1);
+      scsortstr(csound, csound->scorestr);  /* call the sorter again */
       fclose(csound->scfp); csound->scfp = NULL;
+      fputs(corfile_body(csound->scstr), csound->oscfp);
       fclose(csound->oscfp); csound->oscfp = NULL;
       csound->Message(csound, Str("\t... done\n"));
-      if (UNLIKELY(!(csound->scfp = fopen("cscore.srt", "r")))) /*  rd from cscore.srt */
-        csoundDie(csound, Str("cannot reopen cscore.srt"));
-      csoundNotifyFileOpened(csound, "cscore.srt", CSFTYPE_SCORE_OUT, 0, 0);
       csound->Message(csound, Str("playing from cscore.srt\n"));
       O->usingcscore = 0;
     }
@@ -388,9 +383,7 @@ PUBLIC int csoundCleanup(CSOUND *csound)
       free(p);
     }
     orcompact(csound);
-    if (csound->scfp) {
-      fclose(csound->scfp); csound->scfp = NULL;
-    }
+    corfile_rm(&csound->scstr);
   
     /* print stats only if musmon was actually run */
     if (UNLIKELY(csound->musmonGlobals != NULL)) {
@@ -720,7 +713,8 @@ static void process_midi_event(CSOUND *csound, MEVENT *mep, MCHNBLK *chn)
 {
     int n, insno = chn->insno;
     if (mep->type == NOTEON_TYPE && mep->dat2) {      /* midi note ON: */
-      if (UNLIKELY((n = MIDIinsert(csound, insno, chn, mep)))) {     /* alloc,init,activ */
+      if (UNLIKELY((n = MIDIinsert(csound, insno, chn, mep)))) { 
+        /* alloc,init,activ */
         csound->Message(csound,
                         Str("\t\t   T%7.3f - note deleted. "), csound->curp2);
         {
@@ -880,7 +874,7 @@ int sensevents(CSOUND *csound)
           else                                          /* else lcode   */
             memcpy((void*) e, (void*) &(ST(lsect)->strarg), sizeof(EVTBLK));
         } else
-          if (!(rdscor(csound, e)))       /*   or rd nxt evt from scorfil */
+          if (!(rdscor(csound, e)))           /* or rd nxt evt from scstr */
             e->opcod = 'e';
         csound->currevent = e;
         switch (e->opcod) {
@@ -1216,9 +1210,6 @@ void musmon_rewind_score(CSOUND *csound)
         settempo(csound, (MYFLT) csound->oparms->cmdTempo);
       else
         settempo(csound, FL(60.0));
-      /* rewind score file */
-      if (csound->scfp != NULL)
-        fseek(csound->scfp, 0L, SEEK_SET);
       /* update section/overall amplitudes, reset to section 1 */
       section_amps(csound, 1);
       ST(sectno) = 1;
@@ -1229,6 +1220,8 @@ void musmon_rewind_score(CSOUND *csound)
     csound->advanceCnt = 0;
     if (csound->csoundScoreOffsetSeconds_ > FL(0.0))
       csound->SetScoreOffsetSeconds(csound, csound->csoundScoreOffsetSeconds_);
+
+    corfile_rewind(csound->scstr);
 }
 
 /**
diff --git a/Engine/namedins.c b/Engine/namedins.c
index d9f35e9..b51b176 100644
--- a/Engine/namedins.c
+++ b/Engine/namedins.c
@@ -469,7 +469,7 @@ int find_opcode(CSOUND *csound, char *opname)
 /* -------------------------------------------------------------------- */
 /* These functions replace the functionality of strsav() in rdorch.c.   */
 
-#define STRSPACE    (8000)              /* number of bytes in a buffer  */
+#define STRSPACE    (1000)               /* number of bytes in a buffer  */
 
 typedef struct strsav_t {
         struct strsav_t *nxt;           /* pointer to next structure    */
@@ -477,7 +477,8 @@ typedef struct strsav_t {
 } STRSAV;
 
 typedef struct strsav_space_t {
-        char    sp[STRSPACE];           /* string space                */
+        char    *sp;                    /* string space                */
+        int     size;                   /* Size of buffer              */
         int     splim;                  /* number of bytes allocated   */
         struct strsav_space_t   *prv;   /* ptr to previous buffer      */
 } STRSAV_SPACE;
@@ -490,8 +491,10 @@ typedef struct strsav_space_t {
 void strsav_create(CSOUND *csound)
 {
     if (csound->strsav_space != NULL) return;   /* already allocated */
-    csound->strsav_space = mcalloc(csound, sizeof(STRSAV_SPACE));
     csound->strsav_str = mcalloc(csound, sizeof(STRSAV*) * 256);
+    csound->strsav_space = mcalloc(csound, sizeof(STRSAV_SPACE));
+    STRSAV_SPACE_->sp = (char*)mcalloc(csound, STRSPACE);
+    STRSAV_SPACE_->size = STRSPACE;
 }
 
 /* Locate string s in database, and return address of stored string (not */
@@ -526,21 +529,29 @@ char *strsav_string(CSOUND *csound, char *s)
     n = (int) sizeof(struct strsav_t *) + (int) strlen(s) + 1;  /* n bytes */
     n = ((n + (int) sizeof(struct strsav_t *) - 1)  /* round up for alignment */
          / (int) sizeof(struct strsav_t *)) * (int) sizeof(struct strsav_t *);
-    if ((STRSAV_SPACE_->splim + n) > STRSPACE) {
+    if ((STRSAV_SPACE_->splim + n) > STRSAV_SPACE_->size) {
       STRSAV_SPACE  *sp;
       /* not enough space, allocate new buffer */
-      if (UNLIKELY(n > STRSPACE)) {
+       if (UNLIKELY(n > STRSAV_SPACE_->size)) {
         /* this should not happen */
-        csound->ErrorMsg(csound,
-                         "internal error: strsav: string length > STRSPACE");
-        return NULL;
-      }
-      sp = (STRSAV_SPACE*) mcalloc(csound, sizeof(STRSAV_SPACE));
-      sp->prv = STRSAV_SPACE_;
-      csound->strsav_space = sp;
+         sp = (STRSAV_SPACE*)mcalloc(csound, sizeof(STRSAV_SPACE));
+         sp->sp =
+          (char*)mcalloc(csound, sp->size = n+STRSPACE);
+         csound->Message(csound,
+                        "internal message: strsav: buffer length now %d\n", 
+                        sp->size);
+       }
+       else {
+         sp = (STRSAV_SPACE*) mcalloc(csound, sizeof(STRSAV_SPACE));
+         sp->sp =
+           (char*)mcalloc(csound, STRSAV_SPACE_->size = STRSPACE);
+       }
+       sp->prv = STRSAV_SPACE_;
+       csound->strsav_space = sp;
     }
     /* use space from buffer */
-    ssp = (STRSAV*) ((char*) STRSAV_SPACE_->sp + STRSAV_SPACE_->splim);
+    //    ssp = (STRSAV*) ((char*) STRSAV_SPACE_->sp + STRSAV_SPACE_->splim);
+    ssp = (STRSAV*)(&(STRSAV_SPACE_->sp)[STRSAV_SPACE_->splim]);
     STRSAV_SPACE_->splim += n;
     strcpy(ssp->s, s);          /* save string */
     /* link into chain */
@@ -1074,248 +1085,6 @@ int csoundCheckOpcodePluginFile(CSOUND *csound, const char *fname)
     return 1;
 }
 
-/* static CS_NOINLINE int csoundLoadOpcodeDB_AddFile(CSOUND *csound, */
-/*                                     CsoundOpcodePluginFile_t *fp) */
-/* { */
-/*     CsoundOpcodePluginFile_t    **pp, *p; */
-/*     unsigned char               h; */
-
-/*     pp = (CsoundOpcodePluginFile_t**) csound->pluginOpcodeFiles; */
-/*     h = name_hash_2(csound, fp->fname); */
-/*     p = pp[h]; */
-/*     while (p) { */
-/*       /\* check for a name conflict *\/ */
-/*       if (!sCmp(p->fname, fp->fname)) */
-/*         return -1; */
-/*       p = p->nxt; */
-/*     } */
-/*     fp->nxt = pp[h]; */
-/*     fp->isLoaded = -1; */
-/*     pp[h] = fp; */
-/*     return 0; */
-/* } */
-
-/* static CS_NOINLINE int csoundLoadOpcodeDB_AddOpcode(CSOUND *csound, */
-/*                                           CsoundPluginOpcode_t *op) */
-/* { */
-/*     CsoundPluginOpcode_t    **pp, *p; */
-/*     unsigned char           h; */
-
-/*     pp = (CsoundPluginOpcode_t**) csound->pluginOpcodeDB; */
-/*     h = name_hash_2(csound, op->opname); */
-/*     p = pp[h]; */
-/*     while (p) { */
-/*       /\* check for a name conflict *\/ */
-/*       if (!sCmp(p->opname, op->opname)) */
-/*         return -1; */
-/*       p = p->nxt; */
-/*     } */
-/*     op->nxt = pp[h]; */
-/*     pp[h] = op; */
-/*     return 0; */
-/* } */
-
-/* void csoundDestroyOpcodeDB(CSOUND *csound) */
-/* { */
-/*     void    *p; */
-
-/*     p = csound->pluginOpcodeFiles; */
-/*     csound->pluginOpcodeFiles = NULL; */
-/*     csound->pluginOpcodeDB = NULL; */
-/*     csound->Free(csound, p); */
-/* } */
-
-/* load opcodes.dir from the specified directory, and set up database */
-
-/* int csoundLoadOpcodeDB(CSOUND *csound, const char *dname) */
-/* { */
-/*     char    err_msg[256]; */
-/*     char    *s, *sp, *fileData = (char*) NULL; */
-/*     void    *fd = (void*) NULL; */
-/*     FILE    *fp = (FILE*) NULL; */
-/*     size_t  i, n, fileLen, fileCnt, opcodeCnt, byteCnt; */
-/*     void    *p, *p1, *p2; */
-/*     CsoundOpcodePluginFile_t  *currentFile; */
-
-/*     /\* check file name *\/ */
-/*     if (dname == NULL || dname[0] == (char) 0) */
-/*       return 0; */
-/*     n = strlen(dname); */
-/*     s = csoundConcatenatePaths(csound, dname, "opcodes.dir"); */
-/*     /\* open and load file *\/ */
-/*     fd = csound->FileOpen(csound, &fp, CSFILE_STD, s, "rb", NULL); */
-/*     csound->Free(csound, s); */
-/*     if (fd == NULL) */
-/*       return 0; */
-/*     if (fseek(fp, 0L, SEEK_END) != 0) { */
-/*       sprintf(&(err_msg[0]), "seek error"); */
-/*       goto err_return; */
-/*     } */
-/*     fileLen = (size_t) ftell(fp); */
-/*     fseek(fp, 0L, SEEK_SET); */
-/*     if (fileLen == (size_t) 0) { */
-/*       csound->FileClose(csound, fd); */
-/*       return 0; */
-/*     } */
-/*     fileData = (char*) csound->Malloc(csound, fileLen + (size_t) 1); */
-/*     n = fread(fileData, (size_t) 1, fileLen, fp); */
-/*     csound->FileClose(csound, fd); */
-/*     fd = NULL; */
-/*     if (n != fileLen) { */
-/*       sprintf(&(err_msg[0]), "read error"); */
-/*       goto err_return; */
-/*     } */
-/*     fileData[fileLen] = (char) '\n'; */
-/*     /\* check syntax, and count the number of files and opcodes *\/ */
-/*     fileCnt = (size_t) 0; */
-/*     opcodeCnt = (size_t) 0; */
-/*     byteCnt = (size_t) 0; */
-/*     n = fileLen; */
-/*     for (i = (size_t) 0; i <= fileLen; i++) { */
-/*       if (fileData[i] == (char) ' ' || fileData[i] == (char) '\t' || */
-/*           fileData[i] == (char) '\r' || fileData[i] == (char) '\n') { */
-/*         if (n >= fileLen) */
-/*           continue; */
-/*         fileData[i] = (char) 0; */
-/*         if (fileData[i - 1] != ':') { */
-/*           if (!fileCnt) { */
-/*             sprintf(&(err_msg[0]), "syntax error"); */
-/*             goto err_return; */
-/*           } */
-/*           opcodeCnt++; */
-/*         } */
-/* #if !(defined(LINUX) || defined(__unix__) || defined(__MACH__)) */
-/*         else { */
-/*           size_t  j; */
-/*           /\* on some platforms, file names are case insensitive *\/ */
-/*           for (j = n; j < (i - 1); j++) { */
-/*             if (isupper(fileData[j])) */
-/*               fileData[j] = (char) tolower(fileData[j]); */
-/*           } */
-/*         } */
-/* #endif */
-/*         n = fileLen; */
-/*         continue; */
-/*       } */
-/*       if (n >= fileLen) */
-/*         n = i; */
-/*       if (!(isalnum(fileData[i]) || fileData[i] == (char) '.' || */
-/*             fileData[i] == (char) '-' || fileData[i] == (char) '_')) { */
-/*         if (fileData[i] == (char) ':' && i != n && i < fileLen && */
-/*             (fileData[i + 1] == (char) ' ' || fileData[i + 1] == (char) '\t' || */
-/*              fileData[i + 1] == (char) '\r' || fileData[i + 1] == (char) '\n')) */
-/*           fileCnt++; */
-/*         else { */
-/*           sprintf(&(err_msg[0]), "syntax error"); */
-/*           goto err_return; */
-/*         } */
-/*       } */
-/*       else */
-/*         byteCnt++; */
-/*     } */
-/*     /\* calculate the number of bytes to allocate *\/ */
-/*     byteCnt += ((size_t) 256 * sizeof(CsoundOpcodePluginFile_t*)); */
-/*     byteCnt += ((size_t) 256 * sizeof(CsoundPluginOpcode_t*)); */
-/*     byteCnt += (fileCnt * sizeof(CsoundOpcodePluginFile_t)); */
-/*     byteCnt = (byteCnt + (size_t) 15) & (~((size_t) 15)); */
-/*     byteCnt += (opcodeCnt * sizeof(CsoundPluginOpcode_t)); */
-/*     byteCnt += (fileCnt * (strlen(dname) */
-/* #if defined(WIN32) */
-/*                 + (size_t) 6        /\* "\\NAME.dll\0" *\/ */
-/* #elif defined(__MACH__) */
-/*                 + (size_t) 11       /\* "/libNAME.dylib\0" *\/ */
-/* #else */
-/*                 + (size_t) 8        /\* "/libNAME.so\0" *\/ */
-/* #endif */
-/*                 )); */
-/*     byteCnt += opcodeCnt; */
-/*     /\* allocate and set up database *\/ */
-/*     p = csound->Calloc(csound, byteCnt); */
-/*     csound->pluginOpcodeFiles = p; */
-/*     n = (size_t) 256 * sizeof(CsoundOpcodePluginFile_t*); */
-/*     csound->pluginOpcodeDB = (void*) &(((char*) p)[n]); */
-/*     n += ((size_t) 256 * sizeof(CsoundPluginOpcode_t*)); */
-/*     p1 = (void*) &(((char*) p)[n]); */
-/*     n += (fileCnt * sizeof(CsoundOpcodePluginFile_t)); */
-/*     n = (n + (size_t) 15) & (~((size_t) 15)); */
-/*     p2 = (void*) &(((char*) p)[n]); */
-/*     n += (opcodeCnt * sizeof(CsoundPluginOpcode_t)); */
-/*     sp = &(((char*) p)[n]); */
-/*     currentFile = (CsoundOpcodePluginFile_t*) NULL; */
-/*     i = (size_t) 0; */
-/*     while (i < fileLen) { */
-/*       if (fileData[i] == (char) ' ' || fileData[i] == (char) '\t' || */
-/*           fileData[i] == (char) '\r' || fileData[i] == (char) '\n') { */
-/*         i++; */
-/*         continue; */
-/*       } */
-/*       s = &(fileData[i]); */
-/*       n = strlen(s); */
-/*       i += (n + (size_t) 1); */
-/*       if (s[n - 1] != (char) ':') { */
-/*         /\* add opcode entry *\/ */
-/*         CsoundPluginOpcode_t  *op_; */
-/*         op_ = (CsoundPluginOpcode_t*) p2; */
-/*         p2 = (void*) ((char*) p2 + (long) sizeof(CsoundPluginOpcode_t)); */
-/*         strcpy(sp, s); */
-/*         op_->opname = sp; */
-/*         sp += ((long) strlen(s) + 1L); */
-/*         op_->fp = currentFile; */
-/*         if (csoundLoadOpcodeDB_AddOpcode(csound, op_) != 0) { */
-/*           sprintf(&(err_msg[0]), "duplicate opcode name"); */
-/*           goto err_return; */
-/*         } */
-/*       } */
-/*       else { */
-/*         /\* add file entry *\/ */
-/*         CsoundOpcodePluginFile_t  *fp_; */
-/*         fp_ = (CsoundOpcodePluginFile_t*) p1; */
-/*         p1 = (void*) ((char*) p1 + (long) sizeof(CsoundOpcodePluginFile_t)); */
-/*         s[n - 1] = (char) 0; */
-/*         strcpy(sp, dname); */
-/*         n = strlen(dname); */
-/*         if (sp[n - 1] == (char) DIRSEP) */
-/*           n--; */
-/*         fp_->fullName = sp; */
-/*         sp = (char*) fp_->fullName + (long) n; */
-/* #if defined(WIN32) */
-/*         sprintf(sp, "\\%s.dll", s); */
-/* #elif defined(__MACH__) */
-/*         sprintf(sp, "/lib%s.dylib", s); */
-/* #else */
-/*         sprintf(sp, "%clib%s.so", DIRSEP, s); */
-/* #endif */
-/*         fp_->fname = &(sp[1]); */
-/*         sp = (char*) strchr(fp_->fname, '\0') + 1L; */
-/*         if (csoundLoadOpcodeDB_AddFile(csound, fp_) != 0) { */
-/*           sprintf(&(err_msg[0]), "duplicate file name"); */
-/*           goto err_return; */
-/*         } */
-/*         currentFile = fp_; */
-/*       } */
-/*       if ((size_t) ((char*) sp - (char*) p) > byteCnt) */
-/*         csound->Die(csound, Str(" *** internal error while " */
-/*                                 "loading opcode database file")); */
-/*     } */
-/*     /\* clean up *\/ */
-/*     csound->Free(csound, fileData); */
-/*     /\* plugin opcode database has been successfully loaded *\/ */
-/*     return 0; */
-
-/*  err_return: */
-/*     if (fileData) */
-/*       csound->Free(csound, fileData); */
-/*     if (fd) */
-/*       csound->FileClose(csound, fd); */
-/*     csoundDestroyOpcodeDB(csound); */
-/*     csound->ErrorMsg(csound, Str(" *** error loading opcode database file: "), */
-/*                              Str(&(err_msg[0]))); */
-/*     return -1; */
-/* } */
-
-/* load all pending opcode plugin libraries */
-/* called when listing opcodes (-z) */
-
 int csoundLoadAllPluginOpcodes(CSOUND *csound)
 {
     CsoundOpcodePluginFile_t    *p;
diff --git a/Engine/new_orc_parser.c b/Engine/new_orc_parser.c
index 5ee66c1..dc17611 100644
--- a/Engine/new_orc_parser.c
+++ b/Engine/new_orc_parser.c
@@ -27,7 +27,7 @@
 #include "csound_orcparse.h"
 #include "csound_orc.h"
 #include "parse_param.h"
-
+#include "corfile.h"
 
 //#include "yyguts.h"
 
@@ -38,6 +38,11 @@ extern void csound_orcrestart(FILE*, void *);
 extern int csound_orcdebug;
 
 extern int csound_orcparse(PARSE_PARM *, void *, CSOUND*, TREE*);
+extern void csound_orclex_init(void *);
+extern void csound_orcset_extra(void *, void *);
+extern void csound_orc_scan_string(char *, void *);
+extern void csound_orcset_lineno(int, void*);
+extern void csound_orclex_destroy(void *);
 extern void init_symbtab(CSOUND*);
 extern void print_tree(CSOUND *, char *, TREE *);
 extern TREE* verify_tree(CSOUND *, TREE *);
@@ -46,23 +51,23 @@ extern TREE* csound_orc_optimize(CSOUND *, TREE *);
 extern void csound_orc_compile(CSOUND *, TREE *);
 #ifdef PARCS
 extern TREE *csp_locks_insert(CSOUND *csound, TREE *root);
+void csp_locks_cache_build(CSOUND *);
+void csp_weights_calculate(CSOUND *, TREE *);
 #endif
 
 
-void new_orc_parser(CSOUND *csound)
+int new_orc_parser(CSOUND *csound)
 {
-    void *t;
     int retVal;
     TREE* astTree = (TREE *)mcalloc(csound, sizeof(TREE));
     OPARMS *O = csound->oparms;
     PARSE_PARM  pp;
-    void *ttt;
     //    struct yyguts_t* yyg;
 
     memset(&pp, '\0', sizeof(PARSE_PARM));
     init_symbtab(csound);
 
-    pp.buffer = (char*)csound->Malloc(csound, lMaxBuffer);
+    pp.buffer = (char*)csound->Calloc(csound, lMaxBuffer);
 
     if (UNLIKELY(PARSER_DEBUG)) csound->Message(csound, "Testing...\n");
 
@@ -72,30 +77,36 @@ void new_orc_parser(CSOUND *csound)
 
     csound_orcset_extra(&pp, pp.yyscanner);
 
-    if (UNLIKELY((t = csound->FileOpen2(csound, &ttt, CSFILE_STD,
-                                 csound->orchname, "rb", NULL,
-                                        CSFTYPE_ORCHESTRA, 0)) == NULL)) {
-    	csound->Free(csound, pp.buffer);
-    	csoundDie(csound, Str("cannot open orch file %s"), csound->orchname);
-    }
-    csound_orcset_in(ttt, pp.yyscanner);
-    csound_orcrestart(ttt, pp.yyscanner);
-    csound_orcset_lineno(csound->orcLineOffset, pp.yyscanner);
+    csound_orc_scan_string(corfile_body(csound->orchstr), pp.yyscanner);
+    /*     These relate to file input only       */
+    /*     csound_orcset_in(ttt, pp.yyscanner); */
+    /*     csound_orcrestart(ttt, pp.yyscanner); */
+    //csound_orcset_lineno(csound->orcLineOffset, pp.yyscanner);
     cs_init_math_constants_macros(csound, pp.yyscanner);
     cs_init_omacros(csound, pp.yyscanner, csound->omacros);
 
     retVal = csound_orcparse(&pp, pp.yyscanner, csound, astTree);
-
+    if (csound->synterrcnt) retVal = 3;
+    if (UNLIKELY(pp.ifdefStack != NULL)) {
+      csound->Message(csound, Str("Unmatched #ifdef\n"));
+      csound->LongJmp(csound, 1);
+    }
     if (LIKELY(retVal == 0)) {
       csound->Message(csound, "Parsing successful!\n");
     }
-    else if (retVal == 1){
-      csound->Message(csound, "Parsing failed due to invalid input!\n");
-    }
-    else if (retVal == 2){
-      csound->Message(csound, "Parsing failed due to memory exhaustion!\n");
+    else {
+      if (retVal == 1){
+        csound->Message(csound, "Parsing failed due to invalid input!\n");
+      }
+      else if (retVal == 2){
+        csound->Message(csound, "Parsing failed due to memory exhaustion!\n");
+      }
+      else if (retVal == 3){
+        csound->Message(csound, "Parsing failed due to %d syntax error%s!\n",
+                        csound->synterrcnt, csound->synterrcnt==1?"":"s");
+      }
+      goto ending;
     }
-
     if (UNLIKELY(PARSER_DEBUG)) {
       print_tree(csound, "AST - INITIAL\n", astTree);
     }
@@ -124,6 +135,10 @@ void new_orc_parser(CSOUND *csound)
     astTree = csound_orc_optimize(csound, astTree);
     csound_orc_compile(csound, astTree);
 
+ ending:
     csound->Free(csound, pp.buffer);
+    corfile_rm(&csound->orchstr);
+    csound_orclex_destroy(pp.yyscanner);
+    return retVal;
 }
 
diff --git a/Engine/otran.c b/Engine/otran.c
index b29e930..0e8b359 100644
--- a/Engine/otran.c
+++ b/Engine/otran.c
@@ -30,6 +30,7 @@
 #include "insert.h"
 #include "pstream.h"
 #include "namedins.h"           /* IV - Oct 31 2002 */
+#include "corfile.h"
 
 typedef struct NAME_ {
     char          *namep;
@@ -108,13 +109,13 @@ static int parse_opcode_args(CSOUND *csound, OENTRY *opc)
     OPCODINFO   *inm = (OPCODINFO*) opc->useropinfo;
     char    *types, *otypes;
     int     i, i_incnt, a_incnt, k_incnt, i_outcnt, a_outcnt, k_outcnt, err;
-    int     S_incnt, S_outcnt, f_outcnt, f_incnt;
+    int     S_incnt, S_outcnt, f_outcnt, f_incnt, t_incnt, t_outcnt;
     int16   *a_inlist, *k_inlist, *i_inlist, *a_outlist, *k_outlist, *i_outlist;
-    int16   *S_inlist, *S_outlist, *f_inlist, *f_outlist;
+    int16   *S_inlist, *S_outlist, *f_inlist, *f_outlist, *t_inlist, *t_outlist;
 
     /* count the number of arguments, and check types */
     i = i_incnt = S_incnt = a_incnt = k_incnt = f_incnt = f_outcnt =
-        i_outcnt = S_outcnt = a_outcnt = k_outcnt = err = 0;
+        i_outcnt = S_outcnt = a_outcnt = k_outcnt = t_incnt = t_outcnt = err = 0;
     types = inm->intypes; otypes = opc->intypes;
     opc->dsblksiz = (uint16) sizeof(UOPCODE);
     if (!strcmp(types, "0"))
@@ -132,6 +133,9 @@ static int parse_opcode_args(CSOUND *csound, OENTRY *opc)
       case 'f':
         f_incnt++; *otypes++ = *types;
         break;
+      case 't':
+          t_incnt++; *otypes++ = *types;
+          break;              
       case 'i':
       case 'o':
       case 'p':
@@ -153,7 +157,7 @@ static int parse_opcode_args(CSOUND *csound, OENTRY *opc)
     }
     *otypes++ = 'o'; *otypes = '\0';    /* optional arg for local ksmps */
     inm->inchns = i;                    /* total number of input chnls */
-    inm->perf_incnt = a_incnt + k_incnt + f_incnt;
+    inm->perf_incnt = a_incnt + k_incnt + f_incnt + t_incnt;
     opc->dsblksiz += (uint16) (sizeof(MYFLT*) * i);
     /* same for outputs */
     i = 0;
@@ -177,6 +181,9 @@ static int parse_opcode_args(CSOUND *csound, OENTRY *opc)
       case 'f':
         f_outcnt++; *otypes++ = *types;
         break;
+      case 't':
+        t_outcnt++; *otypes++ = *types;
+        break;              
       case 'i':
         i_outcnt++; *otypes++ = *types;
         break;
@@ -191,7 +198,7 @@ static int parse_opcode_args(CSOUND *csound, OENTRY *opc)
     }
     *otypes = '\0';
     inm->outchns = i;                   /* total number of output chnls */
-    inm->perf_outcnt = a_outcnt + k_outcnt + f_outcnt;
+    inm->perf_outcnt = a_outcnt + k_outcnt + f_outcnt + t_outcnt;
     opc->dsblksiz += (uint16) (sizeof(MYFLT*) * i);
     opc->dsblksiz = ((opc->dsblksiz + (uint16) 15)
                      & (~((uint16) 15)));   /* align (needed ?) */
@@ -199,17 +206,19 @@ static int parse_opcode_args(CSOUND *csound, OENTRY *opc)
     i = i_incnt + S_incnt + inm->perf_incnt +
         i_outcnt + S_outcnt + inm->perf_outcnt;
     i_inlist = inm->in_ndx_list = (int16*) mmalloc(csound,
-                                                   sizeof(int16) * (i + 10));
+                                                   sizeof(int16) * (i + 14));
     S_inlist = i_inlist + i_incnt + 1;
     a_inlist = S_inlist + S_incnt + 1;
     k_inlist = a_inlist + a_incnt + 1;
     f_inlist = k_inlist + k_incnt + 1;
+    t_inlist = f_inlist + f_incnt + 1;    
     i = 0; types = inm->intypes;
     while (*types) {
       switch (*types++) {
         case 'a': *a_inlist++ = i; break;
         case 'k': *k_inlist++ = i; break;
         case 'f': *f_inlist++ = i; break;
+        case 't': *t_inlist++ = i; break;      
         case 'K': *k_inlist++ = i;      /* also updated at i-time */
         case 'i':
         case 'o':
@@ -219,25 +228,28 @@ static int parse_opcode_args(CSOUND *csound, OENTRY *opc)
       }
       i++;
     }
-    *i_inlist = *S_inlist = *a_inlist = *k_inlist = *f_inlist = -1;     /* put delimiters */
-    i_outlist = inm->out_ndx_list = f_inlist + 1;
+    *i_inlist = *S_inlist = *a_inlist = *k_inlist = *f_inlist = *t_inlist = -1;     /* put delimiters */
+    i_outlist = inm->out_ndx_list = t_inlist + 1;
     S_outlist = i_outlist + i_outcnt + 1;
     a_outlist = S_outlist + S_outcnt + 1;
     k_outlist = a_outlist + a_outcnt + 1;
     f_outlist = k_outlist + k_outcnt + 1;
+    t_outlist = f_outlist + f_outcnt + 1;    
     i = 0; types = inm->outtypes;
     while (*types) {
       switch (*types++) {
         case 'a': *a_outlist++ = i; break;
         case 'k': *k_outlist++ = i; break;
         case 'f': *f_outlist++ = i; break;
+        case 't': *t_outlist++ = i; break;      
         case 'K': *k_outlist++ = i;     /* also updated at i-time */
         case 'i': *i_outlist++ = i; break;
         case 'S': *S_outlist++ = i; break;
       }
       i++;
     }
-    *i_outlist = *S_outlist = *a_outlist = *k_outlist = *f_outlist = -1;  /* put delimiters */
+    *i_outlist = *S_outlist = *a_outlist = *k_outlist =
+      *f_outlist = *t_outlist = -1;  /* put delimiters */
     return err;
 }
 
@@ -285,6 +297,7 @@ void otran(CSOUND *csound)
     gblnamset(csound, "$ksmps");
 
     rdorchfile(csound);         /* go read orch file    */
+    corfile_rm(&(csound->orchstr));
 
     csound->pool = (MYFLT*) mmalloc(csound, NCONSTS * sizeof(MYFLT));
     ST(poolcount) = 0;
@@ -352,7 +365,8 @@ void otran(CSOUND *csound)
                     err++; continue;
                   }
                   /* IV - Oct 31 2002: store the name */
-                  if (UNLIKELY(!named_instr_alloc(csound, c, ip, insno_priority))) {
+                  if (UNLIKELY(!named_instr_alloc(csound, c, ip,
+                                                  insno_priority))) {
                     synterr(csound, Str("instr %s redefined"), c);
                     err++; continue;
                   }
@@ -568,7 +582,8 @@ void otran(CSOUND *csound)
       else if (UNLIKELY(p->tran_ksmps < FL(0.75) ||
                         FLOAT_COMPARE(p->tran_ksmps, MYFLT2LRND(p->tran_ksmps))))
         synterr(p, Str("%s invalid ksmps value"), err_msg);
-      else if (UNLIKELY(FLOAT_COMPARE(p->tran_sr, (double) p->tran_kr * p->tran_ksmps)))
+      else if (UNLIKELY(FLOAT_COMPARE(p->tran_sr,
+                                      (double) p->tran_kr * p->tran_ksmps)))
         synterr(p, Str("%s inconsistent sr, kr, ksmps"), err_msg);
     }
 
@@ -976,12 +991,16 @@ int lgexist(CSOUND *csound, const char *s)
 {
     unsigned char h = name_hash(csound, s);
     NAME          *p;
+ 
+    
 
     for (p = ST(gblNames)[h]; p != NULL && sCmp(p->namep, s); p = p->nxt);
     if (p != NULL)
       return 1;
     for (p = ST(lclNames)[h]; p != NULL && sCmp(p->namep, s); p = p->nxt);
+  
     return (p == NULL ? 0 : 1);
+
 }
 
 /* builds namelist & type counts for gbl names */
diff --git a/Engine/parse_param.h b/Engine/parse_param.h
index 5a589f7..387be22 100644
--- a/Engine/parse_param.h
+++ b/Engine/parse_param.h
@@ -16,6 +16,15 @@ typedef struct MACRO {          /* To store active macros */
     char          *arg[MARGS];  /* With these arguments */
 } MACRO;
 
+typedef struct IFDEFSTACK_ {
+    struct IFDEFSTACK_  *prv;
+    unsigned char   isDef;      /* non-zero if #ifdef is true, or #ifndef   */
+                                /*   is false                               */
+    unsigned char   isElse;     /* non-zero between #else and #endif        */
+    unsigned char   isSkip;     /* sum of: 1: skipping code due to this     */
+                                /*   #ifdef, 2: skipping due to parent      */
+} IFDEFSTACK;
+
 typedef struct parse_parm_s {
     void            *yyscanner;
     char            *buffer;
@@ -30,6 +39,10 @@ typedef struct parse_parm_s {
     unsigned int macro_stack_ptr;
     char            *xstrbuff;
     int             xstrptr,xstrmax;
+    IFDEFSTACK      *ifdefStack;
+    unsigned char   isIfndef;
+    unsigned char   isInclude;
+    unsigned char   clearBufferAfterEOF;
 } PARSE_PARM;
 
 #define lMaxBuffer (1000)
diff --git a/Engine/rdorch.c b/Engine/rdorch.c
index 217b577..7c2ebe6 100644
--- a/Engine/rdorch.c
+++ b/Engine/rdorch.c
@@ -1,24 +1,24 @@
 /*
-    rdorch.c:
+  rdorch.c:
 
-    Copyright (C) 1991-2002 Barry Vercoe, John ffitch, Istvan Varga
+  Copyright (C) 1991-2002 Barry Vercoe, John ffitch, Istvan Varga
 
-    This file is part of Csound.
+  This file is part of Csound.
 
-    The Csound Library is free software; you can redistribute it
-    and/or modify it under the terms of the GNU Lesser General Public
-    License as published by the Free Software Foundation; either
-    version 2.1 of the License, or (at your option) any later version.
+  The Csound Library is free software; you can redistribute it
+  and/or modify it under the terms of the GNU Lesser General Public
+  License as published by the Free Software Foundation; either
+  version 2.1 of the License, or (at your option) any later version.
 
-    Csound 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 Lesser General Public License for more details.
+  Csound 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 Lesser General Public License for more details.
 
-    You should have received a copy of the GNU Lesser General Public
-    License along with Csound; if not, write to the Free Software
-    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-    02111-1307 USA
+  You should have received a copy of the GNU Lesser General Public
+  License along with Csound; if not, write to the Free Software
+  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+  02111-1307 USA
 */
 
 #include "csoundCore.h"         /*                      RDORCH.C        */
@@ -27,6 +27,7 @@
 #include "typetabl.h"   /* IV - Oct 31 2002 */
 #include "envvar.h"
 #include <stddef.h>
+#include "corfile.h"
 
 #ifdef sun
 #define   SEEK_SET        0
@@ -39,98 +40,100 @@
 #define GRPMAX    VARGMAX
 #define LBLMAX    100
 
+//#define MACDEBUG (1)
+
 typedef struct  {
-        int     reqline;
-        char    *label;
+  int     reqline;
+  char    *label;
 } LBLREQ;
 
 #define MARGS   (3)
 
 typedef struct MACRO {          /* To store active macros */
-    char          *name;        /* Use is by name */
-    int           acnt;         /* Count of arguments */
-    char          *body;        /* The text of the macro */
-    struct MACRO  *next;        /* Chain of active macros */
-    int           margs;        /* amount of space for args */
-    char          *arg[MARGS];  /* With these arguments */
+  char          *name;        /* Use is by name */
+  int           acnt;         /* Count of arguments */
+  char          *body;        /* The text of the macro */
+  struct MACRO  *next;        /* Chain of active macros */
+  int           margs;        /* amount of space for args */
+  char          *arg[MARGS];  /* With these arguments */
 } MACRO;
 
 typedef struct in_stack {
-    int16   string;
-    int16   args;
-    char    *body;
-    FILE    *file;
-    void    *fd;
-    MACRO   *mac;
-    int     line;
-    int     unget_cnt;
-    char    unget_buf[128];
+  int16   string;
+  int16   args;
+  char    *body;
+  FILE    *file;
+  void    *fd;
+  MACRO   *mac;
+  int     line;
+  int     unget_cnt;
+  char    unget_buf[128];
 } IN_STACK;
 
 typedef struct iflabel {            /* for if/else/endif */
-    char    els[256];
-    char    end[256];
-    /* is the conditional valid at i-time ? 0: no, 1: yes, -1: unknown */
-    int     ithen;
-    struct  iflabel *prv;
+  char    els[256];
+  char    end[256];
+  /* is the conditional valid at i-time ? 0: no, 1: yes, -1: unknown */
+  int     ithen;
+  struct  iflabel *prv;
 } IFLABEL;
 
 typedef struct IFDEFSTACK_ {
-    struct IFDEFSTACK_  *prv;
-    unsigned char   isDef;      /* non-zero if #ifdef is true, or #ifndef   */
-                                /*   is false                               */
-    unsigned char   isElse;     /* non-zero between #else and #endif        */
-    unsigned char   isSkip;     /* sum of: 1: skipping code due to this     */
-                                /*   #ifdef, 2: skipping due to parent      */
+  struct IFDEFSTACK_  *prv;
+  unsigned char   isDef;      /* non-zero if #ifdef is true, or #ifndef   */
+  /*   is false                               */
+  unsigned char   isElse;     /* non-zero between #else and #endif        */
+  unsigned char   isSkip;     /* sum of: 1: skipping code due to this     */
+  /*   #ifdef, 2: skipping due to parent      */
 } IFDEFSTACK;
 
 typedef struct {
-    MACRO   *macros;
-    int32    lenmax /* = LENMAX */;  /* Length of input line buffer  */
-    char    *ortext;
-    char    **linadr;               /* adr of each line in text     */
-    int     curline;                /* current line being examined  */
-    char    *collectbuf;            /* splitline collect buffer     */
-    char    **group;                /* splitline local storage      */
-    char    **grpsav;               /* copy of above                */
-    int32    grpmax /* = GRPMAX */;  /* Size of group structure      */
-    int     opgrpno;                /* grpno identified as opcode   */
-    int     linopnum;               /* data for opcode in this line */
-    char    *linopcod;
-    int     linlabels;              /* count of labels this line    */
-    LBLREQ  *lblreq;
-    int     lblmax;
-    int     lblcnt;
-    int     lgprevdef;
-    int     opnum;                  /* opcod data carriers          */
-    char    *opcod;                 /*  (line or subline)           */
-    ARGLST  *nxtarglist, *nullist;
-    IN_STACK  *inputs, *str;
-    FILE    *fp;
-    void    *fd;
-    int     input_size, input_cnt;
-    int     pop;                    /* Number of macros to pop      */
-    int     ingappop /* = 1 */;
-    int     linepos /* = -1 */;
-    int32    *typemask_tabl;
-    int32    *typemask_tabl_in, *typemask_tabl_out;
-    int32    orchsiz;
-    IFLABEL *iflabels;
-    int     repeatingElseifLine;
-    int32    tempNum /* = 300L */;
-    int     repeatingElseLine;
-    int16   grpcnt, nxtest /* = 1 */;
-    int16   xprtstno, polcnt;
-    int16   instrblk, instrcnt;
-    int16   opcodblk;               /* IV - Sep 8 2002 */
-    int16   opcodflg;               /* 1: xin, 2: xout, 4: setksmps */
-    IFDEFSTACK  *ifdefStack;
-    TEXT    optext;                 /* struct to be passed back to caller */
+  MACRO   *macros;
+  int32    lenmax /* = LENMAX */;  /* Length of input line buffer  */
+  char    *ortext;
+  char    **linadr;               /* adr of each line in text     */
+  int     curline;                /* current line being examined  */
+  char    *collectbuf;            /* splitline collect buffer     */
+  char    **group;                /* splitline local storage      */
+  char    **grpsav;               /* copy of above                */
+  int32    grpmax /* = GRPMAX */;  /* Size of group structure      */
+  int     opgrpno;                /* grpno identified as opcode   */
+  int     linopnum;               /* data for opcode in this line */
+  char    *linopcod;
+  int     linlabels;              /* count of labels this line    */
+  LBLREQ  *lblreq;
+  int     lblmax;
+  int     lblcnt;
+  int     lgprevdef;
+  int     opnum;                  /* opcod data carriers          */
+  char    *opcod;                 /*  (line or subline)           */
+  ARGLST  *nxtarglist, *nullist;
+  IN_STACK  *inputs, *str;
+  FILE    *fp;
+  void    *fd;
+  int     input_size, input_cnt;
+  int     pop;                    /* Number of macros to pop      */
+  int     ingappop /* = 1 */;
+  int     linepos /* = -1 */;
+  int32    *typemask_tabl;
+  int32    *typemask_tabl_in, *typemask_tabl_out;
+  int32    orchsiz;
+  IFLABEL *iflabels;
+  int     repeatingElseifLine;
+  int32    tempNum /* = 300L */;
+  int     repeatingElseLine;
+  int16   grpcnt, nxtest /* = 1 */;
+  int16   xprtstno, polcnt;
+  int16   instrblk, instrcnt;
+  int16   opcodblk;               /* IV - Sep 8 2002 */
+  int16   opcodflg;               /* 1: xin, 2: xout, 4: setksmps */
+  IFDEFSTACK  *ifdefStack;
+  TEXT    optext;                 /* struct to be passed back to caller */
 } RDORCH_GLOBALS;
 
 #define ST(x)   (((RDORCH_GLOBALS*) csound->rdorchGlobals)->x)
 #define CURLINE (csound->oparms->useCsdLineCounts ? \
-                  csound->orcLineOffset + ST(curline) : ST(curline))
+                 csound->orcLineOffset + ST(curline) : ST(curline))
 
 static  void    intyperr(CSOUND *, int, char, char);
 static  void    printgroups(CSOUND *, int);
@@ -142,17 +145,17 @@ static  void    synterrp(CSOUND *, const char *, char *);
 
 static ARGLST *copy_arglist(CSOUND *csound, ARGLST *old)
 {
-    size_t n = sizeof(ARGLST) + old->count * sizeof(char*) - sizeof(char*);
-    ARGLST *nn = (ARGLST*) mmalloc(csound, n);
-    memcpy(nn, old, n);
-    memset(old, 0, n);
-    return nn;
+  size_t n = sizeof(ARGLST) + old->count * sizeof(char*) - sizeof(char*);
+  ARGLST *nn = (ARGLST*) mmalloc(csound, n);
+  memcpy(nn, old, n);
+  memset(old, 0, n);
+  return nn;
 }
 
 static inline int isNameChar(int c, int pos)
 {
-    c = (int) ((unsigned char) c);
-    return (isalpha(c) || (pos && (c == '_' || isdigit(c))));
+  c = (int) ((unsigned char) c);
+  return (isalpha(c) || (pos && (c == '_' || isdigit(c))));
 }
 
 /* Functions to read/unread chracters from
@@ -160,879 +163,903 @@ static inline int isNameChar(int c, int pos)
 
 static inline void ungetorchar(CSOUND *csound, int c)
 {
-    if (LIKELY(ST(str)->unget_cnt < 128))
-      ST(str)->unget_buf[ST(str)->unget_cnt++] = (char) c;
-    else
-      csoundDie(csound, Str("ungetorchar(): buffer overflow"));
+  if (LIKELY(ST(str)->unget_cnt < 128))
+    ST(str)->unget_buf[ST(str)->unget_cnt++] = (char) c;
+  else
+    csoundDie(csound, Str("ungetorchar(): buffer overflow"));
 }
 
 static int skiporccomment(CSOUND *csound)
 {
-    int c;
-    int mode = 0;               /* Mode = 1 after / character */
-    int srccnt = 0;
+  int c;
+  int mode = 0;               /* Mode = 1 after / character */
+  int srccnt = 0;
  top:
-    if (ST(str)->unget_cnt) {
-      c = (int) ((unsigned char) ST(str)->unget_buf[--ST(str)->unget_cnt]);
-    }
-    else if (ST(str)->string) {
-      c = *ST(str)->body++;
-      if (c == '\0') {
-        ST(pop) += ST(str)->args;
-        ST(str)--; ST(input_cnt)--;
+  if (ST(str)->unget_cnt) {
+    c = (int) ((unsigned char) ST(str)->unget_buf[--ST(str)->unget_cnt]);
+  }
+  else if (ST(str)->string) {
+    c = *ST(str)->body++;
+    if (c == '\0') {
+      ST(pop) += ST(str)->args;
+      ST(str)--; ST(input_cnt)--;
+      ST(linepos) = -1;
+      return srccnt;
+    }
+  }
+  else {
+    c = getc(ST(str)->file);
+    if (c == EOF) {
+      if (ST(str) == &ST(inputs)[0]) {
         ST(linepos) = -1;
         return srccnt;
       }
-    }
-    else {
-      c = getc(ST(str)->file);
-      if (c == EOF) {
-        if (ST(str) == &ST(inputs)[0]) {
-          ST(linepos) = -1;
-          return srccnt;
-        }
-        if (ST(str)->fd != NULL) {
-          csound->FileClose(csound, ST(str)->fd); ST(str)->fd = NULL;
-        }
-        ST(str)--; ST(input_cnt)--;
-        ST(str)->line++; ST(linepos) = -1;
-        return srccnt;
+      if (ST(str)->fd != NULL) {
+        csound->FileClose(csound, ST(str)->fd); ST(str)->fd = NULL;
       }
-    }
-    if (c == '*') mode = 1;     /* look for end of comment */
-    else if (c == '/' && mode == 1) {
-      return srccnt;
-    }
-    else mode = 0;
-    if (c == '\n') {
+      ST(str)--; ST(input_cnt)--;
       ST(str)->line++; ST(linepos) = -1;
-      srccnt++;
+      return srccnt;
     }
-    goto top;
+  }
+  if (c == '*') mode = 1;     /* look for end of comment */
+  else if (c == '/' && mode == 1) {
+    return srccnt;
+  }
+  else mode = 0;
+  if (c == '\n') {
+    ST(str)->line++; ST(linepos) = -1;
+    srccnt++;
+  }
+  goto top;
 }
 
 static void skiporchar(CSOUND *csound)
 {
-    int c;
+  int c;
  top:
-    if (UNLIKELY(ST(str)->unget_cnt)) {
-      c = (int) ((unsigned char) ST(str)->unget_buf[--ST(str)->unget_cnt]);
-      if (c == '\n') {
-        ST(linepos) = -1;
-        return;
-      }
-      goto top;
+  if (UNLIKELY(ST(str)->unget_cnt)) {
+    c = (int) ((unsigned char) ST(str)->unget_buf[--ST(str)->unget_cnt]);
+    if (c == '\n') {
+      ST(linepos) = -1;
+      return;
     }
-    else if (ST(str)->string) {
-      c = *ST(str)->body++;
-      if (c == '\n') {
-        ST(str)->line++; ST(linepos) = -1;
-        return;
-      }
-      if (c == '\0') {
-        ST(pop) += ST(str)->args;
-        ST(str)--; ST(input_cnt)--;
-        ST(linepos) = -1;
-        return;
-      }
+    goto top;
+  }
+  else if (ST(str)->string) {
+    c = *ST(str)->body++;
+    if (c == '\n') {
+      ST(str)->line++; ST(linepos) = -1;
+      return;
     }
-    else {
-      c = getc(ST(str)->file);
-      if (c == '\n' || c == '\r' || c == 26) {    /* MS-DOS spare ^Z */
-        ST(str)->line++; ST(linepos) = -1;
-        if (c == '\r') {
-          if ((c = getc(ST(str)->file)) != '\n')
-            ungetc(c, ST(str)->file);
+    if (c == '\0') {
+      ST(pop) += ST(str)->args;
+      ST(str)--; ST(input_cnt)--;
+      ST(linepos) = -1;
+      return;
+    }
+  }
+  else {
+    c = getc(ST(str)->file);
+    if (c == '\n' || c == '\r' || c == 26) {    /* MS-DOS spare ^Z */
+      ST(str)->line++; ST(linepos) = -1;
+      if (c == '\r') {
+        if (ST(str)->string) {
+          if ((c = *ST(str)->body++) != '\n')
+            ST(str)->body--;
         }
-        return;
+        else if ((c = getc(ST(str)->file)) != '\n')
+          ungetc(c, ST(str)->file);
       }
-      if (UNLIKELY(c == EOF)) {
-        if (ST(str) == &ST(inputs)[0]) {
-          ST(linepos) = -1;
-          return;
-        }
-        if (ST(str)->fd != NULL) {
-          csound->FileClose(csound, ST(str)->fd); ST(str)->fd = NULL;
-        }
-        ST(str)--; ST(input_cnt)--;
-        ST(str)->line++; ST(linepos) = -1;
+      return;
+    }
+    if (UNLIKELY(c == EOF)) {
+      if (ST(str) == &ST(inputs)[0]) {
+        ST(linepos) = -1;
         return;
       }
+      if (ST(str)->fd != NULL) {
+        csound->FileClose(csound, ST(str)->fd); ST(str)->fd = NULL;
+      }
+      ST(str)--; ST(input_cnt)--;
+      ST(str)->line++; ST(linepos) = -1;
+      return;
     }
-    ST(linepos)++;
-    goto top;
+  }
+  ST(linepos)++;
+  goto top;
 }
 
 static int getorchar(CSOUND *csound)
 {
-    int c;
+  int c;
  top:
-    if (UNLIKELY(ST(str)->unget_cnt)) {
-      c = (int) ((unsigned char) ST(str)->unget_buf[--ST(str)->unget_cnt]);
-      if (c == '\n')
-        ST(linepos) = -1;
-      return c;
-    }
-    else if (ST(str)->string) {
-      c = *ST(str)->body++;
-      if (UNLIKELY(c == '\0')) {
-        ST(pop) += ST(str)->args;
-        ST(str)--; ST(input_cnt)--;
-        goto top;
-      }
+  if (UNLIKELY(ST(str)->unget_cnt)) {
+    c = (int) ((unsigned char) ST(str)->unget_buf[--ST(str)->unget_cnt]);
+    if (c == '\n')
+      ST(linepos) = -1;
+    //    printf("%s(%d): %c(%.2x)\n", __FILE__, __LINE__, c,c);
+    return c;
+  }
+  else if (ST(str)->string) {
+    c = *ST(str)->body++;
+    if (UNLIKELY(c == '\0')) {
+      if (ST(str) == &ST(inputs)[0]) {
+        //corfile_rm(&(csound->orchstr));
+        //        printf("%s(%d): EOF\n", __FILE__, __LINE__);
+        return EOF;
+      }
+      ST(pop) += ST(str)->args;
+      ST(str)--; ST(input_cnt)--;
+      goto top;
     }
-    else {
-      c = getc(ST(str)->file);
-      if (UNLIKELY(c == 26)) goto top;    /* MS-DOS spare ^Z */
-      if (UNLIKELY(c == EOF)) {
-        if (ST(str) == &ST(inputs)[0]) return EOF;
-        if (ST(str)->fd != NULL) {
-          csound->FileClose(csound, ST(str)->fd); ST(str)->fd = NULL;
-        }
-        ST(str)--; ST(input_cnt)--; goto top;
-      }
+  }
+  else {
+    c = getc(ST(str)->file);
+    if (UNLIKELY(c == 26)) goto top;    /* MS-DOS spare ^Z */
+    if (UNLIKELY(c == EOF)) {
+      if (ST(str) == &ST(inputs)[0]) return EOF;
+      if (ST(str)->fd != NULL) {
+        csound->FileClose(csound, ST(str)->fd); ST(str)->fd = NULL;
+      }
+      ST(str)--; ST(input_cnt)--; goto top;
     }
-    if (c == '\r') {
-      int d;
-      if ((d = getc(ST(str)->file)) != '\n') {
-        ungetc(d, ST(str)->file);
-      }
-      c = '\n';
+  }
+  if (c == '\r') {
+    int d;
+    if (ST(str)->string) {
+      if ((d = *ST(str)->body++) != '\n')
+        ST(str)->body--;
     }
-    if (c == '\n') {
-      ST(str)->line++; ST(linepos) = -1;
+    else if ((d = getc(ST(str)->file)) != '\n') {
+      ungetc(d, ST(str)->file);
     }
-    else ST(linepos)++;
-    if (ST(ingappop) && ST(pop)) {
-      do {
-        MACRO *nn = ST(macros)->next;
-        int i;
+    c = '\n';
+  }
+  if (c == '\n') {
+    ST(str)->line++; ST(linepos) = -1;
+  }
+  else ST(linepos)++;
+  if (ST(ingappop) && ST(pop)) {
+    do {
+      MACRO *nn = ST(macros)->next;
+      int i;
 #ifdef MACDEBUG
-        csound->Message(csound, "popping %s\n", ST(macros)->name);
+      csound->Message(csound, "popping %s\n", ST(macros)->name);
 #endif
-        mfree(csound, ST(macros)->name); mfree(csound, ST(macros)->body);
-        for (i=0; i<ST(macros)->acnt; i++)
-          mfree(csound, ST(macros)->arg[i]);
-        mfree(csound, ST(macros));
-        ST(macros) = nn;
-        ST(pop)--;
-      } while (ST(pop));
-    }
-    return c;
+      mfree(csound, ST(macros)->name); mfree(csound, ST(macros)->body);
+      for (i=0; i<ST(macros)->acnt; i++)
+        mfree(csound, ST(macros)->arg[i]);
+      mfree(csound, ST(macros));
+      ST(macros) = nn;
+      ST(pop)--;
+    } while (ST(pop));
+  }
+  //  printf("%s(%d): %c(%.2x)\n", __FILE__, __LINE__, c,c);
+  return c;
 }
 
 static int getorchar_noeof(CSOUND *csound)
 {
-    int     c;
+  int     c;
 
-    c = getorchar(csound);
-    if (UNLIKELY(c == EOF))
-      lexerr(csound, Str("Unexpected end of orchestra file"));
-    return c;
+  c = getorchar(csound);
+  if (UNLIKELY(c == EOF))
+    lexerr(csound, Str("Unexpected end of orchestra file"));
+  return c;
 }
 
 /* The fromScore parameter should be 1 if opening a score include file,
    0 if opening an orchestra include file */
 void *fopen_path(CSOUND *csound, FILE **fp, char *name, char *basename,
-                                  char *env, int fromScore)
+                 char *env, int fromScore)
 {
-    void *fd;
-    int  csftype = (fromScore ? CSFTYPE_SCO_INCLUDE : CSFTYPE_ORC_INCLUDE);
-
-                                /* First try to open name given */
-    fd = csound->FileOpen2(csound, fp, CSFILE_STD, name, "rb", NULL,
-                                             csftype, 0);
-    if (fd != NULL)
-      return fd;
-                                /* if that fails try in base directory */
-    if (basename != NULL) {
-      char *dir, *name_full;
-      if ((dir = csoundSplitDirectoryFromPath(csound, basename)) != NULL) {
-          name_full = csoundConcatenatePaths(csound, dir, name);
-          fd = csound->FileOpen2(csound, fp, CSFILE_STD, name_full, "rb", NULL,
-                                             csftype, 0);
-          mfree(csound, dir);
-          mfree(csound, name_full);
-          if (fd != NULL)
-            return fd;
-      }
-    }
-                                /* or use env argument */
-    fd = csound->FileOpen2(csound, fp, CSFILE_STD, name, "rb", env,
-                                             csftype, 0);
+  void *fd;
+  int  csftype = (fromScore ? CSFTYPE_SCO_INCLUDE : CSFTYPE_ORC_INCLUDE);
+
+  /* First try to open name given */
+  fd = csound->FileOpen2(csound, fp, CSFILE_STD, name, "rb", NULL,
+                         csftype, 0);
+  if (fd != NULL)
     return fd;
+  /* if that fails try in base directory */
+  if (basename != NULL) {
+    char *dir, *name_full;
+    if ((dir = csoundSplitDirectoryFromPath(csound, basename)) != NULL) {
+      name_full = csoundConcatenatePaths(csound, dir, name);
+      fd = csound->FileOpen2(csound, fp, CSFILE_STD, name_full, "rb", NULL,
+                             csftype, 0);
+      mfree(csound, dir);
+      mfree(csound, name_full);
+      if (fd != NULL)
+        return fd;
+    }
+  }
+  /* or use env argument */
+  fd = csound->FileOpen2(csound, fp, CSFILE_STD, name, "rb", env,
+                         csftype, 0);
+  return fd;
 }
 
 static void add_math_const_macro(CSOUND *csound, char * name, char *body)
 {
-    MACRO *mm;
-
-    mm = (MACRO*) mcalloc(csound, sizeof(MACRO));
-    mm->name = (char*) mcalloc(csound, strlen(name) + 3);
-    sprintf(mm->name, "M_%s", name);
-    mm->next = ST(macros);
-    ST(macros) = mm;
-    mm->margs = MARGS;    /* Initial size */
-    mm->acnt = 0;
-    mm->body = (char*) mcalloc(csound, strlen(body) + 1);
-    mm->body = strcpy(mm->body, body);
+  MACRO *mm;
+
+  mm = (MACRO*) mcalloc(csound, sizeof(MACRO));
+  mm->name = (char*) mcalloc(csound, strlen(name) + 3);
+  sprintf(mm->name, "M_%s", name);
+  mm->next = ST(macros);
+  ST(macros) = mm;
+  mm->margs = MARGS;    /* Initial size */
+  mm->acnt = 0;
+  mm->body = (char*) mcalloc(csound, strlen(body) + 1);
+  mm->body = strcpy(mm->body, body);
 }
 
 /**
  * Add math constants from math.h as orc macros
  */
 static void init_math_constants_macros(CSOUND *csound)
- {
-     add_math_const_macro(csound, "E", "2.7182818284590452354");
-     add_math_const_macro(csound, "LOG2E", "1.4426950408889634074");
-     add_math_const_macro(csound, "LOG10E", "0.43429448190325182765");
-     add_math_const_macro(csound, "LN2", "0.69314718055994530942");
-     add_math_const_macro(csound, "LN10", "2.30258509299404568402");
-     add_math_const_macro(csound, "PI", "3.14159265358979323846");
-     add_math_const_macro(csound, "PI_2", "1.57079632679489661923");
-     add_math_const_macro(csound, "PI_4", "0.78539816339744830962");
-     add_math_const_macro(csound, "1_PI", "0.31830988618379067154");
-     add_math_const_macro(csound, "2_PI", "0.63661977236758134308");
-     add_math_const_macro(csound, "2_SQRTPI", "1.12837916709551257390");
-     add_math_const_macro(csound, "SQRT2", "1.41421356237309504880");
-     add_math_const_macro(csound, "SQRT1_2", "0.70710678118654752440");
-     add_math_const_macro(csound, "INF", "2147483647.0"); /* ~7 years */
+{
+  add_math_const_macro(csound, "E", "2.7182818284590452354");
+  add_math_const_macro(csound, "LOG2E", "1.4426950408889634074");
+  add_math_const_macro(csound, "LOG10E", "0.43429448190325182765");
+  add_math_const_macro(csound, "LN2", "0.69314718055994530942");
+  add_math_const_macro(csound, "LN10", "2.30258509299404568402");
+  add_math_const_macro(csound, "PI", "3.14159265358979323846");
+  add_math_const_macro(csound, "PI_2", "1.57079632679489661923");
+  add_math_const_macro(csound, "PI_4", "0.78539816339744830962");
+  add_math_const_macro(csound, "1_PI", "0.31830988618379067154");
+  add_math_const_macro(csound, "2_PI", "0.63661977236758134308");
+  add_math_const_macro(csound, "2_SQRTPI", "1.12837916709551257390");
+  add_math_const_macro(csound, "SQRT2", "1.41421356237309504880");
+  add_math_const_macro(csound, "SQRT1_2", "0.70710678118654752440");
+  add_math_const_macro(csound, "INF", "2147483647.0"); /* ~7 years */
 }
 
 static void init_omacros(CSOUND *csound, NAMES *nn)
 {
-    while (nn) {
-      char  *s = nn->mac;
-      char  *p = strchr(s, '=');
-      char  *mname;
-      MACRO *mm;
-
-      if (p == NULL)
-        p = s + strlen(s);
-      if (csound->oparms->msglevel & 7)
-        csound->Message(csound, Str("Macro definition for %*s\n"), p - s, s);
-      s = strchr(s, ':') + 1;                   /* skip arg bit */
-      if (UNLIKELY(s == NULL || s >= p))
-        csound->Die(csound, Str("Invalid macro name for --omacro"));
-      mname = (char*) mmalloc(csound, (p - s) + 1);
-      strncpy(mname, s, p - s);
-      mname[p - s] = '\0';
-      /* check if macro is already defined */
-      for (mm = ST(macros); mm != NULL; mm = mm->next) {
-        if (strcmp(mm->name, mname) == 0)
-          break;
-      }
-      if (mm == NULL) {
-        mm = (MACRO*) mcalloc(csound, sizeof(MACRO));
-        mm->name = mname;
-        mm->next = ST(macros);
-        ST(macros) = mm;
-      }
-      else
-        mfree(csound, mname);
-      mm->margs = MARGS;    /* Initial size */
-      mm->acnt = 0;
-      if (*p != '\0')
-        p++;
-      mm->body = (char*) mmalloc(csound, strlen(p) + 1);
-      strcpy(mm->body, p);
-      nn = nn->next;
+  while (nn) {
+    char  *s = nn->mac;
+    char  *p = strchr(s, '=');
+    char  *mname;
+    MACRO *mm;
+
+    if (p == NULL)
+      p = s + strlen(s);
+    if (csound->oparms->msglevel & 7)
+      csound->Message(csound, Str("Macro definition for %*s\n"), p - s, s);
+    s = strchr(s, ':') + 1;                   /* skip arg bit */
+    if (UNLIKELY(s == NULL || s >= p))
+      csound->Die(csound, Str("Invalid macro name for --omacro"));
+    mname = (char*) mmalloc(csound, (p - s) + 1);
+    strncpy(mname, s, p - s);
+    mname[p - s] = '\0';
+    /* check if macro is already defined */
+    for (mm = ST(macros); mm != NULL; mm = mm->next) {
+      if (strcmp(mm->name, mname) == 0)
+        break;
+    }
+    if (mm == NULL) {
+      mm = (MACRO*) mcalloc(csound, sizeof(MACRO));
+      mm->name = mname;
+      mm->next = ST(macros);
+      ST(macros) = mm;
     }
+    else
+      mfree(csound, mname);
+    mm->margs = MARGS;    /* Initial size */
+    mm->acnt = 0;
+    if (*p != '\0')
+      p++;
+    mm->body = (char*) mmalloc(csound, strlen(p) + 1);
+    strcpy(mm->body, p);
+    nn = nn->next;
+  }
 }
 
 void rdorchfile(CSOUND *csound)     /* read entire orch file into txt space */
 {
-    int     c, lincnt;
-    int     srccnt;
-    char    *cp, *endspace, *ortext;
-    int     linmax = LINMAX;        /* Maximum number of lines      */
-    int     heredoc = 0, openquote = 0;
-
-    if (csound->rdorchGlobals == NULL) {
-      csound->rdorchGlobals = csound->Calloc(csound, sizeof(RDORCH_GLOBALS));
-      ST(lenmax)    = LENMAX;
-      ST(grpmax)    = GRPMAX;
-      ST(ingappop)  = 1;
-      ST(linepos)   = -1;
-      ST(tempNum)   = 300L;
-      ST(nxtest)    = 1;
-    }
-    init_math_constants_macros(csound);
-    init_omacros(csound, csound->omacros);
-    /* IV - Oct 31 2002: create tables for easier checking for common types */
-    if (!ST(typemask_tabl)) {
-      const int32 *ptr = typetabl1;
-      ST(typemask_tabl) = (int32*) mcalloc(csound, sizeof(int32) * 256);
-      ST(typemask_tabl_in) = (int32*) mcalloc(csound, sizeof(int32) * 256);
-      ST(typemask_tabl_out) = (int32*) mcalloc(csound, sizeof(int32) * 256);
-      while (*ptr) {            /* basic types (both for input */
-        int32 pos = *ptr++;      /* and output) */
-        ST(typemask_tabl)[pos] = ST(typemask_tabl_in)[pos] =
-                                 ST(typemask_tabl_out)[pos] = *ptr++;
-      }
-      ptr = typetabl2;
-      while (*ptr) {            /* input types */
-        int32 pos = *ptr++;
-        ST(typemask_tabl_in)[pos] = *ptr++;
-      }
-      ptr = typetabl3;
-      while (*ptr) {            /* output types */
-        int32 pos = *ptr++;
+  int     c, lincnt;
+  int     srccnt;
+  char    *cp, *endspace, *ortext;
+  int     linmax = LINMAX;        /* Maximum number of lines      */
+  int     heredoc = 0, openquote = 0;
+
+  if (csound->rdorchGlobals == NULL) {
+    csound->rdorchGlobals = csound->Calloc(csound, sizeof(RDORCH_GLOBALS));
+    ST(lenmax)    = LENMAX;
+    ST(grpmax)    = GRPMAX;
+    ST(ingappop)  = 1;
+    ST(linepos)   = -1;
+    ST(tempNum)   = 300L;
+    ST(nxtest)    = 1;
+  }
+  init_math_constants_macros(csound);
+  init_omacros(csound, csound->omacros);
+  /* IV - Oct 31 2002: create tables for easier checking for common types */
+  if (!ST(typemask_tabl)) {
+    const int32 *ptr = typetabl1;
+    ST(typemask_tabl) = (int32*) mcalloc(csound, sizeof(int32) * 256);
+    ST(typemask_tabl_in) = (int32*) mcalloc(csound, sizeof(int32) * 256);
+    ST(typemask_tabl_out) = (int32*) mcalloc(csound, sizeof(int32) * 256);
+    while (*ptr) {            /* basic types (both for input */
+      int32 pos = *ptr++;      /* and output) */
+      ST(typemask_tabl)[pos] = ST(typemask_tabl_in)[pos] =
         ST(typemask_tabl_out)[pos] = *ptr++;
-      }
     }
-    csound->Message(csound, Str("orch compiler:\n"));
-    if (UNLIKELY((ST(fd) = csound->FileOpen2(csound, &ST(fp), CSFILE_STD,
-                              csound->orchname, "rb", NULL, CSFTYPE_ORCHESTRA,
-                                             (csound->tempStatus & csOrcMask)!=0)) == NULL))
-      csoundDie(csound, Str("cannot open orch file %s"), csound->orchname);
-    if (UNLIKELY(fseek(ST(fp), 0L, SEEK_END) != 0))
-      csoundDie(csound, Str("cannot find end of file %s"), csound->orchname);
-    if (UNLIKELY((ST(orchsiz) = ftell(ST(fp))) <= 0))
-      csoundDie(csound, Str("ftell error on %s"), csound->orchname);
-    rewind(ST(fp));
-    ST(inputs) = (IN_STACK*) mmalloc(csound, 20 * sizeof(IN_STACK));
-    ST(input_size) = 20;
-    ST(input_cnt) = 0;
-    ST(str) = ST(inputs);
-    ST(str)->string = 0;
-    ST(str)->file = ST(fp);
-    ST(str)->fd = ST(fd);
-    ST(str)->body = csound->orchname;
-    ST(str)->line = 1;
-    ST(str)->unget_cnt = 0;
-    ortext = mmalloc(csound, ST(orchsiz) + 1);          /* alloc mem spaces */
-    ST(linadr) = (char **) mmalloc(csound, (LINMAX + 1) * sizeof(char *));
-    strsav_create(csound);
-    lincnt = srccnt = 1;
-    cp = ST(linadr)[1] = ortext;
-    endspace = ortext + ST(orchsiz) + 1;
-    strsav_string(csound, "sr");
-    ST(group) = (char **)mcalloc(csound, (GRPMAX+1)*sizeof(char*));
-    ST(grpsav)= (char **)mcalloc(csound, (GRPMAX+1)*sizeof(char*));
-    ST(lblreq) = (LBLREQ*)mcalloc(csound, LBLMAX*sizeof(LBLREQ));
-    ST(lblmax) = LBLMAX;
+    ptr = typetabl2;
+    while (*ptr) {            /* input types */
+      int32 pos = *ptr++;
+      ST(typemask_tabl_in)[pos] = *ptr++;
+    }
+    ptr = typetabl3;
+    while (*ptr) {            /* output types */
+      int32 pos = *ptr++;
+      ST(typemask_tabl_out)[pos] = *ptr++;
+    }
+  }
+  csound->Message(csound, Str("orch compiler:\n"));
+  ST(inputs) = (IN_STACK*) mmalloc(csound, 20 * sizeof(IN_STACK));
+  ST(input_size) = 20;
+  ST(input_cnt) = 0;
+  ST(str) = ST(inputs);
+  ST(str)->line = 1;
+  ST(str)->unget_cnt = 0;
+  if (csound->orchstr) {
+    ST(orchsiz) = corfile_length(csound->orchstr);
+    ST(str)->string = 1;
+    ST(str)->body = corfile_body(csound->orchstr);
+    ST(str)->file = NULL;
+    ST(str)->fd = NULL;
+  }
+  else {
+    /* if (UNLIKELY((ST(fd) = csound->FileOpen2(csound, &ST(fp), CSFILE_STD, */
+    /*                         csound->orchname, "rb", NULL, CSFTYPE_ORCHESTRA, */
+    /*                                        (csound->tempStatus & csOrcMask)!=0)) == NULL)) */
+    csoundDie(csound, Str("cannot open orch file %s"), csound->orchname);
+    /* if (UNLIKELY(fseek(ST(fp), 0L, SEEK_END) != 0)) */
+    /*   csoundDie(csound, Str("cannot find end of file %s"), csound->orchname); */
+    /* if (UNLIKELY((ST(orchsiz) = ftell(ST(fp))) <= 0)) */
+    /*   csoundDie(csound, Str("ftell error on %s"), csound->orchname); */
+    /* rewind(ST(fp)); */
+    /* ST(str)->string = 0; */
+    /* ST(str)->file = ST(fp); */
+    /* ST(str)->fd = ST(fd); */
+    /* ST(str)->body = csound->orchname; */
+  }
+  ortext = mmalloc(csound, ST(orchsiz) + 1);          /* alloc mem spaces */
+  ST(linadr) = (char **) mmalloc(csound, (LINMAX + 1) * sizeof(char *));
+  strsav_create(csound);
+  lincnt = srccnt = 1;
+  cp = ST(linadr)[1] = ortext;
+  endspace = ortext + ST(orchsiz) + 1;
+  strsav_string(csound, "sr");
+  ST(group) = (char **)mcalloc(csound, (GRPMAX+1)*sizeof(char*));
+  ST(grpsav)= (char **)mcalloc(csound, (GRPMAX+1)*sizeof(char*));
+  ST(lblreq) = (LBLREQ*)mcalloc(csound, LBLMAX*sizeof(LBLREQ));
+  ST(lblmax) = LBLMAX;
 
  top:
-    while ((c = getorchar(csound)) != EOF) {    /* read entire orch file  */
-      if (cp == endspace-5) {                   /* Must extend */
-        char *orold = ortext;
-        int  i;
-        /* printf("Expand orch: %p (%d) %p -> ", ortext, ST(orchsiz), endspace); */
-        ST(orchsiz) = ST(orchsiz) + (ST(orchsiz) >> 4) + 1L;
-        ST(orchsiz) = (ST(orchsiz) + 511L) & (~511L);
-        ortext = mrealloc(csound, ortext, ST(orchsiz));
-        endspace = ortext + ST(orchsiz) + 1;
-        /* printf("%p (%d) %p\n", ortext, ST(orchsiz), endspace); */
-        if (ortext != orold) {
-          ptrdiff_t adj = ortext - orold;
-          for (i=1; i<=lincnt; i++)
-            ST(linadr)[i] += adj; /* Relocate */
-          cp += adj;
-        }
+  while ((c = getorchar(csound)) != EOF) {    /* read entire orch file  */
+    if (cp == endspace-5) {                   /* Must extend */
+      char *orold = ortext;
+      int  i;
+      /* printf("Expand orch: %p (%d) %p -> ", ortext, ST(orchsiz), endspace); */
+      ST(orchsiz) = ST(orchsiz) + (ST(orchsiz) >> 4) + 1L;
+      ST(orchsiz) = (ST(orchsiz) + 511L) & (~511L);
+      ortext = mrealloc(csound, ortext, ST(orchsiz));
+      endspace = ortext + ST(orchsiz) + 1;
+      /* printf("%p (%d) %p\n", ortext, ST(orchsiz), endspace); */
+      if (ortext != orold) {
+        ptrdiff_t adj = ortext - orold;
+        for (i=1; i<=lincnt; i++)
+          ST(linadr)[i] += adj; /* Relocate */
+        cp += adj;
       }
-      *cp++ = c;
-      if (c == '{' && !openquote) {
-        char  c2 = getorchar(csound);
-        if (c2 == '{') {
-          heredoc = 1;
-          *cp++ = c;
-        }
-        else
-          ungetorchar(csound, c2);
+    }
+    *cp++ = c;
+    if (c == '{' && !openquote) {
+      char  c2 = getorchar(csound);
+      if (c2 == '{') {
+        heredoc = 1;
+        *cp++ = c;
       }
-      else if (c == '}' && heredoc) {
-        char  c2 = getorchar(csound);
-        if (c2 == '}') {
-          heredoc = 0;
-          *cp++ = c;
-        }
-        else
-          ungetorchar(csound, c2);
+      else
+        ungetorchar(csound, c2);
+    }
+    else if (c == '}' && heredoc) {
+      char  c2 = getorchar(csound);
+      if (c2 == '}') {
+        heredoc = 0;
+        *cp++ = c;
       }
-      if (c == ';' && !heredoc) {
+      else
+        ungetorchar(csound, c2);
+    }
+    if (c == ';' && !heredoc) {
+      skiporchar(csound);
+      *(cp - 1) = (char) (c = '\n');
+    }
+    if (c == '"' && !heredoc) {
+      openquote = !openquote;
+    }
+    if (c == '\\' && !heredoc & !openquote) {      /* Continuation ?       */
+      while ((c = getorchar(csound)) == ' ' || c == '\t')
+        ;                                          /* Ignore spaces        */
+      if (c == ';') {                              /* Comments get skipped */
         skiporchar(csound);
-        *(cp - 1) = (char) (c = '\n');
+        c = '\n';
       }
-      if (c == '"' && !heredoc) {
-        openquote = !openquote;
+      if (c == '\n') {
+        cp--;                                      /* Ignore newline */
+        srccnt++;                                  /*    record a fakeline */
+        /* lincnt++; Thsi is wrong */
       }
-      if (c == '\\' && !heredoc & !openquote) {      /* Continuation ?       */
-        while ((c = getorchar(csound)) == ' ' || c == '\t')
-          ;                                          /* Ignore spaces        */
-        if (c == ';') {                              /* Comments get skipped */
-          skiporchar(csound);
-          c = '\n';
-        }
-        if (c == '\n') {
-          cp--;                                      /* Ignore newline */
-          srccnt++;                                  /*    record a fakeline */
-          /* lincnt++; Thsi is wrong */
-        }
-        else {
-          *cp++ = c;
-        }
+      else {
+        *cp++ = c;
       }
-      else if (c == '/') {
-        c = getorchar(csound);
-        if (c=='*') {
-          srccnt += skiporccomment(csound);
-          cp--;                 /* ?? ?? ?? */
-          goto top;
-        }
-        else {
-          ungetorchar(csound, c);
-          c = '/';
-        }
+    }
+    else if (c == '/') {
+      c = getorchar(csound);
+      if (c=='*') {
+        srccnt += skiporccomment(csound);
+        cp--;                 /* ?? ?? ?? */
+        goto top;
       }
-      else if (c == '\n') {                          /* at each new line */
-        char *lp = ST(linadr)[lincnt];
-        /* printf("lincnt=%d; lp=%p, ST(linadr)=%p\n", lincnt, lp, ST(linadr)); */
-        while ((c = *lp) == ' ' || c == '\t')
-          lp++;
-        if (*lp != '\n' && *lp != ';') {
-          ST(curline) = lincnt - 1;
-        }
-        srccnt++;
-        if (++lincnt >= linmax) {
-          linmax += 100;
-          ST(linadr) = (char**) mrealloc(csound, ST(linadr), (linmax + 1)
-                                                             * sizeof(char*));
-        }
-  /*    ST(srclin)[lincnt] = srccnt;    unused  */
-        ST(linadr)[lincnt] = cp;            /* record the adrs */
-      }
-      else if (c == '#' && ST(linepos) == 0 && !heredoc) {
-        /* Start Macro definition */
-        /* also deal with #include here */
-        char  *mname, *preprocName;
-        int mlen = 40;
-        int   i, cnt;
-        mname = (char  *)malloc(mlen);
-        cp--;
- parsePreproc:
-        preprocName = NULL;
-        i = 0;
-        cnt = 0;
-        mname[cnt++] = '#';
+      else {
+        ungetorchar(csound, c);
+        c = '/';
+      }
+    }
+    else if (c == '\n') {                          /* at each new line */
+      char *lp = ST(linadr)[lincnt];
+      /* printf("lincnt=%d; lp=%p, ST(linadr)=%p\n", lincnt, lp, ST(linadr)); */
+      while ((c = *lp) == ' ' || c == '\t')
+        lp++;
+      if (*lp != '\n' && *lp != ';') {
+        ST(curline) = lincnt - 1;
+      }
+      srccnt++;
+      if (++lincnt >= linmax) {
+        linmax += 100;
+        ST(linadr) = (char**) mrealloc(csound, ST(linadr), (linmax + 1)
+                                       * sizeof(char*));
+      }
+      /*    ST(srclin)[lincnt] = srccnt;    unused  */
+      ST(linadr)[lincnt] = cp;            /* record the adrs */
+    }
+    else if (c == '#' && ST(linepos) == 0 && !heredoc) {
+      /* Start Macro definition */
+      /* also deal with #include here */
+      char  *mname, *preprocName;
+      int mlen = 40;
+      int   i, cnt;
+      mname = (char  *)malloc(mlen);
+      cp--;
+    parsePreproc:
+      preprocName = NULL;
+      i = 0;
+      cnt = 0;
+      mname[cnt++] = '#';
+      if (cnt==mlen)
+        mname = (char *)realloc(mname, mlen+=40);
+      do {
+        c = getorchar(csound);
+        if (UNLIKELY(c == EOF))
+          break;
+        mname[cnt++] = c;
         if (cnt==mlen)
           mname = (char *)realloc(mname, mlen+=40);
-        do {
-          c = getorchar(csound);
-          if (UNLIKELY(c == EOF))
-            break;
-          mname[cnt++] = c;
-          if (cnt==mlen)
+      } while ((c == ' ' || c == '\t'));
+      mname[cnt] = '\0';
+      if (c == EOF || c == '\n')
+        goto unknownPreproc;
+      preprocName = &(mname[cnt - 1]);
+      while (1) {
+        c = getorchar(csound);
+        if (c == EOF || !(isalnum(c) || c == '_'))
+          break;
+        mname[cnt++] = c;
+        if (cnt==mlen)
+          mname = (char *)realloc(mname, mlen+=40);
+      }
+      mname[cnt] = '\0';
+      if (strcmp(preprocName, "define") == 0 &&
+          !(ST(ifdefStack) != NULL && ST(ifdefStack)->isSkip)) {
+        MACRO *mm = (MACRO*) mmalloc(csound, sizeof(MACRO));
+        int   arg = 0;
+        int   size = 40;
+        mm->margs = MARGS;    /* Initial size */
+        while (isspace((c = getorchar(csound))))
+          ;
+        while (isNameChar(c, i)) {
+          mname[i++] = c;
+          if (i==mlen)
             mname = (char *)realloc(mname, mlen+=40);
-        } while ((c == ' ' || c == '\t'));
-        mname[cnt] = '\0';
-        if (c == EOF || c == '\n')
-          goto unknownPreproc;
-        preprocName = &(mname[cnt - 1]);
-        while (1) {
           c = getorchar(csound);
-          if (c == EOF || !(isalnum(c) || c == '_'))
-            break;
-          mname[cnt++] = c;
-          if (cnt==mlen)
-            mname = (char *)realloc(mname, mlen+=40);
         }
-        mname[cnt] = '\0';
-        if (strcmp(preprocName, "define") == 0 &&
-            !(ST(ifdefStack) != NULL && ST(ifdefStack)->isSkip)) {
-          MACRO *mm = (MACRO*) mmalloc(csound, sizeof(MACRO));
-          int   arg = 0;
-          int   size = 40;
-          mm->margs = MARGS;    /* Initial size */
-          while (isspace((c = getorchar(csound))))
-            ;
-          while (isNameChar(c, i)) {
-            mname[i++] = c;
-            if (i==mlen)
-              mname = (char *)realloc(mname, mlen+=40);
-            c = getorchar(csound);
-          }
-          mname[i] = '\0';
-          if (csound->oparms->msglevel & 7)
-            csound->Message(csound, Str("Macro definition for %s\n"), mname);
-          mm->name = mmalloc(csound, i + 1);
-          strcpy(mm->name, mname);
-          if (c == '(') {       /* arguments */
+        mname[i] = '\0';
+        if (csound->oparms->msglevel & 7)
+          csound->Message(csound, Str("Macro definition for %s\n"), mname);
+        mm->name = mmalloc(csound, i + 1);
+        strcpy(mm->name, mname);
+        if (c == '(') {       /* arguments */
 #ifdef MACDEBUG
-            csound->Message(csound, "M-arguments: ");
+          csound->Message(csound, "M-arguments: ");
 #endif
-            do {
-              while (isspace((c = getorchar_noeof(csound))))
-                ;
-              i = 0;
-              while (isNameChar(c, i)) {
-                mname[i++] = c;
-                if (i==mlen)
-                  mname = (char *)realloc(mname, mlen+=40);
-                c = getorchar(csound);
-              }
-              mname[i] = '\0';
+          do {
+            while (isspace((c = getorchar_noeof(csound))))
+              ;
+            i = 0;
+            while (isNameChar(c, i)) {
+              mname[i++] = c;
+              if (i==mlen)
+                mname = (char *)realloc(mname, mlen+=40);
+              c = getorchar(csound);
+            }
+            mname[i] = '\0';
 #ifdef MACDEBUG
-              csound->Message(csound, "%s\t", mname);
+            csound->Message(csound, "%s\t", mname);
 #endif
-              mm->arg[arg] = mmalloc(csound, i + 1);
-              strcpy(mm->arg[arg++], mname);
-              if (arg >= mm->margs) {
-                mm = (MACRO*) mrealloc(csound, mm, sizeof(MACRO)
-                                                   + mm->margs * sizeof(char*));
-                mm->margs += MARGS;
-              }
-              while (isspace(c))
-                c = getorchar_noeof(csound);
-            } while (c == '\'' || c == '#');
-            if (UNLIKELY(c != ')'))
-              csound->Message(csound, Str("macro error\n"));
-          }
-          mm->acnt = arg;
-          i = 0;
-          while (c != '#')
-            c = getorchar_noeof(csound);        /* Skip to next # */
-          mm->body = (char*) mmalloc(csound, 100);
-          while ((c = getorchar_noeof(csound)) != '#') {
-            mm->body[i++] = c;
+            mm->arg[arg] = mmalloc(csound, i + 1);
+            strcpy(mm->arg[arg++], mname);
+            if (arg >= mm->margs) {
+              mm = (MACRO*) mrealloc(csound, mm, sizeof(MACRO)
+                                     + mm->margs * sizeof(char*));
+              mm->margs += MARGS;
+            }
+            while (isspace(c))
+              c = getorchar_noeof(csound);
+          } while (c == '\'' || c == '#');
+          if (UNLIKELY(c != ')'))
+            csound->Message(csound, Str("macro error\n"));
+        }
+        mm->acnt = arg;
+        i = 0;
+        while (c != '#')
+          c = getorchar_noeof(csound);        /* Skip to next # */
+        mm->body = (char*) mmalloc(csound, 100);
+        while ((c = getorchar_noeof(csound)) != '#') {
+          mm->body[i++] = c;
+          if (UNLIKELY(i >= size))
+            mm->body = mrealloc(csound, mm->body, size += 100);
+          if (c == '\\') {                    /* allow escaped # */
+            mm->body[i++] = c = getorchar_noeof(csound);
             if (UNLIKELY(i >= size))
               mm->body = mrealloc(csound, mm->body, size += 100);
-            if (c == '\\') {                    /* allow escaped # */
-              mm->body[i++] = c = getorchar_noeof(csound);
-              if (UNLIKELY(i >= size))
-                mm->body = mrealloc(csound, mm->body, size += 100);
-            }
-            if (c == '\n')
-              srccnt++;
           }
-          mm->body[i] = '\0';
-          mm->next = ST(macros);
-          ST(macros) = mm;
+          if (c == '\n')
+            srccnt++;
+        }
+        mm->body[i] = '\0';
+        mm->next = ST(macros);
+        ST(macros) = mm;
 #ifdef MACDEBUG
-          csound->Message(csound, "Macro %s with %d arguments defined\n",
-                                  mm->name, mm->acnt);
+        csound->Message(csound, "Macro %s with %d arguments defined\n",
+                        mm->name, mm->acnt);
 #endif
-          c = ' ';
+        c = ' ';
+      }
+      else if (strcmp(preprocName, "include") == 0 &&
+               !(ST(ifdefStack) != NULL && ST(ifdefStack)->isSkip)) {
+        int   delim;
+        while (isspace(c))
+          c = getorchar(csound);
+        delim = c;
+        i = 0;
+        while ((c = getorchar_noeof(csound)) != delim) {
+          mname[i++] = c;
+          if (i==mlen)
+            mname = (char *)realloc(mname, mlen+=40);
         }
-        else if (strcmp(preprocName, "include") == 0 &&
-                 !(ST(ifdefStack) != NULL && ST(ifdefStack)->isSkip)) {
-          int   delim;
-          while (isspace(c))
-            c = getorchar(csound);
-          delim = c;
-          i = 0;
-          while ((c = getorchar_noeof(csound)) != delim) {
-            mname[i++] = c;
-            if (i==mlen)
-              mname = (char *)realloc(mname, mlen+=40);
-          }
-           mname[i] = '\0';
-          do {
-            c = getorchar(csound);
-          } while (c != EOF && c != '\n');
+        mname[i] = '\0';
+        do {
+          c = getorchar(csound);
+        } while (c != EOF && c != '\n');
 #ifdef MACDEBUG
-          csound->Message(csound, "#include \"%s\"\n", mname);
+        csound->Message(csound, "#include \"%s\"\n", mname);
 #endif
-          ST(input_cnt)++;
-          if (ST(input_cnt) >= ST(input_size)) {
-            ST(input_size) += 20;
-            ST(inputs) = mrealloc(csound, ST(inputs), ST(input_size)
-                                                      * sizeof(IN_STACK));
-          }
-          ST(str) = (IN_STACK*) ST(inputs) + (int) ST(input_cnt);
-          ST(str)->string = 0;
-          ST(str)->fd = fopen_path(csound, &(ST(str)->file),
-                                        mname, csound->orchname, "INCDIR", 0);
-          if (UNLIKELY(ST(str)->fd == NULL)) {
-            csound->Message(csound,
-                            Str("Cannot open #include'd file %s\n"), mname);
-            /* Should this stop things?? */
-            ST(str)--; ST(input_cnt)--;
-          }
-          else {
-            ST(str)->body = csound->GetFileName(ST(str)->fd);
-            ST(str)->line = 1;
-            ST(str)->unget_cnt = 0;
-            ST(linepos) = -1;
+        ST(input_cnt)++;
+        if (ST(input_cnt) >= ST(input_size)) {
+          ST(input_size) += 20;
+          ST(inputs) = mrealloc(csound, ST(inputs), ST(input_size)
+                                * sizeof(IN_STACK));
+        }
+        ST(str) = (IN_STACK*) ST(inputs) + (int) ST(input_cnt);
+        ST(str)->string = 0;
+        ST(str)->fd = fopen_path(csound, &(ST(str)->file),
+                                 mname, csound->orchname, "INCDIR", 0);
+        if (UNLIKELY(ST(str)->fd == NULL)) {
+          csound->Message(csound,
+                          Str("Cannot open #include'd file %s\n"), mname);
+          /* Should this stop things?? */
+          ST(str)--; ST(input_cnt)--;
+        }
+        else {
+          ST(str)->body = csound->GetFileName(ST(str)->fd);
+          ST(str)->line = 1;
+          ST(str)->unget_cnt = 0;
+          ST(linepos) = -1;
+        }
+      }
+      else if (strcmp(preprocName, "ifdef") == 0 ||
+               strcmp(preprocName, "ifndef") == 0) {
+        MACRO   *mm;                  /* #ifdef or #ifndef */
+        IFDEFSTACK  *pp;
+        pp = (IFDEFSTACK*) mcalloc(csound, sizeof(IFDEFSTACK));
+        pp->prv = ST(ifdefStack);
+        if (strcmp(preprocName, "ifndef") == 0)
+          pp->isDef = 1;
+        while (isspace(c = getorchar(csound)))
+          ;
+        while (isNameChar(c, i)) {
+          mname[i++] = c;
+          if (i==mlen)
+            mname = (char *)realloc(mname, mlen+=40);
+          c = getorchar(csound);
+        }
+        mname[i] = '\0';
+        for (mm = ST(macros); mm != NULL; mm = mm->next) {
+          if (strcmp(mname, mm->name) == 0) {
+            pp->isDef ^= (unsigned char) 1;
+            break;
           }
         }
-        else if (strcmp(preprocName, "ifdef") == 0 ||
-                 strcmp(preprocName, "ifndef") == 0) {
-          MACRO   *mm;                  /* #ifdef or #ifndef */
-          IFDEFSTACK  *pp;
-          pp = (IFDEFSTACK*) mcalloc(csound, sizeof(IFDEFSTACK));
-          pp->prv = ST(ifdefStack);
-          if (strcmp(preprocName, "ifndef") == 0)
-            pp->isDef = 1;
-          while (isspace(c = getorchar(csound)))
-            ;
-          while (isNameChar(c, i)) {
-            mname[i++] = c;
-            if (i==mlen)
-              mname = (char *)realloc(mname, mlen+=40);
+        ST(ifdefStack) = pp;
+        pp->isSkip = pp->isDef ^ (unsigned char) 1;
+        if (pp->prv != NULL && pp->prv->isSkip)
+          pp->isSkip |= (unsigned char) 2;
+        if (!pp->isSkip) {
+          while (c != '\n' && c != EOF) {     /* Skip to end of line */
             c = getorchar(csound);
           }
-          mname[i] = '\0';
-          for (mm = ST(macros); mm != NULL; mm = mm->next) {
-            if (strcmp(mname, mm->name) == 0) {
-              pp->isDef ^= (unsigned char) 1;
-              break;
-            }
-          }
-          ST(ifdefStack) = pp;
-          pp->isSkip = pp->isDef ^ (unsigned char) 1;
-          if (pp->prv != NULL && pp->prv->isSkip)
-            pp->isSkip |= (unsigned char) 2;
-          if (!pp->isSkip) {
-            while (c != '\n' && c != EOF) {     /* Skip to end of line */
+          srccnt++; goto top;
+        }
+        else {                                /* Skip a section of code */
+        ifdefSkipCode:
+          do {
+            while (c != '\n') {
+              if (UNLIKELY(c == EOF))
+                lexerr(csound, Str("unmatched #ifdef"));
               c = getorchar(csound);
             }
-            srccnt++; goto top;
-          }
-          else {                                /* Skip a section of code */
- ifdefSkipCode:
-            do {
-              while (c != '\n') {
-                if (UNLIKELY(c == EOF))
-                  lexerr(csound, Str("unmatched #ifdef"));
-                c = getorchar(csound);
-              }
-              srccnt++;
-              c = getorchar(csound);
-            } while (c != '#');
-            goto parsePreproc;
-          }
-        }
-        else if (strcmp(preprocName, "else") == 0) {
-          if (ST(ifdefStack) == NULL || ST(ifdefStack)->isElse)
-            lexerr(csound, Str("Unmatched #else"));
-          while (c != '\n' && c != EOF)
+            srccnt++;
             c = getorchar(csound);
-          srccnt++;
-          ST(ifdefStack)->isElse = 1;
-          ST(ifdefStack)->isSkip ^= (unsigned char) 1;
-          if (ST(ifdefStack)->isSkip)
-            goto ifdefSkipCode;
-          goto top;
+          } while (c != '#');
+          goto parsePreproc;
         }
-        else if (strcmp(preprocName, "end") == 0 ||
-                 strcmp(preprocName, "endif") == 0) {
-          IFDEFSTACK  *pp = ST(ifdefStack);
-          if (UNLIKELY(pp == NULL))
-            lexerr(csound, Str("Unmatched #endif"));
-          while (c != '\n' && c != EOF) {
-            c = getorchar(csound);
-          }
-          srccnt++;
-          ST(ifdefStack) = pp->prv;
-          mfree(csound, pp);
-          if (ST(ifdefStack) != NULL && ST(ifdefStack)->isSkip)
-            goto ifdefSkipCode;
-          goto top;
+      }
+      else if (strcmp(preprocName, "else") == 0) {
+        if (ST(ifdefStack) == NULL || ST(ifdefStack)->isElse)
+          lexerr(csound, Str("Unmatched #else"));
+        while (c != '\n' && c != EOF)
+          c = getorchar(csound);
+        srccnt++;
+        ST(ifdefStack)->isElse = 1;
+        ST(ifdefStack)->isSkip ^= (unsigned char) 1;
+        if (ST(ifdefStack)->isSkip)
+          goto ifdefSkipCode;
+        goto top;
+      }
+      else if (strcmp(preprocName, "end") == 0 ||
+               strcmp(preprocName, "endif") == 0) {
+        IFDEFSTACK  *pp = ST(ifdefStack);
+        if (UNLIKELY(pp == NULL))
+          lexerr(csound, Str("Unmatched #endif"));
+        while (c != '\n' && c != EOF) {
+          c = getorchar(csound);
         }
-        else if (strcmp(preprocName, "undef") == 0 &&
-                 !(ST(ifdefStack) != NULL && ST(ifdefStack)->isSkip)) {
-          while (isspace(c = getorchar(csound)))
-            ;
-          while (isNameChar(c, i)) {
-            mname[i++] = c;
-            if (i==mlen)
-              mname = (char *)realloc(mname, mlen+=40);
-            c = getorchar(csound);
-          }
-          mname[i] = '\0';
-          if (csound->oparms->msglevel)
-            csound->Message(csound,Str("macro %s undefined\n"), mname);
-          if (strcmp(mname, ST(macros)->name)==0) {
-            MACRO *mm=ST(macros)->next;
-            mfree(csound, ST(macros)->name); mfree(csound, ST(macros)->body);
-            for (i=0; i<ST(macros)->acnt; i++)
-              mfree(csound, ST(macros)->arg[i]);
-            mfree(csound, ST(macros)); ST(macros) = mm;
-          }
-          else {
-            MACRO *mm = ST(macros);
-            MACRO *nn = mm->next;
-            while (strcmp(mname, nn->name) != 0) {
-              mm = nn; nn = nn->next;
-              if (nn == NULL)
-                lexerr(csound, Str("Undefining undefined macro"));
-            }
-            mfree(csound, nn->name); mfree(csound, nn->body);
-            for (i=0; i<nn->acnt; i++)
-              mfree(csound, nn->arg[i]);
-            mm->next = nn->next; mfree(csound, nn);
-          }
-          while (c != '\n' && c != EOF)
-            c = getorchar(csound);              /* ignore rest of line */
-          srccnt++;
+        srccnt++;
+        ST(ifdefStack) = pp->prv;
+        mfree(csound, pp);
+        if (ST(ifdefStack) != NULL && ST(ifdefStack)->isSkip)
+          goto ifdefSkipCode;
+        goto top;
+      }
+      else if (strcmp(preprocName, "undef") == 0 &&
+               !(ST(ifdefStack) != NULL && ST(ifdefStack)->isSkip)) {
+        while (isspace(c = getorchar(csound)))
+          ;
+        while (isNameChar(c, i)) {
+          mname[i++] = c;
+          if (i==mlen)
+            mname = (char *)realloc(mname, mlen+=40);
+          c = getorchar(csound);
         }
-        else {
- unknownPreproc:
-          if (ST(ifdefStack) != NULL && ST(ifdefStack)->isSkip)
-            goto ifdefSkipCode;
-          if (preprocName == NULL)
-            lexerr(csound, Str("Unexpected # character"));
-          else
-            lexerr(csound, Str("Unknown # option: '%s'"), preprocName);
+        mname[i] = '\0';
+        if (csound->oparms->msglevel)
+          csound->Message(csound,Str("macro %s undefined\n"), mname);
+        if (strcmp(mname, ST(macros)->name)==0) {
+          MACRO *mm=ST(macros)->next;
+          mfree(csound, ST(macros)->name); mfree(csound, ST(macros)->body);
+          for (i=0; i<ST(macros)->acnt; i++)
+            mfree(csound, ST(macros)->arg[i]);
+          mfree(csound, ST(macros)); ST(macros) = mm;
         }
-        free(mname);
-      }
-      else if (c == '$' && !heredoc) {
-        char      name[100];
-        int       i = 0;
-        int       j;
-        MACRO     *mm, *mm_save = NULL;
-        ST(ingappop) = 0;
-        while (isNameChar((c = getorchar(csound)), i)) {
-          name[i++] = c; name[i] = '\0';
-          mm = ST(macros);
-          while (mm != NULL) {  /* Find the definition */
-            if (!(strcmp(name, mm->name))) {
-              mm_save = mm;     /* found a match, save it */
-              break;
-            }
-            mm = mm->next;
+        else {
+          MACRO *mm = ST(macros);
+          MACRO *nn = mm->next;
+          while (strcmp(mname, nn->name) != 0) {
+            mm = nn; nn = nn->next;
+            if (nn == NULL)
+              lexerr(csound, Str("Undefining undefined macro"));
           }
+          mfree(csound, nn->name); mfree(csound, nn->body);
+          for (i=0; i<nn->acnt; i++)
+            mfree(csound, nn->arg[i]);
+          mm->next = nn->next; mfree(csound, nn);
         }
-        mm = mm_save;
-        if (UNLIKELY(mm == NULL)) {
-          if (i)
-            lexerr(csound,Str("Undefined macro: '%s'"), name);
-          else
-            lexerr(csound,Str("Macro expansion symbol ($) without macro name"));
-          continue;
-        }
-        if ((int) strlen(mm->name) != i) {
-          int cnt = i - (int) strlen(mm->name);
-          csound->Warning(csound, Str("$%s matches macro name $%s"),
-                                  name, mm->name);
-          do {
-            ungetorchar(csound, c);
-            c = name[--i];
-          } while (cnt--);
+        while (c != '\n' && c != EOF)
+          c = getorchar(csound);              /* ignore rest of line */
+        srccnt++;
+      }
+      else {
+      unknownPreproc:
+        if (ST(ifdefStack) != NULL && ST(ifdefStack)->isSkip)
+          goto ifdefSkipCode;
+        if (preprocName == NULL)
+          lexerr(csound, Str("Unexpected # character"));
+        else
+          lexerr(csound, Str("Unknown # option: '%s'"), preprocName);
+      }
+      free(mname);
+    }
+    else if (c == '$' && !heredoc) {
+      char      name[100];
+      int       i = 0;
+      int       j;
+      MACRO     *mm, *mm_save = NULL;
+      ST(ingappop) = 0;
+      while (isNameChar((c = getorchar(csound)), i)) {
+        name[i++] = c; name[i] = '\0';
+        mm = ST(macros);
+        while (mm != NULL) {  /* Find the definition */
+          if (!(strcmp(name, mm->name))) {
+            mm_save = mm;     /* found a match, save it */
+            break;
+          }
+          mm = mm->next;
         }
-        else if (c != '.')
+      }
+      mm = mm_save;
+      if (UNLIKELY(mm == NULL)) {
+        if (i)
+          lexerr(csound,Str("Undefined macro: '%s'"), name);
+        else
+          lexerr(csound,Str("Macro expansion symbol ($) without macro name"));
+        continue;
+      }
+      if ((int) strlen(mm->name) != i) {
+        int cnt = i - (int) strlen(mm->name);
+        csound->Warning(csound, Str("$%s matches macro name $%s"),
+                        name, mm->name);
+        do {
           ungetorchar(csound, c);
+          c = name[--i];
+        } while (cnt--);
+      }
+      else if (c != '.')
+        ungetorchar(csound, c);
 #ifdef MACDEBUG
-        csound->Message(csound, "Found macro %s required %d arguments\n",
-                                mm->name, mm->acnt);
+      csound->Message(csound, "Found macro %s required %d arguments\n",
+                      mm->name, mm->acnt);
 #endif
-        /* Should bind arguments here */
-        /* How do I recognise entities?? */
-        if (mm->acnt) {
-          if (UNLIKELY((c = getorchar(csound)) != '('))
-            lexerr(csound, Str("Syntax error in macro call"));
-          for (j = 0; j < mm->acnt; j++) {
-            char  term = (j == mm->acnt - 1 ? ')' : '\'');
-            char  trm1 = (j == mm->acnt - 1 ? ')' : '#');   /* Compatability */
-            MACRO *nn = (MACRO*) mmalloc(csound, sizeof(MACRO));
-            int   size = 100;
-            nn->name = mmalloc(csound, strlen(mm->arg[j]) + 1);
-            strcpy(nn->name, mm->arg[j]);
+      /* Should bind arguments here */
+      /* How do I recognise entities?? */
+      if (mm->acnt) {
+        if (UNLIKELY((c = getorchar(csound)) != '('))
+          lexerr(csound, Str("Syntax error in macro call"));
+        for (j = 0; j < mm->acnt; j++) {
+          char  term = (j == mm->acnt - 1 ? ')' : '\'');
+          char  trm1 = (j == mm->acnt - 1 ? ')' : '#');   /* Compatability */
+          MACRO *nn = (MACRO*) mmalloc(csound, sizeof(MACRO));
+          int   size = 100;
+          nn->name = mmalloc(csound, strlen(mm->arg[j]) + 1);
+          strcpy(nn->name, mm->arg[j]);
 #ifdef MACDEBUG
-            csound->Message(csound, "defining argument %s ", nn->name);
+          csound->Message(csound, "defining argument %s ", nn->name);
 #endif
-            i = 0;
-            nn->body = (char*) mmalloc(csound, 100);
-            while ((c = getorchar(csound))!= term && c!=trm1) {
-              if (UNLIKELY(i > 98)) {
-                csound->Die(csound, Str("Missing argument terminator\n%.98s"),
-                                    nn->body);
-              }
-              nn->body[i++] = c;
-              if (UNLIKELY(i >= size))
-                nn->body = mrealloc(csound, nn->body, size += 100);
-              if (c == '\n') {
-                srccnt++;
-              }
+          i = 0;
+          nn->body = (char*) mmalloc(csound, 100);
+          while ((c = getorchar(csound))!= term && c!=trm1) {
+            if (UNLIKELY(i > 98)) {
+              csound->Die(csound, Str("Missing argument terminator\n%.98s"),
+                          nn->body);
+            }
+            nn->body[i++] = c;
+            if (UNLIKELY(i >= size))
+              nn->body = mrealloc(csound, nn->body, size += 100);
+            if (c == '\n') {
+              srccnt++;
             }
-            nn->body[i] = '\0';
+          }
+          nn->body[i] = '\0';
 #ifdef MACDEBUG
-            csound->Message(csound, "as...#%s#\n", nn->body);
+          csound->Message(csound, "as...#%s#\n", nn->body);
 #endif
-            nn->acnt = 0;       /* No arguments for arguments */
-            nn->next = ST(macros);
-            ST(macros) = nn;
-          }
-        }
-        cp--;                   /* Ignore $ sign */
-        ST(input_cnt)++;
-        if (ST(input_cnt) >= ST(input_size)) {
-          ST(input_size) += 20;
-          ST(inputs) = (IN_STACK*) mrealloc(csound, ST(inputs),
-                                            ST(input_size) * sizeof(IN_STACK));
+          nn->acnt = 0;       /* No arguments for arguments */
+          nn->next = ST(macros);
+          ST(macros) = nn;
         }
-        ST(str) = (IN_STACK*) ST(inputs) + (int) ST(input_cnt);
-        ST(str)->string = 1; ST(str)->body = mm->body; ST(str)->args = mm->acnt;
-        ST(str)->mac = mm;
-        ST(str)->line = 1;
-        ST(str)->unget_cnt = 0;
-        ST(ingappop) = 1;
-      }
-    }
-    if (UNLIKELY(ST(ifdefStack) != NULL))
-      lexerr(csound, Str("Unmatched #ifdef"));
-    if (UNLIKELY(cp >= endspace)) {                   /* Ought to extend */
-      csoundDie(csound, Str("file too large for ortext space"));
-    }
-    if (*(cp-1) != '\n')                    /* if no final NL,      */
-      *cp++ = '\n';                         /*    add one           */
-    else --lincnt;
-    ST(linadr)[lincnt+1] = NULL;            /* terminate the adrs list */
+      }
+      cp--;                   /* Ignore $ sign */
+      ST(input_cnt)++;
+      if (ST(input_cnt) >= ST(input_size)) {
+        ST(input_size) += 20;
+        ST(inputs) = (IN_STACK*) mrealloc(csound, ST(inputs),
+                                          ST(input_size) * sizeof(IN_STACK));
+      }
+      ST(str) = (IN_STACK*) ST(inputs) + (int) ST(input_cnt);
+      ST(str)->string = 1; ST(str)->body = mm->body; ST(str)->args = mm->acnt;
+      ST(str)->mac = mm;
+      ST(str)->line = 1;
+      ST(str)->unget_cnt = 0;
+      ST(ingappop) = 1;
+    }
+  }
+  if (UNLIKELY(ST(ifdefStack) != NULL))
+    lexerr(csound, Str("Unmatched #ifdef"));
+  if (UNLIKELY(cp >= endspace)) {                   /* Ought to extend */
+    csoundDie(csound, Str("file too large for ortext space"));
+  }
+  if (*(cp-1) != '\n')                    /* if no final NL,      */
+    *cp++ = '\n';                         /*    add one           */
+  else --lincnt;
+  ST(linadr)[lincnt+1] = NULL;            /* terminate the adrs list */
 #ifdef BETA
-    csound->Message(csound,Str("%d (%d) lines read\n"),lincnt, srccnt);
+  csound->Message(csound,Str("%d (%d) lines read\n"),lincnt, srccnt);
 #endif
-    if (ST(fd) != NULL) {
-      csound->FileClose(csound, ST(fd));    /* close the file       */
-      ST(fd) = NULL;
-    }
-    ST(curline) = 0;                        /*   & reset to line 1  */
-    ST(ortext) = ortext;
-    while (ST(macros)) {                    /* Clear all macros */
-      int i;
-      mfree(csound, ST(macros)->body);
-      mfree(csound, ST(macros)->name);
-      for (i = 0; i < ST(macros)->acnt; i++)
-        mfree(csound, ST(macros)->arg[i]);
-      ST(macros) = ST(macros)->next;
-    }                                       /* nullist is a count only */
-    ST(nullist) = (ARGLST *) mmalloc(csound, sizeof(ARGLST));
-    ST(nullist)->count = 0;
-    ST(nxtarglist) = (ARGLST*) mmalloc(csound, sizeof(ARGLST)
-                                               + 200 * sizeof(char*));
+  if (ST(fd) != NULL) {
+    csound->FileClose(csound, ST(fd));    /* close the file       */
+    ST(fd) = NULL;
+  }
+  ST(curline) = 0;                        /*   & reset to line 1  */
+  ST(ortext) = ortext;
+  while (ST(macros)) {                    /* Clear all macros */
+    int i;
+    mfree(csound, ST(macros)->body);
+    mfree(csound, ST(macros)->name);
+    for (i = 0; i < ST(macros)->acnt; i++)
+      mfree(csound, ST(macros)->arg[i]);
+    ST(macros) = ST(macros)->next;
+  }                                       /* nullist is a count only */
+  ST(nullist) = (ARGLST *) mmalloc(csound, sizeof(ARGLST));
+  ST(nullist)->count = 0;
+  ST(nxtarglist) = (ARGLST*) mmalloc(csound, sizeof(ARGLST)
+                                     + 200 * sizeof(char*));
 }
 
 static void extend_collectbuf(CSOUND *csound, char **cp, int grpcnt)
 {
-    char  *nn;
-    int   i;
-
-    i = (int) ST(lenmax);
-    ST(lenmax) <<= 1;
-    nn = mrealloc(csound, ST(collectbuf), ST(lenmax) + 16);
-    (*cp) += (nn - ST(collectbuf));     /* Adjust pointer */
-    for ( ; i < (int) ST(lenmax); i++)
-      nn[i] = (char) 0;
-    /* Need to correct grp vector */
-    for (i = 0; i < grpcnt; i++)
-      ST(group)[i] += (nn - ST(collectbuf));
-    ST(collectbuf) = nn;
+  char  *nn;
+  int   i;
+
+  i = (int) ST(lenmax);
+  ST(lenmax) <<= 1;
+  nn = mrealloc(csound, ST(collectbuf), ST(lenmax) + 16);
+  (*cp) += (nn - ST(collectbuf));     /* Adjust pointer */
+  for ( ; i < (int) ST(lenmax); i++)
+    nn[i] = (char) 0;
+  /* Need to correct grp vector */
+  for (i = 0; i < grpcnt; i++)
+    ST(group)[i] += (nn - ST(collectbuf));
+  ST(collectbuf) = nn;
 }
 
 static void extend_group(CSOUND *csound)
 {
-    int32  i, j;
-
-    i = ST(grpmax);
-    j = i + (int32) GRPMAX;
-    ST(grpmax) = (j++);
-    ST(group) = (char **) mrealloc(csound, ST(group), j * sizeof(char *));
-    ST(grpsav) = (char **) mrealloc(csound, ST(grpsav), j * sizeof(char *));
-    while (++i < j) {
-      ST(group)[i] = (char *) NULL;
-      ST(grpsav)[i] = (char *) NULL;
-    }
+  int32  i, j;
+
+  i = ST(grpmax);
+  j = i + (int32) GRPMAX;
+  ST(grpmax) = (j++);
+  ST(group) = (char **) mrealloc(csound, ST(group), j * sizeof(char *));
+  ST(grpsav) = (char **) mrealloc(csound, ST(grpsav), j * sizeof(char *));
+  while (++i < j) {
+    ST(group)[i] = (char *) NULL;
+    ST(grpsav)[i] = (char *) NULL;
+  }
 }
 
 /* split next orch line into atomic groups, count */
@@ -1040,1229 +1067,1234 @@ static void extend_group(CSOUND *csound)
 
 static int splitline(CSOUND *csound)
 {
-    int     grpcnt, prvif, prvelsif, logical, condassgn, parens;
-    int     c, collecting;
-    char    *cp, *lp, *grpp = NULL;
+  int     grpcnt, prvif, prvelsif, logical, condassgn, parens;
+  int     c, collecting;
+  char    *cp, *lp, *grpp = NULL;
 
-    if (ST(collectbuf) == NULL)
-      ST(collectbuf) = mcalloc(csound, ST(lenmax) + 16);
+  if (ST(collectbuf) == NULL)
+    ST(collectbuf) = mcalloc(csound, ST(lenmax) + 16);
  nxtlin:
-    if ((lp = ST(linadr)[++ST(curline)]) == NULL)   /* point at next line   */
-      return 0;
-    csound->DebugMsg(csound, Str("LINE %d:"), CURLINE);
-    ST(linlabels) = ST(opgrpno) = 0;
-    grpcnt = prvif = prvelsif = logical = condassgn = parens = collecting = 0;
-    cp = ST(collectbuf);
-    while ((c = *lp++) != '\n') {       /* for all chars this line:   */
-      if (cp - ST(collectbuf) >= ST(lenmax))
-        extend_collectbuf(csound, &cp, grpcnt);
-      if (c == ' ' || c == '\t' || c == '(') {      /* spaces, tabs, (:   */
-        if (!ST(opgrpno) && collecting) {           /*  those before args */
-          *cp++ = '\0';                             /*  can be delimiters */
-          collecting = 0;
-          if (strcmp(grpp, "if") == 0) {            /*  of if opcod, */
-            strcpy(grpp, "cggoto");                 /*  (replace) */
+  if ((lp = ST(linadr)[++ST(curline)]) == NULL)   /* point at next line   */
+    return 0;
+  csound->DebugMsg(csound, Str("LINE %d:"), CURLINE);
+  ST(linlabels) = ST(opgrpno) = 0;
+  grpcnt = prvif = prvelsif = logical = condassgn = parens = collecting = 0;
+  cp = ST(collectbuf);
+  while ((c = *lp++) != '\n') {       /* for all chars this line:   */
+    if (cp - ST(collectbuf) >= ST(lenmax))
+      extend_collectbuf(csound, &cp, grpcnt);
+    if (c == ' ' || c == '\t' || c == '(') {      /* spaces, tabs, (:   */
+      if (!ST(opgrpno) && collecting) {           /*  those before args */
+        *cp++ = '\0';                             /*  can be delimiters */
+        collecting = 0;
+        if (strcmp(grpp, "if") == 0) {            /*  of if opcod, */
+          strcpy(grpp, "cggoto");                 /*  (replace) */
+          cp = grpp + 7;
+          prvif++;
+        }
+        else if (strcmp(grpp, "elseif") == 0) {   /*  of elseif opcod, ... */
+          /* check to see we had an 'if' before */
+          if (!ST(iflabels)) {
+            synterr(csound, Str("invalid 'elseif' statement.  "
+                                "must have a corresponding 'if'"));
+            goto nxtlin;
+          }
+          /* check to see we did not have an 'else' before */
+          if (UNLIKELY(!ST(iflabels)->els[0])) {
+            synterr(csound,
+                    Str("'elseif' statement cannot occur after an 'else'"));
+            goto nxtlin;
+          }
+          /* 'elseif' requires 2 additional lines */
+          if (ST(repeatingElseifLine)) {
+            /* add the 'elselabel' */
+            ST(linlabels)++;
+            strcpy(grpp, ST(iflabels)->els);
+            cp = grpp + strlen(ST(iflabels)->els) + 1;
+            /* finally replace the 'elseif' with a 'goto' */
+            grpp = ST(group)[grpcnt++] = cp;
+            strcpy(grpp, "cggoto");
             cp = grpp + 7;
             prvif++;
+            prvelsif++;
+            ST(repeatingElseifLine) = 0;
           }
-          else if (strcmp(grpp, "elseif") == 0) {   /*  of elseif opcod, ... */
-            /* check to see we had an 'if' before */
-            if (!ST(iflabels)) {
-              synterr(csound, Str("invalid 'elseif' statement.  "
-                                  "must have a corresponding 'if'"));
-              goto nxtlin;
-            }
-            /* check to see we did not have an 'else' before */
-            if (UNLIKELY(!ST(iflabels)->els[0])) {
-              synterr(csound,
-                      Str("'elseif' statement cannot occur after an 'else'"));
-              goto nxtlin;
-            }
-            /* 'elseif' requires 2 additional lines */
-            if (ST(repeatingElseifLine)) {
-              /* add the 'elselabel' */
-              ST(linlabels)++;
-              strcpy(grpp, ST(iflabels)->els);
-              cp = grpp + strlen(ST(iflabels)->els) + 1;
-              /* finally replace the 'elseif' with a 'goto' */
-              grpp = ST(group)[grpcnt++] = cp;
-              strcpy(grpp, "cggoto");
-              cp = grpp + 7;
-              prvif++;
-              prvelsif++;
-              ST(repeatingElseifLine) = 0;
-            }
-            else {
-              /* first add a 'goto endif' for the previous if */
-              if (ST(iflabels)->ithen > 0)
-                strcpy(grpp, "goto");
-              else
-                strcpy(grpp, "kgoto");
-              if (isopcod(csound, grpp))
-                ST(opgrpno) = grpcnt;
-              ST(group)[grpcnt] = strchr(grpp, '\0') + 1;
-              grpp = ST(group)[grpcnt++];
-              strcpy(grpp, ST(iflabels)->end);
-              ST(curline)--;    /* roll back one and parse this line again */
-              ST(repeatingElseifLine)++;
-              ST(linopnum) = ST(opnum);     /* else save full line ops */
-              ST(linopcod) = ST(opcod);
-              return grpcnt;
-            }
+          else {
+            /* first add a 'goto endif' for the previous if */
+            if (ST(iflabels)->ithen > 0)
+              strcpy(grpp, "goto");
+            else
+              strcpy(grpp, "kgoto");
+            if (isopcod(csound, grpp))
+              ST(opgrpno) = grpcnt;
+            ST(group)[grpcnt] = strchr(grpp, '\0') + 1;
+            grpp = ST(group)[grpcnt++];
+            strcpy(grpp, ST(iflabels)->end);
+            ST(curline)--;    /* roll back one and parse this line again */
+            ST(repeatingElseifLine)++;
+            ST(linopnum) = ST(opnum);     /* else save full line ops */
+            ST(linopcod) = ST(opcod);
+            return grpcnt;
           }
-          if (isopcod(csound, grpp))                /*  ... or maybe others */
-            ST(opgrpno) = grpcnt;
         }
-        if (c == ' ' || c == '\t')
-          continue;                         /* now discard blanks */
-      }
-      else if (c == ';') {
-        while ((c = *lp++) != '\n');        /* comments:  gobble */
-        break;                              /*    & exit linloop */
-      }
-      else if (c == '/' && *lp == '*') {    /* C Style comments */
-        char *ll, *eol;
-        ll = strstr(lp++, "*/");
-      nxtl:
-        eol = strchr(lp, '\n');
-        if (eol != NULL && eol < ll) {
-          lp = ST(linadr)[++ST(curline)];
-          ll = strstr(lp, "*/");
-          goto nxtl;
-        }
-        if (UNLIKELY(ll == NULL)) {
-          synterrp(csound, lp - 2, Str("Unmatched comment"));
-          lp = eol + 1; break;
-        }
-        lp = ll + 2;
-        continue;
-      }
-      else if (c == '"') {                  /* quoted string: */
-        if (grpcnt >= ST(grpmax))
-          extend_group(csound);
-        grpp = ST(group)[grpcnt++] = cp;
-        *cp++ = c;                          /*  cpy to nxt quote */
-       do {
-       loop:
-         c = *lp++;
-         if (c=='\\' && *lp=='"') {        /* Deal with \" case */
-           *cp++ = '\\';
-           *cp++ = '"';
-           lp++;
-           goto loop;
-         }
-         *cp++ = c;
-       } while (c != '"' && c != '\n');
-        if (c == '\n')
-          synterrp(csound, lp - 1, Str("unmatched quotes"));
-        collecting = 1;                     /*   & resume chking */
-        continue;
+        if (isopcod(csound, grpp))                /*  ... or maybe others */
+          ST(opgrpno) = grpcnt;
       }
-      else if (c == '{' && *lp == '{') {    /* multiline quoted string:   */
-        if (grpcnt >= ST(grpmax))
-          extend_group(csound);
-        grpp = ST(group)[grpcnt++] = cp;
-        c = '"';                            /*  cpy to nxt quote */
-        do {
-          *cp++ = c;
-          if (cp - ST(collectbuf) >= ST(lenmax))
-            extend_collectbuf(csound, &cp, grpcnt);
-          c = *(++lp);
-          if (c == '\n')
-            ++ST(curline);
-        } while (!(c == '}' && lp[1] == '}'));
-        lp += 2;
-        *cp++ = '"';
-        collecting = 1;                     /*   & resume chking */
-        continue;
-      }
-      else if (c == ':' && collecting && grpcnt == ST(linlabels)+1) {
-        ST(linlabels)++;                    /* colon in 1st grps */
-        *cp++ = '\0';                       /*  is also delimitr */
-        collecting = 0;                     /*  (do not copy it) */
-        continue;
-      }
-      else if (c == '=' && !ST(opgrpno)) {  /* assign befor args */
-        if (collecting)                     /* can be a delimitr */
-          *cp++ = '\0';
-        grpp = ST(group)[grpcnt++] = cp;    /* is itslf an opcod */
+      if (c == ' ' || c == '\t')
+        continue;                         /* now discard blanks */
+    }
+    else if (c == ';') {
+      while ((c = *lp++) != '\n');        /* comments:  gobble */
+      break;                              /*    & exit linloop */
+    }
+    else if (c == '/' && *lp == '*') {    /* C Style comments */
+      char *ll, *eol;
+      ll = strstr(lp++, "*/");
+    nxtl:
+      eol = strchr(lp, '\n');
+      if (eol != NULL && eol < ll) {
+        lp = ST(linadr)[++ST(curline)];
+        ll = strstr(lp, "*/");
+        goto nxtl;
+      }
+      if (UNLIKELY(ll == NULL)) {
+        synterrp(csound, lp - 2, Str("Unmatched comment"));
+        lp = eol + 1; break;
+      }
+      lp = ll + 2;
+      continue;
+    }
+    else if (c == '"') {                  /* quoted string: */
+      if (grpcnt >= ST(grpmax))
+        extend_group(csound);
+      grpp = ST(group)[grpcnt++] = cp;
+      *cp++ = c;                          /*  cpy to nxt quote */
+      do {
+      loop:
+        c = *lp++;
+        if (c=='\\' && *lp=='"') {        /* Deal with \" case */
+          *cp++ = '\\';
+          *cp++ = '"';
+          lp++;
+          goto loop;
+        }
         *cp++ = c;
+      } while (c != '"' && c != '\n');
+      if (c == '\n')
+        synterrp(csound, lp - 1, Str("unmatched quotes"));
+      collecting = 1;                     /*   & resume chking */
+      continue;
+    }
+    else if (c == '{' && *lp == '{') {    /* multiline quoted string:   */
+      if (grpcnt >= ST(grpmax))
+        extend_group(csound);
+      grpp = ST(group)[grpcnt++] = cp;
+      c = '"';                            /*  cpy to nxt quote */
+      do {
+        *cp++ = c;
+        if (cp - ST(collectbuf) >= ST(lenmax))
+          extend_collectbuf(csound, &cp, grpcnt);
+        c = *(++lp);
+        if (c == '\n')
+          ++ST(curline);
+      } while (!(c == '}' && lp[1] == '}'));
+      lp += 2;
+      *cp++ = '"';
+      collecting = 1;                     /*   & resume chking */
+      continue;
+    }
+    else if (c == ':' && collecting && grpcnt == ST(linlabels)+1) {
+      ST(linlabels)++;                    /* colon in 1st grps */
+      *cp++ = '\0';                       /*  is also delimitr */
+      collecting = 0;                     /*  (do not copy it) */
+      continue;
+    }
+    else if (c == '=' && !ST(opgrpno)) {  /* assign befor args */
+      if (collecting)                     /* can be a delimitr */
         *cp++ = '\0';
-        isopcod(csound, grpp);
-        ST(opgrpno) = grpcnt;
-        collecting = 0;                     /* & self-delimiting */
+      grpp = ST(group)[grpcnt++] = cp;    /* is itslf an opcod */
+      *cp++ = c;
+      *cp++ = '\0';
+      isopcod(csound, grpp);
+      ST(opgrpno) = grpcnt;
+      collecting = 0;                     /* & self-delimiting */
+      continue;
+    }
+    else if (c == ',') {                  /* comma:            */
+      if (UNLIKELY(!collecting))
+        synterrp(csound, lp - 1, Str("misplaced comma"));
+      if (UNLIKELY(parens)) {
+        synterrp(csound, lp - 2, Str("unbalanced parens"));
+        parens = 0;
+      }
+      *cp++ = '\0';                       /*  terminate string */
+      collecting = logical = condassgn = 0;
+      continue;
+    }
+    if (prvif && collecting && !parens) { /* for prev "if":    */
+      if (strncmp(lp-1,"goto",4) == 0) {  /* if found "goto"   */
+        *cp++ = '\0';                     /*      delimit cond */
+        lp += 3;                          /*      & step over  */
+        prvif = collecting = 0;
         continue;
       }
-      else if (c == ',') {                  /* comma:            */
-        if (UNLIKELY(!collecting))
-          synterrp(csound, lp - 1, Str("misplaced comma"));
-        if (UNLIKELY(parens)) {
-          synterrp(csound, lp - 2, Str("unbalanced parens"));
-          parens = 0;
-        }
-        *cp++ = '\0';                       /*  terminate string */
-        collecting = logical = condassgn = 0;
+      else if ((c == 'i' || c == 'k') &&          /*  if preced i or k */
+               strncmp(lp, "goto", 4) == 0) {     /*  before "goto"    */
+        *(ST(group)[ST(opgrpno) - 1] + 1) = c;    /*     modify cggoto */
+        isopcod(csound, ST(group)[ST(opgrpno) - 1]);
+        *cp++ = '\0';                             /*     then delimit  */
+        lp += 4;                                  /*      etc          */
+        prvif = collecting = 0;
         continue;
       }
-      if (prvif && collecting && !parens) { /* for prev "if":    */
-        if (strncmp(lp-1,"goto",4) == 0) {  /* if found "goto"   */
-          *cp++ = '\0';                     /*      delimit cond */
-          lp += 3;                          /*      & step over  */
-          prvif = collecting = 0;
-          continue;
-        }
-        else if ((c == 'i' || c == 'k') &&          /*  if preced i or k */
-                 strncmp(lp, "goto", 4) == 0) {     /*  before "goto"    */
-          *(ST(group)[ST(opgrpno) - 1] + 1) = c;    /*     modify cggoto */
-          isopcod(csound, ST(group)[ST(opgrpno) - 1]);
-          *cp++ = '\0';                             /*     then delimit  */
-          lp += 4;                                  /*      etc          */
-          prvif = collecting = 0;
-          continue;
-        }
-        else if (strncmp(lp - 1, "then", 4) == 0) {
-          struct iflabel *prv = ST(iflabels);
-          /* modify cggoto */
-          *(ST(group)[ST(opgrpno) - 1] + 1) = 'n';
-          isopcod(csound, ST(group)[ST(opgrpno) - 1]);
-          *cp++ = '\0';
-          lp += 3;
-          prvif = collecting = 0;
-          grpp = ST(group)[grpcnt++] = cp;
-          /* synthesize labels to represent an else and endif */
-          if (prvelsif) { /* elseif, so we just need a new elselabel */
-            sprintf(ST(iflabels)->els, "__else_%d", ST(tempNum)++);
-            prvelsif = 0;
-          }
-          else {
-            /* this is a new if, so put a whole new label struct on the stack */
-            ST(iflabels) = (struct iflabel *) mmalloc(csound,
-                                                      sizeof(struct iflabel));
-            ST(iflabels)->prv = prv;
-            sprintf(ST(iflabels)->end, "__endif_%d",ST(tempNum)++);
-            sprintf(ST(iflabels)->els, "__else_%d", ST(tempNum)++);
-          }
-          /* we set the 'goto' label to the 'else' label */
-          strcpy(grpp, ST(iflabels)->els);
-          cp = strchr(grpp, '\0');
-          /* set ithen flag to unknown (getoptxt() will update it later) */
-          ST(iflabels)->ithen = -1;
-          continue;
+      else if (strncmp(lp - 1, "then", 4) == 0) {
+        struct iflabel *prv = ST(iflabels);
+        /* modify cggoto */
+        *(ST(group)[ST(opgrpno) - 1] + 1) = 'n';
+        isopcod(csound, ST(group)[ST(opgrpno) - 1]);
+        *cp++ = '\0';
+        lp += 3;
+        prvif = collecting = 0;
+        grpp = ST(group)[grpcnt++] = cp;
+        /* synthesize labels to represent an else and endif */
+        if (prvelsif) { /* elseif, so we just need a new elselabel */
+          sprintf(ST(iflabels)->els, "__else_%d", ST(tempNum)++);
+          prvelsif = 0;
         }
-        else if (strncmp(lp - 1, "ithen", 5) == 0) {
-          struct iflabel *prv = ST(iflabels);
-          /* modify cggoto */
-          *(ST(group)[ST(opgrpno) - 1] + 1) = 'o';
-          isopcod(csound, ST(group)[ST(opgrpno) - 1]);
-          *cp++ = '\0';
-          lp += 4;
-          prvif = collecting = 0;
-          grpp = ST(group)[grpcnt++] = cp;
-          /* synthesize labels to represent an else and endif */
-          if (prvelsif) { /* elseif, so we just need a new elselabel */
-            sprintf(ST(iflabels)->els, "__else_%d",ST(tempNum)++);
-            prvelsif = 0;
-          }
-          else {
-            /* this is a new if, so put a whole new label struct on the stack */
-            ST(iflabels) = (struct iflabel *)mmalloc(csound,
-                                                     sizeof(struct iflabel));
-            ST(iflabels)->prv = prv;
-            sprintf(ST(iflabels)->end, "__endif_%d",ST(tempNum)++);
-            sprintf(ST(iflabels)->els, "__else_%d", ST(tempNum)++);
-          }
-          /* we set the 'goto' label to the 'else' label */
-          strcpy(grpp, ST(iflabels)->els);
-          cp = strchr(grpp, '\0');
-          /* set ithen flag */
-          ST(iflabels)->ithen = 1;
-          continue;
+        else {
+          /* this is a new if, so put a whole new label struct on the stack */
+          ST(iflabels) = (struct iflabel *) mmalloc(csound,
+                                                    sizeof(struct iflabel));
+          ST(iflabels)->prv = prv;
+          sprintf(ST(iflabels)->end, "__endif_%d",ST(tempNum)++);
+          sprintf(ST(iflabels)->els, "__else_%d", ST(tempNum)++);
         }
+        /* we set the 'goto' label to the 'else' label */
+        strcpy(grpp, ST(iflabels)->els);
+        cp = strchr(grpp, '\0');
+        /* set ithen flag to unknown (getoptxt() will update it later) */
+        ST(iflabels)->ithen = -1;
+        continue;
       }
-      if (!collecting++) {                  /* remainder are     */
-        if (grpcnt >= ST(grpmax))           /* collectable chars */
-          extend_group(csound);
+      else if (strncmp(lp - 1, "ithen", 5) == 0) {
+        struct iflabel *prv = ST(iflabels);
+        /* modify cggoto */
+        *(ST(group)[ST(opgrpno) - 1] + 1) = 'o';
+        isopcod(csound, ST(group)[ST(opgrpno) - 1]);
+        *cp++ = '\0';
+        lp += 4;
+        prvif = collecting = 0;
         grpp = ST(group)[grpcnt++] = cp;
-      }
-      *cp++ = c;                            /* collect the char  */
-      /* establish validity: allow letters, digits, and underscore */
-      /* in label, variable, and opcode names */
-      if (isalnum(c) || c == '_')
-        continue;
-      /* other characters are valid only after an opcode */
-      if (UNLIKELY(!ST(opgrpno)))
-        goto char_err;
-      switch (c) {
-      case '<':
-      case '>':
-        if (*lp == c) {
-          lp++; *cp++ = c;                  /* <<, >> */
+        /* synthesize labels to represent an else and endif */
+        if (prvelsif) { /* elseif, so we just need a new elselabel */
+          sprintf(ST(iflabels)->els, "__else_%d",ST(tempNum)++);
+          prvelsif = 0;
         }
-        else if (prvif || parens)           /* <, <=, >=, > */
-          logical++;
-        else
-          goto char_err;
-        break;
-      case '&':
-      case '|':
-        if (*lp == c) {                     /* &&, ||, &, | */
-          if (UNLIKELY(!prvif && !parens))
-            goto char_err;
-          logical++; lp++; *cp++ = c;
+        else {
+          /* this is a new if, so put a whole new label struct on the stack */
+          ST(iflabels) = (struct iflabel *)mmalloc(csound,
+                                                   sizeof(struct iflabel));
+          ST(iflabels)->prv = prv;
+          sprintf(ST(iflabels)->end, "__endif_%d",ST(tempNum)++);
+          sprintf(ST(iflabels)->els, "__else_%d", ST(tempNum)++);
         }
-        break;
-      case '!':
-      case '=':
-        if (UNLIKELY(!prvif && !parens))              /* ==, !=, <=, >= */
-          goto char_err;
+        /* we set the 'goto' label to the 'else' label */
+        strcpy(grpp, ST(iflabels)->els);
+        cp = strchr(grpp, '\0');
+        /* set ithen flag */
+        ST(iflabels)->ithen = 1;
+        continue;
+      }
+    }
+    if (!collecting++) {                  /* remainder are     */
+      if (grpcnt >= ST(grpmax))           /* collectable chars */
+        extend_group(csound);
+      grpp = ST(group)[grpcnt++] = cp;
+    }
+    *cp++ = c;                            /* collect the char  */
+    /* establish validity: allow letters, digits, and underscore */
+    /* in label, variable, and opcode names */
+    if (isalnum(c) || c == '_')
+      continue;
+    /* other characters are valid only after an opcode */
+    if (UNLIKELY(!ST(opgrpno)))
+      goto char_err;
+    switch (c) {
+    case '<':
+    case '>':
+      if (*lp == c) {
+        lp++; *cp++ = c;                  /* <<, >> */
+      }
+      else if (prvif || parens)           /* <, <=, >=, > */
         logical++;
-        break;
-      case '+':                             /* arithmetic and bitwise ops */
-      case '-':
-      case '*':
-      case '/':
-      case '%':
-      case '^':
-      case '#':                             /* XOR */
-      case '\254':                          /* NOT (same as ~) */
-      case '~':
-      case '.':
-        break;
-      case '\302':
-        if (*lp == '\254')                  /* NOT operator in UTF-8 format */
-          *(cp - 1) = *lp++;
-        else
-          goto char_err;
-        break;
-      case '(':
-        parens++;                           /* and monitor function */
-        break;
-      case ')':
-        if (UNLIKELY(!parens)) {
-          synterrp(csound, lp - 1, Str("unbalanced parens"));
-          cp--;
-        }
-        else
-          --parens;
-        break;
-      case '?':
-        if (UNLIKELY(!logical))
-          goto char_err;
-        condassgn++;
-        break;
-      case ':':
-        if (UNLIKELY(!condassgn))
-          goto char_err;
-        break;
-      default:
+      else
         goto char_err;
+      break;
+    case '&':
+    case '|':
+      if (*lp == c) {                     /* &&, ||, &, | */
+        if (UNLIKELY(!prvif && !parens))
+          goto char_err;
+        logical++; lp++; *cp++ = c;
       }
-      continue;                             /* loop back for next character */
- char_err:
-      {
-        char err_msg[64];
-        sprintf(err_msg, Str("illegal character %c"), c);
-        synterrp(csound, lp - 1, err_msg);
+      break;
+    case '!':
+    case '=':
+      if (UNLIKELY(!prvif && !parens))              /* ==, !=, <=, >= */
+        goto char_err;
+      logical++;
+      break;
+    case '+':                             /* arithmetic and bitwise ops */
+    case '-':
+    case '*':
+    case '/':
+    case '%':
+    case '^':
+    case '#':                             /* XOR */
+    case '\254':                          /* NOT (same as ~) */
+    case '~':
+    case '.':
+      break;
+    case '\302':
+      if (*lp == '\254')                  /* NOT operator in UTF-8 format */
+        *(cp - 1) = *lp++;
+      else
+        goto char_err;
+      break;
+    case '(':
+      parens++;                           /* and monitor function */
+      break;
+    case ')':
+      if (UNLIKELY(!parens)) {
+        synterrp(csound, lp - 1, Str("unbalanced parens"));
         cp--;
       }
+      else
+        --parens;
+      break;
+    case '?':
+      if (UNLIKELY(!logical))
+        goto char_err;
+      condassgn++;
+      break;
+    case ':':
+      if (UNLIKELY(!condassgn))
+        goto char_err;
+      break;
+    default:
+      goto char_err;
     }
-    *cp = '\0';                             /* terminate last group */
-    if (grpp && grpcnt == (ST(linlabels) + 1)) {
-      /* convert an 'else' statement into 2 lines
-         goto <endiflabel>
-         <elselabel>
-         to do this, we parse the current twice */
-      if (strcmp(grpp, "else") == 0) {
-        if (UNLIKELY(!ST(iflabels))) {    /* 'else': check to see we had an 'if' before */
-          synterr(csound, Str("invalid 'else' statement.  "
-                              "must have a corresponding 'if'"));
-          goto nxtlin;
-        }
-        if (ST(repeatingElseLine)) {        /* add the elselabel */
-          if (UNLIKELY(!ST(iflabels)->els[0])) {
-            /* check to see we had not another 'else' */
-            synterr(csound, Str("duplicate 'else' statement"));
-            goto nxtlin;
-          }
-          ST(linlabels)++;
-          strcpy(grpp, ST(iflabels)->els);
-          ST(iflabels)->els[0] = '\0';
-          ST(repeatingElseLine) = 0;
-        }
-        else {                              /* add the goto statement */
-          if (ST(iflabels)->ithen > 0)
-            strcpy(grpp, "goto");
-          else
-            strcpy(grpp, "kgoto");
-          ST(linlabels) = 0;                /* ignore any labels this time */
-          ST(group)[0] = grpp;
-          grpcnt = 1;
-          if (isopcod(csound, grpp))
-            ST(opgrpno) = grpcnt;
-          ST(group)[grpcnt] = strchr(grpp, '\0') + 1;
-          grpp = ST(group)[grpcnt++];
-          strcpy(grpp, ST(iflabels)->end);
-          ST(curline)--;        /* roll back one and parse this line again */
-          ST(repeatingElseLine) = 1;
-        }
-      }
-      else if (strcmp(grpp, "endif") == 0) {
-        /* replace 'endif' with the synthesized label */
-        struct iflabel *prv;
-        if (UNLIKELY(!ST(iflabels))) {    /* check to see we had an 'if' before  */
-          synterr(csound, Str("invalid 'endif' statement.  "
-                              "must have a corresponding 'if'"));
+    continue;                             /* loop back for next character */
+  char_err:
+    {
+      char err_msg[64];
+      sprintf(err_msg, Str("illegal character %c"), c);
+      synterrp(csound, lp - 1, err_msg);
+      cp--;
+    }
+  }
+  *cp = '\0';                             /* terminate last group */
+  if (grpp && grpcnt == (ST(linlabels) + 1)) {
+    /* convert an 'else' statement into 2 lines
+       goto <endiflabel>
+       <elselabel>
+       to do this, we parse the current twice */
+    if (strcmp(grpp, "else") == 0) {
+      if (UNLIKELY(!ST(iflabels))) {    /* 'else': check to see we had an 'if' before */
+        synterr(csound, Str("invalid 'else' statement.  "
+                            "must have a corresponding 'if'"));
+        goto nxtlin;
+      }
+      if (ST(repeatingElseLine)) {        /* add the elselabel */
+        if (UNLIKELY(!ST(iflabels)->els[0])) {
+          /* check to see we had not another 'else' */
+          synterr(csound, Str("duplicate 'else' statement"));
           goto nxtlin;
         }
-        if (ST(iflabels)->els[0]) {
-          /* we had no 'else' statement, so we need to insert the elselabel */
-          ST(linlabels)++;
-          strcpy(grpp, ST(iflabels)->els);
-          ST(iflabels)->els[0] = '\0';
-          ST(curline)--;        /* roll back one and parse this line again */
-        }
-        else {
-          prv = ST(iflabels)->prv;
-          ST(linlabels)++;
-          strcpy(grpp, ST(iflabels)->end);
-          mfree(csound, ST(iflabels));
-          ST(iflabels) = prv;
-        }
+        ST(linlabels)++;
+        strcpy(grpp, ST(iflabels)->els);
+        ST(iflabels)->els[0] = '\0';
+        ST(repeatingElseLine) = 0;
+      }
+      else {                              /* add the goto statement */
+        if (ST(iflabels)->ithen > 0)
+          strcpy(grpp, "goto");
+        else
+          strcpy(grpp, "kgoto");
+        ST(linlabels) = 0;                /* ignore any labels this time */
+        ST(group)[0] = grpp;
+        grpcnt = 1;
+        if (isopcod(csound, grpp))
+          ST(opgrpno) = grpcnt;
+        ST(group)[grpcnt] = strchr(grpp, '\0') + 1;
+        grpp = ST(group)[grpcnt++];
+        strcpy(grpp, ST(iflabels)->end);
+        ST(curline)--;        /* roll back one and parse this line again */
+        ST(repeatingElseLine) = 1;
       }
     }
-    if (!grpcnt)                        /* if line was trivial,    */
-      goto nxtlin;                      /*      try another        */
-    if (collecting && !ST(opgrpno)) {   /* if still collecting,    */
-      if (isopcod(csound, grpp))        /*      chk for opcod      */
-        ST(opgrpno) = grpcnt;
-    }
-    if (UNLIKELY(parens))                                   /* check balanced parens   */
-      synterrp(csound, lp - 1, Str("unbalanced parens"));
-    if (UNLIKELY(grpcnt > ST(linlabels) && !ST(opgrpno))) { /* if no full line opcod,  */
-      synterr(csound, Str("no legal opcode"));    /*      complain &         */
-      goto nxtlin;                                /*      try another        */
+    else if (strcmp(grpp, "endif") == 0) {
+      /* replace 'endif' with the synthesized label */
+      struct iflabel *prv;
+      if (UNLIKELY(!ST(iflabels))) {    /* check to see we had an 'if' before  */
+        synterr(csound, Str("invalid 'endif' statement.  "
+                            "must have a corresponding 'if'"));
+        goto nxtlin;
+      }
+      if (ST(iflabels)->els[0]) {
+        /* we had no 'else' statement, so we need to insert the elselabel */
+        ST(linlabels)++;
+        strcpy(grpp, ST(iflabels)->els);
+        ST(iflabels)->els[0] = '\0';
+        ST(curline)--;        /* roll back one and parse this line again */
+      }
+      else {
+        prv = ST(iflabels)->prv;
+        ST(linlabels)++;
+        strcpy(grpp, ST(iflabels)->end);
+        mfree(csound, ST(iflabels));
+        ST(iflabels) = prv;
+      }
     }
-    ST(linopnum) = ST(opnum);                     /* else save full line ops */
-    ST(linopcod) = ST(opcod);
-    if (UNLIKELY(csound->oparms->odebug))
-      printgroups(csound, grpcnt);
-    return grpcnt;
+  }
+  if (!grpcnt)                        /* if line was trivial,    */
+    goto nxtlin;                      /*      try another        */
+  if (collecting && !ST(opgrpno)) {   /* if still collecting,    */
+    if (isopcod(csound, grpp))        /*      chk for opcod      */
+      ST(opgrpno) = grpcnt;
+  }
+  if (UNLIKELY(parens))                                   /* check balanced parens   */
+    synterrp(csound, lp - 1, Str("unbalanced parens"));
+  if (UNLIKELY(grpcnt > ST(linlabels) && !ST(opgrpno))) { /* if no full line opcod,  */
+    synterr(csound, Str("no legal opcode"));    /*      complain &         */
+    goto nxtlin;                                /*      try another        */
+  }
+  ST(linopnum) = ST(opnum);                     /* else save full line ops */
+  ST(linopcod) = ST(opcod);
+  if (UNLIKELY(csound->oparms->odebug))
+    printgroups(csound, grpcnt);
+  return grpcnt;
 }
 
 static void resetouts(CSOUND *csound)
 {
-    csound->acount = csound->kcount = csound->icount = 0;
-    csound->Bcount = csound->bcount = 0;
+  csound->acount = csound->kcount = csound->icount = 0;
+  csound->Bcount = csound->bcount = 0;
 }
 
 TEXT *getoptxt(CSOUND *csound, int *init)
 {                               /* get opcod and args from current line */
                                 /*      returns pntr to a TEXT struct   */
-    TEXT        *tp;
-    char        c, d, str[64], *s;
-    int         nn, incnt, outcnt;
-
-    if (*init) {
-      ST(grpcnt)   = 0;
-      ST(nxtest)   = 1;
-      ST(xprtstno) = 0;
-      ST(polcnt)   = 0;
-      ST(instrblk) = 0;
-      ST(opcodblk) = 0;     /* IV - Sep 8 2002 */
-      ST(instrcnt) = 0;
-      *init    = 0;
-      memset(&ST(optext), 0, sizeof(TEXT));
-    }
+  TEXT        *tp;
+  char        c, d, str[64], *s;
+  int         nn, incnt, outcnt;
+
+  if (*init) {
+    ST(grpcnt)   = 0;
+    ST(nxtest)   = 1;
+    ST(xprtstno) = 0;
+    ST(polcnt)   = 0;
+    ST(instrblk) = 0;
+    ST(opcodblk) = 0;     /* IV - Sep 8 2002 */
+    ST(instrcnt) = 0;
+    *init    = 0;
+    memset(&ST(optext), 0, sizeof(TEXT));
+  }
 
  tstnxt:
-    tp = &ST(optext);
-    if (ST(nxtest) >= ST(grpcnt)) {             /* if done with prevline, */
-      csound->argcnt_offs = 0;          /* reset temporary variable index */
-      if (!(ST(grpcnt) = splitline(csound))) {  /*    attack next line    */
-        /* end of orchestra, clean up */
-        mfree(csound, ST(linadr));      ST(linadr) = NULL;
-        mfree(csound, ST(ortext));      ST(ortext) = NULL;
-        mfree(csound, ST(collectbuf));  ST(collectbuf) = NULL;
-        mfree(csound, ST(group));       ST(group) = NULL;
-        mfree(csound, ST(grpsav));      ST(grpsav) = NULL;
-        mfree(csound, csound->tokens);      csound->tokens = NULL;
-        mfree(csound, csound->tokenlist);   csound->tokenlist = NULL;
-        mfree(csound, csound->tokenstring); csound->tokenstring = NULL;
-        mfree(csound, csound->polish);      csound->polish = NULL;
-        csound->token = NULL;
-        return (TEXT*) NULL;                    /*    (else we're done)   */
-      }
-      for (nn=0; nn<ST(grpcnt); nn++)           /*    save the group pntrs */
-        ST(grpsav)[nn] = ST(group)[nn];
-      ST(xprtstno) = ST(grpcnt) - 1;            /*    and reinit indices  */
-      ST(nxtest) = 0;
-      tp->linenum = ST(curline);
-      /* IV - Jan 27 2005 */
-      if (csound->oparms->expr_opt) {
-        int i = (int) ST(linlabels) + 1;
-        if (((int) ST(grpcnt) - i) > 0 && ST(group)[i][0] == '=' &&
-            ST(group)[i][1] == '\0') {
-          /* if opcode is '=', save outarg and type for expression optimiser */
-          csound->opcode_is_assign = 1;
-          csound->assign_type = (int) argtyp(csound, ST(group)[ST(linlabels)]);
-          csound->assign_outarg = strsav_string(csound,
-                                                ST(group)[ST(linlabels)]);
-        }
-        else {
-          csound->opcode_is_assign = csound->assign_type = 0;
-          csound->assign_outarg = NULL;
-        }
-      }
+  tp = &ST(optext);
+  if (ST(nxtest) >= ST(grpcnt)) {             /* if done with prevline, */
+    csound->argcnt_offs = 0;          /* reset temporary variable index */
+    if (!(ST(grpcnt) = splitline(csound))) {  /*    attack next line    */
+      /* end of orchestra, clean up */
+      mfree(csound, ST(linadr));      ST(linadr) = NULL;
+      mfree(csound, ST(ortext));      ST(ortext) = NULL;
+      mfree(csound, ST(collectbuf));  ST(collectbuf) = NULL;
+      mfree(csound, ST(group));       ST(group) = NULL;
+      mfree(csound, ST(grpsav));      ST(grpsav) = NULL;
+      mfree(csound, csound->tokens);      csound->tokens = NULL;
+      mfree(csound, csound->tokenlist);   csound->tokenlist = NULL;
+      mfree(csound, csound->tokenstring); csound->tokenstring = NULL;
+      mfree(csound, csound->polish);      csound->polish = NULL;
+      csound->token = NULL;
+      return (TEXT*) NULL;                    /*    (else we're done)   */
     }
-    if (ST(linlabels)) {
-      s = strsav_string(csound, ST(group)[ST(nxtest)]);
-      lblfound(csound, s);
-      tp->opnum = LABEL;
-      tp->opcod = s;
-      tp->inlist = tp->outlist = ST(nullist);
-      ST(linlabels)--;
-      ST(nxtest)++;
-      return(tp);
-    }
-    if (!ST(instrcnt)) {                          /* send initial "instr 0"  */
-      tp->opnum = INSTR;
-      tp->opcod = strsav_string(csound, "instr"); /*  to hold global assigns */
-      tp->outlist = ST(nullist);
-      ST(nxtarglist)->count = 1;
-      ST(nxtarglist)->arg[0] = strsav_string(csound, "0");
-      tp->inlist = copy_arglist(csound, ST(nxtarglist));
-      ST(instrcnt) = ST(instrblk) = 1;
-      return(tp);
-    }                                             /* then at 1st real INSTR, */
-                                                  /*               or OPCODE, */
-    if (ST(instrcnt) == 1 && ST(instrblk) &&
-        (ST(opnum) == INSTR || ST(opnum) == OPCODE)) {
-      tp->opnum = ENDIN;                          /*  send an endin to */
-      tp->opcod = strsav_string(csound, "endin"); /*  term instr 0 blk */
-      tp->outlist = tp->inlist = ST(nullist);
-      ST(instrblk) = 0;
-      ST(instrcnt) = 2;
-      return(tp);
-    }
-    while (ST(xprtstno) >= 0) {             /* for each arg (last 1st):  */
-      if (!ST(polcnt)) {
-        /* if not midst of expressn: tst nxtarg */
-        ST(polcnt) = express(csound, ST(group)[ST(xprtstno)--]);
-        /* IV - Feb 06 2006: if there is an if/then with an unknown rate: */
-        if (ST(polcnt) > 0 && ST(iflabels) != NULL && ST(iflabels)->ithen < 0) {
-          char  tmp;
-          /* check the output type of the expression (FIXME: is this safe ?) */
-          /* if it is an i-rate conditional, set ithen flag for else/elseif */
-          tmp = argtyp(csound, csound->tokenlist[0]->str);
-          if (tmp == (char) 'b')
-            ST(iflabels)->ithen = 1;
-          else
-            ST(iflabels)->ithen = 0;
-        }
+    for (nn=0; nn<ST(grpcnt); nn++)           /*    save the group pntrs */
+      ST(grpsav)[nn] = ST(group)[nn];
+    ST(xprtstno) = ST(grpcnt) - 1;            /*    and reinit indices  */
+    ST(nxtest) = 0;
+    tp->linenum = ST(curline);
+    /* IV - Jan 27 2005 */
+    if (csound->oparms->expr_opt) {
+      int i = (int) ST(linlabels) + 1;
+      if (((int) ST(grpcnt) - i) > 0 && ST(group)[i][0] == '=' &&
+          ST(group)[i][1] == '\0') {
+        /* if opcode is '=', save outarg and type for expression optimiser */
+        csound->opcode_is_assign = 1;
+        csound->assign_type = (int) argtyp(csound, ST(group)[ST(linlabels)]);
+        csound->assign_outarg = strsav_string(csound,
+                                              ST(group)[ST(linlabels)]);
       }
-      if (ST(polcnt) < 0) {
-        /* polish but arg only: redo ptr & contin */
-        ST(group)[ST(xprtstno)+1] = strsav_string(csound, csound->tokenstring);
-        ST(polcnt) = 0;
-      }
-      else if (ST(polcnt)) {
-        POLISH  *pol;                           /* for real polish ops, */
-        int n;
-        pol = &(csound->polish[--ST(polcnt)]);  /*    grab top one      */
-        if (UNLIKELY(isopcod(csound, pol->opcod) == 0)) { /* and check it out     */
-          synterr(csound, Str("illegal opcod from expr anal"));
-          goto tstnxt;
-        }
-        tp->opnum = ST(opnum);                  /* ok to send subop     */
-        tp->opcod = strsav_string(csound, ST(opcod));
-        ST(nxtarglist)->count = outcnt = 1;
-        ST(nxtarglist)->arg[0] = strsav_string(csound, pol->arg[0]);
-        tp->outlist = copy_arglist(csound, ST(nxtarglist));
-        n = ST(nxtarglist)->count = incnt = pol->incount;
-        do  ST(nxtarglist)->arg[n-1] = strsav_string(csound, pol->arg[n]);
-        while (--n);
-        tp->inlist = copy_arglist(csound, ST(nxtarglist));
-        if (!ST(polcnt))                    /* last op? hit the grp ptr */
-          ST(group)[ST(xprtstno)+1] = tp->outlist->arg[0];
-        goto spctst;
+      else {
+        csound->opcode_is_assign = csound->assign_type = 0;
+        csound->assign_outarg = NULL;
       }
     }
-    if (!strcmp(ST(linopcod), "=")) {       /* IV - Jan 08 2003: '=' opcode */
-      if (csound->oparms->expr_opt && csound->opcode_is_assign < 0) {
-        /* if optimised away, skip line */
-        ST(nxtest) = ST(grpcnt); goto tstnxt;
-      }
-      if (ST(nxtest) < ST(opgrpno)) {
-        c = argtyp(csound, ST(group)[ST(nxtest)]);
-        switch (c) {
-          case 'S': strcpy(str, "strcpy"); break;
-          case 'a': c = argtyp(csound, ST(group)[ST(opgrpno)]);
-                    strcpy(str, (c == 'a' ? "=.a" : "upsamp")); break;
-          case 'p': c = 'i';
-          default:  sprintf(str, "=.%c", c);
-        }
-        if (UNLIKELY(!(isopcod(csound, str)))) {
-          synterr(csound,
-                  Str("failed to find %s, output arg '%s' illegal type"),
-                  str, ST(group)[ST(nxtest)]);  /* report syntax error     */
-          ST(nxtest) = 100;                     /* step way over this line */
-          goto tstnxt;                          /* & go to next            */
-        }
-        if (strcmp(ST(group)[ST(nxtest)], ST(group)[ST(opgrpno)]) == 0) {
-          /* outarg same as inarg, skip line */
-          ST(nxtest) = ST(grpcnt); goto tstnxt;
-        }
-        ST(linopnum) = ST(opnum);
-        ST(linopcod) = ST(opcod);
-        csound->DebugMsg(csound, Str("modified opcod: %s"), ST(opcod));
+  }
+  if (ST(linlabels)) {
+    s = strsav_string(csound, ST(group)[ST(nxtest)]);
+    lblfound(csound, s);
+    tp->opnum = LABEL;
+    tp->opcod = s;
+    tp->inlist = tp->outlist = ST(nullist);
+    ST(linlabels)--;
+    ST(nxtest)++;
+    return(tp);
+  }
+  if (!ST(instrcnt)) {                          /* send initial "instr 0"  */
+    tp->opnum = INSTR;
+    tp->opcod = strsav_string(csound, "instr"); /*  to hold global assigns */
+    tp->outlist = ST(nullist);
+    ST(nxtarglist)->count = 1;
+    ST(nxtarglist)->arg[0] = strsav_string(csound, "0");
+    tp->inlist = copy_arglist(csound, ST(nxtarglist));
+    ST(instrcnt) = ST(instrblk) = 1;
+    return(tp);
+  }                                             /* then at 1st real INSTR, */
+  /*               or OPCODE, */
+  if (ST(instrcnt) == 1 && ST(instrblk) &&
+      (ST(opnum) == INSTR || ST(opnum) == OPCODE)) {
+    tp->opnum = ENDIN;                          /*  send an endin to */
+    tp->opcod = strsav_string(csound, "endin"); /*  term instr 0 blk */
+    tp->outlist = tp->inlist = ST(nullist);
+    ST(instrblk) = 0;
+    ST(instrcnt) = 2;
+    return(tp);
+  }
+  while (ST(xprtstno) >= 0) {             /* for each arg (last 1st):  */
+    if (!ST(polcnt)) {
+      /* if not midst of expressn: tst nxtarg */
+      ST(polcnt) = express(csound, ST(group)[ST(xprtstno)--]);
+      /* IV - Feb 06 2006: if there is an if/then with an unknown rate: */
+      if (ST(polcnt) > 0 && ST(iflabels) != NULL && ST(iflabels)->ithen < 0) {
+        char  tmp;
+        /* check the output type of the expression (FIXME: is this safe ?) */
+        /* if it is an i-rate conditional, set ithen flag for else/elseif */
+        tmp = argtyp(csound, csound->tokenlist[0]->str);
+        if (tmp == (char) 'b')
+          ST(iflabels)->ithen = 1;
+        else
+          ST(iflabels)->ithen = 0;
       }
     }
-    else if (ST(nxtest) < ST(opgrpno) &&  /* Some aopcodes do not have ans! */
-             csound->opcodlst[ST(linopnum)].dsblksiz == 0xffff) {
-      /* use outype to modify some opcodes flagged as translating */
+    if (ST(polcnt) < 0) {
+      /* polish but arg only: redo ptr & contin */
+      ST(group)[ST(xprtstno)+1] = strsav_string(csound, csound->tokenstring);
+      ST(polcnt) = 0;
+    }
+    else if (ST(polcnt)) {
+      POLISH  *pol;                           /* for real polish ops, */
+      int n;
+      pol = &(csound->polish[--ST(polcnt)]);  /*    grab top one      */
+      if (UNLIKELY(isopcod(csound, pol->opcod) == 0)) { /* and check it out     */
+        synterr(csound, Str("illegal opcod from expr anal"));
+        goto tstnxt;
+      }
+      tp->opnum = ST(opnum);                  /* ok to send subop     */
+      tp->opcod = strsav_string(csound, ST(opcod));
+      ST(nxtarglist)->count = outcnt = 1;
+      ST(nxtarglist)->arg[0] = strsav_string(csound, pol->arg[0]);
+      tp->outlist = copy_arglist(csound, ST(nxtarglist));
+      n = ST(nxtarglist)->count = incnt = pol->incount;
+      do  ST(nxtarglist)->arg[n-1] = strsav_string(csound, pol->arg[n]);
+      while (--n);
+      tp->inlist = copy_arglist(csound, ST(nxtarglist));
+      if (!ST(polcnt))                    /* last op? hit the grp ptr */
+        ST(group)[ST(xprtstno)+1] = tp->outlist->arg[0];
+      goto spctst;
+    }
+  }
+  if (!strcmp(ST(linopcod), "=")) {       /* IV - Jan 08 2003: '=' opcode */
+    if (csound->oparms->expr_opt && csound->opcode_is_assign < 0) {
+      /* if optimised away, skip line */
+      ST(nxtest) = ST(grpcnt); goto tstnxt;
+    }
+    if (ST(nxtest) < ST(opgrpno)) {
       c = argtyp(csound, ST(group)[ST(nxtest)]);
-      if (c == 'p')   c = 'i';
-      if (c == '?')   c = 'a';                  /* tmp */
-      sprintf(str, "%s.%c", ST(linopcod), c);
+      switch (c) {
+      case 'S': strcpy(str, "strcpy"); break;
+      case 'a': c = argtyp(csound, ST(group)[ST(opgrpno)]);
+        strcpy(str, (c == 'a' ? "=.a" : "upsamp")); break;
+      case 'p': c = 'i';
+      default:  sprintf(str, "=.%c", c);
+      }
       if (UNLIKELY(!(isopcod(csound, str)))) {
-        synterr(csound, Str("failed to find %s, output arg '%s' illegal type"),
-                str, ST(group)[ST(nxtest)]);    /* report syntax error     */
-        ST(nxtest) = 100;                       /* step way over this line */
-        goto tstnxt;                            /* & go to next            */
+        synterr(csound,
+                Str("failed to find %s, output arg '%s' illegal type"),
+                str, ST(group)[ST(nxtest)]);  /* report syntax error     */
+        ST(nxtest) = 100;                     /* step way over this line */
+        goto tstnxt;                          /* & go to next            */
+      }
+      if (strcmp(ST(group)[ST(nxtest)], ST(group)[ST(opgrpno)]) == 0) {
+        /* outarg same as inarg, skip line */
+        ST(nxtest) = ST(grpcnt); goto tstnxt;
       }
       ST(linopnum) = ST(opnum);
       ST(linopcod) = ST(opcod);
       csound->DebugMsg(csound, Str("modified opcod: %s"), ST(opcod));
     }
-    else if ((int) csound->opcodlst[ST(linopnum)].dsblksiz >= 0xfffb) {
-      c = argtyp(csound, ST(group)[ST(opgrpno)]); /* type of first input arg */
-      switch ((int) csound->opcodlst[ST(linopnum)].dsblksiz) {
-      case 0xfffe:                              /* Two tags for OSCIL's    */
-        if (c != 'a') c = 'k';
-        if ((d = argtyp(csound, ST(group)[ST(opgrpno)+1])) != 'a') d = 'k';
-        sprintf(str, "%s.%c%c", ST(linopcod), c, d);
-        break;
-      case 0xfffd:                              /* For peak, etc.          */
+  }
+  else if (ST(nxtest) < ST(opgrpno) &&  /* Some aopcodes do not have ans! */
+           csound->opcodlst[ST(linopnum)].dsblksiz == 0xffff) {
+    /* use outype to modify some opcodes flagged as translating */
+    c = argtyp(csound, ST(group)[ST(nxtest)]);
+    if (c == 'p')   c = 'i';
+    if (c == '?')   c = 'a';                  /* tmp */
+    sprintf(str, "%s.%c", ST(linopcod), c);
+    if (UNLIKELY(!(isopcod(csound, str)))) {
+      synterr(csound, Str("failed to find %s, output arg '%s' illegal type"),
+              str, ST(group)[ST(nxtest)]);    /* report syntax error     */
+      ST(nxtest) = 100;                       /* step way over this line */
+      goto tstnxt;                            /* & go to next            */
+    }
+    ST(linopnum) = ST(opnum);
+    ST(linopcod) = ST(opcod);
+    csound->DebugMsg(csound, Str("modified opcod: %s"), ST(opcod));
+  }
+  else if ((int) csound->opcodlst[ST(linopnum)].dsblksiz >= 0xfffb) {
+    c = argtyp(csound, ST(group)[ST(opgrpno)]); /* type of first input arg */
+    switch ((int) csound->opcodlst[ST(linopnum)].dsblksiz) {
+    case 0xfffe:                              /* Two tags for OSCIL's    */
+      if (c != 'a') c = 'k';
+      if ((d = argtyp(csound, ST(group)[ST(opgrpno)+1])) != 'a') d = 'k';
+      sprintf(str, "%s.%c%c", ST(linopcod), c, d);
+      break;
+    case 0xfffd:                              /* For peak, etc.          */
+      if (c != 'a') c = 'k';
+      sprintf(str, "%s.%c", ST(linopcod), c);
+      break;
+    case 0xfffc:                              /* For divz types          */
+      d = argtyp(csound, ST(group)[ST(opgrpno)+1]);
+      if ((c=='i' || c=='c') && (d=='i' || d=='c'))
+        c = 'i', d = 'i';
+      else {
         if (c != 'a') c = 'k';
-        sprintf(str, "%s.%c", ST(linopcod), c);
-        break;
-      case 0xfffc:                              /* For divz types          */
-        d = argtyp(csound, ST(group)[ST(opgrpno)+1]);
-        if ((c=='i' || c=='c') && (d=='i' || d=='c'))
-          c = 'i', d = 'i';
-        else {
-          if (c != 'a') c = 'k';
-          if (d != 'a') d = 'k';
-        }
-        sprintf(str, "%s.%c%c", ST(linopcod), c, d);
-        break;
-      case 0xfffb:          /* determine opcode by type of first input arg */
-            /* allows a, k, and i types (e.g. Inc, Dec), but not constants */
-        if (ST(typemask_tabl)[(unsigned char) c] & (ARGTYP_i | ARGTYP_p))
-          c = 'i';
-        sprintf(str, "%s.%c", ST(linopcod), c);
-        break;
-      default:
-        strcpy(str, ST(linopcod));  /* unknown code: use original opcode   */
-      }
-      if (UNLIKELY(!(isopcod(csound, str)))) {
-                        /* if opcode is not found: report syntax error     */
-        synterr(csound, Str("failed to find %s, input arg illegal type"), str);
-        ST(nxtest) = 100;                       /* step way over this line */
-        goto tstnxt;                            /* & go to next            */
-      }
-      ST(linopnum) = ST(opnum);
-      ST(linopcod) = ST(opcod);
-      csound->DebugMsg(csound, Str("modified opcod: %s"), ST(opcod));
+        if (d != 'a') d = 'k';
+      }
+      sprintf(str, "%s.%c%c", ST(linopcod), c, d);
+      break;
+    case 0xfffb:          /* determine opcode by type of first input arg */
+      /* allows a, k, and i types (e.g. Inc, Dec), but not constants */
+      if (ST(typemask_tabl)[(unsigned char) c] & (ARGTYP_i | ARGTYP_p))
+        c = 'i';
+      sprintf(str, "%s.%c", ST(linopcod), c);
+      break;
+    default:
+      strcpy(str, ST(linopcod));  /* unknown code: use original opcode   */
     }
-    tp->opnum = ST(linopnum);                         /* now use identified   */
-    tp->opcod = strsav_string(csound, ST(linopcod));  /*   full line opcode   */
-    /* IV - Oct 24 2002: check for invalid use of setksmps */
-    if (strcmp(ST(linopcod), "setksmps") == 0) {
-      if (UNLIKELY(!ST(opcodblk)))
-        synterr(csound,
-                Str("setksmps is allowed only in user defined opcodes"));
-      else if (UNLIKELY((int) ST(opcodflg) & 4))
-        synterr(csound,
-                Str("multiple uses of setksmps in the same opcode definition"));
-      else
-        ST(opcodflg) |= (int16) 4;
-    }
-    if (strncmp(ST(linopcod),"out",3) == 0 && /* but take case of MIDI ops */
-        (ST(linopcod)[3] == '\0' || ST(linopcod)[3] == 's' ||
-         ST(linopcod)[3] == 'q'  || ST(linopcod)[3] == 'h' ||
-         ST(linopcod)[3] == 'o'  || ST(linopcod)[3] == 'x' ||
-         ST(linopcod)[3] == '3'     ))
-      if ((csound->tran_nchnls == 1  && strcmp(ST(linopcod),"out" ) != 0)    ||
-          (csound->tran_nchnls == 2  && strncmp(ST(linopcod),"outs",4) != 0) ||
-          (csound->tran_nchnls == 4  && strncmp(ST(linopcod),"outq",4) != 0) ||
-          (csound->tran_nchnls == 6  && strncmp(ST(linopcod),"outh",4) != 0) ||
-          (csound->tran_nchnls == 8  && strncmp(ST(linopcod),"outo",4) != 0) ||
-          (csound->tran_nchnls == 16 && strncmp(ST(linopcod),"outx",4) != 0) ||
-          (csound->tran_nchnls == 32 && strncmp(ST(linopcod),"out32",5) != 0)) {
-        if      (csound->tran_nchnls == 1)  isopcod(csound, "out");
-        else if (csound->tran_nchnls == 2)  isopcod(csound, "outs");
-        else if (csound->tran_nchnls == 4)  isopcod(csound, "outq");
-        else if (csound->tran_nchnls == 6)  isopcod(csound, "outh");
-        else if (csound->tran_nchnls == 8)  isopcod(csound, "outo");
-        else if (csound->tran_nchnls == 16) isopcod(csound, "outx");
-        else if (csound->tran_nchnls == 32) isopcod(csound, "out32");
-        csound->Message(csound, Str("%s inconsistent with global nchnls (%d); "
-                                    "replaced with %s\n"),
-                                ST(linopcod), csound->tran_nchnls, ST(opcod));
-        tp->opnum = ST(linopnum) = ST(opnum);
-        tp->opcod = strsav_string(csound, ST(linopcod) = ST(opcod));
-      }
-    incnt = outcnt = 0;
-    while (ST(nxtest) < ST(opgrpno)-1)          /* create the out arglist  */
-      ST(nxtarglist)->arg[outcnt++] =
-        strsav_string(csound, ST(group)[ST(nxtest)++]);
-    ST(nxtarglist)->count = outcnt;
-    if (outcnt == 0)
-      tp->outlist = ST(nullist);
-    else {
-      tp->outlist = copy_arglist(csound, ST(nxtarglist));   /* & prep ins */
+    if (UNLIKELY(!(isopcod(csound, str)))) {
+      /* if opcode is not found: report syntax error     */
+      synterr(csound, Str("failed to find %s, input arg illegal type"), str);
+      ST(nxtest) = 100;                       /* step way over this line */
+      goto tstnxt;                            /* & go to next            */
     }
-    ST(nxtest)++;
-    while (ST(nxtest) < ST(grpcnt))             /*      & ensuing inargs  */
-      ST(nxtarglist)->arg[incnt++] =
-        strsav_string(csound, ST(group)[ST(nxtest)++]);
-    ST(nxtarglist)->count = incnt;
-    if (incnt==0)
-      tp->inlist = ST(nullist);
-    else tp->inlist = copy_arglist(csound, ST(nxtarglist));
-    ST(grpcnt) = 0;                             /* all done w. these groups */
+    ST(linopnum) = ST(opnum);
+    ST(linopcod) = ST(opcod);
+    csound->DebugMsg(csound, Str("modified opcod: %s"), ST(opcod));
+  }
+  tp->opnum = ST(linopnum);                         /* now use identified   */
+  tp->opcod = strsav_string(csound, ST(linopcod));  /*   full line opcode   */
+  /* IV - Oct 24 2002: check for invalid use of setksmps */
+  if (strcmp(ST(linopcod), "setksmps") == 0) {
+    if (UNLIKELY(!ST(opcodblk)))
+      synterr(csound,
+              Str("setksmps is allowed only in user defined opcodes"));
+    else if (UNLIKELY((int) ST(opcodflg) & 4))
+      synterr(csound,
+              Str("multiple uses of setksmps in the same opcode definition"));
+    else
+      ST(opcodflg) |= (int16) 4;
+  }
+#if 0
+  /* NO LONGER USED */
+  if (strncmp(ST(linopcod),"out",3) == 0 && /* but take case of MIDI ops */
+      (ST(linopcod)[3] == '\0' || ST(linopcod)[3] == 's' ||
+       ST(linopcod)[3] == 'q'  || ST(linopcod)[3] == 'h' ||
+       ST(linopcod)[3] == 'o'  || ST(linopcod)[3] == 'x' ||
+       ST(linopcod)[3] == '3'     ))
+    if ((csound->tran_nchnls == 1  && strcmp(ST(linopcod),"out" ) != 0)    ||
+        (csound->tran_nchnls == 2  && strncmp(ST(linopcod),"outs",4) != 0) ||
+        (csound->tran_nchnls == 4  && strncmp(ST(linopcod),"outq",4) != 0) ||
+        (csound->tran_nchnls == 6  && strncmp(ST(linopcod),"outh",4) != 0) ||
+        (csound->tran_nchnls == 8  && strncmp(ST(linopcod),"outo",4) != 0) ||
+        (csound->tran_nchnls == 16 && strncmp(ST(linopcod),"outx",4) != 0) ||
+        (csound->tran_nchnls == 32 && strncmp(ST(linopcod),"out32",5) != 0)) {
+      if      (csound->tran_nchnls == 1)  isopcod(csound, "out");
+      else if (csound->tran_nchnls == 2)  isopcod(csound, "outs");
+      else if (csound->tran_nchnls == 4)  isopcod(csound, "outq");
+      else if (csound->tran_nchnls == 6)  isopcod(csound, "outh");
+      else if (csound->tran_nchnls == 8)  isopcod(csound, "outo");
+      else if (csound->tran_nchnls == 16) isopcod(csound, "outx");
+      else if (csound->tran_nchnls == 32) isopcod(csound, "out32");
+      csound->Message(csound, Str("%s inconsistent with global nchnls (%d); "
+                                  "replaced with %s\n"),
+                      ST(linopcod), csound->tran_nchnls, ST(opcod));
+      tp->opnum = ST(linopnum) = ST(opnum);
+      tp->opcod = strsav_string(csound, ST(linopcod) = ST(opcod));
+    }
+#endif
+  incnt = outcnt = 0;
+  while (ST(nxtest) < ST(opgrpno)-1)          /* create the out arglist  */
+    ST(nxtarglist)->arg[outcnt++] =
+      strsav_string(csound, ST(group)[ST(nxtest)++]);
+  ST(nxtarglist)->count = outcnt;
+  if (outcnt == 0)
+    tp->outlist = ST(nullist);
+  else {
+    tp->outlist = copy_arglist(csound, ST(nxtarglist));   /* & prep ins */
+  }
+  ST(nxtest)++;
+  while (ST(nxtest) < ST(grpcnt))             /*      & ensuing inargs  */
+    ST(nxtarglist)->arg[incnt++] =
+      strsav_string(csound, ST(group)[ST(nxtest)++]);
+  ST(nxtarglist)->count = incnt;
+  if (incnt==0)
+    tp->inlist = ST(nullist);
+  else tp->inlist = copy_arglist(csound, ST(nxtarglist));
+  ST(grpcnt) = 0;                             /* all done w. these groups */
 
  spctst:
-    tp->xincod_str = tp->xincod = 0;
-    if (tp->opnum == OPCODE) {  /* IV - Sep 8 2002: added OPCODE and ENDOP */
-      if (UNLIKELY(ST(opcodblk)))
-        synterr(csound, Str("opcode blks cannot be nested (missing 'endop'?)"));
-      else if (UNLIKELY(ST(instrblk)))
-        synterr(csound, Str("opcode not allowed in instr block"));
-      else ST(instrblk) = ST(opcodblk) = 1;
-      ST(opcodflg) = 0;
-      resetouts(csound);                        /* reset #out counts */
-      lblclear(csound);                         /* restart labelist  */
-    }
-    else if (tp->opnum == ENDOP) {      /* IV - Sep 8 2002:     ENDOP:  */
-      lblchk(csound);                   /* chk missed labels */
-      if (UNLIKELY(!ST(instrblk)))
-        synterr(csound, Str("unmatched endop"));
-      else if (UNLIKELY(!ST(opcodblk)))
-        synterr(csound, Str("endop not allowed in instr block"));
-      else ST(instrblk) = ST(opcodblk) = 0;
-    }
-    else if (tp->opnum == INSTR) {      /* IV - Sep 8 2002: for opcod INSTR  */
-      if (UNLIKELY(ST(opcodblk)))     /* IV - Sep 8 2002 */
-        synterr(csound, Str("instr not allowed in opcode block"));
-      else if (UNLIKELY(ST(instrblk)))
+  tp->xincod_str = tp->xincod = 0;
+  if (tp->opnum == OPCODE) {  /* IV - Sep 8 2002: added OPCODE and ENDOP */
+    if (UNLIKELY(ST(opcodblk)))
+      synterr(csound, Str("opcode blks cannot be nested (missing 'endop'?)"));
+    else if (UNLIKELY(ST(instrblk)))
+      synterr(csound, Str("opcode not allowed in instr block"));
+    else ST(instrblk) = ST(opcodblk) = 1;
+    ST(opcodflg) = 0;
+    resetouts(csound);                        /* reset #out counts */
+    lblclear(csound);                         /* restart labelist  */
+  }
+  else if (tp->opnum == ENDOP) {      /* IV - Sep 8 2002:     ENDOP:  */
+    lblchk(csound);                   /* chk missed labels */
+    if (UNLIKELY(!ST(instrblk)))
+      synterr(csound, Str("unmatched endop"));
+    else if (UNLIKELY(!ST(opcodblk)))
+      synterr(csound, Str("endop not allowed in instr block"));
+    else ST(instrblk) = ST(opcodblk) = 0;
+  }
+  else if (tp->opnum == INSTR) {      /* IV - Sep 8 2002: for opcod INSTR  */
+    if (UNLIKELY(ST(opcodblk)))     /* IV - Sep 8 2002 */
+      synterr(csound, Str("instr not allowed in opcode block"));
+    else if (UNLIKELY(ST(instrblk)))
+      synterr(csound,
+              Str("instr blocks cannot be nested (missing 'endin'?)"));
+    else ST(instrblk) = 1;
+    resetouts(csound);                        /* reset #out counts */
+    lblclear(csound);                         /* restart labelist  */
+  }
+  else if (tp->opnum == ENDIN) {              /* ENDIN:       */
+    lblchk(csound);                           /* chk missed labels */
+    if (UNLIKELY(ST(opcodblk)))
+      synterr(csound, Str("endin not allowed in opcode blk"));
+    else if (UNLIKELY(!ST(instrblk)))
+      synterr(csound, Str("unmatched endin"));
+    else ST(instrblk) = 0;
+  }
+  else {                                      /* for all other opcodes:  */
+    OENTRY    *ep = csound->opcodlst + tp->opnum;
+    int       n, nreqd;
+    char      tfound = '\0', treqd, *types = NULL;
+    char      xtypes[OPCODENUMOUTS_MAX + 1];  /* IV - Oct 24 2002 */
+
+    if (UNLIKELY(!ST(instrblk)))
+      synterr(csound, Str("misplaced opcode"));
+    /* IV - Oct 24 2002: moved argument parsing for xout here */
+    n = incnt;
+    nreqd = -1;
+    if (!strcmp(ep->opname, "xout")) {
+      if (UNLIKELY(!ST(opcodblk)))
+        synterr(csound, Str("xout is allowed only in user defined opcodes"));
+      else if (UNLIKELY((int) ST(opcodflg) & 2))
         synterr(csound,
-                Str("instr blocks cannot be nested (missing 'endin'?)"));
-      else ST(instrblk) = 1;
-      resetouts(csound);                        /* reset #out counts */
-      lblclear(csound);                         /* restart labelist  */
-    }
-    else if (tp->opnum == ENDIN) {              /* ENDIN:       */
-      lblchk(csound);                           /* chk missed labels */
-      if (UNLIKELY(ST(opcodblk)))
-        synterr(csound, Str("endin not allowed in opcode blk"));
-      else if (UNLIKELY(!ST(instrblk)))
-        synterr(csound, Str("unmatched endin"));
-      else ST(instrblk) = 0;
-    }
-    else {                                      /* for all other opcodes:  */
-      OENTRY    *ep = csound->opcodlst + tp->opnum;
-      int       n, nreqd;
-      char      tfound = '\0', treqd, *types = NULL;
-      char      xtypes[OPCODENUMOUTS_MAX + 1];  /* IV - Oct 24 2002 */
-
-      if (UNLIKELY(!ST(instrblk)))
-        synterr(csound, Str("misplaced opcode"));
-      /* IV - Oct 24 2002: moved argument parsing for xout here */
-      n = incnt;
-      nreqd = -1;
-      if (!strcmp(ep->opname, "xout")) {
-        if (UNLIKELY(!ST(opcodblk)))
-          synterr(csound, Str("xout is allowed only in user defined opcodes"));
-        else if (UNLIKELY((int) ST(opcodflg) & 2))
-          synterr(csound,
-                  Str("multiple uses of xout in the same opcode definition"));
-        else {
-          /* IV - Oct 24 2002: opcodeInfo always points to the most recently */
-          /* defined user opcode (or named instrument) structure; in this */
-          /* case, it is the current opcode definition (not very elegant, */
-          /* but works) */
-          char *c = csound->opcodeInfo->outtypes;
-          int i = 0;
-          ST(opcodflg) |= (int16) 2;
-          nreqd = csound->opcodeInfo->outchns;
-          /* replace opcode if needed */
-          if (nreqd > OPCODENUMOUTS_LOW) {
-            if (nreqd > OPCODENUMOUTS_HIGH)
-              isopcod(csound, ".xout256");
-            else
-              isopcod(csound, ".xout64");
-            ST(linopcod) = ST(opcod);
-            ST(linopnum) = ST(opnum);
-            tp->opcod = strsav_string(csound, ST(linopcod));
-            tp->opnum = ST(linopnum);
-            ep = csound->opcodlst + tp->opnum;
-            csound->DebugMsg(csound, Str("modified opcod: %s"), ST(opcod));
-          }
-          while (c[i]) {
-            switch (c[i]) {
-              case 'a':
-              case 'k':
-	      case 'f':
-              case 'i': xtypes[i] = c[i]; break;
-              case 'K': xtypes[i] = 'k';
-            }
-            i++;
-          }
-          xtypes[i] = '\0';
-          types = &xtypes[0];
+                Str("multiple uses of xout in the same opcode definition"));
+      else {
+        /* IV - Oct 24 2002: opcodeInfo always points to the most recently */
+        /* defined user opcode (or named instrument) structure; in this */
+        /* case, it is the current opcode definition (not very elegant, */
+        /* but works) */
+        char *c = csound->opcodeInfo->outtypes;
+        int i = 0;
+        ST(opcodflg) |= (int16) 2;
+        nreqd = csound->opcodeInfo->outchns;
+        /* replace opcode if needed */
+        if (nreqd > OPCODENUMOUTS_LOW) {
+          if (nreqd > OPCODENUMOUTS_HIGH)
+            isopcod(csound, ".xout256");
+          else
+            isopcod(csound, ".xout64");
+          ST(linopcod) = ST(opcod);
+          ST(linopnum) = ST(opnum);
+          tp->opcod = strsav_string(csound, ST(linopcod));
+          tp->opnum = ST(linopnum);
+          ep = csound->opcodlst + tp->opnum;
+          csound->DebugMsg(csound, Str("modified opcod: %s"), ST(opcod));
         }
-      }
-      if (nreqd < 0)    /* for other opcodes */
-        nreqd = strlen(types = ep->intypes);
-      if (n > nreqd) {                  /* IV - Oct 24 2002: end of new code */
-        if ((treqd = types[nreqd-1]) == 'n') {  /* indef args: */
-          if (UNLIKELY(!(incnt & 01)))                    /* require odd */
-            synterr(csound, Str("missing or extra arg"));
-        }       /* IV - Sep 1 2002: added 'M' */
-        else if (UNLIKELY(treqd != 'm' && treqd != 'z' && treqd != 'y' &&
-                          treqd != 'Z' && treqd != 'M' &&
-                          treqd != 'N')) /* else any no */
-          synterr(csound, Str("too many input args"));
-      }
-      else if (incnt < nreqd) {         /*  or set defaults: */
-        do {
-          switch (types[incnt]) {
-          case 'O':             /* Will this work?  Doubtful code.... */
-          case 'o': ST(nxtarglist)->arg[incnt++] = strsav_string(csound, "0");
-            break;
-          case 'P':
-          case 'p': ST(nxtarglist)->arg[incnt++] = strsav_string(csound, "1");
-            break;
-          case 'q': ST(nxtarglist)->arg[incnt++] = strsav_string(csound, "10");
-            break;
-          case 'V':
-          case 'v': ST(nxtarglist)->arg[incnt++] = strsav_string(csound, ".5");
-            break;
-          case 'h': ST(nxtarglist)->arg[incnt++] = strsav_string(csound, "127");
-            break;
-          case 'J':
-          case 'j': ST(nxtarglist)->arg[incnt++] = strsav_string(csound, "-1");
-            break;
-          case 'F':
-          case 'M':
-          case 'N':
-          case 'm': nreqd--;
-            break;
-          default:  synterr(csound, Str("insufficient required arguments"));
-            goto chkin;
+        while (c[i]) {
+          switch (c[i]) {
+          case 'a':
+          case 'k':
+          case 'f':
+          case 'i': xtypes[i] = c[i]; break;
+          case 'K': xtypes[i] = 'k';
           }
-        } while (incnt < nreqd);
-        ST(nxtarglist)->count = n = incnt;          /*    in extra space */
-        if (tp->inlist == ST(nullist) && incnt > 0) {
-                                /*MWB 2/11/97 fixed bug that prevented an
-                                  opcode with only optional arguments from
-                                  properly loading defaults */
-          tp->inlist = copy_arglist(csound, ST(nxtarglist));
+          i++;
         }
+        xtypes[i] = '\0';
+        types = &xtypes[0];
       }
-    chkin:
-      if (n>tp->inlist->count) {
-        int i;
-        size_t m = sizeof(ARGLST) + (n - 1) * sizeof(char*);
-        tp->inlist = (ARGLST*) mrealloc(csound, tp->inlist, m);
-        for (i=tp->inlist->count; i<n; i++) {
-          tp->inlist->arg[i] = ST(nxtarglist)->arg[i];
-        }
-        tp->inlist->count = n;
-      }
-      while (n--) {                     /* inargs:   */
-        int32    tfound_m, treqd_m = 0L;
-        s = tp->inlist->arg[n];
-        if (n >= nreqd) {               /* det type required */
-          switch (types[nreqd-1]) {
-            case 'M':
-            case 'N':
-            case 'Z':
-            case 'y':
-            case 'z':   treqd = types[nreqd-1]; break;
-            default:    treqd = 'i';    /*   (indef in-type) */
-          }
-        }
-        else treqd = types[n];          /*       or given)   */
-        if (treqd == 'l') {             /* if arg takes lbl  */
-          csound->DebugMsg(csound, "treqd = l");
-          lblrequest(csound, s);        /*      req a search */
-          continue;                     /*      chk it later */
-        }
-        tfound = argtyp(csound, s);     /* else get arg type */
-        /* IV - Oct 31 2002 */
-        tfound_m = ST(typemask_tabl)[(unsigned char) tfound];
-        if (UNLIKELY(!(tfound_m & (ARGTYP_c|ARGTYP_p)) &&
-                     !ST(lgprevdef) && *s != '"')) {
-          synterr(csound, Str("input arg '%s' used before defined"), s);
+    }
+    if (nreqd < 0)    /* for other opcodes */
+      nreqd = strlen(types = ep->intypes);
+    if (n > nreqd) {                  /* IV - Oct 24 2002: end of new code */
+      if ((treqd = types[nreqd-1]) == 'n') {  /* indef args: */
+        if (UNLIKELY(!(incnt & 01)))                    /* require odd */
+          synterr(csound, Str("missing or extra arg"));
+      }       /* IV - Sep 1 2002: added 'M' */
+      else if (UNLIKELY(treqd != 'm' && treqd != 'z' && treqd != 'y' &&
+                        treqd != 'Z' && treqd != 'M' &&
+                        treqd != 'N')) /* else any no */
+        synterr(csound, Str("too many input args"));
+    }
+    else if (incnt < nreqd) {         /*  or set defaults: */
+      do {
+        switch (types[incnt]) {
+        case 'O':             /* Will this work?  Doubtful code.... */
+        case 'o': ST(nxtarglist)->arg[incnt++] = strsav_string(csound, "0");
+          break;
+        case 'P':
+        case 'p': ST(nxtarglist)->arg[incnt++] = strsav_string(csound, "1");
+          break;
+        case 'q': ST(nxtarglist)->arg[incnt++] = strsav_string(csound, "10");
+          break;
+        case 'V':
+        case 'v': ST(nxtarglist)->arg[incnt++] = strsav_string(csound, ".5");
+          break;
+        case 'h': ST(nxtarglist)->arg[incnt++] = strsav_string(csound, "127");
+          break;
+        case 'J':
+        case 'j': ST(nxtarglist)->arg[incnt++] = strsav_string(csound, "-1");
+          break;
+        case 'F':
+        case 'M':
+        case 'N':
+        case 'm': nreqd--;
+          break;
+        default:  synterr(csound, Str("insufficient required arguments"));
+          goto chkin;
         }
-        csound->DebugMsg(csound, "treqd %c, tfound %c", treqd, tfound);
-        if (tfound == 'a' && n < 31)    /* JMC added for FOG */
-          /* 4 for FOF, 8 for FOG; expanded to 15  */
-          tp->xincod |= (1 << n);
-        if (tfound == 'S' && n < 31)
-          tp->xincod_str |= (1 << n);
-        /* IV - Oct 31 2002: simplified code */
-        if (!(tfound_m & ST(typemask_tabl_in)[(unsigned char) treqd])) {
-          /* check for exceptional types */
-          switch (treqd) {
-          case 'I':
-            treqd_m = ARGTYP_i;
-            break;
-          case 'Z':                             /* indef kakaka ... */
-            if (UNLIKELY(!(tfound_m & (n & 1 ? ARGTYP_a : ARGTYP_ipcrk))))
-              intyperr(csound, n, tfound, treqd);
-            break;
-          case 'x':
-            treqd_m = ARGTYP_ipcr;              /* also allows i-rate */
-          case 's':                             /* a- or k-rate */
-            treqd_m |= ARGTYP_a | ARGTYP_k;
-            if (tfound_m & treqd_m) {
-              if (tfound == 'a' && tp->outlist != ST(nullist)) {
-                int32 outyp_m =                  /* ??? */
-                  ST(typemask_tabl)[(unsigned char) argtyp(csound,
-                                                       tp->outlist->arg[0])];
-                if (outyp_m & (ARGTYP_a | ARGTYP_w | ARGTYP_f)) break;
-              }
-              else
-                break;
-            }
-          default:
-            intyperr(csound, n, tfound, treqd);
-            break;
-          }
+      } while (incnt < nreqd);
+      ST(nxtarglist)->count = n = incnt;          /*    in extra space */
+      if (tp->inlist == ST(nullist) && incnt > 0) {
+        /*MWB 2/11/97 fixed bug that prevented an
+          opcode with only optional arguments from
+          properly loading defaults */
+        tp->inlist = copy_arglist(csound, ST(nxtarglist));
+      }
+    }
+  chkin:
+    if (n>tp->inlist->count) {
+      int i;
+      size_t m = sizeof(ARGLST) + (n - 1) * sizeof(char*);
+      tp->inlist = (ARGLST*) mrealloc(csound, tp->inlist, m);
+      for (i=tp->inlist->count; i<n; i++) {
+        tp->inlist->arg[i] = ST(nxtarglist)->arg[i];
+      }
+      tp->inlist->count = n;
+    }
+    while (n--) {                     /* inargs:   */
+      int32    tfound_m, treqd_m = 0L;
+      s = tp->inlist->arg[n];
+      if (n >= nreqd) {               /* det type required */
+        switch (types[nreqd-1]) {
+        case 'M':
+        case 'N':
+        case 'Z':
+        case 'y':
+        case 'z':   treqd = types[nreqd-1]; break;
+        default:    treqd = 'i';    /*   (indef in-type) */
         }
       }
-      csound->DebugMsg(csound, "xincod = %d", tp->xincod);
-      /* IV - Sep 1 2002: added 'X' type, and xoutcod */
-      tp->xoutcod_str = tp->xoutcod = 0;
-      /* IV - Oct 24 2002: moved argument parsing for xin here */
-      n = outcnt;
-      nreqd = -1;
-      if (!strcmp(ep->opname, "xin")) {
-        if (UNLIKELY(!ST(opcodblk)))
-          synterr(csound, Str("xin is allowed only in user defined opcodes"));
-        else if (UNLIKELY((int) ST(opcodflg) & 1))
-          synterr(csound,
-                  Str("multiple uses of xin in the same opcode definition"));
-        else {
-          /* IV - Oct 24 2002: opcodeInfo always points to the most recently */
-          /* defined user opcode (or named instrument) structure; in this */
-          /* case, it is the current opcode definition (not very elegant, */
-          /* but works) */
-          char *c = csound->opcodeInfo->intypes;
-          int i = 0;
-          ST(opcodflg) |= (int16) 1;
-          nreqd = csound->opcodeInfo->inchns;
-          /* replace opcode if needed */
-          if (nreqd > OPCODENUMOUTS_LOW) {
-            if (nreqd > OPCODENUMOUTS_HIGH)
-              isopcod(csound, ".xin256");
-            else
-              isopcod(csound, ".xin64");
-            ST(linopcod) = ST(opcod);
-            ST(linopnum) = ST(opnum);
-            tp->opcod = strsav_string(csound, ST(linopcod));
-            tp->opnum = ST(linopnum);
-            ep = csound->opcodlst + tp->opnum;
-            csound->DebugMsg(csound, Str("modified opcod: %s"), ST(opcod));
-          }
-          while (c[i]) {
-            switch (c[i]) {
-            case 'a': xtypes[i] = c[i]; break;
-            case  'f': xtypes[i] = c[i]; break;
-            case 'k':
-            case 'P':
-            case 'K': xtypes[i] = 'k'; break;
-            case 'S': xtypes[i] = 'S'; break;
-            default:  xtypes[i] = 'i';
+      else treqd = types[n];          /*       or given)   */
+      if (treqd == 'l') {             /* if arg takes lbl  */
+        csound->DebugMsg(csound, "treqd = l");
+        lblrequest(csound, s);        /*      req a search */
+        continue;                     /*      chk it later */
+      }
+      tfound = argtyp(csound, s);     /* else get arg type */
+      /* IV - Oct 31 2002 */
+      
+      tfound_m = ST(typemask_tabl)[(unsigned char) tfound];
+      if (UNLIKELY(!(tfound_m & (ARGTYP_c|ARGTYP_p)) &&
+                   !ST(lgprevdef) && *s != '"')) {
+        synterr(csound, Str("input arg '%s' used before defined \n"), s);
+      }
+      csound->DebugMsg(csound, "treqd %c, tfound %c", treqd, tfound);
+      if (tfound == 'a' && n < 31)    /* JMC added for FOG */
+        /* 4 for FOF, 8 for FOG; expanded to 15  */
+        tp->xincod |= (1 << n);
+      if (tfound == 'S' && n < 31)
+        tp->xincod_str |= (1 << n);
+      /* IV - Oct 31 2002: simplified code */
+      if (!(tfound_m & ST(typemask_tabl_in)[(unsigned char) treqd])) {
+        /* check for exceptional types */
+        switch (treqd) {
+        case 'I':
+          treqd_m = ARGTYP_i;
+          break;
+        case 'Z':                             /* indef kakaka ... */
+          if (UNLIKELY(!(tfound_m & (n & 1 ? ARGTYP_a : ARGTYP_ipcrk))))
+            intyperr(csound, n, tfound, treqd);
+          break;
+        case 'x':
+          treqd_m = ARGTYP_ipcr;              /* also allows i-rate */
+        case 's':                             /* a- or k-rate */
+          treqd_m |= ARGTYP_a | ARGTYP_k;
+          if (tfound_m & treqd_m) {
+            if (tfound == 'a' && tp->outlist != ST(nullist)) {
+              int32 outyp_m =                  /* ??? */
+                ST(typemask_tabl)[(unsigned char) argtyp(csound,
+                                                         tp->outlist->arg[0])];
+              if (outyp_m & (ARGTYP_a | ARGTYP_w | ARGTYP_f)) break;
             }
-            i++;
+            else
+              break;
           }
-          xtypes[i] = '\0';
-          types = &xtypes[0];
+        default:
+          intyperr(csound, n, tfound, treqd);
+          break;
         }
       }
-      if (nreqd < 0)    /* for other opcodes */
-        nreqd = strlen(types = ep->outypes);
-      if (UNLIKELY((n != nreqd) &&      /* IV - Oct 24 2002: end of new code */
-          !(n > 0 && n < nreqd &&
-            (types[n] == 'm' || types[n] == 'z' || types[n] == 'I' ||
-             types[n] == 'X' || types[n] == 'N' || types[n] == 'F')))) {
-        synterr(csound, Str("illegal no of output args"));
-        if (n > nreqd)
-          n = nreqd;
-      }
-      while (n--) {                                     /* outargs:  */
-        int32    tfound_m;       /* IV - Oct 31 2002 */
-        s = tp->outlist->arg[n];
-        treqd = types[n];
-        tfound = argtyp(csound, s);                     /*  found    */
-        /* IV - Oct 31 2002 */
-        tfound_m = ST(typemask_tabl)[(unsigned char) tfound];
-        /* IV - Sep 1 2002: xoutcod is the same as xincod for input */
-        if (tfound == 'a' && n < 31)
-          tp->xoutcod |= (1 << n);
-        if (tfound == 'S' && n < 31)
-          tp->xoutcod_str |= (1 << n);
-        csound->DebugMsg(csound, "treqd %c, tfound %c", treqd, tfound);
-        if (tfound_m & ARGTYP_w)
-          if (UNLIKELY(ST(lgprevdef))) {
-            synterr(csound, Str("output name previously used, "
-                                "type '%c' must be uniquely defined"), tfound);
+    }
+    csound->DebugMsg(csound, "xincod = %d", tp->xincod);
+    /* IV - Sep 1 2002: added 'X' type, and xoutcod */
+    tp->xoutcod_str = tp->xoutcod = 0;
+    /* IV - Oct 24 2002: moved argument parsing for xin here */
+    n = outcnt;
+    nreqd = -1;
+    if (!strcmp(ep->opname, "xin")) {
+      if (UNLIKELY(!ST(opcodblk)))
+        synterr(csound, Str("xin is allowed only in user defined opcodes"));
+      else if (UNLIKELY((int) ST(opcodflg) & 1))
+        synterr(csound,
+                Str("multiple uses of xin in the same opcode definition"));
+      else {
+        /* IV - Oct 24 2002: opcodeInfo always points to the most recently */
+        /* defined user opcode (or named instrument) structure; in this */
+        /* case, it is the current opcode definition (not very elegant, */
+        /* but works) */
+        char *c = csound->opcodeInfo->intypes;
+        int i = 0;
+        ST(opcodflg) |= (int16) 1;
+        nreqd = csound->opcodeInfo->inchns;
+        /* replace opcode if needed */
+        if (nreqd > OPCODENUMOUTS_LOW) {
+          if (nreqd > OPCODENUMOUTS_HIGH)
+            isopcod(csound, ".xin256");
+          else
+            isopcod(csound, ".xin64");
+          ST(linopcod) = ST(opcod);
+          ST(linopnum) = ST(opnum);
+          tp->opcod = strsav_string(csound, ST(linopcod));
+          tp->opnum = ST(linopnum);
+          ep = csound->opcodlst + tp->opnum;
+          csound->DebugMsg(csound, Str("modified opcod: %s"), ST(opcod));
+        }
+        while (c[i]) {
+          switch (c[i]) {
+          case 'a': xtypes[i] = c[i]; break;
+          case  'f': xtypes[i] = c[i]; break;
+          case 'k':
+          case 'P':
+          case 'K': xtypes[i] = 'k'; break;
+          case 'S': xtypes[i] = 'S'; break;
+          default:  xtypes[i] = 'i';
           }
-        /* IV - Oct 31 2002: simplified code */
-        if (UNLIKELY(!(tfound_m & ST(typemask_tabl_out)[(unsigned char) treqd]))) {
-          synterr(csound, Str("output arg '%s' illegal type"), s);
+          i++;
         }
+        xtypes[i] = '\0';
+        types = &xtypes[0];
       }
-      if (incnt) {
-        if (ep->intypes[0] != 'l')      /* intype defined by 1st inarg */
-          tp->intype = argtyp(csound, tp->inlist->arg[0]);
-        else tp->intype = 'l';          /*   (unless label)  */
+    }
+    if (nreqd < 0)    /* for other opcodes */
+      nreqd = strlen(types = ep->outypes);
+    if (UNLIKELY((n != nreqd) &&      /* IV - Oct 24 2002: end of new code */
+                 !(n > 0 && n < nreqd &&
+                   (types[n] == 'm' || types[n] == 'z' || types[n] == 'I' ||
+                    types[n] == 'X' || types[n] == 'N' || types[n] == 'F')))) {
+      synterr(csound, Str("illegal no of output args"));
+      if (n > nreqd)
+        n = nreqd;
+    }
+    while (n--) {                                     /* outargs:  */
+      int32    tfound_m;       /* IV - Oct 31 2002 */
+      s = tp->outlist->arg[n];
+      treqd = types[n];
+      tfound = argtyp(csound, s);                     /*  found    */
+      /* IV - Oct 31 2002 */
+      tfound_m = ST(typemask_tabl)[(unsigned char) tfound];
+      /* IV - Sep 1 2002: xoutcod is the same as xincod for input */
+      if (tfound == 'a' && n < 31)
+        tp->xoutcod |= (1 << n);
+      if (tfound == 'S' && n < 31)
+        tp->xoutcod_str |= (1 << n);
+      csound->DebugMsg(csound, "treqd %c, tfound %c", treqd, tfound);
+      if (tfound_m & ARGTYP_w)
+        if (UNLIKELY(ST(lgprevdef))) {
+          synterr(csound, Str("output name previously used, "
+                              "type '%c' must be uniquely defined"), tfound);
+        }
+      /* IV - Oct 31 2002: simplified code */
+      if (UNLIKELY(!(tfound_m & ST(typemask_tabl_out)[(unsigned char) treqd]))) {
+        synterr(csound, Str("output arg '%s' illegal type"), s);
       }
-      if (outcnt)                       /* pftype defined by outarg */
-        tp->pftype = tfound;
-      else tp->pftype = tp->intype;     /*    else by 1st inarg     */
     }
-    return(tp);                         /* return the text blk */
+    if (incnt) {
+      if (ep->intypes[0] != 'l')      /* intype defined by 1st inarg */
+        tp->intype = argtyp(csound, tp->inlist->arg[0]);
+      else tp->intype = 'l';          /*   (unless label)  */
+    }
+    if (outcnt)                       /* pftype defined by outarg */
+      tp->pftype = tfound;
+    else tp->pftype = tp->intype;     /*    else by 1st inarg     */
+  }
+  return(tp);                         /* return the text blk */
 }
 
 static void intyperr(CSOUND *csound, int n, char tfound, char expect)
 {
-    char    *s = ST(grpsav)[ST(opgrpno) + n];
-    char    t[10];
-
-    switch (tfound) {
-    case 'w':
-    case 'f':
-    case 'a':
-    case 'k':
-    case 'i':
-    case 'P':
-    case 'p': t[0] = tfound;
-              t[1] = '\0';
-              break;
-    case 'r':
-    case 'c': strcpy(t,"const");
-              break;
-    case 'S': strcpy(t,"string");
-              break;
-    case 'b':
-    case 'B': strcpy(t,"boolean");
-              break;
-    case '?': strcpy(t,"?");
-              break;
-    }
-    synterr(csound, Str("input arg '%s' of type %s "
-                        "not allowed when expecting %c"), s, t, expect);
+  char    *s = ST(grpsav)[ST(opgrpno) + n];
+  char    t[10];
+
+  switch (tfound) {
+  case 'w':
+  case 'f':
+  case 'a':
+  case 'k':
+  case 'i':
+  case 'P':
+  case 'p': t[0] = tfound;
+    t[1] = '\0';
+    break;
+  case 'r':
+  case 'c': strcpy(t,"const");
+    break;
+  case 'S': strcpy(t,"string");
+    break;
+  case 'b':
+  case 'B': strcpy(t,"boolean");
+    break;
+  case '?': strcpy(t,"?");
+    break;
+  }
+  synterr(csound, Str("input arg '%s' of type %s "
+                      "not allowed when expecting %c"), s, t, expect);
 }
 
 static int isopcod(CSOUND *csound, char *s)
 {                               /* tst a string against opcodlst  */
-    int     n;                  /*   & set op carriers if matched */
+  int     n;                  /*   & set op carriers if matched */
 
-    if (!(n = find_opcode(csound, s))) return (0);      /* IV - Oct 31 2002 */
-    ST(opnum) = n;                          /* on corr match,   */
-    ST(opcod) = csound->opcodlst[n].opname; /*  set op carriers */
+  if (!(n = find_opcode(csound, s))) return (0);      /* IV - Oct 31 2002 */
+  ST(opnum) = n;                          /* on corr match,   */
+  ST(opcod) = csound->opcodlst[n].opname; /*  set op carriers */
 
-    return(1);                              /*  & report success */
+  return(1);                              /*  & report success */
 }
 
 static int pnum(char *s)        /* check a char string for pnum format  */
-                                /*   and return the pnum ( >= 0 )       */
+/*   and return the pnum ( >= 0 )       */
 {                               /* else return -1                       */
-    int n;
+  int n;
 
-    if (*s == 'p' || *s == 'P')
-      if (sscanf(++s, "%d", &n))
-        return(n);
-    return(-1);
+  if (*s == 'p' || *s == 'P')
+    if (sscanf(++s, "%d", &n))
+      return(n);
+  return(-1);
 }
 
 char argtyp(CSOUND *csound, char *s)
 {                       /* find arg type:  d, w, a, k, i, c, p, r, S, B, b */
-    char c = *s;        /*   also set lgprevdef if !c && !p && !S */
-
-    /*trap this before parsing for a number! */
-    /* two situations: defined at header level: 0dbfs = 1.0
-     *  and returned as a value:  idb = 0dbfs
-     */
-    if ((c >= '1' && c <= '9') || c == '.' || c == '-' || c == '+' ||
-        (c == '0' && strcmp(s, "0dbfs") != 0))
-      return('c');                              /* const */
-    if (pnum(s) >= 0)
-      return('p');                              /* pnum */
-    if (c == '"')
-      return('S');                              /* quoted String */
-    ST(lgprevdef) = lgexist(csound, s);               /* (lgprev) */
-    if (strcmp(s,"sr") == 0    || strcmp(s,"kr") == 0 ||
-        strcmp(s,"0dbfs") == 0 || strcmp(s,"nchnls_i") == 0 ||
-        strcmp(s,"ksmps") == 0 || strcmp(s,"nchnls") == 0)
-      return('r');                              /* rsvd */
-    if (c == 'w')               /* N.B. w NOT YET #TYPE OR GLOBAL */
-      return(c);
-    if (c == '#')
-      c = *(++s);
-    if (c == 'g')
-      c = *(++s);
-    if (strchr("akiBbfS", c) != NULL)
-      return(c);
-    else return('?');
+  char c = *s;        /*   also set lgprevdef if !c && !p && !S */
+
+
+  /*trap this before parsing for a number! */
+  /* two situations: defined at header level: 0dbfs = 1.0
+   *  and returned as a value:  idb = 0dbfs
+   */
+  if ((c >= '1' && c <= '9') || c == '.' || c == '-' || c == '+' ||
+      (c == '0' && strcmp(s, "0dbfs") != 0))
+    return('c');                              /* const */
+  if (pnum(s) >= 0)
+    return('p');                              /* pnum */
+  if (c == '"')
+    return('S');                              /* quoted String */
+  ST(lgprevdef) = lgexist(csound, s);               /* (lgprev) */
+  if (strcmp(s,"sr") == 0    || strcmp(s,"kr") == 0 ||
+      strcmp(s,"0dbfs") == 0 || strcmp(s,"nchnls_i") == 0 ||
+      strcmp(s,"ksmps") == 0 || strcmp(s,"nchnls") == 0)
+    return('r');                              /* rsvd */
+  if (c == 'w')               /* N.B. w NOT YET #TYPE OR GLOBAL */
+    return(c);
+  if (c == '#')
+    c = *(++s);
+  if (c == 'g')
+    c = *(++s);
+  if (strchr("akiBbfS", c) != NULL)
+    return(c);
+  else return('?');
 }
 
 static void lblclear(CSOUND *csound)
 {
-    ST(lblcnt) = 0;
+  ST(lblcnt) = 0;
 }
 
 static void lblrequest(CSOUND *csound, char *s)
 {
-    int     req;
-
-    for (req=0; req<ST(lblcnt); req++)
-      if (strcmp(ST(lblreq)[req].label,s) == 0)
-        return;
-    if (++ST(lblcnt) >= ST(lblmax)) {
-      LBLREQ *tmp;
-      ST(lblmax) += LBLMAX;
-      tmp = mrealloc(csound, ST(lblreq), ST(lblmax) * sizeof(LBLREQ));
-      ST(lblreq) = tmp;
-    }
-    ST(lblreq)[req].reqline = ST(curline);
-    ST(lblreq)[req].label =s;
+  int     req;
+
+  for (req=0; req<ST(lblcnt); req++)
+    if (strcmp(ST(lblreq)[req].label,s) == 0)
+      return;
+  if (++ST(lblcnt) >= ST(lblmax)) {
+    LBLREQ *tmp;
+    ST(lblmax) += LBLMAX;
+    tmp = mrealloc(csound, ST(lblreq), ST(lblmax) * sizeof(LBLREQ));
+    ST(lblreq) = tmp;
+  }
+  ST(lblreq)[req].reqline = ST(curline);
+  ST(lblreq)[req].label =s;
 }
 
 static void lblfound(CSOUND *csound, char *s)
 {
-    int     req;
-
-    for (req=0; req<ST(lblcnt); req++ )
-      if (strcmp(ST(lblreq)[req].label,s) == 0) {
-        if (UNLIKELY(ST(lblreq)[req].reqline == 0))
-          synterr(csound, Str("duplicate label"));
-        goto noprob;
-      }
-    if (++ST(lblcnt) >= ST(lblmax)) {
-      LBLREQ *tmp;
-      ST(lblmax) += LBLMAX;
-      tmp = mrealloc(csound, ST(lblreq), ST(lblmax) * sizeof(LBLREQ));
-      ST(lblreq) = tmp;
-    }
-    ST(lblreq)[req].label = s;
-noprob:
-    ST(lblreq)[req].reqline = 0;
+  int     req;
+
+  for (req=0; req<ST(lblcnt); req++ )
+    if (strcmp(ST(lblreq)[req].label,s) == 0) {
+      if (UNLIKELY(ST(lblreq)[req].reqline == 0))
+        synterr(csound, Str("duplicate label"));
+      goto noprob;
+    }
+  if (++ST(lblcnt) >= ST(lblmax)) {
+    LBLREQ *tmp;
+    ST(lblmax) += LBLMAX;
+    tmp = mrealloc(csound, ST(lblreq), ST(lblmax) * sizeof(LBLREQ));
+    ST(lblreq) = tmp;
+  }
+  ST(lblreq)[req].label = s;
+ noprob:
+  ST(lblreq)[req].reqline = 0;
 }
 
 static void lblchk(CSOUND *csound)
 {
-    int req;
-    int n;
-
-    for (req=0; req<ST(lblcnt); req++ )
-      if (UNLIKELY((n = ST(lblreq)[req].reqline))) {
-        char    *s;
-        csound->Message(csound, Str("error line %d.  unknown label:\n"), n);
-        s = ST(linadr)[n];
-        do {
-          csound->Message(csound, "%c", *s);
-        } while (*s++ != '\n');
-        csound->synterrcnt++;
-      }
+  int req;
+  int n;
+
+  for (req=0; req<ST(lblcnt); req++ )
+    if (UNLIKELY((n = ST(lblreq)[req].reqline))) {
+      char    *s;
+      csound->Message(csound, Str("error line %d.  unknown label:\n"), n);
+      s = ST(linadr)[n];
+      do {
+        csound->Message(csound, "%c", *s);
+      } while (*s++ != '\n');
+      csound->synterrcnt++;
+    }
 }
 
 void synterr(CSOUND *csound, const char *s, ...)
 {
-    va_list args;
-    char    *cp;
-    int     c;
+  va_list args;
 
-    csound->MessageS(csound, CSOUNDMSG_ERROR, Str("error:  "));
-    va_start(args, s);
-    csound->MessageV(csound, CSOUNDMSG_ERROR, s, args);
-    va_end(args);
+  csound->MessageS(csound, CSOUNDMSG_ERROR, Str("error:  "));
+  va_start(args, s);
+  csound->MessageV(csound, CSOUNDMSG_ERROR, s, args);
+  va_end(args);
 
 
-    /* FIXME - Removed temporarily for debugging
-     * This function may not be necessary at all in the end if some of this is
-     * done in the parser
-     */
-    if (ST(linadr) != NULL && (cp = ST(linadr)[ST(curline)]) != NULL
+  /* FIXME - Removed temporarily for debugging
+   * This function may not be necessary at all in the end if some of this is
+   * done in the parser
+   */
+#ifdef never
+  if (ST(linadr) != NULL && (cp = ST(linadr)[ST(curline)]) != NULL
 #if defined(ENABLE_NEW_PARSER)
-        && !csound->oparms->newParser
+      && !csound->oparms->newParser
 #endif
-    ) {
-      csound->MessageS(csound, CSOUNDMSG_ERROR,
-                               Str(", line %d:\n"), CURLINE);
-      do {
-        csound->MessageS(csound, CSOUNDMSG_ERROR, "%c", (c = *cp++));
-      } while (c != '\n');
-    }
-    else {
-      csound->MessageS(csound, CSOUNDMSG_ERROR, "\n");
-    }
-    csound->synterrcnt++;
+      ) {
+    csound->MessageS(csound, CSOUNDMSG_ERROR,
+                     Str(", line %d:\n"), CURLINE);
+    do {
+      csound->MessageS(csound, CSOUNDMSG_ERROR, "%c", (c = *cp++));
+    } while (c != '\n');
+  }
+  else {
+    csound->MessageS(csound, CSOUNDMSG_ERROR, "\n");
+  }
+#endif
+  csound->synterrcnt++;
 }
 
 static void synterrp(CSOUND *csound, const char *errp, char *s)
 {
-    char    *cp;
-
-    synterr(csound, s);
-    cp = ST(linadr)[ST(curline)];
-    while (cp < errp) {
-      int ch = *cp++;
-      if (ch != '\t') ch = ' ';
-      csound->MessageS(csound, CSOUNDMSG_ERROR, "%c", ch);
-    }
-    csound->ErrorMsg(csound, "^");
+  char    *cp;
+
+  synterr(csound, s);
+  cp = ST(linadr)[ST(curline)];
+  while (cp < errp) {
+    int ch = *cp++;
+    if (ch != '\t') ch = ' ';
+    csound->MessageS(csound, CSOUNDMSG_ERROR, "%c", ch);
+  }
+  csound->ErrorMsg(csound, "^");
 }
 
 static void lexerr(CSOUND *csound, const char *s, ...)
 {
-    IN_STACK  *curr = ST(str);
-    va_list   args;
-
-    va_start(args, s);
-    csound->ErrMsgV(csound, Str("error:  "), s, args);
-    va_end(args);
-
-    while (curr != ST(inputs)) {
-      if (curr->string) {
-        MACRO *mm = ST(macros);
-        while (mm != curr->mac) mm = mm->next;
-        csound->ErrorMsg(csound, Str("called from line %d of macro %s"),
-                                 curr->line, mm->name);
-      }
-      else {
-        csound->ErrorMsg(csound, Str("in line %d of file input %s"),
-                                 curr->line, curr->body);
-      }
-      curr--;
+  IN_STACK  *curr = ST(str);
+  va_list   args;
+
+  va_start(args, s);
+  csound->ErrMsgV(csound, Str("error:  "), s, args);
+  va_end(args);
+
+  while (curr != ST(inputs)) {
+    if (curr->string) {
+      MACRO *mm = ST(macros);
+      while (mm != curr->mac) mm = mm->next;
+      csound->ErrorMsg(csound, Str("called from line %d of macro %s"),
+                       curr->line, mm->name);
     }
-    csound->LongJmp(csound, 1);
+    else {
+      csound->ErrorMsg(csound, Str("in line %d of file input %s"),
+                       curr->line, curr->body);
+    }
+    curr--;
+  }
+  csound->LongJmp(csound, 1);
 }
 
 static void printgroups(CSOUND *csound, int grpcnt)
 {                                       /*   debugging aid (onto stdout) */
-    char    c, *cp = ST(group)[0];
-
-    csound->Message(csound, "groups:\t");
-    while (grpcnt--) {
-      csound->Message(csound, "%s ", cp);
-      while ((c = *cp++));
-    }
-    csound->Message(csound, "\n");
+  char    c, *cp = ST(group)[0];
+
+  csound->Message(csound, "groups:\t");
+  while (grpcnt--) {
+    csound->Message(csound, "%s ", cp);
+    while ((c = *cp++));
+  }
+  csound->Message(csound, "\n");
 }
diff --git a/Engine/rdscor.c b/Engine/rdscor.c
index e211434..4c4542e 100644
--- a/Engine/rdscor.c
+++ b/Engine/rdscor.c
@@ -1,7 +1,7 @@
 /*
     rdscor.c:
 
-    Copyright (C) 1991, 1997 Barry Vercoe, John ffitch
+    Copyright (C) 2011 John ffitch (after Barry Vercoe)
 
     This file is part of Csound.
 
@@ -21,23 +21,24 @@
     02111-1307 USA
 */
 
-#include "csoundCore.h"         /*                              RDSCOR.C */
+#include "csoundCore.h"         /*                  RDSCORSTR.C */
+#include "corfile.h"
 
 static void dumpline(CSOUND *);
 
 static void flushline(CSOUND *csound)   /* flush scorefile to next newline */
 {
     int     c;
-    FILE    *xx = csound->scfp;
-    while ((c = getc(xx)) != EOF && c != '\n')
+    while ((c = corfile_getc(csound->scstr)) != '0' && c != '\n')
         ;
 }
 
 static int scanflt(CSOUND *csound, MYFLT *pfld)
 {   /* read a MYFLT from scorefile; return 1 if OK, else 0 */
     int     c;
-    FILE    *xx = csound->scfp;
-    while ((c = getc(xx)) == ' ' || c == '\t')  /* skip leading white space */
+
+    while ((c = corfile_getc(csound->scstr)) == ' ' ||
+           c == '\t')  /* skip leading white space */
         ;
     if (c == ';') {             /* Comments terminate line */
       flushline(csound);
@@ -48,8 +49,8 @@ static int scanflt(CSOUND *csound, MYFLT *pfld)
       if (csound->scnt0==0) {
         if ((sstrp = csound->sstrbuf) == NULL)
           sstrp = csound->sstrbuf = mmalloc(csound, SSTRSIZ);
-        while ((c = getc(xx)) != '"') {
-          if (c=='\\') c = getc(xx);
+        while ((c = corfile_getc(csound->scstr)) != '"') {
+          if (c=='\\') c = corfile_getc(csound->scstr);
           *sstrp++ = c;
         }
         *sstrp++ = '\0';
@@ -61,8 +62,8 @@ static int scanflt(CSOUND *csound, MYFLT *pfld)
         printf("***Entering dubious code; n=%d\n", n);
         if ((sstrp = csound->sstrbuf0[n]) == NULL)
           sstrp = csound->sstrbuf0[n] = mmalloc(csound, SSTRSIZ);
-        while ((c = getc(xx)) != '"') {
-          if (c=='\\') c = getc(xx);
+        while ((c = corfile_getc(csound->scstr)) != '"') {
+          if (c=='\\') c = corfile_getc(csound->scstr);
           *sstrp++ = c;
         }
         *sstrp++ = '\0';
@@ -74,48 +75,48 @@ static int scanflt(CSOUND *csound, MYFLT *pfld)
       return(1);
     }
     if (UNLIKELY(!((c>='0' && c<='9') || c=='+' || c=='-' || c=='.'))) {
-      ungetc(c, csound->scfp);
+      corfile_ungetc(csound->scstr);
       csound->Message(csound,
                       Str("ERROR: illegal character %c(%.2x) in scoreline: "),
                       c, c);
       dumpline(csound);
       return(0);
     }
-    ungetc(c, csound->scfp);
-#ifdef USE_DOUBLE
-    fscanf(csound->scfp, "%lf", pfld);
-#else
-    fscanf(csound->scfp, "%f", pfld);
-#endif
+    corfile_ungetc(csound->scstr);
+    {
+      MYFLT ans = corfile_get_flt(csound->scstr);
+      *pfld = ans;
+      //printf("%s(%d):%lf %lf\n", __FILE__, __LINE__, ans, *pfld);
+    }
     return(1);
 }
 
 static void dumpline(CSOUND *csound)    /* print the line while flushing it */
 {
     int     c;
-    FILE    *xx = csound->scfp;
-    while ((c = getc(xx)) != EOF && c != '\n') {
+    while ((c = corfile_getc(csound->scstr)) != '\0' && c != '\n') {
       csound->Message(csound, "%c", c);
     }
     csound->Message(csound, Str("\n\tremainder of line flushed\n"));
 }
 
 int rdscor(CSOUND *csound, EVTBLK *e) /* read next score-line from scorefile */
-                                       /*  & maintain section warped status   */
-{                                      /*      presumes good format if warped */
+                                      /*  & maintain section warped status   */
+{                                     /*      presumes good format if warped */
     MYFLT   *pp, *plim;
     int     c;
-    FILE    *xx = csound->scfp;
 
-    if (xx == NULL || feof(xx)) {   /* if no concurrent scorefile  */
+    if (csound->scstr == NULL ||
+        csound->scstr->body[0] == '\0') {   /* if no concurrent scorefile  */
+      csound->Message(csound, "THIS SHOULD NOT HAPPEN -- CONTACT jpff");
       e->opcod = 'f';             /*     return an 'f 0 3600'    */
       e->p[1] = FL(0.0);
-      e->p[2] = FL(3600.0);
-      e->p2orig = FL(3600.0);
+      e->p[2] = FL(INF);
+      e->p2orig = FL(INF);
       e->pcnt = 2;
       return(1);
     }
-    while ((c = getc(xx)) != EOF) {  /* else read the real score */
+    while ((c = corfile_getc(csound->scstr)) != '\0') {  /* else read the real score */
       csound->scnt0 = 0;
       switch (c) {
       case ' ':
@@ -135,12 +136,13 @@ int rdscor(CSOUND *csound, EVTBLK *e) /* read next score-line from scorefile */
         pp = &e->p[0];
         plim = &e->p[PMAX];             /*    caution, irregular format */
         while (1) {
-          while ((c = getc(xx))==' ' || c=='\t'); /* eat whitespace */
+           while ((c = corfile_getc(csound->scstr))==' ' ||
+                 c=='\t'); /* eat whitespace */
           if (c == ';') { flushline(csound); break; } /* comments? skip */
-          if (c == '\n' || c == EOF)   break;     /* newline? done  */
-          ungetc(c, csound->scfp);                /* pfld:  back up */
+          if (c == '\n' || c == '\0')   break;    /* newline? done  */
+          corfile_ungetc(csound->scstr);       /* pfld:  back up */
           if (!scanflt(csound, ++pp))  break;     /*   & read value */
-          if (UNLIKELY(pp >= plim)) {
+            if (UNLIKELY(pp >= plim)) {
             csound->Message(csound, Str("ERROR: too many pfields: "));
             dumpline(csound);
             break;
@@ -161,12 +163,18 @@ int rdscor(CSOUND *csound, EVTBLK *e) /* read next score-line from scorefile */
         e->c.extra = NULL;
         pp = &e->p[0];
         plim = &e->p[PMAX];
-        if (getc(xx) != '\n' && scanflt(csound, ++pp))         /* p1      */
-          if (getc(xx) != '\n' && scanflt(csound, &e->p2orig)) /* p2 orig */
-            if (getc(xx) != '\n' && scanflt(csound, ++pp))     /* p2 warp */
-              if (getc(xx) != '\n' && scanflt(csound, &e->p3orig)) /* p3  */
-                if (getc(xx) != '\n' && scanflt(csound, ++pp)) /* p3 warp */
-                  while (getc(xx) != '\n' && scanflt(csound, ++pp))
+        if (corfile_getc(csound->scstr) != '\n' &&
+            scanflt(csound, ++pp))         /* p1      */
+          if (corfile_getc(csound->scstr) != '\n' &&
+              scanflt(csound, &e->p2orig)) /* p2 orig */
+            if (corfile_getc(csound->scstr) != '\n' &&
+                scanflt(csound, ++pp))     /* p2 warp */
+              if (corfile_getc(csound->scstr) != '\n' &&
+                  scanflt(csound, &e->p3orig)) /* p3  */
+                if (corfile_getc(csound->scstr) != '\n' &&
+                    scanflt(csound, ++pp)) /* p3 warp */
+                  while (corfile_getc(csound->scstr) != '\n' &&
+                         scanflt(csound, ++pp))
                     /* p4....  */
                     if (pp >= plim) {
                       MYFLT *q;
@@ -177,20 +185,21 @@ int rdscor(CSOUND *csound, EVTBLK *e) /* read next score-line from scorefile */
                       e->c.extra = (MYFLT*)realloc(e->c.extra,sizeof(MYFLT)*PMAX);
                       e->c.extra[0] = PMAX-2;
                       q = e->c.extra;
-                      while ((getc(xx) != '\n') && (scanflt(csound, &q[c++]))) {
+                      while ((corfile_getc(csound->scstr) != '\n') &&
+                             (scanflt(csound, &q[c++]))) {
                         if (c > (int) e->c.extra[0]) {
                           fprintf(stderr, "and more extra p-fields [%d](%d)%d\n",
                                   c, (int) e->c.extra[0],
                                   sizeof(MYFLT)*((int)e->c.extra[0]+PMAX) );
                           q = e->c.extra =
                             (MYFLT *)realloc(e->c.extra,
-                                            sizeof(MYFLT)*((int) e->c.extra[0]+PMAX));
+                                 sizeof(MYFLT)*((int) e->c.extra[0]+PMAX));
                           e->c.extra[0] = e->c.extra[0]+PMAX-1;
                         }
                       }
                       e->c.extra[0] = c;
                       /* flushline(csound); */
-                      goto setp;
+                       goto setp;
                     }
       setp:
         if (!csound->csoundIsScorePending_ && e->opcod == 'i') {
@@ -209,6 +218,7 @@ int rdscor(CSOUND *csound, EVTBLK *e) /* read next score-line from scorefile */
         return 1;
       }
     }
+    corfile_rm(&(csound->scstr));
     return 0;
 }
 
diff --git a/Engine/scsort.c b/Engine/scsort.c
index 07bc2cc..8713b4d 100644
--- a/Engine/scsort.c
+++ b/Engine/scsort.c
@@ -22,8 +22,9 @@
 */
 
 #include "csoundCore.h"                                  /*   SCSORT.C  */
+#include "corfile.h"
 
-extern void sort(CSOUND*), twarp(CSOUND*), swrite(CSOUND*);
+extern void sort(CSOUND*), twarp(CSOUND*), swrite(CSOUND*), swritestr(CSOUND*);
 extern void sfree(CSOUND *csound);
 extern void sread_init(CSOUND *csound);
 extern int  sread(CSOUND *csound);
@@ -48,3 +49,26 @@ void scsort(CSOUND *csound, FILE *scin, FILE *scout)
     sfree(csound);              /* return all memory used */
 }
 
+extern void sread_initstr(CSOUND *);
+void scsortstr(CSOUND *csound, CORFIL *scin)
+{
+    int     n;
+    int     m = 0;
+
+    csound->scoreout = NULL;
+    csound->scstr = corfile_create_w();
+    csound->sectcnt = 0;
+    sread_initstr(csound);
+
+    while ((n = sread(csound)) > 0) {
+      sort(csound);
+      twarp(csound);
+      swritestr(csound);
+      m++;
+    }
+    if (m==0) corfile_puts("f0 2147483647.0\ne\n", csound->scstr);
+    else corfile_puts("e\n", csound->scstr);
+    corfile_flush(csound->scstr);
+    sfree(csound);              /* return all memory used */
+}
+
diff --git a/Engine/sort.c b/Engine/sort.c
index f78c39a..5ad1121 100644
--- a/Engine/sort.c
+++ b/Engine/sort.c
@@ -57,7 +57,7 @@ Adapted from Delphi implementation of Dijkstra's algorithm.
 #define FALSE (0)
 #endif
 
-inline int ordering(SRTBLK *a, SRTBLK *b)
+static inline int ordering(SRTBLK *a, SRTBLK *b)
 {
     char cb = b->text[0], ca = a->text[0];
     MYFLT tmp;
@@ -66,7 +66,6 @@ inline int ordering(SRTBLK *a, SRTBLK *b)
     if (ca=='w') return TRUE;
     if (cb=='w') return FALSE;
     if (cb=='t') return FALSE;
-    /* printf("SORT: ap2=%f, bp2=%f tmp=%f\n", a->newp2, b->newp2); */
     tmp = b->newp2 - a->newp2;
     if (tmp < 0) return FALSE;
     if (tmp > 0) return TRUE;
@@ -253,11 +252,12 @@ void sort(CSOUND *csound)
       case 'a':
         bp->preced = 'e';
         break;
+      case 'e':
+        //        bp->newp2 ;
       case 'q':
       case 'w':
       case 't':
       case 's':
-      case 'e':
         bp->preced = 'a';
         break;
       default:
diff --git a/Engine/sread.c b/Engine/sread.c
index c407a25..e75dc5a 100644
--- a/Engine/sread.c
+++ b/Engine/sread.c
@@ -25,6 +25,7 @@
 #include <math.h>      /* for fabs() */
 #include <ctype.h>
 #include "namedins.h"           /* IV - Oct 31 2002 */
+#include "corfile.h"
 
 #define MEMSIZ  16384           /* size of memory requests from system  */
 #define MARGIN  4096            /* minimum remaining before new request */
@@ -32,34 +33,33 @@
 #define RPTDEPTH 40             /* size of repeat_n arrays (39 loop levels) */
 
 #define MARGS   (3)
+//#define MACDEBUG (1)
 
 typedef struct MACRO {          /* To store active macros */
     char        *name;          /* Use is by name */
     int         acnt;           /* Count of arguments */
-    char        *body;          /* The text of the macro */
+    CORFIL      *body;          /* The text of the macro */
     struct MACRO *next;         /* Chain of active macros */
     int         margs;          /* ammount of space for args */
     char        *arg[MARGS];    /* With these arguments */
 } MACRO;
 
 typedef struct in_stack_s {     /* Stack of active inputs */
-    int16 string;               /* Flag to say if string or file */
-    int16 is_marked_repeat;     /* 1 if this input created by 'n' statement */
-    int16 args;                 /* Argument count for macro */
-    char  *body;                /* String */
-    FILE  *file;                /* File case only */
-    void  *fd;
-    MACRO *mac;
-    int   line;
-    int   unget_cnt;
-    char  unget_buf[128];
+  //    int16       string;               /* Flag to say if string or file */
+    int16       is_marked_repeat;     /* 1 if this input created by 'n' stmnt */
+    int16       args;                 /* Argument count for macro */
+    CORFIL      *cf;                  /* In core file */
+  //    FILE        *file;                /* File case only */
+    void        *fd;                  /* for closing stream */
+    MACRO       *mac;
+    int         line;
 } IN_STACK;
 
 typedef struct marked_sections {
-  char  *name;
-  int32  posit;
-  int   line;
-  char  *file;
+    char        *name;
+    int32       posit;
+    int         line;
+    char        *file;
 } MARKED_SECTIONS;
 
 typedef struct {
@@ -84,14 +84,14 @@ typedef struct {
     MARKED_SECTIONS names[30], *current_name;
     char    repeat_name_n[RPTDEPTH][NAMELEN];
     int     repeat_cnt_n[RPTDEPTH];
-    int32    repeat_point_n[RPTDEPTH];
+    int32   repeat_point_n[RPTDEPTH];
     int     repeat_inc_n /* = 1 */;
     MACRO   *repeat_mm_n[RPTDEPTH];
     int     repeat_index;
     /* Variable for repeat sections */
     char    repeat_name[NAMELEN];
     int     repeat_cnt;
-    int32    repeat_point;
+    int32   repeat_point;
     int     repeat_inc /* = 1 */;
     MACRO   *repeat_mm;
 } SREAD_GLOBALS;
@@ -212,40 +212,28 @@ static void print_input_backtrace(CSOUND *csound, int needLFs,
 
     do {
       if (curr == ST(inputs)) lastinput = 1;
-      if (curr->string) {  /* macro input */
-        if (UNLIKELY(!curr->mac || !curr->mac->name))
-          csoundDie(csound, Str("Internal error in print_input_backtrace()"));
-        switch(lastsource) {
-        case 0: m = Str("  included from line %d of macro %s%s"); break;
-        case 1: m = Str("  called from line %d of macro %s%s"); break;
-        default:
-        case 2: m = Str("  in line %d of macro %s%s"); break;
-        }
-        msgfunc(csound, m, (lastsource == 0 ? curr->line - 1 : curr->line),
-                curr->mac->name, lf);  /* #include is one line before */
+      if (UNLIKELY(!curr->mac || !curr->mac->name))
+        csoundDie(csound, Str("Internal error in print_input_backtrace()"));
+      switch(lastsource) {
+      case 0: m = Str("  included from line %d of macro %s%s"); break;
+      case 1: m = Str("  called from line %d of macro %s%s"); break;
+      default:
+      case 2: m = Str("  in line %d of macro %s%s"); break;
       }
-      else {  /* file input */
-        switch(lastsource) {
-        case 0: m = Str("  included from line %d of file input %s%s"); break;
-        case 1: m = Str("  called from line %d of file input %s%s"); break;
-        default:
-        case 2: m = Str("  in line %d of file input %s%s"); break;
-        }
-        if (lastinput && csound->oparms->useCsdLineCounts && csound->csdname) {
-          /* print name & line # of CSD instead of temp sco */
-          msgfunc(csound, m,
-                  (lastsource == 0 ? csound->scoLineOffset + curr->line - 1 :
-                   csound->scoLineOffset + curr->line), csound->csdname, lf);
-        }
-        else {
-          msgfunc(csound, m, (lastsource == 0 ? curr->line - 1 : curr->line),
-                  curr->body, lf);  /* #include is one line before */
-        }
+      msgfunc(csound, m, (lastsource == 0 ? curr->line - 1 : curr->line),
+              curr->mac->name, lf);  /* #include is one line before */
+      if (lastinput && csound->oparms->useCsdLineCounts && csound->csdname) {
+        /* print name & line # of CSD instead of temp sco */
+        msgfunc(csound, m,
+                (lastsource == 0 ? csound->scoLineOffset + curr->line - 1 :
+                 csound->scoLineOffset + curr->line), csound->csdname, lf);
       }
-      lastsource = curr->string;
-      curr--;
-    }
-    while (!lastinput);
+      else {
+        msgfunc(csound, m, (lastsource == 0 ? curr->line - 1 : curr->line),
+                corfile_tell(curr->cf), lf);  /* #include is one line before */
+      }
+    } while (!lastsource);
+    curr--;
     return;
 }
 
@@ -278,9 +266,13 @@ static int undefine_score_macro(CSOUND *csound, const char *name)
 
     if (strcmp(name, ST(macros)->name) == 0) {
       mm = ST(macros)->next;
+      if (strcmp(ST(macros)->name, "[") != 0)
+        corfile_rm(&(ST(macros)->body));
       mfree(csound, ST(macros)->name);
-      mfree(csound, ST(macros)->body);
-      for (i = 0; i < ST(macros)->acnt; i++)
+ #ifdef MACDEBUG
+     printf("%s(%d): corfile is %p\n", __FILE__, __LINE__, ST(macros)->body);
+ #endif
+     for (i = 0; i < ST(macros)->acnt; i++)
         mfree(csound, ST(macros)->arg[i]);
       mfree(csound, ST(macros));
       ST(macros) = mm;
@@ -296,7 +288,7 @@ static int undefine_score_macro(CSOUND *csound, const char *name)
         }
       }
       mfree(csound, nn->name);
-      mfree(csound, nn->body);
+      corfile_rm(&nn->body);
       for (i = 0; i < nn->acnt; i++)
         mfree(csound, nn->arg[i]);
       mm->next = nn->next;
@@ -316,44 +308,36 @@ static inline int isNameChar(int c, int pos)
 
 static inline void ungetscochar(CSOUND *csound, int c)
 {
-    if (LIKELY(ST(str)->unget_cnt < 128))
-      ST(str)->unget_buf[ST(str)->unget_cnt++] = (char) c;
-    else
-      csoundDie(csound, Str("ungetscochar(): buffer overflow"));
+    corfile_ungetc(ST(str)->cf);
+    ST(str)->cf->body[(ST(str)->cf)->p] = (char)c;
 }
 
 static int getscochar(CSOUND *csound, int expand)
 {                   /* Read a score character, expanding macros if flag set */
     int     c;
  top:
-    if (ST(str)->unget_cnt) {
-      c = (int) ((unsigned char) ST(str)->unget_buf[--ST(str)->unget_cnt]);
-      if (c == '\n')
-        ST(linepos) = -1;
-      return c;
-    }
-    else if (ST(str)->string) {
-      c = *ST(str)->body++;
-      if (c == '\0') {
-        ST(pop) += ST(str)->args;
-        ST(str)--; ST(input_cnt)--;
-        goto top;
+    c = corfile_getc(ST(str)->cf);
+    if (c == EOF) {
+      if (ST(str) == &ST(inputs)[0]) {
+        corfile_ungetc(ST(str)->cf);      /* to ensure repeated EOF */
+        return EOF;
       }
-    }
-    else {
-      c = getc(ST(str)->file);
-      if (UNLIKELY(c == EOF)) {
-        if (ST(str) == &ST(inputs)[0])
-          return EOF;
-        if (ST(str)->fd != NULL) {
-          csound->FileClose(csound, ST(str)->fd); ST(str)->fd = NULL;
-        }
-        ST(str)--; ST(input_cnt)--; goto top;
+      if (ST(str)->mac == 0) {
+        corfile_rm(&(ST(str)->cf)); /* No longer needed */
       }
+      else {
+        corfile_rewind(ST(str)->cf);
+      }
+      ST(pop) += ST(str)->args;
+      ST(str)--; ST(input_cnt)--;
+      goto top;
     }
+#ifdef MACDEBUG
+    printf("%s(%d): character = %c(%.2d)\n", __FILE__, __LINE__, c, c);
+#endif
     if (c == '\r') {    /* can only occur in files, and not in macros */
-      if ((c = getc(ST(str)->file)) != '\n')
-        ungetc(c, ST(str)->file);   /* For macintosh */
+      if ((c = corfile_getc(ST(str)->cf)) != '\n')
+        corfile_ungetc(ST(str)->cf);
       c = '\n';
     }
     if (c == '\n') {
@@ -419,21 +403,21 @@ static int getscochar(CSOUND *csound, int expand)
           char term = (j == mm->acnt - 1 ? ')' : '\'');
           char trm1 = (j == mm->acnt - 1 ? ')' : '#');
           MACRO* nn = (MACRO*) mmalloc(csound, sizeof(MACRO));
-          unsigned int size = 100;
           nn->name = mmalloc(csound, strlen(mm->arg[j])+1);
           strcpy(nn->name, mm->arg[j]);
 #ifdef MACDEBUG
           csound->Message(csound,"defining argument %s ", nn->name);
 #endif
-          i = 0;
-          nn->body = (char*) mmalloc(csound, 100);
+          nn->body = corfile_create_w();
+#ifdef MACDEBUG
+          printf("%s(%d): creating\n", __FILE__, __LINE__, nn->body);
+#endif
           while ((c = getscochar(csound, 1))!= term && c != trm1) {
-            nn->body[i++] = c;
-            if (i>= size) nn->body = mrealloc(csound, nn->body, size += 100);
+            corfile_putc(c, nn->body);
           }
-          nn->body[i]='\0';
+          corfile_rewind(nn->body);
 #ifdef MACDEBUG
-          csound->Message(csound,"as...#%s#\n", nn->body);
+          csound->Message(csound,"as...#%s#\n", corfile_body(nn->body));
 #endif
           nn->acnt = 0; /* No arguments for arguments */
           nn->next = ST(macros);
@@ -449,12 +433,13 @@ static int getscochar(CSOUND *csound, int expand)
         ST(str) = &ST(inputs)[old];     /* In case it moves */
       }
       ST(str)++;
-      ST(str)->string = 1; ST(str)->body = mm->body; ST(str)->args = mm->acnt;
+      ST(str)->fd = ST(str)->cf = mm->body; ST(str)->args = mm->acnt;
       ST(str)->is_marked_repeat = 0;
-      ST(str)->mac = mm; ST(str)->line = 1; ST(str)->unget_cnt = 0;
+      ST(str)->mac = mm; ST(str)->line = 1;
 #ifdef MACDEBUG
       csound->Message(csound,
-                      "Macro %s definded as >>%s<<\n", mm->name, mm->body);
+                      "Macro %s definded as >>%s<<\n",
+                      mm->name, corfile_body(mm->body));
 #endif
       ST(ingappop) = 1;
       goto top;
@@ -616,8 +601,10 @@ static int getscochar(CSOUND *csound, int expand)
         MACRO *nn = (MACRO*) mmalloc(csound, sizeof(MACRO));
         nn->name = mmalloc(csound, 2);
         strcpy(nn->name, "[");
-        nn->body = (char*) mmalloc(csound, strlen(buffer) + 1);
-        strcpy(nn->body, buffer);
+        nn->body = corfile_create_r(buffer);
+#ifdef MACDEBUG
+        printf("%s(%d): creating arg %p\n", __FILE__, __LINE__, nn->body);
+#endif
         nn->acnt = 0;   /* No arguments for arguments */
         nn->next = ST(macros);
         ST(macros) = nn;
@@ -630,11 +617,12 @@ static int getscochar(CSOUND *csound, int expand)
           ST(str) = &ST(inputs)[old];     /* In case it moves */
         }
         ST(str)++;
-        ST(str)->string = 1; ST(str)->body = nn->body; ST(str)->args = 0;
+        ST(str)->cf = nn->body; ST(str)->args = 0;
+        ST(str)->fd = NULL;
         ST(str)->is_marked_repeat = 0;
-        ST(str)->mac = NULL; ST(str)->line = 1; ST(str)->unget_cnt = 0;
+        ST(str)->mac = NULL; ST(str)->line = 1;
 #ifdef MACDEBUG
-        csound->Message(csound,"[] defined as >>%s<<\n", nn->body);
+        csound->Message(csound,"[] defined as >>%s<<\n", corfile_body(nn->body));
 #endif
         ST(ingappop) = 1;
         goto top;
@@ -654,13 +642,13 @@ static int nested_repeat(CSOUND *csound)                /* gab A9*/
           c[j]=' ';
           c[j+1]='\0';
         }
-        if (csound->oparms->msglevel)
+        if (csound->oparms->msglevel & TIMEMSG)
           csound->Message(csound,Str("%s Nested LOOP terminated, level:%d\n"),
                           c,ST(repeat_index));
 
       }
       else {
-        if (csound->oparms->msglevel)
+        if (csound->oparms->msglevel & TIMEMSG)
           csound->Message(csound,Str("External LOOP terminated, level:%d\n"),
                           ST(repeat_index));
       }
@@ -669,10 +657,34 @@ static int nested_repeat(CSOUND *csound)                /* gab A9*/
     }
     else {
       int i;
-      fseek(ST(str)->file, ST(repeat_point_n)[ST(repeat_index)], SEEK_SET);
-      sscanf(ST(repeat_mm_n)[ST(repeat_index)]->body, "%d", &i);
+      corfile_set(ST(str)->cf,ST(repeat_point_n)[ST(repeat_index)]);
+      sscanf(corfile_current(ST(repeat_mm_n)[ST(repeat_index)]->body),
+             "%d", &i);
+#ifdef MACDEBUG
+      printf("%s(%d) reset point to %d\n", __FILE__, __LINE__,
+             ST(repeat_point_n)[ST(repeat_index)], i);
+      printf("%s(%d) corefile: %s %d %d\n", __FILE__, __LINE__, 
+             ST(repeat_mm_n)[ST(repeat_index)]->body->body,
+             ST(repeat_mm_n)[ST(repeat_index)]->body->p,
+             ST(repeat_mm_n)[ST(repeat_index)]->body->len);
+#endif
       i = i + ST(repeat_inc_n);
-      sprintf(ST(repeat_mm_n)[ST(repeat_index)]->body, "%d", i);
+      {
+        char buffer[128];
+        sprintf(buffer, "%d", i);
+#ifdef MACDEBUG
+        printf("%s(%d) new i = %s\n", __FILE__, __LINE__,  buffer);
+#endif
+        corfile_reset(ST(repeat_mm_n)[ST(repeat_index)]->body);
+        corfile_puts(buffer, ST(repeat_mm_n)[ST(repeat_index)]->body);
+        corfile_rewind(ST(repeat_mm_n)[ST(repeat_index)]->body);
+#ifdef MACDEBUG
+        printf("%s(%d) corefile: %s %d %d\n", __FILE__, __LINE__, 
+               ST(repeat_mm_n)[ST(repeat_index)]->body->body,
+               ST(repeat_mm_n)[ST(repeat_index)]->body->p,
+               ST(repeat_mm_n)[ST(repeat_index)]->body->len);
+#endif
+      }
       if (ST(repeat_index) > 1) {
         char c[41];
         int j;
@@ -680,12 +692,12 @@ static int nested_repeat(CSOUND *csound)                /* gab A9*/
           c[j]=' ';
           c[j+1]='\0';
         }
-        if (csound->oparms->msglevel)
+        if (csound->oparms->msglevel & TIMEMSG)
           csound->Message(csound,Str("%s  Nested LOOP section (%d) Level:%d\n"),
                           c, i, ST(repeat_index));
       }
       else {
-        if (csound->oparms->msglevel)
+        if (csound->oparms->msglevel & TIMEMSG)
           csound->Message(csound,Str(" External LOOP section (%d) Level:%d\n"),
                           i, ST(repeat_index));
       }
@@ -699,20 +711,25 @@ static int do_repeat(CSOUND *csound)
     ST(repeat_cnt)--;
     if (ST(repeat_cnt) == 0) {  /* Expired */
       /* Delete macro (assuming there is any) */
-      if (csound->oparms->msglevel)
+      if (csound->oparms->msglevel & TIMEMSG)
         csound->Message(csound, Str("Loop terminated\n"));
       if (ST(repeat_name)[0] != '\0')
         undefine_score_macro(csound, ST(repeat_name));
       ST(repeat_name)[0] = '\0';
     }
     else {
-      int i;
-      fseek(ST(str)->file, ST(repeat_point), SEEK_SET);
+      int i, n;
+      corfile_set(ST(str)->cf, ST(repeat_point));
       if (ST(repeat_name)[0] != '\0') {
-        sscanf(ST(repeat_mm)->body, "%d", &i);
+        sscanf(corfile_current(ST(repeat_mm)->body), "%d%n", &i, &n);
         i = i + ST(repeat_inc);
-        sprintf(ST(repeat_mm)->body, "%d", i);
-        if (csound->oparms->msglevel)
+        corfile_seek(ST(repeat_mm)->body, n, SEEK_CUR);
+        {
+          char buffer[128];
+          sprintf(buffer, "%d", i);
+          corfile_puts(buffer, ST(repeat_mm)->body);
+        }
+        if (csound->oparms->msglevel & TIMEMSG)
           csound->Message(csound, Str("Repeat section (%d)\n"), i);
       }
       else
@@ -762,15 +779,19 @@ static void init_smacros(CSOUND *csound, NAMES *nn)
       mm->acnt = 0;
       if (*p != '\0')
         p++;
-      mm->body = (char*) mmalloc(csound, strlen(p) + 1);
-      strcpy(mm->body, p);
+      mm->body = corfile_create_r(p);
+#ifdef MACDEBUG
+      printf("%s(%d): init %s %p\n", __FILE__, __LINE__, mm->name, mm->body);
+#endif
       nn = nn->next;
     }
     mm = (MACRO*) mcalloc(csound, sizeof(MACRO));
     mm->name = (char*)mmalloc(csound,4);
     strcpy(mm->name, "INF");
-    mm->body = (char*)mmalloc(csound,14);
-    strcpy(mm->body, "2147483647.0");
+    mm->body = corfile_create_r("2147483647.0");
+#ifdef MACDEBUG
+    printf("%s(%d): INF %p\n", __FILE__, __LINE__, mm->body);
+#endif
     mm->next = ST(macros);
     ST(macros) = mm;
 }
@@ -782,11 +803,24 @@ void sread_init(CSOUND *csound)
     ST(input_size) = 20;
     ST(input_cnt) = 0;
     ST(str) = ST(inputs);
-    ST(str)->file = csound->scorein;
     ST(str)->fd = NULL;
-    ST(str)->string = 0; ST(str)->body = csound->scorename;
+    ST(str)->cf = csound->scstr;
     ST(str)->is_marked_repeat = 0;
-    ST(str)->line = 1; ST(str)->unget_cnt = 0; ST(str)->mac = NULL;
+    ST(str)->line = 1; ST(str)->mac = NULL;
+    init_smacros(csound, csound->smacros);
+}
+
+void sread_initstr(CSOUND *csound)
+{
+    sread_alloc_globals(csound);
+    ST(inputs) = (IN_STACK*) mmalloc(csound, 20 * sizeof(IN_STACK));
+    ST(input_size) = 20;
+    ST(input_cnt) = 0;
+    ST(str) = ST(inputs);
+    ST(str)->fd = NULL;
+    ST(str)->fd =  ST(str)->cf = csound->scorestr;
+    ST(str)->is_marked_repeat = 0;
+    ST(str)->line = 1; ST(str)->mac = NULL;
     init_smacros(csound, csound->smacros);
 }
 
@@ -827,7 +861,7 @@ int sread(CSOUND *csound)       /*  called from main,  reads from SCOREIN   */
           char *old_nxp = ST(nxp)-2;
           getpfld(csound);
           ST(clock_base) = stof(csound, ST(sp));
-          if (csound->oparms->msglevel)
+          if (csound->oparms->msglevel & TIMEMSG)
             csound->Message(csound,Str("Clockbase = %f\n"), ST(clock_base));
           flushlin(csound);
           ST(op) = getop(csound);
@@ -858,6 +892,7 @@ int sread(CSOUND *csound)       /*  called from main,  reads from SCOREIN   */
               ST(bp)->p1val = ST(bp)->p2val = ST(bp)->newp2 = (MYFLT) tt;
             }
           }
+          else ST(bp)->p1val = ST(bp)->p2val = ST(bp)->newp2 = FL(0.0);
         }
         /* If we are in a repeat of a marked section ('n' statement),
            we must pop those inputs before doing an 'r' repeat. */
@@ -893,71 +928,69 @@ int sread(CSOUND *csound)       /*  called from main,  reads from SCOREIN   */
       case '{':
         {
           char *old_nxp = ST(nxp)-2;
+          int c, i;
           ST(repeat_index)++;
           if (UNLIKELY(ST(repeat_index) >= RPTDEPTH))
             scorerr(csound, Str("Loops are nested too deeply"));
-          if (UNLIKELY(ST(str)->string)) {
-            /* seems too dangerous at this point to continue  -- akozar */
-            scorerr(csound, Str("Loop cannot start inside of a macro"));
-            ST(repeat_index)--;
-            flushlin(csound);     /* Ignore rest of line */
+          ST(repeat_mm_n)[ST(repeat_index)] =
+            (MACRO*)mmalloc(csound, sizeof(MACRO));
+          ST(repeat_cnt_n)[ST(repeat_index)] = 0;
+          do {
+            c = getscochar(csound, 1);
+          } while (c==' '||c=='\t');
+          while (isdigit(c)) {
+            ST(repeat_cnt_n)[ST(repeat_index)] =
+              10 * ST(repeat_cnt_n)[ST(repeat_index)] + c - '0';
+            c = getscochar(csound, 1);
           }
-          else {
-            int c, i;
-            ST(repeat_mm_n)[ST(repeat_index)] =
-              (MACRO*)mmalloc(csound, sizeof(MACRO));
-            ST(repeat_cnt_n)[ST(repeat_index)] = 0;
-            do {
-              c = getscochar(csound, 1);
-            } while (c==' '||c=='\t');
-            while (isdigit(c)) {
-              ST(repeat_cnt_n)[ST(repeat_index)] =
-                10 * ST(repeat_cnt_n)[ST(repeat_index)] + c - '0';
-              c = getscochar(csound, 1);
-            }
-            if (UNLIKELY(ST(repeat_cnt_n)[ST(repeat_index)] <= 0
-                         || (c != ' ' && c != '\t' && c != '\n')))
-              scorerr(csound, Str("{: invalid repeat count"));
-            if (ST(repeat_index) > 1) {
-              char st[41];
-              int j;
-              for (j = 0; j < ST(repeat_index); j++) {
-                st[j] = ' ';
-                st[j+1] = '\0';
-              }
-              if (csound->oparms->msglevel)
-                csound->Message(csound, Str("%s Nested LOOP=%d Level:%d\n"),
-                                        st, ST(repeat_cnt_n)[ST(repeat_index)],
-                                        ST(repeat_index));
-            }
-            else {
-              if (csound->oparms->msglevel)
-                csound->Message(csound, Str("External LOOP=%d Level:%d\n"),
-                                        ST(repeat_cnt_n)[ST(repeat_index)],
-                                        ST(repeat_index));
-            }
-            while (c == ' ' || c == '\t') {
-              c = getscochar(csound, 1);
-            }
-            for (i = 0; isNameChar(c, i) && i < (NAMELEN-1); i++) {
-              ST(repeat_name_n)[ST(repeat_index)][i] = c;
-              c = getscochar(csound, 1);
+          if (UNLIKELY(ST(repeat_cnt_n)[ST(repeat_index)] <= 0
+                       || (c != ' ' && c != '\t' && c != '\n')))
+            scorerr(csound, Str("{: invalid repeat count"));
+          if (ST(repeat_index) > 1) {
+            char st[41];
+            int j;
+            for (j = 0; j < ST(repeat_index); j++) {
+              st[j] = ' ';
+              st[j+1] = '\0';
             }
-            ST(repeat_name_n)[ST(repeat_index)][i] = '\0';
-            ungetscochar(csound, c);
-            /* Define macro for counter */
-            ST(repeat_mm_n)[ST(repeat_index)]->name =
-              mmalloc(csound, strlen(ST(repeat_name_n)[ST(repeat_index)])+1);
-            strcpy(ST(repeat_mm_n)[ST(repeat_index)]->name,
-                   ST(repeat_name_n)[ST(repeat_index)]);
-            ST(repeat_mm_n)[ST(repeat_index)]->acnt = 0;
-            ST(repeat_mm_n)[ST(repeat_index)]->body = (char*)mmalloc(csound, 12);
-            sprintf(ST(repeat_mm_n)[ST(repeat_index)]->body, "%d", 0);
-            ST(repeat_mm_n)[ST(repeat_index)]->next = ST(macros);
-            ST(macros) = ST(repeat_mm_n)[ST(repeat_index)];
-            flushlin(csound);     /* Ignore rest of line */
-            ST(repeat_point_n)[ST(repeat_index)] = ftell(ST(str)->file);
+            if (csound->oparms->msglevel & TIMEMSG)
+              csound->Message(csound, Str("%s Nested LOOP=%d Level:%d\n"),
+                              st, ST(repeat_cnt_n)[ST(repeat_index)],
+                              ST(repeat_index));
+          }
+          else {
+            if (csound->oparms->msglevel & TIMEMSG)
+              csound->Message(csound, Str("External LOOP=%d Level:%d\n"),
+                              ST(repeat_cnt_n)[ST(repeat_index)],
+                              ST(repeat_index));
+          }
+          while (c == ' ' || c == '\t') {
+            c = getscochar(csound, 1);
+          }
+          for (i = 0; isNameChar(c, i) && i < (NAMELEN-1); i++) {
+            ST(repeat_name_n)[ST(repeat_index)][i] = c;
+            c = getscochar(csound, 1);
           }
+          ST(repeat_name_n)[ST(repeat_index)][i] = '\0';
+          ungetscochar(csound, c);
+          /* Define macro for counter */
+          ST(repeat_mm_n)[ST(repeat_index)]->name =
+            mmalloc(csound, strlen(ST(repeat_name_n)[ST(repeat_index)])+1);
+          strcpy(ST(repeat_mm_n)[ST(repeat_index)]->name,
+                 ST(repeat_name_n)[ST(repeat_index)]);
+          ST(repeat_mm_n)[ST(repeat_index)]->acnt = 0;
+          ST(repeat_mm_n)[ST(repeat_index)]->body = corfile_create_r("0");
+#ifdef MACDEBUG
+          printf("%s(%d): repeat %s zero %p\n", __FILE__, __LINE__,
+                 ST(repeat_name_n)[ST(repeat_index)],
+                 ST(repeat_mm_n)[ST(repeat_index)]->body);
+#endif
+          ST(repeat_mm_n)[ST(repeat_index)]->next = ST(macros);
+          ST(macros) = ST(repeat_mm_n)[ST(repeat_index)];
+          flushlin(csound);     /* Ignore rest of line */
+          ST(repeat_point_n)[ST(repeat_index)] =
+            corfile_tell(ST(str)->cf);
+          
           /* { does not start a new section - akozar */
           /* ST(clock_base) = FL(0.0);
           ST(warp_factor) = FL(1.0);
@@ -1000,12 +1033,7 @@ int sread(CSOUND *csound)       /*  called from main,  reads from SCOREIN   */
         *(ST(nxp)-2) = 's'; *ST(nxp)++ = LF;
         if (ST(nxp) >= ST(memend))              /* if this memblk exhausted */
           expand_nxp(csound);
-        if (UNLIKELY(ST(str)->string)) {
-          sreaderr(csound,Str("Repeat cannot start inside of a macro "
-                                                           "(ignored)"));
-          flushlin(csound);     /* Ignore rest of line */
-        }
-        else {
+        {
           int   c, i;
           ST(repeat_cnt) = 0;
           do {
@@ -1017,7 +1045,7 @@ int sread(CSOUND *csound)       /*  called from main,  reads from SCOREIN   */
           }
           if (UNLIKELY(ST(repeat_cnt) <= 0 || (c != ' ' && c != '\t' && c != '\n')))
             scorerr(csound, Str("r: invalid repeat count"));
-          if (csound->oparms->msglevel)
+          if (csound->oparms->msglevel & TIMEMSG)
             csound->Message(csound, Str("Repeats=%d\n"), ST(repeat_cnt));
           while (c == ' ' || c == '\t') {
             c = getscochar(csound, 1);
@@ -1035,12 +1063,14 @@ int sread(CSOUND *csound)       /*  called from main,  reads from SCOREIN   */
             ST(repeat_mm)->name = mmalloc(csound, strlen(ST(repeat_name)) + 1);
             strcpy(ST(repeat_mm)->name, ST(repeat_name));
             ST(repeat_mm)->acnt = 0;
-            ST(repeat_mm)->body = (char*)mmalloc(csound, 8);
-            sprintf(ST(repeat_mm)->body, "%d", 1); /* Set value */
+            ST(repeat_mm)->body = corfile_create_r("1");
+#ifdef MACDEBUG
+            printf("%s(%d): 1 %p\n", __FILE__, __LINE__,ST(repeat_mm)->body);
+#endif
             ST(repeat_mm)->next = ST(macros);
             ST(macros) = ST(repeat_mm);
           }
-          ST(repeat_point) = ftell(ST(str)->file);
+          ST(repeat_point) = corfile_tell(ST(str)->cf);
         }
         ST(clock_base) = FL(0.0);
         ST(warp_factor) = FL(1.0);
@@ -1059,7 +1089,7 @@ int sread(CSOUND *csound)       /*  called from main,  reads from SCOREIN   */
           }
           buff[i] = '\0';
           if (c != '\n' && c != EOF) flushlin(csound);
-          if (csound->oparms->msglevel)
+          if (csound->oparms->msglevel & TIMEMSG)
             csound->Message(csound,Str("Named section >>>%s<<<\n"), buff);
           for (j=0; j<=ST(next_name); j++)
             if (strcmp(buff, ST(names)[j].name)==0) break;
@@ -1069,22 +1099,15 @@ int sread(CSOUND *csound)       /*  called from main,  reads from SCOREIN   */
             strcpy(ST(names)[j].name, buff);
           }
           else mfree(csound, ST(names)[j].file);
-          if (!ST(str)->string) {
-            ST(names)[ST(next_name)].posit = ftell(ST(str)->file);
-            ST(names)[ST(next_name)].line = ST(str)->line;
-            ST(names)[ST(next_name)].file = mmalloc(csound,
-                                                    strlen(ST(str)->body) + 1);
-            strcpy(ST(names)[ST(next_name)].file, ST(str)->body);
-            if (csound->oparms->msglevel)
-              csound->Message(csound,Str("%d: File %s position %ld\n"),
-                              ST(next_name), ST(names)[ST(next_name)].file,
-                              ST(names)[ST(next_name)].posit);
-          }
-          else {
-            csound->Message(csound,
-                             Str("Ignoring name %s not in file\n"), buff);
-            ST(names)[j].name[0] = '\0'; /* Destroy name */
-          }
+          ST(names)[ST(next_name)].posit = corfile_tell(ST(str)->cf);
+          ST(names)[ST(next_name)].line = ST(str)->line;
+          ST(names)[ST(next_name)].file = 
+            mmalloc(csound, strlen(corfile_body(ST(str)->cf)) + 1);
+          strcpy(ST(names)[ST(next_name)].file, corfile_body(ST(str)->cf));
+          if (csound->oparms->msglevel & TIMEMSG)
+            csound->Message(csound,Str("%d: File %s position %ld\n"),
+                            ST(next_name), ST(names)[ST(next_name)].file,
+                            ST(names)[ST(next_name)].posit);
           ST(op) = getop(csound);
           ST(nxp) = old_nxp;
           *ST(nxp)++ = ST(op); /* Undo this line */
@@ -1120,19 +1143,11 @@ int sread(CSOUND *csound)       /*  called from main,  reads from SCOREIN   */
               ST(str) = &ST(inputs)[old];     /* In case it moves */
             }
             ST(str)++;
-            ST(str)->string = 0;
             ST(str)->is_marked_repeat = 1;
-            ST(str)->fd = fopen_path(csound, &(ST(str)->file),
-                                             ST(names)[i].file, NULL, NULL, 1);
-            /* RWD 3:2000 */
-            if (UNLIKELY(ST(str)->fd == NULL)) {
-              csoundDie(csound, Str("cannot open input file %s"),
-                                ST(names)[i].file);
-            }
-            ST(str)->body = csound->GetFileName(ST(str)->fd);
+            ST(str)->cf = copy_to_corefile(csound, ST(names)[i].file, NULL, 1);
+//            ST(str)->cf = corfile_create_r(csound->GetFileName(ST(str)->fd));
             ST(str)->line = ST(names)[i].line;
-            ST(str)->unget_cnt = 0;
-            fseek(ST(str)->file, ST(names)[i].posit, SEEK_SET);
+            corfile_set(ST(str)->cf, ST(names)[i].posit);
           }
           ST(op) = getop(csound);
           ST(nxp) = old_nxp;
@@ -1145,7 +1160,7 @@ int sread(CSOUND *csound)       /*  called from main,  reads from SCOREIN   */
           char *old_nxp = ST(nxp)-2;
           getpfld(csound);
           ST(warp_factor) = stof(csound, ST(sp));
-          if (csound->oparms->msglevel)
+          if (csound->oparms->msglevel & TIMEMSG)
             csound->Message(csound, Str("Warp_factor = %f\n"), ST(warp_factor));
           flushlin(csound);
           ST(op) = getop(csound);
@@ -1471,12 +1486,10 @@ void sfree(CSOUND *csound)       /* free all sorter allocated space */
       ST(curmem) = NULL;
     }
     while (ST(str) != &ST(inputs)[0]) {
-      if (!ST(str)->string && ST(str)->fd != NULL) {
-        csound->FileClose(csound, ST(str)->fd);
-        ST(str)->fd = NULL;
-      }
+      corfile_rm(&(ST(str)->cf));
       ST(str)--;
     }
+    corfile_rm(&(csound->scorestr));
 }
 
 static void flushlin(CSOUND *csound)
@@ -1551,7 +1564,6 @@ static int sget1(CSOUND *csound)    /* get first non-white, non-comment char */
       while (isspace((c = getscochar(csound, 1))));
       if (c == 'd') {
         int   arg = 0;
-        int   size = 100;
         MACRO *mm = (MACRO*) mmalloc(csound, sizeof(MACRO));
         mm->margs = MARGS;
         if (UNLIKELY(!check_preproc_name(csound, "define"))) {
@@ -1568,7 +1580,7 @@ static int sget1(CSOUND *csound)    /* get first non-white, non-comment char */
           c = getscochar(csound, 1);
         }
         mname[i] = '\0';
-        if (csound->oparms->msglevel)
+        if (csound->oparms->msglevel & TIMEMSG)
           csound->Message(csound, Str("Macro definition for %s\n"), mname);
         mm->name = mmalloc(csound, i + 1);
         strcpy(mm->name, mname);
@@ -1599,26 +1611,25 @@ static int sget1(CSOUND *csound)    /* get first non-white, non-comment char */
           }
         }
         mm->acnt = arg;
-        i = 0;
         while ((c = getscochar(csound, 1)) != '#');   /* Skip to next # */
-        mm->body = (char*)mmalloc(csound, 100);
+        mm->body = corfile_create_w();
+#ifdef MACDEBUG
+        printf("%s(%d): macro %s %p\n", __FILE__, __LINE__, mname, mm->body);
+#endif
         while ((c = getscochar(csound, 0)) != '#') {  /* Do not expand here!! */
-          mm->body[i++] = c;
-          if (UNLIKELY(i>= size))
-            mm->body = mrealloc(csound, mm->body, size += 100);
+          corfile_putc(c, mm->body);
           if (c=='\\') {
-            mm->body[i++] = getscochar(csound, 0);    /* Allow escaped # */
-            if (UNLIKELY(i>= size))
-              mm->body = mrealloc(csound, mm->body, size += 100);
+            corfile_putc(getscochar(csound, 0), mm->body);    /* Allow escaped # */
           }
           if (c=='\n') ST(lincnt)++;
         }
-        mm->body[i]='\0';
+        corfile_rewind(mm->body);
         mm->next = ST(macros);
         ST(macros) = mm;
 #ifdef MACDEBUG
         csound->Message(csound, Str("Macro %s with %d arguments defined\n"),
                                 mm->name, mm->acnt);
+        csound->Message(csound, "with body %s\n", corfile_body(mm->body));
 #endif
         c = ' ';
         flushlin(csound);
@@ -1651,19 +1662,16 @@ static int sget1(CSOUND *csound)    /* get first non-white, non-comment char */
           ST(str) = &ST(inputs)[old];     /* In case it moves */
         }
         ST(str)++;
-        ST(str)->string = 0;
         ST(str)->is_marked_repeat = 0;
-        ST(str)->fd = fopen_path(csound, &(ST(str)->file), mname,
-                                         csound->scorename, "INCDIR", 1);
-        if (ST(str)->fd == NULL) {
+        ST(str)->cf = copy_to_corefile(csound, mname, "INCDIR", 1);
+        if (ST(str)->cf == NULL) {
           ST(str)--;
           ST(str)->line--; /* include was one line earlier */
           ST(linepos) = 0;
           scorerr(csound, Str("Cannot open #include'd file %s"), mname);
         }
         else {
-          ST(str)->body = csound->GetFileName(ST(str)->fd);
-          ST(str)->line = 1; ST(str)->unget_cnt = 0;
+          ST(str)->line = 1;
           free(mname);
           goto srch;
         }
@@ -1682,7 +1690,7 @@ static int sget1(CSOUND *csound)    /* get first non-white, non-comment char */
           c = getscochar(csound, 1);
         }
         mname[i] = '\0';
-        if (csound->oparms->msglevel)
+        if (csound->oparms->msglevel & TIMEMSG)
           csound->Message(csound, Str("macro %s undefined\n"), mname);
         undefine_score_macro(csound, mname);
         while (c != '\n' && c != EOF)
diff --git a/Engine/swritestr.c b/Engine/swritestr.c
new file mode 100644
index 0000000..3c3d46c
--- /dev/null
+++ b/Engine/swritestr.c
@@ -0,0 +1,542 @@
+/*
+    swritestr.c:
+
+    Copyright (C) 2011 John ffitch (after Barry Vercoe)
+
+    This file is part of Csound.
+
+    The Csound Library is free software; you can redistribute it
+    and/or modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    Csound 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 Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with Csound; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+    02111-1307 USA
+*/
+
+#include "csoundCore.h"                                  /*    SWRITESTR.C  */
+#include <math.h>
+#include <stdlib.h>
+#include <ctype.h>
+#include "corfile.h"
+
+static SRTBLK *nxtins(SRTBLK *), *prvins(SRTBLK *);
+static char   *pfout(CSOUND *,SRTBLK *, char *, int, int);
+static char   *nextp(CSOUND *,SRTBLK *, char *, int, int);
+static char   *prevp(CSOUND *,SRTBLK *, char *, int, int);
+static char   *ramp(CSOUND *,SRTBLK *, char *, int, int);
+static char   *expramp(CSOUND *,SRTBLK *, char *, int, int);
+static char   *randramp(CSOUND *,SRTBLK *, char *, int, int);
+static char   *pfStr(CSOUND *,char *, int, int);
+static char   *fpnum(CSOUND *,char *, int, int);
+
+static void fltout(CSOUND *csound, MYFLT n) 
+{
+    char buffer[1024];
+    sprintf(buffer, "%.6f", n);
+    corfile_puts(buffer, csound->scstr);
+}
+
+void swritestr(CSOUND *csound)
+{
+    SRTBLK *bp;
+    char   *p, c, isntAfunc;
+    int    lincnt, pcnt=0;
+
+    if (UNLIKELY((bp = csound->frstbp) == NULL))
+      return;
+
+    lincnt = 0;
+    if ((c = bp->text[0]) != 'w'
+        && c != 's' && c != 'e') {      /*   if no warp stmnt but real data,  */
+      /* create warp-format indicator */
+      corfile_puts("w 0 60\n", csound->scstr);
+      lincnt++;
+    }
+ nxtlin:
+    lincnt++;                           /* now for each line:           */
+    p = bp->text;
+    c = *p++;
+    isntAfunc = 1;
+    switch (c) {
+    case 'f':
+      isntAfunc = 0;
+    case 'q':
+    case 'i':
+    case 'a':
+      corfile_putc(c, csound->scstr);
+      corfile_putc(*p++, csound->scstr);
+    while ((c = *p++) != SP && c != LF)
+        corfile_putc(c, csound->scstr);                /* put p1       */
+      corfile_putc(c, csound->scstr);
+      if (c == LF)
+        break;
+      fltout(csound, bp->p2val);                        /* put p2val,   */
+      corfile_putc(SP, csound->scstr);
+      fltout(csound, bp->newp2);                        /*   newp2,     */
+      while ((c = *p++) != SP && c != LF)
+        ;
+      corfile_putc(c, csound->scstr);                /*   and delim  */
+      if (c == LF)
+        break;
+      if (isntAfunc) {
+        fltout(csound, bp->p3val);                      /* put p3val,   */
+        corfile_putc(SP, csound->scstr);
+       fltout(csound, bp->newp3);                      /*   newp3,     */
+        while ((c = *p++) != SP && c != LF)
+          ;
+      }
+      else { /*make sure p3s (table length) are ints */
+        char temp[256];
+        sprintf(temp,"%d ",(int32)bp->p3val);   /* put p3val  */
+        fpnum(csound,temp, lincnt, pcnt);
+        corfile_putc(SP, csound->scstr);
+        sprintf(temp,"%d ",(int32)bp->newp3);   /* put newp3  */
+        fpnum(csound,temp, lincnt, pcnt);
+        while ((c = *p++) != SP && c != LF)
+          ;
+      }
+      pcnt = 3;
+      while (c != LF) {
+        pcnt++;
+        corfile_putc(SP, csound->scstr);
+        p = pfout(csound,bp,p,lincnt,pcnt);     /* now put each pfield  */
+        c = *p++;
+      }
+      corfile_putc('\n', csound->scstr);
+      break;
+    case 's':
+    case 'e':
+      if (bp->pcnt > 0) {
+        char buffer[80];
+        sprintf(buffer, "f 0 %f %f\n", bp->p2val, bp->newp2);
+        corfile_puts(buffer, csound->scstr);
+      }
+      corfile_putc(c, csound->scstr);
+      corfile_putc(LF, csound->scstr);
+      break;
+    case 'w':
+    case 't':
+      corfile_putc(c, csound->scstr);
+      while ((c = *p++) != LF)        /* put entire line      */
+        corfile_putc(c, csound->scstr);
+      corfile_putc(LF, csound->scstr);
+      break;
+    default:
+      csound->Message(csound,
+                      Str("swrite: unexpected opcode, section %d line %d\n"),
+                      csound->sectcnt, lincnt);
+      break;
+    }
+    if ((bp = bp->nxtblk) != NULL)
+      goto nxtlin;
+}
+
+static char *pfout(CSOUND *csound, SRTBLK *bp, char *p,int lincnt, int pcnt)
+{
+    switch (*p) {
+    case 'n':
+      p = nextp(csound, bp,p, lincnt, pcnt);
+      break;
+    case 'p':
+      p = prevp(csound, bp,p, lincnt, pcnt);
+      break;
+    case '<':
+    case '>':
+      p = ramp(csound, bp,p, lincnt, pcnt);
+      break;
+    case '(':
+    case ')':
+      p = expramp(csound, bp, p, lincnt, pcnt);
+      break;
+    case '~':
+      p = randramp(csound, bp, p, lincnt, pcnt);
+      break;
+    case '"':
+      p = pfStr(csound, p, lincnt, pcnt);
+      break;
+    default:
+      p = fpnum(csound, p, lincnt, pcnt);
+      break;
+    }
+    return(p);
+}
+
+static SRTBLK *nxtins(SRTBLK *bp) /* find nxt note with same p1 */
+{
+    MYFLT p1;
+
+    p1 = bp->p1val;
+    while ((bp = bp->nxtblk) != NULL
+           && (bp->p1val != p1 || bp->text[0] != 'i'))
+      ;
+    return(bp);
+}
+
+static SRTBLK *prvins(SRTBLK *bp) /* find prv note with same p1 */
+{
+    MYFLT p1;
+
+    p1 = bp->p1val;
+    while ((bp = bp->prvblk) != NULL
+           && (bp->p1val != p1 || bp->text[0] != 'i'))
+      ;
+    return(bp);
+}
+
+static char *nextp(CSOUND *csound, SRTBLK *bp, char *p, int lincnt, int pcnt)
+{
+    char *q;
+    int n;
+
+    q = p;
+    p++;                                    /* 1st char     */
+    if (UNLIKELY(*p++ != 'p'))              /* 2nd char     */
+      goto error;
+    n = 999;
+    if (isdigit(*p))
+      n = *p++ - '0';
+    if (isdigit(*p))                /* n is np subscript no */
+      n = 10*n + (*p++ - '0');
+    if (UNLIKELY(*p != SP && *p != LF))
+      goto error;
+    if (LIKELY((bp = nxtins(bp)) != NULL   /* for nxtins, same p1  */
+               && n <= bp->pcnt)) {
+      q = bp->text;
+      while (n--)
+        while (*q++ != SP)          /*   go find the pfield */
+          ;
+      pfout(csound,bp,q,lincnt,pcnt);      /*   and put it out     */
+    }
+    else {
+    error:
+      csound->Message(csound,Str("swrite: output, sect%d line%d p%d makes"
+                      " illegal reference to "),
+        csound->sectcnt,lincnt,pcnt);
+      while (q < p)
+        csound->Message(csound,"%c", *q++);
+      while (*p != SP && *p != LF)
+        csound->Message(csound,"%c", *p++);
+      csound->Message(csound,Str("   Zero substituted\n"));
+      corfile_putc('0', csound->scstr);
+    }
+    return(p);
+}
+
+static char *prevp(CSOUND *csound, SRTBLK *bp, char *p, int lincnt, int pcnt)
+{
+    char *q;
+    int n;
+
+    q = p;
+    p++;                                    /* 1st char     */
+    if (UNLIKELY(*p++ != 'p'))              /* 2nd char     */
+      goto error;
+    n = 999;
+    if (isdigit(*p))
+      n = *p++ - '0';
+    if (isdigit(*p))                /* n is np subscript no */
+      n = 10*n + (*p++ - '0');
+    if (UNLIKELY(*p != SP && *p != LF))
+      goto error;
+    if (LIKELY((bp = prvins(bp)) != NULL   /* for prvins, same p1, */
+               && n <= bp->pcnt)) {
+      q = bp->text;
+      while (n--)
+        while (*q++ != SP)          /*   go find the pfield */
+          ;
+      pfout(csound,bp,q,lincnt,pcnt);      /*   and put it out     */
+    }
+    else {
+    error:
+      csound->Message(csound,
+          Str("swrite: output, sect%d line%d p%d makes illegal reference to "),
+          csound->sectcnt,lincnt,pcnt);
+      while (q < p)
+        csound->Message(csound,"%c", *q++);
+      while (*p != SP && *p != LF)
+        csound->Message(csound,"%c", *p++);
+      csound->Message(csound,Str("   Zero substituted\n"));
+      corfile_putc('0', csound->scstr);
+    }
+    return(p);
+}
+
+static char *ramp(CSOUND *csound, SRTBLK *bp, char *p, int lincnt, int pcnt)
+  /* NB np's may reference a ramp but ramps must terminate in valid nums */
+{
+    char    *q;
+    char    *psav;
+    SRTBLK  *prvbp, *nxtbp;
+    MYFLT   pval, qval, rval, p2span;
+    extern  MYFLT stof(CSOUND *, char *);
+    int     pnum, n;
+
+    psav = ++p;
+    if (UNLIKELY(*psav != SP && *psav != LF))
+      goto error1;
+    pnum = 0;
+    q = bp->text;
+    while (q < p)
+      if (*q++ == SP)
+        pnum++;
+    prvbp = bp;
+ backup:
+    if (LIKELY((prvbp = prvins(prvbp)) != NULL)) {
+      p = prvbp->text;
+      n = pnum;
+      while (n--)
+        while (*p++ != SP)
+          ;
+      if (*p == '>' || *p == '<')
+        goto backup;
+    }
+    else goto error2;
+    nxtbp = bp;
+ forwrd:
+    if (LIKELY((nxtbp = nxtins(nxtbp)) != NULL)) {
+      q = nxtbp->text;
+      n = pnum;
+      while (n--)
+        while (*q++ != SP)
+          ;
+      if (*q == '>' || *q == '<')
+        goto forwrd;
+    }
+    else goto error2;
+    pval = stof(csound, p);     /* the error msgs generated by stof     */
+    qval = stof(csound, q);                         /*   are misleading */
+    if (UNLIKELY((p2span = nxtbp->newp2 - prvbp->newp2) <= 0))
+      goto error2;
+    rval = (qval - pval) * (bp->newp2 - prvbp->newp2) / p2span + pval;
+    fltout(csound, rval);
+    return(psav);
+
+ error1:
+    csound->Message(csound,
+        Str("swrite: output, sect%d line%d p%d has illegal ramp symbol\n"),
+        csound->sectcnt,lincnt,pcnt);
+    goto put0;
+ error2:
+    csound->Message(csound, Str("swrite: output, sect%d line%d p%d ramp "
+                                "has illegal forward or backward ref\n"),
+                            csound->sectcnt, lincnt, pcnt);
+ put0:
+    corfile_putc('0', csound->scstr);
+    return(psav);
+}
+
+static char *expramp(CSOUND *csound, SRTBLK *bp, char *p, int lincnt, int pcnt)
+  /* NB np's may reference a ramp but ramps must terminate in valid nums */
+{
+    char    *q;
+    char    *psav;
+    SRTBLK  *prvbp, *nxtbp;
+    MYFLT   pval, qval, rval;
+    double  p2span;
+    extern  MYFLT stof(CSOUND *, char *);
+    int     pnum, n;
+
+    psav = ++p;
+    if (UNLIKELY(*psav != SP && *psav != LF))
+      goto error1;
+    pnum = 0;
+    q = bp->text;
+    while (q < p)
+      if (*q++ == SP)
+        pnum++;
+    prvbp = bp;
+ backup:
+    if (LIKELY((prvbp = prvins(prvbp)) != NULL)) {
+      p = prvbp->text;
+      n = pnum;
+      while (n--)
+        while (*p++ != SP)
+          ;
+      if (*p == '}' || *p == '{' || *p == '(' || *p == ')')
+        goto backup;
+    }
+    else goto error2;
+    nxtbp = bp;
+ forwrd:
+    if (LIKELY((nxtbp = nxtins(nxtbp)) != NULL)) {
+      q = nxtbp->text;
+      n = pnum;
+      while (n--)
+        while (*q++ != SP)
+          ;
+      if (*q == '}' || *q == '{' || *q == '(' || *q == ')')
+        goto forwrd;
+    }
+    else goto error2;
+    pval = stof(csound, p);     /* the error msgs generated by stof     */
+    qval = stof(csound, q);                         /*   are misleading */
+    p2span = (double)(nxtbp->newp2 - prvbp->newp2);
+/*  printf("pval=%f qval=%f span = %f\n", pval, qval, p2span); */
+    rval = pval * (MYFLT)pow((double)(qval/pval),
+                             (double)(bp->newp2 - prvbp->newp2) / p2span);
+/*  printf("rval=%f bp->newp2=%f prvbp->newp2-%f\n",
+           rval, bp->newp2, prvbp->newp2); */
+    fltout(csound, rval);
+    return(psav);
+
+ error1:
+    csound->Message(csound,Str("swrite: output, sect%d line%d p%d has illegal"
+                   " expramp symbol\n"),
+               csound->sectcnt,lincnt,pcnt);
+    goto put0;
+ error2:
+    csound->Message(csound, Str("swrite: output, sect%d line%d p%d expramp "
+                                "has illegal forward or backward ref\n"),
+                            csound->sectcnt, lincnt, pcnt);
+ put0:
+    corfile_putc('0', csound->scstr);
+    return(psav);
+}
+
+static char *randramp(CSOUND *csound,
+                      SRTBLK *bp, char *p, int lincnt, int pcnt)
+  /* NB np's may reference a ramp but ramps must terminate in valid nums */
+{
+    char    *q;
+    char    *psav;
+    SRTBLK  *prvbp, *nxtbp;
+    MYFLT   pval, qval, rval;
+    extern  MYFLT stof(CSOUND *, char *);
+    int     pnum, n;
+
+    psav = ++p;
+    if (UNLIKELY(*psav != SP && *psav != LF))
+      goto error1;
+    pnum = 0;
+    q = bp->text;
+    while (q < p)
+      if (*q++ == SP)
+        pnum++;
+    prvbp = bp;
+ backup:
+    if (LIKELY((prvbp = prvins(prvbp)) != NULL)) {
+      p = prvbp->text;
+      n = pnum;
+      while (n--)
+        while (*p++ != SP)
+          ;
+      if (UNLIKELY(*p == '~'))
+        goto backup;
+    }
+    else goto error2;
+    nxtbp = bp;
+ forwrd:
+    if (LIKELY((nxtbp = nxtins(nxtbp)) != NULL)) {
+      q = nxtbp->text;
+      n = pnum;
+      while (n--)
+        while (*q++ != SP)
+          ;
+      if (*q == '~')
+        goto forwrd;
+    }
+    else goto error2;
+    pval = stof(csound, p);     /* the error msgs generated by stof     */
+    qval = stof(csound, q);                         /*   are misleading */
+    rval = (MYFLT) (((double) (csound->Rand31(&(csound->randSeed1)) - 1)
+                     / 2147483645.0) * ((double) qval - (double) pval)
+                    + (double) pval);
+    fltout(csound, rval);
+    return(psav);
+
+ error1:
+    csound->Message(csound,Str("swrite: output, sect%d line%d p%d has illegal"
+                   " expramp symbol\n"),
+               csound->sectcnt,lincnt,pcnt);
+    goto put0;
+ error2:
+    csound->Message(csound,Str("swrite: output, sect%d line%d p%d expramp has"
+                               " illegal forward or backward ref\n"),
+               csound->sectcnt,lincnt,pcnt);
+ put0:
+    corfile_putc('0', csound->scstr);
+    return(psav);
+}
+
+static char *pfStr(CSOUND *csound, char *p, int lincnt, int pcnt)
+{                             /* moves quoted ascii string to SCOREOUT file */
+    char *q = p;              /*   with no internal format chk              */
+    corfile_putc(*p++, csound->scstr);
+    while (*p != '"')
+      corfile_putc(*p++, csound->scstr);
+    corfile_putc(*p++, csound->scstr);
+    if (UNLIKELY(*p != SP && *p != LF)) {
+      csound->Message(csound, Str("swrite: output, sect%d line%d p%d "
+                                  "has illegally terminated string   "),
+                              csound->sectcnt, lincnt, pcnt);
+      while (q < p)
+        csound->Message(csound,"%c", *q++);
+      while (*p != SP && *p != LF)
+        csound->Message(csound,"%c", *p++);
+      csound->Message(csound,"\n");
+    }
+    return(p);
+}
+
+static char *fpnum(CSOUND *csound,
+                   char *p, int lincnt, int pcnt) /* moves ascii string */
+  /* to SCOREOUT file with fpnum format chk */
+{
+    char *q;
+    int dcnt;
+
+    q = p;
+    if (*p == '+')
+      p++;
+    if (*p == '-')
+      corfile_putc(*p++, csound->scstr);
+    dcnt = 0;
+    while (isdigit(*p)) {
+      //      printf("*p=%c\n", *p);
+      corfile_putc(*p++, csound->scstr);
+      dcnt++;
+    }
+    //    printf("%d:output: %s<<\n", __LINE__, csound->scstr);
+    if (*p == '.')
+      corfile_putc(*p++, csound->scstr);
+    while (isdigit(*p)) {
+      corfile_putc(*p++, csound->scstr);
+      dcnt++;
+    }
+    //    printf("%d:output: %s<<\n", __LINE__, csound->scstr);
+    if (*p == 'E' || *p == 'e') { /* Allow exponential notation */
+      corfile_putc(*p++, csound->scstr);
+      dcnt++;
+      if (*p == '+' || *p == '-') {
+        corfile_putc(*p++, csound->scstr);
+        dcnt++;
+      }
+      while (isdigit(*p)) {
+        corfile_putc(*p++, csound->scstr);
+        dcnt++;
+      }
+    }
+    //    printf("%d:output: %s<<\n", __LINE__, csound->scstr);
+    if (UNLIKELY((*p != SP && *p != LF) || !dcnt)) {
+      csound->Message(csound,Str("swrite: output, sect%d line%d p%d has "
+                                 "illegal number  "),
+                      csound->sectcnt,lincnt,pcnt);
+      while (q < p)
+        csound->Message(csound,"%c", *q++);
+      while (*p != SP && *p != LF)
+        csound->Message(csound,"%c", *p++);
+      csound->Message(csound,Str("    String truncated\n"));
+      if (!dcnt)
+        corfile_putc('0', csound->scstr);
+    }
+    return(p);
+}
+
diff --git a/Engine/symbtab.c b/Engine/symbtab.c
index aba492f..36b86fd 100644
--- a/Engine/symbtab.c
+++ b/Engine/symbtab.c
@@ -30,6 +30,7 @@
 #include "csound_orcparse.h"
 #include "insert.h"
 #include "namedins.h"
+#include "interlocks.h"
 
 #ifndef PARSER_DEBUG
 #define PARSER_DEBUG (0)
@@ -41,6 +42,8 @@ ORCTOKEN** symbtab;
 #define namedInstrFlag csound->parserNamedInstrFlag
 
 ORCTOKEN *add_token(CSOUND *csound, char *s, int type);
+static ORCTOKEN *add_token_p(CSOUND *csound, char *s, int type, int val);
+extern int csound_orcget_lineno(void*);
 
 int get_opcode_type(OENTRY *ep)
 {
@@ -136,10 +139,10 @@ void init_symbtab(CSOUND *csound)
     add_token(csound, "ampdbfs", T_FUNCTION);
     add_token(csound, "dbamp", T_FUNCTION);
     add_token(csound, "dbfsamp", T_FUNCTION);
-    add_token(csound, "ftlen", T_FUNCTION);
-    add_token(csound, "ftsr", T_FUNCTION);
-    add_token(csound, "ftlptim", T_FUNCTION);
-    add_token(csound, "ftchnls", T_FUNCTION);
+    add_token_p(csound, "ftlen", T_FUNCTION, TR);
+    add_token_p(csound, "ftsr", T_FUNCTION, TR);
+    add_token_p(csound, "ftlptim", T_FUNCTION, TR);
+    add_token_p(csound, "ftchnls", T_FUNCTION, TR);
     add_token(csound, "i", T_FUNCTION);
     add_token(csound, "k", T_FUNCTION);
     add_token(csound, "cpsoct", T_FUNCTION);
@@ -147,27 +150,27 @@ void init_symbtab(CSOUND *csound)
     add_token(csound, "cpspch", T_FUNCTION);
     add_token(csound, "pchoct", T_FUNCTION);
     add_token(csound, "octcps", T_FUNCTION);
-    add_token(csound, "nsamp", T_FUNCTION);
+    add_token_p(csound, "nsamp", T_FUNCTION, TR);
     add_token(csound, "powoftwo", T_FUNCTION);
     add_token(csound, "logbtwo", T_FUNCTION);
     add_token(csound, "a", T_FUNCTION);
-    add_token(csound, "tb0", T_FUNCTION);
-    add_token(csound, "tb1", T_FUNCTION);
-    add_token(csound, "tb2", T_FUNCTION);
-    add_token(csound, "tb3", T_FUNCTION);
-    add_token(csound, "tb4", T_FUNCTION);
-    add_token(csound, "tb5", T_FUNCTION);
-    add_token(csound, "tb6", T_FUNCTION);
-    add_token(csound, "tb7", T_FUNCTION);
-    add_token(csound, "tb8", T_FUNCTION);
-    add_token(csound, "tb9", T_FUNCTION);
-    add_token(csound, "tb10", T_FUNCTION);
-    add_token(csound, "tb11", T_FUNCTION);
-    add_token(csound, "tb12", T_FUNCTION);
-    add_token(csound, "tb13", T_FUNCTION);
-    add_token(csound, "tb14", T_FUNCTION);
-    add_token(csound, "tb15", T_FUNCTION);
-    add_token(csound, "urd", T_FUNCTION);
+    add_token_p(csound, "tb0", T_FUNCTION, TR);
+    add_token_p(csound, "tb1", T_FUNCTION, TR);
+    add_token_p(csound, "tb2", T_FUNCTION, TR);
+    add_token_p(csound, "tb3", T_FUNCTION, TR);
+    add_token_p(csound, "tb4", T_FUNCTION, TR);
+    add_token_p(csound, "tb5", T_FUNCTION, TR);
+    add_token_p(csound, "tb6", T_FUNCTION, TR);
+    add_token_p(csound, "tb7", T_FUNCTION, TR);
+    add_token_p(csound, "tb8", T_FUNCTION, TR);
+    add_token_p(csound, "tb9", T_FUNCTION, TR);
+    add_token_p(csound, "tb10", T_FUNCTION, TR);
+    add_token_p(csound, "tb11", T_FUNCTION, TR);
+    add_token_p(csound, "tb12", T_FUNCTION, TR);
+    add_token_p(csound, "tb13", T_FUNCTION, TR);
+    add_token_p(csound, "tb14", T_FUNCTION, TR);
+    add_token_p(csound, "tb15", T_FUNCTION, TR);
+    add_token_p(csound, "urd", T_FUNCTION, TR);
     add_token(csound, "not", T_FUNCTION);
     add_token(csound, "cent", T_FUNCTION);
     add_token(csound, "octave", T_FUNCTION);
@@ -175,6 +178,9 @@ void init_symbtab(CSOUND *csound)
     add_token(csound, "cpsmidinn", T_FUNCTION);
     add_token(csound, "octmidinn", T_FUNCTION);
     add_token(csound, "pchmidinn", T_FUNCTION);
+    add_token(csound, "db", T_FUNCTION);
+    add_token(csound, "p", T_FUNCTION);
+    add_token(csound, "##error", T_FUNCTION);
 }
 
 static unsigned int hash(char *s)
@@ -216,12 +222,19 @@ ORCTOKEN *add_token(CSOUND *csound, char *s, int type)
     return ans;
 }
 
+static ORCTOKEN *add_token_p(CSOUND *csound, char *s, int type, int val)
+{
+    ORCTOKEN *ans = add_token(csound, s, type);
+    ans->value = val;
+    return ans;
+}
+    
 int isUDOArgList(char *s)
 {
     int len = strlen(s) - 1;
 
     while (len >= 0) {
-      if (UNLIKELY(strchr("aijkKopS0", s[len]) == NULL)) {
+      if (UNLIKELY(strchr("aijkftKopS0", s[len]) == NULL)) {
         /* printf("Invalid char '%c' in '%s'", *p, s); */
         return 0;
       }
@@ -235,7 +248,7 @@ int isUDOAnsList(char *s)
     int len = strlen(s) - 1;
 
     while (len >= 0) {
-      if (UNLIKELY(strchr("aikSK0", s[len]) == NULL)) {
+      if (UNLIKELY(strchr("aikftSK0", s[len]) == NULL)) {
         return 0;
       }
       len--;
@@ -255,11 +268,11 @@ ORCTOKEN *lookup_token(CSOUND *csound, char *s, void *yyscanner)
 
     if (udoflag == 0) {
       if (isUDOAnsList(s)) {
-        ans = new_token(csound, T_UDO_ANS);
+        ans = new_token(csound, UDO_ANS_TOKEN);
         ans->lexeme = (char*)mmalloc(csound, 1+strlen(s));
         strcpy(ans->lexeme, s);
-        ans->next = symbtab[h];
-        symbtab[h] = ans;
+//        ans->next = symbtab[h];
+//        symbtab[h] = ans;
         //printf("Found UDO Answer List\n");
         return ans;
       }
@@ -267,11 +280,11 @@ ORCTOKEN *lookup_token(CSOUND *csound, char *s, void *yyscanner)
 
     if (udoflag == 1) {
       if (isUDOArgList(s)) {
-        ans = new_token(csound, T_UDO_ARGS);
+        ans = new_token(csound, UDO_ARGS_TOKEN);
         ans->lexeme = (char*)mmalloc(csound, 1+strlen(s));
         strcpy(ans->lexeme, s);
-        ans->next = symbtab[h];
-        symbtab[h] = ans;
+//        ans->next = symbtab[h];
+//        symbtab[h] = ans;
         //printf("Found UDO Arg List\n");
         return ans;
       }
@@ -282,27 +295,26 @@ ORCTOKEN *lookup_token(CSOUND *csound, char *s, void *yyscanner)
         if (PARSER_DEBUG)
           csound->Message(csound, "Looking up token for: %d: %d: %s : %s\n",
                           hash("reverb"), hash("a4"), s, a->lexeme);
-      }
+			  }
       if (strcmp(a->lexeme, s)==0) {
         ans = (ORCTOKEN*)mmalloc(csound, sizeof(ORCTOKEN));
         memcpy(ans, a, sizeof(ORCTOKEN));
         ans->next = NULL;
         ans->lexeme = (char *)mmalloc(csound, strlen(a->lexeme) + 1);
         strcpy(ans->lexeme, a->lexeme);
-
         return ans;
       }
       a = a->next;
     }
-
+   
 
     ans = new_token(csound, T_IDENT);
     ans->lexeme = (char*)mmalloc(csound, 1+strlen(s));
     strcpy(ans->lexeme, s);
     //ans->next = symbtab[h];
 
-    if (PARSER_DEBUG)
-      csound->Message(csound, "NamedInstrFlag: %d\n", namedInstrFlag);
+    /* if (PARSER_DEBUG) */
+    /*   csound->Message(csound, "NamedInstrFlag: %d\n", namedInstrFlag); */
 
     if (udoflag == -2 || namedInstrFlag == 1) {
         return ans;
@@ -353,6 +365,7 @@ ORCTOKEN *lookup_token(CSOUND *csound, char *s, void *yyscanner)
 /* UDO code below was from otran, broken out and modified for new parser by
  * SYY
  */
+/* VL -- I have made the modifications below to allow for f-sigs & t-sigs and on line 224 and 238*/
 
 /* IV - Oct 12 2002: new function to parse arguments of opcode definitions */
 static int parse_opcode_args(CSOUND *csound, OENTRY *opc)
@@ -360,13 +373,13 @@ static int parse_opcode_args(CSOUND *csound, OENTRY *opc)
     OPCODINFO   *inm = (OPCODINFO*) opc->useropinfo;
     char    *types, *otypes;
     int     i, i_incnt, a_incnt, k_incnt, i_outcnt, a_outcnt, k_outcnt, err;
-    int     S_incnt, S_outcnt;
+    int     S_incnt, S_outcnt, f_outcnt, f_incnt, t_incnt, t_outcnt;
     int16   *a_inlist, *k_inlist, *i_inlist, *a_outlist, *k_outlist, *i_outlist;
-    int16   *S_inlist, *S_outlist;
-
+    int16   *S_inlist, *S_outlist, *f_inlist, *f_outlist, *t_inlist, *t_outlist;
+  
     /* count the number of arguments, and check types */
-    i = i_incnt = S_incnt = a_incnt = k_incnt =
-        i_outcnt = S_outcnt = a_outcnt = k_outcnt = err = 0;
+    i = i_incnt = S_incnt = a_incnt = k_incnt = f_incnt = f_outcnt =
+        i_outcnt = S_outcnt = a_outcnt = k_outcnt = t_incnt = t_outcnt = err = 0;
     types = inm->intypes; otypes = opc->intypes;
     opc->dsblksiz = (uint16) sizeof(UOPCODE);
     if (!strcmp(types, "0"))
@@ -381,6 +394,12 @@ static int parse_opcode_args(CSOUND *csound, OENTRY *opc)
       case 'k':
         k_incnt++; *otypes++ = 'k';
         break;
+      case 'f':
+        f_incnt++; *otypes++ = *types;
+        break;
+      case 't':
+        t_incnt++; *otypes++ = *types;
+        break;
       case 'i':
       case 'o':
       case 'p':
@@ -402,7 +421,7 @@ static int parse_opcode_args(CSOUND *csound, OENTRY *opc)
     }
     *otypes++ = 'o'; *otypes = '\0';    /* optional arg for local ksmps */
     inm->inchns = i;                    /* total number of input chnls */
-    inm->perf_incnt = a_incnt + k_incnt;
+    inm->perf_incnt = a_incnt + k_incnt + f_incnt + t_incnt;
     opc->dsblksiz += (uint16) (sizeof(MYFLT*) * i);
     /* same for outputs */
     i = 0;
@@ -423,6 +442,12 @@ static int parse_opcode_args(CSOUND *csound, OENTRY *opc)
       case 'k':
         k_outcnt++; *otypes++ = 'k';
         break;
+      case 'f':
+        f_outcnt++; *otypes++ = *types;
+        break;
+      case 't':
+        t_outcnt++; *otypes++ = *types;
+        break;
       case 'i':
         i_outcnt++; *otypes++ = *types;
         break;
@@ -437,7 +462,7 @@ static int parse_opcode_args(CSOUND *csound, OENTRY *opc)
     }
     *otypes = '\0';
     inm->outchns = i;                   /* total number of output chnls */
-    inm->perf_outcnt = a_outcnt + k_outcnt;
+    inm->perf_outcnt = a_outcnt + k_outcnt + f_outcnt + t_outcnt;
     opc->dsblksiz += (uint16) (sizeof(MYFLT*) * i);
     opc->dsblksiz = ((opc->dsblksiz + (uint16) 15)
                      & (~((uint16) 15)));   /* align (needed ?) */
@@ -445,15 +470,19 @@ static int parse_opcode_args(CSOUND *csound, OENTRY *opc)
     i = i_incnt + S_incnt + inm->perf_incnt +
         i_outcnt + S_outcnt + inm->perf_outcnt;
     i_inlist = inm->in_ndx_list = (int16*) mmalloc(csound,
-                                                   sizeof(int16) * (i + 8));
+                                                   sizeof(int16) * (i + 14));
     S_inlist = i_inlist + i_incnt + 1;
     a_inlist = S_inlist + S_incnt + 1;
     k_inlist = a_inlist + a_incnt + 1;
+    f_inlist = k_inlist + k_incnt + 1;
+    t_inlist = f_inlist + f_incnt + 1;
     i = 0; types = inm->intypes;
     while (*types) {
       switch (*types++) {
         case 'a': *a_inlist++ = i; break;
         case 'k': *k_inlist++ = i; break;
+        case 'f': *f_inlist++ = i; break;
+        case 't': *t_inlist++ = i; break;
         case 'K': *k_inlist++ = i;      /* also updated at i-time */
         case 'i':
         case 'o':
@@ -463,23 +492,31 @@ static int parse_opcode_args(CSOUND *csound, OENTRY *opc)
       }
       i++;
     }
-    *i_inlist = *S_inlist = *a_inlist = *k_inlist = -1;     /* put delimiters */
-    i_outlist = inm->out_ndx_list = k_inlist + 1;
+      
+    /* put delimiters */
+    *i_inlist = *S_inlist = *a_inlist = *k_inlist = *f_inlist = *t_inlist = -1; 
+    i_outlist = inm->out_ndx_list = t_inlist + 1;
     S_outlist = i_outlist + i_outcnt + 1;
     a_outlist = S_outlist + S_outcnt + 1;
     k_outlist = a_outlist + a_outcnt + 1;
+    f_outlist = k_outlist + k_outcnt + 1;
+    t_outlist = f_outlist + f_outcnt + 1;
     i = 0; types = inm->outtypes;
     while (*types) {
       switch (*types++) {
         case 'a': *a_outlist++ = i; break;
         case 'k': *k_outlist++ = i; break;
+        case 'f': *f_outlist++ = i; break;
+        case 't': *t_outlist++ = i; break;
         case 'K': *k_outlist++ = i;     /* also updated at i-time */
         case 'i': *i_outlist++ = i; break;
         case 'S': *S_outlist++ = i; break;
       }
       i++;
     }
-    *i_outlist = *S_outlist = *a_outlist = *k_outlist = -1;  /* put delimiters */
+    
+    *i_outlist = *S_outlist = *a_outlist = *k_outlist =
+      *f_outlist = *t_outlist = -1;  /* put delimiters */
     return err;
 }
 
diff --git a/Engine/typetabl.h b/Engine/typetabl.h
index e4088bc..d3a1a81 100644
--- a/Engine/typetabl.h
+++ b/Engine/typetabl.h
@@ -41,6 +41,7 @@
 #define ARGTYP_B        0x00000200L     /* boolean (k-rate) */
 #define ARGTYP_b        0x00000400L     /* boolean (i-rate) */
 #define ARGTYP_l        0x00000800L     /* label */
+#define ARGTYP_t        0x00001000L     /* table */
 
 /* some common type combinations to save typing */
 
@@ -57,6 +58,7 @@ static const int32 typetabl1[/*25*/] = {
     'p',    ARGTYP_p,       'c',    ARGTYP_c,       'r',    ARGTYP_r,
     'S',    ARGTYP_S,       'w',    ARGTYP_w,       'f',    ARGTYP_f,
     'B',    ARGTYP_B,       'b',    ARGTYP_b,       'l',    ARGTYP_l,
+    't',    ARGTYP_t,
     0L
 };
 
@@ -90,6 +92,7 @@ static const int32 typetabl3[/*17*/] = {
     'N',    (ARGTYP_S | ARGTYP_a | ARGTYP_k | ARGTYP_i | ARGTYP_p),
     'I',    (ARGTYP_S | ARGTYP_i | ARGTYP_p),
     'F',    ARGTYP_f,
+    't',    ARGTYP_t,
     0L
 };
 
diff --git a/H/aops.h b/H/aops.h
index d2cf3b4..acfc684 100644
--- a/H/aops.h
+++ b/H/aops.h
@@ -131,33 +131,38 @@ typedef struct {
 
 typedef struct {
     OPDS    h;
-    MYFLT   *asig;
-} OUTM;
+    MYFLT   *asig[VARGMAX];
+} OUTX;
 
 typedef struct {
     OPDS    h;
-    MYFLT   *asig1, *asig2;
-} OUTS;
+    MYFLT   *asig;
+} OUTM;
 
-typedef struct {
-    OPDS    h;
-    MYFLT   *asig1, *asig2, *asig3, *asig4;
-} OUTQ;
+/* typedef struct { */
+/*     OPDS    h; */
+/*     MYFLT   *asig1, *asig2; */
+/* } OUTS; */
 
-typedef struct {
-    OPDS    h;
-    MYFLT   *asig1, *asig2, *asig3, *asig4, *asig5, *asig6;
-} OUTH;
+/* typedef struct { */
+/*     OPDS    h; */
+/*     MYFLT   *asig1, *asig2, *asig3, *asig4; */
+/* } OUTQ; */
 
-typedef struct {
-    OPDS    h;
-    MYFLT   *asig1, *asig2, *asig3, *asig4, *asig5, *asig6, *asig7, *asig8;
-} OUTO;
+/* typedef struct { */
+/*     OPDS    h; */
+/*     MYFLT   *asig1, *asig2, *asig3, *asig4, *asig5, *asig6; */
+/* } OUTH; */
 
-typedef struct {
-    OPDS    h;
-    MYFLT   *asig[VARGMAX];
-} OUTX;
+/* typedef struct { */
+/*     OPDS    h; */
+/*     MYFLT   *asig1, *asig2, *asig3, *asig4, *asig5, *asig6, *asig7, *asig8; */
+/* } OUTO; */
+
+/* typedef struct { */
+/*     OPDS    h; */
+/*     MYFLT   *asig[VARGMAX]; */
+/* } OUTX; */
 
 typedef struct {
     OPDS    h;
@@ -192,3 +197,8 @@ typedef struct {
     AUXCH   channelName;
 } OUTVAL;
 
+typedef struct {
+    OPDS    h;
+    MYFLT   *res, *arg;
+} ERRFN;
+
diff --git a/H/corfile.h b/H/corfile.h
new file mode 100644
index 0000000..163ca8e
--- /dev/null
+++ b/H/corfile.h
@@ -0,0 +1,55 @@
+/*
+    corfiles.h:
+
+    Copyright (C) 2011 John ffitch
+
+    This file is part of Csound.
+
+    The Csound Library is free software; you can redistribute it
+    and/or modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    Csound 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 Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with Csound; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+    02111-1307 USA
+*/
+
+#ifndef __corfil
+
+#define __corfil
+
+CORFIL *corfile_create_w(void);
+CORFIL *corfile_create_r(char *text);
+void corfile_putc(int c, CORFIL *f);
+void corfile_puts(char *s, CORFIL *f);
+void corfile_flush(CORFIL *f);
+void corfile_rm(CORFIL **ff);
+int corfile_getc(CORFIL *f);
+void corfile_ungetc(CORFIL *f);
+#define corfile_ungetc(f)  (--f->p)
+MYFLT corfile_get_flt(CORFIL *f);
+void corfile_reset(CORFIL *f);
+#define corfile_reset(f) (f->body[f->p=0]='\0')
+void corfile_rewind(CORFIL *f);
+#define corfile_rewind(f) (f->p=0)
+int corfile_tell(CORFIL *f);
+#define corfile_tell(f) (f->p)
+char *corfile_body(CORFIL *f);
+#define corfile_body(f) (f->body)
+char *corfile_current(CORFIL *f);
+#define corfile_current(f) (f->body+f->p)
+CORFIL *copy_to_corefile(CSOUND *, char *, char *, int);
+int corfile_length(CORFIL *f);
+#define corfile_length(f) (strlen(f->body))
+void corfile_set(CORFIL *f, int n);
+#define corfile_set(f,n) (f->p = n)
+void corfile_seek(CORFIL *f, int n, int dir);
+
+#endif
diff --git a/H/cs_par_base.h b/H/cs_par_base.h
index 8015a55..24ba4a1 100644
--- a/H/cs_par_base.h
+++ b/H/cs_par_base.h
@@ -46,18 +46,18 @@
   #define TIMER_START(val, name) \
               csound->InitTimerStruct(& val ## _timer); \
               csound->Message(csound, name "Start: %f\n", \
-                              csound->GetRealTime(& val ## _timer));
+                              csound->GetRealTime(& val ## _timer))
   #define TIMER_END(val, name) \
               csound->Message(csound, name "End: %f\n", \
-                              csound->GetRealTime(& val ## _timer));
+                              csound->GetRealTime(& val ## _timer))
 
   #define TIMER_T_START(val, index, name) \
               csound->InitTimerStruct(& val ## _timer); \
               csound->Message(csound, "[%i] " name "Start: %f\n", \
-                              index, csound->GetRealTime(& val ## _timer));
+                              index, csound->GetRealTime(& val ## _timer))
   #define TIMER_T_END(val, index, name) \
               csound->Message(csound, "[%i] " name "End: %f\n", \
-                              index, csound->GetRealTime(& val ## _timer));
+                              index, csound->GetRealTime(& val ## _timer))
 #else
   #define TIMER_INIT(val, name)
   #define TIMER_START(val, name)
@@ -168,8 +168,8 @@ int csp_set_exists(CSOUND *csound,  struct set_t *set, void *data);
 int csp_set_print(CSOUND *csound, struct set_t *set);
 
 /* get a count and access members */
-int inline csp_set_count(CSOUND *csound, struct set_t *set);
-int inline csp_set_get_num(CSOUND *csound, struct set_t *set, int num, void **data);
+extern int inline csp_set_count(CSOUND *csound, struct set_t *set);
+extern int inline csp_set_get_num(CSOUND *csound, struct set_t *set, int num, void **data);
 
 /* 
  * set union and intersection
diff --git a/H/cs_par_dispatch.h b/H/cs_par_dispatch.h
index 08fc482..eac62ae 100644
--- a/H/cs_par_dispatch.h
+++ b/H/cs_par_dispatch.h
@@ -11,9 +11,9 @@ TREE *csp_locks_insert(CSOUND * csound, TREE *root);
 /* build the cache of global locks */
 void csp_locks_cache_build(CSOUND *csound);
 /* lock global with index */
-void inline csp_locks_lock(CSOUND * csound, int global_index);
+extern void inline csp_locks_lock(CSOUND * csound, int global_index);
 /* unlock global with index */
-void inline csp_locks_unlock(CSOUND * csound, int global_index);
+extern void inline csp_locks_unlock(CSOUND * csound, int global_index);
 
 /* fetch a weight for opcode name */
 uint32_t csp_opcode_weight_fetch(CSOUND *csound, char *name);
@@ -107,7 +107,7 @@ void csp_dag_build(CSOUND *csound, DAG **dag, INSDS *chain);
 void csp_dag_print(CSOUND *csound, DAG *dag);
 
 /* return 1 if the DAG is completely consume */
-int inline csp_dag_is_finished(CSOUND *csound, DAG *dag);
+extern int inline csp_dag_is_finished(CSOUND *csound, DAG *dag);
 /* get a node from the dag
  * update_hdl should be passed into consume_update when the node has
  * been performed */
diff --git a/H/cs_par_orc_semantics.h b/H/cs_par_orc_semantics.h
index 4aa0e2d..fef5bdf 100644
--- a/H/cs_par_orc_semantics.h
+++ b/H/cs_par_orc_semantics.h
@@ -52,7 +52,14 @@ void csp_orc_sa_global_read_add_list(CSOUND *csound, struct set_t *list);
 struct set_t *csp_orc_sa_globals_find(CSOUND *csound, TREE *node);
 
 /* find an instrument from the instruments parsed */
-struct instr_semantics_t *csp_orc_sa_instr_get_by_name(char *instr_name);
-struct instr_semantics_t *csp_orc_sa_instr_get_by_num(int16 insno);
+struct instr_semantics_t 
+    *csp_orc_sa_instr_get_by_name(CSOUND *csound, char *instr_name);
+struct instr_semantics_t 
+    *csp_orc_sa_instr_get_by_num(CSOUND *csound, int16 insno);
+
+/* interlocks */
+void csp_orc_sa_interlocks(CSOUND *, ORCTOKEN *);
+void csp_orc_sa_interlocksf(CSOUND *, int);
+
 
 #endif /* end of include guard: __CSOUND_ORC_SEMANTIC_ANALYSIS_H__ */
diff --git a/H/cs_par_structs.h b/H/cs_par_structs.h
new file mode 100644
index 0000000..4265f49
--- /dev/null
+++ b/H/cs_par_structs.h
@@ -0,0 +1,37 @@
+/*
+    csoundCore.h:
+
+    Copyright (C) 2011 John ffitch and Chris Wilson
+
+    This file is part of Csound.
+
+    The Csound Library is free software; you can redistribute it
+    and/or modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    Csound 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 Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with Csound; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+    02111-1307 USA
+*/
+
+
+/* global variables lock support */
+struct global_var_lock_t;
+
+struct opcode_weight_cache_entry_t;
+
+struct  dag_node_t;
+
+struct dag_cache_entry_t;
+#define DAG_2_CACHE_SIZE (128)
+#define OPCODE_WEIGHT_CACHE_SIZE (128)
+
+struct instr_semantics_t;
+
diff --git a/H/csdl.h b/H/csdl.h
index 24d490d..c1fde42 100644
--- a/H/csdl.h
+++ b/H/csdl.h
@@ -29,6 +29,8 @@
 #endif
 
 #include "csoundCore.h"
+#include "interlocks.h"
+
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -54,8 +56,15 @@ PUBLIC  const char  *csoundModuleErrorCodeToString(int);
 PUBLIC  int     csoundModuleInfo(void);
 
 #define LINKAGE                                                         \
-PUBLIC long csound_opcode_init(CSOUND *csound, OENTRY **ep)            \
-{   (void) csound; *ep = localops; return (long) sizeof(localops);  }  \
+PUBLIC long csound_opcode_init(CSOUND *csound, OENTRY **ep)             \
+{   (void) csound; *ep = localops; return (long) sizeof(localops);  }   \
+PUBLIC int csoundModuleInfo(void)                                       \
+{ return ((CS_APIVERSION << 16) + (CS_APISUBVER << 8) + (int) sizeof(MYFLT)); }
+
+#undef LINKAGE1
+#define LINKAGE1(name)                                                  \
+PUBLIC long csound_opcode_init(CSOUND *csound, OENTRY **ep)             \
+{   (void) csound; *ep = name; return (long) (sizeof(name));  }         \
 PUBLIC int csoundModuleInfo(void)                                       \
 { return ((CS_APIVERSION << 16) + (CS_APISUBVER << 8) + (int) sizeof(MYFLT)); }
 
@@ -65,6 +74,13 @@ PUBLIC NGFENS *csound_fgen_init(CSOUND *csound)                         \
 PUBLIC int csoundModuleInfo(void)                                       \
 { return ((CS_APIVERSION << 16) + (CS_APISUBVER << 8) + (int) sizeof(MYFLT)); }
 
+#undef FLINKAGE1
+#define FLINKAGE1(name)                                                 \
+PUBLIC NGFENS *csound_fgen_init(CSOUND *csound)                         \
+{   (void) csound; return name;                                     }   \
+PUBLIC int csoundModuleInfo(void)                                       \
+{ return ((CS_APIVERSION << 16) + (CS_APISUBVER << 8) + (int) sizeof(MYFLT)); }
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/H/csmodule.h b/H/csmodule.h
index 65f6f56..33d42a4 100644
--- a/H/csmodule.h
+++ b/H/csmodule.h
@@ -76,32 +76,37 @@
 extern "C" {
 #endif
 
-/* ------------------------ INTERNAL API FUNCTIONS ------------------------ */
-
-/**
- * Load plugin libraries for Csound instance 'csound', and call
- * pre-initialisation functions.
- * Return value is CSOUND_SUCCESS if there was no error, CSOUND_ERROR if
- * some modules could not be loaded or initialised, and CSOUND_MEMORY
- * if a memory allocation failure has occured.
- */
-int csoundLoadModules(CSOUND *csound);
-
-/**
- * Call initialisation functions of all loaded modules that have a
- * csoundModuleInit symbol, for Csound instance 'csound'.
- * Return value is CSOUND_SUCCESS if there was no error, and CSOUND_ERROR if
- * some modules could not be initialised.
- */
-int csoundInitModules(CSOUND *csound);
-
-/**
- * Call destructor functions of all loaded modules that have a
- * csoundModuleDestroy symbol, for Csound instance 'csound'.
- * Return value is CSOUND_SUCCESS if there was no error, and
- * CSOUND_ERROR if some modules could not be de-initialised.
- */
-int csoundDestroyModules(CSOUND *csound);
+  /* ------------------------ INTERNAL API FUNCTIONS ------------------------ */
+
+  /**
+   * Load plugin libraries for Csound instance 'csound', and call
+   * pre-initialisation functions.
+   * Return value is CSOUND_SUCCESS if there was no error, CSOUND_ERROR if
+   * some modules could not be loaded or initialised, and CSOUND_MEMORY
+   * if a memory allocation failure has occured.
+   */
+  int csoundLoadModules(CSOUND *csound);
+
+  /**
+   * Call initialisation functions of all loaded modules that have a
+   * csoundModuleInit symbol, for Csound instance 'csound'.
+   * Return value is CSOUND_SUCCESS if there was no error, and CSOUND_ERROR if
+   * some modules could not be initialised.
+   */
+  int csoundInitModules(CSOUND *csound);
+
+  /**
+   * Call destructor functions of all loaded modules that have a
+   * csoundModuleDestroy symbol, for Csound instance 'csound'.
+   * Return value is CSOUND_SUCCESS if there was no error, and
+   * CSOUND_ERROR if some modules could not be de-initialised.
+   */
+  int csoundDestroyModules(CSOUND *csound);
+
+  /**
+   * Initialise opcodes not in entry1.c
+   */
+  int csoundInitSaticModules(CSOUND *csound);
 
 #ifdef __cplusplus
 }
diff --git a/H/csound.h b/H/csound.h
index 779932b..c35bafd 100644
--- a/H/csound.h
+++ b/H/csound.h
@@ -1400,25 +1400,6 @@ extern "C" {
 #  define CSOUND_SPIN_UNLOCK
 #endif
 
-#elif defined(__GNUC__) && defined(HAVE_PTHREAD_SPIN_LOCK)
-# if defined(SWIG)
-#define csoundSpinLock(spinlock)                        \
-  {                                                     \
-    pthread_spin_lock((pthread_spinlock_t *)spinlock);  \
-  }
-#define csoundSpinUnLock(spinlock)                       \
-  {                                                      \
-    pthread_spin_unlock((pthread_spinlock_t *)spinlock); \
-  }
-#  define CSOUND_SPIN_LOCK static int32_t spinlock = 0; csoundSpinLock(&spinlock);
-#  define CSOUND_SPIN_UNLOCK csoundSpinUnLock(&spinlock);
-# else
-#  define csoundSpinLock(spinlock)
-#  define csoundSpinUnLock(spinlock)
-#  define CSOUND_SPIN_LOCK
-#  define CSOUND_SPIN_UNLOCK
-#endif
-
 #elif defined(__GNUC__) && defined(HAVE_SYNC_LOCK_TEST_AND_SET)
 
 # define csoundSpinLock(spinlock)                               \
@@ -1438,13 +1419,13 @@ extern "C" {
 #ifndef SWIG
 
 #include <libkern/OSAtomic.h>
-#define csoundSpinLock(spinlock)                        \
-    {                                                     \
-       OSSpinLockLock(spinlock);                          \
+#define csoundSpinLock(spinlock)                \
+    {                                           \
+       OSSpinLockLock(spinlock);                \
     }
 #define csoundSpinUnLock(spinlock)              \
-    {                                             \
-       OSSpinLockUnlock(spinlock);                \
+    {                                           \
+       OSSpinLockUnlock(spinlock);              \
     }
 #define CSOUND_SPIN_LOCK static int32_t spinlock = 0; csoundSpinLock(&spinlock);
 
diff --git a/H/csoundCore.h b/H/csoundCore.h
index adcf3b4..eda4c5f 100644
--- a/H/csoundCore.h
+++ b/H/csoundCore.h
@@ -31,10 +31,11 @@
 #include "sysdep.h"
 #ifdef PARCS
 #include <pthread.h>
-#endif
+#include "cs_par_structs.h"
+#endif /* PARCS */
 #include <stdarg.h>
 #include <setjmp.h>
-
+ 
 /*
 #include <sndfile.h>
 JPff:  But this gives warnings in many files as rewriteheader expects
@@ -60,7 +61,7 @@ util/xtrct.c
 
 #ifdef __cplusplus
 extern "C" {
-#endif
+#endif /*  __cplusplus */
 
 #ifdef __MACH__
 #define BARRIER_SERIAL_THREAD (-1)
@@ -72,8 +73,8 @@ typedef struct {
 
 #ifndef PTHREAD_BARRIER_SERIAL_THREAD
 #define pthread_barrier_t barrier_t
-#endif
-#endif
+#endif /* PTHREAD_BARRIER_SERIAL_THREAd */
+#endif /* __MACH__ */
 
 
 #define OK        (0)
@@ -118,7 +119,7 @@ typedef struct {
                     (n<<8 & 0xFF0000L) | (n<<24 & 0xFF000000L))
 
 #define OCTRES     8192
-#define CPSOCTL(n) ((MYFLT)(1 << ((int)(n) >> 13)) * cpsocfrc[(int)(n) & 8191])
+#define CPSOCTL(n) ((MYFLT)(1 << ((int)(n) >> 13)) * csound->cpsocfrc[(int)(n) & 8191])
 
 #define LOBITS     10
 #define LOFACT     1024
@@ -152,7 +153,7 @@ typedef struct {
 
 #ifndef PI
 #define PI      (3.141592653589793238462643383279502884197)
-#endif
+#endif /* pi */
 #define TWOPI   (6.283185307179586476925286766559005768394)
 #define PI_F    ((MYFLT) PI)
 #define TWOPI_F ((MYFLT) TWOPI)
@@ -168,6 +169,12 @@ typedef struct {
    cause confusion
 #define printf  use_csoundMessage_instead_of_printf
 */
+  typedef struct CORFIL {
+    char    *body;
+    int     len;
+    int     p;
+  } CORFIL;
+
   typedef struct {
     int     odebug;
     int     sfread, sfwrite, sfheader, filetyp;
@@ -182,7 +189,8 @@ typedef struct {
     int     rewrt_hdr, heartbeat, gen01defer;
     int     expr_opt;       /* IV - Jan 27 2005: for --expression-opt */
     float   sr_override, kr_override;
-    char    *infilename, *outfilename, *playscore;
+    char    *infilename, *outfilename;
+    CORFIL  *playscore;
     char    *Linename, *Midiname, *FMidiname;
     char    *Midioutname;   /* jjk 09252000 - MIDI output device, -Q option */
     char    *FMidioutname;
@@ -196,7 +204,7 @@ typedef struct {
 #ifdef ENABLE_NEW_PARSER
     int     newParser; /* SYY - July 30, 2006: for --new-parser */
     int     calculateWeights;
-#endif
+#endif /* ENABLE_NEW_PARSE */
   } OPARMS;
 
   typedef struct arglst {
@@ -243,9 +251,9 @@ typedef struct {
     int     lclpcnt, lclscnt;
     int     lclfixed, optxtcount;
     int16   muted;
-    int32    localen;
-    int32    opdstot;                /* Total size of opds structs in instr */
-    int32    *inslist;               /* Only used in parsing (?) */
+    int32   localen;
+    int32   opdstot;                /* Total size of opds structs in instr */
+    int32   *inslist;               /* Only used in parsing (?) */
     MYFLT   *psetdata;              /* Used for pset opcode */
     struct insds * instance;        /* Chain of allocated instances of
                                        this instrument */
@@ -719,11 +727,11 @@ typedef struct {
 /* These are used to set/clear bits in csound->tempStatus.
    If the bit is set, it indicates that the given file is
    a temporary. */
-extern const uint32_t csOrcMask;
-extern const uint32_t csScoInMask;
-extern const uint32_t csScoSortMask;
-extern const uint32_t csMidiScoMask;
-extern const uint32_t csPlayScoMask;
+  extern const uint32_t csOrcMask;
+  extern const uint32_t csScoInMask;
+  extern const uint32_t csScoSortMask;
+  extern const uint32_t csMidiScoMask;
+  extern const uint32_t csPlayScoMask;
 
 #endif  /* __BUILDING_LIBCSOUND */
   /**
@@ -731,6 +739,7 @@ extern const uint32_t csPlayScoMask;
    * to run one instance of Csound.
    */
 
+
   struct CSOUND_ {
     /* Csound API function pointers (320 total) */
     int (*GetVersion)(void);
@@ -1030,7 +1039,8 @@ extern const uint32_t csPlayScoMask;
     void (*Stop)(CSOUND *);
     void *(*GetNamedGens)(CSOUND *);
  /* SUBR dummyfn_1; */
-    SUBR dummyfn_2[76];
+    MYFLT (*Pow2)(CSOUND *, MYFLT a);
+    SUBR dummyfn_2[75];
     int           dither_output;
     void          *flgraphGlobals;
     char          *delayederrormessages;
@@ -1062,7 +1072,7 @@ extern const uint32_t csPlayScoMask;
     pthread_spinlock_t spoutlock, spinlock;
 #else
     int           spoutlock, spinlock;
-#endif
+#endif /* defined(HAVE_PTHREAD_SPIN_LOCK) && defined(PARCS) */
     /* Widgets */
     void          *widgetGlobals;
     /** reserved for std opcode library  */
@@ -1082,6 +1092,7 @@ extern const uint32_t csPlayScoMask;
     void          *rtRecord_userdata;
     void          *rtPlay_userdata;
     char          *orchname, *scorename;
+    CORFIL        *orchstr, *scorestr;
     int           holdrand;
     /** max. length of string variables + 1  */
     int           strVarMaxLen;
@@ -1099,7 +1110,7 @@ extern const uint32_t csPlayScoMask;
     pthread_spinlock_t memlock;
 #else
     int           memlock;
-#endif
+#endif /* defined(HAVE_PTHREAD_SPIN_LOCK) && defined(PARCS */
     int           floatsize;
     int           inchnls;      /* Not fully used yet -- JPff */
     int   dummyint[7];
@@ -1152,6 +1163,7 @@ extern const uint32_t csPlayScoMask;
     int           Linefd;
     void          *csoundCallbacks_;
     FILE*         scfp;
+    CORFIL        *scstr;
     FILE*         oscfp;
     MYFLT         maxamp[MAXCHNLS];
     MYFLT         smaxamp[MAXCHNLS];
@@ -1330,6 +1342,19 @@ extern const uint32_t csPlayScoMask;
     struct dag_t        *multiThreadedDag;
     pthread_barrier_t   *barrier1;
     pthread_barrier_t   *barrier2;
+    /* Statics from cs_par_dispatch; */
+    struct global_var_lock_t *global_var_lock_root;
+    struct global_var_lock_t **global_var_lock_cache;
+    int           global_var_lock_count;
+    int           opcode_weight_cache_ctr;
+    struct opcode_weight_cache_entry_t 
+                  *opcode_weight_cache[OPCODE_WEIGHT_CACHE_SIZE];
+    int           opcode_weight_have_cache;
+    struct        dag_cache_entry_t *cache[DAG_2_CACHE_SIZE];
+    /* statics from cs_par_orc_semantic_analysis */
+    struct instr_semantics_t *instCurr;
+    struct instr_semantics_t *instRoot;
+    int           inInstr;
 #endif
     uint32_t      tempStatus;    /* keeps track of which files are temps */
     int           orcLineOffset; /* 1 less than 1st orch line in the CSD */
@@ -1342,7 +1367,8 @@ extern const uint32_t csPlayScoMask;
     char          *sstrbuf0[3]; /* For extra strings in scores */
     int           sstrlen0[3];  /* lengths for extra strings */
     int           genlabs;      /* Count for generated labels */
-
+    MYFLT  *powerof2;         /* pow2 table */
+    MYFLT  *cpsocfrc;         /* cps conv table */
 #endif  /* __BUILDING_LIBCSOUND */
   };
 
@@ -1351,9 +1377,16 @@ extern const uint32_t csPlayScoMask;
  * in order to enable C++ to #include this file.
  */
 
+#define LINKAGE1(name)                                         \
+PUBLIC long name##_init(CSOUND *csound, OENTRY **ep)           \
+{   (void) csound; *ep = name; return (long) (sizeof(name));  } 
+
+#define FLINKAGE1(name)                                                 \
+PUBLIC NGFENS* name##_init(CSOUND *csound)                         \
+{   (void) csound; return name;                                     } 
+
 #ifdef __cplusplus
 }
-#endif
+#endif /* __cplusplus */
 
 #endif  /* CSOUNDCORE_H */
-
diff --git a/H/csound_orc.h b/H/csound_orc.h
index bb43e5e..416fb23 100644
--- a/H/csound_orc.h
+++ b/H/csound_orc.h
@@ -7,6 +7,7 @@ typedef struct TREE {
   ORCTOKEN         *value;
   int           rate;
   int           len;
+  int           line;
   struct TREE   *left;
   struct TREE   *right;
   struct TREE   *next;
@@ -24,8 +25,8 @@ enum {
 #define PARSER_DEBUG (0)
 #endif
 
-TREE* make_node(CSOUND *, int, TREE*, TREE*);
-TREE* make_leaf(CSOUND *,int, ORCTOKEN*);
+TREE* make_node(CSOUND *, int, int, TREE*, TREE*);
+TREE* make_leaf(CSOUND *, int, int, ORCTOKEN*);
 ORCTOKEN* make_int(CSOUND *,char *);
 ORCTOKEN* make_num(CSOUND *,char *);
 ORCTOKEN *make_token(CSOUND *csound, char *s);
diff --git a/H/entry1.h b/H/entry1.h
index 25759ec..010c4f3 100644
--- a/H/entry1.h
+++ b/H/entry1.h
@@ -55,6 +55,7 @@
 #include "bus.h"
 #include "pstream.h"
 #include "remote.h"
+#include "resize.h"
 #ifdef PARCS
 #include "cs_par_ops.h"
 #endif
@@ -220,13 +221,14 @@ int     inq(CSOUND *, void *), inh(CSOUND *, void *);
 int     ino(CSOUND *, void *), in16(CSOUND *, void *);
 int     in32(CSOUND *, void *);
 int     inch_opcode(CSOUND *, void *), inall_opcode(CSOUND *, void *);
-int     out(CSOUND *, void *), outs(CSOUND *, void *);
+int     outmultiple(CSOUND *, void *);
+/* int     out(CSOUND *, void *), outs(CSOUND *, void *); */
 int     outs1(CSOUND *, void *), outs2(CSOUND *, void *);
-int     outq(CSOUND *, void *);
+/* int     outq(CSOUND *, void *); */
 int     outq1(CSOUND *, void *), outq2(CSOUND *, void *);
 int     outq3(CSOUND *, void *), outq4(CSOUND *, void *);
-int     outh(CSOUND *, void *), outo(CSOUND *, void *);
-int     outx(CSOUND *, void *), outX(CSOUND *, void *);
+/* int     outh(CSOUND *, void *), outo(CSOUND *, void *); */
+/* int     outx(CSOUND *, void *), outX(CSOUND *, void *); */
 int     outch(CSOUND *, void *), outall(CSOUND *, void *);
 int     igoto(CSOUND *, void *), kgoto(CSOUND *, void *);
 int     icgoto(CSOUND *, void *), kcgoto(CSOUND *, void *);
@@ -371,7 +373,7 @@ int     setksmpsset(CSOUND *, void *);
 int     xinset(CSOUND *, void *), xoutset(CSOUND *, void *);
 int     ingoto(CSOUND *, void *), kngoto(CSOUND *, void *);
 int     iingoto(CSOUND *, void *), kingoto(CSOUND *, void *);
-int     nstrnumset(CSOUND *, void *), turnoff2(CSOUND *, void *);
+int     nstrnumset(CSOUND *, void *), turnoff2k(CSOUND *, void *),  turnoff2S(CSOUND *, void *) ;
 int     loop_l_i(CSOUND *, void *), loop_le_i(CSOUND *, void *);
 int     loop_g_i(CSOUND *, void *), loop_ge_i(CSOUND *, void *);
 int     loop_l_p(CSOUND *, void *), loop_le_p(CSOUND *, void *);
@@ -392,3 +394,5 @@ int     kgaussi(CSOUND *, void *), agaussi(CSOUND *, void *);
 int     lsgset_bkpt(CSOUND *csound, void *p);
 int     xsgset_bkpt(CSOUND *csound, void *p);
 int     xsgset_bkpt(CSOUND *csound, void *p), xsgset2b(CSOUND *, void *);
+int     resize_table(CSOUND *csound, void *p);
+int     error_fn(CSOUND *csound, void *p);
diff --git a/H/insert.h b/H/insert.h
index 750f937..25bcb4d 100644
--- a/H/insert.h
+++ b/H/insert.h
@@ -56,7 +56,7 @@ typedef struct {
     OPCODINFO *opcode_info;
     void    *uopcode_struct;
     INSDS   *parent_ip;
-    MYFLT   *iobufp_ptrs[4];            /* expandable IV - Oct 26 2002 */
+    MYFLT   *iobufp_ptrs[12];            /* expandable IV - Oct 26 2002 */ /* was 8 */
 } OPCOD_IOBUFS;
 
 typedef struct {                        /* IV - Oct 16 2002 */
diff --git a/H/interlocks.h b/H/interlocks.h
new file mode 100644
index 0000000..8d0328d
--- /dev/null
+++ b/H/interlocks.h
@@ -0,0 +1,39 @@
+/*
+    interlocks.h:
+
+    Copyright (C) 2011 John ffitch
+
+    This file is part of Csound.
+
+    The Csound Library is free software; you can redistribute it
+    and/or modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    Csound 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 Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with Csound; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+    02111-1307 USA
+*/
+
+#define ZR (0x0100)
+#define ZW (0x0200)
+#define ZB (0x0300)
+
+#define TR (0x0400)
+#define TW (0x0800)
+#define TB (0x0c00)
+
+#define CR (0x1000)
+#define CW (0x2000)
+#define CB (0x3000)
+
+#define SB (0x4000)
+
+#define DP (0x8000)
+
diff --git a/H/midiout.h b/H/midiout.h
index 30c2b22..bd15264 100644
--- a/H/midiout.h
+++ b/H/midiout.h
@@ -87,37 +87,37 @@ typedef struct {
 typedef struct {
     OPDS   h;
     MYFLT  *chn,*num, *value, *min, *max;
-    int    last_value;
+  int    last_value, lastchn, lastctrl;
 } OUT_CONTR;
 
 typedef struct {
     OPDS   h;
     MYFLT  *chn, *msb_num, *lsb_num, *value, *min, *max;
-    int    last_value;
+    int    last_value, lastchn, lastctrl;
 } OUT_CONTR14;
 
 typedef struct {
     OPDS   h;
     MYFLT  *chn, *value, *min, *max;
-    int    last_value;
+  int    last_value,  lastchn;
 } OUT_PB;
 
 typedef struct {
     OPDS   h;
     MYFLT  *chn, *value, *min, *max;
-    int    last_value;
+  int    last_value,  lastchn;
 } OUT_ATOUCH;
 
 typedef struct {
     OPDS   h;
     MYFLT  *chn, *prog_num, *min, *max;
-    int    last_prog_num;
+  int    last_prog_num,  lastchn;
 } OUT_PCHG;
 
 typedef struct {
     OPDS   h;
     MYFLT  *chn, *num, *value, *min, *max;
-    int    last_value;
+  int    last_value, lastchn, lastctrl;
 } OUT_POLYATOUCH;
 
 typedef struct {
diff --git a/H/mp3dec.h b/H/mp3dec.h
index 9cf45bb..f4a6085 100644
--- a/H/mp3dec.h
+++ b/H/mp3dec.h
@@ -22,6 +22,7 @@
 #ifndef __MP3DEC_H
 #define __MP3DEC_H
 
+#include <stdint.h>
 #include "mpadec.h"
 
 #define MP3DEC_RETCODE_OK                 0
diff --git a/H/prototyp.h b/H/prototyp.h
index 5d32176..a36cfc1 100644
--- a/H/prototyp.h
+++ b/H/prototyp.h
@@ -57,6 +57,7 @@ void    reverbinit(CSOUND *);
 void    dispinit(CSOUND *);
 int     init0(CSOUND *);
 void    scsort(CSOUND *, FILE *, FILE *);
+void    scsortstr(CSOUND *, CORFIL *);
 int     scxtract(CSOUND *, FILE *, FILE *, FILE *);
 int     rdscor(CSOUND *, EVTBLK *);
 int     musmon(CSOUND *);
diff --git a/H/resize.h b/H/resize.h
new file mode 100644
index 0000000..fff9433
--- /dev/null
+++ b/H/resize.h
@@ -0,0 +1,6 @@
+typedef struct {
+    OPDS h;
+    MYFLT *size;                /* Ansser */
+    MYFLT *fn;                  /* which table   */
+    MYFLT *nsize;               /* new size */
+} RESIZE;
diff --git a/H/version.h b/H/version.h
index d1c1833..61c263e 100644
--- a/H/version.h
+++ b/H/version.h
@@ -33,26 +33,26 @@
 
 /* Define to the full name and version of this package. */
 #ifndef PARCS
-#define CS_PACKAGE_STRING   "Csound 5.14"
+#define CS_PACKAGE_STRING   "Csound 5.15"
 #else /* PARCS */
-#define CS_PACKAGE_STRING   "ParCsound 5.14"
+#define CS_PACKAGE_STRING   "ParCsound 5.15"
 #endif /* PARCS */
 
 /* Define to the one symbol short name of this package. */
 #define CS_PACKAGE_TARNAME  "csound"
 
 /* Define to the version of this package. */
-#define CS_PACKAGE_VERSION  "5.14"
+#define CS_PACKAGE_VERSION  "5.15"
 #define CS_VERSION          (5)
-#define CS_SUBVER           (14)
-#define CS_PATCHLEVEL       (2)
+#define CS_SUBVER           (15)
+#define CS_PATCHLEVEL       (0)
 
 #define CS_APIVERSION       2   /* should be increased anytime a new version
                                    contains changes that an older host will
                                    not be able to handle -- most likely this
                                    will be a change to an API function or
                                    the CSOUND struct */
-#define CS_APISUBVER        5   /* for minor changes that will still allow
+#define CS_APISUBVER        6   /* for minor changes that will still allow
                                    compatiblity with older hosts */
 
 #endif /* CSOUND_VERSION_H */
diff --git a/How_to_Build_Csound_on_Windows.doc b/How_to_Build_Csound_on_Windows.doc
index c77a4cb..abc1a4d 100644
Binary files a/How_to_Build_Csound_on_Windows.doc and b/How_to_Build_Csound_on_Windows.doc differ
diff --git a/InOut/CMakeLists.txt b/InOut/CMakeLists.txt
index a06922e..aa25ef2 100644
--- a/InOut/CMakeLists.txt
+++ b/InOut/CMakeLists.txt
@@ -8,7 +8,9 @@ option(USE_PORTAUDIO "Build the PortAudio I/O module" ON)
 option(USE_PORTMIDI "Build the PortMIDI I/O module" ON)
 option(USE_JACK "Build the jack I/O module and opcodes" ON)
 option(USE_ALSA "Build the ALSA I/O module" ON)
-option(USE_COREAUDIO "Build the CoreAudio I/O module" ON)
+# option(USE_COREAUDIO "Build the CoreAudio I/O module" ON)
+option(USE_COREMIDI "Build the CoreMIDI I/O Module" ON)
+option(USE_AUDIOUNIT "Build teh CoreAudio AudioUnit I/O module (requires CoreAudio)" ON)
 option(USE_FLTK "Use FLTK for graphs and widget opcodes" ON)
 option(BUILD_VIRTUAL_KEYBOARD "Build Virtual MIDI keyboard" ON)
 
@@ -16,28 +18,40 @@ option(BUILD_VIRTUAL_KEYBOARD "Build Virtual MIDI keyboard" ON)
 
 if(USE_ALSA)
     find_library(ALSA_LIBRARY asound)
-    find_file(ALSA_HEADER alsa/asoundlib.h)
+    check_include_file(alsa/asoundlib.h ALSA_HEADER)
 endif()
 if(USE_PORTAUDIO)
     find_library(PORTAUDIO_LIBRARY portaudio)
-    find_file(PORTAUDIO_HEADER portaudio.h)
+    check_include_file(portaudio.h PORTAUDIO_HEADER)
 endif()
 if(USE_PORTMIDI)
     find_library(PORTMIDI_LIBRARY portmidi)
     find_library(PORTTIME_LIBRARY porttime)
-    find_file(PORTMIDI_HEADER portmidi.h)
+    check_include_file(portmidi.h PORTMIDI_HEADER)
 endif()
 if(USE_JACK)
     find_library(JACK_LIBRARY jack)
     find_library(JACKDMP_LIBRARY jackdmp)
-    find_file(JACK_HEADER jack/jack.h)
+    check_include_file(jack/jack.h JACK_HEADER)
 endif()
 if(USE_PULSEAUDIO)
     find_library(PULSEAUDIO_LIBRARY pulse)
     find_library(PULSESIMPLE_LIBRARY pulse-simple)
-    find_file(PULSEAUDIO_HEADER pulse/simple.h)
-endif()
-if(USE_COREAUDIO)
+    check_include_file(pulse/simple.h PULSEAUDIO_HEADER)
+endif()
+# if(USE_COREAUDIO)
+#    find_path(COREAUDIO_INCLUDE_PATH CoreAudio.h)
+#    find_library(COREAUDIO_LIBRARY CoreAudio)
+# endif()
+if(USE_COREMIDI)
+    find_path(COREMIDI_INCLUDE_PATH CoreMidi.h)
+    find_library(COREMIDI_LIBRARY CoreMidi)
+    find_library(COREFOUNDATION_LIBRARY CoreFoundation)
+endif()
+if(USE_AUDIOUNIT)
+    find_path(AUDIOUNIT_INCLUDE_PATH AudioUnit.h)
+    find_library(AUDIOUNIT_LIBRARY AudioUnit)
+    find_library(COREFOUNDATION_LIBRARY CoreFoundation)
     find_path(COREAUDIO_INCLUDE_PATH CoreAudio.h)
     find_library(COREAUDIO_LIBRARY CoreAudio)
 endif()
@@ -47,11 +61,25 @@ endif()
 
 # BUILD TARGETS
 
-check_deps(USE_COREAUDIO APPLE COREAUDIO_INCLUDE_PATH COREAUDIO_LIBRARY)
-if(USE_COREAUDIO)
-    make_plugin(rtcoreaudio rtcoreaudio.c)
-    include_directories(${COREAUDIO_INCLUDE_PATH})
-    target_link_libraries(rtcoreaudio ${COREAUDIO_LIBRARY})
+# check_deps(USE_COREAUDIO APPLE COREAUDIO_INCLUDE_PATH COREAUDIO_LIBRARY)
+# if(USE_COREAUDIO)
+#    make_plugin(rtcoreaudio rtcoreaudio.c)
+#    include_directories(${COREAUDIO_INCLUDE_PATH})
+#    target_link_libraries(rtcoreaudio ${COREAUDIO_LIBRARY})
+# endif()
+
+check_deps(USE_COREMIDI APPLE COREMIDI_INCLUDE_PATH COREMIDI_LIBRARY COREFOUNDATION_LIBRARY)
+if(USE_COREMIDI)
+    make_plugin(cmidi cmidi.c)
+    include_directories(${COREMIDI_INCLUDE_PATH})
+    target_link_libraries(cmidi ${COREMIDI_LIBRARY} ${COREFOUNDATION_LIBRARY})
+endif()
+
+check_deps(USE_AUDIOUNIT APPLE COREAUDIO_INCLUDE_PATH COREAUDIO_LIBRARY AUDIOUNIT_INCLUDE_PATH AUDIOUNIT_LIBRARY COREFOUNDATION_LIBRARY)
+if(USE_AUDIOUNIT)
+    make_plugin(rtauhal rtauhal.c)
+    include_directories(${AUDIOUNIT_INCLUDE_PATH})
+    target_link_libraries(rtauhal ${AUDIOUNIT_LIBRARY} ${COREFOUNDATION_LIBRARY} ${COREAUDIO_LIBRARY})
 endif()
 
 check_deps(USE_ALSA ALSA_HEADER ALSA_LIBRARY PTHREAD_LIBRARY)
diff --git a/InOut/FL_graph.cpp b/InOut/FL_graph.cpp
index f20c0a7..1ec008d 100644
--- a/InOut/FL_graph.cpp
+++ b/InOut/FL_graph.cpp
@@ -96,7 +96,7 @@ void flgraph_init(CSOUND *csound)
      
 
       /*ST(menu) =  (Fl_Menu_Item*) csound->Calloc(csound,
-	sizeof(Fl_Menu_Item)*(1+NUMOFWINDOWS));*/
+        sizeof(Fl_Menu_Item)*(1+NUMOFWINDOWS));*/
       /* VL: moved menu object to be built at each new compilation */
  
 }
@@ -212,7 +212,7 @@ void add_graph(CSOUND *csound, WINDAT *wdptr)
     for (m = 0; m < NUMOFWINDOWS; m++) {  // If text the same use slot
       if(ST(menu) != NULL) {
        if (ST(menu)[m].text != NULL && wdptr->caption != NULL){
-	if(strcmp(wdptr->caption, ST(menu)[m].text) == 0) {
+        if(strcmp(wdptr->caption, ST(menu)[m].text) == 0) {
         replacing = 1;
         goto replace;
         }
@@ -317,7 +317,7 @@ extern "C" {
   {
       for (int i = 0; i < NUMOFWINDOWS; i++) {
         WINDAT *n = (WINDAT*) ST(menu)[i].user_data_;
-        if (n != NULL && n->windid == m) {
+        if (n != NULL && ((uintptr_t) n == m ||n->windid == m)) {
           free(n->fdata);
           free(n);
           free((void*) ST(menu)[i].text);
@@ -332,16 +332,16 @@ extern "C" {
   {
       if (ST(form) && ST(graph_created) == 1) {
           
-	if (ST(form)->shown() && !(getFLTKFlags(csound) & 256)) {
-	const char *env = csound->GetEnv(csound, "CSNOSTOP");
-	if (env == NULL || strcmp(env, "yes") != 0) {
-	  ST(end)->show();
+        if (ST(form)->shown() && !(getFLTKFlags(csound) & 256)) {
+        const char *env = csound->GetEnv(csound, "CSNOSTOP");
+        if (env == NULL || strcmp(env, "yes") != 0) {
+          ST(end)->show();
            // print click-Exit message in most recently active window 
-	  while (ST(end)->value() == 0 && ST(form)->shown()) {
-	    Fl_wait_locked(csound, 0.03);
-	  }
+          while (ST(end)->value() == 0 && ST(form)->shown()) {
+            Fl_wait_locked(csound, 0.03);
           }
-	 }
+          }
+         }
 
         delete ST(form); 
         ST(form) = (Fl_Window *) 0;
@@ -356,7 +356,7 @@ extern "C" {
         WINDAT *n = (WINDAT*) ST(menu)[i].user_data_;
         if (n)
           kill_graph(csound, (uintptr_t) ((void*) n));
-	  } 
+          } 
        if(ST(menu)){
              delete ST(menu);
              ST(menu) = (Fl_Menu_Item *) 0;
diff --git a/InOut/cmidi.c b/InOut/cmidi.c
new file mode 100644
index 0000000..8917e15
--- /dev/null
+++ b/InOut/cmidi.c
@@ -0,0 +1,261 @@
+/*
+    cmidi.c:
+
+    Copyright (C) 2011 V Lazzarini
+
+    This file is part of Csound.
+
+    The Csound Library is free software; you can redistribute it
+    and/or modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    Csound 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 Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with Csound; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+    02111-1307 USA
+*/
+
+/* Realtime MIDI using coremidi */
+
+
+#include <CoreMidi/CoreMidi.h>
+#include <CoreAudio/HostTime.h>
+#include <CoreFoundation/CoreFoundation.h>
+#include "csdl.h"                               /*      CMIDI.C         */
+#include "csGblMtx.h"
+#include "midiops.h"
+#include "oload.h"
+
+
+
+
+/* MIDI message queue size */
+#define DSIZE 4096
+
+/* MIDI data struct */
+typedef struct {
+  Byte status;
+  Byte data1;
+  Byte data2;
+  Byte flag;
+} MIDIdata;
+
+/* user data for MIDI callbacks */
+typedef struct _cdata {
+  MIDIdata *mdata;
+  int p; int q;
+  MIDIClientRef mclient;
+} cdata;
+
+
+/* coremidi callback, called when MIDI data is available */
+void ReadProc(const MIDIPacketList *pktlist, void *refcon, void *srcConnRefCon){
+ 
+  cdata *data = (cdata *)refcon;  
+  MIDIdata *mdata = data->mdata; 
+  int *p = &data->p, i, j;
+  MIDIPacket *packet = &((MIDIPacketList *)pktlist)->packet[0];
+  Byte *curpack;
+  
+ for (i = 0; i < pktlist->numPackets; i++) {
+   for(j=0; j < packet->length; j+=3){
+    curpack = packet->data+j;
+    memcpy(&mdata[*p], curpack, 3);
+    mdata[*p].flag = 1;
+    (*p)++;
+    if(*p == DSIZE) *p = 0;
+ }
+    packet = MIDIPacketNext(packet);
+  } 
+
+}
+
+/* csound MIDI input open callback, sets the device for input */ 
+static int MidiInDeviceOpen(CSOUND *csound, void **userData, const char *dev)
+{
+     int k, endpoints, dest;
+     CFStringRef name = NULL, cname = NULL, pname = NULL;
+     CFStringEncoding defaultEncoding = CFStringGetSystemEncoding();
+     MIDIClientRef mclient = (MIDIClientRef) 0;
+     MIDIPortRef mport =  (MIDIPortRef) 0;
+     MIDIEndpointRef endpoint;
+     MIDIdata *mdata = (MIDIdata *) malloc(DSIZE*sizeof(MIDIdata));
+     OSStatus ret;
+     cdata *refcon = (cdata *) malloc(sizeof(cdata));
+     memset(mdata, 0, sizeof(MIDIdata)*DSIZE);
+     refcon->mdata = mdata;
+     refcon->p = 0;
+     refcon->q = 0;
+     
+     /* MIDI client */
+     cname = CFStringCreateWithCString(NULL, "my client", defaultEncoding);
+     ret = MIDIClientCreate(cname, NULL, NULL, &mclient);
+     if(!ret){
+      /* MIDI input port */
+       pname = CFStringCreateWithCString(NULL, "inport", defaultEncoding);
+       ret = MIDIInputPortCreate(mclient, pname, ReadProc, refcon, &mport);
+       if(!ret){
+         /* sources, we connect to all available input sources */
+        endpoints = MIDIGetNumberOfSources();
+        csound->Message(csound, "%d MIDI sources in system \n", endpoints);
+        if(!strcmp(dev,"all")) { 
+        csound->Message(csound, "receiving from all sources \n");
+        for(k=0; k < endpoints; k++){
+          endpoint = MIDIGetSource(k);
+          long srcRefCon = (long) endpoint;
+          MIDIPortConnectSource(mport, endpoint, (void *) srcRefCon);
+          MIDIObjectGetStringProperty(endpoint, kMIDIPropertyName, &name);
+          csound->Message(csound, "connecting midi device %d: %s \n", k,
+                        CFStringGetCStringPtr(name, defaultEncoding)); 
+         }
+        }
+        else{
+          k = atoi(dev);
+          if(k < endpoints){
+          endpoint = MIDIGetSource(k);
+          long srcRefCon = (long) endpoint;
+          MIDIPortConnectSource(mport, endpoint, (void *) srcRefCon);
+          MIDIObjectGetStringProperty(endpoint, kMIDIPropertyName, &name);
+          csound->Message(csound, "connecting midi device %d: %s \n", k,
+                        CFStringGetCStringPtr(name, defaultEncoding));
+          }
+          else csound->Message(csound, "MIDI device number %d is out-of-range, not connected \n", k);         
+        }
+
+       }
+     }
+     refcon->mclient = mclient;
+     *userData = (void*) refcon;
+    if(name) CFRelease(name);
+    if(pname) CFRelease(pname);
+    if(cname) CFRelease(cname); 
+    /* report success */
+    return 0;
+}
+
+static int MidiOutDeviceOpen(CSOUND *csound, void **userData, const char *dev)
+{
+  /*stub for the moment */
+  csound->Message(csound, "output not implemented yet in CoreMIDI \n");
+    return 0;
+}
+
+/* used to distinguish between 1 and 2-byte messages */
+static  const   int     datbyts[8] = { 2, 2, 2, 2, 1, 1, 2, 0 };
+
+/* csound MIDI read callback, called every k-cycle */
+static int MidiDataRead(CSOUND *csound, void *userData,
+                         unsigned char *mbuf, int nbytes)
+{
+    cdata *data = (cdata *)userData;
+    MIDIdata *mdata = data->mdata;
+    int *q = &data->q, st, d1, d2, n = 0;
+
+    /* check if there is new data in circular queue */
+    while (mdata[*q].flag) {
+          st = (int) mdata[*q].status;
+          d1 = (int) mdata[*q].data1;
+          d2 = (int) mdata[*q].data2;
+         
+          if (st < 0x80) goto next;
+          
+          if (st >= 0xF0 &&
+              !(st == 0xF8 || st == 0xFA || st == 0xFB ||
+                st == 0xFC || st == 0xFF)) goto next;
+
+          nbytes -= (datbyts[(st - 0x80) >> 4] + 1);
+          if (nbytes < 0) break;
+
+          /* write to csound midi buffer */
+          n += (datbyts[(st - 0x80) >> 4] + 1);
+          switch (datbyts[(st - 0x80) >> 4]) {
+            case 0:
+              *mbuf++ = (unsigned char) st;
+              break;
+            case 1:
+              *mbuf++ = (unsigned char) st;
+              *mbuf++ = (unsigned char) d1;
+              break;
+            case 2:
+              *mbuf++ = (unsigned char) st;
+              *mbuf++ = (unsigned char) d1;
+              *mbuf++ = (unsigned char) d2;
+              break;
+              } 
+          /* mark as read */
+    next:
+          mdata[*q].flag = 0;
+          (*q)++;
+          if(*q==DSIZE) *q = 0;
+         
+      }
+    
+    /* return the number of bytes read */
+    return n;
+}
+
+/* csound close device callback */
+static int MidiInDeviceClose(CSOUND *csound, void *userData)
+{
+    cdata * data = (cdata *)userData;
+    MIDIClientDispose(data->mclient);
+    free(data->mdata);
+    free(data);
+    return 0;
+}
+
+static int MidiDataWrite(CSOUND *csound, void *userData,
+                          const unsigned char *mbuf, int nbytes)
+{
+  /* stub at the moment */
+    return nbytes;
+}
+
+
+
+static int MidiOutDeviceClose(CSOUND *csound, void *userData)
+{
+  /* sutb at the mement */
+    return 0;
+}
+
+/* module interface functions */
+
+PUBLIC int csoundModuleCreate(CSOUND *csound)
+{
+    /* nothing to do, report success */
+    csound->Message(csound, Str("CoreMIDI real time MIDI plugin for Csound\n"));
+    return 0;
+}
+
+PUBLIC int csoundModuleInit(CSOUND *csound)
+{
+    char    *drv;
+
+    drv = (char*) (csound->QueryGlobalVariable(csound, "_RTMIDI"));
+    if (drv == NULL)
+      return 0;
+    if (!(strcmp(drv, "coremidi") == 0 || strcmp(drv, "CoreMidi") == 0 ||
+          strcmp(drv, "CoreMIDI") == 0 || strcmp(drv, "cm") == 0))
+      return 0;
+    csound->Message(csound, Str("rtmidi: CoreMIDI module enabled\n"));
+    csound->SetExternalMidiInOpenCallback(csound, MidiInDeviceOpen);
+    csound->SetExternalMidiReadCallback(csound, MidiDataRead);
+    csound->SetExternalMidiInCloseCallback(csound, MidiInDeviceClose);
+    csound->SetExternalMidiOutOpenCallback(csound, MidiOutDeviceOpen);
+    csound->SetExternalMidiWriteCallback(csound, MidiDataWrite);
+    csound->SetExternalMidiOutCloseCallback(csound, MidiOutDeviceClose);
+    return 0;
+}
+
+PUBLIC int csoundModuleInfo(void)
+{
+    /* does not depend on MYFLT type */
+    return ((CS_APIVERSION << 16) + (CS_APISUBVER << 8));
+}
diff --git a/InOut/libmpadec/layer1.c b/InOut/libmpadec/layer1.c
new file mode 100644
index 0000000..2311bba
--- /dev/null
+++ b/InOut/libmpadec/layer1.c
@@ -0,0 +1,155 @@
+/*
+ *  mpadec - MPEG audio decoder
+ *  Copyright (C) 2002-2004 Dmitriy Startsev (dstartsev at rambler.ru)
+ *
+ *  This library is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU Lesser General Public
+ *  License as published by the Free Software Foundation; either
+ *  version 2.1 of the License, or (at your option) any later version.
+ *
+ *  This library 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
+ *  Lesser General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Lesser General Public
+ *  License along with this library; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+/* $Id: layer1.c,v 1.1.1.1 2004/07/27 02:57:18 metal_man Exp $ */
+
+#include "mpadec_internal.h"
+
+extern const uint32_t bitmask[17];
+extern alloc_table_t *alloc_tables[5];
+
+extern unsigned getbits(mpadec_t mpadec, int n);
+extern uint16_t update_crc(uint16_t init, uint8_t *buf, int length);
+
+static void I_decode_bitalloc(mpadec_t mpadec, uint8_t *bit_alloc,
+                              uint8_t *scalefac)
+{
+    register struct mpadec_t *mpa = (struct mpadec_t *)mpadec;
+    uint8_t *ba = bit_alloc, *scf = scalefac;
+    uint32_t crclen = mpa->bytes_left;
+
+    if (mpa->frame.channels > 1) {
+      unsigned i, jsbound = mpa->frame.jsbound;
+      for (i = jsbound; i; i--) {
+        *ba++ = (uint8_t)GETBITS(4);
+        *ba++ = (uint8_t)GETBITS(4);
+      }
+      for (i = (SBLIMIT - jsbound); i; i--) *ba++ = (uint8_t)GETBITS(4);
+      if (mpa->config.crc && mpa->frame.CRC) {
+        crclen -= mpa->bytes_left;
+        mpa->crc = update_crc(mpa->crc, mpa->next_byte - crclen,
+                              ((crclen << 3) - mpa->bits_left));
+        if (mpa->crc != mpa->frame.crc) mpa->error = TRUE;
+      }
+      ba = bit_alloc;
+      for (i = jsbound; i; i--) {
+        if (*ba++) *scf++ = (uint8_t)GETBITS(6);
+        if (*ba++) *scf++ = (uint8_t)GETBITS(6);
+      }
+      for (i = (SBLIMIT - jsbound); i; i--) {
+        if (*ba++) {
+          *scf++ = (uint8_t)GETBITS(6);
+          *scf++ = (uint8_t)GETBITS(6);
+        }
+      }
+    } else {
+      register unsigned i;
+      for (i = SBLIMIT; i; i--) *ba++ = (uint8_t)GETBITS(4);
+      if (mpa->config.crc && mpa->frame.CRC) {
+        crclen -= mpa->bytes_left;
+        mpa->crc = update_crc(mpa->crc, mpa->next_byte - crclen,
+                              ((crclen << 3) - mpa->bits_left));
+        if (mpa->crc != mpa->frame.crc) mpa->error = TRUE;
+      }
+      ba = bit_alloc;
+      for (i = SBLIMIT; i; i--) if (*ba++) *scf++ = (uint8_t)GETBITS(6);
+    }
+}
+
+static void I_decode_samples(mpadec_t mpadec, uint8_t *bit_alloc,
+                             uint8_t *scalefac, MYFLT fraction[2][SBLIMIT])
+{
+    register struct mpadec_t *mpa = (struct mpadec_t *)mpadec;
+    uint8_t *ba = bit_alloc, *scf = scalefac;
+    unsigned i, n;
+
+    if (mpa->frame.channels > 1) {
+      unsigned jsbound = mpa->frame.jsbound;
+      MYFLT *f0 = fraction[0], *f1 = fraction[1];
+      for (i = jsbound; i; i--) {
+        if ((n = *ba++) != 0)
+          *f0++ = (((-1)<<n)+GETBITS(n + 1) + 1)*mpa->tables.muls[n + 1][*scf++];
+        else *f0++ = 0.0;
+        if ((n = *ba++) != 0)
+          *f1++ = (((-1)<<n) + GETBITS(n + 1) + 1)*mpa->tables.muls[n + 1][*scf++];
+        else *f1++ = 0.0;
+      }
+      for (i = (SBLIMIT - jsbound); i; i--) {
+        if ((n = *ba++) != 0) {
+          register MYFLT tmp = (((-1) << n) + GETBITS(n + 1) + 1);
+          *f0++ = tmp*mpa->tables.muls[n + 1][*scf++];
+          *f1++ = tmp*mpa->tables.muls[n + 1][*scf++];
+        } else *f0++ = *f1++ = 0.0;
+      }
+      for (i = (SBLIMIT - mpa->frame.downsample_sblimit); i; i--)
+        *--f0 = *--f1 = 0.0;
+    } else {
+      MYFLT *f0 = fraction[0];
+      for (i = SBLIMIT; i; i--) {
+        if ((n = *ba++) != 0)
+          *f0++ = (((-1)<<n) + GETBITS(n + 1) + 1)*mpa->tables.muls[n + 1][*scf++];
+        else *f0++ = 0.0;
+      }
+      for (i = (SBLIMIT - mpa->frame.downsample_sblimit); i; i--) *--f0 = 0.0;
+    }
+}
+
+void decode_layer1(mpadec_t mpadec, uint8_t *buffer)
+{
+    register struct mpadec_t *mpa = (struct mpadec_t *)mpadec;
+    int i, j, single;
+    MYFLT fraction[2][SBLIMIT];
+    uint8_t bit_alloc[2*SBLIMIT];
+    uint8_t scalefac[2*SBLIMIT];
+    
+    mpa->error = FALSE;
+    mpa->bits_left = 0;
+    mpa->frame.jsbound =
+      (uint8_t)((mpa->frame.mode == MPG_MD_JOINT_STEREO) ?
+                ((mpa->frame.mode_ext + 1) << 2) : SBLIMIT);
+    if (mpa->frame.channels > 1) switch (mpa->config.mode) {
+      case MPADEC_CONFIG_MONO:     single = 0; break;
+      case MPADEC_CONFIG_CHANNEL1: single = 1; break;
+      case MPADEC_CONFIG_CHANNEL2: single = 2; break;
+      default:                     single = -1; break;
+      } else single = 1;
+    I_decode_bitalloc(mpa, bit_alloc, scalefac);
+    for (i = 0; i < SCALE_BLOCK; i++) {
+      I_decode_samples(mpa, bit_alloc, scalefac, fraction);
+      if (!single)
+        for (j = 0; j < SBLIMIT; j++)
+          fraction[0][j] = 0.5*(fraction[0][j] + fraction[1][j]);
+      if (single < 0) {
+        mpa->synth_func(mpa, fraction[0], 0, buffer);
+        mpa->synth_func(mpa, fraction[1], 1, buffer);
+      } else if (!single) {
+        mpa->synth_func(mpa, fraction[0], 0, buffer);
+      } else {
+        mpa->synth_func(mpa, fraction[single - 1], 0, buffer);
+      }
+      buffer += mpa->synth_size;
+    }
+    {
+      register unsigned n = mpa->bits_left >> 3;
+      mpa->next_byte -= n;
+      mpa->bytes_left += n;
+      mpa->reservoir_size = 0;
+    }
+}
+
diff --git a/InOut/libmpadec/layer2.c b/InOut/libmpadec/layer2.c
new file mode 100644
index 0000000..f3aaad7
--- /dev/null
+++ b/InOut/libmpadec/layer2.c
@@ -0,0 +1,240 @@
+/*
+ *  mpadec - MPEG audio decoder
+ *  Copyright (C) 2002-2004 Dmitriy Startsev (dstartsev at rambler.ru)
+ *
+ *  This library is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU Lesser General Public
+ *  License as published by the Free Software Foundation; either
+ *  version 2.1 of the License, or (at your option) any later version.
+ *
+ *  This library 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
+ *  Lesser General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Lesser General Public
+ *  License along with this library; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+/* $Id: layer2.c,v 1.2 2009/03/01 15:27:05 jpff Exp $ */
+
+#include "mpadec_internal.h"
+
+extern const uint32_t bitmask[17];
+extern alloc_table_t *alloc_tables[5];
+
+extern unsigned getbits(mpadec_t mpadec, int n);
+extern uint16_t update_crc(uint16_t init, uint8_t *buf, int length);
+
+static void II_decode_bitalloc(mpadec_t mpadec, uint8_t *bit_alloc,
+                               uint8_t *scalefac)
+{
+    register struct mpadec_t *mpa = (struct mpadec_t *)mpadec;
+    alloc_table_t *alloc = mpa->frame.alloc_table;
+    uint8_t *scfsi, *ba = bit_alloc, *scf = scalefac;
+    unsigned i, step, sblimit2, sblimit = mpa->frame.sblimit;
+    uint32_t crclen = mpa->bytes_left;
+    uint8_t scfsi_buf[2*SBLIMIT];
+    
+    if (mpa->frame.channels > 1) {
+      unsigned jsbound = mpa->frame.jsbound;
+      sblimit2 = sblimit << 1;
+      for (i = jsbound; i; i--, alloc += (1 << step)) {
+        step = alloc->bits;
+        *ba++ = (uint8_t)GETBITS(step);
+        *ba++ = (uint8_t)GETBITS(step);
+      }
+      for (i = sblimit - jsbound; i; i--, alloc += (1 << step)) {
+        step = alloc->bits;
+        ba[0] = (uint8_t)GETBITS(step);
+        ba[1] = ba[0];
+        ba += 2;
+      }
+      ba = bit_alloc;
+      scfsi = scfsi_buf;
+      for (i = sblimit2; i; i--) if (*ba++) *scfsi++ = (uint8_t)GETBITS(2);
+    } else {
+      sblimit2 = sblimit;
+      for (i = sblimit; i; i--, alloc += (1 << step)) {
+        step = alloc->bits;
+        *ba++ = (uint8_t)GETBITS(step);
+      }
+      ba = bit_alloc;
+      scfsi = scfsi_buf;
+      for (i = sblimit; i; i--) if (*ba++) *scfsi++ = (uint8_t)GETBITS(2);
+    }
+    if (mpa->config.crc && mpa->frame.CRC) {
+      crclen -= mpa->bytes_left;
+      mpa->crc = update_crc(mpa->crc, mpa->next_byte - crclen,
+                            ((crclen << 3) - mpa->bits_left));
+      if (mpa->crc != mpa->frame.crc) mpa->error = TRUE;
+    }
+    ba = bit_alloc;
+    scfsi = scfsi_buf;
+    for (i = sblimit2; i; i--) {
+      if (*ba++) {
+        switch (*scfsi++) {
+        case 0:  
+          scf[0] = (uint8_t)GETBITS(6);
+          scf[1] = (uint8_t)GETBITS(6);
+          scf[2] = (uint8_t)GETBITS(6);
+          break;
+        case 1:
+          scf[0] = (uint8_t)GETBITS(6);
+          scf[1] = scf[0];
+          scf[2] = (uint8_t)GETBITS(6);
+          break;
+        case 2:
+          scf[0] = (uint8_t)GETBITS(6);
+          scf[1] = scf[2] = scf[0];
+          break;
+        default:
+          scf[0] = (uint8_t)GETBITS(6);
+          scf[1] = (uint8_t)GETBITS(6);
+          scf[2] = scf[1];
+          break;
+        }
+        scf += 3;
+      }
+    }
+}
+
+static void II_decode_samples(mpadec_t mpadec, uint8_t *bit_alloc,
+                              uint8_t *scalefac, MYFLT fraction[2][4][SBLIMIT],
+                              int x1)
+{
+    register struct mpadec_t *mpa = (struct mpadec_t *)mpadec;
+    alloc_table_t *alloc = mpa->frame.alloc_table, *alloc2;
+    uint8_t *ba = bit_alloc, *scf = scalefac;
+    unsigned i, j, k, step, sblimit = mpa->frame.sblimit;
+    unsigned jsbound = mpa->frame.jsbound;
+
+    for (i = 0; i < jsbound; i++, alloc += (1 << step)) {
+      step = alloc->bits;
+      for (j = 0; j < (unsigned)mpa->frame.channels; j++) {
+        unsigned b = *ba++; int d;
+        if (b) {
+          alloc2 = alloc + b;
+          k = alloc2->bits;
+          d = alloc2->d;
+          if (d < 0) {
+            register MYFLT cm = mpa->tables.muls[k][scf[x1]];
+            fraction[j][0][i] = ((MYFLT)((int)GETBITS(k) + d))*cm;
+            fraction[j][1][i] = ((MYFLT)((int)GETBITS(k) + d))*cm;
+            fraction[j][2][i] = ((MYFLT)((int)GETBITS(k) + d))*cm;
+          } else {
+            unsigned idx = GETBITS(k), m = scf[x1];
+            uint8_t *tab = (mpa->tables.mp2tables[d] + 3*idx);
+            fraction[j][0][i] = mpa->tables.muls[*tab++][m];
+            fraction[j][1][i] = mpa->tables.muls[*tab++][m];
+            fraction[j][2][i] = mpa->tables.muls[*tab][m];
+          }
+          scf += 3;
+        } else fraction[j][0][i] = fraction[j][1][i] = fraction[j][2][i] = 0.0;
+      }
+    }
+    for (i = jsbound; i < sblimit; i++, alloc += (1 << step)) {
+      unsigned b = ba[1]; int d;
+      step = alloc->bits;
+      ba += 2;
+      if (b) {
+        alloc2 = alloc + b;
+        k = alloc2->bits;
+        d = alloc2->d;
+        if (d < 0) {
+          register MYFLT cm = mpa->tables.muls[k][scf[x1 + 3]];
+          fraction[1][0][i] = fraction[0][0][i] = ((MYFLT)((int)GETBITS(k) + d))*cm;
+          fraction[1][1][i] = fraction[0][1][i] = ((MYFLT)((int)GETBITS(k) + d))*cm;
+          fraction[1][2][i] = fraction[0][2][i] = ((MYFLT)((int)GETBITS(k) + d))*cm;
+          cm = mpa->tables.muls[k][scf[x1]];
+          fraction[0][0][i] *= cm;
+          fraction[0][1][i] *= cm;
+          fraction[0][2][i] *= cm;
+        } else {
+          unsigned idx = GETBITS(k), m1 = scf[x1], m2 = scf[x1 + 3];
+          uint8_t *tab = (mpa->tables.mp2tables[d] + 3*idx);
+          fraction[0][0][i] = mpa->tables.muls[*tab][m1];
+          fraction[1][0][i] = mpa->tables.muls[*tab++][m2];
+          fraction[0][1][i] = mpa->tables.muls[*tab][m1];
+          fraction[1][1][i] = mpa->tables.muls[*tab++][m2];
+          fraction[0][2][i] = mpa->tables.muls[*tab][m1];
+          fraction[1][2][i] = mpa->tables.muls[*tab][m2];
+        }
+        scf += 6;
+      } else fraction[0][0][i] = fraction[0][1][i] = fraction[0][2][i] =
+               fraction[1][0][i] = fraction[1][1][i] = fraction[1][2][i] = 0.0;
+    }
+    if (sblimit > (unsigned)mpa->frame.downsample_sblimit)
+      sblimit = mpa->frame.downsample_sblimit;
+    for (i = sblimit; i < SBLIMIT; i++)
+      for (j = 0; j < (unsigned)mpa->frame.channels; j++)
+        fraction[j][0][i] = fraction[j][1][i] = fraction[j][2][i] = 0.0;
+}
+
+void decode_layer2(mpadec_t mpadec, uint8_t *buffer)
+{
+    register struct mpadec_t *mpa = (struct mpadec_t *)mpadec;
+    int i, j, table, single;
+    MYFLT fraction[2][4][SBLIMIT];
+    uint8_t bit_alloc[2*SBLIMIT];
+    uint8_t scalefac[3*2*SBLIMIT];
+    static uint8_t sblimits[5] = { 27 , 30 , 8, 12 , 30 };
+    static uint8_t translate[3][2][16] =
+      { { { 0, 2, 2, 2, 2, 2, 2, 0, 0, 0, 1, 1, 1, 1, 1, 0 },
+          { 0, 2, 2, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 } },
+        { { 0, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+          { 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        { { 0, 3, 3, 3, 3, 3, 3, 0, 0, 0, 1, 1, 1, 1, 1, 0 },
+          { 0, 3, 3, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 } } };
+    
+    mpa->error = FALSE;
+    mpa->bits_left = 0;
+    if (mpa->frame.LSF) table = 4;
+    else 
+      table =
+        translate[mpa->frame.frequency_index]
+                 [2 - mpa->frame.channels][mpa->frame.bitrate_index];
+    mpa->frame.alloc_table = alloc_tables[table];
+    mpa->frame.sblimit = sblimits[table];
+    mpa->frame.jsbound =
+      (uint8_t)((mpa->frame.mode == MPG_MD_JOINT_STEREO) ?
+                ((mpa->frame.mode_ext + 1) << 2) : mpa->frame.sblimit);
+    if (mpa->frame.channels > 1)
+      switch (mpa->config.mode) {
+      case MPADEC_CONFIG_MONO:     single = 0; break;
+      case MPADEC_CONFIG_CHANNEL1: single = 1; break;
+      case MPADEC_CONFIG_CHANNEL2: single = 2; break;
+      default:                     single = -1; break;
+      } else single = 1;
+    II_decode_bitalloc(mpa, bit_alloc, scalefac);
+    for (i = 0; i < SCALE_BLOCK; i++) {
+      II_decode_samples(mpa, bit_alloc, scalefac, fraction, i >> 2);
+      if (!single) for (j = 0; j < 3; j++) {
+          register int k;
+          for (k = 0; k < SBLIMIT; k++)
+            fraction[0][j][k] = 0.5*(fraction[0][j][k] + fraction[1][j][k]);
+        }
+      if (single < 0) {
+        for (j = 0; j < 3; j++, buffer += mpa->synth_size) {
+          mpa->synth_func(mpa, fraction[0][j], 0, buffer);
+          mpa->synth_func(mpa, fraction[1][j], 1, buffer);
+        }
+      } else if (!single) {
+        for (j = 0; j < 3; j++, buffer += mpa->synth_size) {
+          mpa->synth_func(mpa, fraction[0][j], 0, buffer);
+        }
+      } else {
+        for (j = 0; j < 3; j++, buffer += mpa->synth_size) {
+          mpa->synth_func(mpa, fraction[single - 1][j], 0, buffer);
+        }
+      }
+    }
+    {
+      register unsigned n = mpa->bits_left >> 3;
+      mpa->next_byte -= n;
+      mpa->bytes_left += n;
+      mpa->reservoir_size = 0;
+    }
+}
+
diff --git a/InOut/libmpadec/layer3.c b/InOut/libmpadec/layer3.c
new file mode 100644
index 0000000..cdd931e
--- /dev/null
+++ b/InOut/libmpadec/layer3.c
@@ -0,0 +1,1026 @@
+
+/*
+ *  mpadec - MPEG audio decoder
+ *  Copyright (C) 2002-2004 Dmitriy Startsev (dstartsev at rambler.ru)
+ *
+ *  This library is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU Lesser General Public
+ *  License as published by the Free Software Foundation; either
+ *  version 2.1 of the License, or (at your option) any later version.
+ *
+ *  This library 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
+ *  Lesser General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Lesser General Public
+ *  License along with this library; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+/* $Id: layer3.c,v 1.3 2009/03/01 15:27:05 jpff Exp $ */
+
+#include "mpadec_internal.h"
+
+extern const uint32_t bitmask[17];
+extern bandinfo_t band_info[];
+extern newhuff_t hufft[], hufftc[];
+extern const MYFLT newcos[8];
+extern const MYFLT tfcos36[9];
+extern const MYFLT tfcos12[3];
+extern const MYFLT cs[8];
+extern const MYFLT ca[8];
+
+extern uint32_t getbits(mpadec_t mpadec, unsigned n);
+extern uint16_t update_crc(uint16_t init, uint8_t *buf, int length);
+
+static int decode_layer3_sideinfo(mpadec_t mpadec)
+{
+    register struct mpadec_t *mpa = (struct mpadec_t *)mpadec;
+    int ch, gr, ms_stereo, powdiff, databits = 0;
+    static const uint8_t tabs[2][5] = { { 2, 9, 5, 3, 4 }, { 1, 8, 1, 2, 9 } };
+    const uint8_t *tab = tabs[mpa->frame.LSF];
+
+    ms_stereo = ((mpa->frame.mode == MPG_MD_JOINT_STEREO) &&
+                 (mpa->frame.mode_ext & 2));
+    powdiff = ((mpa->frame.channels > 1) &&
+               (mpa->config.mode == MPADEC_CONFIG_MONO)) ? 4 : 0;
+    mpa->sideinfo.main_data_begin = GETBITS(tab[1]);
+    if (mpa->frame.channels == 1) mpa->sideinfo.private_bits = GETBITS(tab[2]);
+    else mpa->sideinfo.private_bits = GETBITS(tab[3]);
+    if (!mpa->frame.LSF) {
+      for (ch = 0; ch < mpa->frame.channels; ch++) {
+        mpa->sideinfo.ch[ch].gr[0].scfsi = -1;
+        mpa->sideinfo.ch[ch].gr[1].scfsi = GETBITS(4);
+      }
+    }
+    for (gr = 0; gr < tab[0]; gr++) {
+      for (ch = 0; ch < mpa->frame.channels; ch++) {
+        register grinfo_t *grinfo = &mpa->sideinfo.ch[ch].gr[gr];
+        grinfo->part2_3_length = GETBITS(12);
+        grinfo->big_values = GETBITS(9);
+        databits += grinfo->part2_3_length;
+        if (grinfo->big_values > 288) grinfo->big_values = 288;
+        grinfo->pow2gain = mpa->tables.gainpow2 + 256 - GETBITS(8) + powdiff;
+        if (ms_stereo) grinfo->pow2gain += 2;
+        grinfo->scalefac_compress = GETBITS(tab[4]);
+        if (GETBITS(1)) {
+          grinfo->block_type = (uint8_t)GETBITS(2);
+          grinfo->mixed_block_flag = (uint8_t)GETBITS(1);
+          grinfo->table_select[0] = GETBITS(5);
+          grinfo->table_select[1] = GETBITS(5);
+          grinfo->table_select[2] = 0;
+          grinfo->full_gain[0] = grinfo->pow2gain + (GETBITS(3) << 3);
+          grinfo->full_gain[1] = grinfo->pow2gain + (GETBITS(3) << 3);
+          grinfo->full_gain[2] = grinfo->pow2gain + (GETBITS(3) << 3);
+          if (!grinfo->block_type) {
+            mpa->error = TRUE;
+            return 0;
+          } else mpa->error = FALSE;
+          if (mpa->frame.LSF) {
+            if (grinfo->block_type == 2) {
+              if (grinfo->mixed_block_flag) {
+                if (mpa->frame.frequency_index == 8) grinfo->region1start = 48;
+                else grinfo->region1start = 48 >> 1;
+              } else {
+                if (mpa->frame.frequency_index == 8) grinfo->region1start = 36;
+                else grinfo->region1start = 36 >> 1;
+              }
+            } else {
+              if (mpa->frame.frequency_index == 8) grinfo->region1start = 54;
+              else grinfo->region1start = 54 >> 1;
+            }
+          } else grinfo->region1start = 36 >> 1;
+          grinfo->region2start = 576 >> 1;
+        } else {
+          grinfo->block_type = 0;
+          grinfo->mixed_block_flag = 0;
+          grinfo->table_select[0] = GETBITS(5);
+          grinfo->table_select[1] = GETBITS(5);
+          grinfo->table_select[2] = GETBITS(5);
+          {
+            register int tmp = GETBITS(4);
+            grinfo->region1start =
+              band_info[mpa->frame.frequency_index].long_idx[tmp + 1] >> 1;
+            tmp += GETBITS(3);
+            grinfo->region2start =
+              band_info[mpa->frame.frequency_index].long_idx[tmp + 2] >> 1;
+          }
+        }
+        if (!mpa->frame.LSF) grinfo->preflag = (uint8_t)GETBITS(1);
+        grinfo->scalefac_scale = (uint8_t)GETBITS(1);
+        grinfo->count1table_select = (uint8_t)GETBITS(1);
+      }
+    }
+    databits -= 8*mpa->sideinfo.main_data_begin;
+    return databits;
+}
+
+static int III_get_scale_factors(mpadec_t mpadec, grinfo_t *gr_info, int32_t *scf)
+{
+    register struct mpadec_t *mpa = (struct mpadec_t *)mpadec;
+    register grinfo_t *grinfo = gr_info;
+    int numbits = 0;
+    static uint8_t slen[2][16] = 
+      { {0, 0, 0, 0, 3, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4},
+        {0, 1, 2, 3, 0, 1, 2, 3, 1, 2, 3, 1, 2, 3, 2, 3} };
+    static uint8_t stab[3][6][4] =
+      { { { 6, 5, 5,5 } , { 6, 5, 7,3 } , { 11,10,0,0} ,
+          { 7, 7, 7,0 } , { 6, 6, 6,3 } , {  8, 8,5,0} } ,
+        { { 9, 9, 9,9 } , { 9, 9,12,6 } , { 18,18,0,0} ,
+          {12,12,12,0 } , {12, 9, 9,6 } , { 15,12,9,0} } ,
+        { { 6, 9, 9,9 } , { 6, 9,12,6 } , { 15,18,0,0} ,
+          { 6,15,12,0 } , { 6,12, 9,6 } , {  6,18,9,0} } };
+    
+    if (!mpa->frame.LSF) {
+      int i, num0 = slen[0][grinfo->scalefac_compress],
+              num1 = slen[1][grinfo->scalefac_compress];
+      if (grinfo->block_type == 2) {
+        i = 18; numbits = 18*(num0 + num1);
+        if (grinfo->mixed_block_flag) {
+          i--;
+          numbits -= num0;
+        }
+        for (; i; i--) *scf++ = GETBITS(num0);
+        for (i = 18; i; i--) *scf++ = GETBITS(num1);
+        scf[0] = scf[1] = scf[2] = 0;
+      } else {
+        if (grinfo->scfsi < 0) {
+          for (i = 11; i; i--) *scf++ = GETBITS(num0);
+          for (i = 10; i; i--) *scf++ = GETBITS(num1);
+          numbits = 10*(num0 + num1) + num0;
+          *scf = 0;
+        } else {
+          numbits = 0;
+          if (!(grinfo->scfsi & 8)) {
+            for (i = 6; i; i--) *scf++ = GETBITS(num0);
+            numbits += 6*num0;
+          } else scf += 6;
+          if (!(grinfo->scfsi & 4)) {
+            for (i = 5; i; i--) *scf++ = GETBITS(num0);
+            numbits += 5*num0;
+          } else scf += 5;
+          if (!(grinfo->scfsi & 2)) {
+            for (i = 5; i; i--) *scf++ = GETBITS(num1);
+            numbits += 5*num1;
+          } else scf += 5;
+          if (!(grinfo->scfsi & 1)) {
+            for (i = 5; i; i--) *scf++ = GETBITS(num1);
+            numbits += 5*num1;
+          } else scf += 5;
+          *scf = 0;
+        }
+      }
+    } else {
+      int i, j, n = 0;
+      unsigned s_len; uint8_t *pnt;
+      if ((mpa->frame.mode == MPG_MD_JOINT_STEREO) && (mpa->frame.mode_ext & 1)) {
+        s_len = mpa->tables.i_slen2[grinfo->scalefac_compress >> 1];
+      } else s_len = mpa->tables.n_slen2[grinfo->scalefac_compress];
+      grinfo->preflag = (uint8_t)((s_len >> 15) & 1);
+      if (grinfo->block_type == 2) n = grinfo->mixed_block_flag ? 2 : 1;
+      pnt = stab[n][(s_len >> 12) & 7];
+      for (i = 0; i < 4; i++) {
+        int num = s_len & 7;
+        s_len >>= 3;
+        if (num) {
+          for (j = 0; j < (int)pnt[i]; j++) *scf++ = GETBITS(num);
+          numbits += pnt[i]*num;
+        } else for (j = 0; j < (int)pnt[i]; j++) *scf++ = 0;
+      }
+      for (i = (n << 1) + 1; i; i--) *scf++ = 0;
+    }
+    return numbits;
+}
+
+static int III_decode_samples(mpadec_t mpadec, grinfo_t *gr_info, MYFLT xr[SBLIMIT][SSLIMIT], int32_t *scf, int part2bits)
+{
+    register struct mpadec_t *mpa = (struct mpadec_t *)mpadec;
+    register grinfo_t *grinfo = gr_info;
+    int shift = 1 + grinfo->scalefac_scale, l[3], l3;
+    int part2remain = grinfo->part2_3_length - part2bits;
+    MYFLT *xrptr = (MYFLT *)xr; int32_t *me;
+    static uint8_t pretab1[22] = 
+      { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 3, 3, 3, 2, 0 };
+    static uint8_t pretab2[22] =
+      { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
+
+    l3 = ((576 >> 1) - grinfo->big_values) >> 1;
+    if (grinfo->big_values <= grinfo->region1start) {
+      l[0] = grinfo->big_values;
+      l[1] = l[2] = 0;
+    } else {
+      l[0] = grinfo->region1start;
+      if (grinfo->big_values <= grinfo->region2start) {
+        l[1] = grinfo->big_values - l[0]; l[2] = 0;
+      } else {
+        l[1] = grinfo->region2start - l[0];
+        l[2] = grinfo->big_values - grinfo->region2start;
+      }
+    }
+    if (grinfo->block_type == 2) {
+      int32_t i, max[4], step = 0, lwin = 0, cb = 0;
+      register MYFLT v = 0.0;
+      register int32_t *m, mc;
+
+      if (grinfo->mixed_block_flag) {
+        max[3] = -1;
+        max[0] = max[1] = max[2] = 2;
+        m = mpa->tables.map[mpa->frame.frequency_index][0];
+        me = mpa->tables.mapend[mpa->frame.frequency_index][0];
+      } else {
+        max[0] = max[1] = max[2] = max[3] = -1;
+        m = mpa->tables.map[mpa->frame.frequency_index][1];
+        me = mpa->tables.mapend[mpa->frame.frequency_index][1];
+      }
+      mc = 0;
+      for (i = 0; i < 2; i++) {
+        int lp = l[i];
+        newhuff_t *h = hufft + grinfo->table_select[i];
+        for (; lp; lp--, mc--) {
+          register int x, y;
+          if (!mc) {
+            mc = *m++;
+            xrptr = ((MYFLT *)xr) + (*m++);
+            lwin = *m++;
+            cb = *m++;
+            if (lwin == 3) {
+              v = grinfo->pow2gain[(*scf++) << shift];
+              step = 1;
+            } else {
+              v = grinfo->full_gain[lwin][(*scf++) << shift];
+              step = 3;
+            }
+          }
+          {
+            register int16_t *val = h->table;
+            while ((y = *val++) < 0) {
+              if (GETBITS(1)) val -= y;
+              part2remain--;
+            }
+            x = y >> 4;
+            y &= 0x0F;
+          }
+          if ((x == 15) && h->linbits) {
+            max[lwin] = cb;
+            part2remain -= h->linbits + 1;
+            x += GETBITS(h->linbits);
+            if (GETBITS(1)) *xrptr = -mpa->tables.ispow[x]*v;
+            else *xrptr = mpa->tables.ispow[x]*v;
+          } else if (x) {
+            max[lwin] = cb;
+            if (GETBITS(1)) *xrptr = -mpa->tables.ispow[x]*v;
+            else *xrptr = mpa->tables.ispow[x]*v;
+            part2remain--;
+          } else *xrptr = 0.0;
+          xrptr += step;
+          if ((y == 15) && h->linbits) {
+            max[lwin] = cb;
+            part2remain -= h->linbits + 1;
+            y += GETBITS(h->linbits);
+            if (GETBITS(1)) *xrptr = -mpa->tables.ispow[y]*v;
+            else *xrptr = mpa->tables.ispow[y]*v;
+          } else if (y) {
+            max[lwin] = cb;
+            if (GETBITS(1)) *xrptr = -mpa->tables.ispow[y]*v;
+            else *xrptr = mpa->tables.ispow[y]*v;
+            part2remain--;
+          } else *xrptr = 0.0;
+          xrptr += step;
+        }
+      }
+      for (; l3 && (part2remain > 0); l3--) {
+        newhuff_t *h = hufftc + grinfo->count1table_select;
+        register int16_t *val = h->table, a;
+        while ((a = *val++) < 0) {
+          part2remain--;
+          if (part2remain < 0) {
+            part2remain++;
+            a = 0;
+            break;
+          }
+          if (GETBITS(1)) val -= a;
+        }
+        for (i = 0; i < 4; i++) {
+          if (!(i & 1)) {
+            if (!mc) {
+              mc = *m++;
+              xrptr = ((MYFLT *)xr) + (*m++);
+              lwin = *m++;
+              cb = *m++;
+              if (lwin == 3) {
+                v = grinfo->pow2gain[(*scf++) << shift];
+                step = 1;
+              } else {
+                v = grinfo->full_gain[lwin][(*scf++) << shift];
+                step = 3;
+              }
+            }
+            mc--;
+          }
+          if (a & (8 >> i)) {
+            max[lwin] = cb;
+            part2remain--;
+            if (part2remain < 0) {
+              part2remain++;
+              break;
+            }
+            if (GETBITS(1)) *xrptr = -v;
+            else *xrptr = v;
+          } else *xrptr = 0.0;
+          xrptr += step;
+        }
+      }
+      if (lwin < 3) {
+        while (1) {
+          for (; mc > 0; mc--) {
+            xrptr[0] = xrptr[3] = 0.0;
+            xrptr += 6;
+          }
+          if (m >= me) break;
+          mc = *m++;
+          xrptr = ((MYFLT *)xr) + (*m++);
+          if ((*m++) == 0) break;
+          m++;
+        }
+      }
+      grinfo->maxband[0] = max[0] + 1;
+      grinfo->maxband[1] = max[1] + 1;
+      grinfo->maxband[2] = max[2] + 1;
+      grinfo->maxbandl = max[3] + 1;
+      {
+        int rmax = max[0] > max[1] ? max[0] : max[1];
+        rmax = (rmax > max[2] ? rmax : max[2]) + 1;
+        grinfo->maxb =
+          rmax ? mpa->tables.short_limit[mpa->frame.frequency_index][rmax] :
+                 mpa->tables.long_limit[mpa->frame.frequency_index][max[3] + 1];
+      }
+    } else {
+      uint8_t *pretab = grinfo->preflag ? pretab1 : pretab2;
+      int32_t i, max = -1, cb = 0, mc = 0;
+      int32_t *m = mpa->tables.map[mpa->frame.frequency_index][2];
+      register MYFLT v = 0.0;
+
+      for (i = 0; i < 3; i++) {
+        int lp = l[i];
+        newhuff_t *h = hufft + grinfo->table_select[i];
+        for (; lp; lp--, mc--) {
+          register int x, y;
+          if (!mc) {
+            mc = *m++;
+            cb = *m++;
+            if (cb == 21) v = 0.0;
+            else v = grinfo->pow2gain[((*scf++) + (*pretab++)) << shift];
+          }
+          {
+            register int16_t *val = h->table;
+            while ((y = *val++) < 0) {
+              if (GETBITS(1)) val -= y;
+              part2remain--;
+            }
+            x = y >> 4;
+            y &= 0x0F;
+          }
+          if ((x == 15) && h->linbits) {
+            max = cb;
+            part2remain -= h->linbits + 1;
+            x += GETBITS(h->linbits);
+            if (GETBITS(1)) *xrptr++ = -mpa->tables.ispow[x]*v;
+            else *xrptr++ = mpa->tables.ispow[x]*v;
+          } else if (x) {
+            max = cb;
+            if (GETBITS(1)) *xrptr++ = -mpa->tables.ispow[x]*v;
+            else *xrptr++ = mpa->tables.ispow[x]*v;
+            part2remain--;
+          } else *xrptr++ = 0.0;
+          if ((y == 15) && h->linbits) {
+            max = cb;
+            part2remain -= h->linbits + 1;
+            y += GETBITS(h->linbits);
+            if (GETBITS(1)) *xrptr++ = -mpa->tables.ispow[y]*v;
+            else *xrptr++ = mpa->tables.ispow[y]*v;
+          } else if (y) {
+            max = cb;
+            if (GETBITS(1)) *xrptr++ = -mpa->tables.ispow[y]*v;
+            else *xrptr++ = mpa->tables.ispow[y]*v;
+            part2remain--;
+          } else *xrptr++ = 0.0;
+        }
+      }
+      for (; l3 && (part2remain > 0); l3--) {
+        newhuff_t *h = hufftc + grinfo->count1table_select;
+        register int16_t *val = h->table, a;
+        while ((a = *val++) < 0) {
+          part2remain--;
+          if (part2remain < 0) {
+            part2remain++;
+            a = 0;
+            break;
+          }
+          if (GETBITS(1)) val -= a;
+        }
+        for (i = 0; i < 4; i++) {
+          if (!(i & 1)) {
+            if (!mc) {
+              mc = *m++;
+              cb = *m++;
+              v = grinfo->pow2gain[((*scf++) + (*pretab++)) << shift];
+            }
+            mc--;
+          }
+          if (a & (8 >> i)) {
+            max = cb;
+            part2remain--;
+            if (part2remain < 0) {
+              part2remain++;
+              break;
+            }
+            if (GETBITS(1)) *xrptr++ = -v;
+            else *xrptr++ = v;
+          } else *xrptr++ = 0.0;
+        }
+      }
+      grinfo->maxbandl = max + 1;
+      grinfo->maxb = mpa->tables.long_limit[mpa->frame.frequency_index][max + 1];
+    }
+    while (xrptr < &xr[SBLIMIT][0]) *xrptr++ = 0.0;
+    while (part2remain > 0) {
+      register unsigned tmp, i = (part2remain > 16) ? 16 : part2remain;
+      tmp = GETBITS(i);
+      part2remain -= i;
+      i = tmp;
+    }
+    mpa->error = (uint8_t)((part2remain < 0) ? TRUE : FALSE);
+    return mpa->error;
+}
+
+static void III_i_stereo(mpadec_t mpadec, grinfo_t *gr_info,
+                         MYFLT xrbuf[2][SBLIMIT][SSLIMIT], int32_t *scalefac)
+{
+    register struct mpadec_t *mpa = (struct mpadec_t *)mpadec;
+    register grinfo_t *grinfo = gr_info;
+    MYFLT (*xr)[SBLIMIT*SSLIMIT] = (MYFLT (*)[SBLIMIT*SSLIMIT])xrbuf;
+    bandinfo_t *bi = &band_info[mpa->frame.frequency_index];
+    int tab = mpa->frame.LSF + (grinfo->scalefac_compress & mpa->frame.LSF);
+    int ms_stereo = ((mpa->frame.mode == MPG_MD_JOINT_STEREO) &&
+                     (mpa->frame.mode_ext & 2)) ? TRUE : FALSE;
+    const MYFLT *tab1, *tab2;
+
+    tab1 = mpa->tables.istabs[tab][ms_stereo][0];
+    tab2 = mpa->tables.istabs[tab][ms_stereo][1];
+    if (grinfo->block_type == 2) {
+      int lwin, do_l = grinfo->mixed_block_flag;
+      for (lwin = 0; lwin < 3; lwin++) {
+        int32_t is_p, sb, idx, sfb = grinfo->maxband[lwin];
+        if (sfb > 3) do_l = FALSE;
+        for (; sfb < 12; sfb++) {
+          is_p = scalefac[3*sfb + lwin - grinfo->mixed_block_flag];
+          if (is_p != 7) {
+            MYFLT t1 = tab1[is_p], t2 = tab2[is_p];
+            sb = bi->short_diff[sfb];
+            idx = bi->short_idx[sfb] + lwin;
+            for (; sb; sb--, idx += 3) {
+              register MYFLT v = xr[0][idx];
+              xr[0][idx] = v*t1;
+              xr[1][idx] = v*t2;
+            }
+          }
+        }
+        is_p = scalefac[3*11 + lwin - grinfo->mixed_block_flag];
+        sb = bi->short_diff[12];
+        idx = bi->short_idx[12] + lwin;
+        if (is_p != 7) {
+          MYFLT t1 = tab1[is_p], t2 = tab2[is_p];
+          for (; sb; sb--, idx += 3) {
+            register MYFLT v = xr[0][idx];
+            xr[0][idx] = v*t1;
+            xr[1][idx] = v*t2;
+          }
+        }
+      }
+      if (do_l) {
+        int sfb = grinfo->maxbandl;
+        int idx = bi->long_idx[sfb];
+        for (; sfb < 8; sfb++) {
+          int sb = bi->long_diff[sfb];
+          int is_p = scalefac[sfb];
+          if (is_p != 7) {
+            MYFLT t1 = tab1[is_p], t2 = tab2[is_p];
+            for (; sb; sb--, idx++) {
+              register MYFLT v = xr[0][idx];
+              xr[0][idx] = v*t1;
+              xr[1][idx] = v*t2;
+            }
+          } else idx += sb;
+        }
+      }
+    } else {
+      int sfb = grinfo->maxbandl;
+      int is_p, idx = bi->long_idx[sfb];
+      for (; sfb < 21; sfb++) {
+        int sb = bi->long_diff[sfb];
+        is_p = scalefac[sfb];
+        if (is_p != 7) {
+          MYFLT t1 = tab1[is_p], t2 = tab2[is_p];
+          for (; sb; sb--, idx++) {
+            register MYFLT v = xr[0][idx];
+            xr[0][idx] = v*t1;
+            xr[1][idx] = v*t2;
+          }
+        } else idx += sb;
+      }
+      is_p = scalefac[20];
+      if (is_p != 7) {
+        int sb = bi->long_diff[21];
+        MYFLT t1 = tab1[is_p], t2 = tab2[is_p];
+        for (; sb; sb--, idx++) {
+          register MYFLT v = xr[0][idx];
+          xr[0][idx] = v*t1;
+          xr[1][idx] = v*t2;
+        }
+      }
+    }
+}
+
+static void III_antialias(grinfo_t *gr_info, MYFLT xr[SBLIMIT][SSLIMIT])
+{
+    register grinfo_t *grinfo = gr_info;
+    int sblim;
+
+    if (grinfo->block_type == 2) {
+      if (!grinfo->mixed_block_flag) return;
+      sblim = 1;
+    } else sblim = grinfo->maxb - 1;
+    {
+      int sb;
+      MYFLT *xr1 = (MYFLT *)xr[1];
+      for (sb = sblim; sb; sb--, xr1 += 10) {
+        int ss;
+        MYFLT *xr2 = xr1;
+        for (ss = 0; ss < 8; ss++) {
+          register MYFLT bu = *--xr2, bd = *xr1;
+          *xr2 = bu*cs[ss] - bd*ca[ss];
+          *xr1++ = bd*cs[ss] + bu*ca[ss];
+        }
+      }
+    }
+}
+
+static void dct36(register MYFLT *in, register MYFLT *out1,
+                  register MYFLT *out2, register MYFLT *w, register MYFLT *ts)
+{
+    MYFLT tmp[18];
+
+    {
+      in[17] += in[16]; in[16] += in[15]; in[15] += in[14];
+      in[14] += in[13]; in[13] += in[12]; in[12] += in[11];
+      in[11] += in[10]; in[10] += in[9];  in[9]  += in[8];
+      in[8]  += in[7];  in[7]  += in[6];  in[6]  += in[5];
+      in[5]  += in[4];  in[4]  += in[3];  in[3]  += in[2];
+      in[2]  += in[1];  in[1]  += in[0];
+
+      in[17] += in[15]; in[15] += in[13]; in[13] += in[11]; in[11] += in[9];
+      in[9]  += in[7];  in[7]  += in[5];  in[5]  += in[3];  in[3]  += in[1];
+
+      {
+        MYFLT t3;
+        {
+          MYFLT t0, t1, t2;
+
+          t0 = newcos[7]*(in[8] + in[16] - in[4]);
+          t1 = newcos[7]*in[12];
+          t3 = in[0];
+          t2 = t3 - t1 - t1;
+          tmp[1] = tmp[7] = t2 - t0;
+          tmp[4] = t2 + t0 + t0;
+          t3 += t1;
+          t2 = newcos[6]*(in[10] + in[14] - in[2]);
+          tmp[1] -= t2;
+          tmp[7] += t2;
+        }
+        {
+          MYFLT t0, t1, t2;
+
+          t0 = newcos[0]*(in[4] + in[8]);
+          t1 = newcos[1]*(in[8] - in[16]);
+          t2 = newcos[2]*(in[4] + in[16]);
+          tmp[2] = tmp[6] = t3 - t0 - t2;
+          tmp[0] = tmp[8] = t3 + t0 + t1;
+          tmp[3] = tmp[5] = t3 - t1 + t2;
+        }
+      }
+      {
+        MYFLT t1, t2, t3;
+
+        t1 = newcos[3]*(in[2] + in[10]);
+        t2 = newcos[4]*(in[10] - in[14]);
+        t3 = newcos[6]*in[6];
+        {
+          MYFLT t0 = t1 + t2 + t3;
+          tmp[0] += t0;
+          tmp[8] -= t0;
+        }
+        t2 -= t3;
+        t1 -= t3;
+        t3 = newcos[5]*(in[2] + in[14]);
+        t1 += t3;
+        tmp[3] += t1;
+        tmp[5] -= t1;
+        t2 -= t3;
+        tmp[2] += t2;
+        tmp[6] -= t2;
+      }
+      {
+        MYFLT t0, t1, t2, t3, t4, t5, t6, t7;
+
+        t1 = newcos[7]*in[13];
+        t2 = newcos[7]*(in[9] + in[17] - in[5]);
+        t3 = in[1] + t1;
+        t4 = in[1] - t1 - t1;
+        t5 = t4 - t2;
+        t0 = newcos[0]*(in[5] + in[9]);
+        t1 = newcos[1]*(in[9] - in[17]);
+        tmp[13] = (t4 + t2 + t2)*tfcos36[17 - 13];
+        t2 = newcos[2]*(in[5] + in[17]);
+        t6 = t3 - t0 - t2;
+        t0 += t3 + t1;
+        t3 += t2 - t1;
+        t2 = newcos[3]*(in[3] + in[11]);
+        t4 = newcos[4]*(in[11] - in[15]);
+        t7 = newcos[6]*in[7];
+        t1 = t2 + t4 + t7;
+        tmp[17] = (t0 + t1)*tfcos36[17 - 17];
+        tmp[9] = (t0 - t1)*tfcos36[17 - 9];
+        t1 = newcos[5]*(in[3] + in[15]);
+        t2 += t1 - t7;
+        tmp[14] = (t3 + t2)*tfcos36[17 - 14];
+        t0 = newcos[6]*(in[11] + in[15] - in[3]);
+        tmp[12] = (t3 - t2)*tfcos36[17 - 12];
+        t4 -= t1 + t7;
+        tmp[16] = (t5 - t0)*tfcos36[17 - 16];
+        tmp[10] = (t5 + t0)*tfcos36[17 - 10];
+        tmp[15] = (t6 + t4)*tfcos36[17 - 15];
+        tmp[11] = (t6 - t4)*tfcos36[17 - 11];
+      }
+    }
+#define DCT36_MACRO(v) {                                                \
+      register MYFLT tmpval = tmp[(v)] + tmp[17 - (v)];                 \
+      out2[9 + (v)] = tmpval*w[27 + (v)];                               \
+      out2[8 - (v)] = tmpval*w[26 - (v)];                               \
+      tmpval = tmp[(v)] - tmp[17 - (v)];                                \
+      ts[SBLIMIT*(8 - (v))] = out1[8 - (v)] + tmpval*w[8 - (v)];        \
+      ts[SBLIMIT*(9 + (v))] = out1[9 + (v)] + tmpval*w[9 + (v)];        \
+    }
+    {
+      DCT36_MACRO(0);
+      DCT36_MACRO(1);
+      DCT36_MACRO(2);
+      DCT36_MACRO(3);
+      DCT36_MACRO(4);
+      DCT36_MACRO(5);
+      DCT36_MACRO(6);
+      DCT36_MACRO(7);
+      DCT36_MACRO(8);
+    }
+#undef DCT36_MACRO
+}
+
+
+static void dct12(register MYFLT *in, register MYFLT *out1,
+                  register MYFLT *out2, register MYFLT *w, register MYFLT *ts)
+{
+#define DCT12_PART1 in5 = in[5*3];              \
+    in5 += (in4 = in[4*3]);                     \
+    in4 += (in3 = in[3*3]);                     \
+    in3 += (in2 = in[2*3]);                     \
+    in2 += (in1 = in[1*3]);                     \
+    in1 += (in0 = in[0*3]);                     \
+    in5 += in3; in3 += in1;                     \
+    in2 *= newcos[6];                           \
+    in3 *= newcos[6];
+
+#define DCT12_PART2 in0 += in4*newcos[7];       \
+    in4 = in0 + in2;                            \
+    in0 -= in2;                                 \
+    in1 += in5*newcos[7];                       \
+    in5 = (in1 + in3)*tfcos12[0];               \
+    in1 = (in1 - in3)*tfcos12[2];               \
+    in3 = in4 + in5;                            \
+    in4 -= in5;                                 \
+    in2 = in0 + in1;                            \
+    in0 -= in1;
+
+    {
+      MYFLT in0, in1, in2, in3, in4, in5;
+
+      ts[0*SBLIMIT] = out1[0]; ts[1*SBLIMIT] = out1[1]; ts[2*SBLIMIT] = out1[2];
+      ts[3*SBLIMIT] = out1[3]; ts[4*SBLIMIT] = out1[4]; ts[5*SBLIMIT] = out1[5];
+
+      DCT12_PART1
+
+        {
+          register MYFLT tmp0, tmp1 = in0 - in4;
+          {
+            register MYFLT tmp2 = (in1 - in5)*tfcos12[1];
+            tmp0 = tmp1 + tmp2;
+            tmp1 -= tmp2;
+          }
+          ts[(17 - 1)*SBLIMIT] = out1[17 - 1] + tmp0*w[11 - 1];
+          ts[(12 + 1)*SBLIMIT] = out1[12 + 1] + tmp0*w[6 + 1];
+          ts[(6 + 1)*SBLIMIT] = out1[6 + 1] + tmp1*w[1];
+          ts[(11 - 1)*SBLIMIT] = out1[11 - 1] + tmp1*w[5 - 1];
+        }
+
+      DCT12_PART2
+
+        ts[(17 - 0)*SBLIMIT] = out1[17 - 0] + in2*w[11 - 0];
+      ts[(12 + 0)*SBLIMIT] = out1[12 + 0] + in2*w[6 + 0];
+      ts[(12 + 2)*SBLIMIT] = out1[12 + 2] + in3*w[6 + 2];
+      ts[(17 - 2)*SBLIMIT] = out1[17 - 2] + in3*w[11 - 2];
+      ts[(6 + 0)*SBLIMIT]  = out1[6 + 0] + in0*w[0];
+      ts[(11 - 0)*SBLIMIT] = out1[11 - 0] + in0*w[5 - 0];
+      ts[(6 + 2)*SBLIMIT]  = out1[6 + 2] + in4*w[2];
+      ts[(11 - 2)*SBLIMIT] = out1[11 - 2] + in4*w[5 - 2];
+    }
+    in++;
+    {
+      MYFLT in0, in1, in2, in3, in4, in5;
+
+      DCT12_PART1
+
+        {
+          register MYFLT tmp0, tmp1 = in0 - in4;
+          {
+            register MYFLT tmp2 = (in1 - in5)*tfcos12[1];
+            tmp0 = tmp1 + tmp2;
+            tmp1 -= tmp2;
+          }
+          out2[5 - 1] = tmp0*w[11 - 1];
+          out2[0 + 1] = tmp0*w[6 + 1];
+          ts[(12 + 1)*SBLIMIT] += tmp1*w[0 + 1];
+          ts[(17 - 1)*SBLIMIT] += tmp1*w[5 - 1];
+        }
+
+      DCT12_PART2
+
+        out2[5 - 0] = in2*w[11 - 0];
+      out2[0 + 0] = in2*w[6 + 0];
+      out2[0 + 2] = in3*w[6 + 2];
+      out2[5 - 2] = in3*w[11 - 2];
+      ts[(12 + 0)*SBLIMIT] += in0*w[0];
+      ts[(17 - 0)*SBLIMIT] += in0*w[5 - 0];
+      ts[(12 + 2)*SBLIMIT] += in4*w[2];
+      ts[(17 - 2)*SBLIMIT] += in4*w[5 - 2];
+    }
+    in++;
+    {
+      MYFLT in0, in1, in2, in3, in4, in5;
+
+      out2[12] = out2[13] = out2[14] = out2[15] = out2[16] = out2[17] = 0.0;
+
+      DCT12_PART1
+
+        {
+          register MYFLT tmp0, tmp1 = in0 - in4;
+          {
+            register MYFLT tmp2 = (in1 - in5)*tfcos12[1];
+            tmp0 = tmp1 + tmp2;
+            tmp1 -= tmp2;
+          }
+          out2[11 - 1] = tmp0*w[11 - 1];
+          out2[6 + 1] = tmp0*w[6 + 1];
+          out2[0 + 1] += tmp1*w[1];
+          out2[5 - 1] += tmp1*w[5 - 1];
+        }
+
+      DCT12_PART2
+
+        out2[11 - 0] = in2*w[11 - 0];
+      out2[6 + 0] = in2*w[6 + 0];
+      out2[6 + 2] = in3*w[6 + 2];
+      out2[11 - 2] = in3*w[11 - 2];
+      out2[0 + 0] += in0*w[0];
+      out2[5 - 0] += in0*w[5 - 0];
+      out2[0 + 2] += in4*w[2];
+      out2[5 - 2] += in4*w[5 - 2];
+    }
+#undef DCT12_PART1
+#undef DCT12_PART2
+}
+
+static void III_hybrid(mpadec_t mpadec, grinfo_t *gr_info,
+                       MYFLT fs_in[SBLIMIT][SSLIMIT], 
+                       MYFLT ts_out[SSLIMIT][SBLIMIT], int channel)
+{
+    register struct mpadec_t *mpa = (struct mpadec_t *)mpadec;
+    register grinfo_t *grinfo = gr_info;
+    MYFLT *tsptr = (MYFLT *)ts_out;
+    MYFLT *out1, *out2;
+    unsigned bt = grinfo->block_type, sb = 0;
+
+    {
+      register unsigned b = mpa->hybrid_block[channel];
+      out1 = mpa->hybrid_buffers[b][channel];
+      b ^= 1;
+      out2 = mpa->hybrid_buffers[b][channel];
+      mpa->hybrid_block[channel] = (uint8_t)b;
+    }
+    if (grinfo->mixed_block_flag) {
+      sb = 2;
+      dct36(fs_in[0], out1, out2, mpa->tables.win[0][0], tsptr);
+      dct36(fs_in[1], out1 + SSLIMIT, out2 + SSLIMIT,
+            mpa->tables.win[1][0], tsptr + 1);
+      out1 += 36; out2 += 36; tsptr += 2;
+    }
+    if (bt == 2) {
+      for (; sb < grinfo->maxb; sb += 2, out1 += 36, out2 += 36, tsptr += 2) {
+        dct12(fs_in[sb], out1, out2, mpa->tables.win[0][2], tsptr);
+        dct12(fs_in[sb + 1], out1 + SSLIMIT, out2 + SSLIMIT,
+              mpa->tables.win[1][2], tsptr + 1);
+      }
+    } else {
+      for (; sb < grinfo->maxb; sb += 2, out1 += 36, out2 += 36, tsptr += 2) {
+        dct36(fs_in[sb], out1, out2, mpa->tables.win[0][bt], tsptr);
+        dct36(fs_in[sb + 1], out1 + SSLIMIT, out2 + SSLIMIT,
+              mpa->tables.win[1][bt], tsptr + 1);
+      }
+    }
+    for (; sb < SBLIMIT; sb++, tsptr++) {
+      register int i;
+      for (i = 0; i < SSLIMIT; i++) {
+        tsptr[i*SBLIMIT] = *out1++;
+        *out2++ = 0.0;
+      }
+    }
+}
+
+void decode_layer3(mpadec_t mpadec, uint8_t *buffer)
+{
+    register struct mpadec_t *mpa = (struct mpadec_t *)mpadec;
+    uint8_t *saved_next_byte = mpa->next_byte;
+    uint32_t saved_bytes_left = mpa->bytes_left;
+    int32_t dbits, scalefacs[2][39];
+    int ch, gr, ss, i_stereo, ms_stereo, single, channels, 
+      granules = mpa->frame.LSF ? 1 : 2;
+
+    mpa->error = FALSE;
+    mpa->bits_left = 0;
+    if (mpa->config.crc && mpa->frame.CRC) {
+      mpa->crc = update_crc(mpa->crc, mpa->next_byte, mpa->ssize << 3);
+      if (mpa->crc != mpa->frame.crc) mpa->error = TRUE;
+    }
+    dbits = decode_layer3_sideinfo(mpa);
+    mpa->dsize = (((dbits < 0) ? 0 : dbits) + 7) >> 3;
+    mpa->next_byte = saved_next_byte + mpa->ssize;
+    mpa->bytes_left = saved_bytes_left - mpa->ssize;
+    mpa->bits_left = 0;
+    saved_next_byte = NULL;
+    saved_bytes_left = mpa->bytes_left;
+    if (mpa->error) mpa->sideinfo.main_data_begin = mpa->reservoir_size + 1;
+    if (mpa->sideinfo.main_data_begin) {
+      if (mpa->sideinfo.main_data_begin <= mpa->reservoir_size) {
+        uint8_t *ptr = mpa->reservoir + mpa->reservoir_size;
+        uint32_t tmp = mpa->frame.frame_size - mpa->hsize - mpa->ssize;
+        if (tmp > (sizeof(mpa->reservoir) - mpa->reservoir_size))
+          tmp = sizeof(mpa->reservoir) - mpa->reservoir_size;
+        saved_next_byte = mpa->next_byte;
+        memcpy(ptr, mpa->next_byte, tmp);
+        mpa->next_byte = ptr - mpa->sideinfo.main_data_begin;
+        mpa->bytes_left = mpa->sideinfo.main_data_begin + tmp;
+      } else {
+        uint32_t tmp = mpa->frame.frame_size - mpa->hsize - mpa->ssize;
+        if (tmp > 512) {
+          mpa->next_byte += tmp - 512;
+          mpa->bytes_left -= tmp - 512;
+          tmp = 512;
+        }
+        if ((mpa->reservoir_size) && (mpa->reservoir_size > 512)) {
+          memmove(mpa->reservoir, mpa->reservoir + mpa->reservoir_size - 512, 512);
+          mpa->reservoir_size = 512;
+        }
+        memcpy(mpa->reservoir + mpa->reservoir_size, mpa->next_byte, tmp);
+        mpa->reservoir_size += tmp;
+        mpa->next_byte += tmp;
+        mpa->bytes_left -= tmp;
+        memset(buffer, 0, mpa->frame.decoded_size);
+        mpa->error = TRUE;
+        return;
+      }
+    }
+    if (mpa->frame.mode == MPG_MD_JOINT_STEREO) {
+      i_stereo = mpa->frame.mode_ext & 1;
+      ms_stereo = (mpa->frame.mode_ext & 2) >> 1;
+    } else i_stereo = ms_stereo = 0;
+    if (mpa->frame.channels > 1) switch (mpa->config.mode) {
+      case MPADEC_CONFIG_MONO:     single = 0; break;
+      case MPADEC_CONFIG_CHANNEL1: single = 1; break;
+      case MPADEC_CONFIG_CHANNEL2: single = 2; break;
+      default:                     single = -1; break;
+      } else single = 1;
+    channels = (single < 0) ? 2 : 1;
+    for (gr = 0; gr < granules; gr++) {
+      grinfo_t *grinfo = &mpa->sideinfo.ch[0].gr[gr];
+      int32_t part2bits = III_get_scale_factors(mpa, grinfo, scalefacs[0]);
+      if (III_decode_samples(mpa, grinfo, mpa->hybrid_in[0], scalefacs[0],
+                             part2bits)) {
+        unsigned size = mpa->frame.decoded_size;
+        if (!mpa->frame.LSF && gr) size >>= 1;
+        memset(buffer, 0, size);
+        mpa->error = TRUE;
+        goto done;
+      }
+      if (mpa->frame.channels > 1) {
+        grinfo = &mpa->sideinfo.ch[1].gr[gr];
+        part2bits = III_get_scale_factors(mpa, grinfo, scalefacs[1]);
+        if (III_decode_samples(mpa, grinfo, mpa->hybrid_in[1], scalefacs[1],
+                               part2bits)) {
+          unsigned size = mpa->frame.decoded_size;
+          if (!mpa->frame.LSF && gr) size >>= 1;
+          memset(buffer, 0, size);
+          mpa->error = TRUE;
+          goto done;
+        }
+        if (ms_stereo) {
+          MYFLT *in0 = (MYFLT *)(mpa->hybrid_in[0]),
+                *in1 = (MYFLT *)(mpa->hybrid_in[1]);
+          unsigned i, maxb = mpa->sideinfo.ch[0].gr[gr].maxb;
+          if (mpa->sideinfo.ch[1].gr[gr].maxb > maxb)
+            maxb = mpa->sideinfo.ch[1].gr[gr].maxb;
+          for (i = 0; i < SSLIMIT*maxb; i++) {
+            register MYFLT tmp0 = in0[i];
+            register MYFLT tmp1 = in1[i];
+            in0[i] = tmp0 + tmp1;
+            in1[i] = tmp0 - tmp1;
+          }
+        }
+        if (i_stereo) III_i_stereo(mpa, grinfo, mpa->hybrid_in, scalefacs[1]);
+        if (i_stereo || ms_stereo || !single) {
+          if (grinfo->maxb > mpa->sideinfo.ch[0].gr[gr].maxb)
+            mpa->sideinfo.ch[0].gr[gr].maxb = grinfo->maxb;
+          else grinfo->maxb = mpa->sideinfo.ch[0].gr[gr].maxb;
+        }
+        if (!single) {
+          register unsigned i;
+          MYFLT *in0 = (MYFLT *)(mpa->hybrid_in[0]), 
+                *in1 = (MYFLT *)(mpa->hybrid_in[1]);
+          for (i = 0; i < SSLIMIT*grinfo->maxb; i++, in0++)
+            *in0 = (*in0 + *in1++);
+        } else if (single == 2) {
+          register unsigned i;
+          MYFLT *in0 = (MYFLT *)(mpa->hybrid_in[0]), 
+                *in1 = (MYFLT *)(mpa->hybrid_in[1]);
+          for (i = 0; i < SSLIMIT*grinfo->maxb; i++, in0++) *in0 = *in1++;
+        }
+      }
+      for (ch = 0; ch < channels; ch++) {
+        grinfo = &mpa->sideinfo.ch[ch].gr[gr];
+        III_antialias(grinfo, mpa->hybrid_in[ch]);
+        III_hybrid(mpa, grinfo, mpa->hybrid_in[ch], mpa->hybrid_out[ch], ch);
+      }
+      if (single < 0) {
+        for (ss = 0; ss < SSLIMIT; ss++, buffer += mpa->synth_size) {
+          mpa->synth_func(mpa, mpa->hybrid_out[0][ss], 0, buffer);
+          mpa->synth_func(mpa, mpa->hybrid_out[1][ss], 1, buffer);
+        }
+      } else {
+        for (ss = 0; ss < SSLIMIT; ss++, buffer += mpa->synth_size) {
+          mpa->synth_func(mpa, mpa->hybrid_out[0][ss], 0, buffer);
+        }
+      }
+    }
+ done:
+    {
+      register unsigned n = mpa->bits_left >> 3;
+      mpa->next_byte -= n;
+      mpa->bytes_left += n;
+      if (saved_next_byte) {
+        uint32_t tmp = mpa->frame.frame_size - mpa->hsize - mpa->ssize;
+        if (mpa->bytes_left) {
+          if (mpa->bytes_left > 512) {
+            mpa->next_byte += mpa->bytes_left - 512;
+            mpa->bytes_left = 512;
+          }
+          memmove(mpa->reservoir, mpa->next_byte, mpa->bytes_left);
+          mpa->reservoir_size = mpa->bytes_left;
+        } else mpa->reservoir_size = 0;
+        mpa->next_byte = saved_next_byte + tmp;
+        mpa->bytes_left = saved_bytes_left - tmp;
+      } else {
+        uint32_t tmp = mpa->frame.frame_size - mpa->hsize - mpa->ssize;
+        mpa->reservoir_size = 0;
+        if (tmp > (saved_bytes_left - mpa->bytes_left)) {
+          tmp -= saved_bytes_left - mpa->bytes_left;
+          if (tmp > 512) {
+            mpa->next_byte += tmp - 512;
+            mpa->bytes_left -= tmp - 512;
+            tmp = 512;
+          }
+          memcpy(mpa->reservoir, mpa->next_byte, tmp);
+          mpa->reservoir_size = tmp;
+          mpa->next_byte += tmp;
+          mpa->bytes_left -= tmp;
+        }
+      }
+    }
+}
+
diff --git a/InOut/libmpadec/mp3dec.c b/InOut/libmpadec/mp3dec.c
new file mode 100644
index 0000000..ee3d577
--- /dev/null
+++ b/InOut/libmpadec/mp3dec.c
@@ -0,0 +1,342 @@
+/*
+ *  mpadec - MPEG audio decoder
+ *  Copyright (C) 2002-2004 Dmitriy Startsev (dstartsev at rambler.ru)
+ *
+ *  This library is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU Lesser General Public
+ *  License as published by the Free Software Foundation; either
+ *  version 2.1 of the License, or (at your option) any later version.
+ *
+ *  This library 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
+ *  Lesser General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Lesser General Public
+ *  License along with this library; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+/* $Id: mp3dec.c,v 1.6 2009/03/01 15:27:05 jpff Exp $ */
+
+#include "csoundCore.h"
+#include "mp3dec_internal.h"
+
+mp3dec_t mp3dec_init(void)
+{
+    register struct mp3dec_t *mp3 =
+      (struct mp3dec_t *)malloc(sizeof(struct mp3dec_t));
+
+    if (!mp3) return NULL;
+    memset(mp3, 0, sizeof(struct mp3dec_t));
+    mp3->size = sizeof(struct mp3dec_t);
+    mp3->fd = -1;
+    mp3->mpadec = mpadec_init();
+    if (!mp3->mpadec) {
+      free(mp3);
+      return NULL;
+    }
+    return mp3;
+}
+
+int mp3dec_init_file(mp3dec_t mp3dec, int fd, int64_t length, int nogap)
+{
+    register struct mp3dec_t *mp3 = (struct mp3dec_t *)mp3dec;
+    int64_t tmp; int r;
+
+    if (!mp3 || (mp3->size != sizeof(struct mp3dec_t)) || !mp3->mpadec)
+      return MP3DEC_RETCODE_INVALID_HANDLE;
+    if (fd < 0) {
+      mp3dec_reset(mp3);
+      return MP3DEC_RETCODE_INVALID_PARAMETERS;
+    }
+    if (mp3->flags & MP3DEC_FLAG_INITIALIZED) close(mp3->fd);
+    mp3->fd = fd;
+    mp3->flags = MP3DEC_FLAG_SEEKABLE;
+    mp3->stream_offset = mp3->stream_size = mp3->stream_position = 0;
+    mp3->in_buffer_offset = mp3->in_buffer_used = 0;
+    mp3->out_buffer_offset = mp3->out_buffer_used = 0;
+    tmp = lseek(fd, 0, SEEK_CUR);
+    if (tmp >= 0) mp3->stream_offset = tmp; 
+    else mp3->flags &= ~MP3DEC_FLAG_SEEKABLE;
+    if (mp3->flags & MP3DEC_FLAG_SEEKABLE) {
+      tmp = lseek(fd, 0, SEEK_END);
+      if (tmp >= 0) {
+        mp3->stream_size = tmp;
+        lseek(fd, mp3->stream_offset, SEEK_SET);
+      } else mp3->flags &= ~MP3DEC_FLAG_SEEKABLE;
+    }
+    if (mp3->stream_size > mp3->stream_offset) {
+      mp3->stream_size -= mp3->stream_offset;
+      if (length && (length < mp3->stream_size)) mp3->stream_size = length;
+    } else mp3->stream_size = length;
+    r = read(fd, mp3->in_buffer, 4);
+    if (r < 4) {
+      mp3dec_reset(mp3);
+      return ((r < 0) ? MP3DEC_RETCODE_INVALID_PARAMETERS :
+              MP3DEC_RETCODE_NOT_MPEG_STREAM);
+    } else mp3->in_buffer_used = r;
+    if (mp3->flags & MP3DEC_FLAG_SEEKABLE)
+      tmp = lseek(fd, mp3->stream_offset, SEEK_SET); else tmp = -1;
+    if (tmp < 0) {
+      int32_t n = sizeof(mp3->in_buffer) - mp3->in_buffer_used;
+      mp3->flags &= ~MP3DEC_FLAG_SEEKABLE;
+      if (mp3->stream_size && (n > (mp3->stream_size - mp3->in_buffer_used)))
+        n = (int32_t)(mp3->stream_size - mp3->in_buffer_used);
+      n = read(fd, mp3->in_buffer + mp3->in_buffer_used, n);
+      if (n < 0) n = 0;
+      mp3->in_buffer_used += n;
+      mp3->stream_position = mp3->in_buffer_used;
+    } else {
+      int32_t n = sizeof(mp3->in_buffer);
+      if (mp3->stream_size && (n > mp3->stream_size)) n = (int32_t)mp3->stream_size;
+      n = read(fd, mp3->in_buffer, n);
+      if (n < 0) n = 0;
+      mp3->stream_position = mp3->in_buffer_used = n;
+    }
+    if (mp3->in_buffer_used < 4) {
+      mp3dec_reset(mp3);
+      return MP3DEC_RETCODE_NOT_MPEG_STREAM;
+    }
+    if (nogap) {
+      mpadec_decode(mp3->mpadec, mp3->in_buffer, mp3->in_buffer_used,
+                    mp3->out_buffer, sizeof(mp3->out_buffer),
+                    &mp3->in_buffer_offset, &mp3->out_buffer_used);
+      mp3->in_buffer_used -= mp3->in_buffer_offset;
+      if (!mp3->out_buffer_used) {
+        mpadec_reset(mp3->mpadec);
+        mp3->in_buffer_used += mp3->in_buffer_offset;
+        mp3->in_buffer_offset = 0;
+      }
+    } else mpadec_reset(mp3->mpadec);
+    if (!mp3->out_buffer_used) {
+      r = mpadec_decode(mp3->mpadec, mp3->in_buffer, mp3->in_buffer_used,
+                        NULL, 0, &mp3->in_buffer_offset, NULL);
+      mp3->in_buffer_used -= mp3->in_buffer_offset;
+      if (r != MPADEC_RETCODE_OK) {
+        mp3dec_reset(mp3);
+        return MP3DEC_RETCODE_NOT_MPEG_STREAM;
+      }
+    }
+    if ((mpadec_get_info(mp3->mpadec, &mp3->mpainfo,
+                         MPADEC_INFO_STREAM) != MPADEC_RETCODE_OK) ||
+        (mpadec_get_info(mp3->mpadec, &mp3->taginfo,
+                         MPADEC_INFO_TAG) != MPADEC_RETCODE_OK)) {
+      mp3dec_reset(mp3);
+      return MP3DEC_RETCODE_NOT_MPEG_STREAM;
+    }
+    if (mp3->taginfo.flags & 2) 
+      if (!mp3->stream_size || (mp3->stream_size > mp3->taginfo.bytes)) 
+        mp3->stream_size = mp3->taginfo.bytes;
+    if (mp3->taginfo.flags & 1) {
+      mp3->mpainfo.frames = mp3->taginfo.frames;
+      if (mp3->mpainfo.frames && mp3->mpainfo.frame_samples) {
+        mp3->mpainfo.bitrate = (int32_t)
+          ((MYFLT)(((MYFLT)mp3->stream_size*(MYFLT)mp3->mpainfo.frequency + 0.5)/
+                   ((MYFLT)125.0*mp3->mpainfo.frame_samples*mp3->mpainfo.frames)));
+      }
+    } else if (mp3->mpainfo.bitrate && mp3->mpainfo.frame_samples) {
+      mp3->mpainfo.frames = (int32_t)
+        ((MYFLT)(((MYFLT)mp3->stream_size*(MYFLT)mp3->mpainfo.frequency + 0.5)/
+                 ((MYFLT)125.0*mp3->mpainfo.frame_samples*mp3->mpainfo.bitrate)));
+    }
+    mp3->mpainfo.duration =
+      (mp3->mpainfo.frames*mp3->mpainfo.frame_samples +
+       (mp3->mpainfo.frequency >> 1))/mp3->mpainfo.frequency;
+    mp3->flags |= MP3DEC_FLAG_INITIALIZED;
+    return MP3DEC_RETCODE_OK;
+}
+
+int mp3dec_uninit(mp3dec_t mp3dec)
+{
+    register struct mp3dec_t *mp3 = (struct mp3dec_t *)mp3dec;
+
+    if (!mp3 || (mp3->size != sizeof(struct mp3dec_t)) || !mp3->mpadec)
+      return MP3DEC_RETCODE_INVALID_HANDLE;
+    if (mp3->flags & MP3DEC_FLAG_INITIALIZED) close(mp3->fd);
+    mp3->fd = -1;
+    mp3->flags = 0;
+    mpadec_uninit(mp3->mpadec);
+    mp3->size = 0;
+    return MP3DEC_RETCODE_OK;
+}
+
+int mp3dec_reset(mp3dec_t mp3dec)
+{
+    register struct mp3dec_t *mp3 = (struct mp3dec_t *)mp3dec;
+
+    if (!mp3 || (mp3->size != sizeof(struct mp3dec_t)) || !mp3->mpadec)
+      return MP3DEC_RETCODE_INVALID_HANDLE;
+    if (mp3->flags & MP3DEC_FLAG_INITIALIZED) close(mp3->fd);
+    mp3->fd = -1;
+    mp3->flags = 0;
+    mpadec_reset(mp3->mpadec);
+    mp3->stream_offset = mp3->stream_size = mp3->stream_position = 0;
+    mp3->in_buffer_offset = mp3->in_buffer_used = 0;
+    mp3->out_buffer_offset = mp3->out_buffer_used = 0;
+    memset(&mp3->mpainfo, 0, sizeof(mp3->mpainfo));
+    memset(&mp3->taginfo, 0, sizeof(mp3->taginfo));
+    return MP3DEC_RETCODE_OK;
+}
+
+int mp3dec_configure(mp3dec_t mp3dec, mpadec_config_t *cfg)
+{
+    register struct mp3dec_t *mp3 = (struct mp3dec_t *)mp3dec;
+
+    if (!mp3 || (mp3->size != sizeof(struct mp3dec_t)) || !mp3->mpadec)
+      return MP3DEC_RETCODE_INVALID_HANDLE;
+    mp3->out_buffer_offset = mp3->out_buffer_used = 0;
+    if (mpadec_configure(mp3->mpadec, cfg) != MPADEC_RETCODE_OK)
+      return MP3DEC_RETCODE_INVALID_PARAMETERS;
+    return MP3DEC_RETCODE_OK;
+}
+
+int mp3dec_get_info(mp3dec_t mp3dec, void *info, int info_type)
+{
+    register struct mp3dec_t *mp3 = (struct mp3dec_t *)mp3dec;
+
+    if (!mp3 || (mp3->size != sizeof(struct mp3dec_t)) || !mp3->mpadec)
+      return MP3DEC_RETCODE_INVALID_HANDLE;
+    if (!info) return MP3DEC_RETCODE_INVALID_PARAMETERS;
+    if (mp3->flags & MP3DEC_FLAG_INITIALIZED) {
+      switch (info_type) {
+      case MPADEC_INFO_STREAM:
+        memcpy(info, &mp3->mpainfo, sizeof(mp3->mpainfo)); break;
+      case MPADEC_INFO_TAG:
+        memcpy(info, &mp3->taginfo, sizeof(mp3->taginfo)); break;
+      case MPADEC_INFO_CONFIG:
+      default:
+        if (mpadec_get_info(mp3->mpadec, info, info_type) != MPADEC_RETCODE_OK) 
+          return MP3DEC_RETCODE_INVALID_PARAMETERS;
+      }
+    } else return MP3DEC_RETCODE_BAD_STATE;
+    return MP3DEC_RETCODE_OK;
+}
+
+int mp3dec_decode(mp3dec_t mp3dec, uint8_t *buf, uint32_t bufsize, uint32_t *used)
+{
+    register struct mp3dec_t *mp3 = (struct mp3dec_t *)mp3dec;
+    uint32_t n, src_used, dst_used; int r;
+
+    if (used) *used = 0;
+    if (!mp3 || (mp3->size != sizeof(struct mp3dec_t)) || !mp3->mpadec)
+      return MP3DEC_RETCODE_INVALID_HANDLE;
+    if (!(mp3->flags & MP3DEC_FLAG_INITIALIZED)) return MP3DEC_RETCODE_BAD_STATE;
+    if (!buf) return MP3DEC_RETCODE_INVALID_PARAMETERS;
+    while (bufsize) {
+      if (mp3->out_buffer_used) {
+        n = (bufsize < mp3->out_buffer_used) ? bufsize : mp3->out_buffer_used;
+        memcpy(buf, mp3->out_buffer + mp3->out_buffer_offset, n);
+        mp3->out_buffer_offset += n;
+        mp3->out_buffer_used -= n;
+        buf += n;
+        bufsize -= n;
+        if (used) *used += n;
+      }
+      if (!bufsize) break;
+      if (mp3->in_buffer_used > 4) {
+        r = mpadec_decode(mp3->mpadec, mp3->in_buffer + mp3->in_buffer_offset,
+                          mp3->in_buffer_used, buf, bufsize, &src_used, &dst_used);
+        mp3->in_buffer_offset += src_used;
+        mp3->in_buffer_used -= src_used;
+        buf += dst_used;
+        bufsize -= dst_used;
+        if (used) *used += dst_used;
+        if (!bufsize) break;
+        if (r == MPADEC_RETCODE_BUFFER_TOO_SMALL) {
+          mp3->out_buffer_offset = mp3->out_buffer_used = 0;
+          mpadec_decode(mp3->mpadec, mp3->in_buffer + mp3->in_buffer_offset,
+                        mp3->in_buffer_used, mp3->out_buffer,
+                        sizeof(mp3->out_buffer), &src_used, &mp3->out_buffer_used);
+          mp3->in_buffer_offset += src_used;
+          mp3->in_buffer_used -= src_used;
+          continue;
+        }
+      }
+      if (mp3->in_buffer_used && mp3->in_buffer_offset)
+        memmove(mp3->in_buffer, mp3->in_buffer + mp3->in_buffer_offset,
+                mp3->in_buffer_used);
+      mp3->in_buffer_offset = 0;
+      n = sizeof(mp3->in_buffer) - mp3->in_buffer_used;
+      if (mp3->stream_size && (n > (mp3->stream_size - mp3->stream_position)))
+        n = (int32_t)(mp3->stream_size - mp3->stream_position);
+      if (n) r = read(mp3->fd, mp3->in_buffer + mp3->in_buffer_used, n);
+      else r = 0;
+      if (r < 0) r = 0;
+      mp3->in_buffer_used += r;
+      mp3->stream_position += r;
+      if (mp3->stream_position > mp3->stream_size)
+        mp3->stream_position = mp3->stream_size;
+      if (!r) break;
+    }
+    return MP3DEC_RETCODE_OK;
+}
+
+int mp3dec_seek(mp3dec_t mp3dec, int64_t pos, int units)
+{
+    register struct mp3dec_t *mp3 = (struct mp3dec_t *)mp3dec;
+    int64_t newpos;
+
+    if (!mp3 || (mp3->size != sizeof(struct mp3dec_t)) || !mp3->mpadec)
+      return MP3DEC_RETCODE_INVALID_HANDLE;
+    if (!(mp3->flags & MP3DEC_FLAG_INITIALIZED)) return MP3DEC_RETCODE_BAD_STATE;
+    if (!(mp3->flags & MP3DEC_FLAG_SEEKABLE)) return MP3DEC_RETCODE_SEEK_FAILED;
+    if (units == MP3DEC_SEEK_BYTES) {
+      newpos = (pos < mp3->stream_size) ? pos : mp3->stream_size;
+      newpos = lseek(mp3->fd, mp3->stream_offset + newpos, SEEK_SET);
+      if (newpos < 0) return MP3DEC_RETCODE_SEEK_FAILED;
+      mp3->stream_position = newpos - mp3->stream_offset;
+      mp3->in_buffer_offset = mp3->in_buffer_used = 0;
+      mp3->out_buffer_offset = mp3->out_buffer_used = 0;
+    } else if (units == MP3DEC_SEEK_SAMPLES) {
+      MYFLT fsize =
+        (MYFLT)(125.0*mp3->mpainfo.bitrate*mp3->mpainfo.decoded_frame_samples)/
+        (MYFLT)mp3->mpainfo.decoded_frequency;
+      newpos = (int64_t)
+        ((MYFLT)pos*fsize/(MYFLT)mp3->mpainfo.decoded_frame_samples);
+      if (newpos > mp3->stream_size) newpos = mp3->stream_size;
+      pos = (pos%mp3->mpainfo.decoded_frame_samples)*
+        mp3->mpainfo.decoded_sample_size;
+      newpos = lseek(mp3->fd, mp3->stream_offset + newpos, SEEK_SET);
+      if (newpos < 0) return MP3DEC_RETCODE_SEEK_FAILED;
+      mp3->stream_position = newpos - mp3->stream_offset;
+      mp3->in_buffer_offset = mp3->in_buffer_used = 0;
+      mp3->out_buffer_offset = mp3->out_buffer_used = 0;
+      {
+        uint8_t temp[8*1152];
+        mp3dec_decode(mp3, temp, (uint32_t)pos, NULL);
+      }
+    } else if (units == MP3DEC_SEEK_SECONDS) {
+      if (pos > mp3->mpainfo.duration) pos = mp3->mpainfo.duration;
+      if (mp3->taginfo.flags & 4) {
+        int32_t n = (int32_t)((100*pos + (mp3->mpainfo.duration >> 1))/
+                              mp3->mpainfo.duration);
+        if (n > 99) newpos = mp3->stream_size;
+        else newpos = (mp3->taginfo.toc[n]*mp3->stream_size)/255;
+      } 
+      else newpos = 
+             (pos*mp3->stream_size + (mp3->mpainfo.duration >> 1))/
+             mp3->mpainfo.duration;
+      if (newpos > mp3->stream_size) newpos = mp3->stream_size;
+      newpos = lseek(mp3->fd, mp3->stream_offset + newpos, SEEK_SET);
+      if (newpos < 0) return MP3DEC_RETCODE_SEEK_FAILED;
+      mp3->stream_position = newpos - mp3->stream_offset;
+      mp3->in_buffer_offset = mp3->in_buffer_used = 0;
+      mp3->out_buffer_offset = mp3->out_buffer_used = 0;
+    } else return MP3DEC_RETCODE_INVALID_PARAMETERS;
+    return MP3DEC_RETCODE_OK;
+}
+
+char *mp3dec_error(int code)
+{
+    static char *mp3_errors[] = { "No error",
+                                  "Invalid handle",
+                                  "Bad decoder state",
+                                  "Invalid parameters",
+                                  "Not an MPEG audio stream",
+                                  "Seek failed",
+                                  "Unknown error" };
+    if (code > MP3DEC_RETCODE_UNKNOWN) code = MP3DEC_RETCODE_UNKNOWN;
+    return mp3_errors[code];
+}
+
diff --git a/InOut/libmpadec/mp3dec_internal.h b/InOut/libmpadec/mp3dec_internal.h
new file mode 100644
index 0000000..12fdede
--- /dev/null
+++ b/InOut/libmpadec/mp3dec_internal.h
@@ -0,0 +1,50 @@
+/*
+ *  mpadec - MPEG audio decoder
+ *  Copyright (C) 2002-2004 Dmitriy Startsev (dstartsev at rambler.ru)
+ *
+ *  This library is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU Lesser General Public
+ *  License as published by the Free Software Foundation; either
+ *  version 2.1 of the License, or (at your option) any later version.
+ *
+ *  This library 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
+ *  Lesser General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Lesser General Public
+ *  License along with this library; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+/* $Id: mp3dec_internal.h,v 1.2 2004/08/02 09:38:09 metal_man Exp $ */
+
+#ifndef __MP3DEC_INTERNAL_H
+#define __MP3DEC_INTERNAL_H
+
+#include "mpadec_config.h"
+#include "mp3dec.h"
+
+#define MP3DEC_FLAG_INITIALIZED 1
+#define MP3DEC_FLAG_SEEKABLE    2
+
+struct mp3dec_t {
+  uint32_t size;
+  mpadec_t mpadec;
+  int32_t fd;
+  uint32_t flags;
+  int64_t stream_offset;
+  int64_t stream_size;
+  int64_t stream_position;
+  mpadec_info_t mpainfo;
+  mp3tag_info_t taginfo;
+  uint32_t in_buffer_offset;
+  uint32_t in_buffer_used;
+  uint32_t out_buffer_offset;
+  uint32_t out_buffer_used;
+  uint8_t in_buffer[0x10000];
+  uint8_t out_buffer[8*1152];
+};
+
+#endif
+
diff --git a/InOut/libmpadec/mpadec.c b/InOut/libmpadec/mpadec.c
new file mode 100644
index 0000000..a305f67
--- /dev/null
+++ b/InOut/libmpadec/mpadec.c
@@ -0,0 +1,795 @@
+/*
+ *  mpadec - MPEG audio decoder
+ *  Copyright (C) 2002-2004 Dmitriy Startsev (dstartsev at rambler.ru)
+ *
+ *  This library is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU Lesser General Public
+ *  License as published by the Free Software Foundation; either
+ *  version 2.1 of the License, or (at your option) any later version.
+ *
+ *  This library 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
+ *  Lesser General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Lesser General Public
+ *  License along with this library; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+/* $Id: mpadec.c,v 1.3 2009/03/01 15:27:05 jpff Exp $ */
+
+#include <stdlib.h>
+#include "csoundCore.h"
+#include "mpadec_internal.h"
+
+extern const uint16_t crc_table[256];
+extern void *synth_table[2][2][4][4];
+
+const uint32_t bitmask[17] = { 0x0000, 0x0001, 0x0003, 0x0007, 0x000F, 0x001F, 0x003F, 0x007F,
+                               0x00FF, 0x01FF, 0x03FF, 0x07FF, 0x0FFF, 0x1FFF, 0x3FFF, 0x7FFF, 0xFFFF };
+
+const int32_t frequency_table[9] = { 44100, 48000, 32000, 22050, 24000, 16000, 11025, 12000, 8000 };
+
+const int16_t bitrate_table[2][3][16] = {
+  { { 0, 32, 64, 96, 128, 160, 192, 224, 256, 288, 320, 352, 384, 416, 448, 560 },
+    { 0, 32, 48, 56,  64,  80,  96, 112, 128, 160, 192, 224, 256, 320, 384, 448 },
+    { 0, 32, 40, 48,  56,  64,  80,  96, 112, 128, 160, 192, 224, 256, 320, 384 } },
+  { { 0, 32, 48, 56, 64, 80, 96, 112, 128, 144, 160, 176, 192, 224, 256, 320 },
+    { 0,  8, 16, 24, 32, 40, 48,  56,  64,  80,  96, 112, 128, 144, 160, 192 },
+    { 0,  8, 16, 24, 32, 40, 48,  56,  64,  80,  96, 112, 128, 144, 160, 192 } }
+};
+
+extern void init_tables(mpadec_t mpadec, MYFLT scale, int32_t sblimit);
+extern void decode_layer1(mpadec_t mpadec, uint8_t *buffer);
+extern void decode_layer2(mpadec_t mpadec, uint8_t *buffer);
+extern void decode_layer3(mpadec_t mpadec, uint8_t *buffer);
+
+uint32_t getbits(mpadec_t mpadec, unsigned n)
+{
+  register struct mpadec_t *mpa = (struct mpadec_t *)mpadec;
+
+  while ((mpa->bits_left <= 24) && mpa->bytes_left) {
+    mpa->bit_buffer = (mpa->bit_buffer << 8) | *mpa->next_byte++;
+    mpa->bits_left += (uint8_t)8;
+    mpa->bytes_left--;
+  }
+  while (mpa->bits_left <= 24) {
+    mpa->bit_buffer = (mpa->bit_buffer << 8);
+    mpa->bits_left += (uint8_t)8;
+  }
+  mpa->bits_left -= (uint8_t)n;
+  return (mpa->bit_buffer >> mpa->bits_left) & bitmask[n];
+}
+
+uint16_t update_crc(uint16_t init, uint8_t *buf, int length)
+{
+  register uint32_t crc = (uint32_t)init, tmp;
+  register int l = length;
+  register uint8_t *b = buf;
+
+  for (; l >= 8; l -= 8) crc = (crc << 8) ^ crc_table[((crc >> 8) ^ (*b++)) & 0xFF];
+  tmp = (uint32_t)(*b) << 8;
+  while (l--) {
+    tmp <<= 1;
+    crc <<= 1;
+    if ((crc ^ tmp) & 0x10000) crc ^= 0x8005;
+  }
+  return (uint16_t)crc;
+}
+
+static uint32_t detect_frame_size(mpadec_t mpadec)
+{
+  register struct mpadec_t *mpa = (struct mpadec_t *)mpadec;
+  register uint8_t *buf = mpa->next_byte;
+  uint32_t i = mpa->bytes_left, hdr = 0;
+
+  if (i < (mpa->frame.frame_size + 4)) return 0;
+  buf += mpa->frame.frame_size;
+  i -= mpa->frame.frame_size;
+  while (i >= 4) {
+    register uint32_t tmp = (buf[0] << 24) | (buf[1] << 16) | (buf[2] << 8) | buf[3];
+    if (((tmp & 0xFFE00000) == 0xFFE00000) && (tmp & (3 << 17)) && ((tmp & (3 << 10)) != (3 << 10))) {
+      if ((mpa->frame.layer == (uint8_t)(4 - ((tmp >> 17) & 3))) &&
+          (mpa->frame.frequency_index == (((tmp >> 10) & 3) + 3*(mpa->frame.LSF + mpa->frame.MPEG25))) &&
+          (mpa->frame.channels == ((((tmp >> 6) & 3) == MPG_MD_MONO) ? 1 : 2))) {
+        if (mpa->config.dblsync) {
+          uint32_t fs = mpa->bytes_left - i - mpa->frame.padding + ((tmp >> 9) & 1);
+          if (i >= (fs + 4)) {
+            buf += fs;
+            tmp = (buf[0] << 24) | (buf[1] << 16) | (buf[2] << 8) | buf[3];
+            buf -= fs;
+            if (((tmp & 0xFFE00000) == 0xFFE00000) && (tmp & (3 << 17)) && ((tmp & (3 << 10)) != (3 << 10))) {
+              if ((mpa->frame.layer == (uint8_t)(4 - ((tmp >> 17) & 3))) &&
+                  (mpa->frame.frequency_index == (((tmp >> 10) & 3) + 3*(mpa->frame.LSF + mpa->frame.MPEG25))) &&
+                  (mpa->frame.channels == ((((tmp >> 6) & 3) == MPG_MD_MONO) ? 1 : 2))) {
+                hdr = tmp;
+                break;
+              }
+            }
+          } else return 0;
+        } else {
+          hdr = tmp;
+          break;
+        }
+      }
+    }
+    buf++; i--;
+  }
+  return (hdr ? (mpa->bytes_left - i) : 0);
+}
+
+static int decode_header(mpadec_t mpadec, uint32_t header)
+{
+  register struct mpadec_t *mpa = (struct mpadec_t *)mpadec;
+  unsigned int layer, bridx, fridx;
+
+  layer = 4 - ((header >> 17) & 3);
+  bridx = ((header >> 12) & 0x0F);
+  fridx = ((header >> 10) & 3);
+  if ((fridx == 3) || (layer == 4) || ((layer != 3) && !bridx)) return FALSE;
+  if (header & (1 << 20)) {
+    mpa->frame.LSF = (uint8_t)((header & (1 << 19)) ? FALSE : TRUE);
+    mpa->frame.MPEG25 = FALSE;
+  } else mpa->frame.LSF = mpa->frame.MPEG25 = TRUE;
+  mpa->frame.layer = (uint8_t)layer;
+  mpa->frame.bitrate_index = bridx;
+  mpa->frame.bitrate = bitrate_table[mpa->frame.LSF][layer - 1][bridx];
+  mpa->frame.frequency_index = (fridx += 3*(mpa->frame.LSF + mpa->frame.MPEG25));
+  mpa->frame.frequency = frequency_table[fridx];
+  mpa->frame.decoded_frequency = mpa->frame.frequency >> mpa->config.quality;
+  mpa->frame.CRC = (uint8_t)(((header >> 16) & 1) ^ 1);
+  mpa->frame.padding = ((header >> 9) & 1);
+  mpa->frame.extension = (uint8_t)((header >> 8) & 1);
+  mpa->frame.mode = (uint8_t)((header >> 6) & 3);
+  mpa->frame.mode_ext = (uint8_t)((header >> 4) & 3);
+  mpa->frame.copyright = (uint8_t)((header >> 3) & 1);
+  mpa->frame.original = (uint8_t)((header >> 2) & 1);
+  mpa->frame.emphasis = (uint8_t)(header & 3);
+  mpa->frame.channels = (uint8_t)((mpa->frame.mode == MPG_MD_MONO) ? 1 : 2);
+  switch (mpa->config.mode) {
+    case MPADEC_CONFIG_CHANNEL1:
+    case MPADEC_CONFIG_CHANNEL2:
+    case MPADEC_CONFIG_MONO:     mpa->frame.decoded_channels = 1; break;
+    case MPADEC_CONFIG_STEREO:   mpa->frame.decoded_channels = 2; break;
+    default:                     mpa->frame.decoded_channels = mpa->frame.channels;
+  }
+  mpa->free_format = FALSE;
+  switch (mpa->frame.layer) {
+    case 1: mpa->frame.frame_samples = 384;
+            mpa->frame.frame_size = (12000*mpa->frame.bitrate/mpa->frame.frequency + mpa->frame.padding) << 2;
+            mpa->ssize = 0;
+            break;
+    case 2: mpa->frame.frame_samples = 1152;
+            mpa->frame.frame_size = 144000*mpa->frame.bitrate/mpa->frame.frequency + mpa->frame.padding;
+            mpa->ssize = 0;
+            break;
+    case 3: mpa->frame.frame_samples = 1152 >> mpa->frame.LSF;
+            if (mpa->frame.LSF) mpa->ssize = (mpa->frame.channels > 1) ? 17 : 9;
+            else mpa->ssize = (mpa->frame.channels > 1) ? 32 : 17;
+            if (mpa->frame.bitrate_index) {
+              mpa->frame.frame_size = 144000*mpa->frame.bitrate/(mpa->frame.frequency << mpa->frame.LSF) + mpa->frame.padding;
+              mpa->prev_frame_size = 0;
+            } else {
+              register uint32_t div = 125*mpa->frame.frame_samples;
+              if (!mpa->prev_frame_size) {
+                mpa->frame.frame_size = (mpa->frame.CRC ? 6 : 4) + mpa->ssize + mpa->frame.padding;
+                mpa->prev_frame_size = detect_frame_size(mpa);
+                if (mpa->prev_frame_size) mpa->prev_frame_size -= mpa->frame.padding;
+              }
+              mpa->frame.frame_size = mpa->prev_frame_size + mpa->frame.padding;
+              mpa->frame.bitrate = (mpa->frame.frame_size*mpa->frame.frequency + (div >> 1))/div;
+              mpa->free_format = TRUE;
+            }
+            break;
+  }
+  mpa->frame.decoded_samples = mpa->frame.frame_samples >> mpa->config.quality;
+  mpa->frame.downsample = FALSE;
+  mpa->frame.downsample_sblimit = SBLIMIT;
+  mpa->frame.decoded_size = mpa->frame.decoded_samples*mpa->frame.decoded_channels;
+  switch (mpa->config.format) {
+    case MPADEC_CONFIG_24BIT: mpa->frame.decoded_size *= 3; break;
+    case MPADEC_CONFIG_32BIT:
+    case MPADEC_CONFIG_FLOAT: mpa->frame.decoded_size <<= 2; break;
+    default:                  mpa->frame.decoded_size <<= 1; break;
+  }
+  mpa->hsize = mpa->frame.CRC ? 6 : 4;
+  if (mpa->frame.frame_size < (mpa->hsize + mpa->ssize)) mpa->frame.frame_size = mpa->hsize + mpa->ssize;
+  mpa->dsize = mpa->frame.frame_size - (mpa->hsize + mpa->ssize);
+  return TRUE;
+}
+
+static uint32_t sync_buffer(mpadec_t mpadec)
+{
+  register struct mpadec_t *mpa = (struct mpadec_t *)mpadec;
+  register uint8_t *buf = mpa->next_byte;
+  uint32_t retval = 0, i = mpa->bytes_left;
+
+  if (mpa->state == MPADEC_STATE_START) {
+    while (i >= 4) {
+      register uint32_t tmp = (buf[0] << 24) | (buf[1] << 16) | (buf[2] << 8) | buf[3];
+      if (((tmp & 0xFFE00000) == 0xFFE00000) && (tmp & (3 << 17)) && ((tmp & (3 << 10)) != (3 << 10))) {
+        if (mpa->config.dblsync) {
+          if (decode_header(mpa, tmp)) {
+            if ((i < (mpa->frame.frame_size + 4)) || (mpa->free_format && !mpa->prev_frame_size)) break;
+            else {
+              register uint32_t tmp2 = (buf[mpa->frame.frame_size] << 24) | (buf[mpa->frame.frame_size + 1] << 16) | (buf[mpa->frame.frame_size + 2] << 8) | buf[mpa->frame.frame_size + 3];
+              if (((tmp2 & 0xFFE00000) == 0xFFE00000) && (tmp2 & (3 << 17)) && ((tmp2 & (3 << 10)) != (3 << 10))) {
+                if ((mpa->frame.layer == (uint8_t)(4 - ((tmp2 >> 17) & 3))) &&
+                    (mpa->frame.frequency_index == (((tmp2 >> 10) & 3) + 3*(mpa->frame.LSF + mpa->frame.MPEG25))) &&
+                    (mpa->frame.channels == ((((tmp2 >> 6) & 3) == MPG_MD_MONO) ? 1 : 2))) {
+                  retval = tmp;
+                  break;
+                }
+              }
+            }
+          }
+        } else {
+          retval = tmp;
+          break;
+        }
+      }
+      buf++; i--;
+    }
+  } else {
+    while (i >= 4) {
+      register uint32_t tmp = (buf[0] << 24) | (buf[1] << 16) | (buf[2] << 8) | buf[3];
+      if (((tmp & 0xFFE00000) == 0xFFE00000) && (tmp & (3 << 17)) && ((tmp & (3 << 10)) != (3 << 10))) {
+        if ((mpa->frame.layer == (uint8_t)(4 - ((tmp >> 17) & 3))) &&
+            (mpa->frame.frequency_index == (((tmp >> 10) & 3) + 3*(mpa->frame.LSF + mpa->frame.MPEG25))) &&
+            (mpa->frame.channels == ((((tmp >> 6) & 3) == MPG_MD_MONO) ? 1 : 2))) {
+          retval = tmp;
+          break;
+        }
+      }
+      buf++; i--;
+    }
+  }
+  if (i < mpa->bytes_left) {
+    i = mpa->bytes_left - i;
+    mpa->next_byte = buf;;
+    mpa->bytes_left -= i;
+    if (i >= 512) {
+      mpa->reservoir_size = 0;
+      i = 512;
+    }
+    memcpy(mpa->reservoir + mpa->reservoir_size, mpa->next_byte - i, i);
+    mpa->reservoir_size += i;
+  }
+  return retval;
+}
+
+static int first_frame(mpadec_t mpadec)
+{
+  register struct mpadec_t *mpa = (struct mpadec_t *)mpadec;
+  int i, skip = FALSE;
+  uint32_t framesize; MYFLT scale;
+
+  if (mpa->frame.channels > 1) i = ((mpa->config.mode == MPADEC_CONFIG_STEREO) || (mpa->config.mode == MPADEC_CONFIG_AUTO)) ? 3 : 2;
+  else i = (mpa->config.mode == MPADEC_CONFIG_STEREO) ? 1 : 0;
+  mpa->synth_func = synth_table[mpa->config.quality][mpa->config.endian][mpa->config.format][i];
+  mpa->sample_size = mpa->frame.decoded_channels;
+  switch (mpa->config.format) {
+    case MPADEC_CONFIG_24BIT: mpa->sample_size *= 3; scale = 0x800000; break;
+    case MPADEC_CONFIG_32BIT: mpa->sample_size <<= 2; scale = 0x80000000; break;
+    case MPADEC_CONFIG_FLOAT: mpa->sample_size <<= 2; scale = 1; break;
+    default:                  mpa->sample_size <<= 1; scale = 0x8000; break;
+  }
+  mpa->synth_size = (mpa->sample_size << 5) >> mpa->config.quality;
+  if (mpa->config.replaygain != MPADEC_CONFIG_REPLAYGAIN_CUSTOM) {
+    mpa->config.gain = 0.0;
+    mpa->replay_gain = 1.0;
+  }
+  mpa->skip_samples = 0;
+  mpa->padding_samples = 0;
+  mpa->decoded_frames = 0;
+  mpa->decoded_samples = 0;
+  memset(&mpa->tag_info, 0, sizeof(mpa->tag_info));
+  framesize = (mpa->frame.frame_size < mpa->bytes_left) ? mpa->frame.frame_size : mpa->bytes_left;
+  if ((mpa->frame.layer == 3) && (framesize >= (mpa->ssize + 124))) {
+    register uint8_t *buf = mpa->next_byte + 4 + mpa->ssize;
+    if (((buf[0] == 'X') && (buf[1] == 'i') && (buf[2] == 'n') && (buf[3] == 'g')) ||
+        ((buf[0] == 'I') && (buf[1] == 'n') && (buf[2] == 'f') && (buf[3] == 'o'))) {
+      skip = TRUE;
+      mpa->next_byte += framesize;
+      mpa->bytes_left -= framesize;
+      buf += 4;
+      mpa->tag_info.flags = (buf[0] << 24) | (buf[1] << 16) | (buf[2] << 8) | buf[3];
+      buf += 4;
+      if (mpa->tag_info.flags & 1) {
+        mpa->tag_info.frames = (buf[0] << 24) | (buf[1] << 16) | (buf[2] << 8) | buf[3];
+        buf += 4;
+      };
+      if (mpa->tag_info.flags & 2) {
+        mpa->tag_info.bytes = (buf[0] << 24) | (buf[1] << 16) | (buf[2] << 8) | buf[3];
+        buf += 4;
+      };
+      if (mpa->tag_info.flags & 4) {
+        memcpy(mpa->tag_info.toc, buf, 100);
+        buf += 100;
+      };
+      if (mpa->tag_info.flags & 8) buf += 4;
+      mpa->tag_info.flags &= 7;
+      if (framesize >= mpa->ssize + 160) {
+        buf += 15;
+        mpa->tag_info.replay_gain[0] = ((buf[0] << 8) | buf[1]) & 0x1FF;
+        if (buf[0] & 2) mpa->tag_info.replay_gain[0] = -mpa->tag_info.replay_gain[0];
+        buf += 2;
+        mpa->tag_info.replay_gain[1] = ((buf[0] << 8) | buf[1]) & 0x1FF;
+        if (buf[0] & 2) mpa->tag_info.replay_gain[1] = -mpa->tag_info.replay_gain[1];
+        buf += 4;
+        mpa->tag_info.enc_delay = (buf[0] << 4) | ((buf[1] >> 4) & 0x0F);
+        mpa->tag_info.enc_padding = ((buf[1] & 0x0F) << 8) | buf[2];
+        if (((mpa->tag_info.enc_delay < 0) || (mpa->tag_info.enc_delay > 3000)) ||
+            ((mpa->tag_info.enc_padding < 0) || (mpa->tag_info.enc_padding > 3000))) {
+          mpa->tag_info.replay_gain[0] = mpa->tag_info.replay_gain[1] = 0;
+          mpa->tag_info.enc_delay = 0;
+          mpa->tag_info.enc_padding = 0;
+        } else {
+          if (mpa->config.replaygain == MPADEC_CONFIG_REPLAYGAIN_RADIO) {
+            mpa->config.gain = ((MYFLT)mpa->tag_info.replay_gain[0])/10.0;
+          } else if (mpa->config.replaygain == MPADEC_CONFIG_REPLAYGAIN_AUDIOPHILE) {
+            mpa->config.gain = ((MYFLT)mpa->tag_info.replay_gain[1])/10.0;
+          }
+        }
+        mpa->skip_samples = mpa->tag_info.enc_delay;
+        mpa->padding_samples = mpa->tag_info.enc_padding;
+      }
+    }
+  }
+  mpa->replay_gain = pow(10.0, mpa->config.gain/20.0);
+  if (mpa->config.replaygain != MPADEC_CONFIG_REPLAYGAIN_NONE) scale *= mpa->replay_gain;
+  init_tables(mpa, scale, SBLIMIT >> mpa->config.quality);
+  if (mpa->frame.layer == 3) {
+    mpa->skip_samples += 529;
+    if ((mpa->tag_info.flags & 1) && (mpa->padding_samples > 529)) mpa->padding_samples -= 529;
+    else mpa->padding_samples = 0;
+  } else {
+    mpa->skip_samples += 241;
+    mpa->padding_samples = 0;
+  }
+  mpa->padding_start = mpa->tag_info.frames*mpa->frame.frame_samples;
+  if (mpa->padding_start > mpa->padding_samples) mpa->padding_start -= mpa->padding_samples;
+  else mpa->padding_start = 0;
+  mpa->state = MPADEC_STATE_DECODE;
+  return skip;
+}
+
+mpadec_t mpadec_init(void)
+{
+  register struct mpadec_t *mpa = (struct mpadec_t *)malloc(sizeof(struct mpadec_t));
+  uint8_t temp[2];
+
+  if (!mpa) return NULL;
+  memset(mpa, 0, sizeof(struct mpadec_t));
+  mpa->size = sizeof(struct mpadec_t);
+  *((int16_t *)temp) = 1;
+  mpa->config.quality = MPADEC_CONFIG_FULL_QUALITY;
+  mpa->config.mode = MPADEC_CONFIG_AUTO;
+  mpa->config.format = MPADEC_CONFIG_16BIT;
+  mpa->config.endian = (uint8_t)((uint8_t)temp[0] ? MPADEC_CONFIG_LITTLE_ENDIAN : MPADEC_CONFIG_BIG_ENDIAN);
+  mpa->config.replaygain = MPADEC_CONFIG_REPLAYGAIN_NONE;
+  mpa->config.skip = TRUE;
+  mpa->config.crc = TRUE;
+  mpa->config.dblsync = TRUE;
+  mpa->config.gain = 0.0;
+  mpa->replay_gain = 1.0;
+  init_tables(mpa, 0x8000, SBLIMIT);
+  mpa->synth_bufoffs = 1;
+  mpa->state = MPADEC_STATE_START;
+  return mpa;
+}
+
+int mpadec_uninit(mpadec_t mpadec)
+{
+  register struct mpadec_t *mpa = (struct mpadec_t *)mpadec;
+
+  if (mpa && (mpa->size == sizeof(struct mpadec_t))) {
+    mpa->size = mpa->state = 0;
+    free(mpa);
+    return MPADEC_RETCODE_OK;
+  } else return MPADEC_RETCODE_INVALID_HANDLE;
+}
+
+int mpadec_reset(mpadec_t mpadec)
+{
+  register struct mpadec_t *mpa = (struct mpadec_t *)mpadec;
+
+  if (mpa && (mpa->size == sizeof(struct mpadec_t))) {
+    memset(mpa->hybrid_in, 0, sizeof(mpa->hybrid_in));
+    memset(mpa->hybrid_out, 0, sizeof(mpa->hybrid_out));
+    memset(mpa->hybrid_buffers, 0, sizeof(mpa->hybrid_buffers));
+    memset(mpa->synth_buffers, 0, sizeof(mpa->synth_buffers));
+    mpa->hybrid_block[0] = mpa->hybrid_block[1] = 0;
+    mpa->synth_bufoffs = 1;
+    memset(&mpa->tag_info, 0, sizeof(mpa->tag_info));
+    if (mpa->config.replaygain != MPADEC_CONFIG_REPLAYGAIN_CUSTOM) mpa->config.gain = 0.0;
+    mpa->prev_frame_size = 0;
+    mpa->free_format = FALSE;
+    mpa->error = FALSE;
+    mpa->reservoir_size = 0;
+    mpa->replay_gain = 1.0;
+    mpa->skip_samples = 0;
+    mpa->padding_samples = 0;
+    mpa->decoded_frames = 0;
+    mpa->decoded_samples = 0;
+    mpa->state = MPADEC_STATE_START;
+    return MPADEC_RETCODE_OK;
+  } else return MPADEC_RETCODE_INVALID_HANDLE;
+}
+
+int mpadec_configure(mpadec_t mpadec, mpadec_config_t *cfg)
+{
+  register struct mpadec_t *mpa = (struct mpadec_t *)mpadec;
+  int32_t i, sblimit; MYFLT scale;
+
+  if (mpa && (mpa->size == sizeof(struct mpadec_t))) {
+    if (!cfg) return MPADEC_RETCODE_INVALID_PARAMETERS;
+    if ((cfg->quality > MPADEC_CONFIG_HALF_QUALITY) || (cfg->mode > MPADEC_CONFIG_CHANNEL2) ||
+        (cfg->format > MPADEC_CONFIG_FLOAT) || (cfg->endian > MPADEC_CONFIG_BIG_ENDIAN) ||
+        (cfg->replaygain > MPADEC_CONFIG_REPLAYGAIN_CUSTOM)) return MPADEC_RETCODE_INVALID_PARAMETERS;
+    mpa->config.quality = cfg->quality;
+    mpa->config.mode = cfg->mode;
+    mpa->config.format = cfg->format;
+    mpa->config.endian = cfg->endian;
+    mpa->config.replaygain = cfg->replaygain;
+    mpa->config.skip = (uint8_t)(cfg->skip ? TRUE : FALSE);
+    mpa->config.crc = (uint8_t)(cfg->crc ? TRUE : FALSE);
+    mpa->config.dblsync = (uint8_t)(cfg->dblsync ? TRUE : FALSE);
+    if (mpa->config.replaygain == MPADEC_CONFIG_REPLAYGAIN_CUSTOM) {
+      mpa->config.gain = cfg->gain;
+    } else {
+      mpa->config.gain = 0.0;
+      if (mpa->tag_info.flags) {
+        if (mpa->config.replaygain == MPADEC_CONFIG_REPLAYGAIN_RADIO) {
+          mpa->config.gain = ((MYFLT)mpa->tag_info.replay_gain[0])/10.0;
+        } else if (mpa->config.replaygain == MPADEC_CONFIG_REPLAYGAIN_AUDIOPHILE) {
+          mpa->config.gain = ((MYFLT)mpa->tag_info.replay_gain[1])/10.0;
+        }
+      }
+    }
+    mpa->replay_gain = pow(10.0, mpa->config.gain/20.0);
+    switch (mpa->config.format) {
+      case MPADEC_CONFIG_24BIT: scale = 0x800000; break;
+      case MPADEC_CONFIG_32BIT: scale = 0x80000000; break;
+      case MPADEC_CONFIG_FLOAT: scale = 1; break;
+      default:                  scale = 0x8000; break;
+    }
+    sblimit = SBLIMIT >> mpa->config.quality;
+    if (mpa->config.replaygain != MPADEC_CONFIG_REPLAYGAIN_NONE) scale *= mpa->replay_gain;
+    init_tables(mpa, scale, sblimit);
+    if ((mpa->state > MPADEC_STATE_START) && mpa->header) {
+      decode_header(mpa, mpa->header);
+      if (mpa->frame.channels < 2) i = (mpa->config.mode == MPADEC_CONFIG_STEREO) ? 1 : 0;
+      else i = ((mpa->config.mode == MPADEC_CONFIG_STEREO) || (mpa->config.mode == MPADEC_CONFIG_AUTO)) ? 3 : 2;
+      mpa->synth_func = synth_table[mpa->config.quality][mpa->config.endian][mpa->config.format][i];
+      mpa->sample_size = mpa->frame.decoded_channels;
+      switch (mpa->config.format) {
+        case MPADEC_CONFIG_24BIT: mpa->sample_size *= 3; break;
+        case MPADEC_CONFIG_32BIT:
+        case MPADEC_CONFIG_FLOAT: mpa->sample_size <<= 2; break;
+        default:                  mpa->sample_size <<= 1; break;
+      }
+      mpa->synth_size = (mpa->sample_size << 5) >> mpa->config.quality;
+    } else mpa->state = MPADEC_STATE_START;
+    return MPADEC_RETCODE_OK;
+  } else return MPADEC_RETCODE_INVALID_HANDLE;
+}
+
+int mpadec_get_info(mpadec_t mpadec, void *info, int info_type)
+{
+  register struct mpadec_t *mpa = (struct mpadec_t *)mpadec;
+
+  if (!mpa || (mpa->size != sizeof(struct mpadec_t))) return MPADEC_RETCODE_INVALID_HANDLE;
+  if (!info) return MPADEC_RETCODE_INVALID_PARAMETERS;
+  if (info_type == MPADEC_INFO_CONFIG) {
+    register mpadec_config_t *cfg = (mpadec_config_t *)info;
+    cfg->quality = mpa->config.quality;
+    cfg->mode = mpa->config.mode;
+    cfg->format = mpa->config.format;
+    cfg->endian = mpa->config.endian;
+    cfg->replaygain = mpa->config.replaygain;
+    cfg->skip = mpa->config.skip;
+    cfg->crc = mpa->config.crc;
+    cfg->dblsync = mpa->config.dblsync;
+    cfg->gain = mpa->config.gain;
+  } else if (info_type == MPADEC_INFO_TAG) {
+    register mp3tag_info_t *tag = (mp3tag_info_t *)info;
+    if (mpa->state < MPADEC_STATE_DECODE) {
+      memset(tag, 0, sizeof(mp3tag_info_t));
+      return MPADEC_RETCODE_BAD_STATE;
+    } else memcpy(tag, &mpa->tag_info, sizeof(mpa->tag_info));
+  } else if (info_type == MPADEC_INFO_STREAM) {
+    register mpadec_info_t *inf = (mpadec_info_t *)info;
+    if (mpa->state < MPADEC_STATE_DECODE) {
+      memset(inf, 0, sizeof(mpadec_info_t));
+      return MPADEC_RETCODE_BAD_STATE;
+    } else {
+      inf->layer = mpa->frame.layer;
+      inf->channels = mpa->frame.channels;
+      inf->frequency = mpa->frame.frequency;
+      inf->bitrate = mpa->frame.bitrate;
+      inf->mode = mpa->frame.mode;
+      inf->copyright = mpa->frame.copyright;
+      inf->original = mpa->frame.original;
+      inf->emphasis = mpa->frame.emphasis;
+      inf->decoded_channels = mpa->frame.decoded_channels;
+      inf->decoded_frequency = mpa->frame.decoded_frequency;
+      inf->decoded_sample_size = mpa->sample_size;
+      inf->frame_size = mpa->frame.frame_size;
+      inf->frame_samples = mpa->frame.frame_samples;
+      inf->decoded_frame_samples = mpa->frame.decoded_samples;
+      if (mpa->tag_info.flags & 1) {
+        inf->frames = mpa->tag_info.frames;
+        inf->duration = (mpa->tag_info.frames*mpa->frame.frame_samples + (mpa->frame.frequency >> 1))/mpa->frame.frequency;
+      } else {
+        inf->frames = 0;
+        inf->duration = 0;
+      }
+    }
+  } else return MPADEC_RETCODE_INVALID_PARAMETERS;
+  return MPADEC_RETCODE_OK;
+}
+
+int mpadec_decode(mpadec_t mpadec, uint8_t *srcbuf, uint32_t srcsize, uint8_t *dstbuf, uint32_t dstsize, uint32_t *srcused, uint32_t *dstused)
+{
+  register struct mpadec_t *mpa = (struct mpadec_t *)mpadec;
+  int retcode = MPADEC_RETCODE_OK;
+  uint32_t decoded_size = 0;
+
+  if (srcused) *srcused = 0;
+  if (dstused) *dstused = 0;
+  if (!dstbuf) dstsize = 0;
+  if (!mpa || (mpa->size != sizeof(struct mpadec_t))) return MPADEC_RETCODE_INVALID_HANDLE;
+  if (mpa->state < MPADEC_STATE_START) return MPADEC_RETCODE_BAD_STATE;
+  if (!srcbuf || ((mpa->state > MPADEC_STATE_START) && !dstbuf )) return MPADEC_RETCODE_INVALID_PARAMETERS;
+  mpa->next_byte = srcbuf;
+  mpa->bytes_left = srcsize;
+  while (mpa->bytes_left >= 4) {
+    mpa->error = FALSE;
+    mpa->bits_left = 0;
+    mpa->header = sync_buffer(mpa);
+    if (!mpa->header) {
+      if (!decoded_size) retcode = MPADEC_RETCODE_NO_SYNC;
+      break;
+    }
+    decode_header(mpa, mpa->header);
+    if ((mpa->bytes_left < mpa->frame.frame_size) || (mpa->free_format && !mpa->prev_frame_size)) {
+      retcode =  MPADEC_RETCODE_NEED_MORE_DATA;
+      break;
+    }
+    if (mpa->state == MPADEC_STATE_START) {
+      if (first_frame(mpa)) continue;
+    } else if ((mpa->frame.layer == 3) && (mpa->frame.frame_size >= (mpa->ssize + 12))) {
+      register uint8_t *buf = mpa->next_byte + 4 + mpa->ssize;
+      if (((buf[0] == 'X') && (buf[1] == 'i') && (buf[2] == 'n') && (buf[3] == 'g')) ||
+          ((buf[0] == 'I') && (buf[1] == 'n') && (buf[2] == 'f') && (buf[3] == 'o'))) {
+        mpa->next_byte += mpa->frame.frame_size;
+        mpa->bytes_left -= mpa->frame.frame_size;
+        continue;
+      }
+    }
+    if (dstsize < mpa->frame.decoded_size) {
+      retcode = MPADEC_RETCODE_BUFFER_TOO_SMALL;
+      break;
+    }
+    if (mpa->config.crc && mpa->frame.CRC) {
+      mpa->frame.crc = (uint16_t)((mpa->next_byte[4] << 8) | mpa->next_byte[5]);
+      mpa->crc = update_crc(0xFFFF, mpa->next_byte + 2, 16);
+    }
+    mpa->next_byte += mpa->hsize;
+    mpa->bytes_left -= mpa->hsize;
+    switch (mpa->frame.layer) {
+      case 1: decode_layer1(mpa, dstbuf); break;
+      case 2: decode_layer2(mpa, dstbuf); break;
+      case 3: decode_layer3(mpa, dstbuf); break;
+    }
+    if (mpa->config.crc && mpa->error) memset(dstbuf, 0, mpa->frame.decoded_size);
+    dstbuf += mpa->frame.decoded_size;
+    dstsize -= mpa->frame.decoded_size;
+    decoded_size += mpa->frame.decoded_size;
+    mpa->decoded_samples += mpa->frame.frame_samples;
+    mpa->decoded_frames++;
+    if (mpa->config.skip) {
+      if (mpa->skip_samples) {
+        if (mpa->skip_samples >= mpa->frame.frame_samples) {
+          dstbuf -= mpa->frame.decoded_size;
+          dstsize += mpa->frame.decoded_size;
+          decoded_size -= mpa->frame.decoded_size;
+          mpa->skip_samples -= mpa->frame.frame_samples;
+        } else {
+          uint32_t tmp = mpa->frame.frame_samples - mpa->skip_samples;
+          tmp = mpa->sample_size*(tmp >> mpa->config.quality);
+          memmove(dstbuf - mpa->frame.decoded_size, dstbuf - tmp, tmp);
+          dstbuf -= mpa->frame.decoded_size - tmp;
+          dstsize += mpa->frame.decoded_size - tmp;
+          decoded_size -= mpa->frame.decoded_size - tmp;
+          mpa->skip_samples = 0;
+        }
+      } else if ((mpa->padding_samples) && (mpa->decoded_samples > mpa->padding_start)) {
+        uint32_t tmp = mpa->decoded_samples - mpa->padding_start;
+        if (tmp > mpa->padding_samples) tmp = mpa->padding_samples;
+        mpa->padding_start += tmp;
+        mpa->padding_samples -= tmp;
+        tmp = mpa->sample_size*(tmp >> mpa->config.quality);
+        dstbuf -= tmp;
+        dstsize += tmp;
+        decoded_size -= tmp;
+      }
+    }
+  }
+  if (srcused) *srcused = srcsize - mpa->bytes_left;
+  if (dstused) *dstused = decoded_size;
+  if ((retcode == MPADEC_RETCODE_OK) && mpa->bytes_left) retcode = MPADEC_RETCODE_NEED_MORE_DATA;
+  if (!dstbuf && (retcode == MPADEC_RETCODE_BUFFER_TOO_SMALL)) retcode = MPADEC_RETCODE_OK;
+  return retcode;
+}
+
+char *mpadec_error(int code)
+{
+  static char *mpa_errors[] = { "No error",
+                                "Invalid handle",
+                                "Not enough memory",
+                                "Bad decoder state",
+                                "Invalid parameters",
+                                "Need more data",
+                                "Output buffer too small",
+                                "Unable to synchronize",
+                                "Unknown error" };
+  if (code > MPADEC_RETCODE_UNKNOWN) code = MPADEC_RETCODE_UNKNOWN;
+  return mpa_errors[code];
+}
+
+mpadec2_t mpadec2_init(void)
+{
+  register struct mpadec2_t *mpa = (struct mpadec2_t *)malloc(sizeof(struct mpadec2_t));
+
+  if (!mpa) return NULL;
+  mpa->size = sizeof(struct mpadec2_t);
+  mpa->buffers = NULL;
+  mpa->in_buffer_offset = mpa->in_buffer_used = 0;
+  mpa->out_buffer_offset = mpa->out_buffer_used = 0;
+  mpa->mpadec = mpadec_init();
+  if (!mpa->mpadec) {
+    free(mpa);
+    return NULL;
+  }
+  return mpa;
+}
+
+int mpadec2_uninit(mpadec2_t mpadec)
+{
+  register struct mpadec2_t *mpa = (struct mpadec2_t *)mpadec;
+
+  if (mpa && (mpa->size == sizeof(struct mpadec2_t))) {
+    struct mpabuffer_t *buf = mpa->buffers, *tmp;
+    while (buf) {
+      tmp = buf;
+      buf = buf->next;
+      free(tmp);
+    }
+    mpadec_uninit(mpa->mpadec);
+    free(mpa);
+    return MPADEC_RETCODE_OK;
+  } else return MPADEC_RETCODE_INVALID_HANDLE;
+}
+
+int mpadec2_reset(mpadec2_t mpadec)
+{
+  register struct mpadec2_t *mpa = (struct mpadec2_t *)mpadec;
+
+  if (mpa && (mpa->size == sizeof(struct mpadec2_t))) {
+    struct mpabuffer_t *buf = mpa->buffers, *tmp;
+    while (buf) {
+      tmp = buf;
+      buf = buf->next;
+      free(tmp);
+    }
+    mpa->buffers = NULL;
+    mpa->in_buffer_offset = mpa->in_buffer_used = 0;
+    mpa->out_buffer_offset = mpa->out_buffer_used = 0;
+    mpadec_reset(mpa->mpadec);
+    return MPADEC_RETCODE_OK;
+  } else return MPADEC_RETCODE_INVALID_HANDLE;
+}
+
+int mpadec2_configure(mpadec2_t mpadec, mpadec_config_t *cfg)
+{
+  register struct mpadec2_t *mpa = (struct mpadec2_t *)mpadec;
+
+  if (!mpa || (mpa->size != sizeof(struct mpadec2_t))) return MPADEC_RETCODE_INVALID_HANDLE;
+  mpa->out_buffer_offset = mpa->out_buffer_used = 0;
+  return (mpadec_configure(mpa->mpadec, cfg));
+}
+
+int mpadec2_get_info(mpadec2_t mpadec, void *info, int info_type)
+{
+  register struct mpadec2_t *mpa = (struct mpadec2_t *)mpadec;
+
+  if (!mpa || (mpa->size != sizeof(struct mpadec2_t))) return MPADEC_RETCODE_INVALID_HANDLE;
+  return (mpadec_get_info(mpa->mpadec, info, info_type));
+}
+
+int mpadec2_decode(mpadec2_t mpadec, uint8_t *srcbuf, uint32_t srcsize, uint8_t *dstbuf, uint32_t dstsize, uint32_t *dstused)
+{
+  register struct mpadec2_t *mpa = (struct mpadec2_t *)mpadec;
+  uint32_t n, src_used, dst_used; int r;
+
+  if (dstused) *dstused = 0;
+  if (!mpa || (mpa->size != sizeof(struct mpadec2_t))) return MPADEC_RETCODE_INVALID_HANDLE;
+  if (((struct mpadec_t *)mpa->mpadec)->state < MPADEC_STATE_START) return MPADEC_RETCODE_BAD_STATE;
+  if (srcbuf && srcsize) {
+    struct mpabuffer_t *last = mpa->buffers, *buf;
+    if (last) {
+      while (last->next) last = last->next;
+      if ((last->offset + last->used) < last->size) {
+        n = last->size - (last->offset + last->used);
+        if (n > srcsize) n = srcsize;
+        memcpy(last->buffer + last->offset + last->used, srcbuf, n);
+        last->used += n;
+        srcbuf += n;
+        srcsize -= n;
+      }
+    }
+    if (srcsize) {
+      n = (srcsize > 4096) ? srcsize : 4096;
+      buf = (struct mpabuffer_t *)malloc(n + sizeof(struct mpabuffer_t));
+      if (buf) {
+        buf->size = n;
+        buf->offset = buf->used = 0;
+        buf->buffer = (uint8_t *)buf + sizeof(struct mpabuffer_t);
+        buf->next = NULL;
+        memcpy(buf->buffer, srcbuf, srcsize);
+        buf->used = srcsize;
+        if (last) last->next = buf; else mpa->buffers = buf;
+      } else return MPADEC_RETCODE_NOT_ENOUGH_MEMORY;
+    }
+  }
+  if (!dstbuf || !dstsize) return MPADEC_RETCODE_OK;
+  while (dstsize) {
+    struct mpabuffer_t *buf = mpa->buffers;
+    if (mpa->out_buffer_used) {
+      n = (dstsize < mpa->out_buffer_used) ? dstsize : mpa->out_buffer_used;
+      memcpy(dstbuf, mpa->out_buffer + mpa->out_buffer_offset, n);
+      mpa->out_buffer_offset += n;
+      mpa->out_buffer_used -= n;
+      dstbuf += n;
+      dstsize -= n;
+      if (dstused) *dstused += n;
+    }
+    if (!dstsize) break;
+    if (mpa->in_buffer_used && mpa->in_buffer_offset) memmove(mpa->in_buffer, mpa->in_buffer + mpa->in_buffer_offset, mpa->in_buffer_used);
+    mpa->in_buffer_offset = 0;
+    while (buf && (mpa->in_buffer_used < sizeof(mpa->in_buffer))) {
+      if (buf->used) {
+        n = sizeof(mpa->in_buffer) - mpa->in_buffer_used;
+        if (n > buf->used) n = buf->used;
+        memcpy(mpa->in_buffer + mpa->in_buffer_offset + mpa->in_buffer_used, buf->buffer + buf->offset, n);
+        buf->offset += n;
+        buf->used -= n;
+        mpa->in_buffer_used += n;
+      }
+      if (!buf->used) {
+        struct mpabuffer_t *tmp = buf;
+        buf = buf->next;
+        free(tmp);
+      }
+    }
+    mpa->buffers = buf;
+    r = mpadec_decode(mpa->mpadec, mpa->in_buffer + mpa->in_buffer_offset, mpa->in_buffer_used, dstbuf, dstsize, &src_used, &dst_used);
+    mpa->in_buffer_offset += src_used;
+    mpa->in_buffer_used -= src_used;
+    dstbuf += dst_used;
+    dstsize -= dst_used;
+    if (dstused) *dstused += dst_used;
+    if (r == MPADEC_RETCODE_BUFFER_TOO_SMALL) {
+      mpa->out_buffer_offset = mpa->out_buffer_used = 0;
+      mpadec_decode(mpa->mpadec, mpa->in_buffer + mpa->in_buffer_offset, mpa->in_buffer_used, mpa->out_buffer, sizeof(mpa->out_buffer), &src_used, &mpa->out_buffer_used);
+      mpa->in_buffer_offset += src_used;
+      mpa->in_buffer_used -= src_used;
+      if (!mpa->out_buffer_used) break;
+    } else if (!mpa->buffers) break;
+  }
+  return MPADEC_RETCODE_OK;
+}
+
diff --git a/InOut/libmpadec/mpadec_config.h b/InOut/libmpadec/mpadec_config.h
new file mode 100644
index 0000000..4f54755
--- /dev/null
+++ b/InOut/libmpadec/mpadec_config.h
@@ -0,0 +1,86 @@
+
+/* Hardware architecture */
+//#define ARCH_ALPHA
+//#define ARCH_PPC
+//#define ARCH_SPARC
+#define ARCH_X86
+//#define ARCH_AMD64
+//#define ARCH_IA64
+
+#ifdef WIN32
+#define HAVE_IO_H
+#define HAVE_CONIO_H
+#undef OSS
+#else
+#define HAVE_INTTYPES_H
+#endif
+
+#define FLOAT MYFLT
+
+#include "sysdep.h"
+
+/*#ifdef HAVE_INTTYPES_H
+#include <inttypes.h>
+#else
+typedef signed char      int8_t;
+typedef unsigned char    uint8_t;
+typedef signed short     int16_t;
+typedef unsigned short   uint16_t;
+#if defined(__BORLANDC__) || defined(_MSC_VER)
+typedef signed __int64   int64_t;
+typedef unsigned __int64 uint64_t;
+#elif defined(__GNUC__)
+typedef signed long long   int64_t;
+typedef unsigned long long uint64_t;
+#endif
+#if defined(ARCH_AMD64) || defined(ARCH_IA64) || defined(ARCH_ALPHA)
+typedef signed int       int32_t;
+typedef unsigned int     uint32_t;
+typedef int64_t  intptr_t;
+typedef uint64_t uintptr_t;
+#else
+typedef signed long      int32_t;
+typedef unsigned long    uint32_t;
+typedef int32_t  intptr_t;
+typedef uint32_t uintptr_t;
+#endif
+#endif
+*/
+
+#undef PACKED
+#ifdef __GNUC__
+#define PACKED __attribute__((packed))
+#else
+#define PACKED
+#endif
+
+#include <string.h>
+#include <memory.h>
+#include <math.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <stdlib.h>
+#ifdef HAVE_IO_H
+#include <io.h>
+#endif
+
+#undef FALSE
+#undef TRUE
+#define FALSE 0
+#define TRUE  1
+
+#ifndef O_BINARY
+#define O_BINARY 0
+#endif
+
+#ifdef WIN32
+#define strcasecmp stricmp
+#endif
+
+#ifndef M_PI
+#define M_PI 3.14159265358979323846
+#endif
+#ifndef M_SQRT2
+#define M_SQRT2 1.41421356237309504880
+#endif
+
diff --git a/InOut/libmpadec/mpadec_internal.h b/InOut/libmpadec/mpadec_internal.h
new file mode 100644
index 0000000..d21950d
--- /dev/null
+++ b/InOut/libmpadec/mpadec_internal.h
@@ -0,0 +1,212 @@
+/*
+ *  mpadec - MPEG audio decoder
+ *  Copyright (C) 2002-2004 Dmitriy Startsev (dstartsev at rambler.ru)
+ *
+ *  This library is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU Lesser General Public
+ *  License as published by the Free Software Foundation; either
+ *  version 2.1 of the License, or (at your option) any later version.
+ *
+ *  This library 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
+ *  Lesser General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Lesser General Public
+ *  License along with this library; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+/* $Id: mpadec_internal.h,v 1.1.1.1 2004/07/27 02:57:55 metal_man Exp $ */
+
+#ifndef __MPADEC_INTERNAL_H
+#define __MPADEC_INTERNAL_H
+
+#include "mpadec_config.h"
+#include "mpadec.h"
+
+#define MPADEC_STATE_UNDEFINED 0
+#define MPADEC_STATE_START     1
+#define MPADEC_STATE_DECODE    2
+
+#define MPG_MD_STEREO       0
+#define MPG_MD_JOINT_STEREO 1
+#define MPG_MD_DUAL_CHANNEL 2
+#define MPG_MD_MONO         3
+
+#define SBLIMIT     32
+#define SSLIMIT     18
+#define SCALE_BLOCK 12
+
+typedef struct {
+  FLOAT decwin[512 + 32];
+  FLOAT muls[27][64];
+  FLOAT gainpow2[256 + 122];
+  FLOAT ispow[8207];
+  FLOAT win[2][4][36];
+  FLOAT *istabs[3][2][2];
+  FLOAT tan1_1[16];
+  FLOAT tan2_1[16];
+  FLOAT tan1_2[16];
+  FLOAT tan2_2[16];
+  FLOAT pow1_1[2][16];
+  FLOAT pow2_1[2][16];
+  FLOAT pow1_2[2][16];
+  FLOAT pow2_2[2][16];
+  int32_t long_limit[9][23];
+  int32_t short_limit[9][14];
+  int32_t n_slen2[512];
+  int32_t i_slen2[256];
+  int32_t mapbuf0[9][152];
+  int32_t mapbuf1[9][156];
+  int32_t mapbuf2[9][44];
+  int32_t *map[9][3];
+  int32_t *mapend[9][3];
+  uint8_t *mp2tables[10];
+  uint8_t grp3tab[32*3];
+  uint8_t grp5tab[128*3];
+  uint8_t grp9tab[1024*3];
+} mpadec_tables_t;
+
+typedef struct {
+  uint16_t bits;
+  int16_t d;
+} alloc_table_t;
+
+typedef struct {
+  uint32_t linbits;
+  int16_t *table;
+} newhuff_t;
+
+typedef struct {
+  int16_t long_idx[23];
+  int16_t long_diff[22];
+  int16_t short_idx[14];
+  int16_t short_diff[13];
+} bandinfo_t;
+
+typedef struct {
+  uint8_t layer;
+  uint8_t mode;
+  uint8_t channels;
+  uint8_t decoded_channels;
+  uint8_t LSF;
+  uint8_t MPEG25;
+  uint8_t CRC;
+  uint8_t extension;
+  uint8_t mode_ext;
+  uint8_t copyright;
+  uint8_t original;
+  uint8_t emphasis;
+  uint8_t jsbound;
+  uint8_t sblimit;
+  uint8_t downsample;
+  uint8_t downsample_sblimit;
+  uint16_t crc;
+  uint16_t rsvd;
+  uint32_t padding;
+  uint32_t bitrate_index;
+  uint32_t frequency_index;
+  uint32_t bitrate;
+  uint32_t frequency;
+  uint32_t frame_size;
+  uint32_t frame_samples;
+  uint32_t decoded_frequency;
+  uint32_t decoded_samples;
+  uint32_t decoded_size;
+  alloc_table_t *alloc_table;
+} frameinfo_t;
+
+typedef struct {
+  int32_t scfsi;
+  uint32_t part2_3_length;
+  uint32_t big_values;
+  uint32_t scalefac_compress;
+  uint8_t block_type;
+  uint8_t mixed_block_flag;
+  uint8_t preflag;
+  uint8_t scalefac_scale;
+  uint32_t table_select[3];
+  uint32_t subblock_gain[3];
+  uint32_t maxband[3];
+  uint32_t maxbandl;
+  uint32_t maxb;
+  uint32_t region1start;
+  uint32_t region2start;
+  uint32_t count1table_select;
+  FLOAT *full_gain[3];
+  FLOAT *pow2gain;
+} grinfo_t;
+
+typedef struct {
+  uint32_t main_data_begin;
+  uint32_t private_bits;
+  struct {
+    grinfo_t gr[2];
+  } ch[2];
+} sideinfo_t;
+
+struct mpadec_t {
+  uint32_t size;
+  uint32_t state;
+  uint8_t *next_byte;
+  uint32_t bytes_left;
+  uint32_t bit_buffer;
+  uint8_t bits_left;
+  uint8_t error;
+  uint8_t free_format;
+  uint8_t pad1;
+  uint32_t sample_size;
+  uint32_t prev_frame_size;
+  uint32_t header;
+  uint32_t hsize;
+  uint32_t ssize;
+  uint32_t dsize;
+  uint16_t crc;
+  uint16_t pad2;
+  uint32_t skip_samples;
+  uint32_t padding_samples;
+  uint32_t padding_start;
+  uint32_t decoded_frames;
+  uint32_t decoded_samples;
+  mp3tag_info_t tag_info;
+  uint32_t synth_size;
+  FLOAT replay_gain;
+  void (*synth_func)(void *mpadec, FLOAT block[SBLIMIT], int channel, uint8_t *buffer);
+  uint32_t reservoir_size;
+  uint8_t reservoir[2048];
+  frameinfo_t frame;
+  sideinfo_t sideinfo;
+  mpadec_config_t config;
+  mpadec_tables_t tables;
+  uint32_t synth_bufoffs;
+  uint8_t hybrid_block[4];
+  FLOAT hybrid_in[2][SBLIMIT][SSLIMIT];
+  FLOAT hybrid_out[2][SSLIMIT][SBLIMIT];
+  FLOAT hybrid_buffers[2][2][SBLIMIT*SSLIMIT];
+  FLOAT synth_buffers[2][2][0x110];
+};
+
+struct mpabuffer_t {
+  uint32_t size;
+  uint32_t offset;
+  uint32_t used;
+  uint8_t *buffer;
+  struct mpabuffer_t *next;
+};
+
+struct mpadec2_t {
+  uint32_t size;
+  mpadec_t mpadec;
+  struct mpabuffer_t *buffers;
+  uint32_t in_buffer_offset;
+  uint32_t in_buffer_used;
+  uint32_t out_buffer_offset;
+  uint32_t out_buffer_used;
+  uint8_t in_buffer[0x10000];
+  uint8_t out_buffer[8*1152];
+};
+
+#define GETBITS(n) ((mpa->bits_left >= (uint8_t)(n)) ? ((mpa->bit_buffer >> (mpa->bits_left -= (uint8_t)(n))) & bitmask[n]) : getbits(mpa, n))
+
+#endif
diff --git a/InOut/libmpadec/synth.c b/InOut/libmpadec/synth.c
new file mode 100644
index 0000000..2cea51f
--- /dev/null
+++ b/InOut/libmpadec/synth.c
@@ -0,0 +1,1440 @@
+/*
+ *  mpadec - MPEG audio decoder
+ *  Copyright (C) 2002-2004 Dmitriy Startsev (dstartsev at rambler.ru)
+ *
+ *  This library is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU Lesser General Public
+ *  License as published by the Free Software Foundation; either
+ *  version 2.1 of the License, or (at your option) any later version.
+ *
+ *  This library 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
+ *  Lesser General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Lesser General Public
+ *  License along with this library; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+/* $Id: synth.c,v 1.3 2004/08/03 05:22:22 metal_man Exp $ */
+
+#include "mpadec_internal.h"
+
+#define ROUND(x) (floor((x) + 0.5))
+#define LROUND(x) ((int32_t)(ROUND(x)))
+#define LLROUND(x) ((int64_t)(ROUND(x)))
+
+static const MYFLT costab[32] = {
+  0.50060299823519630134550410676638, 0.50547095989754365998444458560696,
+  0.51544730992262454697495130564925, 0.53104259108978417447573393235719,
+  0.55310389603444452782938083813705, 0.58293496820613387367383070125262,
+  0.62250412303566481615725615676281, 0.67480834145500574602596871104104,
+  0.74453627100229844977698119197295, 0.83934964541552703873926374662543,
+  0.97256823786196069369768941405256, 1.16943993343288495515577028404220,
+  1.48416461631416627724332693742810, 2.05778100995341155085655447971040,
+  3.40760841846871878570119133345910, 10.1900081235480568112121092010360,
+  0.50241928618815570551167011928012, 0.52249861493968888062857531905669,
+  0.56694403481635770368053791515488, 0.64682178335999012954836011165200,
+  0.78815462345125022473398248719742, 1.06067768599034747134045174723310,
+  1.72244709823833392781591536415660, 5.10114861868916385810624549234540,
+  0.50979557910415916894193980398784, 0.60134488693504528054372182390922,
+  0.89997622313641570463850954094189, 2.56291544774150617879608629617770,
+  0.54119610014619698439972320536639, 1.30656296487637652785664317342720,
+  0.70710678118654752440084436210485, 0.0
+};
+
+static void dct64(MYFLT *outptr0, MYFLT *outptr1, MYFLT *samples)
+{
+  MYFLT tmp1[32], tmp2[32];
+
+  {
+    register MYFLT *in = samples;
+
+    tmp1[0] = in[0] + in[31];
+    tmp1[1] = in[1] + in[30];
+    tmp1[31] = (in[0] - in[31])*costab[0];
+    tmp1[30] = (in[1] - in[30])*costab[1];
+
+    tmp1[2] = in[2] + in[29];
+    tmp1[3] = in[3] + in[28];
+    tmp1[29] = (in[2] - in[29])*costab[2];
+    tmp1[28] = (in[3] - in[28])*costab[3];
+
+    tmp1[4] = in[4] + in[27];
+    tmp1[5] = in[5] + in[26];
+    tmp1[27] = (in[4] - in[27])*costab[4];
+    tmp1[26] = (in[5] - in[26])*costab[5];
+
+    tmp1[6] = in[6] + in[25];
+    tmp1[7] = in[7] + in[24];
+    tmp1[25] = (in[6] - in[25])*costab[6];
+    tmp1[24] = (in[7] - in[24])*costab[7];
+
+    tmp1[8] = in[8] + in[23];
+    tmp1[9] = in[9] + in[22];
+    tmp1[23] = (in[8] - in[23])*costab[8];
+    tmp1[22] = (in[9] - in[22])*costab[9];
+
+    tmp1[10] = in[10] + in[21];
+    tmp1[11] = in[11] + in[20];
+    tmp1[21] = (in[10] - in[21])*costab[10];
+    tmp1[20] = (in[11] - in[20])*costab[11];
+
+    tmp1[12] = in[12] + in[19];
+    tmp1[13] = in[13] + in[18];
+    tmp1[19] = (in[12] - in[19])*costab[12];
+    tmp1[18] = (in[13] - in[18])*costab[13];
+
+    tmp1[14] = in[14] + in[17];
+    tmp1[15] = in[15] + in[16];
+    tmp1[17] = (in[14] - in[17])*costab[14];
+    tmp1[16] = (in[15] - in[16])*costab[15];
+  }
+  {
+    tmp2[0] = tmp1[0] + tmp1[15];
+    tmp2[1] = tmp1[1] + tmp1[14];
+    tmp2[15] = (tmp1[0] - tmp1[15])*costab[16 + 0];
+    tmp2[14] = (tmp1[1] - tmp1[14])*costab[16 + 1];
+
+    tmp2[2] = tmp1[2] + tmp1[13];
+    tmp2[3] = tmp1[3] + tmp1[12];
+    tmp2[13] = (tmp1[2] - tmp1[13])*costab[16 + 2];
+    tmp2[12] = (tmp1[3] - tmp1[12])*costab[16 + 3];
+
+    tmp2[4] = tmp1[4] + tmp1[11];
+    tmp2[5] = tmp1[5] + tmp1[10];
+    tmp2[11] = (tmp1[4] - tmp1[11])*costab[16 + 4];
+    tmp2[10] = (tmp1[5] - tmp1[10])*costab[16 + 5];
+
+    tmp2[6] = tmp1[6] + tmp1[9];
+    tmp2[7] = tmp1[7] + tmp1[8];
+    tmp2[9] = (tmp1[6] - tmp1[9])*costab[16 + 6];
+    tmp2[8] = (tmp1[7] - tmp1[8])*costab[16 + 7];
+
+    tmp2[16] = tmp1[16] + tmp1[31];
+    tmp2[17] = tmp1[17] + tmp1[30];
+    tmp2[31] = (tmp1[31] - tmp1[16])*costab[16 + 0];
+    tmp2[30] = (tmp1[30] - tmp1[17])*costab[16 + 1];
+
+    tmp2[18] = tmp1[18] + tmp1[29];
+    tmp2[19] = tmp1[19] + tmp1[28];
+    tmp2[29] = (tmp1[29] - tmp1[18])*costab[16 + 2];
+    tmp2[28] = (tmp1[28] - tmp1[19])*costab[16 + 3];
+
+    tmp2[20] = tmp1[20] + tmp1[27];
+    tmp2[21] = tmp1[21] + tmp1[26];
+    tmp2[27] = (tmp1[27] - tmp1[20])*costab[16 + 4];
+    tmp2[26] = (tmp1[26] - tmp1[21])*costab[16 + 5];
+
+    tmp2[22] = tmp1[22] + tmp1[25];
+    tmp2[23] = tmp1[23] + tmp1[24];
+    tmp2[25] = (tmp1[25] - tmp1[22])*costab[16 + 6];
+    tmp2[24] = (tmp1[24] - tmp1[23])*costab[16 + 7];
+  }
+  {
+    tmp1[0] = tmp2[0] + tmp2[7];
+    tmp1[7] = (tmp2[0] - tmp2[7])*costab[16 + 8 + 0];
+    tmp1[1] = tmp2[1] + tmp2[6];
+    tmp1[6] = (tmp2[1] - tmp2[6])*costab[16 + 8 + 1];
+    tmp1[2] = tmp2[2] + tmp2[5];
+    tmp1[5] = (tmp2[2] - tmp2[5])*costab[16 + 8 + 2];
+    tmp1[3] = tmp2[3] + tmp2[4];
+    tmp1[4] = (tmp2[3] - tmp2[4])*costab[16 + 8 + 3];
+
+    tmp1[8] = tmp2[8] + tmp2[15];
+    tmp1[15] = (tmp2[15] - tmp2[8])*costab[16 + 8 + 0];
+    tmp1[9] = tmp2[9] + tmp2[14];
+    tmp1[14] = (tmp2[14] - tmp2[9])*costab[16 + 8 + 1];
+    tmp1[10] = tmp2[10] + tmp2[13];
+    tmp1[13] = (tmp2[13] - tmp2[10])*costab[16 + 8 + 2];
+    tmp1[11] = tmp2[11] + tmp2[12];
+    tmp1[12] = (tmp2[12] - tmp2[11])*costab[16 + 8 + 3];
+
+    tmp1[16] = tmp2[16] + tmp2[23];
+    tmp1[23] = (tmp2[16] - tmp2[23])*costab[16 + 8 + 0];
+    tmp1[17] = tmp2[17] + tmp2[22];
+    tmp1[22] = (tmp2[17] - tmp2[22])*costab[16 + 8 + 1];
+    tmp1[18] = tmp2[18] + tmp2[21];
+    tmp1[21] = (tmp2[18] - tmp2[21])*costab[16 + 8 + 2];
+    tmp1[19] = tmp2[19] + tmp2[20];
+    tmp1[20] = (tmp2[19] - tmp2[20])*costab[16 + 8 + 3];
+
+    tmp1[24] = tmp2[24] + tmp2[31];
+    tmp1[31] = (tmp2[31] - tmp2[24])*costab[16 + 8 + 0];
+    tmp1[25] = tmp2[25] + tmp2[30];
+    tmp1[30] = (tmp2[30] - tmp2[25])*costab[16 + 8 + 1];
+    tmp1[26] = tmp2[26] + tmp2[29];
+    tmp1[29] = (tmp2[29] - tmp2[26])*costab[16 + 8 + 2];
+    tmp1[27] = tmp2[27] + tmp2[28];
+    tmp1[28] = (tmp2[28] - tmp2[27])*costab[16 + 8 + 3];
+  }
+  {
+    tmp2[0] = tmp1[0] + tmp1[3];
+    tmp2[3] = (tmp1[0] - tmp1[3])*costab[16 + 8 + 4 + 0];
+    tmp2[1] = tmp1[1] + tmp1[2];
+    tmp2[2] = (tmp1[1] - tmp1[2])*costab[16 + 8 + 4 + 1];
+
+    tmp2[4] = tmp1[4] + tmp1[7];
+    tmp2[7] = (tmp1[7] - tmp1[4])*costab[16 + 8 + 4 + 0];
+    tmp2[5] = tmp1[5] + tmp1[6];
+    tmp2[6] = (tmp1[6] - tmp1[5])*costab[16 + 8 + 4 + 1];
+
+    tmp2[8] = tmp1[8] + tmp1[11];
+    tmp2[11] = (tmp1[8] - tmp1[11])*costab[16 + 8 + 4 + 0];
+    tmp2[9] = tmp1[9] + tmp1[10];
+    tmp2[10] = (tmp1[9] - tmp1[10])*costab[16 + 8 + 4 + 1];
+
+    tmp2[12] = tmp1[12] + tmp1[15];
+    tmp2[15] = (tmp1[15] - tmp1[12])*costab[16 + 8 + 4 + 0];
+    tmp2[13] = tmp1[13] + tmp1[14];
+    tmp2[14] = (tmp1[14] - tmp1[13])*costab[16 + 8 + 4 + 1];
+
+    tmp2[16] = tmp1[16] + tmp1[19];
+    tmp2[19] = (tmp1[16] - tmp1[19])*costab[16 + 8 + 4 + 0];
+    tmp2[17] = tmp1[17] + tmp1[18];
+    tmp2[18] = (tmp1[17] - tmp1[18])*costab[16 + 8 + 4 + 1];
+
+    tmp2[20] = tmp1[20] + tmp1[23];
+    tmp2[23] = (tmp1[23] - tmp1[20])*costab[16 + 8 + 4 + 0];
+    tmp2[21] = tmp1[21] + tmp1[22];
+    tmp2[22] = (tmp1[22] - tmp1[21])*costab[16 + 8 + 4 + 1];
+
+    tmp2[24] = tmp1[24] + tmp1[27];
+    tmp2[27] = (tmp1[24] - tmp1[27])*costab[16 + 8 + 4 + 0];
+    tmp2[25] = tmp1[25] + tmp1[26];
+    tmp2[26] = (tmp1[25] - tmp1[26])*costab[16 + 8 + 4 + 1];
+
+    tmp2[28] = tmp1[28] + tmp1[31];
+    tmp2[31] = (tmp1[31] - tmp1[28])*costab[16 + 8 + 4 + 0];
+    tmp2[29] = tmp1[29] + tmp1[30];
+    tmp2[30] = (tmp1[30] - tmp1[29])*costab[16 + 8 + 4 + 1];
+  }
+  {
+    tmp1[0] = tmp2[0] + tmp2[1];
+    tmp1[1] = (tmp2[0] - tmp2[1])*costab[16 + 8 + 4 + 2];
+    tmp1[2] = tmp2[2] + tmp2[3];
+    tmp1[3] = (tmp2[3] - tmp2[2])*costab[16 + 8 + 4 + 2];
+    tmp1[2] += tmp1[3];
+
+    tmp1[4] = tmp2[4] + tmp2[5];
+    tmp1[5] = (tmp2[4] - tmp2[5])*costab[16 + 8 + 4 + 2];
+    tmp1[6] = tmp2[6] + tmp2[7];
+    tmp1[7] = (tmp2[7] - tmp2[6])*costab[16 + 8 + 4 + 2];
+    tmp1[6] += tmp1[7];
+    tmp1[4] += tmp1[6];
+    tmp1[6] += tmp1[5];
+    tmp1[5] += tmp1[7];
+
+    tmp1[8] = tmp2[8] + tmp2[9];
+    tmp1[9] = (tmp2[8] - tmp2[9])*costab[16 + 8 + 4 + 2];
+    tmp1[10] = tmp2[10] + tmp2[11];
+    tmp1[11] = (tmp2[11] - tmp2[10])*costab[16 + 8 + 4 + 2];
+    tmp1[10] += tmp1[11];
+
+    tmp1[12] = tmp2[12] + tmp2[13];
+    tmp1[13] = (tmp2[12] - tmp2[13])*costab[16 + 8 + 4 + 2];
+    tmp1[14] = tmp2[14] + tmp2[15];
+    tmp1[15] = (tmp2[15] - tmp2[14])*costab[16 + 8 + 4 + 2];
+    tmp1[14] += tmp1[15];
+    tmp1[12] += tmp1[14];
+    tmp1[14] += tmp1[13];
+    tmp1[13] += tmp1[15];
+
+    tmp1[16] = tmp2[16] + tmp2[17];
+    tmp1[17] = (tmp2[16] - tmp2[17])*costab[16 + 8 + 4 + 2];
+    tmp1[18] = tmp2[18] + tmp2[19];
+    tmp1[19] = (tmp2[19] - tmp2[18])*costab[16 + 8 + 4 + 2];
+    tmp1[18] += tmp1[19];
+
+    tmp1[20] = tmp2[20] + tmp2[21];
+    tmp1[21] = (tmp2[20] - tmp2[21])*costab[16 + 8 + 4 + 2];
+    tmp1[22] = tmp2[22] + tmp2[23];
+    tmp1[23] = (tmp2[23] - tmp2[22])*costab[16 + 8 + 4 + 2];
+    tmp1[22] += tmp1[23];
+    tmp1[20] += tmp1[22];
+    tmp1[22] += tmp1[21];
+    tmp1[21] += tmp1[23];
+
+    tmp1[24] = tmp2[24] + tmp2[25];
+    tmp1[25] = (tmp2[24] - tmp2[25])*costab[16 + 8 + 4 + 2];
+    tmp1[26] = tmp2[26] + tmp2[27];
+    tmp1[27] = (tmp2[27] - tmp2[26])*costab[16 + 8 + 4 + 2];
+    tmp1[26] += tmp1[27];
+
+    tmp1[28] = tmp2[28] + tmp2[29];
+    tmp1[29] = (tmp2[28] - tmp2[29])*costab[16 + 8 + 4 + 2];
+    tmp1[30] = tmp2[30] + tmp2[31];
+    tmp1[31] = (tmp2[31] - tmp2[30])*costab[16 + 8 + 4 + 2];
+    tmp1[30] += tmp1[31];
+    tmp1[28] += tmp1[30];
+    tmp1[30] += tmp1[29];
+    tmp1[29] += tmp1[31];
+  }
+  {
+    register MYFLT tmp, *out0 = outptr0, *out1 = outptr1;
+
+    out0[16*16] = tmp1[0];
+    out0[12*16] = tmp1[4];
+    out0[8*16] = tmp1[2];
+    out0[4*16] = tmp1[6];
+    out0[0*16] = tmp1[1];
+    out1[0*16] = tmp1[1];
+    out1[4*16] = tmp1[5];
+    out1[8*16] = tmp1[3];
+    out1[12*16] = tmp1[7];
+
+    out0[14*16] = tmp1[8] + tmp1[12];
+    out0[10*16] = tmp1[12] + tmp1[10];
+    out0[6*16] = tmp1[10] + tmp1[14];
+    out0[2*16] = tmp1[14] + tmp1[9];
+    out1[2*16] = tmp1[9] + tmp1[13];
+    out1[6*16] = tmp1[13] + tmp1[11];
+    out1[10*16] = tmp1[11] + tmp1[15];
+    out1[14*16] = tmp1[15];
+
+    tmp = tmp1[24] + tmp1[28];
+    out0[15*16] = tmp + tmp1[16];
+    out0[13*16] = tmp + tmp1[20];
+    tmp = tmp1[28] + tmp1[26];
+    out0[11*16] = tmp + tmp1[20];
+    out0[9*16] = tmp + tmp1[18];
+    tmp = tmp1[26] + tmp1[30];
+    out0[7*16] = tmp + tmp1[18];
+    out0[5*16] = tmp + tmp1[22];
+    tmp = tmp1[30] + tmp1[25];
+    out0[3*16] = tmp + tmp1[22];
+    out0[1*16] = tmp + tmp1[17];
+    tmp = tmp1[25] + tmp1[29];
+    out1[1*16] = tmp + tmp1[17];
+    out1[3*16] = tmp + tmp1[21];
+    tmp = tmp1[29] + tmp1[27];
+    out1[5*16] = tmp + tmp1[21];
+    out1[7*16] = tmp + tmp1[19];
+    tmp = tmp1[27] + tmp1[31];
+    out1[9*16] = tmp + tmp1[19];
+    out1[11*16] = tmp + tmp1[23];
+    out1[13*16] = tmp1[23] + tmp1[31];
+    out1[15*16] = tmp1[31];
+  }
+}
+
+static void synth_full(mpadec_t mpadec, MYFLT *bandptr, int channel, MYFLT *buffer)
+{
+  register struct mpadec_t *mpa = (struct mpadec_t *)mpadec;
+  unsigned bo;
+  MYFLT *b0, (*buf)[0x110];
+
+  if (!channel) {
+    mpa->synth_bufoffs--;
+    mpa->synth_bufoffs &= 0x0F;
+    buf = mpa->synth_buffers[0];
+  } else buf = mpa->synth_buffers[1];
+  if (mpa->synth_bufoffs & 1) {
+    b0 = buf[0];
+    bo = mpa->synth_bufoffs;
+    dct64(buf[1] + ((mpa->synth_bufoffs + 1) & 0x0F),
+          buf[0] + mpa->synth_bufoffs, bandptr);
+  } else {
+    b0 = buf[1];
+    bo = mpa->synth_bufoffs + 1;
+    dct64(buf[0] + mpa->synth_bufoffs, buf[1] + (mpa->synth_bufoffs + 1), bandptr);
+  }
+  {
+    register int i;
+    register MYFLT *out = buffer;
+    register MYFLT *win = mpa->tables.decwin + (16 - bo);
+
+    for (i = 16; i; i--, win += 32, b0 += 16) {
+      register MYFLT sum = win[0]*b0[0];
+      sum -= win[1]*b0[1];
+      sum += win[2]*b0[2];
+      sum -= win[3]*b0[3];
+      sum += win[4]*b0[4];
+      sum -= win[5]*b0[5];
+      sum += win[6]*b0[6];
+      sum -= win[7]*b0[7];
+      sum += win[8]*b0[8];
+      sum -= win[9]*b0[9];
+      sum += win[10]*b0[10];
+      sum -= win[11]*b0[11];
+      sum += win[12]*b0[12];
+      sum -= win[13]*b0[13];
+      sum += win[14]*b0[14];
+      sum -= win[15]*b0[15];
+      *out++ = sum;
+    }
+    {
+      register MYFLT sum = win[0]*b0[0];
+      sum += win[2]*b0[2];
+      sum += win[4]*b0[4];
+      sum += win[6]*b0[6];
+      sum += win[8]*b0[8];
+      sum += win[10]*b0[10];
+      sum += win[12]*b0[12];
+      sum += win[14]*b0[14];
+      *out++ = sum;
+      win -= 32; b0 -= 16;
+    }
+    win += (bo << 1);
+    for (i = 15; i; i--, win -= 32, b0 -= 16)
+    {
+      register MYFLT sum = -win[-1]*b0[0];
+      sum -= win[-2]*b0[1];
+      sum -= win[-3]*b0[2];
+      sum -= win[-4]*b0[3];
+      sum -= win[-5]*b0[4];
+      sum -= win[-6]*b0[5];
+      sum -= win[-7]*b0[6];
+      sum -= win[-8]*b0[7];
+      sum -= win[-9]*b0[8];
+      sum -= win[-10]*b0[9];
+      sum -= win[-11]*b0[10];
+      sum -= win[-12]*b0[11];
+      sum -= win[-13]*b0[12];
+      sum -= win[-14]*b0[13];
+      sum -= win[-15]*b0[14];
+      sum -= win[-0]*b0[15];
+      *out++ = sum;
+    }
+  }
+}
+
+static void synth_half(mpadec_t mpadec, MYFLT *bandptr, int channel, MYFLT *buffer)
+{
+  register struct mpadec_t *mpa = (struct mpadec_t *)mpadec;
+  unsigned bo;
+  MYFLT *b0, (*buf)[0x110];
+
+  if (!channel) {
+    mpa->synth_bufoffs--;
+    mpa->synth_bufoffs &= 0x0F;
+    buf = mpa->synth_buffers[0];
+  } else buf = mpa->synth_buffers[1];
+  if (mpa->synth_bufoffs & 1) {
+    b0 = buf[0];
+    bo = mpa->synth_bufoffs;
+    dct64(buf[1] + ((mpa->synth_bufoffs + 1) & 0x0F),
+          buf[0] + mpa->synth_bufoffs, bandptr);
+  } else {
+    b0 = buf[1];
+    bo = mpa->synth_bufoffs + 1;
+    dct64(buf[0] + mpa->synth_bufoffs,
+          buf[1] + (mpa->synth_bufoffs + 1), bandptr);
+  }
+  {
+    register int i;
+    register MYFLT *out = buffer;
+    register MYFLT *win = mpa->tables.decwin + (16 - bo);
+
+    for (i = 8; i; i--, win += 64, b0 += 32) {
+      register MYFLT sum = win[0]*b0[0];
+      sum -= win[1]*b0[1];
+      sum += win[2]*b0[2];
+      sum -= win[3]*b0[3];
+      sum += win[4]*b0[4];
+      sum -= win[5]*b0[5];
+      sum += win[6]*b0[6];
+      sum -= win[7]*b0[7];
+      sum += win[8]*b0[8];
+      sum -= win[9]*b0[9];
+      sum += win[10]*b0[10];
+      sum -= win[11]*b0[11];
+      sum += win[12]*b0[12];
+      sum -= win[13]*b0[13];
+      sum += win[14]*b0[14];
+      sum -= win[15]*b0[15];
+      *out++ = sum;
+    }
+    {
+      register MYFLT sum = win[0]*b0[0];
+      sum += win[2]*b0[2];
+      sum += win[4]*b0[4];
+      sum += win[6]*b0[6];
+      sum += win[8]*b0[8];
+      sum += win[10]*b0[10];
+      sum += win[12]*b0[12];
+      sum += win[14]*b0[14];
+      *out++ = sum;
+      win -= 64; b0 -= 32;
+    }
+    win += (bo << 1);
+    for (i = 7; i; i--, win -= 64, b0 -= 32)
+    {
+      register MYFLT sum = -win[-1]*b0[0];
+      sum -= win[-2]*b0[1];
+      sum -= win[-3]*b0[2];
+      sum -= win[-4]*b0[3];
+      sum -= win[-5]*b0[4];
+      sum -= win[-6]*b0[5];
+      sum -= win[-7]*b0[6];
+      sum -= win[-8]*b0[7];
+      sum -= win[-9]*b0[8];
+      sum -= win[-10]*b0[9];
+      sum -= win[-11]*b0[10];
+      sum -= win[-12]*b0[11];
+      sum -= win[-13]*b0[12];
+      sum -= win[-14]*b0[13];
+      sum -= win[-15]*b0[14];
+      sum -= win[-0]*b0[15];
+      *out++ = sum;
+    }
+  }
+}
+
+/* Full quality */
+
+/* 16 bit, little-endian */
+
+static void synth_full16lmm(mpadec_t mpadec, MYFLT *bandptr,
+                            int channel, uint8_t *buffer)
+{
+  register int i;
+  register int16_t *out = (int16_t *)buffer;
+  MYFLT buf[SBLIMIT];
+
+  synth_full(mpadec, bandptr, channel, buf);
+  for (i = 0; i < SBLIMIT; i++, out++) {
+    register int32_t tmp = LROUND(buf[i]);
+    if (tmp > 32767) tmp = 32767; else if (tmp < -32768) tmp = -32768;
+    ((uint8_t *)out)[0] = (uint8_t)tmp;
+    ((int8_t *)out)[1] = (int8_t)(tmp >> 8);
+  }
+}
+
+#define synth_full16lsm synth_full16lmm
+
+static void synth_full16lms(mpadec_t mpadec, MYFLT *bandptr,
+                            int channel, uint8_t *buffer)
+{
+  register int i;
+  register int16_t *out = (int16_t *)buffer;
+  MYFLT buf[SBLIMIT];
+
+  synth_full(mpadec, bandptr, channel, buf);
+  for (i = 0; i < SBLIMIT; i++, out += 2) {
+    register int32_t tmp = LROUND(buf[i]);
+    if (tmp > 32767) tmp = 32767; else if (tmp < -32768) tmp = -32768;
+    ((uint8_t *)out)[0] = ((uint8_t *)out)[2] = (uint8_t)tmp;
+    ((int8_t *)out)[1] = ((int8_t *)out)[3] = (int8_t)(tmp >> 8);
+  }
+}
+
+static void synth_full16lss(mpadec_t mpadec, MYFLT *bandptr,
+                            int channel, uint8_t *buffer)
+{
+  register int i;
+  register int16_t *out = (int16_t *)buffer;
+  MYFLT buf[SBLIMIT];
+
+  synth_full(mpadec, bandptr, channel, buf);
+  if (channel) out++;
+  for (i = 0; i < SBLIMIT; i++, out += 2) {
+    register int32_t tmp = LROUND(buf[i]);
+    if (tmp > 32767) tmp = 32767; else if (tmp < -32768) tmp = -32768;
+    ((uint8_t *)out)[0] = (uint8_t)tmp;
+    ((int8_t *)out)[1] = (int8_t)(tmp >> 8);
+  }
+}
+
+/* 16 bit, big-endian */
+
+static void synth_full16bmm(mpadec_t mpadec, MYFLT *bandptr,
+                            int channel, uint8_t *buffer)
+{
+  register int i;
+  register int16_t *out = (int16_t *)buffer;
+  MYFLT buf[SBLIMIT];
+
+  synth_full(mpadec, bandptr, channel, buf);
+  for (i = 0; i < SBLIMIT; i++, out++) {
+    register int32_t tmp = LROUND(buf[i]);
+    if (tmp > 32767) tmp = 32767;
+    else if (tmp < -32768) tmp = -32768;
+    ((uint8_t *)out)[1] = (uint8_t)tmp;
+    ((int8_t *)out)[0] = (int8_t)(tmp >> 8);
+  }
+}
+
+#define synth_full16bsm synth_full16bmm
+
+static void synth_full16bms(mpadec_t mpadec, MYFLT *bandptr,
+                            int channel, uint8_t *buffer)
+{
+  register int i;
+  register int16_t *out = (int16_t *)buffer;
+  MYFLT buf[SBLIMIT];
+
+  synth_full(mpadec, bandptr, channel, buf);
+  for (i = 0; i < SBLIMIT; i++, out += 2) {
+    register int32_t tmp = LROUND(buf[i]);
+    if (tmp > 32767) tmp = 32767; else if (tmp < -32768) tmp = -32768;
+    ((uint8_t *)out)[1] = ((uint8_t *)out)[3] = (uint8_t)tmp;
+    ((int8_t *)out)[0] = ((int8_t *)out)[2] = (int8_t)(tmp >> 8);
+  }
+}
+
+static void synth_full16bss(mpadec_t mpadec, MYFLT *bandptr,
+                            int channel, uint8_t *buffer)
+{
+  register int i;
+  register int16_t *out = (int16_t *)buffer;
+  MYFLT buf[SBLIMIT];
+
+  synth_full(mpadec, bandptr, channel, buf);
+  if (channel) out++;
+  for (i = 0; i < SBLIMIT; i++, out += 2) {
+    register int32_t tmp = LROUND(buf[i]);
+    if (tmp > 32767) tmp = 32767; else if (tmp < -32768) tmp = -32768;
+    ((uint8_t *)out)[1] = (uint8_t)tmp;
+    ((int8_t *)out)[0] = (int8_t)(tmp >> 8);
+  }
+}
+
+/* 24 bit, little-endian */
+
+static void synth_full24lmm(mpadec_t mpadec, MYFLT *bandptr,
+                            int channel, uint8_t *buffer)
+{
+  register int i;
+  register uint8_t *out = (uint8_t *)buffer;
+  MYFLT buf[SBLIMIT];
+
+  synth_full(mpadec, bandptr, channel, buf);
+  for (i = 0; i < SBLIMIT; i++, out += 3) {
+    register int32_t tmp = LROUND(buf[i]);
+    if (tmp > 0x7FFFFF) tmp = 0x7FFFFF;
+    else if (tmp < -0x800000) tmp = -0x800000;
+    ((uint8_t *)out)[0] = (uint8_t)tmp;
+    ((uint8_t *)out)[1] = (uint8_t)(tmp >> 8);
+    ((int8_t *)out)[2] = (int8_t)(tmp >> 16);
+  }
+}
+
+#define synth_full24lsm synth_full24lmm
+
+static void synth_full24lms(mpadec_t mpadec, MYFLT *bandptr, 
+                            int channel, uint8_t *buffer)
+{
+  register int i;
+  register uint8_t *out = (uint8_t *)buffer;
+  MYFLT buf[SBLIMIT];
+
+  synth_full(mpadec, bandptr, channel, buf);
+  for (i = 0; i < SBLIMIT; i++, out += 6) {
+    register int32_t tmp = LROUND(buf[i]);
+    if (tmp > 0x7FFFFF) tmp = 0x7FFFFF; 
+    else if (tmp < -0x800000) tmp = -0x800000;
+    ((uint8_t *)out)[0] = ((uint8_t *)out)[3] = (uint8_t)tmp;
+    ((uint8_t *)out)[1] = ((uint8_t *)out)[4] = (uint8_t)(tmp >> 8);
+    ((int8_t *)out)[2] = ((int8_t *)out)[5] = (int8_t)(tmp >> 16);
+  }
+}
+
+static void synth_full24lss(mpadec_t mpadec, MYFLT *bandptr,
+                            int channel, uint8_t *buffer)
+{
+  register int i;
+  register uint8_t *out = (uint8_t *)buffer;
+  MYFLT buf[SBLIMIT];
+
+  synth_full(mpadec, bandptr, channel, buf);
+  if (channel) out += 3;
+  for (i = 0; i < SBLIMIT; i++, out += 6) {
+    register int32_t tmp = LROUND(buf[i]);
+    if (tmp > 0x7FFFFF) tmp = 0x7FFFFF;
+    else if (tmp < -0x800000) tmp = -0x800000;
+    ((uint8_t *)out)[0] = (uint8_t)tmp;
+    ((uint8_t *)out)[1] = (uint8_t)(tmp >> 8);
+    ((int8_t *)out)[2] = (int8_t)(tmp >> 16);
+  }
+}
+
+/* 24 bit, big-endian */
+
+static void synth_full24bmm(mpadec_t mpadec, MYFLT *bandptr,
+                            int channel, uint8_t *buffer)
+{
+  register int i;
+  register uint8_t *out = (uint8_t *)buffer;
+  MYFLT buf[SBLIMIT];
+
+  synth_full(mpadec, bandptr, channel, buf);
+  for (i = 0; i < SBLIMIT; i++, out += 3) {
+    register int32_t tmp = LROUND(buf[i]);
+    if (tmp > 0x7FFFFF) tmp = 0x7FFFFF; 
+    else if (tmp < -0x800000) tmp = -0x800000;
+    ((uint8_t *)out)[2] = (uint8_t)tmp;
+    ((uint8_t *)out)[1] = (uint8_t)(tmp >> 8);
+    ((int8_t *)out)[0] = (int8_t)(tmp >> 16);
+  }
+}
+
+#define synth_full24bsm synth_full24bmm
+
+static void synth_full24bms(mpadec_t mpadec, MYFLT *bandptr,
+                            int channel, uint8_t *buffer)
+{
+  register int i;
+  register uint8_t *out = (uint8_t *)buffer;
+  MYFLT buf[SBLIMIT];
+
+  synth_full(mpadec, bandptr, channel, buf);
+  for (i = 0; i < SBLIMIT; i++, out += 6) {
+    register int32_t tmp = LROUND(buf[i]);
+    if (tmp > 0x7FFFFF) tmp = 0x7FFFFF; 
+    else if (tmp < -0x800000) tmp = -0x800000;
+    ((uint8_t *)out)[2] = ((uint8_t *)out)[5] = (uint8_t)tmp;
+    ((uint8_t *)out)[1] = ((uint8_t *)out)[4] = (uint8_t)(tmp >> 8);
+    ((int8_t *)out)[0] = ((int8_t *)out)[3] = (int8_t)(tmp >> 16);
+  }
+}
+
+static void synth_full24bss(mpadec_t mpadec, MYFLT *bandptr,
+                            int channel, uint8_t *buffer)
+{
+  register int i;
+  register uint8_t *out = (uint8_t *)buffer;
+  MYFLT buf[SBLIMIT];
+
+  synth_full(mpadec, bandptr, channel, buf);
+  if (channel) out += 3;
+  for (i = 0; i < SBLIMIT; i++, out += 6) {
+    register int32_t tmp = LROUND(buf[i]);
+    if (tmp > 0x7FFFFF) tmp = 0x7FFFFF; 
+    else if (tmp < -0x800000) tmp = -0x800000;
+    ((uint8_t *)out)[2] = (uint8_t)tmp;
+    ((uint8_t *)out)[1] = (uint8_t)(tmp >> 8);
+    ((int8_t *)out)[0] = (int8_t)(tmp >> 16);
+  }
+}
+
+/* 32 bit , little-endian */
+
+static void synth_full32lmm(mpadec_t mpadec, MYFLT *bandptr, 
+                            int channel, uint8_t *buffer)
+{
+  register int i;
+  register int32_t *out = (int32_t *)buffer;
+  MYFLT buf[SBLIMIT];
+
+  synth_full(mpadec, bandptr, channel, buf);
+  for (i = 0; i < SBLIMIT; i++, out++) {
+    register int64_t tmp = LLROUND(buf[i]);
+    if (tmp > 0x7FFFFFFF) tmp = 0x7FFFFFFF; 
+    else if (tmp < (-0x7FFFFFFF - 1)) tmp = (-0x7FFFFFFF - 1);
+    ((uint8_t *)out)[0] = (uint8_t)tmp;
+    ((uint8_t *)out)[1] = (uint8_t)(tmp >> 8);
+    ((uint8_t *)out)[2] = (uint8_t)(tmp >> 16);
+    ((int8_t *)out)[3] = (int8_t)(tmp >> 24);
+  }
+}
+
+#define synth_full32lsm synth_full32lmm
+
+static void synth_full32lms(mpadec_t mpadec, MYFLT *bandptr,
+                            int channel, uint8_t *buffer)
+{
+  register int i;
+  register int32_t *out = (int32_t *)buffer;
+  MYFLT buf[SBLIMIT];
+
+  synth_full(mpadec, bandptr, channel, buf);
+  for (i = 0; i < SBLIMIT; i++, out += 2) {
+    register int64_t tmp = LLROUND(buf[i]);
+    if (tmp > 0x7FFFFFFF) tmp = 0x7FFFFFFF; 
+    else if (tmp < (-0x7FFFFFFF - 1)) tmp = (-0x7FFFFFFF - 1);
+    ((uint8_t *)out)[0] = ((uint8_t *)out)[4] = (uint8_t)tmp;
+    ((uint8_t *)out)[1] = ((uint8_t *)out)[5] = (uint8_t)(tmp >> 8);
+    ((uint8_t *)out)[2] = ((uint8_t *)out)[6] = (uint8_t)(tmp >> 16);
+    ((int8_t *)out)[3] = ((int8_t *)out)[7] = (int8_t)(tmp >> 24);
+  }
+}
+
+static void synth_full32lss(mpadec_t mpadec, MYFLT *bandptr,
+                            int channel, uint8_t *buffer)
+{
+  register int i;
+  register int32_t *out = (int32_t *)buffer;
+  MYFLT buf[SBLIMIT];
+
+  synth_full(mpadec, bandptr, channel, buf);
+  if (channel) out++;
+  for (i = 0; i < SBLIMIT; i++, out += 2) {
+    register int64_t tmp = LLROUND(buf[i]);
+    if (tmp > 0x7FFFFFFF) tmp = 0x7FFFFFFF;
+    else if (tmp < (-0x7FFFFFFF - 1)) tmp = (-0x7FFFFFFF - 1);
+    ((uint8_t *)out)[0] = (uint8_t)tmp;
+    ((uint8_t *)out)[1] = (uint8_t)(tmp >> 8);
+    ((uint8_t *)out)[2] = (uint8_t)(tmp >> 16);
+    ((int8_t *)out)[3] = (int8_t)(tmp >> 24);
+  }
+}
+
+/* 32 bit, big-endian */
+
+static void synth_full32bmm(mpadec_t mpadec, MYFLT *bandptr,
+                            int channel, uint8_t *buffer)
+{
+  register int i;
+  register int32_t *out = (int32_t *)buffer;
+  MYFLT buf[SBLIMIT];
+
+  synth_full(mpadec, bandptr, channel, buf);
+  for (i = 0; i < SBLIMIT; i++, out++) {
+    register int64_t tmp = LLROUND(buf[i]);
+    if (tmp > 0x7FFFFFFF) tmp = 0x7FFFFFFF;
+    else if (tmp < (-0x7FFFFFFF - 1)) tmp = (-0x7FFFFFFF - 1);
+    ((uint8_t *)out)[3] = (uint8_t)tmp;
+    ((uint8_t *)out)[2] = (uint8_t)(tmp >> 8);
+    ((uint8_t *)out)[1] = (uint8_t)(tmp >> 16);
+    ((int8_t *)out)[0] = (int8_t)(tmp >> 24);
+  }
+}
+
+#define synth_full32bsm synth_full32bmm
+
+static void synth_full32bms(mpadec_t mpadec, MYFLT *bandptr,
+                            int channel, uint8_t *buffer)
+{
+  register int i;
+  register int32_t *out = (int32_t *)buffer;
+  MYFLT buf[SBLIMIT];
+
+  synth_full(mpadec, bandptr, channel, buf);
+  for (i = 0; i < SBLIMIT; i++, out += 2) {
+    register int64_t tmp = LLROUND(buf[i]);
+    if (tmp > 0x7FFFFFFF) tmp = 0x7FFFFFFF; 
+    else if (tmp < (-0x7FFFFFFF - 1)) tmp = (-0x7FFFFFFF - 1);
+    ((uint8_t *)out)[3] = ((uint8_t *)out)[7] = (uint8_t)tmp;
+    ((uint8_t *)out)[2] = ((uint8_t *)out)[6] = (uint8_t)(tmp >> 8);
+    ((uint8_t *)out)[1] = ((uint8_t *)out)[5] = (uint8_t)(tmp >> 16);
+    ((int8_t *)out)[0] = ((int8_t *)out)[4] = (int8_t)(tmp >> 24);
+  }
+}
+
+static void synth_full32bss(mpadec_t mpadec, MYFLT *bandptr,
+                            int channel, uint8_t *buffer)
+{
+  register int i;
+  register int32_t *out = (int32_t *)buffer;
+  MYFLT buf[SBLIMIT];
+
+  synth_full(mpadec, bandptr, channel, buf);
+  if (channel) out++;
+  for (i = 0; i < SBLIMIT; i++, out += 2) {
+    register int64_t tmp = LLROUND(buf[i]);
+    if (tmp > 0x7FFFFFFF) tmp = 0x7FFFFFFF; 
+    else if (tmp < (-0x7FFFFFFF - 1)) tmp = (-0x7FFFFFFF - 1);
+    ((uint8_t *)out)[3] = (uint8_t)tmp;
+    ((uint8_t *)out)[2] = (uint8_t)(tmp >> 8);
+    ((uint8_t *)out)[1] = (uint8_t)(tmp >> 16);
+    ((int8_t *)out)[0] = (int8_t)(tmp >> 24);
+  }
+}
+
+/* 32 bit floating-point, little-endian */
+
+static void synth_full32flmm(mpadec_t mpadec, MYFLT *bandptr,
+                             int channel, uint8_t *buffer)
+{
+  register int i;
+  register float *out = (float *)buffer;
+  MYFLT buf[SBLIMIT];
+
+  synth_full(mpadec, bandptr, channel, buf);
+  for (i = 0; i < SBLIMIT; i++, out++) {
+    int32_t tmp;
+    *((float *)(&tmp)) = (float)buf[i];
+    ((uint8_t *)out)[0] = (uint8_t)tmp;
+    ((uint8_t *)out)[1] = (uint8_t)(tmp >> 8);
+    ((uint8_t *)out)[2] = (uint8_t)(tmp >> 16);
+    ((int8_t *)out)[3] = (int8_t)(tmp >> 24);
+  }
+}
+
+#define synth_full32flsm synth_full32flmm
+
+static void synth_full32flms(mpadec_t mpadec, MYFLT *bandptr,
+                             int channel, uint8_t *buffer)
+{
+  register int i;
+  register float *out = (float *)buffer;
+  MYFLT buf[SBLIMIT];
+
+  synth_full(mpadec, bandptr, channel, buf);
+  for (i = 0; i < SBLIMIT; i++, out += 2) {
+    int32_t tmp;
+    *((float *)(&tmp)) = (float)buf[i];
+    ((uint8_t *)out)[0] = ((uint8_t *)out)[4] = (uint8_t)tmp;
+    ((uint8_t *)out)[1] = ((uint8_t *)out)[5] = (uint8_t)(tmp >> 8);
+    ((uint8_t *)out)[2] = ((uint8_t *)out)[6] = (uint8_t)(tmp >> 16);
+    ((int8_t *)out)[3] = ((int8_t *)out)[7] = (int8_t)(tmp >> 24);
+  }
+}
+
+static void synth_full32flss(mpadec_t mpadec, MYFLT *bandptr,
+                             int channel, uint8_t *buffer)
+{
+  register int i;
+  register float *out = (float *)buffer;
+  MYFLT buf[SBLIMIT];
+
+  synth_full(mpadec, bandptr, channel, buf);
+  if (channel) out++;
+  for (i = 0; i < SBLIMIT; i++, out += 2) {
+    int32_t tmp;
+    *((float *)(&tmp)) = (float)buf[i];
+    ((uint8_t *)out)[0] = (uint8_t)tmp;
+    ((uint8_t *)out)[1] = (uint8_t)(tmp >> 8);
+    ((uint8_t *)out)[2] = (uint8_t)(tmp >> 16);
+    ((int8_t *)out)[3] = (int8_t)(tmp >> 24);
+  }
+}
+
+/* 32 bit floating-point, big-endian */
+
+static void synth_full32fbmm(mpadec_t mpadec, MYFLT *bandptr,
+                             int channel, uint8_t *buffer)
+{
+  register int i;
+  register float *out = (float *)buffer;
+  MYFLT buf[SBLIMIT];
+
+  synth_full(mpadec, bandptr, channel, buf);
+  for (i = 0; i < SBLIMIT; i++, out++) {
+    int32_t tmp;
+    *((float *)(&tmp)) = (float)buf[i];
+    ((uint8_t *)out)[3] = (uint8_t)tmp;
+    ((uint8_t *)out)[2] = (uint8_t)(tmp >> 8);
+    ((uint8_t *)out)[1] = (uint8_t)(tmp >> 16);
+    ((int8_t *)out)[0] = (int8_t)(tmp >> 24);
+  }
+}
+
+#define synth_full32fbsm synth_full32fbmm
+
+static void synth_full32fbms(mpadec_t mpadec, MYFLT *bandptr,
+                             int channel, uint8_t *buffer)
+{
+  register int i;
+  register float *out = (float *)buffer;
+  MYFLT buf[SBLIMIT];
+
+  synth_full(mpadec, bandptr, channel, buf);
+  for (i = 0; i < SBLIMIT; i++, out += 2) {
+    int32_t tmp;
+    *((float *)(&tmp)) = (float)buf[i];
+    ((uint8_t *)out)[3] = ((uint8_t *)out)[7] = (uint8_t)tmp;
+    ((uint8_t *)out)[2] = ((uint8_t *)out)[6] = (uint8_t)(tmp >> 8);
+    ((uint8_t *)out)[1] = ((uint8_t *)out)[5] = (uint8_t)(tmp >> 16);
+    ((int8_t *)out)[0] = ((int8_t *)out)[4] = (int8_t)(tmp >> 24);
+  }
+}
+
+static void synth_full32fbss(mpadec_t mpadec, MYFLT *bandptr,
+                             int channel, uint8_t *buffer)
+{
+  register int i;
+  register float *out = (float *)buffer;
+  MYFLT buf[SBLIMIT];
+
+  synth_full(mpadec, bandptr, channel, buf);
+  if (channel) out++;
+  for (i = 0; i < SBLIMIT; i++, out += 2) {
+    int32_t tmp;
+    *((float *)(&tmp)) = (float)buf[i];
+    ((uint8_t *)out)[3] = (uint8_t)tmp;
+    ((uint8_t *)out)[2] = (uint8_t)(tmp >> 8);
+    ((uint8_t *)out)[1] = (uint8_t)(tmp >> 16);
+    ((int8_t *)out)[0] = (int8_t)(tmp >> 24);
+  }
+}
+
+/* Half quality */
+
+/* 16 bit, little-endian */
+
+static void synth_half16lmm(mpadec_t mpadec, MYFLT *bandptr,
+                            int channel, uint8_t *buffer)
+{
+  register int i;
+  register int16_t *out = (int16_t *)buffer;
+  MYFLT buf[SBLIMIT/2];
+
+  synth_half(mpadec, bandptr, channel, buf);
+  for (i = 0; i < SBLIMIT/2; i++, out++) {
+    register int32_t tmp = LROUND(buf[i]);
+    if (tmp > 32767) tmp = 32767; else if (tmp < -32768) tmp = -32768;
+    ((uint8_t *)out)[0] = (uint8_t)tmp;
+    ((int8_t *)out)[1] = (int8_t)(tmp >> 8);
+  }
+}
+
+#define synth_half16lsm synth_half16lmm
+
+static void synth_half16lms(mpadec_t mpadec, MYFLT *bandptr,
+                            int channel, uint8_t *buffer)
+{
+  register int i;
+  register int16_t *out = (int16_t *)buffer;
+  MYFLT buf[SBLIMIT/2];
+
+  synth_half(mpadec, bandptr, channel, buf);
+  for (i = 0; i < SBLIMIT/2; i++, out += 2) {
+    register int32_t tmp = LROUND(buf[i]);
+    if (tmp > 32767) tmp = 32767; else if (tmp < -32768) tmp = -32768;
+    ((uint8_t *)out)[0] = ((uint8_t *)out)[2] = (uint8_t)tmp;
+    ((int8_t *)out)[1] = ((int8_t *)out)[3] = (int8_t)(tmp >> 8);
+  }
+}
+
+static void synth_half16lss(mpadec_t mpadec, MYFLT *bandptr,
+                            int channel, uint8_t *buffer)
+{
+  register int i;
+  register int16_t *out = (int16_t *)buffer;
+  MYFLT buf[SBLIMIT/2];
+
+  synth_half(mpadec, bandptr, channel, buf);
+  if (channel) out++;
+  for (i = 0; i < SBLIMIT/2; i++, out += 2) {
+    register int32_t tmp = LROUND(buf[i]);
+    if (tmp > 32767) tmp = 32767; else if (tmp < -32768) tmp = -32768;
+    ((uint8_t *)out)[0] = (uint8_t)tmp;
+    ((int8_t *)out)[1] = (int8_t)(tmp >> 8);
+  }
+}
+
+/* 16 bit, big-endian */
+
+static void synth_half16bmm(mpadec_t mpadec, MYFLT *bandptr,
+                            int channel, uint8_t *buffer)
+{
+  register int i;
+  register int16_t *out = (int16_t *)buffer;
+  MYFLT buf[SBLIMIT/2];
+
+  synth_half(mpadec, bandptr, channel, buf);
+  for (i = 0; i < SBLIMIT/2; i++, out++) {
+    register int32_t tmp = LROUND(buf[i]);
+    if (tmp > 32767) tmp = 32767; else if (tmp < -32768) tmp = -32768;
+    ((uint8_t *)out)[1] = (uint8_t)tmp;
+    ((int8_t *)out)[0] = (int8_t)(tmp >> 8);
+  }
+}
+
+#define synth_half16bsm synth_half16bmm
+
+static void synth_half16bms(mpadec_t mpadec, MYFLT *bandptr,
+                            int channel, uint8_t *buffer)
+{
+  register int i;
+  register int16_t *out = (int16_t *)buffer;
+  MYFLT buf[SBLIMIT/2];
+
+  synth_half(mpadec, bandptr, channel, buf);
+  for (i = 0; i < SBLIMIT/2; i++, out += 2) {
+    register int32_t tmp = LROUND(buf[i]);
+    if (tmp > 32767) tmp = 32767; else if (tmp < -32768) tmp = -32768;
+    ((uint8_t *)out)[1] = ((uint8_t *)out)[3] = (uint8_t)tmp;
+    ((int8_t *)out)[0] = ((int8_t *)out)[2] = (int8_t)(tmp >> 8);
+  }
+}
+
+static void synth_half16bss(mpadec_t mpadec, MYFLT *bandptr,
+                            int channel, uint8_t *buffer)
+{
+  register int i;
+  register int16_t *out = (int16_t *)buffer;
+  MYFLT buf[SBLIMIT/2];
+
+  synth_half(mpadec, bandptr, channel, buf);
+  if (channel) out++;
+  for (i = 0; i < SBLIMIT/2; i++, out += 2) {
+    register int32_t tmp = LROUND(buf[i]);
+    if (tmp > 32767) tmp = 32767; else if (tmp < -32768) tmp = -32768;
+    ((uint8_t *)out)[1] = (uint8_t)tmp;
+    ((int8_t *)out)[0] = (int8_t)(tmp >> 8);
+  }
+}
+
+/* 24 bit, little-endian */
+
+static void synth_half24lmm(mpadec_t mpadec, MYFLT *bandptr,
+                            int channel, uint8_t *buffer)
+{
+  register int i;
+  register uint8_t *out = (uint8_t *)buffer;
+  MYFLT buf[SBLIMIT/2];
+
+  synth_half(mpadec, bandptr, channel, buf);
+  for (i = 0; i < SBLIMIT/2; i++, out += 3) {
+    register int32_t tmp = LROUND(buf[i]);
+    if (tmp > 0x7FFFFF) tmp = 0x7FFFFF;
+    else if (tmp < -0x800000) tmp = -0x800000;
+    ((uint8_t *)out)[0] = (uint8_t)tmp;
+    ((uint8_t *)out)[1] = (uint8_t)(tmp >> 8);
+    ((int8_t *)out)[2] = (int8_t)(tmp >> 16);
+  }
+}
+
+#define synth_half24lsm synth_half24lmm
+
+static void synth_half24lms(mpadec_t mpadec, MYFLT *bandptr,
+                            int channel, uint8_t *buffer)
+{
+  register int i;
+  register uint8_t *out = (uint8_t *)buffer;
+  MYFLT buf[SBLIMIT/2];
+
+  synth_half(mpadec, bandptr, channel, buf);
+  for (i = 0; i < SBLIMIT/2; i++, out += 6) {
+    register int32_t tmp = LROUND(buf[i]);
+    if (tmp > 0x7FFFFF) tmp = 0x7FFFFF;
+    else if (tmp < -0x800000) tmp = -0x800000;
+    ((uint8_t *)out)[0] = ((uint8_t *)out)[3] = (uint8_t)tmp;
+    ((uint8_t *)out)[1] = ((uint8_t *)out)[4] = (uint8_t)(tmp >> 8);
+    ((int8_t *)out)[2] = ((int8_t *)out)[5] = (int8_t)(tmp >> 16);
+  }
+}
+
+static void synth_half24lss(mpadec_t mpadec, MYFLT *bandptr,
+                            int channel, uint8_t *buffer)
+{
+  register int i;
+  register uint8_t *out = (uint8_t *)buffer;
+  MYFLT buf[SBLIMIT/2];
+
+  synth_half(mpadec, bandptr, channel, buf);
+  if (channel) out += 3;
+  for (i = 0; i < SBLIMIT/2; i++, out += 6) {
+    register int32_t tmp = LROUND(buf[i]);
+    if (tmp > 0x7FFFFF) tmp = 0x7FFFFF; 
+    else if (tmp < -0x800000) tmp = -0x800000;
+    ((uint8_t *)out)[0] = (uint8_t)tmp;
+    ((uint8_t *)out)[1] = (uint8_t)(tmp >> 8);
+    ((int8_t *)out)[2] = (int8_t)(tmp >> 16);
+  }
+}
+
+/* 24 bit, big-endian */
+
+static void synth_half24bmm(mpadec_t mpadec, MYFLT *bandptr,
+                            int channel, uint8_t *buffer)
+{
+  register int i;
+  register uint8_t *out = (uint8_t *)buffer;
+  MYFLT buf[SBLIMIT/2];
+
+  synth_half(mpadec, bandptr, channel, buf);
+  for (i = 0; i < SBLIMIT/2; i++, out += 3) {
+    register int32_t tmp = LROUND(buf[i]);
+    if (tmp > 0x7FFFFF) tmp = 0x7FFFFF;
+    else if (tmp < -0x800000) tmp = -0x800000;
+    ((uint8_t *)out)[2] = (uint8_t)tmp;
+    ((uint8_t *)out)[1] = (uint8_t)(tmp >> 8);
+    ((int8_t *)out)[0] = (int8_t)(tmp >> 16);
+  }
+}
+
+#define synth_half24bsm synth_half24bmm
+
+static void synth_half24bms(mpadec_t mpadec, MYFLT *bandptr,
+                            int channel, uint8_t *buffer)
+{
+  register int i;
+  register uint8_t *out = (uint8_t *)buffer;
+  MYFLT buf[SBLIMIT/2];
+
+  synth_half(mpadec, bandptr, channel, buf);
+  for (i = 0; i < SBLIMIT/2; i++, out += 6) {
+    register int32_t tmp = LROUND(buf[i]);
+    if (tmp > 0x7FFFFF) tmp = 0x7FFFFF;
+    else if (tmp < -0x800000) tmp = -0x800000;
+    ((uint8_t *)out)[2] = ((uint8_t *)out)[5] = (uint8_t)tmp;
+    ((uint8_t *)out)[1] = ((uint8_t *)out)[4] = (uint8_t)(tmp >> 8);
+    ((int8_t *)out)[0] = ((int8_t *)out)[3] = (int8_t)(tmp >> 16);
+  }
+}
+
+static void synth_half24bss(mpadec_t mpadec, MYFLT *bandptr,
+                            int channel, uint8_t *buffer)
+{
+  register int i;
+  register uint8_t *out = (uint8_t *)buffer;
+  MYFLT buf[SBLIMIT/2];
+
+  synth_half(mpadec, bandptr, channel, buf);
+  if (channel) out += 3;
+  for (i = 0; i < SBLIMIT/2; i++, out += 6) {
+    register int32_t tmp = LROUND(buf[i]);
+    if (tmp > 0x7FFFFF) tmp = 0x7FFFFF;
+    else if (tmp < -0x800000) tmp = -0x800000;
+    ((uint8_t *)out)[2] = (uint8_t)tmp;
+    ((uint8_t *)out)[1] = (uint8_t)(tmp >> 8);
+    ((int8_t *)out)[0] = (int8_t)(tmp >> 16);
+  }
+}
+
+/* 32 bit, little-endian */
+
+static void synth_half32lmm(mpadec_t mpadec, MYFLT *bandptr,
+                            int channel, uint8_t *buffer)
+{
+  register int i;
+  register int32_t *out = (int32_t *)buffer;
+  MYFLT buf[SBLIMIT/2];
+
+  synth_half(mpadec, bandptr, channel, buf);
+  for (i = 0; i < SBLIMIT/2; i++, out++) {
+    register int64_t tmp = LLROUND(buf[i]);
+    if (tmp > 0x7FFFFFFF) tmp = 0x7FFFFFFF;
+    else if (tmp < (-0x7FFFFFFF - 1)) tmp = (-0x7FFFFFFF - 1);
+    ((uint8_t *)out)[0] = (uint8_t)tmp;
+    ((uint8_t *)out)[1] = (uint8_t)(tmp >> 8);
+    ((uint8_t *)out)[2] = (uint8_t)(tmp >> 16);
+    ((int8_t *)out)[3] = (int8_t)(tmp >> 24);
+  }
+}
+
+#define synth_half32lsm synth_half32lmm
+
+static void synth_half32lms(mpadec_t mpadec, MYFLT *bandptr,
+                            int channel, uint8_t *buffer)
+{
+  register int i;
+  register int32_t *out = (int32_t *)buffer;
+  MYFLT buf[SBLIMIT/2];
+
+  synth_half(mpadec, bandptr, channel, buf);
+  for (i = 0; i < SBLIMIT/2; i++, out += 2) {
+    register int64_t tmp = LLROUND(buf[i]);
+    if (tmp > 0x7FFFFFFF) tmp = 0x7FFFFFFF;
+    else if (tmp < (-0x7FFFFFFF - 1)) tmp = (-0x7FFFFFFF - 1);
+    ((uint8_t *)out)[0] = ((uint8_t *)out)[4] = (uint8_t)tmp;
+    ((uint8_t *)out)[1] = ((uint8_t *)out)[5] = (uint8_t)(tmp >> 8);
+    ((uint8_t *)out)[2] = ((uint8_t *)out)[6] = (uint8_t)(tmp >> 16);
+    ((int8_t *)out)[3] = ((int8_t *)out)[7] = (int8_t)(tmp >> 24);
+  }
+}
+
+static void synth_half32lss(mpadec_t mpadec, MYFLT *bandptr,
+                            int channel, uint8_t *buffer)
+{
+  register int i;
+  register int32_t *out = (int32_t *)buffer;
+  MYFLT buf[SBLIMIT/2];
+
+  synth_half(mpadec, bandptr, channel, buf);
+  if (channel) out++;
+  for (i = 0; i < SBLIMIT/2; i++, out += 2) {
+    register int64_t tmp = LLROUND(buf[i]);
+    if (tmp > 0x7FFFFFFF) tmp = 0x7FFFFFFF;
+    else if (tmp < (-0x7FFFFFFF - 1)) tmp = (-0x7FFFFFFF - 1);
+    ((uint8_t *)out)[0] = (uint8_t)tmp;
+    ((uint8_t *)out)[1] = (uint8_t)(tmp >> 8);
+    ((uint8_t *)out)[2] = (uint8_t)(tmp >> 16);
+    ((int8_t *)out)[3] = (int8_t)(tmp >> 24);
+  }
+}
+
+/* 32 bit, big-endian */
+
+static void synth_half32bmm(mpadec_t mpadec, MYFLT *bandptr,
+                            int channel, uint8_t *buffer)
+{
+  register int i;
+  register int32_t *out = (int32_t *)buffer;
+  MYFLT buf[SBLIMIT/2];
+
+  synth_half(mpadec, bandptr, channel, buf);
+  for (i = 0; i < SBLIMIT/2; i++, out++) {
+    register int64_t tmp = LLROUND(buf[i]);
+    if (tmp > 0x7FFFFFFF) tmp = 0x7FFFFFFF;
+    else if (tmp < (-0x7FFFFFFF - 1)) tmp = (-0x7FFFFFFF - 1);
+    ((uint8_t *)out)[3] = (uint8_t)tmp;
+    ((uint8_t *)out)[2] = (uint8_t)(tmp >> 8);
+    ((uint8_t *)out)[1] = (uint8_t)(tmp >> 16);
+    ((int8_t *)out)[0] = (int8_t)(tmp >> 24);
+  }
+}
+
+#define synth_half32bsm synth_half32bmm
+
+static void synth_half32bms(mpadec_t mpadec, MYFLT *bandptr,
+                            int channel, uint8_t *buffer)
+{
+  register int i;
+  register int32_t *out = (int32_t *)buffer;
+  MYFLT buf[SBLIMIT/2];
+
+  synth_half(mpadec, bandptr, channel, buf);
+  for (i = 0; i < SBLIMIT/2; i++, out += 2) {
+    register int64_t tmp = LLROUND(buf[i]);
+    if (tmp > 0x7FFFFFFF) tmp = 0x7FFFFFFF;
+    else if (tmp < (-0x7FFFFFFF - 1)) tmp = (-0x7FFFFFFF - 1);
+    ((uint8_t *)out)[3] = ((uint8_t *)out)[7] = (uint8_t)tmp;
+    ((uint8_t *)out)[2] = ((uint8_t *)out)[6] = (uint8_t)(tmp >> 8);
+    ((uint8_t *)out)[1] = ((uint8_t *)out)[5] = (uint8_t)(tmp >> 16);
+    ((int8_t *)out)[0] = ((int8_t *)out)[4] = (int8_t)(tmp >> 24);
+  }
+}
+
+static void synth_half32bss(mpadec_t mpadec, MYFLT *bandptr,
+                            int channel, uint8_t *buffer)
+{
+  register int i;
+  register int32_t *out = (int32_t *)buffer;
+  MYFLT buf[SBLIMIT/2];
+
+  synth_half(mpadec, bandptr, channel, buf);
+  if (channel) out++;
+  for (i = 0; i < SBLIMIT/2; i++, out += 2) {
+    register int64_t tmp = LLROUND(buf[i]);
+    if (tmp > 0x7FFFFFFF) tmp = 0x7FFFFFFF;
+    else if (tmp < (-0x7FFFFFFF - 1)) tmp = (-0x7FFFFFFF - 1);
+    ((uint8_t *)out)[3] = (uint8_t)tmp;
+    ((uint8_t *)out)[2] = (uint8_t)(tmp >> 8);
+    ((uint8_t *)out)[1] = (uint8_t)(tmp >> 16);
+    ((int8_t *)out)[0] = (int8_t)(tmp >> 24);
+  }
+}
+
+/* 32 bit floating-point, little-endian */
+
+static void synth_half32flmm(mpadec_t mpadec, MYFLT *bandptr,
+                             int channel, uint8_t *buffer)
+{
+  register int i;
+  register float *out = (float *)buffer;
+  MYFLT buf[SBLIMIT/2];
+
+  synth_half(mpadec, bandptr, channel, buf);
+  for (i = 0; i < SBLIMIT/2; i++, out++) {
+    int32_t tmp;
+    *((float *)(&tmp)) = (float)buf[i];
+    ((uint8_t *)out)[0] = (uint8_t)tmp;
+    ((uint8_t *)out)[1] = (uint8_t)(tmp >> 8);
+    ((uint8_t *)out)[2] = (uint8_t)(tmp >> 16);
+    ((int8_t *)out)[3] = (int8_t)(tmp >> 24);
+  }
+}
+
+#define synth_half32flsm synth_half32flmm
+
+static void synth_half32flms(mpadec_t mpadec, MYFLT *bandptr,
+                             int channel, uint8_t *buffer)
+{
+  register int i;
+  register float *out = (float *)buffer;
+  MYFLT buf[SBLIMIT/2];
+
+  synth_half(mpadec, bandptr, channel, buf);
+  for (i = 0; i < SBLIMIT/2; i++, out += 2) {
+    int32_t tmp;
+    *((float *)(&tmp)) = (float)buf[i];
+    ((uint8_t *)out)[0] = ((uint8_t *)out)[4] = (uint8_t)tmp;
+    ((uint8_t *)out)[1] = ((uint8_t *)out)[5] = (uint8_t)(tmp >> 8);
+    ((uint8_t *)out)[2] = ((uint8_t *)out)[6] = (uint8_t)(tmp >> 16);
+    ((int8_t *)out)[3] = ((int8_t *)out)[7] = (int8_t)(tmp >> 24);
+  }
+}
+
+static void synth_half32flss(mpadec_t mpadec, MYFLT *bandptr,
+                             int channel, uint8_t *buffer)
+{
+  register int i;
+  register float *out = (float *)buffer;
+  MYFLT buf[SBLIMIT/2];
+
+  synth_half(mpadec, bandptr, channel, buf);
+  if (channel) out++;
+  for (i = 0; i < SBLIMIT/2; i++, out += 2) {
+    int32_t tmp;
+    *((float *)(&tmp)) = (float)buf[i];
+    ((uint8_t *)out)[0] = (uint8_t)tmp;
+    ((uint8_t *)out)[1] = (uint8_t)(tmp >> 8);
+    ((uint8_t *)out)[2] = (uint8_t)(tmp >> 16);
+    ((int8_t *)out)[3] = (int8_t)(tmp >> 24);
+  }
+}
+
+/* 32 bit floating-point, big-endian */
+
+static void synth_half32fbmm(mpadec_t mpadec, MYFLT *bandptr,
+                             int channel, uint8_t *buffer)
+{
+  register int i;
+  register float *out = (float *)buffer;
+  MYFLT buf[SBLIMIT/2];
+
+  synth_half(mpadec, bandptr, channel, buf);
+  for (i = 0; i < SBLIMIT/2; i++, out++) {
+    int32_t tmp;
+    *((float *)(&tmp)) = (float)buf[i];
+    ((uint8_t *)out)[3] = (uint8_t)tmp;
+    ((uint8_t *)out)[2] = (uint8_t)(tmp >> 8);
+    ((uint8_t *)out)[1] = (uint8_t)(tmp >> 16);
+    ((int8_t *)out)[0] = (int8_t)(tmp >> 24);
+  }
+}
+
+#define synth_half32fbsm synth_half32fbmm
+
+static void synth_half32fbms(mpadec_t mpadec, MYFLT *bandptr,
+                             int channel, uint8_t *buffer)
+{
+  register int i;
+  register float *out = (float *)buffer;
+  MYFLT buf[SBLIMIT/2];
+
+  synth_half(mpadec, bandptr, channel, buf);
+  for (i = 0; i < SBLIMIT/2; i++, out += 2) {
+    int32_t tmp;
+    *((float *)(&tmp)) = (float)buf[i];
+    ((uint8_t *)out)[3] = ((uint8_t *)out)[7] = (uint8_t)tmp;
+    ((uint8_t *)out)[2] = ((uint8_t *)out)[6] = (uint8_t)(tmp >> 8);
+    ((uint8_t *)out)[1] = ((uint8_t *)out)[5] = (uint8_t)(tmp >> 16);
+    ((int8_t *)out)[0] = ((int8_t *)out)[4] = (int8_t)(tmp >> 24);
+  }
+}
+
+static void synth_half32fbss(mpadec_t mpadec, MYFLT *bandptr,
+                             int channel, uint8_t *buffer)
+{
+  register int i;
+  register float *out = (float *)buffer;
+  MYFLT buf[SBLIMIT/2];
+
+  synth_half(mpadec, bandptr, channel, buf);
+  if (channel) out++;
+  for (i = 0; i < SBLIMIT/2; i++, out += 2) {
+    int32_t tmp;
+    *((float *)(&tmp)) = (float)buf[i];
+    ((uint8_t *)out)[3] = (uint8_t)tmp;
+    ((uint8_t *)out)[2] = (uint8_t)(tmp >> 8);
+    ((uint8_t *)out)[1] = (uint8_t)(tmp >> 16);
+    ((int8_t *)out)[0] = (int8_t)(tmp >> 24);
+  }
+}
+
+void *synth_table[2][2][4][4] = {
+  { { { synth_full16lmm,  synth_full16lms,  synth_full16lsm,  synth_full16lss  },
+      { synth_full24lmm,  synth_full24lms,  synth_full24lsm,  synth_full24lss  },
+      { synth_full32lmm,  synth_full32lms,  synth_full32lsm,  synth_full32lss  },
+      { synth_full32flmm, synth_full32flms, synth_full32flsm, synth_full32flss } },
+    { { synth_full16bmm,  synth_full16bms,  synth_full16bsm,  synth_full16bss  },
+      { synth_full24bmm,  synth_full24bms,  synth_full24bsm,  synth_full24bss  },
+      { synth_full32bmm,  synth_full32bms,  synth_full32bsm,  synth_full32bss  },
+      { synth_full32fbmm, synth_full32fbms, synth_full32fbsm, synth_full32fbss } } },
+  { { { synth_half16lmm,  synth_half16lms,  synth_half16lsm,  synth_half16lss  },
+      { synth_half24lmm,  synth_half24lms,  synth_half24lsm,  synth_half24lss  },
+      { synth_half32lmm,  synth_half32lms,  synth_half32lsm,  synth_half32lss  },
+      { synth_half32flmm, synth_half32flms, synth_half32flsm, synth_half32flss } },
+    { { synth_half16bmm,  synth_half16bms,  synth_half16bsm,  synth_half16bss  },
+      { synth_half24bmm,  synth_half24bms,  synth_half24bsm,  synth_half24bss  },
+      { synth_half32bmm,  synth_half32bms,  synth_half32bsm,  synth_half32bss  },
+      { synth_half32fbmm, synth_half32fbms, synth_half32fbsm, synth_half32fbss } } }
+};
+
diff --git a/InOut/libmpadec/tables.c b/InOut/libmpadec/tables.c
new file mode 100644
index 0000000..ce28b00
--- /dev/null
+++ b/InOut/libmpadec/tables.c
@@ -0,0 +1,823 @@
+/*
+ *  mpadec - MPEG audio decoder
+ *  Copyright (C) 2002-2004 Dmitriy Startsev (dstartsev at rambler.ru)
+ *
+ *  This library is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU Lesser General Public
+ *  License as published by the Free Software Foundation; either
+ *  version 2.1 of the License, or (at your option) any later version.
+ *
+ *  This library 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
+ *  Lesser General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Lesser General Public
+ *  License along with this library; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+/* $Id: tables.c,v 1.1.1.1 2004/07/27 02:58:48 metal_man Exp $ */
+
+#include <math.h>
+#include "csoundCore.h"
+#include "mpadec_internal.h"
+
+const uint16_t crc_table[256] = {
+  0x0000, 0x8005, 0x800F, 0x000A, 0x801B, 0x001E, 0x0014, 0x8011,
+  0x8033, 0x0036, 0x003C, 0x8039, 0x0028, 0x802D, 0x8027, 0x0022,
+  0x8063, 0x0066, 0x006C, 0x8069, 0x0078, 0x807D, 0x8077, 0x0072,
+  0x0050, 0x8055, 0x805F, 0x005A, 0x804B, 0x004E, 0x0044, 0x8041,
+  0x80C3, 0x00C6, 0x00CC, 0x80C9, 0x00D8, 0x80DD, 0x80D7, 0x00D2,
+  0x00F0, 0x80F5, 0x80FF, 0x00FA, 0x80EB, 0x00EE, 0x00E4, 0x80E1,
+  0x00A0, 0x80A5, 0x80AF, 0x00AA, 0x80BB, 0x00BE, 0x00B4, 0x80B1,
+  0x8093, 0x0096, 0x009C, 0x8099, 0x0088, 0x808D, 0x8087, 0x0082,
+  0x8183, 0x0186, 0x018C, 0x8189, 0x0198, 0x819D, 0x8197, 0x0192,
+  0x01B0, 0x81B5, 0x81BF, 0x01BA, 0x81AB, 0x01AE, 0x01A4, 0x81A1,
+  0x01E0, 0x81E5, 0x81EF, 0x01EA, 0x81FB, 0x01FE, 0x01F4, 0x81F1,
+  0x81D3, 0x01D6, 0x01DC, 0x81D9, 0x01C8, 0x81CD, 0x81C7, 0x01C2,
+  0x0140, 0x8145, 0x814F, 0x014A, 0x815B, 0x015E, 0x0154, 0x8151,
+  0x8173, 0x0176, 0x017C, 0x8179, 0x0168, 0x816D, 0x8167, 0x0162,
+  0x8123, 0x0126, 0x012C, 0x8129, 0x0138, 0x813D, 0x8137, 0x0132,
+  0x0110, 0x8115, 0x811F, 0x011A, 0x810B, 0x010E, 0x0104, 0x8101,
+  0x8303, 0x0306, 0x030C, 0x8309, 0x0318, 0x831D, 0x8317, 0x0312,
+  0x0330, 0x8335, 0x833F, 0x033A, 0x832B, 0x032E, 0x0324, 0x8321,
+  0x0360, 0x8365, 0x836F, 0x036A, 0x837B, 0x037E, 0x0374, 0x8371,
+  0x8353, 0x0356, 0x035C, 0x8359, 0x0348, 0x834D, 0x8347, 0x0342,
+  0x03C0, 0x83C5, 0x83CF, 0x03CA, 0x83DB, 0x03DE, 0x03D4, 0x83D1,
+  0x83F3, 0x03F6, 0x03FC, 0x83F9, 0x03E8, 0x83ED, 0x83E7, 0x03E2,
+  0x83A3, 0x03A6, 0x03AC, 0x83A9, 0x03B8, 0x83BD, 0x83B7, 0x03B2,
+  0x0390, 0x8395, 0x839F, 0x039A, 0x838B, 0x038E, 0x0384, 0x8381,
+  0x0280, 0x8285, 0x828F, 0x028A, 0x829B, 0x029E, 0x0294, 0x8291,
+  0x82B3, 0x02B6, 0x02BC, 0x82B9, 0x02A8, 0x82AD, 0x82A7, 0x02A2,
+  0x82E3, 0x02E6, 0x02EC, 0x82E9, 0x02F8, 0x82FD, 0x82F7, 0x02F2,
+  0x02D0, 0x82D5, 0x82DF, 0x02DA, 0x82CB, 0x02CE, 0x02C4, 0x82C1,
+  0x8243, 0x0246, 0x024C, 0x8249, 0x0258, 0x825D, 0x8257, 0x0252,
+  0x0270, 0x8275, 0x827F, 0x027A, 0x826B, 0x026E, 0x0264, 0x8261,
+  0x0220, 0x8225, 0x822F, 0x022A, 0x823B, 0x023E, 0x0234, 0x8231,
+  0x8213, 0x0216, 0x021C, 0x8219, 0x0208, 0x820D, 0x8207, 0x0202
+};
+
+const MYFLT newcos[8] = {
+  0.93969262078590838405410927732473, -0.17364817766693034885171662676931,
+ -0.76604444311897803520239265055542,  0.98480775301220805936674302458952,
+ -0.34202014332566873304409961468226, -0.64278760968653932632264340990726,
+  0.86602540378443864676372317075294,  0.5
+};
+
+const MYFLT tfcos36[9] = {
+  0.50190991877167369479228784572231, 0.51763809020504152469779767524810,
+  0.55168895948124587824344735167135, 0.61038729438072803416729403213053,
+  0.70710678118654752440084436210485, 0.87172339781054900991884170836219,
+  1.18310079157624925896683916310440, 1.93185165257813657349948639945780,
+  5.73685662283492756457461251791420
+};
+
+const MYFLT tfcos12[3] = {
+  0.5176380902050415246977976752481, 0.70710678118654752440084436210485,
+  1.9318516525781365734994863994578
+};
+
+const MYFLT cs[8] = {
+  0.85749292571254418689325777610964, 0.88174199731770518177557399759066,
+  0.94962864910273289204833276115398, 0.98331459249179014599030200066392,
+  0.99551781606758576429088040422867, 0.99916055817814750452934664352117,
+  0.99989919524444704626703489425565, 0.99999315507028023572010150517204
+};
+
+const MYFLT ca[8] = {
+ -0.5144957554275265121359546656657900, -0.4717319685649722722499320887110000,
+ -0.3133774542039018543759498111808100, -0.1819131996109811770082058701228300,
+ -0.0945741925264206476076336384017240, -0.0409655828853040476857032123843680,
+ -0.0141985685724711480569918954984300, -0.0036999746737600368721643755691366
+};
+
+bandinfo_t band_info[9] = {
+  /* MPEG 1.0 */
+  { { 0, 4, 8, 12, 16, 20, 24, 30, 36, 44, 52, 62, 74, 90, 110, 134, 162, 196, 238, 288, 342, 418, 576 },
+    { 4, 4, 4, 4, 4, 4, 6, 6, 8, 8, 10, 12, 16, 20, 24, 28, 34, 42, 50, 54, 76, 158 },
+    { 0, 4*3, 8*3, 12*3, 16*3, 22*3, 30*3, 40*3, 52*3, 66*3, 84*3, 106*3, 136*3, 192*3 },
+    { 4, 4, 4, 4, 6, 8, 10, 12, 14, 18, 22, 30, 56 } },
+  { { 0, 4, 8, 12, 16, 20, 24, 30, 36, 42, 50, 60, 72, 88, 106, 128, 156, 190, 230, 276, 330, 384, 576 },
+    { 4, 4, 4, 4, 4, 4, 6, 6, 6, 8, 10, 12, 16, 18, 22, 28, 34, 40, 46, 54, 54, 192 },
+    { 0, 4*3, 8*3, 12*3, 16*3, 22*3, 28*3, 38*3, 50*3, 64*3, 80*3, 100*3, 126*3, 192*3 },
+    { 4, 4, 4, 4, 6, 6, 10, 12, 14, 16, 20, 26, 66 } },
+  { { 0, 4, 8, 12, 16, 20, 24, 30, 36, 44, 54, 66, 82, 102, 126, 156, 194, 240, 296, 364, 448, 550, 576 },
+    { 4, 4, 4, 4, 4, 4, 6, 6, 8, 10, 12, 16, 20, 24, 30, 38, 46, 56, 68, 84, 102, 26 },
+    { 0, 4*3, 8*3, 12*3, 16*3, 22*3, 30*3, 42*3, 58*3, 78*3, 104*3, 138*3, 180*3, 192*3 },
+    { 4, 4, 4, 4, 6, 8, 12, 16, 20, 26, 34, 42, 12 } },
+  /* MPEG 2.0 */
+  { { 0, 6, 12, 18, 24, 30, 36, 44, 54, 66, 80, 96, 116, 140, 168, 200, 238, 284, 336, 396, 464, 522, 576 },
+    { 6, 6, 6, 6, 6, 6, 8, 10, 12, 14, 16, 20, 24, 28, 32, 38, 46, 52, 60, 68, 58, 54 },
+    { 0, 4*3, 8*3, 12*3, 18*3, 24*3, 32*3, 42*3, 56*3, 74*3, 100*3, 132*3, 174*3, 192*3 },
+    { 4, 4, 4, 6, 6, 8, 10, 14, 18, 26, 32, 42, 18 } },
+  { { 0, 6, 12, 18, 24, 30, 36, 44, 54, 66, 80, 96, 114, 136, 162, 194, 232, 278, 330, 394, 464, 540, 576 },
+    { 6, 6, 6, 6, 6, 6, 8, 10, 12, 14, 16, 18, 22, 26, 32, 38, 46, 52, 64, 70, 76, 36 },
+    { 0, 4*3, 8*3, 12*3, 18*3, 26*3, 36*3, 48*3, 62*3, 80*3, 104*3, 136*3, 180*3, 192*3 },
+    { 4, 4, 4, 6, 8, 10, 12, 14, 18, 24, 32, 44, 12 } },
+  { { 0, 6, 12, 18, 24, 30, 36, 44, 54, 66, 80, 96, 116, 140, 168, 200, 238, 284, 336, 396, 464, 522, 576 },
+    { 6, 6, 6, 6, 6, 6, 8, 10, 12, 14, 16, 20, 24, 28, 32, 38, 46, 52, 60, 68, 58, 54 },
+    { 0, 4*3, 8*3, 12*3, 18*3, 26*3, 36*3, 48*3, 62*3, 80*3, 104*3, 134*3, 174*3, 192*3 },
+    { 4, 4, 4, 6, 8, 10, 12, 14, 18, 24, 30, 40, 18 } },
+  /* MPEG 2.5 */
+  { { 0, 6, 12, 18, 24, 30, 36, 44, 54, 66, 80, 96, 116, 140, 168, 200, 238, 284, 336, 396, 464, 522, 576 },
+    { 6, 6, 6, 6, 6, 6, 8, 10, 12, 14, 16, 20, 24, 28, 32, 38, 46, 52, 60, 68, 58, 54 },
+    { 0, 12, 24, 36, 54, 78, 108, 144, 186, 240, 312, 402, 522, 576 },
+    { 4, 4, 4, 6, 8, 10, 12, 14, 18, 24, 30, 40, 18 } },
+  { { 0, 6, 12, 18, 24, 30, 36, 44, 54, 66, 80, 96, 116, 140, 168, 200, 238, 284, 336, 396, 464, 522, 576 },
+    { 6, 6, 6, 6, 6, 6, 8, 10, 12, 14, 16, 20, 24, 28, 32, 38, 46, 52, 60, 68, 58, 54 },
+    { 0, 12, 24, 36, 54, 78, 108, 144, 186, 240, 312, 402, 522, 576 },
+    { 4, 4, 4, 6, 8, 10, 12, 14, 18, 24, 30, 40, 18 } },
+  { { 0, 12, 24, 36, 48, 60, 72, 88, 108, 132, 160, 192, 232, 280, 336, 400, 476, 566, 568, 570, 572, 574, 576 },
+    { 12, 12, 12, 12, 12, 12, 16, 20, 24, 28, 32, 40, 48, 56, 64, 76, 90, 2, 2, 2, 2, 2 },
+    { 0, 24, 48, 72, 108, 156, 216, 288, 372, 480, 486, 492, 498, 576 },
+    { 8, 8, 8, 12, 16, 20, 24, 28, 36, 2, 2, 2, 26 } },
+};
+
+static alloc_table_t alloc_0[] = {
+  {4,0}, {5,3}, {3,-3}, {4,-7}, {5,-15}, {6,-31}, {7,-63}, {8,-127}, {9,-255}, {10,-511},
+  {11,-1023}, {12,-2047}, {13,-4095}, {14,-8191}, {15,-16383}, {16,-32767},
+  {4,0}, {5,3}, {3,-3}, {4,-7}, {5,-15}, {6,-31}, {7,-63}, {8,-127}, {9,-255}, {10,-511},
+  {11,-1023}, {12,-2047}, {13,-4095}, {14,-8191}, {15,-16383}, {16,-32767},
+  {4,0}, {5,3}, {3,-3}, {4,-7}, {5,-15}, {6,-31}, {7,-63}, {8,-127}, {9,-255}, {10,-511},
+  {11,-1023}, {12,-2047}, {13,-4095}, {14,-8191}, {15,-16383}, {16,-32767},
+  {4,0}, {5,3}, {7,5}, {3,-3}, {10,9}, {4,-7}, {5,-15}, {6,-31}, {7,-63}, {8,-127},
+  {9,-255}, {10,-511}, {11,-1023}, {12,-2047}, {13,-4095}, {16,-32767},
+  {4,0}, {5,3}, {7,5}, {3,-3}, {10,9}, {4,-7}, {5,-15}, {6,-31}, {7,-63}, {8,-127},
+  {9,-255}, {10,-511}, {11,-1023}, {12,-2047}, {13,-4095}, {16,-32767},
+  {4,0}, {5,3}, {7,5}, {3,-3}, {10,9}, {4,-7}, {5,-15}, {6,-31}, {7,-63}, {8,-127},
+  {9,-255}, {10,-511}, {11,-1023}, {12,-2047}, {13,-4095}, {16,-32767},
+  {4,0}, {5,3}, {7,5}, {3,-3}, {10,9}, {4,-7}, {5,-15}, {6,-31}, {7,-63}, {8,-127},
+  {9,-255}, {10,-511}, {11,-1023}, {12,-2047}, {13,-4095}, {16,-32767},
+  {4,0}, {5,3}, {7,5}, {3,-3}, {10,9}, {4,-7}, {5,-15}, {6,-31}, {7,-63}, {8,-127},
+  {9,-255}, {10,-511}, {11,-1023}, {12,-2047}, {13,-4095}, {16,-32767},
+  {4,0}, {5,3}, {7,5}, {3,-3}, {10,9}, {4,-7}, {5,-15}, {6,-31}, {7,-63}, {8,-127},
+  {9,-255}, {10,-511}, {11,-1023}, {12,-2047}, {13,-4095}, {16,-32767},
+  {4,0}, {5,3}, {7,5}, {3,-3}, {10,9}, {4,-7}, {5,-15}, {6,-31}, {7,-63}, {8,-127},
+  {9,-255}, {10,-511}, {11,-1023}, {12,-2047}, {13,-4095}, {16,-32767},
+  {4,0}, {5,3}, {7,5}, {3,-3}, {10,9}, {4,-7}, {5,-15}, {6,-31}, {7,-63}, {8,-127},
+  {9,-255}, {10,-511}, {11,-1023}, {12,-2047}, {13,-4095}, {16,-32767},
+  {3,0}, {5,3}, {7,5}, {3,-3}, {10,9}, {4,-7}, {5,-15}, {16,-32767},
+  {3,0}, {5,3}, {7,5}, {3,-3}, {10,9}, {4,-7}, {5,-15}, {16,-32767},
+  {3,0}, {5,3}, {7,5}, {3,-3}, {10,9}, {4,-7}, {5,-15}, {16,-32767},
+  {3,0}, {5,3}, {7,5}, {3,-3}, {10,9}, {4,-7}, {5,-15}, {16,-32767},
+  {3,0}, {5,3}, {7,5}, {3,-3}, {10,9}, {4,-7}, {5,-15}, {16,-32767},
+  {3,0}, {5,3}, {7,5}, {3,-3}, {10,9}, {4,-7}, {5,-15}, {16,-32767},
+  {3,0}, {5,3}, {7,5}, {3,-3}, {10,9}, {4,-7}, {5,-15}, {16,-32767},
+  {3,0}, {5,3}, {7,5}, {3,-3}, {10,9}, {4,-7}, {5,-15}, {16,-32767},
+  {3,0}, {5,3}, {7,5}, {3,-3}, {10,9}, {4,-7}, {5,-15}, {16,-32767},
+  {3,0}, {5,3}, {7,5}, {3,-3}, {10,9}, {4,-7}, {5,-15}, {16,-32767},
+  {3,0}, {5,3}, {7,5}, {3,-3}, {10,9}, {4,-7}, {5,-15}, {16,-32767},
+  {3,0}, {5,3}, {7,5}, {3,-3}, {10,9}, {4,-7}, {5,-15}, {16,-32767},
+  {2,0}, {5,3}, {7,5}, {16,-32767},
+  {2,0}, {5,3}, {7,5}, {16,-32767},
+  {2,0}, {5,3}, {7,5}, {16,-32767},
+  {2,0}, {5,3}, {7,5}, {16,-32767}
+};
+
+static alloc_table_t alloc_1[] = {
+  {4,0}, {5,3}, {3,-3}, {4,-7}, {5,-15}, {6,-31}, {7,-63}, {8,-127}, {9,-255}, {10,-511},
+  {11,-1023}, {12,-2047}, {13,-4095}, {14,-8191}, {15,-16383}, {16,-32767},
+  {4,0}, {5,3}, {3,-3}, {4,-7}, {5,-15}, {6,-31}, {7,-63}, {8,-127}, {9,-255}, {10,-511},
+  {11,-1023}, {12,-2047}, {13,-4095}, {14,-8191}, {15,-16383}, {16,-32767},
+  {4,0}, {5,3}, {3,-3}, {4,-7}, {5,-15}, {6,-31}, {7,-63}, {8,-127}, {9,-255}, {10,-511},
+  {11,-1023}, {12,-2047}, {13,-4095}, {14,-8191}, {15,-16383}, {16,-32767},
+  {4,0}, {5,3}, {7,5}, {3,-3}, {10,9}, {4,-7}, {5,-15}, {6,-31}, {7,-63}, {8,-127},
+  {9,-255}, {10,-511}, {11,-1023}, {12,-2047}, {13,-4095}, {16,-32767},
+  {4,0}, {5,3}, {7,5}, {3,-3}, {10,9}, {4,-7}, {5,-15}, {6,-31}, {7,-63}, {8,-127},
+  {9,-255}, {10,-511}, {11,-1023}, {12,-2047}, {13,-4095}, {16,-32767},
+  {4,0}, {5,3}, {7,5}, {3,-3}, {10,9}, {4,-7}, {5,-15}, {6,-31}, {7,-63}, {8,-127},
+  {9,-255}, {10,-511}, {11,-1023}, {12,-2047}, {13,-4095}, {16,-32767},
+  {4,0}, {5,3}, {7,5}, {3,-3}, {10,9}, {4,-7}, {5,-15}, {6,-31}, {7,-63}, {8,-127},
+  {9,-255}, {10,-511}, {11,-1023}, {12,-2047}, {13,-4095}, {16,-32767},
+  {4,0}, {5,3}, {7,5}, {3,-3}, {10,9}, {4,-7}, {5,-15}, {6,-31}, {7,-63}, {8,-127},
+  {9,-255}, {10,-511}, {11,-1023}, {12,-2047}, {13,-4095}, {16,-32767},
+  {4,0}, {5,3}, {7,5}, {3,-3}, {10,9}, {4,-7}, {5,-15}, {6,-31}, {7,-63}, {8,-127},
+  {9,-255}, {10,-511}, {11,-1023}, {12,-2047}, {13,-4095}, {16,-32767},
+  {4,0}, {5,3}, {7,5}, {3,-3}, {10,9}, {4,-7}, {5,-15}, {6,-31}, {7,-63}, {8,-127},
+  {9,-255}, {10,-511}, {11,-1023}, {12,-2047}, {13,-4095}, {16,-32767},
+  {4,0}, {5,3}, {7,5}, {3,-3}, {10,9}, {4,-7}, {5,-15}, {6,-31}, {7,-63}, {8,-127},
+  {9,-255}, {10,-511}, {11,-1023}, {12,-2047}, {13,-4095}, {16,-32767},
+  {3,0}, {5,3}, {7,5}, {3,-3}, {10,9}, {4,-7}, {5,-15}, {16,-32767},
+  {3,0}, {5,3}, {7,5}, {3,-3}, {10,9}, {4,-7}, {5,-15}, {16,-32767},
+  {3,0}, {5,3}, {7,5}, {3,-3}, {10,9}, {4,-7}, {5,-15}, {16,-32767},
+  {3,0}, {5,3}, {7,5}, {3,-3}, {10,9}, {4,-7}, {5,-15}, {16,-32767},
+  {3,0}, {5,3}, {7,5}, {3,-3}, {10,9}, {4,-7}, {5,-15}, {16,-32767},
+  {3,0}, {5,3}, {7,5}, {3,-3}, {10,9}, {4,-7}, {5,-15}, {16,-32767},
+  {3,0}, {5,3}, {7,5}, {3,-3}, {10,9}, {4,-7}, {5,-15}, {16,-32767},
+  {3,0}, {5,3}, {7,5}, {3,-3}, {10,9}, {4,-7}, {5,-15}, {16,-32767},
+  {3,0}, {5,3}, {7,5}, {3,-3}, {10,9}, {4,-7}, {5,-15}, {16,-32767},
+  {3,0}, {5,3}, {7,5}, {3,-3}, {10,9}, {4,-7}, {5,-15}, {16,-32767},
+  {3,0}, {5,3}, {7,5}, {3,-3}, {10,9}, {4,-7}, {5,-15}, {16,-32767},
+  {3,0}, {5,3}, {7,5}, {3,-3}, {10,9}, {4,-7}, {5,-15}, {16,-32767},
+  {2,0}, {5,3}, {7,5}, {16,-32767},
+  {2,0}, {5,3}, {7,5}, {16,-32767},
+  {2,0}, {5,3}, {7,5}, {16,-32767},
+  {2,0}, {5,3}, {7,5}, {16,-32767},
+  {2,0}, {5,3}, {7,5}, {16,-32767},
+  {2,0}, {5,3}, {7,5}, {16,-32767},
+  {2,0}, {5,3}, {7,5}, {16,-32767}
+};
+
+static alloc_table_t alloc_2[] = {
+  {4,0}, {5,3}, {7,5}, {10,9}, {4,-7}, {5,-15}, {6,-31}, {7,-63}, {8,-127}, {9,-255},
+  {10,-511}, {11,-1023}, {12,-2047}, {13,-4095}, {14,-8191}, {15,-16383},
+  {4,0}, {5,3}, {7,5}, {10,9}, {4,-7}, {5,-15}, {6,-31}, {7,-63}, {8,-127}, {9,-255},
+  {10,-511}, {11,-1023}, {12,-2047}, {13,-4095}, {14,-8191}, {15,-16383},
+  {3,0}, {5,3}, {7,5}, {10,9}, {4,-7}, {5,-15}, {6,-31}, {7,-63},
+  {3,0}, {5,3}, {7,5}, {10,9}, {4,-7}, {5,-15}, {6,-31}, {7,-63},
+  {3,0}, {5,3}, {7,5}, {10,9}, {4,-7}, {5,-15}, {6,-31}, {7,-63},
+  {3,0}, {5,3}, {7,5}, {10,9}, {4,-7}, {5,-15}, {6,-31}, {7,-63},
+  {3,0}, {5,3}, {7,5}, {10,9}, {4,-7}, {5,-15}, {6,-31}, {7,-63},
+  {3,0}, {5,3}, {7,5}, {10,9}, {4,-7}, {5,-15}, {6,-31}, {7,-63}
+};
+
+static alloc_table_t alloc_3[] = {
+  {4,0}, {5,3}, {7,5}, {10,9}, {4,-7}, {5,-15}, {6,-31}, {7,-63}, {8,-127}, {9,-255},
+  {10,-511}, {11,-1023}, {12,-2047}, {13,-4095}, {14,-8191}, {15,-16383},
+  {4,0}, {5,3}, {7,5}, {10,9}, {4,-7}, {5,-15}, {6,-31}, {7,-63}, {8,-127}, {9,-255},
+  {10,-511}, {11,-1023}, {12,-2047}, {13,-4095}, {14,-8191}, {15,-16383},
+  {3,0}, {5,3}, {7,5}, {10,9}, {4,-7}, {5,-15}, {6,-31}, {7,-63},
+  {3,0}, {5,3}, {7,5}, {10,9}, {4,-7}, {5,-15}, {6,-31}, {7,-63},
+  {3,0}, {5,3}, {7,5}, {10,9}, {4,-7}, {5,-15}, {6,-31}, {7,-63},
+  {3,0}, {5,3}, {7,5}, {10,9}, {4,-7}, {5,-15}, {6,-31}, {7,-63},
+  {3,0}, {5,3}, {7,5}, {10,9}, {4,-7}, {5,-15}, {6,-31}, {7,-63},
+  {3,0}, {5,3}, {7,5}, {10,9}, {4,-7}, {5,-15}, {6,-31}, {7,-63},
+  {3,0}, {5,3}, {7,5}, {10,9}, {4,-7}, {5,-15}, {6,-31}, {7,-63},
+  {3,0}, {5,3}, {7,5}, {10,9}, {4,-7}, {5,-15}, {6,-31}, {7,-63},
+  {3,0}, {5,3}, {7,5}, {10,9}, {4,-7}, {5,-15}, {6,-31}, {7,-63},
+  {3,0}, {5,3}, {7,5}, {10,9}, {4,-7}, {5,-15}, {6,-31}, {7,-63}
+};
+
+static alloc_table_t alloc_4[] = {
+  {4,0}, {5,3}, {7,5}, {3,-3}, {10,9}, {4,-7}, {5,-15}, {6,-31}, {7,-63}, {8,-127},
+  {9,-255}, {10,-511}, {11,-1023}, {12,-2047}, {13,-4095}, {14,-8191},
+  {4,0}, {5,3}, {7,5}, {3,-3}, {10,9}, {4,-7}, {5,-15}, {6,-31}, {7,-63}, {8,-127},
+  {9,-255}, {10,-511}, {11,-1023}, {12,-2047}, {13,-4095}, {14,-8191},
+  {4,0}, {5,3}, {7,5}, {3,-3}, {10,9}, {4,-7}, {5,-15}, {6,-31}, {7,-63}, {8,-127},
+  {9,-255}, {10,-511}, {11,-1023}, {12,-2047}, {13,-4095}, {14,-8191},
+  {4,0}, {5,3}, {7,5}, {3,-3}, {10,9}, {4,-7}, {5,-15}, {6,-31}, {7,-63}, {8,-127},
+  {9,-255}, {10,-511}, {11,-1023}, {12,-2047}, {13,-4095}, {14,-8191},
+  {3,0}, {5,3}, {7,5}, {10,9}, {4,-7}, {5,-15}, {6,-31}, {7,-63},
+  {3,0}, {5,3}, {7,5}, {10,9}, {4,-7}, {5,-15}, {6,-31}, {7,-63},
+  {3,0}, {5,3}, {7,5}, {10,9}, {4,-7}, {5,-15}, {6,-31}, {7,-63},
+  {3,0}, {5,3}, {7,5}, {10,9}, {4,-7}, {5,-15}, {6,-31}, {7,-63},
+  {3,0}, {5,3}, {7,5}, {10,9}, {4,-7}, {5,-15}, {6,-31}, {7,-63},
+  {3,0}, {5,3}, {7,5}, {10,9}, {4,-7}, {5,-15}, {6,-31}, {7,-63},
+  {3,0}, {5,3}, {7,5}, {10,9}, {4,-7}, {5,-15}, {6,-31}, {7,-63},
+  {2,0}, {5,3}, {7,5}, {10,9},
+  {2,0}, {5,3}, {7,5}, {10,9},
+  {2,0}, {5,3}, {7,5}, {10,9},
+  {2,0}, {5,3}, {7,5}, {10,9},
+  {2,0}, {5,3}, {7,5}, {10,9},
+  {2,0}, {5,3}, {7,5}, {10,9},
+  {2,0}, {5,3}, {7,5}, {10,9},
+  {2,0}, {5,3}, {7,5}, {10,9},
+  {2,0}, {5,3}, {7,5}, {10,9},
+  {2,0}, {5,3}, {7,5}, {10,9},
+  {2,0}, {5,3}, {7,5}, {10,9},
+  {2,0}, {5,3}, {7,5}, {10,9},
+  {2,0}, {5,3}, {7,5}, {10,9},
+  {2,0}, {5,3}, {7,5}, {10,9},
+  {2,0}, {5,3}, {7,5}, {10,9},
+  {2,0}, {5,3}, {7,5}, {10,9},
+  {2,0}, {5,3}, {7,5}, {10,9},
+  {2,0}, {5,3}, {7,5}, {10,9},
+  {2,0}, {5,3}, {7,5}, {10,9}
+};
+
+alloc_table_t *alloc_tables[5] = { alloc_0, alloc_1, alloc_2, alloc_3, alloc_4 };
+
+static int16_t tab0[] = { 0 };
+
+static int16_t tab1[] = { -5, -3, -1, 17,  1, 16,  0 };
+
+static int16_t tab2[] = {
+   -15,  -11,   -9,   -5,   -3,   -1,   34,    2,   18,  -1,  33,  32,  17,  -1,   1,
+    16,    0
+};
+
+static int16_t tab3[] = {
+   -13,  -11,   -9,   -5,   -3,   -1,   34,    2,   18,  -1,  33,  32,  16,  17,  -1,
+     1,    0
+};
+
+static int16_t tab5[] = {
+   -29,  -25,  -23,  -15,   -7,   -5,   -3,   -1,   51,  35,  50,  49,  -3,  -1,  19,
+     3,   -1,   48,   34,   -3,   -1,   18,   33,   -1,   2,  32,  17,  -1,   1,  16,
+     0
+};
+
+static int16_t tab6[] = {
+   -25,  -19,  -13,   -9,   -5,   -3,   -1,   51,    3,  35,  -1,  50,  48,  -1,  19,
+    49,   -3,   -1,   34,    2,   18,   -3,   -1,   33,  32,   1,  -1,  17,  -1,  16,
+     0
+};
+
+static int16_t tab7[] = {
+   -69,  -65,  -57,  -39,  -29,  -17,  -11,   -7,   -3,  -1,  85,  69,  -1,  84,  83,
+    -1,   53,   68,   -3,   -1,   37,   82,   21,   -5,  -1,  81,  -1,   5,  52,  -1,
+    80,   -1,   67,   51,   -5,   -3,   -1,   36,   66,  20,  -1,  65,  64, -11,  -7,
+    -3,   -1,    4,   35,   -1,   50,    3,   -1,   19,  49,  -3,  -1,  48,  34,  18,
+    -5,   -1,   33,   -1,    2,   32,   17,   -1,    1,  16,   0
+};
+
+static int16_t tab8[] = {
+   -65,  -63,  -59,  -45,  -31,  -19,  -13,   -7,   -5,  -3,  -1,  85,  84,  69,  83,
+    -3,   -1,   53,   68,   37,   -3,   -1,   82,    5,  21,  -5,  -1,  81,  -1,  52,
+    67,   -3,   -1,   80,   51,   36,   -5,   -3,   -1,  66,  20,  65,  -3,  -1,   4,
+    64,   -1,   35,   50,   -9,   -7,   -3,   -1,   19,  49,  -1,   3,  48,  34,  -1,
+     2,   32,   -1,   18,   33,   17,   -3,   -1,    1,  16,   0
+};
+
+static int16_t tab9[] = {
+   -63,  -53,  -41,  -29,  -19,  -11,   -5,   -3,   -1,  85,  69,  53,  -1,  83,   -1,
+    84,    5,   -3,   -1,   68,   37,   -1,   82,   21,  -3,  -1,  81,  52,  -1,   67,
+    -1,   80,    4,   -7,   -3,   -1,   36,   66,   -1,  51,  64,  -1,  20,  65,   -5,
+    -3,   -1,   35,   50,   19,   -1,   49,   -1,    3,  48,  -5,  -3,  -1,  34,    2,
+    18,   -1,   33,   32,   -3,   -1,   17,    1,   -1,  16,   0
+};
+
+static int16_t tab10[] = {
+  -125, -121, -111,  -83,  -55,  -35,  -21,  -13,   -7,  -3,  -1, 119, 103,  -1,  118,
+    87,   -3,   -1,  117,  102,   71,   -3,   -1,  116,  86,  -1, 101,  55,  -9,   -3,
+    -1,  115,   70,   -3,   -1,   85,   84,   99,   -1,  39, 114, -11,  -5,  -3,   -1,
+   100,    7,  112,   -1,   98,   -1,   69,   53,   -5,  -1,   6,  -1,  83,  68,   23,
+   -17,   -5,   -1,  113,   -1,   54,   38,   -5,   -3,  -1,  37,  82,  21,  -1,   81,
+    -1,   52,   67,   -3,   -1,   22,   97,   -1,   96,  -1,   5,  80, -19, -11,   -7,
+    -3,   -1,   36,   66,   -1,   51,    4,   -1,   20,  65,  -3,  -1,  64,  35,   -1,
+    50,    3,   -3,   -1,   19,   49,   -1,   48,   34,  -7,  -3,  -1,  18,  33,   -1,
+     2,   32,   17,   -1,    1,   16,    0
+};
+
+static int16_t tab11[] = {
+  -121, -113,  -89,  -59,  -43,  -27,  -17,   -7,   -3,  -1, 119, 103,  -1, 118,  117,
+    -3,   -1,  102,   71,   -1,  116,   -1,   87,   85,  -5,  -3,  -1,  86, 101,   55,
+    -1,  115,   70,   -9,   -7,   -3,   -1,   69,   84,  -1,  53,  83,  39,  -1,  114,
+    -1,  100,    7,   -5,   -1,  113,   -1,   23,  112,  -3,  -1,  54,  99,  -1,   96,
+    -1,   68,   37,  -13,   -7,   -5,   -3,   -1,   82,   5,  21,  98,  -3,  -1,   38,
+     6,   22,   -5,   -1,   97,   -1,   81,   52,   -5,  -1,  80,  -1,  67,  51,   -1,
+    36,   66,  -15,  -11,   -7,   -3,   -1,   20,   65,  -1,   4,  64,  -1,  35,   50,
+    -1,   19,   49,   -5,   -3,   -1,    3,   48,   34,  33,  -5,  -1,  18,  -1,    2,
+    32,   17,   -3,   -1,    1,   16,    0
+};
+
+static int16_t tab12[] = {
+  -115,  -99,  -73,  -45,  -27,  -17,   -9,   -5,   -3,  -1, 119, 103, 118,  -1,   87,
+   117,   -3,   -1,  102,   71,   -1,  116,  101,   -3,  -1,  86,  55,  -3,  -1,  115,
+    85,   39,   -7,   -3,   -1,  114,   70,   -1,  100,  23,  -5,  -1, 113,  -1,    7,
+   112,   -1,   54,   99,  -13,   -9,   -3,   -1,   69,  84,  -1,  68,  -1,   6,    5,
+    -1,   38,   98,   -5,   -1,   97,   -1,   22,   96,  -3,  -1,  53,  83,  -1,   37,
+    82,  -17,   -7,   -3,   -1,   21,   81,   -1,   52,  67,  -5,  -3,  -1,  80,    4,
+    36,   -1,   66,   20,   -3,   -1,   51,   65,   -1,  35,  50, -11,  -7,  -5,   -3,
+    -1,   64,    3,   48,   19,   -1,   49,   34,   -1,  18,  33,  -7,  -5,  -3,   -1,
+     2,   32,    0,   17,   -1,    1,   16
+};
+
+static int16_t tab13[] = {
+  -509, -503, -475, -405, -333, -265, -205, -153, -115, -83, -53, -35, -21, -13,   -9,
+    -7,   -5,   -3,   -1,  254,  252,  253,  237,  255,  -1, 239, 223,  -3,  -1,  238,
+   207,   -1,  222,  191,   -9,   -3,   -1,  251,  206,  -1, 220,  -1, 175, 233,   -1,
+   236,  221,   -9,   -5,   -3,   -1,  250,  205,  190,  -1, 235, 159,  -3,  -1,  249,
+   234,   -1,  189,  219,  -17,   -9,   -3,   -1,  143, 248,  -1, 204,  -1, 174,  158,
+    -5,   -1,  142,   -1,  127,  126,  247,   -5,   -1, 218,  -1, 173, 188,  -3,   -1,
+   203,  246,  111,  -15,   -7,   -3,   -1,  232,   95,  -1, 157, 217,  -3,  -1,  245,
+   231,   -1,  172,  187,   -9,   -3,   -1,   79,  244,  -3,  -1, 202, 230, 243,   -1,
+    63,   -1,  141,  216,  -21,   -9,   -3,   -1,   47, 242,  -3,  -1, 110, 156,   15,
+    -5,   -3,   -1,  201,   94,  171,   -3,   -1,  125, 215,  78, -11,  -5,  -3,   -1,
+   200,  214,   62,   -1,  185,   -1,  155,  170,   -1,  31, 241, -23, -13,  -5,   -1,
+   240,   -1,  186,  229,   -3,   -1,  228,  140,   -1, 109, 227,  -5,  -1, 226,   -1,
+    46,   14,   -1,   30,  225,  -15,   -7,   -3,   -1, 224,  93,  -1, 213, 124,   -3,
+    -1,  199,   77,   -1,  139,  184,   -7,   -3,   -1, 212, 154,  -1, 169, 108,   -1,
+   198,   61,  -37,  -21,   -9,   -5,   -3,   -1,  211, 123,  45,  -1, 210,  29,   -5,
+    -1,  183,   -1,   92,  197,   -3,   -1,  153,  122, 195,  -7,  -5,  -3,  -1,  167,
+   151,   75,  209,   -3,   -1,   13,  208,   -1,  138, 168, -11,  -7,  -3,  -1,   76,
+   196,   -1,  107,  182,   -1,   60,   44,   -3,   -1, 194,  91,  -3,  -1, 181,  137,
+    28,  -43,  -23,  -11,   -5,   -1,  193,   -1,  152,  12,  -1, 192,  -1, 180,  106,
+    -5,   -3,   -1,  166,  121,   59,   -1,  179,   -1, 136,  90, -11,  -5,  -1,   43,
+    -1,  165,  105,   -1,  164,   -1,  120,  135,   -5,  -1, 148,  -1, 119, 118,  178,
+   -11,   -3,   -1,   27,  177,   -3,   -1,   11,  176,  -1, 150,  74,  -7,  -3,   -1,
+    58,  163,   -1,   89,  149,   -1,   42,  162,  -47, -23,  -9,  -3,  -1,  26,  161,
+    -3,   -1,   10,  104,  160,   -5,   -3,   -1,  134,  73, 147,  -3,  -1,  57,   88,
+    -1,  133,  103,   -9,   -3,   -1,   41,  146,   -3,  -1,  87, 117,  56,  -5,   -1,
+   131,   -1,  102,   71,   -3,   -1,  116,   86,   -1, 101, 115, -11,  -3,  -1,   25,
+   145,   -3,   -1,    9,  144,   -1,   72,  132,   -7,  -5,  -1, 114,  -1,  70,  100,
+    40,   -1,  130,   24,  -41,  -27,  -11,   -5,   -3,  -1,  55,  39,  23,  -1,  113,
+    -1,   85,    7,   -7,   -3,   -1,  112,   54,   -1,  99,  69,  -3,  -1,  84,   38,
+    -1,   98,   53,   -5,   -1,  129,   -1,    8,  128,  -3,  -1,  22,  97,  -1,    6,
+    96,  -13,   -9,   -5,   -3,   -1,   83,   68,   37,  -1,  82,   5,  -1,  21,   81,
+    -7,   -3,   -1,   52,   67,   -1,   80,   36,   -3,  -1,  66,  51,  20, -19,  -11,
+    -5,   -1,   65,   -1,    4,   64,   -3,   -1,   35,  50,  19,  -3,  -1,  49,    3,
+    -1,   48,   34,   -3,   -1,   18,   33,   -1,    2,  32,  -3,  -1,  17,   1,   16,
+     0
+};
+
+static int16_t tab15[] = {
+  -495, -445, -355, -263, -183, -115,  -77,  -43,  -27, -13,  -7,  -3,  -1, 255,  239,
+    -1,  254,  223,   -1,  238,   -1,  253,  207,   -7,  -3,  -1, 252, 222,  -1,  237,
+   191,   -1,  251,   -1,  206,  236,   -7,   -3,   -1, 221, 175,  -1, 250, 190,   -3,
+    -1,  235,  205,   -1,  220,  159,  -15,   -7,   -3,  -1, 249, 234,  -1, 189,  219,
+    -3,   -1,  143,  248,   -1,  204,  158,   -7,   -3,  -1, 233, 127,  -1, 247,  173,
+    -3,   -1,  218,  188,   -1,  111,   -1,  174,   15, -19, -11,  -3,  -1, 203,  246,
+    -3,   -1,  142,  232,   -1,   95,  157,   -3,   -1, 245, 126,  -1, 231, 172,   -9,
+    -3,   -1,  202,  187,   -3,   -1,  217,  141,   79,  -3,  -1, 244,  63,  -1,  243,
+   216,  -33,  -17,   -9,   -3,   -1,  230,   47,   -1, 242,  -1, 110, 240,  -3,   -1,
+    31,  241,   -1,  156,  201,   -7,   -3,   -1,   94, 171,  -1, 186, 229,  -3,   -1,
+   125,  215,   -1,   78,  228,  -15,   -7,   -3,   -1, 140, 200,  -1,  62, 109,   -3,
+    -1,  214,  227,   -1,  155,  185,   -7,   -3,   -1,  46, 170,  -1, 226,  30,   -5,
+    -1,  225,   -1,   14,  224,   -1,   93,  213,  -45, -25, -13,  -7,  -3,  -1,  124,
+   199,   -1,   77,  139,   -1,  212,   -1,  184,  154,  -7,  -3,  -1, 169, 108,   -1,
+   198,   61,   -1,  211,  210,   -9,   -5,   -3,   -1,  45,  13,  29,  -1, 123,  183,
+    -5,   -1,  209,   -1,   92,  208,   -1,  197,  138, -17,  -7,  -3,  -1, 168,   76,
+    -1,  196,  107,   -5,   -1,  182,   -1,  153,   12,  -1,  60, 195,  -9,  -3,   -1,
+   122,  167,   -1,  166,   -1,  192,   11,   -1,  194,  -1,  44,  91, -55, -29,  -15,
+    -7,   -3,   -1,  181,   28,   -1,  137,  152,   -3,  -1, 193,  75,  -1, 180,  106,
+    -5,   -3,   -1,   59,  121,  179,   -3,   -1,  151, 136,  -1,  43,  90, -11,   -5,
+    -1,  178,   -1,  165,   27,   -1,  177,   -1,  176, 105,  -7,  -3,  -1, 150,   74,
+    -1,  164,  120,   -3,   -1,  135,   58,  163,  -17,  -7,  -3,  -1,  89, 149,   -1,
+    42,  162,   -3,   -1,   26,  161,   -3,   -1,   10, 160, 104,  -7,  -3,  -1,  134,
+    73,   -1,  148,   57,   -5,   -1,  147,   -1,  119,   9,  -1,  88, 133, -53,  -29,
+   -13,   -7,   -3,   -1,   41,  103,   -1,  118,  146,  -1, 145,  -1,  25, 144,   -7,
+    -3,   -1,   72,  132,   -1,   87,  117,   -3,   -1,  56, 131,  -1, 102,  71,   -7,
+    -3,   -1,   40,  130,   -1,   24,  129,   -7,   -3,  -1, 116,   8,  -1, 128,   86,
+    -3,   -1,  101,   55,   -1,  115,   70,  -17,   -7,  -3,  -1,  39, 114,  -1,  100,
+    23,   -3,   -1,   85,  113,   -3,   -1,    7,  112,  54,  -7,  -3,  -1,  99,   69,
+    -1,   84,   38,   -3,   -1,   98,   22,   -3,   -1,   6,  96,  53, -33, -19,   -9,
+    -5,   -1,   97,   -1,   83,   68,   -1,   37,   82,  -3,  -1,  21,  81,  -3,   -1,
+     5,   80,   52,   -7,   -3,   -1,   67,   36,   -1,  66,  51,  -1,  65,  -1,   20,
+     4,   -9,   -3,   -1,   35,   50,   -3,   -1,   64,   3,  19,  -3,  -1,  49,   48,
+    34,   -9,   -7,   -3,   -1,   18,   33,   -1,    2,  32,  17,  -3,  -1,   1,   16,
+     0
+};
+
+static int16_t tab16[] = {
+  -509, -503, -461, -323, -103,  -37,  -27,  -15,   -7,  -3,  -1, 239, 254,  -1,  223,
+   253,   -3,   -1,  207,  252,   -1,  191,  251,   -5,  -1, 175,  -1, 250, 159,   -3,
+    -1,  249,  248,  143,   -7,   -3,   -1,  127,  247,  -1, 111, 246, 255,  -9,   -5,
+    -3,   -1,   95,  245,   79,   -1,  244,  243,  -53,  -1, 240,  -1,  63, -29,  -19,
+   -13,   -7,   -5,   -1,  206,   -1,  236,  221,  222,  -1, 233,  -1, 234, 217,   -1,
+   238,   -1,  237,  235,   -3,   -1,  190,  205,   -3,  -1, 220, 219, 174, -11,   -5,
+    -1,  204,   -1,  173,  218,   -3,   -1,  126,  172, 202,  -5,  -3,  -1, 201,  125,
+    94,  189,  242,  -93,   -5,   -3,   -1,   47,   15,  31,  -1, 241, -49, -25,  -13,
+    -5,   -1,  158,   -1,  188,  203,   -3,   -1,  142, 232,  -1, 157, 231,  -7,   -3,
+    -1,  187,  141,   -1,  216,  110,   -1,  230,  156, -13,  -7,  -3,  -1, 171,  186,
+    -1,  229,  215,   -1,   78,   -1,  228,  140,   -3,  -1, 200,  62,  -1, 109,   -1,
+   214,  155,  -19,  -11,   -5,   -3,   -1,  185,  170, 225,  -1, 212,  -1, 184,  169,
+    -5,   -1,  123,   -1,  183,  208,  227,   -7,   -3,  -1,  14, 224,  -1,  93,  213,
+    -3,   -1,  124,  199,   -1,   77,  139,  -75,  -45, -27, -13,  -7,  -3,  -1,  154,
+   108,   -1,  198,   61,   -3,   -1,   92,  197,   13,  -7,  -3,  -1, 138, 168,   -1,
+   153,   76,   -3,   -1,  182,  122,   60,  -11,   -5,  -3,  -1,  91, 137,  28,   -1,
+   192,   -1,  152,  121,   -1,  226,   -1,   46,   30, -15,  -7,  -3,  -1, 211,   45,
+    -1,  210,  209,   -5,   -1,   59,   -1,  151,  136,  29,  -7,  -3,  -1, 196,  107,
+    -1,  195,  167,   -1,   44,   -1,  194,  181,  -23, -13,  -7,  -3,  -1, 193,   12,
+    -1,   75,  180,   -3,   -1,  106,  166,  179,   -5,  -3,  -1,  90, 165,  43,   -1,
+   178,   27,  -13,   -5,   -1,  177,   -1,   11,  176,  -3,  -1, 105, 150,  -1,   74,
+   164,   -5,   -3,   -1,  120,  135,  163,   -3,   -1,  58,  89,  42, -97, -57,  -33,
+   -19,  -11,   -5,   -3,   -1,  149,  104,  161,   -3,  -1, 134, 119, 148,  -5,   -3,
+    -1,   73,   87,  103,  162,   -5,   -1,   26,   -1,  10, 160,  -3,  -1,  57,  147,
+    -1,   88,  133,   -9,   -3,   -1,   41,  146,   -3,  -1, 118,   9,  25,  -5,   -1,
+   145,   -1,  144,   72,   -3,   -1,  132,  117,   -1,  56, 131, -21, -11,  -5,   -3,
+    -1,  102,   40,  130,   -3,   -1,   71,  116,   24,  -3,  -1, 129, 128,  -3,   -1,
+     8,   86,   55,   -9,   -5,   -1,  115,   -1,  101,  70,  -1,  39, 114,  -5,   -3,
+    -1,  100,   85,    7,   23,  -23,  -13,   -5,   -1, 113,  -1, 112,  54,  -3,   -1,
+    99,   69,   -1,   84,   38,   -3,   -1,   98,   22,  -1,  97,  -1,   6,  96,   -9,
+    -5,   -1,   83,   -1,   53,   68,   -1,   37,   82,  -1,  81,  -1,  21,   5,  -33,
+   -23,  -13,   -7,   -3,   -1,   52,   67,   -1,   80,  36,  -3,  -1,  66,  51,   20,
+    -5,   -1,   65,   -1,    4,   64,   -1,   35,   50,  -3,  -1,  19,  49,  -3,   -1,
+     3,   48,   34,   -3,   -1,   18,   33,   -1,    2,  32,  -3,  -1,  17,   1,   16,
+     0
+};
+
+static int16_t tab24[] = {
+  -451, -117,  -43,  -25,  -15,   -7,   -3,   -1,  239, 254,  -1, 223, 253,  -3,   -1,
+   207,  252,   -1,  191,  251,   -5,   -1,  250,   -1, 175, 159,  -1, 249, 248,   -9,
+    -5,   -3,   -1,  143,  127,  247,   -1,  111,  246,  -3,  -1,  95, 245,  -1,   79,
+   244,  -71,   -7,   -3,   -1,   63,  243,   -1,   47, 242,  -5,  -1, 241,  -1,   31,
+   240,  -25,   -9,   -1,   15,   -3,   -1,  238,  222,  -1, 237, 206,  -7,  -3,   -1,
+   236,  221,   -1,  190,  235,   -3,   -1,  205,  220,  -1, 174, 234, -15,  -7,   -3,
+    -1,  189,  219,   -1,  204,  158,   -3,   -1,  233, 173,  -1, 218, 188,  -7,   -3,
+    -1,  203,  142,   -1,  232,  157,   -3,   -1,  217, 126,  -1, 231, 172, 255, -235,
+  -143,  -77,  -45,  -25,  -15,   -7,   -3,   -1,  202, 187,  -1, 141, 216,  -5,   -3,
+    -1,   14,  224,   13,  230,   -5,   -3,   -1,  110, 156, 201,  -1,  94, 186,   -9,
+    -5,   -1,  229,   -1,  171,  125,   -1,  215,  228,  -3,  -1, 140, 200,  -3,   -1,
+    78,   46,   62,  -15,   -7,   -3,   -1,  109,  214,  -1, 227, 155,  -3,  -1,  185,
+   170,   -1,  226,   30,   -7,   -3,   -1,  225,   93,  -1, 213, 124,  -3,  -1,  199,
+    77,   -1,  139,  184,  -31,  -15,   -7,   -3,   -1, 212, 154,  -1, 169, 108,   -3,
+    -1,  198,   61,   -1,  211,   45,   -7,   -3,   -1, 210,  29,  -1, 123, 183,   -3,
+    -1,  209,   92,   -1,  197,  138,  -17,   -7,   -3,  -1, 168, 153,  -1,  76,  196,
+    -3,   -1,  107,  182,   -3,   -1,  208,   12,   60,  -7,  -3,  -1, 195, 122,   -1,
+   167,   44,   -3,   -1,  194,   91,   -1,  181,   28, -57, -35, -19,  -7,  -3,   -1,
+   137,  152,   -1,  193,   75,   -5,   -3,   -1,  192,  11,  59,  -3,  -1, 176,   10,
+    26,   -5,   -1,  180,   -1,  106,  166,   -3,   -1, 121, 151,  -3,  -1, 160,    9,
+   144,   -9,   -3,   -1,  179,  136,   -3,   -1,   43,  90, 178,  -7,  -3,  -1,  165,
+    27,   -1,  177,  105,   -1,  150,  164,  -17,   -9,  -5,  -3,  -1,  74, 120,  135,
+    -1,   58,  163,   -3,   -1,   89,  149,   -1,   42, 162,  -7,  -3,  -1, 161,  104,
+    -1,  134,  119,   -3,   -1,   73,  148,   -1,   57, 147, -63, -31, -15,  -7,   -3,
+    -1,   88,  133,   -1,   41,  103,   -3,   -1,  118, 146,  -1,  25, 145,  -7,   -3,
+    -1,   72,  132,   -1,   87,  117,   -3,   -1,   56, 131,  -1, 102,  40, -17,   -7,
+    -3,   -1,  130,   24,   -1,   71,  116,   -5,   -1, 129,  -1,   8, 128,  -1,   86,
+   101,   -7,   -5,   -1,   23,   -1,    7,  112,  115,  -3,  -1,  55,  39, 114,  -15,
+    -7,   -3,   -1,   70,  100,   -1,   85,  113,   -3,  -1,  54,  99,  -1,  69,   84,
+    -7,   -3,   -1,   38,   98,   -1,   22,   97,   -5,  -3,  -1,   6,  96,  53,   -1,
+    83,   68,  -51,  -37,  -23,  -15,   -9,   -3,   -1,  37,  82,  -1,  21,  -1,    5,
+    80,   -1,   81,   -1,   52,   67,   -3,   -1,   36,  66,  -1,  51,  20,  -9,   -5,
+    -1,   65,   -1,    4,   64,   -1,   35,   50,   -1,  19,  49,  -7,  -5,  -3,   -1,
+     3,   48,   34,   18,   -1,   33,   -1,    2,   32,  -3,  -1,  17,   1,  -1,   16,
+     0
+};
+
+static int16_t tab_c0[] = {
+   -29,  -21,  -13,   -7,   -3,   -1,   11,   15,   -1,  13,  14,  -3,  -1,   7,    5,
+     9,   -3,   -1,    6,    3,   -1,   10,   12,   -3,  -1,   2,   1,  -1,   4,    8,
+     0
+};
+
+static int16_t tab_c1[] = {
+   -15,   -7,   -3,   -1,   15,   14,   -1,   13,   12,  -3,  -1,  11,  10,  -1,    9,
+     8,   -7,   -3,   -1,    7,    6,   -1,    5,    4,  -3,  -1,   3,   2,  -1,    1,
+     0
+};
+
+newhuff_t hufft[] = {
+ {  0, tab0  }, {  0, tab1  }, {  0, tab2  }, {  0, tab3  },
+ {  0, tab0  }, {  0, tab5  }, {  0, tab6  }, {  0, tab7  },
+ {  0, tab8  }, {  0, tab9  }, {  0, tab10 }, {  0, tab11 },
+ {  0, tab12 }, {  0, tab13 }, {  0, tab0  }, {  0, tab15 },
+ {  1, tab16 }, {  2, tab16 }, {  3, tab16 }, {  4, tab16 },
+ {  6, tab16 }, {  8, tab16 }, { 10, tab16 }, { 13, tab16 },
+ {  4, tab24 }, {  5, tab24 }, {  6, tab24 }, {  7, tab24 },
+ {  8, tab24 }, {  9, tab24 }, { 11, tab24 }, { 13, tab24 }
+};
+
+newhuff_t hufftc[] = { { 0, tab_c0 }, { 0, tab_c1 } };
+
+static int32_t intwinbase[] = {
+      0,    -1,    -1,    -1,    -1,    -1,    -1,    -2,    -2,    -2,
+     -2,    -3,    -3,    -4,    -4,    -5,    -5,    -6,    -7,    -7,
+     -8,    -9,   -10,   -11,   -13,   -14,   -16,   -17,   -19,   -21,
+    -24,   -26,   -29,   -31,   -35,   -38,   -41,   -45,   -49,   -53,
+    -58,   -63,   -68,   -73,   -79,   -85,   -91,   -97,  -104,  -111,
+   -117,  -125,  -132,  -139,  -147,  -154,  -161,  -169,  -176,  -183,
+   -190,  -196,  -202,  -208,  -213,  -218,  -222,  -225,  -227,  -228,
+   -228,  -227,  -224,  -221,  -215,  -208,  -200,  -189,  -177,  -163,
+   -146,  -127,  -106,   -83,   -57,   -29,     2,    36,    72,   111,
+    153,   197,   244,   294,   347,   401,   459,   519,   581,   645,
+    711,   779,   848,   919,   991,  1064,  1137,  1210,  1283,  1356,
+   1428,  1498,  1567,  1634,  1698,  1759,  1817,  1870,  1919,  1962,
+   2001,  2032,  2057,  2075,  2085,  2087,  2080,  2063,  2037,  2000,
+   1952,  1893,  1822,  1739,  1644,  1535,  1414,  1280,  1131,   970,
+    794,   605,   402,   185,   -45,  -288,  -545,  -814, -1095, -1388,
+  -1692, -2006, -2330, -2663, -3004, -3351, -3705, -4063, -4425, -4788,
+  -5153, -5517, -5879, -6237, -6589, -6935, -7271, -7597, -7910, -8209,
+  -8491, -8755, -8998, -9219, -9416, -9585, -9727, -9838, -9916, -9959,
+  -9966, -9935, -9863, -9750, -9592, -9389, -9139, -8840, -8492, -8092,
+  -7640, -7134, -6574, -5959, -5288, -4561, -3776, -2935, -2037, -1082,
+    -70,   998,  2122,  3300,  4533,  5818,  7154,  8540,  9975, 11455,
+  12980, 14548, 16155, 17799, 19478, 21189, 22929, 24694, 26482, 28289,
+  30112, 31947, 33791, 35640, 37489, 39336, 41176, 43006, 44821, 46617,
+  48390, 50137, 51853, 53534, 55178, 56778, 58333, 59838, 61289, 62684,
+  64019, 65290, 66494, 67629, 68692, 69679, 70590, 71420, 72169, 72835,
+  73415, 73908, 74313, 74630, 74856, 74992, 75038
+};
+
+static void make_synth_window(mpadec_t mpadec, MYFLT scale)
+{
+  register struct mpadec_t *mpa = (struct mpadec_t *)mpadec;
+  register int i, j, k;
+
+  scale = -scale;
+  for (i = 0, j = 0, k = 0; i < 256; i++, j++, k += 32) {
+    if (k < (512 + 16)) mpa->tables.decwin[k] = mpa->tables.decwin[k + 16] = ((MYFLT)intwinbase[j]/65536.0)*scale;
+    if ((i & 31) == 31) k -= 1023;
+    if ((i & 63) == 63) scale = -scale;
+  }
+  for (; i < 512; i++, j--, k += 32) {
+    if (k < (512 + 16)) mpa->tables.decwin[k] = mpa->tables.decwin[k + 16] = ((MYFLT)intwinbase[j]/65536.0)*scale;
+    if ((i & 31) == 31) k -= 1023;
+    if ((i & 63) == 63) scale = -scale;
+  }
+}
+
+static void init_limits(mpadec_t mpadec, int32_t sblimit)
+{
+  register struct mpadec_t *mpa = (struct mpadec_t *)mpadec;
+  register int i, j;
+
+  for (i = 0; i < 9; i++) {
+    for (j = 0; j < 23; j++) {
+      mpa->tables.long_limit[i][j] = (band_info[i].long_idx[j] + 7)/SSLIMIT + 1;
+      if (mpa->tables.long_limit[i][j] > sblimit) mpa->tables.long_limit[i][j] = sblimit;
+    }
+    for (j = 0; j < 14; j++) {
+      mpa->tables.short_limit[i][j] = (band_info[i].short_idx[j] - 1)/SSLIMIT + 1;
+      if (mpa->tables.short_limit[i][j] > sblimit) mpa->tables.short_limit[i][j] = sblimit;
+    }
+  }
+}
+
+static void init_layer2(mpadec_t mpadec)
+{
+  register struct mpadec_t *mpa = (struct mpadec_t *)mpadec;
+  int i, j, k; uint8_t *tab;
+  static MYFLT mulmul[27] = { 0.0, -2.0/3.0, 2.0/3.0, 2.0/7.0, 2.0/15.0, 2.0/31.0, 2.0/63.0,
+                              2.0/127.0, 2.0/255.0, 2.0/511.0, 2.0/1023.0, 2.0/2047.0,
+                              2.0/4095.0, 2.0/8191.0, 2.0/16383.0, 2.0/32767.0, 2.0/65535.0,
+                             -4.0/5.0, -2.0/5.0, 2.0/5.0, 4.0/5.0, -8.0/9.0,
+                             -4.0/9.0, -2.0/9.0, 2.0/9.0, 4.0/9.0,  8.0/9.0 };
+  static uint8_t base[3][9] = { { 1, 0, 2, }, { 17, 18, 0, 19, 20, },
+                                { 21, 1, 22, 23, 0, 24, 25, 2, 26 } };
+
+  tab = mpa->tables.grp3tab;
+  for (i = 0; i < 3; i++)
+    for (j = 0; j < 3; j++)
+      for (k = 0; k < 3; k++, tab += 3) {
+        tab[0] = base[0][k];
+        tab[1] = base[0][j];
+        tab[2] = base[0][i];
+      }
+  tab = mpa->tables.grp5tab;
+  for (i = 0; i < 5; i++)
+    for (j = 0; j < 5; j++)
+      for (k = 0; k < 5; k++, tab += 3) {
+        tab[0] = base[1][k];
+        tab[1] = base[1][j];
+        tab[2] = base[1][i];
+      }
+  tab = mpa->tables.grp9tab;
+  for (i = 0; i < 9; i++)
+    for (j = 0; j < 9; j++)
+      for (k = 0; k < 9; k++, tab += 3) {
+        tab[0] = base[2][k];
+        tab[1] = base[2][j];
+        tab[2] = base[2][i];
+      }
+  mpa->tables.mp2tables[0] = mpa->tables.mp2tables[1] = mpa->tables.mp2tables[2] = NULL;
+  mpa->tables.mp2tables[3] = mpa->tables.grp3tab;
+  mpa->tables.mp2tables[4] = NULL;
+  mpa->tables.mp2tables[5] = mpa->tables.grp5tab;
+  mpa->tables.mp2tables[6] = mpa->tables.mp2tables[7] = mpa->tables.mp2tables[8] = NULL;
+  mpa->tables.mp2tables[9] = mpa->tables.grp9tab;
+  for (i = 0; i < 27; i++) {
+    for (j = 0, k = 3; j < 63; j++, k--) mpa->tables.muls[i][j] = mulmul[i]*pow(2.0, (MYFLT)k/3.0);
+    mpa->tables.muls[i][63] = 0.0;
+  }
+}
+
+static void init_layer3(mpadec_t mpadec)
+{
+  register struct mpadec_t *mpa = (struct mpadec_t *)mpadec;
+  int i, j, k, l;
+
+  for (i = -256; i < 122; i++) mpa->tables.gainpow2[i + 256] = pow(2.0, -0.25*(i + 210));
+  for (i = 0; i < 8207; i++) mpa->tables.ispow[i] = pow(i, 4.0/3.0);
+  for (i = 0; i < 18; i++) {
+    mpa->tables.win[0][0][i] = mpa->tables.win[0][1][i] = 0.5*sin((2*i + 1)*M_PI/72.0)/cos((2*i + 19)*M_PI/72.0);
+    mpa->tables.win[0][0][i + 18] = mpa->tables.win[0][3][i + 18] = 0.5*sin((2*(i + 18) + 1)*M_PI/72.0)/cos((2*(i + 18) + 19)*M_PI/72.0);
+  }
+  for (i = 0; i < 6; i++) {
+    mpa->tables.win[0][1][i + 18] = 0.5/cos((2*(i + 18) + 19)*M_PI/72.0);
+    mpa->tables.win[0][3][i + 12] = 0.5/cos((2*(i + 12) + 19)*M_PI/72.0);
+    mpa->tables.win[0][1][i + 24] = 0.5*sin((2*i + 13)*M_PI/24.0)/cos((2*(i + 24) + 19)*M_PI/72.0);
+    mpa->tables.win[0][1][i + 30] = mpa->tables.win[0][3][i] = 0.0;
+    mpa->tables.win[0][3][i + 6] = 0.5*sin((2*i + 1)*M_PI/24.0)/cos((2*(i + 6) + 19)*M_PI/72.0);
+  }
+  for (i = 0; i < 12; i++) {
+    mpa->tables.win[0][2][i] = 0.5*sin((2*i + 1)*M_PI/24.0)/cos((2*i + 7)*M_PI/24.0);
+  }
+  for (i = 0; i < 4; i++) {
+    int len = (i == 2) ? 12 : 36;
+    for (j = 0; j < len; j += 2) {
+      mpa->tables.win[1][i][j] = mpa->tables.win[0][i][j];
+      mpa->tables.win[1][i][j + 1] = -mpa->tables.win[0][i][j + 1];
+    }
+  }
+  for (i = 0; i < 16; i++) {
+    MYFLT tmp = tan(i*M_PI/12.0);
+    mpa->tables.tan1_1[i] = tmp/(1.0 + tmp);
+    mpa->tables.tan2_1[i] = 1.0/(1.0 + tmp);
+    mpa->tables.tan1_2[i] = M_SQRT2*tmp/(1.0 + tmp);
+    mpa->tables.tan2_2[i] = M_SQRT2/(1.0 + tmp);
+    for (j = 0; j < 2; j++) {
+      MYFLT base = pow(2.0, -0.25*(j + 1));
+      MYFLT p1 = 1.0, p2 = 1.0;
+      if (i > 0) {
+        if (i & 1) p1 = pow(base, 0.5*(i + 1));
+        else p2 = pow(base, 0.5*i);
+      }
+      mpa->tables.pow1_1[j][i] = p1;
+      mpa->tables.pow2_1[j][i] = p2;
+      mpa->tables.pow1_2[j][i] = M_SQRT2*p1;
+      mpa->tables.pow2_2[j][i] = M_SQRT2*p2;
+    }
+  }
+  mpa->tables.istabs[0][0][0] = mpa->tables.tan1_1;
+  mpa->tables.istabs[0][0][1] = mpa->tables.tan2_1;
+  mpa->tables.istabs[0][1][0] = mpa->tables.tan1_2;
+  mpa->tables.istabs[0][1][1] = mpa->tables.tan2_2;
+  mpa->tables.istabs[1][0][0] = mpa->tables.pow1_1[0];
+  mpa->tables.istabs[1][0][1] = mpa->tables.pow2_1[0];
+  mpa->tables.istabs[1][1][0] = mpa->tables.pow1_2[0];
+  mpa->tables.istabs[1][1][1] = mpa->tables.pow2_2[0];
+  mpa->tables.istabs[2][0][0] = mpa->tables.pow1_1[1];
+  mpa->tables.istabs[2][0][1] = mpa->tables.pow2_1[1];
+  mpa->tables.istabs[2][1][0] = mpa->tables.pow1_2[1];
+  mpa->tables.istabs[2][1][1] = mpa->tables.pow2_2[1];
+  for (i = 0; i < 9; i++) {
+    bandinfo_t *bi = &band_info[i];
+    int32_t *mp, cb, lwin; int16_t *bdf;
+    mp = mpa->tables.map[i][0] = mpa->tables.mapbuf0[i];
+    bdf = bi->long_diff;
+    for (cb = 0, j = 0; cb < 8; cb++, j += *bdf++, mp += 4) {
+      mp[0] = (*bdf) >> 1;
+      mp[1] = j;
+      mp[2] = 3;
+      mp[3] = cb;
+    }
+    bdf = bi->short_diff + 3;
+    for (cb = 3; cb < 13; cb++) {
+      int l = (*bdf++) >> 1;
+      for (lwin = 0; lwin < 3; lwin++, mp += 4) {
+        mp[0] = l;
+        mp[1] = j + lwin;
+        mp[2] = lwin;
+        mp[3] = cb;
+      }
+      j += 6*l;
+    }
+    mpa->tables.mapend[i][0] = mp;
+    mp = mpa->tables.map[i][1] = mpa->tables.mapbuf1[i];
+    bdf = bi->short_diff;
+    for (cb = 0, j = 0; cb < 13; cb++) {
+      int l = (*bdf++) >> 1;
+      for (lwin = 0; lwin < 3; lwin++, mp += 4) {
+        mp[0] = l;
+        mp[1] = j + lwin;
+        mp[2] = lwin;
+        mp[3] = cb;
+      }
+      j += 6*l;
+    }
+    mpa->tables.mapend[i][1] = mp;
+    mp = mpa->tables.map[i][2] = mpa->tables.mapbuf2[i];
+    bdf = bi->long_diff;
+    for (cb = 0; cb < 22; cb++, mp += 2) {
+      mp[0] = (*bdf++) >> 1;
+      mp[1] = cb;
+    }
+    mpa->tables.mapend[i][2] = mp;
+  }
+  for (i = 0; i < 5; i++) {
+    for (j = 0; j < 6; j++) {
+      for (k = 0; k < 6; k++) {
+        register int n = k + 6*j + 36*i;
+        mpa->tables.i_slen2[n] = i | (j << 3) | (k << 6) | (3 << 12);
+      }
+    }
+  }
+  for (i = 0; i < 4; i++) {
+    for (j = 0; j < 4; j++) {
+      for (k = 0; k < 4; k++) {
+        register int n = k + 4*j + 16*i;
+        mpa->tables.i_slen2[n + 180] = i | (j << 3) | (k << 6) | (4 << 12);
+      }
+    }
+  }
+  for (i = 0; i < 4; i++) {
+    for (j = 0; j < 3; j++) {
+      register int n = j + 3*i;
+      mpa->tables.i_slen2[n + 244] = i | (j << 3) | (5 << 12);
+      mpa->tables.n_slen2[n + 500] = i | (j << 3) | (2 << 12) | (1 << 15);
+    }
+  }
+  for (i = 0; i < 5; i++) {
+    for (j = 0; j < 5; j++) {
+      for (k = 0; k < 4; k++) {
+        for (l = 0; l < 4; l++) {
+          register int n = l + 4*k + 16*j + 80*i;
+          mpa->tables.n_slen2[n] = i | (j << 3) | (k << 6) | (l << 9);
+        }
+      }
+    }
+  }
+  for (i = 0; i < 5; i++) {
+    for (j = 0; j < 5; j++) {
+      for (k = 0; k < 4; k++) {
+        register int n = k + 4*j + 20*i;
+        mpa->tables.n_slen2[n + 400] = i | (j << 3) | (k << 6) | (1 << 12);
+      }
+    }
+  }
+}
+
+void init_tables(mpadec_t mpadec, MYFLT scale, int32_t sblimit)
+{
+  register struct mpadec_t *mpa = (struct mpadec_t *)mpadec;
+
+  if (mpa->state < MPADEC_STATE_START) {
+    init_layer2(mpa);
+    init_layer3(mpa);
+  }
+  init_limits(mpa, sblimit);
+  make_synth_window(mpa, scale);
+}
+
diff --git a/InOut/libsnd.c b/InOut/libsnd.c
index e6f8237..4477421 100644
--- a/InOut/libsnd.c
+++ b/InOut/libsnd.c
@@ -569,10 +569,16 @@ void sfopenin(CSOUND *csound)           /* init for continuous soundin */
     /* calc inbufsize reqd */
     ST(inbufsiz) = (unsigned) (O->inbufsamps * sizeof(MYFLT));
     ST(inbuf) = (MYFLT*) mcalloc(csound, ST(inbufsiz)); /* alloc inbuf space */
+    if (ST(pipdevout) == 2)
+      csound->Message(csound,
+                      Str("reading %d sample blks of %d-bit floats from %s \n"),
+                      O->inbufsamps * O->sfsampsize, sizeof(MYFLT)*8, sfname);
+    else {
     csound->Message(csound,
                     Str("reading %d-byte blks of %s from %s (%s)\n"),
                     O->inbufsamps * (int) sfsampsize(FORMAT2SF(O->informat)),
                     getstrformat(O->informat), sfname, type2string(fileType));
+    }
     ST(isfopen) = 1;
 }
 
@@ -730,16 +736,20 @@ void sfopenout(CSOUND *csound)                  /* init for sound out       */
     /* calc outbuf size & alloc bufspace */
     ST(outbufsiz) = O->outbufsamps * sizeof(MYFLT);
     ST(outbufp) = ST(outbuf) = mmalloc(csound, ST(outbufsiz));
-    csound->Message(csound, Str("writing %d-byte blks of %s to %s"),
+    if (ST(pipdevout) == 2)
+      csound->Message(csound,
+                      Str("writing %d sample blks of %d-bit floats to %s \n"),
+                      O->outbufsamps, sizeof(MYFLT)*8, ST(sfoutname));
+    else {
+     csound->Message(csound, Str("writing %d-byte blks of %s to %s"),
                     O->outbufsamps * O->sfsampsize,
                     getstrformat(O->outformat), ST(sfoutname));
-    if (ST(pipdevout) == 2)
-      /* realtime output has no header */
-      csound->Message(csound, "\n");
-    else if (O->sfheader == 0)
+
+    if (O->sfheader == 0)
       csound->Message(csound, Str(" (raw)\n"));
     else
       csound->Message(csound, " (%s)\n", type2string(O->filetyp));
+    }
     ST(osfopen) = 1;
     ST(outbufrem) = O->outbufsamps;
 }
@@ -800,16 +810,21 @@ void sfcloseout(CSOUND *csound)
 #endif
 
  report:
-    csound->Message(csound, Str("%ld %d-byte soundblks of %s written to %s"),
-                    csound->nrecs, O->outbufsamps * O->sfsampsize,
-                    getstrformat(O->outformat), ST(sfoutname));
-    if (ST(pipdevout) == 2)
-      /* realtime output has no header */
-      csound->Message(csound, "\n");
-    else if (O->sfheader == 0)
-      csound->Message(csound, Str(" (raw)\n"));
-    else
-      csound->Message(csound, " (%s)\n", type2string(O->filetyp));
+    if (ST(pipdevout) == 2) {
+      csound->Message(csound,
+                      Str("%ld %d sample blks of %d-bit floats written to %s\n"),
+                      csound->nrecs, O->outbufsamps,
+                      sizeof(MYFLT)*8, ST(sfoutname));
+    }
+    else {
+      csound->Message(csound, Str("%ld %d sample blks of %s written to %s"),
+                      O->outbufsamps, O->outbufsamps * O->sfsampsize,
+                      getstrformat(O->outformat), ST(sfoutname));
+      if (O->sfheader == 0)
+        csound->Message(csound, Str(" (raw)\n"));
+      else
+        csound->Message(csound, " (%s)\n", type2string(O->filetyp));
+    }
     ST(osfopen) = 0;
 }
 
@@ -927,4 +942,3 @@ PUBLIC MYFLT *csoundGetOutputBuffer(CSOUND *csound)
       return NULL;
     return ST(outbuf);
 }
-
diff --git a/InOut/midisend.c b/InOut/midisend.c
index 084561c..665ef97 100644
--- a/InOut/midisend.c
+++ b/InOut/midisend.c
@@ -28,7 +28,7 @@
 typedef struct midiOutFile_s {
     FILE            *f;
     void            *fd;
-    unsigned long   prv_tick;
+    unsigned int    prv_tick;
     size_t          nBytes;
     unsigned char   prv_status;
 } midiOutFile_t;
@@ -39,13 +39,12 @@ static const unsigned char midiMsgBytes[32] = {
 };
 
 /* header for type 0 (1 track) MIDI file with 1/3 ms time resolution */
-
 static const unsigned char midiOutFile_header[25] = {
     0x4D, 0x54, 0x68, 0x64,     /* "MThd"                       */
     0x00, 0x00, 0x00, 0x06,     /* header length                */
     0x00, 0x00,                 /* file type                    */
     0x00, 0x01,                 /* number of tracks             */
-    0xE7, 0x78,                 /* tick time (1/25 sec / 120)   */
+    0x19, 0x78,                 /* tick time (1/25 sec / 120), VL this was 0xE7, which was wrong, changed to 0x19 0x78*/
     0x4D, 0x54, 0x72, 0x6B,     /* "MTrk"                       */
     0x00, 0x00, 0x00, 0x00,     /* track length (updated later) */
     /* -------------------------------------------------------- */
@@ -60,7 +59,7 @@ static CS_NOINLINE void
     unsigned char   buf[8];
     double          s;
     midiOutFile_t   *p = (midiOutFile_t *) csound->midiGlobals->midiOutFileData;
-    unsigned long   t, prv;
+    unsigned int   t, prv;
     int             ndx = 0;
 
     if (nbytes < 2)
@@ -68,13 +67,13 @@ static CS_NOINLINE void
     s = csound->icurTime/csound->esr;
     if (csound->ids == NULL && csound->pds != NULL)
       s -= csound->ksmps/csound->esr;
-    s *= 3000.0;
+    s *=  13040.;  /* VL NOV 11: this was 3000.0, which was wrong; 13040.0 was arrived at by experimentation */
 #ifdef HAVE_C99
-    t = (unsigned long) lrint(s);
+    t = (unsigned int) lrint(s);
 #else
-    t = (unsigned long) ((long) (s + 0.5));
+    t = (unsigned int) ((int) (s + 0.5));
 #endif
-    t = ((long) t >= 0L ? t : 0UL);
+    t = ((int) t >= 0L ? t : 0UL);
     prv = p->prv_tick;
     p->prv_tick = t;
     t -= prv;
diff --git a/InOut/pmidi.c b/InOut/pmidi.c
index da36328..c344276 100644
--- a/InOut/pmidi.c
+++ b/InOut/pmidi.c
@@ -195,7 +195,7 @@ static int OpenMidiInDevice_(CSOUND *csound, void **userData, const char *dev)
     PmDeviceInfo *info;
 //     PortMidiStream *midistream;
     pmall_data *data = NULL;
-    pmall_data *next;
+    pmall_data *next = NULL;
 
 
     if (start_portmidi(csound) != 0)
@@ -207,7 +207,7 @@ static int OpenMidiInDevice_(CSOUND *csound, void **userData, const char *dev)
     if (dev == NULL || dev[0] == '\0')
       devnum =
         portMidi_getPackedDeviceID((int)Pm_GetDefaultInputDeviceID(), 0);
-    else if (UNLIKELY(dev[0] < '0' || dev[0] > '9' && dev[0] != 'a')) {
+    else if (UNLIKELY((dev[0] < '0' || dev[0] > '9') && dev[0] != 'a')) {
       portMidiErrMsg(csound,
                      Str("error: must specify a device number (>=0) or"
                          " 'a' for all, not a name"));
diff --git a/InOut/rtalsa.c b/InOut/rtalsa.c
index a468b36..36ae308 100644
--- a/InOut/rtalsa.c
+++ b/InOut/rtalsa.c
@@ -702,9 +702,9 @@ static alsaMidiInputDevice* open_midi_device(CSOUND *csound, const char  *s)
 // This is the function which contains code from amidi
 static int midi_in_open(CSOUND *csound, void **userData, const char *devName)
 {
-    alsaMidiInputDevice *dev, *newdev, *olddev;
-    const char  *s = "hw:0,0";
-    int card, err;
+    alsaMidiInputDevice *dev = NULL, *newdev, *olddev;
+    //const char  *s = "hw:0,0";
+    int card;
     int device;
     snd_ctl_t *ctl;
     char* name;
@@ -836,7 +836,7 @@ static int midi_in_read(CSOUND *csound,
 
 static int midi_in_close(CSOUND *csound, void *userData)
 {
-    int ret, retval = 0;
+    int ret = 0, retval = 0;
     alsaMidiInputDevice *olddev, *dev = NULL;
     (void) csound;
     dev = (alsaMidiInputDevice*) userData;
diff --git a/InOut/rtauhal.c b/InOut/rtauhal.c
new file mode 100644
index 0000000..a011627
--- /dev/null
+++ b/InOut/rtauhal.c
@@ -0,0 +1,554 @@
+/*
+  rtauhal.c:
+
+  Copyright (C) 2011 Victor Lazzarini
+
+  This file is part of Csound.
+
+  The Csound Library is free software; you can redistribute it
+  and/or modify it under the terms of the GNU Lesser General Public
+  License as published by the Free Software Foundation; either
+  version 2.1 of the License, or (at your option) any later version.
+
+  Csound 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 Lesser General Public License for more details.
+
+  You should have received a copy of the GNU Lesser General Public
+  License along with Csound; if not, write to the Free Software
+  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+  02111-1307 USA
+*/
+
+#include <CoreMidi/CoreMidi.h>
+#include <AudioUnit/AudioUnit.h>
+#include <CoreAudio/AudioHardware.h>
+#include <CoreFoundation/CoreFoundation.h>
+#include <unistd.h>
+#include <stdint.h>
+#include "csdl.h"
+#include "soundio.h"
+
+#if !defined(MAC_OS_X_VERSION_10_6)
+/* the API was changed for 10.6, these make it backwards compatible  */
+typedef ComponentInstance AudioComponentInstance;
+typedef Component AudioComponent;
+typedef ComponentDescription AudioComponentDescription;
+#define AudioComponentFindNext FindNextComponent
+#define AudioComponentInstanceNew OpenAComponent
+#define  AudioComponentInstanceDispose CloseComponent
+typedef float AudioUnitSampleType;
+#endif
+
+
+typedef struct csdata_ {
+  AudioDeviceID dev;
+  AudioStreamBasicDescription format;
+  int         inBufSamples;
+  int         outBufSamples;
+  int         currentInputIndex;
+  int         currentOutputIndex;
+  MYFLT       *inputBuffer;
+  MYFLT       *outputBuffer;
+  void        *auLock_in;                /* thread lock for au callback  */
+  void        *clientLock_in;            /* thread lock for rtrecord     */
+  void        *auLock_out;               /* thread lock for au callback  */
+  void        *clientLock_out;           /* thread lock for rtplay       */
+  csRtAudioParams *inParm;
+  csRtAudioParams *outParm;
+  int onchnls, inchnls;
+  AudioComponentInstance outunit;
+  AudioComponentInstance inunit;
+  CSOUND *csound;
+  AudioBufferList *inputdata;
+  int disp;
+  int isInputRunning;
+  int isOutputRunning;
+  AudioDeviceID defdevin;
+  AudioDeviceID defdevout;
+} csdata;
+
+OSStatus  Csound_Input(void *inRefCon,
+                       AudioUnitRenderActionFlags *ioActionFlags,
+                       const AudioTimeStamp *inTimeStamp,
+                       UInt32 inBusNumber,
+                       UInt32 inNumberFrames,
+                       AudioBufferList *ioData);
+
+OSStatus  Csound_Render(void *inRefCon,
+                        AudioUnitRenderActionFlags *ioActionFlags,
+                        const AudioTimeStamp *inTimeStamp,
+                        UInt32 dump,
+                        UInt32 inNumberFrames,
+                        AudioBufferList *ioData);
+
+int AuHAL_open(CSOUND *csound, const csRtAudioParams * parm,
+               csdata *cdata, int isInput)
+{
+    UInt32  psize, devnum, devnos;
+    AudioDeviceID *sysdevs;
+    AudioDeviceID dev;
+    AudioStreamBasicDescription format;
+    int     i;
+    UInt32  bufframes, nchnls;
+    double srate;
+    UInt32 enableIO, maxFPS;
+    AudioComponent HALOutput;
+    AudioComponentInstance *aunit;
+    AudioComponentDescription cd = {kAudioUnitType_Output,
+                                    kAudioUnitSubType_HALOutput,
+                                    kAudioUnitManufacturer_Apple, 0, 0};
+    AudioObjectPropertyAddress prop = {
+      kAudioObjectPropertyName,
+      kAudioObjectPropertyScopeGlobal,
+      kAudioObjectPropertyElementMaster
+    };
+    CFStringRef devName;
+    CFStringEncoding defaultEncoding = CFStringGetSystemEncoding();
+
+    prop.mSelector = (isInput ?
+                      kAudioHardwarePropertyDefaultInputDevice :
+                      kAudioHardwarePropertyDefaultOutputDevice );
+
+    psize = sizeof(AudioDeviceID);
+    AudioObjectGetPropertyData(kAudioObjectSystemObject,
+                               &prop, 0, NULL, &psize, &dev);
+    
+    if(isInput) cdata->defdevin = dev;
+    else cdata->defdevout = dev;
+
+    prop.mSelector = kAudioHardwarePropertyDevices;
+
+    AudioObjectGetPropertyDataSize(kAudioObjectSystemObject,
+                                 &prop, 0, NULL, &psize);
+    devnos = psize / sizeof(AudioDeviceID);
+    sysdevs = (AudioDeviceID *) malloc(psize);
+
+    AudioObjectGetPropertyData(kAudioObjectSystemObject,
+                               &prop, 0, NULL, &psize, sysdevs);
+    if(cdata->disp){
+      csound->Message(csound,
+                 "==========================================================\n"
+                 "AuHAL Module: found %d device(s):\n", (int) devnos);
+      for (i = 0; i < devnos; i++) {
+        psize = sizeof(CFStringRef);
+        prop.mSelector = kAudioObjectPropertyName;
+        AudioObjectGetPropertyData(sysdevs[i],
+                                   &prop, 0, NULL, &psize, &devName);
+        csound->Message(csound, "=> AuHAL device %d: %s \n", i,
+                   CFStringGetCStringPtr(devName, defaultEncoding));
+        CFRelease(devName);
+
+      }
+      cdata->disp = 0;
+    }
+    if (parm->devName != NULL) {
+      devnum = atoi(parm->devName);
+      if (devnum >= 0 && devnum < devnos)
+        dev  = sysdevs[devnum];
+      prop.mSelector = (isInput ?
+                        kAudioHardwarePropertyDefaultInputDevice :
+                        kAudioHardwarePropertyDefaultOutputDevice );
+      AudioObjectSetPropertyData(kAudioObjectSystemObject, &prop,
+                                 0, NULL, sizeof(AudioDeviceID), &dev);
+
+      free(sysdevs);
+    }
+    psize = sizeof(CFStringRef);
+    prop.mSelector = kAudioObjectPropertyName;
+    AudioObjectGetPropertyData(dev,
+                               &prop, 0, NULL, &psize, &devName);
+    if(isInput)
+      csound->Message(csound, Str("selected input device: %s \n"),
+                 CFStringGetCStringPtr(devName, defaultEncoding));
+    else
+      csound->Message(csound, Str("selected output device: %s \n"),
+                 CFStringGetCStringPtr(devName, defaultEncoding));
+
+    CFRelease(devName);
+
+    srate = csound->GetSr(csound);
+    if(!isInput){
+      nchnls =cdata->onchnls = parm->nChannels;
+      bufframes = csound->GetOutputBufferSize(csound)/nchnls;
+    }
+    else {
+      nchnls = cdata->inchnls = parm->nChannels;
+      bufframes = csound->GetInputBufferSize(csound)/nchnls;
+    }
+
+    /* although the SR is set in the stream properties, 
+       we also need to set the device to match */
+    prop.mSelector = kAudioDevicePropertyNominalSampleRate;
+    psize = sizeof(double);
+    AudioObjectSetPropertyData(dev, &prop, 0, NULL, psize, &srate);
+    
+    double sr;
+    AudioObjectGetPropertyData(dev, &prop, 0, NULL, &psize, &sr);
+    if(sr != srate) {
+       csound->Die(csound, 
+            "could not set SR, tried %.1f, got %.1f \n", srate, sr);
+    } 
+
+    HALOutput = AudioComponentFindNext(NULL, &cd);
+    if(isInput){
+      AudioComponentInstanceNew(HALOutput, &(cdata->inunit));    
+      enableIO = 1;
+      AudioUnitSetProperty(cdata->inunit, kAudioOutputUnitProperty_EnableIO,
+                           kAudioUnitScope_Input, 1, &enableIO, sizeof(enableIO));
+      enableIO = 0;
+      AudioUnitSetProperty(cdata->inunit, kAudioOutputUnitProperty_EnableIO,
+                           kAudioUnitScope_Output, 0, &enableIO, sizeof(enableIO));
+      psize = sizeof(AudioDeviceID);
+      /* for input, select device AFTER enabling IO */
+      AudioUnitSetProperty(cdata->inunit,kAudioOutputUnitProperty_CurrentDevice,
+                           kAudioUnitScope_Global, isInput, &dev, psize); 
+      aunit = &(cdata->inunit);
+    } else {
+      AudioComponentInstanceNew(HALOutput, &(cdata->outunit));
+      psize = sizeof(AudioDeviceID);
+      /* for output, select device BEFORE enabling IO */
+      AudioUnitSetProperty(cdata->outunit, kAudioOutputUnitProperty_CurrentDevice,
+      kAudioUnitScope_Global, isInput, &dev, psize);
+      enableIO = 1;
+      AudioUnitSetProperty(cdata->outunit, kAudioOutputUnitProperty_EnableIO,
+                           kAudioUnitScope_Output, 0, &enableIO, sizeof(enableIO));
+      enableIO = 0;
+      AudioUnitSetProperty(cdata->outunit, kAudioOutputUnitProperty_EnableIO,
+                           kAudioUnitScope_Input, 1, &enableIO, sizeof(enableIO));
+      aunit = &(cdata->outunit);
+    }
+    /* now set the buffer size */
+    psize = sizeof(AudioDeviceID);
+    AudioUnitGetProperty(*aunit, kAudioOutputUnitProperty_CurrentDevice,
+                         kAudioUnitScope_Global, isInput, &dev, &psize);
+    prop.mSelector = kAudioDevicePropertyBufferFrameSize;
+    psize = 4;
+    AudioObjectSetPropertyData(dev, &prop, 0, NULL, psize, &bufframes);
+    psize = sizeof(maxFPS);
+    AudioUnitGetProperty(*aunit, kAudioUnitProperty_MaximumFramesPerSlice,
+                         kAudioUnitScope_Global, isInput, &maxFPS, &psize);
+    AudioUnitSetProperty(*aunit, kAudioUnitProperty_MaximumFramesPerSlice,
+                         kAudioUnitScope_Global, isInput, &bufframes,
+                         sizeof(UInt32));
+    /* set the stream properties */
+    psize = sizeof(AudioStreamBasicDescription);
+    AudioUnitGetProperty(*aunit, kAudioUnitProperty_StreamFormat,
+                         (isInput ? kAudioUnitScope_Output : kAudioUnitScope_Input),
+                         isInput, &format, &psize);
+    format.mSampleRate    = srate;
+    format.mFormatID = kAudioFormatLinearPCM;
+    format.mFormatFlags = kAudioFormatFlagsCanonical |
+      kLinearPCMFormatFlagIsNonInterleaved;
+    format.mBytesPerPacket = sizeof(AudioUnitSampleType);
+    format.mFramesPerPacket = 1;
+    format.mBytesPerFrame = sizeof(AudioUnitSampleType);
+    format.mChannelsPerFrame = nchnls;
+    format.mBitsPerChannel = sizeof(AudioUnitSampleType)*8;
+    AudioUnitSetProperty(*aunit, kAudioUnitProperty_StreamFormat,
+                         (isInput ? kAudioUnitScope_Output : kAudioUnitScope_Input),
+                         isInput, &format,
+                         sizeof(AudioStreamBasicDescription));
+    /* set the callbacks and open the device */
+    if(!isInput) {
+      AURenderCallbackStruct output;
+      output.inputProc = Csound_Render;
+      output.inputProcRefCon = cdata;
+      AudioUnitSetProperty(*aunit, kAudioUnitProperty_SetRenderCallback,
+                           kAudioUnitScope_Input, isInput, &output, sizeof(output));
+      AudioUnitInitialize(*aunit);
+      AudioOutputUnitStart(*aunit);
+
+      csound->Message(csound,
+                 "AuHAL module: output device open with %d buffer frames\n"
+                 "======================================================\n",
+                 bufframes);
+    }
+    else {
+      AURenderCallbackStruct input;
+      AudioBufferList *CAInputData =
+        (AudioBufferList*)malloc(sizeof(UInt32)
+                                 + cdata->inchnls * sizeof(AudioBuffer));
+      CAInputData->mNumberBuffers = cdata->inchnls;
+      for (i = 0; i < cdata->inchnls; i++) {
+        CAInputData->mBuffers[i].mNumberChannels = 1;
+        CAInputData->mBuffers[i].mDataByteSize =
+          bufframes * sizeof(AudioUnitSampleType);
+        CAInputData->mBuffers[i].mData =
+          calloc(bufframes, sizeof(AudioUnitSampleType));
+      }
+      cdata->inputdata = CAInputData;
+
+      input.inputProc = Csound_Input;
+      input.inputProcRefCon = cdata;
+      AudioUnitSetProperty(*aunit, kAudioOutputUnitProperty_SetInputCallback,
+                           kAudioUnitScope_Input, isInput, &input, sizeof(input));
+      AudioUnitInitialize(*aunit);
+      AudioOutputUnitStart(*aunit);
+      csound->Message(csound,
+                 "AuHAL module: input device open with %d buffer frames\n"
+                 "==============================================\n",
+                 bufframes);
+
+    }
+
+    return 0;
+
+}
+
+/* open for audio input */
+static int recopen_(CSOUND *csound, const csRtAudioParams * parm)
+{
+    csdata  *cdata;
+
+    if (csound->rtRecord_userdata != NULL)
+      return 0;
+
+    /* allocate structure */
+
+    if(csound->rtPlay_userdata != NULL)
+      cdata = (csdata *) csound->rtPlay_userdata;
+    else {
+      cdata = (csdata *) calloc(1, sizeof(csdata));
+      cdata->disp = 1;
+    }
+
+    cdata->inunit = NULL;
+    cdata->auLock_in = csound->CreateThreadLock();
+    cdata->clientLock_in = csound->CreateThreadLock();
+    csound->WaitThreadLock(cdata->auLock_in, (size_t) 500);
+    csound->WaitThreadLock(cdata->clientLock_in, (size_t) 500);
+    csound->rtRecord_userdata = (void *) cdata;
+    cdata->inParm =  (csRtAudioParams *) parm;
+    cdata->csound = cdata->csound;
+    cdata->inputBuffer =
+      (MYFLT *) calloc (csound->GetInputBufferSize(csound), sizeof(MYFLT));
+    cdata->isInputRunning = 1;
+    return AuHAL_open(csound, parm, cdata, 1);
+}
+
+/* open for audio output */
+static int playopen_(CSOUND *csound, const csRtAudioParams * parm)
+{
+    csdata  *cdata;
+    if(csound->rtRecord_userdata != NULL)
+      cdata = (csdata *) csound->rtRecord_userdata;
+    else {
+      cdata = (csdata *) calloc(1, sizeof(csdata));
+      cdata->disp = 1;
+    }
+    cdata->outunit = NULL;
+    cdata->auLock_out = csound->CreateThreadLock();
+    cdata->clientLock_out = csound->CreateThreadLock();
+    csound->WaitThreadLock(cdata->auLock_out, (size_t) 500);
+    csound->WaitThreadLock(cdata->clientLock_out, (size_t) 500);
+
+    csound->rtPlay_userdata = (void *) cdata;
+    cdata->outParm =  (csRtAudioParams *) parm;
+    cdata->csound = csound;
+    cdata->outputBuffer =
+      (MYFLT *) calloc (csound->GetOutputBufferSize(csound), sizeof(MYFLT));
+    cdata->isOutputRunning = 1;
+    return AuHAL_open(csound, parm, cdata, 0);
+}
+
+OSStatus  Csound_Input(void *inRefCon,
+                       AudioUnitRenderActionFlags *ioActionFlags,
+                       const AudioTimeStamp *inTimeStamp,
+                       UInt32 inBusNumber,
+                       UInt32 inNumberFrames,
+                       AudioBufferList *ioData)
+{
+    csdata *cdata = (csdata *) inRefCon;
+    CSOUND *csound = cdata->csound;
+    int inchnls = cdata->inchnls;
+    MYFLT *inputBuffer = cdata->inputBuffer;
+    int j,k;
+    AudioUnitSampleType *buffer;
+    if(!cdata->isInputRunning) return 0;
+    csound->WaitThreadLock(cdata->auLock_in,10);
+    AudioUnitRender(cdata->inunit, ioActionFlags, inTimeStamp, inBusNumber,
+                    inNumberFrames, cdata->inputdata);
+    for (k = 0; k < inchnls; k++){
+      buffer = (AudioUnitSampleType *) cdata->inputdata->mBuffers[k].mData;
+      for(j=0; j < inNumberFrames; j++){
+        inputBuffer[j*inchnls+k] = buffer[j];
+      }
+    }
+    csound->NotifyThreadLock(cdata->clientLock_in);
+
+    return 0;
+}
+
+static int rtrecord_(CSOUND *csound, MYFLT *inbuff_, int nbytes)
+{
+    csdata  *cdata;
+    cdata = (csdata *) *(csound->GetRtRecordUserData(csound));
+    csound->WaitThreadLock(cdata->clientLock_in, (size_t) 500);
+    memcpy(inbuff_,cdata->inputBuffer,nbytes);
+    csound->NotifyThreadLock(cdata->auLock_in);
+    return nbytes;
+}
+
+OSStatus  Csound_Render(void *inRefCon,
+                        AudioUnitRenderActionFlags *ioActionFlags,
+                        const AudioTimeStamp *inTimeStamp,
+                        UInt32 inBusNumber,
+                        UInt32 inNumberFrames,
+                        AudioBufferList *ioData)
+{
+
+    csdata *cdata = (csdata *) inRefCon;
+    CSOUND *csound = cdata->csound;
+    int onchnls = cdata->onchnls;;
+    MYFLT *outputBuffer = cdata->outputBuffer;
+    int j,k;
+    AudioUnitSampleType *buffer;
+
+    if(!cdata->isOutputRunning) return 0;
+    csound->WaitThreadLock(cdata->auLock_out, 10);
+    for (k = 0; k < onchnls; k++) {
+      buffer = (AudioUnitSampleType *) ioData->mBuffers[k].mData;
+      for(j=0; j < inNumberFrames; j++){
+        buffer[j] = (AudioUnitSampleType) outputBuffer[j*onchnls+k] ;
+      }
+    }
+    csound->NotifyThreadLock(cdata->clientLock_out);
+
+    return 0;
+}
+
+static void rtplay_(CSOUND *csound, const MYFLT *outbuff_, int nbytes)
+{
+
+    csdata  *cdata;
+    cdata = (csdata *) *(csound->GetRtPlayUserData(csound));
+    csound->WaitThreadLock(cdata->clientLock_out, (size_t) 500);
+    memcpy(cdata->outputBuffer,outbuff_,nbytes);
+    csound->NotifyThreadLock(cdata->auLock_out);
+
+}
+
+/* close the I/O device entirely  */
+/* called only when both complete */
+
+static void rtclose_(CSOUND *csound)
+{
+    csdata *cdata;
+    cdata = (csdata *) *(csound->GetRtRecordUserData(csound));
+    if(cdata == NULL)
+      cdata = (csdata *) *(csound->GetRtPlayUserData(csound));
+
+    if (cdata != NULL) {
+      usleep(1000*csound->GetOutputBufferSize(csound)/
+             (csound->GetSr(csound)*csound->GetNchnls(csound)));
+
+      if(cdata->inunit != NULL){
+        AudioOutputUnitStop(cdata->inunit);
+        AudioUnitUninitialize(cdata->inunit);
+        AudioComponentInstanceDispose(cdata->inunit);
+      }
+      cdata->isInputRunning = 0;
+
+      if(cdata->outunit != NULL){
+        AudioOutputUnitStop(cdata->outunit);
+        AudioUnitUninitialize(cdata->outunit);
+        AudioComponentInstanceDispose(cdata->outunit);
+      }
+      cdata->isOutputRunning = 0;
+
+      if (cdata->clientLock_in != NULL) {
+        csound->NotifyThreadLock(cdata->clientLock_in);
+        csound->DestroyThreadLock(cdata->clientLock_in);
+        cdata->clientLock_in = NULL;
+      }
+      if (cdata->auLock_in != NULL) {
+        csound->NotifyThreadLock(cdata->auLock_in);
+        csound->DestroyThreadLock(cdata->auLock_in);
+        cdata->auLock_in = NULL;
+      }
+
+      if (cdata->clientLock_out != NULL) {
+        csound->NotifyThreadLock(cdata->clientLock_out);
+        csound->DestroyThreadLock(cdata->clientLock_out);
+        cdata->clientLock_in = NULL;
+      }
+
+      if (cdata->auLock_out != NULL) {
+        csound->NotifyThreadLock(cdata->auLock_out);
+        csound->DestroyThreadLock(cdata->auLock_out);
+        cdata->auLock_out = NULL;
+      }
+
+
+      if (cdata->outputBuffer != NULL) {
+        free(cdata->outputBuffer);
+        cdata->outputBuffer = NULL;
+      }
+      if (cdata->inputBuffer != NULL) {
+        free(cdata->inputBuffer);
+        cdata->inputBuffer = NULL;
+      }
+      csound->rtRecord_userdata = NULL;
+      csound->rtPlay_userdata = NULL;
+
+      if(cdata->inputdata) {
+        int i;
+        for (i = 0; i < cdata->inchnls; i++)
+          free(cdata->inputdata->mBuffers[i].mData);
+        free(cdata->inputdata);
+      }
+
+      if(cdata->defdevin) {
+      AudioObjectPropertyAddress prop = {
+      kAudioHardwarePropertyDefaultInputDevice,
+      kAudioObjectPropertyScopeGlobal,
+      kAudioObjectPropertyElementMaster
+      };
+      UInt32 psize = sizeof(AudioDeviceID);
+      AudioObjectSetPropertyData(kAudioObjectSystemObject,
+                               &prop, 0, NULL, psize, &cdata->defdevin); 
+      }
+      if(cdata->defdevout) { 
+      AudioObjectPropertyAddress prop = {
+     kAudioHardwarePropertyDefaultOutputDevice,
+      kAudioObjectPropertyScopeGlobal,
+      kAudioObjectPropertyElementMaster
+      };   
+      UInt32 psize = sizeof(AudioDeviceID);
+      AudioObjectSetPropertyData(kAudioObjectSystemObject,
+                               &prop, 0, NULL, psize, &cdata->defdevout);
+    }
+      free(cdata);
+      csound->Message(csound, Str("AuHAL module: device closed\n"));
+
+    }
+}
+
+int csoundModuleInit(CSOUND *csound)
+{
+    char   *drv;
+    drv = (char *) csound->QueryGlobalVariable(csound, "_RTAUDIO");
+    if (drv == NULL)
+      return 0;
+    if (!(strcmp(drv, "auhal") == 0 || strcmp(drv, "AuHal") == 0 ||
+          strcmp(drv, "AUHAL") == 0 ||
+          strcmp(drv, "coreaudio") == 0 || strcmp(drv, "CoreAudio") == 0 ||
+          strcmp(drv, "COREAUDIO") == 0))
+      return 0;
+    if (csound->oparms->msglevel & 0x400)
+      csound->Message(csound, Str("rtaudio: coreaaudio-AuHAL module enabled\n"));
+    csound->SetPlayopenCallback(csound, playopen_);
+    csound->SetRecopenCallback(csound, recopen_);
+    csound->SetRtplayCallback(csound, rtplay_);
+    csound->SetRtrecordCallback(csound, rtrecord_);
+    csound->SetRtcloseCallback(csound, rtclose_);
+    return 0;
+}
+
+int csoundModuleCreate(CSOUND *csound)
+{
+    CSOUND *p = csound;
+    return 0;
+}
diff --git a/InOut/rtcoreaudio.c b/InOut/rtcoreaudio.c
index b63807d..cda1a95 100644
--- a/InOut/rtcoreaudio.c
+++ b/InOut/rtcoreaudio.c
@@ -21,6 +21,9 @@
   02111-1307 USA
 */
 
+/* this code is deprecated, has been substituted by the rtauhal.c module */
+
+
 #include <CoreAudio.h>
 #include <unistd.h>
 #include <stdint.h>
@@ -45,7 +48,11 @@ typedef struct devparams_ {
     float   srate;
     int     nchns;
     int     isNInterleaved;
+#if defined(MAC_OS_X_VERSION_10_5) && (MAC_OS_X_VERSION_MIN_REQUIRED>=MAC_OS_X_VERSION_10_5)
     AudioDeviceIOProcID     procID;
+#else
+  int procID;
+#endif
 } DEVPARAMS;
 
 /* module interface functions */
diff --git a/InOut/rtjack.c b/InOut/rtjack.c
index 84f703a..faa6cda 100644
--- a/InOut/rtjack.c
+++ b/InOut/rtjack.c
@@ -531,7 +531,7 @@ static void rtJack_CopyDevParams(RtJackGlobals *p, char **devName,
       /* connection yet; this is a somewhat hackish solution... */
       if (p->client == (jack_client_t*) NULL) {
         useTmpClient = 1;
-        client_ = jack_client_new(&(p->clientName[0]));
+        client_ = jack_client_open(&(p->clientName[0]), JackNullOption, NULL);
       }
       else
         client_ = p->client;
diff --git a/InOut/virtual_keyboard/FLTKKeyboard.cpp b/InOut/virtual_keyboard/FLTKKeyboard.cpp
index ccb5e23..c02a34c 100644
--- a/InOut/virtual_keyboard/FLTKKeyboard.cpp
+++ b/InOut/virtual_keyboard/FLTKKeyboard.cpp
@@ -27,10 +27,11 @@
 #include <FL/fl_draw.H>
 #include "FLTKKeyboard.hpp"
 
-FLTKKeyboard::FLTKKeyboard(CSOUND *csound, int X, int Y, int W, int H, const char *L)
+FLTKKeyboard::FLTKKeyboard(CSOUND *csound, SliderBank *sliderBank, int X, int Y, int W, int H, const char *L)
   : Fl_Widget(X, Y, W, H, L) {
 
     this->csound = csound;
+    this->sliderBank = sliderBank;
     this->mutex = csound->Create_Mutex(0);
 
     FLTKKeyboard *o = this;
@@ -202,6 +203,51 @@ int FLTKKeyboard::getMIDIKey(int xVal, int yVal) {
 
 }
 
+void FLTKKeyboard::handleControl(int key) {
+    int index;
+
+    switch(key) {
+    case '1':
+      index = 0;
+      break;
+    case '2':
+      index = 1;
+      break;
+    case '3':
+      index = 2;
+      break;
+    case '4':
+      index = 3;
+      break;
+    case '5':
+      index = 4;
+      break;
+    case '6':
+      index = 5;
+      break;
+    case '7':
+      index = 6;
+      break;
+    case '8':
+      index = 7;
+      break;
+    case '9':
+      index = 8;
+      break;
+    case '0':
+      index = 9;
+      break;
+    default:
+      return;
+    }
+    if(Fl::event_shift()) {
+      sliderBank->incrementSlider(index, -1);
+    } else {
+      sliderBank->incrementSlider(index, 1);
+    }
+    return;
+}
+
 void FLTKKeyboard::handleKey(int key, int value) {
     int index = -1;
 
@@ -297,6 +343,10 @@ void FLTKKeyboard::handleKey(int key, int value) {
       return;
     }
 
+    if(Fl::event_shift()) {
+      index += 29;
+    }
+
     if(index < 0) {
       return;
     }
@@ -394,7 +444,11 @@ int FLTKKeyboard::handle(int event) {
           return 1;
     case FL_KEYDOWN:
       //csound->Message(csound, "Key Down: Code: %d\n", Fl::event_key());
-      handleKey(Fl::event_key(), 1);
+      if(Fl::event_ctrl() && sliderBank != NULL) {
+        handleControl(Fl::event_key());
+      } else {
+        handleKey(Fl::event_key(), 1);
+      }
       Fl::focus(this);
       this->redraw();
       return 1;
diff --git a/InOut/virtual_keyboard/FLTKKeyboard.hpp b/InOut/virtual_keyboard/FLTKKeyboard.hpp
index b5bd309..35d4b98 100644
--- a/InOut/virtual_keyboard/FLTKKeyboard.hpp
+++ b/InOut/virtual_keyboard/FLTKKeyboard.hpp
@@ -27,10 +27,11 @@
 #include <FL/Fl.H>
 #include <FL/Fl_Widget.H>
 #include "csdl.h"
+#include "SliderBank.hpp"
 
 class FLTKKeyboard : public Fl_Widget {
 public:
-  FLTKKeyboard(CSOUND *csound, int X, int Y, int W, int H, const char *L);
+  FLTKKeyboard(CSOUND *csound, SliderBank *sliderBank, int X, int Y, int W, int H, const char *L);
   ~FLTKKeyboard();
   int handle(int event);
   void draw();
@@ -41,16 +42,18 @@ public:
   void unlock();
   void allNotesOff();
   int aNotesOff;
-private:
   int octave;
+private:
   int getMIDIKey(int x, int y);
   int lastMidiKey;
   int isWhiteKey(int key);
   int getMidiValForWhiteKey(int whiteKeyNum);
   void handleKey(int key, int value);
+  void handleControl(int key);
 
   CSOUND *csound;
   void * mutex;
+  SliderBank *sliderBank;
 };
 
 #endif /*FLTKKEYBOARD_HPP_*/
diff --git a/InOut/virtual_keyboard/FLTKKeyboardWidget.cpp b/InOut/virtual_keyboard/FLTKKeyboardWidget.cpp
index 0915e15..08149de 100644
--- a/InOut/virtual_keyboard/FLTKKeyboardWidget.cpp
+++ b/InOut/virtual_keyboard/FLTKKeyboardWidget.cpp
@@ -69,11 +69,24 @@ static void programChange(Fl_Widget *widget, void * v) {
     win->unlock();
 }
 
+static void octaveChange(Fl_Widget *widget, void * v) {
+    Fl_Choice *choice = (Fl_Choice *)widget;
+    FLTKKeyboardWidget *win = (FLTKKeyboardWidget *)v;
+
+    win->lock();
+
+    win->keyboard->octave = (int)choice->value() + 1;
+
+    win->unlock();
+}
+
 FLTKKeyboardWidget::FLTKKeyboardWidget(CSOUND *csound,
           const char *deviceMap,
           int X, int Y, int w, int h)
     : Fl_Group(X, Y, w, h)
 {
+    char octave[2];
+    octave[1] = 0;
 
     this->csound = csound;
     this->mutex = csound->Create_Mutex(0);
@@ -89,13 +102,15 @@ FLTKKeyboardWidget::FLTKKeyboardWidget(CSOUND *csound,
     int row2 = row1 + 20;
     int row3 = row2 + 20;
 
-    int x1 = (int)(baseX + ((60 / 624.0) * w));
-    int x2 = (int)(baseX + ((180 / 624.0) * w));
-    int x3 = (int)(baseX + ((420 / 624.0) * w));
+    int x1 = (int)(baseX + ((60 / 754.0) * w));
+    int x2 = (int)(baseX + ((180 / 754.0) * w));
+    int x3 = (int)(baseX + ((420 / 754.0) * w));
+    int x4 = (int)(baseX + ((670 / 754.0) * w));
 
-    int w1 = (int)((80 / 624.0) * w);
-    int w2 = (int)((180 / 624.0) * w);
-    int w3 = (int)((200 / 624.0) * w);
+    int w1 = (int)((80 / 754.0) * w);
+    int w2 = (int)((180 / 754.0) * w);
+    int w3 = (int)((200 / 754.0) * w);
+    int w4 = (int)((80 / 754.0) * w);
 
 
     //624, 120
@@ -107,6 +122,7 @@ FLTKKeyboardWidget::FLTKKeyboardWidget(CSOUND *csound,
 
     this->bankChoice = new Fl_Choice(x2, row1, w2, 20, "Bank");
     this->programChoice = new Fl_Choice(x3, row1, w3, 20, "Program");
+    this->octaveChoice = new Fl_Choice(x4, row1, w4, 20, "Octave");
 
     bankChoice->clear();
 
@@ -118,14 +134,23 @@ FLTKKeyboardWidget::FLTKKeyboardWidget(CSOUND *csound,
 
     setProgramNames();
 
+    octaveChoice->clear();
+ 
+    for(unsigned int i = 1; i < 8; i++) {
+            octave[0] = i + 48;
+            octaveChoice->add(octave);
+    }
+ 
+    octaveChoice->value(4);
+
     this->bankChoice->callback((Fl_Callback*)bankChange, this);
     this->programChoice->callback((Fl_Callback*)programChange, this);
-
+    this->octaveChoice->callback((Fl_Callback*)octaveChange, this);
 
     this->allNotesOffButton = new Fl_Button(baseX, row2, w, 20, "All Notes Off");
     this->allNotesOffButton->callback((Fl_Callback*) allNotesOff, this);
 
-    this->keyboard = new FLTKKeyboard(csound, baseX, row3, w, h - 40, "Keyboard");
+    this->keyboard = new FLTKKeyboard(csound, NULL, baseX, row3, w, h - 40, "Keyboard");
 
     this->end();
 
diff --git a/InOut/virtual_keyboard/FLTKKeyboardWidget.hpp b/InOut/virtual_keyboard/FLTKKeyboardWidget.hpp
index e7bebc0..0d2f2c3 100644
--- a/InOut/virtual_keyboard/FLTKKeyboardWidget.hpp
+++ b/InOut/virtual_keyboard/FLTKKeyboardWidget.hpp
@@ -44,6 +44,7 @@ public:
     Fl_Spinner *channelSpinner;
     Fl_Choice *bankChoice;
     Fl_Choice *programChoice;
+    Fl_Choice *octaveChoice;
 
     KeyboardMapping *keyboardMapping;
 
diff --git a/InOut/virtual_keyboard/FLTKKeyboardWindow.cpp b/InOut/virtual_keyboard/FLTKKeyboardWindow.cpp
index c4829e4..277b036 100644
--- a/InOut/virtual_keyboard/FLTKKeyboardWindow.cpp
+++ b/InOut/virtual_keyboard/FLTKKeyboardWindow.cpp
@@ -71,11 +71,24 @@ static void programChange(Fl_Widget *widget, void * v) {
     win->unlock();
 }
 
+static void octaveChange(Fl_Widget *widget, void * v) {
+    Fl_Choice *choice = (Fl_Choice *)widget;
+    FLTKKeyboardWindow *win = (FLTKKeyboardWindow *)v;
+
+    win->lock();
+
+    win->keyboard->octave = (int)choice->value() + 1;
+
+    win->unlock();
+}
+
 FLTKKeyboardWindow::FLTKKeyboardWindow(CSOUND *csound,
           const char *deviceMap,
           int W, int H, const char *L = 0)
     : Fl_Double_Window(W, H, L)
 {
+    char octave[2];
+    octave[1] = 0;
 
     this->csound = csound;
     this->mutex = csound->Create_Mutex(0);
@@ -98,6 +111,7 @@ FLTKKeyboardWindow::FLTKKeyboardWindow(CSOUND *csound,
 
     this->bankChoice = new Fl_Choice(180, row2, 180, 20, "Bank");
     this->programChoice = new Fl_Choice(420, row2, 200, 20, "Program");
+    this->octaveChoice = new Fl_Choice(670, row2, 80, 20, "Octave");
 
     bankChoice->clear();
 
@@ -109,14 +123,23 @@ FLTKKeyboardWindow::FLTKKeyboardWindow(CSOUND *csound,
 
     setProgramNames();
 
+    octaveChoice->clear();
+
+    for(unsigned int i = 1; i < 8; i++) {
+            octave[0] = i + 48;
+            octaveChoice->add(octave);
+    }
+
+    octaveChoice->value(4);
+
     this->bankChoice->callback((Fl_Callback*)bankChange, this);
     this->programChoice->callback((Fl_Callback*)programChange, this);
-
+    this->octaveChoice->callback((Fl_Callback*)octaveChange, this);
 
     this->allNotesOffButton = new Fl_Button(0, row3, W, 20, "All Notes Off");
     this->allNotesOffButton->callback((Fl_Callback*) allNotesOff, this);
 
-    this->keyboard = new FLTKKeyboard(csound, 0, row4, W, 80, "Keyboard");
+    this->keyboard = new FLTKKeyboard(csound, this->sliderBank, 0, row4, W, 80, "Keyboard");
 
     this->end();
 
diff --git a/InOut/virtual_keyboard/FLTKKeyboardWindow.hpp b/InOut/virtual_keyboard/FLTKKeyboardWindow.hpp
index 2dd8499..f97ff16 100644
--- a/InOut/virtual_keyboard/FLTKKeyboardWindow.hpp
+++ b/InOut/virtual_keyboard/FLTKKeyboardWindow.hpp
@@ -45,6 +45,7 @@ public:
     Fl_Spinner *channelSpinner;
     Fl_Choice *bankChoice;
     Fl_Choice *programChoice;
+    Fl_Choice *octaveChoice;
 
     KeyboardMapping *keyboardMapping;
     SliderBank *sliderBank;
diff --git a/InOut/virtual_keyboard/SliderBank.cpp b/InOut/virtual_keyboard/SliderBank.cpp
index ae9a5e5..bcdf2dd 100644
--- a/InOut/virtual_keyboard/SliderBank.cpp
+++ b/InOut/virtual_keyboard/SliderBank.cpp
@@ -23,6 +23,19 @@
 
 #include "SliderBank.hpp"
 
+#include <FL/Fl.H>
+#include <FL/Fl_Double_Window.H>
+
+int WheelSlider::handle(int event) {
+    int res = Fl_Value_Slider::handle(event);
+    if (event == FL_MOUSEWHEEL) {
+        int dy = Fl::event_dy();
+        value(clamp(round(increment(value(), -dy))));
+        return 1;
+    }
+    return res;
+}
+
 static void spinnerCallback(Fl_Widget *widget, void *v) {
     Fl_Spinner *spinner = (Fl_Spinner *)widget;
     SliderBank *sliderBank = (SliderBank *)v;
@@ -70,7 +83,7 @@ SliderBank::SliderBank(CSOUND *csound,
         x = 10;
         y = 10 + (i * 25);
       } else {
-        x = 317;
+        x = 382;
         y = 10 + ((i - 5) * 25);
       }
 
@@ -83,7 +96,7 @@ SliderBank::SliderBank(CSOUND *csound,
       spinner->callback((Fl_Callback*)spinnerCallback, this);
 
 
-      Fl_Value_Slider *slider = new Fl_Value_Slider(x + 70, y, 227, 20);
+      WheelSlider *slider = new WheelSlider(x + 70, y, 292, 20);
       sliders[i] = slider;
       slider->type(FL_HOR_SLIDER);
       slider->maximum(127);
@@ -123,6 +136,11 @@ SliderData * SliderBank::getSliderData() {
     return &sliderData[channel];
 }
 
+void SliderBank::incrementSlider(int index, int n) {
+  Fl_Slider* slider = sliders[index];
+  slider->value(slider->clamp(slider->round(slider->increment(slider->value(), n))));
+}
+
 void SliderBank::lock() {
     if(mutex) {
       csound->LockMutex(mutex);
diff --git a/InOut/virtual_keyboard/SliderBank.hpp b/InOut/virtual_keyboard/SliderBank.hpp
index 16bf117..cde4f6f 100644
--- a/InOut/virtual_keyboard/SliderBank.hpp
+++ b/InOut/virtual_keyboard/SliderBank.hpp
@@ -31,6 +31,14 @@
 #include "csdl.h"
 #include "SliderData.hpp"
 
+class WheelSlider: public Fl_Value_Slider
+{
+    int handle(int);
+public:
+    WheelSlider(int x, int y, int w, int h, const char *l=0) : 
+      Fl_Value_Slider (x,y,w,h,l) {}
+};
+
 class SliderBank : public Fl_Group
 {
 public:
@@ -43,15 +51,16 @@ public:
     void setChannel(int channel);
     SliderData *getSliderData();
 
+    void incrementSlider(int index, int n);
+
     void lock();
     void unlock();
 
-    Fl_Value_Slider* sliders[10];
+    WheelSlider* sliders[10];
     Fl_Spinner* spinners[10];
 
 private:
     int channel;
     SliderData sliderData[16];
 };
-
 #endif /*SLIDERBANK_HPP_*/
diff --git a/InOut/virtual_keyboard/virtual_keyboard.cpp b/InOut/virtual_keyboard/virtual_keyboard.cpp
index 4218ac2..801ff7b 100644
--- a/InOut/virtual_keyboard/virtual_keyboard.cpp
+++ b/InOut/virtual_keyboard/virtual_keyboard.cpp
@@ -36,7 +36,7 @@ static std::map<CSOUND *, FLTKKeyboardWidget *> keyboardWidgets;
 
 static FLTKKeyboardWindow *createWindow(CSOUND *csound, const char *dev) {
     return new FLTKKeyboardWindow(csound, dev,
-                                  624, 270, "Csound Virtual Keyboard");
+                                  754, 270, "Csound Virtual Keyboard");
 }
 
 static FLTKKeyboardWidget *createWidget(CSOUND *csound, const char *dev,
@@ -431,7 +431,7 @@ PUBLIC int csoundModuleInit(CSOUND *csound)
                                     "FLTK_Flags") == (void*) 0) {
       if (csound->CreateGlobalVariable(csound,
                                        "FLTK_Flags", sizeof(int)) != 0)
-        csound->Die(csound,
+        csound->Die(csound, "%s",
                     Str("virtual_keyboard.cpp: error allocating FLTK flags"));
     }
 
diff --git a/InOut/widgets.cpp b/InOut/widgets.cpp
index f15da1f..d269db0 100644
--- a/InOut/widgets.cpp
+++ b/InOut/widgets.cpp
@@ -884,13 +884,14 @@ void Fl_Value_Slider_Input::input_cb(Fl_Widget*, void* v) {
 void Fl_Value_Slider_Input::draw(void)
 {
     int sxx = x(), syy = y(), sww = w(), shh = h();
-    int bww = w();
+    //int bww = w();
     int X = x(), Y = y(), W = w(), H = h();
 
     int border_size=Fl::box_dx(box());
 
     if (horizontal()) {
-      bww = textboxsize();  sxx += textboxsize(); sww -= textboxsize();
+      //bww = textboxsize();  
+      sxx += textboxsize(); sww -= textboxsize();
       input.resize(X,Y,W-sww,shh);
     }
     else {
@@ -1078,7 +1079,8 @@ SNAPSHOT::SNAPSHOT (vector<ADDR_SET_VALUE>& valuators, int snapGroup)
       opcode_name = fld->opcode_name = ((OPDS *) (v.opcode))->optext->t.opcod;
       if (UNLIKELY(opcode_name.c_str() == NULL))
         {
-          csound->InitError(csound,Str("Invalid snapshot. Perhaps you modified "
+          csound->InitError(csound, "%s",
+                                   Str("Invalid snapshot. Perhaps you modified "
                                        "orchestra widget code after you saved "
                                        "the snapshot bank."));
           goto err;
@@ -1463,7 +1465,8 @@ extern "C" {
             table[index*numfields+j] = snap.fields[j].value;
           }
         }
-        else return csound->InitError(csound, Str("FLsetsnap: invalid table"));
+        else return csound->InitError(csound, "%s",
+                                             Str("FLsetsnap: invalid table"));
       }
       else { // else store it into snapshot bank
         if ((int) ST(snapshots)[group].size() < index+1)
@@ -1513,8 +1516,8 @@ extern "C" {
         {
           int   n;
           Fl_lock(csound);
-          n = fl_choice(Str("Saving could overwrite the old file.\n"
-                            "Are you sure you want to save ?"),
+          n = fl_choice("%s", Str("Saving could overwrite the old file.\n"
+                                  "Are you sure you want to save ?"),
                         Str("No"), Str("Yes"), NULL);
           Fl_unlock(csound);
           if (!n)
@@ -1524,7 +1527,8 @@ extern "C" {
       csound->strarg2name(csound, s, p->filename, "snap.", p->XSTRCODE);
       s2 = csound->FindOutputFile(csound, s, "SNAPDIR");
       if (UNLIKELY(s2 == NULL))
-        return csound->InitError(csound, Str("FLsavesnap: cannot open file"));
+        return csound->InitError(csound, "%s",
+                                 Str("FLsavesnap: cannot open file"));
       strcpy(s, s2);
       csound->Free(csound, s2);
       filename = s;
@@ -1577,7 +1581,8 @@ extern "C" {
       csound->strarg2name(csound, s, p->filename, "snap.", p->XSTRCODE);
       s2 = csound->FindInputFile(csound, s, "SNAPDIR");
       if (UNLIKELY(s2 == NULL))
-        return csound->InitError(csound, Str("FLloadsnap: cannot open file"));
+        return csound->InitError(csound, "%s",
+                                 Str("FLloadsnap: cannot open file"));
       strcpy(s, s2);
       csound->Free(csound, s2);
       filename = s;
@@ -1622,6 +1627,7 @@ extern "C" {
           if (UNLIKELY(!(opc_orig == opc))) {
             //return csound->InitError(csound,
             csound->Message(csound,
+                            "%s",
                             Str("unmatched widget, probably due to a "
                                 "modified orchestra. Modifying an "
                                 "orchestra makes it incompatible with "
@@ -2122,7 +2128,8 @@ static void fl_callbackExecButton(Fl_Button* w, void *a)
 
       _exit(0);
     } else if (UNLIKELY(pId < 0)) {
-      p->csound->Message(p->csound, Str("Error: Unable to fork process\n"));
+      p->csound->Message(p->csound, "%s",
+                         Str("Error: Unable to fork process\n"));
     }
 
     csound->Free(csound, command);
@@ -2542,12 +2549,14 @@ extern "C" {
       ST(stack_count)--;
       ADDR_STACK adrstk = ST(AddrStack).back();
       if (UNLIKELY(strcmp( adrstk.h->optext->t.opcod, "FLpanel")))
-        return csound->InitError(csound, Str("FLpanel_end: invalid stack pointer: "
-                                             "verify its placement"));
+        return csound->InitError(csound, "%s",
+                                 Str("FLpanel_end: invalid stack pointer: "
+                                     "verify its placement"));
       if (UNLIKELY(adrstk.count != ST(stack_count)))
-        return csound->InitError(csound, Str("FLpanel_end: invalid stack count: "
-                                             "verify FLpanel/FLpanel_end count and"
-                                             " placement"));
+        return csound->InitError(csound, "%s",
+                                 Str("FLpanel_end: invalid stack count: "
+                                     "verify FLpanel/FLpanel_end count and"
+                                     " placement"));
       ((Fl_Window*) adrstk.WidgAddress)->end();
       ST(AddrStack).pop_back();
       return OK;
@@ -2570,12 +2579,14 @@ extern "C" {
       ADDR_STACK adrstk = ST(AddrStack).back();
       if (UNLIKELY(strcmp( adrstk.h->optext->t.opcod, "FLscroll")))
         return
-          csound->InitError(csound, Str("FLscroll_end: invalid stack pointer: "
-                                        "verify its placement"));
+          csound->InitError(csound, "%s",
+                            Str("FLscroll_end: invalid stack pointer: "
+                                "verify its placement"));
       if (UNLIKELY(adrstk.count != ST(stack_count)))
-        return csound->InitError(csound, Str("FLscroll_end: invalid stack count: "
-                                             "verify FLscroll/FLscroll_end count "
-                                             "and placement"));
+        return csound->InitError(csound, "%s",
+                            Str("FLscroll_end: invalid stack count: "
+                                "verify FLscroll/FLscroll_end count "
+                                "and placement"));
       ((Fl_Scroll*) adrstk.WidgAddress)->end();
 
       ST(AddrStack).pop_back();
@@ -2601,10 +2612,12 @@ extern "C" {
       ADDR_STACK adrstk = ST(AddrStack).back();
       if (UNLIKELY(strcmp( adrstk.h->optext->t.opcod, "FLtabs")))
         return
-          csound->InitError(csound, Str("FLscroll_end: invalid stack pointer: "
+          csound->InitError(csound, "%s",
+                                    Str("FLscroll_end: invalid stack pointer: "
                                         "verify its placement"));
       if (UNLIKELY(adrstk.count != ST(stack_count)))
-        return csound->InitError(csound, Str("FLtabs_end: invalid stack count: "
+        return csound->InitError(csound, "%s",
+                                         Str("FLtabs_end: invalid stack count: "
                                              "verify FLtabs/FLtabs_end count and "
                                              "placement"));
       ((Fl_Scroll*) adrstk.WidgAddress)->end();
@@ -2648,12 +2661,14 @@ extern "C" {
       ST(stack_count)--;
       ADDR_STACK adrstk = ST(AddrStack).back();
       if (UNLIKELY(strcmp( adrstk.h->optext->t.opcod, "FLgroup")))
-        return csound->InitError(csound, Str("FLgroup_end: invalid stack pointer: "
-                                             "verify its placement"));
+        return csound->InitError(csound, "%s",
+                                 Str("FLgroup_end: invalid stack pointer: "
+                                     "verify its placement"));
       if (UNLIKELY(adrstk.count != ST(stack_count)))
-        return csound->InitError(csound, Str("FLgroup_end: invalid stack count: "
-                                             "verify FLgroup/FLgroup_end count and"
-                                             " placement"));
+        return csound->InitError(csound, "%s",
+                                 Str("FLgroup_end: invalid stack count: "
+                                     "verify FLgroup/FLgroup_end count and"
+                                     " placement"));
       ((Fl_Scroll*) adrstk.WidgAddress)->end();
 
       ST(AddrStack).pop_back();
@@ -2662,13 +2677,17 @@ extern "C" {
 
   //-----------
 
-  static int StartPack(CSOUND *csound, FLSCROLL *p)
+  static int StartPack(CSOUND *csound, FLPACK *p)
   {
       Fl_Pack *o = new Fl_Pack ((int) *p->ix, (int) *p->iy,
                                 (int) *p->iwidth, (int) *p->iheight);
-      //fl_window->resizable(o);
-      o->box(FL_ENGRAVED_FRAME);
-      o->spacing(15);
+      Fl_Boxtype borderType;
+      int iborder = (int)*p->iborder;
+      // fl_window->resizable(o);
+      if (iborder<0 || iborder>7) borderType = FL_FLAT_BOX;
+      else borderType = BOX_TABLE[iborder];
+      o->type((int)*p->itype);
+      o->spacing((int)*p->ispace);
 
       ADDR_STACK adrstk(&p->h,o,ST(stack_count));
       ST(AddrStack).push_back(adrstk);
@@ -2681,12 +2700,14 @@ extern "C" {
       ST(stack_count)--;
       ADDR_STACK adrstk = ST(AddrStack).back();
       if (UNLIKELY(strcmp( adrstk.h->optext->t.opcod, "FLpack")))
-        return csound->InitError(csound, Str("FLpack_end: invalid stack pointer: "
-                                             "verify its placement"));
+        return csound->InitError(csound, "%s",
+                                 Str("FLpack_end: invalid stack pointer: "
+                                     "verify its placement"));
       if (UNLIKELY(adrstk.count != ST(stack_count)))
-        return csound->InitError(csound, Str("FLpack_end: invalid stack count: "
-                                             "verify FLpack/FLpack_end count and "
-                                             "placement"));
+        return csound->InitError(csound, "%s",
+                                 Str("FLpack_end: invalid stack count: "
+                                     "verify FLpack/FLpack_end count and "
+                                     "placement"));
       ((Fl_Pack*) adrstk.WidgAddress)->end();
 
       ST(AddrStack).pop_back();
@@ -2837,7 +2858,8 @@ extern "C" {
 
       widgetType = fl_getWidgetTypeFromOpcodeName(csound, v.opcode);
       if (UNLIKELY(widgetType == 4)) {
-        csound->InitError(csound, Str("FLvalue cannot be set by FLsetVal.\n"));
+        csound->InitError(csound, "%s",
+                          Str("FLvalue cannot be set by FLsetVal.\n"));
         return NOTOK;
       }
       if (widgetType < 0)
@@ -2873,7 +2895,8 @@ extern "C" {
 
       widgetType = fl_getWidgetTypeFromOpcodeName(csound, v.opcode);
       if (UNLIKELY(widgetType == 4)) {
-        csound->InitError(csound, Str("FLvalue cannot be set by FLsetVal\n"));
+        csound->InitError(csound, "%s",
+                          Str("FLvalue cannot be set by FLsetVal\n"));
         return NOTOK;
       }
       if (widgetType < 0)
@@ -3238,7 +3261,7 @@ extern "C" {
         itype = itype - 20;
       }
       if (UNLIKELY(itype > 10 && iexp == EXP_)) {
-        csound->Warning(csound,
+        csound->Warning(csound, "%s",
                         Str("FLslider exponential, using non-labeled slider"));
         itype -= 10;
       }
@@ -3260,7 +3283,7 @@ extern "C" {
       case 4:  o->type(FL_VERT_SLIDER); break;
       case 5:  o->type(FL_HOR_NICE_SLIDER); o->box(FL_FLAT_BOX); break;
       case 6:  o->type(FL_VERT_NICE_SLIDER); o->box(FL_FLAT_BOX); break;
-      default: return csound->InitError(csound,
+      default: return csound->InitError(csound, "%s",
                                         Str("FLslider: invalid slider type"));
       }
       if (plastic) o->box(FL_PLASTIC_DOWN_BOX);
@@ -3273,8 +3296,9 @@ extern "C" {
         break;
       case EXP_ : //exponential
         if (UNLIKELY(min == 0 || max == 0))
-          return csound->InitError(csound, Str("FLslider: zero is illegal "
-                                               "in exponential operations"));
+          return csound->InitError(csound, "%s",
+                                   Str("FLslider: zero is illegal "
+                                       "in exponential operations"));
         range = max - min;
         o->range(0,range);
         #if defined(sun)
@@ -3334,7 +3358,8 @@ extern "C" {
                    csound->zklast > (long)(*p->inumsliders + *p->ioutablestart_ndx)))
           outable = csound->zkstart + (long) *p->ioutablestart_ndx;
         else {
-          return csound->InitError(csound, Str("invalid ZAK space allocation"));
+          return csound->InitError(csound, "%s",
+                                   Str("invalid ZAK space allocation"));
         }
       }
       else {
@@ -3448,8 +3473,9 @@ extern "C" {
         case EXP_ : //exponential
           if (UNLIKELY(min == 0 || max == 0))
             return
-              csound->InitError(csound, Str("FLslidBnk: zero is illegal "
-                                            "in exponential operations"));
+              csound->InitError(csound, "%s",
+                                Str("FLslidBnk: zero is illegal "
+                                    "in exponential operations"));
           range = max - min;
           o->range(0,range);
           #if defined(sun)
@@ -3545,8 +3571,9 @@ extern "C" {
         o->xbounds(*p->iminx,*p->imaxx); break;
       case EXP_: //exponential
         { if (UNLIKELY(*p->iminx == 0 || *p->imaxx == 0))
-            return csound->InitError(csound, Str("FLjoy X axe: zero is illegal "
-                                                 "in exponential operations"));
+            return csound->InitError(csound, "%s",
+                                     Str("FLjoy X axe: zero is illegal "
+                                         "in exponential operations"));
           MYFLT range = *p->imaxx - *p->iminx;
           o->xbounds(0,range);
           #if defined(sun)
@@ -3578,8 +3605,9 @@ extern "C" {
         o->ybounds(*p->imaxy,*p->iminy); break;
       case EXP_ : //exponential
         { if (UNLIKELY(*p->iminy == 0 || *p->imaxy == 0))
-            return csound->InitError(csound, Str("FLjoy X axe: zero is illegal "
-                                                 "in exponential operations"));
+            return csound->InitError(csound, "%s",
+                                     Str("FLjoy X axe: zero is illegal "
+                                         "in exponential operations"));
           MYFLT range = *p->imaxy - *p->iminy;
           o->ybounds(range,0);
           #if defined(sun)
@@ -3672,7 +3700,8 @@ extern "C" {
         o->box(_FL_OSHADOW_BOX);
         break;
       default:
-        return csound->InitError(csound, Str("FLknob: invalid knob type"));
+        return csound->InitError(csound, "%s",
+                                 Str("FLknob: invalid knob type"));
       }
       widget_attributes(csound, o);
       o->align(FL_ALIGN_BOTTOM | FL_ALIGN_WRAP);
@@ -3687,8 +3716,9 @@ extern "C" {
         {
           MYFLT min = p->min = *p->imin, max = *p->imax;
           if (UNLIKELY(min == 0 || max == 0))
-            return csound->InitError(csound, Str("FLknob: zero is illegal "
-                                                 "in exponential operations"));
+            return csound->InitError(csound, "%s",
+                                     Str("FLknob: zero is illegal "
+                                         "in exponential operations"));
           MYFLT range = max - min;
           o->range(0,range);
           #if defined(sun)
@@ -3828,7 +3858,8 @@ extern "C" {
         }
         break;
       default:
-        return csound->InitError(csound, Str("FLbutton: invalid button type"));
+        return csound->InitError(csound, "%s",
+                                 Str("FLbutton: invalid button type"));
       }
       Fl_Button *o = w;
       o->align(FL_ALIGN_WRAP);
@@ -3860,8 +3891,9 @@ extern "C" {
 
       ADDR_STACK adrstk = ST(AddrStack).back();
       if (UNLIKELY(strcmp( adrstk.h->optext->t.opcod, "FLpanel")))
-        return csound->InitError(csound, Str("FLcloseButton: invalid stack"
-                                             " pointer: verify its placement"));
+        return csound->InitError(csound, "%s",
+                                 Str("FLcloseButton: invalid stack"
+                                     " pointer: verify its placement"));
 
       o->callback((Fl_Callback*) fl_callbackCloseButton,
                   (void*) adrstk.WidgAddress);
@@ -3951,8 +3983,9 @@ extern "C" {
               w->down_box(FL_PLASTIC_DOWN_BOX);
             }
             break;
-          default: return csound->InitError(csound, Str("FLbuttonBank: "
-                                                        "invalid button type"));
+          default: return csound->InitError(csound, "%s",
+                                            Str("FLbuttonBank: "
+                                                "invalid button type"));
           }
           widget_attributes(csound, w);
           w->type(FL_RADIO_BUTTON);
@@ -4056,7 +4089,8 @@ extern "C" {
         o->type(FL_VERTICAL);
         break;
       default:
-        return csound->InitError(csound, Str("FLroller: invalid roller type"));
+        return csound->InitError(csound, "%s",
+                                 Str("FLroller: invalid roller type"));
       }
       widget_attributes(csound, o);
       o->step(istep);
@@ -4069,8 +4103,9 @@ extern "C" {
         {
           MYFLT min = p->min, max = *p->imax;
           if (UNLIKELY(min == 0 || max == 0))
-            return csound->InitError(csound, Str("FLslider: zero is illegal "
-                                                 "in exponential operations"));
+            return csound->InitError(csound, "%s",
+                                     Str("FLslider: zero is illegal "
+                                         "in exponential operations"));
           MYFLT range = max - min;
           o->range(0,range);
           #if defined(sun)
@@ -4251,8 +4286,9 @@ extern "C" {
   static int fl_hvsbox(CSOUND *csound,FL_HVSBOX *p)
   {
       if (UNLIKELY(*p->numlinesX < 2 || *p->numlinesY < 2))
-        return csound->InitError(csound, Str("FLhvsBox: a square area must be"
-                                             " delimited by 2 lines at least"));
+        return csound->InitError(csound, "%s",
+                                 Str("FLhvsBox: a square area must be"
+                                     " delimited by 2 lines at least"));
 
       HVS_BOX *o =  new HVS_BOX((int) *p->numlinesX,(int)  *p->numlinesY,
                                 (int) *p->ix,(int)  *p->iy,
@@ -4299,10 +4335,12 @@ extern "C" {
         if (LIKELY((ftp = csound->FTFind(csound,p->ifn)) != NULL))
           p->table = ftp->ftable;
         else {
-          return csound->InitError(csound, Str("FLkeyIn: invalid table number"));
+          return csound->InitError(csound, "%s",
+                                   Str("FLkeyIn: invalid table number"));
         }
         if (UNLIKELY(ftp->flen < 512)) {
-          return csound->InitError(csound, Str("FLkeyIn: table too short!"));
+          return csound->InitError(csound, "%s",
+                                   Str("FLkeyIn: table too short!"));
         }
       }
       else p->flag = 0;
@@ -4396,7 +4434,8 @@ extern "C" {
                    csound->zklast>(long)(*p->inumsliders + *p->ioutablestart_ndx)))
           outable = csound->zkstart + (long) *p->ioutablestart_ndx;
         else {
-          return csound->InitError(csound, Str("invalid ZAK space allocation"));
+          return csound->InitError(csound, "%s",
+			           Str("invalid ZAK space allocation"));
         }
       }
       else {
@@ -4519,8 +4558,9 @@ extern "C" {
         case EXP_ : //exponential
           if (UNLIKELY(min == 0 || max == 0))
             return
-              csound->InitError(csound, Str("FLvslidBnk: zero is illegal "
-                                            "in exponential operations"));
+              csound->InitError(csound, "%s",
+                                Str("FLvslidBnk: zero is illegal "
+                                    "in exponential operations"));
           range = max - min;
           o->range(range,0);
           #if defined(sun)
@@ -4607,7 +4647,8 @@ extern "C" {
                    csound->zklast>(long)(*p->inumsliders + *p->ioutablestart_ndx)))
           outable = csound->zkstart + (long) *p->ioutablestart_ndx;
         else {
-          return csound->InitError(csound, Str("invalid ZAK space allocation"));
+          return csound->InitError(csound, "%s",
+                                   Str("invalid ZAK space allocation"));
         }
       }
       else {
@@ -4644,7 +4685,7 @@ extern "C" {
           slider_type = slider_type - 20;
         }
         if (UNLIKELY(slider_type > 10 && iexp == EXP_)) {
-          csound->Warning(csound,
+          csound->Warning(csound, "%s",
                           Str("FLslider exponential, using non-labeled slider"));
           slider_type -= 10;
         }
@@ -4695,8 +4736,9 @@ extern "C" {
         case EXP_ : //exponential
           if (UNLIKELY(min == 0 || max == 0))
             return
-              csound->InitError(csound, Str("FLsliderBank: zero is illegal "
-                                            "in exponential operations"));
+              csound->InitError(csound, "%s",
+                                Str("FLsliderBank: zero is illegal "
+                                    "in exponential operations"));
           range = max - min;
           o->range(0,range);
           #if defined(sun)
@@ -4784,7 +4826,8 @@ extern "C" {
                    csound->zklast>(long)(*p->inumsliders + *p->ioutablestart_ndx)))
           outable = csound->zkstart + (long) *p->ioutablestart_ndx;
         else {
-          return csound->InitError(csound, Str("invalid ZAK space allocation"));
+          return csound->InitError(csound, "%s",
+                                   Str("invalid ZAK space allocation"));
         }
       }
       else {
@@ -4822,8 +4865,9 @@ extern "C" {
           slider_type -= 20;
         }
         if (UNLIKELY(slider_type > 10 && iexp == EXP_)) {
-          csound->Warning(csound, Str("FLslidBnk2: FLslider exponential, "
-                                      "using non-labeled slider"));
+          csound->Warning(csound, "%s",
+                          Str("FLslidBnk2: FLslider exponential, "
+                              "using non-labeled slider"));
           slider_type -= 10;
         }
         if (slider_type <= 10)
@@ -4872,8 +4916,9 @@ extern "C" {
         case EXP_ : //exponential
           if (UNLIKELY(min == 0 || max == 0))
             return
-              csound->InitError(csound, Str("FLsliderBank: zero is illegal "
-                                            "in exponential operations"));
+              csound->InitError(csound, "%s",
+                                Str("FLsliderBank: zero is illegal "
+                                    "in exponential operations"));
           range = max - min;
           o->range(range,0);
           #if defined(sun)
@@ -4952,23 +4997,25 @@ extern "C" {
       if (LIKELY((ftp = csound->FTFind(csound, p->ifn)) != NULL))
         table = ftp->ftable;
       else {
-        return csound->InitError(csound, Str("FLsldBnkSet: invalid table number"));
+        return csound->InitError(csound, "%s",
+                                 Str("FLsldBnkSet: invalid table number"));
       }
       // *startInd, *startSlid, *numSlid
       if (UNLIKELY( ftp->flen < startInd + numslid)) {
-        return csound->InitError(csound, Str("FLslidBnkSet: table too short!"));
+        return csound->InitError(csound, "%s",
+                                 Str("FLslidBnkSet: table too short!"));
       }
       FLSLIDERBANK *q = (FLSLIDERBANK *)ST(AddrSetValue)[ (int) *p->ihandle].opcode;
 
       if (LIKELY((ftp = csound->FTFind(csound, q->ioutable)) != NULL))
         outable = ftp->ftable;
       else {
-        return csound->InitError(csound,
+        return csound->InitError(csound, "%s",
                                  Str("FLsldBnkSet: invalid outable number"));
       }
       if (numslid == 0) numslid = (int)(q->elements - *p->startSlid);
       if (UNLIKELY( q->elements > startSlid + numslid)) {
-        return csound->InitError(csound,
+        return csound->InitError(csound, "%s",
                                  Str("FLslidBnkSet: too many sliders to reset!"));
       }
       for (int j = startSlid, k = startInd; j< numslid + startSlid; j++, k++) {
@@ -4992,8 +5039,9 @@ extern "C" {
           }
           break;
         default:
-          return csound->InitError(csound, Str("FLslidBnkSet: "
-                                               "function mapping not available"));
+          return csound->InitError(csound, "%s",
+                                   Str("FLslidBnkSet: "
+                                       "function mapping not available"));
         }
 
         FLlock();
@@ -5015,11 +5063,13 @@ extern "C" {
       if (LIKELY((ftp = csound->FTFind(csound, p->ifn)) != NULL))
         table = ftp->ftable;
       else {
-        return csound->InitError(csound, Str("FLsldBnkSet: invalid table number"));
+        return csound->InitError(csound, "%s",
+                                 Str("FLsldBnkSet: invalid table number"));
       }
       // *startInd, *startSlid, *numSlid
       if (UNLIKELY( ftp->flen < startInd + numslid)) {
-        return csound->InitError(csound, Str("FLslidBnkSet: table too short!"));
+        return csound->InitError(csound, "%s",
+                                 Str("FLslidBnkSet: table too short!"));
       }
       FLSLIDERBANK2 *q =
         (FLSLIDERBANK2 *)ST(AddrSetValue)[ (int) *p->ihandle].opcode;
@@ -5027,13 +5077,13 @@ extern "C" {
       if (LIKELY((ftp = csound->FTFind(csound, q->ioutable)) != NULL))
         outable = ftp->ftable;
       else {
-        return csound->InitError(csound,
+        return csound->InitError(csound, "%s",
                                  Str("FLsldBnkSet: invalid outable number"));
       }
 
       if (numslid == 0) numslid = (int)(q->elements - *p->startSlid);
       if (UNLIKELY( q->elements > startSlid + numslid)) {
-        return csound->InitError(csound,
+        return csound->InitError(csound, "%s",
                                  Str("FLslidBnkSet: too many sliders to reset!"));
       }
 
@@ -5061,9 +5111,10 @@ extern "C" {
           {
             //      val = table[k];
             if (UNLIKELY(val < 0 || val > 1)) { // input range must be 0 to 1
-              csound->PerfError(csound, Str("FLslidBnk2Setk: value out of range: "
-                                            "function mapping requires a 0 to 1 "
-                                            "range for input"));
+              csound->PerfError(csound, "%s",
+                                Str("FLslidBnk2Setk: value out of range: "
+                                    "function mapping requires a 0 to 1 "
+                                    "range for input"));
             }
           }
           //{
@@ -5090,24 +5141,26 @@ extern "C" {
       if (LIKELY((ftp = csound->FTFind(csound, p->ifn)) != NULL))
         p->table = ftp->ftable;
       else {
-        return csound->InitError(csound, Str("FLsldBnkSetk: invalid table number"));
+        return csound->InitError(csound, "%s",
+                                  Str("FLsldBnkSetk: invalid table number"));
       }
       // *startInd, *startSlid, *numSlid
       if (UNLIKELY( ftp->flen < p->startind + p->numslid)) {
-        return csound->InitError(csound, Str("FLslidBnkSetk: table too short!"));
+        return csound->InitError(csound, "%s",
+                                 Str("FLslidBnkSetk: table too short!"));
       }
       p->q = (FLSLIDERBANK2 *) ST(AddrSetValue)[ (int) *p->ihandle].opcode;
 
       if (LIKELY((ftp = csound->FTFind(csound, p->q->ioutable)) != NULL))
         p->outable = ftp->ftable;
       else {
-        return csound->InitError(csound,
+        return csound->InitError(csound, "%s",
                                  Str("FLsldBnkSetk: invalid outable number"));
       }
 
       if (p->numslid == 0) p->numslid = p->q->elements - p->startslid;
       if (UNLIKELY( p->q->elements < p->startslid + p->numslid)) {
-        return csound->InitError(csound,
+        return csound->InitError(csound, "%s",
                                  Str("FLslidBnkSetk: too many sliders to reset!"));
       }
       return OK;
@@ -5146,9 +5199,10 @@ extern "C" {
             {
               val = table[k];
               if (UNLIKELY(val < 0 || val > 1)) { // input range must be 0 to 1
-                csound->PerfError(csound, Str("FLslidBnk2Setk: value out of range:"
-                                              " function mapping requires a 0 to 1"
-                                              " range for input"));
+                csound->PerfError(csound, "%s",
+                                  Str("FLslidBnk2Setk: value out of range:"
+                                      " function mapping requires a 0 to 1"
+                                      " range for input"));
               }
             }
           }
@@ -5175,25 +5229,26 @@ extern "C" {
       if (LIKELY((ftp = csound->FTFind(csound, p->ifn)) != NULL))
         p->table = ftp->ftable;
       else {
-        return csound->InitError(csound,
+        return csound->InitError(csound, "%s",
                                  Str("FLslidBnkSetk: invalid table number"));
       }
       // *startInd, *startSlid, *numSlid
       if (UNLIKELY( ftp->flen < p->startind + p->numslid)) {
-        return csound->InitError(csound, Str("FLslidBnkSetk: table too short!"));
+        return csound->InitError(csound, "%s",
+                                 Str("FLslidBnkSetk: table too short!"));
       }
       p->q = (FLSLIDERBANK *) ST(AddrSetValue)[ (int) *p->ihandle].opcode;
 
       if (LIKELY((ftp = csound->FTFind(csound, p->q->ioutable)) != NULL))
         p->outable = ftp->ftable;
       else {
-        return csound->InitError(csound,
+        return csound->InitError(csound, "%s",
                                  Str("FLslidBnkSetk: invalid outable number"));
       }
 
       if (p->numslid == 0) p->numslid = p->q->elements - p->startslid;
       if (UNLIKELY( p->q->elements < p->startslid + p->numslid)) {
-        return csound->InitError(csound,
+        return csound->InitError(csound, "%s",
                                  Str("FLslidBnkSetk: too many sliders to reset!"));
       }
       return OK;
@@ -5232,7 +5287,7 @@ extern "C" {
             {
               val = table[k];
               if (UNLIKELY(val < 0 || val > 1)) { // input range must be 0 to 1
-                csound->PerfError(csound,
+                csound->PerfError(csound, "%s",
                                   Str("FLslidBnk2Setk: value out of range: "
                                       "function mapping requires a 0 to 1 range "
                                       "for input"));
@@ -5265,6 +5320,7 @@ extern "C" {
         p->expx = EXP_;
         if (UNLIKELY(*p->ioutx_min == 0 || *p->ioutx_max==0))
           return csound->InitError(csound,
+                                   "%s",
                                    Str("FLxyin: none of X limits can be zero in"
                                        " exponential mode!"));
         p->basex = pow((double) (*p->ioutx_max / *p->ioutx_min),
@@ -5291,8 +5347,9 @@ extern "C" {
       case -1: // EXP
         p->expy = EXP_;
         if (UNLIKELY(*p->iouty_min == 0 || *p->iouty_max==0))
-          return csound->InitError(csound, Str("FLxyin: none of Y limits can "
-                                               "be zero in exponential mode!"));
+          return csound->InitError(csound, "%s",
+                                   Str("FLxyin: none of Y limits can "
+                                       "be zero in exponential mode!"));
         p->basey = pow((double) (*p->iouty_max / *p->iouty_min),
                        (double) (1/p->rangey));
         break;
@@ -5590,7 +5647,7 @@ const OENTRY widgetOpcodes_[] = {
     (SUBR) EndScroll,               (SUBR) NULL,              (SUBR) NULL },
   { (char*)"FLscroll_end",S(FLSCROLLEND),  1,  (char*)"",     (char*)"",
     (SUBR) EndScroll,               (SUBR) NULL,              (SUBR) NULL },
-  { (char*)"FLpack",      S(FLPACK),       1,  (char*)"",     (char*)"iiii",
+  { (char*)"FLpack",      S(FLPACK),       1,  (char*)"",     (char*)"iiiiooo",
     (SUBR) StartPack,               (SUBR) NULL,              (SUBR) NULL },
   { (char*)"FLpackEnd",   S(FLPACKEND),    1,  (char*)"",     (char*)"",
     (SUBR) EndPack,                 (SUBR) NULL,              (SUBR) NULL },
diff --git a/InOut/widgets.h b/InOut/widgets.h
index bda52ff..5495c77 100644
--- a/InOut/widgets.h
+++ b/InOut/widgets.h
@@ -263,7 +263,7 @@ typedef struct {
 
 typedef struct {
     OPDS    h;
-    MYFLT   *iwidth, *iheight, *ix, *iy;
+    MYFLT   *iwidth, *iheight, *ix, *iy, *itype, *ispace, *iborder;
 } FLPACK;
 
 typedef struct {
diff --git a/InOut/winEPS.c b/InOut/winEPS.c
index d0f6871..6a1668c 100644
--- a/InOut/winEPS.c
+++ b/InOut/winEPS.c
@@ -333,7 +333,7 @@ void PS_DrawGraph(CSOUND *csound, WINDAT *wdptr)
     winEPS_globals_t  *pp;
     int   iskip = (wdptr->npts < MyPS_WIDTH ?
                    1 : (int)(wdptr->npts / MyPS_WIDTH));
-    MYFLT xmin, ymin, ymax, xx, yy, dx, dy, fnts;
+    MYFLT ymin, ymax, xx, yy, dx, dy, fnts;
     char  cxmin[20], cxmax[20], cymin[20], cymax[20];
     int   i;
 
@@ -357,7 +357,7 @@ void PS_DrawGraph(CSOUND *csound, WINDAT *wdptr)
     /**
      *  Get labels for axis limits, then draw the axis
      */
-    xmin = FL(0.0);
+    //xmin = FL(0.0);
     /* xmax = FL(1.0) * wdptr->npts; */
     sprintf(cxmin, "%d", 0);
     sprintf(cxmax, "%ld", wdptr->npts);
diff --git a/InOut/winFLTK.c b/InOut/winFLTK.c
index 380ff7e..c6a4cec 100644
--- a/InOut/winFLTK.c
+++ b/InOut/winFLTK.c
@@ -74,13 +74,12 @@ PUBLIC int csoundModuleInit(CSOUND *csound)
                                     "FLTK_Flags") == (void*) 0) {
       if (csound->CreateGlobalVariable(csound,
                                        "FLTK_Flags", sizeof(int)) != 0)
-        csound->Die(csound,
+        csound->Die(csound, "%s",
                     Str("widgets.cpp: error allocating FLTK flags"));
       initFlags = 1;
     }
     fltkFlags = getFLTKFlagsPtr(csound);
-    if (csound->oparms->displays &&
-        ((*fltkFlags) & 2) == 0 &&
+    if (((*fltkFlags) & 2) == 0 &&
         !(csound->oparms->graphsoff || csound->oparms->postscript)) {
 #ifdef LINUX
       Display *dpy = XOpenDisplay(NULL);
@@ -103,7 +102,7 @@ PUBLIC int csoundModuleInit(CSOUND *csound)
           csound->SetKillXYinCallback(csound, KillXYin_FLTK);
            /* seemed to crash, but not anymore... */
           csound->RegisterResetCallback(csound, NULL, widget_reset);
-	  csound->Message(csound, "graph init \n");
+          csound->Message(csound, "graph init \n");
          
         }
 #ifdef LINUX
@@ -116,7 +115,7 @@ PUBLIC int csoundModuleInit(CSOUND *csound)
 #endif
         (*fltkFlags) |= 28;
     }
-    if (!((*fltkFlags) & 129)) {
+    if (!((*fltkFlags) & 129))
       for ( ; ep->opname != NULL; ep++) {
         if (csound->AppendOpcode(csound, ep->opname,
                                  (int)ep->dsblksiz, (int)ep->thread,
@@ -127,7 +126,6 @@ PUBLIC int csoundModuleInit(CSOUND *csound)
           return -1;
         }
       }
-    }
     else if (!((*fltkFlags) & 128)) {
       for ( ; ep->opname != NULL; ep++) {
         if (csound->AppendOpcode(
@@ -143,7 +141,8 @@ PUBLIC int csoundModuleInit(CSOUND *csound)
       }
     }
 
-    widget_init(csound);
+    if (!(csound->oparms->graphsoff || csound->oparms->postscript))
+      widget_init(csound);
     return 0;
 }
 
diff --git a/OOps/aops.c b/OOps/aops.c
index 0ada732..d5896e7 100644
--- a/OOps/aops.c
+++ b/OOps/aops.c
@@ -27,6 +27,8 @@
 #include <math.h>
 #include <time.h>
 
+#define POW2TABSIZI 4096
+#define POW2MAX   24.0
 #define EIPT3       (25.0/3.0)
 #define LOGTWO      (0.69314718055994530942)
 #define STEPS       (32768)
@@ -35,26 +37,49 @@
 #define MIDINOTE0   (3.00)  /* Lowest midi note is 3.00 in oct & pch formats */
 
 /* static lookup tables, initialised once at start-up; also used by midi ops */
-MYFLT   cpsocfrc[OCTRES] = { FL(0.0) };
-static  MYFLT   powerof2[4096];
+/* MYFLT   cpsocfrc[OCTRES] = { FL(0.0) }; */
+/* static  MYFLT   powerof2[POW2TABSIZI]; */
 
 /* initialise the tables, called by csoundInitialize() */
 
-void aops_init_tables(void)
+/*void aops_init_tables(void)
 {
     int   i;
     for (i = 0; i < OCTRES; i++)
       cpsocfrc[i] = POWER(FL(2.0), (MYFLT)i / OCTRES) * ONEPT;
-    for (i = 0; i < 4096; i++)
-      powerof2[i] = POWER(FL(2.0), (MYFLT)i * (MYFLT)(1.0/4096.0) - FL(15.0));
-}
+    for (i = 0; i < POW2TABSIZI; i++)
+      powerof2[i] = POWER(FL(2.0), (MYFLT)i * (MYFLT)(1.0/POW2TABSIZI) - FL(POW2MAX));
+}*/
 
-static inline MYFLT pow2(MYFLT a)
+/* initialise the tables, called by csoundPreCompile() */
+void csound_aops_init_tables(CSOUND *csound)
 {
-    int n = (int)MYFLT2LRND(a * FL(4096.0)) + 61440;   /* 4096 * 15 */
-    return ((MYFLT) (1 << (n >> 12)) * powerof2[n & 4095]);
+    int   i;
+    if(csound->cpsocfrc==NULL)csound->cpsocfrc = (MYFLT *) csound->Malloc(csound, sizeof(MYFLT)*OCTRES);
+    if(csound->powerof2==NULL) csound->powerof2 = (MYFLT *) csound->Malloc(csound, sizeof(MYFLT)*POW2TABSIZI);
+    for (i = 0; i < OCTRES; i++)
+      csound->cpsocfrc[i] = POWER(FL(2.0), (MYFLT)i / OCTRES) * ONEPT;
+    for (i = 0; i < POW2TABSIZI; i++)
+      csound->powerof2[i] = POWER(FL(2.0), (MYFLT)i * (MYFLT)(1.0/POW2TABSIZI) - FL(POW2MAX));
 }
 
+
+MYFLT csoundPow2(CSOUND *csound, MYFLT a){
+
+  if(a > POW2MAX) a = POW2MAX;
+  else if(a < -POW2MAX) a = -POW2MAX;
+    int n = (int)MYFLT2LRND(a * FL(POW2TABSIZI)) + POW2MAX*POW2TABSIZI;   /* 4096 * 15 */
+    return ((MYFLT) (1UL << (n >> 12)) * csound->powerof2[n & (POW2TABSIZI-1)]);
+
+}
+
+
+/*static inline MYFLT pow2(MYFLT a)
+{
+    int n = (int)MYFLT2LRND(a * FL(POW2TABSIZI)) + POW2MAX*POW2TABSIZI;  
+    return ((MYFLT) (1 << (n >> 12)) * powerof2[n & (POW2TABSIZI-1)]);
+}*/
+
 int rassign(CSOUND *csound, ASSIGN *p)
 {
     /* already assigned by otran */
@@ -181,7 +206,7 @@ int tassign(CSOUND *csound, ASSIGNT *p)
 int tabref_check(CSOUND *csound, TABREF *p)
 {
     if (UNLIKELY(p->tab->data==NULL))
-      return csound->InitError(csound, Str("Vector notinitialised\n"));
+      return csound->InitError(csound, Str("Vector not initialised\n"));
     return OK;
 }
 
@@ -956,7 +981,7 @@ int logbasetwo_set(CSOUND *csound, EVAL *p)
 
 int powoftwo(CSOUND *csound, EVAL *p)
 {
-    *p->r = pow2(*p->a);
+    *p->r = csound->Pow2(csound,*p->a);
     return OK;
 }
 
@@ -964,7 +989,7 @@ int powoftwoa(CSOUND *csound, EVAL *p)
 {                                   /* by G.Maldonado, liberalised by JPff */
     int n, nsmps = csound->ksmps;
     for (n = 0; n < nsmps; n++)
-      p->r[n] = pow2(p->a[n]);
+      p->r[n] = csound->Pow2(csound,p->a[n]);
     return OK;
 }
 
@@ -974,7 +999,7 @@ int powoftwoa(CSOUND *csound, EVAL *p)
 int semitone(CSOUND *csound, EVAL *p)
 {
     MYFLT a = *p->a*ONEd12;
-    *p->r = pow2(a);
+    *p->r = csound->Pow2(csound,a);
     return OK;
 }
 
@@ -987,7 +1012,7 @@ int asemitone(CSOUND *csound, EVAL *p)            /* JPff */
     r = p->r;
     for (n=0; n<nsmps; n++) {
       MYFLT aa = (a[n])*ONEd12;
-      r[n] = pow2(aa);
+      r[n] = csound->Pow2(csound,aa);
     }
     return OK;
 }
@@ -995,7 +1020,7 @@ int asemitone(CSOUND *csound, EVAL *p)            /* JPff */
 int cent(CSOUND *csound, EVAL *p)
 {
     MYFLT a = *p->a*ONEd1200;
-    *p->r = pow2(a);
+    *p->r = csound->Pow2(csound,a);
     return OK;
 }
 
@@ -1008,7 +1033,7 @@ int acent(CSOUND *csound, EVAL *p)        /* JPff */
     r = p->r;
     for (n=0; n<nsmps; n++) {
       MYFLT aa = (a[n])*ONEd1200;
-      r[n] = pow2(aa);
+      r[n] = csound->Pow2(csound,aa);
   }
   return OK;
 }
@@ -1017,7 +1042,7 @@ int acent(CSOUND *csound, EVAL *p)        /* JPff */
 
 int db(CSOUND *csound, EVAL *p)
 {
-    *p->r = pow2(*p->a*LOG2_10D20);
+    *p->r = csound->Pow2(csound,*p->a*LOG2_10D20);
     return OK;
 }
 
@@ -1030,7 +1055,7 @@ int dba(CSOUND *csound, EVAL *p)          /* JPff */
     r = p->r;
     for (n=0; n<nsmps; n++) {
       MYFLT aa = a[n];
-      r[n] = pow2(aa*LOG2_10D20);
+      r[n] = csound->Pow2(csound,aa*LOG2_10D20);
     }
     return OK;
 }
@@ -1246,6 +1271,7 @@ int inall_opcode(CSOUND *csound, INALL *p)
     return OK;
 }
 
+#if 0
 int out(CSOUND *csound, OUTM *p)
 {
     int n;
@@ -1317,6 +1343,7 @@ int outq(CSOUND *csound, OUTQ *p)
     CSOUND_SPOUT_SPINUNLOCK
     return OK;
 }
+#endif
 
 int outs1(CSOUND *csound, OUTM *p)
 {
@@ -1488,6 +1515,7 @@ int outq4(CSOUND *csound, OUTM *p)
     return OK;
 }
 
+#if 0
 int outh(CSOUND *csound, OUTH *p)
 {
     MYFLT *sp = csound->spout, *ap1 = p->asig1, *ap2 = p->asig2, *ap3 = p->asig3,
@@ -1558,6 +1586,7 @@ int outo(CSOUND *csound, OUTO *p)
     CSOUND_SPOUT_SPINUNLOCK
     return OK;
 }
+#endif
 
 static int outn(CSOUND *csound, int n, OUTX *p)
 {
@@ -1588,6 +1617,7 @@ static int outn(CSOUND *csound, int n, OUTX *p)
     return OK;
 }
 
+#if 0
 int outx(CSOUND *csound, OUTX *p)
 {
     return outn(csound, 16, p);
@@ -1597,6 +1627,7 @@ int outX(CSOUND *csound, OUTX *p)
 {
     return outn(csound, 32, p);
 }
+#endif
 
 int outall(CSOUND *csound, OUTX *p)             /* Output a list of channels */
 {
@@ -1798,3 +1829,8 @@ int is_infa(CSOUND *csound, ASSIGN *p)
     *p->r = ans*sign;
     return OK;
 }
+
+int error_fn(CSOUND *csound, ERRFN *p)
+{
+    return csound->InitError(csound, Str("Unknown functuon called"));
+}
diff --git a/OOps/bus.c b/OOps/bus.c
index 11f4e3c..93955b9 100644
--- a/OOps/bus.c
+++ b/OOps/bus.c
@@ -942,10 +942,10 @@ static int chnset_opcode_perf_k(CSOUND *csound, CHNGET *p)
 
 static int chnset_opcode_perf_a(CSOUND *csound, CHNGET *p)
 {
-    int *lock = p->lock;        /* Need lock for the channel */
-    csoundSpinLock(lock);
+    /* Need lock for the channel */
+    csoundSpinLock(p->lock);
     memcpy(p->fp, p->arg, sizeof(MYFLT)*csound->ksmps);
-    csoundSpinUnLock(lock);
+    csoundSpinUnLock(p->lock);
     return OK;
 }
 
@@ -955,12 +955,12 @@ static int chnmix_opcode_perf(CSOUND *csound, CHNGET *p)
 {
     int   i = 0;
     int n = csound->ksmps;
-    int *lock = p->lock;        /* Need lock for the channel */
-    csoundSpinLock(lock);
+                                /* Need lock for the channel */
+    csoundSpinLock(p->lock);
     for (i=0; i<n; i++) {
       p->fp[i] += p->arg[i];
     }
-    csoundSpinUnLock(lock);
+    csoundSpinUnLock(p->lock);
     return OK;
 }
 
@@ -968,10 +968,10 @@ static int chnmix_opcode_perf(CSOUND *csound, CHNGET *p)
 
 static int chnclear_opcode_perf(CSOUND *csound, CHNCLEAR *p)
 {
-    int *lock = p->lock;        /* Need lock for the channel */
-    csoundSpinLock(lock);
+    /* Need lock for the channel */
+    csoundSpinLock(p->lock);
     memset(p->fp, 0, csound->ksmps*sizeof(MYFLT));
-    csoundSpinUnLock(lock);
+    csoundSpinUnLock(p->lock);
     return OK;
 }
 
diff --git a/OOps/cmath.c b/OOps/cmath.c
index 04831a8..796ee2e 100644
--- a/OOps/cmath.c
+++ b/OOps/cmath.c
@@ -266,12 +266,13 @@ static MYFLT poissrand(CSOUND *csound, MYFLT lambda)
 
 int auniform(CSOUND *csound, PRAND *p)  /* Uniform distribution */
 {
-    MYFLT   *out = p->out, *endp = p->out + csound->ksmps;
+    MYFLT   *out = p->out;
+    int n, nsmps = csound->ksmps;
     double  scale = (double)*p->arg1 * (1.0 / 4294967295.03125);
 
-    do {
-      *(out++) = (MYFLT)((double)csoundRandMT(&(csound->randState_)) * scale);
-    } while (out < endp);
+    for (n=0; n>nsmps; n++) {
+      out[n] = (MYFLT)((double)csoundRandMT(&(csound->randState_)) * scale);
+    }
     return OK;
 }
 
@@ -326,12 +327,6 @@ int exprndiset(CSOUND *csound, PRANDI *p)
     return OK;
 }
 
-int iexprndi(CSOUND *csound, PRANDI *p)
-{
-    exprndiset(csound, p);
-    return kexprndi(csound, p);
-}
-
 int kexprndi(CSOUND *csound, PRANDI *p)
 {                                       /* rslt = (num1 + diff*phs) * amp */
     /* IV - Jul 11 2002 */
@@ -346,6 +341,12 @@ int kexprndi(CSOUND *csound, PRANDI *p)
     return OK;
 }
 
+int iexprndi(CSOUND *csound, PRANDI *p)
+{
+    exprndiset(csound, p);
+    return kexprndi(csound, p);
+}
+
 int aexprndi(CSOUND *csound, PRANDI *p)
 {
     int32       phs = p->phs, inc;
@@ -448,12 +449,6 @@ int gaussiset(CSOUND *csound, PRANDI *p)
     return OK;
 }
 
-int igaussi(CSOUND *csound, PRANDI *p)
-{
-    gaussiset(csound, p);
-    return kgaussi(csound, p);
-}
-
 int kgaussi(CSOUND *csound, PRANDI *p)
 {                                       /* rslt = (num1 + diff*phs) * amp */
     /* IV - Jul 11 2002 */
@@ -468,6 +463,12 @@ int kgaussi(CSOUND *csound, PRANDI *p)
     return OK;
 }
 
+int igaussi(CSOUND *csound, PRANDI *p)
+{
+    gaussiset(csound, p);
+    return kgaussi(csound, p);
+}
+
 int agaussi(CSOUND *csound, PRANDI *p)
 {
     int32       phs = p->phs, inc;
@@ -531,12 +532,6 @@ int cauchyiset(CSOUND *csound, PRANDI *p)
     return OK;
 }
 
-int icauchyi(CSOUND *csound, PRANDI *p)
-{
-    cauchyiset(csound, p);
-    return kcauchyi(csound, p);
-}
-
 int kcauchyi(CSOUND *csound, PRANDI *p)
 {                                       /* rslt = (num1 + diff*phs) * amp */
     /* IV - Jul 11 2002 */
@@ -551,6 +546,12 @@ int kcauchyi(CSOUND *csound, PRANDI *p)
     return OK;
 }
 
+int icauchyi(CSOUND *csound, PRANDI *p)
+{
+    cauchyiset(csound, p);
+    return kcauchyi(csound, p);
+}
+
 int acauchyi(CSOUND *csound, PRANDI *p)
 {
     int32       phs = p->phs, inc;
diff --git a/OOps/goto_ops.c b/OOps/goto_ops.c
index 3fd2ed9..a79d467 100644
--- a/OOps/goto_ops.c
+++ b/OOps/goto_ops.c
@@ -27,6 +27,7 @@
 #include "oload.h"
 #include "insert.h"     /* for goto's */
 #include "aops.h"       /* for cond's */
+extern int32 strarg2insno(CSOUND *, void *p, int is_string);
 
 int igoto(CSOUND *csound, GOTO *p)
 {
@@ -166,16 +167,19 @@ int turnoff(CSOUND *csound, LINK *p)    /* terminate the current instrument  */
 }
 
 /* turnoff2 opcode */
-
-int turnoff2(CSOUND *csound, TURNOFF2 *p)
+int turnoff2(CSOUND *csound, TURNOFF2 *p, int isStringArg)
 {
     MYFLT p1;
     INSDS *ip, *ip2, *nip;
     int   mode, insno, allow_release;
 
-    if (*(p->kInsNo) <= FL(0.0))
+    if(isStringArg){
+     p1 = (MYFLT) strarg2insno(csound, p->kInsNo, (p->XSTRCODE & 1));
+    } else p1 = *(p->kInsNo);
+
+    if (p1 <= FL(0.0))
       return OK;    /* not triggered */
-    p1 = *(p->kInsNo);
+    
     insno = (int) p1;
     if (UNLIKELY(insno < 1 || insno > (int) csound->maxinsno ||
                  csound->instrtxtp[insno] == NULL)) {
@@ -233,6 +237,14 @@ int turnoff2(CSOUND *csound, TURNOFF2 *p)
     return OK;
 }
 
+int turnoff2S(CSOUND *csound, TURNOFF2 *p){
+  return turnoff2(csound, p, 1);
+}
+
+int turnoff2k(CSOUND *csound, TURNOFF2 *p){
+   return turnoff2(csound, p, 0);
+}
+
 int loop_l_i(CSOUND *csound, LOOP_OPS *p)
 {
     /* if ((indxvar += iincr) < ilimit) igoto l */
diff --git a/OOps/midiinterop.c b/OOps/midiinterop.c
index f8e532c..75484fc 100644
--- a/OOps/midiinterop.c
+++ b/OOps/midiinterop.c
@@ -28,7 +28,7 @@
 #define dv127   (FL(1.0)/FL(127.0))
 
 /* aops.c, table for CPSOCTL */
-extern  MYFLT   cpsocfrc[];
+/* extern  MYFLT   cpsocfrc[]; */
 
 int midinoteoff(CSOUND *csound, MIDINOTEON *p)
 {
diff --git a/OOps/midiops.c b/OOps/midiops.c
index 2612d14..77c39ef 100644
--- a/OOps/midiops.c
+++ b/OOps/midiops.c
@@ -30,7 +30,7 @@
 #define dv127   (FL(1.0)/FL(127.0))
 
 /* aops.c, table for CPSOCTL */
-extern  MYFLT   cpsocfrc[];
+/*extern  MYFLT   cpsocfrc[];*/
 
 extern int m_chinsno(CSOUND *csound, int chan, int insno, int reset_ctls);
 
diff --git a/OOps/midiout.c b/OOps/midiout.c
index 99096e1..5bbd61f 100644
--- a/OOps/midiout.c
+++ b/OOps/midiout.c
@@ -308,11 +308,13 @@ int out_controller (CSOUND *csound, OUT_CONTR *p)
       value =  (int)((*p->value - min) * FL(127.0) / (*p->max - min));
       value = (value < 128) ?  value : 127;
       value = (value > -1) ?  value : 0;
-      if (value != p->last_value) {
+      if (value != p->last_value || *p->chn != p->lastchn || *p->num != p->lastctrl) { 
         /* csound->Message(csound, "out contr value: %d\n", value); */
         control_change(csound, (int)*p->chn-1,(int)*p->num ,value);
         p->last_value = value;
-      }
+        p->lastchn = *p->chn;
+        p->lastctrl = *p->num;
+        } 
     }
     return OK;
 }
@@ -326,10 +328,11 @@ int out_aftertouch (CSOUND *csound, OUT_ATOUCH *p)
       value =  (int)((*p->value - min) * FL(127.0) / (*p->max - min));
       value = value < 128 ?  value : 127;
       value = value > -1  ?  value : 0;
-      if (value != p->last_value) {
+      if (value != p->last_value || *p->chn != p->lastchn) {
         after_touch(csound, (int)*p->chn-1, value);
         p->last_value = value;
-      }
+        p->lastchn = *p->chn;
+       }
     }
     return OK;
 }
@@ -341,10 +344,12 @@ int out_poly_aftertouch (CSOUND *csound, OUT_POLYATOUCH *p)
     value =  (int)((*p->value - min) * FL(127.0) / (*p->max - min));
     value = value < 128 ?  value : 127;
     value = value > -1  ?  value : 0;
-    if (value != p->last_value) {
+    if (value != p->last_value  || *p->chn != p->lastchn || *p->num != p->lastctrl) {
       poly_after_touch(csound, (int)*p->chn-1, (int)*p->num, value);
       p->last_value = value;
-    }
+      p->lastchn = *p->chn;
+      p->lastctrl = *p->num;
+}
 
     return OK;
 }
@@ -358,10 +363,11 @@ int out_progchange (CSOUND *csound, OUT_PCHG *p)
       prog_num =  (int)((*p->prog_num - min) * FL(127.0) / (*p->max - min));
       prog_num = prog_num < 128 ?  prog_num : 127;
       prog_num = prog_num > -1  ?  prog_num : 0;
-      if (prog_num != p->last_prog_num) {
+      if (prog_num != p->last_prog_num || *p->chn != p->lastchn) { 
         program_change(csound, (int)*p->chn-1, prog_num);
         p->last_prog_num = prog_num;
-      }
+        p->lastchn = *p->chn;
+        } 
     }
     return OK;
 }
@@ -377,14 +383,16 @@ int out_controller14 (CSOUND *csound, OUT_CONTR14 *p)
       value = (value < 16384) ?  value : 16383;
       value = (value > -1) ?  value : 0;
 
-      if (value != p->last_value) {
+      if (value != p->last_value  || *p->chn != p->lastchn || *p->msb_num != p->lastctrl) {
         unsigned int msb = value >> 7;
         unsigned int lsb = value & 0x7F;
         csound->Warning(csound, Str("out contr14 msb:%x lsb:%x\n"), msb, lsb);
         control_change(csound, (int)*p->chn-1, (int)*p->msb_num, msb);
         control_change(csound, (int)*p->chn-1, (int)*p->lsb_num, lsb);
         p->last_value = value;
-      }
+        p->lastchn = *p->chn;
+        p->lastctrl = *p->msb_num;
+         } 
     }
     return OK;
 }
@@ -402,12 +410,13 @@ int out_pitch_bend(CSOUND *csound, OUT_PB *p)
       value = (int)((*p->value - min) * FL(16383.0) / (*p->max - min));
       value = (value < 16384  ?  value : 16383);
       value = (value > -1     ?  value : 0);
-      if (value != p->last_value) {
+      if (value != p->last_value || *p->chn != p->lastchn )  {
         unsigned int msb = value >> 7;
         unsigned int lsb = value & 0x7F;
         pitch_bend(csound, (int)*p->chn - 1, lsb, msb);
         p->last_value = value;
-      }
+        p->lastchn = *p->chn;
+        }
     }
     return OK;
 }
diff --git a/OOps/pvsanal.c b/OOps/pvsanal.c
index 5eaf64b..19d9577 100644
--- a/OOps/pvsanal.c
+++ b/OOps/pvsanal.c
@@ -268,7 +268,7 @@ static void generate_frame(CSOUND *csound, PVSANAL *p)
     int32 analWinLen = p->fsig->winsize/2;
     int32 synWinLen = analWinLen;
     float *ofp;                 /* RWD MUST be 32bit */
-    MYFLT *fp,*oi,*i0,*i1;
+    MYFLT *fp;
     MYFLT *anal = (MYFLT *) (p->analbuf.auxp);
     MYFLT *input = (MYFLT *) (p->input.auxp);
     MYFLT *analWindow = (MYFLT *) (p->analwinbuf.auxp) + analWinLen;
@@ -677,11 +677,11 @@ int pvsynthset(CSOUND *csound, PVSYNTH *p)
 {
     MYFLT *analwinhalf;
     MYFLT *synwinhalf;
-    MYFLT sum, olapratio;
+    MYFLT sum;
     int32 halfwinsize,buflen;
     int i,nBins,Mf,Lf;
     double IO;
-
+      
     /* get params from input fsig */
     /* we TRUST they are legal */
     int32 N = p->fsig->N;
@@ -728,14 +728,15 @@ int pvsynthset(CSOUND *csound, PVSYNTH *p)
     synwinhalf = (MYFLT *) (p->synwinbuf.auxp) + halfwinsize;
  
     
-
+  
     /* synthesis windows */
     if (M <= N) {
       if (UNLIKELY(PVS_CreateWindow(csound, synwinhalf, wintype, M) != OK))
         return NOTOK;
-
+  
       for (i = 1; i <= halfwinsize; i++)
         *(synwinhalf - i) = *(synwinhalf + i - Lf);
+       
 
        sum = FL(0.0); 
         for (i = -halfwinsize; i <= halfwinsize; i++)
@@ -748,7 +749,7 @@ int pvsynthset(CSOUND *csound, PVSYNTH *p)
          sum = FL(0.0); 
    /* no timescaling, so I(nterpolation) will always = D(ecimation) = overlap */
         for (i = -halfwinsize; i <= halfwinsize; i+=overlap)
-	  sum += *(synwinhalf + i) * *(synwinhalf + i); 
+          sum += *(synwinhalf + i) * *(synwinhalf + i); 
     }
     else {
      /* have to make analysis window to get amp scaling */
@@ -792,6 +793,7 @@ int pvsynthset(CSOUND *csound, PVSYNTH *p)
         *(synwinhalf - i) = *(synwinhalf + i - Lf);
     }
    
+   
    if (!(N & (N - 1L)))
      sum = csound->GetInverseRealFFTScale(csound, (int) N) / sum;
     else
@@ -799,7 +801,7 @@ int pvsynthset(CSOUND *csound, PVSYNTH *p)
    
   for (i = -halfwinsize; i <= halfwinsize; i++)
       *(synwinhalf + i) *= sum;
-
+ 
 /*  p->invR = FL(1.0) / csound->esr; */
     p->RoverTwoPi = p->arate / TWOPI_F;
     p->TwoPioverR = TWOPI_F / p->arate;
@@ -810,6 +812,7 @@ int pvsynthset(CSOUND *csound, PVSYNTH *p)
     p->outptr = 0;
     p->nextOut = (MYFLT *) (p->output.auxp);
     p->buflen = buflen;
+
     return OK;
 }
 
@@ -826,9 +829,9 @@ static MYFLT synth_tick(CSOUND *csound, PVSYNTH *p)
 
 static void process_frame(CSOUND *csound, PVSYNTH *p)
 {
-    int n,i,j,k,ii,NO,NO2;
+    int i,j,k,ii,NO,NO2;
     float *anal;                                        /* RWD MUST be 32bit */
-    MYFLT *syn,*bsyn,*i0,*i1,*output;
+    MYFLT *syn,*bsyn,*output;
     MYFLT *oldOutPhase = (MYFLT *) (p->oldOutPhase.auxp);
     int32 N = p->fsig->N;
     MYFLT *obufptr,*outbuf,*synWindow;
@@ -940,7 +943,6 @@ static void process_frame(CSOUND *csound, PVSYNTH *p)
     obufptr = outbuf;
 
     for (i = 0; i < p->IOi;) {  /* shift out next IOi values */
-      int j;
       int todo = (p->IOi-i <= output+p->buflen - p->nextOut ?
                   p->IOi-i : output+p->buflen - p->nextOut);
       /*outfloats(nextOut, todo, ofd);*/
diff --git a/OOps/remote.c b/OOps/remote.c
index 01a6018..a6237a0 100644
--- a/OOps/remote.c
+++ b/OOps/remote.c
@@ -29,7 +29,10 @@
 #include <sys/ioctl.h>
 #ifdef LINUX
 #include <linux/if.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
 #include <arpa/inet.h>
+extern int inet_aton (const char *, struct in_addr *);
 #endif
 #include <net/if.h>
 #endif
diff --git a/OOps/ugens1.c b/OOps/ugens1.c
index e800fc2..1b82a3d 100644
--- a/OOps/ugens1.c
+++ b/OOps/ugens1.c
@@ -341,7 +341,8 @@ int lsgrset(CSOUND *csound, LINSEG *p)
     int32 relestim;
     lsgset(csound,p);
     relestim = (p->cursegp + p->segsrem - 1)->cnt;
-    p->xtra = relestim;  /* VL 4-1-2011 was -1, making all linsegr releases in an instr => xtratim 
+    p->xtra = relestim;  /* VL 4-1-2011 was -1, making all linsegr 
+                            releases in an instr => xtratim 
                             set to relestim seems to fix this */
     if (relestim > p->h.insdshead->xtratim)
       p->h.insdshead->xtratim = (int)relestim;
@@ -387,7 +388,7 @@ int linsegr(CSOUND *csound, LINSEG *p)
     if (LIKELY(p->segsrem)) {               /* if no more segs putk */
       SEG *segp;
       if (p->h.insdshead->relesing && p->segsrem > 1) {
-        while (p->segsrem > 1) {            /* reles flag new:      */
+        while (p->segsrem > 1) {            /* release flag new:    */
           segp = ++p->cursegp;              /*   go to last segment */
           p->segsrem--;
         }                                   /*   get univ relestim  */
@@ -1295,7 +1296,7 @@ int evrset(CSOUND *csound, ENVLPR *p)
     else {
       p->phs = -1;
       p->val = *(ftp->ftable + ftp->flen)-asym;
-      /* irise = FL(0.0);          /* in case irise < 0 */
+      /* irise = FL(0.0); */          /* in case irise < 0 */
     }
     if (UNLIKELY(!(*(ftp->ftable + ftp->flen)))) {
       return csound->InitError(csound, Str("rise func ends with zero"));
diff --git a/OOps/ugens2.c b/OOps/ugens2.c
index f35777f..bebdd83 100644
--- a/OOps/ugens2.c
+++ b/OOps/ugens2.c
@@ -159,7 +159,7 @@ int phsor(CSOUND *csound, PHSOR *p)
         phase += incr;
         if (UNLIKELY((MYFLT)phase >= 1.0)){
           phase -= 1.0;
-	}
+        }
         else if (UNLIKELY((MYFLT)phase < 0.0))
           phase += 1.0;
       }
diff --git a/OOps/ugens4.c b/OOps/ugens4.c
index b4d4b66..d3a7f05 100644
--- a/OOps/ugens4.c
+++ b/OOps/ugens4.c
@@ -110,7 +110,7 @@ int gbzset(CSOUND *csound, GBUZZ *p)
     return NOTOK;
 }
 
-inline MYFLT intpow1(MYFLT x, int32 n)   /* Binary positive power function */
+static inline MYFLT intpow1(MYFLT x, int32 n)   /* Binary positive power function */
 {
     MYFLT ans = FL(1.0);
     while (n!=0) {
diff --git a/Opcodes/CMakeLists.txt b/Opcodes/CMakeLists.txt
index 656a636..95865f2 100644
--- a/Opcodes/CMakeLists.txt
+++ b/Opcodes/CMakeLists.txt
@@ -1,96 +1,13 @@
 ## OPCODE LIBS WITH NO EXTERNAL DEPENDENCIES ##
 
-set(stdopcod_SRCS 
-    ambicode.c      bbcut.c         biquad.c
-    butter.c        clfilt.c        cross2.c
-    dam.c           dcblockr.c      filter.c
-    flanger.c       follow.c        fout.c
-    freeverb.c      ftconv.c        ftgen.c
-    gab/gab.c       gab/vectorial.c grain.c
-    locsig.c        lowpassr.c      metro.c
-    midiops2.c      midiops3.c      newfils.c
-    nlfilt.c        oscbnk.c        pluck.c
-    repluck.c       reverbsc.c      seqtime.c
-    sndloop.c       sndwarp.c       space.c
-    spat3d.c        syncgrain.c     ugens7.c
-    ugens9.c        ugensa.c        uggab.c
-    ugmoss.c        ugnorman.c      ugsc.c
-    wave-terrain.c  stdopcod.c)
-
-make_plugin(stdopcod "${stdopcod_SRCS}" ${LIBSNDFILE_LIBRARY} m)
-if(HAVE_VALUES_H)
-    set_target_properties(stdopcod PROPERTIES COMPILE_FLAGS "-DHAVE_VALUES_H")
-endif()
-
-make_plugin(modmatrix modmatrix.c)
-make_plugin(eqfil eqfil.c m)
-make_plugin(pvsbuffer pvsbuffer.c)
-make_plugin(scoreline scoreline.c)
 make_plugin(mixer mixer.cpp)
 make_plugin(signalflowgraph signalflowgraph.cpp)
 
-set(modal4_SRCS 
-    modal4.c physutil.c)
-make_plugin(modal4 "${modal4_SRCS}" m)
-
-set(physmod_SRCS 
-    physmod.c physutil.c 
-    mandolin.c singwave.c
-    fm4op.c moog1.c shaker.c bowedbar.c)
-make_plugin(physmod "${physmod_SRCS}" m)
-
-
-set(pitch_SRCS 
-    pitch.c pitch0.c spectra.c)    
-make_plugin(pitch "${pitch_SRCS}" m)
-
-
-make_plugin(barmodel bilbar.c m)
-make_plugin(compress compress.c m)
-make_plugin(grain4 grain4.c)
-make_plugin(loscilx loscilx.c m)
-make_plugin(minmax minmax.c)
-make_plugin(cs_pan2 pan2.c m)
-make_plugin(phisem phisem.c m)
-
-set(pvoc_SRCS 
-    dsputil.c pvadd.c pvinterp.c pvocext.c
-    pvread.c ugens8.c vpvoc.c pvoc.c)
-make_plugin(pvoc "${pvoc_SRCS}" m)
-
-set(cs_pvs_ops_SRCS
-    ifd.c partials.c psynth.c pvsbasic.c
-    pvscent.c pvsdemix.c pvs_ops.c pvsband.c)
-make_plugin(cs_pvs_ops "${cs_pvs_ops_SRCS}" m)
-
-make_plugin(stackops stackops.c)
-make_plugin(vaops vaops.c)
-make_plugin(ugakbari ugakbari.c m)
-make_plugin(harmon harmon.c m)
 make_plugin(ampmidid ampmidid.cpp)
 make_plugin(cs_date date.c)
 make_plugin(system_call system_call.c)
-make_plugin(ptrack pitchtrack.c m)
 make_plugin(mutexops mutexops.cpp)
-make_plugin(partikkel partikkel.c m)
-make_plugin(shape shape.c m)
 make_plugin(doppler doppler.cpp)
-make_plugin(tabsum tabsum.c)
-make_plugin(crossfm crossfm.c m)
-make_plugin(pvlock pvlock.c m)
-make_plugin(vosim Vosim.c)
-make_plugin(tabfns tabvars.c)
-
-set(gabnew_SRCS
-    gab/tabmorph.c      gab/hvs.c
-    gab/sliderTable.c   gab/newgabopc.c)
-make_plugin(gabnew "${gabnew_SRCS}" m)
-
-make_plugin(hrtfnew hrtfopcodes.c m)
-if(BIG_ENDIAN)
-    set_target_properties(hrtfnew PROPERTIES
-        COMPILE_DEFINITIONS "WORDS_BIGENDIAN")
-endif()
 
 # temporarily do not build on Windows until these opcodes are fixed
 # to compile
@@ -99,17 +16,6 @@ if(NOT WIN32)
     make_plugin(udpsend socksend.c)
 endif()
 
-
-make_plugin(ftest ftest.c m)
-make_plugin(ambicode1 ambicode1.c m)
-make_plugin(babo babo.c m)
-make_plugin(hrtferX hrtferX.c m)
-
-set(vbap_SRCS 
-    vbap.c vbap_eight.c vbap_four.c
-    vbap_sixteen.c vbap_zak.c)
-make_plugin(vbap "${vbap_SRCS}" m)
-
 set(scansyn_SRCS
     scansyn.c scansynx.c)
 make_plugin(scansyn "${scansyn_SRCS}" m)
@@ -118,10 +24,6 @@ if(UNIX)
     make_plugin(control control.c)
 endif()
 
-if(LINUX)
-    make_plugin(cpumeter cpumeter.c)
-endif()
-
 ## OPCODES WITH EXTERNAL DEPENDENCIES ##
 
 # OGG Opcode previously was built only for OLPC
@@ -132,18 +34,18 @@ endif()
 
 
 
-set(sfont_FLAGS "")
+#set(sfont_FLAGS "")
 
-if(CMAKE_C_COMPILER MATCHES "gcc")
-    set(sfont_FLAGS ${sfont_FLAGS} -fno-strict-aliasing)
-endif()
-if(BIG_ENDIAN)
-    set(sfont_FLAGS ${sfont_FLAGS} -DWORDS_BIGENDIAN)
-endif()
-message(STATUS "Compiler flags used for sfont lib: ${sfont_FLAGS}")
-make_plugin(sfont sfont.c m)
-set_target_properties(sfont
-    PROPERTIES COMPILER_FLAGS "${sfont_FLAGS}")
+#if(CMAKE_C_COMPILER MATCHES "gcc")
+#    set(sfont_FLAGS ${sfont_FLAGS} -fno-strict-aliasing)
+#endif()
+#if(BIG_ENDIAN)
+#    set(sfont_FLAGS ${sfont_FLAGS} -DWORDS_BIGENDIAN)
+#endif()
+#message(STATUS "Compiler flags used for sfont lib: ${sfont_FLAGS}")
+#make_plugin(sfont sfont.c m)
+#set_target_properties(sfont
+#    PROPERTIES COMPILER_FLAGS "${sfont_FLAGS}")
 
     
           
@@ -156,3 +58,5 @@ set_target_properties(sfont
 #if p5gfound==1:
 #  P5GEnvironment = pluginEnvironment.Clone()
 #  makePlugin(P5GEnvironment, 'p5g', ['p5glove.c'])
+
+add_subdirectory(stk)
diff --git a/Opcodes/Loris/lorisgens5.C b/Opcodes/Loris/lorisgens5.C
index 1fd5f1e..ee25247 100644
--- a/Opcodes/Loris/lorisgens5.C
+++ b/Opcodes/Loris/lorisgens5.C
@@ -687,7 +687,7 @@ struct LorisPlayer
 // ---------------------------------------------------------------------------
 //
 LorisPlayer::LorisPlayer( CSOUND *csound, LORISPLAY * params ) :
-  reader( EnvelopeReader::Find( params->h.insdshead, (int)*(params->readerIdx) ) ),
+  reader( EnvelopeReader::Find( params->h.insdshead, (int)*(params->readerIdx))),
      dblbuffer( csound->ksmps, 0.0 )
 {
     if ( reader != NULL ) {
@@ -881,8 +881,10 @@ public:
 //
 LorisMorpher::LorisMorpher( LORISMORPH * params ) :
   morpher( GetFreqFunc( params ), GetAmpFunc( params ), GetBwFunc( params ) ),
-  src_reader( EnvelopeReader::Find( params->h.insdshead, (int)*(params->srcidx) ) ),
-  tgt_reader( EnvelopeReader::Find( params->h.insdshead, (int)*(params->tgtidx) ) ),
+  src_reader( EnvelopeReader::Find( params->h.insdshead,
+                                    (int)*(params->srcidx) ) ),
+  tgt_reader( EnvelopeReader::Find( params->h.insdshead,
+                                    (int)*(params->tgtidx) ) ),
   tag( params->h.insdshead, (int)*(params->morphedidx) )
 {
     if ( src_reader != NULL )
@@ -947,7 +949,8 @@ LorisMorpher::LorisMorpher( LORISMORPH * params ) :
 #ifdef DEBUG_LORISGENS
     std::cerr << "** Morph will use " << labelMap.size() << " labeled Partials, ";
     std::cerr << src_unlabeled.size() << " unlabeled source Partials, and ";
-    std::cerr << tgt_unlabeled.size() << " unlabeled target Partials." << std::endl;
+    std::cerr << tgt_unlabeled.size() << " unlabeled target Partials." 
+              << std::endl;
 #endif
 
     //    allocate and set the labels for the morphed envelopes:
@@ -1008,7 +1011,8 @@ LorisMorpher::updateEnvelopes( void )
         if ( itgt < 0 && isrc < 0 )
           {
 #ifdef DEBUG_LORISGENS
-            std::cerr << "HEY!!!! The labelMap had a pair of bogus indices in it at pos "
+            std::cerr << 
+              "HEY!!!! The labelMap had a pair of bogus indices in it at pos "
                       << envidx << std::endl;
 #endif
             continue;
@@ -1128,7 +1132,7 @@ int lorismorph_cleanup(CSOUND *csound, void * p)
 //
 extern "C"
 {
-  static OENTRY localops[] =
+  OENTRY loris_localops[] =
     {
       {(char*)"lorisread",  sizeof(LORISREAD),  3, (char*)"", (char*)"kTikkko",
        (SUBR) lorisread_setup,  (SUBR) lorisread,  0 },
@@ -1138,7 +1142,7 @@ extern "C"
        (SUBR) lorismorph_setup, (SUBR) lorismorph, 0 }
     };
 
-LINKAGE
+  LINKAGE1(loris_localops)
 
 }
 
diff --git a/Opcodes/LuaCsound.cpp b/Opcodes/LuaCsound.cpp
index e0add5a..7210211 100644
--- a/Opcodes/LuaCsound.cpp
+++ b/Opcodes/LuaCsound.cpp
@@ -541,7 +541,10 @@ extern "C"
             sizeof(cslua_exec),
             1,
             (char*)"",
-            (char*)"TNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN",
+            (char*)"TNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN"
+            "NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN"
+            "NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN"
+            "NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN",
             (SUBR) cslua_exec::init_,
             (SUBR) 0,
             (SUBR) 0,
@@ -551,7 +554,10 @@ extern "C"
             sizeof(cslua_opcall),
             1,
             (char*)"",
-            (char*)"TNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN",
+            (char*)"TNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN"
+            "NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN"
+            "NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN"
+            "NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN",
             (SUBR) cslua_opcall::init_,
             (SUBR) 0,
             (SUBR) 0,
@@ -561,7 +567,10 @@ extern "C"
             sizeof(cslua_opcall),
             3,
             (char*)"",
-            (char*)"TNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN",
+            (char*)"TNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN"
+            "NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN"
+            "NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN"
+            "NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN",
             (SUBR) cslua_opcall::init_,
             (SUBR) cslua_opcall::kontrol_,
             (SUBR) 0,
@@ -571,7 +580,10 @@ extern "C"
             sizeof(cslua_opcall),
             5,
             (char*)"",
-            (char*)"TNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN",
+            (char*)"TNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN"
+            "NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN"
+            "NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN"
+            "NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN",
             (SUBR) cslua_opcall::init_,
             (SUBR) 0,
             (SUBR) cslua_opcall::audio_,
@@ -581,7 +593,10 @@ extern "C"
             sizeof(cslua_opcall_off),
             1,
             (char*)"",
-            (char*)"TNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN",
+            (char*)"TNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN"
+            "NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN"
+            "NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN"
+            "NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN",
             (SUBR) cslua_opcall_off::init_,
             (SUBR) 0,
             (SUBR) 0,
@@ -591,7 +606,10 @@ extern "C"
             sizeof(cslua_opcall_off),
             3,
             (char*)"",
-            (char*)"TNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN",
+            (char*)"TNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN"
+            "NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN"
+            "NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN"
+            "NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN",
             (SUBR) cslua_opcall_off::init_,
             (SUBR) cslua_opcall_off::kontrol_,
             (SUBR) 0,
@@ -601,7 +619,10 @@ extern "C"
             sizeof(cslua_opcall_off),
             5,
             (char*)"",
-            (char*)"TNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN",
+            (char*)"TNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN"
+            "NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN"
+            "NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN"
+            "NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN",
             (SUBR) cslua_opcall_off::init_,
             (SUBR) 0,
             (SUBR) cslua_opcall_off::audio_,
diff --git a/Opcodes/Vosim.c b/Opcodes/Vosim.c
index fb623e9..ea1c092 100644
--- a/Opcodes/Vosim.c
+++ b/Opcodes/Vosim.c
@@ -19,7 +19,9 @@
  * a new pulse should start, and that pulseinc can be negative.
  */
 
-#include "csdl.h"
+//#include "csdl.h"
+#include "csoundCore.h"
+#include "interlocks.h"
 #include <math.h>
 #include <limits.h>
 
@@ -164,9 +166,9 @@ int vosim(CSOUND* csound, VOSIM *p)
 
 #define S(x)    sizeof(x)
 
-static OENTRY localops[] = {
-  { "vosim", S(VOSIM), 5, "a", "kkkkkkio", (SUBR)vosimset, NULL, (SUBR)vosim }
+static OENTRY vosim_localops[] = {
+  { "vosim", S(VOSIM), TR|5, "a", "kkkkkkio", (SUBR)vosimset, NULL, (SUBR)vosim }
 };
 
 
-LINKAGE
+LINKAGE1(vosim_localops)
diff --git a/Opcodes/ambicode.c b/Opcodes/ambicode.c
index 449016d..709a8d3 100644
--- a/Opcodes/ambicode.c
+++ b/Opcodes/ambicode.c
@@ -714,9 +714,9 @@ static int aambideco(CSOUND *csound, AMBID *p)
 #define S(x)    sizeof(x)
 
 static OENTRY localops[] = {
-  { "bformenc", S(AMBIC), 5, "mmmmmmmmmmmmmmmm", "akkPPPP",
+  { "bformenc", S(AMBIC), DP|5, "mmmmmmmmmmmmmmmm", "akkPPPP",
                             (SUBR)iambicode, NULL, (SUBR)aambicode },
-  { "bformdec", S(AMBID), 5, "mmmmmmmm", "iaaay",
+  { "bformdec", S(AMBID), DP|5, "mmmmmmmm", "iaaay",
                             (SUBR)iambideco, NULL, (SUBR)aambideco }
 };
 
diff --git a/Opcodes/ambicode1.c b/Opcodes/ambicode1.c
index 3d2411e..6efed2a 100644
--- a/Opcodes/ambicode1.c
+++ b/Opcodes/ambicode1.c
@@ -28,7 +28,9 @@
     02111-1307 USA
 */
 
-#include "csdl.h"
+// #include "csdl.h"
+#include "csoundCore.h"        
+#include "interlocks.h"
 #include <assert.h>
 #include <math.h>
 
@@ -467,12 +469,12 @@ abformdec(CSOUND * csound, AMBID * p) {
 
 #define S(x) sizeof(x)
 
-static OENTRY localops[] = {
+static OENTRY ambicode1_localops[] = {
   { "bformenc1", S(AMBIC), 5, "mmmmmmmmmmmmmmmm", "akk",
                 (SUBR)ibformenc, NULL, (SUBR)abformenc },
   { "bformdec1", S(AMBID), 5, "mmmmmmmm", "iy",
-                (SUBR)ibformdec, NULL, (SUBR)abformdec }
+    (SUBR)ibformdec, NULL, (SUBR)abformdec },
 };
 
-LINKAGE
+LINKAGE1(ambicode1_localops)
 
diff --git a/Opcodes/babo.c b/Opcodes/babo.c
index 91220ef..b6e3c54 100644
--- a/Opcodes/babo.c
+++ b/Opcodes/babo.c
@@ -123,9 +123,11 @@ input  |    |------>|
                     Move static fn declarations out of function
  */
 
-#include "csdl.h"
+//#include "csdl.h"
+#include "csoundCore.h"
 #include "babo.h"
 #include <math.h>
+#include "interlocks.h"
 
 #if !defined(FLT_MAX)
 #define FLT_MAX         (1.0e38)
@@ -818,9 +820,9 @@ babo(CSOUND *csound, void *entry)
 
 #define S(x)    sizeof(x)
 
-static OENTRY localops[] = {
-{ "babo",   S(BABO), 5, "aa", "akkkiiijj",(SUBR)baboset, NULL, (SUBR)babo   }
+static OENTRY babo_localops[] = {
+  { "babo",   S(BABO), TR|5, "aa", "akkkiiijj",(SUBR)baboset, NULL, (SUBR)babo   },
 };
 
-LINKAGE
+LINKAGE1(babo_localops)
 
diff --git a/Opcodes/babo.h b/Opcodes/babo.h
index 345c5dc..850340f 100644
--- a/Opcodes/babo.h
+++ b/Opcodes/babo.h
@@ -38,8 +38,6 @@
 #if !defined(__babo_h__)
 #   define  __babo_h__
 
-#include "csdl.h"
-
 #define BABO_NODES     (15) /* Number of nodes of feedback delay network    */
 #define BABO_TAPS       (6) /* Number of taps in the early reflections line */
 
diff --git a/Opcodes/bilbar.c b/Opcodes/bilbar.c
index 00ae89f..9e9f25a 100644
--- a/Opcodes/bilbar.c
+++ b/Opcodes/bilbar.c
@@ -21,7 +21,8 @@
     02111-1307 USA
 */
 
-#include "csdl.h"
+//#include "csdl.h"
+#include "csoundCore.h"
 #include <math.h>
 
 /* %% bar sound synthesis translated from Mathlab and much changed */
@@ -547,12 +548,12 @@ int play_pp(CSOUND *csound, CSPP *p)
 
 #define S(x)    sizeof(x)
 
-static OENTRY localops[] = {
+static OENTRY bilbar_localops[] = {
     {"barmodel", S(BAR), 5, "a", "kkiikiiii", (SUBR) bar_init, NULL,
      (SUBR) bar_run},
     { "prepiano", S(CSPP), 5, "mm", "iiiiiikkiiiiiiioo",
-     (SUBR)init_pp, NULL, (SUBR)play_pp }
+      (SUBR)init_pp, NULL, (SUBR)play_pp },
 };
 
-LINKAGE
+LINKAGE1(bilbar_localops)
 
diff --git a/Opcodes/biquad.c b/Opcodes/biquad.c
index db25233..99d0b82 100644
--- a/Opcodes/biquad.c
+++ b/Opcodes/biquad.c
@@ -1296,8 +1296,8 @@ static OENTRY localops[] = {
 { "moogvcf2", S(MOOGVCF),5, "a", "axxoo", (SUBR)moogvcfset, NULL, (SUBR)moogvcf },
 { "rezzy", S(REZZY),     5, "a", "axxoo", (SUBR)rezzyset, NULL, (SUBR)rezzy },
 { "bqrez", S(REZZY),     5, "a", "axxoo", (SUBR)bqrezset, NULL, (SUBR)bqrez },
-{ "distort1", S(DISTORT),4, "a", "akkkko",  NULL,   NULL,   (SUBR)distort   },
-{ "vco", S(VCO),         5, "a", "xxiVppovoo",(SUBR)vcoset, NULL, (SUBR)vco },
+{ "distort1", S(DISTORT),TR|4, "a", "akkkko",  NULL,   NULL,   (SUBR)distort   },
+{ "vco", S(VCO),      TR|5, "a", "xxiVppovoo",(SUBR)vcoset, NULL, (SUBR)vco },
 { "tbvcf", S(TBVCF),     5, "a", "axxkkp",  (SUBR)tbvcfset, NULL, (SUBR)tbvcf   },
 { "planet", S(PLANET),5,"aaa","kkkiiiiiiioo", (SUBR)planetset, NULL, (SUBR)planet},
 { "pareq", S(PAREQ),     5, "a", "akkkoo",(SUBR)pareqset, NULL, (SUBR)pareq },
diff --git a/Opcodes/bowedbar.c b/Opcodes/bowedbar.c
index e7acb39..73e9d39 100644
--- a/Opcodes/bowedbar.c
+++ b/Opcodes/bowedbar.c
@@ -29,8 +29,8 @@
 /*    Towards Physical Modelling of Bar      */
 /*    Percussion Instruments", ICMC'99       */
 /*********************************************/
-
-#include "csdl.h"
+// #include "csdl.h"
+#include "csoundCore.h"
 #include "bowedbar.h"
 
 /* Number of banded waveguide modes */
@@ -95,7 +95,7 @@ int bowedbarset(CSOUND *csound, BOWEDBAR *p)
         p->length = (int32) (csound->esr / *p->frequency + FL(1.0));
       else {
         csound->Warning(csound,
-                        Str("unknown lowest frequency for bowed string -- "
+                        Str("unknown lowest frequency for bowed bar -- "
                             "assuming 50Hz\n"));
         p->length = (int32) (csound->esr / FL(50.0) + FL(1.0));
       }
diff --git a/Opcodes/brass.h b/Opcodes/brass.h
index 7636d73..8acad7c 100644
--- a/Opcodes/brass.h
+++ b/Opcodes/brass.h
@@ -40,7 +40,7 @@
 #define __brass_h
 
 #include "physutil.h"
-#include "csdl.h"
+
 #include <math.h>
 
 /*******************************************/
diff --git a/Opcodes/chua/ChuaOscillator.cpp b/Opcodes/chua/ChuaOscillator.cpp
index fb845ca..e8a681c 100644
--- a/Opcodes/chua/ChuaOscillator.cpp
+++ b/Opcodes/chua/ChuaOscillator.cpp
@@ -87,18 +87,22 @@
 //     k1(2) = (G*(M(1) - M(2)) + M(3))/C2;
 //     k1(3) = (-(M(2) + R0*M(3)))/L;
 //     % Round Two
-//     k2(1) = (G*(M(2) + h2*k1(2) - (M(1) + h2*k1(1))) - gnor(M(1) + h2*k1(1),sys_variables))/C1;
+//     k2(1) = (G*(M(2) + h2*k1(2) - (M(1) + h2*k1(1))) - gnor(M(1) +
+//              h2*k1(1),sys_variables))/C1;
 //     k2(2) = (G*(M(1) + h2*k1(1) - (M(2) + h2*k1(2))) + M(3) + h2*k1(3))/C2;
 //     k2(3) = (-(M(2) + h2*k1(2) + R0*(M(3) + h2*k1(3))))/L;
 //     % Round Three
-//     k3(1) = (G*(M(2) + h2*k2(2) - (M(1) + h2*k2(1))) - gnor(M(1) + h2*k2(1),sys_variables))/C1;
+//     k3(1) = (G*(M(2) + h2*k2(2) - (M(1) + h2*k2(1))) - gnor(M(1) +
+//              h2*k2(1),sys_variables))/C1;
 //     k3(2) = (G*(M(1) + h2*k2(1) - (M(2) + h2*k2(2))) + M(3) + h2*k2(3))/C2;
 //     k3(3) = (-(M(2) + h2*k2(2) + R0*(M(3) + h2*k2(3))))/L;
 //     % Round Four
-//     k4(1) = (G*(M(2) + h*k3(2) - (M(1) + h*k3(1))) - gnor(M(1) + h*k3(1),sys_variables))/C1;
+//     k4(1) = (G*(M(2) + h*k3(2) - (M(1) + h*k3(1))) - gnor(M(1) + 
+//              h*k3(1),sys_variables))/C1;
 //     k4(2) = (G*(M(1) + h*k3(1) - (M(2) + h*k3(2))) + M(3) + h*k3(3))/C2;
 //     k4(3) = (-(M(2) + h*k3(2) + R0*(M(3) + h*k3(3))))/L;
-//     M = M + (k1 + 2*k2 + 2*k3 + k4)*(h6); %Finishes integration and assigns values to M(1),
+// %Finishes integration and assigns values to M(1),
+//     M = M + (k1 + 2*k2 + 2*k3 + k4)*(h6); 
 //                                           %M(2) and M(3)
 //     TimeSeries(3,i+1) = M(1);  %TimeSeries 3 is V1
 //     TimeSeries(2,i+1) = M(2);  %TimeSeries 2 is V2
@@ -126,9 +130,12 @@ public:
   MYFLT *V2;
   MYFLT *V1;
   // INPUTS
-  // sys_variables = [system_vars(5:12),system_vars(23:26)]; % L,R0,C2,G,Ga,Gb,E,C1,a,b,c,d
-  // integ_variables = [system_vars(14:16),system_vars(1:2)]; % x0,y0,z0,dataset_size,step_size
-  // function TimeSeries = chuacc(L,R0,C2,G,Ga,Gb,C1,E,x0,y0,z0,dataset_size,step_size)
+  // % L,R0,C2,G,Ga,Gb,E,C1,a,b,c,d
+  // sys_variables = [system_vars(5:12),system_vars(23:26)]; 
+  // % x0,y0,z0,dataset_size,step_size
+  // integ_variables = [system_vars(14:16),system_vars(1:2)];
+  // function TimeSeries = chuacc(L,R0,C2,G,Ga,Gb,C1,E,x0,y0,z0,
+  //                              dataset_size,step_size)
   // Circuit elements.
   MYFLT *L_;
   MYFLT *R0_;
@@ -200,8 +207,11 @@ public:
     c = -0.00121;
     d = 0.0;
     ksmps = csound->GetKsmps(csound);
-    warn(csound, "ChuasOscillatorCubic::init: L: %f  R0: %f  C2: %f  G: %f  C1: %f  V1: %f  V2: %f  I3: %f step: %f\n", *L_, *R0_, *C2_, *G_, *C1_, M(1), M(2), M(3), h);
-    warn(csound, "ChuasOscillatorCubic::init: a: %f  b: %f  c: %f  d: %f\n", a, b, c, d);
+    warn(csound, "ChuasOscillatorCubic::init: L: %f  R0: %f  C2: %f  G: %f"
+         "  C1: %f  V1: %f  V2: %f  I3: %f step: %f\n", 
+         *L_, *R0_, *C2_, *G_, *C1_, M(1), M(2), M(3), h);
+    warn(csound, "ChuasOscillatorCubic::init: a: %f  b: %f  c: %f  d: %f\n", 
+         a, b, c, d);
     return OK;
   }
   int noteoff(CSOUND *csound)
@@ -327,22 +337,26 @@ public:
 // for i=1:dataset_size
 //     % Runge Kutta
 //     % Round One
-//     k1(1) = alpha*(M(2) - bnorplus1*M(1) - (.5)*(anor - bnor)*(abs(M(1) + 1) - abs(M(1) - 1)));
+//     k1(1) = alpha*(M(2) - bnorplus1*M(1) - (.5)*(anor - bnor)*(abs(M(1) + 1)
+//                                                              - abs(M(1) - 1)));
 //     k1(2) = M(1) - M(2) + M(3);
 //     k1(3) = -beta*M(2) - gammaloc*M(3);
 //     % Round Two
 //     temp = M(1) + h2*k1(1);
-//     k2(1) = alpha*(M(2) + h2*k1(2) - bnorplus1*temp - (.5)*(anor - bnor)*(abs(temp + 1) - abs(temp - 1)));
+//     k2(1) = alpha*(M(2) + h2*k1(2) - bnorplus1*temp - 
+//             (.5)*(anor - bnor)*(abs(temp + 1) - abs(temp - 1)));
 //     k2(2) = k1(2) + h2*(k1(1) - k1(2) + k1(3));
 //     k2(3) = omch2*k1(3) - bh2*k1(2);
 //     % Round Three
 //     temp = M(1) + h2*k2(1);
-//     k3(1) = alpha*(M(2) + h2*k2(2) - bnorplus1*temp - (.5)*(anor - bnor)*(abs(temp + 1) - abs(temp - 1)));
+//     k3(1) = alpha*(M(2) + h2*k2(2) - bnorplus1*temp -
+//             (.5)*(anor - bnor)*(abs(temp + 1) - abs(temp - 1)));
 //     k3(2) = k1(2) + h2*(k2(1) - k2(2) + k2(3));
 //     k3(3) = k1(3) - bh2*k2(2) - ch2*k2(3);
 //     % Round Four
 //     temp = M(1) + h*k3(1);
-//     k4(1) = alpha*(M(2) + h*k3(2) - bnorplus1*temp - (.5)*(anor - bnor)*(abs(temp + 1) - abs(temp - 1)));
+//     k4(1) = alpha*(M(2) + h*k3(2) - bnorplus1*temp - 
+//             (.5)*(anor - bnor)*(abs(temp + 1) - abs(temp - 1)));
 //     k4(2) = k1(2) + h*(k3(1) - k3(2) + k3(3));
 //     k4(3) = k1(3) - bh*k3(2) - ch*k3(3);
 //     M = M + (k1 + 2*k2 + 2*k3 + k4)*(h6);
@@ -361,8 +375,10 @@ public:
   MYFLT *V1;
   // INPUTS
   // sys_variables = system_vars(5:12); % L,R0,C2,G,Ga,Gb,E,C1
-  // integ_variables = [system_vars(14:16),system_vars(1:2)]; % x0,y0,z0,dataset_size,step_size
-  // function TimeSeries = chuacc(L,R0,C2,G,Ga,Gb,C1,E,x0,y0,z0,dataset_size,step_size)
+  // % x0,y0,z0,dataset_size,step_size
+  // integ_variables = [system_vars(14:16),system_vars(1:2)];
+  // function TimeSeries = chuacc(L,R0,C2,G,Ga,Gb,C1,E,x0,y0,z0,
+  //                              dataset_size,step_size)
   // Circuit elements.
   MYFLT *L_;
   MYFLT *R0_;
@@ -429,7 +445,11 @@ public:
     // M(3) = TimeSeries(1)/(E*G);
     M(3) = *I3_ / (*E_ * *G_);
     ksmps = csound->GetKsmps(csound);
-    warn(csound, "ChuasOscillatorPiecewise::init: L: %f  R0: %f  C2: %f  G: %f  Ga: %f  Gb: %f  E: %f  C1: %f  M(1): %f  M(2): %f  M(3): %f step: %f\n", *L_, *R0_, *C2_, *G_, *Ga_, *Gb_, *E_, *C1_, M(1), M(2), M(3), step_size);
+    warn(csound, "ChuasOscillatorPiecewise::init: L: %f  R0: %f  C2: %f  G: "
+         "%f  Ga: %f  Gb: %f  E: %f  C1: %f  M(1): %f  M(2):"
+         " %f  M(3): %f step: %f\n",
+         *L_, *R0_, *C2_, *G_, *Ga_, *Gb_, *E_, *C1_,
+         M(1), M(2), M(3), step_size);
     return OK;
   }
   int noteoff(CSOUND *csound)
@@ -460,7 +480,8 @@ public:
     MYFLT &Gb = *Gb_;
     MYFLT &E = *E_;
     MYFLT &C1 = *C1_;
-    // Recompute Runge-Kutta stuff every kperiod in case kontrol variables have changed.
+    // Recompute Runge-Kutta stuff every kperiod in case kontrol variables
+    // have changed.
     step_size = *step_size_;
     // h = step_size*G/C2;
     h = step_size * G / C2;
@@ -493,22 +514,26 @@ public:
      // Standard 4th-order Runge-Kutta integration.
     for (size_t i = 0; i < ksmps; i++) {
       // Stage 1.
-      k1(1) = alpha*(M(2) - bnorplus1*M(1) - (.5)*(anor - bnor)*(abs(M(1) + 1) - abs(M(1) - 1)));
+      k1(1) = alpha*(M(2) - bnorplus1*M(1) -
+                     (.5)*(anor - bnor)*(abs(M(1) + 1) - abs(M(1) - 1)));
       k1(2) = M(1) - M(2) + M(3);
       k1(3) = -beta*M(2) - gammaloc*M(3);
       // Stage 2.
       temp = M(1) + h2*k1(1);
-      k2(1) = alpha*(M(2) + h2*k1(2) - bnorplus1*temp - (.5)*(anor - bnor)*(abs(temp + 1) - abs(temp - 1)));
+      k2(1) = alpha*(M(2) + h2*k1(2) - bnorplus1*temp -
+                     (.5)*(anor - bnor)*(abs(temp + 1) - abs(temp - 1)));
       k2(2) = k1(2) + h2*(k1(1) - k1(2) + k1(3));
       k2(3) = omch2*k1(3) - bh2*k1(2);
       // Stage 3.
       temp = M(1) + h2*k2(1);
-      k3(1) = alpha*(M(2) + h2*k2(2) - bnorplus1*temp - (.5)*(anor - bnor)*(abs(temp + 1) - abs(temp - 1)));
+      k3(1) = alpha*(M(2) + h2*k2(2) - bnorplus1*temp -
+                     (.5)*(anor - bnor)*(abs(temp + 1) - abs(temp - 1)));
       k3(2) = k1(2) + h2*(k2(1) - k2(2) + k2(3));
       k3(3) = k1(3) - bh2*k2(2) - ch2*k2(3);
       // Stage 4.
       temp = M(1) + h*k3(1);
-      k4(1) = alpha*(M(2) + h*k3(2) - bnorplus1*temp - (.5)*(anor - bnor)*(abs(temp + 1) - abs(temp - 1)));
+      k4(1) = alpha*(M(2) + h*k3(2) - bnorplus1*temp -
+                     (.5)*(anor - bnor)*(abs(temp + 1) - abs(temp - 1)));
       k4(2) = k1(2) + h*(k3(1) - k3(2) + k3(3));
       k4(3) = k1(3) - bh*k3(2) - ch*k3(3);
       M = M + (k1 + 2*k2 + 2*k3 + k4)*(h6);
@@ -532,8 +557,8 @@ extern "C"
 //         (char*)"chuac",
 //         sizeof(ChuasOscillatorCubic),
 //         5,
-//      // kL,       kR0,  kC2,     kG,       kC1,       iI3, iV2,   iV1,  kstep_size
-//      // 0.00945,  7.5,  2e-007,  0.00105,  1.5e-008,  0,   -0.1,  0.1,  5e-6
+//    // kL,       kR0,  kC2,     kG,       kC1,       iI3, iV2,   iV1,  kstep_size
+//    // 0.00945,  7.5,  2e-007,  0.00105,  1.5e-008,  0,   -0.1,  0.1,  5e-6
 //         (char*)"aaa",
 //         (char*)"kkkkkiiik",
 //         (SUBR) ChuasOscillatorCubic::init_,
@@ -544,8 +569,10 @@ extern "C"
         (char*)"chuap",
         sizeof(ChuasOscillatorPiecewise),
         5,
-        // kL,       kR0,  kC2,     kG,       kGa, kGb,       kE,         kC1,       iI3, iV2,   iV1,  kstep_size
-        // 0.00945,  7.5,  2e-007,  0.00105,  0,   -0.00121,  1.76e-005,  1.5e-008,  0,   -0.1,  0.1,  5e-6
+        // kL,       kR0,  kC2,     kG,       kGa, kGb,       kE,         kC1,
+        //                  iI3, iV2,   iV1,  kstep_size
+        // 0.00945,  7.5,  2e-007,  0.00105,  0,   -0.00121,  1.76e-005,  1.5e-008,
+        //                   0,   -0.1,  0.1,  5e-6
         (char*)"aaa",
         (char*)"kkkkkkkkiiik",
         (SUBR) ChuasOscillatorPiecewise::init_,
diff --git a/Opcodes/compress.c b/Opcodes/compress.c
index 5184a0c..8d29d0a 100644
--- a/Opcodes/compress.c
+++ b/Opcodes/compress.c
@@ -21,7 +21,9 @@
     02111-1307 USA
 */
 
-#include "csdl.h"
+//#include "csdl.h"
+#include "csoundCore.h"
+#include "interlocks.h"
 
 typedef struct {
         OPDS    h;
@@ -254,12 +256,12 @@ static int distort(CSOUND *csound, DIST *p)
 
 #define S(x)    sizeof(x)
 
-static OENTRY localops[] = {
+static OENTRY compress_localops[] = {
   { "compress", S(CMPRS), 5, "a", "aakkkkkki",
     (SUBR) compset, NULL, (SUBR) compress },
-  { "distort", S(DIST), 5, "a", "akiqo",
-    (SUBR) distset, NULL, (SUBR) distort }
+  { "distort", S(DIST), TR|5, "a", "akiqo",
+    (SUBR) distset, NULL, (SUBR) distort },
 };
 
-LINKAGE
+LINKAGE1(compress_localops)
 
diff --git a/Opcodes/control.c b/Opcodes/control.c
index 30cdd0a..9713387 100644
--- a/Opcodes/control.c
+++ b/Opcodes/control.c
@@ -285,13 +285,13 @@ static int textflash(CSOUND *csound, TXTWIN *p)
 
 #define S(x)    sizeof(x)
 
-static OENTRY localops[] = {
+static OENTRY control_localops[] = {
 { "control",  S(CNTRL),  3, "k", "k",  (SUBR) cntrl_set, (SUBR) control, NULL },
 { "setctrl",  S(SCNTRL), 1, "",  "iTi", (SUBR) ocontrol, NULL, NULL           },
 { "button",   S(CNTRL),  3, "k", "k",  (SUBR) button_set, (SUBR) button, NULL },
 { "checkbox", S(CNTRL),  3, "k", "k",   (SUBR) check_set, (SUBR) check, NULL  },
-{ "flashtxt", S(TXTWIN), 1, "",  "iT",  (SUBR) textflash, NULL, NULL          }
+{ "flashtxt", S(TXTWIN), 1, "",  "iT",  (SUBR) textflash, NULL, NULL          },
 };
 
-LINKAGE
+LINKAGE1(control_localops)
 
diff --git a/Opcodes/cpumeter.c b/Opcodes/cpumeter.c
index 474d410..38e8911 100644
--- a/Opcodes/cpumeter.c
+++ b/Opcodes/cpumeter.c
@@ -15,7 +15,10 @@
  * GNU Library General Public License for more details.
  * 
  */
-#include "csdl.h"
+
+#if defined(__MACH__) || defined(LINUX)
+ 
+#include "csoundCore.h"
 #include <sys/resource.h>
 #include <sys/time.h>
 #include <sys/types.h>
@@ -28,7 +31,8 @@
 #include <string.h>
 
 #include <unistd.h>
-#include <values.h>
+#include <limits.h>
+#include <float.h>
 
 /*######  Miscellaneous global stuff  ####################################*/
 #define SMLBUFSIZ (512)
@@ -199,9 +203,11 @@ static int cpupercent(CSOUND *csound, CPUMETER* p)
 
 #define S(x)    sizeof(x)
 
-static OENTRY localops[] = {
+static OENTRY cpumeter_localops[] = {
   { "cpumeter",   S(CPUMETER),   5, "kzzzzzzzz", "i",
-    (SUBR)cpupercent_init, (SUBR)cpupercent, NULL   }
+    (SUBR)cpupercent_init, (SUBR)cpupercent, NULL   },
 };
 
-LINKAGE
+LINKAGE1(cpumeter_localops)
+
+#endif
diff --git a/Opcodes/cross2.c b/Opcodes/cross2.c
index 05ffa4e..caa471a 100644
--- a/Opcodes/cross2.c
+++ b/Opcodes/cross2.c
@@ -24,6 +24,7 @@
 #include "stdopcod.h"
 #include "ptrigtbl.h"
 #include "fhtfun.h"
+#include "interlocks.h"
 #include <math.h>
 
 #define CH_THRESH       1.19209e-7
@@ -429,7 +430,7 @@ static int Xsynth(CSOUND *csound, CON *p)
 #define S(x)    sizeof(x)
 
 static OENTRY localops[] = {
-{ "cross2",  S(CON), 5, "a", "aaiiik",(SUBR)Xsynthset, NULL, (SUBR)Xsynth}
+{ "cross2",  S(CON), TR|5, "a", "aaiiik",(SUBR)Xsynthset, NULL, (SUBR)Xsynth}
 };
 
 int cross2_init_(CSOUND *csound)
diff --git a/Opcodes/crossfm.c b/Opcodes/crossfm.c
index 6537379..ba4ed7e 100644
--- a/Opcodes/crossfm.c
+++ b/Opcodes/crossfm.c
@@ -21,7 +21,8 @@
     02111-1307 USA
 */
 
-#include "csdl.h"
+#include "csoundCore.h"
+#include "interlocks.h"
 #include "crossfm.h"
 #include <math.h>
 
@@ -422,14 +423,15 @@ int xfmpmi(CSOUND *csound, CROSSFM *p)
 
 #define S sizeof
 
-static OENTRY localops[] = {
-  { "crossfm", S(CROSSFM), 5, "aa", "xxxxkiioo", (SUBR)xfmset, NULL, (SUBR)xfm },
-  { "crossfmi", S(CROSSFM), 5, "aa", "xxxxkiioo", (SUBR)xfmset, NULL, (SUBR)xfmi },
-  { "crosspm", S(CROSSFM), 5, "aa", "xxxxkiioo", (SUBR)xfmset, NULL, (SUBR)xpm },
-  { "crosspmi", S(CROSSFM), 5, "aa", "xxxxkiioo", (SUBR)xfmset, NULL, (SUBR)xpmi },
-  { "crossfmpm", S(CROSSFM), 5, "aa", "xxxxkiioo", (SUBR)xfmset, NULL, (SUBR)xfmpm },
-  { "crossfmpmi", S(CROSSFM), 5, "aa", "xxxxkiioo", (SUBR)xfmset, NULL, (SUBR)xfmpmi }
+static OENTRY crossfm_localops[] = {
+  { "crossfm", S(CROSSFM), TR|5, "aa", "xxxxkiioo", (SUBR)xfmset, NULL, (SUBR)xfm },
+  { "crossfmi", S(CROSSFM), TR|5, "aa", "xxxxkiioo", (SUBR)xfmset, NULL, (SUBR)xfmi },
+  { "crosspm", S(CROSSFM), TR|5, "aa", "xxxxkiioo", (SUBR)xfmset, NULL, (SUBR)xpm },
+  { "crosspmi", S(CROSSFM), TR|5, "aa", "xxxxkiioo", (SUBR)xfmset, NULL, (SUBR)xpmi },
+  { "crossfmpm", S(CROSSFM), TR|5, "aa", "xxxxkiioo", (SUBR)xfmset, NULL, (SUBR)xfmpm },
+  { "crossfmpmi", S(CROSSFM),TR| 5, "aa", "xxxxkiioo", (SUBR)xfmset, NULL, (SUBR)xfmpmi },
 };
 
-LINKAGE
+LINKAGE1(crossfm_localops)
+
 
diff --git a/Opcodes/date.c b/Opcodes/date.c
index 72802bf..b4756c5 100644
--- a/Opcodes/date.c
+++ b/Opcodes/date.c
@@ -40,7 +40,7 @@ static int datemyfltset(CSOUND *csound, DATEMYFLT *p)
 #ifdef USE_DOUBLE
     const time_t base = 0;
 #else
-    /*    time_t base = 946684800;    /* 1 Jan 2000 */
+    /*    time_t base = 946684800; */  /* 1 Jan 2000 */
     const time_t base = 1262304000;    /* 1 Jan 2010 */
 #endif
     *p->time_ = (MYFLT) (time(NULL)-base);
@@ -73,11 +73,11 @@ static int datestringset(CSOUND *csound, DATESTRING *p)
     return OK;
 }
 
-static OENTRY localops[] =
+static OENTRY date_localops[] =
 {
     { "date",    sizeof(DATEMYFLT),     1,     "i",    "",(SUBR)datemyfltset, NULL, NULL },
     { "dates",   sizeof(DATESTRING),    1,     "S",    "j",(SUBR)datestringset, NULL, NULL },
 };
 
-LINKAGE
+LINKAGE1(date_localops)
 
diff --git a/Opcodes/doppler.cpp b/Opcodes/doppler.cpp
index c4cab1e..e8be39f 100644
--- a/Opcodes/doppler.cpp
+++ b/Opcodes/doppler.cpp
@@ -152,7 +152,7 @@ public:
 
     std::vector<MYFLT> *sourceBuffer = new std::vector<MYFLT>;
     sourceBuffer->resize(blockSize);
-    for (size_t inputFrame = 0; inputFrame < blockSize; inputFrame++) {
+    for (size_t inputFrame = 0; inputFrame<(unsigned int)blockSize; inputFrame++) {
       (*sourceBuffer)[inputFrame] = audioInput[inputFrame];
     }
     audioBufferQueue->push_back(sourceBuffer);
@@ -179,7 +179,9 @@ public:
       log(csound, "Doppler::kontrol: kSourcePosition:       %10.3f\n", *kSourcePosition);
     }
 
-    for (size_t outputFrame = 0; outputFrame < blockSize; outputFrame++) {
+    for (size_t outputFrame = 0;
+         outputFrame < (unsigned int)blockSize;
+         outputFrame++) {
       MYFLT position = smoothingFilter->update(targetPosition);
       MYFLT distance = std::fabs(position);
       MYFLT sourceTime = relativeIndex - (distance * samplesPerDistance);
@@ -219,6 +221,14 @@ public:
             delete sourcePositionQueue;
             sourcePositionQueue = 0;
         }
+        if (audioInterpolator) {
+            delete audioInterpolator;
+            audioInterpolator = 0;
+        }
+        if (smoothingFilter) {
+            delete smoothingFilter;
+            smoothingFilter = 0;
+        }
         return result;
     }
 };
diff --git a/Opcodes/dsputil.c b/Opcodes/dsputil.c
index 168531f..acd5f4c 100644
--- a/Opcodes/dsputil.c
+++ b/Opcodes/dsputil.c
@@ -128,7 +128,7 @@ void FetchIn(
     MYFLT   pos)        /* fractional frame we want */
 {
     int32    j;
-    float   *frm0, *frm1;
+    float   *frm_0, *frm_1;
     int32    base;
     MYFLT   frac;
 
@@ -136,21 +136,21 @@ void FetchIn(
     base = (int32) pos;          /* index of basis frame of interpolation */
     frac = (MYFLT) pos - (MYFLT) base;
     /* & how close to get to next */
-    frm0 = inp  + ((int32) fsize + 2L) * base;
-    frm1 = frm0 + ((int32) fsize + 2L);          /* addresses of both frames */
+    frm_0 = inp  + ((int32) fsize + 2L) * base;
+    frm_1 = frm_0 + ((int32) fsize + 2L);          /* addresses of both frames */
     if (frac != FL(0.0)) {      /* must have 2 cases to avoid poss seg vlns */
                                 /* and failed computes, else may interp     */
                                         /* bd valid data                    */
       for (j = 0; j <= fsize; j += 2) { /* mag/frq for just over 1/2        */
                                         /* Interpolate both mag and freq    */
-        buf[j     ] = frm0[j     ] + frac * (frm1[j     ] - frm0[j     ]);
-        buf[j + 1L] = frm0[j + 1L] + frac * (frm1[j + 1L] - frm0[j + 1L]);
+        buf[j     ] = frm_0[j     ] + frac * (frm_1[j     ] - frm_0[j     ]);
+        buf[j + 1L] = frm_0[j + 1L] + frac * (frm_1[j + 1L] - frm_0[j + 1L]);
       }
     }
     else {                  /* frac is 0.0 i.e. just copy the source frame */
       for (j = 0; j <= fsize; j += 2) { /* no need to interpolate */
-        buf[j     ] = frm0[j     ];
-        buf[j + 1L] = frm0[j + 1L];
+        buf[j     ] = frm_0[j     ];
+        buf[j + 1L] = frm_0[j + 1L];
       }
     }
 }
diff --git a/Opcodes/dssi4cs/src/dssi4cs.c b/Opcodes/dssi4cs/src/dssi4cs.c
index 5c7c31d..68c7b7f 100644
--- a/Opcodes/dssi4cs/src/dssi4cs.c
+++ b/Opcodes/dssi4cs/src/dssi4cs.c
@@ -1042,7 +1042,7 @@ int dssilist(CSOUND * csound, DSSILIST * p)
     return OK;
 }
 
-static OENTRY localops[] = {
+static OENTRY dssi_localops[] = {
     {"dssiinit", sizeof(DSSIINIT), 1, "i", "Tip", (SUBR) dssiinit, NULL, NULL }
     ,
     {"dssiactivate", sizeof(DSSIACTIVATE), 3, "", "ik",
@@ -1068,5 +1068,5 @@ static OENTRY localops[] = {
 #endif
 };
 
-LINKAGE
+LINKAGE1(dssi_localops)
 
diff --git a/Opcodes/eqfil.c b/Opcodes/eqfil.c
index ed13910..13b3f11 100644
--- a/Opcodes/eqfil.c
+++ b/Opcodes/eqfil.c
@@ -21,7 +21,11 @@
     02111-1307 USA
 */
 
-#include "csdl.h"
+// #include "csdl.h"
+#include "csoundCore.h"
+#ifdef PARCS
+#include "interlocks.h"
+#endif
 
 typedef struct _equ {
   OPDS h;
@@ -77,9 +81,9 @@ static int equ_process(CSOUND *csound, equ *p)
     return OK;
 }
 
-static OENTRY localops[] = {
+static OENTRY eqfil_localops[] = {
   {"eqfil", sizeof(equ), 5,
-   "a", "akkko", (SUBR)equ_init, NULL, (SUBR)equ_process}
+   "a", "akkko", (SUBR)equ_init, NULL, (SUBR)equ_process},
 };
 
-LINKAGE
+LINKAGE1(eqfil_localops)
diff --git a/Opcodes/fareygen.c b/Opcodes/fareygen.c
index f459b9f..ed49223 100644
--- a/Opcodes/fareygen.c
+++ b/Opcodes/fareygen.c
@@ -269,6 +269,7 @@ static int PrimeFactors (int n, PFACTOR p[])
           ++j;
         }
     }
+    return j;
 }
 
 static void GenerateFarey (int n, RATIO flist[], int size) {
@@ -291,9 +292,10 @@ static void GenerateFarey (int n, RATIO flist[], int size) {
 }
 
 
-static NGFENS localfgens[] = {
+static NGFENS farey_fgens[] = {
   { "farey", fareytable },
   { NULL, NULL }
 };
 
-FLINKAGE
+FLINKAGE1(farey_fgens)
+
diff --git a/Opcodes/fareyseq.c b/Opcodes/fareyseq.c
index 94e7282..09189b4 100644
--- a/Opcodes/fareyseq.c
+++ b/Opcodes/fareyseq.c
@@ -26,7 +26,8 @@
     by Robin Whittle, see source OOps/ugrw1.c
 */
 
-#include "csdl.h"
+#include "csoundCore.h"
+#include "interlocks.h"
 #include <math.h>
 
 const int MAX_PFACTOR = 16;
@@ -355,10 +356,7 @@ static int dotablefilter (CSOUND *csound, TABFILT *p)
     MYFLT *pdest, *ps;
     MYFLT threshold;
     int32 ftype;
-    MYFLT remember1st = FL(0.0);
     MYFLT previous = FL(0.0);
-    MYFLT oneminuslast = FL(0.0);
-    MYFLT wraparoundioi = FL(0.0);
     int32 sourcelength;
 
     ftype = (int32) *p->ftype;
@@ -600,6 +598,7 @@ int PrimeFactors (int n, PFACTOR p[])
             ++pcount; ++j;
           }
       }
+    return j;
 }
 
 /* ----------------------------------------------- *
@@ -733,14 +732,14 @@ void float_to_cfrac (double r, int n, int a[], int p[], int q[])
 
 #define S sizeof
 
-static OENTRY localops[] = {
-    {"tablefilteri", S (TABFILT), 1, "i", "iiii", (SUBR) tableifilter, NULL, NULL},
-    {"tablefilter", S (TABFILT), 2, "k", "kkkk",
+static OENTRY fareyseq_localops[] = {
+    {"tablefilteri", S (TABFILT),TB|1, "i", "iiii", (SUBR) tableifilter,NULL,NULL},
+    {"tablefilter", S (TABFILT), TB|2, "k", "kkkk",
                          (SUBR) tablefilterset, (SUBR) tablefilter, NULL},
-    {"fareyleni", S (FAREYLEN), 1, "i", "i", (SUBR) fareylen, NULL, NULL},
-    {"fareylen", S (FAREYLEN), 2, "k", "k", NULL, (SUBR) fareylen, NULL},
-    {"tableshufflei", S (TABSHUFFLE), 1, "", "i", (SUBR) tableshuffle, NULL, NULL},
-    {"tableshuffle", S (TABSHUFFLE), 2, "", "k", (SUBR) tableshuffleset, (SUBR) tableshuffle, NULL}
+    {"fareyleni", S (FAREYLEN), TR|1, "i", "i", (SUBR) fareylen, NULL, NULL},
+    {"fareylen", S (FAREYLEN), TR|2, "k", "k", NULL, (SUBR) fareylen, NULL},
+    {"tableshufflei", S (TABSHUFFLE), TB|1, "", "i", (SUBR) tableshuffle, NULL, NULL},
+    {"tableshuffle", S (TABSHUFFLE), TB|2, "", "k", (SUBR) tableshuffleset, (SUBR) tableshuffle, NULL},
 };
 
-LINKAGE
+LINKAGE1(fareyseq_localops)
diff --git a/Opcodes/fm4op.c b/Opcodes/fm4op.c
index 891e404..417b077 100644
--- a/Opcodes/fm4op.c
+++ b/Opcodes/fm4op.c
@@ -33,8 +33,8 @@
 /*  should worry about this (making money) worry away.   */
 /*                                                       */
 /*********************************************************/
-
-#include "csdl.h"
+// #include "csdl.h"
+#include "csoundCore.h"
 #include "fm4op.h"
 
 /***********************************************************/
diff --git a/Opcodes/fout.c b/Opcodes/fout.c
index b31f4c6..e65d2a8 100644
--- a/Opcodes/fout.c
+++ b/Opcodes/fout.c
@@ -54,6 +54,7 @@ static CS_NOINLINE int fout_deinit_callback(CSOUND *csound, void *p_)
           pp->name = (char*) NULL;
           pp->do_scale = 0;
           pp->refCount = 0U;
+      
           if (pp->fd != NULL) {
             if ((csound->oparms->msglevel & 7) == 7)
               csound->Message(csound, Str("Closing file '%s'...\n"),
@@ -166,7 +167,7 @@ static CS_NOINLINE int fout_open_file(CSOUND *csound, FOUT_FILE *p, void *fp,
         csound->Free(csound, name);
         return -1;
       }
-      /*      setvbuf(f, (char *) NULL, _IOLBF, 0); /* Ensure line buffering */
+      /* setvbuf(f, (char *) NULL, _IOLBF, 0); */ /* Ensure line buffering */
       pp->file_opened[idx].raw = f;
       pp->file_opened[idx].fd = fd;
     }
@@ -451,7 +452,7 @@ static int ficlose_opcode(CSOUND *csound, FICLOSE *p)
     }
     else {
       FOUT_FILE tmp;
-      pp->file_opened[idx].refCount = 0x80000001U;
+      pp->file_opened[idx].refCount = 1; /*ref count was set to 0x80000001U, but it needs to be 1 */
       memset(&tmp, 0, sizeof(FOUT_FILE));
       tmp.h.insdshead = p->h.insdshead;
       tmp.idx = idx + 1;
@@ -686,7 +687,7 @@ static int kinfile(CSOUND *csound, KINFILE *p)
 
     if (p->flag) {
       sf_seek(p->f.sf, p->currpos, SEEK_SET);
-      p->currpos++;
+       p->currpos++;
 #ifndef USE_DOUBLE
       n = (int) sf_readf_float(p->f.sf, (float*) pp->buf, 1);
 #else
diff --git a/Opcodes/ftconv.c b/Opcodes/ftconv.c
index c68cbca..e410060 100644
--- a/Opcodes/ftconv.c
+++ b/Opcodes/ftconv.c
@@ -294,7 +294,7 @@ static int ftconv_perf(CSOUND *csound, FTCONV *p)
 int ftconv_init_(CSOUND *csound)
 {
     return csound->AppendOpcode(csound, "ftconv",
-                                (int) sizeof(FTCONV), 5, "mmmmmmmm", "aiiooo",
+                                (int) sizeof(FTCONV), TR|5, "mmmmmmmm", "aiiooo",
                                 (int (*)(CSOUND *, void *)) ftconv_init,
                                 (int (*)(CSOUND *, void *)) NULL,
                                 (int (*)(CSOUND *, void *)) ftconv_perf);
diff --git a/Opcodes/ftest.c b/Opcodes/ftest.c
index 07ee89a..79d936e 100644
--- a/Opcodes/ftest.c
+++ b/Opcodes/ftest.c
@@ -21,7 +21,8 @@
     02111-1307 USA
 */
 
-#include "csdl.h"
+//#include "csdl.h"
+#include "csoundCore.h"
 #include <math.h>
 
 static int tanhtable(FGDATA *ff, FUNC *ftp)
@@ -83,12 +84,12 @@ static int sonetable(FGDATA *ff, FUNC *ftp)
 }
 
 
-static NGFENS localfgens[] = {
+static NGFENS ftest_fgens[] = {
    { "tanh", tanhtable },
    { "exp", exptable },
    { "sone", sonetable },
    { NULL, NULL }
 };
 
-FLINKAGE
+FLINKAGE1(ftest_fgens)
 
diff --git a/Opcodes/ftgen.c b/Opcodes/ftgen.c
index 55d74a9..21fa8cb 100644
--- a/Opcodes/ftgen.c
+++ b/Opcodes/ftgen.c
@@ -494,14 +494,14 @@ static int ftsave_k(CSOUND *csound, FTLOAD_K *p)
 #define S(x)    sizeof(x)
 
 static OENTRY localops[] = {
-  { "ftgen",    S(FTGEN),     1,  "i",  "iiiTTm", (SUBR) ftgen, NULL, NULL    },
-  { "ftgentmp", S(FTGEN),     1,  "i",  "iiiiTm", (SUBR) ftgentmp, NULL, NULL },
-  { "ftfree",   S(FTFREE),    1,  "",   "ii",     (SUBR) ftfree, NULL, NULL   },
-  { "ftsave",   S(FTLOAD),    1,  "",   "Tim",    (SUBR) ftsave, NULL, NULL   },
-  { "ftload",   S(FTLOAD),    1,  "",   "Tim",    (SUBR) ftload, NULL, NULL   },
-  { "ftsavek",  S(FTLOAD_K),  3,  "",   "Tkim",   (SUBR) ftsave_k_set,
+  { "ftgen",    S(FTGEN),     TW|1,  "i",  "iiiTTm", (SUBR) ftgen, NULL, NULL    },
+  { "ftgentmp", S(FTGEN),     TW|1,  "i",  "iiiiTm", (SUBR) ftgentmp, NULL, NULL },
+  { "ftfree",   S(FTFREE),    TW|1,  "",   "ii",     (SUBR) ftfree, NULL, NULL   },
+  { "ftsave",   S(FTLOAD),    TR|1,  "",   "Tim",    (SUBR) ftsave, NULL, NULL   },
+  { "ftload",   S(FTLOAD),    TR|1,  "",   "Tim",    (SUBR) ftload, NULL, NULL   },
+  { "ftsavek",  S(FTLOAD_K),  TW|3,  "",   "Tkim",   (SUBR) ftsave_k_set,
                                                   (SUBR) ftsave_k, NULL       },
-  { "ftloadk",  S(FTLOAD_K),  3,  "",   "Tkim",   (SUBR) ftsave_k_set,
+  { "ftloadk",  S(FTLOAD_K),  TW|3,  "",   "Tkim",   (SUBR) ftsave_k_set,
                                                   (SUBR) ftload_k, NULL       }
 };
 
diff --git a/Opcodes/gab/gab.c b/Opcodes/gab/gab.c
index bc3947a..da4be2b 100644
--- a/Opcodes/gab/gab.c
+++ b/Opcodes/gab/gab.c
@@ -19,7 +19,8 @@
 /* This file includes the opcodes from newopcodes.c */
 /* TODO: Check if the authors (Peter Neubaeker and Jens Groh) are correct */
 
-/*printi removed? I can't find the corresponding OENTRY- Left them commented out */
+/*printi removed? I can't find the corresponding OENTRY- */
+/*Left them commented out */
 /*how should exitnow be safely implemented? */
 /*Check the zak opcodes */
 /*changed some comments to c-style */
@@ -29,6 +30,7 @@
 #include "csdl.h"
 #include "gab.h"
 #include <math.h>
+#include "interlocks.h"
 
 static int krsnsetx(CSOUND *csound, KRESONX *p)
   /* Gabriel Maldonado, modifies for arb order  */
@@ -187,7 +189,7 @@ static int fastabi(CSOUND *csound, FASTAB *p)
     else
       i = (int) *p->xndx;
     if (UNLIKELY(i >= ftp->flen || i<0)) {
-        return csound->PerfError(csound, Str("tab_i off end"));
+      return csound->PerfError(csound, Str("tab_i off end: table number: %d\n"), (int) *p->xfn);
     }
     *p->rslt =  ftp->ftable[i];
     return OK;
@@ -709,28 +711,28 @@ static int partial_maximum(CSOUND *csound,P_MAXIMUM *p)
     MYFLT *a = p->asig;
     MYFLT max = p->max;
     switch(flag) {
-    case 0: /* absolute maximum */
+    case 1: /* absolute maximum */
       for (n=0; n<nsmps; n++) {
         MYFLT temp;
         if ((temp = FABS(a[n])) > max) max = temp;
       }
       if (max > p->max) p->max = max;
       break;
-    case 1: /* actual maximum */
+    case 2: /* actual maximum */
       for (n=0; n<nsmps; n++) {
         if (a[n] > max) max = a[n];
       }
       if (max > p->max) p->max = max;
       break;
-    case 2: /* actual minimum */
+    case 3: /* actual minimum */
       for (n=0; n<nsmps; n++) {
         if (a[n] < max) max = a[n];
       }
       if (max < p->max) p->max = max;
       break;
-    case 3: { /* average */
+    case 4: { /* average */
         MYFLT temp = FL(0.0);
-        p->counter += n;
+        p->counter += nsmps;
         for (n=0; n<nsmps; n++) {
           temp += a[n];
         }
@@ -741,11 +743,12 @@ static int partial_maximum(CSOUND *csound,P_MAXIMUM *p)
       return csound->PerfError(csound, Str("max_k: invalid imaxflag value"));
     }
     if (*p->ktrig) {
-      if (flag == 3) {
+      if (flag == 4) {
         *p->kout = p->max / (MYFLT) p->counter;
         p->counter = 0;
       }
-      else *p->kout = p->max;
+      else
+        *p->kout = p->max;
       p->max = FL(0.0);
     }
     return OK;
@@ -789,31 +792,31 @@ static int mandel(CSOUND *csound,MANDEL *p)
 
 #define S(x)    sizeof(x)
 
-static OENTRY localops[] = {
+OENTRY gab_localops[] = {
   {"resonxk", S(KRESONX),    3,   "k",    "kkkooo",
                             (SUBR) krsnsetx, (SUBR) kresonx, NULL },
-  { "tab_i",S(FASTAB),       1,   "i",    "iio", (SUBR) fastabi, NULL, NULL },
-  { "tab",S(FASTAB),         7,   "s",    "xio",
+  { "tab_i",S(FASTAB),       TR|1,   "i",    "iio", (SUBR) fastabi, NULL, NULL },
+  { "tab",S(FASTAB),         TR|7,   "s",    "xio",
                             (SUBR) fastab_set, (SUBR)fastabk, (SUBR) fastab },
-  { "tabw_i",S(FASTAB),      1,   "",    "iiio", (SUBR) fastabiw, NULL, NULL },
-  { "tabw",S(FASTAB),        7,   "",    "xxio",
+  { "tabw_i",S(FASTAB),      TW|1,   "",    "iiio", (SUBR) fastabiw, NULL, NULL },
+  { "tabw",S(FASTAB),        TW|7,   "",    "xxio",
                             (SUBR)fastab_set, (SUBR)fastabkw, (SUBR)fastabw },
-  { "tb0_init", S(TB_INIT),  1,   "",      "i",    (SUBR)tab0_init},
-  { "tb1_init", S(TB_INIT),  1,   "",      "i",    (SUBR)tab1_init},
-  { "tb2_init", S(TB_INIT),  1,   "",      "i",    (SUBR)tab2_init},
-  { "tb3_init", S(TB_INIT),  1,   "",      "i",    (SUBR)tab3_init},
-  { "tb4_init", S(TB_INIT),  1,   "",      "i",    (SUBR)tab4_init},
-  { "tb5_init", S(TB_INIT),  1,   "",      "i",    (SUBR)tab5_init},
-  { "tb6_init", S(TB_INIT),  1,   "",      "i",    (SUBR)tab6_init},
-  { "tb7_init", S(TB_INIT),  1,   "",      "i",    (SUBR)tab7_init},
-  { "tb8_init", S(TB_INIT),  1,   "",      "i",    (SUBR)tab8_init},
-  { "tb9_init", S(TB_INIT),  1,   "",      "i",    (SUBR)tab9_init},
-  { "tb10_init", S(TB_INIT), 1,   "",      "i",    (SUBR)tab10_init},
-  { "tb11_init", S(TB_INIT), 1,   "",      "i",    (SUBR)tab11_init},
-  { "tb12_init", S(TB_INIT), 1,   "",      "i",    (SUBR)tab12_init},
-  { "tb13_init", S(TB_INIT), 1,   "",      "i",    (SUBR)tab13_init},
-  { "tb14_init", S(TB_INIT), 1,   "",      "i",    (SUBR)tab14_init},
-  { "tb15_init", S(TB_INIT), 1,   "",      "i",    (SUBR)tab15_init},
+  { "tb0_init", S(TB_INIT),  TR|1,   "",      "i",    (SUBR)tab0_init},
+  { "tb1_init", S(TB_INIT),  TR|1,   "",      "i",    (SUBR)tab1_init},
+  { "tb2_init", S(TB_INIT),  TR|1,   "",      "i",    (SUBR)tab2_init},
+  { "tb3_init", S(TB_INIT),  TR|1,   "",      "i",    (SUBR)tab3_init},
+  { "tb4_init", S(TB_INIT),  TR|1,   "",      "i",    (SUBR)tab4_init},
+  { "tb5_init", S(TB_INIT),  TR|1,   "",      "i",    (SUBR)tab5_init},
+  { "tb6_init", S(TB_INIT),  TR|1,   "",      "i",    (SUBR)tab6_init},
+  { "tb7_init", S(TB_INIT),  TR|1,   "",      "i",    (SUBR)tab7_init},
+  { "tb8_init", S(TB_INIT),  TR|1,   "",      "i",    (SUBR)tab8_init},
+  { "tb9_init", S(TB_INIT),  TR|1,   "",      "i",    (SUBR)tab9_init},
+  { "tb10_init", S(TB_INIT), TR|1,   "",      "i",    (SUBR)tab10_init},
+  { "tb11_init", S(TB_INIT), TR|1,   "",      "i",    (SUBR)tab11_init},
+  { "tb12_init", S(TB_INIT), TR|1,   "",      "i",    (SUBR)tab12_init},
+  { "tb13_init", S(TB_INIT), TR|1,   "",      "i",    (SUBR)tab13_init},
+  { "tb14_init", S(TB_INIT), TR|1,   "",      "i",    (SUBR)tab14_init},
+  { "tb15_init", S(TB_INIT), TR|1,   "",      "i",    (SUBR)tab15_init},
   { "tb0.k",  S(FASTB), 2,  "k",    "k",    NULL, (SUBR) tab0_k_tmp,  NULL  },
   { "tb1.k",  S(FASTB), 2,  "k",    "k",    NULL, (SUBR) tab1_k_tmp,  NULL  },
   { "tb2.k",  S(FASTB), 2,  "k",    "k",    NULL, (SUBR) tab2_k_tmp,  NULL  },
@@ -849,7 +852,7 @@ static OENTRY localops[] = {
   { "tb15.i",     S(FASTB), 1,    "i",     "i",    (SUBR) tab15_i_tmp   },
   { "nlalp",      S(NLALP), 5,    "a",     "akkoo",
                             (SUBR) nlalp_set, NULL, (SUBR) nlalp   },
-  { "adsynt2",S(ADSYNT2),   5,    "a",     "kkiiiio",
+  { "adsynt2",S(ADSYNT2),TR|5,    "a",     "kkiiiio",
                             (SUBR) adsynt2_set, NULL, (SUBR)adsynt2 },
   { "exitnow",S(EXITNOW),   1,    "",  "", (SUBR) exitnow, NULL, NULL },
 /* { "zr_i",  S(ZKR),     1,  "i",  "i",  (SUBR)zread, NULL, NULL}, */
@@ -860,22 +863,22 @@ static OENTRY localops[] = {
 /* { "a_k",   S(INDIFF),  5,  "a",  "k",  (SUBR)a_k_set,NULL, (SUBR)interp }, */
   { "tabrec",   S(TABREC),  3,     "",      "kkkkz",
                             (SUBR) tabrec_set, (SUBR) tabrec_k, NULL },
-  { "tabplay",  S(TABPLAY), 3,     "",      "kkkz",
+  { "tabplay",  S(TABPLAY), TR|3,     "",      "kkkz",
                             (SUBR) tabplay_set, (SUBR) tabplay_k, NULL },
   { "changed", S(ISCHANGED), 3,     "k",     "z",
                             (SUBR) isChanged_set, (SUBR)isChanged, NULL },
   /*{ "ftlen_k",S(EVAL),    2,      "k",    "k", NULL,      (SUBR)ftlen   }, */
   { "max_k",  S(P_MAXIMUM), 5,      "k",    "aki",
             (SUBR) partial_maximum_set, (SUBR) NULL, (SUBR) partial_maximum },
-  { "maxk",   S(P_MAXIMUM), 5,      "k",    "aki",
-            (SUBR) partial_maximum_set, (SUBR) NULL, (SUBR) partial_maximum },
+/*{ "maxk",   S(P_MAXIMUM), 5,      "k",    "aki", */
+/*        (SUBR) partial_maximum_set, (SUBR) NULL, (SUBR) partial_maximum }, */
   { "mandel",S(MANDEL),     3,      "kk",    "kkkk",
                             (SUBR) mandel_set, (SUBR) mandel, NULL }
 };
 
 int gab_gab_init_(CSOUND *csound)
 {
-    return csound->AppendOpcodes(csound, &(localops[0]),
-                                 (int) (sizeof(localops) / sizeof(OENTRY)));
+    return csound->AppendOpcodes(csound, &(gab_localops[0]),
+                                 (int) (sizeof(gab_localops) / sizeof(OENTRY)));
 }
 
diff --git a/Opcodes/gab/hvs.c b/Opcodes/gab/hvs.c
index 2f6f672..b9855a8 100644
--- a/Opcodes/gab/hvs.c
+++ b/Opcodes/gab/hvs.c
@@ -16,7 +16,9 @@
   02111-1307 USA
 */
 
-#include "csdl.h"
+//#include "csdl.h"
+#include "csoundCore.h"
+#include "interlocks.h"
 
 
 /* -------------------------------------------------------------------- */
@@ -68,7 +70,7 @@ static int hvs1_set(CSOUND *csound, HVS1 *p)
       return csound->InitError(csound, Str("hvs1: a line segment must be "
                                            "delimited by 2 points at least"));
 
-    if(*p->iConfigTab == 0)
+    if (*p->iConfigTab == 0)
       p->iconfFlag = 0;
     else {
       if ((ftp = csound->FTFind(csound, p->iConfigTab)) != NULL)
@@ -95,7 +97,7 @@ static int hvs1(CSOUND *csound, HVS1 *p)
     int j;
 
     if (p->iconfFlag) {
-      for( j =0; j< noc; j++) {
+      for ( j =0; j< noc; j++) {
         switch ((int) p->confTable[j]) {
         case -1: // ignore parameter
           break;
@@ -114,7 +116,7 @@ static int hvs1(CSOUND *csound, HVS1 *p)
       }
     }
     else {
-      for( j =0; j< noc; j++) {
+      for ( j =0; j< noc; j++) {
         MYFLT val1 = p->snapTable[ndx1 * noc + j];
         MYFLT val2 = p->snapTable[ndx2 * noc + j];
         MYFLT valu = (1 - fracX) * val1 + fracX * val2;
@@ -150,7 +152,7 @@ static int hvs2_set(CSOUND *csound, HVS2 *p)
       return csound->InitError(csound, Str("hvs2: a square area must be "
                                            "delimited by 2 lines at least"));
 
-    if(*p->iConfigTab == 0)
+    if (*p->iConfigTab == 0)
       p->iconfFlag = 0;
     else {
       if ((ftp = csound->FTFind(csound, p->iConfigTab)) != NULL) {
@@ -183,7 +185,7 @@ static int hvs2(CSOUND *csound, HVS2 *p)
     int j;
 
     if (p->iconfFlag) {
-      for( j =0; j< noc; j++) {
+      for ( j =0; j< noc; j++) {
         switch ((int) p->confTable[j]) {
         case -1: // ignore parameter
           break;
@@ -205,7 +207,7 @@ static int hvs2(CSOUND *csound, HVS2 *p)
       }
     }
     else {
-      for( j =0; j< noc; j++) {
+      for ( j =0; j< noc; j++) {
         MYFLT val1 = p->snapTable[ndx1 * noc + j];
         MYFLT val2 = p->snapTable[ndx2 * noc + j];
         MYFLT val3 = p->snapTable[ndx3 * noc + j];
@@ -247,7 +249,7 @@ static int hvs3_set(CSOUND *csound, HVS3 *p)
                                            "delimited by 2 lines at least"));
 
 
-    if(*p->iConfigTab == 0)
+    if (*p->iConfigTab == 0)
       p->iconfFlag = 0;
     else {
       if ((ftp = csound->FTFind(csound, p->iConfigTab)) != NULL)
@@ -290,7 +292,7 @@ static int hvs3(CSOUND *csound, HVS3 *p)
     int j;
 
     if (p->iconfFlag) {
-      for( j =0; j< noc; j++) {
+      for ( j =0; j< noc; j++) {
         switch ((int) p->confTable[j]) {
         case -1: // ignore parameter
           break;
@@ -324,7 +326,7 @@ static int hvs3(CSOUND *csound, HVS3 *p)
       }
     }
     else {
-      for( j =0; j< noc; j++) {
+      for ( j =0; j< noc; j++) {
         MYFLT   val1 = p->snapTable[ndx1 * noc + j];
         MYFLT   val2 = p->snapTable[ndx2 * noc + j];
         MYFLT   val3 = p->snapTable[ndx3 * noc + j];
@@ -371,10 +373,9 @@ static int vphaseseg_set(CSOUND *csound, VPSEG *p)
 {
     TSEG2       *segp;
     int nsegs,j;
-    MYFLT       **argp,  *vector;
+    MYFLT       **argp;
     double dur, durtot = 0.0, prevphs;
     FUNC *nxtfunc, *curfunc, *ftp;
-    long        flength;
 
     nsegs = p->nsegs =((p->INCOUNT-3) >> 1);    /* count segs & alloc if nec */
 
@@ -393,7 +394,8 @@ static int vphaseseg_set(CSOUND *csound, VPSEG *p)
       p->elements = (int) *p->ielements;
     }
     if ( p->elements > ftp->flen )
-      return csound->InitError(csound, Str("vphaseseg: invalid num. of elements"));
+      return csound->InitError(csound,
+                               Str("vphaseseg: invalid num. of elements"));
     /* vector = p->vector; */
     /* flength = p->elements; */
 
@@ -480,16 +482,21 @@ static int vphaseseg(CSOUND *csound, VPSEG *p)
 
 #define S(x)    sizeof(x)
 
-static OENTRY localops[] = {
-        { "hvs1",           S(HVS1),            3,  "",  "kiiiiio",     (SUBR)hvs1_set,         (SUBR)hvs1,              (SUBR)NULL },
-        { "hvs2",           S(HVS2),            3,  "",  "kkiiiiiio",   (SUBR)hvs2_set,         (SUBR)hvs2,              (SUBR)NULL },
-        { "hvs3",           S(HVS3),            3,  "",  "kkkiiiiiiio", (SUBR)hvs3_set,         (SUBR)hvs3,              (SUBR)NULL },
-        { "vphaseseg",    S(VPSEG),                             3,  "",  "kiim",                (SUBR)vphaseseg_set,    (SUBR)vphaseseg,         (SUBR)NULL }
+OENTRY hvs_localops[] = {
+  { "hvs1",  S(HVS1), TB|3,  "",  "kiiiiio",
+    (SUBR)hvs1_set, (SUBR)hvs1, (SUBR)NULL },
+  { "hvs2",  S(HVS2), TB|3,  "",  "kkiiiiiio",
+    (SUBR)hvs2_set, (SUBR)hvs2, (SUBR)NULL },
+  { "hvs3",  S(HVS3), TB|3,  "",  "kkkiiiiiiio",
+    (SUBR)hvs3_set, (SUBR)hvs3, (SUBR)NULL },
+  { "vphaseseg", S(VPSEG), TB|3,  "",  "kiim",
+    (SUBR)vphaseseg_set, (SUBR)vphaseseg }
 };
 
 
 int hvs_init_(CSOUND *csound)
 {
-    return csound->AppendOpcodes(csound, &(localops[0]),
-                                 (int) (sizeof(localops) / sizeof(OENTRY)));
+    return csound->AppendOpcodes(csound, &(hvs_localops[0]),
+                                 (int) (sizeof(hvs_localops) / sizeof(OENTRY)));
 }
+
diff --git a/Opcodes/gab/newgabopc.c b/Opcodes/gab/newgabopc.c
index 94d14da..3332132 100644
--- a/Opcodes/gab/newgabopc.c
+++ b/Opcodes/gab/newgabopc.c
@@ -16,7 +16,8 @@
   02111-1307 USA
 */
 
-#include "csdl.h"
+#include "csoundCore.h"
+#include "interlocks.h"
 
 /* (Shouldn't there be global decl's for these?) */
 #define INCR (0.001f)
@@ -164,7 +165,8 @@ static int schedInTime_set(CSOUND *csound, SCHEDINTIME *p)
      int *xtra;
      int j;
      OPARMS    *O = csound->oparms;
-     static MYFLT frac = 0; /* hugly hack, needs to be inserted in the CSOUND structure */
+     /* hugly hack, needs to be inserted in the CSOUND structure */
+     static MYFLT frac = 0;
 
      O->RTevents = 1;     /* Make sure kperf() looks for RT events */
      /*   O.ksensing = 1; */
@@ -236,24 +238,24 @@ static int copyTabElems_set(CSOUND *csound, COPYTABELEMS *p)
     int nelems = (int) *p->inumElems;
     if ((ftp = csound->FTFind(csound, p->idestTab)) == NULL)
       return csound->InitError(csound,
-                               "copyTabElems: incorrect destination table number");
+                               Str("copyTabElems: incorrect destination table number"));
 
     p->dLen = ftp->flen;
     if (nelems > p->dLen)
       return csound->InitError(csound,
-                               "copyTabElems: destination table too short "
-                               "or number of elements to copy too big");
+                               Str("copyTabElems: destination table too short "
+                                   "or number of elements to copy too big"));
 
     p->dTable = ftp->ftable;
     if ((ftp = csound->FTFind(csound, p->isourceTab)) == NULL)
       return csound->InitError(csound,
-                               "copyTabElems: incorrect source table number");
+                               Str("copyTabElems: incorrect source table number"));
 
     p->sLen = ftp->flen;
     if (nelems > p->sLen)
       return csound->InitError(csound,
-                               "copyTabElems: source table size less than "
-                               "the number of elements to copy");
+                               Str("copyTabElems: source table size less than "
+                                   "the number of elements to copy"));
 
     p->sTable = ftp->ftable;
 
@@ -268,10 +270,10 @@ static int copyTabElems(CSOUND *csound, COPYTABELEMS *p)
       int j, sNdx = (int) *p->ksourceIndex * nelems,
              dNdx = (int) *p->kdestIndex * nelems;
       if (sNdx + nelems > p->sLen)
-        return csound->PerfError(csound, "copyTabElems: source table too short");
+        return csound->PerfError(csound, Str("copyTabElems: source table too short"));
       if (dNdx + nelems > p->dLen)
         return csound->PerfError(csound,
-                                 "copyTabElems: destination table too short");
+                                 Str("copyTabElems: destination table too short"));
 
       for (j = 0; j< nelems; j++)
         p->dTable[dNdx+j] = p->sTable[sNdx+j];
@@ -291,31 +293,32 @@ static int copyTabElemsi(CSOUND *csound, COPYTABELEMS_I *p)
     MYFLT *sTable, *dTable;
     if ((ftp = csound->FTFind(csound, p->idestTab)) == NULL)
       return csound->InitError(csound,
-                               "copyTabElems: incorrect destination table number");
+                               Str("copyTabElems: incorrect destination "
+                                   "table number"));
     dLen = ftp->flen;
     if (nelems > dLen)
       return csound->InitError(csound,
-                               "copyTabElems: destination table too short "
-                               "or number of elements to copy too big");
+                               Str("copyTabElems: destination table too short "
+                                   "or number of elements to copy too big"));
     dTable = ftp->ftable;
     if ((ftp = csound->FTFind(csound, p->isourceTab)) == NULL)
       return csound->InitError(csound,
-                               "copyTabElems: incorrect source table number");
+                               Str("copyTabElems: incorrect source table number"));
     sLen = ftp->flen;
     if (nelems > sLen)
       return csound->InitError(csound,
-                               "copyTabElems: source table size less than "
-                               "the number of elements to copy");
+                               Str("copyTabElems: source table size less than "
+                                   "the number of elements to copy"));
     sTable = ftp->ftable;
 
     {
       int j, sNdx = (int) *p->isourceIndex * nelems,
         dNdx = (int) *p->idestIndex * nelems;
       if (sNdx + nelems > sLen)
-        return csound->PerfError(csound, "copyTabElems: source table too short");
+        return csound->PerfError(csound, Str("copyTabElems: source table too short"));
       if (dNdx + nelems > dLen)
         return csound->PerfError(csound,
-                                 "copyTabElems: destination table too short");
+                                 Str("copyTabElems: destination table too short"));
       for (j = 0; j< nelems; j++) {
         dTable[dNdx+j] = sTable[sNdx+j];
       }
@@ -341,7 +344,7 @@ static int inRange_i(CSOUND *csound, INRANGE *p)
     p->narg = p->INOCOUNT-1;
 /*p->numChans = (PortaudioNumOfInPorts == -1) ? nchnls : PortaudioNumOfInPorts; */
     if (!csound->oparms->sfread)
-      return csound->InitError(csound, "inrg: audio input is not enabled");
+      return csound->InitError(csound, Str("inrg: audio input is not enabled"));
     p->numChans = csound->nchnls;
     return OK;
 }
@@ -405,9 +408,7 @@ static int outRange(CSOUND *csound, OUTRANGE *p)
 
     nsmps = ksmps;
     if (!csound->spoutactive) {
-      MYFLT *sptemp = sp;
       memset(sp, 0, ksmps * nchnls * sizeof(MYFLT));
-      /* for (j=0; j< ksmps * nchnls; j++) *sptemp++ = 0; /\* clear all channels *\/ */
       for (n=0; n<nsmps; n++) {
         int i;
         MYFLT *sptemp = sp;
@@ -570,10 +571,10 @@ static int lposcint_stereo_set(CSOUND *csound, LPOSCINT_ST *p)
     FUNC *ftp;
     double  loop, end, looplength, fsr;
     if ((ftp = csound->FTnp2Find(csound, p->ift)) == NULL)
-      return csound->InitError(csound, "invalid function");
+      return csound->InitError(csound, Str("invalid function"));
     if (!(fsr = ftp->gen01args.sample_rate)){
       csound->Message(csound,
-                      "lposcil: no sample rate stored in function assuming=sr\n");
+                      Str("lposcil: no sample rate stored in function assuming=sr\n"));
       p->fsr=csound->esr;
     }
     p->fsrUPsr = fsr/csound->esr;
@@ -803,7 +804,7 @@ static int dashow (CSOUND *csound, DSH *p)
 #define S(x)    sizeof(x)
 
 static OENTRY localops[] = {
-  { "vtable1k",       S(MTABLE1),         3,  "",  "kz",          (SUBR)mtable1_set,      (SUBR)mtable1_k,        (SUBR) NULL },
+  { "vtable1k",       S(MTABLE1),         TR|3,  "",  "kz",          (SUBR)mtable1_set,      (SUBR)mtable1_k,        (SUBR) NULL },
   /*      { "schedk",         S(SCHEDK),          3,  "",  "kkz",         (SUBR)schedk_i,         (SUBR) schedk,          (SUBR) NULL }, */
   /*      { "schedInTime",    S(SCHEDINTIME),     3,  "",  "kz",          (SUBR)schedInTime_set,  (SUBR)schedInTime ,     (SUBR) NULL }, */
   /*      { "copyTabElems",   S(COPYTABELEMS),    3,  "",  "kikiki",      (SUBR)copyTabElems_set, (SUBR)copyTabElems,     (SUBR)NULL  }, */
@@ -813,9 +814,9 @@ static OENTRY localops[] = {
   /*      { "lposcinta",      S(LPOSC),           5,      "a", "akkkio",      (SUBR)lposc_set,            NULL,                                   (SUBR)lposcinta}, */
   /*      { "lposcintsa",     S(LPOSCINT_ST),     5,  "aa","akkkio",              (SUBR)lposcint_stereo_set,NULL,                                 (SUBR)lposcinta_stereo}, */
   /*      { "lposcintsa2",    S(LPOSCINT_ST),     5,  "aa","akkkio",              (SUBR)lposcint_stereo_set,NULL,                                 (SUBR)lposcinta_stereo_no_trasp}, */
-  { "lposcila", S(LPOSC),      5, "a", "akkkio", (SUBR)lposc_set, NULL, (SUBR)lposca},
-  { "lposcilsa", S(LPOSC_ST),  5, "aa","akkkio", (SUBR)lposc_stereo_set, NULL, (SUBR)lposca_stereo},
-  { "lposcilsa2", S(LPOSC_ST), 5, "aa","akkkio", (SUBR)lposc_stereo_set, NULL, (SUBR)lposca_stereo_no_trasp},
+  { "lposcila", S(LPOSC),      TR|5, "a", "akkkio", (SUBR)lposc_set, NULL, (SUBR)lposca},
+  { "lposcilsa", S(LPOSC_ST),  TR|5, "aa","akkkio", (SUBR)lposc_stereo_set, NULL, (SUBR)lposca_stereo},
+  { "lposcilsa2", S(LPOSC_ST), TR|5, "aa","akkkio", (SUBR)lposc_stereo_set, NULL, (SUBR)lposca_stereo_no_trasp},
   /* { "dashow.i", S(DSH), 1,  "ii","iiii", (SUBR)dashow     }, */
   /* { "dashow.k", S(DSH), 2,  "kk","kkkk", NULL, (SUBR)dashow   }, */
   { "inrg", S(INRANGE), 5, "", "ky", (SUBR)inRange_i, (SUBR)NULL, (SUBR)inRange },
@@ -829,6 +830,7 @@ typedef struct NEWGABOPC_GLOBALS_ {
 
 } NEWGABOPC_GLOBALS;
 
+/*
 PUBLIC int csoundModuleInfo(void)
 {
     return ((CS_APIVERSION << 16) + (CS_APISUBVER << 8) + (int) sizeof(MYFLT));
@@ -840,8 +842,7 @@ PUBLIC int csoundModuleCreate(CSOUND *csound)
     (void)csound;
     return 0;
 }
-
-
+*/
 
 
 int newgabopc_init_(CSOUND *csound) {
@@ -855,7 +856,7 @@ int tabmorph_init_(CSOUND *csound);
 int rbatonopc_init_(CSOUND *csound);
 
 
-PUBLIC int csoundModuleInit(CSOUND *csound)
+PUBLIC int newgabopc_ModuleInit(CSOUND *csound)
 {
         int               err = 0;
         err |= hvs_init_(csound);
@@ -868,7 +869,9 @@ PUBLIC int csoundModuleInit(CSOUND *csound)
         return (err ? CSOUND_ERROR : CSOUND_SUCCESS);
 }
 
+/*
 PUBLIC  int     csoundModuleDestroy(CSOUND *csound)
 {
     return 0;
 }
+*/
diff --git a/Opcodes/gab/radiobaton.c b/Opcodes/gab/radiobaton.c
index 12d0791..908b5da 100644
--- a/Opcodes/gab/radiobaton.c
+++ b/Opcodes/gab/radiobaton.c
@@ -1,346 +1,341 @@
-/*  Copyright (C) 2007 Gabriel Maldonado
-
-  Csound is free software; you can redistribute it
-  and/or modify it under the terms of the GNU Lesser General Public
-  License as published by the Free Software Foundation; either
-  version 2.1 of the License, or (at your option) any later version.
-
-  Csound 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 Lesser General Public License for more details.
-
-  You should have received a copy of the GNU Lesser General Public
-  License along with Csound; if not, write to the Free Software
-  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-  02111-1307 USA
-*/
-
-/* #include "csdl.h" */
-
-/*
-extern unsigned long MIDIINbufIndex;
-extern MIDIMESSAGE  MIDIINbuffer2[];
-*/
-
-#define __BUILDING_LIBCSOUND  /* to access csound->midiGlobals */
-#undef CSOUND_CSDL_H          /* to access csound->midiGlobals */
-
-#include "csoundCore.h"  /* instead of "csd.h" in order to access
-                            csound->midiGlobals */
-
-/* These opcodes have not been implemented because csound->midiGlobals
-   is not there yet. */
-
-PUBLIC int Sched(CSOUND *csound, MYFLT  *args[], int numargs);
-
-
-/* -------------------------------------------------------------------- */
-
-typedef struct {
-    OPDS   h;
-    MYFLT  *x1, *y1, *z1, *x2, *y2, *z2;
-
-    int    local_buf_index;
-} RB_XYZ;
-
-
-static int rbatonXYZ_set(CSOUND *csound, RB_XYZ *p)
-{
-    p->local_buf_index = csound->midiGlobals->MIDIINbufIndex & MIDIINBUFMSK;
-    *p->x1 = *p->y1 = *p->z1 = *p->x2 = *p->y2 = *p->z2 = 0;
-    return OK;
-}
-
-static int rbatonXYZ(CSOUND *csound, RB_XYZ *p)
-{
-    int status, data1, data2;
-    MGLOBAL* mg = csound->midiGlobals;
-    /*
-      if      (p->local_buf_index < mg->MIDIINbufIndex) {
-      MIDIMESSAGE temp = mg->MIDIINbuffer2[(p->local_buf_index)++ % MIDIINBUFMAX];
-      status =  temp.bData[0];
-      data1  =  temp.bData[1];
-      data2  =  temp.bData[2];
-    */
-    if  (p->local_buf_index != mg->MIDIINbufIndex) {
-      unsigned char *temp;
-      temp = &(mg->MIDIINbuffer2[p->local_buf_index++].bData[0]);
-      p->local_buf_index &= MIDIINBUFMSK;
-      status =  (*temp );
-      data1  =  *++temp;
-      data2  =  *++temp;
-    }
-    else return OK;
-    if (status == 0xA0) {
-      switch (data1) {
-      case 8:  *p->x1 = data2/FL(127.0); break;
-      case 9:  *p->y1 = data2/FL(127.0); break;
-      case 10: *p->z1 = data2/FL(127.0); break;
-      case 11: *p->x2 = data2/FL(127.0); break;
-      case 12: *p->y2 = data2/FL(127.0); break;
-      case 13: *p->z2 = data2/FL(127.0); break;
-      }
-    }
-    return OK;
-}
-/* -------------------------------------------------------------------- */
-
-typedef struct {
-    OPDS   h;
-    MYFLT  *pot1, *pot2, *pot3, *pot4, *fsw1, *fsw2, *button;
-    int    local_buf_index;
-} RB_POT;
-
-static int rbatonPot_set(CSOUND *csound, RB_POT *p)
-{
-    p->local_buf_index = csound->midiGlobals->MIDIINbufIndex & MIDIINBUFMSK;
-    *p->pot1 = *p->pot2 = *p->pot3 = *p->pot4 = 0;
-    return OK;
-}
-
-static int rbatonPot (CSOUND *csound, RB_POT *p)
-{
-    int status, data1, data2;
-    MGLOBAL* mg = csound->midiGlobals;
-    if (p->local_buf_index != csound->midiGlobals->MIDIINbufIndex) {
-      unsigned char *temp;
-      temp = &(mg->MIDIINbuffer2[p->local_buf_index++].bData[0]);
-      p->local_buf_index &= MIDIINBUFMSK;
-      status =  (*temp );
-      data1  =  *++temp;
-      data2  =  *++temp;
-    }
-    else return OK;
-    if (status == 0xA0) {
-      switch (data1) {
-      case 4: *p->pot1 = data2/FL(127.0); break;
-      case 5: *p->pot2 = data2/FL(127.0); break;
-      case 6: *p->pot3 = data2/FL(127.0); break;
-      case 7: *p->pot4 = data2/FL(127.0); break;
-      case 3:
-        switch (data2) {
-        case 1: *p->button = (*p->button == 0) ? FL(1.0) : FL(0.0);     break;
-        case 2: *p->fsw1 = 1; break;
-        case 3: *p->fsw1 = 0; break;
-        case 4: *p->fsw2 = 1; break;
-        case 5: *p->fsw2 = 0; break;
-        }
-        break;
-      }
-    }
-    return OK;
-}
-/* -------------------------------------------------------------------- */
-
-#define INCR (0.001f)
-
-typedef struct {
-    OPDS   h;
-    MYFLT  *kDur, *kBaton1instr, *kBaton2Instr, *kFootSw1dn, *kFootSw1up,
-           *kFootSw2dn, *kFootSw2up, *kButInstr;
-    MYFLT  baton, whack, x, y, p0, p2, p3, p3neg;
-    MYFLT  fs1dn, fs1up, fs2dn, fs2up;
-    MYFLT  frac1, frac2;
-    MYFLT  pot1, pot2, pot3; /* pontentiometer 4 is reserved to stick sensitivity */
-    int    local_buf_index;
-} RB_PERCPAD;
-
-static int rbatonPercPad_set (CSOUND *csound, RB_PERCPAD *p)
-{
-    p->local_buf_index = csound->midiGlobals->MIDIINbufIndex & MIDIINBUFMSK;
-    p->p0 = 0;
-    p->p2 = 0;
-    p->p3 = 1;
-    p->p3neg = -1;
-    p->pot1 = p->pot2 = p->pot3 = 0;
-    p->fs1dn = -*p->kFootSw1dn;
-    p->fs2dn = -*p->kFootSw2dn;
-    p->fs1up = -*p->kFootSw1up;
-    p->fs2up = -*p->kFootSw2up;
-    p->frac1 = p->frac2 = 0;
-    return OK;
-}
-
-static int rbatonPercPad(CSOUND *csound, RB_PERCPAD *p)
-{
-    int status, data1, data2;
-    MYFLT *args[9];
-
-    if (p->local_buf_index != csound->midiGlobals->MIDIINbufIndex) {
-      MGLOBAL* mg = csound->midiGlobals;
-      unsigned char *temp;
-      temp = &(mg->MIDIINbuffer2[p->local_buf_index++].bData[0]);
-      p->local_buf_index &= MIDIINBUFMSK;
-      status =  (*temp );
-      data1  =  *++temp;
-      data2  =  *++temp;
-    }
-    else return OK;
-    if (status == 0xA0) {
-      switch (data1) {
-      case 1: /* trigger baton and whack from stick 1 or 2 */
-      case 2:
-        p->baton = (data1 == 1) ? *p->kBaton1instr : *p->kBaton2Instr;
-        p->whack = data2/FL(127.0);
-        break;
-      case 15: /* X coordinate at trigger */
-      case 17:
-        p->x = data2/FL(127.0);
-        break;
-
-      case 16: /* Y coordinate at trigger */
-      case 18:
-        p->y = data2/FL(127.0);
-        args[0] = &(p->p0);                     /* this is the third baton trigger message */
-        args[1] = &(p->baton);          /* so activate corresponding instrument */
-        args[2] = &(p->p2);
-        args[3] = &(*p->kDur);
-        args[4] = &(p->whack);
-        args[5] = &(p->x);
-        args[6] = &(p->y);
-        args[7] = &(p->pot1);
-        args[8] = &(p->pot2);
-        args[9] = &(p->pot3);
-        Sched(csound, args, 10);
-        break;
-      case 3: /* foot-switches and button */
-        /*       *kFootSw1dn, *kFootSw2dn, *kFootSw1up, *kFootSw2up, *kButInstr; */
-        switch(data2) {
-        case 1:
-          if (*p->kButInstr) {  /* if kButInstr is set */
-            args[0] = &(p->p0);
-            args[1] = &(*p->kButInstr);
-            args[2] = &(p->p2);
-            args[3] = &(*p->kDur);
-            args[4] = &(p->pot1);
-            args[5] = &(p->pot2);
-            args[6] = &(p->pot3);
-            Sched(csound, args, 7);
-          }
-          printf("B15+ button\n");
-          break;
-        case 2: /* footswitch 1 down */
-          if (*p->kFootSw1dn) {  /* if kFootSw1dn is set */
-            p->fs1dn = (int) *p->kFootSw1dn + p->frac1;
-            args[0] = &(p->p0);
-            args[1] = &(p->fs1dn);
-            args[2] = &(p->p2);
-            args[3] = (*p->kFootSw1up) ? &(*p->kDur) : &(p->p3neg);
-            args[4] = &(p->pot1);
-            args[5] = &(p->pot2);
-            args[6] = &(p->pot3);
-            Sched(csound, args, 7);
-          }
-          else if (*p->kFootSw1up) { /* turn off the instrument */
-            p->fs1up = -((int) *p->kFootSw1up + p->frac1);
-            args[0] = &(p->p0);
-            args[1] = &(p->fs1up);
-            args[2] = &(p->p2);
-            args[3] = &(p->p2); /* zero */
-            Sched(csound, args, 4);
-            p->fs1up = -*p->kFootSw1up;
-            p->frac1 += INCR;
-            p->frac1 = (p->frac1 >= 1) ? p->frac1 = 0 : p->frac1;
-          }
-          printf("B14- foot switch down1\n");
-          break;
-        case 3:
-          if (*p->kFootSw1up) {  /* if kFootSw1up is set */
-            p->fs1up = (int) *p->kFootSw1up + p->frac1;
-            args[0] = &(p->p0);
-            args[1] = &(p->fs1up);
-            args[2] = &(p->p2);
-            args[3] = (*p->kFootSw1dn) ? &(*p->kDur) : &(p->p3neg);
-            args[4] = &(p->pot1);
-            args[5] = &(p->pot2);
-            args[6] = &(p->pot3);
-            Sched(csound, args, 7);
-          }
-          else if (*p->kFootSw1dn) { /* turn off the instrument */
-            p->fs1dn = -((int) *p->kFootSw1dn + p->frac1);
-            args[0] = &(p->p0);
-            args[1] = &(p->fs1dn);
-            args[2] = &(p->p2);
-            args[3] = &(p->p2); /* zero */
-            Sched(csound, args, 4);
-            p->frac1 += INCR;
-            p->frac1 = (p->frac2 >= 1) ? p->frac1 = 0 : p->frac1;
-          }
-          printf("B14- foot switch up1\n");
-          break;
-        case 4:
-          if (*p->kFootSw2dn) {  /* if kFootSw1dn is set */
-            /* CONTINUARE con frac1 e frac2 */
-            p->fs2dn = (int) *p->kFootSw2dn + p->frac2;
-            args[0] = &(p->p0);
-            args[1] = &(p->fs2dn);
-            args[2] = &(p->p2);
-            args[3] = (*p->kFootSw2up) ? &(*p->kDur) : &(p->p3neg);
-            args[4] = &(p->pot1);
-            args[5] = &(p->pot2);
-            args[6] = &(p->pot3);
-            Sched(csound, args, 7);
-          }
-          else if (*p->kFootSw2up) { /* turn off the instrument */
-            p->fs2up = -((int) *p->kFootSw2up + p->frac2);
-            args[0] = &(p->p0);
-            args[1] = &(p->fs2up);
-            args[2] = &(p->p2);
-            args[3] = &(p->p2); /* zero */
-            Sched(csound, args, 4);
-            p->frac2 += INCR;
-            p->frac2 = (p->frac2 >= 1) ? p->frac2 = 0 : p->frac2;
-          }
-          printf("B15- foot switch down2\n");
-          break;
-        case 5:
-          if (*p->kFootSw2up) {  /* if kFootSw1up is set */
-            p->fs2up = (int) *p->kFootSw2up + p->frac2;
-            args[0] = &(p->p0);
-            args[1] = &(p->fs2up);
-            args[2] = &(p->p2);
-            args[3] = (*p->kFootSw2dn) ? &(*p->kDur) : &(p->p3neg);
-            args[4] = &(p->pot1);
-            args[5] = &(p->pot2);
-            args[6] = &(p->pot3);
-            Sched(csound, args, 7);
-
-          }
-          else if (*p->kFootSw2dn) { /* turn off the instrument */
-            p->fs2dn = -((int) *p->kFootSw2dn + p->frac2);
-            args[0] = &(p->p0);
-            args[1] = &(p->fs2dn);
-            args[2] = &(p->p2);
-            args[3] = &(p->p2); /* zero */
-            Sched(csound, args, 4);
-            p->frac2 += INCR;
-            p->frac2 = (p->frac2 >= 1) ? p->frac2 = 0 : p->frac2;
-          }
-          printf("B15- foot switch up2\n");
-          break;
-        }
-        break;
-      case 4: p->pot1 = data2/FL(127.0); break;
-      case 5: p->pot2 = data2/FL(127.0); break;
-      case 6: p->pot3 = data2/FL(127.0); break;
-      }
-    }
-    return OK;
-}
-
-#define S(x)    sizeof(x)
-
-static OENTRY localops[] = {
-  { "rbatonPercPad", S(RB_PERCPAD),3, "", "kkkkkkkk",
-    (SUBR)rbatonPercPad_set, (SUBR)rbatonPercPad },
-  { "rbatonXYZ",     S(RB_XYZ),    3, "kkkkkk",  "",
-    (SUBR)rbatonXYZ_set, (SUBR)rbatonXYZ },
-  { "rbatonPot",     S(RB_POT),    3, "kkkkkkk", "",
-    (SUBR)rbatonPot_set, (SUBR)rbatonPot  }
-};
-
-int rbatonopc_init_(CSOUND *csound) {
-    return csound->AppendOpcodes(csound, &(localops[0]),
-                                 (int) (sizeof(localops) / sizeof(OENTRY)));
-}
+/*  Copyright (C) 2007 Gabriel Maldonado
+
+  Csound is free software; you can redistribute it
+  and/or modify it under the terms of the GNU Lesser General Public
+  License as published by the Free Software Foundation; either
+  version 2.1 of the License, or (at your option) any later version.
+
+  Csound 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 Lesser General Public License for more details.
+
+  You should have received a copy of the GNU Lesser General Public
+  License along with Csound; if not, write to the Free Software
+  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+  02111-1307 USA
+*/
+
+/* #include "csdl.h" */
+
+/*
+extern unsigned long MIDIINbufIndex;
+extern MIDIMESSAGE  MIDIINbuffer2[];
+*/
+
+#include "csoundCore.h"  /* instead of "csd.h" in order to access
+                            csound->midiGlobals */
+
+/* These opcodes have not been implemented because csound->midiGlobals
+   is not there yet. */
+
+PUBLIC int Sched(CSOUND *csound, MYFLT  *args[], int numargs);
+
+
+/* -------------------------------------------------------------------- */
+
+typedef struct {
+    OPDS   h;
+    MYFLT  *x1, *y1, *z1, *x2, *y2, *z2;
+
+    int    local_buf_index;
+} RB_XYZ;
+
+
+static int rbatonXYZ_set(CSOUND *csound, RB_XYZ *p)
+{
+    p->local_buf_index = csound->midiGlobals->MIDIINbufIndex & MIDIINBUFMSK;
+    *p->x1 = *p->y1 = *p->z1 = *p->x2 = *p->y2 = *p->z2 = 0;
+    return OK;
+}
+
+static int rbatonXYZ(CSOUND *csound, RB_XYZ *p)
+{
+    int status, data1, data2;
+    MGLOBAL* mg = csound->midiGlobals;
+    /*
+      if      (p->local_buf_index < mg->MIDIINbufIndex) {
+      MIDIMESSAGE temp = mg->MIDIINbuffer2[(p->local_buf_index)++ % MIDIINBUFMAX];
+      status =  temp.bData[0];
+      data1  =  temp.bData[1];
+      data2  =  temp.bData[2];
+    */
+    if  (p->local_buf_index != mg->MIDIINbufIndex) {
+      unsigned char *temp;
+      temp = &(mg->MIDIINbuffer2[p->local_buf_index++].bData[0]);
+      p->local_buf_index &= MIDIINBUFMSK;
+      status =  (*temp );
+      data1  =  *++temp;
+      data2  =  *++temp;
+    }
+    else return OK;
+    if (status == 0xA0) {
+      switch (data1) {
+      case 8:  *p->x1 = data2/FL(127.0); break;
+      case 9:  *p->y1 = data2/FL(127.0); break;
+      case 10: *p->z1 = data2/FL(127.0); break;
+      case 11: *p->x2 = data2/FL(127.0); break;
+      case 12: *p->y2 = data2/FL(127.0); break;
+      case 13: *p->z2 = data2/FL(127.0); break;
+      }
+    }
+    return OK;
+}
+/* -------------------------------------------------------------------- */
+
+typedef struct {
+    OPDS   h;
+    MYFLT  *pot1, *pot2, *pot3, *pot4, *fsw1, *fsw2, *button;
+    int    local_buf_index;
+} RB_POT;
+
+static int rbatonPot_set(CSOUND *csound, RB_POT *p)
+{
+    p->local_buf_index = csound->midiGlobals->MIDIINbufIndex & MIDIINBUFMSK;
+    *p->pot1 = *p->pot2 = *p->pot3 = *p->pot4 = 0;
+    return OK;
+}
+
+static int rbatonPot (CSOUND *csound, RB_POT *p)
+{
+    int status, data1, data2;
+    MGLOBAL* mg = csound->midiGlobals;
+    if (p->local_buf_index != csound->midiGlobals->MIDIINbufIndex) {
+      unsigned char *temp;
+      temp = &(mg->MIDIINbuffer2[p->local_buf_index++].bData[0]);
+      p->local_buf_index &= MIDIINBUFMSK;
+      status =  (*temp );
+      data1  =  *++temp;
+      data2  =  *++temp;
+    }
+    else return OK;
+    if (status == 0xA0) {
+      switch (data1) {
+      case 4: *p->pot1 = data2/FL(127.0); break;
+      case 5: *p->pot2 = data2/FL(127.0); break;
+      case 6: *p->pot3 = data2/FL(127.0); break;
+      case 7: *p->pot4 = data2/FL(127.0); break;
+      case 3:
+        switch (data2) {
+        case 1: *p->button = (*p->button == 0) ? FL(1.0) : FL(0.0);     break;
+        case 2: *p->fsw1 = 1; break;
+        case 3: *p->fsw1 = 0; break;
+        case 4: *p->fsw2 = 1; break;
+        case 5: *p->fsw2 = 0; break;
+        }
+        break;
+      }
+    }
+    return OK;
+}
+/* -------------------------------------------------------------------- */
+
+#define INCR (0.001f)
+
+typedef struct {
+    OPDS   h;
+    MYFLT  *kDur, *kBaton1instr, *kBaton2Instr, *kFootSw1dn, *kFootSw1up,
+           *kFootSw2dn, *kFootSw2up, *kButInstr;
+    MYFLT  baton, whack, x, y, p0, p2, p3, p3neg;
+    MYFLT  fs1dn, fs1up, fs2dn, fs2up;
+    MYFLT  frac1, frac2;
+    MYFLT  pot1, pot2, pot3; /* pontentiometer 4 is reserved to stick sensitivity */
+    int    local_buf_index;
+} RB_PERCPAD;
+
+static int rbatonPercPad_set (CSOUND *csound, RB_PERCPAD *p)
+{
+    p->local_buf_index = csound->midiGlobals->MIDIINbufIndex & MIDIINBUFMSK;
+    p->p0 = 0;
+    p->p2 = 0;
+    p->p3 = 1;
+    p->p3neg = -1;
+    p->pot1 = p->pot2 = p->pot3 = 0;
+    p->fs1dn = -*p->kFootSw1dn;
+    p->fs2dn = -*p->kFootSw2dn;
+    p->fs1up = -*p->kFootSw1up;
+    p->fs2up = -*p->kFootSw2up;
+    p->frac1 = p->frac2 = 0;
+    return OK;
+}
+
+static int rbatonPercPad(CSOUND *csound, RB_PERCPAD *p)
+{
+    int status, data1, data2;
+    MYFLT *args[9];
+
+    if (p->local_buf_index != csound->midiGlobals->MIDIINbufIndex) {
+      MGLOBAL* mg = csound->midiGlobals;
+      unsigned char *temp;
+      temp = &(mg->MIDIINbuffer2[p->local_buf_index++].bData[0]);
+      p->local_buf_index &= MIDIINBUFMSK;
+      status =  (*temp );
+      data1  =  *++temp;
+      data2  =  *++temp;
+    }
+    else return OK;
+    if (status == 0xA0) {
+      switch (data1) {
+      case 1: /* trigger baton and whack from stick 1 or 2 */
+      case 2:
+        p->baton = (data1 == 1) ? *p->kBaton1instr : *p->kBaton2Instr;
+        p->whack = data2/FL(127.0);
+        break;
+      case 15: /* X coordinate at trigger */
+      case 17:
+        p->x = data2/FL(127.0);
+        break;
+
+      case 16: /* Y coordinate at trigger */
+      case 18:
+        p->y = data2/FL(127.0);
+        args[0] = &(p->p0);                     /* this is the third baton trigger message */
+        args[1] = &(p->baton);          /* so activate corresponding instrument */
+        args[2] = &(p->p2);
+        args[3] = &(*p->kDur);
+        args[4] = &(p->whack);
+        args[5] = &(p->x);
+        args[6] = &(p->y);
+        args[7] = &(p->pot1);
+        args[8] = &(p->pot2);
+        args[9] = &(p->pot3);
+        Sched(csound, args, 10);
+        break;
+      case 3: /* foot-switches and button */
+        /*       *kFootSw1dn, *kFootSw2dn, *kFootSw1up, *kFootSw2up, *kButInstr; */
+        switch(data2) {
+        case 1:
+          if (*p->kButInstr) {  /* if kButInstr is set */
+            args[0] = &(p->p0);
+            args[1] = &(*p->kButInstr);
+            args[2] = &(p->p2);
+            args[3] = &(*p->kDur);
+            args[4] = &(p->pot1);
+            args[5] = &(p->pot2);
+            args[6] = &(p->pot3);
+            Sched(csound, args, 7);
+          }
+          printf("B15+ button\n");
+          break;
+        case 2: /* footswitch 1 down */
+          if (*p->kFootSw1dn) {  /* if kFootSw1dn is set */
+            p->fs1dn = (int) *p->kFootSw1dn + p->frac1;
+            args[0] = &(p->p0);
+            args[1] = &(p->fs1dn);
+            args[2] = &(p->p2);
+            args[3] = (*p->kFootSw1up) ? &(*p->kDur) : &(p->p3neg);
+            args[4] = &(p->pot1);
+            args[5] = &(p->pot2);
+            args[6] = &(p->pot3);
+            Sched(csound, args, 7);
+          }
+          else if (*p->kFootSw1up) { /* turn off the instrument */
+            p->fs1up = -((int) *p->kFootSw1up + p->frac1);
+            args[0] = &(p->p0);
+            args[1] = &(p->fs1up);
+            args[2] = &(p->p2);
+            args[3] = &(p->p2); /* zero */
+            Sched(csound, args, 4);
+            p->fs1up = -*p->kFootSw1up;
+            p->frac1 += INCR;
+            p->frac1 = (p->frac1 >= 1) ? p->frac1 = 0 : p->frac1;
+          }
+          printf("B14- foot switch down1\n");
+          break;
+        case 3:
+          if (*p->kFootSw1up) {  /* if kFootSw1up is set */
+            p->fs1up = (int) *p->kFootSw1up + p->frac1;
+            args[0] = &(p->p0);
+            args[1] = &(p->fs1up);
+            args[2] = &(p->p2);
+            args[3] = (*p->kFootSw1dn) ? &(*p->kDur) : &(p->p3neg);
+            args[4] = &(p->pot1);
+            args[5] = &(p->pot2);
+            args[6] = &(p->pot3);
+            Sched(csound, args, 7);
+          }
+          else if (*p->kFootSw1dn) { /* turn off the instrument */
+            p->fs1dn = -((int) *p->kFootSw1dn + p->frac1);
+            args[0] = &(p->p0);
+            args[1] = &(p->fs1dn);
+            args[2] = &(p->p2);
+            args[3] = &(p->p2); /* zero */
+            Sched(csound, args, 4);
+            p->frac1 += INCR;
+            p->frac1 = (p->frac2 >= 1) ? p->frac1 = 0 : p->frac1;
+          }
+          printf("B14- foot switch up1\n");
+          break;
+        case 4:
+          if (*p->kFootSw2dn) {  /* if kFootSw1dn is set */
+            /* CONTINUARE con frac1 e frac2 */
+            p->fs2dn = (int) *p->kFootSw2dn + p->frac2;
+            args[0] = &(p->p0);
+            args[1] = &(p->fs2dn);
+            args[2] = &(p->p2);
+            args[3] = (*p->kFootSw2up) ? &(*p->kDur) : &(p->p3neg);
+            args[4] = &(p->pot1);
+            args[5] = &(p->pot2);
+            args[6] = &(p->pot3);
+            Sched(csound, args, 7);
+          }
+          else if (*p->kFootSw2up) { /* turn off the instrument */
+            p->fs2up = -((int) *p->kFootSw2up + p->frac2);
+            args[0] = &(p->p0);
+            args[1] = &(p->fs2up);
+            args[2] = &(p->p2);
+            args[3] = &(p->p2); /* zero */
+            Sched(csound, args, 4);
+            p->frac2 += INCR;
+            p->frac2 = (p->frac2 >= 1) ? p->frac2 = 0 : p->frac2;
+          }
+          printf("B15- foot switch down2\n");
+          break;
+        case 5:
+          if (*p->kFootSw2up) {  /* if kFootSw1up is set */
+            p->fs2up = (int) *p->kFootSw2up + p->frac2;
+            args[0] = &(p->p0);
+            args[1] = &(p->fs2up);
+            args[2] = &(p->p2);
+            args[3] = (*p->kFootSw2dn) ? &(*p->kDur) : &(p->p3neg);
+            args[4] = &(p->pot1);
+            args[5] = &(p->pot2);
+            args[6] = &(p->pot3);
+            Sched(csound, args, 7);
+
+          }
+          else if (*p->kFootSw2dn) { /* turn off the instrument */
+            p->fs2dn = -((int) *p->kFootSw2dn + p->frac2);
+            args[0] = &(p->p0);
+            args[1] = &(p->fs2dn);
+            args[2] = &(p->p2);
+            args[3] = &(p->p2); /* zero */
+            Sched(csound, args, 4);
+            p->frac2 += INCR;
+            p->frac2 = (p->frac2 >= 1) ? p->frac2 = 0 : p->frac2;
+          }
+          printf("B15- foot switch up2\n");
+          break;
+        }
+        break;
+      case 4: p->pot1 = data2/FL(127.0); break;
+      case 5: p->pot2 = data2/FL(127.0); break;
+      case 6: p->pot3 = data2/FL(127.0); break;
+      }
+    }
+    return OK;
+}
+
+#define S(x)    sizeof(x)
+
+OENTRY radiobaton_localops[] = {
+  { "rbatonPercPad", S(RB_PERCPAD),3, "", "kkkkkkkk",
+    (SUBR)rbatonPercPad_set, (SUBR)rbatonPercPad },
+  { "rbatonXYZ",     S(RB_XYZ),    3, "kkkkkk",  "",
+    (SUBR)rbatonXYZ_set, (SUBR)rbatonXYZ },
+  { "rbatonPot",     S(RB_POT),    3, "kkkkkkk", "",
+    (SUBR)rbatonPot_set, (SUBR)rbatonPot  }
+};
+
+LINKAGE1(radiobaton_localops)
+
diff --git a/Opcodes/gab/sliderTable.c b/Opcodes/gab/sliderTable.c
index c83b93e..92c0b4e 100644
--- a/Opcodes/gab/sliderTable.c
+++ b/Opcodes/gab/sliderTable.c
@@ -16,7 +16,9 @@
   02111-1307 USA
 */
 
-#include "csdl.h"
+//#include "csdl.h"
+#include "csoundCore.h"
+#include "interlocks.h"
 #include <math.h>
 
 #define f7bit       (FL(127.0))
@@ -266,7 +268,8 @@ static int sliderTable64(CSOUND *csound, SLIDER64t *p) /* GAB */
       MYFLT *yt1 = p->yt1, *c1=p->c1, *c2=p->c2;                        \
                                                                         \
                                                                         \
-      if((outftp = csound->FTFind(csound, p->ioutfn)) != NULL) p->outTable = outftp->ftable; \
+      if((outftp = csound->FTFind(csound, p->ioutfn)) != NULL)          \
+        p->outTable = outftp->ftable;                                   \
       while (j < n) {                                                   \
         int t = (int) *sld->ifn;                                        \
         *slnum = (unsigned char) *sld->ictlno;                          \
@@ -318,7 +321,8 @@ static int sliderTable64(CSOUND *csound, SLIDER64t *p) /* GAB */
         chanblock[*slnum++] =  (MYFLT)((int)(value * f7bit + FL(0.5))); \
         /*----- init filtering coeffs*/                                 \
         *yt1++ = FL(0.0);                                               \
-        b = (MYFLT)(2.0 - cos((double)(*(sld)->ihp * csound->tpidsr * csound->ksmps))); \
+        b = (MYFLT)(2.0 - cos((double)(*(sld)->ihp *                    \
+                              csound->tpidsr * csound->ksmps)));        \
         *c2 = (MYFLT)(b - sqrt((double)(b * b - FL(1.0))));             \
         *c1++ = FL(1.0) - *c2++;                                        \
                                                                         \
@@ -610,66 +614,64 @@ static int ctrl7a(CSOUND *csound, CTRL7a *p)
 
 #define S(x)    sizeof(x)
 
-static OENTRY localops[] = {
-
+OENTRY sliderTable_localops[] = {
 { "slider8table", S(SLIDER8t), 3, "k",  "iii"
-                                        "iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii",
-                                         (SUBR)sliderTable_i8, (SUBR)sliderTable8, (SUBR)NULL },
-
+  "iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii",
+  (SUBR)sliderTable_i8, (SUBR)sliderTable8, (SUBR)NULL },
 { "slider16table", S(SLIDER8t), 3, "k", "iii"
-                                        "iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii"
-                                        "iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii",
-                                         (SUBR)sliderTable_i16, (SUBR)sliderTable16, (SUBR)NULL },
+  "iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii"
+  "iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii",
+  (SUBR)sliderTable_i16, (SUBR)sliderTable16, (SUBR)NULL },
 { "slider32table", S(SLIDER8t), 3, "k", "iii"
-                                        "iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii"
-                                        "iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii"
-                                        "iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii"
-                                        "iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii",
-                                         (SUBR)sliderTable_i32, (SUBR)sliderTable32, (SUBR)NULL },
+  "iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii"
+  "iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii"
+  "iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii"
+  "iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii",
+  (SUBR)sliderTable_i32, (SUBR)sliderTable32, (SUBR)NULL },
 { "slider64table", S(SLIDER8t), 3, "k", "iii"
-                                        "iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii"
-                                        "iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii"
-                                        "iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii"
-                                        "iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii"
-                                        "iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii"
-                                        "iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii"
-                                        "iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii"
-                                        "iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii",
-                                        (SUBR)sliderTable_i64, (SUBR)sliderTable64, (SUBR)NULL },
-
+  "iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii"
+  "iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii"
+  "iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii"
+  "iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii"
+  "iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii"
+  "iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii"
+  "iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii"
+  "iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii",
+  (SUBR)sliderTable_i64, (SUBR)sliderTable64, (SUBR)NULL },
 { "slider8tablef", S(SLIDER8tf), 3, "k", "iii"
-                                        "iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii",
-                                         (SUBR)sliderTable_i8f, (SUBR)sliderTable8f, (SUBR)NULL },
-
+  "iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii",
+  (SUBR)sliderTable_i8f, (SUBR)sliderTable8f, (SUBR)NULL },
 { "slider16tablef",S(SLIDER16tf), 3, "k", "iii"
-                                        "iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii"
-                                        "iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii",
-                                         (SUBR)sliderTable_i16f, (SUBR)sliderTable16f, (SUBR)NULL },
+  "iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii"
+  "iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii",
+  (SUBR)sliderTable_i16f, (SUBR)sliderTable16f, (SUBR)NULL },
 { "slider32tablef",S(SLIDER32tf), 3, "k", "iii"
-                                        "iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii"
-                                        "iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii"
-                                        "iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii"
-                                        "iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii",
-                                         (SUBR)sliderTable_i32f, (SUBR)sliderTable32f, (SUBR)NULL },
+  "iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii"
+  "iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii"
+  "iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii"
+  "iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii",
+  (SUBR)sliderTable_i32f, (SUBR)sliderTable32f, (SUBR)NULL },
 { "slider64tablef",S(SLIDER64tf), 3, "k", "iii"
-                                        "iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii"
-                                        "iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii"
-                                        "iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii"
-                                        "iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii"
-                                        "iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii"
-                                        "iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii"
-                                        "iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii"
-                                        "iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii",
-                                         (SUBR)sliderTable_i64f, (SUBR)sliderTable64f, (SUBR)NULL },
+  "iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii"
+  "iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii"
+  "iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii"
+  "iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii"
+  "iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii"
+  "iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii"
+  "iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii"
+  "iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii",
+  (SUBR)sliderTable_i64f, (SUBR)sliderTable64f, (SUBR)NULL },
 { "sliderKawai", S(SLIDERKAWAI),  3, "kkkkkkkkkkkkkkkk",
-                                 "iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii"
-                                 "iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii",
-                                   (SUBR)sliderKawai_i, (SUBR)sliderKawai, NULL },
-{ "ctrl7.a", S(CTRL7a),  5, "a",    "iikkoo", (SUBR) ctrl7a_set,   NULL,    (SUBR) ctrl7a },
+  "iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii"
+  "iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii",
+  (SUBR)sliderKawai_i, (SUBR)sliderKawai, NULL },
+{ "ctrl7.a", S(CTRL7a),  5, "a",    "iikkoo", 
+  (SUBR) ctrl7a_set,   NULL,    (SUBR) ctrl7a },
 };
 
-
 int slidertable_init_(CSOUND *csound) {
-   return csound->AppendOpcodes(csound, &(localops[0]),
-                                 (int) (sizeof(localops) / sizeof(OENTRY)));
+    return
+      csound->AppendOpcodes(csound, &(sliderTable_localops[0]),
+                            (int) (sizeof(sliderTable_localops) / sizeof(OENTRY)));
 }
+
diff --git a/Opcodes/gab/tabmorph.c b/Opcodes/gab/tabmorph.c
index d4cfe5f..8cfee35 100644
--- a/Opcodes/gab/tabmorph.c
+++ b/Opcodes/gab/tabmorph.c
@@ -15,13 +15,14 @@
   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
   02111-1307 USA
 */
-
-#include "csdl.h"
-
+//#include "csdl.h"
+#include "csoundCore.h"
+#include "interlocks.h"
 
 typedef struct {
         OPDS    h;
-        MYFLT   *out, *xindex, *xinterpoint, *xtabndx1, *xtabndx2, *argums[VARGMAX];
+        MYFLT   *out, *xindex, *xinterpoint, *xtabndx1, *xtabndx2, 
+                *argums[VARGMAX];
         MYFLT   *table[VARGMAX];
         int     length;
         long    numOfTabs;
@@ -43,7 +44,8 @@ static int tabmorph_set (CSOUND *csound, TABMORPH *p) /*Gab 13-March-2005 */
       if (UNLIKELY(ftp->flen != flength && flength  != 0))
         return
           csound->InitError(csound,
-                            Str("tabmorph: all tables must have the same length!"));
+                            Str("tabmorph: all tables must have the "
+                                "same length!"));
       flength = ftp->flen;
       if (j==0) first_table = ftp->ftable;
       p->table[j] = ftp->ftable;
@@ -78,7 +80,8 @@ static int tabmorph(CSOUND *csound, TABMORPH *p)
     val2 = tab2val1 * (1-tabndx2frac) + tab2val2 * tabndx2frac;
 
     interpoint = *p->xinterpoint;
-    interpoint -= (int) interpoint; /* to limit to zero to 1 range */
+    interpoint = (interpoint < 0 ? 0 : (interpoint > 1.0 ? 1.0 : interpoint));
+    /* interpoint -= (int) interpoint;  to limit to zero to 1 range */
 
     *p->out = val1 * (1 - interpoint) + val2 * interpoint;
     return OK;
@@ -194,7 +197,8 @@ static int atabmorphia(CSOUND *csound, TABMORPH *p) /* all arguments at a-rate *
 }
 
 
-static int atabmorphi(CSOUND *csound, TABMORPH *p) /* all args k-rate except out and table index */
+ /* all args k-rate except out and table index */
+static int atabmorphi(CSOUND *csound, TABMORPH *p)
 {
     int    n, nsmps = csound->ksmps, tablen = p->length;
 
@@ -258,20 +262,22 @@ static int atabmorphi(CSOUND *csound, TABMORPH *p) /* all args k-rate except out
 
 #define S(x)    sizeof(x)
 
-static OENTRY localops[] = {
+OENTRY tabmoroph_localops[] = {
 
-{ "tabmorph",  S(TABMORPH), 3,  "k", "kkkkm",
+{ "tabmorph",  S(TABMORPH), TR|3,  "k", "kkkkm",
                (SUBR) tabmorph_set, (SUBR) tabmorph, NULL},
-{ "tabmorphi", S(TABMORPH), 3,  "k", "kkkkm",
+{ "tabmorphi", S(TABMORPH), TR|3,  "k", "kkkkm",
                (SUBR) tabmorph_set, (SUBR) tabmorphi, NULL},
-{ "tabmorpha", S(TABMORPH), 5,  "a", "aaaam",
+{ "tabmorpha", S(TABMORPH), TR|5,  "a", "aaaam",
                (SUBR) tabmorph_set,  NULL, (SUBR) atabmorphia},
-{ "tabmorphak",S(TABMORPH), 5,  "a", "akkkm",
+{ "tabmorphak",S(TABMORPH), TR|5,  "a", "akkkm",
                (SUBR) tabmorph_set,  NULL, (SUBR) atabmorphi }
 
 };
 
 int tabmorph_init_(CSOUND *csound) {
-   return csound->AppendOpcodes(csound, &(localops[0]),
-                                 (int) (sizeof(localops) / sizeof(OENTRY)));
+    return
+      csound->AppendOpcodes(csound, &(tabmoroph_localops[0]),
+                            (int) (sizeof(tabmoroph_localops) / sizeof(OENTRY)));
 }
+
diff --git a/Opcodes/gab/vectorial.c b/Opcodes/gab/vectorial.c
index 43da776..3be2081 100644
--- a/Opcodes/gab/vectorial.c
+++ b/Opcodes/gab/vectorial.c
@@ -20,7 +20,9 @@
     Optional arguments to some opcodes and other fixes by Andres Cabrera
     and Istvan Varga.
 */
-#include "csdl.h"
+//#include "csdl.h"
+#include "csoundCore.h"
+#include "interlocks.h"
 #include "vectorial.h"
 #include <math.h>
 
@@ -437,7 +439,7 @@ static int vectorOp_set(CSOUND *csound, VECTOROP *p)
      if ((elements | (long)*p->kdstoffset) < 0L ||
           (elements + (long)*p->kdstoffset) > p->len) {
        return csound->InitError(csound,
-                                Str("vectorop: Destination table length exceeded"));
+                      Str("vectorop: Destination table length exceeded"));
      } */
     return OK;
 }
@@ -451,7 +453,8 @@ static int vadd_i(CSOUND *csound, VECTOROPI *p)
 
     ftp = csound->FTnp2Find(csound, p->ifn);
     if (UNLIKELY(ftp == NULL))  {
-      return csound->InitError(csound,Str("vadd_i: invalid table number %i"),
+      return csound->InitError(csound,
+                               Str("vadd_i: invalid table number %i"),
                                (int) *p->ifn);
     }
     vector = ftp->ftable;
@@ -708,7 +711,8 @@ static int vectorsOp_set(CSOUND *csound, VECTORSOP *p)
     p->len2 = (int32) ftp2->flen+1;/*
     if ((elements | (int32) *p->kdstoffset) < 0L ||
          (elements + (int32) *p->kdstoffset)  > p->len1) {
-      return csound->Warning(csound, Str("vectorops: Destination table length exceeded"));
+      return csound->Warning(csound,
+                             Str("vectorops: Destination table length exceeded"));
     }*/
     return OK;
 }
@@ -1532,21 +1536,21 @@ static int vexpvk(CSOUND *csound,VECTORSOP *p)
 
 static int vexpv_i(CSOUND *csound, VECTORSOPI *p)
 {
-  FUNC    *ftp1, *ftp2;
-  MYFLT   *vector1, *vector2;
-  int32    i, j, n, elements, srcoffset, dstoffset, len1, len2;
+    FUNC    *ftp1, *ftp2;
+    MYFLT   *vector1, *vector2;
+    int32    i, j, n, elements, srcoffset, dstoffset, len1, len2;
 
-  ftp1 = csound->FTnp2Find(csound, p->ifn1);
-  ftp2 = csound->FTnp2Find(csound, p->ifn2);
-  if (UNLIKELY(ftp1 == NULL)) {
+    ftp1 = csound->FTnp2Find(csound, p->ifn1);
+    ftp2 = csound->FTnp2Find(csound, p->ifn2);
+    if (UNLIKELY(ftp1 == NULL)) {
       return csound->InitError(csound,
                                Str("vexpv_i: ifn1 invalid table number %i"),
                                (int) *p->ifn1);
-  }
-  else if (UNLIKELY(ftp2 == NULL))  {
-    return csound->InitError(csound,
-                             Str("vexpv_i: ifn2 invalid table number %i"),
-                             (int) *p->ifn2);
+    }
+    else if (UNLIKELY(ftp2 == NULL))  {
+      return csound->InitError(csound,
+                               Str("vexpv_i: ifn2 invalid table number %i"),
+                               (int) *p->ifn2);
     }
     /*if (*p->ifn1 == *p->ifn2)
       csound->Warning(csound, Str("vexpv_i: ifn1 = ifn2."));*/
@@ -1691,7 +1695,7 @@ static int vlimit_set(CSOUND *csound,VLIMIT *p)
       p->elements = (int) *p->ielements;
     }
     if (UNLIKELY(p->elements > ftp->flen )) {
-      return csound->InitError(csound, "vectorop: invalid num of elements");
+      return csound->InitError(csound, Str("vectorop: invalid num of elements"));
     }
     return OK;
 }
@@ -1720,17 +1724,18 @@ static int vport_set(CSOUND *csound,VPORT *p)
       elements = (p->elements = (int) *p->ielements);
       if (UNLIKELY(elements > ftp->flen) )
         return csound->InitError(csound,
-                                 "vport: invalid table length or num of elements");
+                                 Str("vport: invalid table length or "
+                                     "num of elements"));
     }
-    else return csound->InitError(csound, "vport: invalid table");
+    else return csound->InitError(csound, Str("vport: invalid table"));
     if (LIKELY(*p->ifnInit)) {
       if (LIKELY((ftp = csound->FTnp2Find(csound,p->ifnInit)) != NULL)) {
         vecInit = ftp->ftable;
         if (UNLIKELY(elements > ftp->flen) )
-          return csound->InitError(csound, "vport: invalid init table length"
-                                   " or num of elements");
+          return csound->InitError(csound, Str("vport: invalid init table length"
+                                               " or num of elements"));
       }
-      else return csound->InitError(csound, "vport: invalid init table");
+      else return csound->InitError(csound, Str("vport: invalid init table"));
     }
     if (p->auxch.auxp == NULL)
       csound->AuxAlloc(csound, elements * sizeof(MYFLT), &p->auxch);
@@ -1880,14 +1885,16 @@ static int vrandh_set(CSOUND *csound,VRANDH *p)
         p->elements = (int) *p->ielements;
         p->offset = (int) *p->idstoffset;
       }
-      else return csound->InitError(csound, "vrandh: Invalid table.");
+      else return csound->InitError(csound, Str("vrandh: Invalid table."));
       if (UNLIKELY(*p->idstoffset >= ftp->flen))
         return csound->InitError(csound,
-                                 "vrandh: idstoffset is greater than table length.");
+                                 Str("vrandh: idstoffset is greater than"
+                                     " table length."));
       p->vector = ftp->ftable + p->offset;
       if (UNLIKELY(p->elements + p->offset > ftp->flen)) {
         csound->Warning(csound,
-                        "randh: Table length exceeded, last elements discarded.");
+                        Str("randh: Table length exceeded, "
+                            "last elements discarded."));
         p->elements = p->offset - ftp->flen;
       }
     }
@@ -1977,14 +1984,16 @@ static int vrandi_set(CSOUND *csound,VRANDI *p)
         p->elements = (int) *p->ielements;
         p->offset = (int) *p->idstoffset;
       }
-      else return csound->InitError(csound, "vrandi: Invalid table.");
+      else return csound->InitError(csound, Str("vrandi: Invalid table."));
       if (UNLIKELY(p->offset >= ftp->flen))
         return csound->InitError(csound,
-                                 "vrandi: idstoffset is greater than table length.");
+                                 Str("vrandi: idstoffset is greater than"
+                                     "table length."));
       p->vector = ftp->ftable + p->offset;
       if (UNLIKELY(p->elements > ftp->flen)) {
         csound->Warning(csound,
-                        "vrandi: Table length exceeded, last elements discarded.");
+                        Str("vrandi: Table length exceeded, "
+                            "last elements discarded."));
         p->elements = p->offset - ftp->flen;
       }
     }
@@ -2054,7 +2063,7 @@ static int vrandi(CSOUND *csound,VRANDI *p)
     return OK;
 }
 
-static int vecdly_set(CSOUND *csound,VECDEL *p)
+static int vecdly_set(CSOUND *csound, VECDEL *p)
 {
     FUNC        *ftp;
     int elements = (p->elements = (int) *p->ielements), j;
@@ -2064,21 +2073,24 @@ static int vecdly_set(CSOUND *csound,VECDEL *p)
       p->outvec = ftp->ftable;
       elements = (p->elements = (int) *p->ielements);
       if (UNLIKELY( elements > ftp->flen ))
-        return csound->InitError(csound, "vecdelay: invalid num of elements");
+        return csound->InitError(csound,
+                                 Str("vecdelay: invalid num of elements"));
     }
-    else return csound->InitError(csound, "vecdly: invalid output table");
+    else return csound->InitError(csound, Str("vecdly: invalid output table"));
     if (LIKELY((ftp = csound->FTnp2Find(csound,p->ifnIn)) != NULL)) {
       p->invec = ftp->ftable;
       if (UNLIKELY(elements > ftp->flen))
-        return csound->InitError(csound, "vecdelay: invalid num of elements");
+        return csound->InitError(csound,
+                                 Str("vecdelay: invalid num of elements"));
     }
-    else return csound->InitError(csound, "vecdly: invalid input table");
+    else return csound->InitError(csound, Str("vecdly: invalid input table"));
     if (LIKELY((ftp = csound->FTnp2Find(csound,p->ifnDel)) != NULL)) {
       p->dlyvec = ftp->ftable;
       if (UNLIKELY( elements > ftp->flen ))
-        return csound->InitError(csound, "vecdelay: invalid num of elements");
+        return csound->InitError(csound,
+                                 Str("vecdelay: invalid num of elements"));
     }
-    else return csound->InitError(csound, "vecdly: invalid delay table");
+    else return csound->InitError(csound, Str("vecdly: invalid delay table"));
 
     n = (p->maxd = (int32) (*p->imaxd * csound->ekr));
     if (n == 0) n = (p->maxd = 1);
@@ -2123,7 +2135,7 @@ static int vecdly(CSOUND *csound,VECDEL *p)
     MYFLT *outVec = p->outvec, *dlyVec = p->dlyvec;
     int elements = p->elements;
     if (UNLIKELY(buf==NULL)) {
-      return csound->InitError(csound, "vecdly: not initialized");
+      return csound->InitError(csound, Str("vecdly: not initialised"));
     }
     do {
       (*buf)[*indx] = *inVec++;
@@ -2165,7 +2177,8 @@ static int vseg_set(CSOUND *csound,VSEG *p)
       p->elements = (int) *p->ielements;
     }
     if (UNLIKELY( p->elements > ftp->flen ))
-      return csound->InitError(csound, "vlinseg/vexpseg: invalid num. of elements");
+      return csound->InitError(csound,
+                               Str("vlinseg/vexpseg: invalid num. of elements"));
 
     /* memset(p->vector, 0, sizeof(MYFLT)*p->elements); */
     vector = p->vector;
@@ -2175,7 +2188,8 @@ static int vseg_set(CSOUND *csound,VSEG *p)
       *vector++ = FL(0.0);
     } while (--flength);
 
-    if (UNLIKELY(**argp <= FL(0.0)))  return NOTOK; /* if idur1 <= 0, skip init  */
+    if (UNLIKELY(**argp <= FL(0.0)))
+      return NOTOK; /* if idur1 <= 0, skip init */
     p->cursegp = segp;              /* else proceed from 1st seg */
     segp--;
     do {
@@ -2206,7 +2220,7 @@ static int vlinseg(CSOUND *csound,VSEG *p)
     MYFLT       *curtab, *nxttab,curval, nxtval, durovercnt=FL(0.0), *vector;
     int32        flength, upcnt;
     if (UNLIKELY(p->auxch.auxp==NULL)) {
-      return csound->InitError(csound, "tableseg: not initialized");
+      return csound->InitError(csound, Str("tableseg: not initialised"));
     }
     segp = p->cursegp;
     curtab = segp->function->ftable;
@@ -2236,7 +2250,7 @@ static int vexpseg(CSOUND *csound,VSEG *p)
     int32        flength, upcnt;
 
     if (UNLIKELY(p->auxch.auxp==NULL)) {
-      return csound->InitError(csound, "tablexseg: not initialized");
+      return csound->InitError(csound, Str("tablexseg: not initialised"));
     }
     segp = p->cursegp;
     curtab = segp->function->ftable;
@@ -2283,7 +2297,8 @@ static int vphaseseg_set(CSOUND *csound,VPSEG *p)
       p->elements = (int) *p->ielements;
     }
     if ( p->elements > ftp->flen )
-      return csound->InitError(csound, "vphaseseg: invalid num. of elements");
+      return csound->InitError(csound,
+                               Str("vphaseseg: invalid num. of elements"));
     vector = p->vector;
     flength = p->elements;
 
@@ -2368,7 +2383,6 @@ static int vphaseseg(CSOUND *csound,VPSEG *p)
 static int kdel_set(CSOUND *csound,KDEL *p)
 {
     uint32 n;
-    MYFLT *buf;
     n = (p->maxd = (int32) (*p->imaxd * csound->ekr));
     if (n == 0) n = (p->maxd = 1);
 
@@ -2389,7 +2403,7 @@ static int kdelay(CSOUND *csound,KDEL *p)
     MYFLT *buf = (MYFLT *)p->aux.auxp, fv1, fv2;
 
     if (UNLIKELY(buf==NULL)) {
-      return csound->InitError(csound, "vdelayk: not initialized");
+      return csound->InitError(csound, Str("vdelayk: not initialised"));
     }
 
     indx = p->left;
@@ -2422,19 +2436,20 @@ static int ca_set(CSOUND *csound,CELLA *p)
       p->outVec = ftp->ftable;
       elements = (p->elements = (int) *p->ielements);
       if (UNLIKELY( elements > ftp->flen ))
-        return csound->InitError(csound, "cella: invalid num of elements");
+        return csound->InitError(csound, Str("cella: invalid num of elements"));
     }
-    else return csound->InitError(csound, "cella: invalid output table");
+    else return csound->InitError(csound, Str("cella: invalid output table"));
     if (LIKELY((ftp = csound->FTnp2Find(csound,p->initStateFunc)) != NULL)) {
       initVec = (p->initVec = ftp->ftable);
       if (UNLIKELY(elements > ftp->flen ))
-        return csound->InitError(csound, "cella: invalid num of elements");
+        return csound->InitError(csound, Str("cella: invalid num of elements"));
     }
-    else return csound->InitError(csound, "cella: invalid initial state table");
+    else return csound->InitError(csound,
+                                  Str("cella: invalid initial state table"));
     if (LIKELY((ftp = csound->FTnp2Find(csound,p->iRuleFunc)) != NULL)) {
       p->ruleVec = ftp->ftable;
     }
-    else return csound->InitError(csound, "cella: invalid rule table");
+    else return csound->InitError(csound, Str("cella: invalid rule table"));
 
     if (p->auxch.auxp == NULL)
       csound->AuxAlloc(csound, elements * sizeof(MYFLT) * 2, &p->auxch);
@@ -2498,59 +2513,61 @@ static int ca(CSOUND *csound,CELLA *p)
 
 #define S(x)    sizeof(x)
 
-static OENTRY localops[] = {
-  { "vtablei", S(MTABLEI),   1, "",   "iiiim", (SUBR)mtable_i,  NULL },
-  { "vtablek", S(MTABLE),    3, "",   "kkkiz", (SUBR)mtable_set, (SUBR)mtable_k, NULL },
-  { "vtablea", S(MTABLE),    5, "",   "akkiy", (SUBR)mtable_set, NULL, (SUBR)mtable_a },
-  { "vtablewi", S(MTABLEIW), 1, "",   "iiim", (SUBR)mtablew_i,  NULL },
-  { "vtablewk", S(MTABLEW),  3, "",   "kkiz", (SUBR)mtablew_set, (SUBR)mtablew_k, NULL },
-  { "vtablewa", S(MTABLEW),  5, "",   "akiy", (SUBR)mtablew_set, NULL, (SUBR)mtablew_a },
-  { "vtabi", S(MTABI),       1, "",   "iim", (SUBR)mtab_i,  NULL },
-  { "vtabk", S(MTAB),        3, "",   "kiz", (SUBR)mtab_set, (SUBR)mtab_k, NULL },
-  { "vtaba", S(MTAB),        5, "",  "aiy", (SUBR)mtab_set, NULL, (SUBR)mtab_a },
-  { "vtabwi", S(MTABIW),     1, "",  "iim", (SUBR)mtabw_i,  NULL },
-  { "vtabwk", S(MTABW),      3, "",  "kiz", (SUBR)mtabw_set, (SUBR)mtabw_k, NULL },
-  { "vtabwa", S(MTABW),      5, "",  "aiy", (SUBR)mtabw_set, NULL, (SUBR)mtabw_a },
-
-  { "vadd",   S(VECTOROP),   3, "",  "ikkOO", (SUBR)vectorOp_set, (SUBR) vaddk },
-  { "vadd_i", S(VECTOROPI),  1, "",  "iiio", (SUBR) vadd_i, NULL, NULL        },
-  { "vmult",  S(VECTOROP),   3, "",  "ikkOO", (SUBR)vectorOp_set, (SUBR) vmultk},
-  { "vmult_i", S(VECTOROPI), 1, "",  "iiio", (SUBR) vmult_i, NULL, NULL       },
-  { "vpow",   S(VECTOROP),   3, "",  "ikkOO", (SUBR)vectorOp_set, (SUBR) vpowk },
-  { "vpow_i", S(VECTOROPI),  1, "",  "iiio", (SUBR) vpow_i, NULL, NULL        },
-  { "vexp",   S(VECTOROP),   3, "",  "ikkOO", (SUBR)vectorOp_set, (SUBR) vexpk },
-  { "vexp_i", S(VECTOROPI),  1, "",  "iiio", (SUBR) vexp_i, NULL, NULL        },
-  { "vaddv",  S(VECTORSOP),  3, "",  "iikOOO", (SUBR)vectorsOp_set, (SUBR) vaddvk },
-  { "vaddv_i",  S(VECTORSOPI),  1, "",  "iiioo", (SUBR)vaddv_i, NULL, NULL        },
-  { "vsubv",  S(VECTORSOP),  3, "",  "iikOOO", (SUBR)vectorsOp_set, (SUBR) vsubvk },
-  { "vsubv_i",  S(VECTORSOPI),  1, "",  "iiioo", (SUBR)vsubv_i, NULL, NULL        },
-  { "vmultv", S(VECTORSOP),  3, "",  "iikOOO", (SUBR)vectorsOp_set, (SUBR) vmultvk},
-  { "vmultv_i", S(VECTORSOPI),  1, "",  "iiioo", (SUBR)vmultv_i, NULL, NULL       },
-  { "vdivv",  S(VECTORSOP),  3, "",  "iikOOO", (SUBR)vectorsOp_set, (SUBR) vdivvk },
-  { "vdivv_i",  S(VECTORSOPI),  1, "",  "iiioo", (SUBR)vdivv_i, NULL, NULL        },
-  { "vpowv",  S(VECTORSOP),  3, "",  "iikOOO", (SUBR)vectorsOp_set, (SUBR) vpowvk },
-  { "vpowv_i",  S(VECTORSOPI),  1, "",  "iiioo", (SUBR)vpowv_i, NULL, NULL      },
-  { "vexpv",  S(VECTORSOP),  3, "",  "iikOOO", (SUBR)vectorsOp_set, (SUBR) vexpvk },
-  { "vexpv_i",  S(VECTORSOPI),  1, "",  "iiioo", (SUBR)vexpv_i, NULL, NULL      },
-  { "vcopy",  S(VECTORSOP),  3, "",  "iikOOO", (SUBR)vectorsOp_set, (SUBR) vcopy },
-  { "vcopy_i", S(VECTORSOP), 1, "",  "iiioo", (SUBR) vcopy_i, NULL, NULL      },
-  { "vmap",   S(VECTORSOPI),  1, "",  "iiioo", (SUBR)vmap_i, NULL, NULL          },
-  { "vlimit", S(VLIMIT),     3, "",  "ikki",(SUBR)vlimit_set, (SUBR)vlimit    },
-  { "vwrap",  S(VLIMIT),     3, "",  "ikki",(SUBR)vlimit_set, (SUBR) vwrap    },
+OENTRY vectorial_localops[] = {
+  { "vtablei", S(MTABLEI),   TR|1, "",   "iiiim", (SUBR)mtable_i,  NULL },
+  { "vtablek", S(MTABLE),    TR|3, "",   "kkkiz", (SUBR)mtable_set, (SUBR)mtable_k, NULL },
+  { "vtablea", S(MTABLE),    TR|5, "",   "akkiy", (SUBR)mtable_set, NULL, (SUBR)mtable_a },
+  { "vtablewi", S(MTABLEIW), TB|1, "",   "iiim", (SUBR)mtablew_i,  NULL },
+  { "vtablewk", S(MTABLEW),  TB|3, "",   "kkiz", (SUBR)mtablew_set, (SUBR)mtablew_k, NULL },
+  { "vtablewa", S(MTABLEW),  TB|5, "",   "akiy", (SUBR)mtablew_set, NULL, (SUBR)mtablew_a },
+  { "vtabi", S(MTABI),       TR|1, "",   "iim", (SUBR)mtab_i,  NULL },
+  { "vtabk", S(MTAB),        TR|3, "",   "kiz", (SUBR)mtab_set, (SUBR)mtab_k, NULL },
+  { "vtaba", S(MTAB),        TR|5, "",  "aiy", (SUBR)mtab_set, NULL, (SUBR)mtab_a },
+  { "vtabwi", S(MTABIW),     TB|1, "",  "iim", (SUBR)mtabw_i,  NULL },
+  { "vtabwk", S(MTABW),      TB|3, "",  "kiz", (SUBR)mtabw_set, (SUBR)mtabw_k, NULL },
+  { "vtabwa", S(MTABW),      TB|5, "",  "aiy", (SUBR)mtabw_set, NULL, (SUBR)mtabw_a },
+
+  { "vadd",   S(VECTOROP),   TB|3, "",  "ikkOO", (SUBR)vectorOp_set, (SUBR) vaddk },
+  { "vadd_i", S(VECTOROPI),  TB|1, "",  "iiio", (SUBR) vadd_i, NULL, NULL        },
+  { "vmult",  S(VECTOROP),   TB|3, "",  "ikkOO", (SUBR)vectorOp_set, (SUBR) vmultk},
+  { "vmult_i", S(VECTOROPI), TB|1, "",  "iiio", (SUBR) vmult_i, NULL, NULL       },
+  { "vpow",   S(VECTOROP),   TB|3, "",  "ikkOO", (SUBR)vectorOp_set, (SUBR) vpowk },
+  { "vpow_i", S(VECTOROPI),  TB|1, "",  "iiio", (SUBR) vpow_i, NULL, NULL        },
+  { "vexp",   S(VECTOROP),   TB|3, "",  "ikkOO", (SUBR)vectorOp_set, (SUBR) vexpk },
+  { "vexp_i", S(VECTOROPI),  TB|1, "",  "iiio", (SUBR) vexp_i, NULL, NULL        },
+  { "vaddv",  S(VECTORSOP),  TB|3, "",  "iikOOO", (SUBR)vectorsOp_set, (SUBR) vaddvk },
+  { "vaddv_i",  S(VECTORSOPI), TB|1, "",  "iiioo", (SUBR)vaddv_i, NULL, NULL        },
+  { "vsubv",  S(VECTORSOP),  TB|3, "",  "iikOOO", (SUBR)vectorsOp_set, (SUBR) vsubvk },
+  { "vsubv_i",  S(VECTORSOPI),  TB|1, "",  "iiioo", (SUBR)vsubv_i, NULL, NULL        },
+  { "vmultv", S(VECTORSOP),  TB|3, "",  "iikOOO", (SUBR)vectorsOp_set, (SUBR) vmultvk},
+  { "vmultv_i", S(VECTORSOPI),  TB|1, "",  "iiioo", (SUBR)vmultv_i, NULL, NULL       },
+  { "vdivv",  S(VECTORSOP), TB| 3, "",  "iikOOO", (SUBR)vectorsOp_set, (SUBR) vdivvk },
+  { "vdivv_i",  S(VECTORSOPI),  TB|1, "",  "iiioo", (SUBR)vdivv_i, NULL, NULL        },
+  { "vpowv",  S(VECTORSOP),  TB|3, "",  "iikOOO", (SUBR)vectorsOp_set, (SUBR) vpowvk },
+  { "vpowv_i",  S(VECTORSOPI),  TB|1, "",  "iiioo", (SUBR)vpowv_i, NULL, NULL      },
+  { "vexpv",  S(VECTORSOP),  TB|3, "",  "iikOOO", (SUBR)vectorsOp_set, (SUBR) vexpvk },
+  { "vexpv_i",  S(VECTORSOPI),  TB|1, "",  "iiioo", (SUBR)vexpv_i, NULL, NULL      },
+  { "vcopy",  S(VECTORSOP),  TB|3, "",  "iikOOO", (SUBR)vectorsOp_set, (SUBR) vcopy },
+  { "vcopy_i", S(VECTORSOP), TB|1, "",  "iiioo", (SUBR) vcopy_i, NULL, NULL   },
+  { "vmap",   S(VECTORSOPI), TB|1, "",  "iiioo", (SUBR)vmap_i, NULL, NULL     },
+  { "vlimit", S(VLIMIT),  TR|3, "",  "ikki",(SUBR)vlimit_set, (SUBR)vlimit    },
+  { "vwrap",  S(VLIMIT),  TB|3, "",  "ikki",(SUBR)vlimit_set, (SUBR) vwrap    },
   { "vmirror", S(VLIMIT),    3, "",  "ikki",(SUBR)vlimit_set, (SUBR)vmirror   },
-  { "vlinseg", S(VSEG),      3, "",  "iin", (SUBR)vseg_set,   (SUBR)vlinseg   },
+  { "vlinseg", S(VSEG),   TB|3, "",  "iin", (SUBR)vseg_set,   (SUBR)vlinseg   },
   { "vexpseg", S(VSEG),      3, "",  "iin", (SUBR)vseg_set,   (SUBR)vexpseg   },
-  { "vrandh", S(VRANDH),     3, "",  "ikkiovoo",(SUBR)vrandh_set, (SUBR) vrandh   },
-  { "vrandi", S(VRANDI),     3, "",  "ikkiovoo",(SUBR)vrandi_set, (SUBR)vrandi    },
-  { "vport",  S(VPORT),      3, "",  "ikio",(SUBR)vport_set,  (SUBR)vport     },
+  { "vrandh", S(VRANDH),  TB|3, "",  "ikkiovoo",(SUBR)vrandh_set, (SUBR) vrandh},
+  { "vrandi", S(VRANDI),  TB|3, "",  "ikkiovoo",(SUBR)vrandi_set, (SUBR)vrandi },
+  { "vport",  S(VPORT),   TB|3, "",  "ikio",(SUBR)vport_set,  (SUBR)vport     },
   { "vecdelay", S(VECDEL),   3, "",  "iiiiio",(SUBR)vecdly_set, (SUBR)vecdly  },
   { "vdelayk", S(KDEL),      3, "k", "kkioo",(SUBR)kdel_set,  (SUBR)kdelay    },
-  { "vcella", S(CELLA),      3, "",  "kkiiiiip",(SUBR)ca_set, (SUBR)ca        }
+  { "vcella", S(CELLA),      TR|3, "",  "kkiiiiip",(SUBR)ca_set, (SUBR)ca     }
 };
 
 int gab_vectorial_init_(CSOUND *csound)
 {
-    return csound->AppendOpcodes(csound, &(localops[0]),
-                                 (int) (sizeof(localops) / sizeof(OENTRY)));
+    return
+      csound->AppendOpcodes(csound, &(vectorial_localops[0]),
+                            (int) (sizeof(vectorial_localops) / sizeof(OENTRY)));
 }
 
+
diff --git a/Opcodes/gab/vectorial.h b/Opcodes/gab/vectorial.h
index 3a31bfb..8b0092a 100644
--- a/Opcodes/gab/vectorial.h
+++ b/Opcodes/gab/vectorial.h
@@ -168,7 +168,7 @@ typedef struct {
     MYFLT   *ifnOut, *ifnIn, *ifnDel, *ielements, *imaxd, *istod;
     AUXCH   aux;
     MYFLT   **buf, *outvec, *invec, *dlyvec;
-    long    *left, maxd;
+    int32   *left, maxd;
     int     elements;
 } VECDEL;
 
diff --git a/Opcodes/grain.c b/Opcodes/grain.c
index 8638193..c7eb668 100644
--- a/Opcodes/grain.c
+++ b/Opcodes/grain.c
@@ -155,7 +155,7 @@ static int ags(CSOUND *csound, PGRA *p) /*  Granular U.G. a-rate main routine */
 #define S(x)    sizeof(x)
 
 static OENTRY localops[] = {
-{ "grain", S(PGRA),  5,   "a",    "xxxkkkiiio", (SUBR)agsset, NULL, (SUBR)ags }
+{ "grain", S(PGRA),  TR|5,   "a",    "xxxkkkiiio", (SUBR)agsset, NULL, (SUBR)ags }
 };
 
 int grain_init_(CSOUND *csound)
diff --git a/Opcodes/grain4.c b/Opcodes/grain4.c
index d66c7a7..17cfd3c 100644
--- a/Opcodes/grain4.c
+++ b/Opcodes/grain4.c
@@ -33,7 +33,9 @@
 /*        envelop rise and decade curve                 */
 /* Minor changes by John Fitch Dec 1995                 */
 
-#include "csdl.h"
+// #include "csdl.h"
+#include "csoundCore.h"        
+#include "interlocks.h"
 #include "grain4.h"
 #include <math.h>
 
@@ -261,7 +263,7 @@ static int graingenv4(CSOUND *csound, GRAINV4 *p)
     MYFLT       *ar, *ftbl, *ftbl_env=NULL;
     int         n, nsmps = csound->ksmps;
     int         nvoice;
-    int32       flen, tmplong1, tmplong2, tmplong3, tmpfpnt, flen_env=0;
+    int32       tmplong1, tmplong2, tmplong3, tmpfpnt, flen_env=0;
     MYFLT       fract, v1, tmpfloat1;
     int32       att_len, dec_len, att_sus;
     MYFLT       envlop;
@@ -275,7 +277,6 @@ static int graingenv4(CSOUND *csound, GRAINV4 *p)
  /* Recover parameters from previous call.... */
    ftp = p->ftp;
    if (UNLIKELY(p->ftp==NULL)) goto err1;          /* RWD fix */
-   flen = ftp->flen;
    ftbl = ftp->ftable;
 
    if (*p->ifnenv > 0) {
@@ -429,10 +430,10 @@ static MYFLT grand( GRAINV4 *p)
 
 #define S(x)    sizeof(x)
 
-static OENTRY localops[] = {
-{ "granule", S(GRAINV4), 5, "a", "xiiiiiiiiikikiiivppppo",
-             (SUBR)grainsetv4, NULL, (SUBR)graingenv4}
+static OENTRY grain4_localops[] = {
+  { "granule", S(GRAINV4), TR|5, "a", "xiiiiiiiiikikiiivppppo",
+             (SUBR)grainsetv4, NULL, (SUBR)graingenv4},
 };
 
-LINKAGE
+LINKAGE1(grain4_localops)
 
diff --git a/Opcodes/harmon.c b/Opcodes/harmon.c
index 29dce63..9725c87 100644
--- a/Opcodes/harmon.c
+++ b/Opcodes/harmon.c
@@ -21,7 +21,9 @@
     02111-1307 USA
 */
 
-#include "csdl.h"
+#include "csoundCore.h"
+#include "interlocks.h"
+
 #include <math.h>
 
 typedef struct {
@@ -131,7 +133,7 @@ static int harmon234(CSOUND *csound, HARM234 *p)
     MYFLT       koct, vocamp, diramp;
     PULDAT      *endp;
     VOCDAT      *vdp;
-    int16       n, nsmps, oflow = 0;
+    int16       nsmps, oflow = 0;
 
     if ((koct = *p->koct) != p->prvoct) {               /* if new pitch estimate */
       if (koct >= p->minoct) {                          /*   above requested low */
@@ -432,11 +434,11 @@ int harmon4(CSOUND *csound, HARMON4 *p) { return harmon234(csound, &p->hrmdat);}
 
 #define S(x)    sizeof(x)
 
-static OENTRY localops[] = {
+static OENTRY harmon_localops[] = {
   { "harmon2",S(HARMON2),5, "a",  "akkkiip",  (SUBR)harm2set,NULL, (SUBR)harmon2 },
   { "harmon3",S(HARMON3),5, "a",  "akkkkiip", (SUBR)harm3set,NULL, (SUBR)harmon3 },
-  { "harmon4",S(HARMON4),5, "a",  "akkkkkiip",(SUBR)harm4set,NULL, (SUBR)harmon4 }
+  { "harmon4",S(HARMON4),5, "a",  "akkkkkiip",(SUBR)harm4set,NULL, (SUBR)harmon4 },
 };
 
-LINKAGE
+LINKAGE1(harmon_localops)
 
diff --git a/Opcodes/hrtfearly.c b/Opcodes/hrtfearly.c
new file mode 100644
index 0000000..4e95070
--- /dev/null
+++ b/Opcodes/hrtfearly.c
@@ -0,0 +1,1806 @@
+/*
+Brian Carty
+PhD Code August 2010
+binaural reverb: early reflections
+
+   This file is part of Csound.
+
+    The Csound Library is free software; you can redistribute it
+    and/or modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    Csound 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 Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with Csound; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+    02111-1307 USA
+*/
+
+/* #include "csdl.h" */
+#include "csoundCore.h"
+#include "interlocks.h"
+
+#define SQUARE(X) ((X)*(X))
+
+/* definitions, from mit */
+#define minelev (-40)
+#define elevincrement (10)
+
+static const int elevationarray[14] =
+  {56, 60, 72, 72, 72, 72, 72, 60, 56, 45, 36, 24, 12, 1 };
+
+/* for ppc byte switch */
+#ifdef WORDS_BIGENDIAN
+static int swap4bytes(CSOUND* csound, MEMFIL* mfp)
+{
+    char c1, c2, c3, c4;
+    char *p = mfp->beginp;
+    int  size = mfp->length;
+
+    while (size >= 4)
+      {
+        c1 = p[0]; c2 = p[1]; c3 = p[2]; c4 = p[3];
+        p[0] = c4; p[1] = c3; p[2] = c2; p[3] = c1;
+        size -= 4; p +=4;
+      }
+
+    return OK;
+}
+#else
+static int (*swap4bytes)(CSOUND*, MEMFIL*) = NULL;
+#endif
+
+/* low pass filter for overall surface shape */
+MYFLT filter(MYFLT* sig, MYFLT highcoeff, MYFLT lowcoeff,
+             MYFLT *del, int vecsize, MYFLT sr)
+{
+    MYFLT costh, coef;
+    int i;
+
+    /* setup filter */
+    MYFLT T = FL(1.0) / sr;
+    MYFLT twopioversr = FL(2.0 * PI * T);
+    MYFLT freq;
+    MYFLT check;
+    MYFLT scale, nyqresponse, irttwo, highresponse, lowresponse, cosw,
+          a, b, c, x, y;
+
+    irttwo = FL(1.0) / SQRT(FL(2.0));
+
+    /* simple filter deals with difference in low and high */
+    highresponse = FL(1.0) - highcoeff;
+    lowresponse = FL(1.0) - lowcoeff;
+    /* scale factor: walls assumed to be low pass */
+    scale = lowresponse;
+    nyqresponse = highresponse + lowcoeff;
+    /* should always be lowpass! */
+    if(nyqresponse > irttwo)
+      nyqresponse = irttwo;
+
+    /* calculate cutoff, according to nyqresponse */
+    /* w = twopioversr * f (= sr / (MYFLT)2.0)
+       (w = pi in the case of nyq...2pi/sr * sr/2) */
+    /* cosw = (MYFLT)cos(w);... = -1 in case of nyq */
+    cosw = -FL(1.0);
+
+    a = c = SQUARE(nyqresponse) - FL(1.0);
+    b = (FL(2.0) * cosw * SQUARE(nyqresponse)) - FL(2.0);
+    /* '+' and '-' sqrt in quadratic equation give equal results in this scenario:
+       working backwards to find cutoff freq of simple tone filter! */
+    x = (-b + (SQRT(SQUARE(b) - FL(4.0) * a * c))) / (FL(2.0) * a);
+    y = (-SQUARE(x) - FL(1.0)) / (FL(2.0) * x);
+
+    check = FL(2.0) - y;
+    /* check for legal acos arg */
+    if(check < -FL(1.0))
+      check = -FL(1.0);
+    freq = FL(acos(check));
+    freq /= twopioversr;
+
+    /* filter */
+    costh = FL(2.0) - COS(freq * twopioversr);
+    coef = SQRT(costh * costh - 1.0) - costh;
+
+    for(i = 0; i < vecsize; i++)
+      {
+        /* filter */
+        sig[i] = (sig[i] * (1 + coef) - *del * coef);
+        /* scale */
+        sig[i] *= scale;
+        /* store */
+        *del = sig[i];
+      }
+
+    return *sig;
+}
+
+/* band pass for surface detail, from csound eqfil */
+MYFLT band(MYFLT* sig, MYFLT cfreq, MYFLT bw, MYFLT g, MYFLT *del,
+           int vecsize, MYFLT sr)
+{
+    MYFLT T = FL(1.0) / sr;
+    MYFLT pioversr = FL(PI) * T;
+    MYFLT a = (COS(cfreq * pioversr * 2.0));
+    MYFLT b = (TAN(bw * pioversr));
+    MYFLT c = (FL(1.0) - b) / (FL(1.0) + b);
+    MYFLT w, y;
+    int i;
+
+    for(i = 0; i < vecsize; i++)
+      {
+        w = sig[i] + a * (FL(1.0) + c) * del[0] - c * del[1];
+        y = w * c - a * (FL(1.0) + c) * del[0] + del[1];
+        sig[i] = FL(0.5) * (y + sig[i] + g * (sig[i] - y));
+        del[1] = del[0];
+        del[0] = w;
+      }
+
+    return *sig;
+}
+
+typedef struct
+{
+        OPDS  h;
+        /* out l/r, low rt60, high rt60, amp, delay for latediffuse */
+        MYFLT *outsigl, *outsigr, *irt60low, *irt60high, *imfp;
+        /* input, source, listener, hrtf files, default room, [fadelength,
+           sr, order, threed, headrot, roomsize, wall high and low absorb
+           coeffs, gain for 3 band pass, same for floor and ceiling] */
+        MYFLT *in, *srcx, *srcy, *srcz, *lstnrx, *lstnry, *lstnrz, *ifilel, *ifiler,
+              *idefroom, *ofade, *osr, *porder, *othreed, *Oheadrot,
+              *ormx, *ormy, *ormz, *owlh, *owll, *owlg1, *owlg2, *owlg3, *oflh, 
+              *ofll, *oflg1, *oflg2, *oflg3,*oclh, *ocll, *oclg1, *oclg2, *oclg3;
+
+        /* check if relative source has changed, to avoid recalculations */
+        MYFLT srcxv, srcyv, srczv, lstnrxv, lstnryv, lstnrzv;
+        MYFLT srcxk, srcyk, srczk, lstnrxk, lstnryk, lstnrzk;
+        MYFLT rotatev;
+
+        /* processing buffer sizes, depends on sr */
+        int irlength, irlengthpad, overlapsize;
+        MYFLT sr;
+        int counter;
+
+        /* crossfade preparation and checks */
+        int fade, fadebuffer;
+        int initialfade;
+
+        /* interpolation buffer declaration */
+        AUXCH lowl1, lowr1, lowl2, lowr2;
+        AUXCH highl1, highr1, highl2, highr2;
+        AUXCH hrtflinterp, hrtfrinterp, hrtflpad, hrtfrpad;
+        AUXCH hrtflpadold, hrtfrpadold;
+
+        /* convolution and in/output buffers */
+        AUXCH inbuf,inbufpad;
+        AUXCH outlspec, outrspec;
+        AUXCH outlspecold, outrspecold;
+        AUXCH overlapl, overlapr;
+        AUXCH overlaplold, overlaprold;
+
+        /* no of impulses based on order */
+        int impulses, order;
+        int M;
+        /* 3d check*/
+        int threed;
+
+        /* speed of sound*/
+        MYFLT c;
+
+        /* Image Model*/
+        MYFLT rmx, rmy, rmz;
+        int maxdelsamps;
+
+        /* for each reflection*/
+        AUXCH hrtflpadspec, hrtfrpadspec, hrtflpadspecold, hrtfrpadspecold;
+        AUXCH outl, outr, outlold, outrold;
+        AUXCH currentphasel, currentphaser;
+        AUXCH dell, delr;
+        AUXCH tempsrcx, tempsrcy, tempsrcz;
+        AUXCH dist;
+        AUXCH dtime;
+        AUXCH amp;
+
+        /* temp o/p buffers */
+        AUXCH predell, predelr;
+
+        /* processing values that need to be kept for each reflection*/
+        /* dynamic values based on no. fo impulses*/
+        AUXCH oldelevindex, oldangleindex;
+        AUXCH cross, l, delp, skipdel;
+        AUXCH vdt;
+
+        /* wall details */
+        MYFLT wallcoeflow, wallcoefhigh, wallg1, wallg2, wallg3;
+        MYFLT floorcoeflow, floorcoefhigh, floorg1, floorg2, floorg3;
+        MYFLT ceilingcoeflow, ceilingcoefhigh, ceilingg1, ceilingg2, ceilingg3;
+        /* wall filter q*/
+        MYFLT q;
+
+        /* file pointers*/
+        float *fpbeginl, *fpbeginr;
+
+} early;
+
+static int early_init(CSOUND *csound, early *p)
+{
+    /* iterator */
+    int i;
+
+    /* left and right data files: spectral mag, phase format.*/
+    MEMFIL *fpl=NULL, *fpr=NULL;
+    char filel[MAXNAME],filer[MAXNAME];
+
+    /* processing sizes*/
+    int irlength = 0, irlengthpad = 0, overlapsize = 0;
+
+    /* walls: surface area*/
+    MYFLT wallS1, wallS2, cfS;
+
+    /* rt60 */
+    MYFLT Salphalow, Salphahigh;
+    MYFLT vol;
+
+    /* room */
+    MYFLT rmx, rmy, rmz;
+    /* default room */
+    int defroom;
+
+    /* dynamic values, based on number of impulses...*/
+    int *oldelevindex;
+    int *oldangleindex;
+    int *skipdel;
+
+    /* order calculation */
+    int impulses = 1;
+    int temp = 2;
+
+    /* defs for delay lines */
+    MYFLT maxdist = FL(0.0);
+    MYFLT maxdtime;
+    int     maxdelsamps;
+
+    /* late tail */
+    MYFLT meanfreepath;
+    MYFLT surfacearea = FL(0.0);
+
+    /* setup defaults for optional parameters */
+    int fade = (int)*p->ofade;
+    MYFLT sr = *p->osr;
+    int threed = (int)*p->othreed;
+    int order = (int)*p->porder;
+
+    /* fade length: default 8, max 24, min 1 (fade is a local variable)*/
+    if(fade < 1 || fade > 24)
+      fade = 8;
+    p->fade = fade;
+
+    /* threed defaults to 2d! */
+    if(threed < 0 || threed > 1)
+      threed = 0;
+    p->threed = threed;
+
+    /* order: max 4, default 1 */
+    if(order < 0 || order > 4)
+      order = 1;
+    p->order = order;
+
+    /* sr, defualt 44100 */
+    if(sr != 44100 && sr != 48000 && sr != 96000)
+      sr = 44100;
+    p->sr = sr;
+
+    if (UNLIKELY(csound->esr != sr))
+      csound->Message(csound,
+                      Str("\n\nWARNING!!:\nOrchestra SR not compatible "
+                          "with HRTF processing SR of: %.0f\n\n"), sr);
+
+    /* setup as per sr */
+    if(sr == 44100 || sr == 48000)
+      {
+        irlength = 128;
+        irlengthpad = 256;
+        overlapsize = (irlength - 1);
+      }
+    else if(sr == 96000)
+      {
+        irlength = 256;
+        irlengthpad = 512;
+        overlapsize = (irlength - 1);
+      }
+
+    /* copy in string name...*/
+    strncpy(filel, (char*) p->ifilel, MAXNAME);
+    strncpy(filer, (char*) p->ifiler, MAXNAME);
+
+    /* reading files, with byte swap */
+    fpl = csound->ldmemfile2withCB(csound, filel, CSFTYPE_FLOATS_BINARY,
+                                   swap4bytes);
+    if (UNLIKELY(fpl == NULL))
+      return
+        csound->InitError(csound,
+                          Str("\n\n\nCannot load left data file, exiting\n\n"));
+    
+    fpr = csound->ldmemfile2withCB(csound, filer, CSFTYPE_FLOATS_BINARY,
+                                   swap4bytes);
+    if (UNLIKELY(fpr == NULL))
+      return
+        csound->InitError(csound,
+                          Str("\n\n\nCannot load right data file, exiting\n\n"));
+
+    /* file handles */
+    p->fpbeginl = (float *) fpl->beginp;
+    p->fpbeginr = (float *) fpr->beginp;
+
+    /* setup structure values */
+    p->irlength = irlength;
+    p->irlengthpad = irlengthpad;
+    p->overlapsize = overlapsize;
+    p->c = 344.0;
+
+    /* zero structure values */
+    p->counter = 0;
+    p->initialfade = 0;
+    p->M = 0;
+
+    /* the amount of buffers to fade over */
+    p->fadebuffer = (int)fade * irlength;
+
+    defroom = (int)*p->idefroom;
+    /* 3 default rooms allowed*/
+    if(defroom > 3)
+      defroom = 1;
+    
+    /* setup wall coeffs: walls: plasterboard, ceiling: painted plaster,
+       floor: carpet
+       if any default room is chosen, default parameters for walls/ceiling/floor */
+    if(defroom)
+      {
+        p->wallcoefhigh = FL(0.3);
+        p->wallcoeflow = FL(0.1);
+        p->wallg1 = FL(0.75);
+        p->wallg2 = FL(0.95);
+        p->wallg3 = FL(0.9);
+        p->floorcoefhigh = FL(0.6);
+        p->floorcoeflow = FL(0.1);
+        p->floorg1 = FL(0.95);
+        p->floorg2 = FL(0.6);
+        p->floorg3 = FL(0.35);
+        p->ceilingcoefhigh = FL(0.2);
+        p->ceilingcoeflow = FL(0.1);
+        p->ceilingg1 = FL(1.0);
+        p->ceilingg2 = FL(1.0);
+        p->ceilingg3 = FL(1.0);
+      }
+    /* otherwise use values, if valid */
+    else
+      {
+        p->wallcoefhigh = (*p->owlh > FL(0.0) && *p->owlh < FL(1.0)) ?
+          *p->owlh : FL(0.3);
+        p->wallcoeflow = (*p->owll > FL(0.0) && *p->owll < FL(1.0)) ?
+          *p->owll : FL(0.1);
+        p->wallg1 = (*p->owlg1 > FL(0.0) && *p->owlg1 < FL(10.0)) ?
+          *p->owlg1 : FL(0.75);
+        p->wallg2 = (*p->owlg2 > FL(0.0) && *p->owlg2 < FL(10.0)) ?
+          *p->owlg2 : FL(0.95);
+        p->wallg3 = (*p->owlg3 > FL(0.0) && *p->owlg3 < FL(10.0)) ?
+          *p->owlg3 : FL(0.9);
+        p->floorcoefhigh = (*p->oflh > FL(0.0) && *p->oflh < FL(1.0)) ?
+          *p->oflh : FL(0.6);
+        p->floorcoeflow = (*p->ofll > FL(0.0) && *p->ofll < FL(1.0)) ?
+          *p->ofll : FL(0.1);
+        p->floorg1 = (*p->oflg1 > FL(0.0) && *p->oflg1 < FL(10.0)) ?
+          *p->oflg1 : FL(0.95);
+        p->floorg2 = (*p->oflg2 > FL(0.0) && *p->oflg2 < FL(10.0)) ?
+          *p->oflg2 : FL(0.6);
+        p->floorg3 = (*p->oflg3 > FL(0.0) && *p->oflg3 < FL(10.0)) ?
+          *p->oflg3 : FL(0.35);
+        p->ceilingcoefhigh = (*p->oclh > FL(0.0) && *p->oclh < FL(1.0)) ?
+          *p->oclh : FL(0.2);
+        p->ceilingcoeflow = (*p->ocll > FL(0.0) && *p->ocll < FL(1.0)) ?
+          *p->ocll : FL(0.1);
+        p->ceilingg1 = (*p->oclg1 > FL(0.0) && *p->oclg1 < FL(10.0)) ?
+          *p->oclg1 : FL(1.0);
+        p->ceilingg2 = (*p->oclg2 > FL(0.0) && *p->oclg2 < FL(10.0)) ?
+          *p->oclg2 : FL(1.0);
+        p->ceilingg3 = (*p->oclg3 > FL(0.0) && *p->oclg3 < FL(10.0)) ?
+          *p->oclg3 : FL(1.0);
+      }
+
+    /* medium room */
+    if(defroom == 1)
+      {
+        rmx = 10;
+        rmy = 10;
+        rmz = 3;
+      }
+    /* small */
+    else if(defroom == 2)
+      {
+        rmx = 3;
+        rmy = 4;
+        rmz = 3;
+      }
+    /* large */
+    else if(defroom == 3)
+      {
+        rmx = 20;
+        rmy = 25;
+        rmz = 7;
+      }
+    
+    /* read values if they exist, use medium if not valid (must be at
+       least a 2*2*2 room! */
+    else
+      {
+        rmx = *p->ormx >= FL(2.0) ? *p->ormx : 10;
+        rmy = *p->ormy >= FL(2.0) ? *p->ormy : 10;
+        rmz = *p->ormz >= FL(2.0) ? *p->ormz : 4;
+      }
+
+    /* store */
+    p->rmx = rmx;
+    p->rmy = rmy;
+    p->rmz = rmz;
+
+    /* how many sources? */
+    if(threed)
+      {
+        for(i = 1; i <= order; i++)
+          {
+            impulses += (4 * i);
+            if(i <= (order - 1))
+              /* sources = 2d impulses for order, plus 2 * each
+                 preceding no of impulses
+                 eg order 2: 2d = 1 + 4 + 8 = 13, 3d + 2*5 + 2 = 25*/
+              temp += 2*impulses;
+            else
+              impulses = impulses + temp;
+          }
+      }
+    else
+      {
+        for(i = 1; i <= order; i++)
+          /* there will be 4 * order additional impulses for each order*/
+          impulses += (4*i);
+      }
+    p->impulses =  impulses;
+
+    /* allocate memory, reuse if possible: interpolation buffers */
+    if (!p->lowl1.auxp || p->lowl1.size < irlength * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlength * sizeof(MYFLT), &p->lowl1);
+    if (!p->lowr1.auxp || p->lowr1.size < irlength * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlength * sizeof(MYFLT), &p->lowr1);
+    if (!p->lowl2.auxp || p->lowl2.size < irlength * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlength * sizeof(MYFLT), &p->lowl2);
+    if (!p->lowr2.auxp || p->lowr2.size < irlength * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlength * sizeof(MYFLT), &p->lowr2);
+    if (!p->highl1.auxp || p->highl1.size < irlength * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlength * sizeof(MYFLT), &p->highl1);
+    if (!p->highr1.auxp || p->highr1.size < irlength * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlength * sizeof(MYFLT), &p->highr1);
+    if (!p->highl2.auxp || p->highl2.size < irlength * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlength * sizeof(MYFLT), &p->highl2);
+    if (!p->highr2.auxp || p->highr2.size < irlength * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlength * sizeof(MYFLT), &p->highr2);
+    if (!p->hrtflinterp.auxp || p->hrtflinterp.size < irlength * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlength * sizeof(MYFLT), &p->hrtflinterp);
+    if (!p->hrtfrinterp.auxp || p->hrtfrinterp.size < irlength * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlength * sizeof(MYFLT), &p->hrtfrinterp);
+
+    memset(p->lowl1.auxp, 0, irlength * sizeof(MYFLT));
+    memset(p->lowr1.auxp, 0, irlength * sizeof(MYFLT));
+    memset(p->lowl2.auxp, 0, irlength * sizeof(MYFLT));
+    memset(p->lowr2.auxp, 0, irlength * sizeof(MYFLT));
+    memset(p->highl1.auxp, 0, irlength * sizeof(MYFLT));
+    memset(p->highl2.auxp, 0, irlength * sizeof(MYFLT));
+    memset(p->highr1.auxp, 0, irlength * sizeof(MYFLT));
+    memset(p->highr2.auxp, 0, irlength * sizeof(MYFLT));
+    memset(p->hrtflinterp.auxp, 0, irlength * sizeof(MYFLT));
+    memset(p->hrtfrinterp.auxp, 0, irlength * sizeof(MYFLT));
+
+    /* hrtf processing buffers */
+    if (!p->hrtflpad.auxp || p->hrtflpad.size < irlengthpad * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlengthpad * sizeof(MYFLT), &p->hrtflpad);
+    if (!p->hrtfrpad.auxp || p->hrtfrpad.size < irlengthpad * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlengthpad * sizeof(MYFLT), &p->hrtfrpad);
+    if (!p->hrtflpadold.auxp || p->hrtflpadold.size < irlengthpad * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlengthpad * sizeof(MYFLT), &p->hrtflpadold);
+    if (!p->hrtfrpadold.auxp || p->hrtfrpadold.size < irlengthpad * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlengthpad * sizeof(MYFLT), &p->hrtfrpadold);
+
+    memset(p->hrtflpad.auxp, 0, irlengthpad * sizeof(MYFLT));
+    memset(p->hrtfrpad.auxp, 0, irlengthpad * sizeof(MYFLT));
+    memset(p->hrtflpadold.auxp, 0, irlengthpad * sizeof(MYFLT));
+    memset(p->hrtfrpadold.auxp, 0, irlengthpad * sizeof(MYFLT));
+
+    /* convolution & processing */
+    if (!p->inbuf.auxp || p->inbuf.size < irlength * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlength * sizeof(MYFLT), &p->inbuf);
+    if (!p->inbufpad.auxp || p->inbufpad.size < irlengthpad * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlengthpad * sizeof(MYFLT), &p-> inbufpad);
+
+    memset(p->inbuf.auxp, 0, irlength * sizeof(MYFLT));
+    memset(p->inbufpad.auxp, 0, irlengthpad * sizeof(MYFLT));
+
+    if (!p->outlspec.auxp || p->outlspec.size < irlengthpad * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlengthpad * sizeof(MYFLT), &p->outlspec);
+    if (!p->outrspec.auxp || p->outrspec.size < irlengthpad * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlengthpad * sizeof(MYFLT), &p->outrspec);
+
+    memset(p->outlspec.auxp, 0, irlengthpad * sizeof(MYFLT));
+    memset(p->outrspec.auxp, 0, irlengthpad * sizeof(MYFLT));
+
+    if (!p->outlspecold.auxp || p->outlspecold.size < irlengthpad * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlengthpad * sizeof(MYFLT), &p->outlspecold);
+    if (!p->outrspecold.auxp || p->outrspecold.size < irlengthpad * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlengthpad * sizeof(MYFLT), &p->outrspecold);
+
+    memset(p->outlspecold.auxp, 0, irlengthpad * sizeof(MYFLT));
+    memset(p->outrspecold.auxp, 0, irlengthpad * sizeof(MYFLT));
+
+    if (!p->overlapl.auxp || p->overlapl.size < overlapsize * sizeof(MYFLT))
+      csound->AuxAlloc(csound, overlapsize * sizeof(MYFLT), &p->overlapl);
+    if (!p->overlapr.auxp || p->overlapr.size < overlapsize * sizeof(MYFLT))
+      csound->AuxAlloc(csound, overlapsize * sizeof(MYFLT), &p->overlapr);
+
+    memset(p->overlapl.auxp, 0, overlapsize * sizeof(MYFLT));
+    memset(p->overlapr.auxp, 0, overlapsize * sizeof(MYFLT));
+
+    if (!p->overlaplold.auxp || p->overlaplold.size < overlapsize * sizeof(MYFLT))
+      csound->AuxAlloc(csound, overlapsize * sizeof(MYFLT), &p->overlaplold);
+    if (!p->overlaprold.auxp || p->overlaprold.size < overlapsize * sizeof(MYFLT))
+      csound->AuxAlloc(csound, overlapsize * sizeof(MYFLT), &p->overlaprold);
+
+    memset(p->overlaplold.auxp, 0, overlapsize * sizeof(MYFLT));
+    memset(p->overlaprold.auxp, 0, overlapsize * sizeof(MYFLT));
+
+    /* dynamic values, based on no. of impulses*/
+    if (!p->predell.auxp || p->predell.size < irlength * impulses * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlength * impulses * sizeof(MYFLT), &p->predell);
+    if (!p->predelr.auxp || p->predelr.size < irlength * impulses * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlength * impulses * sizeof(MYFLT), &p->predelr);
+
+    memset(p->predell.auxp, 0, irlength * impulses * sizeof(MYFLT));
+    memset(p->predelr.auxp, 0, irlength * impulses * sizeof(MYFLT));
+
+    if (!p->cross.auxp || p->cross.size < impulses * sizeof(int))
+      csound->AuxAlloc(csound, impulses * sizeof(int), &p->cross);
+    if (!p->l.auxp || p->l.size < impulses * sizeof(int))
+      csound->AuxAlloc(csound, impulses * sizeof(int), &p->l);
+    if (!p->delp.auxp || p->delp.size < impulses * sizeof(int))
+      csound->AuxAlloc(csound, impulses * sizeof(int), &p->delp);
+    if (!p->skipdel.auxp || p->skipdel.size < impulses * sizeof(int))
+      csound->AuxAlloc(csound, impulses * sizeof(int), &p->skipdel);
+    if (!p->vdt.auxp || p->vdt.size < impulses * sizeof(MYFLT))
+      csound->AuxAlloc(csound, impulses * sizeof(MYFLT), &p->vdt);
+
+    memset(p->cross.auxp, 0, impulses * sizeof(int));
+    memset(p->l.auxp, 0, impulses * sizeof(int));
+    memset(p->delp.auxp, 0, impulses * sizeof(int));
+    memset(p->vdt.auxp, 0, impulses * sizeof(MYFLT));
+    /* skipdel looked after below */
+
+    /* values distinct to each reflection*/
+    if (!p->tempsrcx.auxp || p->tempsrcx.size < impulses * sizeof(MYFLT))
+      csound->AuxAlloc(csound, impulses * sizeof(MYFLT), &p->tempsrcx);
+
+    if (!p->tempsrcy.auxp || p->tempsrcy.size < impulses * sizeof(MYFLT))
+      csound->AuxAlloc(csound, impulses * sizeof(MYFLT), &p->tempsrcy);
+
+    if (!p->tempsrcz.auxp || p->tempsrcz.size < impulses * sizeof(MYFLT))
+      csound->AuxAlloc(csound, impulses * sizeof(MYFLT), &p->tempsrcz);
+    if (!p->dist.auxp || p->dist.size < impulses * sizeof(MYFLT))
+      csound->AuxAlloc(csound, impulses * sizeof(MYFLT), &p->dist);
+    if (!p->dtime.auxp || p->dtime.size < impulses * sizeof(MYFLT))
+      csound->AuxAlloc(csound, impulses * sizeof(MYFLT), &p->dtime);
+    if (!p->amp.auxp || p->amp.size < impulses * sizeof(MYFLT))
+      csound->AuxAlloc(csound, impulses * sizeof(MYFLT), &p->amp);
+
+    memset(p->tempsrcx.auxp, 0, impulses * sizeof(MYFLT));
+    memset(p->tempsrcy.auxp, 0, impulses * sizeof(MYFLT));
+    memset(p->tempsrcz.auxp, 0, impulses * sizeof(MYFLT));
+    memset(p->dist.auxp, 0, impulses * sizeof(MYFLT));
+    memset(p->dtime.auxp, 0, impulses * sizeof(MYFLT));
+    memset(p->amp.auxp, 0, impulses * sizeof(MYFLT));
+
+    if (!p->oldelevindex.auxp || p->oldelevindex.size < impulses * sizeof(int))
+      csound->AuxAlloc(csound, impulses * sizeof(int), &p->oldelevindex);
+
+    if (!p->oldangleindex.auxp || p->oldangleindex.size < impulses * sizeof(int))
+      csound->AuxAlloc(csound, impulses * sizeof(int), &p->oldangleindex);
+
+    /* no need to zero above, as filled below...*/
+
+    /* -1 for first check */
+    oldelevindex = (int *)p->oldelevindex.auxp;
+    oldangleindex = (int *)p->oldangleindex.auxp;
+
+    for(i = 0; i < impulses; i++)
+      oldelevindex[i] = oldangleindex[i] = -1;
+
+    /* more values distinct to each reflection */
+    if (!p->hrtflpadspec.auxp ||
+        p->hrtflpadspec.size < irlengthpad * impulses * sizeof(MYFLT))
+      csound->AuxAlloc(csound,
+                       irlengthpad * impulses * sizeof(MYFLT), &p->hrtflpadspec);
+    if (!p->hrtfrpadspec.auxp ||
+        p->hrtfrpadspec.size < irlengthpad * impulses * sizeof(MYFLT))
+      csound->AuxAlloc(csound,
+                       irlengthpad * impulses * sizeof(MYFLT), &p->hrtfrpadspec);
+
+    memset(p->hrtflpadspec.auxp, 0, irlengthpad * impulses * sizeof(MYFLT));
+    memset(p->hrtfrpadspec.auxp, 0, irlengthpad * impulses * sizeof(MYFLT));
+
+    if (!p->hrtflpadspecold.auxp ||
+        p->hrtflpadspecold.size < irlengthpad * impulses * sizeof(MYFLT))
+      csound->AuxAlloc(csound,
+                       irlengthpad * impulses * sizeof(MYFLT), &p->hrtflpadspecold);
+    if (!p->hrtfrpadspecold.auxp ||
+        p->hrtfrpadspecold.size < irlengthpad * impulses * sizeof(MYFLT))
+      csound->AuxAlloc(csound,
+                       irlengthpad * impulses * sizeof(MYFLT), &p->hrtfrpadspecold);
+
+    memset(p->hrtflpadspecold.auxp, 0, irlengthpad * impulses * sizeof(MYFLT));
+    memset(p->hrtfrpadspecold.auxp, 0, irlengthpad * impulses * sizeof(MYFLT));
+
+    if (!p->outl.auxp || p->outl.size < irlengthpad * impulses * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlengthpad * impulses * sizeof(MYFLT), &p->outl);
+    if (!p->outr.auxp || p->outr.size < irlengthpad * impulses * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlengthpad * impulses * sizeof(MYFLT), &p->outr);
+
+    memset(p->outl.auxp, 0, irlengthpad * impulses * sizeof(MYFLT));
+    memset(p->outr.auxp, 0, irlengthpad * impulses * sizeof(MYFLT));
+
+    if (!p->outlold.auxp ||
+        p->outlold.size < irlengthpad * impulses * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlengthpad * impulses * sizeof(MYFLT), &p->outlold);
+    if (!p->outrold.auxp ||
+        p->outrold.size < irlengthpad * impulses * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlengthpad * impulses * sizeof(MYFLT), &p->outrold);
+
+    memset(p->outlold.auxp, 0, irlengthpad * impulses * sizeof(MYFLT));
+    memset(p->outrold.auxp, 0, irlengthpad * impulses * sizeof(MYFLT));
+
+    if (!p->currentphasel.auxp ||
+        p->currentphasel.size < irlength * impulses * sizeof(MYFLT))
+      csound->AuxAlloc(csound,
+                       irlength * impulses * sizeof(MYFLT), &p->currentphasel);
+    if (!p->currentphaser.auxp ||
+        p->currentphaser.size < irlength * impulses * sizeof(MYFLT))
+      csound->AuxAlloc(csound,
+                       irlength * impulses * sizeof(MYFLT), &p->currentphaser);
+
+
+    memset(p->currentphasel.auxp, 0, irlength * impulses * sizeof(MYFLT));
+    memset(p->currentphaser.auxp, 0, irlength * impulses * sizeof(MYFLT));
+
+    /* setup rt60 calcs...*/
+    /* rectangular room: surface area of opposite walls, and floor/ceiling */
+    wallS1 = rmy * rmz;
+    wallS2 = rmx * rmz;
+    cfS = rmx * rmy;
+
+    /* volume and surface areas, for rt60 calc, for high and low frequencies */
+    vol = rmx * rmy * rmz;
+
+    /* add all surfaces, 2 of each wall in shoebox geometry */
+    Salphalow = wallS1 * (LOG(FL(1.0) - p->wallcoeflow)) * FL(2.0);
+    Salphalow += wallS2 * (LOG(FL(1.0) - p->wallcoeflow)) * FL(2.0);
+    Salphalow += cfS * (LOG(FL(1.0) - p->floorcoeflow));
+    Salphalow += cfS * (LOG(FL(1.0) - p->ceilingcoeflow));
+    Salphahigh = wallS1 * (LOG(FL(1.0) - p->wallcoefhigh)) * FL(2.0);
+    Salphahigh += wallS2 * (LOG(FL(1.0) - p->wallcoefhigh)) * FL(2.0);
+    Salphahigh += cfS * (LOG(FL(1.0) - p->floorcoefhigh));
+    Salphahigh += cfS * (LOG(FL(1.0) - p->ceilingcoefhigh));
+
+    /* wall filter quality factor (4 octaves for required spread!: .2666667)
+       (2 octaves = .6667 implies 125 - 500, cf 250, 500 - 2k, cf 1k,
+       2000 - 8000, cf 4k)
+       (4 octaves = = .2666667 implies 62.5 - 1000, cf 250, 250 - 4000, cf 1k,
+       1000 - 16k, cf 4k */
+    p->q = FL(0.2666667);
+
+    *p->irt60low = (FL(-0.161) * vol)/Salphalow;
+    *p->irt60high = (FL(-0.161) * vol)/Salphahigh;
+
+    /* calculate max delay according to max dist from order */
+    /* use hypotenuse rule to get max dist */
+    /* could calculate per order, but designed for low order use */
+    maxdist = (SQRT(SQUARE(rmx) + SQUARE(rmy)));
+    if(threed)
+      maxdist = (SQRT(SQUARE(maxdist)+SQUARE(rmz)));
+    maxdist = maxdist * (order + 1);
+
+    maxdtime = maxdist / p->c;
+    maxdelsamps = (int)(maxdtime * sr);
+    p->maxdelsamps = maxdelsamps;
+
+    surfacearea = FL(2.0) * wallS1 + FL(2.0) * wallS2 + FL(2.0) * cfS;
+
+    meanfreepath = FL(4.0) * vol / (surfacearea * p->c);
+
+    /* set output...*/
+    *p->imfp = meanfreepath;
+
+    /* allocate delay memory for each impulse */
+    if (!p->dell.auxp || p->dell.size < maxdelsamps * sizeof(MYFLT) * impulses)
+      csound->AuxAlloc(csound, maxdelsamps * sizeof(MYFLT) * impulses, &p->dell);
+    if (!p->delr.auxp || p->delr.size < maxdelsamps * sizeof(MYFLT) * impulses)
+      csound->AuxAlloc(csound, maxdelsamps * sizeof(MYFLT) * impulses, &p->delr);
+
+    memset(p->dell.auxp, 0, maxdelsamps * impulses * sizeof(MYFLT));
+    memset(p->delr.auxp, 0, maxdelsamps * impulses * sizeof(MYFLT));
+
+    /* amount to skip in to each del line */
+    skipdel = (int *)p->skipdel.auxp;
+
+    for(i = 0; i < impulses; i++)
+      skipdel[i] = i * maxdelsamps;
+
+    /* setup values used to check if relative source position has changed,
+       start at illegal value to ensure first process read */
+    p->srcxv = FL(-1.0);
+    p->srcyv = FL(-1.0);
+    p->srczv = FL(-1.0);
+    p->lstnrxv = FL(-1.0);
+    p->lstnryv = FL(-1.0);
+    p->lstnrzv = FL(-1.0);
+    p->srcxk = FL(-1.0);
+    p->srcyk = FL(-1.0);
+    p->srczk = FL(-1.0);
+    p->lstnrxk = FL(-1.0);
+    p->lstnryk = FL(-1.0);
+    p->lstnrzk = FL(-1.0);
+
+    p->rotatev = FL(0.0);
+
+    return OK;
+}
+
+static int early_process(CSOUND *csound, early *p)
+{
+    /* iterators */
+    int n, i, j;
+
+    /* local pointers to p */
+    MYFLT *in = p->in;
+    MYFLT *outsigl  = p->outsigl;
+    MYFLT *outsigr = p->outsigr;
+
+    int irlength = p->irlength;
+    int irlengthpad = p->irlengthpad;
+    int overlapsize = p->overlapsize;
+
+    int counter = p->counter;
+
+    /* convolution buffers */
+    MYFLT *lowl1 = (MYFLT *)p->lowl1.auxp;
+    MYFLT *lowr1 = (MYFLT *)p->lowr1.auxp;
+    MYFLT *lowl2 = (MYFLT *)p->lowl2.auxp;
+    MYFLT *lowr2 = (MYFLT *)p->lowr2.auxp;
+    MYFLT *highl1 = (MYFLT *)p->highl1.auxp;
+    MYFLT *highr1 = (MYFLT *)p->highr1.auxp;
+    MYFLT *highl2 = (MYFLT *)p->highl2.auxp;
+    MYFLT *highr2 = (MYFLT *)p->highr2.auxp;
+    MYFLT *hrtflinterp = (MYFLT *)p->hrtflinterp.auxp;
+    MYFLT *hrtfrinterp = (MYFLT *)p->hrtfrinterp.auxp;
+
+    /* hrtf processing buffers */
+    MYFLT *hrtflpad = (MYFLT *)p->hrtflpad.auxp;
+    MYFLT *hrtfrpad = (MYFLT *)p->hrtfrpad.auxp;
+    MYFLT *hrtflpadold = (MYFLT *)p->hrtflpadold.auxp;
+    MYFLT *hrtfrpadold = (MYFLT *)p->hrtfrpadold.auxp;
+
+    /* pointers into HRTF files: floating point data(even in 64 bit csound)*/
+    float *fpindexl = (float *)p->fpbeginl;
+    float *fpindexr = (float *)p->fpbeginr;
+
+    /* local copies */
+    MYFLT srcx = *p->srcx;
+    MYFLT srcy = *p->srcy;
+    MYFLT srcz = *p->srcz;
+    MYFLT lstnrx = *p->lstnrx;
+    MYFLT lstnry = *p->lstnry;
+    MYFLT lstnrz = *p->lstnrz;
+    MYFLT rotate = *p->Oheadrot;
+
+    MYFLT sr = p->sr;
+
+    /* local variables, mainly used for simplification */
+    MYFLT elevindexstore;
+    MYFLT angleindexlowstore;
+    MYFLT angleindexhighstore;
+
+    /* for reading */
+    MYFLT angle, elev;
+    int elevindex;
+    int angleindex;
+    int skip = 0;
+
+    /* crossfade preparation and checks */
+    int fade = p->fade;
+    int fadebuffer = p->fadebuffer;
+    int initialfade = p->initialfade;
+    int crossfade;
+    int crossout;
+
+    /* interpolation variable declaration: local */
+    int elevindexlow, elevindexhigh, angleindex1, angleindex2,
+      angleindex3, angleindex4;
+    MYFLT elevindexhighper, angleindex2per, angleindex4per;
+    MYFLT magllow, magrlow, maglhigh, magrhigh, magl, magr, phasel, phaser;
+
+    /* convolution and in/output buffers */
+    MYFLT *inbuf = (MYFLT *)p->inbuf.auxp;
+    MYFLT *inbufpad = (MYFLT *)p->inbufpad.auxp;
+    MYFLT *outlspec = (MYFLT *)p->outlspec.auxp;
+    MYFLT *outrspec = (MYFLT *)p->outrspec.auxp;
+    MYFLT *outlspecold = (MYFLT *)p->outlspecold.auxp;
+    MYFLT *outrspecold = (MYFLT *)p->outrspecold.auxp;
+    MYFLT *overlapl = (MYFLT *)p->overlapl.auxp;
+    MYFLT *overlapr = (MYFLT *)p->overlapr.auxp;
+    MYFLT *overlaplold = (MYFLT *)p->overlaplold.auxp;
+    MYFLT *overlaprold = (MYFLT *)p->overlaprold.auxp;
+    MYFLT *predell = (MYFLT *)p->predell.auxp;
+    MYFLT *predelr = (MYFLT *)p->predelr.auxp;
+
+    MYFLT outltot, outrtot;
+
+    /* distinct to each reflection */
+    MYFLT *hrtflpadspec = (MYFLT *)p->hrtflpadspec.auxp;
+    MYFLT *hrtfrpadspec = (MYFLT *)p->hrtfrpadspec.auxp;
+    MYFLT *hrtflpadspecold = (MYFLT *)p->hrtflpadspecold.auxp;
+    MYFLT *hrtfrpadspecold = (MYFLT *)p->hrtfrpadspecold.auxp;
+    MYFLT *outl = (MYFLT *)p->outl.auxp;
+    MYFLT *outr = (MYFLT *)p->outr.auxp;
+    MYFLT *outlold = (MYFLT *)p->outlold.auxp;
+    MYFLT *outrold = (MYFLT *)p->outrold.auxp;
+    MYFLT *currentphasel = (MYFLT *)p->currentphasel.auxp;
+    MYFLT *currentphaser = (MYFLT *)p->currentphaser.auxp;
+    MYFLT *dell = (MYFLT *)p->dell.auxp;
+    MYFLT *delr = (MYFLT *)p->delr.auxp;
+
+    /* as above */
+    int *oldelevindex = (int *)p->oldelevindex.auxp;
+    int *oldangleindex = (int *)p->oldangleindex.auxp;
+    int *cross = (int *)p->cross.auxp;
+    int *l = (int *)p->l.auxp;
+    int *delp = (int *)p->delp.auxp;
+    int *skipdel = (int *)p->skipdel.auxp;
+    MYFLT *vdt = (MYFLT *)p->vdt.auxp;
+    MYFLT *dist = (MYFLT *)p->dist.auxp;
+    MYFLT *dtime = (MYFLT *)p->dtime.auxp;
+    MYFLT *amp = (MYFLT *)p->amp.auxp;
+    MYFLT *tempsrcx = (MYFLT *)p->tempsrcx.auxp;
+    MYFLT *tempsrcy = (MYFLT *)p->tempsrcy.auxp;
+    MYFLT *tempsrcz = (MYFLT *)p->tempsrcz.auxp;
+    MYFLT tempdist;
+
+    /* from structure */
+    int impulses = p->impulses;
+    int order = p->order;
+    int M = p->M;
+    int threed = p->threed;
+
+    /* used in vdel */
+    int maxdelsamps = p->maxdelsamps;
+    MYFLT c = p->c;
+    int pos;
+    MYFLT rp, frac;
+
+    /* room size */
+    MYFLT rmx = p->rmx;
+    MYFLT rmy = p->rmy;
+    MYFLT rmz = p->rmz;
+
+    /* xc = x coordinate, etc...*/
+    int xc, yc, zc, lowz, highz;
+
+    /* to simplify formulae, local */
+    MYFLT formx, formy, formz;
+    int formxpow, formypow, formzpow;
+
+    int wallreflections, floorreflections=0, ceilingreflections=0;
+    MYFLT delsinglel, delsingler;
+    MYFLT deldoublel[2], deldoubler[2];
+
+    /* temp variables, for efficiency */
+    MYFLT tempx, tempy;
+
+    /* angle / elev calc of source location */
+    MYFLT newpntx, newpnty, newpntz;
+    MYFLT ab,ac,bc;
+    MYFLT coselev;
+
+    /* processing size! */
+    n = csound->ksmps;
+
+    /* check for legal src/lstnr locations */
+    /* restricted to being inside room! */
+    if(srcx > (rmx - FL(0.1)))
+      srcx = rmx - FL(0.1);
+    if(srcx < FL(0.1))
+      srcx = FL(0.1);
+    if(srcy > (rmy - FL(0.1)))
+      srcy = rmy - FL(0.1);
+    if(srcy < FL(0.1))
+      srcy = FL(0.1);
+    if(srcz > (rmz - FL(0.1)))
+      srcz = rmz - FL(0.1);
+    if(srcz < FL(0.1))
+      srcz = FL(0.1);
+    if(lstnrx > (rmx - FL(0.1)))
+      lstnrx = rmx - FL(0.1);
+    if(lstnrx < FL(0.1))
+      lstnrx = FL(0.1);
+    if(lstnry > (rmy - FL(0.1)))
+      lstnry = rmy - FL(0.1);
+    if(lstnry < FL(0.1))
+      lstnry = FL(0.1);
+    if(lstnrz > (rmz - FL(0.1)))
+      lstnrz = rmz - FL(0.1);
+    if(lstnrz < FL(0.1))
+      lstnrz = FL(0.1);
+
+    /* k rate computations: sources, distances, delays, amps
+       for each image source. */
+    /* need minus values for formula... */
+
+    /* only update if relative source updates! improves speed in
+       static sources by a factor of 2-3! */
+    if(srcx != p->srcxk || srcy != p->srcyk || srcz != p->srczk ||
+       lstnrx != p->lstnrxk || lstnry != p->lstnryk || lstnrz != p->lstnrzk)
+      {
+        p->srcxk = srcx;
+        p->srcyk = srcy;
+        p->srczk = srcz;
+        p->lstnrxk = lstnrx;
+        p->lstnryk = lstnry;
+        p->lstnrzk = lstnrz;
+
+        for(xc = -order; xc <= order; xc++)
+          {
+            for(yc = abs(xc) - order; yc <= order - abs(xc); yc++)
+              {
+                /* only scroll through z plane if 3d required...*/
+                if(threed)
+                  {
+                    lowz = abs(yc) - (order - abs(xc));
+                    highz = (order - abs(xc)) - abs(yc);
+                  }
+                else
+                  {
+                    lowz = 0;
+                    highz = 0;
+                  }
+                for(zc = lowz; zc <= highz; zc++)
+                  {
+                    /* to avoid recalculation, especially at audio rate
+                       for delay, later on */
+                    formxpow = (int)pow(-1.0, xc);
+                    formypow = (int)pow(-1.0, yc);
+                    formzpow = (int)pow(-1.0, zc);
+                    formx = (xc + (1 - formxpow)/2) * rmx;
+                    formy = (yc + (1 - formypow)/2) * rmy;
+                    formz = (zc + (1 - formzpow)/2) * rmz;
+
+                    /* image */
+                    tempsrcx[M] = formxpow * srcx + formx;
+                    tempsrcy[M] = formypow * srcy + formy;
+                    tempsrcz[M] = formzpow * srcz + formz;
+
+                    /* Calculate delay here using source and listener location */
+                    dist[M] = (SQRT(SQUARE(tempsrcx[M] - lstnrx) +
+                                    SQUARE(tempsrcy[M] - lstnry) +
+                                    SQUARE(tempsrcz[M] - lstnrz)));
+
+                    /* in seconds... */
+                    dtime[M] = dist[M] / c;
+
+                    /* furthest allowable distance....max amp = 1. */
+                    tempdist = (dist[M] < FL(0.45) ? FL(0.45) : dist[M]);
+
+                    /* high amp value may cause clipping on early
+                       reflections...reduce overall amp if so...*/
+                    /* SPL inverse distance law */
+                    amp[M] = FL(0.45) / tempdist;
+
+                    /* vdels for distance processing: */
+                    vdt[M] = dtime[M] * sr;
+                    if(vdt[M] > maxdelsamps)
+                      vdt[M] = (MYFLT)maxdelsamps;
+
+                    M++;
+                    M = M % impulses;
+                  }
+              }
+          }
+      }
+
+    /* a rate... */
+    for(j=0;j<n;j++)
+      {
+        /* input */
+        inbuf[counter] = in[j];
+
+        /* output */
+        outltot = 0.0;
+        outrtot = 0.0;
+
+        /* for each reflection */
+        for(M = 0; M < impulses; M++)
+          {
+            /* a rate vdel: */
+            rp = delp[M] - vdt[M];
+            rp = (rp >= 0 ? (rp < maxdelsamps ? rp : rp - maxdelsamps) :
+                  rp + maxdelsamps);
+            frac = rp - (int)rp;
+            /* shift into correct part of buffer */
+            pos = (int)rp + skipdel[M];
+            /* write to l and r del lines */
+            dell[delp[M] + skipdel[M]] = predell[counter + M * irlength] * amp[M];
+            delr[delp[M] + skipdel[M]] = predelr[counter + M * irlength] * amp[M];
+            /* read, at variable interpolated speed */
+            outltot += dell[pos] +
+              frac*(dell[(pos + 1 < (maxdelsamps + skipdel[M]) ?
+                          pos + 1 : skipdel[M])] - dell[pos]);
+            outrtot += delr[pos] +
+              frac*(delr[(pos + 1 < (maxdelsamps + skipdel[M]) ?
+                          pos + 1 : skipdel[M])] - delr[pos]);
+            delp[M] = (delp[M] != maxdelsamps - 1 ? delp[M] + 1 : 0);
+
+            outsigl[j] = outltot;
+            outsigr[j] = outrtot;
+          }
+        counter++;
+
+        /* used to ensure fade does not happen on first run */
+        if(initialfade < (irlength + 2))
+          initialfade++;
+
+        /* 'hrtf buffer' rate */
+        if(counter == irlength)
+          {
+            /* reset */
+            M = 0;
+            /* run according to formula */
+            for(xc = -order; xc <= order; xc++)
+              {
+                for(yc = abs(xc) - order; yc <= order - abs(xc); yc++)
+                  {
+                    /* only scroll through z plane if 3d required... */
+                    if(threed)
+                      {
+                        lowz = abs(yc) - (order - abs(xc));
+                        highz = (order - abs(xc)) - abs(yc);
+                      }
+                    else
+                      {
+                        lowz = 0;
+                        highz = 0;
+                      }
+                    for(zc = lowz; zc <= highz; zc++)
+                      {
+                        /* zero */
+                        crossout = 0;
+                        crossfade = 0;
+
+                        /* avoid unnecessary processing if relative
+                           source location has not changed */
+                        if(srcx != p->srcxv || srcy != p->srcyv ||
+                           srcz != p->srczv || lstnrx != p->lstnrxv ||
+                           lstnry != p->lstnryv || lstnrz != p->lstnrzv ||
+                           rotate != p->rotatev)
+                          {
+                            /* if first process complete (128 samps in) and
+                               source is too close to listener: warning, do not
+                               process duda and martens range dependence
+                               jasa 98: 5 times radius: near field...hrtf
+                               changes! */
+                            if(dist[M] < FL(0.45) && initialfade > irlength)
+                              ;       /* do not process... */
+                            else
+                              {
+                                /* to avoid case where atan2 is invalid */
+                                tempx = tempsrcx[M] - lstnrx;
+                                tempy = tempsrcy[M] - lstnry;
+                                if(tempx == 0 && tempy == 0)
+                                  angle = 0;
+                                else
+                                  {
+                                    /* - to invert anticlockwise to clockwise */
+                                    angle = (-(ATAN2(tempy, tempx)) * 180.0 / PI_F);
+                                    /* add 90 to go from y axis (front) */
+                                    angle = angle + 90.0;
+                                  }
+
+                                /* xy point will be same as source, z same as
+                                   listener: a workable triangle */
+                                newpntx = tempsrcx[M];
+                                newpnty = tempsrcy[M];
+                                newpntz = lstnrz;
+
+                                /* ab: source to listener, ac: source to new point
+                                   under/over source, bc listener to new point */
+                                /* a = source, b = listener, c = new point */
+                                ab = (SQRT(SQUARE(tempsrcx[M] - lstnrx) +
+                                           SQUARE(tempsrcy[M] - lstnry) +
+                                           SQUARE(tempsrcz[M] - lstnrz)));
+                                ac = (SQRT(SQUARE(tempsrcx[M] - newpntx) +
+                                           SQUARE(tempsrcy[M] - newpnty) +
+                                           SQUARE(tempsrcz[M] - newpntz)));
+                                bc = (SQRT(SQUARE(lstnrx - newpntx) +
+                                           SQUARE(lstnry - newpnty) +
+                                           SQUARE(lstnrz - newpntz)));
+
+                                /* elev: when bc == 0 -> source + listener at
+                                   same x,y point (may happen in first run,
+                                   checked after that) angle = 0, elev = 0 if
+                                   at same point,
+                                   or source may be directly above/below */
+                                if(bc == FL(0.0))
+                                  {
+                                    /* source at listener */
+                                    if(ac == FL(0.0))
+                                      elev = FL(0.0);
+                                    /* source above listener */
+                                    else
+                                      elev = FL(90.0);
+                                  }
+                                else
+                                  {
+                                    /* cosine rule */
+                                    coselev = ((SQUARE(bc) +
+                                                SQUARE(ab) -
+                                                SQUARE(ac)) / (2.0 * ab * bc));
+                                    elev = (ACOS(coselev)* 180.0 / PI_F);
+                                  }
+
+                                /* if z coefficient of source < listener:
+                                   source below listener...*/
+                                if(tempsrcz[M] < lstnrz) elev *= -1;
+
+                                if(elev > FL(90.0))
+                                  elev = FL(90.0);
+                                if(elev < FL(-40.0))
+                                  elev = FL(-40.0);
+
+                                /* two nearest elev indices
+                                   to avoid recalculating */
+                                elevindexstore = (elev - minelev) / elevincrement;
+                                elevindexlow = (int)elevindexstore;
+
+                                if(elevindexlow < 13)
+                                  elevindexhigh = elevindexlow + 1;
+                                /* highest index reached */
+                                else
+                                  elevindexhigh = elevindexlow;
+
+                                /* get percentage value for interpolation */
+                                elevindexhighper = elevindexstore - elevindexlow;
+
+                                /* head rotation */
+                                angle -= rotate;
+
+                                while(angle < FL(0.0))
+                                  angle += FL(360.0);
+                                while(angle >= FL(360.0))
+                                  angle -= FL(360.0);
+
+                                /* as above,lookup index, used to check
+                                   for crossfade */
+                                elevindex = (int)(elevindexstore + 0.5);
+
+                                angleindex = (int)(angle /
+                                                   (360.0 /
+                                                    elevationarray[elevindex]) +
+                                                   0.5);
+                                angleindex = angleindex % elevationarray[elevindex];
+
+                                /* avoid recalculation */
+                                angleindexlowstore = angle /
+                                  (FL(360.0) /
+                                   elevationarray[elevindexlow]);
+                                angleindexhighstore = angle /
+                                  (FL(360.0) / elevationarray[elevindexhigh]);
+
+                                /* 4 closest indices, 2 low and 2 high */
+                                angleindex1 = (int)angleindexlowstore;
+
+                                angleindex2 = angleindex1 + 1;
+                                angleindex2 = angleindex2 %
+                                  elevationarray[elevindexlow];
+
+                                angleindex3 = (int)angleindexhighstore;
+
+                                angleindex4 = angleindex3 + 1;
+                                angleindex4 = angleindex4 %
+                                  elevationarray[elevindexhigh];
+
+                                /* angle percentages for interp */
+                                angleindex2per = angleindexlowstore - angleindex1;
+                                angleindex4per = angleindexhighstore - angleindex3;
+
+                                /* crossfade happens if index changes:nearest
+                                   measurement changes, 1st step: store old
+                                   values */
+                                if (oldelevindex[M] != elevindex ||
+                                    oldangleindex[M] != angleindex)
+                                  {
+                                    if(initialfade > irlength)
+                                      {
+                                        /* warning on overlapping fades */
+                                        if(cross[M])
+                                          {
+                                            printf(Str("\nWARNING: fades are "
+                                                       "overlapping: this could "
+                                                       "lead to noise: reduce "
+                                                       "fade size or change "
+                                                       "trajectory\n\n"));
+                                            cross[M] = 0;
+                                          }
+                                        /* reset l */
+                                        l[M] = 0;
+                                        crossfade = 1;
+                                        for(i = 0; i < irlengthpad; i++)
+                                          {
+                                            hrtflpadspecold[irlengthpad * M + i] =
+                                              hrtflpadspec[irlengthpad * M + i];
+                                            hrtfrpadspecold[irlengthpad * M + i] =
+                                              hrtfrpadspec[irlengthpad * M + i];
+                                          }
+                                      }
+
+                                    skip = 0;
+                                    /* store current phase */
+                                    if(angleindex > elevationarray[elevindex] / 2)
+                                      {
+                                        for(i = 0; i < elevindex; i ++)
+                                          skip +=((int)(elevationarray[i] / 2)
+                                                  + 1) * irlength;
+                                        for (i = 0;
+                                             i < (elevationarray[elevindex] -
+                                                  angleindex);
+                                             i++)
+                                          skip += irlength;
+                                        for(i = 0; i < irlength; i++)
+                                          {
+                                            currentphasel[irlength * M + i] =
+                                              fpindexr[skip + i];
+                                            currentphaser[irlength * M + i] =
+                                              fpindexl[skip + i];
+                                          }
+                                      }
+                                    else
+                                      {
+                                        for(i = 0; i < elevindex; i ++)
+                                          skip +=((int)(elevationarray[i] / 2)
+                                                  + 1) * irlength;
+                                        for (i = 0; i < angleindex; i++)
+                                          skip += irlength;
+                                        for(i = 0; i < irlength; i++)
+                                          {
+                                            currentphasel[irlength * M + i] =
+                                              fpindexl[skip+i];
+                                            currentphaser[irlength * M + i] =
+                                              fpindexr[skip+i];
+                                          }
+                                      }
+                                  }
+
+                                /* for next check */
+                                oldelevindex[M] = elevindex;
+                                oldangleindex[M] = angleindex;
+
+                                /* read 4 nearest HRTFs */
+                                /* switch l and r */
+                                skip = 0;
+                                if(angleindex1 > elevationarray[elevindexlow] / 2)
+                                  {
+                                    for(i = 0; i < elevindexlow; i ++)
+                                      skip +=((int)(elevationarray[i] / 2)
+                                              + 1) * irlength;
+                                    for (i = 0;
+                                         i < (elevationarray[elevindexlow] -
+                                              angleindex1);
+                                         i++)
+                                      skip += irlength;
+                                    for(i = 0; i < irlength; i++)
+                                      {
+                                        lowl1[i] = fpindexr[skip+i];
+                                        lowr1[i] = fpindexl[skip+i];
+                                      }
+                                  }
+                                else
+                                  {
+                                    for(i = 0; i < elevindexlow; i ++)
+                                      skip +=((int)(elevationarray[i] / 2)
+                                              + 1) * irlength;
+                                    for (i = 0; i < angleindex1; i++)
+                                      skip += irlength;
+                                    for(i = 0; i < irlength; i++)
+                                      {
+                                        lowl1[i] = fpindexl[skip+i];
+                                        lowr1[i] = fpindexr[skip+i];
+                                      }
+                                  }
+
+                                skip = 0;
+                                if(angleindex2 > elevationarray[elevindexlow] / 2)
+                                  {
+                                    for(i = 0; i < elevindexlow; i ++)
+                                      skip +=((int)(elevationarray[i] / 2)
+                                              + 1) * irlength;
+                                    for (i = 0;
+                                         i < (elevationarray[elevindexlow] -
+                                              angleindex2);
+                                         i++)
+                                      skip += irlength;
+                                    for(i = 0; i < irlength; i++)
+                                      {
+                                        lowl2[i] = fpindexr[skip+i];
+                                        lowr2[i] = fpindexl[skip+i];
+                                      }
+                                  }
+                                else
+                                  {
+                                    for(i = 0; i < elevindexlow; i ++)
+                                      skip +=((int)(elevationarray[i] / 2)
+                                              + 1) * irlength;
+                                    for (i = 0; i < angleindex2; i++)
+                                      skip += irlength;
+                                    for(i = 0; i < irlength; i++)
+                                      {
+                                        lowl2[i] = fpindexl[skip+i];
+                                        lowr2[i] = fpindexr[skip+i];
+                                      }
+                                  }
+
+                                skip = 0;
+                                if(angleindex3 > elevationarray[elevindexhigh] / 2)
+                                  {
+                                    for(i = 0; i < elevindexhigh; i ++)
+                                      skip +=((int)(elevationarray[i] / 2)
+                                              + 1) * irlength;
+                                    for (i = 0;
+                                         i < (elevationarray[elevindexhigh] -
+                                              angleindex3);
+                                         i++)
+                                      skip += irlength;
+                                    for(i = 0; i < irlength; i++)
+                                      {
+                                        highl1[i] = fpindexr[skip+i];
+                                        highr1[i] = fpindexl[skip+i];
+                                      }
+                                  }
+                                else
+                                  {
+                                    for(i = 0; i < elevindexhigh; i ++)
+                                      skip +=((int)(elevationarray[i] / 2)
+                                              + 1) * irlength;
+                                    for (i = 0; i < angleindex3; i++)
+                                      skip += irlength;
+                                    for(i = 0; i < irlength; i++)
+                                      {
+                                        highl1[i] = fpindexl[skip+i];
+                                        highr1[i] = fpindexr[skip+i];
+                                      }
+                                  }
+
+                                skip = 0;
+                                if(angleindex4 > elevationarray[elevindexhigh] / 2)
+                                  {
+                                    for(i = 0; i < elevindexhigh; i ++)
+                                      skip +=((int)(elevationarray[i] / 2)
+                                              + 1) * irlength;
+                                    for (i = 0;
+                                         i < (elevationarray[elevindexhigh] -
+                                              angleindex4);
+                                         i++)
+                                      skip += irlength;
+                                    for(i = 0; i < irlength; i++)
+                                      {
+                                        highl2[i] = fpindexr[skip+i];
+                                        highr2[i] = fpindexl[skip+i];
+                                      }
+                                  }
+                                else
+                                  {
+                                    for(i = 0; i < elevindexhigh; i ++)
+                                      skip +=((int)(elevationarray[i] / 2)
+                                              + 1) * irlength;
+                                    for (i = 0; i < angleindex4; i++)
+                                      skip += irlength;
+                                    for(i = 0; i < irlength; i++)
+                                      {
+                                        highl2[i] = fpindexl[skip+i];
+                                        highr2[i] = fpindexr[skip+i];
+                                      }
+                                  }
+
+                                /* magnitude interpolation */
+                                /* 0hz and Nyq */
+                                magllow = (FABS(lowl1[0])) +
+                                  ((FABS(lowl2[0]) - FABS(lowl1[0]))) *
+                                  angleindex2per;
+                                maglhigh = (FABS(highl1[0])) +
+                                  ((FABS(highl2[0]) - FABS(highl1[0]))) *
+                                  angleindex4per;
+                                magrlow = (FABS(lowr1[0])) +
+                                  ((FABS(lowr2[0]) - FABS(lowr1[0]))) *
+                                  angleindex2per;
+                                magrhigh = (FABS(highr1[0])) +
+                                  ((FABS(highr2[0]) - FABS(highr1[0]))) *
+                                  angleindex4per;
+                                magl = magllow + (maglhigh - magllow) *
+                                  elevindexhighper;
+                                magr = magrlow + (magrhigh - magrlow) *
+                                  elevindexhighper;
+                                if(currentphasel[M * irlength] < FL(0.0))
+                                  hrtflinterp[0] = - magl;
+                                else
+                                  hrtflinterp[0] = magl;
+                                if(currentphaser[M * irlength] < FL(0.0))
+                                  hrtfrinterp[0] = - magr;
+                                else
+                                  hrtfrinterp[0] = magr;
+
+                                magllow = (FABS(lowl1[1])) +
+                                  ((FABS(lowl2[1]) - FABS(lowl1[1]))) *
+                                  angleindex2per;
+                                maglhigh = (FABS(highl1[1]))
+                                  + ((FABS(highl2[1]) - FABS(highl1[1]))) *
+                                  angleindex4per;
+                                magrlow = (FABS(lowr1[1])) +
+                                  ((FABS(lowr2[1]) - FABS(lowr1[1]))) *
+                                  angleindex2per;
+                                magrhigh = (FABS(highr1[1])) +
+                                  ((FABS(highr2[1]) - FABS(highr1[1]))) *
+                                  angleindex4per;
+                                magl = magllow + (maglhigh - magllow) *
+                                  elevindexhighper;
+                                magr = magrlow + (magrhigh - magrlow) *
+                                  elevindexhighper;
+                                if(currentphasel[M * irlength + 1] < FL(0.0))
+                                  hrtflinterp[1] = - magl;
+                                else
+                                  hrtflinterp[1] = magl;
+                                if(currentphaser[M * irlength + 1] < FL(0.0))
+                                  hrtfrinterp[1] = - magr;
+                                else
+                                  hrtfrinterp[1] = magr;
+
+                                /* other values are complex, in fftw format */
+                                for(i = 2; i < irlength; i += 2)
+                                  {
+                                    /* interpolate high and low magnitudes */
+                                    magllow = lowl1[i] + (lowl2[i] - lowl1[i]) *
+                                      angleindex2per;
+                                    maglhigh = highl1[i] + (highl2[i] - highl1[i]) *
+                                      angleindex4per;
+
+                                    magrlow = lowr1[i] + (lowr2[i] - lowr1[i]) *
+                                      angleindex2per;
+                                    magrhigh = highr1[i] + (highr2[i] - highr1[i]) *
+                                      angleindex4per;
+
+                                    /* interpolate high and low results,
+                                       use current phase */
+                                    magl = magllow +  (maglhigh - magllow) *
+                                      elevindexhighper;
+                                    phasel = currentphasel[M * irlength + i + 1];
+
+                                    /* polar to rectangular */
+                                    hrtflinterp[i] = magl * FL(cos(phasel));
+                                    hrtflinterp[i + 1] = magl * FL(sin(phasel));
+
+                                    magr = magrlow + (magrhigh - magrlow) *
+                                      elevindexhighper;
+                                    phaser = currentphaser[M * irlength + i + 1];
+
+                                    hrtfrinterp[i] = magr * FL(cos(phaser));
+                                    hrtfrinterp[i + 1] = magr * FL(sin(phaser));
+                                  }
+
+                                csound->InverseRealFFT(csound, hrtflinterp,
+                                                       irlength);
+                                csound->InverseRealFFT(csound, hrtfrinterp,
+                                                       irlength);
+
+                                /* wall filters... */
+                                /* all 4 walls are the same! (trivial to
+                                   make them different...) */
+                                /* x axis, wall1 (left) */
+                                wallreflections =
+                                  (int)abs((int)(xc * .5 - .25 +
+                                                 (0.25 * pow(-1.0, xc))));
+                                /* wall2, x (right) */
+                                wallreflections +=
+                                  (int)abs((int)(xc * .5 + .25 -
+                                                 (0.25 * pow(-1.0, xc))));
+                                /* yaxis, wall3 (bottom) */
+                                wallreflections +=
+                                  (int)abs((int)(yc * .5 - .25 +
+                                                 (0.25 * pow(-1.0, yc))));
+                                /* yaxis, wall 4 (top) */
+                                wallreflections +=
+                                  (int)abs((int)(yc * .5 + .25 -
+                                                 (0.25 * pow(-1.0, yc))));
+                                if(threed)
+                                  {
+                                    /* floor (negative z) */
+                                    floorreflections =
+                                      (int)abs((int)(zc * .5 - .25 +
+                                                     (0.25 * pow(-1.0, zc))));
+                                    /* ceiling (positive z) */
+                                    ceilingreflections =
+                                      (int)abs((int)(zc * .5 + .25
+                                                     - (0.25 * pow(-1.0, zc))));
+                                  }
+
+                                /* fixed parameters on bands etc (to limit no of
+                                   inputs), but these could trivially be variable */
+                                /* note: delay values can be reused: zeroed every
+                                   time as only used in
+                                   processing hrtf, once every irlength, so not
+                                   used continuously...*/
+                                /* if processing was continuous, would need
+                                   separate mem for each filter, store for
+                                   next run etc...*/
+                                for(i = 0; i < wallreflections; i++)
+                                  {
+                                    delsinglel = delsingler = FL(0.0);
+                                    filter(hrtflinterp, p->wallcoefhigh,
+                                           p->wallcoeflow, &delsinglel,
+                                           irlength, sr);
+                                    filter(hrtfrinterp, p->wallcoefhigh,
+                                           p->wallcoeflow, &delsingler,
+                                           irlength, sr);
+                                    deldoublel[0] = deldoublel[1] = deldoubler[0] = deldoubler[1] = 0.0;
+                                    band(hrtflinterp, FL(250.0), FL(250.0) / p->q, p->wallg1, deldoublel, irlength, sr);
+                                    band(hrtfrinterp, FL(250.0), FL(250.0) / p->q, p->wallg1, deldoubler, irlength, sr);
+                                    deldoublel[0] = deldoublel[1] = deldoubler[0] = deldoubler[1] = 0.0;
+                                    band(hrtflinterp, FL(1000.0), FL(1000.0) / p->q, p->wallg2, deldoublel, irlength, sr);
+                                    band(hrtfrinterp, FL(1000.0), FL(1000.0) / p->q, p->wallg2, deldoubler, irlength, sr);
+                                    deldoublel[0] = deldoublel[1] = deldoubler[0] = deldoubler[1] = 0.0;
+                                    band(hrtflinterp, FL(4000.0), FL(4000.0) / p->q, p->wallg3, deldoublel, irlength, sr);
+                                    band(hrtfrinterp, FL(4000.0), FL(4000.0) / p->q, p->wallg3, deldoubler, irlength, sr);
+                                  }
+                                if(threed)
+                                  {
+                                    for(i = 0; i < floorreflections; i++)
+                                      {
+                                        delsinglel = delsingler = FL(0.0);
+                                        filter(hrtflinterp, p->floorcoefhigh, p->floorcoeflow, &delsinglel, irlength, sr);
+                                        filter(hrtfrinterp, p->floorcoefhigh, p->floorcoeflow, &delsingler, irlength, sr);
+                                        deldoublel[0] = deldoublel[1] = deldoubler[0] = deldoubler[1] = 0.0;
+                                        band(hrtflinterp, FL(250.0), FL(250.0) / p->q, p->floorg1, deldoublel, irlength, sr);
+                                        band(hrtfrinterp, FL(250.0), FL(250.0) / p->q, p->floorg1, deldoubler, irlength, sr);
+                                        deldoublel[0] = deldoublel[1] = deldoubler[0] = deldoubler[1] = 0.0;
+                                        band(hrtflinterp, FL(1000.0), FL(1000.0) / p->q, p->floorg2, deldoublel, irlength, sr);
+                                        band(hrtfrinterp, FL(1000.0), FL(1000.0) / p->q, p->floorg2, deldoubler, irlength, sr);
+                                        deldoublel[0] = deldoublel[1] = deldoubler[0] = deldoubler[1] = 0.0;
+                                        band(hrtflinterp, FL(4000.0), FL(4000.0) / p->q, p->floorg3, deldoublel, irlength, sr);
+                                        band(hrtfrinterp, FL(4000.0), FL(4000.0) / p->q, p->floorg3, deldoubler, irlength, sr);
+                                      }
+                                    for(i = 0; i < ceilingreflections; i++)
+                                      {
+                                        delsinglel = delsingler = FL(0.0);
+                                        filter(hrtflinterp, p->ceilingcoefhigh, p->ceilingcoeflow, &delsinglel, irlength, sr);
+                                        filter(hrtfrinterp, p->ceilingcoefhigh, p->ceilingcoeflow, &delsingler, irlength, sr);
+                                        deldoublel[0] = deldoublel[1] = deldoubler[0] = deldoubler[1] = 0.0;
+                                        band(hrtflinterp, FL(250.0), FL(250.0) / p->q, p->ceilingg1, deldoublel, irlength, sr);
+                                        band(hrtfrinterp, FL(250.0), FL(250.0) / p->q, p->ceilingg1, deldoubler, irlength, sr);
+                                        deldoublel[0] = deldoublel[1] = deldoubler[0] = deldoubler[1] = 0.0;
+                                        band(hrtflinterp, FL(1000.0), FL(1000.0) / p->q, p->ceilingg2, deldoublel, irlength, sr);
+                                        band(hrtfrinterp, FL(1000.0), FL(1000.0) / p->q, p->ceilingg2, deldoubler, irlength, sr);
+                                        deldoublel[0] = deldoublel[1] = deldoubler[0] = deldoubler[1] = 0.0;
+                                        band(hrtflinterp, FL(4000.0), FL(4000.0) / p->q, p->ceilingg3, deldoublel, irlength, sr);
+                                        band(hrtfrinterp, FL(4000.0), FL(4000.0) / p->q, p->ceilingg3, deldoubler, irlength, sr);
+                                      }
+                                  }
+                                
+                                for(i = 0; i < irlength; i++)
+                                  {
+                                    hrtflpad[i] = hrtflinterp[i];
+                                    hrtfrpad[i] = hrtfrinterp[i];
+                                  }
+                                
+                                for(i = irlength; i < irlengthpad; i++)
+                                  {
+                                    hrtflpad[i] = FL(0.0);
+                                    hrtfrpad[i] = FL(0.0);
+                                  }
+                                
+                                /* back to freq domain */
+                                csound->RealFFT(csound, hrtflpad, irlengthpad);
+                                csound->RealFFT(csound, hrtfrpad, irlengthpad);
+                                
+                                /* store */
+                                for(i = 0; i < irlengthpad; i++)
+                                  {
+                                    hrtflpadspec[M * irlengthpad + i] = hrtflpad[i];
+                                    hrtfrpadspec[M * irlengthpad + i] = hrtfrpad[i];
+                                  }
+                              }
+                          }       /* end of source / listener relative
+                                     change process */
+                        
+                        /* look after overlap add */
+                        for(i = 0; i < overlapsize ; i++)
+                          {
+                            overlapl[i] = outl[M * irlengthpad + i + irlength];
+                            overlapr[i] = outr[M * irlengthpad + i + irlength];
+                            if(crossfade)
+                              {
+                                overlaplold[i] =
+                                  outl[M * irlengthpad + i + irlength];
+                                overlaprold[i] =
+                                  outr[M * irlengthpad + i + irlength];
+                              }
+                            /* overlap will be previous fading out signal */
+                            if(cross[M])
+                              {
+                                overlaplold[i] =
+                                  outlold[M * irlengthpad + i + irlength];
+                                overlaprold[i] =
+                                  outrold[M * irlengthpad + i + irlength];
+                              }
+                          }
+
+                        /* insert insig */
+                        for (i = 0; i <  irlength; i++)
+                          inbufpad[i] = inbuf[i];
+
+                        for (i = irlength; i <  irlengthpad; i++)
+                          inbufpad[i] = FL(0.0);
+
+                        csound->RealFFT(csound, inbufpad, irlengthpad);
+
+                        for(i = 0; i < irlengthpad; i ++)
+                          {
+                            hrtflpad[i] = hrtflpadspec[M * irlengthpad + i];
+                            hrtfrpad[i] = hrtfrpadspec[M * irlengthpad + i];
+                          }
+
+                        /* convolution: spectral multiplication */
+                        csound->RealFFTMult(csound, outlspec, hrtflpad,
+                                            inbufpad, irlengthpad, FL(1.0));
+                        csound->RealFFTMult(csound, outrspec, hrtfrpad,
+                                            inbufpad, irlengthpad, FL(1.0));
+
+                        csound->InverseRealFFT(csound, outlspec, irlengthpad);
+                        csound->InverseRealFFT(csound, outrspec, irlengthpad);
+
+                        /* scale */
+                        for(i = 0; i < irlengthpad; i++)
+                          {
+                            outlspec[i] = outlspec[i]/(sr/FL(38000.0));
+                            outrspec[i] = outrspec[i]/(sr/FL(38000.0));
+                          }
+
+                        /* store */
+                        for(i = 0; i < irlengthpad; i++)
+                          {
+                            outl[M * irlengthpad + i] = outlspec[i];
+                            outr[M * irlengthpad + i] = outrspec[i];
+                          }
+
+                        /* setup for fades */
+                        if(crossfade || cross[M])
+                          {
+                            crossout = 1;
+
+                            /* need to put these values into a buffer for processing */
+                            for(i = 0; i < irlengthpad; i++)
+                              {
+                                hrtflpadold[i] =
+                                  hrtflpadspecold[M * irlengthpad + i];
+                                hrtfrpadold[i] =
+                                  hrtfrpadspecold[M * irlengthpad + i];
+                              }
+
+                            /* convolution */
+                            csound->RealFFTMult(csound, outlspecold, hrtflpadold,
+                                                inbufpad, irlengthpad, FL(1.0));
+                            csound->RealFFTMult(csound, outrspecold, hrtfrpadold,
+                                                inbufpad, irlengthpad, FL(1.0));
+
+                            /* ifft, back to time domain */
+                            csound->InverseRealFFT(csound, outlspecold,
+                                                   irlengthpad);
+                            csound->InverseRealFFT(csound, outrspecold,
+                                                   irlengthpad);
+
+                            /* scale */
+                            for(i = 0; i < irlengthpad; i++)
+                              {
+                                outlspecold[i] = outlspecold[i]/(sr/FL(38000.0));
+                                outrspecold[i] = outrspecold[i]/(sr/FL(38000.0));
+                              }
+
+                            /* o/p real values */
+                            for(i = 0; i < irlengthpad; i++)
+                              {
+                                outlold[M * irlengthpad + i] = outlspecold[i];
+                                outrold[M * irlengthpad + i] = outrspecold[i];
+                              }
+
+                            cross[M]++;
+                            cross[M] = cross[M] % fade;
+                          }
+
+                        if(crossout)
+                          for(i = 0; i < irlength; i++)
+                            {
+                              predell[i + M * irlength] =
+                                (outlspecold[i] +
+                                 (i < overlapsize ? overlaplold[i] : FL(0.0))) *
+                                FL(1. - (FL(l[M]) / fadebuffer)) +
+                                (outlspec[i] +
+                                 (i < overlapsize ? overlapl[i] : FL(0.0))) *
+                                (FL(l[M]) / fadebuffer);
+                              predelr[i + M * irlength] =
+                                (outrspecold[i] +
+                                 (i < overlapsize ? overlaprold[i] : FL(0.0))) *
+                                FL(1. - (FL(l[M]) / fadebuffer)) +
+                                (outrspec[i] +
+                                 (i < overlapsize ? overlapr[i] : FL(0.0))) *
+                                (FL(l[M]) / fadebuffer);
+                              l[M]++;
+                            }
+                        else
+                          for(i = 0; i < irlength; i++)
+                            {
+                              predell[i + M * irlength] =
+                                outlspec[i] +
+                                (i < overlapsize ? overlapl[i] : FL(0.0));
+                              predelr[i + M * irlength] =
+                                outrspec[i] +
+                                (i < overlapsize ? overlapr[i] : FL(0.0));
+                            }
+
+                        M++;
+                        M = M % impulses;
+
+                      } /* z */
+                  } /* y */
+              } /* x */
+
+            counter = 0;
+            /* need to store these values here, as storing them after check
+               would not allow each impulse to be processed! */
+            p->srcxv = srcx;
+            p->srcyv = srcy;
+            p->srczv = srcz;
+            p->lstnrxv = lstnrx;
+            p->lstnryv = lstnry;
+            p->lstnrzv = lstnrz;
+            p->rotatev = rotate;
+
+          }       /* end of counter == irlength */
+
+        /* update */
+        p->counter = counter;
+        p->initialfade = initialfade;
+
+      } /* end of ksmps loop */
+
+    return OK;
+}
+
+static OENTRY hrtfearly_localops[] =
+{
+  {
+    "hrtfearly",   sizeof(early), 5, "aaiii", "axxxxxxSSioopoOoooooooooooooooooo",
+    (SUBR)early_init, NULL, (SUBR)early_process
+  }
+};
+
+LINKAGE1(hrtfearly_localops)
diff --git a/Opcodes/hrtferX.c b/Opcodes/hrtferX.c
index e513ec4..565f3e4 100644
--- a/Opcodes/hrtferX.c
+++ b/Opcodes/hrtferX.c
@@ -50,7 +50,9 @@
  * the old and new HRTFs (probably a project in itself).
  ***************************************************************/
 
-#include "csdl.h"
+// #include "csdl.h"
+#include "csoundCore.h"        
+#include "interlocks.h"
 #include <stdio.h>
 #include <math.h>
 #include <stdlib.h>
@@ -151,7 +153,10 @@ static int hrtferxk(CSOUND *csound, HRTFER *p)
 {
     MYFLT      *aLeft, *aRight; /* audio output streams */
     MYFLT      *aIn, *kAz, *kElev; /* audio and control input streams */
-    int        azim, elev, el_index, az_index,oldel_index, oldaz_index;
+    int        azim, elev, el_index, az_index,oldel_index;
+#ifdef CLICKS
+    int        oldaz_index;
+#endif
     int        nsmpsi, nsmpso; /* number of samples in/out */
     /*         input,      out-left,    out-right */
     MYFLT      *x, *yl, *yr;    /* Local copies of address */
@@ -186,11 +191,11 @@ static int hrtferxk(CSOUND *csound, HRTFER *p)
     elev = (int) *kElev;
     azim = (int) *kAz;
     oldel_index = p->oldel_index;
-    oldaz_index = p->oldaz_index;
     fpindex = (int16 *) p->fpbegin;
     flip = 0;
 #ifdef CLICKS
     crossfadeflag = 0;
+    oldaz_index = p->oldaz_index;
 #endif
 
         /* Convert elevation in degrees to elevation array index. */
@@ -475,9 +480,9 @@ static int hrtferxk(CSOUND *csound, HRTFER *p)
     p->outfront    = outfront;
     p->outend      = outend;
     p->oldel_index = el_index;
+#ifdef CLICKS
     p->oldaz_index = az_index;
 
-#ifdef CLICKS
     for (i=0; i<FILT_LEN; i++) {        /* archive current HRTFs */
       p->oldhrtf_data.left[i]  = hrtf_data.left[i];
       p->oldhrtf_data.right[i] = hrtf_data.right[i];
@@ -489,9 +494,9 @@ static int hrtferxk(CSOUND *csound, HRTFER *p)
     return csound->PerfError(csound, Str("hrtfer: not initialised"));
 }
 
-static OENTRY localops[] = {
-{ "hrtfer",   sizeof(HRTFER),5, "aa", "akkS", (SUBR)hrtferxkSet, NULL, (SUBR)hrtferxk}
+static OENTRY hrtferX_localops[] = {
+{ "hrtfer",   sizeof(HRTFER),5, "aa", "akkS", (SUBR)hrtferxkSet, NULL, (SUBR)hrtferxk},
 };
 
-LINKAGE
+LINKAGE1(hrtferX_localops)
 
diff --git a/Opcodes/hrtfopcodes.c b/Opcodes/hrtfopcodes.c
index b3fdd51..53ed39f 100644
--- a/Opcodes/hrtfopcodes.c
+++ b/Opcodes/hrtfopcodes.c
@@ -1,7 +1,7 @@
 /*
     hrtfopcodes.c: new HRTF opcodes
 
-    (c) Brian Carty, 2008
+    (c) Brian Carty, 2010
 
     This file is part of Csound.
 
@@ -20,97 +20,105 @@
     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
     02111-1307 USA
 */
-#include "csdl.h"
+
+#include "csoundCore.h"
+#include "interlocks.h"
+
 #include <math.h>
-/*definitions*/
-#define minelev -40             /*from mit*/
-#define elevincrement 10        /*from mit*/
-
-#define maxdeltime 0.0011       /*max delay for min phase: a time value:
-                                  important to include offset...multiply by
-                                  sr to get no of samples for memory allocation*/
-
-/*additional definitions for woodworth models*/
-#define c 34400.0
-
-/*hrtf data sets were analysed for low frequency phase values, as it
-  is the important part of the spectrum for phase based localisation
-  cues. The values below were extracted and are used to scale the
-  functional phase spectrum.*/
-static const float nonlinitd[5] = {1.535133f,1.347668f,1.111214f,1.071324f,1.0f};
-static const float nonlinitd48k[5] = {1.515308f,1.268052f,1.086033f,1.086159f,1.0f};
-static const float nonlinitd96k[5] = {1.515846f,1.268239f,1.086041f,1.086115f,1.0f};
-
-/*number of measurements per elev: mit data const:read only, static:exists
-  for whoe process...*/
-static const int elevationarray[14] = {56, 60, 72, 72, 72, 72, 72,
-                                       60, 56, 45, 36, 24, 12, 1 };
-
-/*assumed mit hrtf data will be used here. Otherwise delay data would
-  need to be extracted and replaced here...*/
-static const float minphasedels[368] = {
-  0.000000f,0.000045f,0.000091f,0.000136f,0.000159f,0.000204f,
-  0.000249f,0.000272f,0.000295f,0.000317f,0.000363f,0.000385f,
-  0.000272f,0.000408f,0.000454f,0.000454f,0.000408f,0.000385f,
-  0.000363f,0.000317f,0.000295f,0.000295f,0.000249f,0.000204f,
-  0.000159f,0.000136f,0.000091f,0.000045f,0.000000f,0.000000f,
-  0.000045f,0.000091f,0.000136f,0.000181f,0.000227f,0.000249f,
-  0.000272f,0.000317f,0.000363f,0.000385f,0.000454f,0.000476f,
-  0.000454f,0.000522f,0.000499f,0.000499f,0.000476f,0.000454f,
-  0.000408f,0.000408f,0.000385f,0.000340f,0.000295f,0.000272f,
-  0.000227f,0.000181f,0.000136f,0.000091f,0.000045f,0.000000f,
-  0.000000f,0.000045f,0.000091f,0.000113f,0.000159f,0.000204f,
-  0.000227f,0.000272f,0.000317f,0.000317f,0.000363f,0.000408f,
-  0.000363f,0.000522f,0.000476f,0.000499f,0.000590f,0.000567f,
-  0.000567f,0.000544f,0.000522f,0.000499f,0.000476f,0.000454f,
-  0.000431f,0.000408f,0.000385f,0.000363f,0.000317f,0.000295f,
-  0.000249f,0.000204f,0.000181f,0.000136f,0.000091f,0.000045f,
-  0.000000f,0.000000f,0.000045f,0.000091f,0.000113f,0.000159f,
-  0.000204f,0.000249f,0.000295f,0.000317f,0.000363f,0.000340f,
-  0.000385f,0.000431f,0.000476f,0.000522f,0.000544f,0.000612f,
-  0.000658f,0.000658f,0.000635f,0.000658f,0.000522f,0.000499f,
-  0.000476f,0.000454f,0.000408f,0.000385f,0.000363f,0.000340f,
-  0.000295f,0.000272f,0.000227f,0.000181f,0.000136f,0.000091f,
-  0.000045f,0.000000f,0.000000f,0.000045f,0.000091f,0.000136f,
-  0.000159f,0.000204f,0.000249f,0.000295f,0.000340f,0.000385f,
-  0.000431f,0.000476f,0.000522f,0.000567f,0.000522f,0.000567f,
-  0.000567f,0.000635f,0.000703f,0.000748f,0.000748f,0.000726f,
-  0.000703f,0.000658f,0.000454f,0.000431f,0.000385f,0.000363f,
-  0.000317f,0.000295f,0.000272f,0.000227f,0.000181f,0.000136f,
-  0.000091f,0.000045f,0.000000f,0.000000f,0.000045f,0.000091f,
-  0.000113f,0.000159f,0.000204f,0.000249f,0.000295f,0.000340f,
-  0.000385f,0.000408f,0.000454f,0.000499f,0.000544f,0.000522f,
-  0.000590f,0.000590f,0.000635f,0.000658f,0.000680f,0.000658f,
-  0.000544f,0.000590f,0.000567f,0.000454f,0.000431f,0.000385f,
-  0.000363f,0.000317f,0.000272f,0.000272f,0.000227f,0.000181f,
-  0.000136f,0.000091f,0.000045f,0.000000f,0.000000f,0.000045f,
-  0.000068f,0.000113f,0.000159f,0.000204f,0.000227f,0.000272f,
-  0.000317f,0.000340f,0.000385f,0.000431f,0.000454f,0.000499f,
-  0.000499f,0.000544f,0.000567f,0.000590f,0.000590f,0.000590f,
-  0.000590f,0.000567f,0.000567f,0.000476f,0.000454f,0.000408f,
-  0.000385f,0.000340f,0.000340f,0.000295f,0.000249f,0.000204f,
-  0.000159f,0.000136f,0.000091f,0.000045f,0.000000f,0.000000f,
-  0.000045f,0.000091f,0.000113f,0.000159f,0.000204f,0.000249f,
-  0.000295f,0.000340f,0.000363f,0.000385f,0.000431f,0.000454f,
-  0.000499f,0.000522f,0.000522f,0.000522f,0.000499f,0.000476f,
-  0.000454f,0.000431f,0.000385f,0.000340f,0.000317f,0.000272f,
-  0.000227f,0.000181f,0.000136f,0.000091f,0.000045f,0.000000f,
-  0.000000f,0.000045f,0.000091f,0.000136f,0.000159f,0.000204f,
-  0.000227f,0.000249f,0.000295f,0.000340f,0.000363f,0.000385f,
-  0.000408f,0.000431f,0.000431f,0.000431f,0.000431f,0.000408f,
-  0.000385f,0.000363f,0.000317f,0.000317f,0.000272f,0.000227f,
-  0.000181f,0.000136f,0.000091f,0.000045f,0.000000f,0.000000f,
-  0.000045f,0.000091f,0.000136f,0.000181f,0.000204f,0.000227f,
-  0.000272f,0.000295f,0.000317f,0.000340f,0.000340f,0.000363f,
-  0.000363f,0.000340f,0.000317f,0.000295f,0.000249f,0.000204f,
-  0.000159f,0.000113f,0.000068f,0.000023f,0.000000f,0.000045f,
-  0.000068f,0.000113f,0.000159f,0.000181f,0.000204f,0.000227f,
-  0.000249f,0.000249f,0.000249f,0.000227f,0.000227f,0.000181f,
-  0.000159f,0.000113f,0.000091f,0.000045f,0.000000f,0.000000f,
-  0.000045f,0.000091f,0.000136f,0.000159f,0.000181f,0.000181f,
-  0.000181f,0.000159f,0.000136f,0.000091f,0.000045f,0.000000f,
-  0.000000f,0.000045f,0.000068f,0.000091f,0.000068f,0.000045f,
-  0.000000f,0.000000f};
+/* definitions */
+/* from mit */
+#define minelev (-40)
+#define elevincrement (10)
+
+/* max delay for min phase: a time value:
+   multiply by sr to get no of samples for memory allocation */
+#define maxdeltime (0.0011)
+
+/* additional definitions for woodworth models */
+#define c (34400.0)
+
+/* hrtf data sets were analysed for low frequency phase values, as it
+   is the important part of the spectrum for phase based localisation
+   cues. The values below were extracted and are used to scale the
+   functional phase spectrum. radius: 8.8 cm see nonlinitd.cpp */
+static const float nonlinitd[5] = {1.570024f, 1.378733f, 1.155164f, 1.101230f,1.0f};
+static const float nonlinitd48k[5] =
+  {1.549748f, 1.305457f, 1.124501f, 1.112852f,1.0f};
+static const float nonlinitd96k[5] =
+  {1.550297f, 1.305671f, 1.124456f, 1.112818f,1.0f};
+
+/* number of measurements per elev: mit data const:read only, static:exists
+   for whole process... */
+static const int elevationarray[14] =
+  {56, 60, 72, 72, 72, 72, 72, 60, 56, 45, 36, 24, 12, 1 };
+
+/* assumed mit hrtf data will be used here. Otherwise delay data would need
+   to be extracted and replaced here... */
+static const float minphasedels[368] =
+{
+  0.000000f, 0.000045f, 0.000091f, 0.000136f, 0.000159f, 0.000204f,
+  0.000249f, 0.000272f, 0.000295f, 0.000317f, 0.000363f, 0.000385f,
+  0.000272f, 0.000408f, 0.000454f, 0.000454f, 0.000408f, 0.000385f,
+  0.000363f, 0.000317f, 0.000295f, 0.000295f, 0.000249f, 0.000204f,
+  0.000159f, 0.000136f, 0.000091f, 0.000045f, 0.000000f, 0.000000f,
+  0.000045f, 0.000091f, 0.000136f, 0.000181f, 0.000227f, 0.000249f,
+  0.000272f, 0.000317f, 0.000363f, 0.000385f, 0.000454f, 0.000476f,
+  0.000454f, 0.000522f, 0.000499f, 0.000499f, 0.000476f, 0.000454f,
+  0.000408f, 0.000408f, 0.000385f, 0.000340f, 0.000295f, 0.000272f,
+  0.000227f, 0.000181f, 0.000136f, 0.000091f, 0.000045f, 0.000000f,
+  0.000000f, 0.000045f, 0.000091f, 0.000113f, 0.000159f, 0.000204f,
+  0.000227f, 0.000272f, 0.000317f, 0.000317f, 0.000363f, 0.000408f,
+  0.000363f, 0.000522f, 0.000476f, 0.000499f, 0.000590f, 0.000567f,
+  0.000567f, 0.000544f, 0.000522f, 0.000499f, 0.000476f, 0.000454f,
+  0.000431f, 0.000408f, 0.000385f, 0.000363f, 0.000317f, 0.000295f,
+  0.000249f, 0.000204f, 0.000181f, 0.000136f, 0.000091f, 0.000045f,
+  0.000000f, 0.000000f, 0.000045f, 0.000091f, 0.000113f, 0.000159f,
+  0.000204f, 0.000249f, 0.000295f, 0.000317f, 0.000363f, 0.000340f,
+  0.000385f, 0.000431f, 0.000476f, 0.000522f, 0.000544f, 0.000612f,
+  0.000658f, 0.000658f, 0.000635f, 0.000658f, 0.000522f, 0.000499f,
+  0.000476f, 0.000454f, 0.000408f, 0.000385f, 0.000363f, 0.000340f,
+  0.000295f, 0.000272f, 0.000227f, 0.000181f, 0.000136f, 0.000091f,
+  0.000045f, 0.000000f, 0.000000f, 0.000045f, 0.000091f, 0.000136f,
+  0.000159f, 0.000204f, 0.000249f, 0.000295f, 0.000340f, 0.000385f,
+  0.000431f, 0.000476f, 0.000522f, 0.000567f, 0.000522f, 0.000567f,
+  0.000567f, 0.000635f, 0.000703f, 0.000748f, 0.000748f, 0.000726f,
+  0.000703f, 0.000658f, 0.000454f, 0.000431f, 0.000385f, 0.000363f,
+  0.000317f, 0.000295f, 0.000272f, 0.000227f, 0.000181f, 0.000136f,
+  0.000091f, 0.000045f, 0.000000f, 0.000000f, 0.000045f, 0.000091f,
+  0.000113f, 0.000159f, 0.000204f, 0.000249f, 0.000295f, 0.000340f,
+  0.000385f, 0.000408f, 0.000454f, 0.000499f, 0.000544f, 0.000522f,
+  0.000590f, 0.000590f, 0.000635f, 0.000658f, 0.000680f, 0.000658f,
+  0.000544f, 0.000590f, 0.000567f, 0.000454f, 0.000431f, 0.000385f,
+  0.000363f, 0.000317f, 0.000272f, 0.000272f, 0.000227f, 0.000181f,
+  0.000136f, 0.000091f, 0.000045f, 0.000000f, 0.000000f, 0.000045f,
+  0.000068f, 0.000113f, 0.000159f, 0.000204f, 0.000227f, 0.000272f,
+  0.000317f, 0.000340f, 0.000385f, 0.000431f, 0.000454f, 0.000499f,
+  0.000499f, 0.000544f, 0.000567f, 0.000590f, 0.000590f, 0.000590f,
+  0.000590f, 0.000567f, 0.000567f, 0.000476f, 0.000454f, 0.000408f,
+  0.000385f, 0.000340f, 0.000340f, 0.000295f, 0.000249f, 0.000204f,
+  0.000159f, 0.000136f, 0.000091f, 0.000045f, 0.000000f, 0.000000f,
+  0.000045f, 0.000091f, 0.000113f, 0.000159f, 0.000204f, 0.000249f,
+  0.000295f, 0.000340f, 0.000363f, 0.000385f, 0.000431f, 0.000454f,
+  0.000499f, 0.000522f, 0.000522f, 0.000522f, 0.000499f, 0.000476f,
+  0.000454f, 0.000431f, 0.000385f, 0.000340f, 0.000317f, 0.000272f,
+  0.000227f, 0.000181f, 0.000136f, 0.000091f, 0.000045f, 0.000000f,
+  0.000000f, 0.000045f, 0.000091f, 0.000136f, 0.000159f, 0.000204f,
+  0.000227f, 0.000249f, 0.000295f, 0.000340f, 0.000363f, 0.000385f,
+  0.000408f, 0.000431f, 0.000431f, 0.000431f, 0.000431f, 0.000408f,
+  0.000385f, 0.000363f, 0.000317f, 0.000317f, 0.000272f, 0.000227f,
+  0.000181f, 0.000136f, 0.000091f, 0.000045f, 0.000000f, 0.000000f,
+  0.000045f, 0.000091f, 0.000136f, 0.000181f, 0.000204f, 0.000227f,
+  0.000272f, 0.000295f, 0.000317f, 0.000340f, 0.000340f, 0.000363f,
+  0.000363f, 0.000340f, 0.000317f, 0.000295f, 0.000249f, 0.000204f,
+  0.000159f, 0.000113f, 0.000068f, 0.000023f, 0.000000f, 0.000045f,
+  0.000068f, 0.000113f, 0.000159f, 0.000181f, 0.000204f, 0.000227f,
+  0.000249f, 0.000249f, 0.000249f, 0.000227f, 0.000227f, 0.000181f,
+  0.000159f, 0.000113f, 0.000091f, 0.000045f, 0.000000f, 0.000000f,
+  0.000045f, 0.000091f, 0.000136f, 0.000159f, 0.000181f, 0.000181f,
+  0.000181f, 0.000159f, 0.000136f, 0.000091f, 0.000045f, 0.000000f,
+  0.000000f, 0.000045f, 0.000068f, 0.000091f, 0.000068f, 0.000045f,
+  0.000000f, 0.000000f
+};
 
 
 #ifdef WORDS_BIGENDIAN
@@ -120,11 +128,12 @@ static int swap4bytes(CSOUND* csound, MEMFIL* mfp)
     char *p = mfp->beginp;
     int  size = mfp->length;
 
-    while (size >= 4) {
-      c1 = p[0]; c2 = p[1]; c3 = p[2]; c4 = p[3];
-      p[0] = c4; p[1] = c3; p[2] = c2; p[3] = c1;
-      size -= 4; p +=4;
-    }
+    while (size >= 4)
+      {
+        c1 = p[0]; c2 = p[1]; c3 = p[2]; c4 = p[3];
+        p[0] = c4; p[1] = c3; p[2] = c2; p[3] = c1;
+        size -= 4; p +=4;
+      }
 
     return OK;
 }
@@ -132,74 +141,87 @@ static int swap4bytes(CSOUND* csound, MEMFIL* mfp)
 static int (*swap4bytes)(CSOUND*, MEMFIL*) = NULL;
 #endif
 
-/*Csound hrtf magnitude interpolation, phase truncation object: Jan 08*/
-
-/*aleft,aright hrtfmove asrc, kaz, kel, ifilel, ifiler [, imode =0,
-  ifade =8, sr = 44100]...*/
-/*imode: minphase/phase truncation, ifade: no of buffers per fade for
-  phase trunc., sr can be 44.1/48/96k*/
-
-typedef struct {
-  OPDS  h;
-  MYFLT *outsigl, *outsigr;
-  MYFLT *in, *kangle, *kelev, *ifilel, *ifiler,
-         *omode, *ofade, *osr;   /* outputs and inputs*/
-
-  MEMFIL *fpl,*fpr,*fpdel;                              /* file pointers*/
-  float *fpbeginl,*fpbeginr;
-
-  int IMPLENGTH, complexIMPLENGTH, overlapsize,
-      complexfftbuff;         /*see definitions in INIT*/
-
-  MYFLT sr;
-
-  int oldelevindex, oldangleindex;      /*old indices for checking if
-                                          changes occur in trajectory.*/
-
-  int counter;
-
-  int cross,l,initialfade;              /*initialfade used to avoid fade
-                                          in of data...if not,'old' data
-                                          faded out with zero hrtf,'new'
-                                          data faded in.*/
-
-  int fadebuffer;               /*user defined buffer size for fades.*/
-
-  int minphase,phasetrunc;              /*flags for process type*/
-
-  AUXCH hrtflpad,hrtfrpad;              /*hrtf data padded*/
-  AUXCH oldhrtflpad,oldhrtfrpad;        /*old data for fades*/
-  AUXCH insig, outl, outr, outlold, outrold;    /*in and output buffers*/
-
-  /*memory local to perform method*/
-  AUXCH complexinsig;                   /*insig fft*/
-  AUXCH hrtflfloat, hrtfrfloat;         /*hrtf buffers (rectangular complex form)*/
-  AUXCH outspecl, outspecr, outspecoldl, outspecoldr;   /*spectral data*/
-
-  AUXCH overlapl, overlapr;             /*overlap data*/
-  AUXCH overlapoldl, overlapoldr;       /*old overlap data for longer crossfades*/
-
-  AUXCH lowl1,lowr1,lowl2,lowr2,
-        highl1,highr1,highl2,highr2;    /*interpolation buffers*/
-  AUXCH currentphasel, currentphaser;   /*current phase buffers*/
-
-  AUXCH logmagl,logmagr,xhatwinl,
-        xhatwinr,expxhatwinl,expxhatwinr;      /*min phase buffers*/
-  AUXCH win;            /*min phase window: a static buffer*/
-
-  /*delay stuff*/
-  AUXCH delmeml, delmemr;
-  int ptl,ptr;
+/* Csound hrtf magnitude interpolation, phase truncation object */
 
-  int counts;
+/* aleft,aright hrtfmove asrc, kaz, kel, ifilel, ifiler [, imode = 0,
+   ifade = 8, sr = 44100]... */
+/* imode: minphase/phase truncation, ifade: no of buffers per fade for
+   phase trunc., sr can be 44.1/48/96k */
 
-} hrtfmove;
+typedef struct
+{
+        OPDS  h;
+        /* outputs and inputs */
+        MYFLT *outsigl, *outsigr;
+        MYFLT *in, *kangle, *kelev, *ifilel, *ifiler, *omode, *ofade, *osr;
+
+        /* check if relative source has changed! */
+        MYFLT anglev, elevv;
+
+        float *fpbeginl,*fpbeginr;
+
+        /* see definitions in INIT */
+        int irlength, irlengthpad, overlapsize;
+
+        MYFLT sr;
+
+        /* old indices for checking if changes occur in trajectory. */
+        int oldelevindex, oldangleindex;
+
+        int counter;
+
+        /* initialfade used to avoid fade in of data...if not,'old' data
+           faded out with zero hrtf,'new' data faded in. */
+        int cross,l,initialfade;
+
+        /* user defined buffer size for fades. */
+        int fadebuffer, fade;
+
+        /* flags for process type */
+        int minphase,phasetrunc;
+
+        /* hrtf data padded */
+        AUXCH hrtflpad,hrtfrpad;
+        /* old data for fades */
+        AUXCH oldhrtflpad,oldhrtfrpad;
+        /* in and output buffers */
+        AUXCH insig, outl, outr, outlold, outrold;
+
+        /* memory local to perform method */
+        /* insig fft */
+        AUXCH complexinsig;
+        /* hrtf buffers (rectangular complex form) */
+        AUXCH hrtflfloat, hrtfrfloat;
+        /* spectral data */
+        AUXCH outspecl, outspecr, outspecoldl, outspecoldr;
+
+        /* overlap data */
+        AUXCH overlapl, overlapr;
+        /* old overlap data for longer crossfades */
+        AUXCH overlapoldl, overlapoldr;
+
+        /* interpolation buffers */
+        AUXCH lowl1, lowr1, lowl2, lowr2, highl1, highr1, highl2, highr2;
+        /* current phase buffers */
+        AUXCH currentphasel, currentphaser;
+
+        /* min phase buffers */
+        AUXCH logmagl,logmagr,xhatwinl,xhatwinr,expxhatwinl,expxhatwinr;
+        /* min phase window: a static buffer */
+        AUXCH win;
+        MYFLT delayfloat;
+
+        /* delay */
+        AUXCH delmeml, delmemr;
+        int ptl, ptr, mdtl, mdtr;
+}
+hrtfmove;
 
 static int hrtfmove_init(CSOUND *csound, hrtfmove *p)
 {
-    MEMFIL *fpl=NULL,*fpr=NULL; /*left and right data files: spectral mag,
-                                  phase format.*/
-    int i;                        /*for looping*/
+    /* left and right data files: spectral mag, phase format. */
+    MEMFIL *fpl = NULL,*fpr = NULL;
+    int i;
     char filel[MAXNAME],filer[MAXNAME];
 
     int mode = (int)*p->omode;
@@ -208,200 +230,246 @@ static int hrtfmove_init(CSOUND *csound, hrtfmove *p)
 
     MYFLT *win;
 
-    int IMPLENGTH = 0;                /*time domain impulse length */
-    int complexIMPLENGTH = 0;         /*freq domain impulse length*/
-    int overlapsize = 0;              /*overlap add convolution*/
-    int complexfftbuff = 0;           /*complex fft used(min phase needs it)*/
-
+    /* time domain impulse length, padded, overlap add */
+    int irlength=0, irlengthpad=0, overlapsize=0;
 
-    /* csound->Message(csound,
-                       Str("\n\nHrtf Based Binarual Spatialisation\n\n")); */
-
-    if (mode==1) p->minphase=1;    /*flag for process type: default phase trunc*/
-    else p->phasetrunc=1;
+    /* flag for process type: default phase trunc */
+    if(mode == 1)
+      {
+        p->minphase = 1;
+        p->phasetrunc = 0;
+      }
+    else
+      {
+        p->phasetrunc = 1;
+        p->minphase = 0;
+      }
 
-    if (fade<1||fade>24)           /*fade length: default 8, max 24, min 1 */
-      fade=8;
+    /* fade length: default 8, max 24, min 1 */
+    if(fade < 1 || fade > 24)
+      fade = 8;
+    p->fade = fade;
 
-    if (sr!=FL(44100.0) && sr!=FL(48000.0) && sr!=FL(96000.0))
-      sr = FL(44100.0);
+    /* sr, defualt 44100 */
+    if(sr != 44100 && sr != 48000 && sr != 96000)
+      sr = 44100;
     p->sr = sr;
 
     if (UNLIKELY(csound->esr != sr))
-      csound->Warning(csound,
-                      Str("\nOrchestra sampling rate is not"
-                          " compatible with HRTF data files\nShould be %.0f,"
-                          " see Csound help for object\n\n"), sr);
-
-    strcpy(filel, (char*) p->ifilel); /*copy in string name...*/
-    strcpy(filer, (char*) p->ifiler);
-
-    if (sr == FL(44100.0)) {               /*setup as per sr*/
-      IMPLENGTH = 128;
-      complexIMPLENGTH = 256;
-      overlapsize = (IMPLENGTH-1);
-      complexfftbuff = (complexIMPLENGTH*2);
-
-      /*added ldmemfile2: reading floats without a header!*/
-      if (UNLIKELY((fpl = csound->ldmemfile2withCB(csound, filel,
-                                                   CSFTYPE_FLOATS_BINARY,
-                                                   swap4bytes)) == NULL)) {
-        return
-          csound->InitError(csound,
-                            Str("\n\n\ncannot load left data file, exiting\n\n"));
+      csound->Message(csound,
+                      Str("\n\nWARNING!!:\nOrchestra SR not compatible"
+                          " with HRTF processing SR of: %.0f\n\n"), sr);
+
+    /* setup as per sr */
+    if(sr == 44100 || sr == 48000)
+      {
+        irlength = 128;
+        irlengthpad = 256;
+        overlapsize = (irlength - 1);
       }
-      /* Byte swap */
-      if (UNLIKELY((fpr = csound->ldmemfile2withCB(csound, filer,
-                                                   CSFTYPE_FLOATS_BINARY,
-                                                   swap4bytes)) == NULL)) {
-        return
-          csound->InitError(csound,
-                            Str("\n\n\ncannot load right data file, exiting\n\n"));
+    else if(sr == 96000)
+      {
+        irlength = 256;
+        irlengthpad = 512;
+        overlapsize = (irlength - 1);
       }
-      /* Byte swap */
-    }
 
-    else if (sr == FL(48000.0)) {
-      IMPLENGTH = 128;
-      complexIMPLENGTH = 256;
-      overlapsize = (IMPLENGTH-1);
-      complexfftbuff = (complexIMPLENGTH*2);
-
-      if (UNLIKELY((fpl = csound->ldmemfile2withCB(csound, filel,
-                                                   CSFTYPE_FLOATS_BINARY,
-                                                   swap4bytes)) == NULL)) {
-        return
-          csound->InitError(csound,
-                            Str("\n\n\ncannot load left data file, exiting\n\n"));
-      }
+    /* copy in string name */
+    strncpy(filel, (char*) p->ifilel, MAXNAME);
+    strncpy(filer, (char*) p->ifiler, MAXNAME);
 
-      if (UNLIKELY((fpr = csound->ldmemfile2withCB(csound, filer,
-                                                   CSFTYPE_FLOATS_BINARY,
-                                                   swap4bytes)) == NULL)) {
-        return
-          csound->InitError(csound,
-                            Str("\n\n\ncannot load right data file, exiting\n\n"));
-      }
-    }
-
-    else if (sr == FL(96000.0)) {
-      IMPLENGTH = 256;
-      complexIMPLENGTH = 512;
-      overlapsize = (IMPLENGTH-1);
-      complexfftbuff = (complexIMPLENGTH*2);
-
-      if (UNLIKELY((fpl = csound->ldmemfile2withCB(csound, filel,
-                                                   CSFTYPE_FLOATS_BINARY,
-                                                   swap4bytes)) == NULL)) {
-        return
-          csound->InitError(csound,
-                            Str("\n\n\ncannot load left data file, exiting\n\n"));
-      }
-
-      if (UNLIKELY((fpr = csound->ldmemfile2withCB(csound, filer,
-                                                   CSFTYPE_FLOATS_BINARY,
-                                                   swap4bytes)) == NULL)) {
-        return
-          csound->InitError(csound,
-                            Str("\n\n\ncannot load right data file, exiting\n\n"));
-      }
-    }
-    else {
+    /* reading files, with byte swap */
+    fpl = csound->ldmemfile2withCB(csound, filel, CSFTYPE_FLOATS_BINARY,
+                                   swap4bytes);
+    if (UNLIKELY(fpl == NULL))
+      return
+        csound->InitError(csound,
+                          Str("\n\n\nCannot load left data file, exiting\n\n"));
 
+    fpr = csound->ldmemfile2withCB(csound, filer, CSFTYPE_FLOATS_BINARY,
+                                   swap4bytes);
+    if (UNLIKELY(fpr == NULL))
       return
         csound->InitError(csound,
-                          Str("\n\n\n Sampling rate not supported, exiting\n\n"));
-    }
+                          Str("\n\n\nCannot load right data file, exiting\n\n"));
 
-    p->IMPLENGTH = IMPLENGTH;
-    p->complexIMPLENGTH = complexIMPLENGTH;
+    p->irlength = irlength;
+    p->irlengthpad = irlengthpad;
     p->overlapsize = overlapsize;
-    p->complexfftbuff = complexfftbuff;
-
-    p->fadebuffer = (int)fade*IMPLENGTH; /*the amount of buffers to fade over.*/
 
-    /*file handles*/
-    if (fpl && fpr) {
-      p->fpl = fpl;
-      p->fpr = fpr;
-      p->fpbeginl = (float *) fpl->beginp;
-      p->fpbeginr = (float *) fpr->beginp;
-    }
-
-    /*common buffers (used by both min phase and phasetrunc)*/
-    csound->AuxAlloc(csound, IMPLENGTH*sizeof(MYFLT), &p->insig);
-    csound->AuxAlloc(csound, complexIMPLENGTH*sizeof(MYFLT), &p->outl);
-    csound->AuxAlloc(csound, complexIMPLENGTH*sizeof(MYFLT), &p->outr);
-    csound->AuxAlloc(csound, complexfftbuff*sizeof(MYFLT), &p->hrtflpad);
-    csound->AuxAlloc(csound, complexfftbuff*sizeof(MYFLT), &p->hrtfrpad);
-    csound->AuxAlloc(csound, complexfftbuff*sizeof(MYFLT), &p-> complexinsig);
-    csound->AuxAlloc(csound, complexIMPLENGTH*sizeof(MYFLT), &p->hrtflfloat);
-    csound->AuxAlloc(csound, complexIMPLENGTH*sizeof(MYFLT), &p->hrtfrfloat);
-    csound->AuxAlloc(csound, complexfftbuff*sizeof(MYFLT), &p->outspecl);
-    csound->AuxAlloc(csound, complexfftbuff*sizeof(MYFLT), &p->outspecr);
-    csound->AuxAlloc(csound, overlapsize*sizeof(MYFLT), &p->overlapl);
-    csound->AuxAlloc(csound, overlapsize*sizeof(MYFLT), &p->overlapr);
-
-    /*interpolation values*/
-    csound->AuxAlloc(csound, complexIMPLENGTH*sizeof(MYFLT), &p->lowl1);
-    csound->AuxAlloc(csound, complexIMPLENGTH*sizeof(MYFLT), &p->lowr1);
-    csound->AuxAlloc(csound, complexIMPLENGTH*sizeof(MYFLT), &p->lowl2);
-    csound->AuxAlloc(csound, complexIMPLENGTH*sizeof(MYFLT), &p->lowr2);
-    csound->AuxAlloc(csound, complexIMPLENGTH*sizeof(MYFLT), &p->highl1);
-    csound->AuxAlloc(csound, complexIMPLENGTH*sizeof(MYFLT), &p->highr1);
-    csound->AuxAlloc(csound, complexIMPLENGTH*sizeof(MYFLT), &p->highl2);
-    csound->AuxAlloc(csound, complexIMPLENGTH*sizeof(MYFLT), &p->highr2);
-    csound->AuxAlloc(csound, complexIMPLENGTH*sizeof(MYFLT), &p->currentphasel);
-    csound->AuxAlloc(csound, complexIMPLENGTH*sizeof(MYFLT), &p->currentphaser);
-
-    p->counter = 0;               /*initialize counter*/
-
-    /*phase truncation buffers and variables*/
-    csound->AuxAlloc(csound, complexfftbuff*sizeof(MYFLT), &p->oldhrtflpad);
-    csound->AuxAlloc(csound, complexfftbuff*sizeof(MYFLT), &p->oldhrtfrpad);
-    csound->AuxAlloc(csound, complexIMPLENGTH*sizeof(MYFLT), &p->outlold);
-    csound->AuxAlloc(csound, complexIMPLENGTH*sizeof(MYFLT), &p->outrold);
-    csound->AuxAlloc(csound, complexfftbuff*sizeof(MYFLT), &p->outspecoldl);
-    csound->AuxAlloc(csound, complexfftbuff*sizeof(MYFLT), &p->outspecoldr);
-    csound->AuxAlloc(csound, overlapsize*sizeof(MYFLT), &p->overlapoldl);
-    csound->AuxAlloc(csound, overlapsize*sizeof(MYFLT), &p->overlapoldr);
-
-    /* initialize counters and indices*/
+    /* the amount of buffers to fade over. */
+    p->fadebuffer = (int)fade*irlength;
+
+    /* file handles */
+    p->fpbeginl = (float *) fpl->beginp;
+    p->fpbeginr = (float *) fpr->beginp;
+
+    /* common buffers (used by both min phase and phasetrunc) */
+    if (!p->insig.auxp || p->insig.size < irlength * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlength*sizeof(MYFLT), &p->insig);
+    if (!p->outl.auxp || p->outl.size < irlengthpad * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlengthpad*sizeof(MYFLT), &p->outl);
+    if (!p->outr.auxp || p->outr.size < irlengthpad * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlengthpad*sizeof(MYFLT), &p->outr);
+    if (!p->hrtflpad.auxp || p->hrtflpad.size < irlengthpad * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlengthpad*sizeof(MYFLT), &p->hrtflpad);
+    if (!p->hrtfrpad.auxp || p->hrtfrpad.size < irlengthpad * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlengthpad*sizeof(MYFLT), &p->hrtfrpad);
+    if (!p->complexinsig.auxp || p->complexinsig.size < irlengthpad * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlengthpad*sizeof(MYFLT), &p->complexinsig);
+    if (!p->hrtflfloat.auxp || p->hrtflfloat.size < irlength * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlength*sizeof(MYFLT), &p->hrtflfloat);
+    if (!p->hrtfrfloat.auxp || p->hrtfrfloat.size < irlength * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlength*sizeof(MYFLT), &p->hrtfrfloat);
+    if (!p->outspecl.auxp || p->outspecl.size < irlengthpad * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlengthpad*sizeof(MYFLT), &p->outspecl);
+    if (!p->outspecr.auxp || p->outspecr.size < irlengthpad * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlengthpad*sizeof(MYFLT), &p->outspecr);
+    if (!p->overlapl.auxp || p->overlapl.size < overlapsize * sizeof(MYFLT))
+      csound->AuxAlloc(csound, overlapsize*sizeof(MYFLT), &p->overlapl);
+    if (!p->overlapr.auxp || p->overlapr.size < overlapsize * sizeof(MYFLT))
+      csound->AuxAlloc(csound, overlapsize*sizeof(MYFLT), &p->overlapr);
+
+    memset(p->insig.auxp, 0, irlength * sizeof(MYFLT));
+    memset(p->outl.auxp, 0, irlengthpad * sizeof(MYFLT));
+    memset(p->outr.auxp, 0, irlengthpad * sizeof(MYFLT));
+    memset(p->hrtflpad.auxp, 0, irlengthpad * sizeof(MYFLT));
+    memset(p->hrtfrpad.auxp, 0, irlengthpad * sizeof(MYFLT));
+    memset(p->complexinsig.auxp, 0, irlengthpad * sizeof(MYFLT));
+    memset(p->hrtflfloat.auxp, 0, irlength * sizeof(MYFLT));
+    memset(p->hrtfrfloat.auxp, 0, irlength * sizeof(MYFLT));
+    memset(p->outspecl.auxp, 0, irlengthpad * sizeof(MYFLT));
+    memset(p->outspecr.auxp, 0, irlengthpad * sizeof(MYFLT));
+    memset(p->overlapl.auxp, 0, overlapsize * sizeof(MYFLT));
+    memset(p->overlapr.auxp, 0, overlapsize * sizeof(MYFLT));
+
+    /* interpolation values */
+    if (!p->lowl1.auxp || p->lowl1.size < irlength * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlength * sizeof(MYFLT), &p->lowl1);
+    if (!p->lowr1.auxp || p->lowr1.size < irlength * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlength * sizeof(MYFLT), &p->lowr1);
+    if (!p->lowl2.auxp || p->lowl2.size < irlength * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlength * sizeof(MYFLT), &p->lowl2);
+    if (!p->lowr2.auxp || p->lowr2.size < irlength * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlength * sizeof(MYFLT), &p->lowr2);
+    if (!p->highl1.auxp || p->highl1.size < irlength * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlength * sizeof(MYFLT), &p->highl1);
+    if (!p->highr1.auxp || p->highr1.size < irlength * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlength * sizeof(MYFLT), &p->highr1);
+    if (!p->highl2.auxp || p->highl2.size < irlength * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlength * sizeof(MYFLT), &p->highl2);
+    if (!p->highr2.auxp || p->highr2.size < irlength * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlength * sizeof(MYFLT), &p->highr2);
+    if (!p->currentphasel.auxp || p->currentphasel.size < irlength * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlength*sizeof(MYFLT), &p->currentphasel);
+    if (!p->currentphaser.auxp || p->currentphaser.size < irlength * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlength*sizeof(MYFLT), &p->currentphaser);
+
+    memset(p->lowl1.auxp, 0, irlength * sizeof(MYFLT));
+    memset(p->lowr1.auxp, 0, irlength * sizeof(MYFLT));
+    memset(p->lowl2.auxp, 0, irlength * sizeof(MYFLT));
+    memset(p->lowr2.auxp, 0, irlength * sizeof(MYFLT));
+    memset(p->highl1.auxp, 0, irlength * sizeof(MYFLT));
+    memset(p->highl2.auxp, 0, irlength * sizeof(MYFLT));
+    memset(p->highr1.auxp, 0, irlength * sizeof(MYFLT));
+    memset(p->highr2.auxp, 0, irlength * sizeof(MYFLT));
+    memset(p->currentphasel.auxp, 0, irlength * sizeof(MYFLT));
+    memset(p->currentphaser.auxp, 0, irlength * sizeof(MYFLT));
+
+    /* phase truncation buffers and variables */
+    if (!p->oldhrtflpad.auxp || p->oldhrtflpad.size < irlengthpad * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlengthpad*sizeof(MYFLT), &p->oldhrtflpad);
+    if (!p->oldhrtfrpad.auxp || p->oldhrtfrpad.size < irlengthpad * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlengthpad*sizeof(MYFLT), &p->oldhrtfrpad);
+    if (!p->outlold.auxp || p->outlold.size < irlengthpad * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlengthpad*sizeof(MYFLT), &p->outlold);
+    if (!p->outrold.auxp || p->outrold.size < irlengthpad * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlengthpad*sizeof(MYFLT), &p->outrold);
+    if (!p->outspecoldl.auxp || p->outspecoldl.size < irlengthpad * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlengthpad*sizeof(MYFLT), &p->outspecoldl);
+    if (!p->outspecoldr.auxp || p->outspecoldr.size < irlengthpad * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlengthpad*sizeof(MYFLT), &p->outspecoldr);
+    if (!p->overlapoldl.auxp || p->overlapoldl.size < overlapsize * sizeof(MYFLT))
+      csound->AuxAlloc(csound, overlapsize*sizeof(MYFLT), &p->overlapoldl);
+    if (!p->overlapoldr.auxp || p->overlapoldr.size < overlapsize * sizeof(MYFLT))
+      csound->AuxAlloc(csound, overlapsize*sizeof(MYFLT), &p->overlapoldr);
+
+    memset(p->oldhrtflpad.auxp, 0, irlengthpad * sizeof(MYFLT));
+    memset(p->oldhrtfrpad.auxp, 0, irlengthpad * sizeof(MYFLT));
+    memset(p->outlold.auxp, 0, irlengthpad * sizeof(MYFLT));
+    memset(p->outrold.auxp, 0, irlengthpad * sizeof(MYFLT));
+    memset(p->outspecoldl.auxp, 0, irlengthpad * sizeof(MYFLT));
+    memset(p->outspecoldr.auxp, 0, irlengthpad * sizeof(MYFLT));
+    memset(p->overlapoldl.auxp, 0, overlapsize * sizeof(MYFLT));
+    memset(p->overlapoldr.auxp, 0, overlapsize * sizeof(MYFLT));
+
+    /* initialize counters and indices */
+    p->counter = 0;
     p->cross = 0;
     p->l = 0;
     p->initialfade = 0;
 
-    /*need to be a value that is not possible for first check to avoid
-      phase not being read.*/
+    /* need to be a value that is not possible for first check to avoid
+       phase not being read. */
     p->oldelevindex = -1;
     p->oldangleindex = -1;
 
-    /*buffer declaration for min phase calculations*/
-    csound->AuxAlloc(csound, complexIMPLENGTH*sizeof(MYFLT), &p->logmagl);
-    csound->AuxAlloc(csound, complexIMPLENGTH*sizeof(MYFLT), &p->logmagr);
-    csound->AuxAlloc(csound, complexIMPLENGTH*sizeof(MYFLT), &p->xhatwinl);
-    csound->AuxAlloc(csound, complexIMPLENGTH*sizeof(MYFLT), &p->xhatwinr);
-    csound->AuxAlloc(csound, complexIMPLENGTH*sizeof(MYFLT), &p->expxhatwinl);
-    csound->AuxAlloc(csound, complexIMPLENGTH*sizeof(MYFLT), &p->expxhatwinr);
-
-    /*delay buffers*/
-    csound->AuxAlloc(csound, (int)(sr*maxdeltime)*sizeof(MYFLT), &p->delmeml);
-    csound->AuxAlloc(csound, (int)(sr*maxdeltime)*sizeof(MYFLT), &p->delmemr);
-
-    csound->AuxAlloc(csound, IMPLENGTH*sizeof(MYFLT), &p->win);
+    /* buffer declaration for min phase calculations */
+    if (!p->logmagl.auxp || p->logmagl.size < irlength * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlength*sizeof(MYFLT), &p->logmagl);
+    if (!p->logmagr.auxp || p->logmagr.size < irlength * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlength*sizeof(MYFLT), &p->logmagr);
+    if (!p->xhatwinl.auxp || p->xhatwinl.size < irlength * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlength*sizeof(MYFLT), &p->xhatwinl);
+    if (!p->xhatwinr.auxp || p->xhatwinr.size < irlength * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlength*sizeof(MYFLT), &p->xhatwinr);
+    if (!p->expxhatwinl.auxp || p->expxhatwinl.size < irlength * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlength*sizeof(MYFLT), &p->expxhatwinl);
+    if (!p->expxhatwinr.auxp || p->expxhatwinr.size < irlength * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlength*sizeof(MYFLT), &p->expxhatwinr);
+
+    memset(p->logmagl.auxp, 0, irlength * sizeof(MYFLT));
+    memset(p->logmagr.auxp, 0, irlength * sizeof(MYFLT));
+    memset(p->xhatwinl.auxp, 0, irlength * sizeof(MYFLT));
+    memset(p->xhatwinr.auxp, 0, irlength * sizeof(MYFLT));
+    memset(p->expxhatwinl.auxp, 0, irlength * sizeof(MYFLT));
+    memset(p->expxhatwinr.auxp, 0, irlength * sizeof(MYFLT));
+
+    /* delay buffers */
+    if (!p->delmeml.auxp ||
+        p->delmeml.size < (int)(sr * maxdeltime) * sizeof(MYFLT))
+      csound->AuxAlloc(csound, (int)(sr * maxdeltime) * sizeof(MYFLT), &p->delmeml);
+    if (!p->delmemr.auxp ||
+        p->delmemr.size < (int)(sr * maxdeltime) * sizeof(MYFLT))
+      csound->AuxAlloc(csound, (int)(sr * maxdeltime) * sizeof(MYFLT), &p->delmemr);
+
+    memset(p->delmeml.auxp, 0, (int)(sr * maxdeltime) * sizeof(MYFLT));
+    memset(p->delmemr.auxp, 0, (int)(sr * maxdeltime) * sizeof(MYFLT));
+
+    if (!p->win.auxp && p->win.size < irlength * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlength*sizeof(MYFLT), &p->win);
 
     win = (MYFLT *)p->win.auxp;
 
-    /*min phase win defined for implength point impulse!*/
-    win[0]=1;
-    for (i=1;i<(IMPLENGTH/2);i++) win[i]=2;
-    win[(IMPLENGTH/2)]=1;
-    for (i=((IMPLENGTH/2)+1);i<IMPLENGTH;i++) win[i]=0;
+    /* min phase win defined for irlength point impulse! */
+    win[0] = FL(1.0);
+    for(i = 1; i < (irlength / 2); i++)
+      win[i] = FL(2.0);
+    win[(irlength / 2)] = FL(1.0);
+    for(i = ((irlength / 2) + 1); i < irlength; i++)
+      win[i] = FL(0.0);
+
+    p->mdtl = (int)(FL(0.00095) * sr);
+    p->mdtr = (int)(FL(0.00095) * sr);
+    p->delayfloat = FL(0.0);
 
-    p->ptl=0;
-    p->ptr=0;
+    p->ptl = 0;
+    p->ptr = 0;
 
-    p->counts = 0;
+    /* setup values used to check if src has moved, illegal values to
+       start with to ensure first read */
+    p->anglev = -1;
+    p->elevv = -41;
 
     return OK;
 }
@@ -409,11 +477,12 @@ static int hrtfmove_init(CSOUND *csound, hrtfmove *p)
 
 static int hrtfmove_process(CSOUND *csound, hrtfmove *p)
 {
-    MYFLT *in = p->in;                    /*local pointers to p*/
-    MYFLT *outsigl = p->outsigl;
+    /* local pointers to p */
+    MYFLT *in = p->in;
+    MYFLT *outsigl  = p->outsigl;
     MYFLT *outsigr = p->outsigr;
 
-    /*common buffers and variables*/
+    /* common buffers and variables */
     MYFLT *insig = (MYFLT *)p->insig.auxp;
     MYFLT *outl = (MYFLT *)p->outl.auxp;
     MYFLT *outr = (MYFLT *)p->outr.auxp;
@@ -436,23 +505,27 @@ static int hrtfmove_process(CSOUND *csound, hrtfmove *p)
     int counter = p->counter;
     int n;
 
-    float *fpindexl;      /* pointers into HRTF files: floating point data
-                             (even in 64 bit csound)*/
+    /* pointers into HRTF files: floating point data (even in 64 bit csound) */
+    float *fpindexl;
     float *fpindexr;
 
-    int i,j,elevindex, angleindex, switchchannels=0, skip=0;
+    int i,j,elevindex, angleindex, skip = 0;
 
     int minphase = p->minphase;
     int phasetrunc = p->phasetrunc;
 
     MYFLT sr = p->sr;
 
-    int IMPLENGTH = p->IMPLENGTH;
-    int complexIMPLENGTH = p->complexIMPLENGTH;
+    int irlength = p->irlength;
+    int irlengthpad = p->irlengthpad;
     int overlapsize = p->overlapsize;
-    int complexfftbuff = p->complexfftbuff;
 
-    /*interpolation values*/
+    /* local variables, mainly used for simplification */
+    MYFLT elevindexstore;
+    MYFLT angleindexlowstore;
+    MYFLT angleindexhighstore;
+
+    /* interpolation values */
     MYFLT *lowl1 = (MYFLT *)p->lowl1.auxp;
     MYFLT *lowr1 = (MYFLT *)p->lowr1.auxp;
     MYFLT *lowl2 = (MYFLT *)p->lowl2.auxp;
@@ -464,14 +537,13 @@ static int hrtfmove_process(CSOUND *csound, hrtfmove *p)
     MYFLT *currentphasel = (MYFLT *)p->currentphasel.auxp;
     MYFLT *currentphaser = (MYFLT *)p->currentphaser.auxp;
 
-    /*local interpolation values*/
-    MYFLT elevindexlowper,elevindexhighper,angleindex1per,
-      angleindex2per,angleindex3per,angleindex4per;
-    int elevindexlow,elevindexhigh,angleindex1,angleindex2,
-      angleindex3,angleindex4;
+    /* local interpolation values */
+    MYFLT elevindexhighper, angleindex2per, angleindex4per;
+    int elevindexlow, elevindexhigh, angleindex1, angleindex2,
+      angleindex3, angleindex4;
     MYFLT magl,magr,phasel,phaser, magllow, magrlow, maglhigh, magrhigh;
 
-    /*phase truncation buffers and variables*/
+    /* phase truncation buffers and variables */
     MYFLT *oldhrtflpad = (MYFLT *)p->oldhrtflpad.auxp;
     MYFLT *oldhrtfrpad = (MYFLT *)p->oldhrtfrpad.auxp;
     MYFLT *outlold = (MYFLT *)p->outlold.auxp;
@@ -486,14 +558,15 @@ static int hrtfmove_process(CSOUND *csound, hrtfmove *p)
 
     int cross = p ->cross;
     int l = p->l;
-    int initialfade = p ->initialfade;
+    int initialfade = p->initialfade;
 
-    int crossfade = 0;
-    int crossout = 0;
+    int crossfade;
+    int crossout;
 
+    int fade = p->fade;
     int fadebuffer = p->fadebuffer;
 
-    /*minimum phase buffers*/
+    /* minimum phase buffers */
     MYFLT *logmagl = (MYFLT *)p->logmagl.auxp;
     MYFLT *logmagr = (MYFLT *)p->logmagr.auxp;
     MYFLT *xhatwinl = (MYFLT *)p->xhatwinl.auxp;
@@ -501,689 +574,808 @@ static int hrtfmove_process(CSOUND *csound, hrtfmove *p)
     MYFLT *expxhatwinl = (MYFLT *)p->expxhatwinl.auxp;
     MYFLT *expxhatwinr = (MYFLT *)p->expxhatwinr.auxp;
 
-    MYFLT *win = (MYFLT *)p->win.auxp;     /*min phase window*/
+    /* min phase window */
+    MYFLT *win = (MYFLT *)p->win.auxp;
 
-    /*min phase delay variables*/
+    /* min phase delay variables */
     MYFLT *delmeml = (MYFLT *)p->delmeml.auxp;
     MYFLT *delmemr = (MYFLT *)p->delmemr.auxp;
-    MYFLT delaylow1,delaylow2,delayhigh1,delayhigh2,delaylow,delayhigh,delayfloat;
+    MYFLT delaylow1, delaylow2, delayhigh1, delayhigh2, delaylow, delayhigh;
+    MYFLT delayfloat = p->delayfloat;
     int ptl = p->ptl;
     int ptr = p->ptr;
+    int mdtl = p->mdtl;
+    int mdtr = p->mdtr;
+    int posl, posr;
+    MYFLT outvdl, outvdr, vdtl, vdtr, fracl, fracr, rpl, rpr;
 
-    int mdtl=0,mdtr=0;
-    MYFLT outvdl,outvdr,rpl,rpr,vdtl,vdtr,fracl,fracr;
-
-    /*start indices at correct value (start of file)/ zero indices.*/
+    /* start indices at correct value (start of file)/ zero indices. */
     fpindexl = (float *) p->fpbeginl;
     fpindexr = (float *) p->fpbeginr;
 
-    n=csound->ksmps;
-
-    for (j=0;j<n;j++) {
-      insig[counter] = in[j];                   /*ins and outs*/
-
-      outsigl[j]=outl[counter];
-      outsigr[j]=outr[counter];
-
-      counter++;
-
-      p->counts++;
-
-      if (phasetrunc) {
-        if (initialfade<(IMPLENGTH+2))
-          initialfade++;
-      }  /*used to ensure fade does not happen on first run*/
-
-      if (counter == IMPLENGTH) {         /*process a block*/
-        if (elev < -40) elev = -40;            /*within legal MIT range*/
-        if (elev > 90) elev = 90;
-        elevindex = (int)floor((float)((float)(elev-minelev)/elevincrement)+0.5f);
-
-        while (UNLIKELY(angle<FL(0.0))) angle+=360;
-        while (UNLIKELY(angle>FL(360))) angle-=360; /*mod 360*/
-        if (angle>180) {
-          angle=360-angle;
-          switchchannels=1; /*true for later function: data is symmetrical*/
-        }
-
-        /*read using an index system based on number of points
-          measured per elevation at mit*/
-        angleindex =    /*angle/increment+0.5*/
-          (int)floor(angle/(360/(MYFLT)elevationarray[elevindex])+0.5);
-        if (angleindex>=((int)(elevationarray[elevindex]/2)+1))
-          /*last point in current elevation*/
-          angleindex=(int)(elevationarray[elevindex]/2);
-        /* two nearest elev indices*/
-        elevindexlow = (int)((elev-minelev)/elevincrement);
-        if (elevindexlow<13) elevindexhigh = elevindexlow+1;
-        else elevindexhigh = elevindexlow;            /* highest index reached*/
-
-        /* get percentage value for interpolation*/
-        elevindexlowper = (1.0f - (((float)(elev-minelev)/elevincrement)
-                                   -(float)elevindexlow));
-        elevindexhighper = 1.0f - elevindexlowper;
-
-        /* 4 closest angle indices, 2 low and 2 high*/
-        angleindex1 = (int)(angle/(360/(float)elevationarray[elevindexlow]));
-
-        angleindex2 = angleindex1 + 1;
-        if (angleindex2>=((int)(elevationarray[elevindexlow]/2)+1))
-          angleindex2=(int)(elevationarray[elevindexlow]/2);
-
-        angleindex3 = (int)(angle/(360/(float)elevationarray[elevindexhigh]));
-
-        angleindex4 = angleindex3 + 1;
-        if (angleindex4>=((int)(elevationarray[elevindexhigh]/2)+1))
-          angleindex4=(int)(elevationarray[elevindexhigh]/2);
-
-        /* angle percentages for interp*/
-        angleindex1per =
-          1.0f-(float)((angle/(360.0/(float)elevationarray[elevindexlow])-
-                        angleindex1));
-        angleindex2per = 1.0f-angleindex1per;
-        angleindex3per =
-          1.0f - (float)((angle/(360.0/(float)elevationarray[elevindexhigh])-
-                          angleindex3));
-        angleindex4per = 1.0f-angleindex3per;
-
-        if (phasetrunc) {
-          if (angleindex!=oldangleindex || elevindex!=oldelevindex) {
-            /*store last point and turn crossfade on, provided
-              that initialfade value indicates first block
-              processed!*/
-            /*(otherwise,there will be a fade in at the start as
-              old hrtf will be filled with zeros and used).*/
-            if (initialfade>IMPLENGTH) {
-              /*post warning if fades ovelap*/
-              if (UNLIKELY(cross))
-                csound->Warning(csound,
-                                Str("fades are overlapping: "
-                                    "this could lead to noise: reduce "
-                                    "fade size or change trajectory\n\n"));
-              /*reset l, use as index to fade*/
-              l=0;
-              crossfade=1;
-              /*store old data*/
-              for (i=0;i<complexfftbuff;i++) {
-                oldhrtflpad[i] = hrtflpad[i];
-                oldhrtfrpad[i] = hrtfrpad[i];
-              }
-            }
-
-            /*store point for current phase as trajectory comes
-              closer to a new index  */
-            if (elevindex == 0);
-            else for (i=0; i<elevindex; i++)
-                   skip +=((int)(elevationarray[i]/2)+1)*(IMPLENGTH*2);
-
-            if (angleindex == 0);
-            else for (i=0; i<angleindex; i++)
-                   skip += (2*IMPLENGTH);
-
-            if (switchchannels) {
-              for (i=0;i<complexIMPLENGTH;i++){
-                currentphasel[i]=fpindexr[skip+i];
-                currentphaser[i]=fpindexl[skip+i];
-              }
-            }
-            else {
-              for (i=0;i<complexIMPLENGTH;i++) {
-                currentphasel[i]=fpindexl[skip+i];
-                currentphaser[i]=fpindexr[skip+i];
-              }
-            }
-          }
-        }
-
-        /*read 4 nearest points for interpolation*/
-        /*point 1*/
-        skip = 0;
-        if (elevindexlow == 0);
-        else for (i=0; i<elevindexlow; i++)
-               /*skip * 2 as data is in complex mag,phase format*/
-               skip +=((int)(elevationarray[i]/2)+1)*(IMPLENGTH*2);
-
-        if (angleindex1 == 0);
-        else for (i=0; i<angleindex1; i++)
-               skip += (2*IMPLENGTH);
-
-        if (switchchannels) {
-          for (i=0;i<complexIMPLENGTH;i++) {
-            lowl1[i]=fpindexr[skip+i];
-            lowr1[i]=fpindexl[skip+i];
-          }
-        }
-        else {
-          for (i=0;i<complexIMPLENGTH;i++) {
-            lowl1[i]=fpindexl[skip+i];
-            lowr1[i]=fpindexr[skip+i];
-          }
-        }
-
-        /*point 2*/
-        skip = 0;
-        if (elevindexlow == 0);
-        else for (i=0; i<elevindexlow; i++)
-               skip +=((int)(elevationarray[i]/2)+1)*(IMPLENGTH*2);
-
-        if (angleindex2 == 0);
-        else for (i=0; i<angleindex2; i++)
-               skip += (2*IMPLENGTH);
-
-        if (switchchannels) {
-          for (i=0;i<complexIMPLENGTH;i++) {
-            lowl2[i]=fpindexr[skip+i];
-            lowr2[i]=fpindexl[skip+i];
-          }
-        }
-
-        else {
-          for (i=0;i<complexIMPLENGTH;i++) {
-            lowl2[i]=fpindexl[skip+i];
-            lowr2[i]=fpindexr[skip+i];
-          }
-        }
-
-        /*point 3*/
-        skip = 0;
-        if (elevindexhigh == 0);
-        else for (i=0; i<elevindexhigh; i++)
-               skip +=((int)(elevationarray[i]/2)+1)*(IMPLENGTH*2);
-
-        if (angleindex3 == 0);
-        else for (i=0; i<angleindex3; i++)
-               skip += (2*IMPLENGTH);
-
-        if (switchchannels) {
-          for (i=0;i<complexIMPLENGTH;i++) {
-            highl1[i]=fpindexr[skip+i];
-            highr1[i]=fpindexl[skip+i];
-          }
-        }
-
-        else {
-          for (i=0;i<complexIMPLENGTH;i++) {
-            highl1[i]=fpindexl[skip+i];
-            highr1[i]=fpindexr[skip+i];
-          }
-        }
-
-        /*point 4*/
-        skip = 0;
-        if (elevindexhigh == 0);
-        else for (i=0; i<elevindexhigh; i++)
-               skip +=((int)(elevationarray[i]/2)+1)*(IMPLENGTH*2);
-
-        if (angleindex4 == 0);
-        else for (i=0; i<angleindex4; i++)
-               skip += (2*IMPLENGTH);
-
-        if (switchchannels) {
-          for (i=0;i<complexIMPLENGTH;i++) {
-            highl2[i]=fpindexr[skip+i];
-            highr2[i]=fpindexl[skip+i];
-          }
-        }
-
-        else {
-          for (i=0;i<complexIMPLENGTH;i++) {
-            highl2[i]=fpindexl[skip+i];
-            highr2[i]=fpindexr[skip+i];
-          }
-        }
-
-        /* magnitude interpolation*/
-        for (i=0; i < complexIMPLENGTH; i+=2) {
-          /* interpolate HIGH AND LOW MAGS*/
-          magllow = lowl1[i]+(lowl2[i]-lowl1[i])*angleindex2per;
-          maglhigh = highl1[i]+(highl2[i]-highl1[i])*angleindex4per;
-
-          magrlow = lowr1[i]+(lowr2[i]-lowr1[i])*angleindex2per;
-          magrhigh = highr1[i]+(highr2[i]-highr1[i])*angleindex4per;
-
-          /* interpolate high and low results*/
-          magl = magllow+(maglhigh-magllow)*elevindexhighper;
-          magr = magrlow+(magrhigh-magrlow)*elevindexhighper;
+    n = csound->ksmps;
 
-          if (phasetrunc) {       /*use current phase, back to rectangular*/
-            phasel = currentphasel[i+1];
-            phaser = currentphaser[i+1];
+    for(j = 0; j < n; j++)
+      {
+        /* ins and outs */
+        insig[counter] = in[j];
 
-            /* polar to rectangular*/
-            hrtflfloat[i] = magl*COS(phasel);
-            hrtflfloat[i+1] = magl*SIN(phasel);
+        outsigl[j] = outl[counter];
+        outsigr[j] = outr[counter];
 
-            hrtfrfloat[i] = magr*COS(phaser);
-            hrtfrfloat[i+1] = magr*SIN(phaser);
-          }
-
-          if (minphase) {
-            /*store log magnitudes, 0 phases for ifft, do not allow log(0.0)*/
-            logmagl[i]= LOG(magl==FL(0.0)?FL(0.00000001):magl);
-            logmagr[i]= LOG(magr==FL(0.0)?FL(0.00000001):magr);
-
-            logmagl[i+1] = FL(0.0);
-            logmagr[i+1] = FL(0.0);
-          }
-        }
-
-        if (minphase) {
-          /*ifft!...see Oppehneim and Schafer for min phase process...
-            based on real cepstrum method*/
-          csound->InverseComplexFFT(csound, logmagl, IMPLENGTH);
-          csound->InverseComplexFFT(csound, logmagr, IMPLENGTH);
-
-          /*window, note no need to scale on csound iffts...*/
-          for (i=0;i<complexIMPLENGTH;i+=2)            {
-            xhatwinl[i] = (logmagl[i]) * win[i/2];
-            xhatwinr[i] = (logmagr[i]) * win[i/2];
-            xhatwinl[i+1] = FL(0.0);
-            xhatwinr[i+1] = FL(0.0);
-          }
+        counter++;
 
-          /*fft*/
-          csound->ComplexFFT(csound, xhatwinl, IMPLENGTH);
-          csound->ComplexFFT(csound, xhatwinr, IMPLENGTH);
-
-          /*exponential of complex result*/
-          for (i=0;i<256;i+=2) {
-            expxhatwinl[i] = EXP(xhatwinl[i])*COS(xhatwinl[i+1]);
-            expxhatwinl[i+1] = EXP(xhatwinl[i])*SIN(xhatwinl[i+1]);
-            expxhatwinr[i] = EXP(xhatwinr[i])*COS(xhatwinr[i+1]);
-            expxhatwinr[i+1] = EXP(xhatwinr[i])*SIN(xhatwinr[i+1]);
-          }
-
-          /*ifft for output buffers*/
-          csound->InverseComplexFFT(csound, expxhatwinl, IMPLENGTH);
-          csound->InverseComplexFFT(csound, expxhatwinr, IMPLENGTH);
-
-          /*real parts of ifft for output, scale. */
-          for (i= 0; i < complexIMPLENGTH; i+=2) {
-            hrtflpad[i] = (expxhatwinl[i]);
-            hrtfrpad[i] = (expxhatwinr[i]);
-            hrtflpad[i+1] = FL(0.0);
-            hrtfrpad[i+1] = FL(0.0);
-          }
-        }
-
-        if (phasetrunc)        /*use current phase and interped mag directly*/
+        if(phasetrunc)
           {
-            /*ifft*/
-            csound->InverseComplexFFT(csound, hrtflfloat, IMPLENGTH);
-            csound->InverseComplexFFT(csound, hrtfrfloat, IMPLENGTH);
-
-            for (i=0; i<complexIMPLENGTH; i++) {
-              /* scale and pad buffers with zeros to fftbuff*/
-              hrtflpad[i] = hrtflfloat[i];
-              hrtfrpad[i] = hrtfrfloat[i];
-            }
+            /* used to ensure fade does not happen on first run */
+            if(initialfade < (irlength + 2))
+              initialfade++;
           }
 
-        /*zero pad impulse*/
-        for (i=complexIMPLENGTH;i<complexfftbuff;i++)
+        if(counter == irlength)
           {
-            hrtflpad[i]=FL(0.0);
-            hrtfrpad[i]=FL(0.0);
-          }
-
-        /*back to freq domain*/
-        csound->ComplexFFT(csound, hrtflpad, complexIMPLENGTH);
-        csound->ComplexFFT(csound, hrtfrpad, complexIMPLENGTH);
-
-        /* look after overlap add stuff*/
-        for (i = 0; i < overlapsize ; i++) {
-          overlapl[i] = outl[i+IMPLENGTH];
-          overlapr[i] = outr[i+IMPLENGTH];
-
-          if (phasetrunc)            /*look after fade stuff*/
-            {
-              if (crossfade)
-                {
-                  overlapoldl[i] = outl[i+IMPLENGTH];
-                  overlapoldr[i] = outr[i+IMPLENGTH];
-                }
-              /* overlap will be previous fading out signal*/
-              if (cross)
-                {
-                  overlapoldl[i] = outlold[i+IMPLENGTH];
-                  overlapoldr[i] = outrold[i+IMPLENGTH];
-                }
-            }
-        }
-
-        /* insert insig for complex real,im fft, zero pad*/
-        for (i = 0; i <  IMPLENGTH; i++)
-          {
-            complexinsig[2*i] = insig[i];
-            complexinsig[(2*i)+1] = FL(0.0);
-          }
-
-        for (i = complexIMPLENGTH; i <  complexfftbuff; i++)
-          complexinsig[i] = FL(0.0);
-
-        csound->ComplexFFT(csound, complexinsig, complexIMPLENGTH);
-
-        /* complex multiplication*/
-        for (i = 0; i < complexfftbuff; i+=2) {
-          outspecl[i] =
-            complexinsig[i]*hrtflpad[i] - complexinsig[i+1]*hrtflpad[i+1];
-          outspecr[i] =
-            complexinsig[i]*hrtfrpad[i] - complexinsig[i+1]*hrtfrpad[i+1];
-          outspecl[i+1] =
-            complexinsig[i]*hrtflpad[i+1] + complexinsig[i+1]*hrtflpad[i];
-          outspecr[i+1] =
-            complexinsig[i]*hrtfrpad[i+1] + complexinsig[i+1]*hrtfrpad[i];
-        }
-
-        /* convolution is the inverse FFT of above result */
-        csound->InverseComplexFFT(csound, outspecl, complexIMPLENGTH);
-        csound->InverseComplexFFT(csound, outspecr, complexIMPLENGTH);
-
-        if (phasetrunc) {
-          /*real values, scaled (by a little more than usual to ensure
-            no clipping) sr related?*/
-          for (i = 0; i < complexIMPLENGTH; i++)
-            {
-              outl[i] = outspecl[2*i]/(sr/FL(38000.0));
-              outr[i] = outspecr[2*i]/(sr/FL(38000.0));
-            }
-        }
-
-        if (minphase) {
-          /*real values*/
-
-          /*scaling relative to sr not necessary for min phase?...just
-            scaling by a little > 1 to avoid any possible overlap add clips*/
-
-          for (i = 0; i < complexIMPLENGTH; i++)
-            {
-              outl[i] = outspecl[2*i]/FL(1.17);
-              outr[i] = outspecr[2*i]/FL(1.17);
-            }
-        }
-
-        if (phasetrunc) {
-          /* setup for fades*/
-          if (crossfade || cross) {
-            crossout=1;
-
-            for (i = 0; i < complexfftbuff; i+=2) {
-              outspecoldl[i] = complexinsig[i]*oldhrtflpad[i] -
-                complexinsig[i+1]*oldhrtflpad[i+1];
-              outspecoldr[i] = complexinsig[i]*oldhrtfrpad[i] -
-                complexinsig[i+1]*oldhrtfrpad[i+1];
-              outspecoldl[i+1] = complexinsig[i]*oldhrtflpad[i+1] +
-                complexinsig[i+1]*oldhrtflpad[i];
-              outspecoldr[i+1] = complexinsig[i]*oldhrtfrpad[i+1] +
-                complexinsig[i+1]*oldhrtfrpad[i];
-            }
-
-            csound->InverseComplexFFT(csound, outspecoldl, complexIMPLENGTH);
-            csound->InverseComplexFFT(csound, outspecoldr, complexIMPLENGTH);
-
-            /*real values, scaled*/
-            for (i = 0; i < complexIMPLENGTH; i++)
+            /* process a block */
+            crossfade = 0;
+            crossout = 0;
+
+            if(elev > FL(90.0))
+              elev = FL(90.0);
+            if(elev < FL(-40.0))
+              elev = FL(-40.0);
+
+            while(angle < FL(0.0))
+              angle += FL(360.0);
+            while(angle >= FL(360.0))
+              angle -= FL(360.0);
+
+            /* only update if location changes! */
+            if(angle != p->anglev || elev != p->elevv)
               {
-                outlold[i] = outspecoldl[2*i]/(sr/FL(38000.0));
-                outrold[i] = outspecoldr[2*i]/(sr/FL(38000.0));
+                /* two nearest elev indices to avoid recalculating */
+                elevindexstore = (elev - minelev) / elevincrement;
+                elevindexlow = (int)elevindexstore;
+
+                if(elevindexlow < 13)
+                  elevindexhigh = elevindexlow + 1;
+                /* highest index reached */
+                else
+                  elevindexhigh = elevindexlow;
+
+                /* get percentage value for interpolation */
+                elevindexhighper = elevindexstore - elevindexlow;
+
+                /* read using an index system based on number of points
+                   measured per elevation at mit */
+                /* lookup indices, used to check for crossfade */
+                elevindex = (int)(elevindexstore + FL(0.5));
+
+                angleindex = (int)(angle / (FL(360.0) / elevationarray[elevindex])
+                                   + FL(0.5));
+                angleindex = angleindex % elevationarray[elevindex];
+
+                /* avoid recalculation */
+                angleindexlowstore = angle / (FL(360.0) /
+                                              elevationarray[elevindexlow]);
+                angleindexhighstore = angle / (FL(360.) /
+                                               elevationarray[elevindexhigh]);
+
+                /* 4 closest indices, 2 low and 2 high */
+                angleindex1 = (int)angleindexlowstore;
+
+                angleindex2 = angleindex1 + 1;
+                angleindex2 = angleindex2 % elevationarray[elevindexlow];
+
+                angleindex3 = (int)angleindexhighstore;
+
+                angleindex4 = angleindex3 + 1;
+                angleindex4 = angleindex4 % elevationarray[elevindexhigh];
+
+                /* angle percentages for interp */
+                angleindex2per = angleindexlowstore - angleindex1;
+                angleindex4per = angleindexhighstore - angleindex3;
+
+                if(phasetrunc)
+                  {
+                    if(angleindex!=oldangleindex || elevindex!=oldelevindex)
+                      {
+                        /* store last point and turn crossfade on, provided that
+                           initialfade value indicates first block processed! */
+                        /* (otherwise,there will be a fade in at the start). */
+                        if(initialfade>irlength)
+                          {
+                            /* post warning if fades ovelap */
+                            if(cross)
+                              {
+                                csound->Message(csound,
+                                                Str("\nWARNING: fades are "
+                                                    "overlapping: this could lead"
+                                                    " to noise: reduce fade size "
+                                                    "or change trajectory\n\n"));
+                                cross = 0;
+                              }
+                            /* reset l, use as index to fade */
+                            l = 0;
+                            crossfade = 1;
+                            /* store old data */
+                            for(i = 0; i < irlengthpad; i++)
+                              {
+                                oldhrtflpad[i] = hrtflpad[i];
+                                oldhrtfrpad[i] = hrtfrpad[i];
+                              }
+                          }
+
+                        /* store point for current phase as trajectory comes
+                           closer to a new index */
+                        skip = 0;
+                        /* store current phase */
+                        if(angleindex > elevationarray[elevindex] / 2)
+                          {
+                            for(i = 0; i < elevindex; i++)
+                              skip +=((int)(elevationarray[i] / 2) + 1) * irlength;
+                            for (i = 0;
+                                 i < (elevationarray[elevindex] - angleindex);
+                                 i++)
+                              skip += irlength;
+                            for(i = 0; i < irlength; i++)
+                              {
+                                currentphasel[i] = fpindexr[skip + i];
+                                currentphaser[i] = fpindexl[skip + i];
+                              }
+                          }
+                        else
+                          {
+                            for(i = 0; i < elevindex; i++)
+                              skip +=((int)(elevationarray[i] / 2) + 1) * irlength;
+                            for (i = 0; i < angleindex; i++)
+                              skip += irlength;
+                            for(i = 0; i < irlength; i++)
+                              {
+                                currentphasel[i] = fpindexl[skip+i];
+                                currentphaser[i] = fpindexr[skip+i];
+                              }
+                          }
+                      }
+                  }
+                /* for next check */
+                p->oldelevindex = elevindex;
+                p->oldangleindex = angleindex;
+
+                /* read 4 nearest HRTFs */
+                skip = 0;
+                /* switch l and r */
+                if(angleindex1 > elevationarray[elevindexlow] / 2)
+                  {
+                    for(i = 0; i < elevindexlow; i++)
+                      skip +=((int)(elevationarray[i] / 2) + 1) * irlength;
+                    for (i = 0;
+                         i < (elevationarray[elevindexlow] - angleindex1);
+                         i++)
+                      skip += irlength;
+                    for(i = 0; i < irlength; i++)
+                      {
+                        lowl1[i] = fpindexr[skip+i];
+                        lowr1[i] = fpindexl[skip+i];
+                      }
+                  }
+                else
+                  {
+                    for(i = 0; i < elevindexlow; i++)
+                      skip +=((int)(elevationarray[i] / 2) + 1) * irlength;
+                    for (i = 0; i < angleindex1; i++)
+                      skip += irlength;
+                    for(i = 0; i < irlength; i++)
+                      {
+                        lowl1[i] = fpindexl[skip+i];
+                        lowr1[i] = fpindexr[skip+i];
+                      }
+                  }
+                
+                skip = 0;
+                if(angleindex2 > elevationarray[elevindexlow] / 2)
+                  {
+                    for(i = 0; i < elevindexlow; i++)
+                      skip +=((int)(elevationarray[i] / 2) + 1) * irlength;
+                    for (i = 0;
+                         i < (elevationarray[elevindexlow] - angleindex2);
+                         i++)
+                      skip += irlength;
+                    for(i = 0; i < irlength; i++)
+                      {
+                        lowl2[i] = fpindexr[skip+i];
+                        lowr2[i] = fpindexl[skip+i];
+                      }
+                  }
+                else
+                  {
+                    for(i = 0; i < elevindexlow; i++)
+                      skip +=((int)(elevationarray[i] / 2) + 1) * irlength;
+                    for (i = 0; i < angleindex2; i++)
+                      skip += irlength;
+                    for(i = 0; i < irlength; i++)
+                      {
+                        lowl2[i] = fpindexl[skip+i];
+                        lowr2[i] = fpindexr[skip+i];
+                      }
+                  }
+                
+                skip = 0;
+                if(angleindex3 > elevationarray[elevindexhigh] / 2)
+                  {
+                    for(i = 0; i < elevindexhigh; i++)
+                      skip +=((int)(elevationarray[i] / 2) + 1) * irlength;
+                    for (i = 0;
+                         i < (elevationarray[elevindexhigh] - angleindex3);
+                         i++)
+                      skip += irlength;
+                    for(i = 0; i < irlength; i++)
+                      {
+                        highl1[i] = fpindexr[skip+i];
+                        highr1[i] = fpindexl[skip+i];
+                      }
+                  }
+                else
+                  {
+                    for(i = 0; i < elevindexhigh; i++)
+                      skip +=((int)(elevationarray[i] / 2) + 1) * irlength;
+                    for (i = 0; i < angleindex3; i++)
+                      skip += irlength;
+                    for(i = 0; i < irlength; i++)
+                      {
+                        highl1[i] = fpindexl[skip+i];
+                        highr1[i] = fpindexr[skip+i];
+                      }
+                  }
+                
+                skip = 0;
+                if(angleindex4 > elevationarray[elevindexhigh] / 2)
+                  {
+                    for(i = 0; i < elevindexhigh; i++)
+                      skip +=((int)(elevationarray[i] / 2) + 1) * irlength;
+                    for (i = 0;
+                         i < (elevationarray[elevindexhigh] - angleindex4);
+                         i++)
+                      skip += irlength;
+                    for(i = 0; i < irlength; i++)
+                      {
+                        highl2[i] = fpindexr[skip+i];
+                        highr2[i] = fpindexl[skip+i];
+                      }
+                  }
+                else
+                  {
+                    for(i = 0; i < elevindexhigh; i++)
+                      skip +=((int)(elevationarray[i] / 2) + 1) * irlength;
+                    for (i = 0; i < angleindex4; i++)
+                      skip += irlength;
+                    for(i = 0; i < irlength; i++)
+                      {
+                        highl2[i] = fpindexl[skip+i];
+                        highr2[i] = fpindexr[skip+i];
+                      }
+                  }
+
+                /* interpolation */
+                /* 0 Hz and Nyq...absoulute values for mag */
+                magllow = FABS(lowl1[0]) + (FABS(lowl2[0]) - FABS(lowl1[0])) *
+                  angleindex2per;
+                maglhigh = FABS(highl1[0]) + (FABS(highl2[0]) - FABS(highl1[0]))
+                  * angleindex4per;
+                magl = magllow + (maglhigh - magllow) * elevindexhighper;
+                if(minphase)
+                  {
+                    logmagl[0] = LOG((magl == FL(0.0) ? FL(0.00000001) : magl));
+                  }
+                /* this is where real values of 0hz and nyq needed:
+                   if neg real, 180 degree phase */
+                /* if data was complex, mag interp would use fabs()
+                   inherently, phase would be 0/pi */
+                /* if pi, real is negative! */
+                else
+                  {
+                    if(currentphasel[0] < FL(0.0))
+                      hrtflfloat[0] = -magl;
+                    else
+                      hrtflfloat[0] = magl;
+                  }
+
+                magllow = FABS(lowl1[1]) + (FABS(lowl2[1]) - FABS(lowl1[1])) *
+                  angleindex2per;
+                maglhigh = FABS(highl1[1]) + (FABS(highl2[1]) - FABS(highl1[1])) *
+                  angleindex4per;
+                magl = magllow + (maglhigh-magllow) * elevindexhighper;
+                if(minphase)
+                  {
+                    logmagl[1] = LOG(magl == FL(0.0) ? FL(0.00000001) : magl);
+                  }
+                else
+                  
+                  {
+                    if(currentphasel[1] < FL(0.0))
+                      hrtflfloat[1] = -magl;
+                    else
+                      hrtflfloat[1] = magl;
+                  }
+
+                magrlow = FABS(lowr1[0]) + (FABS(lowr2[0]) - FABS(lowr1[0])) *
+                  angleindex2per;
+                magrhigh = FABS(highr1[0]) + (FABS(highr2[0]) - FABS(highr1[0])) *
+                  angleindex4per;
+                magr = magrlow + (magrhigh - magrlow) * elevindexhighper;
+                if(minphase)
+                  {
+                    logmagr[0] = LOG(magr == FL(0.0) ? FL(0.00000001) : magr);
+                  }
+                else
+                  {
+                    if(currentphaser[0] < FL(0.0))
+                      hrtfrfloat[0] = -magr;
+                    else
+                      hrtfrfloat[0] = magr;
+                  }
+
+                magrlow = FABS(lowr1[1]) + (FABS(lowr2[1]) - FABS(lowr1[1]))  *
+                  angleindex2per;
+                magrhigh = FABS(highr1[1]) + (FABS(highr2[1]) - FABS(highr1[1])) *
+                  angleindex4per;
+                magr = magrlow + (magrhigh - magrlow) * elevindexhighper;
+                if(minphase)
+                  {
+                    logmagr[1] = LOG(magr == FL(0.0) ? FL(0.00000001) : magr);
+                  }
+                else
+                  {
+                    if(currentphaser[1] < FL(0.0))
+                      hrtfrfloat[1] = -magr;
+                    else
+                      hrtfrfloat[1] = magr;
+                  }
+
+                /* remaining values */
+                for(i = 2; i < irlength; i += 2)
+                  {
+                    /* interpolate high and low mags */
+                    magllow = lowl1[i] + (lowl2[i] - lowl1[i]) * angleindex2per;
+                    maglhigh = highl1[i] + (highl2[i] - highl1[i]) * angleindex4per;
+
+                    magrlow = lowr1[i] + (lowr2[i] - lowr1[i]) * angleindex2per;
+                    magrhigh = highr1[i] + (highr2[i] - highr1[i]) * angleindex4per;
+
+                    /* interpolate high and low results */
+                    magl = magllow + (maglhigh - magllow) * elevindexhighper;
+                    magr = magrlow + (magrhigh - magrlow) * elevindexhighper;
+
+                    if(phasetrunc)
+                      {
+                        /* use current phase, back to rectangular */
+                        phasel = currentphasel[i + 1];
+                        phaser = currentphaser[i + 1];
+
+                        /* polar to rectangular */
+                        hrtflfloat[i] = magl * COS(phasel);
+                        hrtflfloat[i+1] = magl * SIN(phasel);
+
+                        hrtfrfloat[i] = magr * COS(phaser);
+                        hrtfrfloat[i+1] = magr * SIN(phaser);
+                      }
+
+                    if(minphase)
+                      {
+                        /* store log magnitudes, 0 phases for ifft, do not
+                           allow log(0.0) */
+                        logmagl[i] = LOG(magl == FL(0.0) ? FL(0.00000001) : magl);
+                        logmagr[i] = LOG(magr == FL(0.0) ? FL(0.00000001) : magr);
+
+                        logmagl[i + 1] = FL(0.0);
+                        logmagr[i + 1] = FL(0.0);
+                      }
+                  }
+
+                if(minphase)
+                  {
+                    /* ifft!...see Oppehneim and Schafer for min phase
+                       process...based on real cepstrum method */
+                    csound->InverseRealFFT(csound, logmagl, irlength);
+                    csound->InverseRealFFT(csound, logmagr, irlength);
+
+                    /* window, note no need to scale on csound iffts... */
+                    for(i = 0; i < irlength; i++)
+                      {
+                        xhatwinl[i] = logmagl[i] * win[i];
+                        xhatwinr[i] = logmagr[i] * win[i];
+                      }
+
+                    /* fft */
+                    csound->RealFFT(csound, xhatwinl, irlength);
+                    csound->RealFFT(csound, xhatwinr, irlength);
+
+                    /* exponential of result */
+                    /* 0 hz and nyq purely real... */
+                    expxhatwinl[0] = EXP(xhatwinl[0]);
+                    expxhatwinl[1] = EXP(xhatwinl[1]);
+                    expxhatwinr[0] = EXP(xhatwinr[0]);
+                    expxhatwinr[1] = EXP(xhatwinr[1]);
+
+                    /* exponential of real, cos/sin of imag */
+                    for(i = 2; i < irlength; i += 2)
+                      {
+                        expxhatwinl[i] = EXP(xhatwinl[i]) * COS(xhatwinl[i + 1]);
+                        expxhatwinl[i+1] = EXP(xhatwinl[i]) * SIN(xhatwinl[i + 1]);
+                        expxhatwinr[i] = EXP(xhatwinr[i]) * COS(xhatwinr[i + 1]);
+                        expxhatwinr[i+1] = EXP(xhatwinr[i]) * SIN(xhatwinr[i + 1]);
+                      }
+
+                    /* ifft for output buffers */
+                    csound->InverseRealFFT(csound, expxhatwinl, irlength);
+                    csound->InverseRealFFT(csound, expxhatwinr, irlength);
+
+                    /* output */
+                    for(i= 0; i < irlength; i++)
+                      {
+                        hrtflpad[i] = expxhatwinl[i];
+                        hrtfrpad[i] = expxhatwinr[i];
+                      }
+                  }
+
+                /* use current phase and interped mag directly */
+                if(phasetrunc)
+                  {
+                    /* ifft */
+                    csound->InverseRealFFT(csound, hrtflfloat, irlength);
+                    csound->InverseRealFFT(csound, hrtfrfloat, irlength);
+
+                    for (i = 0; i < irlength; i++)
+                      {
+                        /* scale and pad buffers with zeros to fftbuff */
+                        hrtflpad[i] = hrtflfloat[i];
+                        hrtfrpad[i] = hrtfrfloat[i];
+                      }
+                  }
+
+                /* zero pad impulse */
+                for(i = irlength; i < irlengthpad; i++)
+                  {
+                    hrtflpad[i] = FL(0.0);
+                    hrtfrpad[i] = FL(0.0);
+                  }
+                
+                /* back to freq domain */
+                csound->RealFFT(csound, hrtflpad, irlengthpad);
+                csound->RealFFT(csound, hrtfrpad, irlengthpad);
+
+                if(minphase)
+                  {
+                    /* read delay data: 4 nearest points, as above */
+                    /* point 1 */
+                    skip = 0;
+                    if(angleindex1 > elevationarray[elevindexlow] / 2)
+                      {
+                        for (i = 0; i < elevindexlow; i++)
+                          skip += ((int)(elevationarray[i] / 2) + 1);
+                        for(i = 0;
+                            i < (elevationarray[elevindexlow] - angleindex1);
+                            i++)
+                          skip++;
+                        delaylow1 = minphasedels[skip];
+                      }
+                    else
+                      {
+                        for (i = 0; i < elevindexlow; i++)
+                          skip += ((int)(elevationarray[i] / 2) + 1);
+                        for(i = 0; i < angleindex1; i++)
+                          skip++;
+                        delaylow1 = minphasedels[skip];
+                      }
+                    
+                    /* point 2 */
+                    skip = 0;
+                    if(angleindex2 > elevationarray[elevindexlow] / 2)
+                      {
+                        for (i = 0; i < elevindexlow; i++)
+                          skip += ((int)(elevationarray[i] / 2) + 1);
+                        for(i = 0;
+                            i < (elevationarray[elevindexlow] - angleindex2);
+                            i++)
+                          skip++;
+                        delaylow2 = minphasedels[skip];
+                      }
+                    else
+                      {
+                        for (i = 0; i < elevindexlow; i++)
+                          skip += ((int)(elevationarray[i] / 2) + 1);
+                        for (i = 0; i < angleindex2; i++)
+                          skip++;
+                        delaylow2 = minphasedels[skip];
+                      }
+                    
+                    /* point 3 */
+                    skip = 0;
+                    if(angleindex3 > elevationarray[elevindexhigh] / 2)
+                      {
+                        for (i = 0; i < elevindexhigh; i++)
+                          skip += ((int)(elevationarray[i] / 2) + 1);
+                        for(i = 0;
+                            i < (elevationarray[elevindexhigh] - angleindex3);
+                            i++)
+                          skip++;
+                        delayhigh1  =minphasedels[skip];
+                      }
+                    else
+                      {
+                        for (i = 0; i < elevindexhigh; i++)
+                          skip += ((int)(elevationarray[i] / 2) + 1);
+                        for (i = 0; i < angleindex3; i++)
+                          skip++;
+                        delayhigh1 = minphasedels[skip];
+                      }
+                    
+                    /* point 4 */
+                    skip = 0;
+                    if(angleindex4 > elevationarray[elevindexhigh] / 2)
+                      {
+                        for (i = 0; i < elevindexhigh; i++)
+                          skip += ((int)(elevationarray[i] / 2) + 1);
+                        for(i = 0;
+                            i < (elevationarray[elevindexhigh] - angleindex4);
+                            i++)
+                          skip++;
+                        delayhigh2 = minphasedels[skip];
+                      }
+                    else
+                      {
+                        for (i = 0; i < elevindexhigh; i++)
+                          skip += ((int)(elevationarray[i] / 2) + 1);
+                        for (i = 0; i < angleindex4; i++)
+                          skip++;
+                        delayhigh2 = minphasedels[skip];
+                      }
+
+                    /* delay interp */
+                    delaylow = delaylow1 + ((delaylow2 - delaylow1) *
+                                            angleindex2per);
+                    delayhigh = delayhigh1 + ((delayhigh2 - delayhigh1) *
+                                              angleindex4per);
+                    delayfloat = delaylow + ((delayhigh - delaylow) *
+                                             elevindexhighper);
+                    
+                    p->delayfloat = delayfloat;
+                  }
+                /* end of angle/elev change process */
+                p->elevv = elev;
+                p->anglev = angle;
               }
 
-            cross++;
-            /*number of processing buffers in a fade*/
-            cross=cross%(int)(fadebuffer/IMPLENGTH);
-          }
-
-          if (crossout) {            /*do fade       */
-            for (i=0;i<IMPLENGTH;i++) {
-              outl[i] = ((outlold[i] + (i<overlapsize ? overlapoldl[i] : 0)) *
-                         (FL(1.0) - FL(l)/fadebuffer)) +
-                ((outl[i] + (i < overlapsize ? overlapl[i] : 0)) *
-                 FL(l)/fadebuffer);
-              outr[i] = ((outrold[i] + (i<overlapsize ? overlapoldr[i] : 0)) *
-                         (FL(1.0) - FL(l)/fadebuffer)) +
-                ((outr[i] + (i < overlapsize ? overlapr[i] : 0)) *
-                 FL(l)/fadebuffer);
-              l++;
-            }
-          }
-          else
-            for (i=0;i<IMPLENGTH;i++)
+            /* look after overlap add */
+            for(i = 0; i < overlapsize ; i++)
               {
-                outl[i] = outl[i] + (i < overlapsize ? overlapl[i] : FL(0.0));
-                outr[i] = outr[i] + (i < overlapsize ? overlapr[i] : FL(0.0));
+                overlapl[i] = outl[i + irlength];
+                overlapr[i] = outr[i + irlength];
+                /* look after fade */
+                if(phasetrunc)
+                  {
+                    if(crossfade)
+                      {
+                        overlapoldl[i] = outl[i + irlength];
+                        overlapoldr[i] = outr[i + irlength];
+                      }
+                    /* overlap will be previous fading out signal */
+                    if(cross)
+                      {
+                        overlapoldl[i] = outlold[i + irlength];
+                        overlapoldr[i] = outrold[i + irlength];
+                      }
+                  }
               }
 
-          /*use to check for crossfade next time!*/
-          p->oldelevindex = elevindex;
-          p->oldangleindex = angleindex;
-        }
-
-        if (minphase) {        /*use output direcly and add delay in time domain*/
-          for (i=0;i<IMPLENGTH;i++)
-            {
-              outl[i] = outl[i] + (i < overlapsize ? overlapl[i] : 0);
-              outr[i] = outr[i] + (i < overlapsize ? overlapr[i] : 0);
-            }
-
-          /*read delay data: 4 nearest points*/
-          /*point 1*/
-          skip = 0;
-          if (elevindexlow == 0);
-          else {
-            for (i=0; i<elevindexlow; i++)
-              skip +=((int)(elevationarray[i]/2)+1);
-          }
-
-          if (angleindex1 == 0);
-          else {
-            for (i=0; i<angleindex1; i++)
-              skip++;
-          }
-
-          delaylow1=minphasedels[skip];
-
-          /*point 2*/
-          skip = 0;
-          if (elevindexlow == 0);
-          else {
-            for (i=0; i<elevindexlow; i++)
-              skip +=((int)(elevationarray[i]/2)+1);
-          }
-
-          if (angleindex2 == 0);
-          else {
-            for (i=0; i<angleindex2; i++)
-              skip++;
-          }
-
-          delaylow2=minphasedels[skip];
-
-          /*point 3*/
-          skip = 0;
-          if (elevindexhigh == 0);
-          else {
-            for (i=0; i<elevindexhigh; i++)
-              skip +=((int)(elevationarray[i]/2)+1);
-          }
-
-          if (angleindex3 == 0);
-          else {
-            for (i=0; i<angleindex3; i++)
-              skip++;
-          }
-
-          delayhigh1=minphasedels[skip];
-
-          /*point 4*/
-          skip = 0;
-          if (elevindexhigh == 0);
-          else {
-            for (i=0; i<elevindexhigh; i++)
-              skip +=((int)(elevationarray[i]/2)+1);
-          }
+            /* insert insig */
+            for (i = 0; i < irlength; i++)
+              complexinsig[i] = insig[i];
 
-          if (angleindex4 == 0);
-          else {
-            for (i=0; i<angleindex4; i++)
-              skip++;
-          }
+            for (i = irlength; i < irlengthpad; i++)
+              complexinsig[i] = FL(0.0);
 
-          delayhigh2=minphasedels[skip];
-
-          /*delay interp*/
-          delaylow = delaylow1 +
-            ((delaylow2 - delaylow1)*angleindex2per);
-          delayhigh = delayhigh1 +
-            ((delayhigh2 - delayhigh1)*angleindex4per);
-          delayfloat = delaylow +
-            ((delayhigh - delaylow)*elevindexhighper);
-
-          /*standard variable delay function for each ear, according
-            to interpolated delay value*/
-          if (switchchannels) {
-            vdtr = (delayfloat + 0.0001f)*sr;
-            mdtr = (int)(0.00095f*sr);
-            if (vdtr > mdtr) vdtr = (float)mdtr;
-            for (i=0;i<IMPLENGTH;i++) {
-              rpr = ptr - vdtr;
-              if (rpr < 0) rpr += mdtr;
-              fracr = rpr - (int) rpr;
-              if (rpr  < mdtr -1)
-                outvdr =  delmemr[(int)rpr] +
-                  fracr*(delmemr[(int)rpr+1] - delmemr[(int)rpr]);
-              else outvdr = delmemr[mdtr-1] +
-                     fracr*(delmemr[0] - delmemr[mdtr-1]);
-              delmemr[ptr] = outr[i];
-              outr[i] = outvdr;
-              ptr = ptr + 1;
-              if (ptr >=mdtr) ptr = 0;
-            }
-
-            vdtl = (float)(FL(0.0001)*sr);
-            mdtl = (int)(FL(0.00095)*sr);
-            if (vdtl > mdtl) vdtl = (float)mdtl;
-            for (i=0;i<IMPLENGTH;i++) {
-              rpl = ptl - vdtl;
-              if (rpl < 0) rpl += mdtl;
-              fracl = rpl - (int) rpl;
-              if (rpl  < mdtl -1)
-                outvdl =  delmeml[(int)rpl] +
-                  fracl*(delmeml[(int)rpl+1] - delmeml[(int)rpl]);
-              else outvdl = delmeml[mdtl-1] +
-                     fracl*(delmeml[0] - delmeml[mdtl-1]);
-              delmeml[ptl] = outl[i];
-              outl[i] = outvdl;
-              ptl = ptl + 1;
-              if (ptl >=mdtl) ptl = 0;
-            }
-          }
-          else {
-            vdtl = (delayfloat + 0.0001f)*sr;
-            mdtl = (int)(.00095f*sr);
-            if (vdtl > mdtl) vdtl = (float)mdtl;
-            for (i=0;i<IMPLENGTH;i++) {
-              rpl = ptl - vdtl;
-              if (rpl < 0) rpl += mdtl;
-              fracl = rpl - (int) rpl;
-              if (rpl  < mdtl -1)
-                outvdl =  delmeml[(int)rpl] +
-                  fracl*(delmeml[(int)rpl+1] - delmeml[(int)rpl]);
-              else outvdl = delmeml[mdtl-1] +
-                     fracl*(delmeml[0] - delmeml[mdtl-1]);
-              delmeml[ptl] = outl[i];
-              outl[i] = outvdl;
-              ptl = ptl + 1;
-              if (ptl >=mdtl) ptl = 0;
-            }
-
-            vdtr = (float)(FL(0.0001)*sr);
-            mdtr = (int)(FL(0.00095)*sr);
-            if (vdtr > mdtr) vdtr = (float)mdtr;
-            for (i=0;i<IMPLENGTH;i++) {
-              rpr = ptr - vdtr;
-              if (rpr < 0) rpr += mdtr;
-              fracr = rpr - (int) rpr;
-              if (rpr  < mdtr -1)
-                outvdr =  delmemr[(int)rpr] +
-                  fracr*(delmemr[(int)rpr+1] - delmemr[(int)rpr]);
-              else outvdr = delmemr[mdtr-1] +
-                     fracr*(delmemr[0] - delmemr[mdtr-1]);
-              delmemr[ptr] = outr[i];
-              outr[i] = outvdr;
-              ptr = ptr + 1;
-              if (ptr >=mdtr) ptr = 0;
-            }
-          }
+            csound->RealFFT(csound, complexinsig, irlengthpad);
 
-          p->ptl = ptl;
-          p->ptr = ptr;
+            /* complex mult function... */
+            csound->RealFFTMult(csound, outspecl, hrtflpad, complexinsig,
+                                irlengthpad, FL(1.0));
+            csound->RealFFTMult(csound, outspecr, hrtfrpad, complexinsig,
+                                irlengthpad, FL(1.0));
+            
+            /* convolution is the inverse FFT of above result */
+            csound->InverseRealFFT(csound, outspecl, irlengthpad);
+            csound->InverseRealFFT(csound, outspecr, irlengthpad);
 
-        }
-        /*reset counter*/
-        counter=0;
-        if (phasetrunc) {
-          /*update*/
-          p->cross = cross;
-          p->l = l;
-        }
+            /* real values, scaled (by a little more than usual to ensure
+               no clipping) sr related */
+            for(i = 0; i < irlengthpad; i++)
+              {
+                outl[i] = outspecl[i] / (sr / FL(38000.0));
+                outr[i] = outspecr[i] / (sr / FL(38000.0));
+              }
 
-      }       /* end of IMPLENGTH == counter*/
+            if(phasetrunc)
+              {
+                /* setup for fades */
+                if(crossfade || cross)
+                  {
+                    crossout = 1;
+
+                    csound->RealFFTMult(csound, outspecoldl, oldhrtflpad,
+                                        complexinsig, irlengthpad, FL(1.0));
+                    csound->RealFFTMult(csound, outspecoldr, oldhrtfrpad,
+                                        complexinsig, irlengthpad, FL(1.0));
+
+                    csound->InverseRealFFT(csound, outspecoldl, irlengthpad);
+                    csound->InverseRealFFT(csound, outspecoldr, irlengthpad);
+
+                    /* scaled */
+                    for(i = 0; i < irlengthpad; i++)
+                      {
+                        outlold[i] = outspecoldl[i] / (sr / FL(38000.0));
+                        outrold[i] = outspecoldr[i] / (sr / FL(38000.0));
+                      }
+                    
+                    cross++;
+                    /* number of processing buffers in a fade */
+                    cross = cross % fade;
+                  }
+
+                if(crossout)
+                  {
+                    /* do fade */
+                    for(i = 0; i < irlength; i++)
+                      {
+                        outl[i] = ((outlold[i] +
+                                    (i<overlapsize ? overlapoldl[i] : 0)) *
+                                   (FL(1.0) - l / fadebuffer)) +
+                          ((outl[i] + (i < overlapsize ? overlapl[i] : 0)) *
+                           FL(l)/fadebuffer);
+                        outr[i] = ((outrold[i] +
+                                    (i<overlapsize ? overlapoldr[i] : 0)) *
+                                   (FL(1.0) - l / fadebuffer)) +
+                          ((outr[i] + (i < overlapsize ? overlapr[i] : 0)) *
+                           FL(l)/fadebuffer);
+                        l++;
+                      }
+                  }
+                else
+                  for(i = 0; i < irlength; i++) {
+                    outl[i] = outl[i] + (i < overlapsize ? overlapl[i] : FL(0.0));
+                    outr[i] = outr[i] + (i < overlapsize ? overlapr[i] : FL(0.0));
+                  }
+              }
 
-    }   /* end of ksmps audio loop */
+            if(minphase)
+              {
+                /* use output direcly and add delay in time domain */
+                for(i = 0; i < irlength; i++)
+                  {
+                    outl[i] = outl[i] + (i < overlapsize ? overlapl[i] : FL(0.0));
+                    outr[i] = outr[i] + (i < overlapsize ? overlapr[i] : FL(0.0));
+                  }
+
+                if(angle > FL(180.0))
+                  {
+                    vdtr =  delayfloat * sr;
+                    vdtl = FL(0.0);
+                  }
+                else
+                  {
+                    vdtr = FL(0.0);
+                    vdtl = delayfloat * sr;
+                  }
+
+                /* delay right */
+                if(vdtr > mdtr)
+                  vdtr = FL(mdtr);
+                for(i = 0; i < irlength; i++)
+                  {
+                    rpr = ptr - vdtr;
+                    rpr = (rpr >= 0 ? (rpr < mdtr ? rpr : rpr - mdtr) : rpr + mdtr);
+                    posr = (int) rpr;
+                    fracr = rpr - posr;
+                    delmemr[ptr] = outr[i];
+                    outvdr =  delmemr[posr] + fracr *
+                      (delmemr[(posr + 1 < mdtr ? posr + 1 : 0)] - delmemr[posr]);
+                    outr[i] = outvdr;
+                    ptr = (ptr != mdtr - 1 ? ptr + 1 : 0);
+                  }
+
+                /* delay left */
+                if(vdtl > mdtl)
+                  vdtl = FL(mdtl);
+                for(i = 0; i < irlength; i++)
+                  {
+                    rpl = ptl - vdtl;
+                    rpl = (rpl >= 0 ? (rpl < mdtl ? rpl : rpl - mdtl) : rpl + mdtl);
+                    posl = (int) rpl;
+                    fracl = rpl - (int) posl;
+                    delmeml[ptl] = outl[i];
+                    outvdl =  delmeml[posl] + fracl *
+                      (delmeml[(posl + 1 < mdtl ? posl + 1 : 0)] - delmeml[posl]);
+                    outl[i] = outvdl;
+                    ptl = (ptl != mdtl - 1 ? ptl + 1 : 0);
+                  }
+                
+                p->ptl = ptl;
+                p->ptr = ptr;
+              }
 
-        /*update*/
+            /* reset counter */
+            counter = 0;
+            if(phasetrunc)
+              {
+                /* update */
+                p->cross = cross;
+                p->l = l;
+              }
+            
+          }       /* end of irlength == counter */
+        
+      }   /* end of ksmps audio loop */
+    
+    /* update */
     p->counter = counter;
-    if (phasetrunc)p->initialfade = initialfade;
+    if(phasetrunc)
+      p->initialfade = initialfade;
 
     return OK;
 }
 
+/* Csound hrtf magnitude interpolation, woodworth phase,
+   static source: January 10 */
+/* overlap add convolution */
 
+/* aleft, aright hrtfstat ain, iang, iel, ifilel, ifiler [,iradius = 8.8,
+   isr = 44100]...options of 48 and 96k sr */
 
-/*Csound hrtf magnitude interpolation, woodworth phase, static source: January 08*/
-/*overlap add convolution*/
-
-/*aleft, aright hrtfstat ain, iang, iel, ifilel, ifiler [,iradius = 9.0,
-                         isr = 44100]...options of 48 and 96k sr*/
-
-/*definitions above*/
-typedef struct {
-  OPDS  h;
-  MYFLT *outsigl, *outsigr;
-  MYFLT *in, *iangle, *ielev, *ifilel,
-    *ifiler, *oradius, *osr;   /* outputs and inputs*/
-
-  int IMPLENGTH, complexIMPLENGTH,
-    overlapsize, complexfftbuff;        /*see definitions in INIT*/
-  MYFLT sroverN;
-
-  int counter;
-  MYFLT sr;
-
-  AUXCH hrtflpad,hrtfrpad;              /*hrtf data padded*/
-  AUXCH insig, outl, outr;              /*in and output buffers*/
-
-  /*memory local to perform method*/
-  AUXCH complexinsig;                   /*insig fft*/
-  AUXCH hrtflfloat, hrtfrfloat;         /*hrtf buffers (rectangular complex form)*/
-  AUXCH outspecl, outspecr;             /*spectral data*/
-
-  AUXCH overlapl, overlapr;             /*overlap data*/
-
-  AUXCH lowl1,lowr1,lowl2,lowr2,
-    highl1,highr1,highl2,highr2;        /*interpolation buffers*/
+/* see definitions above */
 
-  AUXCH leftshiftbuffer,rightshiftbuffer;  /*buffers for impulse shift*/
-
-} hrtfstat;
+typedef struct
+{
+        OPDS  h;
+        /* outputs and inputs */
+        MYFLT *outsigl, *outsigr;
+        MYFLT *in, *iangle, *ielev, *ifilel, *ifiler, *oradius, *osr;
+
+        /*see definitions in INIT*/
+        int irlength, irlengthpad, overlapsize;
+        MYFLT sroverN;
+
+        int counter;
+        MYFLT sr;
+
+        /* hrtf data padded */
+        AUXCH hrtflpad,hrtfrpad;
+        /* in and output buffers */
+        AUXCH insig, outl, outr;
+
+        /* memory local to perform method */
+        /* insig fft */
+        AUXCH complexinsig;
+        /* hrtf buffers (rectangular complex form) */
+        AUXCH hrtflfloat, hrtfrfloat;
+        /* spectral data */
+        AUXCH outspecl, outspecr;
+
+        /* overlap data */
+        AUXCH overlapl, overlapr;
+
+        /* interpolation buffers */
+        AUXCH lowl1, lowr1, lowl2, lowr2, highl1, highr1, highl2, highr2;
+
+        /* buffers for impulse shift */
+        AUXCH leftshiftbuffer, rightshiftbuffer;
+}
+hrtfstat;
 
 static int hrtfstat_init(CSOUND *csound, hrtfstat *p)
 {
-    /*left and right data files: spectral mag, phase format.*/
-    MEMFIL *fpl=NULL,*fpr=NULL;
-    char filel[MAXNAME],filer[MAXNAME];
+    /* left and right data files: spectral mag, phase format. */
+    MEMFIL *fpl = NULL, *fpr = NULL;
+    char filel[MAXNAME], filer[MAXNAME];
 
-    /*interpolation values*/
+    /* interpolation values */
     MYFLT *lowl1;
     MYFLT *lowr1;
     MYFLT *lowl2;
@@ -1204,153 +1396,165 @@ static int hrtfstat_init(CSOUND *csound, hrtfstat *p)
     MYFLT r = *p->oradius;
     MYFLT sr = *p->osr;
 
-    float *fpindexl=NULL;         /* pointers into HRTF files*/
+        /* pointers into HRTF files */
+    float *fpindexl=NULL;
     float *fpindexr=NULL;
 
-    int IMPLENGTH = 0;                /*time domain impulse length */
-    int complexIMPLENGTH = 0;         /*freq domain impulse length*/
-    int overlapsize = 0;              /*overlap add convolution*/
-    int complexfftbuff = 0;           /*complex fft used(min phase needs it)*/
+    /* time domain impulse length, padded, overlap add */
+    int irlength=0, irlengthpad=0, overlapsize=0;
 
-    int i,elevindex, angleindex, switchchannels=0, skip=0;
+    int i, skip = 0;
 
-    /*local interpolation values*/
-    MYFLT elevindexlowper,elevindexhighper,angleindex1per,
-      angleindex2per,angleindex3per,angleindex4per;
-    int elevindexlow,elevindexhigh,angleindex1,angleindex2,angleindex3,angleindex4;
-    MYFLT magl,magr,phasel,phaser, magllow, magrlow, maglhigh, magrhigh;
+    /* local interpolation values */
+    MYFLT elevindexhighper, angleindex2per, angleindex4per;
+    int elevindexlow, elevindexhigh, angleindex1, angleindex2,
+      angleindex3, angleindex4;
+    MYFLT magl, magr, phasel, phaser, magllow, magrlow, maglhigh, magrhigh;
+
+    /* local variables, mainly used for simplification */
+    MYFLT elevindexstore;
+    MYFLT angleindexlowstore;
+    MYFLT angleindexhighstore;
 
-    /*woodworth values*/
-    float radianangle,radianelev,itd,freq;
+    /* woodworth values */
+    MYFLT radianangle, radianelev, itd=0, itdww, freq;
 
-    /*shift stuff*/
+    /* shift */
     int shift;
     MYFLT *leftshiftbuffer;
     MYFLT *rightshiftbuffer;
 
-    /*woodworth: change for different sr*/
-
-    if (sr!=FL(44100.0)&&sr!=FL(48000.0)&&sr!=FL(96000.0))
-      sr=FL(44100.0);
+    /* sr */
+    if(sr != FL(44100.0) && sr != FL(48000.0) && sr != FL(96000.0))
+      sr = FL(44100.0);
     p->sr = sr;
 
     if (UNLIKELY(csound->esr != sr))
-      csound->Warning(csound,
-                      Str("Orchestra sampling rate is not "
-                          "compatible with HRTF data files\nShould be %.0f,"
-                          " see Csound help for object\n\n"), sr);
-
-    strcpy(filel, (char*) p->ifilel);             /*copy in string name...*/
-    strcpy(filer, (char*) p->ifiler);
-
-    if (sr == FL(44100.0)) {
-      IMPLENGTH = 128;
-      complexIMPLENGTH = 256;
-      overlapsize = (IMPLENGTH-1);
-      complexfftbuff = (complexIMPLENGTH*2);
-
-      if (UNLIKELY((fpl = csound->ldmemfile2withCB(csound, filel,
-                                                   CSFTYPE_FLOATS_BINARY,
-                                                   swap4bytes)) == NULL)) {
-        return
-          csound->InitError(csound,
-                            Str("\n\n\ncannot load left data file, exiting\n\n"));
+      csound->Message(csound,
+                      Str("\n\nWARNING!!:\nOrchestra SR not compatible with "
+                          "HRTF processing SR of: %.0f\n\n"), sr);
+
+    /* setup as per sr */
+    if(sr == 44100 || sr == 48000)
+      {
+        irlength = 128;
+        irlengthpad = 256;
+        overlapsize = (irlength - 1);
       }
-
-      if (UNLIKELY((fpr = csound->ldmemfile2withCB(csound, filer,
-                                                   CSFTYPE_FLOATS_BINARY,
-                                                   swap4bytes)) == NULL)) {
-        return
-          csound->InitError(csound,
-                            Str("\n\n\ncannot load right data file, exiting\n\n"));
+    else if(sr == 96000)
+      {
+        irlength = 256;
+        irlengthpad = 512;
+        overlapsize = (irlength - 1);
       }
-    }
-
-    else if (sr == FL(48000.0)) {
-      IMPLENGTH = 128;
-      complexIMPLENGTH = 256;
-      overlapsize = (IMPLENGTH-1);
-      complexfftbuff = (complexIMPLENGTH*2);
-
-      if (UNLIKELY((fpl = csound->ldmemfile2withCB(csound, filel,
-                                                   CSFTYPE_FLOATS_BINARY,
-                                                   swap4bytes)) == NULL)) {
-        return
-          csound->InitError(csound,
-                            Str("\n\n\ncannot load left data file, exiting\n\n"));
-      }
-
-      if (UNLIKELY((fpr = csound->ldmemfile2withCB(csound, filer,
-                                                   CSFTYPE_FLOATS_BINARY,
-                                                   swap4bytes)) == NULL)) {
-        return
-          csound->InitError(csound,
-                            Str("\n\n\ncannot load right data file, exiting\n\n"));
-      }
-    }
-
-    else if (sr == FL(96000.0)) {
-      IMPLENGTH = 256;
-      complexIMPLENGTH = 512;
-      overlapsize = (IMPLENGTH-1);
-      complexfftbuff = (complexIMPLENGTH*2);
-
-      if (UNLIKELY((fpl = csound->ldmemfile2withCB(csound, filel,
-                                                   CSFTYPE_FLOATS_BINARY,
-                                                   swap4bytes)) == NULL)) {
-        return
-          csound->InitError(csound,
-                            Str("\n\n\ncannot load left data file, exiting\n\n"));
-      }
-
-      if (UNLIKELY((fpr = csound->ldmemfile2withCB(csound, filer,
-                                                   CSFTYPE_FLOATS_BINARY,
-                                                   swap4bytes)) == NULL)) {
-        return
-          csound->InitError(csound,
-                            Str("\n\n\ncannot load right data file, exiting\n\n"));
-      }
-    }
+    
+    /* copy in string name... */
+    strncpy(filel, (char*) p->ifilel, MAXNAME);
+    strncpy(filer, (char*) p->ifiler, MAXNAME);
+
+    /* reading files, with byte swap */
+    fpl = csound->ldmemfile2withCB(csound, filel, CSFTYPE_FLOATS_BINARY,
+                                   swap4bytes);
+    if (UNLIKELY(fpl == NULL))
+      return
+        csound->InitError(csound,
+                          Str("\n\n\nCannot load left data file, exiting\n\n"));
+    
+    fpr = csound->ldmemfile2withCB(csound, filer, CSFTYPE_FLOATS_BINARY,
+                                   swap4bytes);
+    if (UNLIKELY(fpr == NULL))
+      return
+        csound->InitError(csound,
+                          Str("\n\n\nCannot load right data file, exiting\n\n"));
 
-    p->IMPLENGTH = IMPLENGTH;
-    p->complexIMPLENGTH = complexIMPLENGTH;
+    p->irlength = irlength;
+    p->irlengthpad = irlengthpad;
     p->overlapsize = overlapsize;
-    p->complexfftbuff = complexfftbuff;
 
-    p->sroverN = sr/IMPLENGTH;
-
-    if (fpl && fpr) {
-      /*start indices at correct value (start of file)/ zero indices.*/
-      fpindexl = (float *) fpl->beginp;
-      fpindexr = (float *) fpr->beginp;
-    }
-    /*buffers */
-    csound->AuxAlloc(csound, IMPLENGTH*sizeof(MYFLT), &p->insig);
-    csound->AuxAlloc(csound, complexIMPLENGTH*sizeof(MYFLT), &p->outl);
-    csound->AuxAlloc(csound, complexIMPLENGTH*sizeof(MYFLT), &p->outr);
-    csound->AuxAlloc(csound, complexfftbuff*sizeof(MYFLT), &p->hrtflpad);
-    csound->AuxAlloc(csound, complexfftbuff*sizeof(MYFLT), &p->hrtfrpad);
-    csound->AuxAlloc(csound, complexfftbuff*sizeof(MYFLT), &p-> complexinsig);
-    csound->AuxAlloc(csound, complexIMPLENGTH*sizeof(MYFLT), &p->hrtflfloat);
-    csound->AuxAlloc(csound, complexIMPLENGTH*sizeof(MYFLT), &p->hrtfrfloat);
-    csound->AuxAlloc(csound, complexfftbuff*sizeof(MYFLT), &p->outspecl);
-    csound->AuxAlloc(csound, complexfftbuff*sizeof(MYFLT), &p->outspecr);
-    csound->AuxAlloc(csound, overlapsize*sizeof(MYFLT), &p->overlapl);
-    csound->AuxAlloc(csound, overlapsize*sizeof(MYFLT), &p->overlapr);
-
-    /*interpolation values*/
-    csound->AuxAlloc(csound, complexIMPLENGTH*sizeof(MYFLT), &p->lowl1);
-    csound->AuxAlloc(csound, complexIMPLENGTH*sizeof(MYFLT), &p->lowr1);
-    csound->AuxAlloc(csound, complexIMPLENGTH*sizeof(MYFLT), &p->lowl2);
-    csound->AuxAlloc(csound, complexIMPLENGTH*sizeof(MYFLT), &p->lowr2);
-    csound->AuxAlloc(csound, complexIMPLENGTH*sizeof(MYFLT), &p->highl1);
-    csound->AuxAlloc(csound, complexIMPLENGTH*sizeof(MYFLT), &p->highr1);
-    csound->AuxAlloc(csound, complexIMPLENGTH*sizeof(MYFLT), &p->highl2);
-    csound->AuxAlloc(csound, complexIMPLENGTH*sizeof(MYFLT), &p->highr2);
-
-    /*shift buffers*/
-    csound->AuxAlloc(csound, complexIMPLENGTH*sizeof(MYFLT), &p->leftshiftbuffer);
-    csound->AuxAlloc(csound, complexIMPLENGTH*sizeof(MYFLT), &p->rightshiftbuffer);
+    p->sroverN = sr/irlength;
+
+    /* start indices at correct value (start of file)/ zero indices.
+       (don't need to store here, as only accessing in INIT) */
+    fpindexl = (float *) fpl->beginp;
+    fpindexr = (float *) fpr->beginp;
+
+    /* buffers */
+    if (!p->insig.auxp || p->insig.size < irlength * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlength*sizeof(MYFLT), &p->insig);
+    if (!p->outl.auxp || p->outl.size < irlengthpad * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlengthpad*sizeof(MYFLT), &p->outl);
+    if (!p->outr.auxp || p->outr.size < irlengthpad * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlengthpad*sizeof(MYFLT), &p->outr);
+    if (!p->hrtflpad.auxp || p->hrtflpad.size < irlengthpad * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlengthpad*sizeof(MYFLT), &p->hrtflpad);
+    if (!p->hrtfrpad.auxp || p->hrtfrpad.size < irlengthpad * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlengthpad*sizeof(MYFLT), &p->hrtfrpad);
+    if (!p->complexinsig.auxp || p->complexinsig.size < irlengthpad * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlengthpad*sizeof(MYFLT), &p-> complexinsig);
+    if (!p->hrtflfloat.auxp || p->hrtflfloat.size < irlength * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlength*sizeof(MYFLT), &p->hrtflfloat);
+    if (!p->hrtfrfloat.auxp || p->hrtfrfloat.size < irlength * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlength*sizeof(MYFLT), &p->hrtfrfloat);
+    if (!p->outspecl.auxp || p->outspecl.size < irlengthpad * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlengthpad*sizeof(MYFLT), &p->outspecl);
+    if (!p->outspecr.auxp || p->outspecr.size < irlengthpad * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlengthpad*sizeof(MYFLT), &p->outspecr);
+    if (!p->overlapl.auxp || p->overlapl.size < overlapsize * sizeof(MYFLT))
+      csound->AuxAlloc(csound, overlapsize*sizeof(MYFLT), &p->overlapl);
+    if (!p->overlapr.auxp || p->overlapr.size < overlapsize * sizeof(MYFLT))
+      csound->AuxAlloc(csound, overlapsize*sizeof(MYFLT), &p->overlapr);
+    
+    memset(p->insig.auxp, 0, irlength * sizeof(MYFLT));
+    memset(p->outl.auxp, 0, irlengthpad * sizeof(MYFLT));
+    memset(p->outr.auxp, 0, irlengthpad * sizeof(MYFLT));
+    memset(p->hrtflpad.auxp, 0, irlengthpad * sizeof(MYFLT));
+    memset(p->hrtfrpad.auxp, 0, irlengthpad * sizeof(MYFLT));
+    memset(p->complexinsig.auxp, 0, irlengthpad * sizeof(MYFLT));
+    memset(p->hrtflfloat.auxp, 0, irlength * sizeof(MYFLT));
+    memset(p->hrtfrfloat.auxp, 0, irlength * sizeof(MYFLT));
+    memset(p->outspecl.auxp, 0, irlengthpad * sizeof(MYFLT));
+    memset(p->outspecr.auxp, 0, irlengthpad * sizeof(MYFLT));
+    memset(p->overlapl.auxp, 0, overlapsize * sizeof(MYFLT));
+    memset(p->overlapr.auxp, 0, overlapsize * sizeof(MYFLT));
+
+    /* interpolation values */
+    if (!p->lowl1.auxp || p->lowl1.size < irlength * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlength * sizeof(MYFLT), &p->lowl1);
+    if (!p->lowr1.auxp || p->lowr1.size < irlength * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlength * sizeof(MYFLT), &p->lowr1);
+    if (!p->lowl2.auxp || p->lowl2.size < irlength * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlength * sizeof(MYFLT), &p->lowl2);
+    if (!p->lowr2.auxp || p->lowr2.size < irlength * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlength * sizeof(MYFLT), &p->lowr2);
+    if (!p->highl1.auxp || p->highl1.size < irlength * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlength * sizeof(MYFLT), &p->highl1);
+    if (!p->highr1.auxp || p->highr1.size < irlength * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlength * sizeof(MYFLT), &p->highr1);
+    if (!p->highl2.auxp || p->highl2.size < irlength * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlength * sizeof(MYFLT), &p->highl2);
+    if (!p->highr2.auxp || p->highr2.size < irlength * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlength * sizeof(MYFLT), &p->highr2);
+    
+    /* best to zero, for future changes (filled in init) */
+    memset(p->lowl1.auxp, 0, irlength * sizeof(MYFLT));
+    memset(p->lowr1.auxp, 0, irlength * sizeof(MYFLT));
+    memset(p->lowl2.auxp, 0, irlength * sizeof(MYFLT));
+    memset(p->lowr2.auxp, 0, irlength * sizeof(MYFLT));
+    memset(p->highl1.auxp, 0, irlength * sizeof(MYFLT));
+    memset(p->highl2.auxp, 0, irlength * sizeof(MYFLT));
+    memset(p->highr1.auxp, 0, irlength * sizeof(MYFLT));
+    memset(p->highr2.auxp, 0, irlength * sizeof(MYFLT));
+
+    /* shift buffers */
+    if (!p->leftshiftbuffer.auxp ||
+        p->leftshiftbuffer.size < irlength * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlength*sizeof(MYFLT), &p->leftshiftbuffer);
+    if (!p->rightshiftbuffer.auxp ||
+        p->rightshiftbuffer.size < irlength * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlength*sizeof(MYFLT), &p->rightshiftbuffer);
+
+    memset(p->leftshiftbuffer.auxp, 0, irlength * sizeof(MYFLT));
+    memset(p->rightshiftbuffer.auxp, 0, irlength * sizeof(MYFLT));
 
     lowl1 = (MYFLT *)p->lowl1.auxp;
     lowr1 = (MYFLT *)p->lowr1.auxp;
@@ -1370,279 +1574,287 @@ static int hrtfstat_init(CSOUND *csound, hrtfstat *p)
     hrtflpad = (MYFLT *)p->hrtflpad.auxp;
     hrtfrpad = (MYFLT *)p->hrtfrpad.auxp;
 
-    if (r<=0||r>15)
-      r=9.0;
-
-    if (elev < -40) elev = -40;            /*within legal MIT range*/
-    if (elev > 90) elev = 90;
-    elevindex = (int)floorf(((float)(elev-minelev)/elevincrement)+0.5f);
-
-    while (angle<0)angle+=360;
-    while (angle>360)angle-=360;                                   /*mod 360*/
-    if (angle>180) {
-      angle=360-angle;
-      switchchannels=1;         /*true for later function: data is symmetrical*/
-    }
-
-    /*read using an index system based on number of points measured
-      per elevation at mit*/
-    angleindex = (int)floorf(angle/(FL(360.0)/(MYFLT)elevationarray[elevindex])+FL(0.5));
-    /*angle/increment+0.5*/
-    if (angleindex>=((int)(elevationarray[elevindex]/2)+1))
-      /*last point in current elevation*/
-      angleindex=(int)(elevationarray[elevindex]/2);
-
-    /* two nearest elev indices*/
-    elevindexlow = (int)((elev-minelev)/elevincrement);
-    if (elevindexlow<13) elevindexhigh = elevindexlow+1;
-    else elevindexhigh = elevindexlow;            /* highest index reached*/
-
-    /* get percentage value for interpolation*/
-    elevindexlowper = FL(1.0) -
-      (MYFLT)(((MYFLT)(elev-minelev)/elevincrement)-(MYFLT)elevindexlow);
-    elevindexhighper = FL(1.0) - elevindexlowper;
-
-    /* 4 closest angle indices, 2 low and 2 high*/
-    angleindex1 = (int)(angle/(360.0f/(float)elevationarray[elevindexlow]));
+    if(r <= 0 || r > 15)
+      r = FL(8.8);
+
+    if(elev > FL(90.0))
+      elev = FL(90.0);
+    if(elev < FL(-40.0))
+      elev = FL(-40.0);
+
+    while(angle < FL(0.0))
+      angle += FL(360.0);
+    while(angle >= FL(360.0))
+      angle -= FL(360.0);
+
+    /* two nearest elev indices to avoid recalculating */
+    elevindexstore = (elev - minelev) / elevincrement;
+    elevindexlow = (int)elevindexstore;
+    
+    if(elevindexlow < 13)
+      elevindexhigh = elevindexlow + 1;
+    /* highest index reached */
+    else
+      elevindexhigh = elevindexlow;
+    
+    /* get percentage value for interpolation */
+    elevindexhighper = elevindexstore - elevindexlow;
+    
+    /* avoid recalculation */
+    angleindexlowstore = angle / (FL(360.0) / elevationarray[elevindexlow]);
+    angleindexhighstore = angle / (FL(360.0) / elevationarray[elevindexhigh]);
+
+    /* 4 closest indices, 2 low and 2 high */
+    angleindex1 = (int)angleindexlowstore;
 
     angleindex2 = angleindex1 + 1;
-    if (angleindex2>=((int)(elevationarray[elevindexlow]/2)+1))
-      angleindex2=(int)(elevationarray[elevindexlow]/2);
+    angleindex2 = angleindex2 % elevationarray[elevindexlow];
 
-    angleindex3 = (int)(angle/(360.0f/(float)elevationarray[elevindexhigh]));
+    angleindex3 = (int)angleindexhighstore;
 
     angleindex4 = angleindex3 + 1;
-    if (angleindex4>=((int)(elevationarray[elevindexhigh]/2)+1))
-      angleindex4=(int)(elevationarray[elevindexhigh]/2);
-
-    /* angle percentages for interp*/
-    angleindex1per = FL(1.0) -
-      (MYFLT)((angle/(FL(360.0)/(MYFLT)elevationarray[elevindexlow])-angleindex1));
-    angleindex2per = FL(1.0)-angleindex1per;
-    angleindex3per = FL(1.0) -
-      (MYFLT)((angle/(360.0/(MYFLT)elevationarray[elevindexhigh])-angleindex3));
-    angleindex4per = FL(1.0)-angleindex3per;
-
-    /*read 4 nearest points for interpolation*/
-    /*point 1*/
-    skip = 0;
-    if (elevindexlow == 0);
-    else
-      for (i=0; i<elevindexlow; i++)
-        /*skip * 2 as data is in complex mag,phase format*/
-        skip +=((int)(elevationarray[i]/2)+1)*(IMPLENGTH*2);
+    angleindex4 = angleindex4 % elevationarray[elevindexhigh];
 
-    if (angleindex1 == 0);
-    else
-      for (i=0; i<angleindex1; i++)
-        skip += (2*IMPLENGTH);
+    /* angle percentages for interp */
+    angleindex2per = angleindexlowstore - angleindex1;
+    angleindex4per = angleindexhighstore - angleindex3;
 
-    if (switchchannels) {
-      for (i=0;i<complexIMPLENGTH;i++) {
-        lowl1[i]=fpindexr[skip+i];
-        lowr1[i]=fpindexl[skip+i];
+    /* read 4 nearest HRTFs */
+    skip = 0;
+    /* switch l and r */
+    if(angleindex1 > elevationarray[elevindexlow] / 2)
+      {
+        for(i = 0; i < elevindexlow; i++)
+          skip +=((int)(elevationarray[i] / 2) + 1) * irlength;
+        for (i = 0; i < (elevationarray[elevindexlow] - angleindex1); i++)
+          skip += irlength;
+        for(i = 0; i < irlength; i++)
+          {
+            lowl1[i] = fpindexr[skip + i];
+            lowr1[i] = fpindexl[skip + i];
+          }
       }
-    }
-
-    else {
-      for (i=0;i<complexIMPLENGTH;i++) {
-        lowl1[i]=fpindexl[skip+i];
-        lowr1[i]=fpindexr[skip+i];
+    else
+      {
+        for(i = 0; i < elevindexlow; i++)
+          skip +=((int)(elevationarray[i] / 2) + 1) * irlength;
+        for (i = 0; i < angleindex1; i++)
+          skip += irlength;
+        for(i = 0; i < irlength; i++)
+          {
+            lowl1[i] = fpindexl[skip + i];
+            lowr1[i] = fpindexr[skip + i];
+          }
       }
-    }
-
-    /*point 2*/
+    
     skip = 0;
-    if (elevindexlow == 0);
-    else
-      for (i=0; i<elevindexlow; i++)
-        skip +=((int)(elevationarray[i]/2)+1)*(IMPLENGTH*2);
-
-    if (angleindex2 == 0);
-    else
-      for (i=0; i<angleindex2; i++)
-        skip += (2*IMPLENGTH);
-
-    if (switchchannels) {
-      for (i=0;i<complexIMPLENGTH;i++) {
-        lowl2[i]=fpindexr[skip+i];
-        lowr2[i]=fpindexl[skip+i];
+    if(angleindex2 > elevationarray[elevindexlow] / 2)
+      {
+        for(i = 0; i < elevindexlow; i++)
+          skip +=((int)(elevationarray[i] / 2) + 1) * irlength;
+        for (i = 0; i < (elevationarray[elevindexlow] - angleindex2); i++)
+          skip += irlength;
+        for(i = 0; i < irlength; i++)
+          {
+            lowl2[i] = fpindexr[skip + i];
+            lowr2[i] = fpindexl[skip + i];
+          }
       }
-    }
-
-    else {
-      for (i=0;i<complexIMPLENGTH;i++) {
-        lowl2[i]=fpindexl[skip+i];
-        lowr2[i]=fpindexr[skip+i];
+    else
+      {
+        for(i = 0; i < elevindexlow; i++)
+          skip +=((int)(elevationarray[i] / 2) + 1) * irlength;
+        for (i = 0; i < angleindex2; i++)
+          skip += irlength;
+        for(i = 0; i < irlength; i++)
+          {
+            lowl2[i] = fpindexl[skip + i];
+            lowr2[i] = fpindexr[skip + i];
+          }
       }
-    }
-
-    /*point 3*/
+    
     skip = 0;
-    if (elevindexhigh == 0);
-    else
-      for (i=0; i<elevindexhigh; i++)
-        skip +=((int)(elevationarray[i]/2)+1)*(IMPLENGTH*2);
-
-    if (angleindex3 == 0);
-    else
-      for (i=0; i<angleindex3; i++)
-        skip += (2*IMPLENGTH);
-
-    if (switchchannels) {
-      for (i=0;i<complexIMPLENGTH;i++) {
-        highl1[i]=fpindexr[skip+i];
-        highr1[i]=fpindexl[skip+i];
+    if(angleindex3 > elevationarray[elevindexhigh] / 2)
+      {
+        for(i = 0; i < elevindexhigh; i++)
+          skip += ((int)(elevationarray[i] / 2) + 1) * irlength;
+        for (i = 0; i < (elevationarray[elevindexhigh] - angleindex3); i++)
+          skip += irlength;
+        for(i = 0; i < irlength; i++)
+          {
+            highl1[i] = fpindexr[skip + i];
+            highr1[i] = fpindexl[skip + i];
+          }
       }
-    }
-
-    else {
-      for (i=0;i<complexIMPLENGTH;i++) {
-        highl1[i]=fpindexl[skip+i];
-        highr1[i]=fpindexr[skip+i];
+    else
+      {
+        for(i = 0; i < elevindexhigh; i++)
+          skip +=((int)(elevationarray[i] / 2) + 1) * irlength;
+        for (i = 0; i < angleindex3; i++)
+          skip += irlength;
+        for(i = 0; i < irlength; i++)
+          {
+            highl1[i] = fpindexl[skip + i];
+            highr1[i] = fpindexr[skip + i];
+          }
       }
-    }
 
-    /*point 4*/
     skip = 0;
-    if (elevindexhigh == 0);
-    else
-      for (i=0; i<elevindexhigh; i++)
-        skip +=((int)(elevationarray[i]/2)+1)*(IMPLENGTH*2);
-
-    if (angleindex4 == 0);
-    else
-      for (i=0; i<angleindex4; i++)
-        skip += (2*IMPLENGTH);
-
-    if (switchchannels) {
-      for (i=0;i<complexIMPLENGTH;i++) {
-        highl2[i]=fpindexr[skip+i];
-        highr2[i]=fpindexl[skip+i];
+    if(angleindex4 > elevationarray[elevindexhigh] / 2)
+      {
+        for(i = 0; i < elevindexhigh; i++)
+          skip +=((int)(elevationarray[i] / 2) + 1) * irlength;
+        for (i = 0; i < (elevationarray[elevindexhigh] - angleindex4); i++)
+          skip += irlength;
+        for(i = 0; i < irlength; i++)
+          {
+            highl2[i] = fpindexr[skip + i];
+            highr2[i] = fpindexl[skip + i];
+          }
       }
-    }
-
-    else {
-      for (i=0;i<complexIMPLENGTH;i++) {
-        highl2[i]=fpindexl[skip+i];
-        highr2[i]=fpindexr[skip+i];
+    else
+      {
+        for(i = 0; i < elevindexhigh; i++)
+          skip +=((int)(elevationarray[i] / 2) + 1) * irlength;
+        for (i = 0; i < angleindex4; i++)
+          skip += irlength;
+        for(i = 0; i < irlength; i++)
+          {
+            highl2[i] = fpindexl[skip + i];
+            highr2[i] = fpindexr[skip + i];
+          }
       }
-    }
 
-    /*woodworth stuff*/
-    radianangle = angle * (float)PI/180.0f;  /* degrees to radians */
-    radianelev = elev * (float)PI/180.0f;
-
-    if (radianangle > (PI/2.0))             /*get in correct range for formula*/
-      radianangle = (float)PI - radianangle;
-
-    /*woodworth formula for itd*/
-    itd = (radianangle + sinf(radianangle))*r*cosf(radianelev)/c;
-
-    /* magnitude interpolation*/
-    for (i=0; i < complexIMPLENGTH; i+=2) {
-      /* interpolate high and low mags*/
-      magllow = lowl1[i]+(MYFLT)((lowl2[i]-lowl1[i])*(MYFLT)angleindex2per);
-      maglhigh = highl1[i]+(MYFLT)((highl2[i]-highl1[i])*(MYFLT)angleindex4per);
-
-      magrlow = lowr1[i]+(MYFLT)((lowr2[i]-lowr1[i])*(MYFLT)angleindex2per);
-      magrhigh = highr1[i]+(MYFLT)((highr2[i]-highr1[i])*(MYFLT)angleindex4per);
-
-      /* interpolate high and low results*/
-      magl = magllow+(MYFLT)((maglhigh-magllow)*(MYFLT)elevindexhighper);
-      magr = magrlow+(MYFLT)((magrhigh-magrlow)*(MYFLT)elevindexhighper);
-
-      if (i<(IMPLENGTH+1))freq = (i/2)*p->sroverN;
-      else freq = (-IMPLENGTH+(i/2))*p->sroverN;
-
-      /*NONLIN ITD...*/
-      if (p->sr == 96000) {
-        if ((i/2)>0 && (i/2)<6) {
-          itd = (radianangle + sinf(radianangle))*r*cosf(radianelev)/c;
-          itd = itd * nonlinitd96k[(i/2)-1];
-        }
-        if ((i/2)>251 && (i/2)<256) {
-          itd = (radianangle + sinf(radianangle))*r*cosf(radianelev)/c;
-          itd = itd * nonlinitd96k[255-(i/2)];
-        }
-      }
-      if (p->sr == 48000) {
-        if ((i/2)>0 && (i/2)<6) {
-          itd = (radianangle + sinf(radianangle))*r*cosf(radianelev)/c;
-          itd = itd * nonlinitd48k[(i/2)-1];
-        }
-        if ((i/2)>123 && (i/2)<128) {
-          itd = (radianangle + sinf(radianangle))*r*cosf(radianelev)/c;
-          itd = itd * nonlinitd48k[127-(i/2)];
-        }
-      }
-      if (p->sr == 44100) {
-        if ((i/2)>0 && (i/2)<6) {
-          itd = (radianangle + sinf(radianangle))*r*cosf(radianelev)/c;
-          itd = itd * nonlinitd[(i/2)-1];
-        }
-        if ((i/2)>123 && (i/2)<128) {
-          itd = (radianangle + sinf(radianangle))*r*cosf(radianelev)/c;
-          itd = itd * nonlinitd[127-(i/2)];
-        }
-      }
+    /* woodworth process */
+    /* ITD formula, check which ear is relevant to calculate angle from */
+    if(angle > FL(180.0))
+      radianangle = (angle - FL(180.0)) * PI_F / FL(180.0);
+    else
+      radianangle = angle * PI_F / FL(180.0);
+    /* degrees to radians */
+    radianelev = elev * PI_F / FL(180.0);
+
+    /* get in correct range for formula */
+    if(radianangle > PI_F / FL(2.0))
+      radianangle = FL(PI) - radianangle;
+
+    /* woodworth formula for itd */
+    itdww = (radianangle + SIN(radianangle)) * r * COS(radianelev) / c;
+
+    /* 0 Hz and Nyq... */
+    /* these are real values...may be neg (implying phase of pi:
+       in phase truncation), so need fabs... */
+    magllow = FABS(lowl1[0]) + (FABS(lowl2[0]) - FABS(lowl1[0])) * angleindex2per;
+    maglhigh = FABS(highl1[0]) + (FABS(highl2[0]) - FABS(highl1[0])) *
+      angleindex4per;
+    hrtflfloat[0] = magllow + (maglhigh - magllow) * elevindexhighper;
+
+    magllow = FABS(lowl1[1]) + (FABS(lowl2[1]) - FABS(lowl1[1])) * angleindex2per;
+    maglhigh = FABS(highl1[1]) + (FABS(highl2[1]) - FABS(highl1[1])) *
+      angleindex4per;
+    hrtflfloat[1] = magllow + (maglhigh - magllow) * elevindexhighper;
+
+    magrlow = FABS(lowr1[0]) + (FABS(lowr2[0]) - FABS(lowr1[0])) * angleindex2per;
+    magrhigh = FABS(highr1[0]) + (FABS(highr2[0]) - FABS(highr1[0])) *
+      angleindex4per;
+    hrtfrfloat[0] = magrlow + (magrhigh - magrlow) * elevindexhighper;
+
+    magrlow = FABS(lowr1[1]) + (FABS(lowr2[1]) - FABS(lowr1[1])) * angleindex2per;
+    magrhigh = FABS(highr1[1]) + (FABS(highr2[1]) - FABS(highr1[1])) *
+      angleindex4per;
+    hrtfrfloat[1] = magrlow + (magrhigh - magrlow) * elevindexhighper;
+
+    /* magnitude interpolation */
+    for(i = 2; i < irlength; i+=2)
+      {
+        /* interpolate high and low mags */
+        magllow = lowl1[i] + (lowl2[i] - lowl1[i]) * angleindex2per;
+        maglhigh = highl1[i]+(highl2[i] - highl1[i]) * angleindex4per;
+
+        magrlow = lowr1[i] + (lowr2[i] - lowr1[i]) * angleindex2per;
+        magrhigh = highr1[i] + (highr2[i] - highr1[i]) * angleindex4per;
+
+        /* interpolate high and low results */
+        magl = magllow + (maglhigh - magllow) * elevindexhighper;
+        magr = magrlow + (magrhigh - magrlow) * elevindexhighper;
+
+        freq = (i / 2) * p->sroverN;
+
+        /* non linear itd...last value in array = 1.0, so back to itdww */
+        if(p->sr == 96000)
+          {
+            if ((i / 2) < 6)
+              itd = itdww * nonlinitd96k[(i / 2) - 1];
+          }
+        else if(p->sr == 48000)
+          {
+            if ((i / 2) < 6)
+              itd = itdww * nonlinitd48k[(i / 2) - 1];
+          }
+        else if(p->sr == 44100)
+          {
+            if((i / 2) < 6)
+              itd = itdww * nonlinitd[(i / 2) - 1];
+          }
+        
+        if(angle > FL(180.))
+          {
+            phasel = TWOPI_F * freq * (itd / 2);
+            phaser = TWOPI_F * freq * -(itd / 2);
+          }
+        else
+          {
+            phasel = TWOPI_F * freq * -(itd / 2);
+            phaser = TWOPI_F * freq * (itd / 2);
+          }
+        
+        /* polar to rectangular */
+        hrtflfloat[i] = magl * COS(phasel);
+        hrtflfloat[i+1] = magl * SIN(phasel);
 
-      if (switchchannels) {
-        phasel = TWOPI_F*freq*(itd/2);
-        phaser = TWOPI_F*freq*-(itd/2);
-      }
-      else {
-        phasel = TWOPI_F*freq*-(itd/2);
-        phaser = TWOPI_F*freq*(itd/2);
+        hrtfrfloat[i] = magr * COS(phaser);
+        hrtfrfloat[i+1] = magr * SIN(phaser);
       }
 
-      /* polar to rectangular*/
-      hrtflfloat[i] = magl*COS(phasel);
-      hrtflfloat[i+1] = magl*SIN(phasel);
-
-      hrtfrfloat[i] = magr*COS(phaser);
-      hrtfrfloat[i+1] = magr*SIN(phaser);
-    }
-
-    /*ifft*/
-    csound->InverseComplexFFT(csound, hrtflfloat, IMPLENGTH);
-    csound->InverseComplexFFT(csound, hrtfrfloat, IMPLENGTH);
+    /* ifft */
+    csound->InverseRealFFT(csound, hrtflfloat, irlength);
+    csound->InverseRealFFT(csound, hrtfrfloat, irlength);
 
-    for (i=0; i<complexIMPLENGTH; i++) {
-      hrtflpad[i] = hrtflfloat[i]; /* scale and pad buffers with zeros to fftbuff*/
-      hrtfrpad[i] = hrtfrfloat[i];
+    for (i = 0; i < irlength; i++)
+      {
+        /* scale and pad buffers with zeros to fftbuff */
+        leftshiftbuffer[i] = hrtflfloat[i];
+        rightshiftbuffer[i] = hrtfrfloat[i];
     }
 
-    /*shift for causality...impulse as is is centred around zero time lag...
-      then phase added.*/
-    /*this step centres impulse around centre tap of filter (then phase
-      moves it for correct itd...)*/
-    shift = IMPLENGTH;
-    for (i=0;i<complexIMPLENGTH;i++) {
-      leftshiftbuffer[i] = hrtflpad[i];
-      rightshiftbuffer[i] = hrtfrpad[i];
-    }
-
-    for (i=0;i<complexIMPLENGTH;i++) {
-      hrtflpad[i] = leftshiftbuffer[shift];
-      hrtfrpad[i] = rightshiftbuffer[shift];
+    /* shift for causality...impulse as is is centred around zero time lag...
+       then phase added. */
+    /* this step centres impulse around centre tap of filter (then phase
+       moves it for correct itd...) */
+    shift = irlength / 2;
 
-      shift++;
-      shift = shift%complexIMPLENGTH;
-    }
+    for(i = 0; i < irlength; i++)
+      {
+        hrtflpad[i] = leftshiftbuffer[shift];
+        hrtfrpad[i] = rightshiftbuffer[shift];
 
-    /*zero pad impulse*/
-    for (i=complexIMPLENGTH;i<complexfftbuff;i++) {
-      hrtflpad[i]=FL(0.0);
-      hrtfrpad[i]=FL(0.0);
+        shift++;
+        shift = shift % irlength;
     }
 
-    /*back to freq domain*/
-    csound->ComplexFFT(csound, hrtflpad, complexIMPLENGTH);
-    csound->ComplexFFT(csound, hrtfrpad, complexIMPLENGTH);
-
+    /* zero pad impulse */
+    for(i = irlength; i < irlengthpad; i++)
+      {
+        hrtflpad[i] = FL(0.0);
+        hrtfrpad[i] = FL(0.0);
+      }
+    
+    /* back to freq domain */
+    csound->RealFFT(csound, hrtflpad, irlengthpad);
+    csound->RealFFT(csound, hrtfrpad, irlengthpad);
 
-    p->counter = 0;               /*initialize counter*/
+        /* initialize counter */
+    p->counter = 0;
 
     return OK;
 }
@@ -1650,11 +1862,12 @@ static int hrtfstat_init(CSOUND *csound, hrtfstat *p)
 
 static int hrtfstat_process(CSOUND *csound, hrtfstat *p)
 {
-    MYFLT *in = p->in;                    /*local pointers to p*/
+        /* local pointers to p */
+    MYFLT *in = p->in;
     MYFLT *outsigl  = p->outsigl;
     MYFLT *outsigr = p->outsigr;
 
-    /*common buffers and variables*/
+    /* common buffers and variables */
     MYFLT *insig = (MYFLT *)p->insig.auxp;
     MYFLT *outl = (MYFLT *)p->outl.auxp;
     MYFLT *outr = (MYFLT *)p->outr.auxp;
@@ -1670,339 +1883,325 @@ static int hrtfstat_process(CSOUND *csound, hrtfstat *p)
     MYFLT *overlapr = (MYFLT *)p->overlapr.auxp;
 
     int counter = p->counter;
-    int n,j,i;
+    int n, j, i;
 
-    int IMPLENGTH = p->IMPLENGTH;
-    int complexIMPLENGTH = p->complexIMPLENGTH;
+    int irlength = p->irlength;
+    int irlengthpad = p->irlengthpad;
     int overlapsize = p->overlapsize;
-    int complexfftbuff = p->complexfftbuff;
 
     MYFLT sr = p->sr;
 
-    n=csound->ksmps;
-
-    for (j=0;j<n;j++) {
-      insig[counter] = in[j];                   /*ins and outs*/
-
-      outsigl[j]=outl[counter];
-      outsigr[j]=outr[counter];
-
-      counter++;
-
-      if (counter == IMPLENGTH) {        /*process a block*/
-        /* look after overlap add stuff*/
-        for (i = 0; i < overlapsize ; i++) {
-          overlapl[i] = outl[i+IMPLENGTH];
-          overlapr[i] = outr[i+IMPLENGTH];
-        }
-
-        /* insert insig for complex real,im fft, zero pad*/
-        for (i = 0; i <  IMPLENGTH; i++) {
-          complexinsig[2*i] = insig[i];
-          complexinsig[(2*i)+1] = FL(0.0);
-        }
-
-        for (i = complexIMPLENGTH; i <  complexfftbuff; i++)
-          complexinsig[i] = FL(0.0);
+    n = csound->ksmps;
 
-        csound->ComplexFFT(csound, complexinsig, complexIMPLENGTH);
+    for(j = 0; j < n; j++)
+      {
+        /* ins and outs */
+        insig[counter] = in[j];
 
-        /* complex multiplication*/
-        for (i = 0; i < complexfftbuff; i+=2) {
-          outspecl[i] = complexinsig[i]*hrtflpad[i] -
-            complexinsig[i+1]*hrtflpad[i+1];
-          outspecr[i] = complexinsig[i]*hrtfrpad[i] -
-            complexinsig[i+1]*hrtfrpad[i+1];
-          outspecl[i+1] = complexinsig[i]*hrtflpad[i+1] +
-            complexinsig[i+1]*hrtflpad[i];
-          outspecr[i+1] = complexinsig[i]*hrtfrpad[i+1] +
-            complexinsig[i+1]*hrtfrpad[i];
-        }
+        outsigl[j] = outl[counter];
+        outsigr[j] = outr[counter];
 
-        /* convolution is the inverse FFT of above result */
-        csound->InverseComplexFFT(csound, outspecl, complexIMPLENGTH);
-        csound->InverseComplexFFT(csound, outspecr, complexIMPLENGTH);
+        counter++;
 
+        if(counter == irlength)
+          {
+            /* process a block */
+            /* look after overlap add stuff */
+            for(i = 0; i < overlapsize ; i++)
+              {
+                overlapl[i] = outl[i+irlength];
+                overlapr[i] = outr[i+irlength];
+              }
 
-        /*real values*/
-
-        /*scaled by a factor related to sr...?*/
-
-        for (i = 0; i < complexIMPLENGTH; i++) {
-          outl[i] = outspecl[2*i]/(sr/FL(38000.0));
-          outr[i] = outspecr[2*i]/(sr/FL(38000.0));
-        }
-
+            /* insert insig for complex real,im fft, zero pad */
+            for (i = 0; i <  irlength; i++)
+              complexinsig[i] = insig[i];
+
+            for (i = irlength; i <  irlengthpad; i++)
+              complexinsig[i] = FL(0.0);
+            
+            csound->RealFFT(csound, complexinsig, irlengthpad);
+            
+            /* complex multiplication */
+            csound->RealFFTMult(csound, outspecl, hrtflpad, complexinsig,
+                                irlengthpad, FL(1.0));
+            csound->RealFFTMult(csound, outspecr, hrtfrpad, complexinsig,
+                                irlengthpad, FL(1.0));
+
+            /* convolution is the inverse FFT of above result */
+            csound->InverseRealFFT(csound, outspecl, irlengthpad);
+            csound->InverseRealFFT(csound, outspecr, irlengthpad);
+
+            /* scaled by a factor related to sr...? */
+            for(i = 0; i < irlengthpad; i++)
+              {
+                outl[i] = outspecl[i] / (sr / FL(38000.0));
+                outr[i] = outspecr[i] / (sr / FL(38000.0));
+              }
 
-        for (i=0;i<IMPLENGTH;i++) {
-          outl[i] = outl[i] + (i < overlapsize ? overlapl[i] : FL(0.0));
-          outr[i] = outr[i] + (i < overlapsize ? overlapr[i] : FL(0.0));
-        }
+            for(i = 0; i < irlength; i++)
+              {
+                outl[i] = outl[i] + (i < overlapsize ? overlapl[i] : FL(0.0));
+                outr[i] = outr[i] + (i < overlapsize ? overlapr[i] : FL(0.0));
+              }
 
-        /*reset counter*/
-        counter=0;
+            /* reset counter */
+            counter = 0;
 
-      }       /* end of IMPLENGTH == counter*/
+          }       /* end of irlength == counter */
 
-    }   /* end of ksmps audio loop */
+      }   /* end of ksmps audio loop */
 
-        /*update*/
+    /* update */
     p->counter = counter;
 
     return OK;
 }
 
-/*Csound hrtf magnitude interpolation, dynamic woodworth trajectory: September 07*/
-/*stft from fft.cpp in sndobj...*/
+/* Csound hrtf magnitude interpolation, dynamic woodworth trajectory */
+/* stft from fft.cpp in sndobj... */
 
-/*****/
-/*stft based on sndobj implementation...some notes:*/
-/*need an overlapskip (same as m_counter) for in and out to control seperately...*/
-/*ifft.cpp zeros current overlapskipout,then decrements t...not possible
-  here as t needs to be decremented before fft...*/
-/*****/
+/* stft based on sndobj implementation...some notes: */
+/* using an overlapskip (same as m_counter) for in and out to control
+   seperately for clarity... */
 
-/*aleft, aright hrtfmove2 ain, kang, kel, ifilel, ifiler
-                          [,ioverlap = 4, iradius = 9.0, isr = 44100] */
-/*ioverlap is stft overlap, iradius is head radius, sr can also be 48000 and 96000*/
+/* aleft, aright hrtfmove2 ain, kang, kel, ifilel, ifiler [, ioverlap = 4,
+   iradius = 8.8, isr = 44100] */
+/* ioverlap is stft overlap, iradius is head radius, sr can also be 48000
+   and 96000 */
 
-/*definitions above*/
-typedef struct {
-  OPDS  h;
-  MYFLT *outsigl, *outsigr;
-  MYFLT *in, *kangle, *kelev, *ifilel, *ifiler,
-    *ooverlap, *oradius, *osr;   /* outputs and inputs */
+typedef struct
+{
+        OPDS  h;
+        /* outputs and inputs */
+        MYFLT *outsigl, *outsigr;
+        MYFLT *in, *kangle, *kelev, *ifilel, *ifiler, *ooverlap, *oradius, *osr;
 
-  int IMPLENGTH, complexIMPLENGTH, complexfftbuff; /*see definitions in INIT*/
-  MYFLT sroverN;
-  MYFLT sr;
+        /* check if relative source has changed! */
+        MYFLT anglev, elevv;
 
-  /*test inputs in init, get accepted value/default, and store in variables below.*/
-  int overlap;
-  MYFLT radius;
+        /* see definitions in INIT */
+        int irlength;
+        MYFLT sroverN;
+        MYFLT sr;
 
-  int hopsize;
+        /* test inputs in init, get accepted value/default, and store in
+           variables below. */
+        int overlap;
+        MYFLT radius;
 
-  MEMFIL *fpl,*fpr;                     /* file pointers*/
-  float *fpbeginl,*fpbeginr;
+        int hopsize;
 
-  int counter, t;                       /*to keep track of process*/
+        float *fpbeginl,*fpbeginr;
 
-  AUXCH inbuf;          /*in and output buffers*/
-  AUXCH outbufl, outbufr;
+        /* to keep track of process */
+        int counter, t;
 
-  /*memory local to perform method*/
-  AUXCH complexinsig;                   /*insig fft*/
-  AUXCH hrtflfloat, hrtfrfloat;         /*hrtf buffers (rectangular complex form)*/
-  AUXCH outspecl, outspecr;             /*spectral data*/
+        /* in and output buffers */
+        AUXCH inbuf;
+        AUXCH outbufl, outbufr;
 
-  AUXCH lowl1,lowr1,lowl2,lowr2,
-        highl1,highr1,highl2,highr2;    /*interpolation buffers*/
+        /* memory local to perform method */
+        /* insig fft */
+        AUXCH complexinsig;
+        /* hrtf buffers (rectangular complex form) */
+        AUXCH hrtflfloat, hrtfrfloat;
+        /* spectral data */
+        AUXCH outspecl, outspecr;
 
-  AUXCH leftshiftbuffer,rightshiftbuffer; /*buffers for impulse shift*/
+        /* interpolation buffers */
+        AUXCH lowl1,lowr1,lowl2,lowr2,highl1,highr1,highl2,highr2;
 
-  AUXCH win;            /*stft window*/
-  AUXCH overlapskipin,overlapskipout;  /*used for skipping into next stft
-                                         array on way in and out*/
+        /* stft window */
+        AUXCH win;
+        /* used for skipping into next stft array on way in and out */
+        AUXCH overlapskipin, overlapskipout;
 
-} hrtfmove2;
+}
+hrtfmove2;
 
 static int hrtfmove2_init(CSOUND *csound, hrtfmove2 *p)
 {
-    /*left and right data files: spectral mag, phase format.*/
-    MEMFIL *fpl=NULL,*fpr=NULL;
+    /* left and right data files: spectral mag, phase format. */
+    MEMFIL *fpl = NULL, *fpr = NULL;
 
-    char filel[MAXNAME],filer[MAXNAME];
+    char filel[MAXNAME], filer[MAXNAME];
 
-    int IMPLENGTH;              /*time domain impulse length */
-    int complexIMPLENGTH;       /*freq domain impulse length*/
+    /* time domain impulse length */
+    int irlength=0;
 
-    MYFLT *win;                        /*stft window*/
-    int *overlapskipin, *overlapskipout; /*overlap skip buffers*/
-    MYFLT *inbuf;
-    MYFLT *outbufl, *outbufr;
+    /* stft window */
+    MYFLT *win;
+    /* overlap skip buffers */
+    int *overlapskipin, *overlapskipout;
+    //MYFLT *inbuf;
+    //MYFLT *outbufl, *outbufr;
 
     int overlap = (int)*p->ooverlap;
     MYFLT r = *p->oradius;
     MYFLT sr = *p->osr;
 
-    int i=0;
+    int i = 0;
 
-    if (sr!=FL(44100.0)&&sr!=FL(48000.0)&&sr!=FL(96000.0))
-      sr=FL(44100.0);
+    if(sr != 44100 && sr != 48000 && sr != 96000)
+      sr = 44100;
     p->sr = sr;
 
     if (UNLIKELY(csound->esr != sr))
-      csound->Warning(csound,
-                      Str("Orchestra sampling rate is not "
-                          "compatible with HRTF data files\nShould be %.0f, "
-                          "see Csound help for object\n\n"), sr);
-
-    strcpy(filel, (char*) p->ifilel);             /*copy in string name...*/
-    strcpy(filer, (char*) p->ifiler);
-
-    if (sr == FL(44100.0)) {             /*set up per sr...*/
-      IMPLENGTH = 128;
-      complexIMPLENGTH = 256;
-
-      /*  csound->Message(csound,"\ndatafile:44.1k\n");*/
-      if (UNLIKELY((fpl = csound->ldmemfile2withCB(csound, filel,
-                                                   CSFTYPE_FLOATS_BINARY,
-                                                   swap4bytes)) == NULL)) {
-        return
-          csound->InitError(csound,
-                            Str("\n\n\ncannot load left data file, exiting\n\n"));
-      }
-
-      if (UNLIKELY((fpr = csound->ldmemfile2withCB(csound, filer,
-                                                   CSFTYPE_FLOATS_BINARY,
-                                                   swap4bytes)) == NULL)) {
-        return
-          csound->InitError(csound,
-                            Str("\n\n\ncannot load right data file, exiting\n\n"));
-      }
-    }
-
-    else if (sr == FL(48000.0)) {
-      IMPLENGTH = 128;
-      complexIMPLENGTH = 256;
-
-      /*csound->Message(csound,"\ndatafile:48k\n");*/
-      if (UNLIKELY((fpl = csound->ldmemfile2withCB(csound, filel,
-                                                   CSFTYPE_FLOATS_BINARY,
-                                                   swap4bytes)) == NULL)) {
-        return
-          csound->InitError(csound,
-                            Str("\n\n\ncannot load left data file, exiting\n\n"));
-      }
-
-      if (UNLIKELY((fpr = csound->ldmemfile2withCB(csound, filer,
-                                                   CSFTYPE_FLOATS_BINARY,
-                                                   swap4bytes)) == NULL)) {
-        return
-          csound->InitError(csound,
-                            Str("\n\n\ncannot load right data file, exiting\n\n"));
-      }
-    }
-
-    else if (sr == FL(96000.0)) {
-      IMPLENGTH = 256;
-      complexIMPLENGTH = 512;
-
-      /*csound->Message(csound,"\ndatafile:96k\n");*/
-      if (UNLIKELY((fpl = csound->ldmemfile2withCB(csound, filel,
-                                                   CSFTYPE_FLOATS_BINARY,
-                                                   swap4bytes)) == NULL)) {
-        return
-          csound->InitError(csound,
-                            Str("\n\n\ncannot load left data file, exiting\n\n"));
-      }
-
-      if (UNLIKELY((fpr = csound->ldmemfile2withCB(csound, filer,
-                                                   CSFTYPE_FLOATS_BINARY,
-                                                   swap4bytes)) == NULL)) {
-        return
-          csound->InitError(csound,
-                            Str("\n\n\ncannot load right data file, exiting\n\n"));
-      }
-    }
-    else {
+      csound->Message(csound,
+                      Str("\n\nWARNING!!:\nOrchestra SR not compatible"
+                          "with HRTF processing SR of: %.0f\n\n"), sr);
+
+    /* setup as per sr */
+    if(sr == 44100 || sr == 48000)
+      irlength = 128;
+    else if(sr == 96000)
+      irlength = 256;
+
+    /* copy in string name... */
+    strncpy(filel, (char*) p->ifilel, MAXNAME);
+    strncpy(filer, (char*) p->ifiler, MAXNAME);
+
+    /* reading files, with byte swap */ 
+    fpl = csound->ldmemfile2withCB(csound, filel, CSFTYPE_FLOATS_BINARY,
+                                   swap4bytes);
+    if (UNLIKELY(fpl == NULL))
+     return
+        csound->InitError(csound,
+                          Str("\n\n\nCannot load left data file, exiting\n\n"));
+    
+    fpr = csound->ldmemfile2withCB(csound, filer, CSFTYPE_FLOATS_BINARY,
+                                   swap4bytes);
+    if (UNLIKELY(fpr == NULL))
       return
         csound->InitError(csound,
-                          Str("\n\n\n Sampling rate not supported, exiting\n\n"));
-    }
-
-    p->IMPLENGTH = IMPLENGTH;
-    p->complexIMPLENGTH = complexIMPLENGTH;
-
-    p->sroverN = sr/IMPLENGTH;
+                          Str("\n\n\nCannot load right data file, exiting\n\n"));
+    
+    p->irlength = irlength;
+    p->sroverN = sr / irlength;
 
-    /*file handles*/
-    if (fpl && fpr) {
-      p->fpl = fpl;
-      p->fpr = fpr;
-      p->fpbeginl = (float *) fpl->beginp;
-      p->fpbeginr = (float *) fpr->beginp;
-    }
+    /* file handles */
+    p->fpbeginl = (float *) fpl->beginp;
+    p->fpbeginr = (float *) fpr->beginp;
 
-    if (overlap!=2&&overlap!=4&&overlap!=8&&overlap!=16)
-      overlap=4;
+    if(overlap != 2 && overlap != 4 && overlap != 8 && overlap != 16)
+      overlap = 4;
     p->overlap = overlap;
 
-    if (r<=0||r>15)
-      r=9.0;
+    if(r <= 0 || r > 15)
+      r = FL(8.8);
     p->radius = r;
-
-    p->hopsize = (int)(IMPLENGTH/overlap);
-
-    /*buffers */
-    csound->AuxAlloc(csound, (overlap*IMPLENGTH)*sizeof(MYFLT), &p->inbuf);
-  /*2d arrays in 1d!*/
-    csound->AuxAlloc(csound, (overlap*IMPLENGTH)*sizeof(MYFLT), &p->outbufl);
-    csound->AuxAlloc(csound, (overlap*IMPLENGTH)*sizeof(MYFLT), &p->outbufr);
-    csound->AuxAlloc(csound, complexIMPLENGTH*sizeof(MYFLT), &p-> complexinsig);
-    csound->AuxAlloc(csound, complexIMPLENGTH*sizeof(MYFLT), &p->hrtflfloat);
-    csound->AuxAlloc(csound, complexIMPLENGTH*sizeof(MYFLT), &p->hrtfrfloat);
-    csound->AuxAlloc(csound, complexIMPLENGTH*sizeof(MYFLT), &p->outspecl);
-    csound->AuxAlloc(csound, complexIMPLENGTH*sizeof(MYFLT), &p->outspecr);
-
-    /*interpolation values*/
-    csound->AuxAlloc(csound, complexIMPLENGTH*sizeof(MYFLT), &p->lowl1);
-    csound->AuxAlloc(csound, complexIMPLENGTH*sizeof(MYFLT), &p->lowr1);
-    csound->AuxAlloc(csound, complexIMPLENGTH*sizeof(MYFLT), &p->lowl2);
-    csound->AuxAlloc(csound, complexIMPLENGTH*sizeof(MYFLT), &p->lowr2);
-    csound->AuxAlloc(csound, complexIMPLENGTH*sizeof(MYFLT), &p->highl1);
-    csound->AuxAlloc(csound, complexIMPLENGTH*sizeof(MYFLT), &p->highr1);
-    csound->AuxAlloc(csound, complexIMPLENGTH*sizeof(MYFLT), &p->highl2);
-    csound->AuxAlloc(csound, complexIMPLENGTH*sizeof(MYFLT), &p->highr2);
-
-    csound->AuxAlloc(csound, IMPLENGTH*sizeof(MYFLT), &p->win);
-    csound->AuxAlloc(csound, overlap*sizeof(int), &p->overlapskipin);
-    csound->AuxAlloc(csound, overlap*sizeof(int), &p->overlapskipout);
+    
+    p->hopsize = (int)(irlength / overlap);
+
+    /* buffers */
+    if (!p->inbuf.auxp || p->inbuf.size < (overlap * irlength) * sizeof(MYFLT))
+      csound->AuxAlloc(csound, (overlap * irlength) * sizeof(MYFLT), &p->inbuf);
+    /* 2d arrays in 1d! */
+    if (!p->outbufl.auxp || p->outbufl.size < (overlap * irlength) * sizeof(MYFLT))
+      csound->AuxAlloc(csound, (overlap * irlength) * sizeof(MYFLT), &p->outbufl);
+    if (!p->outbufr.auxp || p->outbufr.size < (overlap * irlength) * sizeof(MYFLT))
+      csound->AuxAlloc(csound, (overlap * irlength) * sizeof(MYFLT), &p->outbufr);
+    if (!p->complexinsig.auxp || p->complexinsig.size < irlength * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlength * sizeof(MYFLT), &p-> complexinsig);
+    if (!p->hrtflfloat.auxp || p->hrtflfloat.size < irlength * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlength * sizeof(MYFLT), &p->hrtflfloat);
+    if (!p->hrtfrfloat.auxp || p->hrtfrfloat.size < irlength * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlength * sizeof(MYFLT), &p->hrtfrfloat);
+    if (!p->outspecl.auxp || p->outspecl.size < irlength * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlength * sizeof(MYFLT), &p->outspecl);
+    if (!p->outspecr.auxp || p->outspecr.size < irlength * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlength * sizeof(MYFLT), &p->outspecr);
+
+    memset(p->inbuf.auxp, 0, (overlap*irlength) * sizeof(MYFLT));
+    memset(p->outbufl.auxp, 0, (overlap*irlength) * sizeof(MYFLT));
+    memset(p->outbufr.auxp, 0, (overlap*irlength) * sizeof(MYFLT));
+    memset(p->complexinsig.auxp, 0, irlength * sizeof(MYFLT));
+    memset(p->hrtflfloat.auxp, 0, irlength * sizeof(MYFLT));
+    memset(p->hrtfrfloat.auxp, 0, irlength * sizeof(MYFLT));
+    memset(p->outspecl.auxp, 0, irlength * sizeof(MYFLT));
+    memset(p->outspecr.auxp, 0, irlength * sizeof(MYFLT));
+
+    /* interpolation values */
+    if (!p->lowl1.auxp || p->lowl1.size < irlength * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlength * sizeof(MYFLT), &p->lowl1);
+    if (!p->lowr1.auxp || p->lowr1.size < irlength * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlength * sizeof(MYFLT), &p->lowr1);
+    if (!p->lowl2.auxp || p->lowl2.size < irlength * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlength * sizeof(MYFLT), &p->lowl2);
+    if (!p->lowr2.auxp || p->lowr2.size < irlength * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlength * sizeof(MYFLT), &p->lowr2);
+    if (!p->highl1.auxp || p->highl1.size < irlength * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlength * sizeof(MYFLT), &p->highl1);
+    if (!p->highr1.auxp || p->highr1.size < irlength * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlength * sizeof(MYFLT), &p->highr1);
+    if (!p->highl2.auxp || p->highl2.size < irlength * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlength * sizeof(MYFLT), &p->highl2);
+    if (!p->highr2.auxp || p->highr2.size < irlength * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlength * sizeof(MYFLT), &p->highr2);
+
+    memset(p->lowl1.auxp, 0, irlength * sizeof(MYFLT));
+    memset(p->lowr1.auxp, 0, irlength * sizeof(MYFLT));
+    memset(p->lowl2.auxp, 0, irlength * sizeof(MYFLT));
+    memset(p->lowr2.auxp, 0, irlength * sizeof(MYFLT));
+    memset(p->highl1.auxp, 0, irlength * sizeof(MYFLT));
+    memset(p->highl2.auxp, 0, irlength * sizeof(MYFLT));
+    memset(p->highr1.auxp, 0, irlength * sizeof(MYFLT));
+    memset(p->highr2.auxp, 0, irlength * sizeof(MYFLT));
+
+    if (!p->win.auxp || p->win.size < irlength * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlength * sizeof(MYFLT), &p->win);
+    if (!p->overlapskipin.auxp || p->overlapskipin.size < overlap * sizeof(int))
+      csound->AuxAlloc(csound, overlap * sizeof(int), &p->overlapskipin);
+    if (!p->overlapskipout.auxp || p->overlapskipout.size < overlap * sizeof(int))
+      csound->AuxAlloc(csound, overlap * sizeof(int), &p->overlapskipout);
+
+    memset(p->win.auxp, 0, irlength * sizeof(MYFLT));
+    memset(p->overlapskipin.auxp, 0, overlap * sizeof(int));
+    memset(p->overlapskipout.auxp, 0, overlap * sizeof(int));
 
     win = (MYFLT *)p->win.auxp;
     overlapskipin = (int *)p->overlapskipin.auxp;
     overlapskipout = (int *)p->overlapskipout.auxp;
-    inbuf = (MYFLT *)p->inbuf.auxp;
-    outbufl = (MYFLT *)p->outbufl.auxp;
-    outbufr = (MYFLT *)p->outbufr.auxp;
-
-    for (i=0; i< (overlap*IMPLENGTH); i++) {
-      inbuf[i] = FL(0.0);
-      outbufl[i] = FL(0.0);
-      outbufr[i] = FL(0.0);
-    }
 
-    /* window is hanning*/
-    for (i=0; i< IMPLENGTH; i++)
-      win[i] = FL(0.5) - (MYFLT)(0.5*cos(i*TWOPI/(double)(IMPLENGTH-1)));
+    /* window is Hanning */
+    for(i = 0; i < irlength; i++)
+      win[i] = FL(0.5) - (FL(0.5) * COS(i * TWOPI_F / (MYFLT)(irlength - 1)));
 
-    for (i = 0; i < overlap; i++) {
-      /*so, for example in overlap 4: will be 0,32,64,96*/
-      overlapskipin[i] = p->hopsize*i;
-      overlapskipout[i] = p->hopsize*i;
-    }
+    for(i = 0; i < overlap; i++)
+      {
+        /* so, for example in overlap 4: will be 0, 32, 64, 96 if ir = 128 */
+        overlapskipin[i] = p->hopsize * i;
+        overlapskipout[i] = p->hopsize * i;
+      }
 
-    p->counter = 0;               /*initialise*/
+    /* initialise */
+    p->counter = 0;
     p->t = 0;
 
+    /* setup values used to check if src has moved, illegal values to
+       start with to ensure first read */
+    p->anglev = -1;
+    p->elevv = -41;
+
     return OK;
 }
 
 
 static int hrtfmove2_process(CSOUND *csound, hrtfmove2 *p)
 {
-    MYFLT *in = p->in;                    /*local pointers to p*/
+    /* local pointers to p */
+    MYFLT *in = p->in;
     MYFLT *outsigl  = p->outsigl;
     MYFLT *outsigr = p->outsigr;
 
-    /*common buffers and variables*/
+    /* common buffers and variables */
     MYFLT *inbuf = (MYFLT *)p->inbuf.auxp;
 
     MYFLT *outbufl = (MYFLT *)p->outbufl.auxp;
     MYFLT *outbufr = (MYFLT *)p->outbufr.auxp;
 
-    MYFLT outsuml=FL(0.0), outsumr=FL(0.0);
+    MYFLT outsuml = FL(0.0), outsumr = FL(0.0);
 
     MYFLT *complexinsig = (MYFLT *)p->complexinsig.auxp;
     MYFLT *hrtflfloat = (MYFLT *)p->hrtflfloat.auxp;
@@ -2028,12 +2227,13 @@ static int hrtfmove2_process(CSOUND *csound, hrtfmove2 *p)
     int t = p ->t;
     int n;
 
-    float *fpindexl;                      /* pointers into HRTF files*/
+        /* pointers into HRTF files */
+    float *fpindexl;
     float *fpindexr;
 
-    int i,j,elevindex, angleindex, switchchannels=0, skip=0;
+    int i, j, skip = 0;
 
-    /*interpolation values*/
+    /* interpolation values */
     MYFLT *lowl1 = (MYFLT *)p->lowl1.auxp;
     MYFLT *lowr1 = (MYFLT *)p->lowr1.auxp;
     MYFLT *lowl2 = (MYFLT *)p->lowl2.auxp;
@@ -2043,369 +2243,389 @@ static int hrtfmove2_process(CSOUND *csound, hrtfmove2 *p)
     MYFLT *highl2 = (MYFLT *)p->highl2.auxp;
     MYFLT *highr2 = (MYFLT *)p->highr2.auxp;
 
-    /*local interpolation values*/
-    MYFLT elevindexlowper,elevindexhighper,angleindex1per,
-      angleindex2per,angleindex3per,angleindex4per;
-    int elevindexlow,elevindexhigh,angleindex1,angleindex2,
-      angleindex3,angleindex4;
-    MYFLT magl,magr,phasel,phaser, magllow, magrlow, maglhigh, magrhigh;
-
-    /*woodworth values*/
-    float radianangle,radianelev,itd,freq;
-
-    int IMPLENGTH = p->IMPLENGTH;
-    int complexIMPLENGTH = p->complexIMPLENGTH;
-    /*int complexfftbuff = p->complexfftbuff;*/
-
-    /*start indices at correct value (start of file)/ zero indices.*/
-    fpindexl = (float *) p->fpbeginl;
-    fpindexr = (float *) p->fpbeginr;
-
-    n=csound->ksmps;
-
-    /*ksmps loop*/
-    for (j=0;j<n;j++) {
-
-      /* distribute the signal and apply the window*/
-      /* according to a time pointer (kept by overlapskip[n])*/
-      for (i=0;i < overlap; i++) {
-        inbuf[(i*IMPLENGTH)+overlapskipin[i]]= in[j]*win[overlapskipin[i]];
-        overlapskipin[i]++;
-      }
-
-      counter++;
-
-      if (counter==hopsize) {            /*process a block*/
-
-        if (elev < -40) elev = -40;            /*within legal MIT range*/
-        if (elev > 90) elev = 90;
-        elevindex = (int)floor((float)((float)(elev-minelev)/elevincrement)+0.5);
-
-        while (angle<0)angle+=360;
-        while (angle>360)angle-=360;                                   /*mod 360*/
-        if (angle>180) {
-          angle=360-angle;
-          switchchannels=1; /*true for later function: data is symmetrical*/
-        }
-
-        /*read using an index system based on number of points measured
-          per elevation at MIT*/
-        angleindex = (int)floor(angle/(360/(MYFLT)elevationarray[elevindex])+0.5);
-        /*angle/increment+0.5*/
-        if (angleindex>=((int)(elevationarray[elevindex]/2)+1))
-          /*last point in current elevation*/
-          angleindex=(int)(elevationarray[elevindex]/2);
-
-        /* two nearest elev indices*/
-        elevindexlow = (int)((elev-minelev)/elevincrement);
-        if (elevindexlow<13) elevindexhigh = elevindexlow+1;
-        else elevindexhigh = elevindexlow;            /* highest index reached*/
-
-        /* get percentage value for interpolation*/
-        elevindexlowper = (FL(1.0) -
-                           (MYFLT)(((MYFLT)(elev-minelev)/elevincrement)-
-                                   (MYFLT)elevindexlow));
-        elevindexhighper = FL(1.0) - elevindexlowper;
-
-        /* 4 closest angle indices, 2 low and 2 high*/
-        angleindex1 = (int)(angle/(360/(float)elevationarray[elevindexlow]));
-
-        angleindex2 = angleindex1 + 1;
-        if (angleindex2>=((int)(elevationarray[elevindexlow]/2)+1))
-          angleindex2=(int)(elevationarray[elevindexlow]/2);
-
-        angleindex3 = (int)(angle/(360/(float)elevationarray[elevindexhigh]));
-
-        angleindex4 = angleindex3 + 1;
-        if (angleindex4>=((int)(elevationarray[elevindexhigh]/2)+1))
-          angleindex4=(int)(elevationarray[elevindexhigh]/2);
-
-        /* angle percentages for interp*/
-        angleindex1per =
-          (FL(1.0)-(MYFLT)((angle/(FL(360.0)/(MYFLT)elevationarray[elevindexlow])
-                            -angleindex1)));
-        angleindex2per = FL(1.0)-angleindex1per;
-        angleindex3per =
-          (FL(1.0) - (MYFLT)((angle/(360.0/(MYFLT)elevationarray[elevindexhigh])-
-                              angleindex3)));
-        angleindex4per = 1.0f-angleindex3per;
-
-        /*read 4 nearest points for interpolation*/
-        /*point 1*/
-        skip = 0;
-        if (elevindexlow == 0);
-        else
-          for (i=0; i<elevindexlow; i++)
-            /*skip * 2 as data is in complex mag,phase format*/
-            skip +=((int)(elevationarray[i]/2)+1)*(IMPLENGTH*2);
-
-        if (angleindex1 == 0);
-        else
-          for (i=0; i<angleindex1; i++)
-            skip += (2*IMPLENGTH);
-        
-        if (switchchannels) {
-          for (i=0;i<complexIMPLENGTH;i++) {
-            lowl1[i]=fpindexr[skip+i];
-            lowr1[i]=fpindexl[skip+i];
-          }
-        }
+    /* local interpolation values */
+    MYFLT elevindexhighper, angleindex2per, angleindex4per;
+    int elevindexlow, elevindexhigh, angleindex1, angleindex2,
+      angleindex3, angleindex4;
+    MYFLT magl, magr, phasel, phaser, magllow, magrlow, maglhigh, magrhigh;
 
-        else {
-          for (i=0;i<complexIMPLENGTH;i++) {
-            lowl1[i]=fpindexl[skip+i];
-            lowr1[i]=fpindexr[skip+i];
-          }
-        }
+    /* woodworth values */
+    MYFLT radianangle, radianelev, itd=0, itdww, freq;
 
-        /*point 2*/
-        skip = 0;
-        if (elevindexlow == 0);
-        else
-          for (i=0; i<elevindexlow; i++)
-            skip +=((int)(elevationarray[i]/2)+1)*(IMPLENGTH*2);
+    int irlength = p->irlength;
 
-        if (angleindex2 == 0);
-        else
-          for (i=0; i<angleindex2; i++)
-            skip += (2*IMPLENGTH);
+    /* local variables, mainly used for simplification */
+    MYFLT elevindexstore;
+    MYFLT angleindexlowstore;
+    MYFLT angleindexhighstore;
 
-        if (switchchannels) {
-          for (i=0;i<complexIMPLENGTH;i++) {
-            lowl2[i]=fpindexr[skip+i];
-            lowr2[i]=fpindexl[skip+i];
-          }
-        }
 
-        else {
-          for (i=0;i<complexIMPLENGTH;i++) {
-            lowl2[i]=fpindexl[skip+i];
-            lowr2[i]=fpindexr[skip+i];
-          }
-        }
-
-        /*point 3*/
-        skip = 0;
-        if (elevindexhigh == 0);
-        else
-          for (i=0; i<elevindexhigh; i++)
-            skip +=((int)(elevationarray[i]/2)+1)*(IMPLENGTH*2);
-
-        if (angleindex3 == 0);
-        else
-          for (i=0; i<angleindex3; i++)
-            skip += (2*IMPLENGTH);
-
-        if (switchchannels) {
-          for (i=0;i<complexIMPLENGTH;i++) {
-            highl1[i]=fpindexr[skip+i];
-            highr1[i]=fpindexl[skip+i];
-          }
-        }
-
-        else {
-          for (i=0;i<complexIMPLENGTH;i++) {
-            highl1[i]=fpindexl[skip+i];
-            highr1[i]=fpindexr[skip+i];
-          }
-        }
-
-        /*point 4*/
-        skip = 0;
-        if (elevindexhigh == 0);
-        else
-          for (i=0; i<elevindexhigh; i++)
-            skip +=((int)(elevationarray[i]/2)+1)*(IMPLENGTH*2);
+    /* start indices at correct value (start of file)/ zero indices. */
+    fpindexl = (float *) p->fpbeginl;
+    fpindexr = (float *) p->fpbeginr;
 
-        if (angleindex4 == 0);
-        else
-          for (i=0; i<angleindex4; i++)
-            skip += (2*IMPLENGTH);
+    n = csound->ksmps;
 
-        if (switchchannels) {
-          for (i=0;i<complexIMPLENGTH;i++) {
-            highl2[i]=fpindexr[skip+i];
-            highr2[i]=fpindexl[skip+i];
+    /* ksmps loop */
+    for(j = 0; j < n; j++)
+      {
+        /* distribute the signal and apply the window */
+        /* according to a time pointer (kept by overlapskip[n]) */
+        for(i = 0; i < overlap; i++)
+          {
+            inbuf[(i * irlength) + overlapskipin[i]] = in[j] *
+              win[overlapskipin[i]];
+            overlapskipin[i]++;
           }
-        }
+        
+        counter++;
 
-        else {
-          for (i=0;i<complexIMPLENGTH;i++) {
-            highl2[i]=fpindexl[skip+i];
-            highr2[i]=fpindexr[skip+i];
-          }
-        }
-
-        /*woodworth stuff*/
-        radianangle = angle * (float)PI/180.0f; /*degrees to radians*/
-        radianelev = elev * (float)PI/180.0f;
-
-        if (radianangle > (PI/2.0))
-          /*get in correct range for formula*/
-          radianangle = (float)PI - radianangle;
-
-        /*woodworth formula for itd     */
-        itd = (radianangle + sinf(radianangle))*r*cosf(radianelev)/c;
-
-        /* magnitude interpolation*/
-        for (i=0; i < complexIMPLENGTH; i+=2) {
-          /* interpolate high and low mags*/
-          magllow = lowl1[i]+(MYFLT)((lowl2[i]-lowl1[i])*(MYFLT)angleindex2per);
-          maglhigh = highl1[i]+(MYFLT)((highl2[i]-highl1[i])*(MYFLT)angleindex4per);
-
-          magrlow = lowr1[i]+(MYFLT)((lowr2[i]-lowr1[i])*(MYFLT)angleindex2per);
-          magrhigh = highr1[i]+(MYFLT)((highr2[i]-highr1[i])*(MYFLT)angleindex4per);
-
-          /* interpolate high and low results*/
-          magl = magllow+(MYFLT)((maglhigh-magllow)*(MYFLT)elevindexhighper);
-          magr = magrlow+(MYFLT)((magrhigh-magrlow)*(MYFLT)elevindexhighper);
-
-          if (i<(IMPLENGTH+1))freq = (i/2)*sroverN;
-          else freq = (-IMPLENGTH+(i/2))*sroverN;
-
-          /*NONLIN ITD HERE!...NEED SEPERATE ARRAY FOR 48 and 96k...*/
-          if (p->sr == FL(96000.0)) {
-            if ((i/2)>0 && (i/2)<6) {
-              itd = (radianangle +
-                     sinf(radianangle))*r*cosf(radianelev)/c;
-              itd = itd * nonlinitd96k[(i/2)-1];
-            }
-            if ((i/2)>251 && (i/2)<256) {
-              itd = (radianangle +
-                     sinf(radianangle))*r*cosf(radianelev)/c;
-              itd = itd * nonlinitd96k[255-(i/2)];
-            }
-          }
-          if (p->sr == FL(48000.0)) {
-            if ((i/2)>0 && (i/2)<6) {
-              itd = (radianangle +
-                     sinf(radianangle))*r*cosf(radianelev)/c;
-              itd = itd * nonlinitd48k[(i/2)-1];
-            }
-            if ((i/2)>123 && (i/2)<128) {
-              itd = (radianangle +
-                     sinf(radianangle))*r*cosf(radianelev)/c;
-              itd = itd * nonlinitd48k[127-(i/2)];
-            }
-          }
-          if (p->sr == FL(44100.0)) {
-            if ((i/2)>0 && (i/2)<6) {
-              itd = (radianangle +
-                     sinf(radianangle))*r*cosf(radianelev)/c;
-              itd = itd * nonlinitd[(i/2)-1];
-            }
-            if ((i/2)>123 && (i/2)<128) {
-              itd = (radianangle +
-                     sinf(radianangle))*r*cosf(radianelev)/c;
-              itd = itd * nonlinitd[127-(i/2)];
-            }
+        if(counter == hopsize)
+          {
+            /* process a block */
+            if(elev > FL(90.0))
+              elev = FL(90.0);
+            if(elev < FL(-40.0))
+              elev = FL(-40.0);
+            
+            while(angle < FL(0.0))
+              angle += FL(360.0);
+            while(angle >= FL(360.0))
+              angle -= FL(360.0);
+            
+            if(angle != p->anglev || elev != p->elevv)
+              {
+                /* two nearest elev indices to avoid recalculating */
+                elevindexstore = (elev - minelev) / elevincrement;
+                elevindexlow = (int)elevindexstore;
+
+                if(elevindexlow < 13)
+                  elevindexhigh = elevindexlow + 1;
+                /* highest index reached */
+                else
+                  elevindexhigh = elevindexlow;
+                
+                /* get percentage value for interpolation */
+                elevindexhighper = elevindexstore - elevindexlow;
+                
+                /* avoid recalculation */
+                angleindexlowstore = angle / (FL(360.0) /
+                                              elevationarray[elevindexlow]);
+                angleindexhighstore = angle / (FL(360.0) /
+                                               elevationarray[elevindexhigh]);
+                
+                /* 4 closest indices, 2 low and 2 high */
+                angleindex1 = (int)angleindexlowstore;
+
+                angleindex2 = angleindex1 + 1;
+                angleindex2 = angleindex2 % elevationarray[elevindexlow];
+
+                angleindex3 = (int)angleindexhighstore;
+
+                angleindex4 = angleindex3 + 1;
+                angleindex4 = angleindex4 % elevationarray[elevindexhigh];
+
+                /* angle percentages for interp */
+                angleindex2per = angleindexlowstore - angleindex1;
+                angleindex4per = angleindexhighstore - angleindex3;
+
+                /* read 4 nearest HRTFs */
+                skip = 0;
+                /* switch l and r */
+                if(angleindex1 > elevationarray[elevindexlow] / 2)
+                  {
+                    for(i = 0; i < elevindexlow; i++)
+                      skip += ((int)(elevationarray[i] / 2) + 1) * irlength;
+                    for (i = 0;
+                         i < (elevationarray[elevindexlow] - angleindex1);
+                         i++)
+                      skip += irlength;
+                    for(i = 0; i < irlength; i++)
+                      {
+                        lowl1[i] = fpindexr[skip + i];
+                        lowr1[i] = fpindexl[skip + i];
+                      }
+                  }
+                else
+                  {
+                    for(i = 0; i < elevindexlow; i++)
+                      skip += ((int)(elevationarray[i] / 2) + 1) * irlength;
+                    for (i = 0; i < angleindex1; i++)
+                      skip += irlength;
+                    for(i = 0; i < irlength; i++)
+                      {
+                        lowl1[i] = fpindexl[skip + i];
+                        lowr1[i] = fpindexr[skip + i];
+                      }
+                  }
+
+                skip = 0;
+                if(angleindex2 > elevationarray[elevindexlow] / 2)
+                  {
+                    for(i = 0; i < elevindexlow; i++)
+                      skip += ((int)(elevationarray[i] / 2) + 1) * irlength;
+                    for (i = 0;
+                         i < (elevationarray[elevindexlow] - angleindex2);
+                         i++)
+                      skip += irlength;
+                    for(i = 0; i < irlength; i++)
+                      {
+                        lowl2[i] = fpindexr[skip + i];
+                        lowr2[i] = fpindexl[skip + i];
+                      }
+                  }
+                else
+                  {
+                    for(i = 0; i < elevindexlow; i++)
+                      skip += ((int)(elevationarray[i] / 2) + 1) * irlength;
+                    for (i = 0; i < angleindex2; i++)
+                      skip += irlength;
+                    for(i = 0; i < irlength; i++)
+                      {
+                        lowl2[i] = fpindexl[skip + i];
+                        lowr2[i] = fpindexr[skip + i];
+                      }
+                  }
+
+                skip = 0;
+                if(angleindex3 > elevationarray[elevindexhigh] / 2)
+                  {
+                    for(i = 0; i < elevindexhigh; i++)
+                      skip += ((int)(elevationarray[i] / 2) + 1) * irlength;
+                    for (i = 0;
+                         i < (elevationarray[elevindexhigh] - angleindex3);
+                         i++)
+                      skip += irlength;
+                    for(i = 0; i < irlength; i++)
+                      {
+                        highl1[i] = fpindexr[skip + i];
+                        highr1[i] = fpindexl[skip + i];
+                      }
+                  }
+                else
+                  {
+                    for(i = 0; i < elevindexhigh; i++)
+                      skip += ((int)(elevationarray[i] / 2) + 1) * irlength;
+                    for (i = 0; i < angleindex3; i++)
+                      skip += irlength;
+                    for(i = 0; i < irlength; i++)
+                      {
+                        highl1[i] = fpindexl[skip + i];
+                        highr1[i] = fpindexr[skip + i];
+                      }
+                  }
+                
+                skip = 0;
+                if(angleindex4 > elevationarray[elevindexhigh] / 2)
+                  {
+                    for(i = 0; i < elevindexhigh; i++)
+                      skip += ((int)(elevationarray[i] / 2) + 1) * irlength;
+                    for (i = 0;
+                         i < (elevationarray[elevindexhigh] - angleindex4);
+                         i++)
+                      skip += irlength;
+                    for(i = 0; i < irlength; i++)
+                      {
+                        highl2[i] = fpindexr[skip + i];
+                        highr2[i] = fpindexl[skip + i];
+                      }
+                  }
+                else
+                  {
+                    for(i = 0; i < elevindexhigh; i++)
+                      skip += ((int)(elevationarray[i] / 2) + 1) * irlength;
+                    for (i = 0; i < angleindex4; i++)
+                      skip += irlength;
+                    for(i = 0; i < irlength; i++)
+                      {
+                        highl2[i] = fpindexl[skip + i];
+                        highr2[i] = fpindexr[skip + i];
+                      }
+                  }
+
+                /* woodworth process */
+                /* ITD formula, check which ear is relevant to calculate angle from */
+                if(angle > FL(180.0))
+                  radianangle = (angle - FL(180.0)) * PI_F / FL(180.0);
+                else
+                  radianangle = angle * PI_F / FL(180.0);  /* degrees to radians */
+                radianelev = elev * PI_F / FL(180.0);
+                
+                /* get in correct range for formula */
+                if(radianangle > (PI_F / FL(2.0)))
+                  radianangle = FL(PI) - radianangle;
+
+                /* woodworth formula for itd */
+                itdww = (radianangle + SIN(radianangle)) * r * COS(radianelev) / c;
+
+                /* 0 Hz and Nyq... */
+                /* need fabs() here, to get mag, as 0hz and nyq stored as a
+                   real value, to allow for possible negative, implying phase
+                   of pi (in phase truncation) */
+                magllow = FABS(lowl1[0]) + (FABS(lowl2[0]) - FABS(lowl1[0])) *
+                  angleindex2per;
+                maglhigh = FABS(highl1[0]) + (FABS(highl2[0]) - FABS(highl1[0])) *
+                  angleindex4per;
+                hrtflfloat[0] = magllow + (maglhigh - magllow) * elevindexhighper;
+                
+                magllow = FABS(lowl1[1]) + (FABS(lowl2[1]) - FABS(lowl1[1])) *
+                  angleindex2per;
+                maglhigh = FABS(highl1[1]) + (FABS(highl2[1]) - FABS(highl1[1])) *
+                  angleindex4per;
+                hrtflfloat[1] = magllow + (maglhigh - magllow) * elevindexhighper;
+                
+                magrlow = FABS(lowr1[0]) + (FABS(lowr2[0]) - FABS(lowr1[0])) *
+                  angleindex2per;
+                magrhigh = FABS(highr1[0]) + (FABS(highr2[0]) - FABS(highr1[0])) *
+                  angleindex4per;
+                hrtfrfloat[0] = magrlow + (magrhigh - magrlow) * elevindexhighper;
+
+                magrlow = FABS(lowr1[1]) + (FABS(lowr2[1]) - FABS(lowr1[1])) *
+                  angleindex2per;
+                magrhigh = FABS(highr1[1]) + (FABS(highr2[1]) - FABS(highr1[1])) *
+                  angleindex4per;
+                hrtfrfloat[1] = magrlow + (magrhigh - magrlow) * elevindexhighper;
+
+                /* magnitude interpolation */
+                for(i = 2; i < irlength; i += 2)
+                  {
+                    /* interpolate high and low mags */
+                    magllow = lowl1[i] + (lowl2[i] - lowl1[i]) * angleindex2per;
+                    maglhigh = highl1[i] + (highl2[i] - highl1[i]) * angleindex4per;
+                    
+                    magrlow = lowr1[i] + (lowr2[i] - lowr1[i]) * angleindex2per;
+                    magrhigh = highr1[i] + (highr2[i] - highr1[i]) * angleindex4per;
+                    
+                    /* interpolate high and low results */
+                    magl = magllow + (maglhigh - magllow) * elevindexhighper;
+                    magr = magrlow + (magrhigh - magrlow) * elevindexhighper;
+                    
+                    freq = (i / 2) * sroverN;
+                    
+                    /* non linear itd...last value in array = 1.0, so back to itdww */
+                    if(p->sr == 96000)
+                      {
+                        if ((i / 2) < 6)
+                          itd = itdww * nonlinitd96k[(i / 2) - 1];
+                      }
+                    else if(p->sr == 48000)
+                      {
+                        if ((i / 2) < 6)
+                          itd = itdww * nonlinitd48k[(i / 2) - 1];
+                      }
+                    else if(p->sr == 44100)
+                      {
+                        if((i / 2) < 6)
+                          itd = itdww * nonlinitd[(i / 2) - 1];
+                      }
+                    
+                    if(angle > FL(180.))
+                      {
+                        phasel = TWOPI_F * freq * (itd / 2);
+                        phaser = TWOPI_F * freq * -(itd / 2);}
+                    else
+                      {
+                        phasel = TWOPI_F * freq * -(itd / 2);
+                        phaser = TWOPI_F * freq * (itd / 2);
+                      }
+                    
+                    /* polar to rectangular */
+                    hrtflfloat[i] = magl * COS(phasel);
+                    hrtflfloat[i+1] = magl * SIN(phasel);
+                    
+                    hrtfrfloat[i] = magr * COS(phaser);
+                    hrtfrfloat[i+1] = magr * SIN(phaser);
+                  }
+                
+                p->elevv = elev;
+                p->anglev = angle;
+              }
+            
+            /* t used to read inbuf...*/
+            t--;
+            if(t < 0)
+              t = overlap - 1;
+            
+            /* insert insig for complex real, im fft */
+            for(i = 0; i < irlength; i++)
+              complexinsig[i] = inbuf[(t * irlength) + i];
+            
+            /* zero the current input sigframe time pointer */
+            overlapskipin[t] = 0;
+            
+            csound->RealFFT(csound, complexinsig, irlength);
+            
+            csound->RealFFTMult(csound, outspecl, hrtflfloat,
+                                complexinsig, irlength, FL(1.0));
+            csound->RealFFTMult(csound, outspecr, hrtfrfloat,
+                                complexinsig, irlength, FL(1.0));
+            
+            /* convolution is the inverse FFT of above result */
+            csound->InverseRealFFT(csound, outspecl, irlength);
+            csound->InverseRealFFT(csound, outspecr, irlength);
+
+            /* need scaling based on overlap (more overlaps -> louder) and sr... */
+            for(i = 0; i < irlength; i++)
+              {
+                outbufl[(t * irlength) + i] = outspecl[i] /
+                  (overlap * FL(0.5) * (sr / FL(44100.0)));
+                outbufr[(t * irlength) + i] = outspecr[i] /
+                  (overlap * FL(0.5) * (sr / FL(44100.0)));
+              }
+            
+          }       /* end of !counter % hopsize */
+
+        /* output = sum of all relevant outputs: eg if overlap = 4 and
+           counter = 0, */
+        /* outsigl[j] = outbufl[0] + outbufl[128 + 96] +
+           outbufl[256 + 64] + outbufl[384 + 32]; */
+        /*        * * * * [ ]         + */
+        /*          * * * [*]         + */
+        /*            * * [*] *       + */
+        /*              * [*] * *     = */
+        /* stft! */
+
+        outsuml = outsumr = FL(0.0);
+
+        for(i = 0; i < (int)overlap; i++)
+          {
+            outsuml += outbufl[(i * irlength) +
+                               overlapskipout[i]] * win[overlapskipout[i]];
+            outsumr += outbufr[(i * irlength) +
+                               overlapskipout[i]] * win[overlapskipout[i]];
+            overlapskipout[i]++;
           }
 
-          if (switchchannels) {
-            phasel = TWOPI_F*freq*(itd/2);
-            phaser = TWOPI_F*freq*-(itd/2);
-          }
-          else {
-            phasel = TWOPI_F*freq*-(itd/2);
-            phaser = TWOPI_F*freq*(itd/2);
+        if(counter == hopsize)
+          {
+            /* zero output incrementation... */
+            /* last buffer will have gone from 96 to 127...then 2nd last
+               will have gone from 64 to 127... */
+            overlapskipout[t] = 0;
+            counter = 0;
           }
 
-          /* polar to rectangular*/
-          hrtflfloat[i] = magl*COS(phasel);
-          hrtflfloat[i+1] = magl*SIN(phasel);
-
-          hrtfrfloat[i] = magr*COS(phaser);
-          hrtfrfloat[i+1] = magr*SIN(phaser);
-        }
-
-        /* t used to read inbuf...*/
-        t--; if (t<0) t = overlap-1;
-
-        /* insert insig for complex real,im fft               */
-        for (i=0;i<IMPLENGTH;i++) {
-          complexinsig[2*i]=inbuf[(t*IMPLENGTH)+i];
-          complexinsig[(2*i)+1]=FL(0.0);
-        }
-
-        /* zero the current input sigframe time pointer*/
-        overlapskipin[t] = 0;
-
-        csound->ComplexFFT(csound, complexinsig, IMPLENGTH);
-
-        /* complex multiplication*/
-        for (i = 0; i < complexIMPLENGTH; i+=2) {
-          outspecl[i] = complexinsig[i]*hrtflfloat[i] -
-            complexinsig[i+1]*hrtflfloat[i+1];
-          outspecr[i] = complexinsig[i]*hrtfrfloat[i] -
-            complexinsig[i+1]*hrtfrfloat[i+1];
-          outspecl[i+1] = complexinsig[i]*hrtflfloat[i+1] +
-            complexinsig[i+1]*hrtflfloat[i];
-          outspecr[i+1] = complexinsig[i]*hrtfrfloat[i+1] +
-            complexinsig[i+1]*hrtfrfloat[i];
-        }
-
-        /* convolution is the inverse FFT of above result */
-        csound->InverseComplexFFT(csound, outspecl, IMPLENGTH);
-        csound->InverseComplexFFT(csound, outspecr, IMPLENGTH);
-
-        /*real values, scaled*/
-
-        /*Should be simply scaled by rms of window(.707)?...however
-          need scaling based on overlap (more overlaps -> louder) and sr...?*/
-        for (i = 0; i < IMPLENGTH; i++) {
-          outbufl[(t*IMPLENGTH)+i] =
-            outspecl[2*i] / (overlap*FL(0.5)*(sr/FL(44100.0)));
-          outbufr[(t*IMPLENGTH)+i] =
-            outspecr[2*i] / (overlap*FL(0.5)*(sr/FL(44100.0)));
-        }
-
-      }       /* end of !counter%hopsize*/
-
-      /*output = sum of all relevant outputs: eg if overlap = 4 and counter = 0, */
-      /*outsigl[j] = outbufl[0] + outbufl[128+96] +
-                     outbufl[256+64] + outbufl[384+32];*/
-      /*        * * * * [ ]                     +*/
-      /*          * * * [*]             +*/
-      /*            * * [*] *           +*/
-      /*              * [*] * *         =*/
-      /*stft!*/
-
-      outsuml = outsumr = FL(0.0);
-
-      for (i=0;i<(int)overlap;i++) {
-        outsuml += outbufl[(i*IMPLENGTH)+overlapskipout[i]]*win[overlapskipout[i]];
-        outsumr += outbufr[(i*IMPLENGTH)+overlapskipout[i]]*win[overlapskipout[i]];
-        overlapskipout[i]++;
-      }
-
-      if (counter==hopsize) {
-        /*zero output incrementation...*/
-        /*last buffer will have gone from 96 to 127...then 2nd last
-          will have gone from 64 to 127...*/
-        overlapskipout[t] = 0;
-        counter = 0;
-      }
-
-      outsigl[j] = outsuml;
-      outsigr[j] = outsumr;
-
-    }   /* end of ksmps audio loop */
+        outsigl[j] = outsuml;
+        outsigr[j] = outsumr;
+        
+      }   /* end of ksmps audio loop */
 
-        /*update*/
+    /* update */
     p->t = t;
     p->counter = counter;
 
     return OK;
 }
 
-/*see csound manual (extending csound) for details of below*/
-static OENTRY localops[] = {
-  { "hrtfmove",   sizeof(hrtfmove),5, "aa", "akkSSooo",
+/* see csound manual (extending csound) for details of below */
+static OENTRY hrtfopcodes_localops[] =
+{
+  { "hrtfmove", sizeof(hrtfmove),5, "aa", "akkSSooo",
     (SUBR)hrtfmove_init, NULL, (SUBR)hrtfmove_process },
-  { "hrtfstat",   sizeof(hrtfstat),5, "aa", "aiiSSoo",
+  { "hrtfstat", sizeof(hrtfstat),5, "aa", "aiiSSoo",
     (SUBR)hrtfstat_init, NULL, (SUBR)hrtfstat_process },
-  { "hrtfmove2",   sizeof(hrtfmove2),5, "aa", "akkSSooo",
+  { "hrtfmove2",  sizeof(hrtfmove2),5, "aa", "akkSSooo",
     (SUBR)hrtfmove2_init, NULL, (SUBR)hrtfmove2_process }
 };
 
-LINKAGE
+LINKAGE1(hrtfopcodes_localops)
diff --git a/Opcodes/hrtfreverb.c b/Opcodes/hrtfreverb.c
new file mode 100644
index 0000000..bdc6dfe
--- /dev/null
+++ b/Opcodes/hrtfreverb.c
@@ -0,0 +1,1307 @@
+/*
+Brian Carty
+PhD Code August 2010
+binaural reverb: diffuse field
+
+   This file is part of Csound.
+
+    The Csound Library is free software; you can redistribute it
+    and/or modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    Csound 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 Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with Csound; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+    02111-1307 USA
+*/
+
+#include "csoundCore.h"
+#include "interlocks.h"
+
+#define SQUARE(X) ((X)*(X))
+
+/* endian issues: swap bytes for ppc */
+#ifdef WORDS_BIGENDIAN
+static int swap4bytes(CSOUND* csound, MEMFIL* mfp)
+{
+    char c1, c2, c3, c4;
+    char *p = mfp->beginp;
+    int  size = mfp->length;
+
+    while (size >= 4)
+      {
+        c1 = p[0]; c2 = p[1]; c3 = p[2]; c4 = p[3];
+        p[0] = c4; p[1] = c3; p[2] = c2; p[3] = c1;
+        size -= 4; p +=4;
+      }
+
+    return OK;
+}
+#else
+static int (*swap4bytes)(CSOUND*, MEMFIL*) = NULL;
+#endif
+
+/* matrices for feedback delay network (fdn) */
+#define mthird (-FL(1.0) / 3)
+#define tthird (FL(2.0) / 3)
+#define msix (-FL(1.0) / 6)
+#define fsix (FL(5.0) / 6)
+#define mtw (-FL(1.0) / 12)
+#define etw (FL(11.0) / 12)
+
+static const MYFLT matrix6[36] =
+        {tthird,mthird,mthird,mthird,mthird,mthird,
+         mthird,tthird,mthird,mthird,mthird,mthird,
+         mthird,mthird,tthird,mthird,mthird,mthird,
+         mthird,mthird,mthird,tthird,mthird,mthird,
+         mthird,mthird,mthird,mthird,tthird,mthird,
+         mthird,mthird,mthird,mthird,mthird,tthird};
+
+static const MYFLT matrix12[144] =
+        {fsix,msix,msix,msix,msix,msix,msix,msix,msix,msix,msix,msix,
+         msix,fsix,msix,msix,msix,msix,msix,msix,msix,msix,msix,msix,
+         msix,msix,fsix,msix,msix,msix,msix,msix,msix,msix,msix,msix,
+         msix,msix,msix,fsix,msix,msix,msix,msix,msix,msix,msix,msix,
+         msix,msix,msix,msix,fsix,msix,msix,msix,msix,msix,msix,msix,
+         msix,msix,msix,msix,msix,fsix,msix,msix,msix,msix,msix,msix,
+         msix,msix,msix,msix,msix,msix,fsix,msix,msix,msix,msix,msix,
+         msix,msix,msix,msix,msix,msix,msix,fsix,msix,msix,msix,msix,
+         msix,msix,msix,msix,msix,msix,msix,msix,fsix,msix,msix,msix,
+         msix,msix,msix,msix,msix,msix,msix,msix,msix,fsix,msix,msix,
+         msix,msix,msix,msix,msix,msix,msix,msix,msix,msix,fsix,msix,
+         msix,msix,msix,msix,msix,msix,msix,msix,msix,msix,msix,fsix};
+
+static const MYFLT matrix24[576] =
+        {etw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,
+         mtw,etw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,
+         mtw,mtw,etw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,
+         mtw,mtw,mtw,etw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,
+         mtw,mtw,mtw,mtw,etw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,
+         mtw,mtw,mtw,mtw,mtw,etw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,
+         mtw,mtw,mtw,mtw,mtw,mtw,etw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,
+         mtw,mtw,mtw,mtw,mtw,mtw,mtw,etw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,
+         mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,etw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,
+         mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,etw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,
+         mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,etw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,
+         mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,etw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,
+         mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,etw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,
+         mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,etw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,
+         mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,etw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,
+         mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,etw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,
+         mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,etw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,
+         mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,etw,mtw,mtw,mtw,mtw,mtw,mtw,
+         mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,etw,mtw,mtw,mtw,mtw,mtw,
+         mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,etw,mtw,mtw,mtw,mtw,
+         mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,etw,mtw,mtw,mtw,
+         mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,etw,mtw,mtw,
+         mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,etw,mtw,
+         mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,mtw,etw};
+
+/* for delay line lengths */
+static const int primes[229] =
+        {
+                17,             23,     59,             71,     113,    127,    163,    191,    211,    229,
+                271,    283,    313,    337,    359,    373,    409,    461,    541,    587,
+                631,    691,    709,    773,    829,    863,    919,    971,    1039,   1069,
+                1123,   1171,   1217,   1259,   1303,   1373,   1423,   1483,   1511,   1597,
+                1627,   1669,   1733,   1787,   1847,   1867,   1913,   1951,   2027,   2081,
+                2131,   2179,   2213,   2269,   2333,   2383,   2423,   2467,   2531,   2579,
+                2617,   2671,   2729,   2789,   2837,   2861,   2917,   2999,   3011,   3083,
+                3121,   3169,   3209,   3259,   3331,   3389,   3449,   3469,   3533,   3571,
+                3613,   3671,   3727,   3779,   3821,   3889,   3917,   3989,   4001,   4051,
+                4111,   4177,   4231,   4271,   4337,   4391,   4447,   4483,   4517,   4567,
+                4621,   4691,   4733,   4787,   4817,   4861,   4919,   4967,   5023,   5077,
+                5113,   5167,   5233,   5297,   5309,   5351,   5441,   5483,   5507,   5563,
+                5641,   5683,   5711,   5783,   5821,   5857,   5927,   5981,   6011,   6067,
+                6121,   6173,   6217,   6271,   6317,   6361,   6421,   6473,   6529,   6581,
+                6607,   6661,   6733,   6793,   6841,   6883,   6911,   6961,   7027,   7057,
+                7109,   7177,   7211,   7297,   7349,   7393,   7417,   7481,   7523,   7561,
+                7607,   7673,   7717,   7789,   7841,   7879,   7919,   7963,   8017,   8081,
+                8111,   8167,   8209,   8287,   8317,   8377,   8443,   8467,   8521,   8563,
+                8623,   8677,   8713,   8761,   8831,   8867,   8923,   8963,   9013,   9059,
+                9109,   9187,   9221,   9257,   9323,   9371,   9413,   9461,   9511,   9587,
+                9631,   9679,   9721,   9781,   9803,   9859,   9949,   9973,   10039,  10079,
+                10111,  10177,  10211,  10259,  10333,  10391,  10429,  10459,  10513,  10589,
+                10607,  10663,  10711,  10799,  10831,  10859,  10909,  10979,  11003
+        };
+
+typedef struct
+{
+    OPDS h;
+    /* in / out */
+    /* outputs l/r and delay required for late del...*/
+    MYFLT *outsigl, *outsigr, *idel;
+    /* mean free path and order are optional, meanfp defaults to medium room, opcode
+     can be used as stand alone binaural reverb, or spatially accurate taking
+     meanfp and order from earlies opcode */
+    MYFLT *insig, *ilowrt60, *ihighrt60, *ifilel, *ifiler, *osr, *omeanfp, *porder;
+
+    /* internal data / class variables */
+    MYFLT delaytime;
+    int delaytimeint, basedelay;
+
+    /* number of delay lines */
+    int M;
+
+    /* delay line iterators */
+    int u, v, w, x, y, z;
+    int ut, vt, wt, xt, yt, zt;
+    int utf1, vtf1, wtf1, xtf1, ytf1, ztf1;
+    int utf2, vtf2, wtf2, xtf2, ytf2, ztf2;
+
+    /* buffer lengths, change for different sr */
+    int irlength;
+    int irlengthpad;
+    int overlapsize;
+
+    /* memory buffers: delays */
+    AUXCH delays;
+    /* filter coeffs */
+    AUXCH gi, ai;
+    /* matrix manipulations */
+    AUXCH inmat, inmatlp, dellp, outmat;
+    /* delays */
+    AUXCH del1, del2, del3, del4, del5, del6;
+    AUXCH del1t, del2t, del3t, del4t, del5t, del6t;
+    AUXCH del1tf, del2tf, del3tf, del4tf, del5tf, del6tf,
+          del7tf, del8tf, del9tf, del10tf, del11tf, del12tf;
+    /* filter variables, spectral manipulations */
+    AUXCH power, HRTFave, num, denom, cohermags, coheru, coherv;
+    AUXCH filtout, filtuout, filtvout, filtpad, filtupad, filtvpad;
+
+    /* output of matrix cycle, with IIRs in combs and FIR tone, then l and
+       r o/p processed with u and v coherence filters */
+    /* with overlap buffers for overlap add convolution */
+    AUXCH matrixlu, matrixrv;
+    AUXCH olmatrixlu, olmatrixrv;
+    /* above processed with hrtf l and r filters */
+    /* with overlap buffers for overlap add convolution */
+    AUXCH hrtfl, hrtfr;
+    AUXCH olhrtfl, olhrtfr;
+    /* filter coeff */
+    MYFLT b;
+    /* 1st order FIR mem */
+    MYFLT inoldl, inoldr;
+    /* for storing hrtf data used to create filters */
+    AUXCH buffl, buffr;
+
+    /* counter */
+    int counter;
+
+    MYFLT sr;
+
+}hrtfreverb;
+
+int hrtfreverb_init(CSOUND *csound, hrtfreverb *p)
+{
+    /* left and right data files: spectral mag, phase format */
+    MEMFIL *fpl = NULL, *fpr = NULL;
+    char filel[MAXNAME],filer[MAXNAME];
+    /* files contain floats */
+    float *fpindexl, *fpindexr;
+
+    /* processing sizes */
+    int irlength=0, irlengthpad=0, overlapsize=0;
+
+    /* pointers used to fill buffers in data structure */
+    int *delaysp;
+    MYFLT *gip, *aip;
+    MYFLT *powerp, *HRTFavep, *nump, *denomp, *cohermagsp, *coherup, *cohervp;
+    MYFLT *filtoutp, *filtuoutp, *filtvoutp, *filtpadp, *filtupadp, *filtvpadp;
+    MYFLT *bufflp, *buffrp;
+
+    /* iterators, file skip */
+    int i, j;
+    int skip = 0;
+    int skipdouble = 0;
+
+    /* used in choice of delay line lengths */
+    int basedelay=0;
+
+    /* local filter variables for spectral manipulations */
+    MYFLT rel, rer, retemp, iml, imr, imtemp;
+
+    /* setup filters */
+    MYFLT T, alpha, aconst, exp;
+    int clipcheck = 0;
+
+    MYFLT sr = (MYFLT)*p->osr;
+    MYFLT meanfp = (MYFLT)*p->omeanfp;
+    int order = (int)*p->porder;
+
+    /* delay line variables */
+    MYFLT delaytime, meanfporder;
+    int delaytimeint;
+    int Msix, Mtwelve, Mtwentyfour;
+    int meanfpsamps, meanfpordersamps;
+    int test;
+
+    MYFLT rt60low = (MYFLT)*p->ilowrt60;
+    MYFLT rt60high = (MYFLT)*p->ihighrt60;
+
+    int M;
+
+    /* sr, defualt 44100 */
+    if(sr != 44100 && sr != 48000 && sr != 96000)
+      sr = 44100;
+    p->sr = sr;
+
+    if (UNLIKELY(csound->esr != sr))
+      csound->Message(csound,
+                      Str("\n\nWARNING!!:\nOrchestra SR not compatible with"
+                          " HRTF processing SR of: %.0f\n\n"), sr);
+
+    /* meanfp: defaults to doom size 10 * 10 * 4 (max of 1: v. large room,
+       min according to min room dimensions in early: 2 * 2 * 2) */
+    if(meanfp <= 0.003876 || meanfp > 1)
+      meanfp = FL(0.01292);
+
+    /* order: defaults to 1 (4 is max for earlies) */
+    if(order < 0 || order > 4)
+      order = 1;
+
+    /* rt60 values must be positive and non zero */
+    if(rt60low <= 0)
+      rt60low = FL(0.01);
+
+    if(rt60high <= 0)
+      rt60high = FL(0.01);
+
+    /* setup as per sr */
+    if(sr == 44100 || sr == 48000)
+      {
+        irlength = 128;
+        irlengthpad = 256;
+        overlapsize = (irlength - 1);
+      }
+    else if(sr == 96000)
+      {
+        irlength = 256;
+        irlengthpad = 512;
+        overlapsize = (irlength - 1);
+      }
+
+    /* copy in string name... */
+    strcpy(filel, (char*) p->ifilel);
+    strcpy(filer, (char*) p->ifiler);
+
+    /* reading files, with byte swap */
+    fpl = csound->ldmemfile2withCB(csound, filel,
+                                   CSFTYPE_FLOATS_BINARY, swap4bytes);
+    if (UNLIKELY(fpl == NULL))
+      return
+        csound->InitError(csound,
+                          Str("\n\n\nCannot load left data file, exiting\n\n"));
+
+    fpr = csound->ldmemfile2withCB(csound, filer, CSFTYPE_FLOATS_BINARY,swap4bytes);
+    if (UNLIKELY(fpr == NULL))
+      return
+        csound->InitError(csound,
+                          Str("\n\n\nCannot load right data file, exiting\n\n"));
+
+    /* do not need to be in p, as only used in init */
+    fpindexl = (float *)fpl->beginp;
+    fpindexr = (float *)fpr->beginp;
+
+    /* setup structure values */
+    p->irlength = irlength;
+    p->irlengthpad = irlengthpad;
+    p->overlapsize = overlapsize;
+
+    /* allocate memory */
+    if (!p->power.auxp || p->power.size < irlength * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlength * sizeof(MYFLT), &p->power);
+    if (!p->HRTFave.auxp || p->HRTFave.size < irlength * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlength * sizeof(MYFLT), &p->HRTFave);
+    if (!p->num.auxp || p->num.size < irlength * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlength * sizeof(MYFLT), &p->num);
+    if (!p->denom.auxp || p->denom.size < irlength * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlength * sizeof(MYFLT), &p->denom);
+    if (!p->cohermags.auxp || p->cohermags.size < irlength * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlength * sizeof(MYFLT), &p->cohermags);
+    if (!p->coheru.auxp || p->coheru.size < irlength * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlength * sizeof(MYFLT), &p->coheru);
+    if (!p->coherv.auxp || p->coherv.size < irlength * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlength * sizeof(MYFLT), &p->coherv);
+
+    if (!p->filtout.auxp || p->filtout.size < irlength * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlength * sizeof(MYFLT), &p->filtout);
+    if (!p->filtuout.auxp || p->filtuout.size < irlength * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlength * sizeof(MYFLT), &p->filtuout);
+    if (!p->filtvout.auxp || p->filtvout.size < irlength * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlength * sizeof(MYFLT), &p->filtvout);
+    if (!p->filtpad.auxp || p->filtpad.size < irlengthpad * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlengthpad * sizeof(MYFLT), &p->filtpad);
+    if (!p->filtupad.auxp || p->filtupad.size < irlengthpad * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlengthpad * sizeof(MYFLT), &p->filtupad);
+    if (!p->filtvpad.auxp || p->filtvpad.size < irlengthpad * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlengthpad * sizeof(MYFLT), &p->filtvpad);
+
+    /* zero numerator and power buffer, as they accumulate */
+    memset(p->power.auxp, 0, irlength * sizeof(MYFLT));
+    memset(p->num.auxp, 0, irlength * sizeof(MYFLT));
+    /* no need to zero other above mem, as it will be filled in init */
+
+    if (!p->matrixlu.auxp || p->matrixlu.size < irlengthpad * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlengthpad * sizeof(MYFLT), &p->matrixlu);
+    if (!p->matrixrv.auxp || p->matrixrv.size < irlengthpad * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlengthpad * sizeof(MYFLT), &p->matrixrv);
+    if (!p->olmatrixlu.auxp || p->olmatrixlu.size < overlapsize * sizeof(MYFLT))
+      csound->AuxAlloc(csound, overlapsize * sizeof(MYFLT), &p->olmatrixlu);
+    if (!p->olmatrixrv.auxp || p->olmatrixrv.size < overlapsize * sizeof(MYFLT))
+      csound->AuxAlloc(csound, overlapsize * sizeof(MYFLT), &p->olmatrixrv);
+    if (!p->hrtfl.auxp || p->hrtfl.size < irlengthpad * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlengthpad * sizeof(MYFLT), &p->hrtfl);
+    if (!p->hrtfr.auxp || p->hrtfr.size < irlengthpad * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlengthpad * sizeof(MYFLT), &p->hrtfr);
+    if (!p->olhrtfl.auxp || p->olhrtfl.size < overlapsize * sizeof(MYFLT))
+      csound->AuxAlloc(csound, overlapsize * sizeof(MYFLT), &p->olhrtfl);
+    if (!p->olhrtfr.auxp || p->olhrtfr.size < overlapsize * sizeof(MYFLT))
+      csound->AuxAlloc(csound, overlapsize * sizeof(MYFLT), &p->olhrtfr);
+
+    memset(p->matrixlu.auxp, 0, irlengthpad * sizeof(MYFLT));
+    memset(p->matrixrv.auxp, 0, irlengthpad * sizeof(MYFLT));
+    memset(p->olmatrixlu.auxp, 0, overlapsize * sizeof(MYFLT));
+    memset(p->olmatrixrv.auxp, 0, overlapsize * sizeof(MYFLT));
+    memset(p->hrtfl.auxp, 0, irlengthpad * sizeof(MYFLT));
+    memset(p->hrtfr.auxp, 0, irlengthpad * sizeof(MYFLT));
+    memset(p->olhrtfl.auxp, 0, overlapsize * sizeof(MYFLT));
+    memset(p->olhrtfr.auxp, 0, overlapsize * sizeof(MYFLT));
+
+    if (!p->buffl.auxp || p->buffl.size < irlength * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlength * sizeof(MYFLT), &p->buffl);
+    if (!p->buffr.auxp || p->buffr.size < irlength * sizeof(MYFLT))
+      csound->AuxAlloc(csound, irlength * sizeof(MYFLT), &p->buffr);
+
+    memset(p->buffl.auxp, 0, irlength * sizeof(MYFLT));
+    memset(p->buffr.auxp, 0, irlength * sizeof(MYFLT));
+
+    /* buffers to store hrtf data */
+    bufflp = (MYFLT *)p->buffl.auxp;
+    buffrp = (MYFLT *)p->buffr.auxp;
+
+    /* 0 delay iterators */
+    p->u = p->v = p->w = p->x = p->y = p->z = 0;
+    p->ut = p->vt = p->wt = p->xt = p->yt = p->zt = 0;
+    p->utf1 = p->vtf1 = p->wtf1 = p->xtf1 = p->ytf1 = p->ztf1 = 0;
+    p->utf2 = p->vtf2 = p->wtf2 = p->xtf2 = p->ytf2 = p->ztf2 = 0;
+
+    /* calculate delayline lengths */
+    meanfporder = meanfp * (order + 1);
+    meanfpsamps = (int)(meanfp * sr);
+    meanfpordersamps = (int)(meanfporder * sr);
+
+    /* setup reverb time */
+    delaytime = rt60low > rt60high ? rt60low : rt60high;
+
+    /* in samples */
+    delaytime *= sr;
+    /* schroeder suggests 0.15 modes per Hz, so M should be > 0.15 t60 */
+    delaytime /= 7;
+
+    /* which no. of delay lines implies ave delay nearest to mfp(which is an
+       appropriate ave)? */
+    Msix = abs((int)(delaytime / 6) - meanfpsamps);
+    Mtwelve = abs((int)(delaytime / 12) - meanfpsamps);
+    Mtwentyfour = abs((int)(delaytime / 24) - meanfpsamps);
+    M = Mtwelve < Mtwentyfour ? (Msix < Mtwelve ? 6 : 12) : 24;
+    
+    csound->Message(csound, "%d \n", M);
+
+    delaytime /= M;
+    delaytimeint = (int)delaytime;
+
+    if(delaytimeint < meanfpsamps)
+      delaytimeint = meanfpsamps;
+
+    /*csound->Message(csound, "%d %d %d \n", M, delaytimeint, meanfpsamps);*/
+
+    /* maximum value, according to primes array and delay line allocation */
+    if(delaytimeint > 10112)
+      delaytimeint = 10112;
+
+    /* minimum values, according to primes array and delay line allocation */
+    if(M==6)
+      {
+        if(delaytimeint < 164)
+          delaytimeint = 164;
+      }
+    else if(M==12)
+      {
+        if(delaytimeint < 374)
+          delaytimeint = 374;
+      }
+    else if(M==24)
+      {
+        if(delaytimeint < 410)
+          delaytimeint = 410;
+      }
+   
+    /* allocate memory based on M: number of delays */
+    if (!p->delays.auxp || p->delays.size < M * sizeof(int))
+      csound->AuxAlloc(csound, M * sizeof(int), &p->delays);
+    if (!p->gi.auxp || p->gi.size < M * sizeof(MYFLT))
+      csound->AuxAlloc(csound, M * sizeof(MYFLT), &p->gi);
+    if (!p->ai.auxp || p->ai.size < M * sizeof(MYFLT))
+      csound->AuxAlloc(csound, M * sizeof(MYFLT), &p->ai);
+    if (!p->inmat.auxp || p->inmat.size < M * sizeof(MYFLT))
+      csound->AuxAlloc(csound, M * sizeof(MYFLT), &p->inmat);
+    if (!p->inmatlp.auxp || p->inmatlp.size < M * sizeof(MYFLT))
+      csound->AuxAlloc(csound, M * sizeof(MYFLT), &p->inmatlp);
+    if (!p->dellp.auxp || p->dellp.size < M * sizeof(MYFLT))
+      csound->AuxAlloc(csound, M * sizeof(MYFLT), &p->dellp);
+    if (!p->outmat.auxp || p->outmat.size < M * sizeof(MYFLT))
+      csound->AuxAlloc(csound, M * sizeof(MYFLT), &p->outmat);
+
+    memset(p->delays.auxp, 0, M * sizeof(int));
+    memset(p->gi.auxp, 0, M * sizeof(MYFLT));
+    memset(p->ai.auxp, 0, M * sizeof(MYFLT));
+    memset(p->inmat.auxp, 0, M * sizeof(MYFLT));
+    memset(p->inmatlp.auxp, 0, M * sizeof(MYFLT));
+    memset(p->dellp.auxp, 0, M * sizeof(MYFLT));
+    memset(p->outmat.auxp, 0, M * sizeof(MYFLT));
+
+    /* choose appropriate base delay times */
+    for(i = 0; i < 212; i++)
+      {
+        if(M == 6)
+          test = (i > 6 ? i : 6) - 6;
+        else if(M == 12)
+          test = (i > 15 ? i : 15) - 15;
+        else
+          test = (i > 16 ? i : 16) - 16;
+        
+        if(primes[i] > delaytimeint || primes[test] > meanfpordersamps)
+          {
+            basedelay = i - 1;
+            if(primes[test] > meanfpordersamps)
+              csound->Message(csound, "\nfdn delay > earlies del..., fixed!");
+            *p->idel = (meanfpordersamps - primes[test - 1]) / sr;
+            break;
+          }
+      }
+
+    delaysp = (int *)p->delays.auxp;
+
+    /* fill delay data, note this data can be filled locally */
+    delaysp[0] = primes[basedelay];
+    delaysp[1] = primes[basedelay + 3];
+    delaysp[2] = primes[basedelay - 3];
+    delaysp[3] = primes[basedelay + 6];
+    delaysp[4] = primes[basedelay - 6];
+    delaysp[5] = primes[basedelay + 9];
+    if(M ==12 || M==24)
+      {
+        delaysp[6] = primes[basedelay - 9];
+        delaysp[7] = primes[basedelay + 12];
+        delaysp[8] = primes[basedelay - 12];
+        delaysp[9] = primes[basedelay + 15];
+        delaysp[10] = primes[basedelay - 15];
+        delaysp[11] = primes[basedelay + 18];
+      }
+    if(M ==24)
+      {
+        /* fill in gaps... */
+        delaysp[12] = primes[basedelay + 1];
+        delaysp[13] = primes[basedelay - 1];
+        delaysp[14] = primes[basedelay + 4];
+        delaysp[15] = primes[basedelay - 4];
+        delaysp[16] = primes[basedelay + 7];
+        delaysp[17] = primes[basedelay - 7];
+        delaysp[18] = primes[basedelay + 10];
+        delaysp[19] = primes[basedelay - 10];
+        delaysp[20] = primes[basedelay + 13];
+        delaysp[21] = primes[basedelay - 13];
+        delaysp[22] = primes[basedelay + 16];
+        delaysp[23] = primes[basedelay - 16];
+      }
+
+    /* setup and zero delay lines */
+    if (!p->del1.auxp || p->del1.size < delaysp[0] * sizeof(MYFLT))
+      csound->AuxAlloc(csound, delaysp[0] * sizeof(MYFLT), &p->del1);
+    if (!p->del2.auxp || p->del2.size < delaysp[1] * sizeof(MYFLT))
+      csound->AuxAlloc(csound, delaysp[1] * sizeof(MYFLT), &p->del2);
+    if (!p->del3.auxp || p->del3.size < delaysp[2] * sizeof(MYFLT))
+      csound->AuxAlloc(csound, delaysp[2] * sizeof(MYFLT), &p->del3);
+    if (!p->del4.auxp || p->del4.size < delaysp[3] * sizeof(MYFLT))
+      csound->AuxAlloc(csound, delaysp[3] * sizeof(MYFLT), &p->del4);
+    if (!p->del5.auxp || p->del5.size < delaysp[4] * sizeof(MYFLT))
+      csound->AuxAlloc(csound, delaysp[4] * sizeof(MYFLT), &p->del5);
+    if (!p->del6.auxp || p->del6.size < delaysp[5] * sizeof(MYFLT))
+      csound->AuxAlloc(csound, delaysp[5] * sizeof(MYFLT), &p->del6);
+
+    memset(p->del1.auxp, 0, delaysp[0] * sizeof(MYFLT));
+    memset(p->del2.auxp, 0, delaysp[1] * sizeof(MYFLT));
+    memset(p->del3.auxp, 0, delaysp[2] * sizeof(MYFLT));
+    memset(p->del4.auxp, 0, delaysp[3] * sizeof(MYFLT));
+    memset(p->del5.auxp, 0, delaysp[4] * sizeof(MYFLT));
+    memset(p->del6.auxp, 0, delaysp[5] * sizeof(MYFLT));
+
+    /* if 12 delay lines required */
+    if(M == 12 || M==24)
+      {
+        if (!p->del1t.auxp || p->del1t.size < delaysp[6] * sizeof(MYFLT))
+          csound->AuxAlloc(csound, delaysp[6] * sizeof(MYFLT), &p->del1t);
+        if (!p->del2t.auxp || p->del2t.size < delaysp[7] * sizeof(MYFLT))
+          csound->AuxAlloc(csound, delaysp[7] * sizeof(MYFLT), &p->del2t);
+        if (!p->del3t.auxp || p->del3t.size < delaysp[8] * sizeof(MYFLT))
+          csound->AuxAlloc(csound, delaysp[8] * sizeof(MYFLT), &p->del3t);
+        if (!p->del4t.auxp || p->del4t.size < delaysp[9] * sizeof(MYFLT))
+          csound->AuxAlloc(csound, delaysp[9] * sizeof(MYFLT), &p->del4t);
+        if (!p->del5t.auxp || p->del5t.size < delaysp[10] * sizeof(MYFLT))
+          csound->AuxAlloc(csound, delaysp[10] * sizeof(MYFLT), &p->del5t);
+        if (!p->del6t.auxp || p->del6t.size < delaysp[11] * sizeof(MYFLT))
+          csound->AuxAlloc(csound, delaysp[11] * sizeof(MYFLT), &p->del6t);
+
+        memset(p->del1t.auxp, 0, delaysp[6] * sizeof(MYFLT));
+        memset(p->del2t.auxp, 0, delaysp[7] * sizeof(MYFLT));
+        memset(p->del3t.auxp, 0, delaysp[8] * sizeof(MYFLT));
+        memset(p->del4t.auxp, 0, delaysp[9] * sizeof(MYFLT));
+        memset(p->del5t.auxp, 0, delaysp[10] * sizeof(MYFLT));
+        memset(p->del6t.auxp, 0, delaysp[11] * sizeof(MYFLT));
+      }
+    if(M==24)
+      {
+        if (!p->del1tf.auxp || p->del1tf.size < delaysp[12] * sizeof(MYFLT))
+          csound->AuxAlloc(csound, delaysp[12] * sizeof(MYFLT), &p->del1tf);
+        if (!p->del2tf.auxp || p->del2tf.size < delaysp[13] * sizeof(MYFLT))
+          csound->AuxAlloc(csound, delaysp[13] * sizeof(MYFLT), &p->del2tf);
+        if (!p->del3tf.auxp || p->del3tf.size < delaysp[14] * sizeof(MYFLT))
+          csound->AuxAlloc(csound, delaysp[14] * sizeof(MYFLT), &p->del3tf);
+        if (!p->del4tf.auxp || p->del4tf.size < delaysp[15] * sizeof(MYFLT))
+          csound->AuxAlloc(csound, delaysp[15] * sizeof(MYFLT), &p->del4tf);
+        if (!p->del5tf.auxp || p->del5tf.size < delaysp[16] * sizeof(MYFLT))
+          csound->AuxAlloc(csound, delaysp[16] * sizeof(MYFLT), &p->del5tf);
+        if (!p->del6tf.auxp || p->del6tf.size < delaysp[17] * sizeof(MYFLT))
+          csound->AuxAlloc(csound, delaysp[17] * sizeof(MYFLT), &p->del6tf);
+        if (!p->del7tf.auxp || p->del7tf.size < delaysp[18] * sizeof(MYFLT))
+          csound->AuxAlloc(csound, delaysp[18] * sizeof(MYFLT), &p->del7tf);
+        if (!p->del8tf.auxp || p->del8tf.size < delaysp[19] * sizeof(MYFLT))
+          csound->AuxAlloc(csound, delaysp[19] * sizeof(MYFLT), &p->del8tf);
+        if (!p->del9tf.auxp || p->del9tf.size < delaysp[20] * sizeof(MYFLT))
+          csound->AuxAlloc(csound, delaysp[20] * sizeof(MYFLT), &p->del9tf);
+        if (!p->del10tf.auxp || p->del10tf.size < delaysp[21] * sizeof(MYFLT))
+          csound->AuxAlloc(csound, delaysp[21] * sizeof(MYFLT), &p->del10tf);
+        if (!p->del11tf.auxp || p->del11tf.size < delaysp[22] * sizeof(MYFLT))
+          csound->AuxAlloc(csound, delaysp[22] * sizeof(MYFLT), &p->del11tf);
+        if (!p->del12tf.auxp || p->del12tf.size < delaysp[23] * sizeof(MYFLT))
+          csound->AuxAlloc(csound, delaysp[23] * sizeof(MYFLT), &p->del12tf);
+        
+        memset(p->del1tf.auxp, 0, delaysp[12] * sizeof(MYFLT));
+        memset(p->del2tf.auxp, 0, delaysp[13] * sizeof(MYFLT));
+        memset(p->del3tf.auxp, 0, delaysp[14] * sizeof(MYFLT));
+        memset(p->del4tf.auxp, 0, delaysp[15] * sizeof(MYFLT));
+        memset(p->del5tf.auxp, 0, delaysp[16] * sizeof(MYFLT));
+        memset(p->del6tf.auxp, 0, delaysp[17] * sizeof(MYFLT));
+        memset(p->del7tf.auxp, 0, delaysp[18] * sizeof(MYFLT));
+        memset(p->del8tf.auxp, 0, delaysp[19] * sizeof(MYFLT));
+        memset(p->del9tf.auxp, 0, delaysp[20] * sizeof(MYFLT));
+        memset(p->del10tf.auxp, 0, delaysp[21] * sizeof(MYFLT));
+        memset(p->del11tf.auxp, 0, delaysp[22] * sizeof(MYFLT));
+        memset(p->del12tf.auxp, 0, delaysp[23] * sizeof(MYFLT));
+      }
+
+    powerp = (MYFLT *)p->power.auxp;
+    HRTFavep = (MYFLT *)p->HRTFave.auxp;
+    nump = (MYFLT *)p->num.auxp;
+    denomp = (MYFLT *)p->denom.auxp;
+    cohermagsp = (MYFLT *)p->cohermags.auxp;
+    coherup = (MYFLT *)p->coheru.auxp;
+    cohervp = (MYFLT *)p->coherv.auxp;
+
+    /* usually, just go through all files; in this case, just doubled due
+       to symmetry (with exceptions, as below) */
+    for(i = 0; i < 368; i ++)
+      {
+        /* if at a measurement where no doubling for symmetry necessary... */
+        if(i == 0 || i == 28 || i == 29 || i == 59 || i == 60 || i == 96  ||
+           i == 97 || i == 133 || i == 134 || i == 170 || i == 171 ||
+           i == 207 || i == 208 || i == 244  || i == 245 || i == 275 ||
+           i == 276 || i == 304  || i == 305 || i == 328 || i == 346 ||
+           i == 347 || i == 359 || i == 360 || i == 366 || i == 367)
+          skipdouble = 1;
+        else
+          skipdouble = 0;
+
+        for(j = 0; j < irlength; j ++)
+          {
+            bufflp[j] = fpindexl[skip + j];
+            buffrp[j] = fpindexr[skip + j];
+          }
+
+        /* deal with 0 hz and nyq: may be a negative real val, no need for
+           fabs() as squaring anyway! */
+        /* skipdouble: l = r */
+        if(skipdouble)
+          {
+            powerp[0] = powerp[0] + SQUARE(bufflp[0]);
+            powerp[1] = powerp[1] + SQUARE(bufflp[1]);
+          }
+        /* include both */
+        else
+          {
+            powerp[0] = powerp[0] + SQUARE(bufflp[0]) + SQUARE(buffrp[0]);
+            powerp[1] = powerp[1] + SQUARE(bufflp[1]) + SQUARE(buffrp[1]);
+          }
+        
+        for(j = 2; j < irlength; j += 2)
+          {
+            if(skipdouble)
+              powerp[j] = powerp[j] + (MYFLT)SQUARE(bufflp[j]);
+            else
+              powerp[j] = powerp[j] + (MYFLT)SQUARE(bufflp[j]) +
+                (MYFLT)SQUARE(buffrp[j]);
+            powerp[j + 1] = FL(0.0);
+          }
+        skip += irlength;
+        }
+
+    for(i = 0; i < irlength; i++)
+      HRTFavep[i] = SQRT(powerp[i] / FL(710.0));
+    
+    fpindexl = (float *)fpl->beginp;
+    fpindexr = (float *)fpr->beginp;
+    skip = 0;
+
+    /* coherence values */
+    for(i = 0; i< 368; i++)
+      {
+        /* if at a measurement where no doubling for symmetry necessary... */
+        if(i == 0 || i == 28 || i == 29 || i == 59 || i == 60 || i == 96  ||
+           i == 97 || i == 133 || i == 134 || i == 170 || i == 171 ||
+           i == 207 || i == 208 || i == 244  || i == 245 || i == 275 ||
+           i == 276 || i == 304  || i == 305 || i == 328 || i == 346 ||
+           i == 347 || i == 359 || i == 360 || i == 366 || i == 367)
+          skipdouble = 1;
+        else
+          skipdouble = 0;
+
+        for(j = 0; j < irlength; j ++)
+          {
+            bufflp[j] = fpindexl[skip + j];
+            buffrp[j] = fpindexr[skip + j];
+          }
+        
+        /* back to rectangular to find numerator: need complex nos */
+        /* 0Hz and Nyq ok as real */
+        if(skipdouble)
+          {
+            nump[0] = nump[0] + (bufflp[0] * buffrp[0]);
+            nump[1] = nump[1] + (bufflp[1] * buffrp[1]);
+          }
+        else
+          {
+            nump[0] = nump[0] + (bufflp[0] * buffrp[0]) + (buffrp[0] * bufflp[0]);
+            nump[1] = nump[1] + (bufflp[1] * buffrp[1]) + (buffrp[1] * bufflp[1]);
+          }
+
+        /* complex multiplication */
+        /* (a + i b)(c + i d) */
+        /* = (a c - b d) + i(a d + b c) */
+        /* conjugate: d becomes -d ->
+           = (a c + b d) + i(- a d + b c) */
+        /* doing l * conj r and r * conj l here, as dataset symmetrical...
+           for non symmetrical, just go through all and do l * conj r */
+        for(j = 2; j < irlength; j += 2)
+          {
+            rel = bufflp[j] * COS(bufflp[j + 1]);
+            iml = bufflp[j] * SIN(bufflp[j + 1]);
+            rer = buffrp[j] * COS(buffrp[j + 1]);
+            imr = buffrp[j] * SIN(buffrp[j + 1]);
+            if(skipdouble)
+              {
+                nump[j] = nump[j] + ((rel * rer) + (iml * imr));
+                nump[j + 1] = nump[j + 1] + ((rel * -imr) + (iml * rer));
+              }
+            else
+              {
+                nump[j] = nump[j] + ((rel * rer) + (iml * imr)) +
+                  ((rer * rel) + (imr * iml));
+                nump[j + 1] = nump[j + 1] + ((rel * -imr) + (iml * rer)) +
+                  ((rer * -iml) + (imr * rel));
+              }
+          }
+        skip += irlength;
+      }
+
+    /* 0 & nyq = fabs() for mag... */
+    nump[0] = FABS(nump[0]);
+    nump[1] = FABS(nump[1]);
+
+    /* magnitudes of sum of conjugates */
+    for(i = 2; i < irlength; i += 2)
+      {
+        retemp = nump[i];
+        imtemp = nump[i + 1];
+        nump[i] = SQRT(SQUARE(retemp) + SQUARE(imtemp));
+        nump[i + 1] = FL(0.0);
+      }
+
+    /* sqrt (powl * powr) powl = powr in symmetric case, so just power[] needed */
+    for(i = 0; i < irlength; i++)
+      denomp[i] = powerp[i];
+
+    /* coherence values */
+    cohermagsp[0] = nump[0] / denomp[0];
+    cohermagsp[1] = nump[1] / denomp[1];
+
+    for(i = 2; i < irlength; i += 2)
+      {
+        cohermagsp[i] = nump[i] / denomp[i];
+        cohermagsp[i+1] = FL(0.0);
+      }
+
+    /* coherence formula */
+    coherup[0] = SQRT((FL(1.0) + cohermagsp[0]) / FL(2.0));
+    coherup[1] = SQRT((FL(1.0) + cohermagsp[1]) / FL(2.0));
+    cohervp[0] = SQRT((FL(1.0) - cohermagsp[0]) / FL(2.0));
+    cohervp[1] = SQRT((FL(1.0) - cohermagsp[1]) / FL(2.0));
+
+    for(i = 2; i < irlength; i += 2)
+      {
+        coherup[i] = SQRT((FL(1.0) + cohermagsp[i]) / FL(2.0));
+        cohervp[i] = SQRT((FL(1.0) - cohermagsp[i]) / FL(2.0));
+        coherup[i + 1] = FL(0.0);
+        cohervp[i + 1] = FL(0.0);
+      }
+
+    /* no need to go back to rectangular for fft, as phase = 0, so same */
+    csound->InverseRealFFT(csound, HRTFavep, irlength);
+    csound->InverseRealFFT(csound, coherup, irlength);
+    csound->InverseRealFFT(csound, cohervp, irlength);
+
+    filtoutp = (MYFLT *)p->filtout.auxp;
+    filtuoutp = (MYFLT *)p->filtuout.auxp;
+    filtvoutp = (MYFLT *)p->filtvout.auxp;
+    filtpadp = (MYFLT *)p->filtpad.auxp;
+    filtupadp = (MYFLT *)p->filtupad.auxp;
+    filtvpadp = (MYFLT *)p->filtvpad.auxp;
+
+    /* shift */
+    for(i = 0; i < irlength; i++)
+      {
+        filtoutp[i] = HRTFavep[(i + (irlength / 2)) % irlength];
+        filtuoutp[i] = coherup[(i + (irlength / 2)) % irlength];
+        filtvoutp[i] = cohervp[(i + (irlength / 2)) % irlength];
+      }
+
+    for(i = 0; i < irlength; i++)
+      {
+        filtpadp[i] = filtoutp[i];
+        filtupadp[i] = filtuoutp[i];
+        filtvpadp[i] = filtvoutp[i];
+      }
+    for(i = irlength; i < irlengthpad; i++)
+      {
+        filtpadp[i] = FL(0.0);
+        filtupadp[i] = FL(0.0);
+        filtvpadp[i] = FL(0.0);
+      }
+
+    csound->RealFFT(csound, filtpadp, irlengthpad);
+    csound->RealFFT(csound, filtupadp, irlengthpad);
+    csound->RealFFT(csound, filtvpadp, irlengthpad);
+
+    T = FL(1.0) / sr;
+
+    gip = (MYFLT *)p->gi.auxp;
+    aip = (MYFLT *)p->ai.auxp;
+
+    do
+      {
+        double alphsq;
+        alpha = rt60high / rt60low;
+        clipcheck = 0;
+        alphsq = SQUARE(alpha);
+        p->b = (FL(1.0) - alpha) / (FL(1.0) + alpha);
+        aconst = (LOG(FL(10.0)) / FL(4.0)) * (FL(1.0) - (FL(1.0) / alphsq));
+        for(i = 0; i < M; i++)
+          {
+            exp = (-FL(3.0) * delaysp[i] * T) / rt60low;
+            gip[i] = POWER(FL(10.0), exp);
+            aip[i] =  exp * aconst;
+
+            if(aip[i] > FL(0.99) || aip[i] < -FL(0.99))
+              {
+                csound->Message(csound, Str("\nwarning, approaching instability, fixed with "
+                           "a flat late reverb!"));
+                clipcheck = 1;
+                if(aip[i] > 0.99)
+                  rt60high = rt60low;
+                else
+                  rt60low = rt60high;
+                break;
+              }
+
+          }
+      }while(clipcheck);
+
+    /* initialise counter and filter delays */
+    p->counter = 0;
+    p->inoldl = 0;
+    p->inoldr = 0;
+    p->M = M;
+
+    return OK;
+}
+
+int hrtfreverb_process(CSOUND *csound, hrtfreverb *p)
+{
+    int i, j, k, n = csound->ksmps;
+
+    /* signals in, out */
+    MYFLT *in = p->insig, sigin;
+    MYFLT *outl = p->outsigl;
+    MYFLT *outr = p->outsigr;
+
+    /* pointers to delay data */
+    MYFLT *del1p, *del2p, *del3p, *del4p, *del5p, *del6p;
+    MYFLT *del1tp=NULL, *del2tp=NULL, *del3tp=NULL,
+          *del4tp=NULL, *del5tp=NULL, *del6tp=NULL;
+    MYFLT *del1tfp=NULL, *del2tfp=NULL, *del3tfp=NULL, *del4tfp=NULL,
+          *del5tfp=NULL, *del6tfp=NULL, *del7tfp=NULL, *del8tfp=NULL,
+          *del9tfp=NULL, *del10tfp=NULL, *del11tfp=NULL, *del12tfp=NULL;
+    int *delaysp;
+
+    /* matrix manipulation */
+    MYFLT *inmatp, *inmatlpp, *dellpp, *outmatp;
+
+    /* delay line iterators */
+    int u, v, w, x, y, z;
+    int ut, vt, wt, xt, yt, zt;
+    int utf1=0, vtf1=0, wtf1=0, xtf1=0, ytf1=0, ztf1=0;
+    int utf2=0, vtf2=0, wtf2=0, xtf2=0, ytf2=0, ztf2=0;
+
+    /* number of delays */
+    int M = p->M;
+
+    /* FIR temp variables */
+    MYFLT tonall, tonalr;
+    MYFLT b = p->b;
+
+    /* IIR variables */
+    MYFLT *gip, *aip;
+
+    /* counter */
+    int counter = p->counter;
+
+    /* matrix/coher and hrtf filter buffers, with overlap add buffers */
+    MYFLT *matrixlup = (MYFLT *)p->matrixlu.auxp;
+    MYFLT *matrixrvp = (MYFLT *)p->matrixrv.auxp;
+    MYFLT *olmatrixlup = (MYFLT *)p->olmatrixlu.auxp;
+    MYFLT *olmatrixrvp = (MYFLT *)p->olmatrixrv.auxp;
+    MYFLT *hrtflp = (MYFLT *)p->hrtfl.auxp;
+    MYFLT *hrtfrp = (MYFLT *)p->hrtfr.auxp;
+    MYFLT *olhrtflp = (MYFLT *)p->olhrtfl.auxp;
+    MYFLT *olhrtfrp = (MYFLT *)p->olhrtfr.auxp;
+
+    /* processing lengths */
+    int irlength = p->irlength;
+    int irlengthpad = p->irlengthpad;
+    int overlapsize = p->overlapsize;
+
+    /* 1st order FIR mem */
+    MYFLT inoldl = p->inoldl;
+    MYFLT inoldr = p->inoldr;
+
+    /* filters, created in INIT */
+    MYFLT *filtpadp = (MYFLT *)p->filtpad.auxp;
+    MYFLT *filtupadp = (MYFLT *)p->filtupad.auxp;
+    MYFLT *filtvpadp = (MYFLT *)p->filtvpad.auxp;
+
+    MYFLT sr = p->sr;
+
+    del1p = (MYFLT *)p->del1.auxp;
+    del2p = (MYFLT *)p->del2.auxp;
+    del3p = (MYFLT *)p->del3.auxp;
+    del4p = (MYFLT *)p->del4.auxp;
+    del5p = (MYFLT *)p->del5.auxp;
+    del6p = (MYFLT *)p->del6.auxp;
+
+    if(M==12 || M==24)
+      {
+        del1tp = (MYFLT *)p->del1t.auxp;
+        del2tp = (MYFLT *)p->del2t.auxp;
+        del3tp = (MYFLT *)p->del3t.auxp;
+        del4tp = (MYFLT *)p->del4t.auxp;
+        del5tp = (MYFLT *)p->del5t.auxp;
+        del6tp = (MYFLT *)p->del6t.auxp;
+      }
+    if(M==24)
+      {
+        del1tfp = (MYFLT *)p->del1tf.auxp;
+        del2tfp = (MYFLT *)p->del2tf.auxp;
+        del3tfp = (MYFLT *)p->del3tf.auxp;
+        del4tfp = (MYFLT *)p->del4tf.auxp;
+        del5tfp = (MYFLT *)p->del5tf.auxp;
+        del6tfp = (MYFLT *)p->del6tf.auxp;
+        del7tfp = (MYFLT *)p->del7tf.auxp;
+        del8tfp = (MYFLT *)p->del8tf.auxp;
+        del9tfp = (MYFLT *)p->del9tf.auxp;
+        del10tfp = (MYFLT *)p->del10tf.auxp;
+        del11tfp = (MYFLT *)p->del11tf.auxp;
+        del12tfp = (MYFLT *)p->del12tf.auxp;
+      }
+
+    delaysp = (int *)p->delays.auxp;
+
+    inmatp = (MYFLT *)p->inmat.auxp;
+    inmatlpp = (MYFLT *)p->inmatlp.auxp;
+    dellpp = (MYFLT *)p->dellp.auxp;
+    outmatp = (MYFLT *)p->outmat.auxp;
+    
+    gip = (MYFLT *)p->gi.auxp;
+    aip = (MYFLT *)p->ai.auxp;
+
+    /* point to structure */
+    u = p->u;
+    v = p->v;
+    w = p->w;
+    x = p->x;
+    y = p->y;
+    z = p->z;
+    if(M==12 || M==24)
+      {
+        ut = p->ut;
+        vt = p->vt;
+        wt = p->wt;
+        xt = p->xt;
+        yt = p->yt;
+        zt = p->zt;
+      }
+    else {
+      printf("Should not get here\n");
+      ut = vt = wt = xt = yt = zt = 0;
+    }
+    if(M==24)
+      {
+        utf1 = p->utf1;
+        vtf1 = p->vtf1;
+        wtf1 = p->wtf1;
+        xtf1 = p->xtf1;
+        ytf1 = p->ytf1;
+        ztf1 = p->ztf1;
+        utf2 = p->utf2;
+        vtf2 = p->vtf2;
+        wtf2 = p->wtf2;
+        xtf2 = p->xtf2;
+        ytf2 = p->ytf2;
+        ztf2 = p->ztf2;
+      }
+
+    /* processing loop */
+    for(i=0; i < n; i++)
+      {
+        /* tonal filter: 1 - b pow(z,-1) / 1 - b
+           1/1-b in - b/1-b in(old) */
+        /* dot product of l and r = 0 for uncorrelated */
+        tonall = (del1p[u] - del2p[v] + del3p[w] - del4p[x] + del5p[y] - del6p[z]);
+        if(M==12 || M==24)
+          tonall += (del1tp[ut] - del2tp[vt] + del3tp[wt] -
+                     del4tp[xt] + del5tp[yt] - del6tp[zt]);
+        if(M==24)
+          tonall += (del1tfp[utf1] - del2tfp[vtf1] + del3tfp[wtf1] -
+                     del4tfp[xtf1] + del5tfp[ytf1] - del6tfp[ztf1] +
+                     del7tfp[utf2] - del8tfp[vtf2] + del9tfp[wtf2] -
+                     del10tfp[xtf2] + del11tfp[ytf2] - del12tfp[ztf2]);
+        matrixlup[counter] = (((FL(1.0) / (FL(1.0) - b)) * tonall) -
+                              ((b / (FL(1.0) - b)) * inoldl));
+        matrixlup[counter] /= M;
+        inoldl = tonall;
+
+        tonalr = (del1p[u] + del2p[v] + del3p[w] + del4p[x] + del5p[y] + del6p[z]);
+        if(M==12 || M==24)
+          tonalr += (del1tp[ut] + del2tp[vt] + del3tp[wt] +
+                     del4tp[xt] + del5tp[yt] + del6tp[zt]);
+        if(M==24)
+          tonalr += (del1tfp[utf1] - del2tfp[vtf1] + del3tfp[wtf1] -
+                     del4tfp[xtf1] + del5tfp[ytf1] - del6tfp[ztf1] +
+                     del7tfp[utf2] - del8tfp[vtf2] + del9tfp[wtf2] -
+                     del10tfp[xtf2] + del11tfp[ytf2] - del12tfp[ztf2]);
+        matrixrvp[counter] = (((FL(1.0) / (FL(1.0) - b)) * tonalr) -
+                              ((b / (FL(1.0) - b)) * inoldr));
+        matrixrvp[counter] /= M;
+        inoldr = tonalr;
+
+        /* inputs from del lines (need more for larger fdn) */
+        inmatp[0] = del1p[u];
+        inmatp[1] = del2p[v];
+        inmatp[2] = del3p[w];
+        inmatp[3] = del4p[x];
+        inmatp[4] = del5p[y];
+        inmatp[5] = del6p[z];
+
+        if(M==12 || M==24)
+          {
+            inmatp[6] = del1tp[ut];
+            inmatp[7] = del2tp[vt];
+            inmatp[8] = del3tp[wt];
+            inmatp[9] = del4tp[xt];
+            inmatp[10] = del5tp[yt];
+            inmatp[11] = del6tp[zt];
+          }
+        if(M==24)
+          {
+            inmatp[12] = del1tfp[utf1];
+            inmatp[13] = del2tfp[vtf1];
+            inmatp[14] = del3tfp[wtf1];
+            inmatp[15] = del4tfp[xtf1];
+            inmatp[16] = del5tfp[ytf1];
+            inmatp[17] = del6tfp[ztf1];
+            inmatp[18] = del7tfp[utf2];
+            inmatp[19] = del8tfp[vtf2];
+            inmatp[20] = del9tfp[wtf2];
+            inmatp[21] = del10tfp[xtf2];
+            inmatp[22] = del11tfp[ytf2];
+            inmatp[23] = del12tfp[ztf2];
+          }
+
+        /* low pass each
+           filter:
+           gi ( 1 - ai / 1 - ai pow(z,-1)
+           op = gi - gi ai x(n) + ai del
+           del = op */
+                
+        for(j = 0; j < M; j++)
+          {
+            inmatlpp[j] = (gip[j] * (1 - aip[j]) * inmatp[j]) +
+              (aip[j] * dellpp[j]);
+            dellpp[j] = inmatlpp[j];
+          }
+
+        /* matrix mult: multiplying a vector by a matrix:
+           embedded householders cause stability issues,
+           as reported by Murphy...*/
+        for(j = 0; j < M; j++)
+          {
+            outmatp[j] = FL(0.0);
+            for(k = 0; k < M; k++)
+              {
+                if(M==24)
+                  outmatp[j] += (matrix24[j * M + k] * inmatlpp[k]);
+                else if(M==12)
+                  outmatp[j] += (matrix12[j * M + k] * inmatlpp[k]);
+                else
+                  outmatp[j] += (matrix6[j * M + k] * inmatlpp[k]);
+              }
+          }
+
+        sigin = in[i] * (FL(32767.0) / csound->e0dbfs);
+
+        del1p[u] = outmatp[0] + sigin;
+        del2p[v] = outmatp[1] + sigin;
+        del3p[w] = outmatp[2] + sigin;
+        del4p[x] = outmatp[3] + sigin;
+        del5p[y] = outmatp[4] + sigin;
+        del6p[z] = outmatp[5] + sigin;
+        if(M == 12 || M == 24)
+          {
+            del1tp[ut] = outmatp[6] + sigin;
+            del2tp[vt] = outmatp[7] + sigin;
+            del3tp[wt] = outmatp[8] + sigin;
+            del4tp[xt] = outmatp[9] + sigin;
+            del5tp[yt] = outmatp[10] + sigin;
+            del6tp[zt] = outmatp[11] + sigin;
+          }
+        if(M == 24)
+          {
+            del1tfp[utf1] = outmatp[12] + sigin;
+            del2tfp[vtf1] = outmatp[13] + sigin;
+            del3tfp[wtf1] = outmatp[14] + sigin;
+            del4tfp[xtf1] = outmatp[15] + sigin;
+            del5tfp[ytf1] = outmatp[16] + sigin;
+            del6tfp[ztf1] = outmatp[17] + sigin;
+            del7tfp[utf2] = outmatp[18] + sigin;
+            del8tfp[vtf2] = outmatp[19] + sigin;
+            del9tfp[wtf2] = outmatp[20] + sigin;
+            del10tfp[xtf2] = outmatp[21] + sigin;
+            del11tfp[ytf2] = outmatp[22] + sigin;
+            del12tfp[ztf2] = outmatp[23] + sigin;
+          }
+                
+        u = (u != delaysp[0] - 1 ? u + 1 : 0);
+        v = (v != delaysp[1] - 1 ? v + 1 : 0);
+        w = (w != delaysp[2] - 1 ? w + 1 : 0);
+        x = (x != delaysp[3] - 1 ? x + 1 : 0);
+        y = (y != delaysp[4] - 1 ? y + 1 : 0);
+        z = (z != delaysp[5] - 1 ? z + 1 : 0);
+                
+        if(M == 12 || M == 24)
+          {
+            ut = (ut != delaysp[6] - 1 ? ut + 1 : 0);
+            vt = (vt != delaysp[7] - 1 ? vt + 1 : 0);
+            wt = (wt != delaysp[8] - 1 ? wt + 1 : 0);
+            xt = (xt != delaysp[9] - 1 ? xt + 1 : 0);
+            yt = (yt != delaysp[10] - 1 ? yt + 1 : 0);
+            zt = (zt != delaysp[11] - 1 ? zt + 1 : 0);
+          }
+        if(M == 24)
+          {
+            utf1 = (utf1 != delaysp[12] - 1 ? utf1 + 1 : 0);
+            vtf1 = (vtf1 != delaysp[13] - 1 ? vtf1 + 1 : 0);
+            wtf1 = (wtf1 != delaysp[14] - 1 ? wtf1 + 1 : 0);
+            xtf1 = (xtf1 != delaysp[15] - 1 ? xtf1 + 1 : 0);
+            ytf1 = (ytf1 != delaysp[16] - 1 ? ytf1 + 1 : 0);
+            ztf1 = (ztf1 != delaysp[17] - 1 ? ztf1 + 1 : 0);
+            utf2 = (utf2 != delaysp[18] - 1 ? utf2 + 1 : 0);
+            vtf2 = (vtf2 != delaysp[19] - 1 ? vtf2 + 1 : 0);
+            wtf2 = (wtf2 != delaysp[20] - 1 ? wtf2 + 1 : 0);
+            xtf2 = (xtf2 != delaysp[21] - 1 ? xtf2 + 1 : 0);
+            ytf2 = (ytf2 != delaysp[22] - 1 ? ytf2 + 1 : 0);
+            ztf2 = (ztf2 != delaysp[23] - 1 ? ztf2 + 1 : 0);
+          }
+
+        /* output, increment counter */
+        //                      outl[i] = hrtflp[counter];
+        //                      outr[i] = hrtfrp[counter];
+                
+        outl[i] = hrtflp[counter] * (csound->e0dbfs / FL(32767.0));
+        outr[i] = hrtfrp[counter] * (csound->e0dbfs / FL(32767.0));
+
+        counter++;
+
+        if(counter == irlength)
+          {
+            for(j = irlength; j < irlengthpad; j++)
+              {
+                matrixlup[j] = FL(0.0);
+                matrixrvp[j] = FL(0.0);
+              }
+
+            /* fft result from matrices */
+            csound->RealFFT(csound, matrixlup, irlengthpad);
+            csound->RealFFT(csound, matrixrvp, irlengthpad);
+
+            /* convolution: spectral multiplication */
+            csound->RealFFTMult(csound, matrixlup, matrixlup,
+                                filtupadp, irlengthpad, FL(1.0));
+            csound->RealFFTMult(csound, matrixrvp, matrixrvp,
+                                filtvpadp, irlengthpad, FL(1.0));
+
+            /* ifft result */
+            csound->InverseRealFFT(csound, matrixlup, irlengthpad);
+            csound->InverseRealFFT(csound, matrixrvp, irlengthpad);
+
+            for(j = 0; j < irlength; j++)
+              {
+                matrixlup[j] = matrixlup[j] + (j < overlapsize ?
+                                               olmatrixlup[j] : FL(1.0));
+                matrixrvp[j] = matrixrvp[j] + (j < overlapsize ?
+                                               olmatrixrvp[j] : FL(1.0));
+              }
+
+            /* store overlap for next time */
+            for(j = 0; j < overlapsize; j++)
+              {
+                olmatrixlup[j] = matrixlup[j + irlength];
+                olmatrixrvp[j] = matrixrvp[j + irlength];
+              }
+
+            /* coherence formula */
+            for(j = 0; j < irlength; j++)
+              {
+                hrtflp[j] = matrixlup[j] + matrixrvp[j];
+                hrtfrp[j] = matrixlup[j] - matrixrvp[j];
+              }
+
+            for(j = irlength; j < irlengthpad; j++)
+              {
+                hrtflp[j] = FL(0.0);
+                hrtfrp[j] = FL(0.0);
+              }
+
+            /* fft result from matrices */
+            csound->RealFFT(csound, hrtflp, irlengthpad);
+            csound->RealFFT(csound, hrtfrp, irlengthpad);
+
+            /* convolution: spectral multiplication */
+            csound->RealFFTMult(csound, hrtflp, hrtflp, filtpadp,
+                                irlengthpad, FL(1.0));
+            csound->RealFFTMult(csound, hrtfrp, hrtfrp, filtpadp,
+                                irlengthpad, FL(1.0));
+
+            /* ifft result */
+            csound->InverseRealFFT(csound, hrtflp, irlengthpad);
+            csound->InverseRealFFT(csound, hrtfrp, irlengthpad);
+
+            /* scale */
+            for(j = 0; j < irlengthpad; j++)
+              {
+                hrtflp[j] = hrtflp[j]/(sr / FL(38000.0));
+                hrtfrp[j] = hrtfrp[j]/(sr / FL(38000.0));
+              }
+                    
+            for(j = 0; j < irlength; j++)
+              {
+                hrtflp[j] = hrtflp[j] + (j < overlapsize ?
+                                         olhrtflp[j] : FL(0.0));
+                hrtfrp[j] = hrtfrp[j] + (j < overlapsize ?
+                                         olhrtfrp[j] : FL(0.0));
+              }
+
+            /* store overlap for next time */
+            for(j = 0; j < overlapsize; j++)
+              {
+                olhrtflp[j] = hrtflp[j + irlength];
+                olhrtfrp[j] = hrtfrp[j + irlength];
+              }
+
+            counter = 0;
+          }       /* end of irlength loop */
+      }       /* end of ksmps loop */
+        
+    /* keep for next time */
+    p->counter = counter;
+
+    p->u = u;
+    p->v = v;
+    p->w = w;
+    p->x = x;
+    p->y = y;
+    p->z = z;
+    if(M == 12 || M == 24)
+      {
+        p->ut = ut;
+        p->vt = vt;
+        p->wt = wt;
+        p->xt = xt;
+        p->yt = yt;
+        p->zt = zt;
+      }
+    if(M == 24)
+      {
+        p->utf1 = utf1;
+        p->vtf1 = vtf1;
+        p->wtf1 = wtf1;
+        p->xtf1 = xtf1;
+        p->ytf1 = ytf1;
+        p->ztf1 = ztf1;
+        p->utf2 = utf2;
+        p->vtf2 = vtf2;
+        p->wtf2 = wtf2;
+        p->xtf2 = xtf2;
+        p->ytf2 = ytf2;
+        p->ztf2 = ztf2;
+      }
+        
+    p->inoldl = inoldl;
+    p->inoldr = inoldr;
+
+    return OK;
+}
+
+static OENTRY hrtfreverb_localops[] =
+{
+        {
+                "hrtfreverb", sizeof(hrtfreverb), 5, "aai", "aiiSSoop",
+                (SUBR)hrtfreverb_init, NULL, (SUBR)hrtfreverb_process
+        }
+};
+
+LINKAGE1(hrtfreverb_localops)
diff --git a/Opcodes/imageOpcodes.c b/Opcodes/imageOpcodes.c
index 1b06981..6e62156 100644
--- a/Opcodes/imageOpcodes.c
+++ b/Opcodes/imageOpcodes.c
@@ -84,7 +84,7 @@ static Image * __doOpenImage(char * filename, CSOUND *csound)
     unsigned char header[8];
     png_structp png_ptr;
     png_infop info_ptr;
-    png_infop end_ptr;
+    /* png_infop end_ptr; */
     int is_png;
     png_uint_32 width, height, rowbytes;
     int bit_depth;
@@ -128,13 +128,13 @@ static Image * __doOpenImage(char * filename, CSOUND *csound)
       return NULL;
     }
 
-    end_ptr = png_create_info_struct(png_ptr);
-    if (UNLIKELY(!end_ptr)) {
-      png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp) NULL);
-      csound->InitError(csound, Str("imageload: out of memory.\n"));
-      csound->FileClose(csound, fd);
-      return NULL;
-    }
+    /* end_ptr = png_create_info_struct(png_ptr); */
+    /* if (UNLIKELY(!end_ptr)) { */
+    /*   png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp) NULL); */
+    /*   csound->InitError(csound, Str("imageload: out of memory.\n")); */
+    /*   csound->FileClose(csound, fd); */
+    /*   return NULL; */
+    /* } */
 
     png_init_io(png_ptr, fp);
     png_set_sig_bytes(png_ptr, hs);
@@ -612,7 +612,7 @@ static int imagefree (CSOUND *csound, IMGSAVE * p)
 
 #define S(x)    sizeof(x)
 
-static OENTRY localops[] = {
+static OENTRY image_localops[] = {
   { "imageload",  S(IMGLOAD),  1, "i", "S",   (SUBR)imageload, NULL, NULL   },
   { "imagecreate",S(IMGCREATE),1, "i", "ii",  (SUBR)imagecreate, NULL, NULL },
   { "imagesize",  S(IMGSIZE),  1, "ii", "i",  (SUBR)imagesize, NULL, NULL   },
@@ -622,8 +622,8 @@ static OENTRY localops[] = {
     (SUBR)imagesetpixel, (SUBR)imagesetpixel, (SUBR)imagesetpixel_a   },
   { "imagesave",  S(IMGSAVE),  1, "", "iS",   (SUBR)imagesave, NULL, NULL   },
   { "imagefree",  S(IMGFREE),  1, "", "i",    (SUBR)imagefree, NULL, NULL   },
-
 };
 
 
-LINKAGE
+LINKAGE1(image_localops)
+
diff --git a/Opcodes/jackTransport.c b/Opcodes/jackTransport.c
index 2fd53fb..10cc206 100644
--- a/Opcodes/jackTransport.c
+++ b/Opcodes/jackTransport.c
@@ -88,11 +88,10 @@ static int jack_transport (CSOUND *csound, JACKTRANSPORT * p)
 
 #define S(x)    sizeof(x)
 
-static OENTRY localops[] = {
+static OENTRY jackTransport_localops[] = {
 
   { "jacktransport",  S(JACKTRANSPORT),  1, "", "ij",
                        (SUBR)jack_transport, NULL, NULL   },
-
 };
 
-LINKAGE
+LINKAGE1(jackTransport_localops)
diff --git a/Opcodes/jacko.cpp b/Opcodes/jacko.cpp
index 0b7f265..2cb5657 100644
--- a/Opcodes/jacko.cpp
+++ b/Opcodes/jacko.cpp
@@ -456,14 +456,16 @@ struct JackoNoteOut;
 struct JackoTransport;
 struct JackoState;
 
+#if 0
 static JackoState *getJackoState(CSOUND *csound);
+static void *closeRoutine(void *userdata);
+#endif
 
-static int JackProcessCallback_(jack_nframes_t frames,
-                                void *data);
-
+static std::map<CSOUND *, JackoState *> jackoStatesForCsoundInstances;
 static void SenseEventCallback_(CSOUND *csound,
                                 void *data);
-
+static int JackProcessCallback_(jack_nframes_t frames,
+                                void *data);
 static int midiDeviceOpen_(CSOUND *csound,
                            void **userData,
                            const char *devName);
@@ -473,11 +475,6 @@ static int midiRead_(CSOUND *csound,
                      unsigned char *midiData,
                      int nbytes);
 
-static void *closeRoutine(void *userdata);
-
-
-static std::map<CSOUND *, JackoState *> jackoStatesForCsoundInstances;
-
 /**
  * Manages all state relevant to the global
  * interaction between Jack and Csound for a particular
@@ -517,218 +514,230 @@ struct JackoState
     jackActive(false),
     csoundActive(true)
   {
-    int result = 0;
-    csound = csound_;
-    csoundFramesPerTick = csound->GetKsmps(csound);
-    csoundFramesPerSecond = csound->GetSr(csound);
-    result = pthread_mutex_init(&conditionMutex, 0);
-    result = pthread_cond_init(&csoundCondition, 0);
-    result = pthread_cond_init(&closeCondition, 0);
-    // Create a thread to run the close routine. It will immediately block until it is signaled.
-    result = pthread_create(&closeThread, 0, &JackoState::closeRoutine_, this);
-    std::memset(&jack_position, 0, sizeof(jack_position_t));
-    jack_options_t jack_options = (jack_options_t) JackOpenOptions;
-    jack_status_t status = jack_status_t(0);
-    jackClient = jack_client_open(clientName,
-                                  jack_options,
-                                  &status,
-                                  serverName);
-    if (!jackClient) {
-      csound->Message(csound, Str("Could not create Jack client \"%s\" -- is Jack server \"%s\" running? Status: %d\n"),
-                      clientName,
-                      serverName,
-                      status);
-      csound->LongJmp(csound, 1);
-    } else {
-      csound->Message(csound, Str("Created Jack client \"%s\" for Jack server \"%s\".\n"), clientName, serverName);
-    }
-    jackFramesPerTick = jack_get_buffer_size(jackClient);
-    if (csoundFramesPerTick != jackFramesPerTick) {
-      csound->Message(csound,
-                      Str("Jack buffer size %d != Csound ksmps %d, exiting...\n"),
-                      jackFramesPerTick,
-                      csoundFramesPerTick);
-      csound->LongJmp(csound, 1);
-    }
-    jackFramesPerSecond = jack_get_sample_rate(jackClient);
-    if (csoundFramesPerSecond != jackFramesPerSecond) {
-      csound->Message(csound,
-                      Str("Jack sampling rate %d != Csound sr %d, exiting...\n"),
-                      jackFramesPerSecond,
-                      csoundFramesPerSecond);
-      csound->LongJmp(csound, 1);
-    }
-    jackoStatesForCsoundInstances[csound] = this;
-    csound->RegisterSenseEventCallback(csound, SenseEventCallback_, this);
-    result = jack_set_process_callback(jackClient, JackProcessCallback_, this);
-    result = jack_activate(jackClient);
-    if (!result) {
-      csound->Message(csound,
-                      Str("Activated Jack client \"%s\".\n"),
-                      jack_get_client_name(jackClient));
-    } else {
-      csound->Message(csound,
-                      Str("Failed to activate Jack client \"%s\": status %d.\n"),
-                      jack_get_client_name(jackClient),
-                      result);
-      return;
-    }
-    csound->SetExternalMidiInOpenCallback(csound, midiDeviceOpen_);
-    csound->SetExternalMidiReadCallback(csound, midiRead_);
-    jackInitialized = true;
+      int result = 0;
+      csound = csound_;
+      csoundFramesPerTick = csound->GetKsmps(csound);
+      csoundFramesPerSecond = csound->GetSr(csound);
+      result = pthread_mutex_init(&conditionMutex, 0);
+      result = pthread_cond_init(&csoundCondition, 0);
+      result = pthread_cond_init(&closeCondition, 0);
+      // Create a thread to run the close routine. It will immediately 
+      // block until it is signaled.
+      result = pthread_create(&closeThread, 0, &JackoState::closeRoutine_, this);
+      std::memset(&jack_position, 0, sizeof(jack_position_t));
+      jack_options_t jack_options = (jack_options_t) (JackServerName |
+                                                      JackNoStartServer |
+                                                      JackUseExactName);
+      jack_status_t status = jack_status_t(0);
+      jackClient = jack_client_open(clientName,
+                                    jack_options,
+                                    &status,
+                                    serverName);
+      if (!jackClient) {
+        csound->Message(csound, Str("Could not create Jack client \"%s\" -- "
+                                    "is Jack server \"%s\" running? Status: %d\n"),
+                        clientName,
+                        serverName,
+                        status);
+        csound->LongJmp(csound, 1);
+      } else {
+        csound->Message(csound,
+                        Str("Created Jack client \"%s\" for Jack server \"%s\".\n"),
+                        clientName, serverName);
+      }
+      jackFramesPerTick = jack_get_buffer_size(jackClient);
+      if (csoundFramesPerTick != jackFramesPerTick) {
+        csound->Message(csound,
+                        Str("Jack buffer size %d != Csound ksmps %d, exiting...\n"),
+                        jackFramesPerTick,
+                        csoundFramesPerTick);
+        csound->LongJmp(csound, 1);
+      }
+      jackFramesPerSecond = jack_get_sample_rate(jackClient);
+      if (csoundFramesPerSecond != jackFramesPerSecond) {
+        csound->Message(csound,
+                        Str("Jack sampling rate %d != Csound sr %d, exiting...\n"),
+                        jackFramesPerSecond,
+                        csoundFramesPerSecond);
+        csound->LongJmp(csound, 1);
+      }
+      jackoStatesForCsoundInstances[csound] = this;
+      csound->RegisterSenseEventCallback(csound, SenseEventCallback_, this);
+      result = jack_set_process_callback(jackClient, JackProcessCallback_, this);
+      result = jack_activate(jackClient);
+      if (!result) {
+        csound->Message(csound,
+                        Str("Activated Jack client \"%s\".\n"),
+                        jack_get_client_name(jackClient));
+      } else {
+        csound->Message(csound,
+                        Str("Failed to activate Jack client \"%s\": status %d.\n"),
+                        jack_get_client_name(jackClient),
+                        result);
+        return;
+      }
+      csound->SetExternalMidiInOpenCallback(csound, midiDeviceOpen_);
+      csound->SetExternalMidiReadCallback(csound, midiRead_);
+      jackInitialized = true;
   }
   ~JackoState()
   {
-    int result = 0;
+      //int result = 0;           // This does NOTHING!
   }
   int close()
   {
-    csound->Message(csound, Str("BEGAN JackoState::close()...\n"));
-    int result = OK;
-    // Try not to do thread related operations more than once...
-    if (jackInitialized) {
-      jackInitialized = false;
-      jackActive = false;
-      result = jack_deactivate(jackClient);
-      for (std::map<std::string, jack_port_t *>::iterator it = audioInPorts.begin();
-           it != audioInPorts.end();
-           ++it) {
-        result = jack_port_unregister(jackClient, it->second);
-      }
-      for (std::map<std::string, jack_port_t *>::iterator it = audioOutPorts.begin();
-           it != audioOutPorts.end();
-           ++it) {
-        result = jack_port_unregister(jackClient, it->second);
-      }
-      for (std::map<std::string, jack_port_t *>::iterator it = midiInPorts.begin();
-           it != midiInPorts.end();
-           ++it) {
-        result = jack_port_unregister(jackClient, it->second);
-      }
-      for (std::map<std::string, jack_port_t *>::iterator it = midiOutPorts.begin();
-           it != midiOutPorts.end();
-           ++it) {
-        result = jack_port_unregister(jackClient, it->second);
+      csound->Message(csound, Str("BEGAN JackoState::close()...\n"));
+      int result = OK;
+      // Try not to do thread related operations more than once...
+      if (jackInitialized) {
+        jackInitialized = false;
+        jackActive = false;
+        result = jack_deactivate(jackClient);
+        for (std::map<std::string, jack_port_t *>
+               ::iterator it = audioInPorts.begin();
+             it != audioInPorts.end();
+             ++it) {
+          result = jack_port_unregister(jackClient, it->second);
+        }
+        for (std::map<std::string, jack_port_t *>
+               ::iterator it = audioOutPorts.begin();
+             it != audioOutPorts.end();
+             ++it) {
+          result = jack_port_unregister(jackClient, it->second);
+        }
+        for (std::map<std::string, jack_port_t *>
+               ::iterator it = midiInPorts.begin();
+             it != midiInPorts.end();
+             ++it) {
+          result = jack_port_unregister(jackClient, it->second);
+        }
+        for (std::map<std::string, jack_port_t *>
+               ::iterator it = midiOutPorts.begin();
+             it != midiOutPorts.end();
+             ++it) {
+          result = jack_port_unregister(jackClient, it->second);
+        }
+        result = jack_client_close(jackClient);
+        result = pthread_cond_destroy(&csoundCondition);
+        result = pthread_cond_destroy(&closeCondition);
+        result = pthread_mutex_destroy(&conditionMutex);
+        audioOutPorts.clear();
+        audioInPorts.clear();
+        midiInPorts.clear();
+        midiOutPorts.clear();
       }
-      result = jack_client_close(jackClient);
-      result = pthread_cond_destroy(&csoundCondition);
-      result = pthread_cond_destroy(&closeCondition);
-      result = pthread_mutex_destroy(&conditionMutex);
-      audioOutPorts.clear();
-      audioInPorts.clear();
-      midiInPorts.clear();
-      midiOutPorts.clear();
-    }
-    csound->Message(csound, Str("ENDED JackoState::close().\n"));
-    return result;
+      csound->Message(csound, Str("ENDED JackoState::close().\n"));
+      return result;
   }
   int processJack(jack_nframes_t frames)
   {
-    // We must call PerformKsmps here ONLY after the original
-    // Csound performance thread is waiting on its condition.
-    int result = 0;
-    jackFrameTime = jack_last_frame_time(jackClient);
-    if (jackActive && !csoundActive) {
-      // Enqueue any MIDI messages pending in input ports.
-      for (std::map<std::string, jack_port_t *>::iterator it = midiInPorts.begin();
-           it != midiInPorts.end();
-           ++it) {
-        jack_port_t *midiinport = it->second;
-        void *portbuffer = jack_port_get_buffer(midiinport, jackFramesPerTick);
-        if (portbuffer) {
-          jack_nframes_t eventN = jack_midi_get_event_count(portbuffer);
-          for (jack_nframes_t eventI = 0; eventI < eventN; ++eventI) {
-            jack_midi_event_t event;
-            int result = jack_midi_event_get(&event, portbuffer, eventI);
-            if (result == 0) {
-              for (size_t i = 0; i < event.size; ++i) {
-                midiInputQueue.push_back(event.buffer[i]);
+      // We must call PerformKsmps here ONLY after the original
+      // Csound performance thread is waiting on its condition.
+      int result = 0;
+      jackFrameTime = jack_last_frame_time(jackClient);
+      if (jackActive && !csoundActive) {
+        // Enqueue any MIDI messages pending in input ports.
+        for (std::map<std::string, jack_port_t *>
+               ::iterator it = midiInPorts.begin();
+             it != midiInPorts.end();
+             ++it) {
+          jack_port_t *midiinport = it->second;
+          void *portbuffer = jack_port_get_buffer(midiinport, jackFramesPerTick);
+          if (portbuffer) {
+            jack_nframes_t eventN = jack_midi_get_event_count(portbuffer);
+            for (jack_nframes_t eventI = 0; eventI < eventN; ++eventI) {
+              jack_midi_event_t event;
+              int result = jack_midi_event_get(&event, portbuffer, eventI);
+              if (result == 0) {
+                for (size_t i = 0; i < event.size; ++i) {
+                  midiInputQueue.push_back(event.buffer[i]);
+                }
               }
             }
           }
         }
+        // Clear MIDI output buffers.
+        for (std::map<std::string, jack_port_t *>
+               ::iterator it = midiOutPorts.begin();
+             it != midiOutPorts.end();
+             ++it) {
+          void *buffer = jack_port_get_buffer(it->second, jackFramesPerTick);
+          jack_midi_clear_buffer(buffer);
+        }
+        result = csound->PerformKsmps(csound);
+        // We break here when the Csound performance is complete,
+        // and signal the original Csound performance thread to continue.
+        if (result && jackActive) {
+          csoundActive = true;
+          jackActive = false;
+          pthread_mutex_lock(&conditionMutex);
+          pthread_cond_signal(&csoundCondition);
+          pthread_mutex_unlock(&conditionMutex);
+          return result;
+        }
       }
-      // Clear MIDI output buffers.
-      for (std::map<std::string, jack_port_t *>::iterator it = midiOutPorts.begin();
-           it != midiOutPorts.end();
-           ++it) {
-        void *buffer = jack_port_get_buffer(it->second, jackFramesPerTick);
-        jack_midi_clear_buffer(buffer);
+      return result;
+  }
+  int processCsound()
+  {
+      int result = 0;
+      // Here we must wait once and only once, in order to put
+      // the original Csound processing thread to sleep --
+      // but we must NOT put the Jack processing callback
+      // to sleep when it comes here!
+      if (jackActive && csoundActive) {
+        csoundActive = false;
+        // While Jack is processing, wait here.
+        // The Jack process callback will then call csoundPerformKsmps
+        // until the Csound performance is complete.
+        result = pthread_mutex_lock(&conditionMutex);
+        result = pthread_cond_wait(&csoundCondition, &conditionMutex);
+        result = pthread_mutex_unlock(&conditionMutex);
       }
-      result = csound->PerformKsmps(csound);
-      // We break here when the Csound performance is complete,
-      // and signal the original Csound performance thread to continue.
-      if (result && jackActive) {
-        csoundActive = true;
-        jackActive = false;
-        pthread_mutex_lock(&conditionMutex);
-        pthread_cond_signal(&csoundCondition);
-        pthread_mutex_unlock(&conditionMutex);
+      if (jackActive) {
+        return 1;
+      } else {
+        // Then, when the Csound performance is complete,
+        // we signal the close routine condition so that
+        // Jack can be shut down and cleaned up in a separate
+        // thread. Doing this inside the Jack process callback
+        // takes too long and may cause other problems.
+        result = pthread_mutex_lock(&conditionMutex);
+        result = pthread_cond_signal(&closeCondition);
+        result = pthread_mutex_unlock(&conditionMutex);
         return result;
       }
-    }
-    return result;
   }
-  int processCsound()
+  void *closeRoutine()
   {
-    int result = 0;
-    // Here we must wait once and only once, in order to put
-    // the original Csound processing thread to sleep --
-    // but we must NOT put the Jack processing callback
-    // to sleep when it comes here!
-    if (jackActive && csoundActive) {
-      csoundActive = false;
-      // While Jack is processing, wait here.
-      // The Jack process callback will then call csoundPerformKsmps
-      // until the Csound performance is complete.
-      result = pthread_mutex_lock(&conditionMutex);
-      result = pthread_cond_wait(&csoundCondition, &conditionMutex);
-      result = pthread_mutex_unlock(&conditionMutex);
-    }
-    if (jackActive) {
-      return 1;
-    } else {
-      // Then, when the Csound performance is complete,
-      // we signal the close routine condition so that
-      // Jack can be shut down and cleaned up in a separate
-      // thread. Doing this inside the Jack process callback
-      // takes too long and may cause other problems.
+      int result = 0;
+      // Wait until signaled to actually shut down the Jack client.
       result = pthread_mutex_lock(&conditionMutex);
-      result = pthread_cond_signal(&closeCondition);
+      result = pthread_cond_wait(&closeCondition, &conditionMutex);
       result = pthread_mutex_unlock(&conditionMutex);
-      return result;
-    }
-  }
-  void *closeRoutine()
-  {
-    int result = 0;
-    // Wait until signaled to actually shut down the Jack client.
-    result = pthread_mutex_lock(&conditionMutex);
-    result = pthread_cond_wait(&closeCondition, &conditionMutex);
-    result = pthread_mutex_unlock(&conditionMutex);
-    close();
-    return (void *) result;
+      close();
+      return (void *) result;
   }
   static void *closeRoutine_(void *userdata)
   {
-    return ((JackoState *)userdata)->closeRoutine();
+      return ((JackoState *)userdata)->closeRoutine();
   }
   void startTransport()
   {
-    midiInputQueue.clear();
-    jack_transport_start(jackClient);
+      midiInputQueue.clear();
+      jack_transport_start(jackClient);
   }
   void stopTransport()
   {
-    jack_transport_stop(jackClient);
+      jack_transport_stop(jackClient);
   }
   int positionTransport(double timeSeconds)
   {
-    int result = OK;
-    jack_position.frame_time = timeSeconds;
-    midiInputQueue.clear();
-    result = jack_transport_reposition(jackClient, &jack_position);
-    return result;
+      int result = OK;
+      jack_position.frame_time = timeSeconds;
+      midiInputQueue.clear();
+      result = jack_transport_reposition(jackClient, &jack_position);
+      return result;
   }
   /**
    * Return a MIDI output buffer,
@@ -736,34 +745,35 @@ struct JackoState
    */
   jack_midi_data_t *getMidiOutBuffer(jack_port_t *csoundPort)
   {
-    jack_midi_data_t *buffer = (jack_midi_data_t *)jack_port_get_buffer(csoundPort, csoundFramesPerTick);
-    return buffer;
+      jack_midi_data_t *buffer =
+        (jack_midi_data_t *)jack_port_get_buffer(csoundPort, csoundFramesPerTick);
+      return buffer;
   }
 };
 
 static JackoState *getJackoState(CSOUND *csound)
 {
-  return jackoStatesForCsoundInstances[csound];
+    return jackoStatesForCsoundInstances[csound];
 }
 
 static int JackProcessCallback_(jack_nframes_t frames,
                                 void *data)
 {
-  return ((JackoState *)data)->processJack(frames);
+    return ((JackoState *)data)->processJack(frames);
 }
 
 static void SenseEventCallback_(CSOUND * csound,
                                 void *data)
 {
-  ((JackoState *)data)->processCsound();
+    ((JackoState *)data)->processCsound();
 }
 
 static int midiDeviceOpen_(CSOUND *csound,
                            void **userData,
                            const char *devName)
 {
-  *userData = getJackoState(csound);
-  return 0;
+    *userData = getJackoState(csound);
+    return 0;
 }
 
 /**
@@ -775,17 +785,17 @@ static int midiRead_(CSOUND *csound,
                      unsigned char *midiData,
                      int midiN)
 {
-  JackoState *jackoState = (JackoState *)userData;
-  int midiI = 0;
-  while (!jackoState->midiInputQueue.empty() && midiI < midiN) {
-    midiData[midiI] = jackoState->midiInputQueue.front();
-    jackoState->midiInputQueue.pop_front();
-    midiI++;
-  }
-  //if (midiI) {
-  //  csound->Message(csound, "midiRead_: %d bytes.\n", midiI);
-  //}
-  return midiI;
+    JackoState *jackoState = (JackoState *)userData;
+    int midiI = 0;
+    while (!jackoState->midiInputQueue.empty() && midiI < midiN) {
+      midiData[midiI] = jackoState->midiInputQueue.front();
+      jackoState->midiInputQueue.pop_front();
+      midiI++;
+    }
+    //if (midiI) {
+    //  csound->Message(csound, "midiRead_: %d bytes.\n", midiI);
+    //}
+    return midiI;
 }
 
 struct JackoInit : public OpcodeBase<JackoInit>
@@ -817,12 +827,13 @@ struct JackoInfo : public OpcodeBase<JackoInfo>
   JackoState *jackoState;
   int init(CSOUND *csound)
   {
-    int result = OK;
     jackoState = getJackoState(csound);
     log(csound, "Jack information for client: %s\n", jackoState->clientName);
     log(csound, "  Daemon name:               %s\n", jackoState->serverName);
-    log(csound, "  Frames per second:         %d\n", jackoState->jackFramesPerSecond);
-    log(csound, "  Frames per period:         %d\n", jackoState->jackFramesPerTick);
+    log(csound, "  Frames per second:         %d\n",
+        jackoState->jackFramesPerSecond);
+    log(csound, "  Frames per period:         %d\n",
+        jackoState->jackFramesPerTick);
     const char **ports = jack_get_ports(jackoState->jackClient, 0, 0, 0);
     if (ports) {
       log(csound, "  Ports and connections:\n");
@@ -837,7 +848,8 @@ struct JackoInfo : public OpcodeBase<JackoInfo>
         } else if ((flags & JackPortIsInput) == JackPortIsInput) {
           portType = "Input ";
         }
-        log(csound, "    %3d:   %s   %-25s  %s\n", (i+1), portType, type, (PortName ? PortName : "(no name)"));
+        log(csound, "    %3d:   %s   %-25s  %s\n",
+            (i+1), portType, type, (PortName ? PortName : "(no name)"));
         char alias1[0x100];
         char alias2[0x100];
         char * const aliases[2] = {alias1, alias2};
@@ -845,13 +857,16 @@ struct JackoInfo : public OpcodeBase<JackoInfo>
         for (size_t aliasI = 0; aliasI < aliasN; ++aliasI) {
           log(csound, "           Alias: %s\n", aliases[aliasI]);
         }
-        const char **connections = jack_port_get_all_connections(jackoState->jackClient, port);
+        const char **connections =
+          jack_port_get_all_connections(jackoState->jackClient, port);
         if (connections) {
           for (size_t j = 0; connections[j]; ++j) {
             if ((jack_port_flags(port) & JackPortIsOutput) == JackPortIsOutput) {
-              log(csound, "           Sends to:                           >> %s\n", connections[j]);
+              log(csound, "           Sends to:                           >> %s\n",
+                  connections[j]);
             } else {
-              log(csound, "           Receives from:                      << %s\n", connections[j]);
+              log(csound, "           Receives from:                      << %s\n",
+                  connections[j]);
             }
           }
         }
@@ -873,9 +888,12 @@ struct JackoFreewheel : public OpcodeBase<JackoFreewheel>
     int freewheel = (int) *ifreewheel;
     int result = jack_set_freewheel(jackoState->jackClient, freewheel);
     if (result) {
-      warn(csound, Str("Failed to set Jack freewheeling mode to \"%s\": error %d.\n"), (freewheel ? "on" : "off"), result);
+      warn(csound,
+           Str("Failed to set Jack freewheeling mode to \"%s\": error %d.\n"),
+           (freewheel ? "on" : "off"), result);
     } else {
-      log(csound, Str("Set Jack freewheeling mode to \"%s\".\n"), (freewheel ? "on" : "off"));
+      log(csound, Str("Set Jack freewheeling mode to \"%s\".\n"),
+          (freewheel ? "on" : "off"));
     }
     return result;
   }
@@ -887,11 +905,12 @@ struct JackoOn : public OpcodeBase<JackoOn>
   JackoState *jackoState;
   int init(CSOUND *csound)
   {
-    int result = OK;
-    jackoState = getJackoState(csound);
-    jackoState->jackActive = (char) *jon;
-    log(csound, Str("Turned Jack connections \"%s\".\n"), (jackoState->jackActive ? "on" : "off"));
-    return result;
+      int result = OK;
+      jackoState = getJackoState(csound);
+      jackoState->jackActive = (char) *jon;
+      log(csound, Str("Turned Jack connections \"%s\".\n"),
+          (jackoState->jackActive ? "on" : "off"));
+      return result;
   }
 };
 
@@ -911,51 +930,56 @@ struct JackoAudioInConnect : public OpcodeBase<JackoAudioInConnect>
   jack_port_t *externalPort;
   int init(CSOUND *csound)
   {
-    int result = OK;
-    jackoState = getJackoState(csound);
-    clientName = jack_get_client_name(jackoState->jackClient);
-    csoundPortName = csound->strarg2name(csound,
-                                         (char *)0,
-                                         ScsoundPortName,
-                                         (char *)"",
-                                         (int) csound->GetInputArgSMask(this));
-    std::sprintf(csoundFullPortName, "%s:%s", clientName, csoundPortName);
-    externalPortName = csound->strarg2name(csound,
-                                           (char *) 0,
-                                           SexternalPortName,
-                                           (char *)"csound",
+      int result = OK;
+      jackoState = getJackoState(csound);
+      clientName = jack_get_client_name(jackoState->jackClient);
+      csoundPortName = csound->strarg2name(csound,
+                                           (char *)0,
+                                           ScsoundPortName,
+                                           (char *)"",
                                            (int) csound->GetInputArgSMask(this));
-    csoundPort = jack_port_by_name(jackoState->jackClient, csoundFullPortName);
-    if (!csoundPort) {
-      csoundPort = jack_port_register(jackoState->jackClient, csoundPortName, JACK_DEFAULT_AUDIO_TYPE, JackPortIsInput, 0);
-      if (csoundPort) {
-        log(csound, "Created Jack port \"%s\".\n", csoundFullPortName);
+      std::sprintf(csoundFullPortName, "%s:%s", clientName, csoundPortName);
+      externalPortName = csound->strarg2name(csound,
+                                             (char *) 0,
+                                             SexternalPortName,
+                                             (char *)"csound",
+                                             (int) csound->GetInputArgSMask(this));
+      csoundPort = jack_port_by_name(jackoState->jackClient, csoundFullPortName);
+      if (!csoundPort) {
+        csoundPort = jack_port_register(jackoState->jackClient,
+                                        csoundPortName, JACK_DEFAULT_AUDIO_TYPE,
+                                        JackPortIsInput, 0);
+        if (csoundPort) {
+          log(csound, "Created Jack port \"%s\".\n", csoundFullPortName);
+        } else {
+          warn(csound, Str("Could not create Jack port \"%s\".\n"),
+               csoundFullPortName);
+        }
+      }
+      externalPort = jack_port_by_name(jackoState->jackClient, externalPortName);
+      result = jack_connect(jackoState->jackClient, jack_port_name(externalPort),
+                            jack_port_name(csoundPort));
+      if (result == EEXIST) {
+        log(csound,
+            "Connection from \"%s\" to \"%s\" already exists.\n",
+            externalPortName,
+            csoundFullPortName);
+      } else if (result) {
+        warn(csound,
+             Str("Could not create Jack connection from \"%s\" to \"%s\": "
+                 "status %d.\n"),
+             externalPortName,
+             csoundFullPortName,
+             result);
+        return result;
       } else {
-        warn(csound, Str("Could not create Jack port \"%s\".\n"), csoundFullPortName);
+        log(csound,
+            "Created Jack connection from \"%s\" to \"%s\".\n",
+            externalPortName,
+            csoundFullPortName);
       }
-    }
-    externalPort = jack_port_by_name(jackoState->jackClient, externalPortName);
-    result = jack_connect(jackoState->jackClient, jack_port_name(externalPort), jack_port_name(csoundPort));
-    if (result == EEXIST) {
-      log(csound,
-          "Connection from \"%s\" to \"%s\" already exists.\n",
-          externalPortName,
-          csoundFullPortName);
-    } else if (result) {
-      warn(csound,
-           Str("Could not create Jack connection from \"%s\" to \"%s\": status %d.\n"),
-           externalPortName,
-           csoundFullPortName,
-           result);
+      jackoState->audioInPorts[csoundPortName] = csoundPort;
       return result;
-    } else {
-      log(csound,
-          "Created Jack connection from \"%s\" to \"%s\".\n",
-          externalPortName,
-          csoundFullPortName);
-    }
-    jackoState->audioInPorts[csoundPortName] = csoundPort;
-    return result;
   }
 };
 
@@ -972,24 +996,26 @@ struct JackoAudioIn : public OpcodeBase<JackoAudioIn>
   jack_nframes_t csoundFramesPerTick;
   int init(CSOUND *csound)
   {
-    int result = OK;
-    jackoState = getJackoState(csound);
-    csoundFramesPerTick = jackoState->csoundFramesPerTick;
-    csoundPortName = csound->strarg2name(csound,
-					 (char *)0,
-					 ScsoundPortName,
-					 (char *)"",
-					 (int) csound->GetInputArgSMask(this));
-    csoundPort = jackoState->audioInPorts[csoundPortName];
-    return result;
+      int result = OK;
+      jackoState = getJackoState(csound);
+      csoundFramesPerTick = jackoState->csoundFramesPerTick;
+      csoundPortName = csound->strarg2name(csound,
+                                           (char *)0,
+                                           ScsoundPortName,
+                                           (char *)"",
+                                           (int) csound->GetInputArgSMask(this));
+      csoundPort = jackoState->audioInPorts[csoundPortName];
+      return result;
   }
   int audio(CSOUND *csound)
   {
-    jack_default_audio_sample_t *buffer = (jack_default_audio_sample_t *)jack_port_get_buffer(csoundPort, csoundFramesPerTick);
-    for (size_t frame = 0; frame < csoundFramesPerTick; ++frame) {
-      asignal[frame] = buffer[frame];
-    }
-    return OK;
+      jack_default_audio_sample_t *buffer =
+        (jack_default_audio_sample_t *)jack_port_get_buffer(csoundPort,
+                                                            csoundFramesPerTick);
+      for (size_t frame = 0; frame < csoundFramesPerTick; ++frame) {
+        asignal[frame] = buffer[frame];
+      }
+      return OK;
   }
 };
 
@@ -1010,52 +1036,58 @@ struct JackoAudioOutConnect : public OpcodeBase<JackoAudioOutConnect>
   jack_port_t *externalPort;
   int init(CSOUND *csound)
   {
-    int result = OK;
-    frames = csound->GetKsmps(csound);
-    jackoState = getJackoState(csound);
-    clientName = jack_get_client_name(jackoState->jackClient);
-    csoundPortName = csound->strarg2name(csound,
-					 (char *)0,
-					 ScsoundPortName,
-					 (char *)"",
-					 (int) csound->GetInputArgSMask(this));
-    std::sprintf(csoundFullPortName, "%s:%s", clientName, csoundPortName);
-    externalPortName = csound->strarg2name(csound,
-					   (char *) 0,
-					   SexternalPortName,
-					   (char *)"csound",
-					   (int) csound->GetInputArgSMask(this));
-    csoundPort = jack_port_by_name(jackoState->jackClient, csoundFullPortName);
-    if (!csoundPort) {
-      csoundPort = jack_port_register(jackoState->jackClient, csoundPortName, JACK_DEFAULT_AUDIO_TYPE, JackPortIsOutput, 0);
-      if (csoundPort) {
-	log(csound, "Created Jack port \"%s\".\n", csoundFullPortName);
+      int result = OK;
+      frames = csound->GetKsmps(csound);
+      jackoState = getJackoState(csound);
+      clientName = jack_get_client_name(jackoState->jackClient);
+      csoundPortName = csound->strarg2name(csound,
+                                           (char *)0,
+                                           ScsoundPortName,
+                                           (char *)"",
+                                           (int) csound->GetInputArgSMask(this));
+      std::sprintf(csoundFullPortName, "%s:%s", clientName, csoundPortName);
+      externalPortName = csound->strarg2name(csound,
+                                             (char *) 0,
+                                             SexternalPortName,
+                                             (char *)"csound",
+                                             (int) csound->GetInputArgSMask(this));
+      csoundPort = jack_port_by_name(jackoState->jackClient, csoundFullPortName);
+      if (!csoundPort) {
+        csoundPort = jack_port_register(jackoState->jackClient,
+                                        csoundPortName, JACK_DEFAULT_AUDIO_TYPE,
+                                        JackPortIsOutput, 0);
+        if (csoundPort) {
+          log(csound, "Created Jack port \"%s\".\n", csoundFullPortName);
+        } else {
+          warn(csound, Str("Could not create Jack port \"%s\".\n"),
+               csoundFullPortName);
+        }
+      }
+      externalPort = jack_port_by_name(jackoState->jackClient, externalPortName);
+      result = jack_connect(jackoState->jackClient,
+                            jack_port_name(csoundPort),
+                            jack_port_name(externalPort));
+      if (result == EEXIST) {
+        log(csound,
+            "Connection from \"%s\" to \"%s\" already exists.\n",
+            csoundFullPortName,
+            externalPortName);
+      } else if (result) {
+        warn(csound,
+             Str("Could not create Jack connection from \"%s\" to \"%s\": "
+                 "status %d.\n"),
+             csoundFullPortName,
+             externalPortName,
+             result);
+        return result;
       } else {
-	warn(csound, Str("Could not create Jack port \"%s\".\n"), csoundFullPortName);
+        log(csound,
+            "Created Jack connection from \"%s\" to \"%s\".\n",
+            csoundFullPortName,
+            externalPortName);
       }
-    }
-    externalPort = jack_port_by_name(jackoState->jackClient, externalPortName);
-    result = jack_connect(jackoState->jackClient, jack_port_name(csoundPort), jack_port_name(externalPort));
-    if (result == EEXIST) {
-      log(csound,
-	  "Connection from \"%s\" to \"%s\" already exists.\n",
-	  csoundFullPortName,
-	  externalPortName);
-    } else if (result) {
-      warn(csound,
-	   Str("Could not create Jack connection from \"%s\" to \"%s\": status %d.\n"),
-	   csoundFullPortName,
-	   externalPortName,
-	   result);
+      jackoState->audioOutPorts[csoundPortName] = csoundPort;
       return result;
-    } else {
-      log(csound,
-	  "Created Jack connection from \"%s\" to \"%s\".\n",
-	  csoundFullPortName,
-	  externalPortName);
-    }
-    jackoState->audioOutPorts[csoundPortName] = csoundPort;
-    return result;
   }
 };
 
@@ -1072,24 +1104,26 @@ struct JackoAudioOut : public OpcodeBase<JackoAudioOut>
   jack_nframes_t csoundFramesPerTick;
   int init(CSOUND *csound)
   {
-    int result = OK;
-    jackoState = getJackoState(csound);
-    csoundFramesPerTick = jackoState->csoundFramesPerTick;
-    csoundPortName = csound->strarg2name(csound,
-					 (char *)0,
-					 ScsoundPortName,
-					 (char *)"",
-					 (int) csound->GetInputArgSMask(this));
-    csoundPort = jackoState->audioOutPorts[csoundPortName];
-    return result;
+      int result = OK;
+      jackoState = getJackoState(csound);
+      csoundFramesPerTick = jackoState->csoundFramesPerTick;
+      csoundPortName = csound->strarg2name(csound,
+                                           (char *)0,
+                                           ScsoundPortName,
+                                           (char *)"",
+                                           (int) csound->GetInputArgSMask(this));
+      csoundPort = jackoState->audioOutPorts[csoundPortName];
+      return result;
   }
   int audio(CSOUND *csound)
   {
-    jack_default_audio_sample_t *buffer = (jack_default_audio_sample_t *)jack_port_get_buffer(csoundPort, csoundFramesPerTick);
-    for (size_t frame = 0; frame < csoundFramesPerTick; ++frame) {
-      buffer[frame] = asignal[frame];
-    }
-    return OK;
+      jack_default_audio_sample_t *buffer =
+        (jack_default_audio_sample_t *)jack_port_get_buffer(csoundPort,
+                                                            csoundFramesPerTick);
+      for (size_t frame = 0; frame < csoundFramesPerTick; ++frame) {
+        buffer[frame] = asignal[frame];
+      }
+      return OK;
   }
 };
 
@@ -1110,52 +1144,57 @@ struct JackoMidiInConnect : public OpcodeBase<JackoMidiInConnect>
   jack_port_t *externalPort;
   int init(CSOUND *csound)
   {
-    int result = OK;
-    frames = csound->GetKsmps(csound);
-    jackoState = getJackoState(csound);
-    clientName = jack_get_client_name(jackoState->jackClient);
-    csoundPortName = csound->strarg2name(csound,
-					 (char *)0,
-					 ScsoundPortName,
-					 (char *)"",
-					 (int) csound->GetInputArgSMask(this));
-    std::sprintf(csoundFullPortName, "%s:%s", clientName, csoundPortName);
-    externalPortName = csound->strarg2name(csound,
-					   (char *) 0,
-					   SexternalPortName,
-					   (char *)"csound",
-					   (int) csound->GetInputArgSMask(this));
-    csoundPort = jack_port_by_name(jackoState->jackClient, csoundFullPortName);
-    if (!csoundPort) {
-      csoundPort = jack_port_register(jackoState->jackClient, csoundPortName, JACK_DEFAULT_MIDI_TYPE, JackPortIsInput, 0);
-      if (csoundPort) {
-	log(csound, "Created Jack port \"%s\".\n", csoundFullPortName);
+      int result = OK;
+      frames = csound->GetKsmps(csound);
+      jackoState = getJackoState(csound);
+      clientName = jack_get_client_name(jackoState->jackClient);
+      csoundPortName = csound->strarg2name(csound,
+                                           (char *)0,
+                                           ScsoundPortName,
+                                           (char *)"",
+                                           (int) csound->GetInputArgSMask(this));
+      std::sprintf(csoundFullPortName, "%s:%s", clientName, csoundPortName);
+      externalPortName = csound->strarg2name(csound,
+                                             (char *) 0,
+                                             SexternalPortName,
+                                             (char *)"csound",
+                                             (int) csound->GetInputArgSMask(this));
+      csoundPort = jack_port_by_name(jackoState->jackClient, csoundFullPortName);
+      if (!csoundPort) {
+        csoundPort = jack_port_register(jackoState->jackClient, csoundPortName,
+                                        JACK_DEFAULT_MIDI_TYPE, JackPortIsInput, 0);
+        if (csoundPort) {
+          log(csound, "Created Jack port \"%s\".\n", csoundFullPortName);
+        } else {
+          warn(csound, Str("Could not create Jack port \"%s\".\n"),
+               csoundFullPortName);
+        }
+      }
+      externalPort = jack_port_by_name(jackoState->jackClient, externalPortName);
+      result = jack_connect(jackoState->jackClient,
+                            jack_port_name(externalPort),
+                            jack_port_name(csoundPort));
+      if (result == EEXIST) {
+        log(csound,
+            "Connection from \"%s\" to \"%s\" already exists.\n",
+            externalPortName,
+            csoundFullPortName);
+      } else if (result) {
+        warn(csound,
+             Str("Could not create Jack connection from \"%s\" to \"%s\": "
+                 "status %d.\n"),
+             externalPortName,
+             csoundFullPortName,
+             result);
+        return result;
       } else {
-	warn(csound, Str("Could not create Jack port \"%s\".\n"), csoundFullPortName);
+        log(csound,
+            "Created Jack connection from \"%s\" to \"%s\".\n",
+            externalPortName,
+            csoundFullPortName);
       }
-    }
-    externalPort = jack_port_by_name(jackoState->jackClient, externalPortName);
-    result = jack_connect(jackoState->jackClient, jack_port_name(externalPort), jack_port_name(csoundPort));
-    if (result == EEXIST) {
-      log(csound,
-	  "Connection from \"%s\" to \"%s\" already exists.\n",
-	  externalPortName,
-	  csoundFullPortName);
-    } else if (result) {
-      warn(csound,
-	   Str("Could not create Jack connection from \"%s\" to \"%s\": status %d.\n"),
-	   externalPortName,
-	   csoundFullPortName,
-	   result);
+      jackoState->midiInPorts[csoundPortName] = csoundPort;
       return result;
-    } else {
-      log(csound,
-	  "Created Jack connection from \"%s\" to \"%s\".\n",
-	  externalPortName,
-	  csoundFullPortName);
-    }
-    jackoState->midiInPorts[csoundPortName] = csoundPort;
-    return result;
   }
 };
 
@@ -1176,52 +1215,57 @@ struct JackoMidiOutConnect : public OpcodeBase<JackoMidiOutConnect>
   jack_port_t *externalPort;
   int init(CSOUND *csound)
   {
-    int result = OK;
-    frames = csound->GetKsmps(csound);
-    jackoState = getJackoState(csound);
-    clientName = jack_get_client_name(jackoState->jackClient);
-    csoundPortName = csound->strarg2name(csound,
-					 (char *)0,
-					 ScsoundPortName,
-					 (char *)"",
-					 (int) csound->GetInputArgSMask(this));
-    std::sprintf(csoundFullPortName, "%s:%s", clientName, csoundPortName);
-    externalPortName = csound->strarg2name(csound,
-					   (char *) 0,
-					   SexternalPortName,
-					   (char *)"csound",
-					   (int) csound->GetInputArgSMask(this));
-    csoundPort = jack_port_by_name(jackoState->jackClient, csoundFullPortName);
-    if (!csoundPort) {
-      csoundPort = jack_port_register(jackoState->jackClient, csoundPortName, JACK_DEFAULT_MIDI_TYPE, JackPortIsOutput, 0);
-      if (csoundPort) {
-	log(csound, "Created Jack port \"%s\".\n", csoundFullPortName);
+      int result = OK;
+      frames = csound->GetKsmps(csound);
+      jackoState = getJackoState(csound);
+      clientName = jack_get_client_name(jackoState->jackClient);
+      csoundPortName = csound->strarg2name(csound,
+                                           (char *)0,
+                                           ScsoundPortName,
+                                           (char *)"",
+                                           (int) csound->GetInputArgSMask(this));
+      std::sprintf(csoundFullPortName, "%s:%s", clientName, csoundPortName);
+      externalPortName = csound->strarg2name(csound,
+                                             (char *) 0,
+                                             SexternalPortName,
+                                             (char *)"csound",
+                                             (int) csound->GetInputArgSMask(this));
+      csoundPort = jack_port_by_name(jackoState->jackClient, csoundFullPortName);
+      if (!csoundPort) {
+        csoundPort = jack_port_register(jackoState->jackClient,
+                                        csoundPortName, JACK_DEFAULT_MIDI_TYPE,
+                                        JackPortIsOutput, 0);
+        if (csoundPort) {
+          log(csound, "Created Jack port \"%s\".\n", csoundFullPortName);
+        } else {
+          warn(csound, Str("Could not create Jack port \"%s\".\n"),
+               csoundFullPortName);
+        }
+      }
+      externalPort = jack_port_by_name(jackoState->jackClient, externalPortName);
+      result = jack_connect(jackoState->jackClient, jack_port_name(csoundPort),
+                            jack_port_name(externalPort));
+      if (result == EEXIST) {
+        log(csound,
+            "Connection from \"%s\" to \"%s\" already exists.\n",
+            csoundFullPortName,
+            externalPortName);
+      } else if (result) {
+        warn(csound,
+             Str("Could not create Jack connection from \"%s\" to \"%s\": "
+                 "status %d.\n"),
+             csoundFullPortName,
+             externalPortName,
+             result);
+        return result;
       } else {
-	warn(csound, Str("Could not create Jack port \"%s\".\n"), csoundFullPortName);
+        log(csound,
+            "Created Jack connection from \"%s\" to \"%s\".\n",
+            csoundFullPortName,
+            externalPortName);
       }
-    }
-    externalPort = jack_port_by_name(jackoState->jackClient, externalPortName);
-    result = jack_connect(jackoState->jackClient, jack_port_name(csoundPort), jack_port_name(externalPort));
-    if (result == EEXIST) {
-      log(csound,
-	  "Connection from \"%s\" to \"%s\" already exists.\n",
-	  csoundFullPortName,
-	  externalPortName);
-    } else if (result) {
-      warn(csound,
-	   Str("Could not create Jack connection from \"%s\" to \"%s\": status %d.\n"),
-	   csoundFullPortName,
-	   externalPortName,
-	   result);
+      jackoState->midiOutPorts[csoundPortName] = csoundPort;
       return result;
-    } else {
-      log(csound,
-	  "Created Jack connection from \"%s\" to \"%s\".\n",
-	  csoundFullPortName,
-	  externalPortName);
-    }
-    jackoState->midiOutPorts[csoundPortName] = csoundPort;
-    return result;
   }
 };
 
@@ -1250,54 +1294,54 @@ struct JackoMidiOut : public OpcodeBase<JackoMidiOut>
   jack_midi_data_t *buffer;
   int init(CSOUND *csound)
   {
-    int result = OK;
-    jackoState = getJackoState(csound);
-    csoundFramesPerTick = jackoState->csoundFramesPerTick;
-    csoundPortName = csound->strarg2name(csound,
-					 (char *)0,
-					 ScsoundPortName,
-					 (char *)"",
-					 (int) csound->GetInputArgSMask(this));
-    csoundPort = jackoState->midiOutPorts[csoundPortName];
-    priorstatus = -1;
-    priorchannel = -1;
-    priordata1 = -1;
-    priordata2 = -1;
-    return result;
+      int result = OK;
+      jackoState = getJackoState(csound);
+      csoundFramesPerTick = jackoState->csoundFramesPerTick;
+      csoundPortName = csound->strarg2name(csound,
+                                           (char *)0,
+                                           ScsoundPortName,
+                                           (char *)"",
+                                           (int) csound->GetInputArgSMask(this));
+      csoundPort = jackoState->midiOutPorts[csoundPortName];
+      priorstatus = -1;
+      priorchannel = -1;
+      priordata1 = -1;
+      priordata2 = -1;
+      return result;
   }
   int kontrol(CSOUND *csound)
   {
-    int result = OK;
-    status = *kstatus;
-    channel = *kchannel;
-    data1 = *kdata1;
-    data2 = *kdata2;
-    if (status != priorstatus ||
-	channel != priorchannel ||
-	data1 != priordata1 ||
-	data2 != priordata2) {
-      size_t dataSize = 0;
-      if (data2 == -1) {
-	dataSize = 2;
-      } else {
-	dataSize = 3;
-      }
-      buffer = jackoState->getMidiOutBuffer(csoundPort);
-      jack_midi_data_t *data = jack_midi_event_reserve(buffer, 0, dataSize);
-      data[0] = (status + channel);
-      data[1] = data1;
-      if (data2 != -1) {
-	data[2] = data2;
-	//log(csound, "MIDI:  %3d %3d %3d\n", data[0], data[1], data[2]);
-      } else {
-	//log(csound, "MIDI:  %3d %3d\n", data[0], data[1]);
+      int result = OK;
+      status = *kstatus;
+      channel = *kchannel;
+      data1 = *kdata1;
+      data2 = *kdata2;
+      if (status != priorstatus ||
+          channel != priorchannel ||
+          data1 != priordata1 ||
+          data2 != priordata2) {
+        size_t dataSize = 0;
+        if (data2 == -1) {
+          dataSize = 2;
+        } else {
+          dataSize = 3;
+        }
+        buffer = jackoState->getMidiOutBuffer(csoundPort);
+        jack_midi_data_t *data = jack_midi_event_reserve(buffer, 0, dataSize);
+        data[0] = (status + channel);
+        data[1] = data1;
+        if (data2 != -1) {
+          data[2] = data2;
+          //log(csound, "MIDI:  %3d %3d %3d\n", data[0], data[1], data[2]);
+        } else {
+          //log(csound, "MIDI:  %3d %3d\n", data[0], data[1]);
+        }
       }
-    }
-    priorstatus = status;
-    priorchannel = channel;
-    priordata1 = data1;
-    priordata2 = data2;
-    return result;
+      priorstatus = status;
+      priorchannel = channel;
+      priordata1 = data1;
+      priordata2 = data2;
+      return result;
   }
 };
 
@@ -1321,37 +1365,37 @@ struct JackoNoteOut : public OpcodeNoteoffBase<JackoNoteOut>
   jack_midi_data_t *buffer;
   int init(CSOUND *csound)
   {
-    int result = OK;
-    jackoState = getJackoState(csound);
-    csoundFramesPerTick = jackoState->csoundFramesPerTick;
-    csoundPortName = csound->strarg2name(csound,
-					 (char *)0,
-					 ScsoundPortName,
-					 (char *)"",
-					 (int) csound->GetInputArgSMask(this));
-    csoundPort = jackoState->midiOutPorts[csoundPortName];
-    status = 144;
-    channel = (char) *ichannel;
-    key = (char) *ikey;
-    velocity = (char) *ivelocity;
-    buffer = jackoState->getMidiOutBuffer(csoundPort);
-    jack_midi_data_t *data = jack_midi_event_reserve(buffer, 0, 3);
-    data[0] = (status + channel);
-    data[1] = key;
-    data[2] = velocity;
-    //log(csound, "noteon:  %3d %3d %3d\n", data[0], data[1], data[2]);
-    return result;
+      int result = OK;
+      jackoState = getJackoState(csound);
+      csoundFramesPerTick = jackoState->csoundFramesPerTick;
+      csoundPortName = csound->strarg2name(csound,
+                                           (char *)0,
+                                           ScsoundPortName,
+                                           (char *)"",
+                                           (int) csound->GetInputArgSMask(this));
+      csoundPort = jackoState->midiOutPorts[csoundPortName];
+      status = 144;
+      channel = (char) *ichannel;
+      key = (char) *ikey;
+      velocity = (char) *ivelocity;
+      buffer = jackoState->getMidiOutBuffer(csoundPort);
+      jack_midi_data_t *data = jack_midi_event_reserve(buffer, 0, 3);
+      data[0] = (status + channel);
+      data[1] = key;
+      data[2] = velocity;
+      //log(csound, "noteon:  %3d %3d %3d\n", data[0], data[1], data[2]);
+      return result;
   }
   int noteoff(CSOUND *csound)
   {
-    int result = OK;
-    buffer = jackoState->getMidiOutBuffer(csoundPort);
-    jack_midi_data_t *data = jack_midi_event_reserve(buffer, 0, 3);
-    data[0] = (status + channel);
-    data[1] = key;
-    data[2] = 0;
-    //log(csound, "noteoff: %3d %3d %3d\n", data[0], data[1], data[2]);
-    return result;
+      int result = OK;
+      buffer = jackoState->getMidiOutBuffer(csoundPort);
+      jack_midi_data_t *data = jack_midi_event_reserve(buffer, 0, 3);
+      data[0] = (status + channel);
+      data[1] = key;
+      data[2] = 0;
+      //log(csound, "noteoff: %3d %3d %3d\n", data[0], data[1], data[2]);
+      return result;
   }
 };
 
@@ -1369,46 +1413,47 @@ struct JackoTransport : public OpcodeBase<JackoTransport>
   double priorPositionSeconds;
   int init(CSOUND *csound)
   {
-    int result = OK;
-    jackoState = getJackoState(csound);
-    priorCommand = -1;
-    priorPositionSeconds = 0.0;
-    return kontrol(csound);
+      jackoState = getJackoState(csound);
+      priorCommand = -1;
+      priorPositionSeconds = 0.0;
+      return kontrol(csound);
   }
   int kontrol(CSOUND *csound)
   {
-    int result = OK;
-    command = int(*kcommand);
-    positionSeconds = double(*Oposition);
-    if (command) {
-      if (command != priorCommand) {
-	priorCommand = command;
-	switch(command) {
-	case 1:
-	  result = jackoState->positionTransport(0.0);
-	  jackoState->startTransport();
-	  log(csound, "Started Jack transport.\n");
-	  break;
-	case 2:
-	  jackoState->stopTransport();
-	  log(csound, "Stopped Jack transport.\n");
-	  break;
-	case 3:
-	  if (positionSeconds != priorPositionSeconds) {
-	    priorPositionSeconds = positionSeconds;
-	    result = jackoState->positionTransport(positionSeconds);
-	    jackoState->startTransport();
-	    if (result) {
-	      log(csound, "Failed to start Jack transport at %f seconds with result: %d\n", positionSeconds, result);
-	    } else {
-	      log(csound, "Started Jack transport at %f seconds.\n", positionSeconds);
-	    }
-	  }
-	  break;
-	};
+      int result = OK;
+      command = int(*kcommand);
+      positionSeconds = double(*Oposition);
+      if (command) {
+        if (command != priorCommand) {
+          priorCommand = command;
+          switch(command) {
+          case 1:
+            result = jackoState->positionTransport(0.0);
+            jackoState->startTransport();
+            log(csound, "Started Jack transport.\n");
+            break;
+        case 2:
+            jackoState->stopTransport();
+            log(csound, "Stopped Jack transport.\n");
+            break;
+        case 3:
+            if (positionSeconds != priorPositionSeconds) {
+              priorPositionSeconds = positionSeconds;
+              result = jackoState->positionTransport(positionSeconds);
+              jackoState->startTransport();
+              if (result) {
+                log(csound, "Failed to start Jack transport at %f seconds with"
+                    " result: %d\n", positionSeconds, result);
+              } else {
+                log(csound, "Started Jack transport at %f seconds.\n",
+                    positionSeconds);
+              }
+            }
+            break;
+         };
+        }
       }
-    }
-    return result;
+      return result;
   }
 };
 
@@ -1560,14 +1605,14 @@ extern "C"
     int  err = 0;
     while (ep->opname != 0) {
       err |= csound->AppendOpcode(csound,
-				  ep->opname,
-				  ep->dsblksiz,
-				  ep->thread,
-				  ep->outypes,
-				  ep->intypes,
-				  (int (*)(CSOUND *, void*)) ep->iopadr,
-				  (int (*)(CSOUND *, void*)) ep->kopadr,
-				  (int (*)(CSOUND *, void*)) ep->aopadr);
+                                  ep->opname,
+                                  ep->dsblksiz,
+                                  ep->thread,
+                                  ep->outypes,
+                                  ep->intypes,
+                                  (int (*)(CSOUND *, void*)) ep->iopadr,
+                                  (int (*)(CSOUND *, void*)) ep->kopadr,
+                                  (int (*)(CSOUND *, void*)) ep->aopadr);
       ep++;
     }
     return err;
@@ -1580,8 +1625,8 @@ extern "C"
     {
       std::map<CSOUND *, JackoState *>::iterator it = jackoStatesForCsoundInstances.find(csound);
       if (it != jackoStatesForCsoundInstances.end()) {
-	//delete it->second;
-	jackoStatesForCsoundInstances.erase(it);
+        //delete it->second;
+        jackoStatesForCsoundInstances.erase(it);
       }
       //csound->Message(csound, "jacko: CsoundModuleDestroy(%p)\n", csound);
     }
diff --git a/Opcodes/loscilx.c b/Opcodes/loscilx.c
index c33af5e..187aca1 100644
--- a/Opcodes/loscilx.c
+++ b/Opcodes/loscilx.c
@@ -21,7 +21,9 @@
     02111-1307 USA
 */
 
-#include "csdl.h"
+// #include "csdl.h"
+#include "csoundCore.h"        
+#include "interlocks.h"
 #include "soundio.h"
 
 typedef struct SNDLOAD_OPCODE_ {
@@ -667,12 +669,12 @@ static int loscilx_opcode_perf(CSOUND *csound, LOSCILX_OPCODE *p)
 
  /* ------------------------------------------------------------------------ */
 
-static OENTRY localops[] = {
+static OENTRY loscilx_localops[] = {
   { "sndload",  sizeof(SNDLOAD_OPCODE), 1,  "",                 "Tooooojjoo",
     (SUBR) sndload_opcode_init, (SUBR) NULL, (SUBR) NULL                      },
-  { "loscilx",  sizeof(LOSCILX_OPCODE), 5,  "mmmmmmmmmmmmmmmm", "xkToojjoo",
+  { "loscilx",  sizeof(LOSCILX_OPCODE), TR|5,  "mmmmmmmmmmmmmmmm", "xkToojjoo",
     (SUBR) loscilx_opcode_init, (SUBR) NULL, (SUBR) loscilx_opcode_perf       }
 };
 
-LINKAGE
+LINKAGE1(loscilx_localops)
 
diff --git a/Opcodes/mandolin.c b/Opcodes/mandolin.c
index 706aeeb..97d032e 100644
--- a/Opcodes/mandolin.c
+++ b/Opcodes/mandolin.c
@@ -39,7 +39,8 @@
 /*  Technology Licensing, Stanford U.       */
 /********************************************/
 
-#include "csdl.h"
+// #include "csdl.h"
+#include "csoundCore.h"
 #include "mandolin.h"
 
 static inline int infoTick(MANDOL *p)
diff --git a/Opcodes/metro.c b/Opcodes/metro.c
index 04a973c..f22a7b8 100644
--- a/Opcodes/metro.c
+++ b/Opcodes/metro.c
@@ -251,10 +251,10 @@ static int timeseq(CSOUND *csound, TIMEDSEQ *p)
 #define S(x)    sizeof(x)
 
 static OENTRY localops[] = {
-  { "metro",  S(METRO),   3,      "k", "ko",    (SUBR)metro_set, (SUBR)metro   },
+  { "metro",  S(METRO),   3,      "k", "ko",  (SUBR)metro_set, (SUBR)metro     },
   { "splitrig", S(SPLIT_TRIG), 3, "",  "kkiiz",
-                                         (SUBR)split_trig_set, (SUBR)split_trig },
-  { "timedseq",S(TIMEDSEQ),    3, "k", "kiz",   (SUBR)timeseq_set, (SUBR)timeseq }
+                                        (SUBR)split_trig_set, (SUBR)split_trig },
+  { "timedseq",S(TIMEDSEQ), TR|3, "k", "kiz", (SUBR)timeseq_set, (SUBR)timeseq }
 };
 
 int metro_init_(CSOUND *csound)
diff --git a/Opcodes/minmax.c b/Opcodes/minmax.c
index 65a246b..b7e5b18 100644
--- a/Opcodes/minmax.c
+++ b/Opcodes/minmax.c
@@ -30,7 +30,9 @@
     02111-1307 USA
 */
 
-#include "csdl.h"
+// #include "csdl.h"
+#include "csoundCore.h"        
+#include "interlocks.h"
 #include <math.h>
 
 typedef struct {
@@ -289,7 +291,7 @@ static int MinAbs_krate(CSOUND *csound, MINMAX *data)
 
 #define S(x)    sizeof(x)
 
-static OENTRY localops[] = {
+static OENTRY minmax_localops[] = {
     {"maxaccum", S(MINMAXACCUM), 4, "", "aa", NULL, NULL, (SUBR) MaxAccumulate},
     {"minaccum", S(MINMAXACCUM), 4, "", "aa", NULL, NULL, (SUBR) MinAccumulate},
     {"maxabsaccum", S(MINMAXACCUM), 4, "", "aa", NULL, NULL,
@@ -310,5 +312,5 @@ static OENTRY localops[] = {
     {"minabs.k", S(MINMAX), 2, "k", "kz", NULL, (SUBR) MinAbs_krate, NULL}
 };
 
-LINKAGE
+LINKAGE1(minmax_localops)
 
diff --git a/Opcodes/mixer.cpp b/Opcodes/mixer.cpp
index 1b68213..86c9541 100644
--- a/Opcodes/mixer.cpp
+++ b/Opcodes/mixer.cpp
@@ -1,6 +1,7 @@
 #include "OpcodeBase.hpp"
 #include <map>
 #include <vector>
+#include "interlocks.h"
 
 // Define ENABLE_MIXER_IDEBUG to enable i-rate debug messages.
 //#define ENABLE_MIXER_IDEBUG
@@ -305,7 +306,7 @@ extern "C"
     {
       (char*)"MixerSetLevel",
       sizeof(MixerSetLevel),
-      3,
+      CW|3,
       (char*)"",
       (char*)"iik",
       (SUBR)&MixerSetLevel::init_,
@@ -315,7 +316,7 @@ extern "C"
     {
       (char*)"MixerSetLevel_i",
       sizeof(MixerSetLevel),
-      1,
+      CW|1,
       (char*)"",
       (char*)"iii",
       (SUBR)&MixerSetLevel::init_,
@@ -325,7 +326,7 @@ extern "C"
     {
       (char*)"MixerGetLevel",
       sizeof(MixerGetLevel),
-      3,
+      CR|3,
       (char*)"k",
       (char*)"ii",
       (SUBR)&MixerGetLevel::init_,
@@ -335,7 +336,7 @@ extern "C"
     {
       (char*)"MixerSend",
       sizeof(MixerSend),
-      5,
+      CR|5,
       (char*)"",
       (char*)"aiii",
       (SUBR)&MixerSend::init_,
@@ -345,7 +346,7 @@ extern "C"
     {
       (char*)"MixerReceive",
       sizeof(MixerReceive),
-      5,
+      CW|5,
       (char*)"a",
       (char*)"ii",
       (SUBR)&MixerReceive::init_,
diff --git a/Opcodes/modal4.c b/Opcodes/modal4.c
index bde2396..cedf057 100644
--- a/Opcodes/modal4.c
+++ b/Opcodes/modal4.c
@@ -28,12 +28,13 @@
 /*  wavetable, an envelope, and four reso- */
 /*  nances (Non-Sweeping BiQuad Filters).  */
 /*******************************************/
-#include "csdl.h"
+// #include "csdl.h"
+#include "csoundCore.h"
 #include "modal4.h"
 #include "marimba.h"
 #include "vibraphn.h"
 #include <math.h>
-
+#include "interlocks.h"
 static int make_Modal4(CSOUND *csound,
                        Modal4 *m, MYFLT *ifn, MYFLT vgain, MYFLT vrate)
 {
@@ -491,14 +492,14 @@ int agogobel(CSOUND *csound, VIBRAPHN *p)
 
 #define S       sizeof
 
-static OENTRY localops[] = {
-{ "marimba", S(MARIMBA), 5, "a", "kkiiikkiijj",
+static OENTRY modal4_localops[] = {
+{ "marimba", S(MARIMBA), TR|5, "a", "kkiiikkiijj",
                                  (SUBR)marimbaset, NULL, (SUBR)marimba},
-{ "vibes", S(VIBRAPHN),  5, "a", "kkiiikkii",
+{ "vibes", S(VIBRAPHN),  TR|5, "a", "kkiiikkii",
                                  (SUBR)vibraphnset,NULL,(SUBR)vibraphn},
-{ "gogobel",S(VIBRAPHN), 5, "a", "kkiiikki",
+{ "gogobel",S(VIBRAPHN), TR|5, "a", "kkiiikki",
                                  (SUBR)agogobelset,NULL, (SUBR)agogobel},
 };
 
-LINKAGE
+LINKAGE1(modal4_localops)
 
diff --git a/Opcodes/modmatrix.c b/Opcodes/modmatrix.c
index b4722a8..d406650 100644
--- a/Opcodes/modmatrix.c
+++ b/Opcodes/modmatrix.c
@@ -242,9 +242,9 @@ static int modmatrix(CSOUND *csound, MODMATRIX *m)
     return OK;
 }
 
-static OENTRY localops[] = {
+static OENTRY modmatrix_localops[] = {
     {
-        "modmatrix", sizeof(MODMATRIX), 3,
+        "modmatrix", sizeof(MODMATRIX), TB|3,
         "",
         "iiiiiik",
         (SUBR)modmatrix_init,
@@ -253,5 +253,5 @@ static OENTRY localops[] = {
     }
 };
 
-LINKAGE
+LINKAGE1(modmatrix_localops)
 
diff --git a/Opcodes/modmatrix.h b/Opcodes/modmatrix.h
index 0d700cb..4152643 100644
--- a/Opcodes/modmatrix.h
+++ b/Opcodes/modmatrix.h
@@ -17,7 +17,9 @@ License along with this library; if not, write to the Free Software
 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 */
 
-#include "csdl.h"
+//#include "csdl.h"
+#include "interlocks.h"
+#include "csoundCore.h"
 
 typedef struct {
     OPDS h;
@@ -34,7 +36,7 @@ typedef struct {
     int nummod, numparm;
     /* Variables for the preprocessed matrix */
     int doscan, scanned;
-	AUXCH aux;
+        AUXCH aux;
     MYFLT *proc_mat;
     int *mod_map, *parm_map;
     MYFLT *remap_mod, *remap_parm;
diff --git a/Opcodes/moog1.c b/Opcodes/moog1.c
index 12989f1..1bad0ba 100644
--- a/Opcodes/moog1.c
+++ b/Opcodes/moog1.c
@@ -21,7 +21,8 @@
     02111-1307 USA
 */
 
-#include "csdl.h"
+// #include "csdl.h"
+#include "csoundCore.h"
 #include "moog1.h"
 
 extern void make_TwoZero(TwoZero *);
diff --git a/Opcodes/mp3in.c b/Opcodes/mp3in.c
index 3a9f8dd..7a92959 100644
--- a/Opcodes/mp3in.c
+++ b/Opcodes/mp3in.c
@@ -22,7 +22,8 @@
 */
 
                                                         /* mp3in.c */
-#include "csdl.h"
+/* #include "csdl.h" */
+#include "csoundCore.h"
 #include "mp3dec.h"
 
 typedef struct {
@@ -35,14 +36,14 @@ typedef struct {
     MYFLT   *ibufsize;
  /* ------------------------------------- */
     mp3dec_t mpa;               /* For library */
-    int     r;                  /* Result field */
-    int     initDone;
-    int     bufSize;            /* in sample frames, power of two */
-    int     bufused;
-    int64_t pos;           /* type should be defined in sysdep.h */
-    uint8_t *buf;
-    AUXCH   auxch;
-    FDCH    fdch;
+    int      r;                  /* Result field */
+    int      initDone;
+    int      bufSize;            /* in sample frames, power of two */
+    uint32_t bufused;
+    int64_t  pos;           /* type should be defined in sysdep.h */
+    uint8_t  *buf;
+    AUXCH    auxch;
+    FDCH     fdch;
 } MP3IN;
 typedef struct {
     OPDS    h;
@@ -246,9 +247,9 @@ int mp3len(CSOUND *csound, MP3LEN *p)
 
 #define S(x)    sizeof(x)
 
-static OENTRY localops[] = {
+static OENTRY mp3in_localops[] = {
   {"mp3in",  S(MP3IN),  5, "aa", "Toooo", (SUBR) mp3ininit, NULL, (SUBR) mp3in},
   {"mp3len", S(MP3LEN), 1, "i",  "T",     (SUBR) mp3len,    NULL,  NULL}
 };
 
-LINKAGE
+LINKAGE1(mp3in_localops)
diff --git a/Opcodes/mutexops.cpp b/Opcodes/mutexops.cpp
index 3793e45..e610015 100644
--- a/Opcodes/mutexops.cpp
+++ b/Opcodes/mutexops.cpp
@@ -94,7 +94,7 @@ static int mutexUnlock(CSOUND *csound, OPCODE_MUTEX *p)
 
 #define S(x)    sizeof(x)
 
-static OENTRY localops[] = {
+OENTRY mutex_localops[] = {
   { (char*)"mutex_lock",   S(OPCODE_MUTEX),  2, (char*)"", (char*)"i",
     NULL, (SUBR)mutexLock, NULL   },
   { (char*)"mutex_unlock",  S(OPCODE_MUTEX), 2, (char*)"", (char*)"i",
@@ -106,4 +106,4 @@ static OENTRY localops[] = {
 };
 
 
-LINKAGE
+LINKAGE1(mutex_localops)
diff --git a/Opcodes/ogg.c b/Opcodes/ogg.c
index 2e48852..568f407 100644
--- a/Opcodes/ogg.c
+++ b/Opcodes/ogg.c
@@ -155,9 +155,9 @@ int oggread_perf (CSOUND *csound, OGGREAD * p)
 
 #define S(x)    sizeof(x)
 
-static OENTRY localops[] = {
+static OENTRY ogg_localops[] = {
   { "oggread",  S(OGGREAD),  5, "mm", "To",
     (SUBR) oggread_init, (SUBR) NULL, (SUBR) oggread_perf }
 };
 
-LINKAGE
+LINKAGE1(ogg_localops)
diff --git a/Opcodes/oggplay.c b/Opcodes/oggplay.c
index 59c1fe9..177c16c 100644
--- a/Opcodes/oggplay.c
+++ b/Opcodes/oggplay.c
@@ -140,9 +140,9 @@ int oggplay_perf (CSOUND *csound, OGGPLAY * p)
 
 #define S(x)    sizeof(x)
 
-static OENTRY localops[] = {
+static OENTRY oggplay_localops[] = {
     { "oggplay",  S(OGGPLAY),  5, "mm", "To",
       (SUBR) oggplay_init, (SUBR) NULL, (SUBR) oggplay_perf }
 };
 
-LINKAGE
+LINKAGE1(oggplay_localops)
diff --git a/Opcodes/oscbnk.c b/Opcodes/oscbnk.c
index 1b34bc5..7c59a94 100644
--- a/Opcodes/oscbnk.c
+++ b/Opcodes/oscbnk.c
@@ -2450,11 +2450,11 @@ static int rbjeq(CSOUND *csound, RBJEQ *p)
 /* ------------------------------------------------------------------------- */
 
 static const OENTRY localops[] = {
-    { "oscbnk",     sizeof(OSCBNK),     5,  "a",  "kkkkiikkkkikkkkkkikooooooo",
+    { "oscbnk",     sizeof(OSCBNK),     TR|5,  "a",  "kkkkiikkkkikkkkkkikooooooo",
             (SUBR) oscbnkset, (SUBR) NULL, (SUBR) oscbnk                },
-    { "grain2",     sizeof(GRAIN2),     5,      "a",    "kkkikiooo",
+    { "grain2",     sizeof(GRAIN2),     TR|5,      "a",    "kkkikiooo",
             (SUBR) grain2set, (SUBR) NULL, (SUBR) grain2                },
-    { "grain3",     sizeof(GRAIN3),     5,      "a",    "kkkkkkikikkoo",
+    { "grain3",     sizeof(GRAIN3),     TR|5,      "a",    "kkkkkkikikkoo",
             (SUBR) grain3set, (SUBR) NULL, (SUBR) grain3                },
     { "rnd31",      0xFFFF,             0,      NULL,   NULL,
             (SUBR) NULL, (SUBR) NULL, (SUBR) NULL                       },
@@ -2464,7 +2464,7 @@ static const OENTRY localops[] = {
             (SUBR) rnd31set, (SUBR) rnd31k, (SUBR) NULL                 },
     { "rnd31.a",    sizeof(RND31),      5,      "a",    "kko",
             (SUBR) rnd31set, (SUBR) NULL, (SUBR) rnd31a                 },
-    { "oscilikt",   0xFFFE,             0,      NULL,   NULL,
+    { "oscilikt",   0xFFFE,             TR,      NULL,   NULL,
             (SUBR) NULL, (SUBR) NULL, (SUBR) NULL                       },
     { "oscilikt.kk", sizeof(OSCKT),     7,      "s",    "kkkoo",
             (SUBR) oscktset, (SUBR) kosclikt, (SUBR)osckkikt            },
@@ -2474,17 +2474,17 @@ static const OENTRY localops[] = {
             (SUBR) oscktset, (SUBR) NULL, (SUBR) oscakikt               },
     { "oscilikt.aa", sizeof(OSCKT),     5,      "a",    "aakoo",
             (SUBR) oscktset, (SUBR) NULL, (SUBR) oscaaikt               },
-    { "osciliktp",  sizeof(OSCKTP),     5,      "a",    "kkko",
+    { "osciliktp",  sizeof(OSCKTP),     TR|5,      "a",    "kkko",
             (SUBR) oscktpset, (SUBR) NULL, (SUBR) oscktp                },
-    { "oscilikts",  sizeof(OSCKTS),     5,      "a",    "xxkako",
+    { "oscilikts",  sizeof(OSCKTS),     TR|5,      "a",    "xxkako",
             (SUBR) oscktsset, (SUBR) NULL, (SUBR) osckts                },
-    { "vco2init",   sizeof(VCO2INIT),   1,      "i",    "ijjjjj",
+    { "vco2init",   sizeof(VCO2INIT),   TW|1,      "i",    "ijjjjj",
             (SUBR) vco2init, (SUBR) NULL, (SUBR) NULL                   },
-    { "vco2ift",    sizeof(VCO2FT),     1,      "i",    "iov",
+    { "vco2ift",    sizeof(VCO2FT),     TW|1,      "i",    "iov",
             (SUBR) vco2ftset, (SUBR) NULL, (SUBR) NULL                  },
-    { "vco2ft",     sizeof(VCO2FT),     3,      "k",    "kov",
+    { "vco2ft",     sizeof(VCO2FT),     TW|3,      "k",    "kov",
             (SUBR) vco2ftset, (SUBR) vco2ft, (SUBR) NULL                },
-    { "vco2",       sizeof(VCO2),       5,      "a",    "kkoM",
+    { "vco2",       sizeof(VCO2),       TR|5,      "a",    "kkoM",
             (SUBR) vco2set, (SUBR) NULL, (SUBR) vco2                    },
     { "denorm",     sizeof(DENORMS),    4,      "",     "y",
             (SUBR) NULL, (SUBR) NULL, (SUBR) denorms                    },
diff --git a/Opcodes/p5glove.c b/Opcodes/p5glove.c
index 56ad729..5ce5f32 100644
--- a/Opcodes/p5glove.c
+++ b/Opcodes/p5glove.c
@@ -247,9 +247,9 @@ int p5g_data(CSOUND *csound, P5GLOVE *p)
 
 #define S(x)    sizeof(x)
 
-static OENTRY localops[] = {
+static OENTRY p5g_localops[] = {
   {"p5gconnect", S(P5GLOVEINIT), 3, "", "", (SUBR)p5glove_find, (SUBR)p5glove_poll, NULL, (SUBR)p5glove_closer },
   {"p5gdata", S(P5GLOVE), 3, "k", "k", (SUBR)p5g_data_init, (SUBR)p5g_data }
 };
 
-LINKAGE
+LINKAGE1(p5g_localops)
diff --git a/Opcodes/pan2.c b/Opcodes/pan2.c
index 3556368..e8d37f3 100644
--- a/Opcodes/pan2.c
+++ b/Opcodes/pan2.c
@@ -21,7 +21,9 @@
     02111-1307 USA
 */
 
-#include "csdl.h"
+// #include "csdl.h"
+#include "csoundCore.h"        
+#include "interlocks.h"
 
 #include <math.h>
 
@@ -94,12 +96,12 @@ static int pan2run(CSOUND *csound, PAN2 *p)
     return OK;
 }
 
-static OENTRY localops[] =
+static OENTRY pan2_localops[] =
 {
   { "pan2", sizeof(PAN2), 5, "aa", "axo", (SUBR) pan2set, 0, (SUBR) pan2run }
 };
 
-LINKAGE
+LINKAGE1(pan2_localops)
 
 
 
diff --git a/Opcodes/partikkel.c b/Opcodes/partikkel.c
index cdc6898..bf487a4 100644
--- a/Opcodes/partikkel.c
+++ b/Opcodes/partikkel.c
@@ -178,7 +178,7 @@ static inline MYFLT lrplookup(FUNC *tab, unsigned phase, MYFLT zscale,
 }
 
 /* Why not use csound->intpow ? */
-static inline double intpow(MYFLT x, unsigned n)
+static inline double intpow_(MYFLT x, unsigned n)
 {
     double ans = 1.0;
 
@@ -452,7 +452,7 @@ static int schedule_grain(CSOUND *csound, PARTIKKEL *p, NODE *node, int32 n,
             if (grain->harmonics < 2)
                 grain->harmonics = 2;
             grain->falloff = *p->falloff;
-            grain->falloff_pow_N = intpow(grain->falloff, grain->harmonics);
+            grain->falloff_pow_N = intpow_(grain->falloff, grain->harmonics);
             /* normalize trainlets to uniform peak, using geometric sum */
             if (FABS(grain->falloff) > FL(0.9999) &&
                 FABS(grain->falloff) < FL(1.0001))
@@ -834,9 +834,9 @@ static int partikkelsync(CSOUND *csound, PARTIKKELSYNC *p)
     return OK;
 }
 
-static OENTRY localops[] = {
+static OENTRY partikkel_localops[] = {
     {
-        "partikkel", sizeof(PARTIKKEL), 5,
+        "partikkel", sizeof(PARTIKKEL), TR|5,
         "ammmmmmm",
         "xkiakiiikkkkikkiiaikikkkikkkkkiaaaakkkkio",
         (SUBR)partikkel_init,
@@ -844,7 +844,7 @@ static OENTRY localops[] = {
         (SUBR)partikkel
     },
     {
-        "partikkelsync", sizeof(PARTIKKELSYNC), 5,
+        "partikkelsync", sizeof(PARTIKKELSYNC), TR|5,
         "am", "i",
         (SUBR)partikkelsync_init,
         (SUBR)NULL,
@@ -852,4 +852,5 @@ static OENTRY localops[] = {
     }
 };
 
-LINKAGE
+LINKAGE1(partikkel_localops)
+
diff --git a/Opcodes/partikkel.h b/Opcodes/partikkel.h
index bf217df..e9713ca 100644
--- a/Opcodes/partikkel.h
+++ b/Opcodes/partikkel.h
@@ -18,7 +18,8 @@ License along with this library; if not, write to the Free Software
 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 */
 
-#include "csdl.h"
+#include "csoundCore.h"
+#include "interlocks.h"
 
 typedef struct {
     FUNC *table;
diff --git a/Opcodes/phisem.c b/Opcodes/phisem.c
index 7a4d580..3073658 100644
--- a/Opcodes/phisem.c
+++ b/Opcodes/phisem.c
@@ -45,7 +45,9 @@
 /*  Sandpapr (sandpaper)                                  */
 /**********************************************************/
 
-#include "csdl.h"
+// #include "csdl.h"
+#include "csoundCore.h"        
+#include "interlocks.h"
 #include "phisem.h"
 #include <math.h>
 
@@ -900,7 +902,7 @@ static int wuterset(CSOUND *csound, WUTER *p)
 
     p->sndLevel = FL(0.0);
     p->kloop = (int)(p->h.insdshead->offtim * csound->ekr)
-		      - (int)(csound->ekr * *p->dettack);
+             - (int)(csound->ekr * *p->dettack);
 
     p->outputs00       = FL(0.0);
     p->outputs01       = FL(0.0);
@@ -1231,7 +1233,7 @@ static int sleighbells(CSOUND *csound, SLEIGHBELLS *p)
 
 #define S(x)    sizeof(x)
 
-static OENTRY localops[] = {
+static OENTRY phisem_localops[] = {
 { "cabasa",  S(CABASA),  5, "a", "iiooo",    (SUBR)cabasaset, NULL, (SUBR)cabasa},
 { "crunch",  S(CABASA),  5, "a", "iiooo",    (SUBR)crunchset, NULL, (SUBR)cabasa},
 { "sekere",  S(SEKERE),  5, "a", "iiooo",    (SUBR)sekereset, NULL, (SUBR)sekere},
@@ -1246,5 +1248,5 @@ static OENTRY localops[] = {
                                        (SUBR)sleighset, NULL, (SUBR)sleighbells }
 };
 
-LINKAGE
+LINKAGE1(phisem_localops)
 
diff --git a/Opcodes/physmod.c b/Opcodes/physmod.c
index 94e2906..cfa693b 100644
--- a/Opcodes/physmod.c
+++ b/Opcodes/physmod.c
@@ -23,13 +23,14 @@
 
 /* Collection of physical modelled instruments */
 
-#include "csdl.h"
+//#include "csdl.h"
+#include "csoundCore.h"
 #include "clarinet.h"
 #include "flute.h"
 #include "bowed.h"
 #include "brass.h"
 #include <math.h>
-
+#include "interlocks.h"
 /* ************************************** */
 /*  Waveguide Clarinet model ala Smith    */
 /*  after McIntyre, Schumacher, Woodhouse */
@@ -919,28 +920,28 @@ int shaker(void*,void*);
 int bowedbarset(void*,void*);
 int bowedbar(void*,void*);
 
-static OENTRY localops[] = {
-{ "wgclar",  S(CLARIN),5, "a", "kkkiikkkio",(SUBR)clarinset,NULL,   (SUBR)clarin},
-{ "wgflute", S(FLUTE), 5, "a", "kkkiikkkiovv",(SUBR)fluteset,NULL,  (SUBR)flute },
-{ "wgbow",   S(BOWED), 5, "a", "kkkkkkio", (SUBR)bowedset, NULL,    (SUBR)bowed },
-{ "wgbrass", S(BRASS), 5, "a", "kkkikkio", (SUBR)brassset, NULL,     (SUBR)brass},
-{ "mandol", S(MANDOL), 5, "a", "kkkkkkio", (SUBR)mandolinset, NULL,(SUBR)mandolin},
-{ "voice", S(VOICF),   5, "a", "kkkkkkii", (SUBR)voicformset, NULL,(SUBR)voicform},
-{ "fmbell",  S(FM4OP), 5, "a", "kkkkkkiiiii",
+static OENTRY physmod_localops[] = {
+{ "wgclar",  S(CLARIN),TR|5, "a", "kkkiikkkio",(SUBR)clarinset,NULL,   (SUBR)clarin},
+{ "wgflute", S(FLUTE), TR|5, "a", "kkkiikkkiovv",(SUBR)fluteset,NULL,  (SUBR)flute },
+{ "wgbow",   S(BOWED), TR|5, "a", "kkkkkkio", (SUBR)bowedset, NULL,    (SUBR)bowed },
+{ "wgbrass", S(BRASS), TR|5, "a", "kkkikkio", (SUBR)brassset, NULL,     (SUBR)brass},
+{ "mandol", S(MANDOL), TR|5, "a", "kkkkkkio", (SUBR)mandolinset, NULL,(SUBR)mandolin},
+{ "voice", S(VOICF),   TR|5, "a", "kkkkkkii", (SUBR)voicformset, NULL,(SUBR)voicform},
+{ "fmbell",  S(FM4OP), TR|5, "a", "kkkkkkiiiii",
                                             (SUBR)tubebellset,NULL,(SUBR)tubebell},
-{ "fmrhode", S(FM4OP), 5, "a", "kkkkkkiiiii",(SUBR)rhodeset,NULL,  (SUBR)tubebell},
-{ "fmwurlie", S(FM4OP),5, "a", "kkkkkkiiiii",(SUBR)wurleyset, NULL,(SUBR) wurley },
-{ "fmmetal", S(FM4OP), 5, "a", "kkkkkkiiiii",
+{ "fmrhode", S(FM4OP), TR|5, "a", "kkkkkkiiiii",(SUBR)rhodeset,NULL,  (SUBR)tubebell},
+{ "fmwurlie", S(FM4OP),TR|5, "a", "kkkkkkiiiii",(SUBR)wurleyset, NULL,(SUBR) wurley },
+{ "fmmetal", S(FM4OP), TR|5, "a", "kkkkkkiiiii",
                                           (SUBR)heavymetset, NULL, (SUBR)heavymet},
-{ "fmb3", S(FM4OP),    5, "a", "kkkkkkiiiii", (SUBR)b3set, NULL, (SUBR)hammondB3 },
-{ "fmvoice", S(FM4OPV),5, "a", "kkkkkkiiiii",(SUBR)FMVoiceset,NULL,(SUBR)FMVoice},
-{ "fmpercfl", S(FM4OP),5, "a", "kkkkkkiiiii",
+{ "fmb3", S(FM4OP),    TR|5, "a", "kkkkkkiiiii", (SUBR)b3set, NULL, (SUBR)hammondB3 },
+{ "fmvoice", S(FM4OPV),TR|5, "a", "kkkkkkiiiii",(SUBR)FMVoiceset,NULL,(SUBR)FMVoice},
+{ "fmpercfl", S(FM4OP),TR|5, "a", "kkkkkkiiiii",
                                         (SUBR)percfluteset, NULL, (SUBR)percflute},
-{ "moog", S(MOOG1),    5, "a", "kkkkkkiii", (SUBR)Moog1set, NULL, (SUBR)Moog1  },
+{ "moog", S(MOOG1),    TR|5, "a", "kkkkkkiii", (SUBR)Moog1set, NULL, (SUBR)Moog1  },
 { "shaker", S(SHAKER), 5, "a", "kkkkko",  (SUBR)shakerset, NULL,   (SUBR)shaker},
 { "wgbowedbar", S(BOWEDBAR), 5, "a","kkkkkoooo",
                              (SUBR)bowedbarset, NULL,(SUBR) bowedbar },
 };
 
-LINKAGE
+LINKAGE1(physmod_localops)
 
diff --git a/Opcodes/physutil.c b/Opcodes/physutil.c
index eaacd63..8701c50 100644
--- a/Opcodes/physutil.c
+++ b/Opcodes/physutil.c
@@ -25,7 +25,8 @@
    opcodes, in no particular order
 */
 
-#include "csdl.h"
+// #include "csdl.h"
+#include "csoundCore.h"
 #include <stdlib.h>
 #include "physutil.h"
 
diff --git a/Opcodes/pitch.c b/Opcodes/pitch.c
index e10169d..c4061cf 100644
--- a/Opcodes/pitch.c
+++ b/Opcodes/pitch.c
@@ -23,7 +23,8 @@
     02111-1307 USA
 */
 
-#include "csdl.h"       /*                              PITCH.C         */
+// #include "csdl.h"
+#include "csoundCore.h"       /*                              PITCH.C         */
 #include <math.h>
 #include <limits.h>
 #include "cwindow.h"
@@ -1693,6 +1694,7 @@ int impulse(CSOUND *csound, IMPULSE *p)
     int n, nsmps = csound->ksmps;
     int next = p->next;
     MYFLT *ar = p->ar;
+    if (next<0) next = -next;
     if (UNLIKELY(next < csound->ksmps)) {          /* Impulse in this frame */
       MYFLT frq = *p->freq;     /* Freq at k-rate */
       int sfreq;                /* Converted to samples */
@@ -1915,7 +1917,8 @@ int trnsetr(CSOUND *csound, TRANSEG *p)
     int         relestim;
     NSEG        *segp;
     int         nsegs;
-    MYFLT       **argp, val;
+    MYFLT       **argp;
+    double      val;
 
     if (UNLIKELY(p->INOCOUNT%3!=1))
       csound->InitError(csound, Str("Incorrect argument count in transegr"));
@@ -1927,18 +1930,18 @@ int trnsetr(CSOUND *csound, TRANSEG *p)
     }
     segp[nsegs-1].cnt = MAXPOS;       /* set endcount for safety */
     argp = p->argums;
-    val = **argp++;
-    if (**argp <= FL(0.0)) return OK; /* if idur1 <= 0, skip init  */
+    val = (double)**argp++;
+    if (UNLIKELY(**argp <= FL(0.0))) return OK; /* if idur1 <= 0, skip init  */
     p->curval = val;
     p->curcnt = 0;
     p->cursegp = segp - 1;            /* else setup null seg0 */
     p->segsrem = nsegs + 1;
     p->curx = FL(0.0);
     do {                              /* init each seg ..  */
-      MYFLT dur = **argp++;
+      double dur = (double)**argp++;
       MYFLT alpha = **argp++;
       MYFLT nxtval = **argp++;
-      MYFLT d = dur * csound->esr;
+      MYFLT d = dur * csound->ekr;
       if ((segp->cnt = (int32)(d + FL(0.5))) < 0)
         segp->cnt = 0;
       else
@@ -1949,18 +1952,21 @@ int trnsetr(CSOUND *csound, TRANSEG *p)
         segp->c1 = (nxtval-val)/d;
       }
       else {
+        p->lastalpha = alpha;
         segp->c1 = (nxtval - val)/(FL(1.0) - EXP(alpha));
       }
       segp->alpha = alpha/d;
       val = nxtval;
       segp++;
+      p->finalval = nxtval;
     } while (--nsegs);
-    p->xtra = -1;
+    //p->xtra = -1;
     p->alpha = ((NSEG*)p->auxch.auxp)[0].alpha;
     p->curinc = ((NSEG*)p->auxch.auxp)[0].c1;
     relestim = (int)(p->cursegp + p->segsrem - 1)->cnt;
+    p->xtra = relestim;
     if (relestim > p->h.insdshead->xtratim)
-      p->h.insdshead->xtratim = relestim;
+      p->h.insdshead->xtratim = (int)relestim;
     return OK;
 }
 
@@ -1978,6 +1984,15 @@ int ktrnsegr(CSOUND *csound, TRANSEG *p)
           p->segsrem--;
         }                               /*   get univ relestim  */
         segp->cnt = p->xtra>=0 ? p->xtra : p->h.insdshead->xtratim;
+        if (segp->alpha == FL(0.0)) {
+          segp->c1 = (p->finalval-p->curval)/segp->cnt;
+        }
+        else {
+          /* this is very wrong */
+          segp->c1 = (p->finalval - p->curval)/(FL(1.0) - EXP(p->lastalpha));
+          segp->alpha = p->lastalpha/segp->cnt;
+          segp->val = p->curval;
+        }
         goto newm;                      /*   and set new curmlt */
       }
       if (--p->curcnt <= 0) {           /* if done cur segment  */
@@ -2008,28 +2023,38 @@ int trnsegr(CSOUND *csound, TRANSEG *p)
 {
     MYFLT  val, *rs = p->rslt;
     int         n, nsmps = csound->ksmps;
-    NSEG        *segp = p->cursegp;
     if (UNLIKELY(p->auxch.auxp==NULL)) {
       return csound->PerfError(csound, Str("transeg: not initialised (arate)\n"));
     }
     val = p->curval;                      /* sav the cur value    */
-    if (p->segsrem) {                     /* if no more segs putk */
+    if (LIKELY(p->segsrem)) {             /* if no more segs putk */ 
+      NSEG  *segp;
       if (p->h.insdshead->relesing && p->segsrem > 1) {
-        while (p->segsrem > 1) {        /* if reles flag new    */
-          segp = ++p->cursegp;          /*   go to last segment */
+        while (p->segsrem > 1) {          /* if release flag new  */
+          segp = ++p->cursegp;            /*   go to last segment */
           p->segsrem--;
-        }                               /*   get univ relestim  */
+        }                                 /*   get univ relestim  */
         segp->cnt = p->xtra>=0 ? p->xtra : p->h.insdshead->xtratim;
-        goto newm;                      /*   and set new curmlt */
+        if (segp->alpha == FL(0.0)) {
+          segp->c1 = (p->finalval-val)/segp->cnt;
+        }
+        else {
+          /* this is very wrong */
+          segp->c1 = (p->finalval - val)/(FL(1.0) - EXP(p->lastalpha));
+          segp->alpha = p->lastalpha/segp->cnt;
+          segp->val = val;
+        }
+        goto newm;                        /*   and set new curmlt */
       }
       if (--p->curcnt <= 0) {             /*  if done cur segment */
         segp = p->cursegp;
       chk1:
+        if (p->segsrem == 2) goto putk;     /*   seg Y rpts lastval */
         if (UNLIKELY(!--p->segsrem)) {    /*   if none left       */
-          val = p->curval = segp->nxtpt;
+          //val = p->curval = segp->nxtpt;
           goto putk;                      /*      put endval      */
         }
-        p->cursegp = ++segp;              /*   else find the next */
+        segp = ++p->cursegp;              /*   else find the next */
       newm:
        if (!(p->curcnt = segp->cnt)) {
           val = p->curval = segp->nxtpt;  /*   nonlen = discontin */
@@ -2047,16 +2072,16 @@ int trnsegr(CSOUND *csound, TRANSEG *p)
         }
       }
       else {
+        segp = p->cursegp;
         for (n=0; n<nsmps; n++) {
           rs[n] = val;
           p->curx += p->alpha;
-          val = segp->val + p->curinc *
-            (FL(1.0) - EXP(p->curx));
+          val = segp->val + p->curinc * (FL(1.0) - EXP(p->curx));
         }
       }
       p->curval = val;
       return OK;
-putk:
+    putk:
       for (n=0; n<nsmps; n++) {
         rs[n] = val;
       }
@@ -2312,7 +2337,6 @@ int kmedfilt(CSOUND *csound, MEDFILT *p)
     int maxwind = p->maxwind;
     int kwind = MYFLT2LONG(*p->kwind);
     int index = p->ind;
-    int n, nsmps=csound->ksmps;
     if (UNLIKELY(p->b.auxp==NULL)) {
       return csound->PerfError(csound, Str("median: not initialised (krate)\n"));
     }
diff --git a/Opcodes/pitch.h b/Opcodes/pitch.h
index 242c91f..1d9f3c8 100644
--- a/Opcodes/pitch.h
+++ b/Opcodes/pitch.h
@@ -189,6 +189,7 @@ typedef struct {
         MYFLT   curx;
         AUXCH   auxch;
         int32   xtra;
+        MYFLT   finalval, lastalpha;
 } TRANSEG;
 
 typedef struct {
diff --git a/Opcodes/pitch0.c b/Opcodes/pitch0.c
index 5f93f77..b80c8b3 100644
--- a/Opcodes/pitch0.c
+++ b/Opcodes/pitch0.c
@@ -21,7 +21,8 @@
     02111-1307 USA
 */
 
-#include "csdl.h"       /*                                  PITCH.C       */
+// #include "csdl.h"
+#include "csoundCore.h"       /*                                  PITCH.C       */
 #include "cwindow.h"
 #include <limits.h>
 #include "spectra.h"
diff --git a/Opcodes/pitchtrack.c b/Opcodes/pitchtrack.c
index a72b02d..8a072ae 100644
--- a/Opcodes/pitchtrack.c
+++ b/Opcodes/pitchtrack.c
@@ -25,7 +25,8 @@
     02111-1307 USA
 */
 
-#include "csdl.h"
+#include "csoundCore.h"
+#include "interlocks.h"
 #include <math.h>
 
 #define MINFREQINBINS 5
@@ -494,7 +495,7 @@ int pitchafproc(CSOUND *csound, PITCHAF *p)
     MYFLT *buff2 = (MYFLT *)p->buff2.auxp;
     MYFLT *cor = (MYFLT *)p->cor.auxp;
     MYFLT *s = p->asig, pitch;
-    MYFLT ifmax = *p->kfmax;
+    //MYFLT ifmax = *p->kfmax;
 
     for (n=0; n < ksmps; n++) {
       for (i=0,j=lag; i < len; i++) {
@@ -534,10 +535,10 @@ int pitchafproc(CSOUND *csound, PITCHAF *p)
 
 #define S(x)    sizeof(x)
 
-static OENTRY localops[] = {
+static OENTRY pitchtrack_localops[] = {
   {"ptrack", S(PITCHTRACK), 5, "kk", "aio", (SUBR)pitchtrackinit, NULL, (SUBR)pitchtrackprocess},
   {"pitchac", S(PITCHTRACK), 5, "k", "akki", (SUBR)pitchafset, NULL, (SUBR)pitchafproc}
 };
 
-LINKAGE
+LINKAGE1(pitchtrack_localops)
 
diff --git a/Opcodes/psynth.c b/Opcodes/psynth.c
index ad502c4..b586fac 100644
--- a/Opcodes/psynth.c
+++ b/Opcodes/psynth.c
@@ -295,7 +295,7 @@ static int psynth2_init(CSOUND *csound, _PSYN2 *p)
 
 static int psynth2_process(CSOUND *csound, _PSYN2 *p)
 {
-    double   ampnext, amp, freq, freqnext, phase, phasenext, ratio;
+    double   ampnext, amp, freq, freqnext, phase, phasenext;
     double  a2, a3, cph;
     double   phasediff, facsqr, ph;
     double   a, frac, incra, incrph, factor, lotwopi, cnt;
@@ -316,7 +316,6 @@ static int psynth2_process(CSOUND *csound, _PSYN2 *p)
 
     incrph = csound->onedsr;
     lotwopi = (double)(size) / TWOPI_F;
-    ratio = size * csound->onedsr;
     factor = p->factor;
     facsqr = p->facsqr;
     maxtracks = p->numbins > maxtracks ? maxtracks : p->numbins;
@@ -421,7 +420,7 @@ static int psynth2_process(CSOUND *csound, _PSYN2 *p)
 
 static int psynth3_process(CSOUND *csound, _PSYN *p)
 {
-    double   ampnext, amp, freq, freqnext, phase, phasenext, ratio;
+    double   ampnext, amp, freq, freqnext, phase, phasenext;
     double  a2, a3, cph;
     double   phasediff, facsqr, ph;
     double   a, frac, incra, incrph, factor, lotwopi, cnt;
@@ -442,7 +441,6 @@ static int psynth3_process(CSOUND *csound, _PSYN *p)
 
     incrph = csound->onedsr;
     lotwopi = (double) (size) / TWOPI_F;
-    ratio = size * csound->onedsr;
     factor = p->factor;
     facsqr = p->facsqr;
     maxtracks = p->numbins > maxtracks ? maxtracks : p->numbins;
@@ -889,7 +887,7 @@ static int trmix_process(CSOUND *csound, _PSMIX *p)
     float   *framein2 = (float *) p->fsig3->frame.auxp;
     float   *frameout = (float *) p->fsig1->frame.auxp;
     float   *framein1 = (float *) p->fsig2->frame.auxp;
-    int     i = 0, j = 0, k = 0, id = (int) framein1[3], end = p->numbins * 4;
+    int     i = 0, j = 0, id = (int) framein1[3], end = p->numbins * 4;
 
     if (p->lastframe < p->fsig2->framecount) {
 
@@ -901,7 +899,6 @@ static int trmix_process(CSOUND *csound, _PSMIX *p)
         i += 4;
         id = (int) framein1[i + 3];
       }
-      k = i;
       id = (int) framein2[3];
       while (id != -1 && i < end && j < end) {
         frameout[i] = framein2[j];
@@ -916,7 +913,6 @@ static int trmix_process(CSOUND *csound, _PSMIX *p)
         frameout[i + 3] = -1.0f;
       p->fsig1->framecount = p->lastframe = p->fsig2->framecount;
 
-/*csound->Message(csound, "mix %d : %d\n", k/4, j/4);*/
     }
 
     return OK;
@@ -1204,10 +1200,10 @@ static OENTRY localops[] =
     {"tradsyn", sizeof(_PSYN), 5, "a", "fkkki", (SUBR) psynth_init, NULL,
      (SUBR) psynth_process}
     ,
-    {"sinsyn", sizeof(_PSYN2), 5, "a", "fkki", (SUBR) psynth2_init, NULL,
+    {"sinsyn", sizeof(_PSYN2), TR|5, "a", "fkki", (SUBR) psynth2_init, NULL,
      (SUBR) psynth2_process}
     ,
-    {"resyn", sizeof(_PSYN), 5, "a", "fkkki", (SUBR) psynth_init, NULL,
+    {"resyn", sizeof(_PSYN), TR|5, "a", "fkkki", (SUBR) psynth_init, NULL,
      (SUBR) psynth3_process}
     ,
     {"trscale", sizeof(_PTRANS), 3, "f", "fz", (SUBR) trans_init,
diff --git a/Opcodes/pvadd.c b/Opcodes/pvadd.c
index b223f0e..ea08d41 100644
--- a/Opcodes/pvadd.c
+++ b/Opcodes/pvadd.c
@@ -68,17 +68,16 @@ int pvaddset(CSOUND *csound, PVADD *p)
     char     pvfilnam[MAXNAME];
     int      size;
     FUNC     *ftp = NULL, *AmpGateFunc = NULL;
-    MYFLT    *oscphase;
     int32     memsize;
 
-   if (*p->ifn > FL(0.0))
-     if (UNLIKELY((ftp = csound->FTFind(csound, p->ifn)) == NULL))
-       return NOTOK;
-   p->ftp = ftp;
+    if (*p->ifn > FL(0.0))
+      if (UNLIKELY((ftp = csound->FTFind(csound, p->ifn)) == NULL))
+        return NOTOK;
+    p->ftp = ftp;
 
-   if (*p->igatefun > FL(0.0))
-     if (UNLIKELY((AmpGateFunc = csound->FTFind(csound, p->igatefun)) == NULL))
-       return NOTOK;
+    if (*p->igatefun > FL(0.0))
+      if (UNLIKELY((AmpGateFunc = csound->FTFind(csound, p->igatefun)) == NULL))
+        return NOTOK;
     p->AmpGateFunc = AmpGateFunc;
 
     csound->strarg2name(csound, pvfilnam, p->ifilno, "pvoc.", p->XSTRCODE);
@@ -120,8 +119,6 @@ int pvaddset(CSOUND *csound, PVADD *p)
      p->frPtr = (float*) p->pvcopy;
    }
 
-    oscphase = p->oscphase;
-
     memset(p->oscphase, 0, MAXBINS*sizeof(MYFLT));
 
     ibins = (*p->ibins <= FL(0.0) ? (size / 2) : (int) *p->ibins);
diff --git a/Opcodes/pvinterp.c b/Opcodes/pvinterp.c
index db21f54..329db06 100644
--- a/Opcodes/pvinterp.c
+++ b/Opcodes/pvinterp.c
@@ -40,7 +40,7 @@ int pvbufreadset(CSOUND *csound, PVBUFREAD *p)
 {
     char     pvfilnam[MAXNAME];
     PVOCEX_MEMFILE  pp;
-    int      frInc, chans, size; /* THESE SHOULD BE SAVED IN PVOC STRUCT */
+    int      frInc, chans; /* THESE SHOULD BE SAVED IN PVOC STRUCT */
 
     {
       PVOC_GLOBALS  *p_ = PVOC_GetGlobals(csound);
@@ -89,7 +89,6 @@ int pvbufreadset(CSOUND *csound, PVBUFREAD *p)
     p->maxFr = pp.nframes - 1;
     p->frPktim = (MYFLT) csound->ksmps / (MYFLT) frInc;
     p->frPrtim = csound->esr / (MYFLT) frInc;
-    size = pvfrsiz(p);          /* size used in def of OPWLEN ? */
     p->prFlg = 1;       /* true */
     /* amplitude scale for PVOC */
  /* p->scale = (MYFLT) pp.fftsize * ((MYFLT) pp.fftsize / (MYFLT) pp.winsize);
@@ -140,7 +139,7 @@ int pvinterpset(CSOUND *csound, PVINTERP *p)
     int      i;
     char     pvfilnam[MAXNAME];
     PVOCEX_MEMFILE  pp;
-    int      frInc, chans, size; /* THESE SHOULD BE SAVED IN PVOC STRUCT */
+    int      frInc, chans; /* THESE SHOULD BE SAVED IN PVOC STRUCT */
 
     p->pp = PVOC_GetGlobals(csound);
     p->pvbufread = p->pp->pvbufreadaddr;
@@ -193,7 +192,6 @@ int pvinterpset(CSOUND *csound, PVINTERP *p)
     /* factor by which to mult expand phase diffs (ratio of samp spacings) */
     p->frPrtim = csound->esr / (MYFLT) frInc;
     /* factor by which to mulitply 'real' time index to get frame index */
-    size = pvfrsiz(p);          /* size used in def of OPWLEN ? */
     /* amplitude scale for PVOC */
  /* p->scale = (MYFLT) pp.fftsize * ((MYFLT) pp.fftsize / (MYFLT) pp.winsize);
   */
@@ -314,7 +312,7 @@ int pvcrossset(CSOUND *csound, PVCROSS *p)
     int      i;
     char     pvfilnam[MAXNAME];
     PVOCEX_MEMFILE  pp;
-    int      frInc, chans, size; /* THESE SHOULD BE SAVED IN PVOC STRUCT */
+    int      frInc, chans; /* THESE SHOULD BE SAVED IN PVOC STRUCT */
 
     p->pp = PVOC_GetGlobals(csound);
     p->pvbufread = p->pp->pvbufreadaddr;
@@ -365,7 +363,6 @@ int pvcrossset(CSOUND *csound, PVCROSS *p)
     /* factor by which to mult expand phase diffs (ratio of samp spacings) */
     p->frPrtim = csound->esr / (MYFLT) frInc;
     /* factor by which to mulitply 'real' time index to get frame index */
-    size = pvfrsiz(p);          /* size used in def of OPWLEN ? */
     /* amplitude scale for PVOC */
  /* p->scale = (MYFLT) pp.fftsize * ((MYFLT) pp.fftsize / (MYFLT) pp.winsize);
   */
diff --git a/Opcodes/pvlock.c b/Opcodes/pvlock.c
index b6f105e..7c3fe82 100644
--- a/Opcodes/pvlock.c
+++ b/Opcodes/pvlock.c
@@ -1,4 +1,28 @@
-#include "csdl.h"
+/*
+    crossfm.c:
+
+    Copyright (C) 2009 V Lazzarini
+
+    This file is part of Csound.
+
+    The Csound Library is free software; you can redistribute it
+    and/or modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    Csound 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 Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with Csound; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+    02111-1307 USA
+*/
+
+#include "csoundCore.h"
+#include "interlocks.h"
 #include "pstream.h"
 #define MAXOUTS 2
 
@@ -69,7 +93,7 @@ static int sprocess(CSOUND *csound, DATASPACE *p)
 {
     MYFLT pitch = *p->kpitch, *time = p->time, lock = *p->klock,
       *out, amp =*p->kamp;
-    MYFLT *tab, frac,scale;
+    MYFLT *tab, frac;
     FUNC *ft;
     int N = p->N, hsize = p->hsize, cnt = p->cnt, nchans = p->nchans;
     int ksmps = csound->GetKsmps(csound), n;
@@ -102,12 +126,12 @@ static int sprocess(CSOUND *csound, DATASPACE *p)
            esr is sampling rate
         */
         spos  = hsize*(int)((time[n])*csound->esr/hsize);
-	sizefrs = size/nchans;
-	while(spos > sizefrs - N) spos -= sizefrs;
-	while(spos <= hsize)  spos += sizefrs;
+        sizefrs = size/nchans;
+        while(spos > sizefrs - N) spos -= sizefrs;
+        while(spos <= hsize)  spos += sizefrs;
         pos = spos;
 
-	for (j = 0; j < nchans; j++) {
+        for (j = 0; j < nchans; j++) {
 
           bwin = (MYFLT *) p->bwin[j].auxp;
           fwin = (MYFLT *) p->fwin[j].auxp;
@@ -212,7 +236,7 @@ static int sprocess(CSOUND *csound, DATASPACE *p)
           /* write to overlapped output frames */
           for (i=0;i<N;i++) outframe[framecnt[curframe]+i] = win[i]*fwin[i];
         
-	}
+        }
 
         cnt=0;
         curframe++;
@@ -259,7 +283,7 @@ static int sprocess2(CSOUND *csound, DATASPACE *p)
 {
     MYFLT pitch = *p->kpitch, time = *p->time, lock = *p->klock;
     MYFLT *out, amp =*p->kamp;
-    MYFLT *tab,frac,scale,  dbtresh = *p->dbthresh;
+    MYFLT *tab,frac,  dbtresh = *p->dbthresh;
     FUNC *ft;
     int N = p->N, hsize = p->hsize, cnt = p->cnt, sizefrs, nchans = p->nchans;
     int  ksmps = csound->GetKsmps(csound), n;
@@ -336,7 +360,7 @@ static int sprocess2(CSOUND *csound, DATASPACE *p)
             nwin[i] = in * win[i];
             pos += pitch;
           }
-	 
+         
           csound->RealFFT(csound, bwin, N);
           bwin[N] = bwin[1];
           bwin[N+1] = FL(0.0);
@@ -417,14 +441,14 @@ static int sprocess2(CSOUND *csound, DATASPACE *p)
            
       for (j=0; j < nchans; j++) {
         out = p->out[j];
-	framecnt  = (int *) p->framecount[j].auxp;
-	outframe  = (MYFLT *) p->outframe[j].auxp;
+        framecnt  = (int *) p->framecount[j].auxp;
+        outframe  = (MYFLT *) p->outframe[j].auxp;
  
         out[n] = (MYFLT) 0;
      
         for (i = 0; i < decim; i++) {
           out[n] += outframe[framecnt[i]];
-          framecnt[i]++;	
+          framecnt[i]++;        
         }
         out[n] *= amp*(2./3.);
       }
@@ -472,8 +496,8 @@ static int pvslockset(CSOUND *csound, PVSLOCK *p)
 
 static int pvslockproc(CSOUND *csound, PVSLOCK *p)
 {
-    int i,n,k,j, maxmagi;
-    float mag,  maxmag, *fout = (float *) p->fout->frame.auxp, 
+    int i;
+    float *fout = (float *) p->fout->frame.auxp, 
       *fin = (float *) p->fin->frame.auxp;
     int N = p->fin->N;
   
@@ -481,7 +505,7 @@ static int pvslockproc(CSOUND *csound, PVSLOCK *p)
       memcpy(fout,fin, sizeof(float)*(N+2));
   
       if (*p->klock) {
-        for (i=2, n = 0; i < N-4; i+=2){
+        for (i=2; i < N-4; i+=2){
           float p2 = fin[i];
           float p3 = fin[i+2];
           float p1 = fin[i-2];
@@ -503,7 +527,7 @@ static int pvslockproc(CSOUND *csound, PVSLOCK *p)
     return OK;
 }
 
-static OENTRY localops[] = {
+static OENTRY pvlock_localops[] = {
   {"mincer", sizeof(DATASPACE), 5, "mm", "akkkkoo",
                                                (SUBR)sinit, NULL,(SUBR)sprocess },
   {"temposcal", sizeof(DATASPACE), 5, "mm", "kkkkkooPOP",
@@ -512,4 +536,4 @@ static OENTRY localops[] = {
          (SUBR) pvslockproc},
 };
 
-LINKAGE
+LINKAGE1(pvlock_localops)
diff --git a/Opcodes/pvoc.c b/Opcodes/pvoc.c
index b42f66d..2635ecb 100644
--- a/Opcodes/pvoc.c
+++ b/Opcodes/pvoc.c
@@ -33,12 +33,12 @@ int     pvinterpset(CSOUND *, void *), pvinterp(CSOUND *, void *);
 
 #define S(x)    sizeof(x)
 
-static OENTRY localops[] = {
+static OENTRY pvoc_localops[] = {
 { "pvoc",      S(PVOC),      5, "a",  "kkToooo", pvset, NULL, pvoc            },
-{ "tableseg",  S(TABLESEG),  3, "",   "iin",     tblesegset, ktableseg, NULL  },
-{ "ktableseg", S(TABLESEG),  3, "",   "iin",     tblesegset, ktableseg, NULL  },
-{ "tablexseg", S(TABLESEG),  3, "",   "iin",     tblesegset, ktablexseg, NULL },
-{ "vpvoc",     S(VPVOC),     5, "a",  "kkToo",   vpvset, NULL, vpvoc          },
+{ "tableseg",  S(TABLESEG),  TR|3, "",   "iin",     tblesegset, ktableseg, NULL  },
+{ "ktableseg", S(TABLESEG),  DP|TR|3, "",   "iin",  tblesegset, ktableseg, NULL  },
+{ "tablexseg", S(TABLESEG),  TW|3, "",   "iin",     tblesegset, ktablexseg, NULL },
+{ "vpvoc",     S(VPVOC),     TR|5, "a",  "kkToo",   vpvset, NULL, vpvoc          },
 { "pvread",    S(PVREAD),    3, "kk", "kTi",     pvreadset, pvread, NULL      },
 { "pvcross",   S(PVCROSS),   5, "a",  "kkTkko",  pvcrossset, NULL, pvcross    },
 { "pvbufread", S(PVBUFREAD), 3, "",   "kT",      pvbufreadset, pvbufread, NULL},
@@ -64,5 +64,5 @@ PVOC_GLOBALS *PVOC_AllocGlobals(CSOUND *csound)
     return p;
 }
 
-LINKAGE
+LINKAGE1(pvoc_localops)
 
diff --git a/Opcodes/pvoc.h b/Opcodes/pvoc.h
index 95756b4..c3deebe 100644
--- a/Opcodes/pvoc.h
+++ b/Opcodes/pvoc.h
@@ -22,7 +22,9 @@
 #ifndef CSOUND_PVOC_H
 #define CSOUND_PVOC_H
 
-#include "csdl.h"
+// #include "csdl.h"
+#include "csoundCore.h"        
+#include "interlocks.h" 
 
 typedef struct PVOC_GLOBALS_ PVOC_GLOBALS;
 
diff --git a/Opcodes/pvocext.c b/Opcodes/pvocext.c
index 7a250ff..e00feeb 100644
--- a/Opcodes/pvocext.c
+++ b/Opcodes/pvocext.c
@@ -46,18 +46,13 @@ void SpectralExtract(
     )
 {
     int32    i, j, k;
-    float   *frm0, *frm1;
-    int32    ampindex, freqindex, ampfrmjump;
+    float   *frm_1;
+    int32    ampindex, freqindex;
     MYFLT   freqTemp, freqframes[10], freqdiff=FL(0.0), ampscale;
     int32            framecurb;
 
-    frm0 = inp;
-    frm1 = pvcopy;
     memcpy(pvcopy, inp, (fsize+2L)*MaxFrame*sizeof(float));
-    /* for (i=0; i<(fsize+2L)*MaxFrame; i++) */
-    /*   *frm1++ = *frm0++; */
-    frm1 = pvcopy;
-    ampfrmjump = (fsize+2L) / 2L;
+    frm_1 = pvcopy;
     for (j=0; j<(fsize/2L + 1L); j++) {
       ampindex = j + j;
       freqindex = ampindex + 1L;
@@ -66,7 +61,7 @@ void SpectralExtract(
         freqdiff = FL(0.0);
         /* get frequencies from 6 or less consecutive frames */
         for (k=0; k<=framecurb; k++)
-          freqframes[k] = *(frm1 + freqindex + ((fsize+2L)*k) +
+          freqframes[k] = *(frm_1 + freqindex + ((fsize+2L)*k) +
                             ((fsize+2L)*i));
 
         /* average the deviation over framecurb interframe periods */
@@ -78,18 +73,18 @@ void SpectralExtract(
         if (mode==1) { /* lets through just the "noisy" parts */
           if (freqdiff > freqlim && freqdiff < freqlim * 2) {
             ampscale = (freqdiff - freqlim) / freqlim;
-            frm1[ampindex+((fsize+2L)*i)] *= ampscale;
+            frm_1[ampindex+((fsize+2L)*i)] *= ampscale;
           }
           else if (freqdiff <= freqlim)
-            frm1[ampindex+((fsize+2L)*i)] = FL(0.0);
+            frm_1[ampindex+((fsize+2L)*i)] = FL(0.0);
         }
         else if (mode==2) { /* lets through just the stable-pitched parts */
           if (freqdiff < freqlim) {
             ampscale = (freqlim - freqdiff) / freqlim;
-            frm1[ampindex+((fsize+2L)*i)] *= ampscale;
+            frm_1[ampindex+((fsize+2L)*i)] *= ampscale;
           }
           else
-            frm1[ampindex+((fsize+2L)*i)] = FL(0.0);
+            frm_1[ampindex+((fsize+2L)*i)] = FL(0.0);
         }
       }
     }
@@ -102,17 +97,17 @@ MYFLT PvocMaxAmp(
     )
 {
     int32    j, k;
-    float   *frm0, *frmx;
+    float   *frm_0, *frmx;
     int32    ampindex;
     MYFLT   MaxAmpInData = FL(0.0);
 
-    frm0 = inp;
+    frm_0 = inp;
 
 /* find max amp in the whole pvoc file */
     for (j=0; j<(fsize/2L + 1L); ++j) {
       ampindex = j + j;
       for (k=0; k<=MaxFrame; k++) {
-        frmx = frm0 + ((fsize+2L)*k);
+        frmx = frm_0 + ((fsize+2L)*k);
         MaxAmpInData = (frmx[ampindex] > MaxAmpInData ?
                         frmx[ampindex] : MaxAmpInData);
       }
diff --git a/Opcodes/pvs_ops.c b/Opcodes/pvs_ops.c
index 2779fe7..255c8ee 100644
--- a/Opcodes/pvs_ops.c
+++ b/Opcodes/pvs_ops.c
@@ -21,13 +21,15 @@
 
 #include "pvs_ops.h"
 
+/*
 PUBLIC int csoundModuleCreate(CSOUND *csound)
 {
     (void) csound;
     return 0;
 }
+*/
 
-PUBLIC int csoundModuleInit(CSOUND *csound)
+PUBLIC int pvsopc_ModuleInit(CSOUND *csound)
 {
     int     err = 0;
 
@@ -42,8 +44,10 @@ PUBLIC int csoundModuleInit(CSOUND *csound)
     return (err ? CSOUND_ERROR : CSOUND_SUCCESS);
 }
 
+/*
 PUBLIC int csoundModuleInfo(void)
 {
     return ((CS_APIVERSION << 16) + (CS_APISUBVER << 8) + (int) sizeof(MYFLT));
 }
+*/
 
diff --git a/Opcodes/pvs_ops.h b/Opcodes/pvs_ops.h
index 6b0f02b..6704885 100644
--- a/Opcodes/pvs_ops.h
+++ b/Opcodes/pvs_ops.h
@@ -22,7 +22,11 @@
 #ifndef CSOUND_PVS_OPS_H
 #define CSOUND_PVS_OPS_H
 
-#include "csdl.h"
+/* #include "csdl.h" */
+#include "csoundCore.h"
+
+#include "interlocks.h"
+
 
 extern int ifd_init_(CSOUND *);
 extern int partials_init_(CSOUND *);
diff --git a/Opcodes/pvsbasic.c b/Opcodes/pvsbasic.c
index 820e46b..b282511 100644
--- a/Opcodes/pvsbasic.c
+++ b/Opcodes/pvsbasic.c
@@ -444,8 +444,8 @@ int pvstanal(CSOUND *csound, PVST *p)
       /* audio samples are stored in a function table */
       ft = csound->FTnp2Find(csound,p->knum);
       if (ft == NULL){
-	csound->PerfError(csound, "could not find table number %d\n", (int) *p->knum);
-	return NOTOK;
+        csound->PerfError(csound, "could not find table number %d\n", (int) *p->knum);
+        return NOTOK;
 
       }
 
@@ -466,7 +466,7 @@ int pvstanal(CSOUND *csound, PVST *p)
         for (j=0; j < nchans; j++) {
           memset(p->fout[j]->frame.auxp, 0, sizeof(float)*(N+2));
            p->fout[j]->framecount++;
-	}
+        }
          goto end;
       }
 
@@ -491,7 +491,7 @@ int pvstanal(CSOUND *csound, PVST *p)
           frac = pos  - post;
           post *= nchans;
           post += j;
-	  if (post < 0 || post >= size ) in = 0.0;
+          if (post < 0 || post >= size ) in = 0.0;
           else in = tab[post] + frac*(tab[post+nchans] - tab[post]);
           fwin[i] = amp * in * win[i]; /* window it */
           /* back windo, bwin */
@@ -508,7 +508,7 @@ int pvstanal(CSOUND *csound, PVST *p)
           if (post < 0 || post >= size ) in = 0.0;
           else in =  tab[post];
           nwin[i] = amp * in * win[i];
-	  }
+          }
           /* increment read pos according to pitch transposition */
           pos += pitch;
         }
@@ -754,12 +754,12 @@ static int pvsoscprocess(CSOUND *csound, PVSOSC *p)
           if (cbin != 0)     {
             for (i=cbin-1;i < cbin+3 &&i < NB ; i++) {
             if (i-cfbin == 0) a = 1;
-	    else a = sin(i-cfbin)/(i-cfbin);
+            else a = sin(i-cfbin)/(i-cfbin);
             fout[i].re = amp*a*a*a;
             fout[i].im = freq;
           }
           if (type==2) m++;
-	  }
+          }
         }
       }
       return OK;
@@ -792,7 +792,7 @@ static int pvsoscprocess(CSOUND *csound, PVSOSC *p)
           fout[k+1] = freq;
         }
         if (type==2) n++;
-	 }
+         }
       }
       p->fout->framecount = p->lastframe;
     }
@@ -2158,8 +2158,7 @@ int  pvs2tab(CSOUND *csound, PVS2TAB_T *p){
   for(i = 0; i < size && i < N+2; i++)
       p->ans->data[i] = (MYFLT) fsig[i];   
   *p->framecount = (MYFLT) p->fsig->framecount;
-  
-  
+  return OK; 
 }
 
 typedef struct tab2pvs_t { 
@@ -2218,7 +2217,8 @@ static OENTRY localops[] = {
    (SUBR) pvsshift},
   {"pvsfilter", sizeof(PVSFILTER), 3, "f", "fffp", (SUBR) pvsfilterset,
    (SUBR) pvsfilter},
-  {"pvscale", sizeof(PVSSCALE), 3, "f", "fkOPO", (SUBR) pvsscaleset, (SUBR) pvsscale},
+  {"pvscale", sizeof(PVSSCALE), 3, "f", "fkOPO", 
+              (SUBR) pvsscaleset, (SUBR) pvsscale},
   {"pvshift", sizeof(PVSSHIFT), 3, "f", "fkkOPO", (SUBR) pvsshiftset,
    (SUBR) pvsshift},
   {"pvsmix", sizeof(PVSMIX), 3, "f", "ff", (SUBR) pvsmixset, (SUBR) pvsmix, NULL},
@@ -2226,7 +2226,7 @@ static OENTRY localops[] = {
    (SUBR) pvsfilter},
   {"pvsblur", sizeof(PVSBLUR), 3, "f", "fki", (SUBR) pvsblurset, (SUBR) pvsblur,
    NULL},
-  {"pvstencil", sizeof(PVSTENCIL), 3, "f", "fkki", (SUBR) pvstencilset,
+  {"pvstencil", sizeof(PVSTENCIL), TR|3, "f", "fkki", (SUBR) pvstencilset,
    (SUBR) pvstencil},
   {"pvsinit", sizeof(PVSINI), 1, "f", "ioopo", (SUBR) pvsinit, NULL, NULL},
   {"pvsbin", sizeof(PVSBIN), 3, "ss", "fk", (SUBR) pvsbinset,
diff --git a/Opcodes/pvsbuffer.c b/Opcodes/pvsbuffer.c
index 5b174a4..7e1448c 100644
--- a/Opcodes/pvsbuffer.c
+++ b/Opcodes/pvsbuffer.c
@@ -19,7 +19,10 @@
     02111-1307 USA
 */
 
-#include "csdl.h"
+// #include "csdl.h"
+#include "csoundCore.h"
+#include "interlocks.h"
+
 #include "pstream.h"
 
 typedef struct {
@@ -82,7 +85,8 @@ static int pvsbufferset(CSOUND *csound, PVSBUFFER *p)
      phandle = (FSIG_HANDLE **) csound->QueryGlobalVariable(csound,varname);
      /*csound->Message(csound, "%p -> %p \n", p->handle, phandle); */
     if (phandle == NULL)
-      csound->InitError(csound, Str("error... could not create global var for handle\n"));
+      csound->InitError(csound,
+                        Str("error... could not create global var for handle\n"));
     else
       *phandle = p->handle;
      }
@@ -133,14 +137,16 @@ typedef struct {
 static int pvsbufreadset(CSOUND *csound, PVSBUFFERREAD *p)
 {
     int N;
-    FSIG_HANDLE *handle, **phandle;
+    FSIG_HANDLE *handle=NULL, **phandle;
     char varname[32];
 
     sprintf(varname, "::buffer%d", (int)(*p->hptr));
     /* csound->Message(csound, "%s:\n", varname); */
     phandle = (FSIG_HANDLE **) csound->QueryGlobalVariable(csound,varname);
     if (phandle == NULL)
-      csound->InitError(csound, Str("error... could not read handle from global variable\n"));
+      csound->InitError(csound,
+                        Str("error... could not read handle from "
+                            "global variable\n"));
     else
       handle = *phandle;
     p->optr = *p->hptr;
@@ -187,7 +193,9 @@ static int pvsbufreadset(CSOUND *csound, PVSBUFFERREAD *p)
      sprintf(varname, "::buffer%d", (int)(*p->hptr));
      phandle = (FSIG_HANDLE **) csound->QueryGlobalVariable(csound,varname);
      if (phandle == NULL)
-       csound->PerfError(csound, Str("error... could not read handle from global variable\n"));
+       csound->PerfError(csound,
+                         Str("error... could not read handle "
+                             "from global variable\n"));
      else
        handle = *phandle;
    }
@@ -273,13 +281,15 @@ static int pvsbufreadproc2(CSOUND *csound, PVSBUFFERREAD *p)
       frames = handle->frames-1;
       ftab = csound->FTFind(csound, p->strt);
       if (ftab->flen < N/2+1) 
-        csound->PerfError(csound, "table length too small: needed %d, got %d\n",
+        csound->PerfError(csound,
+                          Str("table length too small: needed %d, got %d\n"),
                           N/2+1, ftab->flen);
       tab = tab1 = ftab->ftable;
       ftab = csound->FTFind(csound, p->end);
       if (ftab->flen < N/2+1) 
-         csound->PerfError(csound, "table length too small: needed %d, got %d\n",
-                                   N/2+1, ftab->flen);
+        csound->PerfError(csound,
+                          Str("table length too small: needed %d, got %d\n"),
+                          N/2+1, ftab->flen);
       tab2 = ftab->ftable;
       for (i=0; i < N+2; i++){
         pos = (*p->ktime - tab[i])*(sr/overlap);
@@ -293,9 +303,9 @@ static int pvsbufreadproc2(CSOUND *csound, PVSBUFFERREAD *p)
            frac = pos - posi;
            fout[i] = frame1[i] + frac*(frame2[i] - frame1[i]);
         } else
-	  fout[i] = 0.0f;
+          fout[i] = 0.0f;
         if (tab == tab1) tab = tab2;
-	  else tab = tab1;
+          else tab = tab1;
       }
       p->scnt -= overlap;
       p->fout->framecount++;
@@ -311,10 +321,15 @@ static int pvsbufreadproc2(CSOUND *csound, PVSBUFFERREAD *p)
 
 #define S(x)    sizeof(x)
 
-static OENTRY localops[] = {
-  {"pvsbuffer", S(PVSBUFFER), 3, "ik", "fi", (SUBR)pvsbufferset, (SUBR)pvsbufferproc, NULL},
-  {"pvsbufread", S(PVSBUFFERREAD), 3, "f", "kkOOo", (SUBR)pvsbufreadset, (SUBR)pvsbufreadproc, NULL},
-  {"pvsbufread2", S(PVSBUFFERREAD), 3, "f", "kkkk", (SUBR)pvsbufreadset, (SUBR)pvsbufreadproc2, NULL}
+/* static */ 
+static OENTRY pvsbuffer_localops[] = {
+  {"pvsbuffer", S(PVSBUFFER), 3, "ik", "fi",
+   (SUBR)pvsbufferset, (SUBR)pvsbufferproc, NULL},
+  {"pvsbufread", S(PVSBUFFERREAD), 3, "f", "kkOOo",
+   (SUBR)pvsbufreadset, (SUBR)pvsbufreadproc, NULL},
+  {"pvsbufread2", S(PVSBUFFERREAD), 3, "f", "kkkk",
+   (SUBR)pvsbufreadset, (SUBR)pvsbufreadproc2, NULL}
 };
 
-LINKAGE
+LINKAGE1(pvsbuffer_localops)
+/* LINKAGE */
diff --git a/Opcodes/pvsgendy.c b/Opcodes/pvsgendy.c
index ef6c1dc..df4415a 100644
--- a/Opcodes/pvsgendy.c
+++ b/Opcodes/pvsgendy.c
@@ -107,11 +107,12 @@ static int pvsgendy(CSOUND *csound, PVSGENDY *p)
     return csound->PerfError(csound, Str("pvsgendy: not initialised"));
 }
 
-static OENTRY localops[] = {
-  {"pvsgendy", sizeof(PVSGENDY), 3, "f", "fkk", (SUBR) pvsgendyinit, (SUBR) pvsgendy, (SUBR) NULL }
+static OENTRY pvsgendy_localops[] = {
+  { "pvsgendy", sizeof(PVSGENDY), 3, "f", "fkk",
+                (SUBR) pvsgendyinit, (SUBR) pvsgendy, (SUBR) NULL }
 };
 
-LINKAGE
+LINKAGE1(pvsgendy_localops)
 
 
 
diff --git a/Opcodes/py/pythonopcodes.c b/Opcodes/py/pythonopcodes.c
index 1a37331..1117521 100644
--- a/Opcodes/py/pythonopcodes.c
+++ b/Opcodes/py/pythonopcodes.c
@@ -244,7 +244,7 @@ static int pylcallni_irate(CSOUND *csound, PYCALLN *p)
 
   /* PYTHON OPCODES */
 
-static OENTRY localops[] = {
+OENTRY python_localops[] = {
 
   /* INITIALIZATION */
 
@@ -398,5 +398,5 @@ static OENTRY localops[] = {
 
 };
 
-LINKAGE
+LINKAGE1(python_localops)
 
diff --git a/Opcodes/py/pyx.auto.c b/Opcodes/py/pyx.auto.c
index 3427b0e..e6a6227 100644
--- a/Opcodes/py/pyx.auto.c
+++ b/Opcodes/py/pyx.auto.c
@@ -14,6 +14,7 @@ static int pyexec_krate(CSOUND *csound, PYEXEC *p)
     return OK;
 }
 
+#if 0
 static int pyexeci_irate(CSOUND *csound, PYEXEC *p)
 {
     char      source[1024];
@@ -28,6 +29,7 @@ static int pyexeci_irate(CSOUND *csound, PYEXEC *p)
     Py_DECREF(result);
     return OK;
 }
+#endif
 
 static int pylexec_irate(CSOUND *csound, PYEXEC *p)
 {
@@ -240,6 +242,7 @@ static int pyeval_krate(CSOUND *csound, PYEVAL *p)
     return OK;
 }
 
+#if 0
 static int pyevali_irate(CSOUND *csound, PYEVAL *p)
 {
     char      source[1024];
@@ -260,6 +263,7 @@ static int pyevali_irate(CSOUND *csound, PYEVAL *p)
     Py_DECREF(result);
     return OK;
 }
+#endif
 
 static int pyleval_irate(CSOUND *csound, PYEVAL *p)
 {
@@ -386,6 +390,7 @@ static int pyassign_krate(CSOUND *csound, PYASSIGN *p)
     return OK;
 }
 
+#if 0
 static int pyassigni_irate(CSOUND *csound, PYASSIGN *p)
 {
     char      source[1024];
@@ -400,6 +405,7 @@ static int pyassigni_irate(CSOUND *csound, PYASSIGN *p)
     Py_DECREF(result);
     return OK;
 }
+#endif
 
 static int pylassign_irate(CSOUND *csound, PYASSIGN *p)
 {
diff --git a/Opcodes/scoreline.c b/Opcodes/scoreline.c
index bb0ce7e..306814d 100644
--- a/Opcodes/scoreline.c
+++ b/Opcodes/scoreline.c
@@ -21,7 +21,9 @@
     02111-1307 USA
 */
 
-#include "csdl.h"
+//#include "csdl.h"
+#include "csoundCore.h"
+
 typedef struct _inmess {
   OPDS h;
   MYFLT *SMess, *ktrig;
@@ -55,13 +57,11 @@ int rewindscore(CSOUND *csound, SCOREPOS *p){
 }
 
 
-static OENTRY localops[] = {
+static OENTRY scoreline_localops[] = {
   {"scoreline_i", sizeof(INMESS), 1, "", "S", (SUBR)messi, NULL, NULL},
   {"scoreline", sizeof(INMESS), 2, "", "Sk", NULL, (SUBR)messk, NULL},
   {"setscorepos", sizeof(SCOREPOS), 1, "", "i", (SUBR)setscorepos, NULL, NULL},
   {"rewindscore", sizeof(SCOREPOS), 1, "", "", (SUBR)rewindscore, NULL, NULL}
 };
 
-
-
-LINKAGE
+LINKAGE1(scoreline_localops)
diff --git a/Opcodes/seqtime.c b/Opcodes/seqtime.c
index 576d78d..5a7ea21 100644
--- a/Opcodes/seqtime.c
+++ b/Opcodes/seqtime.c
@@ -255,8 +255,8 @@ static int seqtim2(CSOUND *csound, SEQTIM2 *p)
 #define S(x)    sizeof(x)
 
 static OENTRY localops[] = {
-{ "seqtime", S(SEQTIM),  3, "k",    "kkkkk", (SUBR)seqtim_set, (SUBR)seqtim   },
-{ "seqtime2", S(SEQTIM2),3, "k",    "kkkkkk", (SUBR)seqtim2_set, (SUBR)seqtim2}
+{ "seqtime", S(SEQTIM),  TR|3, "k",    "kkkkk", (SUBR)seqtim_set, (SUBR)seqtim   },
+{ "seqtime2", S(SEQTIM2),TR|3, "k",    "kkkkkk", (SUBR)seqtim2_set, (SUBR)seqtim2}
 };
 
 int seqtime_init_(CSOUND *csound)
diff --git a/Opcodes/serial.c b/Opcodes/serial.c
index 6dbe222..2883889 100644
--- a/Opcodes/serial.c
+++ b/Opcodes/serial.c
@@ -1,25 +1,56 @@
+/*****************************************************
+ 
+			CSOUND SERIAL PORT OPCODES
+			  ma++ ingalls, 2011/9/4
+                     modified for WIndows John ffitch
+ * based on "Arduino-serial"
+ * Copyright (c) 2006, Tod E. Kurt, tod at todbot.com
+ * http://todbot.com/blog/
+
+    Copyright (C) 2011 matt ingalls 
+    based on "Arduino-serial", Copyright (c) 2006, Tod E. Kurt, tod at todbot.com
+    http://todbot.com/blog/ and licenced LGPL to csound
+
+    This file is part of Csound.
+
+    The Csound Library is free software; you can redistribute it
+    and/or modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    Csound 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 Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with Csound; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+    02111-1307 USA
+*/
+ 
 #include <stdlib.h> 
 #include <stdint.h>   /* Standard types */
 #include <string.h>   /* String function definitions */
+
+#ifndef WIN32
 #include <unistd.h>   /* UNIX standard function definitions */
 #include <fcntl.h>    /* File control definitions */
-#include <errno.h>    /* Error number definitions */
 #include <termios.h>  /* POSIX terminal control definitions */
 #include <sys/ioctl.h>
-#include <getopt.h>
+#else
+#include "windows.h"
+#endif
 
 #include "csdl.h"
-#include "csound.h"
+
+/* **************************************************
+   As far as I can tell his should work on Windows
+   as well using "COM1" etc
+   ************************************************** */
+
 
 /*****************************************************
- 
-			CSOUND SERIAL PORT OPCODES
-			  ma++ ingalls, 2011/9/4
- 
- * based on "Arduino-serial"
- * Copyleft (c) 2006, Tod E. Kurt, tod at todbot.com
- * http://todbot.com/blog/
- 
 
 open a port.  baudRate defaults to 9600
 	iPort  serialBegin         SPortName [, baudRate ]
@@ -62,6 +93,28 @@ TODO: (might need some kind of threaded buffer-read?)
  
 *****************************************************/
 
+#ifdef WIN32
+typedef struct SERIAL_GLOBALS_ {
+    CSOUND  *csound;
+    int     maxind;
+    HANDLE  handles[10];
+} SERIAL_GLOBALS;
+
+static HANDLE get_port(CSOUND *csound, int port)
+{
+    HANDLE hport;
+    SERIAL_GLOBALS *q;
+    q = (SERIAL_GLOBALS*) csound->QueryGlobalVariable(csound,
+                                                      "serialGlobals_");
+    if (q == NULL) {
+      csound->PerfError(csound, Str("No ports available"));
+      return NULL;
+    }
+    hport = (HANDLE)q->handles[port];  
+    return hport;
+}
+#endif
+
 typedef struct {
     OPDS  h;
     MYFLT *returnedPort, *portName, *baudRate;
@@ -113,16 +166,18 @@ typedef struct {
 int serialPeekByte(CSOUND *csound, SERIALPEEK *p);
 //------------------
 
-
+#ifndef WIN32
 // takes the string name of the serial port (e.g. "/dev/tty.usbserial","COM1")
 // and a baud rate (bps) and connects to that port at that speed and 8N1.
 // opens the port in fully raw mode so you can send binary data.
 // returns valid fd, or -1 on error
-int serialport_init(const char* serialport, int baud)
+int serialport_init(CSOUND *csound, const char* serialport, int baud)
 {
     struct termios toptions;
     int fd;
-    
+    speed_t brate;
+
+    csound = NULL;              /* Not used */
     fprintf(stderr,"init_serialport: opening port %s @ %d bps\n",
             serialport,baud);
 	
@@ -136,21 +191,20 @@ int serialport_init(const char* serialport, int baud)
       perror("init_serialport: Couldn't get term attributes");
       return -1;
     }
-    //speed_t brate = baud; // let you override switch below if needed
-    speed_t brate = B9600;  // ma++ changed to always default to 9600
     switch(baud) {
-    case 4800:   brate=B4800;   break;
-    case 9600:   brate=B9600;   break;
+    default:     brate = B9600;   break;
+    case 4800:   brate = B4800;   break;
+    case 9600:   brate = B9600;   break;
 #ifdef B14400
-    case 14400:  brate=B14400;  break;
+    case 14400:  brate = B14400;  break;
 #endif
-    case 19200:  brate=B19200;  break;
+    case 19200:  brate = B19200;  break;
 #ifdef B28800
-    case 28800:  brate=B28800;  break;
+    case 28800:  brate = B28800;  break;
 #endif
-    case 38400:  brate=B38400;  break;
-    case 57600:  brate=B57600;  break;
-    case 115200: brate=B115200; break;
+    case 38400:  brate = B38400;  break;
+    case 57600:  brate = B57600;  break;
+    case 115200: brate = B115200; break;
     }
     cfsetispeed(&toptions, brate);
     cfsetospeed(&toptions, brate);
@@ -180,33 +234,156 @@ int serialport_init(const char* serialport, int baud)
 	
     return fd;
 }
+#else
+
+int serialport_init(CSOUND *csound, const char* serialport, int baud)
+{
+    HANDLE hSerial;
+    DCB dcbSerialParams = {0};
+    int i;
+    /* NEED TO CREATE A GLOBAL FOR HANDLE */
+    SERIAL_GLOBALS *q;
+    q = (SERIAL_GLOBALS*) csound->QueryGlobalVariable(csound,
+                                                      "serialGlobals_");
+    if (q == NULL) {
+      if (csound->CreateGlobalVariable(csound, "serialGlobals_",
+                                       sizeof(SERIAL_GLOBALS)) != 0)
+        csound->Die(csound, Str("serial: failed to allocate globals"));
+      q = (SERIAL_GLOBALS*) csound->QueryGlobalVariable(csound,
+                                                      "serialGlobals_");
+      q->csound = csound;
+      q->maxind = 0;
+    }
+    /* WCHAR wport[256]; */
+    /* MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED, serialport, */
+    /*                     strlen(serialport)+1,  */
+    /*                     (LPCSTR)wport, 256); */
+    /* hSerial = CreateFile(serialport, GENERIC_READ | GENERIC_WRITE, 0,  */
+    /*                      0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); */
+    hSerial = CreateFileA(serialport, GENERIC_READ | GENERIC_WRITE, 0, 
+                         NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
+ //Check if the connection was successfull
+    if (hSerial==INVALID_HANDLE_VALUE) {
+      //If not success full display an Error
+      return csound->InitError(csound, Str("%s not available.\n"), serialport);
+    }
+    memset(&dcbSerialParams, 0, sizeof(dcbSerialParams));
+    dcbSerialParams.DCBlength=sizeof(dcbSerialParams);
+    switch (baud) {
+    case 1200:  dcbSerialParams.BaudRate = CBR_1200; break;
+    case 2400:  dcbSerialParams.BaudRate = CBR_2400; break;
+    case 4800:  dcbSerialParams.BaudRate = CBR_4800; break;
+    default:
+    case 9600:  dcbSerialParams.BaudRate = CBR_9600; break;
+    case 14400:  dcbSerialParams.BaudRate = CBR_14400; break;
+    case 19200:  dcbSerialParams.BaudRate = CBR_19200; break;
+    case 38400:  dcbSerialParams.BaudRate = CBR_38400; break;
+    case 56000:  dcbSerialParams.BaudRate = CBR_56000; break;
+    case 57600:  dcbSerialParams.BaudRate = CBR_57600; break;
+    case 115200:  dcbSerialParams.BaudRate = CBR_115200; break;
+    case 128000:  dcbSerialParams.BaudRate = CBR_128000; break;
+    case 256000:  dcbSerialParams.BaudRate = CBR_256000; break;
+    }
+    dcbSerialParams.ByteSize=8;
+    dcbSerialParams.StopBits=ONESTOPBIT;
+    dcbSerialParams.Parity=NOPARITY;
+    SetCommState(hSerial, &dcbSerialParams);
+    for(i=0; i>q->maxind; i++) {
+      if (q->handles[i]==NULL) {
+        q->handles[i] = hSerial;
+        return i;
+      }
+    }
+    if (q->maxind>=10)
+      return csound->InitError(csound, Str("Number of serial handles exhausted"));
+    q->handles[q->maxind++] = hSerial;
+    return q->maxind-1;
+}
+/* Also
+#define BAUD_075        1
+#define BAUD_110        2
+#define BAUD_134_5        4
+#define BAUD_150        8
+#define BAUD_300        16
+#define BAUD_600        32
+#define BAUD_1200        64
+#define BAUD_1800        128
+#define BAUD_2400        256
+#define BAUD_4800        512
+#define BAUD_7200        1024
+#define BAUD_9600        2048
+#define BAUD_14400        4096
+#define BAUD_19200        8192
+#define BAUD_38400        16384
+#define BAUD_56K        32768
+#define BAUD_128K        65536
+#define BAUD_115200        131072
+#define BAUD_57600        262144
+*/
+#endif
+
 
 int serialBegin(CSOUND *csound, SERIALBEGIN *p)
 {
-    *p->returnedPort = serialport_init((char *)p->portName, *p->baudRate);
+    *p->returnedPort =
+      (MYFLT)serialport_init(csound, (char *)p->portName, *p->baudRate);
     return OK;
 }
+
 int serialEnd(CSOUND *csound, SERIALEND *p)
 {
-    close(*p->port);
+#ifdef WN32
+    SERIAL_GLOBALS *q;
+    q = (SERIAL_GLOBALS*) csound->QueryGlobalVariable(csound,
+                                                      "serialGlobals_");
+    if (q = NULL) 
+      return csound->PerfError(csound, Str("Nothing to close"));
+    CloseHandle((HANDLE)q->handles[(int)p->port]);
+    q->handles[(int)*p->port] = NULL;
+#else
+    close((int)*p->port);
+#endif
     return OK;
 }
+
 int serialWrite(CSOUND *csound, SERIALWRITE *p)
 {
-    if (p->XSTRCODE & 2)
-      write(*p->port, p->toWrite, strlen((char *)p->toWrite));
+#ifdef WIN32
+    HANDLE port = get_port(csound, (int)*p->port);
+    if (port==NULL) return NOTOK;  
+#endif  
+    if (p->XSTRCODE & 2) {
+#ifndef WIN32
+      write((int)*p->port, p->toWrite, strlen((char *)p->toWrite));
+#else
+      int nbytes;
+      WriteFile(port,p->toWrite, strlen((char *)p->toWrite),
+                (PDWORD)&nbytes, NULL);
+#endif
+    }
     else {
       unsigned char b = *p->toWrite;
-      write(*p->port, &b, 1);
+#ifndef WIN32
+      write((int)*p->port, &b, 1);
+#else
+      int nbytes;
+      WriteFile(port, &b, 1, (PDWORD)&nbytes, NULL);
+#endif
     }
-
     return OK;
 }
 
 int serialRead(CSOUND *csound, SERIALREAD *p)
 {
     unsigned char b = 0;
-    ssize_t bytes = read(*p->port, &b, 1);
+    ssize_t bytes;
+#ifdef WIN32
+    HANDLE port = get_port(csound, (int)*p->port);
+    if (port==NULL) return NOTOK;  
+    ReadFile(port, &b, 1, (PDWORD)&bytes, NULL);
+#else
+    bytes = read((int)*p->port, &b, 1);
+#endif
     if (bytes > 0)
       *p->rChar = b;
     else 
@@ -218,7 +395,14 @@ int serialRead(CSOUND *csound, SERIALREAD *p)
 int serialPrint(CSOUND *csound, SERIALPRINT *p)
 {
     char str[32768];
-    ssize_t bytes = read(*p->port, str, 32768);
+    ssize_t bytes;
+#ifdef WIN32
+    HANDLE port = get_port(csound, (int)*p->port);
+    if (port==NULL) return NOTOK;  
+    ReadFile(port, str, 32768, (PDWORD)&bytes, NULL);
+#else
+    bytes  = read((int)*p->port, str, 32768);
+#endif
     if (bytes > 0) {
       str[bytes] = 0; // terminate
       csound->MessageS(csound, CSOUNDMSG_ORCH, "%s", str);
@@ -228,7 +412,9 @@ int serialPrint(CSOUND *csound, SERIALPRINT *p)
 
 int serialFlush(CSOUND *csound, SERIALFLUSH *p)
 {
+#ifndef WIN32
     tcflush(*p->port, TCIFLUSH); // who knows if this works...
+#endif
     return OK;
 }
 
@@ -247,7 +433,7 @@ int serialPeekByte(CSOUND *csound, SERIALPEEK *p)
 
 #define S(x)    sizeof(x)
 
-static OENTRY localops[] = {
+static OENTRY serial_localops[] = {
     { (char *)"serialBegin", S(SERIALBEGIN), 1, (char *)"i", (char *)"So",
       (SUBR)serialBegin, (SUBR)NULL, (SUBR)NULL   },
     { (char *)"serialEnd", S(SERIALEND), 2, (char *)"", (char *)"i",
@@ -262,8 +448,10 @@ static OENTRY localops[] = {
       (SUBR)NULL, (SUBR)serialPrint, (SUBR)NULL   },
     { (char *)"serialFlush", S(SERIALFLUSH), 2, (char *)"", (char *)"i",
       (SUBR)NULL, (SUBR)serialFlush, (SUBR)NULL   },
-    { (char *)"serialAvailable", S(SERIALAVAIL), 2, (char *)"k", (char *)"i",
-      (SUBR)NULL, (SUBR)serialAvailable, (SUBR)NULL   },
-    { (char *)"serialPeekByte", S(SERIALPEEK), 2, (char *)"k", (char *)"i",
-      (SUBR)NULL, (SUBR)serialPeekByte, (SUBR)NULL   }
+    /* { (char *)"serialAvailable", S(SERIALAVAIL), 2, (char *)"k", (char *)"i", */
+    /*   (SUBR)NULL, (SUBR)serialAvailable, (SUBR)NULL   }, */
+    /* { (char *)"serialPeekByte", S(SERIALPEEK), 2, (char *)"k", (char *)"i", */
+    /*   (SUBR)NULL, (SUBR)serialPeekByte, (SUBR)NULL   } */
 };
+
+LINKAGE1(serial_localops)
diff --git a/Opcodes/sfont.c b/Opcodes/sfont.c
index dff7df6..82cd1e4 100644
--- a/Opcodes/sfont.c
+++ b/Opcodes/sfont.c
@@ -29,7 +29,9 @@
    documentation of your C compiler to choose the appropriate compiler
    directive switch.  */
 
-#include "csdl.h"
+// #include "csdl.h"
+#include "csoundCore.h"        
+#include "interlocks.h"
 #include <stdio.h>
 #include <stdlib.h>
 #include <math.h>
@@ -65,12 +67,13 @@ typedef struct _sfontg {
   MYFLT pitches[128];
 } sfontg;
 
-PUBLIC int csoundModuleDestroy(CSOUND *csound)
+PUBLIC int sfont_ModuleDestroy(CSOUND *csound)
 {
     int j,k,l;
     SFBANK *sfArray;
     sfontg *globals;
     globals = (sfontg *) (csound->QueryGlobalVariable(csound, "::sfontg"));
+    if (globals == NULL) return 0;
     sfArray = globals->sfArray;
 
     for (j=0; j<globals->currSFndx; j++) {
@@ -2522,7 +2525,7 @@ static OENTRY localops[] = {
 { NULL, 0, 0, NULL, NULL, (SUBR) NULL, (SUBR) NULL, (SUBR) NULL }
 };
 
-PUBLIC int csoundModuleCreate(CSOUND *csound)
+PUBLIC int sfont_ModuleCreate(CSOUND *csound)
 {
     int j;
     sfontg *globals;
@@ -2543,7 +2546,7 @@ PUBLIC int csoundModuleCreate(CSOUND *csound)
     return OK;
 }
 
-PUBLIC int csoundModuleInit(CSOUND *csound)
+PUBLIC int sfont_ModuleInit(CSOUND *csound)
 {
     OENTRY  *ep = (OENTRY*) &(localops[0]);
     int     err = 0;
diff --git a/Opcodes/sftype.h b/Opcodes/sftype.h
index 291d7aa..027b0f5 100644
--- a/Opcodes/sftype.h
+++ b/Opcodes/sftype.h
@@ -51,7 +51,9 @@
 #  undef WORDS_BIGENDIAN
 #endif
 
+#ifndef WIN32
 typedef uint32_t    DWORD;
+#endif
 /*  typedef int     BOOL; */
 typedef uint8_t     BYTE;
 typedef uint16_t    WORD;
diff --git a/Opcodes/shaker.c b/Opcodes/shaker.c
index 6f3b09f..bc7aac5 100644
--- a/Opcodes/shaker.c
+++ b/Opcodes/shaker.c
@@ -50,8 +50,8 @@ This code would implement individual grain envelopes
 
 But we're smarter than that!!!  See below
 */
-
-#include "csdl.h"
+// #include "csdl.h"
+#include "csoundCore.h"
 #include "shaker.h"
 
 int shakerset(CSOUND *csound, SHAKER *p)
diff --git a/Opcodes/shape.c b/Opcodes/shape.c
index 87030dc..0ddef10 100644
--- a/Opcodes/shape.c
+++ b/Opcodes/shape.c
@@ -30,7 +30,9 @@
     02111-1307 USA
  */
 
-#include "csdl.h"
+#include "csoundCore.h"
+#include "interlocks.h"
+
 #include <math.h>
 
 
@@ -64,7 +66,7 @@ static int PowerShape(CSOUND* csound, POWER_SHAPE* data)
       for (n=0; n<nsmps; n++) {
         cur = in[n];
         if (cur == FL(0.0))  out[n] = FL(0.0);    /* make 0^0 = 0 for continuity */
-        else                 out[n] = maxampl;    /* otherwise, x^0 = 1.0 */
+        else                 out[n] = FL(1.0)/invmaxampl;    /* otherwise, x^0 = 1.0 */
       }
     }
     else {
@@ -497,7 +499,7 @@ static int Phasine(CSOUND* csound, PHASINE* data)
 
 #define S(x)    sizeof(x)
 
-static OENTRY localops[] = {
+static OENTRY shape_localops[] = {
   /* { "phasine", S(PHASINE), 5, "a", "akp",
                         (SUBR)PhasineInit, NULL, (SUBR)Phasine }, */
   { "powershape", S(POWER_SHAPE), 5, "a", "akp",
@@ -512,4 +514,4 @@ static OENTRY localops[] = {
                   (SUBR)SyncPhasorInit, NULL, (SUBR)SyncPhasor },
 };
 
-LINKAGE
+LINKAGE1(shape_localops)
diff --git a/Opcodes/signalflowgraph.cpp b/Opcodes/signalflowgraph.cpp
index e805bf5..91d7032 100644
--- a/Opcodes/signalflowgraph.cpp
+++ b/Opcodes/signalflowgraph.cpp
@@ -244,14 +244,14 @@ struct Outleta : public OpcodeBase<Outleta> {
       sourceOutletId[0] = 0;
       const char *insname = csound->instrtxtp[h.insdshead->insno]->insname;
       if (insname) {
-	std::sprintf(sourceOutletId, "%s:%s", insname, (char *)Sname);
+        std::sprintf(sourceOutletId, "%s:%s", insname, (char *)Sname);
       } else {
-	std::sprintf(sourceOutletId, "%d:%s", h.insdshead->insno, (char *)Sname);
+        std::sprintf(sourceOutletId, "%d:%s", h.insdshead->insno, (char *)Sname);
       }
       std::vector<Outleta *> &aoutlets = aoutletsForCsoundsForSourceOutletIds[csound][sourceOutletId];
       if (std::find(aoutlets.begin(), aoutlets.end(), this) == aoutlets.end()) {
-	aoutlets.push_back(this);
-	warn(csound, "Created instance 0x%x of %d instances of outlet %s\n", this, aoutlets.size(), sourceOutletId);
+        aoutlets.push_back(this);
+        warn(csound, "Created instance 0x%x of %d instances of outlet %s\n", this, aoutlets.size(), sourceOutletId);
       }
     }
     //warn(csound, "ENDED Outleta::init()...\n");
@@ -281,34 +281,34 @@ struct Inleta : public OpcodeBase<Inleta> {
       sampleN = csound->GetKsmps(csound);
       warn(csound, "sourceOutlets: 0x%x\n", sourceOutlets);
       if (std::find(aoutletVectorsForCsounds[csound].begin(),
-		    aoutletVectorsForCsounds[csound].end(),
-		    sourceOutlets) == aoutletVectorsForCsounds[csound].end()) {
-	sourceOutlets = new std::vector< std::vector<Outleta *> *>;
-	aoutletVectorsForCsounds[csound].push_back(sourceOutlets);
+                    aoutletVectorsForCsounds[csound].end(),
+                    sourceOutlets) == aoutletVectorsForCsounds[csound].end()) {
+        sourceOutlets = new std::vector< std::vector<Outleta *> *>;
+        aoutletVectorsForCsounds[csound].push_back(sourceOutlets);
       }
       warn(csound, "sourceOutlets: 0x%x\n", sourceOutlets);
       sinkInletId[0] = 0;
       const char *insname = csound->instrtxtp[h.insdshead->insno]->insname;
       if (insname) {
-	std::sprintf(sinkInletId, "%s:%s", insname, (char *)Sname);
+        std::sprintf(sinkInletId, "%s:%s", insname, (char *)Sname);
       } else {
-	std::sprintf(sinkInletId, "%d:%s", h.insdshead->insno, (char *)Sname);
+        std::sprintf(sinkInletId, "%d:%s", h.insdshead->insno, (char *)Sname);
       }
       std::vector<Inleta *> &ainlets = ainletsForCsoundsForSinkInletIds[csound][sinkInletId];
       if (std::find(ainlets.begin(), ainlets.end(), this) == ainlets.end()) {
-	ainlets.push_back(this);
-	warn(csound, "Created instance 0x%x of inlet %s\n", this, sinkInletId);
+        ainlets.push_back(this);
+        warn(csound, "Created instance 0x%x of inlet %s\n", this, sinkInletId);
       }
       // Find source outlets connecting to this.
       // Any number of sources may connect to any number of sinks.
       std::vector<std::string> &sourceOutletIds = connectionsForCsounds[csound][sinkInletId];
       for (size_t i = 0, n = sourceOutletIds.size(); i < n; i++) {
-	const std::string &sourceOutletId = sourceOutletIds[i];
-	std::vector<Outleta *> &aoutlets = aoutletsForCsoundsForSourceOutletIds[csound][sourceOutletId];
-	if (std::find(sourceOutlets->begin(), sourceOutlets->end(), &aoutlets) == sourceOutlets->end()) {
-	  sourceOutlets->push_back(&aoutlets);
-	  warn(csound, "Connected instances of outlet %s to instance 0x%x of inlet %s.\n", sourceOutletId.c_str(), this, sinkInletId);
-	}
+        const std::string &sourceOutletId = sourceOutletIds[i];
+        std::vector<Outleta *> &aoutlets = aoutletsForCsoundsForSourceOutletIds[csound][sourceOutletId];
+        if (std::find(sourceOutlets->begin(), sourceOutlets->end(), &aoutlets) == sourceOutlets->end()) {
+          sourceOutlets->push_back(&aoutlets);
+          warn(csound, "Connected instances of outlet %s to instance 0x%x of inlet %s.\n", sourceOutletId.c_str(), this, sinkInletId);
+        }
       }
       warn(csound, "ENDED Inleta::init().\n");
     }
@@ -324,28 +324,28 @@ struct Inleta : public OpcodeBase<Inleta> {
       //warn(csound, "BEGAN Inleta::audio()...\n");
       // Zero the inlet buffer.
       for (int sampleI = 0; sampleI < sampleN; sampleI++) {
-	asignal[sampleI] = FL(0.0);
+        asignal[sampleI] = FL(0.0);
       }
       // Loop over the source connections...
       for (size_t sourceI = 0, sourceN = sourceOutlets->size();
-	   sourceI < sourceN;
-	   sourceI++) {
-	// Loop over the source connection instances...
-	std::vector<Outleta *> *instances = sourceOutlets->at(sourceI);
-	for (size_t instanceI = 0, instanceN = instances->size();
-	     instanceI < instanceN;
-	     instanceI++) {
-	  Outleta *sourceOutlet = instances->at(instanceI);
-	  // Skip inactive instances.
-	  if (sourceOutlet->h.insdshead->actflg) {
-	    // Loop over the samples in the inlet buffer.
-	    for (int sampleI = 0;
-		 sampleI < sampleN;
-		 sampleI++) {
-	      asignal[sampleI] += sourceOutlet->asignal[sampleI];
-	    }
-	  }
-	}
+           sourceI < sourceN;
+           sourceI++) {
+        // Loop over the source connection instances...
+        std::vector<Outleta *> *instances = sourceOutlets->at(sourceI);
+        for (size_t instanceI = 0, instanceN = instances->size();
+             instanceI < instanceN;
+             instanceI++) {
+          Outleta *sourceOutlet = instances->at(instanceI);
+          // Skip inactive instances.
+          if (sourceOutlet->h.insdshead->actflg) {
+            // Loop over the samples in the inlet buffer.
+            for (int sampleI = 0;
+                 sampleI < sampleN;
+                 sampleI++) {
+              asignal[sampleI] += sourceOutlet->asignal[sampleI];
+            }
+          }
+        }
       }
       //warn(csound, "ENDED Inleta::audio().\n");
     }
@@ -369,14 +369,14 @@ struct Outletk : public OpcodeBase<Outletk> {
 
       const char *insname = csound->instrtxtp[h.insdshead->insno]->insname;
       if (insname) {
-	std::sprintf(sourceOutletId, "%s:%s", insname, (char *)Sname);
+        std::sprintf(sourceOutletId, "%s:%s", insname, (char *)Sname);
       } else {
-	std::sprintf(sourceOutletId, "%d:%s", h.insdshead->insno, (char *)Sname);
+        std::sprintf(sourceOutletId, "%d:%s", h.insdshead->insno, (char *)Sname);
       }
       std::vector<Outletk *> &koutlets = koutletsForCsoundsForSourceOutletIds[csound][sourceOutletId];
       if (std::find(koutlets.begin(), koutlets.end(), this) == koutlets.end()) {
-	koutlets.push_back(this);
-	warn(csound, "Created instance 0x%x of %d instances of outlet %s\n", this, koutlets.size(), sourceOutletId);
+        koutlets.push_back(this);
+        warn(csound, "Created instance 0x%x of %d instances of outlet %s\n", this, koutlets.size(), sourceOutletId);
       }
     }
     return OK;
@@ -404,33 +404,33 @@ struct Inletk : public OpcodeBase<Inletk> {
 
       ksmps = csound->GetKsmps(csound);
       if (std::find(koutletVectorsForCsounds[csound].begin(),
-		    koutletVectorsForCsounds[csound].end(),
-		    sourceOutlets) == koutletVectorsForCsounds[csound].end()) {
-	sourceOutlets = new std::vector< std::vector<Outletk *> *>;
-	koutletVectorsForCsounds[csound].push_back(sourceOutlets);
+                    koutletVectorsForCsounds[csound].end(),
+                    sourceOutlets) == koutletVectorsForCsounds[csound].end()) {
+        sourceOutlets = new std::vector< std::vector<Outletk *> *>;
+        koutletVectorsForCsounds[csound].push_back(sourceOutlets);
       }
       sinkInletId[0] = 0;
       const char *insname = csound->instrtxtp[h.insdshead->insno]->insname;
       if (insname) {
-	std::sprintf(sinkInletId, "%s:%s", insname, (char *)Sname);
+        std::sprintf(sinkInletId, "%s:%s", insname, (char *)Sname);
       } else {
-	std::sprintf(sinkInletId, "%d:%s", h.insdshead->insno, (char *)Sname);
+        std::sprintf(sinkInletId, "%d:%s", h.insdshead->insno, (char *)Sname);
       }
       std::vector<Inletk *> &kinlets = kinletsForCsoundsForSinkInletIds[csound][sinkInletId];
       if (std::find(kinlets.begin(), kinlets.end(), this) == kinlets.end()) {
-	kinlets.push_back(this);
-	warn(csound, "Created instance 0x%x of inlet %s\n", this, sinkInletId);
+        kinlets.push_back(this);
+        warn(csound, "Created instance 0x%x of inlet %s\n", this, sinkInletId);
       }
       // Find source outlets connecting to this.
       // Any number of sources may connect to any number of sinks.
       std::vector<std::string> &sourceOutletIds = connectionsForCsounds[csound][sinkInletId];
       for (size_t i = 0, n = sourceOutletIds.size(); i < n; i++) {
-	const std::string &sourceOutletId = sourceOutletIds[i];
-	std::vector<Outletk *> &koutlets = koutletsForCsoundsForSourceOutletIds[csound][sourceOutletId];
-	if (std::find(sourceOutlets->begin(), sourceOutlets->end(), &koutlets) == sourceOutlets->end()) {
-	  sourceOutlets->push_back(&koutlets);
-	  warn(csound, "Connected instances of outlet %s to instance 0x%x of inlet %s.\n", sourceOutletId.c_str(), this, sinkInletId);
-	}
+        const std::string &sourceOutletId = sourceOutletIds[i];
+        std::vector<Outletk *> &koutlets = koutletsForCsoundsForSourceOutletIds[csound][sourceOutletId];
+        if (std::find(sourceOutlets->begin(), sourceOutlets->end(), &koutlets) == sourceOutlets->end()) {
+          sourceOutlets->push_back(&koutlets);
+          warn(csound, "Connected instances of outlet %s to instance 0x%x of inlet %s.\n", sourceOutletId.c_str(), this, sinkInletId);
+        }
       }
     }
     return OK;
@@ -445,19 +445,19 @@ struct Inletk : public OpcodeBase<Inletk> {
       *ksignal = FL(0.0);
       // Loop over the source connections...
       for (size_t sourceI = 0, sourceN = sourceOutlets->size();
-	   sourceI < sourceN;
-	   sourceI++) {
-	// Loop over the source connection instances...
-	const std::vector<Outletk *> *instances = sourceOutlets->at(sourceI);
-	for (size_t instanceI = 0, instanceN = instances->size();
-	     instanceI < instanceN;
-	     instanceI++) {
-	  const Outletk *sourceOutlet = instances->at(instanceI);
-	  // Skip inactive instances.
-	  if (sourceOutlet->h.insdshead->actflg) {
-	    *ksignal += *sourceOutlet->ksignal;
-	  }
-	}
+           sourceI < sourceN;
+           sourceI++) {
+        // Loop over the source connection instances...
+        const std::vector<Outletk *> *instances = sourceOutlets->at(sourceI);
+        for (size_t instanceI = 0, instanceN = instances->size();
+             instanceI < instanceN;
+             instanceI++) {
+          const Outletk *sourceOutlet = instances->at(instanceI);
+          // Skip inactive instances.
+          if (sourceOutlet->h.insdshead->actflg) {
+            *ksignal += *sourceOutlet->ksignal;
+          }
+        }
       }
     }
     return OK;
@@ -479,14 +479,14 @@ struct Outletf : public OpcodeBase<Outletf> {
     {
       const char *insname = csound->instrtxtp[h.insdshead->insno]->insname;
       if (insname) {
-	std::sprintf(sourceOutletId, "%s:%s", insname, (char *)Sname);
+        std::sprintf(sourceOutletId, "%s:%s", insname, (char *)Sname);
       } else {
-	std::sprintf(sourceOutletId, "%d:%s", h.insdshead->insno, (char *)Sname);
+        std::sprintf(sourceOutletId, "%d:%s", h.insdshead->insno, (char *)Sname);
       }
       std::vector<Outletf *> &foutlets = foutletsForCsoundsForSourceOutletIds[csound][sourceOutletId];
       if (std::find(foutlets.begin(), foutlets.end(), this) == foutlets.end()) {
-	foutlets.push_back(this);
-	warn(csound, "Created instance 0x%x of outlet %s\n", this, sourceOutletId);
+        foutlets.push_back(this);
+        warn(csound, "Created instance 0x%x of outlet %s\n", this, sourceOutletId);
       }
     }
     return OK;
@@ -517,33 +517,33 @@ struct Inletf : public OpcodeBase<Inletf> {
       lastframe = 0;
       fsignalInitialized = false;
       if (std::find(foutletVectorsForCsounds[csound].begin(),
-		    foutletVectorsForCsounds[csound].end(),
-		    sourceOutlets) == foutletVectorsForCsounds[csound].end()) {
-	sourceOutlets = new std::vector< std::vector<Outletf *> *>;
-	foutletVectorsForCsounds[csound].push_back(sourceOutlets);
+                    foutletVectorsForCsounds[csound].end(),
+                    sourceOutlets) == foutletVectorsForCsounds[csound].end()) {
+        sourceOutlets = new std::vector< std::vector<Outletf *> *>;
+        foutletVectorsForCsounds[csound].push_back(sourceOutlets);
       }
       sinkInletId[0] = 0;
       const char *insname = csound->instrtxtp[h.insdshead->insno]->insname;
       if (insname) {
-	std::sprintf(sinkInletId, "%s:%s", insname, (char *)Sname);
+        std::sprintf(sinkInletId, "%s:%s", insname, (char *)Sname);
       } else {
-	std::sprintf(sinkInletId, "%d:%s", h.insdshead->insno, (char *)Sname);
+        std::sprintf(sinkInletId, "%d:%s", h.insdshead->insno, (char *)Sname);
       }
       std::vector<Inletf *> &finlets = finletsForCsoundsForSinkInletIds[csound][sinkInletId];
       if (std::find(finlets.begin(), finlets.end(), this) == finlets.end()) {
-	finlets.push_back(this);
-	warn(csound, "Created instance 0x%x of inlet %s\n", this, sinkInletId);
+        finlets.push_back(this);
+        warn(csound, "Created instance 0x%x of inlet %s\n", this, sinkInletId);
       }
       // Find source outlets connecting to this.
       // Any number of sources may connect to any number of sinks.
       std::vector<std::string> &sourceOutletIds = connectionsForCsounds[csound][sinkInletId];
       for (size_t i = 0, n = sourceOutletIds.size(); i < n; i++) {
-	const std::string &sourceOutletId = sourceOutletIds[i];
-	std::vector<Outletf *> &foutlets = foutletsForCsoundsForSourceOutletIds[csound][sourceOutletId];
-	if (std::find(sourceOutlets->begin(), sourceOutlets->end(), &foutlets) == sourceOutlets->end()) {
-	  sourceOutlets->push_back(&foutlets);
-	  warn(csound, "Connected instances of outlet %s to instance 0x%x of inlet %s.\n", sourceOutletId.c_str(), this, sinkInletId);
-	}
+        const std::string &sourceOutletId = sourceOutletIds[i];
+        std::vector<Outletf *> &foutlets = foutletsForCsoundsForSourceOutletIds[csound][sourceOutletId];
+        if (std::find(sourceOutlets->begin(), sourceOutlets->end(), &foutlets) == sourceOutlets->end()) {
+          sourceOutlets->push_back(&foutlets);
+          warn(csound, "Connected instances of outlet %s to instance 0x%x of inlet %s.\n", sourceOutletId.c_str(), this, sinkInletId);
+        }
       }
     }
     return OK;
@@ -657,19 +657,19 @@ struct Outletkid : public OpcodeBase<Outletkid> {
                    (char *)"",
                    (int) csound->GetInputArgSMask(this));
       if (insname && instanceId) {
-	std::sprintf(sourceOutletId, "%s:%s", insname, (char *)Sname);
+        std::sprintf(sourceOutletId, "%s:%s", insname, (char *)Sname);
       } else {
-	std::sprintf(sourceOutletId, "%d:%s", h.insdshead->insno, (char *)Sname);
+        std::sprintf(sourceOutletId, "%d:%s", h.insdshead->insno, (char *)Sname);
       }
       if (insname) {
-	std::sprintf(sourceOutletId, "%s:%s", insname, (char *)Sname);
+        std::sprintf(sourceOutletId, "%s:%s", insname, (char *)Sname);
       } else {
-	std::sprintf(sourceOutletId, "%d:%s", h.insdshead->insno, (char *)Sname);
+        std::sprintf(sourceOutletId, "%d:%s", h.insdshead->insno, (char *)Sname);
       }
       std::vector<Outletkid *> &koutlets = kidoutletsForCsoundsForSourceOutletIds[csound][sourceOutletId];
       if (std::find(koutlets.begin(), koutlets.end(), this) == koutlets.end()) {
-	koutlets.push_back(this);
-	warn(csound, "Created instance 0x%x of %d instances of outlet %s\n", this, koutlets.size(), sourceOutletId);
+        koutlets.push_back(this);
+        warn(csound, "Created instance 0x%x of %d instances of outlet %s\n", this, koutlets.size(), sourceOutletId);
       }
     }
     return OK;
@@ -699,10 +699,10 @@ struct Inletkid : public OpcodeBase<Inletkid> {
 
       ksmps = csound->GetKsmps(csound);
       if (std::find(kidoutletVectorsForCsounds[csound].begin(),
-		    kidoutletVectorsForCsounds[csound].end(),
-		    sourceOutlets) == kidoutletVectorsForCsounds[csound].end()) {
-	sourceOutlets = new std::vector< std::vector<Outletkid *> *>;
-	kidoutletVectorsForCsounds[csound].push_back(sourceOutlets);
+                    kidoutletVectorsForCsounds[csound].end(),
+                    sourceOutlets) == kidoutletVectorsForCsounds[csound].end()) {
+        sourceOutlets = new std::vector< std::vector<Outletkid *> *>;
+        kidoutletVectorsForCsounds[csound].push_back(sourceOutlets);
       }
       sinkInletId[0] = 0;
       instanceId = csound->strarg2name(csound,
@@ -712,25 +712,25 @@ struct Inletkid : public OpcodeBase<Inletkid> {
                    (int) csound->GetInputArgSMask(this));
       const char *insname = csound->instrtxtp[h.insdshead->insno]->insname;
       if (insname) {
-	std::sprintf(sinkInletId, "%s:%s", insname, (char *)Sname);
+        std::sprintf(sinkInletId, "%s:%s", insname, (char *)Sname);
       } else {
-	std::sprintf(sinkInletId, "%d:%s", h.insdshead->insno, (char *)Sname);
+        std::sprintf(sinkInletId, "%d:%s", h.insdshead->insno, (char *)Sname);
       }
       std::vector<Inletkid *> &kinlets = kidinletsForCsoundsForSinkInletIds[csound][sinkInletId];
       if (std::find(kinlets.begin(), kinlets.end(), this) == kinlets.end()) {
-	kinlets.push_back(this);
-	warn(csound, "Created instance 0x%x of inlet %s\n", this, sinkInletId);
+        kinlets.push_back(this);
+        warn(csound, "Created instance 0x%x of inlet %s\n", this, sinkInletId);
       }
       // Find source outlets connecting to this.
       // Any number of sources may connect to any number of sinks.
       std::vector<std::string> &sourceOutletIds = connectionsForCsounds[csound][sinkInletId];
       for (size_t i = 0, n = sourceOutletIds.size(); i < n; i++) {
-	const std::string &sourceOutletId = sourceOutletIds[i];
-	std::vector<Outletkid *> &koutlets = kidoutletsForCsoundsForSourceOutletIds[csound][sourceOutletId];
-	if (std::find(sourceOutlets->begin(), sourceOutlets->end(), &koutlets) == sourceOutlets->end()) {
-	  sourceOutlets->push_back(&koutlets);
-	  warn(csound, "Connected instances of outlet %s to instance 0x%x of inlet %s.\n", sourceOutletId.c_str(), this, sinkInletId);
-	}
+        const std::string &sourceOutletId = sourceOutletIds[i];
+        std::vector<Outletkid *> &koutlets = kidoutletsForCsoundsForSourceOutletIds[csound][sourceOutletId];
+        if (std::find(sourceOutlets->begin(), sourceOutlets->end(), &koutlets) == sourceOutlets->end()) {
+          sourceOutlets->push_back(&koutlets);
+          warn(csound, "Connected instances of outlet %s to instance 0x%x of inlet %s.\n", sourceOutletId.c_str(), this, sinkInletId);
+        }
       }
     }
     return OK;
@@ -745,21 +745,21 @@ struct Inletkid : public OpcodeBase<Inletkid> {
       *ksignal = FL(0.0);
       // Loop over the source connections...
       for (size_t sourceI = 0, sourceN = sourceOutlets->size();
-	   sourceI < sourceN;
-	   sourceI++) {
-	// Loop over the source connection instances...
-	const std::vector<Outletkid *> *instances = sourceOutlets->at(sourceI);
-	for (size_t instanceI = 0, instanceN = instances->size();
-	     instanceI < instanceN;
-	     instanceI++) {
-	  const Outletkid *sourceOutlet = instances->at(instanceI);
-	  // Skip inactive instances and also all non-matching instances.
-	  if (sourceOutlet->h.insdshead->actflg) {
+           sourceI < sourceN;
+           sourceI++) {
+        // Loop over the source connection instances...
+        const std::vector<Outletkid *> *instances = sourceOutlets->at(sourceI);
+        for (size_t instanceI = 0, instanceN = instances->size();
+             instanceI < instanceN;
+             instanceI++) {
+          const Outletkid *sourceOutlet = instances->at(instanceI);
+          // Skip inactive instances and also all non-matching instances.
+          if (sourceOutlet->h.insdshead->actflg) {
         if (std::strcmp(sourceOutlet->instanceId, instanceId) == 0) {
-	    *ksignal += *sourceOutlet->ksignal;
+            *ksignal += *sourceOutlet->ksignal;
+        }
+          }
         }
-	  }
-	}
       }
     }
     return OK;
@@ -778,27 +778,27 @@ struct Connect : public OpcodeBase<Connect> {
 #pragma omp critical (cs_sfg_ports)
     {
       std::string sourceOutletId = csound->strarg2name(csound,
-						       (char *) 0,
-						       Source,
-						       (char *)"",
-						       (int) csound->GetInputArgSMask(this));
+                                                       (char *) 0,
+                                                       Source,
+                                                       (char *)"",
+                                                       (int) csound->GetInputArgSMask(this));
       sourceOutletId += ":";
       sourceOutletId += csound->strarg2name(csound,
-					    (char *) 0,
-					    Soutlet,
-					    (char *)"",
-					    (int) csound->GetInputArgSMask(this));
+                                            (char *) 0,
+                                            Soutlet,
+                                            (char *)"",
+                                            (int) csound->GetInputArgSMask(this));
       std::string sinkInletId = csound->strarg2name(csound,
-						    (char *) 0,
-						    Sink,
-						    (char *)"",
-						    (int) csound->GetInputArgSMask(this));
+                                                    (char *) 0,
+                                                    Sink,
+                                                    (char *)"",
+                                                    (int) csound->GetInputArgSMask(this));
       sinkInletId += ":";
       sinkInletId += csound->strarg2name(csound,
-					 (char *) 0,
-					 Sinlet,
-					 (char *)"",
-					 (int) csound->GetInputArgSMask(this));
+                                         (char *) 0,
+                                         Sinlet,
+                                         (char *)"",
+                                         (int) csound->GetInputArgSMask(this));
       warn(csound, "Connected outlet %s to inlet %s.\n", sourceOutletId.c_str(), sinkInletId.c_str());
       connectionsForCsounds[csound][sinkInletId].push_back(sourceOutletId);
     }
@@ -818,10 +818,10 @@ struct AlwaysOn : public OpcodeBase<AlwaysOn> {
   EVTBLK evtblk;
   int init(CSOUND *csound) {
     std::string source = csound->strarg2name(csound,
-					     (char *) 0,
-					     Sinstrument,
-					     (char *)"",
-					     (int) csound->GetInputArgSMask(this));
+                                             (char *) 0,
+                                             Sinstrument,
+                                             (char *)"",
+                                             (int) csound->GetInputArgSMask(this));
     evtblk.opcod = 'i';
     evtblk.strarg = 0;
     evtblk.p[0] = FL(0.0);
@@ -878,55 +878,55 @@ struct FtGenOnce : public OpcodeBase<FtGenOnce> {
       evtblk.p[4] = *p4;
       int n = 0;
       if (csound->GetInputArgSMask(this)) {
-	n = (int) evtblk.p[4];
-	evtblk.p[5] = SSTRCOD;
-	if (n < 0) {
-	  n = -n;
-	}
-	// Only GEN 1, 23, 28, or 43 can take strings.
-	switch (n) {
-	case 1:
-	case 23:
-	case 28:
-	case 43:
-	  evtblk.strarg = (char *)p5;
-	  break;
-	default:
-	  result = csound->InitError(csound, Str("ftgen string arg not allowed"));
-	}
+        n = (int) evtblk.p[4];
+        evtblk.p[5] = SSTRCOD;
+        if (n < 0) {
+          n = -n;
+        }
+        // Only GEN 1, 23, 28, or 43 can take strings.
+        switch (n) {
+        case 1:
+        case 23:
+        case 28:
+        case 43:
+          evtblk.strarg = (char *)p5;
+          break;
+        default:
+          result = csound->InitError(csound, Str("ftgen string arg not allowed"));
+        }
       } else {
-	evtblk.p[5] = *p5;
+        evtblk.p[5] = *p5;
       }
       if (result == OK) {
-	evtblk.pcnt = (int16) csound->GetInputArgCnt(this);
-	n = evtblk.pcnt - 5;
-	if (n > 0) {
-	  MYFLT **argp = argums;
-	  MYFLT *fp = &evtblk.p[0] + 6;
-	  do {
-	    *fp++ = **argp++;
-	  } while (--n);
-	}
-	// If the arguments have not been used before for this instance of Csound,
-	// create a new function table and store the arguments and table number;
-	// otherwise, look up and return the already created function table's number.
-	if(functionTablesForCsoundsForEvtblks[csound].find(eventBlock) != functionTablesForCsoundsForEvtblks[csound].end()) {
-	  *ifno = functionTablesForCsoundsForEvtblks[csound][eventBlock];
-	  warn(csound, "ftgenonce: re-using existing func: %f\n", *ifno);
-	  // std::cerr << "ftgenonce: re-using existing func:" << evtblk << std::endl;
-	} else {
-	  FUNC *func = 0;
-	  n = csound->hfgens(csound, &func, &evtblk, 1);
-	  if (UNLIKELY(n != 0)) {
-	    result = csound->InitError(csound, Str("ftgenonce error"));
-	  }
-	  if (func) {
-	    functionTablesForCsoundsForEvtblks[csound][eventBlock] = func->fno;
-	    *ifno = (MYFLT) func->fno;
-	    warn(csound, "ftgenonce: created new func: %d\n", func->fno);
-	    // std::cerr << "ftgenonce: created new func:" << evtblk << std::endl;
-	  }
-	}
+        evtblk.pcnt = (int16) csound->GetInputArgCnt(this);
+        n = evtblk.pcnt - 5;
+        if (n > 0) {
+          MYFLT **argp = argums;
+          MYFLT *fp = &evtblk.p[0] + 6;
+          do {
+            *fp++ = **argp++;
+          } while (--n);
+        }
+        // If the arguments have not been used before for this instance of Csound,
+        // create a new function table and store the arguments and table number;
+        // otherwise, look up and return the already created function table's number.
+        if(functionTablesForCsoundsForEvtblks[csound].find(eventBlock) != functionTablesForCsoundsForEvtblks[csound].end()) {
+          *ifno = functionTablesForCsoundsForEvtblks[csound][eventBlock];
+          warn(csound, "ftgenonce: re-using existing func: %f\n", *ifno);
+          // std::cerr << "ftgenonce: re-using existing func:" << evtblk << std::endl;
+        } else {
+          FUNC *func = 0;
+          n = csound->hfgens(csound, &func, &evtblk, 1);
+          if (UNLIKELY(n != 0)) {
+            result = csound->InitError(csound, Str("ftgenonce error"));
+          }
+          if (func) {
+            functionTablesForCsoundsForEvtblks[csound][eventBlock] = func->fno;
+            *ifno = (MYFLT) func->fno;
+            warn(csound, "ftgenonce: created new func: %d\n", func->fno);
+            // std::cerr << "ftgenonce: created new func:" << evtblk << std::endl;
+          }
+        }
       }
     }
     return OK;
@@ -949,7 +949,7 @@ extern "C"
     {
       (char *)"outleta",
       sizeof(Outleta),
-      5,
+      CW|5,
       (char *)"",
       (char *)"Sa",
       (SUBR)&Outleta::init_,
@@ -959,7 +959,7 @@ extern "C"
     {
       (char *)"inleta",
       sizeof(Inleta),
-      5,
+      CR|5,
       (char *)"a",
       (char *)"S",
       (SUBR)&Inleta::init_,
@@ -969,7 +969,7 @@ extern "C"
     {
       (char *)"outletk",
       sizeof(Outletk),
-      3,
+      CW|3,
       (char *)"",
       (char *)"Sk",
       (SUBR)&Outletk::init_,
@@ -979,7 +979,7 @@ extern "C"
     {
       (char *)"inletk",
       sizeof(Inletk),
-      3,
+      CR|3,
       (char *)"k",
       (char *)"S",
       (SUBR)&Inletk::init_,
@@ -989,7 +989,7 @@ extern "C"
     {
       (char *)"outletkid",
       sizeof(Outletkid),
-      3,
+      CW|3,
       (char *)"",
       (char *)"SSk",
       (SUBR)&Outletk::init_,
@@ -999,7 +999,7 @@ extern "C"
     {
       (char *)"inletkid",
       sizeof(Inletkid),
-      3,
+      CR|3,
       (char *)"k",
       (char *)"SS",
       (SUBR)&Inletk::init_,
@@ -1009,7 +1009,7 @@ extern "C"
     {
       (char *)"outletf",
       sizeof(Outletf),
-      5,
+      CW|5,
       (char *)"",
       (char *)"Sf",
       (SUBR)&Outletf::init_,
@@ -1019,7 +1019,7 @@ extern "C"
     {
       (char *)"inletf",
       sizeof(Inletf),
-      5,
+      CR|5,
       (char *)"f",
       (char *)"S",
       (SUBR)&Inletf::init_,
@@ -1049,7 +1049,7 @@ extern "C"
     {
       (char *)"ftgenonce",
       sizeof(FtGenOnce),
-      1,
+      TW|1,
       (char *)"i",
       (char *)"iiiiTm",
       (SUBR)&FtGenOnce::init_,
@@ -1070,14 +1070,14 @@ extern "C"
     int  err = 0;
     while (ep->opname != 0) {
       err |= csound->AppendOpcode(csound,
-				  ep->opname,
-				  ep->dsblksiz,
-				  ep->thread,
-				  ep->outypes,
-				  ep->intypes,
-				  (int (*)(CSOUND *, void*)) ep->iopadr,
-				  (int (*)(CSOUND *, void*)) ep->kopadr,
-				  (int (*)(CSOUND *, void*)) ep->aopadr);
+                                  ep->opname,
+                                  ep->dsblksiz,
+                                  ep->thread,
+                                  ep->outypes,
+                                  ep->intypes,
+                                  (int (*)(CSOUND *, void*)) ep->iopadr,
+                                  (int (*)(CSOUND *, void*)) ep->kopadr,
+                                  (int (*)(CSOUND *, void*)) ep->aopadr);
       ep++;
     }
     return err;
@@ -1091,19 +1091,19 @@ extern "C"
       aoutletsForCsoundsForSourceOutletIds[csound].clear();
       ainletsForCsoundsForSinkInletIds[csound].clear();
       for (size_t i = 0, n = aoutletVectorsForCsounds[csound].size(); i < n; i++) {
-	delete aoutletVectorsForCsounds[csound][i];
+        delete aoutletVectorsForCsounds[csound][i];
       }
       aoutletVectorsForCsounds[csound].clear();
       koutletsForCsoundsForSourceOutletIds[csound].clear();
       kinletsForCsoundsForSinkInletIds[csound].clear();
       for (size_t i = 0, n = koutletVectorsForCsounds[csound].size(); i < n; i++) {
-	delete koutletVectorsForCsounds[csound][i];
+        delete koutletVectorsForCsounds[csound][i];
       }
       koutletVectorsForCsounds[csound].clear();
       foutletsForCsoundsForSourceOutletIds[csound].clear();
       finletsForCsoundsForSinkInletIds[csound].clear();
       for (size_t i = 0, n = foutletVectorsForCsounds[csound].size(); i < n; i++) {
-	delete foutletVectorsForCsounds[csound][i];
+        delete foutletVectorsForCsounds[csound][i];
       }
       foutletVectorsForCsounds[csound].clear();
       connectionsForCsounds[csound].clear();
diff --git a/Opcodes/singwave.c b/Opcodes/singwave.c
index 142a08a..5f5da2d 100644
--- a/Opcodes/singwave.c
+++ b/Opcodes/singwave.c
@@ -33,7 +33,8 @@
 /*  excitation source for other instruments*/
 /*******************************************/
 
-#include "csdl.h"
+// #include "csdl.h"
+#include "csoundCore.h"
 #include "singwave.h"
 #include "moog1.h"
 
@@ -262,12 +263,18 @@ static void VoicForm_setPhoneme(CSOUND *csound, VOICF *p, int i, MYFLT sc)
     if (i>16) i = i%16;
     VoicForm_setFormantAll(p, 0,sc*phonParams[i][0][0], phonParams[i][0][1],
                            (MYFLT)pow(10.0,phonParams[i][0][2] / FL(20.0)));
-    VoicForm_setFormantAll(p, 1,sc*phonParams[i][1][0],
-                           phonParams[i][1][1], FL(1.0));
-    VoicForm_setFormantAll(p, 2,sc*phonParams[i][2][0],
-                           phonParams[i][2][1], FL(1.0));
-    VoicForm_setFormantAll(p, 3,sc*phonParams[i][3][0],
-                           phonParams[i][3][1], FL(1.0));
+    VoicForm_setFormantAll(p, 1,sc*phonParams[i][0][0], phonParams[i][1][1],
+                           (MYFLT)pow(10.0,phonParams[i][1][2] / FL(20.0)));
+    VoicForm_setFormantAll(p, 2,sc*phonParams[i][0][0], phonParams[i][2][1],
+                           (MYFLT)pow(10.0,phonParams[i][2][2] / FL(20.0)));
+    VoicForm_setFormantAll(p, 3,sc*phonParams[i][0][0], phonParams[i][3][1],
+                           (MYFLT)pow(10.0,phonParams[i][3][2] / FL(20.0)));
+     /* VoicForm_setFormantAll(p, 1,sc*phonParams[i][1][0], */
+    /*                        phonParams[i][1][1], FL(1.0)); */
+    /* VoicForm_setFormantAll(p, 2,sc*phonParams[i][2][0], */
+    /*                        phonParams[i][2][1], FL(1.0)); */
+    /* VoicForm_setFormantAll(p, 3,sc*phonParams[i][3][0], */
+    /*                        phonParams[i][3][1], FL(1.0)); */
     VoicForm_setVoicedUnVoiced(p,phonGains[i][0], phonGains[i][1]);
     csound->Message(csound,
                     Str("Found Formant: %s (number %i)\n"), phonemes[i], i);
@@ -319,6 +326,7 @@ static void make_FormSwep(FormSwep *p)
 int voicformset(CSOUND *csound, VOICF *p)
 {
     MYFLT amp = (*p->amp)*AMP_RSCALE; /* Normalise */
+    int i;
 
     if (UNLIKELY(make_SingWave(csound, &p->voiced, p->ifn, p->ivfn)==NOTOK))
       return NOTOK;
@@ -327,19 +335,13 @@ int voicformset(CSOUND *csound, VOICF *p)
 
     make_Noise(p->noise);
 
-    make_FormSwep(&p->filters[0]);
-    make_FormSwep(&p->filters[1]);
-    make_FormSwep(&p->filters[2]);
-    make_FormSwep(&p->filters[3]);
-    FormSwep_setSweepRate(p->filters[0], FL(0.001));
-    FormSwep_setSweepRate(p->filters[1], FL(0.001));
-    FormSwep_setSweepRate(p->filters[2], FL(0.001));
-    FormSwep_setSweepRate(p->filters[3], FL(0.001));
+    for (i=0; i<4; i++) {
+      make_FormSwep(&p->filters[i]);
+      FormSwep_setSweepRate(p->filters[i], FL(0.001));
+    }
 
     make_OneZero(&p->onezero);
-/*  OneZero_print(csound, &p->onezero); */
     OneZero_setCoeff(&p->onezero, - FL(0.9));
-/*  OneZero_print(csound, &p->onezero); */
     make_OnePole(&p->onepole);
     OnePole_setPole(&p->onepole, FL(0.9));
 
@@ -358,7 +360,7 @@ int voicformset(CSOUND *csound, VOICF *p)
     FormSwep_clear(p->filters[3]);
     {
       MYFLT temp, freq = *p->frequency;
-      if ((freq * FL(22.0)) > csound->esr)	{
+      if ((freq * FL(22.0)) > csound->esr)      {
         csound->Warning(csound,"This note is too high!!\n");
         freq = csound->esr / FL(22.0);
       }
diff --git a/Opcodes/singwave.h b/Opcodes/singwave.h
index faaca8d..efa1f7c 100644
--- a/Opcodes/singwave.h
+++ b/Opcodes/singwave.h
@@ -36,7 +36,7 @@
 #if !defined(__SingWave_h)
 #define __SingWave_h
 
-#include "csdl.h"
+
 
 extern MYFLT phonGains[32][2];
 extern MYFLT phonParams[32][4][3];
diff --git a/Opcodes/sndloop.c b/Opcodes/sndloop.c
index 2b58d22..2ce8c3c 100644
--- a/Opcodes/sndloop.c
+++ b/Opcodes/sndloop.c
@@ -996,14 +996,14 @@ static int pvsvoc_init(CSOUND *csound, pvsvoc *p)
                                    "or amp-freq.\n"));
     }
    if (p->ceps.auxp == NULL ||
-      p->ceps.size < sizeof(MYFLT) * (N+2)) 
+      p->ceps.size < sizeof(MYFLT) * (N+2))
     csound->AuxAlloc(csound, sizeof(MYFLT) * (N + 2), &p->ceps);
   memset(p->ceps.auxp, 0, sizeof(MYFLT)*(N+2));
   if (p->fenv.auxp == NULL ||
-      p->fenv.size < sizeof(MYFLT) * (N+2)) 
+      p->fenv.size < sizeof(MYFLT) * (N+2))
     csound->AuxAlloc(csound, sizeof(MYFLT) * (N + 2), &p->fenv);
   if (p->fexc.auxp == NULL ||
-      p->fexc.size < sizeof(MYFLT) * (N+2)) 
+      p->fexc.size < sizeof(MYFLT) * (N+2))
     csound->AuxAlloc(csound, sizeof(MYFLT) * (N + 2), &p->fexc);
 
     return OK;
@@ -1021,44 +1021,43 @@ static int pvsvoc_process(CSOUND *csound, pvsvoc *p)
     int coefs = (int) *(p->kcoefs), j;
     MYFLT   *fenv = (MYFLT *) p->fenv.auxp;
     MYFLT   *ceps = (MYFLT *) p->ceps.auxp;
-    float sr = csound->esr;
     float maxe=0.f, maxa=0.f;
-   
+
     if (UNLIKELY(fout==NULL)) goto err1;
 
     if (p->lastframe < p->fin->framecount) {
-      for(j=0; j < 2; j++) {	
-	MYFLT a;
-	maxe = 0.f;
+      for(j=0; j < 2; j++) {
+        MYFLT a;
+        maxe = 0.f;
         maxa = 0.f;
       for(i=0; i < N; i+=2) {
         a  = (j ? fin[i] : (fexc[i] = ffr[i]));
         maxa = maxa < a ? a : maxa;
-	if (a <= 0) a = 1e-20;
+        if (a <= 0) a = 1e-20;
         fenv[i/2] = log(a);
       }
       if (coefs < 1) coefs = 80;
-	for(i=0; i < N; i+=2){
-	  ceps[i] = fenv[i/2];
+        for(i=0; i < N; i+=2){
+          ceps[i] = fenv[i/2];
           ceps[i+1] = 0.0;
-	} 
-	csound->InverseComplexFFT(csound, ceps, N/2);
-        for(i=coefs; i < N-coefs; i++) ceps[i] = 0.0;   
+        }
+        csound->InverseComplexFFT(csound, ceps, N/2);
+        for(i=coefs; i < N-coefs; i++) ceps[i] = 0.0;
         csound->ComplexFFT(csound, ceps, N/2);
-        for(i=0; i < N; i+=2) {    
-	  fenv[i/2] = exp(ceps[i]);
-	   maxe = maxe < fenv[i/2] ? fenv[i/2] : maxe;
-	}      
-	if (maxe)
-	for(i=0; i<N; i+=2){
-          if (j) fenv[i/2] *= maxa/maxe;   
-	  if (fenv[i/2] && !j) {
+        for(i=0; i < N; i+=2) {
+          fenv[i/2] = exp(ceps[i]);
+           maxe = maxe < fenv[i/2] ? fenv[i/2] : maxe;
+        }
+        if (maxe)
+        for(i=0; i<N; i+=2){
+          if (j) fenv[i/2] *= maxa/maxe;
+          if (fenv[i/2] && !j) {
              fenv[i/2] /= maxe;
-	     fexc[i] /= fenv[i/2];
-	  }	   
-	  }	   
+             fexc[i] /= fenv[i/2];
+          }
+          }
       }
-     
+
       kdepth = kdepth >= 0 ? (kdepth <= 1 ? kdepth : FL(1.0)): FL(0.0);
       for(i=0;i < N+2;i+=2) {
         fout[i] = fenv[i/2]*(fexc[i]*kdepth + fin[i]*(FL(1.0)-kdepth))*gain;
@@ -1066,7 +1065,7 @@ static int pvsvoc_process(CSOUND *csound, pvsvoc *p)
       }
       p->fout->framecount = p->lastframe = p->fin->framecount;
     }
-    
+
     return OK;
  err1:
     return csound->PerfError(csound,Str("pvsvoc: not initialised\n"));
@@ -1126,15 +1125,15 @@ static int pvsmorph_process(CSOUND *csound, pvsmorph *p)
 static OENTRY localops[] = {
   {"sndloop", sizeof(sndloop), 5,
    "ak", "akkii", (SUBR)sndloop_init, NULL, (SUBR)sndloop_process},
-  {"flooper", sizeof(flooper), 5,
+  {"flooper", sizeof(flooper), TR|5,
    "a", "kkiiii", (SUBR)flooper_init, NULL, (SUBR)flooper_process},
   {"pvsarp", sizeof(pvsarp), 3,
    "f", "fkkk", (SUBR)pvsarp_init, (SUBR)pvsarp_process},
   {"pvsvoc", sizeof(pvsvoc), 3,
    "f", "ffkkO", (SUBR)pvsvoc_init, (SUBR)pvsvoc_process},
-  {"flooper2", sizeof(flooper2), 5,
+  {"flooper2", sizeof(flooper2), TR|5,
    "a", "kkkkkiooooO", (SUBR)flooper2_init, NULL, (SUBR)flooper2_process},
- {"flooper3", sizeof(flooper3), 5,
+ {"flooper3", sizeof(flooper3), TR|5,
   "a", "kkkkkioooo", (SUBR)flooper3_init, NULL, (SUBR)flooper3_process},
  {"pvsmorph", sizeof(pvsvoc), 3,
    "f", "ffkk", (SUBR)pvsmorph_init, (SUBR)pvsmorph_process}
@@ -1145,4 +1144,3 @@ int sndloop_init_(CSOUND *csound)
   return csound->AppendOpcodes(csound, &(localops[0]),
                                (int) (sizeof(localops) / sizeof(OENTRY)));
 }
-
diff --git a/Opcodes/sndwarp.c b/Opcodes/sndwarp.c
index f22b79b..b398c27 100644
--- a/Opcodes/sndwarp.c
+++ b/Opcodes/sndwarp.c
@@ -92,7 +92,7 @@ static int sndwarpgetset(CSOUND *csound, SNDWARP *p)
 static int sndwarp(CSOUND *csound, SNDWARP *p)
 {
     int         n, nsmps = csound->ksmps;
-    MYFLT       frm0,frm1;
+    MYFLT       frm_0,frm_1;
     int32       base, longphase;
     MYFLT       frac, frIndx;
     MYFLT       *r1, *r2, *amp, *timewarpby, *resample;
@@ -159,19 +159,19 @@ static int sndwarp(CSOUND *csound, SNDWARP *p)
 
         base = (int32)frIndx;    /* index of basis frame of interpolation */
         frac = ((MYFLT)(frIndx - (MYFLT)base));
-        frm0 = *(ftpSamp->ftable + base);
-        frm1 = *(ftpSamp->ftable + (base+1));
+        frm_0 = *(ftpSamp->ftable + base);
+        frm_1 = *(ftpSamp->ftable + (base+1));
         if (frac != FL(0.0)) {
-          r1[n] += ((frm0 + frac*(frm1-frm0)) * windowamp) * *amp;
+          r1[n] += ((frm_0 + frac*(frm_1-frm_0)) * windowamp) * *amp;
           if (i==0)
            if (p->OUTOCOUNT > 1)
-             r2[n] += (frm0 + frac*(frm1-frm0)) * *amp;
+             r2[n] += (frm_0 + frac*(frm_1-frm_0)) * *amp;
         }
         else {
-          r1[n] += (frm0 * windowamp) * *amp;
+          r1[n] += (frm_0 * windowamp) * *amp;
           if (i==0)
             if (p->OUTOCOUNT > 1)
-              r2[n] += frm0 * *amp;
+              r2[n] += frm_0 * *amp;
         }
         if (p->ampcode) amp++;
         if (p->timewarpcode) timewarpby++;
@@ -355,9 +355,9 @@ static int sndwarpst(CSOUND *csound, SNDWARPST *p)
 #define S(x)    sizeof(x)
 
 static OENTRY localops[] = {
-  { "sndwarp", S(SNDWARP), 5, "mm", "xxxiiiiiii",
+  { "sndwarp", S(SNDWARP), TR|5, "mm", "xxxiiiiiii",
     (SUBR)sndwarpgetset, NULL, (SUBR)sndwarp},
-  { "sndwarpst", S(SNDWARPST), 5, "mmmm","xxxiiiiiii",
+  { "sndwarpst", S(SNDWARPST), TR|5, "mmmm","xxxiiiiiii",
     (SUBR)sndwarpstset,NULL,(SUBR)sndwarpst}
 };
 
diff --git a/Opcodes/sockrecv.c b/Opcodes/sockrecv.c
index dd24276..e498f9c 100644
--- a/Opcodes/sockrecv.c
+++ b/Opcodes/sockrecv.c
@@ -25,7 +25,7 @@
 #include <unistd.h>
 #include <stdlib.h>
 #include <sys/types.h>
-#ifdef __OS_WINDOWS__
+#ifdef WIN32
 #include <winsock2.h>
 #include <ws2tcpip.h>
 #else
@@ -39,7 +39,9 @@
 #define MAXBUFS 32
 #define MTU (1456)
 
+#ifndef WIN32
 extern  int     inet_aton(const char *cp, struct in_addr *inp);
+#endif
 
 static  uintptr_t udpRecv(void *data);
 static  int     deinit_udpRecv(CSOUND *csound, void *pdata);
@@ -89,7 +91,7 @@ static uintptr_t udpRecv(void *pdata)
 
     while (p->threadon) {
       /* get the data from the socket and store it in a tmp buffer */
-      if ((bytes = recvfrom(p->sock, tmp, MTU, 0, &from, &clilen))) {
+      if ((bytes = recvfrom(p->sock, (void *)tmp, MTU, 0, &from, &clilen))) {
         p->wbufferuse++;
         p->wbufferuse = (p->wbufferuse == bufnos ? 0 : p->wbufferuse);
         buf = (MYFLT *) ((char *) p->buffer.auxp + (p->wbufferuse * MTU));
@@ -108,6 +110,12 @@ static int init_recv(CSOUND *csound, SOCKRECV *p)
 {
     MYFLT   *buf;
     int     bufnos;
+#ifdef WIN32
+    WSADATA wsaData = {0};
+    int err;
+    if ((err=WSAStartup(MAKEWORD(2,2), &wsaData))!= 0)
+      csound->InitError(csound, Str("Winsock2 failed to start: %d"), err);
+#endif
 
     p->wp = 0;
     p->rp = 0;
@@ -200,6 +208,12 @@ static int init_recvS(CSOUND *csound, SOCKRECV *p)
 {
     MYFLT   *buf;
     int     bufnos;
+#ifdef WIN32
+    WSADATA wsaData = {0};
+    int err;
+    if ((err=WSAStartup(MAKEWORD(2,2), &wsaData))!= 0)
+      csound->InitError(csound, Str("Winsock2 failed to start: %d"), err);
+#endif
 
     p->wp = 0;
     p->rp = 0;
@@ -293,6 +307,12 @@ static int send_recvS(CSOUND *csound, SOCKRECV *p)
 /* TCP version */
 static int init_srecv(CSOUND *csound, SOCKRECVT *p)
 {
+#ifdef WIN32
+    WSADATA wsaData = {0};
+    int err;
+    if ((err=WSAStartup(MAKEWORD(2,2), &wsaData))!= 0)
+      csound->InitError(csound, Str("Winsock2 failed to start: %d"), err);
+#endif
     /* create a STREAM (TCP) socket in the INET (IP) protocol */
     p->sock = socket(PF_INET, SOCK_STREAM, 0);
 
@@ -309,17 +329,22 @@ static int init_srecv(CSOUND *csound, SOCKRECVT *p)
     p->server_addr.sin_family = AF_INET;
 
     /* the server IP address, in network byte order */
+#ifdef WIN32
+    p->server_addr.sin_addr.S_un.S_addr = inet_addr((const char *) p->ipaddress);
+#else
     inet_aton((const char *) p->ipaddress, &(p->server_addr.sin_addr));
-
+#endif
     /* the port we are going to listen on, in network byte order */
     p->server_addr.sin_port = htons((int) *p->port);
 
 again:
     if (connect(p->sock, (struct sockaddr *) &p->server_addr,
                 sizeof(p->server_addr)) < 0) {
+#ifdef ECONNREFUSED
       if (errno == ECONNREFUSED)
         goto again;
-      return csound->InitError(csound, Str("connect failed"));
+#endif
+      return csound->InitError(csound, Str("connect failed (%d)"), errno);
     }
 
     return OK;
@@ -340,7 +365,7 @@ static int send_srecv(CSOUND *csound, SOCKRECVT *p)
 
 #define S(x)    sizeof(x)
 
-static OENTRY localops[] = {
+static OENTRY sockrecv_localops[] = {
   { "sockrecv", S(SOCKRECV), 5, "a", "ii", (SUBR) init_recv, NULL,
     (SUBR) send_recv },
   { "sockrecvs", S(SOCKRECV), 5, "aa", "ii", (SUBR) init_recvS, NULL,
@@ -349,5 +374,5 @@ static OENTRY localops[] = {
     (SUBR) send_srecv }
 };
 
-LINKAGE
+LINKAGE1(sockrecv_localops)
 
diff --git a/Opcodes/socksend.c b/Opcodes/socksend.c
index fcefaa0..6bf318a 100644
--- a/Opcodes/socksend.c
+++ b/Opcodes/socksend.c
@@ -23,7 +23,7 @@
 
 #include "csdl.h"
 #include <sys/types.h>
-#ifdef __OS_WINDOWS__
+#ifdef WIN32
 #include <winsock2.h>
 #include <ws2tcpip.h>
 #else
@@ -40,18 +40,22 @@ extern  int     inet_aton(const char *cp, struct in_addr *inp);
 typedef struct {
     OPDS    h;
     MYFLT   *asig, *ipaddress, *port, *buffersize;
+    MYFLT   *format;
     AUXCH   aux;
     int     sock, conn;
     int     bsize, wp;
+    int     ff, bwidth;
     struct sockaddr_in server_addr;
 } SOCKSEND;
 
 typedef struct {
     OPDS    h;
     MYFLT   *asigl, *asigr, *ipaddress, *port, *buffersize;
+    MYFLT   *format;
     AUXCH   aux;
     int     sock, conn;
     int     bsize, wp;
+    int     ff, bwidth;
     struct sockaddr_in server_addr;
 } SOCKSENDS;
 
@@ -61,33 +65,46 @@ typedef struct {
 static int init_send(CSOUND *csound, SOCKSEND *p)
 {
     int     bsize;
-
+    int     bwidth = sizeof(MYFLT);
+#ifdef WIN32
+    WSADATA wsaData = {0};
+    int err;
+    if ((err=WSAStartup(MAKEWORD(2,2), &wsaData))!= 0)
+      csound->InitError(csound, Str("Winsock2 failed to start: %d"), err);
+#endif
+    p->ff = (int)(*p->format);
     p->bsize = bsize = (int) *p->buffersize;
-    if (UNLIKELY((sizeof(MYFLT) * bsize) > MTU)) {
-      return csound->InitError(csound, Str("The buffersize must be <= %d samples "
-                                           "to fit in a udp-packet."),
-                               (int) (MTU / sizeof(MYFLT)));
-    }
+    /* if (UNLIKELY((sizeof(MYFLT) * bsize) > MTU)) { */
+    /*   return csound->InitError(csound, Str("The buffersize must be <= %d samples " */
+    /*                                        "to fit in a udp-packet."), */
+    /*                            (int) (MTU / sizeof(MYFLT))); */
+    /* } */
     p->wp = 0;
 
-    p->sock = socket(PF_INET, SOCK_DGRAM, 0);
+    p->sock = socket(AF_INET, SOCK_DGRAM, 0); 
     if (UNLIKELY(p->sock < 0)) {
       return csound->InitError(csound, Str("creating socket"));
     }
     /* create server address: where we want to send to and clear it out */
     memset(&p->server_addr, 0, sizeof(p->server_addr));
     p->server_addr.sin_family = AF_INET;    /* it is an INET address */
+#ifdef WIN32
+    p->server_addr.sin_addr.S_un.S_addr = inet_addr((const char *) p->ipaddress);
+#else
     inet_aton((const char *) p->ipaddress,
               &p->server_addr.sin_addr);    /* the server IP address */
+#endif
     p->server_addr.sin_port = htons((int) *p->port);    /* the port */
 
+    if (p->ff) bwidth = sizeof(int16);
     /* create a buffer to write the interleaved audio to  */
-    if (p->aux.auxp == NULL || (long) (bsize * sizeof(MYFLT)) > p->aux.size)
+    if (p->aux.auxp == NULL || (long) (bsize * bwidth) > p->aux.size)
       /* allocate space for the buffer */
-      csound->AuxAlloc(csound, (bsize * sizeof(MYFLT)), &p->aux);
+      csound->AuxAlloc(csound, (bsize * bwidth), &p->aux);
     else {
-      memset(p->aux.auxp, 0, sizeof(MYFLT) * bsize);
+      memset(p->aux.auxp, 0, bwidth * bsize);
     }
+    p->bwidth = bwidth;
     return OK;
 }
 
@@ -98,17 +115,30 @@ static int send_send(CSOUND *csound, SOCKSEND *p)
     int     buffersize = p->bsize;
     MYFLT   *asig = p->asig;
     MYFLT   *out = (MYFLT *) p->aux.auxp;
+    int16   *outs = (int16 *) p->aux.auxp;
+    int     ff = p->ff;
 
     for (i = 0, wp = p->wp; i < ksmps; i++, wp++) {
       if (wp == buffersize) {
         /* send the package when we have a full buffer */
-        if (UNLIKELY(sendto(p->sock, out, buffersize * sizeof(MYFLT), 0, to,
+        if (UNLIKELY(sendto(p->sock, (void*)out, buffersize  * p->bwidth, 0, to,
                             sizeof(p->server_addr)) < 0)) {
           return csound->PerfError(csound, Str("sendto failed"));
         }
         wp = 0;
       }
-      out[wp] = asig[i];
+      if (ff) { // Scale for 0dbfs and make LE
+        int16 val = (int16)((32768.0*asig[i])/csound->e0dbfs);
+        union cheat {
+          char  benchar[2];
+          int16 bensht;
+        } ch;
+        ch.benchar[0] = 0xFF & val;
+        ch.benchar[1] = 0xFF & (val >> 8);
+        outs[wp] = ch.bensht;
+      }
+      else 
+       out[wp] = asig[i];
     }
     p->wp = wp;
 
@@ -119,13 +149,21 @@ static int send_send(CSOUND *csound, SOCKSEND *p)
 static int init_sendS(CSOUND *csound, SOCKSENDS *p)
 {
     int     bsize;
+    int     bwidth = sizeof(MYFLT);
+#ifdef WIN32
+    WSADATA wsaData = {0};
+    int err;
+    if ((err=WSAStartup(MAKEWORD(2,2), &wsaData))!= 0)
+      csound->InitError(csound, Str("Winsock2 failed to start: %d"), err);
+#endif
 
+    p->ff = (int)(*p->format);
     p->bsize = bsize = (int) *p->buffersize;
-    if (UNLIKELY((sizeof(MYFLT) * bsize) > MTU)) {
-      return csound->InitError(csound, Str("The buffersize must be <= %d samples "
-                                           "to fit in a udp-packet."),
-                               (int) (MTU / sizeof(MYFLT)));
-    }
+    /* if (UNLIKELY((sizeof(MYFLT) * bsize) > MTU)) { */
+    /*   return csound->InitError(csound, Str("The buffersize must be <= %d samples " */
+    /*                                        "to fit in a udp-packet."), */
+    /*                            (int) (MTU / sizeof(MYFLT))); */
+    /* } */
     p->wp = 0;
 
     p->sock = socket(AF_INET, SOCK_DGRAM, 0);
@@ -135,17 +173,23 @@ static int init_sendS(CSOUND *csound, SOCKSENDS *p)
     /* create server address: where we want to send to and clear it out */
     memset(&p->server_addr, 0, sizeof(p->server_addr));
     p->server_addr.sin_family = AF_INET;    /* it is an INET address */
+#ifdef WIN32
+    p->server_addr.sin_addr.S_un.S_addr = inet_addr((const char *) p->ipaddress);
+#else
     inet_aton((const char *) p->ipaddress,
               &p->server_addr.sin_addr);    /* the server IP address */
+#endif
     p->server_addr.sin_port = htons((int) *p->port);    /* the port */
 
+    if (p->ff) bwidth = sizeof(int16);
     /* create a buffer to write the interleaved audio to */
-    if (p->aux.auxp == NULL || (long) (bsize * sizeof(MYFLT)) > p->aux.size)
+    if (p->aux.auxp == NULL || (long) (bsize * bwidth) > p->aux.size)
       /* allocate space for the buffer */
-      csound->AuxAlloc(csound, (bsize * sizeof(MYFLT)), &p->aux);
+      csound->AuxAlloc(csound, (bsize * bwidth), &p->aux);
     else {
-      memset(p->aux.auxp, 0, sizeof(MYFLT) * bsize);
+      memset(p->aux.auxp, 0, bwidth * bsize);
     }
+    p->bwidth = bwidth;
     return OK;
 }
 
@@ -155,23 +199,42 @@ static int send_sendS(CSOUND *csound, SOCKSENDS *p)
     MYFLT   *asigl = p->asigl;
     MYFLT   *asigr = p->asigr;
     MYFLT   *out = (MYFLT *) p->aux.auxp;
+    int16   *outs = (int16 *) p->aux.auxp;
     int     i;
     int     buffersize = p->bsize;
     int     wp, ksmps = csound->ksmps;
+    int     ff = p->ff;
 
     /* store the samples of the channels interleaved in the packet */
     /* (left, right) */
     for (i = 0, wp = p->wp; i < ksmps; i++, wp += 2) {
       if (wp == buffersize) {
         /* send the package when we have a full buffer */
-        if (UNLIKELY(sendto(p->sock, out, buffersize * sizeof(MYFLT), 0, to,
+        if (UNLIKELY(sendto(p->sock, (void*)out, buffersize * p->bwidth, 0, to,
                             sizeof(p->server_addr)) < 0)) {
           return csound->PerfError(csound, Str("sendto failed"));
         }
         wp = 0;
       }
-      out[wp] = asigl[i];
-      out[wp + 1] = asigr[i];
+      if (ff) { // Scale for 0dbfs and make LE
+        int16 val = 0x8000*(asigl[i]/csound->e0dbfs);
+        union {
+          char  benchar[2];
+          int16 bensht;
+        } ch;
+
+        ch.benchar[0] = 0xFF & val;
+        ch.benchar[1] = 0xFF & (val >> 8);
+        outs[wp] = ch.bensht;
+        val = 0x8000*(asigl[i+1]/csound->e0dbfs);
+        ch.benchar[0] = 0xFF & val;
+        ch.benchar[1] = 0xFF & (val >> 8);
+        outs[wp + 1] = ch.bensht;
+      }
+      else {
+        out[wp] = asigl[i];
+        out[wp + 1] = asigr[i];
+      }
     }
     p->wp = wp;
 
@@ -182,6 +245,12 @@ static int send_sendS(CSOUND *csound, SOCKSENDS *p)
 static int init_ssend(CSOUND *csound, SOCKSEND *p)
 {
     socklen_t clilen;
+#ifdef WIN32
+    WSADATA wsaData = {0};
+    int err;
+    if ((err=WSAStartup(MAKEWORD(2,2), &wsaData))!= 0)
+      csound->InitError(csound, Str("Winsock2 failed to start: %d"), err);
+#endif
 
     /* create a STREAM (TCP) socket in the INET (IP) protocol */
     p->sock = socket(PF_INET, SOCK_STREAM, 0);
@@ -199,7 +268,11 @@ static int init_ssend(CSOUND *csound, SOCKSEND *p)
     p->server_addr.sin_family = AF_INET;
 
     /* the server IP address, in network byte order */
+#ifdef WIN32
+    p->server_addr.sin_addr.S_un.S_addr = inet_addr((const char *) p->ipaddress);
+#else
     inet_aton((const char *) p->ipaddress, &(p->server_addr.sin_addr));
+#endif
 
     /* the port we are going to listen on, in network byte order */
     p->server_addr.sin_port = htons((int) *p->port);
@@ -236,14 +309,14 @@ static int send_ssend(CSOUND *csound, SOCKSEND *p)
 
 #define S(x)    sizeof(x)
 
-static OENTRY localops[] = {
-  { "socksend", S(SOCKSEND), 5, "", "aSii", (SUBR) init_send, NULL,
+static OENTRY socksend_localops[] = {
+  { "socksend", S(SOCKSEND), 5, "", "aSiio", (SUBR) init_send, NULL,
     (SUBR) send_send },
-  { "socksends", S(SOCKSENDS), 5, "", "aaSii", (SUBR) init_sendS, NULL,
+  { "socksends", S(SOCKSENDS), 5, "", "aaSiio", (SUBR) init_sendS, NULL,
     (SUBR) send_sendS },
   { "stsend", S(SOCKSEND), 5, "", "aSi", (SUBR) init_ssend, NULL,
     (SUBR) send_ssend }
 };
 
-LINKAGE
+LINKAGE1(socksend_localops)
 
diff --git a/Opcodes/space.c b/Opcodes/space.c
index 68e91d2..3140d1f 100644
--- a/Opcodes/space.c
+++ b/Opcodes/space.c
@@ -250,7 +250,7 @@ static int spdist(CSOUND *csound, SPDIST *p)
 #define S(x)    sizeof(x)
 
 static OENTRY localops[] = {
-{ "space",  S(SPACE),  5, "aaaa", "aikkkk",(SUBR)spaceset, NULL, (SUBR)space },
+{ "space",  S(SPACE),  TR|5, "aaaa", "aikkkk",(SUBR)spaceset, NULL, (SUBR)space },
 { "spsend", S(SPSEND), 5, "aaaa", "",     (SUBR)spsendset, NULL, (SUBR)spsend },
 { "spdist", S(SPDIST), 3,    "k", "ikkk", (SUBR)spdistset, (SUBR)spdist, NULL }
 };
diff --git a/Opcodes/spectra.c b/Opcodes/spectra.c
index 4e6e584..005dda4 100644
--- a/Opcodes/spectra.c
+++ b/Opcodes/spectra.c
@@ -21,7 +21,9 @@
     02111-1307 USA
 */
 
-#include "csdl.h"         /*                                    SPECTRA.C       */
+// #include "csdl.h"
+#include "csoundCore.h"        
+#include "interlocks.h"
 #include <math.h>
 #include "cwindow.h"
 #include "spectra.h"
@@ -1203,7 +1205,7 @@ int specfilt(CSOUND *csound, SPECFILT *p)
 
 #define S       sizeof
 
-static OENTRY localops[] = {
+static OENTRY spectra_localops[] = {
 { "spectrum", S(SPECTRUM),7, "w", "siiiqoooo",
                                    (SUBR)spectset,(SUBR)spectrum,(SUBR)spectrum},
 { "specaddm", S(SPECADDM),5, "w",  "wwp",  (SUBR)spadmset,NULL,  (SUBR)specaddm},
@@ -1212,7 +1214,7 @@ static OENTRY localops[] = {
 { "spechist", S(SPECHIST),5, "w",  "w",    (SUBR)sphstset,NULL,  (SUBR)spechist},
 { "specfilt", S(SPECFILT),5, "w",  "wi",   (SUBR)spfilset,NULL,  (SUBR)specfilt},
 { "specptrk", S(SPECPTRK),5, "kk", "wkiiiiiioqooo",
-                                             (SUBR)sptrkset,NULL,(SUBR)specptrk},
+                                            (SUBR)sptrkset,NULL,(SUBR)specptrk},
 { "specsum",  S(SPECSUM), 5, "k",  "wo",   (SUBR)spsumset,NULL,  (SUBR)specsum },
 { "specdisp", S(SPECDISP),5, "",   "wio",  (SUBR)spdspset,NULL,  (SUBR)specdisp},
 { "pitch", S(PITCH),     5,    "kk", "aiiiiqooooojo",
@@ -1224,10 +1226,10 @@ static OENTRY localops[] = {
 { "readclock", S(CLKRD), 1,  "i", "i",    (SUBR)clockread, NULL, NULL          },
 { "pitchamdf",S(PITCHAMDF),5,"kk","aiioppoo",
                                      (SUBR)pitchamdfset, NULL, (SUBR)pitchamdf },
-{ "hsboscil",S(HSBOSC),  5,  "a", "kkkiiioo",(SUBR)hsboscset,NULL,(SUBR)hsboscil },
+{ "hsboscil",S(HSBOSC), TR|5, "a", "kkkiiioo",(SUBR)hsboscset,NULL,(SUBR)hsboscil },
 { "phasorbnk", S(PHSORBNK),7,"s", "xkio",
                                 (SUBR)phsbnkset, (SUBR)kphsorbnk, (SUBR)phsorbnk },
-{ "adsynt",S(HSBOSC),    5,  "a", "kkiiiio", (SUBR)adsyntset, NULL, (SUBR)adsynt },
+{ "adsynt",S(HSBOSC), TR|5,  "a", "kkiiiio", (SUBR)adsyntset, NULL, (SUBR)adsynt },
 { "mpulse", S(IMPULSE),  5,  "a", "kko",  (SUBR)impulse_set, NULL, (SUBR)impulse },
 { "lpf18", S(LPF18),     5,  "a", "akkko",  (SUBR)lpf18set, NULL, (SUBR)lpf18db   },
 { "waveset", S(BARRI),   5,  "a", "ako",   (SUBR)wavesetset,  NULL, (SUBR)waveset},
@@ -1248,7 +1250,7 @@ static OENTRY localops[] = {
 { "p.k", S(PFUN),        2,     "k",    "k",     NULL, (SUBR)pfun, NULL     },
 { "mute", S(MUTE), 1,          "",      "To",   (SUBR)mute_inst             },
 #ifdef BETA
-{ "oscilv",  0xfffe                                                         },
+{ "oscilv",  0xfffe,    TR                                                     },
 { "oscilv.kk", S(XOSC),  5,     "a",   "kkio", (SUBR)Foscset, NULL, (SUBR)Fosckk },
 { "oscilv.ka", S(XOSC),  5,     "a",   "kaio", (SUBR)Foscset, NULL, (SUBR)Foscka },
 { "oscilv.ak", S(XOSC),  5,     "a",   "akio", (SUBR)Foscset, NULL, (SUBR)Foscak },
@@ -1258,5 +1260,5 @@ static OENTRY localops[] = {
 { "mediank", S(MEDFILT), 5,     "k", "kkio", (SUBR)medfiltset, (SUBR)kmedfilt},
 };
 
-LINKAGE
+LINKAGE1(spectra_localops)
 
diff --git a/Opcodes/stackops.c b/Opcodes/stackops.c
index dc28161..e7f30b0 100644
--- a/Opcodes/stackops.c
+++ b/Opcodes/stackops.c
@@ -21,7 +21,8 @@
     02111-1307 USA
 */
 
-#include "csdl.h"
+#include "csoundCore.h"
+#include "interlocks.h"
 #include "pstream.h"
 
 typedef struct CsoundArgStack_s CsoundArgStack_t;
@@ -120,33 +121,25 @@ static CS_NOINLINE int csoundStack_Error(void *p, const char *msg)
 
 static CS_NOINLINE int csoundStack_OverflowError(void *p)
 {
-    CSOUND  *csound;
-
-    csound = ((OPDS*) p)->insdshead->csound;
+    /* CSOUND  *csound= ((OPDS*) p)->insdshead->csound; */
     return csoundStack_Error(p, Str("stack overflow"));
 }
 
 static CS_NOINLINE int csoundStack_EmptyError(void *p)
 {
-    CSOUND  *csound;
-
-    csound = ((OPDS*) p)->insdshead->csound;
+    /* CSOUND  *csound((OPDS*) p)->insdshead->csound; */
     return csoundStack_Error(p, Str("cannot pop from empty stack"));
 }
 
 static CS_NOINLINE int csoundStack_TypeError(void *p)
 {
-    CSOUND  *csound;
-
-    csound = ((OPDS*) p)->insdshead->csound;
+    /* CSOUND  *csound = ((OPDS*) p)->insdshead->csound; */
     return csoundStack_Error(p, Str("argument number or type mismatch"));
 }
 
 static CS_NOINLINE int csoundStack_LengthError(void *p)
 {
-    CSOUND  *csound;
-
-    csound = ((OPDS*) p)->insdshead->csound;
+    /* CSOUND  *csound = ((OPDS*) p)->insdshead->csound; */
     return csoundStack_Error(p, Str("string argument is too long"));
 }
 
@@ -641,21 +634,21 @@ static int monitor_opcode_init(CSOUND *csound, MONITOR_OPCODE *p)
 
  /* ------------------------------------------------------------------------ */
 
-static OENTRY localops[] = {
-  { "stack",  sizeof(STACK_OPCODE), 1,  "",                                "i",
+static OENTRY stackops_localops[] = {
+  { "stack",  sizeof(STACK_OPCODE), SB|1,  "",                                "i",
       (SUBR) stack_opcode_init, (SUBR) NULL,                      (SUBR) NULL },
-  { "push",   sizeof(PUSH_OPCODE),  3,  "",                                "N",
+  { "push",   sizeof(PUSH_OPCODE),  SB|3,  "",                                "N",
       (SUBR) push_opcode_init,  (SUBR) notinit_opcode_stub_perf,  (SUBR) NULL },
-  { "pop",    sizeof(POP_OPCODE),   3,  "NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN", "",
+  { "pop",    sizeof(POP_OPCODE),   SB|3,  "NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN", "",
       (SUBR) pop_opcode_init,   (SUBR) notinit_opcode_stub_perf,  (SUBR) NULL },
-  { "push_f", sizeof(PUSH_OPCODE),  3,  "",                                "f",
+  { "push_f", sizeof(PUSH_OPCODE),  SB|3,  "",                                "f",
       (SUBR) push_f_opcode_init, (SUBR) notinit_opcode_stub_perf, (SUBR) NULL },
-  { "pop_f",  sizeof(POP_OPCODE),   3,  "f",                               "",
+  { "pop_f",  sizeof(POP_OPCODE),   SB|3,  "f",                               "",
       (SUBR) pop_f_opcode_init,  (SUBR) notinit_opcode_stub_perf, (SUBR) NULL },
   /* ----------------------------------------------------------------------- */
   { "monitor",  sizeof(MONITOR_OPCODE), 3,  "mmmmmmmmmmmmmmmmmmmmmmmm", "",
     (SUBR) monitor_opcode_init, (SUBR) notinit_opcode_stub_perf,  (SUBR) NULL }
 };
 
-LINKAGE
+LINKAGE1(stackops_localops)
 
diff --git a/Opcodes/stdopcod.c b/Opcodes/stdopcod.c
index 1c5b409..ab35dbd 100644
--- a/Opcodes/stdopcod.c
+++ b/Opcodes/stdopcod.c
@@ -21,13 +21,14 @@
 
 #include "stdopcod.h"
 
-PUBLIC int csoundModuleCreate(CSOUND *csound)
+/* PUBLIC int csoundModuleCreate(CSOUND *csound)
 {
     (void) csound;
     return 0;
 }
+*/
 
-PUBLIC int csoundModuleInit(CSOUND *csound)
+PUBLIC int stdopc_ModuleInit(CSOUND *csound)
 {
     STDOPCOD_GLOBALS  *p;
     int               err = 0;
@@ -91,8 +92,10 @@ PUBLIC int csoundModuleInit(CSOUND *csound)
     return (err ? CSOUND_ERROR : CSOUND_SUCCESS);
 }
 
+/*
 PUBLIC int csoundModuleInfo(void)
 {
     return ((CS_APIVERSION << 16) + (CS_APISUBVER << 8) + (int) sizeof(MYFLT));
 }
+*/
 
diff --git a/Opcodes/stdopcod.h b/Opcodes/stdopcod.h
index 4ffa8c0..f18f9e1 100644
--- a/Opcodes/stdopcod.h
+++ b/Opcodes/stdopcod.h
@@ -22,9 +22,14 @@
 #ifndef CSOUND_STDOPCOD_H
 #define CSOUND_STDOPCOD_H
 
-#include "csdl.h"
+//#include "csdl.h"
+#include "csoundCore.h"
 #include <sndfile.h>
 
+
+#include "interlocks.h"
+
+
 /* file structure for fout opcodes */
 
 struct fileinTag {
diff --git a/Opcodes/stk/CMakeLists.txt b/Opcodes/stk/CMakeLists.txt
new file mode 100644
index 0000000..c137642
--- /dev/null
+++ b/Opcodes/stk/CMakeLists.txt
@@ -0,0 +1,54 @@
+option(BUILD_STK_OPCODES "Build the stk opcodes" ON)
+
+if(BUILD_STK_OPCODES)
+    find_library(STK_LIBRARY stk)
+    if(STK_LIBRARY)
+        make_plugin(stkOpcodes stkOpcodes.cpp stk)
+    else()
+        set(stk_srcs
+            src/InetWvIn.cpp    src/InetWvOut.cpp
+            src/Mutex.cpp       src/RtAudio.cpp
+            src/RtMidi.cpp
+            src/RtWvIn.cpp      src/RtWvOut.cpp
+            src/Socket.cpp      src/TcpClient.cpp
+            src/TcpServer.cpp   src/Thread.cpp
+            src/UdpSocket.cpp
+            stkOpcodes.cpp)
+
+        # Assume that if this file exists, then we have the sources
+        find_file(STK_FOUND
+            NAMES src/InetWvIn.cpp
+            HINTS ${CMAKE_CURRENT_SOURCE_DIR})
+        check_deps(BUILD_STK_OPCODES STK_FOUND)
+
+        if(BUILD_STK_OPCODES)
+
+            include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
+
+            make_plugin(stk "${stk_srcs}")
+
+            set(stkdefs "__STK_REALTIME__")
+            if(APPLE)
+                list(APPEND stkdefs "__OS_MACOSX__")
+                list(REMOVE_ITEM stkdefs "__STK_REALTIME__")
+            elseif(LINUX)
+                list(APPEND stkdefs "__OS_LINUX__")
+                list(APPEND stkdefs "__LINUX_ALSA__")
+            elseif(WIN32)
+                list(APPEND stkdefs "__OS_WINDOWS__")
+            endif()
+    
+            if(BIG_ENDIAN)
+                list(APPEND stkdefs "__BIG_ENDIAN__")
+            else()
+                list(APPEND stkdefs "__LITTLE_ENDIAN__")
+            endif()
+
+
+            set_target_properties(stk PROPERTIES
+                COMPILE_DEFINITIONS "${stkdefs}")
+
+        endif()
+    endif()
+endif()
+
diff --git a/Opcodes/syncgrain.c b/Opcodes/syncgrain.c
index 20871f1..455dff9 100644
--- a/Opcodes/syncgrain.c
+++ b/Opcodes/syncgrain.c
@@ -24,6 +24,7 @@
 #include "csdl.h"
 #include "syncgrain.h"
 #include "soundio.h"
+#include "interlocks.h"
 
 /*
 #ifdef HAVE_VALUES_H
@@ -686,11 +687,11 @@ static int filegrain_process(CSOUND *csound, filegrain *p)
 
 
 static OENTRY localops[] = {
-{"syncgrain", sizeof(syncgrain), 5, "a", "kkkkkiii",
+{"syncgrain", sizeof(syncgrain), TR|5, "a", "kkkkkiii",
  (SUBR)syncgrain_init, NULL,(SUBR)syncgrain_process },
-{"syncloop", sizeof(syncgrainloop), 5, "a", "kkkkkkkiiioo",
+{"syncloop", sizeof(syncgrainloop), TR|5, "a", "kkkkkkkiiioo",
  (SUBR)syncgrainloop_init, NULL,(SUBR)syncgrainloop_process },
-{"diskgrain", sizeof(filegrain), 5, DGRAIN_OUTTYPES, "Skkkkkiipo",
+{"diskgrain", sizeof(filegrain), TR|5, DGRAIN_OUTTYPES, "Skkkkkiipo",
                             (SUBR)filegrain_init, NULL,(SUBR)filegrain_process }
 
 };
diff --git a/Opcodes/system_call.c b/Opcodes/system_call.c
index 8d69921..d5b197e 100644
--- a/Opcodes/system_call.c
+++ b/Opcodes/system_call.c
@@ -37,8 +37,8 @@ typedef struct {
 
 static void threadroutine(void *command)
 {
-  system( (char *)command );
-  free( command );
+    system( (char *)command );
+    free( command );
 }
 
 static int call_system(CSOUND *csound, SYSTEM *p)
@@ -105,10 +105,10 @@ int call_system_k(CSOUND *csound, SYSTEM *p)
 
 #define S(x)    sizeof(x)
 
-static OENTRY localops[] = {
+static OENTRY system_localops[] = {
   { "system", S(SYSTEM), 3, "k", "kSO", (SUBR)call_system_set,(SUBR)call_system_k},
   { "system_i", S(SYSTEM), 1, "i", "iSo", (SUBR)call_system_i}
 };
 
-LINKAGE
+LINKAGE1(system_localops)
 
diff --git a/Opcodes/tabsum.c b/Opcodes/tabsum.c
index 3bb764f..7b05408 100644
--- a/Opcodes/tabsum.c
+++ b/Opcodes/tabsum.c
@@ -21,7 +21,8 @@
     02111-1307 USA
 */
 
-#include "csdl.h"
+#include "csoundCore.h"
+#include "interlocks.h"
 
 typedef struct {
     OPDS    h;
@@ -67,11 +68,12 @@ static int tabsum(CSOUND *csound, TABSUM *p)
 
 #define S(x)    sizeof(x)
 
-static OENTRY localops[] = {
-{ "tabsum",     S(TABSUM),     3,     "k",    "iOO",(SUBR)tabsuminit, (SUBR)tabsum },
+static OENTRY tabsum_localops[] = {
+{ "tabsum",     S(TABSUM),     3,     "k",    "iOO",
+                (SUBR)tabsuminit, (SUBR)tabsum },
 };
 
-LINKAGE
+LINKAGE1(tabsum_localops)
 
 
 
diff --git a/Opcodes/tabvars.c b/Opcodes/tabvars.c
index d2782c5..6d1e9ce 100644
--- a/Opcodes/tabvars.c
+++ b/Opcodes/tabvars.c
@@ -21,7 +21,10 @@
     02111-1307 USA
 */
 
-#include "csdl.h"
+// #include "csdl.h"
+#include "csoundCore.h"        
+#include "interlocks.h"
+
 
 typedef struct {
     OPDS h;
@@ -202,6 +205,7 @@ static int tab2ftab(CSOUND *csound, TABCOPY *p)
     fdata = ftp->ftable;
     if (fsize<tlen) tlen = fsize;
     memcpy(fdata, p->tab->data, sizeof(MYFLT)*tlen);
+    return OK;
 }
 
 static int ftab2tab(CSOUND *csound, TABCOPY *p)
@@ -218,11 +222,12 @@ static int ftab2tab(CSOUND *csound, TABCOPY *p)
     fdata = ftp->ftable;
     if (fsize<tlen) tlen = fsize;
     memcpy(p->tab->data, fdata, sizeof(MYFLT)*tlen);
+    return OK;
 }
 
 
 
-static OENTRY localops[] =
+static OENTRY tabvars_localops[] =
 {
   { "plustab", sizeof(TABARITH), 3, "t", "tt", (SUBR) tabarithset, (SUBR) tabadd },
   { "multtab", sizeof(TABARITH), 3, "t", "tt", (SUBR) tabarithset, (SUBR) tabmult },
@@ -231,15 +236,15 @@ static OENTRY localops[] =
   { "sumtab", sizeof(TABQUERY), 3, "k", "t", (SUBR) tabqset, (SUBR) tabsum },
   { "scalet", sizeof(TABSCALE), 3, "", "tkkOJ",(SUBR) tabscaleset,(SUBR) tabscale },
   { "#copytab", sizeof(TABCPY), 3, "t", "t", (SUBR) tabcopy_set, (SUBR)tabcopy },
-  { "copy2ftab", sizeof(TABCOPY), 1, "", "tk", NULL, (SUBR) tab2ftab },
-  { "copy2ttab", sizeof(TABCOPY), 1, "", "tk", NULL, (SUBR) ftab2tab }
+  { "copy2ftab", sizeof(TABCOPY), TW|1, "", "tk", NULL, (SUBR) tab2ftab },
+  { "copy2ttab", sizeof(TABCOPY), TR|1, "", "tk", NULL, (SUBR) ftab2tab }
 };
 // reverse, scramble, mirror, stutter, rotate, ...
 // jpff: stutter is an interesting one (very musical). It basically
 //          randomly repeats (holds) values based on a probability parameter    
 
 
-LINKAGE
+LINKAGE1(tabvars_localops)
 
 
 
diff --git a/Opcodes/ugakbari.c b/Opcodes/ugakbari.c
index ca44242..e4fbf46 100644
--- a/Opcodes/ugakbari.c
+++ b/Opcodes/ugakbari.c
@@ -21,7 +21,8 @@
     02111-1307 USA
 */
 
-#include "csdl.h"
+#include "csoundCore.h"
+#include "interlocks.h"
 #include <math.h>
 
 #define LOGCURVE(x,y) ((LOG(x * (y-FL(1.0))+FL(1.0)))/(LOG(y)))
@@ -101,7 +102,7 @@ static int gainslider_perf(CSOUND *csound, gainslider *p)
 
 /* opcode library entries */
 
-static OENTRY localops[] = {
+static OENTRY ugakbari_localops[] = {
   { "scale", sizeof(scale), 2, "k", "kkk", NULL, (SUBR)scale_process, NULL },
   { "expcurve", sizeof(expcurve), 2, "k", "kk", NULL,
     (SUBR)expcurve_perf, NULL },
@@ -111,4 +112,4 @@ static OENTRY localops[] = {
     (SUBR)gainslider_perf, NULL }
 };
 
-LINKAGE
+LINKAGE1(ugakbari_localops)
diff --git a/Opcodes/ugens7.c b/Opcodes/ugens7.c
index cc56b14..ad5daa1 100644
--- a/Opcodes/ugens7.c
+++ b/Opcodes/ugens7.c
@@ -581,8 +581,8 @@ static int harmon(CSOUND *csound, HARMON *p)
 #define S(x)    sizeof(x)
 
 static OENTRY localops[] = {
-{ "fof",    S(FOFS),   5, "a","xxxkkkkkiiiiooo",(SUBR)fofset,NULL,(SUBR)fof   },
-{ "fof2",   S(FOFS),   5, "a","xxxkkkkkiiiikko",(SUBR)fofset2,NULL,(SUBR)fof  },
+{ "fof",    S(FOFS),   TR|5, "a","xxxkkkkkiiiiooo",(SUBR)fofset,NULL,(SUBR)fof   },
+{ "fof2",   S(FOFS),   TR|5, "a","xxxkkkkkiiiikko",(SUBR)fofset2,NULL,(SUBR)fof  },
 { "harmon", S(HARMON), 5, "a",  "akkkkiii",(SUBR)harmset,NULL,  (SUBR)harmon  }
 };
 
diff --git a/Opcodes/ugensa.c b/Opcodes/ugensa.c
index 5995baa..68532f0 100644
--- a/Opcodes/ugensa.c
+++ b/Opcodes/ugensa.c
@@ -218,7 +218,7 @@ static int newpulse(CSOUND *csound, FOGS *p, OVERLAP *ovp, MYFLT   *amp,
 #define S(x)    sizeof(x)
 
 static OENTRY localops[] = {
-{ "fog",  S(FOGS), 5, "a","xxxakkkkkiiiiooo",(SUBR)fogset,NULL,(SUBR)fog}
+{ "fog",  S(FOGS), TR|5, "a","xxxakkkkkiiiiooo",(SUBR)fogset,NULL,(SUBR)fog}
 };
 
 int ugensa_init_(CSOUND *csound)
diff --git a/Opcodes/uggab.c b/Opcodes/uggab.c
index 887a5eb..78bf3bd 100644
--- a/Opcodes/uggab.c
+++ b/Opcodes/uggab.c
@@ -1662,9 +1662,9 @@ static OENTRY localops[] = {
 { "fold",    S(FOLD),     5, "a", "ak",   (SUBR)fold_set, NULL, (SUBR)fold       },
 { "lineto",   S(LINETO),  3, "k", "kk",   (SUBR)lineto_set,  (SUBR)lineto, NULL  },
 { "tlineto",  S(LINETO2), 3, "k", "kkk",  (SUBR)tlineto_set, (SUBR)tlineto, NULL },
-{ "vibrato",  S(VIBRATO), 3, "k", "kkkkkkkkio",
+{ "vibrato",  S(VIBRATO), TR|3, "k", "kkkkkkkkio",
                                         (SUBR)vibrato_set, (SUBR)vibrato, NULL   },
-{ "vibr",     S(VIBRATO), 3, "k", "kki",  (SUBR)vibr_set, (SUBR)vibr, NULL    },
+{ "vibr",     S(VIBRATO), TR|3, "k", "kki",  (SUBR)vibr_set, (SUBR)vibr, NULL    },
 { "jitter2",  S(JITTER2), 3, "k", "kkkkkkk", (SUBR)jitter2_set, (SUBR)jitter2    },
 { "jitter",   S(JITTER),  3, "k", "kkk",  (SUBR)jitter_set, (SUBR)jitter, NULL },
 { "jspline",  S(JITTERS), 7, "s", "xkk",
@@ -1675,8 +1675,8 @@ static OENTRY localops[] = {
 { "lpshold",  S(LOOPSEG), 3, "k", "kkiz", (SUBR)loopseg_set, (SUBR)lpshold, NULL },
 { "loopsegp", S(LOOPSEGP), 3,"k", "kz",   (SUBR)loopsegp_set,(SUBR)loopsegp, NULL},
 { "lpsholdp", S(LOOPSEGP), 3,"k", "kz",   (SUBR)loopsegp_set,(SUBR)lpsholdp, NULL},
-{ "cuserrnd", 0xffff                                                            },
-{ "duserrnd", 0xffff                                                            },
+{ "cuserrnd", 0xffff,  TR                                                        },
+{ "duserrnd", 0xffff,  TR                                                        },
 { "random",   0xffff                                                            },
 { "cuserrnd.i", S(CURAND),1,"i",  "iii",  (SUBR)iContinuousUserRand, NULL, NULL },
 { "cuserrnd.k", S(CURAND),2,"k",  "kkk",
@@ -1701,14 +1701,14 @@ static OENTRY localops[] = {
                                 (SUBR)Cuserrnd_set,(SUBR)kDiscreteUserRand,NULL },
 { "duserrnd.a", S(DURAND),4, "a", "k",
                                 (SUBR)Cuserrnd_set,NULL,(SUBR)aDiscreteUserRand },
-{ "poscil", 0xfffe                                                          },
+{ "poscil", 0xfffe, TR                                                          },
 { "poscil.kk", S(POSC), 7, "s", "kkio", (SUBR)posc_set,(SUBR)kposc,(SUBR)posckk },
 { "poscil.ka", S(POSC), 5, "a", "kaio", (SUBR)posc_set, NULL,  (SUBR)poscka },
 { "poscil.ak", S(POSC), 5, "a", "akio", (SUBR)posc_set, NULL,  (SUBR)poscak },
 { "poscil.aa", S(POSC), 5, "a", "aaio", (SUBR)posc_set, NULL,  (SUBR)poscaa },
-{ "lposcil",  S(LPOSC), 5, "a", "kkkkio", (SUBR)lposc_set, NULL, (SUBR)lposc},
-{ "poscil3",  S(POSC),  7, "s", "kkio", (SUBR)posc_set,(SUBR)kposc3,(SUBR)posc3 },
-{ "lposcil3", S(LPOSC), 5, "a", "kkkkio", (SUBR)lposc_set, NULL,(SUBR)lposc3},
+{ "lposcil",  S(LPOSC), TR|5, "a", "kkkkio", (SUBR)lposc_set, NULL, (SUBR)lposc},
+{ "poscil3",  S(POSC),  TR|7, "s", "kkio", (SUBR)posc_set,(SUBR)kposc3,(SUBR)posc3 },
+{ "lposcil3", S(LPOSC), TR|5, "a", "kkkkio", (SUBR)lposc_set, NULL,(SUBR)lposc3},
 { "trigger",  S(TRIG),  3, "k", "kkk",  (SUBR)trig_set, (SUBR)trig,   NULL  },
 { "sum",      S(SUM),   4, "a", "y",    NULL, NULL, (SUBR)sum               },
 { "product",  S(SUM),   4, "a", "y",    NULL, NULL, (SUBR)product           },
diff --git a/Opcodes/ugmoss.c b/Opcodes/ugmoss.c
index d1375bd..d65d22c 100644
--- a/Opcodes/ugmoss.c
+++ b/Opcodes/ugmoss.c
@@ -565,10 +565,10 @@ static int ftmorf(CSOUND *csound, FTMORF *p)
 #define S(x)    sizeof(x)
 
 static OENTRY localops[] = {
-{ "dconv",  S(DCONV), 5, "a", "aii",   (SUBR)dconvset, NULL, (SUBR)dconv      },
+{ "dconv",  S(DCONV), TR|5, "a", "aii",   (SUBR)dconvset, NULL, (SUBR)dconv      },
 { "vcomb", S(VCOMB),  5, "a", "akxioo", (SUBR)vcombset, NULL, (SUBR)vcomb     },
 { "valpass", S(VCOMB),5, "a", "akxioo", (SUBR)vcombset, NULL, (SUBR)valpass   },
-{ "ftmorf", S(FTMORF),3, "",  "kii",  (SUBR)ftmorfset,  (SUBR)ftmorf, NULL    },
+{ "ftmorf", S(FTMORF),TR|3, "",  "kii",  (SUBR)ftmorfset,  (SUBR)ftmorf, NULL    },
 { "and.ii",  S(AOP),  1, "i", "ii",   (SUBR)and_kk                  },
 { "and.kk",  S(AOP),  2, "k", "kk",   NULL,   (SUBR)and_kk          },
 { "and.ka",  S(AOP),  4, "a", "ka",   NULL,   NULL,   (SUBR)and_ka  },
diff --git a/Opcodes/ugnorman.c b/Opcodes/ugnorman.c
index 21f2e3d..1ed5460 100644
--- a/Opcodes/ugnorman.c
+++ b/Opcodes/ugnorman.c
@@ -62,6 +62,7 @@ kamp            ATSinterpread   kfreq
 
 #include "ugnorman.h"
 #include <ctype.h>
+#include "interlocks.h"
 
 #define ATSA_NOISE_VARIANCE 0.04
 
@@ -193,40 +194,40 @@ static void FetchPartial(ATSREAD *p, MYFLT *buf, MYFLT position)
 {
     MYFLT   frac;           /* the distance in time we are between frames */
     int     frame;          /* the number of the first frame */
-    double  *frm1, *frm2;   /* a pointer to frame 1 and frame 2 */
+    double  *frm_1, *frm_2;   /* a pointer to frame 1 and frame 2 */
     double  frm1amp, frm1freq, frm2amp, frm2freq;
 
     frame = (int) position;
-    frm1 = p->datastart + p->frmInc * frame + p->partialloc;
+    frm_1 = p->datastart + p->frmInc * frame + p->partialloc;
 
     /* if we are using the data from the last frame */
     /* we should not try to interpolate */
     if (frame == p->maxFr) {
       if (p->swapped == 1) {
-        buf[0] = (MYFLT) bswap(frm1);       /* calc amplitude */
-        buf[1] = (MYFLT) bswap(frm1 + 1);   /* calc freq */
+        buf[0] = (MYFLT) bswap(frm_1);       /* calc amplitude */
+        buf[1] = (MYFLT) bswap(frm_1 + 1);   /* calc freq */
       }
       else {
-        buf[0] = (MYFLT) *frm1;             /* calc amplitude */
-        buf[1] = (MYFLT) *(frm1 + 1);       /* calc freq */
+        buf[0] = (MYFLT) *frm_1;             /* calc amplitude */
+        buf[1] = (MYFLT) *(frm_1 + 1);       /* calc freq */
       }
       return;
     }
-    frm2 = frm1 + p->frmInc;
+    frm_2 = frm_1 + p->frmInc;
     frac = position - frame;
 
     /* byte swap if needed */
     if (p->swapped == 1) {
-      frm1amp = bswap(frm1);
-      frm2amp = bswap(frm2);
-      frm1freq = bswap(frm1 + 1);
-      frm2freq = bswap(frm2 + 1);
+      frm1amp = bswap(frm_1);
+      frm2amp = bswap(frm_2);
+      frm1freq = bswap(frm_1 + 1);
+      frm2freq = bswap(frm_2 + 1);
     }
     else {
-      frm1amp = *frm1;
-      frm2amp = *frm2;
-      frm1freq = *(frm1 + 1);
-      frm2freq = *(frm2 + 1);
+      frm1amp = *frm_1;
+      frm2amp = *frm_2;
+      frm1freq = *(frm_1 + 1);
+      frm2freq = *(frm_2 + 1);
     }
     buf[0] = (MYFLT) (frm1amp + frac * (frm2amp - frm1amp));    /* calc amp. */
     buf[1] = (MYFLT) (frm1freq + frac * (frm2freq - frm1freq)); /* calc freq */
@@ -339,21 +340,21 @@ static MYFLT FetchNzBand(ATSREADNZ *p, MYFLT position)
 {
     MYFLT   frac;               /* the distance in time we are between frames */
     int     frame;              /* the time of the first frame */
-    double  *frm1, *frm2;
+    double  *frm_1, *frm_2;
     double  frm1val, frm2val;
 
     frame = (int) position;
-    frm1 = p->datastart + p->frmInc * frame + p->nzbandloc;
-    frm1val = (p->swapped == 1) ? bswap(frm1) : *frm1;
+    frm_1 = p->datastart + p->frmInc * frame + p->nzbandloc;
+    frm1val = (p->swapped == 1) ? bswap(frm_1) : *frm_1;
 
     /* if we are using the data from the last frame */
     /* we should not try to interpolate */
     if (frame == p->maxFr)
       return (MYFLT) frm1val;
 
-    frm2 = frm1 + p->frmInc;
+    frm_2 = frm_1 + p->frmInc;
     frac = position - frame;
-    frm2val = (p->swapped == 1) ? bswap(frm2) : *frm2;
+    frm2val = (p->swapped == 1) ? bswap(frm_2) : *frm_2;
 
     return (MYFLT) (frm1val + frac * (frm2val - frm1val));  /* calc energy */
 }
@@ -641,7 +642,7 @@ static int atsadd(CSOUND *csound, ATSADD *p)
 static void FetchADDPartials(ATSADD *p, ATS_DATA_LOC *buf, MYFLT position)
 {
     MYFLT   frac;               /* the distance in time we are between frames */
-    double  *frm0, *frm1;
+    double  *frm_0, *frm_1;
     double  temp0amp, temp1amp;
     double  temp0freq, temp1freq;
     int     frame;
@@ -650,19 +651,19 @@ static void FetchADDPartials(ATSADD *p, ATS_DATA_LOC *buf, MYFLT position)
     int     npartials = (int) *p->iptls;
 
     frame = (int) position;
-    frm0 = p->datastart + frame * p->frmInc;
+    frm_0 = p->datastart + frame * p->frmInc;
 
     /* if we are using the data from the last frame */
     /* we should not try to interpolate */
     if (frame == p->maxFr) {
       for (i = 0; i < npartials; i++) {
         if (p->swapped == 1) {
-          buf[i].amp = bswap(&frm0[partialloc]);        /* calc amplitude */
-          buf[i].freq = bswap(&frm0[partialloc + 1]);   /* freq */
+          buf[i].amp = bswap(&frm_0[partialloc]);        /* calc amplitude */
+          buf[i].freq = bswap(&frm_0[partialloc + 1]);   /* freq */
         }
         else {
-          buf[i].amp = frm0[partialloc];                /* calc amplitude */
-          buf[i].freq = frm0[partialloc + 1];           /* freq */
+          buf[i].amp = frm_0[partialloc];                /* calc amplitude */
+          buf[i].freq = frm_0[partialloc + 1];           /* freq */
         }
         partialloc += p->partialinc;
       }
@@ -670,20 +671,20 @@ static void FetchADDPartials(ATSADD *p, ATS_DATA_LOC *buf, MYFLT position)
     }
 
     frac = position - frame;
-    frm1 = frm0 + p->frmInc;
+    frm_1 = frm_0 + p->frmInc;
 
     for (i = 0; i < npartials; i++) {
       if (p->swapped == 1) {
-        temp0amp = bswap(&frm0[partialloc]);
-        temp1amp = bswap(&frm1[partialloc]);
-        temp0freq = bswap(&frm0[partialloc + 1]);
-        temp1freq = bswap(&frm1[partialloc + 1]);
+        temp0amp = bswap(&frm_0[partialloc]);
+        temp1amp = bswap(&frm_1[partialloc]);
+        temp0freq = bswap(&frm_0[partialloc + 1]);
+        temp1freq = bswap(&frm_1[partialloc + 1]);
       }
       else {
-        temp0amp = frm0[partialloc];
-        temp1amp = frm1[partialloc];
-        temp0freq = frm0[partialloc + 1];
-        temp1freq = frm1[partialloc + 1];
+        temp0amp = frm_0[partialloc];
+        temp1amp = frm_1[partialloc];
+        temp0freq = frm_0[partialloc + 1];
+        temp1freq = frm_1[partialloc + 1];
       }
       buf[i].amp = temp0amp + frac * (temp1amp - temp0amp); /* calc amplitude */
       buf[i].freq = temp0freq + frac * (temp1freq - temp0freq); /* calc freq */
@@ -748,6 +749,7 @@ static MYFLT randiats(CSOUND *csound, RANDIATS *radat)
 
 /* ------------------------------------------------------------------ */
 
+#if 0
 static MYFLT randifats(CSOUND *csound, RANDIATS *radat, MYFLT freq)
 {
     MYFLT   output;
@@ -765,13 +767,14 @@ static MYFLT randifats(CSOUND *csound, RANDIATS *radat, MYFLT freq)
 
     return (FL(1.0) - ((MYFLT) output * (FL(2.0) / (MYFLT) 0x7FFFFFFF)));
 }
+#endif
 
 static void FetchADDNZbands(int ptls, int firstband, double *datastart,
                             int frmInc, int maxFr, int swapped,
                             double *buf, MYFLT position)
 {
     double  frac;               /* the distance in time we are between frames */
-    double  *frm0, *frm1;
+    double  *frm_0, *frm_1;
     double  frm0val, frm1val;
     int     frame;
     int     i;                  /* for the for loop */
@@ -781,29 +784,29 @@ static void FetchADDNZbands(int ptls, int firstband, double *datastart,
     printf("FetchADDNZbands: position %f\n", (double)position);
 #endif
     frame = (int) position;
-    frm0 = datastart + frame * frmInc;
+    frm_0 = datastart + frame * frmInc;
   
     /* if we are using the data from the last frame */
     /* we should not try to interpolate */
     if (frame == maxFr) {
       for (i = 0; i < ptls; i++) {
-        buf[i] = (swapped == 1 ? bswap(&frm0[firstband + i])
-                                    : frm0[firstband + i]); /* output value */
+        buf[i] = (swapped == 1 ? bswap(&frm_0[firstband + i])
+                                    : frm_0[firstband + i]); /* output value */
       }
       return;
     }
 
-    frm1 = frm0 + frmInc;
+    frm_1 = frm_0 + frmInc;
     frac = (double) (position - frame);
     
     for (i = 0; i < ptls; i++) {
       if (swapped == 1) {
-        frm0val = bswap(&(frm0[firstband + i]));
-        frm1val = bswap(&(frm1[firstband + i]));
+        frm0val = bswap(&(frm_0[firstband + i]));
+        frm1val = bswap(&(frm_1[firstband + i]));
       }
       else {
-        frm0val = frm0[firstband + i];
-        frm1val = frm1[firstband + i];
+        frm0val = frm_0[firstband + i];
+        frm1val = frm_1[firstband + i];
       }
    
       buf[i] = frm0val + frac * (frm1val - frm0val);  /* calc energy */
@@ -1298,12 +1301,10 @@ static int atssinnoi(CSOUND *csound, ATSSINNOI *p)
     double  inc;
     int     i;
     double  phase;
-    double  *nzbuf;
     double  amp;
     double  nzamp;              /* noize amp */
     double  sinewave;
     MYFLT   freq;
-    MYFLT   nzfreq;
     ATS_DATA_LOC *oscbuf;
     //csound->Message(csound , "start \n");
 
@@ -1337,13 +1338,12 @@ static int atssinnoi(CSOUND *csound, ATSSINNOI *p)
    
     /* set local pointer to output and initialise output to zero */
     ar = p->aoutput;
-    	
+
     memset(ar, 0, csound->ksmps*sizeof(MYFLT));
 /*     for (i = 0; i < csound->ksmps; i++) */
 /*       *ar++ = FL(0.0); */
 
     oscbuf = p->oscbuf;
-    nzbuf = p->nzbuf;
   
     /* do synthesis */
     if (p->firstband != -1) {
@@ -1356,7 +1356,6 @@ static int atssinnoi(CSOUND *csound, ATSSINNOI *p)
         inc = TWOPI * freq * csound->onedsr;
         nzamp =
             sqrt(*(p->nzbuf + i) / (p->atshead->winsz * ATSA_NOISE_VARIANCE));
-        nzfreq = (freq < 500.0 ? 50.0 : freq * 0.05);
         for (n=0; n<nsmps;n++) {
           /* calc sine wave */
           sinewave = cos(phase);
@@ -1365,13 +1364,14 @@ static int atssinnoi(CSOUND *csound, ATSSINNOI *p)
           /* calc noise */
           if (i < 25) {
           noise = nzamp * COS(p->noiphase[i])
-	    * randiats(csound, &(p->randinoise[i]));
-           p->noiphase[i] += p->phaseinc[i];
-	  } else noise = FL(0.0);
+            * randiats(csound, &(p->randinoise[i]));
+          p->noiphase[i] += p->phaseinc[i];
+          }
+          else noise = FL(0.0);
           /* calc output */
           ar[n] += csound->e0dbfs *
             (MYFLT)(amp * sinewave * *p->ksinamp + noise **p->knzamp);
-	  
+          
         }
         p->oscphase[i] = phase;
       }
@@ -1402,7 +1402,7 @@ static int atssinnoi(CSOUND *csound, ATSSINNOI *p)
 static void fetchSINNOIpartials(ATSSINNOI *p, MYFLT position)
 {
     double  frac;               /* the distance in time we are between frames */
-    double  *frm0, *frm1;
+    double  *frm_0, *frm_1;
     double  frm0amp, frm0freq, frm1amp, frm1freq;
     double  nz0, nz1;
     ATS_DATA_LOC *oscbuf;
@@ -1412,7 +1412,7 @@ static void fetchSINNOIpartials(ATSSINNOI *p, MYFLT position)
     int     npartials = p->npartials;
 
     frame = (int) position;
-    frm0 = p->datastart + frame * p->frmInc;
+    frm_0 = p->datastart + frame * p->frmInc;
 
     oscbuf = p->oscbuf;
     nzbuf = p->nzbuf;
@@ -1424,16 +1424,16 @@ static void fetchSINNOIpartials(ATSSINNOI *p, MYFLT position)
         if (p->swapped == 1) {
           for (i = (int) *p->iptloffset; i < (int) *p->iptls;
                i += (int) *p->iptlincr) {
-            oscbuf->amp = bswap(frm0 + 1 + i * (int) p->partialinc);  /* amp */
-            oscbuf->freq = bswap(frm0 + 2 + i * (int) p->partialinc); /* freq */
+            oscbuf->amp = bswap(frm_0 + 1 + i * (int) p->partialinc);  /* amp */
+            oscbuf->freq = bswap(frm_0 + 2 + i * (int) p->partialinc); /* freq */
             oscbuf++;
           }
         }
         else {
           for (i = (int) *p->iptloffset; i < (int) *p->iptls;
                i += (int) *p->iptlincr) {
-            oscbuf->amp = *(frm0 + 1 + i * (int) p->partialinc);    /* amp */
-            oscbuf->freq = *(frm0 + 2 + i * (int) p->partialinc);   /* freq */
+            oscbuf->amp = *(frm_0 + 1 + i * (int) p->partialinc);    /* amp */
+            oscbuf->freq = *(frm_0 + 2 + i * (int) p->partialinc);   /* freq */
             oscbuf++;
           }
         }
@@ -1442,8 +1442,8 @@ static void fetchSINNOIpartials(ATSSINNOI *p, MYFLT position)
         if (p->swapped == 1) {
           for (i = (int) *p->iptloffset; i < (int) *p->iptls;
                i += (int) *p->iptlincr) {
-            oscbuf->amp = bswap(frm0 + 1 + i * (int) p->partialinc);  /* amp */
-            oscbuf->freq = bswap(frm0 + 2 + i * (int) p->partialinc); /* freq */
+            oscbuf->amp = bswap(frm_0 + 1 + i * (int) p->partialinc);  /* amp */
+            oscbuf->freq = bswap(frm_0 + 2 + i * (int) p->partialinc); /* freq */
             *nzbuf = bswap(p->nzdata + frame * npartials + i);
             nzbuf++;
             oscbuf++;
@@ -1452,8 +1452,8 @@ static void fetchSINNOIpartials(ATSSINNOI *p, MYFLT position)
         else {
           for (i = (int) *p->iptloffset; i < (int) *p->iptls;
                i += (int) *p->iptlincr) {
-            oscbuf->amp = *(frm0 + 1 + i * (int) p->partialinc);    /* amp */
-            oscbuf->freq = *(frm0 + 2 + i * (int) p->partialinc);   /* freq */
+            oscbuf->amp = *(frm_0 + 1 + i * (int) p->partialinc);    /* amp */
+            oscbuf->freq = *(frm_0 + 2 + i * (int) p->partialinc);   /* freq */
             *nzbuf = *(p->nzdata + frame * npartials + i);
             nzbuf++;
             oscbuf++;
@@ -1463,17 +1463,17 @@ static void fetchSINNOIpartials(ATSSINNOI *p, MYFLT position)
 
       return;
     }
-    frm1 = frm0 + p->frmInc;
+    frm_1 = frm_0 + p->frmInc;
     frac = (double) (position - frame);
 
     if (p->firstband == -1) {   /* there is no noise data */
       if (p->swapped == 1) {
         for (i = (int) *p->iptloffset; i < (int) *p->iptls;
              i += (int) *p->iptlincr) {
-          frm0amp = bswap(frm0 + 1 + i * (int) p->partialinc);
-          frm1amp = bswap(frm1 + 1 + i * (int) p->partialinc);
-          frm0freq = bswap(frm0 + 2 + i * (int) p->partialinc);
-          frm1freq = bswap(frm1 + 2 + i * (int) p->partialinc);
+          frm0amp = bswap(frm_0 + 1 + i * (int) p->partialinc);
+          frm1amp = bswap(frm_1 + 1 + i * (int) p->partialinc);
+          frm0freq = bswap(frm_0 + 2 + i * (int) p->partialinc);
+          frm1freq = bswap(frm_1 + 2 + i * (int) p->partialinc);
           oscbuf->amp = frm0amp + frac * (frm1amp - frm0amp);       /* amp */
           oscbuf->freq = frm0freq + frac * (frm1freq - frm0freq);   /* freq */
           oscbuf++;
@@ -1482,10 +1482,10 @@ static void fetchSINNOIpartials(ATSSINNOI *p, MYFLT position)
       else {
         for (i = (int) *p->iptloffset; i < (int) *p->iptls;
              i += (int) *p->iptlincr) {
-          frm0amp = *(frm0 + 1 + i * (int) p->partialinc);
-          frm1amp = *(frm1 + 1 + i * (int) p->partialinc);
-          frm0freq = *(frm0 + 2 + i * (int) p->partialinc);
-          frm1freq = *(frm1 + 2 + i * (int) p->partialinc);
+          frm0amp = *(frm_0 + 1 + i * (int) p->partialinc);
+          frm1amp = *(frm_1 + 1 + i * (int) p->partialinc);
+          frm0freq = *(frm_0 + 2 + i * (int) p->partialinc);
+          frm1freq = *(frm_1 + 2 + i * (int) p->partialinc);
           oscbuf->amp = frm0amp + frac * (frm1amp - frm0amp);       /* amp */
           oscbuf->freq = frm0freq + frac * (frm1freq - frm0freq);   /* freq */
           oscbuf++;
@@ -1496,10 +1496,10 @@ static void fetchSINNOIpartials(ATSSINNOI *p, MYFLT position)
       if (p->swapped == 1) {
         for (i = (int) *p->iptloffset; i < (int) *p->iptls;
              i += (int) *p->iptlincr) {
-          frm0amp = bswap(frm0 + 1 + i * (int) p->partialinc);
-          frm1amp = bswap(frm1 + 1 + i * (int) p->partialinc);
-          frm0freq = bswap(frm0 + 2 + i * (int) p->partialinc);
-          frm1freq = bswap(frm1 + 2 + i * (int) p->partialinc);
+          frm0amp = bswap(frm_0 + 1 + i * (int) p->partialinc);
+          frm1amp = bswap(frm_1 + 1 + i * (int) p->partialinc);
+          frm0freq = bswap(frm_0 + 2 + i * (int) p->partialinc);
+          frm1freq = bswap(frm_1 + 2 + i * (int) p->partialinc);
           nz0 = bswap(p->nzdata + frame * npartials + i);
           nz1 = bswap(p->nzdata + (frame + 1) * npartials + i);
           oscbuf->amp = frm0amp + frac * (frm1amp - frm0amp);       /* amp */
@@ -1513,10 +1513,10 @@ static void fetchSINNOIpartials(ATSSINNOI *p, MYFLT position)
       else {
         for (i = (int) *p->iptloffset; i < (int) *p->iptls;
              i += (int) *p->iptlincr) {
-          frm0amp = *(frm0 + 1 + i * (int) p->partialinc);
-          frm1amp = *(frm1 + 1 + i * (int) p->partialinc);
-          frm0freq = *(frm0 + 2 + i * (int) p->partialinc);
-          frm1freq = *(frm1 + 2 + i * (int) p->partialinc);
+          frm0amp = *(frm_0 + 1 + i * (int) p->partialinc);
+          frm1amp = *(frm_1 + 1 + i * (int) p->partialinc);
+          frm0freq = *(frm_0 + 2 + i * (int) p->partialinc);
+          frm1freq = *(frm_1 + 2 + i * (int) p->partialinc);
           nz0 = *(p->nzdata + frame * npartials + i);
           nz1 = *(p->nzdata + (frame + 1) * npartials + i);
           oscbuf->amp = frm0amp + frac * (frm1amp - frm0amp);       /* amp */
@@ -1646,7 +1646,7 @@ static void FetchBUFPartials(ATSBUFREAD *p,
                              MYFLT position)
 {
     MYFLT   frac;               /* the distance in time we are between frames */
-    double  *frm0, *frm1;
+    double  *frm_0, *frm_1;
     double  frm0amp, frm0freq, frm1amp, frm1freq;
     int     frame;
     int     i;                  /* for the for loop */
@@ -1654,22 +1654,22 @@ static void FetchBUFPartials(ATSBUFREAD *p,
     int     npartials = (int) *p->iptls;
 
     frame = (int) position;
-    frm0 = p->datastart + frame * p->frmInc;
+    frm_0 = p->datastart + frame * p->frmInc;
 
     /* if we are using the data from the last frame */
     /* we should not try to interpolate */
     if (frame == p->maxFr) {
       if (p->swapped == 1) {
         for (i = 0; i < npartials; i++) {                   /* calc amplitude */
-          buf[i].amp = buf2[i].amp = bswap(&frm0[partialloc]);
-          buf[i].freq = buf2[i].freq = bswap(&frm0[partialloc + 1]);
+          buf[i].amp = buf2[i].amp = bswap(&frm_0[partialloc]);
+          buf[i].freq = buf2[i].freq = bswap(&frm_0[partialloc + 1]);
           partialloc += p->partialinc;
         }
       }
       else {
         for (i = 0; i < npartials; i++) {
-          buf[i].amp = buf2[i].amp = frm0[partialloc];      /* calc amplitude */
-          buf[i].freq = buf2[i].freq = frm0[partialloc + 1];
+          buf[i].amp = buf2[i].amp = frm_0[partialloc];      /* calc amplitude */
+          buf[i].freq = buf2[i].freq = frm_0[partialloc + 1];
           partialloc += p->partialinc;
         }
       }
@@ -1677,13 +1677,13 @@ static void FetchBUFPartials(ATSBUFREAD *p,
     }
 
     frac = position - frame;
-    frm1 = frm0 + p->frmInc;
+    frm_1 = frm_0 + p->frmInc;
     if (p->swapped == 1) {
       for (i = 0; i < npartials; i++) {
-        frm0amp = bswap(&frm0[partialloc]);
-        frm0freq = bswap(&frm0[partialloc + 1]);
-        frm1amp = bswap(&frm1[partialloc]);
-        frm1freq = bswap(&frm1[partialloc + 1]);
+        frm0amp = bswap(&frm_0[partialloc]);
+        frm0freq = bswap(&frm_0[partialloc + 1]);
+        frm1amp = bswap(&frm_1[partialloc]);
+        frm1freq = bswap(&frm_1[partialloc + 1]);
         /* calc amplitude */
         buf[i].amp = buf2[i].amp = frm0amp + frac * (frm1amp - frm0amp);
         /* calc freq */
@@ -1696,12 +1696,12 @@ static void FetchBUFPartials(ATSBUFREAD *p,
       for (i = 0; i < npartials; i++) {
         /* calc amplitude */
         buf[i].amp = buf2[i].amp =
-            frm0[partialloc] + frac * (frm1[partialloc] - frm0[partialloc]);
+            frm_0[partialloc] + frac * (frm_1[partialloc] - frm_0[partialloc]);
         /* calc freq */
         buf[i].freq = buf2[i].freq =
-            *p->kfmod * (frm0[partialloc + 1]
-                         + frac * (frm1[partialloc + 1]
-                                   - frm0[partialloc + 1]));
+            *p->kfmod * (frm_0[partialloc + 1]
+                         + frac * (frm_1[partialloc + 1]
+                                   - frm_0[partialloc + 1]));
         partialloc += p->partialinc;  /* get to the next partial */
       }
     }
@@ -1947,7 +1947,7 @@ static int atscrossset(CSOUND *csound, ATSCROSS *p)
 static void FetchCROSSPartials(ATSCROSS *p, ATS_DATA_LOC *buf, MYFLT position)
 {
     MYFLT   frac;               /* the distance in time we are between frames */
-    double  *frm0, *frm1;
+    double  *frm_0, *frm_1;
     double  frm0amp, frm0freq, frm1amp, frm1freq;
     int     frame;
     int     i;                  /* for the for loop */
@@ -1955,22 +1955,22 @@ static void FetchCROSSPartials(ATSCROSS *p, ATS_DATA_LOC *buf, MYFLT position)
     int     npartials = (int) *p->iptls;
 
     frame = (int) position;
-    frm0 = p->datastart + frame * p->frmInc;
+    frm_0 = p->datastart + frame * p->frmInc;
 
     /* if we are using the data from the last frame */
     /* we should not try to interpolate */
     if (frame == p->maxFr) {
       if (p->swapped == 1) {
         for (i = 0; i < npartials; i++) {
-          buf[i].amp = bswap(&frm0[partialloc]);  /* calc amplitude */
-          buf[i].freq = bswap(&frm0[partialloc + 1]);
+          buf[i].amp = bswap(&frm_0[partialloc]);  /* calc amplitude */
+          buf[i].freq = bswap(&frm_0[partialloc + 1]);
           partialloc += p->partialinc;
         }
       }
       else {
         for (i = 0; i < npartials; i++) {
-          buf[i].amp = frm0[partialloc];          /* calc amplitude */
-          buf[i].freq = frm0[partialloc + 1];
+          buf[i].amp = frm_0[partialloc];          /* calc amplitude */
+          buf[i].freq = frm_0[partialloc + 1];
           partialloc += p->partialinc;
         }
       }
@@ -1978,13 +1978,13 @@ static void FetchCROSSPartials(ATSCROSS *p, ATS_DATA_LOC *buf, MYFLT position)
     }
 
     frac = position - frame;
-    frm1 = frm0 + p->frmInc;
+    frm_1 = frm_0 + p->frmInc;
     if (p->swapped == 1) {
       for (i = 0; i < npartials; i++) {
-        frm0amp = frm0[partialloc];
-        frm0freq = frm0[partialloc + 1];
-        frm1amp = frm1[partialloc];
-        frm1freq = frm1[partialloc + 1];
+        frm0amp = frm_0[partialloc];
+        frm0freq = frm_0[partialloc + 1];
+        frm1amp = frm_1[partialloc];
+        frm1freq = frm_1[partialloc + 1];
 
         buf[i].amp = frm0amp + frac * (frm1amp - frm0amp);  /* calc amplitude */
         buf[i].freq = frm0freq + frac * (frm1freq - frm0freq);  /* calc freq */
@@ -1994,11 +1994,11 @@ static void FetchCROSSPartials(ATSCROSS *p, ATS_DATA_LOC *buf, MYFLT position)
     else {
       for (i = 0; i < npartials; i++) {
         /* calc amplitude */
-        buf[i].amp = frm0[partialloc]
-                     + frac * (frm1[partialloc] - frm0[partialloc]);
+        buf[i].amp = frm_0[partialloc]
+                     + frac * (frm_1[partialloc] - frm_0[partialloc]);
         /* calc freq */
-        buf[i].freq = frm0[partialloc + 1]
-                      + frac * (frm1[partialloc + 1] - frm0[partialloc + 1]);
+        buf[i].freq = frm_0[partialloc + 1]
+                      + frac * (frm_1[partialloc + 1] - frm_0[partialloc + 1]);
         partialloc += p->partialinc;  /* get to the next partial */
       }
     }
@@ -2144,7 +2144,7 @@ static OENTRY localops[] = {
         (SUBR) atsreadset,          (SUBR) atsread,         (SUBR) NULL      },
     { "ATSreadnz",      S(ATSREADNZ),       3,  "k",    "kTi",
         (SUBR) atsreadnzset,        (SUBR) atsreadnz,       (SUBR) NULL      },
-    { "ATSadd",         S(ATSADD),          5,  "a",    "kkTiiopo",
+    { "ATSadd",         S(ATSADD),          TR|5,  "a",    "kkTiiopo",
         (SUBR) atsaddset,           (SUBR) NULL,            (SUBR) atsadd    },
     { "ATSaddnz",       S(ATSADDNZ),        5,  "a",    "kTiop",
         (SUBR) atsaddnzset,         (SUBR) NULL,            (SUBR) atsaddnz  },
@@ -2156,7 +2156,7 @@ static OENTRY localops[] = {
         (SUBR) atspartialtapset,    (SUBR) atspartialtap,   (SUBR) NULL      },
     { "ATSinterpread",  S(ATSINTERPREAD),   3,  "k",    "k",
         (SUBR) atsinterpreadset,    (SUBR) atsinterpread,   (SUBR) NULL      },
-    { "ATScross",       S(ATSCROSS),        5,  "a",    "kkTikkiopoo",
+    { "ATScross",       S(ATSCROSS),        TR|5,  "a",    "kkTikkiopoo",
         (SUBR) atscrossset,         (SUBR) NULL,            (SUBR) atscross  },
     { "ATSinfo",        S(ATSINFO),         1,  "i",    "Ti",
         (SUBR) atsinfo,             (SUBR) NULL,            (SUBR) NULL      }
diff --git a/Opcodes/ugsc.c b/Opcodes/ugsc.c
index 52c11b1..e3b07ea 100644
--- a/Opcodes/ugsc.c
+++ b/Opcodes/ugsc.c
@@ -127,12 +127,10 @@ static int hilbert(CSOUND *csound, HILBERT *p)
 {
     MYFLT xn1 = FL(0.0), yn1 = FL(0.0), xn2 = FL(0.0), yn2 = FL(0.0);
     MYFLT *out1, *out2, *in;
-    MYFLT *xnm1, *ynm1, *coef;
+    MYFLT *coef;
     int n, nsmps = csound->ksmps;
     int j;
 
-    xnm1 = p->xnm1;
-    ynm1 = p->ynm1;
     coef = p->coef;
     out1 = p->out1;
     out2 = p->out2;
@@ -344,14 +342,12 @@ static int phaser1(CSOUND *csound, PHASER1 *p)
 {
     MYFLT xn = FL(0.0), yn = FL(0.0);
     MYFLT *out, *in;
-    MYFLT *xnm1, *ynm1, feedback;
+    MYFLT feedback;
     MYFLT coef = *p->kcoef, fbgain = *p->fbgain;
     MYFLT beta, wp;
     int nsmps = csound->ksmps;
     int i, j;
 
-    xnm1 = p->xnm1;
-    ynm1 = p->ynm1;
     feedback = p->feedback;
     out = p->out;
     in = p->in;
@@ -460,10 +456,10 @@ static int phaser2(CSOUND *csound, PHASER2 *p)
         /* Difference equations for implementing canonical
          * 2nd order section. (Direct Form II)
          */
-        temp = xn - b * p->nm1[j] - a * p->nm2[j];
-        yn = a * temp + b * p->nm1[j] + nm2[j];
-        p->nm2[j] = p->nm1[j];
-        p->nm1[j] = temp;
+        temp = xn - b * nm1[j] - a * nm2[j];
+        yn = a * temp + b * nm1[j] + nm2[j];
+        nm2[j] = nm1[j];
+        nm1[j] = temp;
         xn = yn;
       }
       out[n] = yn;
diff --git a/Opcodes/urandom.c b/Opcodes/urandom.c
index 5cafb4e..f60c292 100644
--- a/Opcodes/urandom.c
+++ b/Opcodes/urandom.c
@@ -57,7 +57,7 @@ static int urand_run(CSOUND *csound, URANDOM *p)
     int ur = p->ur;
     /* union ieee754_double x; */
     int64_t x;
-    read(p->ur, &x, sizeof(int64_t));
+    read(ur, &x, sizeof(int64_t));
 
     /* x.ieee.exponent = x.ieee.exponent& 0x377; */
     /* printf("Debug: %s(%d): %g %d %03x %05x %08x\n", __FILE__, __LINE__, x.d, */
@@ -80,7 +80,7 @@ static int urand_arun(CSOUND *csound, URANDOM *p)
     MYFLT *ar = p->ar;
     int n, nsmps = csound->ksmps;
     for (n=0; n<nsmps; n++) {
-      read(p->ur, &x, sizeof(int64_t));
+      read(ur, &x, sizeof(int64_t));
       ar[n] = p->mul *((MYFLT)x/(MYFLT)0x7fffffffffffffff) + p->add;
     }
     return OK;
@@ -89,12 +89,13 @@ static int urand_arun(CSOUND *csound, URANDOM *p)
 
 #define S(x)    sizeof(x)
 
-static OENTRY localops[] = {
+static OENTRY urandom_localops[] = {
   { "urandom",      0xFFFF,             0,      NULL,   NULL, NULL},
   { "urandom.i", S(URANDOM), 1, "k", "jp", (SUBR) urand_irate },
   { "urandom.k", S(URANDOM), 3, "k", "jp", (SUBR) urand_init, (SUBR) urand_run},
-  { "urandom.a", S(URANDOM), 5, "a", "jp", (SUBR) urand_init, NULL, (SUBR) urand_arun}
+  { "urandom.a", S(URANDOM), 5, "a", "jp",
+                                    (SUBR) urand_init, NULL, (SUBR) urand_arun}
 };
 
-LINKAGE
+LINKAGE1(urandom_localops)
 
diff --git a/Opcodes/vaops.c b/Opcodes/vaops.c
index d5849ab..6135bb2 100644
--- a/Opcodes/vaops.c
+++ b/Opcodes/vaops.c
@@ -21,7 +21,8 @@
     02111-1307 USA
 */
 
-#include "csdl.h"
+#include "csoundCore.h"
+#include "interlocks.h"
 
 #define MYFLOOR(x) (x >= FL(0.0) ? (int32)x : (int32)((double)x - 0.99999999))
 
@@ -51,12 +52,11 @@ static int vaset(CSOUND *csound, VA_SET *p)
 
 #define S(x)    sizeof(x)
 
-static OENTRY localops[] = {
-  { "vaget",  S(VA_GET),   2,      "k", "ka",    NULL, (SUBR)vaget   },
-  { "vaset", S(VA_SET), 2, "",  "kka", NULL, (SUBR)vaset }
-
+static OENTRY vaops_localops[] = {
+  { "vaget",  S(VA_GET),   2,      "k", "ka",  NULL, (SUBR)vaget },
+  { "vaset", S(VA_SET),    2,      "",  "kka", NULL, (SUBR)vaset }
 };
 
 
-LINKAGE
+LINKAGE1(vaops_localops)
 
diff --git a/Opcodes/vbap.c b/Opcodes/vbap.c
index a97aa75..1f3d181 100644
--- a/Opcodes/vbap.c
+++ b/Opcodes/vbap.c
@@ -27,11 +27,13 @@ assisting functions for VBAP
 functions for loudspeaker table initialization */
 
 
-#include "csdl.h"
+#include "csoundCore.h"
+#include "interlocks.h"
 #include "vbap.h"
 #include <math.h>
 #include <stdio.h>
 #include <stdlib.h>
+#include "interlocks.h"
 
 static void choose_ls_triplets(CSOUND *csound, ls lss[CHANNELS],
                                ls_triplet_chain **ls_triplets,
@@ -694,7 +696,7 @@ static void choose_ls_tuplets(CSOUND *csound,
     int exist[CHANNELS];
     int amount = 0;
     MYFLT inv_mat[CHANNELS][4], *ls_table, *ptr;
-    int ftable_size;
+    //int ftable_size;
 
     for (i=0;i<CHANNELS;i++) {
       exist[i]=0;
@@ -729,13 +731,13 @@ static void choose_ls_tuplets(CSOUND *csound,
       }
     }
 
+#if 0
     if ( amount*6 + 6 <= 16) ftable_size = 16;
     else if ( amount*6 + 6 <= 32) ftable_size = 32;
     else if ( amount*6 + 6 <= 64) ftable_size = 64;
     else if ( amount*6 + 6 <= 128) ftable_size = 128;
     else if ( amount*6 + 6 <= 256) ftable_size = 256;
     else if ( amount*6 + 6 <= 1024) ftable_size = 1024;
-#if 0
     csound->Message(csound,
                     "Loudspeaker matrices calculated with configuration : ");
     for (i=0; i< ls_amount; i++)
@@ -897,28 +899,31 @@ void new_spread_base(CART_VEC spreaddir, CART_VEC vscartdir,
 
 #define S(x)    sizeof(x)
 
-static OENTRY localops[] = {
-  { "vbap4",      S(VBAP_FOUR),             5,  "aaaa",             "akOO",
+/* static */ 
+static OENTRY vbap_localops[] = {
+  { "vbap4",      S(VBAP_FOUR),             TR|5,  "aaaa",             "akOO",
     (SUBR) vbap_FOUR_init,          (SUBR) NULL,    (SUBR) vbap_FOUR        },
-  { "vbap8",      S(VBAP_EIGHT),            5,  "aaaaaaaa",         "akOO",
+  { "vbap8",      S(VBAP_EIGHT),            TR|5,  "aaaaaaaa",         "akOO",
     (SUBR) vbap_EIGHT_init,         (SUBR) NULL,    (SUBR) vbap_EIGHT       },
-  { "vbap16",     S(VBAP_SIXTEEN),          5,  "aaaaaaaaaaaaaaaa", "akOO",
+  { "vbap16",     S(VBAP_SIXTEEN),          TR|5,  "aaaaaaaaaaaaaaaa", "akOO",
     (SUBR) vbap_SIXTEEN_init,       (SUBR) NULL,    (SUBR) vbap_SIXTEEN     },
-  { "vbapz",      S(VBAP_ZAK),              5,  "",                 "iiakOO",
+  { "vbapz",      S(VBAP_ZAK),           ZW|TR|5,  "",                 "iiakOO",
     (SUBR) vbap_zak_init,           (SUBR) NULL,    (SUBR) vbap_zak         },
-  { "vbaplsinit", S(VBAP_LS_INIT), 1, "", "iioooooooooooooooooooooooooooooooo",
+  { "vbaplsinit", S(VBAP_LS_INIT), TR|1, "", "iioooooooooooooooooooooooooooooooo",
     (SUBR) vbap_ls_init,            (SUBR) NULL,    (SUBR) NULL             },
-  { "vbap4move",  S(VBAP_FOUR_MOVING),      5,  "aaaa",             "aiiim",
+  { "vbap4move",  S(VBAP_FOUR_MOVING),      TR|5,  "aaaa",             "aiiim",
     (SUBR) vbap_FOUR_moving_init,   (SUBR) NULL,    (SUBR) vbap_FOUR_moving },
-  { "vbap8move",  S(VBAP_EIGHT_MOVING),     5,  "aaaaaaaa",         "aiiim",
+  { "vbap8move",  S(VBAP_EIGHT_MOVING),     TR|5,  "aaaaaaaa",         "aiiim",
     (SUBR) vbap_EIGHT_moving_init,  (SUBR) NULL,    (SUBR) vbap_EIGHT_moving },
-  { "vbap16move", S(VBAP_SIXTEEN_MOVING),   5,  "aaaaaaaaaaaaaaaa", "aiiim",
+  { "vbap16move", S(VBAP_SIXTEEN_MOVING),   TR|5,  "aaaaaaaaaaaaaaaa", "aiiim",
     (SUBR) vbap_SIXTEEN_moving_init, (SUBR) NULL, (SUBR) vbap_SIXTEEN_moving },
-  { "vbapzmove",  S(VBAP_ZAK_MOVING),       5,  "",                 "iiaiiim",
+  { "vbapzmove",  S(VBAP_ZAK_MOVING),    ZW|TR|5,  "",                 "iiaiiim",
     (SUBR) vbap_zak_moving_init,    (SUBR) NULL,    (SUBR) vbap_zak_moving  }
 };
 
-PUBLIC long csound_opcode_init(CSOUND *csound, OENTRY **ep)
+LINKAGE1(vbap_localops)
+
+/* PUBLIC long csound_opcode_init(CSOUND *csound, OENTRY **ep)
 {
     create_ls_table(csound, 3);
     *ep = localops;
@@ -929,4 +934,4 @@ PUBLIC int csoundModuleInfo(void)
 {
     return ((CS_APIVERSION << 16) + (CS_APISUBVER << 8) + (int) sizeof(MYFLT));
 }
-
+*/
diff --git a/Opcodes/vpvoc.c b/Opcodes/vpvoc.c
index 329b577..1526e29 100644
--- a/Opcodes/vpvoc.c
+++ b/Opcodes/vpvoc.c
@@ -158,7 +158,7 @@ int vpvset(CSOUND *csound, VPVOC *p)
     int      i;
     char     pvfilnam[64];
     PVOCEX_MEMFILE  pp;
-    int     frInc, chans, size; /* THESE SHOULD BE SAVED IN PVOC STRUCT */
+    int     frInc, chans; /* THESE SHOULD BE SAVED IN PVOC STRUCT */
 
     p->pp = PVOC_GetGlobals(csound);
     /* If optional table given, fake it up -- JPff  */
@@ -167,7 +167,8 @@ int vpvset(CSOUND *csound, VPVOC *p)
     else {
       csound->AuxAlloc(csound, sizeof(TABLESEG), &p->auxtab);
       p->tableseg = (TABLESEG*) p->auxtab.auxp;
-      if (UNLIKELY((p->tableseg->outfunc = csound->FTFind(csound, p->isegtab)) == NULL)) {
+      if (UNLIKELY((p->tableseg->outfunc =
+                    csound->FTFind(csound, p->isegtab)) == NULL)) {
         return csound->InitError(csound,
                                  Str("vpvoc: Could not find ifnmagctrl table %f"),
                                  *p->isegtab);
@@ -224,7 +225,6 @@ int vpvset(CSOUND *csound, VPVOC *p)
     /* factor by which to mult expand phase diffs (ratio of samp spacings) */
     p->frPrtim = csound->esr / (MYFLT) frInc;
     /* factor by which to mulitply 'real' time index to get frame index */
-    size = pvfrsiz(p);          /* size used in def of OPWLEN ? */
     /* amplitude scale for PVOC */
  /* p->scale = (MYFLT) pp.fftsize * ((MYFLT) pp.fftsize / (MYFLT) pp.winsize);
   */
diff --git a/Opcodes/wave-terrain.c b/Opcodes/wave-terrain.c
index b66faaf..318d11c 100644
--- a/Opcodes/wave-terrain.c
+++ b/Opcodes/wave-terrain.c
@@ -278,9 +278,9 @@ static int scantPerf(CSOUND *csound, SCANTABLE *p)
 #define S(x)    sizeof(x)
 
 static OENTRY localops[] = {
-{ "wterrain", S(WAVETER), 5,  "a", "kkkkkkii",(SUBR)wtinit, NULL, (SUBR)wtPerf },
-{ "scantable", S(SCANTABLE),5,"a", "kkiiiii",(SUBR)scantinit,NULL,(SUBR)scantPerf},
-{ "scanhammer",S(SCANHAMMER),1,"", "iiii", (SUBR)scanhinit, NULL, NULL    }
+{ "wterrain", S(WAVETER), TR|5,  "a", "kkkkkkii",(SUBR)wtinit, NULL, (SUBR)wtPerf },
+{ "scantable", S(SCANTABLE),TR|5,"a", "kkiiiii",(SUBR)scantinit,NULL,(SUBR)scantPerf},
+{ "scanhammer",S(SCANHAMMER),TB|1,"", "iiii", (SUBR)scanhinit, NULL, NULL    }
 };
 
 int wave_terrain_init_(CSOUND *csound)
diff --git a/Opcodes/wiimote.c b/Opcodes/wiimote.c
index d3991cd..2408894 100644
--- a/Opcodes/wiimote.c
+++ b/Opcodes/wiimote.c
@@ -160,7 +160,7 @@ int wiimote_poll(CSOUND *csound, WIIMOTE *p)
         csound->Warning(csound,
                         Str("wiimote %i disconnected\n"), wiimotes[i]->unid);
         *p->res = FL(0.0);
-        return;
+        return OK;
       case WIIUSE_NUNCHUK_INSERTED:
         /*
          *      This is a good place to set any nunchuk specific
@@ -401,11 +401,11 @@ int wiimote_range(CSOUND *csound, WIIRANGE *p)
 
 #define S(x)    sizeof(x)
 
-static OENTRY localops[] = {
+static OENTRY wiimote_localops[] = {
   {"wiiconnect", S(WIIMOTE), 3, "i", "oo", (SUBR)wiimote_find, (SUBR)wiimote_poll },
   {"wiidata", S(WIIMOTE), 3, "k", "ko", (SUBR)wii_data_init, (SUBR)wii_data },
   {"wiisend", S(WIIMOTES), 3, "", "kko", (SUBR)wii_data_inits, (SUBR)wii_send },
   {"wiirange", S(WIIRANGE), 1, "", "iiio", (SUBR)wiimote_range, NULL, NULL }
 };
 
-LINKAGE
+LINKAGE1(wiimote_localops)
diff --git a/SConstruct b/SConstruct
index e30d672..d7f7c07 100644
--- a/SConstruct
+++ b/SConstruct
@@ -72,7 +72,7 @@ print "System platform is '" + getPlatform() + "'."
 
 # Create options that can be set from the command line.
 
-commandOptions = Options()
+commandOptions = Variables() # was Options()
 commandOptions.Add('CC')
 commandOptions.Add('CXX')
 commandOptions.Add('LINK')
@@ -119,9 +119,9 @@ commandOptions.Add('generateTags',
 commandOptions.Add('generatePdf',
     'Set to 1 to generate PDF documentation',
     '0')
-commandOptions.Add('buildLoris',
-    'Set to 1 to build the Loris Python extension and opcodes',
-    '1')
+#commandOptions.Add('buildLoris',
+#    'Set to 1 to build the Loris Python extension and opcodes',
+#    '1')
 commandOptions.Add('useOSC',
     'Set to 1 if you want OSC support',
     '0')
@@ -222,12 +222,12 @@ commandOptions.Add('buildPythonWrapper',
 commandOptions.Add('buildJavaWrapper',
     'Set to 1 to build Java wrapper for the C++ interface library (needs buildInterfaces).',
     '0')
-commandOptions.Add('buildOSXGUI',
-    'On OSX, set to 1 to build the basic GUI frontend',
-    '0')
-commandOptions.Add('buildCSEditor',
-    'Set to 1 to build the Csound syntax highlighting text editor. Requires FLTK headers and libs',
-    '0')
+#commandOptions.Add('buildOSXGUI',
+#    'On OSX, set to 1 to build the basic GUI frontend',
+#    '0')
+#commandOptions.Add('buildCSEditor',
+#    'Set to 1 to build the Csound syntax highlighting text editor. Requires FLTK headers and libs',
+#    '0')
 commandOptions.Add('withICL',
     'On Windows, set to 1 to build with the Intel C++ Compiler (also requires Microsoft Visual C++), or set to 0 to build with MinGW',
     '0')
@@ -266,9 +266,6 @@ commandOptions.Add('useOpenMP',
 commandOptions.Add('tclversion',
     'Set to 8.4 or 8.5',
     '8.5')
-commandOptions.Add('includeMP3',
-     'Set to 1 if using mpadec',
-     '0')
 commandOptions.Add('includeWii',
      'Set to 1 if using libwiimote',
      '0')
@@ -283,7 +280,7 @@ commandOptions.Add('buildcatalog',
      '0')
 commandOptions.Add('includeSerial',
      'Set to 1 if compiling serial code',
-     '0')
+     '1')
 # Define the common part of the build environment.
 # This section also sets up customized options for third-party libraries, which
 # should take priority over default options.
@@ -331,12 +328,21 @@ elif getPlatform() == 'win32':
 	#Tool('mingw')(commonEnvironment)
 	optionsFilename = 'custom-mingw.py'
 
+if(not FindFile(optionsFilename, '.')):
+    print "\n\n*************************************************"  
+    print "%s NOT FOUND, please copy one of the custom-***.py" % optionsFilename
+    print "as %s and modify it to suit your system, if necessary" % optionsFilename
+    print "*************************************************"  
+    Exit(-1)
+
+
 Help(commandOptions.GenerateHelpText(commonEnvironment))
 
 if commonEnvironment['custom']:
     optionsFilename = commonEnvironment['custom']
 
 Requires(optionsFilename, commonEnvironment)
+   
 
 print "Using options from '%s.'" % optionsFilename
 
@@ -429,7 +435,7 @@ elif commonEnvironment['gcc3opt'] != '0' or commonEnvironment['gcc4opt'] != '0':
         commonEnvironment.Prepend(CCFLAGS = Split('-O3 -arch %s' % cpuType))
         commonEnvironment.Prepend(CXXFLAGS = Split('-O3 -arch %s' % cpuType))
     else:
-        commonEnvironment.Prepend(CCFLAGS = Split('-O3 -mtune=%s' % (cpuType)))
+        commonEnvironment.Prepend(CCFLAGS = Split('-Wall -O3 -mtune=%s' % (cpuType)))
 
 
 if commonEnvironment['buildRelease'] != '0':
@@ -477,7 +483,6 @@ if commonEnvironment['Word64'] == '1':
     else:
         commonEnvironment.Append(CCFLAGS = ['-fPIC'])
 
-
 if commonEnvironment['useDouble'] == '0':
     print 'CONFIGURATION DECISION: Using single-precision floating point for audio samples.'
 else:
@@ -695,13 +700,6 @@ if not configure.CheckLibWithHeader("pthread", "pthread.h", language = "C"):
 	Exit(-1)
 
 # Support for GEN49 (load MP3 file)
-if commonEnvironment['includeMP3'] == '1' : ### and configure.CheckHeader("mp3dec.h", language = "C") :
-    mpafound = 1
-    commonEnvironment.Append(CPPFLAGS = ['-DINC_MP3'])
-    print 'CONFIGURATION DECISION: Building with MP3 support'
-else:
-    mpafound = 0
-    print 'CONFIGURATION DECISION: No MP3 support'
 
 if commonEnvironment['includeWii'] == '1' and configure.CheckLibWithHeader('wiiuse', "wiiuse.h", language = "C") :
     wiifound = 1
@@ -728,9 +726,12 @@ else:
 #pthreadSpinlockFound = configure.CheckLibWithHeader('pthread', 'pthread.h', 'C', 'pthread_spin_lock(0);')
 if getPlatform() != 'darwin': # pthreadSpinlockFound:
     commonEnvironment.Append(CPPFLAGS = ['-DHAVE_PTHREAD_SPIN_LOCK'])
-pthreadBarrierFound = configure.CheckLibWithHeader('pthread', 'pthread.h', 'C', 'pthread_barrier_init(0, 0, 0);')
+pthreadBarrierFound = configure.CheckLibWithHeader('pthread', 'pthread.h', 'C', 'pthread_barrier_init(0, NULL, 0);')
 if pthreadBarrierFound:
+    print 'CONFIGURATION DECISION: Using HAVE_PTHREAD_BARRIER_INIT'
     commonEnvironment.Append(CPPFLAGS = ['-DHAVE_PTHREAD_BARRIER_INIT'])
+else:
+    print 'CONFIGURATION DECISION: Not using HAVE_PTHREAD_BARRIER_INIT'
 openMpFound = configure.CheckLibWithHeader('gomp', 'omp.h', 'C++', 'int n = omp_get_num_threads();')
 if openMpFound and pthreadBarrierFound and commonEnvironment['useOpenMP'] == '1':
     print 'CONFIGURATION DECISION: Using OpenMP.'
@@ -759,7 +760,7 @@ else:
 boostFound = configure.CheckHeader("boost/any.hpp", language = "C++")
 gmmFound = configure.CheckHeader("gmm/gmm.h", language = "C++")
 alsaFound = configure.CheckLibWithHeader("asound", "alsa/asoundlib.h", language = "C")
-oscFound = configure.CheckLibWithHeader("lo", "lo/lo.h", language = "C")
+oscFound = configure.CheckHeader("lo/lo.h", language = "C")
 musicXmlFound = configure.CheckLibWithHeader('musicxml2', 'xmlfile.h', 'C++', 'MusicXML2::SXMLFile f = MusicXML2::TXMLFile::create();', autoadd=0)
 if musicXmlFound:
    commonEnvironment.Append(CPPFLAGS = ['-DHAVE_MUSICXML2'])
@@ -884,7 +885,8 @@ if getPlatform() == 'darwin':
 csoundLibraryEnvironment = commonEnvironment.Clone()
 
 if commonEnvironment['buildMultiCore'] != '0':
-    csoundLibraryEnvironment.Append(CPPFLAGS = ['-DPARCS'])
+    if commonEnvironment['buildNewParser'] != '0':
+      csoundLibraryEnvironment.Append(CPPFLAGS = ['-DPARCS'])
 
 if commonEnvironment['buildNewParser'] != '0':
     if commonEnvironment['buildMultiCore'] != '0':
@@ -966,7 +968,6 @@ uuid
 winmm
 winspool
 ws2_32
-wsock32
         ''')
     else:
         csoundWindowsLibraries = Split('''
@@ -984,8 +985,6 @@ wsock32
         csoundDynamicLibraryEnvironment.Append(SHLINKFLAGS = ['-module'])
 elif getPlatform() == 'linux' or getPlatform() == 'sunos' or getPlatform() == 'darwin':
     csoundDynamicLibraryEnvironment.Append(LIBS = ['dl', 'm', 'pthread'])
-    if mpafound :
-        csoundDynamicLibraryEnvironment.Append(LIBS = ['mpadec'])
 csoundInterfacesEnvironment = csoundDynamicLibraryEnvironment.Clone()
 
 if buildOSXFramework:
@@ -1050,6 +1049,7 @@ def makePlugin(env, pluginName, srcs):
 libCsoundSources = Split('''
 Engine/auxfd.c
 Engine/cfgvar.c
+Engine/corfiles.c
 Engine/entry1.c
 Engine/envvar.c
 Engine/express.c
@@ -1069,6 +1069,7 @@ Engine/scxtract.c
 Engine/sort.c
 Engine/sread.c
 Engine/swrite.c
+Engine/swritestr.c
 Engine/twarp.c
 InOut/libsnd.c
 InOut/libsnd_u.c
@@ -1079,6 +1080,13 @@ InOut/winascii.c
 InOut/windin.c
 InOut/window.c
 InOut/winEPS.c
+InOut/libmpadec/layer1.c
+InOut/libmpadec/layer2.c
+InOut/libmpadec/layer3.c
+InOut/libmpadec/synth.c
+InOut/libmpadec/tables.c
+InOut/libmpadec/mpadec.c
+InOut/libmpadec/mp3dec.c
 OOps/aops.c
 OOps/bus.c
 OOps/cmath.c
@@ -1110,6 +1118,12 @@ OOps/ugens6.c
 OOps/ugrw1.c
 OOps/ugrw2.c
 OOps/vdelay.c
+Opcodes/Vosim.c
+Opcodes/babo.c
+Opcodes/bilbar.c
+Opcodes/compress.c
+Opcodes/eqfil.c
+Opcodes/ftest.c
 Top/argdecode.c
 Top/cscore_internal.c
 Top/cscorfns.c
@@ -1141,10 +1155,65 @@ Engine/cs_par_orc_semantic_analysis.c
 Engine/cs_par_dispatch.c
 ''')
 
+stdopcodes = Split('''
+    Opcodes/ambicode.c      Opcodes/bbcut.c         Opcodes/biquad.c
+    Opcodes/butter.c        Opcodes/clfilt.c        Opcodes/cross2.c
+    Opcodes/dam.c           Opcodes/dcblockr.c      Opcodes/filter.c
+    Opcodes/flanger.c       Opcodes/follow.c        Opcodes/fout.c
+    Opcodes/freeverb.c      Opcodes/ftconv.c        Opcodes/ftgen.c
+    Opcodes/gab/gab.c       Opcodes/gab/vectorial.c Opcodes/grain.c
+    Opcodes/locsig.c        Opcodes/lowpassr.c      Opcodes/metro.c
+    Opcodes/midiops2.c      Opcodes/midiops3.c      Opcodes/newfils.c
+    Opcodes/nlfilt.c        Opcodes/oscbnk.c        Opcodes/pluck.c
+    Opcodes/repluck.c       Opcodes/reverbsc.c      Opcodes/seqtime.c
+    Opcodes/sndloop.c       Opcodes/sndwarp.c       Opcodes/space.c
+    Opcodes/spat3d.c        Opcodes/syncgrain.c     Opcodes/ugens7.c
+    Opcodes/ugens9.c        Opcodes/ugensa.c        Opcodes/uggab.c
+    Opcodes/ugmoss.c        Opcodes/ugnorman.c      Opcodes/ugsc.c
+    Opcodes/wave-terrain.c  Opcodes/stdopcod.c
+    ''')
+
+pvs_opcodes = Split('''
+    Opcodes/ifd.c Opcodes/partials.c Opcodes/psynth.c Opcodes/pvsbasic.c
+    Opcodes/pvscent.c Opcodes/pvsdemix.c Opcodes/pvs_ops.c Opcodes/pvsband.c
+    Opcodes/pvsbuffer.c
+''')
+
+folded_ops = Split('''Opcodes/modmatrix.c Opcodes/scoreline.c Opcodes/modal4.c
+Opcodes/physutil.c Opcodes/physmod.c Opcodes/mandolin.c Opcodes/singwave.c
+Opcodes/fm4op.c Opcodes/moog1.c Opcodes/shaker.c Opcodes/bowedbar.c
+Opcodes/pitch.c Opcodes/pitch0.c  Opcodes/spectra.c Opcodes/ambicode1.c
+Opcodes/sfont.c Opcodes/grain4.c Opcodes/hrtferX.c Opcodes/loscilx.c
+Opcodes/minmax.c Opcodes/pan2.c Opcodes/tabvars.c Opcodes/phisem.c
+Opcodes/hrtfopcodes.c Opcodes/stackops.c Opcodes/vbap.c 
+Opcodes/vbap_eight.c Opcodes/vbap_four.c Opcodes/vbap_sixteen.c
+Opcodes/vbap_zak.c Opcodes/vaops.c Opcodes/ugakbari.c Opcodes/harmon.c 
+Opcodes/pitchtrack.c Opcodes/partikkel.c Opcodes/shape.c Opcodes/tabsum.c
+Opcodes/crossfm.c Opcodes/pvlock.c Opcodes/fareyseq.c  Opcodes/hrtfearly.c
+Opcodes/hrtfreverb.c Opcodes/cpumeter.c Opcodes/mp3in.c
+''')
+
+oldpvoc = Split('''
+    Opcodes/dsputil.c Opcodes/pvadd.c Opcodes/pvinterp.c Opcodes/pvocext.c
+    Opcodes/pvread.c Opcodes/ugens8.c Opcodes/vpvoc.c Opcodes/pvoc.c
+''')
+
+gabnewopc =  Split('''
+    Opcodes/gab/tabmorph.c  Opcodes/gab/hvs.c
+    Opcodes/gab/sliderTable.c
+    Opcodes/gab/newgabopc.c''')
+
+libCsoundSources += stdopcodes
+libCsoundSources += pvs_opcodes
+libCsoundSources += folded_ops
+libCsoundSources += oldpvoc
+libCsoundSources += gabnewopc
+ 
 if commonEnvironment['buildMultiCore'] != '0':
-    libCsoundSources += MultiCoreSources
+    if commonEnvironment['buildNewParser'] != '0':
+      libCsoundSources += MultiCoreSources
 
-if commonEnvironment['buildNewParser'] != '0' or commonEnvironment['buildMultiCore'] != '0':
+if commonEnvironment['buildNewParser'] != '0':
     libCsoundSources += newParserSources
 
 csoundLibraryEnvironment.Append(CCFLAGS='-fPIC')
@@ -1215,8 +1284,6 @@ libs.append(csoundLibrary)
 
 pluginEnvironment = commonEnvironment.Clone()
 pluginEnvironment.Append(LIBS = Split('sndfile'))
-if mpafound:
-  pluginEnvironment.Append(LIBS = ['mpadec'])
 
 if getPlatform() == 'darwin':
     pluginEnvironment.Append(LINKFLAGS = Split('''
@@ -1332,6 +1399,7 @@ else:
                 '_csnd', csoundInterfacesSources)
             try: os.symlink('lib_csnd.dylib', 'libcsnd.dylib')
             except: pass
+            csoundInterfacesEnvironment.Command('interfaces install', csnd, "cp lib_csnd.dylib /Library/Frameworks/%s/lib_csnd.dylib" % (OSXFrameworkCurrentVersion))
         else:
             csnd = csoundInterfacesEnvironment.Library('csnd', csoundInterfacesSources)
     elif getPlatform() == 'linux':
@@ -1395,7 +1463,9 @@ else:
     else:
         print 'CONFIGURATION DECISION: Building Java wrapper to Csound C++ interface library.'
         javaWrapperEnvironment = csoundWrapperEnvironment.Clone()
-	javaWrapperEnvironment.Prepend(LIBS = ['csnd'])
+        if  getPlatform() == 'darwin': 
+             javaWrapperEnvironment.Append(LINKFLAGS = ['-L.', '-l_csnd'])
+	else: javaWrapperEnvironment.Prepend(LIBS = ['csnd'])
         if getPlatform() == 'darwin':
             javaWrapperEnvironment.Append(CPPPATH =
                 ['/System/Library/Frameworks/JavaVM.framework/Headers'])
@@ -1416,15 +1486,20 @@ else:
                 'interfaces/java_interface.i',
         SWIGFLAGS = [swigflags, '-java', '-package', 'csnd'])]
         if getPlatform() == 'darwin':
+            if commonEnvironment['dynamicCsoundLibrary'] == '0':
+               if commonEnvironment['useDouble'] == '0': csoundlibLink = '-lcsound'
+               else: csoundlibLink = '-lcsound64'
+            else: csoundliblink = ''
             javaWrapperEnvironment.Prepend(LINKFLAGS = ['-bundle'])
             javaWrapperEnvironment.Append(LINKFLAGS =
-                ['-framework', 'JavaVM', '-Wl'])
+                ['-framework', 'JavaVM', '-Wl', csoundliblink])
             javaWrapper = javaWrapperEnvironment.Program(
                 'lib_jcsound.jnilib', javaWrapperSources)
         else:
             javaWrapper = javaWrapperEnvironment.SharedLibrary(
                 '_jcsound', javaWrapperSources)
-        Depends(javaWrapper, csoundLibrary)
+        #Depends(javaWrapper, csoundLibrary)
+        Depends(javaWrapper, csnd)
         libs.append(javaWrapper)
         jcsnd = javaWrapperEnvironment.Java(
             target = './interfaces', source = './interfaces',
@@ -1444,18 +1519,20 @@ else:
     else:
         print 'CONFIGURATION DECISION: Building Python wrapper to Csound C++ interface library.'
         pythonWrapperEnvironment = csoundWrapperEnvironment.Clone()
-        pythonWrapperEnvironment.Prepend(LIBS = Split('csnd'))
+        if  getPlatform() == 'darwin': 
+             pythonWrapperEnvironment.Append(LINKFLAGS = ['-L.', '-l_csnd'])
+        else: pythonWrapperEnvironment.Prepend(LIBS = Split('csnd'))
 	if getPlatform() == 'linux':
 	    os.spawnvp(os.P_WAIT, 'rm', ['rm', '-f', '_csnd.so'])
 	    # os.symlink('lib_csnd.so', '_csnd.so')
 	    pythonWrapperEnvironment.Append(LINKFLAGS = ['-Wl,-rpath-link,.'])
 	if getPlatform() == 'darwin':
 	    if commonEnvironment['dynamicCsoundLibrary'] == '1':
-		ilibName = "lib_csnd.dylib"
-		ilibVersion = csoundLibraryVersion
-		pythonWrapperEnvironment.Append(SHLINKFLAGS = Split('''-Xlinker -compatibility_version -Xlinker %s''' % ilibVersion))
-		pythonWrapperEnvironment.Append(SHLINKFLAGS = Split('''-Xlinker -current_version -Xlinker %s''' % ilibVersion))
-		pythonWrapperEnvironment.Append(SHLINKFLAGS = Split('''-install_name /Library/Frameworks/%s/%s''' % (OSXFrameworkCurrentVersion, ilibName)))
+		#ilibName = "lib_csnd.dylib"
+		#ilibVersion = csoundLibraryVersion
+		#pythonWrapperEnvironment.Append(SHLINKFLAGS = Split('''-Xlinker -compatibility_version -Xlinker %s''' % ilibVersion))
+		#pythonWrapperEnvironment.Append(SHLINKFLAGS = Split('''-Xlinker -current_version -Xlinker %s''' % ilibVersion))
+		#pythonWrapperEnvironment.Append(SHLINKFLAGS = Split('''-install_name /Library/Frameworks/%s/%s''' % (OSXFrameworkCurrentVersion, ilibName)))
                 pythonWrapperEnvironment.Append(CPPPATH = pythonIncludePath)
                 pythonWrapperEnvironment.Append(LINKFLAGS = ['-framework','python'])
 		#pythonWrapper = pythonWrapperEnvironment.SharedLibrary('_csnd', pythonWrapperSources)
@@ -1464,9 +1541,8 @@ else:
 		'interfaces/python_interface.i',
 		SWIGFLAGS = [swigflags, '-python', '-outdir', '.', pyVersToken])
 	        pythonWrapperEnvironment.Clean('.', 'interfaces/python_interface_wrap.h')
-		pythonWrapperEnvironment.Command('interfaces install', csoundPythonInterface, "cp lib_csnd.dylib /Library/Frameworks/%s/lib_csnd.dylib" % (OSXFrameworkCurrentVersion))
-		try: os.symlink('lib_csnd.dylib', 'libcsnd.dylib')
-		except: print "link exists..."
+		#try: os.symlink('lib_csnd.dylib', 'libcsnd.dylib')
+		#except: print "link exists..."
 	else:
 	    pythonWrapperEnvironment.Append(LINKFLAGS = pythonLinkFlags)
 	    if getPlatform() != 'darwin':
@@ -1499,48 +1575,147 @@ else:
 # Plugin opcodes.
 #############################################################################
 
-makePlugin(pluginEnvironment, 'stdopcod', Split('''
-    Opcodes/ambicode.c      Opcodes/bbcut.c         Opcodes/biquad.c
-    Opcodes/butter.c        Opcodes/clfilt.c        Opcodes/cross2.c
-    Opcodes/dam.c           Opcodes/dcblockr.c      Opcodes/filter.c
-    Opcodes/flanger.c       Opcodes/follow.c        Opcodes/fout.c
-    Opcodes/freeverb.c      Opcodes/ftconv.c        Opcodes/ftgen.c
-    Opcodes/gab/gab.c       Opcodes/gab/vectorial.c Opcodes/grain.c
-    Opcodes/locsig.c        Opcodes/lowpassr.c      Opcodes/metro.c
-    Opcodes/midiops2.c      Opcodes/midiops3.c      Opcodes/newfils.c
-    Opcodes/nlfilt.c        Opcodes/oscbnk.c        Opcodes/pluck.c
-    Opcodes/repluck.c       Opcodes/reverbsc.c      Opcodes/seqtime.c
-    Opcodes/sndloop.c       Opcodes/sndwarp.c       Opcodes/space.c
-    Opcodes/spat3d.c        Opcodes/syncgrain.c     Opcodes/ugens7.c
-    Opcodes/ugens9.c        Opcodes/ugensa.c        Opcodes/uggab.c
-    Opcodes/ugmoss.c        Opcodes/ugnorman.c      Opcodes/ugsc.c
-    Opcodes/wave-terrain.c  Opcodes/stdopcod.c
-    '''))
 
+# these opcodes have been folded back into csoundLib
+# makePlugin(pluginEnvironment, 'stdopcd', Split('''
+#    Opcodes/ambicode.c      Opcodes/bbcut.c         Opcodes/biquad.c
+#    Opcodes/butter.c        Opcodes/clfilt.c        Opcodes/cross2.c
+#    Opcodes/dam.c           Opcodes/dcblockr.c      Opcodes/filter.c
+#    Opcodes/flanger.c       Opcodes/follow.c        Opcodes/fout.c
+#    Opcodes/freeverb.c      Opcodes/ftconv.c        Opcodes/ftgen.c
+#    Opcodes/gab/gab.c       Opcodes/gab/vectorial.c Opcodes/grain.c
+#    Opcodes/locsig.c        Opcodes/lowpassr.c      Opcodes/metro.c
+#    Opcodes/midiops2.c      Opcodes/midiops3.c      Opcodes/newfils.c
+#    Opcodes/nlfilt.c        Opcodes/oscbnk.c        Opcodes/pluck.c
+#    Opcodes/repluck.c       Opcodes/reverbsc.c      Opcodes/seqtime.c
+#    Opcodes/sndloop.c       Opcodes/sndwarp.c       Opcodes/space.c
+#    Opcodes/spat3d.c        Opcodes/syncgrain.c     Opcodes/ugens7.c
+#    Opcodes/ugens9.c        Opcodes/ugensa.c        Opcodes/uggab.c
+#    Opcodes/ugmoss.c        Opcodes/ugnorman.c      Opcodes/ugsc.c
+#    Opcodes/wave-terrain.c  Opcodes/stdopcod.c
+#    '''))
+# makePlugin(pluginEnvironment, 'pvsbuffer', ['Opcodes/pvsbuffer.c'])
+# makePlugin(pluginEnvironment, 'eqfil', ['Opcodes/eqfil.c'])
+# makePlugin(pluginEnvironment, 'vosim', ['Opcodes/Vosim.c'])
+# makePlugin(pluginEnvironment, 'modmatrix', ['Opcodes/modmatrix.c'])
+# makePlugin(pluginEnvironment, 'scoreline', ['Opcodes/scoreline.c'])
+# makePlugin(pluginEnvironment, 'modal4',
+#           ['Opcodes/modal4.c', 'Opcodes/physutil.c'])
+# makePlugin(pluginEnvironment, 'physmod', Split('''
+#    Opcodes/physmod.c Opcodes/physutil.c Opcodes/mandolin.c Opcodes/singwave.c
+#    Opcodes/fm4op.c Opcodes/moog1.c Opcodes/shaker.c Opcodes/bowedbar.c
+#'''))
+# makePlugin(pluginEnvironment, 'babo', ['Opcodes/babo.c'])
+# makePlugin(pluginEnvironment, 'barmodel', ['Opcodes/bilbar.c'])
+# makePlugin(pluginEnvironment, 'compress', ['Opcodes/compress.c'])
+# makePlugin(pluginEnvironment, 'cs_pvs_ops', Split('''
+#    Opcodes/ifd.c Opcodes/partials.c Opcodes/psynth.c Opcodes/pvsbasic.c
+#    Opcodes/pvscent.c Opcodes/pvsdemix.c Opcodes/pvs_ops.c Opcodes/pvsband.c
+#'''))
+# makePlugin(pluginEnvironment, 'pitch',
+#           ['Opcodes/pitch.c', 'Opcodes/pitch0.c', 'Opcodes/spectra.c'])
+# makePlugin(pluginEnvironment, 'ambicode1', ['Opcodes/ambicode1.c'])
+# sfontEnvironment = pluginEnvironment.Clone()
+# if compilerGNU():
+#   if getPlatform() != 'darwin':
+#    sfontEnvironment.Append(CCFLAGS = ['-fno-strict-aliasing'])
+# if sys.byteorder == 'big':
+#    sfontEnvironment.Append(CCFLAGS = ['-DWORDS_BIGENDIAN'])
+# makePlugin(sfontEnvironment, 'sfont', ['Opcodes/sfont.c'])
+# makePlugin(pluginEnvironment, 'grain4', ['Opcodes/grain4.c'])
+# makePlugin(pluginEnvironment, 'hrtferX', ['Opcodes/hrtferX.c'])
+# makePlugin(pluginEnvironment, 'loscilx', ['Opcodes/loscilx.c'])
+# makePlugin(pluginEnvironment, 'minmax', ['Opcodes/minmax.c'])
+# makePlugin(pluginEnvironment, 'cs_pan2', ['Opcodes/pan2.c'])
+# makePlugin(pluginEnvironment, 'tabfns', ['Opcodes/tabvars.c'])
+# makePlugin(pluginEnvironment, 'phisem', ['Opcodes/phisem.c'])
+# makePlugin(pluginEnvironment, 'pvoc', Split('''
+#    Opcodes/dsputil.c Opcodes/pvadd.c Opcodes/pvinterp.c Opcodes/pvocext.c
+#    Opcodes/pvread.c Opcodes/ugens8.c Opcodes/vpvoc.c Opcodes/pvoc.c
+#'''))
+#hrtfnewEnvironment = pluginEnvironment.Clone()
+#if sys.byteorder == 'big':
+#    hrtfnewEnvironment.Append(CCFLAGS = ['-DWORDS_BIGENDIAN'])
+# makePlugin(hrtfnewEnvironment, 'hrtfnew', 'Opcodes/hrtfopcodes.c')
+# makePlugin(pluginEnvironment, 'stackops', ['Opcodes/stackops.c'])
+# makePlugin(pluginEnvironment, 'vbap',
+#           ['Opcodes/vbap.c', 'Opcodes/vbap_eight.c', 'Opcodes/vbap_four.c',
+#            'Opcodes/vbap_sixteen.c', 'Opcodes/vbap_zak.c'])
+# makePlugin(pluginEnvironment, 'vaops', ['Opcodes/vaops.c'])
+# makePlugin(pluginEnvironment, 'ugakbari', ['Opcodes/ugakbari.c'])
+# makePlugin(pluginEnvironment, 'harmon', ['Opcodes/harmon.c'])
+# makePlugin(pluginEnvironment, 'ptrack', ['Opcodes/pitchtrack.c'])
+# makePlugin(pluginEnvironment, 'partikkel', ['Opcodes/partikkel.c'])
+# makePlugin(pluginEnvironment, 'shape', ['Opcodes/shape.c'])
+# makePlugin(pluginEnvironment, 'tabsum', ['Opcodes/tabsum.c'])
+# makePlugin(pluginEnvironment, 'crossfm', ['Opcodes/crossfm.c'])
+# makePlugin(pluginEnvironment, 'pvlock', ['Opcodes/pvlock.c'])
+# makePlugin(pluginEnvironment, 'fareyseq', ['Opcodes/fareyseq.c'])
+# makePlugin(pluginEnvironment, 'gabnew', Split('''
+#    Opcodes/gab/tabmorph.c  Opcodes/gab/hvs.c
+#    Opcodes/gab/sliderTable.c
+#    Opcodes/gab/newgabopc.c''')) 
+
+#============================== ==================================
+
+# system opcodes 
+makePlugin(pluginEnvironment, 'cs_date', ['Opcodes/date.c'])
+makePlugin(pluginEnvironment, 'system_call', ['Opcodes/system_call.c'])
+
+# C++ opcodes
+makePlugin(pluginEnvironment, 'ampmidid', ['Opcodes/ampmidid.cpp'])
+makePlugin(pluginEnvironment, 'mutexops', ['Opcodes/mutexops.cpp'])
+makePlugin(pluginEnvironment, 'doppler', ['Opcodes/doppler.cpp'])
+makePlugin(pluginEnvironment, 'mixer', ['Opcodes/mixer.cpp'])
+makePlugin(pluginEnvironment, 'signalflowgraph', ['Opcodes/signalflowgraph.cpp'])
+
+# platform-specific
 if (getPlatform() == 'linux' or getPlatform() == 'darwin'):
     makePlugin(pluginEnvironment, 'control', ['Opcodes/control.c'])
+#   makePlugin(pluginEnvironment, 'cpumeter', ['Opcodes/cpumeter.c'])
 if getPlatform() == 'linux':
     makePlugin(pluginEnvironment, 'urandom', ['Opcodes/urandom.c'])
-makePlugin(pluginEnvironment, 'modmatrix', ['Opcodes/modmatrix.c'])
-makePlugin(pluginEnvironment, 'eqfil', ['Opcodes/eqfil.c'])
-makePlugin(pluginEnvironment, 'pvsbuffer', ['Opcodes/pvsbuffer.c'])
-makePlugin(pluginEnvironment, 'scoreline', ['Opcodes/scoreline.c'])
-makePlugin(pluginEnvironment, 'ftest', ['Opcodes/ftest.c'])
-makePlugin(pluginEnvironment, 'mixer', ['Opcodes/mixer.cpp'])
-makePlugin(pluginEnvironment, 'signalflowgraph', ['Opcodes/signalflowgraph.cpp'])
-makePlugin(pluginEnvironment, 'modal4',
-           ['Opcodes/modal4.c', 'Opcodes/physutil.c'])
-makePlugin(pluginEnvironment, 'physmod', Split('''
-    Opcodes/physmod.c Opcodes/physutil.c Opcodes/mandolin.c Opcodes/singwave.c
-    Opcodes/fm4op.c Opcodes/moog1.c Opcodes/shaker.c Opcodes/bowedbar.c
-'''))
-makePlugin(pluginEnvironment, 'pitch',
-           ['Opcodes/pitch.c', 'Opcodes/pitch0.c', 'Opcodes/spectra.c'])
+
+
+# scanned synthesis
 makePlugin(pluginEnvironment, 'scansyn',
            ['Opcodes/scansyn.c', 'Opcodes/scansynx.c'])
-makePlugin(pluginEnvironment, 'ambicode1', ['Opcodes/ambicode1.c'])
-if mpafound==1:
-  makePlugin(pluginEnvironment, 'mp3in', ['Opcodes/mp3in.c'])
+
+# tables
+makePlugin(pluginEnvironment, 'fareygen', ['Opcodes/fareygen.c'])
+##makePlugin(pluginEnvironment, 'ftest', ['Opcodes/ftest.c'])
+
+#############################################################################
+#
+# Plugins with External Dependencies
+#############################################################################
+# UDP opcodes
+if commonEnvironment['useUDP'] == '0':
+    print "CONFIGURATION DECISION: Not building UDP plugins."
+else:
+    print "CONFIGURATION DECISION: Building UDP plugins."
+    udpEnvironment = pluginEnvironment.Clone()
+    udpEnvironment.Append(LIBS = ['pthread'])
+    if getPlatform() == 'win32':
+      udpEnvironment.Append(LIBS = ['ws2_32'])
+    makePlugin(udpEnvironment, 'udprecv', ['Opcodes/sockrecv.c'])
+    makePlugin(udpEnvironment, 'udpsend', ['Opcodes/socksend.c'])
+
+# end udp opcodes
+
+# OSC opcodes
+if not (commonEnvironment['useOSC'] == '1' and oscFound):
+    print "CONFIGURATION DECISION: Not building OSC plugin."
+else:
+    print "CONFIGURATION DECISION: Building OSC plugin."
+    oscEnvironment = pluginEnvironment.Clone()
+    oscEnvironment.Append(LIBS = ['lo', 'pthread'])
+    if getPlatform() == 'win32':
+        oscEnvironment.Append(LIBS = csoundWindowsLibraries)
+        if compilerGNU():
+           oscEnvironment.Append(SHLINKFLAGS = ['-Wl,--enable-stdcall-fixup'])
+    makePlugin(oscEnvironment, 'osc', ['Opcodes/OSC.c'])
+
 ##commonEnvironment.Append(LINKFLAGS = ['-Wl,-as-needed'])
 if wiifound==1:
   WiiEnvironment = pluginEnvironment.Clone()
@@ -1552,79 +1727,10 @@ if serialfound==1:
   SerEnvironment = pluginEnvironment.Clone()
   makePlugin(SerEnvironment, 'serial', ['Opcodes/serial.c'])
 
-sfontEnvironment = pluginEnvironment.Clone()
-if compilerGNU():
-   if getPlatform() != 'darwin':
-    sfontEnvironment.Append(CCFLAGS = ['-fno-strict-aliasing'])
-if sys.byteorder == 'big':
-    sfontEnvironment.Append(CCFLAGS = ['-DWORDS_BIGENDIAN'])
-makePlugin(sfontEnvironment, 'sfont', ['Opcodes/sfont.c'])
-makePlugin(pluginEnvironment, 'babo', ['Opcodes/babo.c'])
-makePlugin(pluginEnvironment, 'barmodel', ['Opcodes/bilbar.c'])
-makePlugin(pluginEnvironment, 'compress', ['Opcodes/compress.c'])
-makePlugin(pluginEnvironment, 'grain4', ['Opcodes/grain4.c'])
-makePlugin(pluginEnvironment, 'hrtferX', ['Opcodes/hrtferX.c'])
-makePlugin(pluginEnvironment, 'loscilx', ['Opcodes/loscilx.c'])
-makePlugin(pluginEnvironment, 'minmax', ['Opcodes/minmax.c'])
-makePlugin(pluginEnvironment, 'cs_pan2', ['Opcodes/pan2.c'])
-makePlugin(pluginEnvironment, 'tabfns', ['Opcodes/tabvars.c'])
-makePlugin(pluginEnvironment, 'phisem', ['Opcodes/phisem.c'])
-makePlugin(pluginEnvironment, 'pvoc', Split('''
-    Opcodes/dsputil.c Opcodes/pvadd.c Opcodes/pvinterp.c Opcodes/pvocext.c
-    Opcodes/pvread.c Opcodes/ugens8.c Opcodes/vpvoc.c Opcodes/pvoc.c
-'''))
-makePlugin(pluginEnvironment, 'cs_pvs_ops', Split('''
-    Opcodes/ifd.c Opcodes/partials.c Opcodes/psynth.c Opcodes/pvsbasic.c
-    Opcodes/pvscent.c Opcodes/pvsdemix.c Opcodes/pvs_ops.c Opcodes/pvsband.c
-'''))
-makePlugin(pluginEnvironment, 'stackops', ['Opcodes/stackops.c'])
-makePlugin(pluginEnvironment, 'vbap',
-           ['Opcodes/vbap.c', 'Opcodes/vbap_eight.c', 'Opcodes/vbap_four.c',
-            'Opcodes/vbap_sixteen.c', 'Opcodes/vbap_zak.c'])
-makePlugin(pluginEnvironment, 'vaops', ['Opcodes/vaops.c'])
-makePlugin(pluginEnvironment, 'ugakbari', ['Opcodes/ugakbari.c'])
-makePlugin(pluginEnvironment, 'harmon', ['Opcodes/harmon.c'])
-makePlugin(pluginEnvironment, 'ampmidid', ['Opcodes/ampmidid.cpp'])
-makePlugin(pluginEnvironment, 'cs_date', ['Opcodes/date.c'])
-makePlugin(pluginEnvironment, 'system_call', ['Opcodes/system_call.c'])
-makePlugin(pluginEnvironment, 'ptrack', ['Opcodes/pitchtrack.c'])
-makePlugin(pluginEnvironment, 'mutexops', ['Opcodes/mutexops.cpp'])
-makePlugin(pluginEnvironment, 'partikkel', ['Opcodes/partikkel.c'])
-makePlugin(pluginEnvironment, 'shape', ['Opcodes/shape.c'])
-makePlugin(pluginEnvironment, 'doppler', ['Opcodes/doppler.cpp'])
-makePlugin(pluginEnvironment, 'tabsum', ['Opcodes/tabsum.c'])
-makePlugin(pluginEnvironment, 'crossfm', ['Opcodes/crossfm.c'])
-makePlugin(pluginEnvironment, 'pvlock', ['Opcodes/pvlock.c'])
-makePlugin(pluginEnvironment, 'fareyseq', ['Opcodes/fareyseq.c'])
-makePlugin(pluginEnvironment, 'fareygen', ['Opcodes/fareygen.c'])
 #oggEnvironment = pluginEnvironment.Clone()
 #makePlugin(oggEnvironment, 'ogg', ['Opcodes/ogg.c'])
 #oggEnvironment.Append(LIBS=['vorbisfile'])
-makePlugin(pluginEnvironment, 'vosim', ['Opcodes/Vosim.c'])
-if getPlatform() == 'linux':
-    makePlugin(pluginEnvironment, 'cpumeter', ['Opcodes/cpumeter.c'])
 
-if commonEnvironment['buildImageOpcodes'] == '1':
-    if getPlatform() == 'win32':
-        if configure.CheckLibWithHeader("fltk_png", "png.h", language="C") and zlibhfound:
-            print 'CONFIGURATION DECISION: Building image opcodes'
-            pluginEnvironment.Append(LIBS= Split(''' fltk_png fltk_z '''))
-            makePlugin(pluginEnvironment, 'image', ['Opcodes/imageOpcodes.c'])
-    else:
-        if configure.CheckLibWithHeader("png", "png.h", language="C") and zlibhfound:
-            print 'CONFIGURATION DECISION: Building image opcodes'
-            pluginEnvironment.Append(LIBS= Split(''' png z '''))
-            makePlugin(pluginEnvironment, 'image', ['Opcodes/imageOpcodes.c'])
-else:
-    print 'CONFIGURATION DECISION: Not building image opcodes'
-makePlugin(pluginEnvironment, 'gabnew', Split('''
-    Opcodes/gab/tabmorph.c  Opcodes/gab/hvs.c
-    Opcodes/gab/sliderTable.c
-    Opcodes/gab/newgabopc.c'''))
-hrtfnewEnvironment = pluginEnvironment.Clone()
-if sys.byteorder == 'big':
-    hrtfnewEnvironment.Append(CCFLAGS = ['-DWORDS_BIGENDIAN'])
-makePlugin(hrtfnewEnvironment, 'hrtfnew', 'Opcodes/hrtfopcodes.c')
 if jackFound and commonEnvironment['useJack'] == '1':
     jpluginEnvironment = pluginEnvironment.Clone()
     if getPlatform() == 'linux':
@@ -1644,10 +1750,21 @@ if gmmFound and commonEnvironment['useDouble'] != '0':
 else:
     print 'CONFIGURATION DECISION: Not building linear algebra opcodes.'
 
-#############################################################################
-#
-# Plugins with External Dependencies
-#############################################################################
+if commonEnvironment['buildImageOpcodes'] == '1':
+    if getPlatform() == 'win32':
+        if configure.CheckHeader("png.h", language="C") and zlibhfound:
+            print 'CONFIGURATION DECISION: Building image opcodes'
+            imEnv = pluginEnvironment.cClone()
+            imEnv.Append(LIBS= Split(''' fltk_png fltk_z '''))
+            makePlugin(imEnv, 'image', ['Opcodes/imageOpcodes.c'])
+    else:
+        if configure.CheckHeader("png.h", language="C") and zlibhfound:
+            print 'CONFIGURATION DECISION: Building image opcodes'
+            imEnv = pluginEnvironment.Clone()
+            imEnv.Append(LIBS= Split(''' png z '''))
+            makePlugin(imEnv, 'image', ['Opcodes/imageOpcodes.c'])
+else:
+    print 'CONFIGURATION DECISION: Not building image opcodes'
 
 # FLTK widgets
 
@@ -1685,8 +1802,6 @@ else:
         vstEnvironment.Append(LIBS = ['dl'])
         guiProgramEnvironment.Append(LIBS = ['dl'])
     csoundProgramEnvironment.Append(LIBS = ['pthread', 'm'])
-    if mpafound :
-        csoundProgramEnvironment.Append(LIBS = ['mpadec'])
     if wiifound :
         WiiEnvironment.Append(LIBS = ['wiiuse', 'bluetooth'])
     if p5gfound :
@@ -1746,7 +1861,10 @@ if commonEnvironment['useCoreAudio'] == '1' and getPlatform() == 'darwin':
     print "CONFIGURATION DECISION: Building CoreAudio plugin."
     coreaudioEnvironment = pluginEnvironment.Clone()
     coreaudioEnvironment.Append(CCFLAGS = ['-I/System/Library/Frameworks/CoreAudio.framework/Headers'])
-    makePlugin(coreaudioEnvironment, 'rtcoreaudio', ['InOut/rtcoreaudio.c'])
+#    makePlugin(coreaudioEnvironment, 'rtcoreaudio', ['InOut/rtcoreaudio.c'])
+    coreaudioEnvironment.Append(CCFLAGS = ['-I/System/Library/Frameworks/AudioUnit.framework/Headers'])
+    coreaudioEnvironment.Append(LINKFLAGS = ['-framework', 'AudioUnit'])
+    makePlugin(coreaudioEnvironment, 'rtauhal', ['InOut/rtauhal.c'])
 else:
     print "CONFIGURATION DECISION: Not building CoreAudio plugin."
 
@@ -1809,7 +1927,8 @@ if commonEnvironment['usePortMIDI'] == '1' and portmidiFound:
     portMidiEnvironment = pluginEnvironment.Clone()
     portMidiEnvironment.Append(LIBS = ['portmidi'])
     if getPlatform() != 'darwin' and getPlatform() != 'win32':
-        portMidiEnvironment.Append(LIBS = ['porttime'])
+        if configure.CheckLibWithHeader("porttimer","porttimmer.h",language="C"):
+            portMidiEnvironment.Append(LIBS = ['porttime'])
     if getPlatform() == 'win32':
         portMidiEnvironment.Append(LIBS = csoundWindowsLibraries)
     if getPlatform() == 'linux' and alsaFound:
@@ -1818,32 +1937,12 @@ if commonEnvironment['usePortMIDI'] == '1' and portmidiFound:
 else:
     print 'CONFIGURATION DECISION: Not building with PortMIDI.'
 
-# OSC opcodes
-
-if not (commonEnvironment['useOSC'] == '1' and oscFound):
-    print "CONFIGURATION DECISION: Not building OSC plugin."
-else:
-    print "CONFIGURATION DECISION: Building OSC plugin."
-    oscEnvironment = pluginEnvironment.Clone()
-    oscEnvironment.Append(LIBS = ['lo', 'pthread'])
-    if getPlatform() == 'win32':
-        oscEnvironment.Append(LIBS = csoundWindowsLibraries)
-        if compilerGNU():
-           oscEnvironment.Append(SHLINKFLAGS = ['-Wl,--enable-stdcall-fixup'])
-    makePlugin(oscEnvironment, 'osc', ['Opcodes/OSC.c'])
+if getPlatform() == 'darwin':
+    coreMidiEnvironment = pluginEnvironment.Clone()
+    makePlugin(coreMidiEnvironment, 'cmidi', ['InOut/cmidi.c'])
 
-# UDP opcodes
 
-if commonEnvironment['useUDP'] == '0':
-    print "CONFIGURATION DECISION: Not building UDP plugins."
-else:
-    print "CONFIGURATION DECISION: Building UDP plugins."
-    udpEnvironment = pluginEnvironment.Clone()
-    udpEnvironment.Append(LIBS = ['pthread'])
-    makePlugin(udpEnvironment, 'udprecv', ['Opcodes/sockrecv.c'])
-    makePlugin(udpEnvironment, 'udpsend', ['Opcodes/socksend.c'])
 
-# end udp opcodes
 
 # FLUIDSYNTH OPCODES
 
@@ -1914,62 +2013,62 @@ else:
     print "CONFIGURATION DECISION: Not building DSSI plugin host opcodes."
 
 # Loris opcodes
-if not (commonEnvironment['buildLoris'] == '1' and configure.CheckHeader("Opcodes/Loris/src/loris.h") and configure.CheckHeader("fftw3.h")):
-    print "CONFIGURATION DECISION: Not building Loris Python extension and Csound opcodes."
-else:
-    print "CONFIGURATION DECISION: Building Loris Python extension and Csound opcodes."
+#if not (commonEnvironment['buildLoris'] == '1' and configure.CheckHeader("Opcodes/Loris/src/loris.h") and configure.CheckHeader("fftw3.h")):
+#    print "CONFIGURATION DECISION: Not building Loris Python extension and Csound opcodes."
+#else:
+#    print "CONFIGURATION DECISION: Building Loris Python extension and Csound opcodes."
     # For Loris, we build only the loris Python extension module and
     # the Csound opcodes (modified for Csound 5).
     # It is assumed that you have copied all contents of the Loris
     # distribution into the csound5/Opcodes/Loris directory, e.g.
     # csound5/Opcodes/Loris/src/*, etc.
-    lorisEnvironment = pluginEnvironment.Clone()
-    lorisEnvironment.Append(CCFLAGS = '-DHAVE_FFTW3_H')
-    if commonEnvironment['buildRelease'] == '0':
-        lorisEnvironment.Append(CCFLAGS = '-DDEBUG_LORISGENS')
-    if getPlatform() == 'win32':
-        lorisEnvironment.Append(CCFLAGS = '-D_MSC_VER')
-    if compilerGNU():
-	if getPlatform() != 'win32':
-		lorisEnvironment.Prepend(LIBS = ['stdc++'])
-        lorisEnvironment.Append(CCFLAGS = Split('''
-            -Wno-comment -Wno-unknown-pragmas -Wno-sign-compare
-        '''))
-    lorisEnvironment.Append(CPPPATH = Split('''
-        Opcodes/Loris Opcodes/Loris/src ./
-    '''))
-    lorisSources = glob.glob('Opcodes/Loris/src/*.[Cc]')
-    if 'Opcodes/Loris/src/lorisgens.C' in lorisSources:
-        lorisSources.remove('Opcodes/Loris/src/lorisgens.C')
-    lorisLibrarySources = []
-    for i in lorisSources:
-        lorisLibrarySources += lorisEnvironment.SharedObject(i)
-    lorisLibrary = lorisEnvironment.StaticLibrary(
-        'lorisbase', lorisLibrarySources)
-    lorisEnvironment.Prepend(LIBS = ['lorisbase', 'fftw3'])
+#    lorisEnvironment = pluginEnvironment.Clone()
+#    lorisEnvironment.Append(CCFLAGS = '-DHAVE_FFTW3_H')
+#    if commonEnvironment['buildRelease'] == '0':
+#        lorisEnvironment.Append(CCFLAGS = '-DDEBUG_LORISGENS')
+#    if getPlatform() == 'win32':
+#        lorisEnvironment.Append(CCFLAGS = '-D_MSC_VER')
+#    if compilerGNU():
+#	if getPlatform() != 'win32':
+#		lorisEnvironment.Prepend(LIBS = ['stdc++'])
+#        lorisEnvironment.Append(CCFLAGS = Split('''
+#            -Wno-comment -Wno-unknown-pragmas -Wno-sign-compare
+#        '''))
+#    lorisEnvironment.Append(CPPPATH = Split('''
+#        Opcodes/Loris Opcodes/Loris/src ./
+#    '''))
+#    lorisSources = glob.glob('Opcodes/Loris/src/*.[Cc]')
+#    if 'Opcodes/Loris/src/lorisgens.C' in lorisSources:
+#        lorisSources.remove('Opcodes/Loris/src/lorisgens.C')
+#    lorisLibrarySources = []
+#    for i in lorisSources:
+#        lorisLibrarySources += lorisEnvironment.SharedObject(i)
+#    lorisLibrary = lorisEnvironment.StaticLibrary(
+#        'lorisbase', lorisLibrarySources)
+#    lorisEnvironment.Prepend(LIBS = ['lorisbase', 'fftw3'])
     # The following file has been patched for Csound 5
     # and you should update it from Csound 5 CVS.
-    lorisOpcodes = makePlugin(lorisEnvironment, 'loris',
-                              ['Opcodes/Loris/lorisgens5.C'])
-    Depends(lorisOpcodes, lorisLibrary)
-    lorisPythonEnvironment = lorisEnvironment.Clone()
-    fixCFlagsForSwig(lorisPythonEnvironment)
-    lorisPythonEnvironment.Append(CPPPATH = pythonIncludePath)
-    lorisPythonEnvironment.Append(LINKFLAGS = pythonLinkFlags)
-    lorisPythonEnvironment.Append(LIBPATH = pythonLibraryPath)
-    if getPlatform() != 'darwin':
-        lorisPythonEnvironment.Prepend(LIBS = pythonLibs)
-    lorisPythonEnvironment.Append(SWIGPATH = ['./'])
-    lorisPythonEnvironment.Prepend(SWIGFLAGS = Split('''
-        -module loris -c++ -includeall -verbose -outdir . -python
-        -DHAVE_FFTW3_H -I./Opcodes/Loris/src -I.
-    '''))
-    lorisPythonWrapper = lorisPythonEnvironment.SharedObject(
-        'Opcodes/Loris/scripting/loris.i')
-    lorisPythonEnvironment['SHLIBPREFIX'] = ''
-    lorisPythonModule = makePythonModule(lorisPythonEnvironment,
-                                         'loris', lorisPythonWrapper)
-    Depends(lorisPythonModule, lorisLibrary)
+#    lorisOpcodes = makePlugin(lorisEnvironment, 'loris',
+#                              ['Opcodes/Loris/lorisgens5.C'])
+#    Depends(lorisOpcodes, lorisLibrary)
+#    lorisPythonEnvironment = lorisEnvironment.Clone()
+#    fixCFlagsForSwig(lorisPythonEnvironment)
+#    lorisPythonEnvironment.Append(CPPPATH = pythonIncludePath)
+#    lorisPythonEnvironment.Append(LINKFLAGS = pythonLinkFlags)
+#    lorisPythonEnvironment.Append(LIBPATH = pythonLibraryPath)
+#    if getPlatform() != 'darwin':
+#        lorisPythonEnvironment.Prepend(LIBS = pythonLibs)
+#    lorisPythonEnvironment.Append(SWIGPATH = ['./'])
+#    lorisPythonEnvironment.Prepend(SWIGFLAGS = Split('''
+#        -module loris -c++ -includeall -verbose -outdir . -python
+#        -DHAVE_FFTW3_H -I./Opcodes/Loris/src -I.
+#    '''))
+#    lorisPythonWrapper = lorisPythonEnvironment.SharedObject(
+#        'Opcodes/Loris/scripting/loris.i')
+#    lorisPythonEnvironment['SHLIBPREFIX'] = ''
+#    lorisPythonModule = makePythonModule(lorisPythonEnvironment,
+#                                         'loris', lorisPythonWrapper)
+#    Depends(lorisPythonModule, lorisLibrary)
 
 # STK opcodes
 
@@ -2165,7 +2264,7 @@ if getPlatform() == 'linux':
 csoundProgram = csoundProgramEnvironment.Program('csound', csoundProgramSources)
 executables.append(csoundProgram)
 Depends(csoundProgram, csoundLibrary)
-
+os
 def fluidTarget(env, dirName, baseName, objFiles):
     flFile = dirName + '/' + baseName + '.fl'
     cppFile = dirName + '/' + baseName + '.cpp'
@@ -2256,35 +2355,35 @@ else:
 
 # Build Cseditor
 
-if not ((commonEnvironment['buildCSEditor'] == '1') and fltkFound):
-    print 'CONFIGURATION DECISION: Not building Csound Text Editor.'
-else:
-    csEditorEnvironment = commonEnvironment.Clone()
-    if getPlatform() == 'linux':
-        csEditorEnvironment.ParseConfig('fltk-config --use-images --cflags --cxxflags --ldflags')
-        csEditorEnvironment.Append(LIBS = ['stdc++', 'pthread', 'm'])
-        csEditor = csEditorEnvironment.Program( 'cseditor', 'frontends/cseditor/cseditor.cxx')
-        executables.append(csEditor)
-    elif getPlatform() == 'win32':
-        if compilerGNU():
-            #csEditorEnvironment.Append(LIBS = ['stdc++', 'supc++'])
-            csEditorEnvironment.Prepend(LINKFLAGS = Split('''-mwindows -Wl,--enable-runtime-pseudo-reloc'''))
-            csEditorEnvironment.Append(LIBS = Split('fltk_images fltk_png fltk_z fltk_jpeg fltk'))
-        else:
-            csEditorEnvironment.Append(LIBS = Split('fltkimages fltkpng fltkz fltkjpeg fltk'))
-        csEditorEnvironment.Append(LIBS = csoundWindowsLibraries)
-        csEditor = csEditorEnvironment.Program('cseditor', ['frontends/cseditor/cseditor.cxx'])
-        executables.append(csEditor)
-    elif getPlatform() == 'darwin':
-        csEditorEnvironment.Prepend(CXXFLAGS = "-fno-rtti")
-        csEditorEnvironment.Append(LIBS = Split('''
-            fltk stdc++ pthread m
-        '''))
-        csEditorEnvironment.Append(LINKFLAGS = Split('''
-            -framework Carbon -framework ApplicationServices
-        '''))
-        csEditor = csEditorEnvironment.Command('cseditor', 'frontends/cseditor/cseditor.cxx', "fltk-config --compile frontends/cseditor/cseditor.cxx")
-        executables.append(csEditor)
+#if not ((commonEnvironment['buildCSEditor'] == '1') and fltkFound):
+#    print 'CONFIGURATION DECISION: Not building Csound Text Editor.'
+#else:
+#    csEditorEnvironment = commonEnvironment.Clone()
+#    if getPlatform() == 'linux':
+#        csEditorEnvironment.ParseConfig('fltk-config --use-images --cflags --cxxflags --ldflags')
+#        csEditorEnvironment.Append(LIBS = ['stdc++', 'pthread', 'm'])
+#       csEditor = csEditorEnvironment.Program( 'cseditor', 'frontends/cseditor/cseditor.cxx')
+#        executables.append(csEditor)
+#    elif getPlatform() == 'win32':
+#        if compilerGNU():
+#            #csEditorEnvironment.Append(LIBS = ['stdc++', 'supc++'])
+#            csEditorEnvironment.Prepend(LINKFLAGS = Split('''-mwindows -Wl,--enable-runtime-pseudo-reloc'''))
+#            csEditorEnvironment.Append(LIBS = Split('fltk_images fltk_png fltk_z fltk_jpeg fltk'))
+#        else:
+#            csEditorEnvironment.Append(LIBS = Split('fltkimages fltkpng fltkz fltkjpeg fltk'))
+#        csEditorEnvironment.Append(LIBS = csoundWindowsLibraries)
+#        csEditor = csEditorEnvironment.Program('cseditor', ['frontends/cseditor/cseditor.cxx'])
+#        executables.append(csEditor)
+#    elif getPlatform() == 'darwin':
+#        csEditorEnvironment.Prepend(CXXFLAGS = "-fno-rtti")
+#        csEditorEnvironment.Append(LIBS = Split('''
+#            fltk stdc++ pthread m
+#        '''))
+#        csEditorEnvironment.Append(LINKFLAGS = Split('''
+#            -framework Carbon -framework ApplicationServices
+#        '''))
+#        csEditor = csEditorEnvironment.Command('cseditor', 'frontends/cseditor/cseditor.cxx', "fltk-config --compile frontends/cseditor/cseditor.cxx")
+#        executables.append(csEditor)
 
 # Build CsoundAC
 
@@ -2300,6 +2399,7 @@ else:
     acEnvironment.Append(CPPPATH = pythonIncludePath)
     acEnvironment.Append(LINKFLAGS = pythonLinkFlags)
     acEnvironment.Append(LIBPATH = pythonLibraryPath)
+    acEnvironment.Append(LINKFLAGS = libCsoundLinkFlags)
     if getPlatform() != 'darwin':
         acEnvironment.Prepend(LIBS = pythonLibs)
     if musicXmlFound:
@@ -2309,12 +2409,16 @@ else:
         else:  
             acEnvironment.Prepend(LIBS = 'csnd')
     else: 
+     if getPlatform() != 'darwin':
         acEnvironment.Prepend(LIBS = '_csnd')
-    acEnvironment.Append(LINKFLAGS = libCsoundLinkFlags)
-    if not getPlatform() == 'darwin' or commonEnvironment['dynamicCsoundLibrary']== '0':
+     else:
+        acEnvironment.Append(LINKFLAGS = ['-L.', '-l_csnd'])
+    if not getPlatform() == 'darwin' or commonEnvironment['dynamicCsoundLibrary'] == '0':
       acEnvironment.Prepend(LIBS = libCsoundLibs)
     else:
-      acEnvironment.Prepend(LINKFLAGS = ['-F.', '-framework', 'CsoundLib'])
+     if commonEnvironment['useDouble'] == 1:
+      acEnvironment.Prepend(LINKFLAGS = ['-F.', '-framework', 'CsoundLib64'])
+     else:  acEnvironment.Prepend(LINKFLAGS = ['-F.', '-framework', 'CsoundLib64'])
     acEnvironment.Append(SWIGFLAGS = Split('-c++ -includeall -verbose -outdir .'))
     # csoundAC uses fltk_images, but -Wl,-as-needed willl wrongly discard it
     flag = '-Wl,-as-needed'
@@ -2390,7 +2494,9 @@ else:
     libs.append(csoundac)
     Depends(csoundac, csnd)
     pythonWrapperEnvironment = csoundWrapperEnvironment.Clone()
-    pythonWrapperEnvironment.Prepend(LIBS = Split('csnd'))
+    if getPlatform() == 'darwin':
+      pythonWrapperEnvironment.Append(LINKFLAGS = Split('-L. -l_csnd'))
+    else: pythonWrapperEnvironment.Prepend(LIBS = Split('csnd'))
     pythonCsoundACWrapperEnvironment = pythonWrapperEnvironment.Clone()
     if getPlatform() == 'darwin':
         pythonCsoundACWrapperEnvironment.Prepend(LIBS = ['CsoundAC'])
@@ -2416,7 +2522,7 @@ else:
     Depends(csoundAcPythonModule, pythonWrapper)
     Depends(csoundAcPythonModule, csoundac)
     Depends(csoundAcPythonModule, csnd)
-    if luaFound:
+    if luaFound and commonEnvironment['buildLuaWrapper'] != '0':
        luaCsoundACWrapperEnvironment = acWrapperEnvironment.Clone()
        if getPlatform() == 'win32':
        	  luaCsoundACWrapperEnvironment.Prepend(LIBS = Split('luaCsnd lua51 CsoundAC csnd fltk_images'))
@@ -2540,8 +2646,6 @@ if commonEnvironment['buildTclcsound'] == '1' and tclhfound:
     csTclEnvironment = commonEnvironment.Clone()
     csTclEnvironment.Append(LINKFLAGS = libCsoundLinkFlags)
     csTclEnvironment.Append(LIBS = libCsoundLibs)
-    if mpafound :
-        csTclEnvironment.Append(LIBS = ['mpadec'])
     if getPlatform() == 'darwin':
         csTclEnvironment.Append(CCFLAGS = Split('''
             -I/Library/Frameworks/Tcl.framework/Headers
@@ -2613,8 +2717,6 @@ if commonEnvironment['buildWinsound'] == '1' and fltkFound:
     csWinEnvironment = commonEnvironment.Clone()
     csWinEnvironment.Append(LINKFLAGS = libCsoundLinkFlags)
     csWinEnvironment.Append(LIBS = libCsoundLibs)
-    if mpafound :
-        csWinEnvironment.Append(LIBS = ['mpadec'])
     # not used
     # if (commonEnvironment['noFLTKThreads'] == '1'):
     #     csWinEnvironment.Append(CCFLAGS = ['-DNO_FLTK_THREADS'])
@@ -2658,16 +2760,16 @@ if commonEnvironment['buildWinsound'] == '1' and fltkFound:
 else:
     print "CONFIGURATION DECISION: Not building Winsound"
 
-if (getPlatform() == 'darwin' and commonEnvironment['buildOSXGUI'] == '1'):
-    print "CONFIGURATION DECISION: building OSX GUI frontend"
-    csOSXGUIEnvironment = commonEnvironment.Clone()
-    OSXGUI = csOSXGUIEnvironment.Command(
-        '''frontends/OSX/build/Csound 5.app/Contents/MacOS/Csound 5''',
-        'frontends/OSX/main.c',
-        "cd frontends/OSX; xcodebuild -buildstyle Deployment")
-    Depends(OSXGUI, csoundLibrary)
-else:
-    print "CONFIGURATION DECISION: Not building OSX GUI frontend"
+#if (getPlatform() == 'darwin' and commonEnvironment['buildOSXGUI'] == '1'):
+#    print "CONFIGURATION DECISION: building OSX GUI frontend"
+#    csOSXGUIEnvironment = commonEnvironment.Clone()
+#    OSXGUI = csOSXGUIEnvironment.Command(
+#        '''frontends/OSX/build/Csound 5.app/Contents/MacOS/Csound 5''',
+#        'frontends/OSX/main.c',
+#        "cd frontends/OSX; xcodebuild -buildstyle Deployment")
+#    Depends(OSXGUI, csoundLibrary)
+#else:
+#    print "CONFIGURATION DECISION: Not building OSX GUI frontend"
 
 # build csLADSPA
 print "CONFIGURATION DEFAULT:  Building csLadspa."
diff --git a/Top/csmodule.c b/Top/csmodule.c
index 0f0fc70..7ff29fe 100644
--- a/Top/csmodule.c
+++ b/Top/csmodule.c
@@ -79,12 +79,15 @@
 #include "csmodule.h"
 
 #if defined(__MACH__)
+#include <TargetConditionals.h>
+#if (TARGET_OS_IPHONE == 0) && (TARGET_IPHONE_SIMULATOR == 0)
 #if defined(MAC_OS_X_VERSION_10_6) && (MAC_OS_X_VERSION_MIN_REQUIRED>=MAC_OS_X_VERSION_10_6)
 #define NEW_MACH_CODE
 #else
 #define OLD_MACH_CODE
 #endif
 #endif
+#endif
 
 #if defined(LINUX) || defined(NEW_MACH_CODE)
 #include <dlfcn.h>
@@ -147,6 +150,10 @@ static  const   char    *plugindir64_envvar = "OPCODEDIR64";
 #  endif
 #endif
 
+#if (TARGET_OS_IPHONE != 0) && (TARGET_IPHONE_SIMULATOR != 0)
+#  define ENABLE_OPCODEDIR_WARNINGS 0
+#endif
+
 typedef struct opcodeLibFunc_s {
     long    (*opcode_init)(CSOUND *, OENTRY **);  /* list of opcode entries  */
     NGFENS  *(*fgen_init)(CSOUND *);        /* list of named GEN routines    */
@@ -197,7 +204,8 @@ static int check_plugin_compatibility(CSOUND *csound, const char *fname, int n)
       minorVersion = (n & 0xFF00) >> 8;
       majorVersion = (n & (~0xFFFF)) >> 16;
       if (majorVersion != (int) CS_APIVERSION ||
-          minorVersion > (int) CS_APISUBVER) {
+          (minorVersion > (int) CS_APISUBVER) ||
+          (minorVersion <= 5)) { /* NOTE **** REFACTOR *** */
         csound->Warning(csound, Str("not loading '%s' (incompatible "
                                     "with this version of Csound (%d.%d/%d.%d)"),
                         fname, majorVersion,minorVersion,
@@ -344,6 +352,7 @@ static CS_NOINLINE int csoundLoadExternal(CSOUND *csound,
 
 static int csoundCheckOpcodeDeny(CSOUND *csound, const char *fname)
 {
+    (void *)csound;
     /* Check to see if the fname is on the do-not-load list */
     char buff[256];
     char *p, *deny;
@@ -845,6 +854,7 @@ static CS_NOINLINE int csoundInitModule(CSOUND *csound, csoundModule_t *m)
  * Return value is CSOUND_SUCCESS if there was no error, and CSOUND_ERROR if
  * some modules could not be initialised.
  */
+
 int csoundInitModules(CSOUND *csound)
 {
     csoundModule_t  *m;
@@ -891,6 +901,7 @@ int csoundLoadAndInitModule(CSOUND *csound, const char *fname)
  * Return value is CSOUND_SUCCESS if there was no error, and
  * CSOUND_ERROR if some modules could not be de-initialised.
  */
+extern int sfont_ModuleDestroy(CSOUND *csound);
 int csoundDestroyModules(CSOUND *csound)
 {
     csoundModule_t  *m;
@@ -898,7 +909,7 @@ int csoundDestroyModules(CSOUND *csound)
 
     retval = CSOUND_SUCCESS;
     while (csound->csmodule_db != NULL) {
-     
+
       m = (csoundModule_t*) csound->csmodule_db;
       /* call destructor functions */
       if (m->PreInitFunc != NULL && m->fn.p.DestFunc != NULL) {
@@ -907,15 +918,16 @@ int csoundDestroyModules(CSOUND *csound)
           print_module_error(csound, Str("Error de-initialising module '%s'"),
                                      &(m->name[0]), m, i);
           retval = CSOUND_ERROR;
-        } 
+        }
       }
       /* unload library */
-      csoundCloseLibrary(m->h); 
+      csoundCloseLibrary(m->h);
       csound->csmodule_db = (void*) m->nxt;
       /* free memory used by database */
       free((void*) m);
-  
+
     }
+    sfont_ModuleDestroy(csound);
     /* return with error code */
     return retval;
 }
@@ -1265,3 +1277,121 @@ void print_opcodedir_warning(CSOUND *p)
 #endif
 }
 
+typedef long (*INITFN)(CSOUND *, void *);
+
+extern long babo_localops_init(CSOUND *, void *);
+extern long bilbar_localops_init(CSOUND *, void *);
+extern long compress_localops_init(CSOUND *, void *);
+extern long pvsbuffer_localops_init(CSOUND *, void *);
+extern long vosim_localops_init(CSOUND *, void *);
+extern long eqfil_localops_init(CSOUND *, void *);
+extern long modal4_localops_init(CSOUND *, void *);
+extern long scoreline_localops_init(CSOUND *, void *);
+extern long physmod_localops_init(CSOUND *, void *);
+extern long modmatrix_localops_init(CSOUND *, void *);
+extern long spectra_localops_init(CSOUND *, void *);
+extern long ambicode1_localops_init(CSOUND *, void *);
+extern long grain4_localops_init(CSOUND *, void *);
+extern long hrtferX_localops_init(CSOUND *, void *);
+extern long loscilx_localops_init(CSOUND *, void *);
+extern long pan2_localops_init(CSOUND *, void *);
+extern long tabvars_localops_init(CSOUND *, void *);
+extern long phisem_localops_init(CSOUND *, void *);
+extern long pvoc_localops_init(CSOUND *, void *);
+extern long hrtfopcodes_localops_init(CSOUND *, void *);
+extern long hrtfreverb_localops_init(CSOUND *, void *);
+extern long hrtfearly_localops_init(CSOUND *, void *);
+extern long minmax_localops_init(CSOUND *, void *);
+
+extern long stackops_localops_init(CSOUND *, void *);
+extern long vbap_localops_init(CSOUND *, void *);
+extern long vaops_localops_init(CSOUND *, void*);
+extern long ugakbari_localops_init(CSOUND *, void *);
+extern long harmon_localops_init(CSOUND *, void *);
+extern long pitchtrack_localops_init(CSOUND *, void *);
+
+extern long partikkel_localops_init(CSOUND *, void *);
+extern long shape_localops_init(CSOUND *, void *);
+extern long tabsum_localops_init(CSOUND *, void *);
+extern long crossfm_localops_init(CSOUND *, void *);
+extern long pvlock_localops_init(CSOUND *, void *);
+extern long fareyseq_localops_init(CSOUND *, void *);
+extern long cpumeter_localops_init(CSOUND *, void *);
+extern long mp3in_localops_init(CSOUND *, void *);
+
+extern int stdopc_ModuleInit(CSOUND *csound);
+extern int pvsopc_ModuleInit(CSOUND *csound);
+extern int sfont_ModuleInit(CSOUND *csound);
+extern int sfont_ModuleCreate(CSOUND *csound);
+extern int newgabopc_ModuleInit(CSOUND *csound);
+
+
+const INITFN staticmodules[] = { hrtfopcodes_localops_init, babo_localops_init,
+                                 bilbar_localops_init, vosim_localops_init,
+                                 compress_localops_init, pvsbuffer_localops_init,
+                                 eqfil_localops_init, modal4_localops_init,
+                                 scoreline_localops_init, physmod_localops_init,
+                                 modmatrix_localops_init, spectra_localops_init,
+                                 ambicode1_localops_init, grain4_localops_init,
+                                 hrtferX_localops_init, loscilx_localops_init,
+                                 pan2_localops_init, tabvars_localops_init,
+                                 phisem_localops_init, pvoc_localops_init,
+                                 stackops_localops_init, vbap_localops_init,
+                                 ugakbari_localops_init, harmon_localops_init,
+                                 pitchtrack_localops_init, partikkel_localops_init,
+                                 shape_localops_init, tabsum_localops_init,
+                                 crossfm_localops_init, pvlock_localops_init,
+                                 fareyseq_localops_init, hrtfearly_localops_init,
+                                 hrtfreverb_localops_init, minmax_localops_init,
+                                 vaops_localops_init, 
+#ifndef WIN32
+                                 cpumeter_localops_init,
+#endif
+                                 mp3in_localops_init, NULL };
+
+typedef NGFENS* (*FGINITFN)(CSOUND *);
+
+NGFENS *ftest_fgens_init(CSOUND *);
+
+const FGINITFN fgentab[] = {  ftest_fgens_init, NULL };
+
+CS_NOINLINE int csoundInitStaticModules(CSOUND *csound)
+{
+    int     i;
+    OENTRY  *opcodlst_n;
+    long    length;
+
+    for (i=0; staticmodules[i]!=NULL; i++) {
+      length = (staticmodules[i])(csound, &opcodlst_n);
+
+      if (UNLIKELY(length <= 0L)) return CSOUND_ERROR;
+      length /= (long) sizeof(OENTRY);
+      if (length) {
+        if (UNLIKELY(csound->AppendOpcodes(csound, opcodlst_n,
+                                           (int) length) != 0))
+          return CSOUND_ERROR;
+      }
+    }
+    /* stdopc module */
+    if (stdopc_ModuleInit(csound)) return CSOUND_ERROR;
+
+    /* pvs module */
+    if (pvsopc_ModuleInit(csound)) return CSOUND_ERROR;
+
+    /* sfont module */
+    sfont_ModuleCreate(csound);
+    if (sfont_ModuleInit(csound)) return CSOUND_ERROR;
+
+    /* newgabopc */
+    if (newgabopc_ModuleInit(csound)) return CSOUND_ERROR;
+
+    /* modules were initialised successfully */
+    /* Now fgens */
+    for (i = 0; fgentab[i]!=NULL; i++) {
+      int j;
+      NGFENS  *names = (fgentab[i])(csound);
+      for (j = 0; names[j].name != NULL; j++)
+        allocgen(csound, names[j].name, names[j].fn);
+    }
+    return CSOUND_SUCCESS;
+}
diff --git a/Top/csound.c b/Top/csound.c
index 2c16c4f..dd96579 100644
--- a/Top/csound.c
+++ b/Top/csound.c
@@ -59,8 +59,10 @@ extern "C" {
 #include "namedins.h"
 #include "pvfileio.h"
 #include "fftlib.h"
-#ifdef PARCS
+#ifdef ENABLE_NEW_PARSER
 #include "csound_orc.h"
+#endif
+#ifdef PARCS
 #include "cs_par_base.h"
 #include "cs_par_orc_semantics.h"
 #include "cs_par_dispatch.h"
@@ -76,9 +78,11 @@ extern "C" {
 #include <omp.h>
 #endif /* USE_OPENMP */
 
+  MYFLT csoundPow2(CSOUND *csound, MYFLT a);
   extern void MakeAscii(CSOUND *, WINDAT *, const char *);
   extern void DrawAscii(CSOUND *, WINDAT *);
   extern void KillAscii(CSOUND *, WINDAT *);
+  extern int csoundInitStaticModules(CSOUND *);
 
   static void SetInternalYieldCallback(CSOUND *, int (*yieldCallback)(CSOUND *));
   static int  playopen_dummy(CSOUND *, const csRtAudioParams *parm);
@@ -337,6 +341,7 @@ extern "C" {
     csoundChanOAGetSample,
     csoundStop,
     csoundGetNamedGens,
+    csoundPow2,
     /* NULL, */
     {
       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
@@ -346,7 +351,7 @@ extern "C" {
       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-      NULL, NULL, NULL, NULL, NULL, NULL
+      NULL, NULL, NULL, NULL, NULL
     },
     0,                          /* dither_output */
     NULL,  /*  flgraphsGlobals */
@@ -407,6 +412,7 @@ extern "C" {
     NULL,           /*  rtRecord_userdata   */
     NULL,           /*  rtPlay_userdata     */
     NULL, NULL,     /*  orchname, scorename */
+    NULL, NULL,     /*  orchstr, *scorestr  */
     2345678,        /*  holdrand            */
     256,            /*  strVarMaxLen        */
     MAXINSNO,       /*  maxinsno            */
@@ -470,7 +476,8 @@ extern "C" {
     NULL,           /*  Linepipe            */
     0,              /*  Linefd              */
     NULL,           /*  csoundCallbacks_    */
-    NULL,           /*  scfp                */
+    (FILE*)NULL,    /*  scfp                */
+    (CORFIL*)NULL,  /*  scstr               */
     NULL,           /*  oscfp               */
     { FL(0.0) },    /*  maxamp              */
     { FL(0.0) },    /*  smaxamp             */
@@ -634,7 +641,7 @@ extern "C" {
       0, 0, 0,      /*    rewrt_hdr, ...    */
       0,            /*    expr_opt          */
       0.0f, 0.0f,   /*    sr_override ...  */
-      (char*) NULL, (char*) NULL, (char*) NULL,
+      (char*) NULL, (char*) NULL, NULL,
       (char*) NULL, (char*) NULL, (char*) NULL,
       (char*) NULL, (char*) NULL,
       0,            /*    midiKey           */
@@ -681,6 +688,17 @@ extern "C" {
     NULL,           /* multiThreadedDag */
     NULL,           /* barrier1 */
     NULL,           /* barrier2 */
+    NULL,           /* global_var_lock_root */
+    NULL,           /* global_var_lock_cache */
+    0,              /* global_var_lock_count */
+    0,              /* opcode_weight_cache_ctr */
+    {NULL,NULL},    /* opcode_weight_cache[OPCODE_WEIGHT_CACHE_SIZE] */
+    0,              /* opcode_weight_have_cache */
+    {NULL,NULL},    /* ache[DAG_2_CACHE_SIZE] */
+    /* statics from cs_par_orc_semantic_analysis */
+    NULL,           /* instCurr */
+    NULL,           /* instRoot */
+    0,              /* inInstr */
 #endif /* PARCS */
     0,              /* tempStatus */
     0,              /* orcLineOffset */
@@ -692,14 +710,17 @@ extern "C" {
     0,              /* Count of extra strings */
     {NULL, NULL, NULL}, /* For extra strings in scores */
     {0, 0, 0},      /* For extra strings in scores */
-    300             /* Count for generated labels */
+    300,             /* Count for generated labels */
+    NULL,
+    NULL
   };
 
   /* from threads.c */
   void csoundLock(void);
   void csoundUnLock(void);
   /* aops.c */
-  void aops_init_tables(void);
+  /*void aops_init_tables(void);*/
+  void csound_aops_init_tables(CSOUND *cs);
 
   typedef struct csInstance_s {
     CSOUND              *csound;
@@ -737,7 +758,7 @@ extern "C" {
       }
   }
 
-#if !defined(LINUX) && !defined(SGI) && !defined(__BEOS__) && !defined(__MACH__)
+#if defined(ANDROID) || (!defined(LINUX) && !defined(SGI) && !defined(__BEOS__) && !defined(__MACH__))
   static char *signal_to_string(int sig)
   {
       switch(sig) {
@@ -948,7 +969,7 @@ extern "C" {
 #if !defined(WIN32)
         atexit(destroy_all_instances);
 #endif
-      aops_init_tables();
+      /*aops_init_tables();*/
       csoundLock();
       init_done = 1;
       csoundUnLock();
@@ -979,7 +1000,7 @@ extern "C" {
       instance_list = p;
       csoundUnLock();
       csoundReset(csound);
-
+      //csound_aops_init_tables(csound);
       return csound;
   }
 
@@ -1123,10 +1144,18 @@ extern "C" {
                                         " (default: no)", NULL);
       p->opcode_list = (int*) mcalloc(p, sizeof(int) * 256);
       p->engineState |= CS_STATE_PRE;
+      csound_aops_init_tables(p);
       /* now load and pre-initialise external modules for this instance */
       /* this function returns an error value that may be worth checking */
       {
-        int err = csoundLoadModules(p);
+        int err = csoundInitStaticModules(p);
+        if (p->delayederrormessages && p->printerrormessagesflag==NULL) {
+          p->Warning(p, p->delayederrormessages);
+          free(p->delayederrormessages);
+          p->delayederrormessages = NULL;
+        }
+        if (UNLIKELY(err==CSOUND_ERROR)) return err;
+        err = csoundLoadModules(p);
         if (p->delayederrormessages && p->printerrormessagesflag==NULL) {
           p->Warning(p, p->delayederrormessages);
           free(p->delayederrormessages);
@@ -1240,6 +1269,7 @@ extern "C" {
       return -1;
   }
 
+#if 0
   static int getNumActive(INSDS *start, INSDS *end)
   {
       INSDS *current = start;
@@ -1249,6 +1279,7 @@ extern "C" {
       }
       return counter;
   }
+#endif
 
   inline void advanceINSDSPointer(INSDS ***start, int num)
   {
@@ -1297,7 +1328,7 @@ extern "C" {
 
 
 #ifdef PARCS
-  int inline nodePerf(CSOUND *csound, int index)
+  static int inline nodePerf(CSOUND *csound, int index)
   {
       struct instr_semantics_t *instr = NULL;
       INSDS *insds = NULL;
@@ -1399,8 +1430,8 @@ extern "C" {
 
         TRACE_1("[%i] Go\n", index);
 
-        /* TIMER_INIT(mutex, "Mutex ")
-           TIMER_T_START(mutex, index, "Mutex ") */
+        /* TIMER_INIT(mutex, "Mutex ");
+           TIMER_T_START(mutex, index, "Mutex "); */
 
         csound_global_mutex_lock();
         if (csound->multiThreadedComplete == 1) {
@@ -1416,14 +1447,14 @@ extern "C" {
         }
         csound_global_mutex_unlock();
 
-        /* TIMER_T_END(mutex, index, "Mutex ") */
+        /* TIMER_T_END(mutex, index, "Mutex "); */
 
-        TIMER_INIT(thread, "")
-          TIMER_T_START(thread, index, "")
+        TIMER_INIT(thread, "");
+        TIMER_T_START(thread, index, "");
 
           nodePerf(csound, index);
 
-        TIMER_T_END(thread, index, "")
+          TIMER_T_END(thread, index, "");
 
           TRACE_1("[%i] Done\n", index);
 
@@ -1527,9 +1558,9 @@ extern "C" {
       ip = csound->actanchor.nxtact;
 
       if (ip != NULL) {
-        TIMER_INIT(thread, "")
-          TIMER_START(thread, "Clock Sync ")
-          TIMER_END(thread, "Clock Sync ")
+        TIMER_INIT(thread, "");
+        TIMER_START(thread, "Clock Sync ");
+        TIMER_END(thread, "Clock Sync ");
 
           SHARK_SIGNPOST(KPERF_SYM);
         TRACE_1("[%i] kperf\n", 0);
@@ -1538,16 +1569,15 @@ extern "C" {
            2nd by inso count / thread count. */
         if (csound->multiThreadedThreadInfo != NULL) {
           struct dag_t *dag2 = NULL;
-          int main_played_count = 0;
 
-          TIMER_START(thread, "Dag ")
+          TIMER_START(thread, "Dag ");
 #if defined(LINEAR_CACHE) || defined(HASH_CACHE)
-            csp_dag_cache_fetch(csound, &dag2, ip);
+          csp_dag_cache_fetch(csound, &dag2, ip);
           csp_dag_build(csound, &dag2, ip);
 #endif
-          TIMER_END(thread, "Dag ")
+          TIMER_END(thread, "Dag ");
 
-            TRACE_1("{Time: %f}\n", csound->GetScoreTime(csound));
+          TRACE_1("{Time: %f}\n", csound->GetScoreTime(csound));
 #if TRACE > 1
           csp_dag_print(csound, dag2);
 #endif
@@ -1558,17 +1588,17 @@ extern "C" {
           SHARK_SIGNPOST(BARRIER_1_WAIT_SYM);
           csound->WaitBarrier(csound->barrier1);
 
-          TIMER_START(thread, "[0] ")
+          TIMER_START(thread, "[0] ");
 
-            main_played_count = nodePerf(csound, 0);
+          (void) nodePerf(csound, 0);
 
-          TIMER_END(thread, "[0] ")
+          TIMER_END(thread, "[0] ");
 
             SHARK_SIGNPOST(BARRIER_2_WAIT_SYM);
           /* wait until partition is complete */
           csound->WaitBarrier(csound->barrier2);
           TRACE_1("[%i] Barrier2 Done\n", 0);
-          TIMER_END(thread, "")
+          TIMER_END(thread, "");
 
 #if !defined(LINEAR_CACHE) && !defined(HASH_CACHE)
             csp_dag_dealloc(csound, &dag2);
diff --git a/Top/main.c b/Top/main.c
index 72af91f..94c2949 100644
--- a/Top/main.c
+++ b/Top/main.c
@@ -25,7 +25,7 @@
 #include "csoundCore.h"         /*                      MAIN.C          */
 #include "soundio.h"
 #include "csmodule.h"
-
+#include "corfile.h"
 
 #ifdef ENABLE_NEW_PARSER
 #include "csound_orc.h"
@@ -85,7 +85,6 @@ PUBLIC int csoundCompile(CSOUND *csound, int argc, char **argv)
     char    *s;
     char    *sortedscore = NULL;
     char    *xtractedscore = "score.xtr";
-    char    *playscore = NULL;      /* unless we extract */
     FILE    *scorin = NULL, *scorout = NULL, *xfile = NULL;
     int     n;
     int     csdFound = 0;
@@ -228,6 +227,7 @@ PUBLIC int csoundCompile(CSOUND *csound, int argc, char **argv)
         csdFound = 1;
       }
     }
+
     /* IV - Feb 19 2005: run a second pass of argdecode so that */
     /* command line options override CSD options */
     /* this assumes that argdecode is safe to run multiple times */
@@ -283,42 +283,38 @@ PUBLIC int csoundCompile(CSOUND *csound, int argc, char **argv)
     O->sfsampsize = sfsampsize(FORMAT2SF(O->outformat));
     O->informat = O->outformat;             /* informat default */
 
-    if (csound->scorename == NULL || strlen(csound->scorename) == 0) {
+    if (csound->scorename == NULL && csound->scorestr==NULL) {
       /* No scorename yet */
-      char *sconame = get_sconame(csound);
-      FILE *scof;
+      csound->scorestr = corfile_create_r("f0 42000\n");
+      corfile_flush(csound->scorestr);
       if (O->RTevents)
         csound->Message(csound, Str("realtime performance using dummy "
                                     "numeric scorefile\n"));
-      csoundTmpFileName(csound, sconame, ".sco");   /* Generate score name */
-      scof = fopen(sconame, "w");
-      fprintf(scof, "f0 42000\n");
-      fclose(scof);
-      csound->scorename = sconame;
-      add_tmpfile(csound, sconame);     /* IV - Feb 03 2005 */
-      csoundNotifyFileOpened(csound, sconame, CSFTYPE_SCORE, 1, 1);
-      csound->tempStatus |= csScoInMask;
-    } else if (!csdFound && !O->noDefaultPaths){
-        /* Add directory of SCO file to search paths*/
-        fileDir = csoundGetDirectoryForPath(csound, csound->scorename);
-        csoundAppendEnv(csound, "SADIR", fileDir);
-        csoundAppendEnv(csound, "SSDIR", fileDir);
-        csoundAppendEnv(csound, "MFDIR", fileDir);
-        mfree(csound, fileDir);
+    }
+    else if (!csdFound && !O->noDefaultPaths){
+      /* Add directory of SCO file to search paths*/
+      fileDir = csoundGetDirectoryForPath(csound, csound->scorename);
+      csoundAppendEnv(csound, "SADIR", fileDir);
+      csoundAppendEnv(csound, "SSDIR", fileDir);
+      csoundAppendEnv(csound, "MFDIR", fileDir);
+      mfree(csound, fileDir);
     }
 
     /* Add directory of ORC file to search paths*/
     if (!csdFound && !O->noDefaultPaths) {
-        fileDir = csoundGetDirectoryForPath(csound, csound->orchname);
-        csoundAppendEnv(csound, "SADIR", fileDir);
-        csoundAppendEnv(csound, "SSDIR", fileDir);
-        csoundAppendEnv(csound, "MFDIR", fileDir);
-        mfree(csound, fileDir);
+      fileDir = csoundGetDirectoryForPath(csound, csound->orchname);
+      csoundAppendEnv(csound, "SADIR", fileDir);
+      csoundAppendEnv(csound, "SSDIR", fileDir);
+      csoundAppendEnv(csound, "MFDIR", fileDir);
+      mfree(csound, fileDir);
     }
 
-    csound->Message(csound, Str("orchname:  %s\n"), csound->orchname);
-    if (csound->scorename != NULL)
-      csound->Message(csound, Str("scorename: %s\n"), csound->scorename);
+    if (csound->orchstr==NULL) {
+      /*  does not deal with search paths */
+      csound->Message(csound, Str("orchname:  %s\n"), csound->orchname);
+      csound->orchstr = copy_to_corefile(csound, csound->orchname, NULL, 0);
+      csound->orchname = NULL;
+    }
     if (csound->xfilename != NULL)
       csound->Message(csound, "xfilename: %s\n", csound->xfilename);
     /* IV - Oct 31 2002: moved orchestra compilation here, so that named */
@@ -330,11 +326,13 @@ PUBLIC int csoundCompile(CSOUND *csound, int argc, char **argv)
 
 #ifdef ENABLE_NEW_PARSER
     if (O->newParser) {
-      extern void new_orc_parser(CSOUND *);
+      int new_orc_parser(CSOUND *);
       csound->Message(csound, "********************\n");
       csound->Message(csound, "* USING NEW PARSER *\n");
       csound->Message(csound, "********************\n");
-      new_orc_parser(csound);
+      if (new_orc_parser(csound)) {
+        csoundDie(csound, Str("Stopping on parser failure\n"));
+      }
     }
     else {
       otran(csound);                  /* read orcfile, setup desblks & spaces */
@@ -344,8 +342,9 @@ PUBLIC int csoundCompile(CSOUND *csound, int argc, char **argv)
 #endif
 #if defined(USE_OPENMP)
     if (csound->oparms->numThreads > 1) {
-        omp_set_num_threads(csound->oparms->numThreads);
-        csound->Message(csound, "OpenMP enabled: requested %d threads.\n", csound->oparms->numThreads);
+      omp_set_num_threads(csound->oparms->numThreads);
+      csound->Message(csound, "OpenMP enabled: requested %d threads.\n",
+                      csound->oparms->numThreads);
     }
 #endif
 
@@ -358,43 +357,37 @@ PUBLIC int csoundCompile(CSOUND *csound, int argc, char **argv)
         (!strcmp(csound->scorename + (n - 4), ".srt") ||
          !strcmp(csound->scorename + (n - 4), ".xtr"))) {
       csound->Message(csound, Str("using previous %s\n"), csound->scorename);
-      playscore = sortedscore = csound->scorename;  /*   use that one */
+      //playscore = sortedscore = csound->scorename;   /*  use that one */
+      csound->scorestr = NULL;
+      csound->scorestr = copy_to_corefile(csound, csound->scorename, NULL, 1);
     }
     else {
-      if (csound->keep_tmp) {
-        playscore = sortedscore = "score.srt";
+      sortedscore = NULL;
+      if (csound->scorestr==NULL) {
+        csound->scorestr = copy_to_corefile(csound, csound->scorename, NULL, 1);
+        if (csound->scorestr==NULL)
+          csoundDie(csound, Str("cannot open scorefile %s"), csound->scorename);
       }
-      else {
-        playscore = sortedscore = csoundTmpFileName(csound, NULL, ".srt");
-        add_tmpfile(csound, playscore);         /* IV - Feb 03 2005 */
-        csound->tempStatus |= csScoSortMask + csPlayScoMask;
-      }
-      if (!(scorin = fopen(csound->scorename, "rb")))   /* else sort it   */
-        csoundDie(csound, Str("cannot open scorefile %s"), csound->scorename);
-      /* notify the host that we are opening a file */
-      csoundNotifyFileOpened(csound, csound->scorename, CSFTYPE_SCORE, 0,
-                                     (csound->tempStatus & csScoInMask)!=0);
-      if (!(scorout = fopen(sortedscore, "w")))
-        csoundDie(csound, Str("cannot open %s for writing"), sortedscore);
-      csoundNotifyFileOpened(csound, sortedscore, CSFTYPE_SCORE_OUT, 1,
-                                     (csound->tempStatus & csScoSortMask)!=0);
       csound->Message(csound, Str("sorting score ...\n"));
-      scsort(csound, scorin, scorout);
-      fclose(scorin);
-      fclose(scorout);
+      scsortstr(csound, csound->scorestr);
+      if (csound->keep_tmp) {
+        FILE *ff = fopen("score.srt", "w");
+        fputs(corfile_body(csound->scstr), ff);
+        fclose(ff);
+      }
     }
     if (csound->xfilename != NULL) {            /* optionally extract */
       if (!strcmp(csound->scorename, "score.xtr"))
         csoundDie(csound, Str("cannot extract %s, name conflict"),
-                          csound->scorename);
+                  csound->scorename);
       if (!(xfile = fopen(csound->xfilename, "r")))
         csoundDie(csound, Str("cannot open extract file %s"),csound->xfilename);
       csoundNotifyFileOpened(csound, csound->xfilename,
-                                     CSFTYPE_EXTRACT_PARMS, 0, 0);
+                             CSFTYPE_EXTRACT_PARMS, 0, 0);
       if (!(scorin = fopen(sortedscore, "r")))
         csoundDie(csound, Str("cannot reopen %s"), sortedscore);
       csoundNotifyFileOpened(csound, sortedscore, CSFTYPE_SCORE_OUT,  0,
-                                     (csound->tempStatus & csScoSortMask)!=0);
+                             (csound->tempStatus & csScoSortMask)!=0);
       if (!(scorout = fopen(xtractedscore, "w")))
         csoundDie(csound, Str("cannot open %s for writing"), xtractedscore);
       csoundNotifyFileOpened(csound, xtractedscore, CSFTYPE_SCORE_OUT, 1, 0);
@@ -403,13 +396,11 @@ PUBLIC int csoundCompile(CSOUND *csound, int argc, char **argv)
       fclose(scorin);
       fclose(scorout);
       fclose(xfile);
-      playscore = xtractedscore;
       csound->tempStatus &= ~csPlayScoMask;
     }
     csound->Message(csound, Str("\t... done\n"));
     /* copy sorted score name */
-    O->playscore = (char*) mmalloc(csound, strlen(playscore) + 1);
-    strcpy(O->playscore, playscore);
+    O->playscore = csound->scstr;
     /* IV - Jan 28 2005 */
     print_benchmark_info(csound, Str("end of score sort"));
     if (O->syntaxCheckOnly) {
@@ -426,39 +417,40 @@ PUBLIC int csoundCompile(CSOUND *csound, int argc, char **argv)
       openMIDIout(csound);
 
 #ifdef PARCS
- if (O->numThreads > 1) {
-        int i;
-        THREADINFO *current = NULL;
+    if (O->numThreads > 1) {
+      void csp_barrier_alloc(CSOUND *, pthread_barrier_t **, int);
+      int i;
+      THREADINFO *current = NULL;
 
-        csound->multiThreadedBarrier1 = csound->CreateBarrier(O->numThreads);
-        csound->multiThreadedBarrier2 = csound->CreateBarrier(O->numThreads);
+      csound->multiThreadedBarrier1 = csound->CreateBarrier(O->numThreads);
+      csound->multiThreadedBarrier2 = csound->CreateBarrier(O->numThreads);
 
-        csp_barrier_alloc(csound, &(csound->barrier1), O->numThreads);
-        csp_barrier_alloc(csound, &(csound->barrier2), O->numThreads);
+      csp_barrier_alloc(csound, &(csound->barrier1), O->numThreads);
+      csp_barrier_alloc(csound, &(csound->barrier2), O->numThreads);
 
-        csound->multiThreadedComplete = 0;
+      csound->multiThreadedComplete = 0;
 
-        for(i = 1; i < O->numThreads; i++) {
-            THREADINFO *t = csound->Malloc(csound, sizeof(THREADINFO));
+      for (i = 1; i < O->numThreads; i++) {
+        THREADINFO *t = csound->Malloc(csound, sizeof(THREADINFO));
 
-            t->threadId = csound->CreateThread(&kperfThread, (void *)csound);
-            t->next = NULL;
+        t->threadId = csound->CreateThread(&kperfThread, (void *)csound);
+        t->next = NULL;
 
-            if(current == NULL) {
-                csound->multiThreadedThreadInfo = t;
-            } else {
-                current->next = t;
-            }
-            current = t;
+        if (current == NULL) {
+          csound->multiThreadedThreadInfo = t;
         }
+        else {
+          current->next = t;
+        }
+        current = t;
+      }
 
-        csound->WaitBarrier(csound->barrier2);
+      csound->WaitBarrier(csound->barrier2);
 
-        csp_parallel_compute_spec_setup(csound);
+      csp_parallel_compute_spec_setup(csound);
     }
 #endif
 
 
     return musmon(csound);
 }
-
diff --git a/Top/one_file.c b/Top/one_file.c
index 0c7155a..276ebc1 100644
--- a/Top/one_file.c
+++ b/Top/one_file.c
@@ -22,8 +22,12 @@
 */
 
 #include "csoundCore.h"
+#include <stdlib.h>
+int mkstemp(char *);
 #include <ctype.h>
 #include <errno.h>
+#include "corfile.h"
+
 #if defined(LINUX) || defined(__MACH__) || defined(WIN32)
 #  include <sys/types.h>
 #  include <sys/stat.h>
@@ -57,13 +61,14 @@ typedef struct namelst {
 } NAMELST;
 
 typedef struct {
-    char    buffer[CSD_MAX_LINE_LEN];
     NAMELST *toremove;
     char    orcname[L_tmpnam + 4];
     char    sconame[L_tmpnam + 4];
     char    midname[L_tmpnam + 4];
     int     midiSet;
     int     csdlinecount;
+    char    *orcstr;
+    char    *scostr;
 } ONE_FILE_GLOBALS;
 
 #define ST(x)   (((ONE_FILE_GLOBALS*) csound->oneFileGlobals)->x)
@@ -225,10 +230,11 @@ int readOptions(CSOUND *csound, FILE *unf, int readingCsOptions)
     char  *p;
     int   argc = 0;
     char  *argv[CSD_MAX_ARGS];
+    char    buffer[CSD_MAX_LINE_LEN];
 
     alloc_globals(csound);
-    while (my_fgets(csound, ST(buffer), CSD_MAX_LINE_LEN, unf) != NULL) {
-      p = ST(buffer);
+    while (my_fgets(csound, buffer, CSD_MAX_LINE_LEN, unf) != NULL) {
+      p = buffer;
       /* Remove trailing spaces; rather heavy handed */
       {
         int len = strlen(p)-2;
@@ -289,8 +295,8 @@ int readOptions(CSOUND *csound, FILE *unf, int readingCsOptions)
             if (*p=='*') {
               p++; goto top;
             }
-            my_fgets(csound, ST(buffer), CSD_MAX_LINE_LEN, unf);
-            p = ST(buffer); goto top;
+            my_fgets(csound, buffer, CSD_MAX_LINE_LEN, unf);
+            p = buffer; goto top;
           }
           if (UNLIKELY(argc == CSD_MAX_ARGS))
             csoundDie(csound, Str("More than %d arguments in <CsOptions>"),
@@ -311,10 +317,10 @@ int readOptions(CSOUND *csound, FILE *unf, int readingCsOptions)
       if (UNLIKELY(argc == 0)) {
         if (readingCsOptions)
           csoundErrorMsg(csound, Str("Invalid arguments in <CsOptions>: %s"),
-                         ST(buffer));
+                         buffer);
         else csoundErrorMsg(csound,
                          Str("Invalid arguments in .csoundrc or -@ file: %s"),
-                         ST(buffer));
+                         buffer);
       }
       else argdecode(csound, argc, argv);
     }
@@ -328,30 +334,22 @@ int readOptions(CSOUND *csound, FILE *unf, int readingCsOptions)
 static int createOrchestra(CSOUND *csound, FILE *unf)
 {
     char  *p;
-    FILE  *orcf;
-    void  *fd;
-
-    /* Generate orchestra name */
-    csoundTmpFileName(csound, ST(orcname), ".orc");
-    fd = csoundFileOpenWithType(csound, &orcf, CSFILE_STD, ST(orcname), "w", NULL,
-                                CSFTYPE_ORCHESTRA, 1);
-    csound->tempStatus |= csOrcMask;
-#ifdef _DEBUG
-    csoundMessage(csound, Str("Creating %s (%p)\n"), ST(orcname), orcf);
-#endif
-    if (UNLIKELY(fd == NULL)) {
-      csoundDie(csound, Str("Failed to create %s"), ST(orcname));
-    }
-    csound->orcLineOffset = ST(csdlinecount);
-    while (my_fgets(csound, ST(buffer), CSD_MAX_LINE_LEN, unf)!= NULL) {
-      p = ST(buffer);
+    /* FILE  *orcf; */
+    /* void  *fd; */
+    CORFIL *incore = corfile_create_w();
+    char  buffer[CSD_MAX_LINE_LEN];
+
+    csound->orcLineOffset = ST(csdlinecount)+1;
+    while (my_fgets(csound, buffer, CSD_MAX_LINE_LEN, unf)!= NULL) {
+      p = buffer;
       while (*p == ' ' || *p == '\t') p++;
       if (strstr(p, "</CsInstruments>") == p) {
-        csoundFileClose(csound, fd);
-        add_tmpfile(csound, ST(orcname));           /* IV - Feb 03 2005 */
+        corfile_flush(incore);
+        csound->orchstr = incore;
         return TRUE;
       }
-      else fputs(ST(buffer), orcf);
+      else 
+        corfile_puts(buffer, incore);
     }
     csoundErrorMsg(csound, Str("Missing end tag </CsInstruments>"));
     return FALSE;
@@ -359,32 +357,21 @@ static int createOrchestra(CSOUND *csound, FILE *unf)
 
 static int createScore(CSOUND *csound, FILE *unf)
 {
-    char  *p;
-    FILE  *scof;
-    void  *fd;
-
-    /* Generate score name */
-    csoundTmpFileName(csound, ST(sconame), ".sco");
-    fd = csoundFileOpenWithType(csound, &scof, CSFILE_STD, ST(sconame), "w", NULL,
-                                CSFTYPE_SCORE, 1);
-    csound->tempStatus |= csScoInMask;
-#ifdef _DEBUG
-    csoundMessage(csound, Str("Creating %s (%p)\n"), ST(sconame), scof);
-#endif
-    /* RWD 3:2000 */
-    if (UNLIKELY(fd == NULL))
-      return FALSE;
+    char   *p;
+    CORFIL *incore = corfile_create_w();
+    char   buffer[CSD_MAX_LINE_LEN];
 
     csound->scoLineOffset = ST(csdlinecount);
-    while (my_fgets(csound, ST(buffer), CSD_MAX_LINE_LEN, unf)!= NULL) {
-      p = ST(buffer);
+    while (my_fgets(csound, buffer, CSD_MAX_LINE_LEN, unf)!= NULL) {
+      p = buffer;
       while (*p == ' ' || *p == '\t') p++;
-     if (strstr(p, "</CsScore>") == p) {
-        csoundFileClose(csound, fd);
-        add_tmpfile(csound, ST(sconame));           /* IV - Feb 03 2005 */
+      if (strstr(p, "</CsScore>") == p) {
+        corfile_flush(incore);
+        csound->scorestr = incore;
         return TRUE;
       }
-      else fputs(ST(buffer), scof);
+      else 
+        corfile_puts(buffer, incore);
     }
     csoundErrorMsg(csound, Str("Missing end tag </CsScore>"));
     return FALSE;
@@ -397,6 +384,7 @@ static int createExScore(CSOUND *csound, char *p, FILE *unf)
     char prog[L_tmpnam + 4];
     void *fd;
     FILE  *scof;
+    char    buffer[CSD_MAX_LINE_LEN];
 
     p = strstr(p, "bin=\"");
     if (UNLIKELY(p==NULL)) {
@@ -423,8 +411,8 @@ static int createExScore(CSOUND *csound, char *p, FILE *unf)
       return FALSE;
 
     csound->scoLineOffset = ST(csdlinecount);
-    while (my_fgets(csound, ST(buffer), CSD_MAX_LINE_LEN, unf)!= NULL) {
-      p = ST(buffer);
+    while (my_fgets(csound, buffer, CSD_MAX_LINE_LEN, unf)!= NULL) {
+      p = buffer;
       if (strstr(p, "</CsScore>") == p) {
         char sys[1024];
         csoundFileClose(csound, fd);
@@ -437,52 +425,12 @@ static int createExScore(CSOUND *csound, char *p, FILE *unf)
         add_tmpfile(csound, ST(sconame));           /* IV - Feb 03 2005 */
         return TRUE;
       }
-      else fputs(ST(buffer), scof);
+      else fputs(buffer, scof);
     }
     csoundErrorMsg(csound, Str("Missing end tag </CsScore>"));
     return FALSE;
 }
 
-/* static int createMIDI(CSOUND *csound, FILE *unf) */
-/* { */
-/*     int   size, c; */
-/*     char  *p; */
-/*     FILE  *midf; */
-/*     void  *fd; */
-
-/*     /\* Generate MIDI file name *\/ */
-/*     csoundTmpFileName(csound, ST(midname), ".mid"); */
-/*     fd = csoundFileOpenWithType(csound, &midf, CSFILE_STD, ST(midname), "wb", NULL, */
-/*                                 CSFTYPE_STD_MIDI, 1); */
-/*     if (fd == NULL) { */
-/*       csoundDie(csound, Str("Cannot open temporary file (%s) for MIDI subfile"), */
-/*                         ST(midname)); */
-/*     } */
-/*     csound->tempStatus |= csMidiScoMask; */
-/*     my_fgets(csound, ST(buffer), CSD_MAX_LINE_LEN, unf); */
-/*     if (sscanf(ST(buffer), "Size = %d", &size) == 0) { */
-/*       csoundDie(csound, Str("Error in reading MIDI subfile -- no size read")); */
-/*     } */
-/*     for ( ; size > 0; size--) { */
-/*       c = getc(unf); */
-/*       putc(c, midf); */
-/*     } */
-/*     csoundFileClose(csound, fd); */
-/*     add_tmpfile(csound, ST(midname));               /\* IV - Feb 03 2005 *\/ */
-/*     ST(midiSet) = TRUE; */
-/*     while (TRUE) { */
-/*       if (my_fgets(csound, ST(buffer), CSD_MAX_LINE_LEN, unf)!= NULL) { */
-/*         p = ST(buffer); */
-/*         while (*p == ' ' || *p == '\t') p++; */
-/*         if (strstr(p, "</CsMidifile>") == p) { */
-/*           return TRUE; */
-/*         } */
-/*       } */
-/*     } */
-/*     csoundErrorMsg(csound, Str("Missing end tag </CsMidifile>")); */
-/*     return FALSE; */
-/* } */
-
 static void read_base64(CSOUND *csound, FILE *in, FILE *out)
 {
     int c;
@@ -545,6 +493,7 @@ static int createMIDI2(CSOUND *csound, FILE *unf)
     char  *p;
     FILE  *midf;
     void  *fd;
+    char  buffer[CSD_MAX_LINE_LEN];
 
     /* Generate MIDI file name */
     csoundTmpFileName(csound, ST(midname), ".mid");
@@ -560,8 +509,8 @@ static int createMIDI2(CSOUND *csound, FILE *unf)
     add_tmpfile(csound, ST(midname));               /* IV - Feb 03 2005 */
     ST(midiSet) = TRUE;
     while (TRUE) {
-      if (my_fgets(csound, ST(buffer), CSD_MAX_LINE_LEN, unf)!= NULL) {
-        p = ST(buffer);
+      if (my_fgets(csound, buffer, CSD_MAX_LINE_LEN, unf)!= NULL) {
+        p = buffer;
         while (*p == ' ' || *p == '\t') p++;
         if (strstr(p, "</CsMidifileB>") == p) {
           return TRUE;
@@ -578,8 +527,9 @@ static int createSample(CSOUND *csound, FILE *unf)
     FILE  *smpf;
     void  *fd;
     char  sampname[256];
+    char  buffer[CSD_MAX_LINE_LEN];
 
-    sscanf(ST(buffer), "<CsSampleB filename=\"%d\">", &num);
+    sscanf(buffer, "<CsSampleB filename=\"%d\">", &num);
     sprintf(sampname, "soundin.%d", num);
     if (UNLIKELY((smpf = fopen(sampname, "rb")) != NULL)) {
       fclose(smpf);
@@ -594,8 +544,8 @@ static int createSample(CSOUND *csound, FILE *unf)
     csoundFileClose(csound, fd);
     add_tmpfile(csound, sampname);              /* IV - Feb 03 2005 */
     while (TRUE) {
-      if (my_fgets(csound, ST(buffer), CSD_MAX_LINE_LEN, unf)!= NULL) {
-        char *p = ST(buffer);
+      if (my_fgets(csound, buffer, CSD_MAX_LINE_LEN, unf)!= NULL) {
+        char *p = buffer;
         while (*p == ' ' || *p == '\t') p++;
         if (strstr(p, "</CsSampleB>") == p) {
           return TRUE;
@@ -611,7 +561,8 @@ static int createFile(CSOUND *csound, FILE *unf)
     FILE  *smpf;
     void  *fd;
     char  filename[256];
-    char *p = ST(buffer), *q;
+    char  buffer[CSD_MAX_LINE_LEN];
+    char *p = buffer, *q;
 
     filename[0] = '\0';
 
@@ -624,7 +575,7 @@ static int createFile(CSOUND *csound, FILE *unf)
     if (q) *q='\0';
     //  printf("p=>>%s<<\n", p);
     strcpy(filename, p);
-//sscanf(ST(buffer), "<CsFileB filename=\"%s\">", filename);
+//sscanf(buffer, "<CsFileB filename=\"%s\">", filename);
 //    if (filename[0] != '\0' &&
 //       filename[strlen(filename) - 1] == '>' && filename[strlen(filename) - 2] == '"')
 //    filename[strlen(filename) - 2] = '\0';
@@ -642,8 +593,8 @@ static int createFile(CSOUND *csound, FILE *unf)
     add_tmpfile(csound, filename);              /* IV - Feb 03 2005 */
 
     while (TRUE) {
-      if (my_fgets(csound, ST(buffer), CSD_MAX_LINE_LEN, unf)!= NULL) {
-        char *p = ST(buffer);
+      if (my_fgets(csound, buffer, CSD_MAX_LINE_LEN, unf)!= NULL) {
+        char *p = buffer;
         while (*p == ' ' || *p == '\t') p++;
         if (strstr(p, "</CsFileB>") == p) {
           return TRUE;
@@ -660,9 +611,10 @@ static int checkVersion(CSOUND *csound, FILE *unf)
     int   major = 0, minor = 0;
     int   result = TRUE;
     int   version = csoundGetVersion();
+    char  buffer[CSD_MAX_LINE_LEN];
 
-    while (my_fgets(csound, ST(buffer), CSD_MAX_LINE_LEN, unf) != NULL) {
-      p = ST(buffer);
+    while (my_fgets(csound, buffer, CSD_MAX_LINE_LEN, unf) != NULL) {
+      p = buffer;
       while (*p == ' ' || *p == '\t') p++;
       if (strstr(p, "</CsVersion>") != NULL)
         return result;
@@ -698,11 +650,12 @@ static int checkLicence(CSOUND *csound, FILE *unf)
 {
     char  *p, *licence;
     int   len = 1;
+    char  buffer[CSD_MAX_LINE_LEN];
 
     csoundMessage(csound, Str("**** Licence Information ****\n"));
     licence = (char*) mcalloc(csound, len);
-    while (my_fgets(csound, ST(buffer), CSD_MAX_LINE_LEN, unf) != NULL) {
-      p = ST(buffer);
+    while (my_fgets(csound, buffer, CSD_MAX_LINE_LEN, unf) != NULL) {
+      p = buffer;
       if (strstr(p, "</CsLicence>") != NULL ||
           strstr(p, "</CsLicense>") != NULL) {
         csoundMessage(csound, Str("**** End of Licence Information ****\n"));
@@ -720,10 +673,10 @@ static int checkLicence(CSOUND *csound, FILE *unf)
     return FALSE;
 }
 
-static int blank_buffer(CSOUND *csound)
+static int blank_buffer(CSOUND *csound, char *buffer)
 {
     const char *s;
-    for (s = &(ST(buffer)[0]); *s != '\0' && *s != '\n'; s++) {
+    for (s = &(buffer[0]); *s != '\0' && *s != '\n'; s++) {
       if (*s == ';')
         return TRUE;
       if (*s != ' ' && *s != '\t')
@@ -740,6 +693,7 @@ int read_unified_file(CSOUND *csound, char **pname, char **score)
     int   result = TRUE;
     int   started = FALSE;
     int   r;
+    char    buffer[CSD_MAX_LINE_LEN];
 
     /* Need to open in binary to deal with MIDI and the like. */
     fd = csoundFileOpenWithType(csound, &unf, CSFILE_STD, name, "rb", NULL,
@@ -756,8 +710,8 @@ int read_unified_file(CSOUND *csound, char **pname, char **score)
 #ifdef _DEBUG
     csoundMessage(csound, "Calling unified file system with %s\n", name);
 #endif
-    while (my_fgets(csound, ST(buffer), CSD_MAX_LINE_LEN, unf)) {
-      char *p = ST(buffer);
+    while (my_fgets(csound, buffer, CSD_MAX_LINE_LEN, unf)) {
+      char *p = buffer;
       while (*p == ' ' || *p == '\t') p++;
       if (strstr(p, "<CsoundSynthesizer>") == p ||
           strstr(p, "<CsoundSynthesiser>") == p) {
@@ -785,13 +739,13 @@ int read_unified_file(CSOUND *csound, char **pname, char **score)
         else {
           csoundMessage(csound, Str("Skipping <CsOptions>\n"));
           do {
-            if (UNLIKELY(my_fgets(csound, ST(buffer),
+            if (UNLIKELY(my_fgets(csound, buffer,
                                   CSD_MAX_LINE_LEN, unf) == NULL)) {
               csoundErrorMsg(csound, Str("Missing end tag </CsOptions>"));
               result = FALSE;
               break;
             }
-            p = ST(buffer);
+            p = buffer;
             while (*p == ' ' || *p == '\t') p++;
           } while (strstr(p, "</CsOptions>") != p);
         }
@@ -834,9 +788,9 @@ int read_unified_file(CSOUND *csound, char **pname, char **score)
         r = checkLicence(csound, unf);
         result = r && result;
       }
-      else if (blank_buffer(csound)) continue;
-      else if (started && strchr(p, '<') == ST(buffer)) {
-        csoundMessage(csound, Str("unknown CSD tag: %s\n"), ST(buffer));
+      else if (blank_buffer(csound, buffer)) continue;
+      else if (started && strchr(p, '<') == buffer){ 
+        csoundMessage(csound, Str("unknown CSD tag: %s\n"), buffer);
       }
     }
       if (UNLIKELY(!started)) {
diff --git a/Top/threads.c b/Top/threads.c
index ea547e6..32d7b19 100644
--- a/Top/threads.c
+++ b/Top/threads.c
@@ -224,7 +224,7 @@ PUBLIC uintptr_t csoundJoinThread(void *thread)
     }
 }
 
-#if defined(LINUX) || defined(WIN32)
+#if !defined(ANDROID) && (defined(LINUX) || defined(WIN32))
 
 PUBLIC void *csoundCreateThreadLock(void)
 {
diff --git a/all_string_files b/all_string_files
index 27dcc0c..aae4bcd 100644
--- a/all_string_files
+++ b/all_string_files
@@ -1,14 +1,13 @@
 ./Engine/auxfd.c
 ./Engine/cfgvar.c
+./Engine/corfiles.c
 ./Engine/csound_orc_compile.c
 ./Engine/csound_orc_expressions.c
-./Engine/csound_orclex.c
 ./Engine/csound_orc_optimize.c
-./Engine/csound_orcparse.c
-./Engine/csound_orcparse.h
 ./Engine/csound_orc_semantics.c
 ./Engine/cs_par_base.c
 ./Engine/cs_par_dispatch.c
+./Engine/cs_par_orc_semantic_analysis.c
 ./Engine/entry1.c
 ./Engine/envvar.c
 ./Engine/express.c
@@ -22,6 +21,7 @@
 ./Engine/namedins.c
 ./Engine/new_orc_parser.c
 ./Engine/otran.c
+./Engine/parse_param.h
 ./Engine/rdorch.c
 ./Engine/rdscor.c
 ./Engine/scsort.c
@@ -29,6 +29,7 @@
 ./Engine/sort.c
 ./Engine/sread.c
 ./Engine/swrite.c
+./Engine/swritestr.c
 ./Engine/symbtab.c
 ./Engine/twarp.c
 ./Engine/typetabl.h
@@ -163,6 +164,7 @@
 ./H/cfgvar.h
 ./H/cmath.h
 ./H/convolve.h
+./H/corfile.h
 ./H/cscore.h
 ./H/csdl.h
 ./H/csGblMtx.h
@@ -224,6 +226,7 @@
 ./H/windin.h
 ./H/winEPS.h
 ./InOut/FL_graph.cpp
+./InOut/cmidi.c
 ./InOut/libsnd.c
 ./InOut/libsnd_u.c
 ./InOut/midifile.c
@@ -231,11 +234,20 @@
 ./InOut/midisend.c
 ./InOut/pmidi.c
 ./InOut/rtalsa.c
+./InOut/rtauhal.c
 ./InOut/rtcoreaudio.c
 ./InOut/rtjack.c
 ./InOut/rtpa.c
 ./InOut/rtpulse.c
 ./InOut/rtwinmm.c
+./InOut/widgets.h
+./InOut/widglobals.h
+./InOut/winascii.c
+./InOut/windin.c
+./InOut/window.c
+./InOut/winEPS.c
+./InOut/winFLTK.c
+./InOut/winFLTK.h
 ./InOut/virtual_keyboard/Bank.cpp
 ./InOut/virtual_keyboard/Bank.hpp
 ./InOut/virtual_keyboard/FLTKKeyboard.cpp
@@ -253,15 +265,6 @@
 ./InOut/virtual_keyboard/SliderData.cpp
 ./InOut/virtual_keyboard/SliderData.hpp
 ./InOut/virtual_keyboard/virtual_keyboard.cpp
-./InOut/widgets.cpp
-./InOut/widgets.h
-./InOut/widglobals.h
-./InOut/winascii.c
-./InOut/windin.c
-./InOut/window.c
-./InOut/winEPS.c
-./InOut/winFLTK.c
-./InOut/winFLTK.h
 ./interfaces/CppSound.cpp
 ./interfaces/CppSound.hpp
 ./interfaces/cs_glue.cpp
@@ -391,6 +394,8 @@
 ./Opcodes/hrtferX.c
 ./Opcodes/hrtferx.h
 ./Opcodes/hrtfopcodes.c
+./Opcodes/hrtfearly.c
+./Opcodes/hrtfreverb.c
 ./Opcodes/ifd.c
 ./Opcodes/imageOpcodes.c
 ./Opcodes/imageOpcodes.h
@@ -504,7 +509,6 @@
 ./Opcodes/sndwarp.h
 ./Opcodes/sockrecv.c
 ./Opcodes/socksend.c
-./Opcodes/socksend.old.c
 ./Opcodes/space.c
 ./Opcodes/space_cm.c
 ./Opcodes/space.h
diff --git a/cleanup.sh b/cleanup.sh
index 78693e3..356b951 100755
--- a/cleanup.sh
+++ b/cleanup.sh
@@ -16,8 +16,7 @@ fi
 "$0" remove ".sconf_temp"
 "$0" remove "config.log"
 
-patterns='*.xmg *.o *.os *.so *.a *.wav *.aif* *.sf *.pcm *.exe *.dll
-*.obj *.lib *.class'
+patterns='*.xmg *.o *.os *.so *.a *.wav *.aif* *.sf *.pcm *.exe *.dll *.obj *.lib *.class'
 findexpr='-iname .scons*'
 for pat in $patterns; do
 	findexpr="$findexpr -o -iname $pat"
@@ -43,8 +42,7 @@ find . -type f $findexpr -exec "$0" remove '{}'  \;
 find "./interfaces" -type f -iname "*.java" -exec "$0" remove '{}' \;
 #find "./interfaces" -type f -iname "*.class" -exec "$0" remove '{}' \;
 
-notexecpatterns="*.cpp *.cxx *.h *.hpp *.fl *.i *.csd *.py *.sh *.sco *.orc
-	*.txt *.tcl"
+notexecpatterns="*.cpp *.cxx *.h *.hpp *.fl *.i *.csd *.py *.sh *.sco *.orc *.txt *.tcl"
 notexecexpr="-iname *.c"
 for pat in $notexecpatterns; do
 	notexecexpr="$notexecexpr -o -iname $pat"
diff --git a/frontends/CsoundAC/Counterpoint.cpp b/frontends/CsoundAC/Counterpoint.cpp
index cd44e00..137128c 100644
--- a/frontends/CsoundAC/Counterpoint.cpp
+++ b/frontends/CsoundAC/Counterpoint.cpp
@@ -97,13 +97,13 @@ void Counterpoint::toCsoundScore(std::string filename, double secondsPerPulse)
           key = double(Ctrpt(note,voice));
           sprintf(buffer, "i %d %-1.7g %-1.7g %-1.7g %-1.7g %-1.7g %-1.7g %-1.7g %-1.7g %-1.7g\n",
                   (int)(voice + 1), time, duration, key, velocity, phase, x, y, z, pcs);
-          fprintf(stderr, buffer);
+          fprintf(stderr, "%s", buffer);
           stream << buffer;
           totalnotes++;
         }
     }
   sprintf(buffer, "; Total notes = %d\n", totalnotes);
-  fprintf(stderr, buffer);
+  fprintf(stderr, "%s", buffer);
   stream << buffer;
 }
 
diff --git a/frontends/CsoundAC/System.cpp b/frontends/CsoundAC/System.cpp
index d5721d5..ac5fab9 100644
--- a/frontends/CsoundAC/System.cpp
+++ b/frontends/CsoundAC/System.cpp
@@ -44,7 +44,7 @@ namespace csound
 
   void Logger::write(const char *text)
   {
-    fprintf(stderr, text);
+    fprintf(stderr, "%s", text);
   }
 
   ThreadLock::ThreadLock() : lock(0)
diff --git a/frontends/cscore/cscoremain.c b/frontends/cscore/cscoremain.c
index 728b6c1..d0c5aac 100644
--- a/frontends/cscore/cscoremain.c
+++ b/frontends/cscore/cscoremain.c
@@ -35,11 +35,13 @@ extern void cscore(CSOUND*);
 
    Use this command (or your system's equivalent) to compile:
 
-     gcc mycscore.c cscoremain.c -o cscore -lcsound -L/usr/local/lib -I/usr/local/include/csound
+     gcc mycscore.c cscoremain.c -o cscore -lcsound -L/usr/local/lib \
+         -I/usr/local/include/csound
 
    On Mac OS X, use this command to compile:
 
-     gcc mycscore.c cscoremain.c -o cscore -framework CsoundLib -I/Library/Frameworks/CsoundLib.framework/Headers
+     gcc mycscore.c cscoremain.c -o cscore -framework CsoundLib \
+         -I/Library/Frameworks/CsoundLib.framework/Headers
 
    The resulting executable can be run with:
 
@@ -69,7 +71,8 @@ int main(int argc, char **argv)
 
     /* open the command line scorein file */
     if (argc < 2) {
-      fprintf(stderr, "Insufficient arguments: must provide an input filename.\n");
+      fprintf(stderr,
+              "Insufficient arguments: must provide an input filename.\n");
       return -1;
     }
     if (!(insco = fopen(argv[1], "r"))) {
diff --git a/frontends/cseditor/cseditor.cxx b/frontends/cseditor/cseditor.cxx
index 5034996..1ff9ba2 100644
--- a/frontends/cseditor/cseditor.cxx
+++ b/frontends/cseditor/cseditor.cxx
@@ -53,15 +53,15 @@ Fl_Text_Buffer     *textbuf = 0;
 // Syntax highlighting stuff...
 Fl_Text_Buffer     *stylebuf = 0;
 Fl_Text_Display::Style_Table_Entry
-                  styletable[] = {      // Style table
-                     { FL_BLACK,      FL_COURIER,        14 }, // A - Plain
-                     { FL_DARK_GREEN, FL_COURIER_ITALIC, 14 }, // B - Line comments
-                     { FL_DARK_GREEN, FL_COURIER_ITALIC, 14 }, // C - Block comments
-                     { FL_RED,        FL_COURIER,        14 }, // D - Strings
-                     { FL_DARK_RED,   FL_COURIER,        14 }, // E - Directives
-                     { FL_DARK_RED,   FL_COURIER_BOLD,   14 }, // F - Types
-                     { FL_BLUE,       FL_COURIER_BOLD,   14 }  // G - Keywords
-                   };
+styletable[] = {      // Style table
+                 { FL_BLACK,      FL_COURIER,        14 }, // A - Plain
+                 { FL_DARK_GREEN, FL_COURIER_ITALIC, 14 }, // B - Line comments
+                 { FL_DARK_GREEN, FL_COURIER_ITALIC, 14 }, // C - Block comments
+                 { FL_RED,        FL_COURIER,        14 }, // D - Strings
+                 { FL_DARK_RED,   FL_COURIER,        14 }, // E - Directives
+                 { FL_DARK_RED,   FL_COURIER_BOLD,   14 }, // F - Types
+                 { FL_BLUE,       FL_COURIER_BOLD,   14 }  // G - Keywords
+};
 
 const char         *code_keywords[] = { // List of known C/C++ keywords...
             "ATSadd",
@@ -203,7 +203,7 @@ const char         *code_keywords[] = { // List of known C/C++ keywords...
             "cpuprc",
             "cross2",
             "crunch",
-                "ctrl",
+            "ctrl",
             "ctrl7",
             "ctrl14",
             "ctrl21",
@@ -249,7 +249,7 @@ const char         *code_keywords[] = { // List of known C/C++ keywords...
             "event_i",
             "exitnow",
             "exp",
-                "expcurve",
+            "expcurve",
             "expon",
             "exprand",
             "expseg",
@@ -315,7 +315,7 @@ const char         *code_keywords[] = { // List of known C/C++ keywords...
             "ftsavek",
             "ftsr",
             "gain",
-                "gainslider",
+            "gainslider",
             "gauss",
             "gbuzz",
             "getcfg",
@@ -369,7 +369,7 @@ const char         *code_keywords[] = { // List of known C/C++ keywords...
             "log",
             "log10",
             "logbtwo",
-                "logcurve",
+            "logcurve",
             "loop_ge",
             "loop_gt",
             "loop_le",
@@ -440,12 +440,12 @@ const char         *code_keywords[] = { // List of known C/C++ keywords...
             "minaccum",
             "mirror",
             "mod",
-                "mode",
+            "mode",
             "monitor",
             "moog",
             "moogladder",
             "moogvcf",
-                "moogvcf2",
+            "moogvcf2",
             "moscil",
             "mpulse",
             "mrtmsg",
@@ -569,30 +569,30 @@ const char         *code_keywords[] = { // List of known C/C++ keywords...
             "pvsadsyn",
             "pvsanal",
             "pvsarp",
-                "pvsbin",
+            "pvsbin",
             "pvsblur",
             "pvscale",
             "pvscent",
             "pvscross",
             "pvsdemix",
-                "pvsdisp",
+            "pvsdisp",
             "pvsfilter",
             "pvsfread",
             "pvsfreeze",
             "pvsftr",
             "pvsftw",
-                "pvsfwrite",
+            "pvsfwrite",
             "pvshift",
             "pvsifd",
-                "pvsin",
+            "pvsin",
             "pvsinfo",
             "pvsinit",
             "pvsmaska",
             "pvsmix",
             "pvsmooth",
-                "pvsosc",
-                "pvsout",
-                "pvspitch",
+            "pvsosc",
+            "pvsout",
+            "pvspitch",
             "pvstencil",
             "pvsvoc",
             "pvsynth",
@@ -719,7 +719,7 @@ const char         *code_keywords[] = { // List of known C/C++ keywords...
             "s32b14",
             "samphold",
             "sandpaper",
-                "scale",
+            "scale",
             "scanhammer",
             "scans",
             "scantable",
@@ -930,12 +930,12 @@ const char         *code_keywords[] = { // List of known C/C++ keywords...
             "upsamp",
             "urd",
             "vadd",
-                "vadd_i",
+            "vadd_i",
             "vaddv",
-                "vaddv_i",
-                "vaget",
+            "vaddv_i",
+            "vaget",
             "valpass",
-                "vaset",
+            "vaset",
             "vbap16",
             "vbap16move",
             "vbap4",
@@ -1100,19 +1100,19 @@ const char         *code_types[] = {     // csd tags
                    "FLvalue",
                    "ctrlinit",
                    "else",
-               "elseif",
+                   "elseif",
                    "endif",
-           "ftgen",
+                   "ftgen",
                    "if",
-           "kr",
-           "ksmps",
-           "massign",
-           "nchnls",
-           "pgmassign",
-           "pset",
-           "seed",
-           "sr",
-           "strset",
+                   "kr",
+                   "ksmps",
+                   "massign",
+                   "nchnls",
+                   "pgmassign",
+                   "pset",
+                   "seed",
+                   "sr",
+                   "strset",
                    "then"
                    };
 
@@ -1122,11 +1122,11 @@ const char         *code_types[] = {     // csd tags
 //
 
 extern "C" {
- int
- compare_keywords(const void *a,
-                  const void *b) {
-   return (strcmp(*((const char **)a), *((const char **)b)));
- }
+  int
+  compare_keywords(const void *a,
+                   const void *b) {
+      return (strcmp(*((const char **)a), *((const char **)b)));
+  }
 }
 
 //
@@ -1135,14 +1135,13 @@ extern "C" {
 
 void
 style_parse(const char *text,
-           char       *style,
+            char       *style,
             int        length) {
- char        current;
- int         col;
- int         last;
- char        buf[255],
-            *bufptr;
- const char *temp;
+    char        current;
+    int         col;
+    int         last;
+    char        buf[255], *bufptr;
+    const char *temp;
 
  // Style letters:
  //
@@ -1154,34 +1153,37 @@ style_parse(const char *text,
  // F - Types
  // G - Keywords
 
- for (current = *style, col = 0, last = 0; length > 0; length --, text ++) {
-   if (current == 'B' || current == 'F' || current == 'G') current = 'A';
-   if (current == 'A') {
-     // Check for directives, comments, strings, and keywords...
-     if (col == 0 && (*text == '#' || *text == '<')) {
-       // Set style to directive
-       current = 'E';
-     } else if (strncmp(text, ";", 1) == 0) {
-       current = 'B';
-        for (; length > 0 && *text != '\n'; length --, text ++) *style++ = 'B';
-
-       if (length == 0) break;
-     } else if (strncmp(text, "/*", 2) == 0) {
-       current = 'C';
-     } else if (strncmp(text, "\\\"", 2) == 0) {
-       // Quoted quote...
-        *style++ = current;
-        *style++ = current;
-        text ++;
-        length --;
-        col += 2;
-        continue;
-     } else if (*text == '\"') {
-       current = 'D';
-     } else if (!last && (( islower(*text) || isupper(*text) ) || *text == '_')) {
-       // Might be a keyword...
-        for (temp = text, bufptr = buf;
-             (( islower(*temp) || isupper(*temp) ) || *temp == '_') && bufptr < (buf + sizeof(buf) - 1);
+   for (current = *style, col = 0, last = 0; length > 0; length --, text ++) {
+     if (current == 'B' || current == 'F' || current == 'G') current = 'A';
+     if (current == 'A') {
+       // Check for directives, comments, strings, and keywords...
+       if (col == 0 && (*text == '#' || *text == '<')) {
+         // Set style to directive
+         current = 'E';
+       } else if (strncmp(text, ";", 1) == 0) {
+         current = 'B';
+         for (; length > 0 && *text != '\n'; length --, text ++) *style++ = 'B';
+
+         if (length == 0) break;
+       } else if (strncmp(text, "/*", 2) == 0) {
+         current = 'C';
+       } else if (strncmp(text, "\\\"", 2) == 0) {
+         // Quoted quote...
+         *style++ = current;
+         *style++ = current;
+         text ++;
+         length --;
+         col += 2;
+         continue;
+       } else if (*text == '\"') {
+         current = 'D';
+       } else if (!last && (( islower(*text) || isupper(*text) ) ||
+                            *text == '_')) {
+         // Might be a keyword...
+         for (temp = text, bufptr = buf;
+              (( islower(*temp)   ||
+                 isupper(*temp) ) ||
+               *temp == '_') && bufptr < (buf + sizeof(buf) - 1);
              *bufptr++ = *temp++);
 
        if (!( islower(*temp) || isupper(*temp) ) && *temp != '_') {
@@ -1270,20 +1272,20 @@ style_parse(const char *text,
 
 void
 style_init(void) {
- char *style = new char[textbuf->length() + 1];
- char *text = textbuf->text();
+    char *style = new char[textbuf->length() + 1];
+    char *text = textbuf->text();
 
 
- memset(style, 'A', textbuf->length());
- style[textbuf->length()] = '\0';
+    memset(style, 'A', textbuf->length());
+    style[textbuf->length()] = '\0';
 
- if (!stylebuf) stylebuf = new Fl_Text_Buffer(textbuf->length());
+    if (!stylebuf) stylebuf = new Fl_Text_Buffer(textbuf->length());
 
- style_parse(text, style, textbuf->length());
+    style_parse(text, style, textbuf->length());
 
- stylebuf->text(style);
- delete[] style;
- free(text);
+    stylebuf->text(style);
+    delete[] style;
+    free(text);
 }
 
 
@@ -1302,88 +1304,88 @@ style_unfinished_cb(int, void*) {
 
 void
 style_update(int        pos,            // I - Position of update
-            int        nInserted,       // I - Number of inserted chars
+             int        nInserted,       // I - Number of inserted chars
              int        nDeleted,       // I - Number of deleted chars
-            int        /*nRestyled*/,   // I - Number of restyled chars
+             int        /*nRestyled*/,   // I - Number of restyled chars
              const char * /*deletedText*/,// I - Text that was deleted
-            void       *cbArg) {        // I - Callback data
- int    start,                          // Start of text
-        end;                            // End of text
- char   last,                           // Last style on line
-        *style,                         // Style data
-        *text;                          // Text data
+             void       *cbArg) {        // I - Callback data
+    int    start,                          // Start of text
+           end;                            // End of text
+    char   last,                           // Last style on line
+           *style,                         // Style data
+           *text;                          // Text data
 
 
  // If this is just a selection change, just unselect the style buffer...
- if (nInserted == 0 && nDeleted == 0) {
-   stylebuf->unselect();
-   return;
- }
-
- // Track changes in the text buffer...
- if (nInserted > 0) {
-   // Insert characters into the style buffer...
-   style = new char[nInserted + 1];
-   memset(style, 'A', nInserted);
-   style[nInserted] = '\0';
-
-   stylebuf->replace(pos, pos + nDeleted, style);
-   delete[] style;
- } else {
-   // Just delete characters in the style buffer...
-   stylebuf->remove(pos, pos + nDeleted);
- }
-
- // Select the area that was just updated to avoid unnecessary
- // callbacks...
- stylebuf->select(pos, pos + nInserted - nDeleted);
-
- // Re-parse the changed region; we do this by parsing from the
- // beginning of the previous line of the changed region to the end of
- // the line of the changed region...  Then we check the last
- // style character and keep updating if we have a multi-line
- // comment character...
- start = textbuf->line_start(pos);
-//  if (start > 0) start = textbuf->line_start(start - 1);
- end   = textbuf->line_end(pos + nInserted);
- text  = textbuf->text_range(start, end);
- style = stylebuf->text_range(start, end);
- if (start==end)
-   last = 0;
- else
-   last  = style[end - start - 1];
+    if (nInserted == 0 && nDeleted == 0) {
+      stylebuf->unselect();
+      return;
+    }
+
+    // Track changes in the text buffer...
+    if (nInserted > 0) {
+      // Insert characters into the style buffer...
+      style = new char[nInserted + 1];
+      memset(style, 'A', nInserted);
+      style[nInserted] = '\0';
+
+      stylebuf->replace(pos, pos + nDeleted, style);
+      delete[] style;
+    } else {
+      // Just delete characters in the style buffer...
+      stylebuf->remove(pos, pos + nDeleted);
+    }
+
+    // Select the area that was just updated to avoid unnecessary
+    // callbacks...
+    stylebuf->select(pos, pos + nInserted - nDeleted);
+
+    // Re-parse the changed region; we do this by parsing from the
+    // beginning of the previous line of the changed region to the end of
+    // the line of the changed region...  Then we check the last
+    // style character and keep updating if we have a multi-line
+    // comment character...
+    start = textbuf->line_start(pos);
+    //  if (start > 0) start = textbuf->line_start(start - 1);
+    end   = textbuf->line_end(pos + nInserted);
+    text  = textbuf->text_range(start, end);
+    style = stylebuf->text_range(start, end);
+    if (start==end)
+      last = 0;
+    else
+      last  = style[end - start - 1];
 
 //  printf("start = %d, end = %d, text = \"%s\", style = \"%s\", last='%c'...\n",
 //         start, end, text, style, last);
 
- style_parse(text, style, end - start);
+    style_parse(text, style, end - start);
 
 //  printf("new style = \"%s\", new last='%c'...\n",
 //         style, style[end - start - 1]);
 
- stylebuf->replace(start, end, style);
- ((Fl_Text_Editor *)cbArg)->redisplay_range(start, end);
+    stylebuf->replace(start, end, style);
+    ((Fl_Text_Editor *)cbArg)->redisplay_range(start, end);
 
- if (start==end || last != style[end - start - 1]) {
+    if (start==end || last != style[end - start - 1]) {
 //    printf("Recalculate the rest of the buffer style\n");
    // Either the user deleted some text, or the last character
    // on the line changed styles, so reparse the
    // remainder of the buffer...
-   free(text);
-   free(style);
+      free(text);
+      free(style);
 
-   end   = textbuf->length();
-   text  = textbuf->text_range(start, end);
-   style = stylebuf->text_range(start, end);
+      end   = textbuf->length();
+      text  = textbuf->text_range(start, end);
+      style = stylebuf->text_range(start, end);
 
-   style_parse(text, style, end - start);
+      style_parse(text, style, end - start);
 
-   stylebuf->replace(start, end, style);
-   ((Fl_Text_Editor *)cbArg)->redisplay_range(start, end);
- }
+      stylebuf->replace(start, end, style);
+      ((Fl_Text_Editor *)cbArg)->redisplay_range(start, end);
+    }
 
- free(text);
- free(style);
+    free(text);
+    free(style);
 }
 
 
@@ -1396,369 +1398,369 @@ void replace2_cb(Fl_Widget*, void*);
 void replcan_cb(Fl_Widget*, void*);
 
 class EditorWindow : public Fl_Double_Window {
- public:
-   EditorWindow(int w, int h, const char* t);
-   ~EditorWindow();
-
-   Fl_Window          *replace_dlg;
-   Fl_Input           *replace_find;
-   Fl_Input           *replace_with;
-   Fl_Button          *replace_all;
-   Fl_Return_Button   *replace_next;
-   Fl_Button          *replace_cancel;
-
-   Fl_Text_Editor     *editor;
-   char               search[256];
+public:
+  EditorWindow(int w, int h, const char* t);
+  ~EditorWindow();
+
+  Fl_Window          *replace_dlg;
+  Fl_Input           *replace_find;
+  Fl_Input           *replace_with;
+  Fl_Button          *replace_all;
+  Fl_Return_Button   *replace_next;
+  Fl_Button          *replace_cancel;
+
+  Fl_Text_Editor     *editor;
+  char               search[256];
 };
 
 EditorWindow::EditorWindow(int w, int h, const char* t) :
-Fl_Double_Window(w, h, t) {
- replace_dlg = new Fl_Window(300, 105, "Replace");
-   replace_find = new Fl_Input(80, 10, 210, 25, "Find:");
-   replace_find->align(FL_ALIGN_LEFT);
-
-   replace_with = new Fl_Input(80, 40, 210, 25, "Replace:");
-   replace_with->align(FL_ALIGN_LEFT);
-
-   replace_all = new Fl_Button(10, 70, 90, 25, "Replace All");
-   replace_all->callback((Fl_Callback *)replall_cb, this);
-
-   replace_next = new Fl_Return_Button(105, 70, 120, 25, "Replace Next");
-   replace_next->callback((Fl_Callback *)replace2_cb, this);
-
-   replace_cancel = new Fl_Button(230, 70, 60, 25, "Cancel");
-   replace_cancel->callback((Fl_Callback *)replcan_cb, this);
- replace_dlg->end();
- replace_dlg->set_non_modal();
- editor = 0;
- *search = (char)0;
+  Fl_Double_Window(w, h, t) {
+    replace_dlg = new Fl_Window(300, 105, "Replace");
+    replace_find = new Fl_Input(80, 10, 210, 25, "Find:");
+    replace_find->align(FL_ALIGN_LEFT);
+
+    replace_with = new Fl_Input(80, 40, 210, 25, "Replace:");
+    replace_with->align(FL_ALIGN_LEFT);
+
+    replace_all = new Fl_Button(10, 70, 90, 25, "Replace All");
+    replace_all->callback((Fl_Callback *)replall_cb, this);
+
+    replace_next = new Fl_Return_Button(105, 70, 120, 25, "Replace Next");
+    replace_next->callback((Fl_Callback *)replace2_cb, this);
+
+    replace_cancel = new Fl_Button(230, 70, 60, 25, "Cancel");
+    replace_cancel->callback((Fl_Callback *)replcan_cb, this);
+    replace_dlg->end();
+    replace_dlg->set_non_modal();
+    editor = 0;
+    *search = (char)0;
 }
 
 EditorWindow::~EditorWindow() {
- delete replace_dlg;
+    delete replace_dlg;
 }
 
 int check_save(void) {
- if (!changed) return 1;
+    if (!changed) return 1;
 
- int r = fl_choice("The current file has not been saved.\n"
-                   "Would you like to save it now?",
-                   "Cancel", "Save", "Don't Save");
+    int r = fl_choice("The current file has not been saved.\n"
+                      "Would you like to save it now?",
+                      "Cancel", "Save", "Don't Save");
 
- if (r == 1) {
-   save_cb(); // Save the file...
-   return !changed;
- }
+    if (r == 1) {
+      save_cb(); // Save the file...
+      return !changed;
+    }
 
- return (r == 2) ? 1 : 0;
+    return (r == 2) ? 1 : 0;
 }
 
 int loading = 0;
 void load_file(char *newfile, int ipos) {
- loading = 1;
- int insert = (ipos != -1);
- changed = insert;
- if (!insert) strcpy(filename, "");
- int r;
- if (!insert) r = textbuf->loadfile(newfile);
- else r = textbuf->insertfile(newfile, ipos);
- if (r)
-   fl_alert("Error reading from file \'%s\':\n%s.", newfile, strerror(errno));
- else
-   if (!insert) strcpy(filename, newfile);
- loading = 0;
- textbuf->call_modify_callbacks();
+    loading = 1;
+    int insert = (ipos != -1);
+    changed = insert;
+    if (!insert) strcpy(filename, "");
+    int r;
+    if (!insert) r = textbuf->loadfile(newfile);
+    else r = textbuf->insertfile(newfile, ipos);
+    if (r)
+      fl_alert("Error reading from file \'%s\':\n%s.", newfile, strerror(errno));
+    else
+      if (!insert) strcpy(filename, newfile);
+    loading = 0;
+    textbuf->call_modify_callbacks();
 }
 
 void save_file(char *newfile) {
- if (textbuf->savefile(newfile))
-   fl_alert("Error writing to file \'%s\':\n%s.", newfile, strerror(errno));
- else
-   strcpy(filename, newfile);
- changed = 0;
- textbuf->call_modify_callbacks();
+    if (textbuf->savefile(newfile))
+      fl_alert("Error writing to file \'%s\':\n%s.", newfile, strerror(errno));
+    else
+      strcpy(filename, newfile);
+    changed = 0;
+    textbuf->call_modify_callbacks();
 }
 
 void copy_cb(Fl_Widget*, void* v) {
- EditorWindow* e = (EditorWindow*)v;
- Fl_Text_Editor::kf_copy(0, e->editor);
+    EditorWindow* e = (EditorWindow*)v;
+    Fl_Text_Editor::kf_copy(0, e->editor);
 }
 
 void cut_cb(Fl_Widget*, void* v) {
- EditorWindow* e = (EditorWindow*)v;
- Fl_Text_Editor::kf_cut(0, e->editor);
+    EditorWindow* e = (EditorWindow*)v;
+    Fl_Text_Editor::kf_cut(0, e->editor);
 }
 
 void delete_cb(Fl_Widget*, void*) {
- textbuf->remove_selection();
+    textbuf->remove_selection();
 }
 
 void find_cb(Fl_Widget* w, void* v) {
- EditorWindow* e = (EditorWindow*)v;
- const char *val;
-
- val = fl_input("Search String:", e->search);
- if (val != NULL) {
-   // User entered a string - go find it!
-   strcpy(e->search, val);
-   find2_cb(w, v);
- }
+    EditorWindow* e = (EditorWindow*)v;
+    const char *val;
+
+    val = fl_input("Search String:", e->search);
+    if (val != NULL) {
+      // User entered a string - go find it!
+      strcpy(e->search, val);
+      find2_cb(w, v);
+    }
 }
 
 void find2_cb(Fl_Widget* w, void* v) {
- EditorWindow* e = (EditorWindow*)v;
- if (e->search[0] == '\0') {
-   // Search string is blank; get a new one...
-   find_cb(w, v);
-   return;
- }
-
- int pos = e->editor->insert_position();
- int found = textbuf->search_forward(pos, e->search, &pos);
- if (found) {
-   // Found a match; select and update the position...
-   textbuf->select(pos, pos+strlen(e->search));
-   e->editor->insert_position(pos+strlen(e->search));
-   e->editor->show_insert_position();
- }
- else fl_alert("No occurrences of \'%s\' found!", e->search);
+    EditorWindow* e = (EditorWindow*)v;
+    if (e->search[0] == '\0') {
+      // Search string is blank; get a new one...
+      find_cb(w, v);
+      return;
+    }
+
+    int pos = e->editor->insert_position();
+    int found = textbuf->search_forward(pos, e->search, &pos);
+    if (found) {
+      // Found a match; select and update the position...
+      textbuf->select(pos, pos+strlen(e->search));
+      e->editor->insert_position(pos+strlen(e->search));
+      e->editor->show_insert_position();
+    }
+    else fl_alert("No occurrences of \'%s\' found!", e->search);
 }
 
 void set_title(Fl_Window* w) {
- if (filename[0] == '\0') strcpy(title, "Untitled");
- else {
-   char *slash;
-   slash = strrchr(filename, '/');
+    if (filename[0] == '\0') strcpy(title, "Untitled");
+    else {
+      char *slash;
+      slash = strrchr(filename, '/');
 #ifdef WIN32
-   if (slash == NULL) slash = strrchr(filename, '\\');
+      if (slash == NULL) slash = strrchr(filename, '\\');
 #endif
-   if (slash != NULL) strcpy(title, slash + 1);
-   else strcpy(title, filename);
- }
+      if (slash != NULL) strcpy(title, slash + 1);
+      else strcpy(title, filename);
+    }
 
- if (changed) strcat(title, " (modified)");
+    if (changed) strcat(title, " (modified)");
 
- w->label(title);
+    w->label(title);
 }
 
 void changed_cb(int, int nInserted, int nDeleted,int, const char*, void* v) {
- if ((nInserted || nDeleted) && !loading) changed = 1;
- EditorWindow *w = (EditorWindow *)v;
- set_title(w);
- if (loading) w->editor->show_insert_position();
+    if ((nInserted || nDeleted) && !loading) changed = 1;
+    EditorWindow *w = (EditorWindow *)v;
+    set_title(w);
+    if (loading) w->editor->show_insert_position();
 }
 
 void new_cb(Fl_Widget*, void*) {
- if (!check_save()) return;
+    if (!check_save()) return;
 
- filename[0] = '\0';
- textbuf->select(0, textbuf->length());
- textbuf->remove_selection();
- changed = 0;
- textbuf->call_modify_callbacks();
+    filename[0] = '\0';
+    textbuf->select(0, textbuf->length());
+    textbuf->remove_selection();
+    changed = 0;
+    textbuf->call_modify_callbacks();
 }
 
 void open_cb(Fl_Widget*, void*) {
- if (!check_save()) return;
+    if (!check_save()) return;
 
- char *newfile = fl_file_chooser("Open File?", "*", filename);
- if (newfile != NULL) load_file(newfile, -1);
+    char *newfile = fl_file_chooser("Open File?", "*", filename);
+    if (newfile != NULL) load_file(newfile, -1);
 }
 
 void insert_cb(Fl_Widget*, void *v) {
- char *newfile = fl_file_chooser("Insert File?", "*", filename);
- EditorWindow *w = (EditorWindow *)v;
- if (newfile != NULL) load_file(newfile, w->editor->insert_position());
+    char *newfile = fl_file_chooser("Insert File?", "*", filename);
+    EditorWindow *w = (EditorWindow *)v;
+    if (newfile != NULL) load_file(newfile, w->editor->insert_position());
 }
 
 void paste_cb(Fl_Widget*, void* v) {
- EditorWindow* e = (EditorWindow*)v;
- Fl_Text_Editor::kf_paste(0, e->editor);
+    EditorWindow* e = (EditorWindow*)v;
+    Fl_Text_Editor::kf_paste(0, e->editor);
 }
 
 int num_windows = 0;
 
 void close_cb(Fl_Widget*, void* v) {
- Fl_Window* w = (Fl_Window*)v;
- if (num_windows == 1 && !check_save()) {
-   return;
- }
-
- w->hide();
- textbuf->remove_modify_callback(changed_cb, w);
- delete w;
- num_windows--;
- if (!num_windows) exit(0);
+    Fl_Window* w = (Fl_Window*)v;
+    if (num_windows == 1 && !check_save()) {
+      return;
+    }
+
+    w->hide();
+    textbuf->remove_modify_callback(changed_cb, w);
+    delete w;
+    num_windows--;
+    if (!num_windows) exit(0);
 }
 
 void quit_cb(Fl_Widget*, void*) {
- if (changed && !check_save())
-   return;
+    if (changed && !check_save())
+      return;
 
- exit(0);
+    exit(0);
 }
 
 void replace_cb(Fl_Widget*, void* v) {
- EditorWindow* e = (EditorWindow*)v;
- e->replace_dlg->show();
+    EditorWindow* e = (EditorWindow*)v;
+    e->replace_dlg->show();
 }
 
 void replace2_cb(Fl_Widget*, void* v) {
- EditorWindow* e = (EditorWindow*)v;
- const char *find = e->replace_find->value();
- const char *replace = e->replace_with->value();
-
- if (find[0] == '\0') {
-   // Search string is blank; get a new one...
-   e->replace_dlg->show();
-   return;
- }
-
- e->replace_dlg->hide();
-
- int pos = e->editor->insert_position();
- int found = textbuf->search_forward(pos, find, &pos);
-
- if (found) {
-   // Found a match; update the position and replace text...
-   textbuf->select(pos, pos+strlen(find));
-   textbuf->remove_selection();
-   textbuf->insert(pos, replace);
-   textbuf->select(pos, pos+strlen(replace));
-   e->editor->insert_position(pos+strlen(replace));
-   e->editor->show_insert_position();
- }
- else fl_alert("No occurrences of \'%s\' found!", find);
+    EditorWindow* e = (EditorWindow*)v;
+    const char *find = e->replace_find->value();
+    const char *replace = e->replace_with->value();
+
+    if (find[0] == '\0') {
+      // Search string is blank; get a new one...
+      e->replace_dlg->show();
+      return;
+    }
+
+    e->replace_dlg->hide();
+
+    int pos = e->editor->insert_position();
+    int found = textbuf->search_forward(pos, find, &pos);
+
+    if (found) {
+      // Found a match; update the position and replace text...
+      textbuf->select(pos, pos+strlen(find));
+      textbuf->remove_selection();
+      textbuf->insert(pos, replace);
+      textbuf->select(pos, pos+strlen(replace));
+      e->editor->insert_position(pos+strlen(replace));
+      e->editor->show_insert_position();
+    }
+    else fl_alert("No occurrences of \'%s\' found!", find);
 }
 
 void replall_cb(Fl_Widget*, void* v) {
- EditorWindow* e = (EditorWindow*)v;
- const char *find = e->replace_find->value();
- const char *replace = e->replace_with->value();
-
- find = e->replace_find->value();
- if (find[0] == '\0') {
-   // Search string is blank; get a new one...
-   e->replace_dlg->show();
-   return;
- }
-
- e->replace_dlg->hide();
-
- e->editor->insert_position(0);
- int times = 0;
-
- // Loop through the whole string
- for (int found = 1; found;) {
-   int pos = e->editor->insert_position();
-   found = textbuf->search_forward(pos, find, &pos);
-
-   if (found) {
-     // Found a match; update the position and replace text...
-     textbuf->select(pos, pos+strlen(find));
-     textbuf->remove_selection();
-     textbuf->insert(pos, replace);
-     e->editor->insert_position(pos+strlen(replace));
-     e->editor->show_insert_position();
-     times++;
-   }
- }
-
- if (times) fl_message("Replaced %d occurrences.", times);
- else fl_alert("No occurrences of \'%s\' found!", find);
+    EditorWindow* e = (EditorWindow*)v;
+    const char *find = e->replace_find->value();
+    const char *replace = e->replace_with->value();
+
+    find = e->replace_find->value();
+    if (find[0] == '\0') {
+      // Search string is blank; get a new one...
+      e->replace_dlg->show();
+      return;
+    }
+
+    e->replace_dlg->hide();
+
+    e->editor->insert_position(0);
+    int times = 0;
+
+    // Loop through the whole string
+    for (int found = 1; found;) {
+      int pos = e->editor->insert_position();
+      found = textbuf->search_forward(pos, find, &pos);
+
+      if (found) {
+        // Found a match; update the position and replace text...
+        textbuf->select(pos, pos+strlen(find));
+        textbuf->remove_selection();
+        textbuf->insert(pos, replace);
+        e->editor->insert_position(pos+strlen(replace));
+        e->editor->show_insert_position();
+        times++;
+      }
+    }
+
+    if (times) fl_message("Replaced %d occurrences.", times);
+    else fl_alert("No occurrences of \'%s\' found!", find);
 }
 
 void replcan_cb(Fl_Widget*, void* v) {
- EditorWindow* e = (EditorWindow*)v;
- e->replace_dlg->hide();
+    EditorWindow* e = (EditorWindow*)v;
+    e->replace_dlg->hide();
 }
 
 void save_cb() {
- if (filename[0] == '\0') {
-   // No filename - get one!
-   saveas_cb();
-   return;
- }
- else save_file(filename);
+    if (filename[0] == '\0') {
+      // No filename - get one!
+      saveas_cb();
+      return;
+    }
+    else save_file(filename);
 }
 
 void saveas_cb() {
- char *newfile;
+    char *newfile;
 
- newfile = fl_file_chooser("Save File As?", "*", filename);
- if (newfile != NULL) save_file(newfile);
+    newfile = fl_file_chooser("Save File As?", "*", filename);
+    if (newfile != NULL) save_file(newfile);
 }
 
 Fl_Window* new_view();
 
 void view_cb(Fl_Widget*, void*) {
- Fl_Window* w = new_view();
- w->show();
+    Fl_Window* w = new_view();
+    w->show();
 }
 
 Fl_Menu_Item menuitems[] = {
- { "&File",              0, 0, 0, FL_SUBMENU },
-   { "&New File",        0, (Fl_Callback *)new_cb },
-   { "&Open File...",    FL_CTRL + 'o', (Fl_Callback *)open_cb },
-   { "&Insert File...",  FL_CTRL + 'i', (Fl_Callback *)insert_cb, 0,
-FL_MENU_DIVIDER },
-   { "&Save File",       FL_CTRL + 's', (Fl_Callback *)save_cb },
-   { "Save File &As...", FL_CTRL + FL_SHIFT + 's', (Fl_Callback
-*)saveas_cb, 0, FL_MENU_DIVIDER },
-   { "New &View", FL_ALT + 'v', (Fl_Callback *)view_cb, 0 },
-   { "&Close View", FL_CTRL + 'w', (Fl_Callback *)close_cb, 0,
-FL_MENU_DIVIDER },
-   { "E&xit", FL_CTRL + 'q', (Fl_Callback *)quit_cb, 0 },
-   { 0 },
-
- { "&Edit", 0, 0, 0, FL_SUBMENU },
-   { "Cu&t",        FL_CTRL + 'x', (Fl_Callback *)cut_cb },
-   { "&Copy",       FL_CTRL + 'c', (Fl_Callback *)copy_cb },
-   { "&Paste",      FL_CTRL + 'v', (Fl_Callback *)paste_cb },
-   { "&Delete",     0, (Fl_Callback *)delete_cb },
-   { 0 },
-
- { "&Search", 0, 0, 0, FL_SUBMENU },
-   { "&Find...",       FL_CTRL + 'f', (Fl_Callback *)find_cb },
-   { "F&ind Again",    FL_CTRL + 'g', find2_cb },
-   { "&Replace...",    FL_CTRL + 'r', replace_cb },
-   { "Re&place Again", FL_CTRL + 't', replace2_cb },
-   { 0 },
-
- { 0 }
+  { "&File",              0, 0, 0, FL_SUBMENU },
+  { "&New File",        0, (Fl_Callback *)new_cb },
+  { "&Open File...",    FL_CTRL + 'o', (Fl_Callback *)open_cb },
+  { "&Insert File...",  FL_CTRL + 'i', (Fl_Callback *)insert_cb, 0,
+    FL_MENU_DIVIDER },
+  { "&Save File",       FL_CTRL + 's', (Fl_Callback *)save_cb },
+  { "Save File &As...", FL_CTRL + FL_SHIFT + 's',
+    (Fl_Callback *)saveas_cb, 0, FL_MENU_DIVIDER },
+  { "New &View", FL_ALT + 'v', (Fl_Callback *)view_cb, 0 },
+  { "&Close View", FL_CTRL + 'w', (Fl_Callback *)close_cb, 0,
+    FL_MENU_DIVIDER },
+  { "E&xit", FL_CTRL + 'q', (Fl_Callback *)quit_cb, 0 },
+  { 0 },
+
+  { "&Edit", 0, 0, 0, FL_SUBMENU },
+  { "Cu&t",        FL_CTRL + 'x', (Fl_Callback *)cut_cb },
+  { "&Copy",       FL_CTRL + 'c', (Fl_Callback *)copy_cb },
+  { "&Paste",      FL_CTRL + 'v', (Fl_Callback *)paste_cb },
+  { "&Delete",     0, (Fl_Callback *)delete_cb },
+  { 0 },
+
+  { "&Search", 0, 0, 0, FL_SUBMENU },
+  { "&Find...",       FL_CTRL + 'f', (Fl_Callback *)find_cb },
+  { "F&ind Again",    FL_CTRL + 'g', find2_cb },
+  { "&Replace...",    FL_CTRL + 'r', replace_cb },
+  { "Re&place Again", FL_CTRL + 't', replace2_cb },
+  { 0 },
+
+  { 0 }
 };
 
 Fl_Window* new_view() {
- EditorWindow* w = new EditorWindow(660, 400, title);
-   w->begin();
-   Fl_Menu_Bar* m = new Fl_Menu_Bar(0, 0, 660, 30);
-   m->copy(menuitems, w);
-   w->editor = new Fl_Text_Editor(0, 30, 660, 370);
-   w->editor->buffer(textbuf);
-   w->editor->highlight_data(stylebuf, styletable,
-                             sizeof(styletable) / sizeof(styletable[0]),
+    EditorWindow* w = new EditorWindow(660, 400, title);
+    w->begin();
+    Fl_Menu_Bar* m = new Fl_Menu_Bar(0, 0, 660, 30);
+    m->copy(menuitems, w);
+    w->editor = new Fl_Text_Editor(0, 30, 660, 370);
+    w->editor->buffer(textbuf);
+    w->editor->highlight_data(stylebuf, styletable,
+                              sizeof(styletable) / sizeof(styletable[0]),
                               'A', style_unfinished_cb, 0);
-   w->editor->textfont(FL_COURIER);
- w->end();
- w->resizable(w->editor);
- w->callback((Fl_Callback *)close_cb, w);
-
- textbuf->add_modify_callback(style_update, w->editor);
- textbuf->add_modify_callback(changed_cb, w);
- textbuf->call_modify_callbacks();
- num_windows++;
- return w;
+    w->editor->textfont(FL_COURIER);
+    w->end();
+    w->resizable(w->editor);
+    w->callback((Fl_Callback *)close_cb, w);
+
+    textbuf->add_modify_callback(style_update, w->editor);
+    textbuf->add_modify_callback(changed_cb, w);
+    textbuf->call_modify_callbacks();
+    num_windows++;
+    return w;
 }
 
 int main(int argc, char **argv) {
- textbuf = new Fl_Text_Buffer;
- style_init();
+    textbuf = new Fl_Text_Buffer;
+    style_init();
 
- Fl_Window* window = new_view();
+    Fl_Window* window = new_view();
 
- window->show(1, argv);
+    window->show(1, argv);
 
- if (argc > 1) load_file(argv[1], -1);
+    if (argc > 1) load_file(argv[1], -1);
 
- return Fl::run();
+    return Fl::run();
 }
diff --git a/frontends/csladspa/csladspa.cpp b/frontends/csladspa/csladspa.cpp
index 91cf093..567d184 100644
--- a/frontends/csladspa/csladspa.cpp
+++ b/frontends/csladspa/csladspa.cpp
@@ -32,16 +32,6 @@
 #include "ladspa.h"
 using namespace std;
 
-
-
-#ifdef WIN32
-#define PUBLIC  __declspec(dllexport)
-#elif defined(__GNUC__)
-#define PUBLIC __attribute__ ( (visibility("default")) )
-#else
-#define PUBLIC
-#endif
-
 #define MAXLINESIZE 4098
 #define MAXPORTS 64
 
@@ -419,18 +409,18 @@ unsigned int CountCSD(char **csdnames)
   DIR             *dip = NULL;
   struct dirent   *dit;
   string          temp, name, path;
-  char           *ladspa_path;
   int             i = 0;
-  unsigned int             indx = 0;
+  size_t    indx = 0;
+  char ladspa_path[1024] = "";
 
 #ifndef MACOSX
-  ladspa_path = getenv("LADSPA_PATH");
+  strcpy(ladspa_path, getenv("LADSPA_PATH"));
 #else
-  ladspa_path = "/Library/Audio/Plug-Ins/LADSPA";
+  strcpy(ladspa_path, "/Library/Audio/Plug-Ins/LADSPA");
 #endif
   // if no LADSPA_PATH attempt to open
   // current directory
-  if(ladspa_path == NULL) dip = opendir(".");
+  if(strlen(ladspa_path) == 0) dip = opendir(".");
   else {
     path = ladspa_path;
 #ifdef WIN32
diff --git a/install.py b/install.py
index b1a23ea..0dc588c 100755
--- a/install.py
+++ b/install.py
@@ -24,7 +24,7 @@ exeFiles1 = ['csound', 'csound5gui', 'CsoundVST', 'winsound',
              'het_export', 'het_import', 'hetro', 'lpanal',
              'lpc_export', 'lpc_import', 'mixer', 'pvanal',
              'pv_export', 'pv_import', 'atsa',
-             'pvlook', 'scale', 'sndinfo', 'srconv', 'beats',
+             'pvlook', 'scale', 'sndinfo', 'srconv', 'csbeats',
              'scsort', 'extract', 'cs', 'csb64enc', 'makecsd', 'scot']
 
 exeFiles2 = ['brkpt', 'linseg', 'tabdes']
diff --git a/installer/macosx/Distribution.dist b/installer/macosx/Distribution.dist
new file mode 100644
index 0000000..8a660a6
--- /dev/null
+++ b/installer/macosx/Distribution.dist
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<installer-gui-script minSpecVersion="1">
+ 
+    <title>Csound 5 Environment</title>
+    <options customize="both" allow-external-scripts="no"/>
+    <domains enable_anywhere="true" enable_localSystem="true"/>
+    <background file="background.tiff" scaling="proportional" alignment="bottomleft" />
+    <welcome file="Welcome.rtf" />
+    <readme file="ReadMe.rtf" />
+    <license file="License.rtf" />
+
+    <pkg-ref id="com.csound.csound5Environment.csoundApps"/>
+    <pkg-ref id="com.csound.csound5Environment.csoundApps64"/>
+    <pkg-ref id="com.csound.csound5Environment.supportLibs"/>
+    <pkg-ref id="com.csound.csound5Environment.csoundLib"/>
+    <pkg-ref id="com.csound.csound5Environment.csoundLib64"/>
+    <choices-outline>
+            <line choice="com.csound.csound5Environment.csoundApps"/>
+            <line choice="com.csound.csound5Environment.csoundApps64"/>
+            <line choice="com.csound.csound5Environment.supportLibs"/>
+            <line choice="com.csound.csound5Environment.csoundLib"/>
+            <line choice="com.csound.csound5Environment.csoundLib64"/>
+    </choices-outline>
+
+    <choice id="com.csound.csound5Environment.csoundApps" 
+	visible="true"
+	title="Csound Command Line Applications (floats)">
+        <pkg-ref id="com.csound.csound5Environment.csoundApps"/>
+    </choice>
+    <choice id="com.csound.csound5Environment.csoundApps64"
+	visible="true"
+	title="Csound Command Line Applications (doubles)">
+        <pkg-ref id="com.csound.csound5Environment.csoundApps64"/>
+    </choice>
+    <choice id="com.csound.csound5Environment.supportLibs" 
+	visible="true"
+	title="Support Libraries">
+        <pkg-ref id="com.csound.csound5Environment.supportLibs"/>
+    </choice>
+    <choice id="com.csound.csound5Environment.csoundLib" 
+	visible="true"
+	title="Csound Library (floats)">
+        <pkg-ref id="com.csound.csound5Environment.csoundLib"/>
+    </choice>
+    <choice id="com.csound.csound5Environment.csoundLib64" 
+	visible="true"
+	title="Csound Library (doubles)">
+        <pkg-ref id="com.csound.csound5Environment.csoundLib64"/>
+    </choice>
+
+    <pkg-ref id="com.csound.csound5Environment.csoundApps" version="1" onConclusion="none" auth="root">CsoundApps.pkg</pkg-ref>
+    <pkg-ref id="com.csound.csound5Environment.csoundApps64" version="1" onConclusion="none" auth="root">CsoundApps64.pkg</pkg-ref>
+    <pkg-ref id="com.csound.csound5Environment.supportLibs" version="1" onConclusion="none" auth="root">SupportLibs.pkg</pkg-ref>
+    <pkg-ref id="com.csound.csound5Environment.csoundLib" version="1" onConclusion="none" auth="root">CsoundLib.pkg</pkg-ref>
+    <pkg-ref id="com.csound.csound5Environment.csoundLib64" version="1" onConclusion="none" auth="root">CsoundLib64.pkg</pkg-ref>
+</installer-gui-script>
diff --git a/installer/macosx/Makefile b/installer/macosx/Makefile
deleted file mode 100644
index dff15c2..0000000
--- a/installer/macosx/Makefile
+++ /dev/null
@@ -1,2 +0,0 @@
-installer: new_install.cxx installer.cxx installer.h
-	c++ -g -o installer new_install.cxx -lfltk -lpthread  -framework Carbon -framework ApplicationServices -lsupc++
diff --git a/installer/macosx/PkgResources/CsoundApps/License.rtf b/installer/macosx/PkgResources/CsoundApps/License.rtf
new file mode 100755
index 0000000..5ddd899
--- /dev/null
+++ b/installer/macosx/PkgResources/CsoundApps/License.rtf
@@ -0,0 +1,521 @@
+{\rtf1\mac\ansicpg10000\cocoartf102
+{\fonttbl\f0\fswiss\fcharset77 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\margl1440\margr1440\vieww9000\viewh9000\viewkind0
+\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\ql\qnatural
+
+\f0\fs24 \cf0 		  GNU LESSER GENERAL PUBLIC LICENSE\
+		       Version 2.1, February 1999\
+\
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.\
+     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\
+ Everyone is permitted to copy and distribute verbatim copies\
+ of this license document, but changing it is not allowed.\
+\
+[This is the first released version of the Lesser GPL.  It also counts\
+ as the successor of the GNU Library Public License, version 2, hence\
+ the version number 2.1.]\
+\
+			    Preamble\
+\
+  The licenses for most software are designed to take away your\
+freedom to share and change it.  By contrast, the GNU General Public\
+Licenses are intended to guarantee your freedom to share and change\
+free software--to make sure the software is free for all its users.\
+\
+  This license, the Lesser General Public License, applies to some\
+specially designated software packages--typically libraries--of the\
+Free Software Foundation and other authors who decide to use it.  You\
+can use it too, but we suggest you first think carefully about whether\
+this license or the ordinary General Public License is the better\
+strategy to use in any particular case, based on the explanations below.\
+\
+  When we speak of free software, we are referring to freedom of use,\
+not price.  Our General Public Licenses are designed to make sure that\
+you have the freedom to distribute copies of free software (and charge\
+for this service if you wish); that you receive source code or can get\
+it if you want it; that you can change the software and use pieces of\
+it in new free programs; and that you are informed that you can do\
+these things.\
+\
+  To protect your rights, we need to make restrictions that forbid\
+distributors to deny you these rights or to ask you to surrender these\
+rights.  These restrictions translate to certain responsibilities for\
+you if you distribute copies of the library or if you modify it.\
+\
+  For example, if you distribute copies of the library, whether gratis\
+or for a fee, you must give the recipients all the rights that we gave\
+you.  You must make sure that they, too, receive or can get the source\
+code.  If you link other code with the library, you must provide\
+complete object files to the recipients, so that they can relink them\
+with the library after making changes to the library and recompiling\
+it.  And you must show them these terms so they know their rights.\
+\
+  We protect your rights with a two-step method: (1) we copyright the\
+library, and (2) we offer you this license, which gives you legal\
+permission to copy, distribute and/or modify the library.\
+\
+  To protect each distributor, we want to make it very clear that\
+there is no warranty for the free library.  Also, if the library is\
+modified by someone else and passed on, the recipients should know\
+that what they have is not the original version, so that the original\
+author's reputation will not be affected by problems that might be\
+introduced by others.\
+\
+\page \
+  Finally, software patents pose a constant threat to the existence of\
+any free program.  We wish to make sure that a company cannot\
+effectively restrict the users of a free program by obtaining a\
+restrictive license from a patent holder.  Therefore, we insist that\
+any patent license obtained for a version of the library must be\
+consistent with the full freedom of use specified in this license.\
+\
+  Most GNU software, including some libraries, is covered by the\
+ordinary GNU General Public License.  This license, the GNU Lesser\
+General Public License, applies to certain designated libraries, and\
+is quite different from the ordinary General Public License.  We use\
+this license for certain libraries in order to permit linking those\
+libraries into non-free programs.\
+\
+  When a program is linked with a library, whether statically or using\
+a shared library, the combination of the two is legally speaking a\
+combined work, a derivative of the original library.  The ordinary\
+General Public License therefore permits such linking only if the\
+entire combination fits its criteria of freedom.  The Lesser General\
+Public License permits more lax criteria for linking other code with\
+the library.\
+\
+  We call this license the "Lesser" General Public License because it\
+does Less to protect the user's freedom than the ordinary General\
+Public License.  It also provides other free software developers Less\
+of an advantage over competing non-free programs.  These disadvantages\
+are the reason we use the ordinary General Public License for many\
+libraries.  However, the Lesser license provides advantages in certain\
+special circumstances.\
+\
+  For example, on rare occasions, there may be a special need to\
+encourage the widest possible use of a certain library, so that it becomes\
+a de-facto standard.  To achieve this, non-free programs must be\
+allowed to use the library.  A more frequent case is that a free\
+library does the same job as widely used non-free libraries.  In this\
+case, there is little to gain by limiting the free library to free\
+software only, so we use the Lesser General Public License.\
+\
+  In other cases, permission to use a particular library in non-free\
+programs enables a greater number of people to use a large body of\
+free software.  For example, permission to use the GNU C Library in\
+non-free programs enables many more people to use the whole GNU\
+operating system, as well as its variant, the GNU/Linux operating\
+system.\
+\
+  Although the Lesser General Public License is Less protective of the\
+users' freedom, it does ensure that the user of a program that is\
+linked with the Library has the freedom and the wherewithal to run\
+that program using a modified version of the Library.\
+\
+  The precise terms and conditions for copying, distribution and\
+modification follow.  Pay close attention to the difference between a\
+"work based on the library" and a "work that uses the library".  The\
+former contains code derived from the library, whereas the latter must\
+be combined with the library in order to run.\
+\
+\page \
+		  GNU LESSER GENERAL PUBLIC LICENSE\
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\
+\
+  0. This License Agreement applies to any software library or other\
+program which contains a notice placed by the copyright holder or\
+other authorized party saying it may be distributed under the terms of\
+this Lesser General Public License (also called "this License").\
+Each licensee is addressed as "you".\
+\
+  A "library" means a collection of software functions and/or data\
+prepared so as to be conveniently linked with application programs\
+(which use some of those functions and data) to form executables.\
+\
+  The "Library", below, refers to any such software library or work\
+which has been distributed under these terms.  A "work based on the\
+Library" means either the Library or any derivative work under\
+copyright law: that is to say, a work containing the Library or a\
+portion of it, either verbatim or with modifications and/or translated\
+straightforwardly into another language.  (Hereinafter, translation is\
+included without limitation in the term "modification".)\
+\
+  "Source code" for a work means the preferred form of the work for\
+making modifications to it.  For a library, complete source code means\
+all the source code for all modules it contains, plus any associated\
+interface definition files, plus the scripts used to control compilation\
+and installation of the library.\
+\
+  Activities other than copying, distribution and modification are not\
+covered by this License; they are outside its scope.  The act of\
+running a program using the Library is not restricted, and output from\
+such a program is covered only if its contents constitute a work based\
+on the Library (independent of the use of the Library in a tool for\
+writing it).  Whether that is true depends on what the Library does\
+and what the program that uses the Library does.\
+  \
+  1. You may copy and distribute verbatim copies of the Library's\
+complete source code as you receive it, in any medium, provided that\
+you conspicuously and appropriately publish on each copy an\
+appropriate copyright notice and disclaimer of warranty; keep intact\
+all the notices that refer to this License and to the absence of any\
+warranty; and distribute a copy of this License along with the\
+Library.\
+\
+  You may charge a fee for the physical act of transferring a copy,\
+and you may at your option offer warranty protection in exchange for a\
+fee.\
+\
+\page \
+  2. You may modify your copy or copies of the Library or any portion\
+of it, thus forming a work based on the Library, and copy and\
+distribute such modifications or work under the terms of Section 1\
+above, provided that you also meet all of these conditions:\
+\
+    a) The modified work must itself be a software library.\
+\
+    b) You must cause the files modified to carry prominent notices\
+    stating that you changed the files and the date of any change.\
+\
+    c) You must cause the whole of the work to be licensed at no\
+    charge to all third parties under the terms of this License.\
+\
+    d) If a facility in the modified Library refers to a function or a\
+    table of data to be supplied by an application program that uses\
+    the facility, other than as an argument passed when the facility\
+    is invoked, then you must make a good faith effort to ensure that,\
+    in the event an application does not supply such function or\
+    table, the facility still operates, and performs whatever part of\
+    its purpose remains meaningful.\
+\
+    (For example, a function in a library to compute square roots has\
+    a purpose that is entirely well-defined independent of the\
+    application.  Therefore, Subsection 2d requires that any\
+    application-supplied function or table used by this function must\
+    be optional: if the application does not supply it, the square\
+    root function must still compute square roots.)\
+\
+These requirements apply to the modified work as a whole.  If\
+identifiable sections of that work are not derived from the Library,\
+and can be reasonably considered independent and separate works in\
+themselves, then this License, and its terms, do not apply to those\
+sections when you distribute them as separate works.  But when you\
+distribute the same sections as part of a whole which is a work based\
+on the Library, the distribution of the whole must be on the terms of\
+this License, whose permissions for other licensees extend to the\
+entire whole, and thus to each and every part regardless of who wrote\
+it.\
+\
+Thus, it is not the intent of this section to claim rights or contest\
+your rights to work written entirely by you; rather, the intent is to\
+exercise the right to control the distribution of derivative or\
+collective works based on the Library.\
+\
+In addition, mere aggregation of another work not based on the Library\
+with the Library (or with a work based on the Library) on a volume of\
+a storage or distribution medium does not bring the other work under\
+the scope of this License.\
+\
+  3. You may opt to apply the terms of the ordinary GNU General Public\
+License instead of this License to a given copy of the Library.  To do\
+this, you must alter all the notices that refer to this License, so\
+that they refer to the ordinary GNU General Public License, version 2,\
+instead of to this License.  (If a newer version than version 2 of the\
+ordinary GNU General Public License has appeared, then you can specify\
+that version instead if you wish.)  Do not make any other change in\
+these notices.\
+\
+\page \
+  Once this change is made in a given copy, it is irreversible for\
+that copy, so the ordinary GNU General Public License applies to all\
+subsequent copies and derivative works made from that copy.\
+\
+  This option is useful when you wish to copy part of the code of\
+the Library into a program that is not a library.\
+\
+  4. You may copy and distribute the Library (or a portion or\
+derivative of it, under Section 2) in object code or executable form\
+under the terms of Sections 1 and 2 above provided that you accompany\
+it with the complete corresponding machine-readable source code, which\
+must be distributed under the terms of Sections 1 and 2 above on a\
+medium customarily used for software interchange.\
+\
+  If distribution of object code is made by offering access to copy\
+from a designated place, then offering equivalent access to copy the\
+source code from the same place satisfies the requirement to\
+distribute the source code, even though third parties are not\
+compelled to copy the source along with the object code.\
+\
+  5. A program that contains no derivative of any portion of the\
+Library, but is designed to work with the Library by being compiled or\
+linked with it, is called a "work that uses the Library".  Such a\
+work, in isolation, is not a derivative work of the Library, and\
+therefore falls outside the scope of this License.\
+\
+  However, linking a "work that uses the Library" with the Library\
+creates an executable that is a derivative of the Library (because it\
+contains portions of the Library), rather than a "work that uses the\
+library".  The executable is therefore covered by this License.\
+Section 6 states terms for distribution of such executables.\
+\
+  When a "work that uses the Library" uses material from a header file\
+that is part of the Library, the object code for the work may be a\
+derivative work of the Library even though the source code is not.\
+Whether this is true is especially significant if the work can be\
+linked without the Library, or if the work is itself a library.  The\
+threshold for this to be true is not precisely defined by law.\
+\
+  If such an object file uses only numerical parameters, data\
+structure layouts and accessors, and small macros and small inline\
+functions (ten lines or less in length), then the use of the object\
+file is unrestricted, regardless of whether it is legally a derivative\
+work.  (Executables containing this object code plus portions of the\
+Library will still fall under Section 6.)\
+\
+  Otherwise, if the work is a derivative of the Library, you may\
+distribute the object code for the work under the terms of Section 6.\
+Any executables containing that work also fall under Section 6,\
+whether or not they are linked directly with the Library itself.\
+\
+\page \
+  6. As an exception to the Sections above, you may also combine or\
+link a "work that uses the Library" with the Library to produce a\
+work containing portions of the Library, and distribute that work\
+under terms of your choice, provided that the terms permit\
+modification of the work for the customer's own use and reverse\
+engineering for debugging such modifications.\
+\
+  You must give prominent notice with each copy of the work that the\
+Library is used in it and that the Library and its use are covered by\
+this License.  You must supply a copy of this License.  If the work\
+during execution displays copyright notices, you must include the\
+copyright notice for the Library among them, as well as a reference\
+directing the user to the copy of this License.  Also, you must do one\
+of these things:\
+\
+    a) Accompany the work with the complete corresponding\
+    machine-readable source code for the Library including whatever\
+    changes were used in the work (which must be distributed under\
+    Sections 1 and 2 above); and, if the work is an executable linked\
+    with the Library, with the complete machine-readable "work that\
+    uses the Library", as object code and/or source code, so that the\
+    user can modify the Library and then relink to produce a modified\
+    executable containing the modified Library.  (It is understood\
+    that the user who changes the contents of definitions files in the\
+    Library will not necessarily be able to recompile the application\
+    to use the modified definitions.)\
+\
+    b) Use a suitable shared library mechanism for linking with the\
+    Library.  A suitable mechanism is one that (1) uses at run time a\
+    copy of the library already present on the user's computer system,\
+    rather than copying library functions into the executable, and (2)\
+    will operate properly with a modified version of the library, if\
+    the user installs one, as long as the modified version is\
+    interface-compatible with the version that the work was made with.\
+\
+    c) Accompany the work with a written offer, valid for at\
+    least three years, to give the same user the materials\
+    specified in Subsection 6a, above, for a charge no more\
+    than the cost of performing this distribution.\
+\
+    d) If distribution of the work is made by offering access to copy\
+    from a designated place, offer equivalent access to copy the above\
+    specified materials from the same place.\
+\
+    e) Verify that the user has already received a copy of these\
+    materials or that you have already sent this user a copy.\
+\
+  For an executable, the required form of the "work that uses the\
+Library" must include any data and utility programs needed for\
+reproducing the executable from it.  However, as a special exception,\
+the materials to be distributed need not include anything that is\
+normally distributed (in either source or binary form) with the major\
+components (compiler, kernel, and so on) of the operating system on\
+which the executable runs, unless that component itself accompanies\
+the executable.\
+\
+  It may happen that this requirement contradicts the license\
+restrictions of other proprietary libraries that do not normally\
+accompany the operating system.  Such a contradiction means you cannot\
+use both them and the Library together in an executable that you\
+distribute.\
+\
+\page \
+  7. You may place library facilities that are a work based on the\
+Library side-by-side in a single library together with other library\
+facilities not covered by this License, and distribute such a combined\
+library, provided that the separate distribution of the work based on\
+the Library and of the other library facilities is otherwise\
+permitted, and provided that you do these two things:\
+\
+    a) Accompany the combined library with a copy of the same work\
+    based on the Library, uncombined with any other library\
+    facilities.  This must be distributed under the terms of the\
+    Sections above.\
+\
+    b) Give prominent notice with the combined library of the fact\
+    that part of it is a work based on the Library, and explaining\
+    where to find the accompanying uncombined form of the same work.\
+\
+  8. You may not copy, modify, sublicense, link with, or distribute\
+the Library except as expressly provided under this License.  Any\
+attempt otherwise to copy, modify, sublicense, link with, or\
+distribute the Library is void, and will automatically terminate your\
+rights under this License.  However, parties who have received copies,\
+or rights, from you under this License will not have their licenses\
+terminated so long as such parties remain in full compliance.\
+\
+  9. You are not required to accept this License, since you have not\
+signed it.  However, nothing else grants you permission to modify or\
+distribute the Library or its derivative works.  These actions are\
+prohibited by law if you do not accept this License.  Therefore, by\
+modifying or distributing the Library (or any work based on the\
+Library), you indicate your acceptance of this License to do so, and\
+all its terms and conditions for copying, distributing or modifying\
+the Library or works based on it.\
+\
+  10. Each time you redistribute the Library (or any work based on the\
+Library), the recipient automatically receives a license from the\
+original licensor to copy, distribute, link with or modify the Library\
+subject to these terms and conditions.  You may not impose any further\
+restrictions on the recipients' exercise of the rights granted herein.\
+You are not responsible for enforcing compliance by third parties with\
+this License.\
+\
+\page \
+  11. If, as a consequence of a court judgment or allegation of patent\
+infringement or for any other reason (not limited to patent issues),\
+conditions are imposed on you (whether by court order, agreement or\
+otherwise) that contradict the conditions of this License, they do not\
+excuse you from the conditions of this License.  If you cannot\
+distribute so as to satisfy simultaneously your obligations under this\
+License and any other pertinent obligations, then as a consequence you\
+may not distribute the Library at all.  For example, if a patent\
+license would not permit royalty-free redistribution of the Library by\
+all those who receive copies directly or indirectly through you, then\
+the only way you could satisfy both it and this License would be to\
+refrain entirely from distribution of the Library.\
+\
+If any portion of this section is held invalid or unenforceable under any\
+particular circumstance, the balance of the section is intended to apply,\
+and the section as a whole is intended to apply in other circumstances.\
+\
+It is not the purpose of this section to induce you to infringe any\
+patents or other property right claims or to contest validity of any\
+such claims; this section has the sole purpose of protecting the\
+integrity of the free software distribution system which is\
+implemented by public license practices.  Many people have made\
+generous contributions to the wide range of software distributed\
+through that system in reliance on consistent application of that\
+system; it is up to the author/donor to decide if he or she is willing\
+to distribute software through any other system and a licensee cannot\
+impose that choice.\
+\
+This section is intended to make thoroughly clear what is believed to\
+be a consequence of the rest of this License.\
+\
+  12. If the distribution and/or use of the Library is restricted in\
+certain countries either by patents or by copyrighted interfaces, the\
+original copyright holder who places the Library under this License may add\
+an explicit geographical distribution limitation excluding those countries,\
+so that distribution is permitted only in or among countries not thus\
+excluded.  In such case, this License incorporates the limitation as if\
+written in the body of this License.\
+\
+  13. The Free Software Foundation may publish revised and/or new\
+versions of the Lesser General Public License from time to time.\
+Such new versions will be similar in spirit to the present version,\
+but may differ in detail to address new problems or concerns.\
+\
+Each version is given a distinguishing version number.  If the Library\
+specifies a version number of this License which applies to it and\
+"any later version", you have the option of following the terms and\
+conditions either of that version or of any later version published by\
+the Free Software Foundation.  If the Library does not specify a\
+license version number, you may choose any version ever published by\
+the Free Software Foundation.\
+\
+\page \
+  14. If you wish to incorporate parts of the Library into other free\
+programs whose distribution conditions are incompatible with these,\
+write to the author to ask for permission.  For software which is\
+copyrighted by the Free Software Foundation, write to the Free\
+Software Foundation; we sometimes make exceptions for this.  Our\
+decision will be guided by the two goals of preserving the free status\
+of all derivatives of our free software and of promoting the sharing\
+and reuse of software generally.\
+\
+			    NO WARRANTY\
+\
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO\
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.\
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR\
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY\
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE\
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE\
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME\
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.\
+\
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN\
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY\
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU\
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR\
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE\
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING\
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A\
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF\
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\
+DAMAGES.\
+\
+		     END OF TERMS AND CONDITIONS\
+\
+\page \
+           How to Apply These Terms to Your New Libraries\
+\
+  If you develop a new library, and you want it to be of the greatest\
+possible use to the public, we recommend making it free software that\
+everyone can redistribute and change.  You can do so by permitting\
+redistribution under these terms (or, alternatively, under the terms of the\
+ordinary General Public License).\
+\
+  To apply these terms, attach the following notices to the library.  It is\
+safest to attach them to the start of each source file to most effectively\
+convey the exclusion of warranty; and each file should have at least the\
+"copyright" line and a pointer to where the full notice is found.\
+\
+    <one line to give the library's name and a brief idea of what it does.>\
+    Copyright (C) <year>  <name of author>\
+\
+    This library is free software; you can redistribute it and/or\
+    modify it under the terms of the GNU Lesser General Public\
+    License as published by the Free Software Foundation; either\
+    version 2.1 of the License, or (at your option) any later version.\
+\
+    This library 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\
+    Lesser General Public License for more details.\
+\
+    You should have received a copy of the GNU Lesser General Public\
+    License along with this library; if not, write to the Free Software\
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\
+\
+Also add information on how to contact you by electronic and paper mail.\
+\
+You should also get your employer (if you work as a programmer) or your\
+school, if any, to sign a "copyright disclaimer" for the library, if\
+necessary.  Here is a sample; alter the names:\
+\
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the\
+  library `Frob' (a library for tweaking knobs) written by James Random Hacker.\
+\
+  <signature of Ty Coon>, 1 April 1990\
+  Ty Coon, President of Vice\
+\
+That's all there is to it!\
+\
+\
+\
+}
\ No newline at end of file
diff --git a/installer/macosx/PkgResources/CsoundApps/ReadMe.rtf b/installer/macosx/PkgResources/CsoundApps/ReadMe.rtf
new file mode 100755
index 0000000..ff3dfb3
--- /dev/null
+++ b/installer/macosx/PkgResources/CsoundApps/ReadMe.rtf
@@ -0,0 +1,31 @@
+{\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf540
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\margl1440\margr1440\vieww9000\viewh9000\viewkind0
+\pard\tx565\tx1133\tx1700\tx2266\tx2832\tx3401\tx3967\tx4535\tx5102\tx5669\tx6235\tx6802\ql\qnatural
+
+\f0\fs24 \cf0 Csound 5 Applications (using API version 2)\
+\
+This will install the basic Csound 5 applications in your computer.\
+These applications include:\
+\
+1. 
+\b Csound 'classic' command-line frontend
+\b0  in /usr/local/bin\
+2. The 
+\b cstclsh
+\b0  and 
+\b cswish
+\b0  Tcl/Tk interpreters in /usr/local/bin\
+3. 
+\b Command-line utilities
+\b0  in /usr/local/bin\
+4. 
+\b Language wrapper
+\b0  and 
+\b Tclcsound library
+\b0  links in /usr/local/lib\
+5. CsLADSPA plugin generator\
+\
+Victor Lazzarini, 2005\
+(c) 2005, The Csound Team , csound.sf.net }
\ No newline at end of file
diff --git a/installer/macosx/PkgResources/CsoundApps/Welcome.rtf b/installer/macosx/PkgResources/CsoundApps/Welcome.rtf
new file mode 100755
index 0000000..e09dca3
--- /dev/null
+++ b/installer/macosx/PkgResources/CsoundApps/Welcome.rtf
@@ -0,0 +1,12 @@
+{\rtf1\mac\ansicpg10000\cocoartf102
+{\fonttbl\f0\fswiss\fcharset77 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\margl1440\margr1440\vieww9000\viewh9000\viewkind0
+\pard\tx565\tx1133\tx1700\tx2266\tx2832\tx3401\tx3967\tx4535\tx5102\tx5669\tx6235\tx6802\ql\qnatural
+
+\f0\fs24 \cf0 You are about to install the Csound 5 applications in your\
+computer. \
+\
+\
+\
+}
\ No newline at end of file
diff --git a/installer/macosx/PkgResources/CsoundApps/postinstall b/installer/macosx/PkgResources/CsoundApps/postinstall
new file mode 100755
index 0000000..97743c0
--- /dev/null
+++ b/installer/macosx/PkgResources/CsoundApps/postinstall
@@ -0,0 +1,6 @@
+#!/bin/sh
+#/usr/local/bin/Reza -i APPL -o /usr/local/bin/csound /usr/local/bin/cs5.r
+#/usr/local/bin/Reza -i APPL -o /usr/local/bin/cswish /usr/local/bin/cs5.r
+/bin/ln -sF /Library/Frameworks/CsoundLib.framework/Versions/Current/TclTk/tclcsound.dylib /usr/local/lib/tclcsound.dylib
+/bin/ln -sF /Library/Frameworks/CsoundLib.framework/Versions/Current/libcsnd.dylib /usr/local/lib/lib_csnd.dylib
+/bin/ln -sF /Library/Frameworks/CsoundLib.framework/Versions/Current/libcsnd.dylib /usr/local/lib/libcsnd.dylib
diff --git a/installer/macosx/PkgResources/CsoundApps/postupgrade b/installer/macosx/PkgResources/CsoundApps/postupgrade
new file mode 100755
index 0000000..97743c0
--- /dev/null
+++ b/installer/macosx/PkgResources/CsoundApps/postupgrade
@@ -0,0 +1,6 @@
+#!/bin/sh
+#/usr/local/bin/Reza -i APPL -o /usr/local/bin/csound /usr/local/bin/cs5.r
+#/usr/local/bin/Reza -i APPL -o /usr/local/bin/cswish /usr/local/bin/cs5.r
+/bin/ln -sF /Library/Frameworks/CsoundLib.framework/Versions/Current/TclTk/tclcsound.dylib /usr/local/lib/tclcsound.dylib
+/bin/ln -sF /Library/Frameworks/CsoundLib.framework/Versions/Current/libcsnd.dylib /usr/local/lib/lib_csnd.dylib
+/bin/ln -sF /Library/Frameworks/CsoundLib.framework/Versions/Current/libcsnd.dylib /usr/local/lib/libcsnd.dylib
diff --git a/installer/macosx/PkgResources/CsoundApps64/License.rtf b/installer/macosx/PkgResources/CsoundApps64/License.rtf
new file mode 100755
index 0000000..5ddd899
--- /dev/null
+++ b/installer/macosx/PkgResources/CsoundApps64/License.rtf
@@ -0,0 +1,521 @@
+{\rtf1\mac\ansicpg10000\cocoartf102
+{\fonttbl\f0\fswiss\fcharset77 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\margl1440\margr1440\vieww9000\viewh9000\viewkind0
+\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\ql\qnatural
+
+\f0\fs24 \cf0 		  GNU LESSER GENERAL PUBLIC LICENSE\
+		       Version 2.1, February 1999\
+\
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.\
+     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\
+ Everyone is permitted to copy and distribute verbatim copies\
+ of this license document, but changing it is not allowed.\
+\
+[This is the first released version of the Lesser GPL.  It also counts\
+ as the successor of the GNU Library Public License, version 2, hence\
+ the version number 2.1.]\
+\
+			    Preamble\
+\
+  The licenses for most software are designed to take away your\
+freedom to share and change it.  By contrast, the GNU General Public\
+Licenses are intended to guarantee your freedom to share and change\
+free software--to make sure the software is free for all its users.\
+\
+  This license, the Lesser General Public License, applies to some\
+specially designated software packages--typically libraries--of the\
+Free Software Foundation and other authors who decide to use it.  You\
+can use it too, but we suggest you first think carefully about whether\
+this license or the ordinary General Public License is the better\
+strategy to use in any particular case, based on the explanations below.\
+\
+  When we speak of free software, we are referring to freedom of use,\
+not price.  Our General Public Licenses are designed to make sure that\
+you have the freedom to distribute copies of free software (and charge\
+for this service if you wish); that you receive source code or can get\
+it if you want it; that you can change the software and use pieces of\
+it in new free programs; and that you are informed that you can do\
+these things.\
+\
+  To protect your rights, we need to make restrictions that forbid\
+distributors to deny you these rights or to ask you to surrender these\
+rights.  These restrictions translate to certain responsibilities for\
+you if you distribute copies of the library or if you modify it.\
+\
+  For example, if you distribute copies of the library, whether gratis\
+or for a fee, you must give the recipients all the rights that we gave\
+you.  You must make sure that they, too, receive or can get the source\
+code.  If you link other code with the library, you must provide\
+complete object files to the recipients, so that they can relink them\
+with the library after making changes to the library and recompiling\
+it.  And you must show them these terms so they know their rights.\
+\
+  We protect your rights with a two-step method: (1) we copyright the\
+library, and (2) we offer you this license, which gives you legal\
+permission to copy, distribute and/or modify the library.\
+\
+  To protect each distributor, we want to make it very clear that\
+there is no warranty for the free library.  Also, if the library is\
+modified by someone else and passed on, the recipients should know\
+that what they have is not the original version, so that the original\
+author's reputation will not be affected by problems that might be\
+introduced by others.\
+\
+\page \
+  Finally, software patents pose a constant threat to the existence of\
+any free program.  We wish to make sure that a company cannot\
+effectively restrict the users of a free program by obtaining a\
+restrictive license from a patent holder.  Therefore, we insist that\
+any patent license obtained for a version of the library must be\
+consistent with the full freedom of use specified in this license.\
+\
+  Most GNU software, including some libraries, is covered by the\
+ordinary GNU General Public License.  This license, the GNU Lesser\
+General Public License, applies to certain designated libraries, and\
+is quite different from the ordinary General Public License.  We use\
+this license for certain libraries in order to permit linking those\
+libraries into non-free programs.\
+\
+  When a program is linked with a library, whether statically or using\
+a shared library, the combination of the two is legally speaking a\
+combined work, a derivative of the original library.  The ordinary\
+General Public License therefore permits such linking only if the\
+entire combination fits its criteria of freedom.  The Lesser General\
+Public License permits more lax criteria for linking other code with\
+the library.\
+\
+  We call this license the "Lesser" General Public License because it\
+does Less to protect the user's freedom than the ordinary General\
+Public License.  It also provides other free software developers Less\
+of an advantage over competing non-free programs.  These disadvantages\
+are the reason we use the ordinary General Public License for many\
+libraries.  However, the Lesser license provides advantages in certain\
+special circumstances.\
+\
+  For example, on rare occasions, there may be a special need to\
+encourage the widest possible use of a certain library, so that it becomes\
+a de-facto standard.  To achieve this, non-free programs must be\
+allowed to use the library.  A more frequent case is that a free\
+library does the same job as widely used non-free libraries.  In this\
+case, there is little to gain by limiting the free library to free\
+software only, so we use the Lesser General Public License.\
+\
+  In other cases, permission to use a particular library in non-free\
+programs enables a greater number of people to use a large body of\
+free software.  For example, permission to use the GNU C Library in\
+non-free programs enables many more people to use the whole GNU\
+operating system, as well as its variant, the GNU/Linux operating\
+system.\
+\
+  Although the Lesser General Public License is Less protective of the\
+users' freedom, it does ensure that the user of a program that is\
+linked with the Library has the freedom and the wherewithal to run\
+that program using a modified version of the Library.\
+\
+  The precise terms and conditions for copying, distribution and\
+modification follow.  Pay close attention to the difference between a\
+"work based on the library" and a "work that uses the library".  The\
+former contains code derived from the library, whereas the latter must\
+be combined with the library in order to run.\
+\
+\page \
+		  GNU LESSER GENERAL PUBLIC LICENSE\
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\
+\
+  0. This License Agreement applies to any software library or other\
+program which contains a notice placed by the copyright holder or\
+other authorized party saying it may be distributed under the terms of\
+this Lesser General Public License (also called "this License").\
+Each licensee is addressed as "you".\
+\
+  A "library" means a collection of software functions and/or data\
+prepared so as to be conveniently linked with application programs\
+(which use some of those functions and data) to form executables.\
+\
+  The "Library", below, refers to any such software library or work\
+which has been distributed under these terms.  A "work based on the\
+Library" means either the Library or any derivative work under\
+copyright law: that is to say, a work containing the Library or a\
+portion of it, either verbatim or with modifications and/or translated\
+straightforwardly into another language.  (Hereinafter, translation is\
+included without limitation in the term "modification".)\
+\
+  "Source code" for a work means the preferred form of the work for\
+making modifications to it.  For a library, complete source code means\
+all the source code for all modules it contains, plus any associated\
+interface definition files, plus the scripts used to control compilation\
+and installation of the library.\
+\
+  Activities other than copying, distribution and modification are not\
+covered by this License; they are outside its scope.  The act of\
+running a program using the Library is not restricted, and output from\
+such a program is covered only if its contents constitute a work based\
+on the Library (independent of the use of the Library in a tool for\
+writing it).  Whether that is true depends on what the Library does\
+and what the program that uses the Library does.\
+  \
+  1. You may copy and distribute verbatim copies of the Library's\
+complete source code as you receive it, in any medium, provided that\
+you conspicuously and appropriately publish on each copy an\
+appropriate copyright notice and disclaimer of warranty; keep intact\
+all the notices that refer to this License and to the absence of any\
+warranty; and distribute a copy of this License along with the\
+Library.\
+\
+  You may charge a fee for the physical act of transferring a copy,\
+and you may at your option offer warranty protection in exchange for a\
+fee.\
+\
+\page \
+  2. You may modify your copy or copies of the Library or any portion\
+of it, thus forming a work based on the Library, and copy and\
+distribute such modifications or work under the terms of Section 1\
+above, provided that you also meet all of these conditions:\
+\
+    a) The modified work must itself be a software library.\
+\
+    b) You must cause the files modified to carry prominent notices\
+    stating that you changed the files and the date of any change.\
+\
+    c) You must cause the whole of the work to be licensed at no\
+    charge to all third parties under the terms of this License.\
+\
+    d) If a facility in the modified Library refers to a function or a\
+    table of data to be supplied by an application program that uses\
+    the facility, other than as an argument passed when the facility\
+    is invoked, then you must make a good faith effort to ensure that,\
+    in the event an application does not supply such function or\
+    table, the facility still operates, and performs whatever part of\
+    its purpose remains meaningful.\
+\
+    (For example, a function in a library to compute square roots has\
+    a purpose that is entirely well-defined independent of the\
+    application.  Therefore, Subsection 2d requires that any\
+    application-supplied function or table used by this function must\
+    be optional: if the application does not supply it, the square\
+    root function must still compute square roots.)\
+\
+These requirements apply to the modified work as a whole.  If\
+identifiable sections of that work are not derived from the Library,\
+and can be reasonably considered independent and separate works in\
+themselves, then this License, and its terms, do not apply to those\
+sections when you distribute them as separate works.  But when you\
+distribute the same sections as part of a whole which is a work based\
+on the Library, the distribution of the whole must be on the terms of\
+this License, whose permissions for other licensees extend to the\
+entire whole, and thus to each and every part regardless of who wrote\
+it.\
+\
+Thus, it is not the intent of this section to claim rights or contest\
+your rights to work written entirely by you; rather, the intent is to\
+exercise the right to control the distribution of derivative or\
+collective works based on the Library.\
+\
+In addition, mere aggregation of another work not based on the Library\
+with the Library (or with a work based on the Library) on a volume of\
+a storage or distribution medium does not bring the other work under\
+the scope of this License.\
+\
+  3. You may opt to apply the terms of the ordinary GNU General Public\
+License instead of this License to a given copy of the Library.  To do\
+this, you must alter all the notices that refer to this License, so\
+that they refer to the ordinary GNU General Public License, version 2,\
+instead of to this License.  (If a newer version than version 2 of the\
+ordinary GNU General Public License has appeared, then you can specify\
+that version instead if you wish.)  Do not make any other change in\
+these notices.\
+\
+\page \
+  Once this change is made in a given copy, it is irreversible for\
+that copy, so the ordinary GNU General Public License applies to all\
+subsequent copies and derivative works made from that copy.\
+\
+  This option is useful when you wish to copy part of the code of\
+the Library into a program that is not a library.\
+\
+  4. You may copy and distribute the Library (or a portion or\
+derivative of it, under Section 2) in object code or executable form\
+under the terms of Sections 1 and 2 above provided that you accompany\
+it with the complete corresponding machine-readable source code, which\
+must be distributed under the terms of Sections 1 and 2 above on a\
+medium customarily used for software interchange.\
+\
+  If distribution of object code is made by offering access to copy\
+from a designated place, then offering equivalent access to copy the\
+source code from the same place satisfies the requirement to\
+distribute the source code, even though third parties are not\
+compelled to copy the source along with the object code.\
+\
+  5. A program that contains no derivative of any portion of the\
+Library, but is designed to work with the Library by being compiled or\
+linked with it, is called a "work that uses the Library".  Such a\
+work, in isolation, is not a derivative work of the Library, and\
+therefore falls outside the scope of this License.\
+\
+  However, linking a "work that uses the Library" with the Library\
+creates an executable that is a derivative of the Library (because it\
+contains portions of the Library), rather than a "work that uses the\
+library".  The executable is therefore covered by this License.\
+Section 6 states terms for distribution of such executables.\
+\
+  When a "work that uses the Library" uses material from a header file\
+that is part of the Library, the object code for the work may be a\
+derivative work of the Library even though the source code is not.\
+Whether this is true is especially significant if the work can be\
+linked without the Library, or if the work is itself a library.  The\
+threshold for this to be true is not precisely defined by law.\
+\
+  If such an object file uses only numerical parameters, data\
+structure layouts and accessors, and small macros and small inline\
+functions (ten lines or less in length), then the use of the object\
+file is unrestricted, regardless of whether it is legally a derivative\
+work.  (Executables containing this object code plus portions of the\
+Library will still fall under Section 6.)\
+\
+  Otherwise, if the work is a derivative of the Library, you may\
+distribute the object code for the work under the terms of Section 6.\
+Any executables containing that work also fall under Section 6,\
+whether or not they are linked directly with the Library itself.\
+\
+\page \
+  6. As an exception to the Sections above, you may also combine or\
+link a "work that uses the Library" with the Library to produce a\
+work containing portions of the Library, and distribute that work\
+under terms of your choice, provided that the terms permit\
+modification of the work for the customer's own use and reverse\
+engineering for debugging such modifications.\
+\
+  You must give prominent notice with each copy of the work that the\
+Library is used in it and that the Library and its use are covered by\
+this License.  You must supply a copy of this License.  If the work\
+during execution displays copyright notices, you must include the\
+copyright notice for the Library among them, as well as a reference\
+directing the user to the copy of this License.  Also, you must do one\
+of these things:\
+\
+    a) Accompany the work with the complete corresponding\
+    machine-readable source code for the Library including whatever\
+    changes were used in the work (which must be distributed under\
+    Sections 1 and 2 above); and, if the work is an executable linked\
+    with the Library, with the complete machine-readable "work that\
+    uses the Library", as object code and/or source code, so that the\
+    user can modify the Library and then relink to produce a modified\
+    executable containing the modified Library.  (It is understood\
+    that the user who changes the contents of definitions files in the\
+    Library will not necessarily be able to recompile the application\
+    to use the modified definitions.)\
+\
+    b) Use a suitable shared library mechanism for linking with the\
+    Library.  A suitable mechanism is one that (1) uses at run time a\
+    copy of the library already present on the user's computer system,\
+    rather than copying library functions into the executable, and (2)\
+    will operate properly with a modified version of the library, if\
+    the user installs one, as long as the modified version is\
+    interface-compatible with the version that the work was made with.\
+\
+    c) Accompany the work with a written offer, valid for at\
+    least three years, to give the same user the materials\
+    specified in Subsection 6a, above, for a charge no more\
+    than the cost of performing this distribution.\
+\
+    d) If distribution of the work is made by offering access to copy\
+    from a designated place, offer equivalent access to copy the above\
+    specified materials from the same place.\
+\
+    e) Verify that the user has already received a copy of these\
+    materials or that you have already sent this user a copy.\
+\
+  For an executable, the required form of the "work that uses the\
+Library" must include any data and utility programs needed for\
+reproducing the executable from it.  However, as a special exception,\
+the materials to be distributed need not include anything that is\
+normally distributed (in either source or binary form) with the major\
+components (compiler, kernel, and so on) of the operating system on\
+which the executable runs, unless that component itself accompanies\
+the executable.\
+\
+  It may happen that this requirement contradicts the license\
+restrictions of other proprietary libraries that do not normally\
+accompany the operating system.  Such a contradiction means you cannot\
+use both them and the Library together in an executable that you\
+distribute.\
+\
+\page \
+  7. You may place library facilities that are a work based on the\
+Library side-by-side in a single library together with other library\
+facilities not covered by this License, and distribute such a combined\
+library, provided that the separate distribution of the work based on\
+the Library and of the other library facilities is otherwise\
+permitted, and provided that you do these two things:\
+\
+    a) Accompany the combined library with a copy of the same work\
+    based on the Library, uncombined with any other library\
+    facilities.  This must be distributed under the terms of the\
+    Sections above.\
+\
+    b) Give prominent notice with the combined library of the fact\
+    that part of it is a work based on the Library, and explaining\
+    where to find the accompanying uncombined form of the same work.\
+\
+  8. You may not copy, modify, sublicense, link with, or distribute\
+the Library except as expressly provided under this License.  Any\
+attempt otherwise to copy, modify, sublicense, link with, or\
+distribute the Library is void, and will automatically terminate your\
+rights under this License.  However, parties who have received copies,\
+or rights, from you under this License will not have their licenses\
+terminated so long as such parties remain in full compliance.\
+\
+  9. You are not required to accept this License, since you have not\
+signed it.  However, nothing else grants you permission to modify or\
+distribute the Library or its derivative works.  These actions are\
+prohibited by law if you do not accept this License.  Therefore, by\
+modifying or distributing the Library (or any work based on the\
+Library), you indicate your acceptance of this License to do so, and\
+all its terms and conditions for copying, distributing or modifying\
+the Library or works based on it.\
+\
+  10. Each time you redistribute the Library (or any work based on the\
+Library), the recipient automatically receives a license from the\
+original licensor to copy, distribute, link with or modify the Library\
+subject to these terms and conditions.  You may not impose any further\
+restrictions on the recipients' exercise of the rights granted herein.\
+You are not responsible for enforcing compliance by third parties with\
+this License.\
+\
+\page \
+  11. If, as a consequence of a court judgment or allegation of patent\
+infringement or for any other reason (not limited to patent issues),\
+conditions are imposed on you (whether by court order, agreement or\
+otherwise) that contradict the conditions of this License, they do not\
+excuse you from the conditions of this License.  If you cannot\
+distribute so as to satisfy simultaneously your obligations under this\
+License and any other pertinent obligations, then as a consequence you\
+may not distribute the Library at all.  For example, if a patent\
+license would not permit royalty-free redistribution of the Library by\
+all those who receive copies directly or indirectly through you, then\
+the only way you could satisfy both it and this License would be to\
+refrain entirely from distribution of the Library.\
+\
+If any portion of this section is held invalid or unenforceable under any\
+particular circumstance, the balance of the section is intended to apply,\
+and the section as a whole is intended to apply in other circumstances.\
+\
+It is not the purpose of this section to induce you to infringe any\
+patents or other property right claims or to contest validity of any\
+such claims; this section has the sole purpose of protecting the\
+integrity of the free software distribution system which is\
+implemented by public license practices.  Many people have made\
+generous contributions to the wide range of software distributed\
+through that system in reliance on consistent application of that\
+system; it is up to the author/donor to decide if he or she is willing\
+to distribute software through any other system and a licensee cannot\
+impose that choice.\
+\
+This section is intended to make thoroughly clear what is believed to\
+be a consequence of the rest of this License.\
+\
+  12. If the distribution and/or use of the Library is restricted in\
+certain countries either by patents or by copyrighted interfaces, the\
+original copyright holder who places the Library under this License may add\
+an explicit geographical distribution limitation excluding those countries,\
+so that distribution is permitted only in or among countries not thus\
+excluded.  In such case, this License incorporates the limitation as if\
+written in the body of this License.\
+\
+  13. The Free Software Foundation may publish revised and/or new\
+versions of the Lesser General Public License from time to time.\
+Such new versions will be similar in spirit to the present version,\
+but may differ in detail to address new problems or concerns.\
+\
+Each version is given a distinguishing version number.  If the Library\
+specifies a version number of this License which applies to it and\
+"any later version", you have the option of following the terms and\
+conditions either of that version or of any later version published by\
+the Free Software Foundation.  If the Library does not specify a\
+license version number, you may choose any version ever published by\
+the Free Software Foundation.\
+\
+\page \
+  14. If you wish to incorporate parts of the Library into other free\
+programs whose distribution conditions are incompatible with these,\
+write to the author to ask for permission.  For software which is\
+copyrighted by the Free Software Foundation, write to the Free\
+Software Foundation; we sometimes make exceptions for this.  Our\
+decision will be guided by the two goals of preserving the free status\
+of all derivatives of our free software and of promoting the sharing\
+and reuse of software generally.\
+\
+			    NO WARRANTY\
+\
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO\
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.\
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR\
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY\
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE\
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE\
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME\
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.\
+\
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN\
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY\
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU\
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR\
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE\
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING\
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A\
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF\
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\
+DAMAGES.\
+\
+		     END OF TERMS AND CONDITIONS\
+\
+\page \
+           How to Apply These Terms to Your New Libraries\
+\
+  If you develop a new library, and you want it to be of the greatest\
+possible use to the public, we recommend making it free software that\
+everyone can redistribute and change.  You can do so by permitting\
+redistribution under these terms (or, alternatively, under the terms of the\
+ordinary General Public License).\
+\
+  To apply these terms, attach the following notices to the library.  It is\
+safest to attach them to the start of each source file to most effectively\
+convey the exclusion of warranty; and each file should have at least the\
+"copyright" line and a pointer to where the full notice is found.\
+\
+    <one line to give the library's name and a brief idea of what it does.>\
+    Copyright (C) <year>  <name of author>\
+\
+    This library is free software; you can redistribute it and/or\
+    modify it under the terms of the GNU Lesser General Public\
+    License as published by the Free Software Foundation; either\
+    version 2.1 of the License, or (at your option) any later version.\
+\
+    This library 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\
+    Lesser General Public License for more details.\
+\
+    You should have received a copy of the GNU Lesser General Public\
+    License along with this library; if not, write to the Free Software\
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\
+\
+Also add information on how to contact you by electronic and paper mail.\
+\
+You should also get your employer (if you work as a programmer) or your\
+school, if any, to sign a "copyright disclaimer" for the library, if\
+necessary.  Here is a sample; alter the names:\
+\
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the\
+  library `Frob' (a library for tweaking knobs) written by James Random Hacker.\
+\
+  <signature of Ty Coon>, 1 April 1990\
+  Ty Coon, President of Vice\
+\
+That's all there is to it!\
+\
+\
+\
+}
\ No newline at end of file
diff --git a/installer/macosx/PkgResources/CsoundApps64/ReadMe.rtf b/installer/macosx/PkgResources/CsoundApps64/ReadMe.rtf
new file mode 100755
index 0000000..ff3dfb3
--- /dev/null
+++ b/installer/macosx/PkgResources/CsoundApps64/ReadMe.rtf
@@ -0,0 +1,31 @@
+{\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf540
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\margl1440\margr1440\vieww9000\viewh9000\viewkind0
+\pard\tx565\tx1133\tx1700\tx2266\tx2832\tx3401\tx3967\tx4535\tx5102\tx5669\tx6235\tx6802\ql\qnatural
+
+\f0\fs24 \cf0 Csound 5 Applications (using API version 2)\
+\
+This will install the basic Csound 5 applications in your computer.\
+These applications include:\
+\
+1. 
+\b Csound 'classic' command-line frontend
+\b0  in /usr/local/bin\
+2. The 
+\b cstclsh
+\b0  and 
+\b cswish
+\b0  Tcl/Tk interpreters in /usr/local/bin\
+3. 
+\b Command-line utilities
+\b0  in /usr/local/bin\
+4. 
+\b Language wrapper
+\b0  and 
+\b Tclcsound library
+\b0  links in /usr/local/lib\
+5. CsLADSPA plugin generator\
+\
+Victor Lazzarini, 2005\
+(c) 2005, The Csound Team , csound.sf.net }
\ No newline at end of file
diff --git a/installer/macosx/PkgResources/CsoundApps64/Welcome.rtf b/installer/macosx/PkgResources/CsoundApps64/Welcome.rtf
new file mode 100755
index 0000000..e09dca3
--- /dev/null
+++ b/installer/macosx/PkgResources/CsoundApps64/Welcome.rtf
@@ -0,0 +1,12 @@
+{\rtf1\mac\ansicpg10000\cocoartf102
+{\fonttbl\f0\fswiss\fcharset77 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\margl1440\margr1440\vieww9000\viewh9000\viewkind0
+\pard\tx565\tx1133\tx1700\tx2266\tx2832\tx3401\tx3967\tx4535\tx5102\tx5669\tx6235\tx6802\ql\qnatural
+
+\f0\fs24 \cf0 You are about to install the Csound 5 applications in your\
+computer. \
+\
+\
+\
+}
\ No newline at end of file
diff --git a/installer/macosx/PkgResources/CsoundApps64/postinstall b/installer/macosx/PkgResources/CsoundApps64/postinstall
new file mode 100755
index 0000000..eb7e140
--- /dev/null
+++ b/installer/macosx/PkgResources/CsoundApps64/postinstall
@@ -0,0 +1,8 @@
+#!/bin/sh
+#/usr/local/bin/Reza -i APPL -o /usr/local/bin/csound /usr/local/bin/cs5.r
+#/usr/local/bin/Reza -i APPL -o /usr/local/bin/cswish /usr/local/bin/cs5.r
+
+/bin/ln -sF /Library/Frameworks/CsoundLib64.framework/Versions/Current/TclTk/tclcsound.dylib /usr/local/lib/tclcsound.dylib
+/bin/ln -sF /Library/Frameworks/CsoundLib64.framework/Versions/Current/libcsnd64.dylib /usr/local/lib/lib_csnd64.dylib
+/bin/ln -sF /Library/Frameworks/CsoundLib64.framework/Versions/Current/libcsnd64.dylib /usr/local/lib/libcsnd64.dylib
+
diff --git a/installer/macosx/PkgResources/CsoundApps64/postupgrade b/installer/macosx/PkgResources/CsoundApps64/postupgrade
new file mode 100755
index 0000000..eb7e140
--- /dev/null
+++ b/installer/macosx/PkgResources/CsoundApps64/postupgrade
@@ -0,0 +1,8 @@
+#!/bin/sh
+#/usr/local/bin/Reza -i APPL -o /usr/local/bin/csound /usr/local/bin/cs5.r
+#/usr/local/bin/Reza -i APPL -o /usr/local/bin/cswish /usr/local/bin/cs5.r
+
+/bin/ln -sF /Library/Frameworks/CsoundLib64.framework/Versions/Current/TclTk/tclcsound.dylib /usr/local/lib/tclcsound.dylib
+/bin/ln -sF /Library/Frameworks/CsoundLib64.framework/Versions/Current/libcsnd64.dylib /usr/local/lib/lib_csnd64.dylib
+/bin/ln -sF /Library/Frameworks/CsoundLib64.framework/Versions/Current/libcsnd64.dylib /usr/local/lib/libcsnd64.dylib
+
diff --git a/installer/macosx/PkgResources/CsoundLib/License.rtf b/installer/macosx/PkgResources/CsoundLib/License.rtf
new file mode 100755
index 0000000..5ddd899
--- /dev/null
+++ b/installer/macosx/PkgResources/CsoundLib/License.rtf
@@ -0,0 +1,521 @@
+{\rtf1\mac\ansicpg10000\cocoartf102
+{\fonttbl\f0\fswiss\fcharset77 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\margl1440\margr1440\vieww9000\viewh9000\viewkind0
+\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\ql\qnatural
+
+\f0\fs24 \cf0 		  GNU LESSER GENERAL PUBLIC LICENSE\
+		       Version 2.1, February 1999\
+\
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.\
+     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\
+ Everyone is permitted to copy and distribute verbatim copies\
+ of this license document, but changing it is not allowed.\
+\
+[This is the first released version of the Lesser GPL.  It also counts\
+ as the successor of the GNU Library Public License, version 2, hence\
+ the version number 2.1.]\
+\
+			    Preamble\
+\
+  The licenses for most software are designed to take away your\
+freedom to share and change it.  By contrast, the GNU General Public\
+Licenses are intended to guarantee your freedom to share and change\
+free software--to make sure the software is free for all its users.\
+\
+  This license, the Lesser General Public License, applies to some\
+specially designated software packages--typically libraries--of the\
+Free Software Foundation and other authors who decide to use it.  You\
+can use it too, but we suggest you first think carefully about whether\
+this license or the ordinary General Public License is the better\
+strategy to use in any particular case, based on the explanations below.\
+\
+  When we speak of free software, we are referring to freedom of use,\
+not price.  Our General Public Licenses are designed to make sure that\
+you have the freedom to distribute copies of free software (and charge\
+for this service if you wish); that you receive source code or can get\
+it if you want it; that you can change the software and use pieces of\
+it in new free programs; and that you are informed that you can do\
+these things.\
+\
+  To protect your rights, we need to make restrictions that forbid\
+distributors to deny you these rights or to ask you to surrender these\
+rights.  These restrictions translate to certain responsibilities for\
+you if you distribute copies of the library or if you modify it.\
+\
+  For example, if you distribute copies of the library, whether gratis\
+or for a fee, you must give the recipients all the rights that we gave\
+you.  You must make sure that they, too, receive or can get the source\
+code.  If you link other code with the library, you must provide\
+complete object files to the recipients, so that they can relink them\
+with the library after making changes to the library and recompiling\
+it.  And you must show them these terms so they know their rights.\
+\
+  We protect your rights with a two-step method: (1) we copyright the\
+library, and (2) we offer you this license, which gives you legal\
+permission to copy, distribute and/or modify the library.\
+\
+  To protect each distributor, we want to make it very clear that\
+there is no warranty for the free library.  Also, if the library is\
+modified by someone else and passed on, the recipients should know\
+that what they have is not the original version, so that the original\
+author's reputation will not be affected by problems that might be\
+introduced by others.\
+\
+\page \
+  Finally, software patents pose a constant threat to the existence of\
+any free program.  We wish to make sure that a company cannot\
+effectively restrict the users of a free program by obtaining a\
+restrictive license from a patent holder.  Therefore, we insist that\
+any patent license obtained for a version of the library must be\
+consistent with the full freedom of use specified in this license.\
+\
+  Most GNU software, including some libraries, is covered by the\
+ordinary GNU General Public License.  This license, the GNU Lesser\
+General Public License, applies to certain designated libraries, and\
+is quite different from the ordinary General Public License.  We use\
+this license for certain libraries in order to permit linking those\
+libraries into non-free programs.\
+\
+  When a program is linked with a library, whether statically or using\
+a shared library, the combination of the two is legally speaking a\
+combined work, a derivative of the original library.  The ordinary\
+General Public License therefore permits such linking only if the\
+entire combination fits its criteria of freedom.  The Lesser General\
+Public License permits more lax criteria for linking other code with\
+the library.\
+\
+  We call this license the "Lesser" General Public License because it\
+does Less to protect the user's freedom than the ordinary General\
+Public License.  It also provides other free software developers Less\
+of an advantage over competing non-free programs.  These disadvantages\
+are the reason we use the ordinary General Public License for many\
+libraries.  However, the Lesser license provides advantages in certain\
+special circumstances.\
+\
+  For example, on rare occasions, there may be a special need to\
+encourage the widest possible use of a certain library, so that it becomes\
+a de-facto standard.  To achieve this, non-free programs must be\
+allowed to use the library.  A more frequent case is that a free\
+library does the same job as widely used non-free libraries.  In this\
+case, there is little to gain by limiting the free library to free\
+software only, so we use the Lesser General Public License.\
+\
+  In other cases, permission to use a particular library in non-free\
+programs enables a greater number of people to use a large body of\
+free software.  For example, permission to use the GNU C Library in\
+non-free programs enables many more people to use the whole GNU\
+operating system, as well as its variant, the GNU/Linux operating\
+system.\
+\
+  Although the Lesser General Public License is Less protective of the\
+users' freedom, it does ensure that the user of a program that is\
+linked with the Library has the freedom and the wherewithal to run\
+that program using a modified version of the Library.\
+\
+  The precise terms and conditions for copying, distribution and\
+modification follow.  Pay close attention to the difference between a\
+"work based on the library" and a "work that uses the library".  The\
+former contains code derived from the library, whereas the latter must\
+be combined with the library in order to run.\
+\
+\page \
+		  GNU LESSER GENERAL PUBLIC LICENSE\
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\
+\
+  0. This License Agreement applies to any software library or other\
+program which contains a notice placed by the copyright holder or\
+other authorized party saying it may be distributed under the terms of\
+this Lesser General Public License (also called "this License").\
+Each licensee is addressed as "you".\
+\
+  A "library" means a collection of software functions and/or data\
+prepared so as to be conveniently linked with application programs\
+(which use some of those functions and data) to form executables.\
+\
+  The "Library", below, refers to any such software library or work\
+which has been distributed under these terms.  A "work based on the\
+Library" means either the Library or any derivative work under\
+copyright law: that is to say, a work containing the Library or a\
+portion of it, either verbatim or with modifications and/or translated\
+straightforwardly into another language.  (Hereinafter, translation is\
+included without limitation in the term "modification".)\
+\
+  "Source code" for a work means the preferred form of the work for\
+making modifications to it.  For a library, complete source code means\
+all the source code for all modules it contains, plus any associated\
+interface definition files, plus the scripts used to control compilation\
+and installation of the library.\
+\
+  Activities other than copying, distribution and modification are not\
+covered by this License; they are outside its scope.  The act of\
+running a program using the Library is not restricted, and output from\
+such a program is covered only if its contents constitute a work based\
+on the Library (independent of the use of the Library in a tool for\
+writing it).  Whether that is true depends on what the Library does\
+and what the program that uses the Library does.\
+  \
+  1. You may copy and distribute verbatim copies of the Library's\
+complete source code as you receive it, in any medium, provided that\
+you conspicuously and appropriately publish on each copy an\
+appropriate copyright notice and disclaimer of warranty; keep intact\
+all the notices that refer to this License and to the absence of any\
+warranty; and distribute a copy of this License along with the\
+Library.\
+\
+  You may charge a fee for the physical act of transferring a copy,\
+and you may at your option offer warranty protection in exchange for a\
+fee.\
+\
+\page \
+  2. You may modify your copy or copies of the Library or any portion\
+of it, thus forming a work based on the Library, and copy and\
+distribute such modifications or work under the terms of Section 1\
+above, provided that you also meet all of these conditions:\
+\
+    a) The modified work must itself be a software library.\
+\
+    b) You must cause the files modified to carry prominent notices\
+    stating that you changed the files and the date of any change.\
+\
+    c) You must cause the whole of the work to be licensed at no\
+    charge to all third parties under the terms of this License.\
+\
+    d) If a facility in the modified Library refers to a function or a\
+    table of data to be supplied by an application program that uses\
+    the facility, other than as an argument passed when the facility\
+    is invoked, then you must make a good faith effort to ensure that,\
+    in the event an application does not supply such function or\
+    table, the facility still operates, and performs whatever part of\
+    its purpose remains meaningful.\
+\
+    (For example, a function in a library to compute square roots has\
+    a purpose that is entirely well-defined independent of the\
+    application.  Therefore, Subsection 2d requires that any\
+    application-supplied function or table used by this function must\
+    be optional: if the application does not supply it, the square\
+    root function must still compute square roots.)\
+\
+These requirements apply to the modified work as a whole.  If\
+identifiable sections of that work are not derived from the Library,\
+and can be reasonably considered independent and separate works in\
+themselves, then this License, and its terms, do not apply to those\
+sections when you distribute them as separate works.  But when you\
+distribute the same sections as part of a whole which is a work based\
+on the Library, the distribution of the whole must be on the terms of\
+this License, whose permissions for other licensees extend to the\
+entire whole, and thus to each and every part regardless of who wrote\
+it.\
+\
+Thus, it is not the intent of this section to claim rights or contest\
+your rights to work written entirely by you; rather, the intent is to\
+exercise the right to control the distribution of derivative or\
+collective works based on the Library.\
+\
+In addition, mere aggregation of another work not based on the Library\
+with the Library (or with a work based on the Library) on a volume of\
+a storage or distribution medium does not bring the other work under\
+the scope of this License.\
+\
+  3. You may opt to apply the terms of the ordinary GNU General Public\
+License instead of this License to a given copy of the Library.  To do\
+this, you must alter all the notices that refer to this License, so\
+that they refer to the ordinary GNU General Public License, version 2,\
+instead of to this License.  (If a newer version than version 2 of the\
+ordinary GNU General Public License has appeared, then you can specify\
+that version instead if you wish.)  Do not make any other change in\
+these notices.\
+\
+\page \
+  Once this change is made in a given copy, it is irreversible for\
+that copy, so the ordinary GNU General Public License applies to all\
+subsequent copies and derivative works made from that copy.\
+\
+  This option is useful when you wish to copy part of the code of\
+the Library into a program that is not a library.\
+\
+  4. You may copy and distribute the Library (or a portion or\
+derivative of it, under Section 2) in object code or executable form\
+under the terms of Sections 1 and 2 above provided that you accompany\
+it with the complete corresponding machine-readable source code, which\
+must be distributed under the terms of Sections 1 and 2 above on a\
+medium customarily used for software interchange.\
+\
+  If distribution of object code is made by offering access to copy\
+from a designated place, then offering equivalent access to copy the\
+source code from the same place satisfies the requirement to\
+distribute the source code, even though third parties are not\
+compelled to copy the source along with the object code.\
+\
+  5. A program that contains no derivative of any portion of the\
+Library, but is designed to work with the Library by being compiled or\
+linked with it, is called a "work that uses the Library".  Such a\
+work, in isolation, is not a derivative work of the Library, and\
+therefore falls outside the scope of this License.\
+\
+  However, linking a "work that uses the Library" with the Library\
+creates an executable that is a derivative of the Library (because it\
+contains portions of the Library), rather than a "work that uses the\
+library".  The executable is therefore covered by this License.\
+Section 6 states terms for distribution of such executables.\
+\
+  When a "work that uses the Library" uses material from a header file\
+that is part of the Library, the object code for the work may be a\
+derivative work of the Library even though the source code is not.\
+Whether this is true is especially significant if the work can be\
+linked without the Library, or if the work is itself a library.  The\
+threshold for this to be true is not precisely defined by law.\
+\
+  If such an object file uses only numerical parameters, data\
+structure layouts and accessors, and small macros and small inline\
+functions (ten lines or less in length), then the use of the object\
+file is unrestricted, regardless of whether it is legally a derivative\
+work.  (Executables containing this object code plus portions of the\
+Library will still fall under Section 6.)\
+\
+  Otherwise, if the work is a derivative of the Library, you may\
+distribute the object code for the work under the terms of Section 6.\
+Any executables containing that work also fall under Section 6,\
+whether or not they are linked directly with the Library itself.\
+\
+\page \
+  6. As an exception to the Sections above, you may also combine or\
+link a "work that uses the Library" with the Library to produce a\
+work containing portions of the Library, and distribute that work\
+under terms of your choice, provided that the terms permit\
+modification of the work for the customer's own use and reverse\
+engineering for debugging such modifications.\
+\
+  You must give prominent notice with each copy of the work that the\
+Library is used in it and that the Library and its use are covered by\
+this License.  You must supply a copy of this License.  If the work\
+during execution displays copyright notices, you must include the\
+copyright notice for the Library among them, as well as a reference\
+directing the user to the copy of this License.  Also, you must do one\
+of these things:\
+\
+    a) Accompany the work with the complete corresponding\
+    machine-readable source code for the Library including whatever\
+    changes were used in the work (which must be distributed under\
+    Sections 1 and 2 above); and, if the work is an executable linked\
+    with the Library, with the complete machine-readable "work that\
+    uses the Library", as object code and/or source code, so that the\
+    user can modify the Library and then relink to produce a modified\
+    executable containing the modified Library.  (It is understood\
+    that the user who changes the contents of definitions files in the\
+    Library will not necessarily be able to recompile the application\
+    to use the modified definitions.)\
+\
+    b) Use a suitable shared library mechanism for linking with the\
+    Library.  A suitable mechanism is one that (1) uses at run time a\
+    copy of the library already present on the user's computer system,\
+    rather than copying library functions into the executable, and (2)\
+    will operate properly with a modified version of the library, if\
+    the user installs one, as long as the modified version is\
+    interface-compatible with the version that the work was made with.\
+\
+    c) Accompany the work with a written offer, valid for at\
+    least three years, to give the same user the materials\
+    specified in Subsection 6a, above, for a charge no more\
+    than the cost of performing this distribution.\
+\
+    d) If distribution of the work is made by offering access to copy\
+    from a designated place, offer equivalent access to copy the above\
+    specified materials from the same place.\
+\
+    e) Verify that the user has already received a copy of these\
+    materials or that you have already sent this user a copy.\
+\
+  For an executable, the required form of the "work that uses the\
+Library" must include any data and utility programs needed for\
+reproducing the executable from it.  However, as a special exception,\
+the materials to be distributed need not include anything that is\
+normally distributed (in either source or binary form) with the major\
+components (compiler, kernel, and so on) of the operating system on\
+which the executable runs, unless that component itself accompanies\
+the executable.\
+\
+  It may happen that this requirement contradicts the license\
+restrictions of other proprietary libraries that do not normally\
+accompany the operating system.  Such a contradiction means you cannot\
+use both them and the Library together in an executable that you\
+distribute.\
+\
+\page \
+  7. You may place library facilities that are a work based on the\
+Library side-by-side in a single library together with other library\
+facilities not covered by this License, and distribute such a combined\
+library, provided that the separate distribution of the work based on\
+the Library and of the other library facilities is otherwise\
+permitted, and provided that you do these two things:\
+\
+    a) Accompany the combined library with a copy of the same work\
+    based on the Library, uncombined with any other library\
+    facilities.  This must be distributed under the terms of the\
+    Sections above.\
+\
+    b) Give prominent notice with the combined library of the fact\
+    that part of it is a work based on the Library, and explaining\
+    where to find the accompanying uncombined form of the same work.\
+\
+  8. You may not copy, modify, sublicense, link with, or distribute\
+the Library except as expressly provided under this License.  Any\
+attempt otherwise to copy, modify, sublicense, link with, or\
+distribute the Library is void, and will automatically terminate your\
+rights under this License.  However, parties who have received copies,\
+or rights, from you under this License will not have their licenses\
+terminated so long as such parties remain in full compliance.\
+\
+  9. You are not required to accept this License, since you have not\
+signed it.  However, nothing else grants you permission to modify or\
+distribute the Library or its derivative works.  These actions are\
+prohibited by law if you do not accept this License.  Therefore, by\
+modifying or distributing the Library (or any work based on the\
+Library), you indicate your acceptance of this License to do so, and\
+all its terms and conditions for copying, distributing or modifying\
+the Library or works based on it.\
+\
+  10. Each time you redistribute the Library (or any work based on the\
+Library), the recipient automatically receives a license from the\
+original licensor to copy, distribute, link with or modify the Library\
+subject to these terms and conditions.  You may not impose any further\
+restrictions on the recipients' exercise of the rights granted herein.\
+You are not responsible for enforcing compliance by third parties with\
+this License.\
+\
+\page \
+  11. If, as a consequence of a court judgment or allegation of patent\
+infringement or for any other reason (not limited to patent issues),\
+conditions are imposed on you (whether by court order, agreement or\
+otherwise) that contradict the conditions of this License, they do not\
+excuse you from the conditions of this License.  If you cannot\
+distribute so as to satisfy simultaneously your obligations under this\
+License and any other pertinent obligations, then as a consequence you\
+may not distribute the Library at all.  For example, if a patent\
+license would not permit royalty-free redistribution of the Library by\
+all those who receive copies directly or indirectly through you, then\
+the only way you could satisfy both it and this License would be to\
+refrain entirely from distribution of the Library.\
+\
+If any portion of this section is held invalid or unenforceable under any\
+particular circumstance, the balance of the section is intended to apply,\
+and the section as a whole is intended to apply in other circumstances.\
+\
+It is not the purpose of this section to induce you to infringe any\
+patents or other property right claims or to contest validity of any\
+such claims; this section has the sole purpose of protecting the\
+integrity of the free software distribution system which is\
+implemented by public license practices.  Many people have made\
+generous contributions to the wide range of software distributed\
+through that system in reliance on consistent application of that\
+system; it is up to the author/donor to decide if he or she is willing\
+to distribute software through any other system and a licensee cannot\
+impose that choice.\
+\
+This section is intended to make thoroughly clear what is believed to\
+be a consequence of the rest of this License.\
+\
+  12. If the distribution and/or use of the Library is restricted in\
+certain countries either by patents or by copyrighted interfaces, the\
+original copyright holder who places the Library under this License may add\
+an explicit geographical distribution limitation excluding those countries,\
+so that distribution is permitted only in or among countries not thus\
+excluded.  In such case, this License incorporates the limitation as if\
+written in the body of this License.\
+\
+  13. The Free Software Foundation may publish revised and/or new\
+versions of the Lesser General Public License from time to time.\
+Such new versions will be similar in spirit to the present version,\
+but may differ in detail to address new problems or concerns.\
+\
+Each version is given a distinguishing version number.  If the Library\
+specifies a version number of this License which applies to it and\
+"any later version", you have the option of following the terms and\
+conditions either of that version or of any later version published by\
+the Free Software Foundation.  If the Library does not specify a\
+license version number, you may choose any version ever published by\
+the Free Software Foundation.\
+\
+\page \
+  14. If you wish to incorporate parts of the Library into other free\
+programs whose distribution conditions are incompatible with these,\
+write to the author to ask for permission.  For software which is\
+copyrighted by the Free Software Foundation, write to the Free\
+Software Foundation; we sometimes make exceptions for this.  Our\
+decision will be guided by the two goals of preserving the free status\
+of all derivatives of our free software and of promoting the sharing\
+and reuse of software generally.\
+\
+			    NO WARRANTY\
+\
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO\
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.\
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR\
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY\
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE\
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE\
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME\
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.\
+\
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN\
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY\
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU\
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR\
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE\
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING\
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A\
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF\
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\
+DAMAGES.\
+\
+		     END OF TERMS AND CONDITIONS\
+\
+\page \
+           How to Apply These Terms to Your New Libraries\
+\
+  If you develop a new library, and you want it to be of the greatest\
+possible use to the public, we recommend making it free software that\
+everyone can redistribute and change.  You can do so by permitting\
+redistribution under these terms (or, alternatively, under the terms of the\
+ordinary General Public License).\
+\
+  To apply these terms, attach the following notices to the library.  It is\
+safest to attach them to the start of each source file to most effectively\
+convey the exclusion of warranty; and each file should have at least the\
+"copyright" line and a pointer to where the full notice is found.\
+\
+    <one line to give the library's name and a brief idea of what it does.>\
+    Copyright (C) <year>  <name of author>\
+\
+    This library is free software; you can redistribute it and/or\
+    modify it under the terms of the GNU Lesser General Public\
+    License as published by the Free Software Foundation; either\
+    version 2.1 of the License, or (at your option) any later version.\
+\
+    This library 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\
+    Lesser General Public License for more details.\
+\
+    You should have received a copy of the GNU Lesser General Public\
+    License along with this library; if not, write to the Free Software\
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\
+\
+Also add information on how to contact you by electronic and paper mail.\
+\
+You should also get your employer (if you work as a programmer) or your\
+school, if any, to sign a "copyright disclaimer" for the library, if\
+necessary.  Here is a sample; alter the names:\
+\
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the\
+  library `Frob' (a library for tweaking knobs) written by James Random Hacker.\
+\
+  <signature of Ty Coon>, 1 April 1990\
+  Ty Coon, President of Vice\
+\
+That's all there is to it!\
+\
+\
+\
+}
\ No newline at end of file
diff --git a/installer/macosx/PkgResources/CsoundLib/ReadMe.rtf b/installer/macosx/PkgResources/CsoundLib/ReadMe.rtf
new file mode 100755
index 0000000..7f7ab7a
--- /dev/null
+++ b/installer/macosx/PkgResources/CsoundLib/ReadMe.rtf
@@ -0,0 +1,11 @@
+{\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf540
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\margl1440\margr1440\vieww16680\viewh9760\viewkind0
+\pard\tx565\tx1133\tx1700\tx2266\tx2832\tx3401\tx3967\tx4535\tx5102\tx5669\tx6235\tx6802\ql\qnatural
+
+\f0\fs24 \cf0 Csound 5 Library (API version 2) Framework, 32-bit floats\
+\
+Victor Lazzarini, 2005\
+(c) 2005, The Csound Team, csound.sf.net\
+}
\ No newline at end of file
diff --git a/installer/macosx/PkgResources/CsoundLib/Welcome.rtf b/installer/macosx/PkgResources/CsoundLib/Welcome.rtf
new file mode 100755
index 0000000..499cbdb
--- /dev/null
+++ b/installer/macosx/PkgResources/CsoundLib/Welcome.rtf
@@ -0,0 +1,16 @@
+{\rtf1\mac\ansicpg10000\cocoartf102
+{\fonttbl\f0\fswiss\fcharset77 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\margl1440\margr1440\vieww9000\viewh9000\viewkind0
+\pard\tx565\tx1133\tx1700\tx2266\tx2833\tx3401\tx3967\tx4535\tx5102\tx5669\tx6235\tx6802\ql\qnatural
+
+\f0\fs24 \cf0 You are about to install the Csound 5 library in your\
+computer. This software will allow you to run Csound 5\
+applications.\
+\
+The Csound Team\
+csound.sf.net\
+\
+\
+\
+}
\ No newline at end of file
diff --git a/installer/macosx/PkgResources/CsoundLib/postinstall b/installer/macosx/PkgResources/CsoundLib/postinstall
new file mode 100755
index 0000000..0d76464
--- /dev/null
+++ b/installer/macosx/PkgResources/CsoundLib/postinstall
@@ -0,0 +1,3 @@
+#!/bin/sh
+#/bin/ln -sf /Library/Frameworks/CsoundLib.framework/Resources/Java/lib_jcsound.jnilib /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Libraries/lib_jcsound.jnilib
+
diff --git a/installer/macosx/PkgResources/CsoundLib/postupgrade b/installer/macosx/PkgResources/CsoundLib/postupgrade
new file mode 100755
index 0000000..0d76464
--- /dev/null
+++ b/installer/macosx/PkgResources/CsoundLib/postupgrade
@@ -0,0 +1,3 @@
+#!/bin/sh
+#/bin/ln -sf /Library/Frameworks/CsoundLib.framework/Resources/Java/lib_jcsound.jnilib /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Libraries/lib_jcsound.jnilib
+
diff --git a/installer/macosx/PkgResources/CsoundLib/preinstall b/installer/macosx/PkgResources/CsoundLib/preinstall
new file mode 100755
index 0000000..96edde3
--- /dev/null
+++ b/installer/macosx/PkgResources/CsoundLib/preinstall
@@ -0,0 +1,4 @@
+#!/bin/sh
+if /bin/test -d /Library/Frameworks/CsoundLib.Framework
+then /bin/rm -R /Library/Frameworks/CsoundLib.Framework
+fi
\ No newline at end of file
diff --git a/installer/macosx/PkgResources/CsoundLib/preupgrade b/installer/macosx/PkgResources/CsoundLib/preupgrade
new file mode 100755
index 0000000..96edde3
--- /dev/null
+++ b/installer/macosx/PkgResources/CsoundLib/preupgrade
@@ -0,0 +1,4 @@
+#!/bin/sh
+if /bin/test -d /Library/Frameworks/CsoundLib.Framework
+then /bin/rm -R /Library/Frameworks/CsoundLib.Framework
+fi
\ No newline at end of file
diff --git a/installer/macosx/PkgResources/CsoundLib64/License.rtf b/installer/macosx/PkgResources/CsoundLib64/License.rtf
new file mode 100755
index 0000000..5ddd899
--- /dev/null
+++ b/installer/macosx/PkgResources/CsoundLib64/License.rtf
@@ -0,0 +1,521 @@
+{\rtf1\mac\ansicpg10000\cocoartf102
+{\fonttbl\f0\fswiss\fcharset77 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\margl1440\margr1440\vieww9000\viewh9000\viewkind0
+\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\ql\qnatural
+
+\f0\fs24 \cf0 		  GNU LESSER GENERAL PUBLIC LICENSE\
+		       Version 2.1, February 1999\
+\
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.\
+     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\
+ Everyone is permitted to copy and distribute verbatim copies\
+ of this license document, but changing it is not allowed.\
+\
+[This is the first released version of the Lesser GPL.  It also counts\
+ as the successor of the GNU Library Public License, version 2, hence\
+ the version number 2.1.]\
+\
+			    Preamble\
+\
+  The licenses for most software are designed to take away your\
+freedom to share and change it.  By contrast, the GNU General Public\
+Licenses are intended to guarantee your freedom to share and change\
+free software--to make sure the software is free for all its users.\
+\
+  This license, the Lesser General Public License, applies to some\
+specially designated software packages--typically libraries--of the\
+Free Software Foundation and other authors who decide to use it.  You\
+can use it too, but we suggest you first think carefully about whether\
+this license or the ordinary General Public License is the better\
+strategy to use in any particular case, based on the explanations below.\
+\
+  When we speak of free software, we are referring to freedom of use,\
+not price.  Our General Public Licenses are designed to make sure that\
+you have the freedom to distribute copies of free software (and charge\
+for this service if you wish); that you receive source code or can get\
+it if you want it; that you can change the software and use pieces of\
+it in new free programs; and that you are informed that you can do\
+these things.\
+\
+  To protect your rights, we need to make restrictions that forbid\
+distributors to deny you these rights or to ask you to surrender these\
+rights.  These restrictions translate to certain responsibilities for\
+you if you distribute copies of the library or if you modify it.\
+\
+  For example, if you distribute copies of the library, whether gratis\
+or for a fee, you must give the recipients all the rights that we gave\
+you.  You must make sure that they, too, receive or can get the source\
+code.  If you link other code with the library, you must provide\
+complete object files to the recipients, so that they can relink them\
+with the library after making changes to the library and recompiling\
+it.  And you must show them these terms so they know their rights.\
+\
+  We protect your rights with a two-step method: (1) we copyright the\
+library, and (2) we offer you this license, which gives you legal\
+permission to copy, distribute and/or modify the library.\
+\
+  To protect each distributor, we want to make it very clear that\
+there is no warranty for the free library.  Also, if the library is\
+modified by someone else and passed on, the recipients should know\
+that what they have is not the original version, so that the original\
+author's reputation will not be affected by problems that might be\
+introduced by others.\
+\
+\page \
+  Finally, software patents pose a constant threat to the existence of\
+any free program.  We wish to make sure that a company cannot\
+effectively restrict the users of a free program by obtaining a\
+restrictive license from a patent holder.  Therefore, we insist that\
+any patent license obtained for a version of the library must be\
+consistent with the full freedom of use specified in this license.\
+\
+  Most GNU software, including some libraries, is covered by the\
+ordinary GNU General Public License.  This license, the GNU Lesser\
+General Public License, applies to certain designated libraries, and\
+is quite different from the ordinary General Public License.  We use\
+this license for certain libraries in order to permit linking those\
+libraries into non-free programs.\
+\
+  When a program is linked with a library, whether statically or using\
+a shared library, the combination of the two is legally speaking a\
+combined work, a derivative of the original library.  The ordinary\
+General Public License therefore permits such linking only if the\
+entire combination fits its criteria of freedom.  The Lesser General\
+Public License permits more lax criteria for linking other code with\
+the library.\
+\
+  We call this license the "Lesser" General Public License because it\
+does Less to protect the user's freedom than the ordinary General\
+Public License.  It also provides other free software developers Less\
+of an advantage over competing non-free programs.  These disadvantages\
+are the reason we use the ordinary General Public License for many\
+libraries.  However, the Lesser license provides advantages in certain\
+special circumstances.\
+\
+  For example, on rare occasions, there may be a special need to\
+encourage the widest possible use of a certain library, so that it becomes\
+a de-facto standard.  To achieve this, non-free programs must be\
+allowed to use the library.  A more frequent case is that a free\
+library does the same job as widely used non-free libraries.  In this\
+case, there is little to gain by limiting the free library to free\
+software only, so we use the Lesser General Public License.\
+\
+  In other cases, permission to use a particular library in non-free\
+programs enables a greater number of people to use a large body of\
+free software.  For example, permission to use the GNU C Library in\
+non-free programs enables many more people to use the whole GNU\
+operating system, as well as its variant, the GNU/Linux operating\
+system.\
+\
+  Although the Lesser General Public License is Less protective of the\
+users' freedom, it does ensure that the user of a program that is\
+linked with the Library has the freedom and the wherewithal to run\
+that program using a modified version of the Library.\
+\
+  The precise terms and conditions for copying, distribution and\
+modification follow.  Pay close attention to the difference between a\
+"work based on the library" and a "work that uses the library".  The\
+former contains code derived from the library, whereas the latter must\
+be combined with the library in order to run.\
+\
+\page \
+		  GNU LESSER GENERAL PUBLIC LICENSE\
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\
+\
+  0. This License Agreement applies to any software library or other\
+program which contains a notice placed by the copyright holder or\
+other authorized party saying it may be distributed under the terms of\
+this Lesser General Public License (also called "this License").\
+Each licensee is addressed as "you".\
+\
+  A "library" means a collection of software functions and/or data\
+prepared so as to be conveniently linked with application programs\
+(which use some of those functions and data) to form executables.\
+\
+  The "Library", below, refers to any such software library or work\
+which has been distributed under these terms.  A "work based on the\
+Library" means either the Library or any derivative work under\
+copyright law: that is to say, a work containing the Library or a\
+portion of it, either verbatim or with modifications and/or translated\
+straightforwardly into another language.  (Hereinafter, translation is\
+included without limitation in the term "modification".)\
+\
+  "Source code" for a work means the preferred form of the work for\
+making modifications to it.  For a library, complete source code means\
+all the source code for all modules it contains, plus any associated\
+interface definition files, plus the scripts used to control compilation\
+and installation of the library.\
+\
+  Activities other than copying, distribution and modification are not\
+covered by this License; they are outside its scope.  The act of\
+running a program using the Library is not restricted, and output from\
+such a program is covered only if its contents constitute a work based\
+on the Library (independent of the use of the Library in a tool for\
+writing it).  Whether that is true depends on what the Library does\
+and what the program that uses the Library does.\
+  \
+  1. You may copy and distribute verbatim copies of the Library's\
+complete source code as you receive it, in any medium, provided that\
+you conspicuously and appropriately publish on each copy an\
+appropriate copyright notice and disclaimer of warranty; keep intact\
+all the notices that refer to this License and to the absence of any\
+warranty; and distribute a copy of this License along with the\
+Library.\
+\
+  You may charge a fee for the physical act of transferring a copy,\
+and you may at your option offer warranty protection in exchange for a\
+fee.\
+\
+\page \
+  2. You may modify your copy or copies of the Library or any portion\
+of it, thus forming a work based on the Library, and copy and\
+distribute such modifications or work under the terms of Section 1\
+above, provided that you also meet all of these conditions:\
+\
+    a) The modified work must itself be a software library.\
+\
+    b) You must cause the files modified to carry prominent notices\
+    stating that you changed the files and the date of any change.\
+\
+    c) You must cause the whole of the work to be licensed at no\
+    charge to all third parties under the terms of this License.\
+\
+    d) If a facility in the modified Library refers to a function or a\
+    table of data to be supplied by an application program that uses\
+    the facility, other than as an argument passed when the facility\
+    is invoked, then you must make a good faith effort to ensure that,\
+    in the event an application does not supply such function or\
+    table, the facility still operates, and performs whatever part of\
+    its purpose remains meaningful.\
+\
+    (For example, a function in a library to compute square roots has\
+    a purpose that is entirely well-defined independent of the\
+    application.  Therefore, Subsection 2d requires that any\
+    application-supplied function or table used by this function must\
+    be optional: if the application does not supply it, the square\
+    root function must still compute square roots.)\
+\
+These requirements apply to the modified work as a whole.  If\
+identifiable sections of that work are not derived from the Library,\
+and can be reasonably considered independent and separate works in\
+themselves, then this License, and its terms, do not apply to those\
+sections when you distribute them as separate works.  But when you\
+distribute the same sections as part of a whole which is a work based\
+on the Library, the distribution of the whole must be on the terms of\
+this License, whose permissions for other licensees extend to the\
+entire whole, and thus to each and every part regardless of who wrote\
+it.\
+\
+Thus, it is not the intent of this section to claim rights or contest\
+your rights to work written entirely by you; rather, the intent is to\
+exercise the right to control the distribution of derivative or\
+collective works based on the Library.\
+\
+In addition, mere aggregation of another work not based on the Library\
+with the Library (or with a work based on the Library) on a volume of\
+a storage or distribution medium does not bring the other work under\
+the scope of this License.\
+\
+  3. You may opt to apply the terms of the ordinary GNU General Public\
+License instead of this License to a given copy of the Library.  To do\
+this, you must alter all the notices that refer to this License, so\
+that they refer to the ordinary GNU General Public License, version 2,\
+instead of to this License.  (If a newer version than version 2 of the\
+ordinary GNU General Public License has appeared, then you can specify\
+that version instead if you wish.)  Do not make any other change in\
+these notices.\
+\
+\page \
+  Once this change is made in a given copy, it is irreversible for\
+that copy, so the ordinary GNU General Public License applies to all\
+subsequent copies and derivative works made from that copy.\
+\
+  This option is useful when you wish to copy part of the code of\
+the Library into a program that is not a library.\
+\
+  4. You may copy and distribute the Library (or a portion or\
+derivative of it, under Section 2) in object code or executable form\
+under the terms of Sections 1 and 2 above provided that you accompany\
+it with the complete corresponding machine-readable source code, which\
+must be distributed under the terms of Sections 1 and 2 above on a\
+medium customarily used for software interchange.\
+\
+  If distribution of object code is made by offering access to copy\
+from a designated place, then offering equivalent access to copy the\
+source code from the same place satisfies the requirement to\
+distribute the source code, even though third parties are not\
+compelled to copy the source along with the object code.\
+\
+  5. A program that contains no derivative of any portion of the\
+Library, but is designed to work with the Library by being compiled or\
+linked with it, is called a "work that uses the Library".  Such a\
+work, in isolation, is not a derivative work of the Library, and\
+therefore falls outside the scope of this License.\
+\
+  However, linking a "work that uses the Library" with the Library\
+creates an executable that is a derivative of the Library (because it\
+contains portions of the Library), rather than a "work that uses the\
+library".  The executable is therefore covered by this License.\
+Section 6 states terms for distribution of such executables.\
+\
+  When a "work that uses the Library" uses material from a header file\
+that is part of the Library, the object code for the work may be a\
+derivative work of the Library even though the source code is not.\
+Whether this is true is especially significant if the work can be\
+linked without the Library, or if the work is itself a library.  The\
+threshold for this to be true is not precisely defined by law.\
+\
+  If such an object file uses only numerical parameters, data\
+structure layouts and accessors, and small macros and small inline\
+functions (ten lines or less in length), then the use of the object\
+file is unrestricted, regardless of whether it is legally a derivative\
+work.  (Executables containing this object code plus portions of the\
+Library will still fall under Section 6.)\
+\
+  Otherwise, if the work is a derivative of the Library, you may\
+distribute the object code for the work under the terms of Section 6.\
+Any executables containing that work also fall under Section 6,\
+whether or not they are linked directly with the Library itself.\
+\
+\page \
+  6. As an exception to the Sections above, you may also combine or\
+link a "work that uses the Library" with the Library to produce a\
+work containing portions of the Library, and distribute that work\
+under terms of your choice, provided that the terms permit\
+modification of the work for the customer's own use and reverse\
+engineering for debugging such modifications.\
+\
+  You must give prominent notice with each copy of the work that the\
+Library is used in it and that the Library and its use are covered by\
+this License.  You must supply a copy of this License.  If the work\
+during execution displays copyright notices, you must include the\
+copyright notice for the Library among them, as well as a reference\
+directing the user to the copy of this License.  Also, you must do one\
+of these things:\
+\
+    a) Accompany the work with the complete corresponding\
+    machine-readable source code for the Library including whatever\
+    changes were used in the work (which must be distributed under\
+    Sections 1 and 2 above); and, if the work is an executable linked\
+    with the Library, with the complete machine-readable "work that\
+    uses the Library", as object code and/or source code, so that the\
+    user can modify the Library and then relink to produce a modified\
+    executable containing the modified Library.  (It is understood\
+    that the user who changes the contents of definitions files in the\
+    Library will not necessarily be able to recompile the application\
+    to use the modified definitions.)\
+\
+    b) Use a suitable shared library mechanism for linking with the\
+    Library.  A suitable mechanism is one that (1) uses at run time a\
+    copy of the library already present on the user's computer system,\
+    rather than copying library functions into the executable, and (2)\
+    will operate properly with a modified version of the library, if\
+    the user installs one, as long as the modified version is\
+    interface-compatible with the version that the work was made with.\
+\
+    c) Accompany the work with a written offer, valid for at\
+    least three years, to give the same user the materials\
+    specified in Subsection 6a, above, for a charge no more\
+    than the cost of performing this distribution.\
+\
+    d) If distribution of the work is made by offering access to copy\
+    from a designated place, offer equivalent access to copy the above\
+    specified materials from the same place.\
+\
+    e) Verify that the user has already received a copy of these\
+    materials or that you have already sent this user a copy.\
+\
+  For an executable, the required form of the "work that uses the\
+Library" must include any data and utility programs needed for\
+reproducing the executable from it.  However, as a special exception,\
+the materials to be distributed need not include anything that is\
+normally distributed (in either source or binary form) with the major\
+components (compiler, kernel, and so on) of the operating system on\
+which the executable runs, unless that component itself accompanies\
+the executable.\
+\
+  It may happen that this requirement contradicts the license\
+restrictions of other proprietary libraries that do not normally\
+accompany the operating system.  Such a contradiction means you cannot\
+use both them and the Library together in an executable that you\
+distribute.\
+\
+\page \
+  7. You may place library facilities that are a work based on the\
+Library side-by-side in a single library together with other library\
+facilities not covered by this License, and distribute such a combined\
+library, provided that the separate distribution of the work based on\
+the Library and of the other library facilities is otherwise\
+permitted, and provided that you do these two things:\
+\
+    a) Accompany the combined library with a copy of the same work\
+    based on the Library, uncombined with any other library\
+    facilities.  This must be distributed under the terms of the\
+    Sections above.\
+\
+    b) Give prominent notice with the combined library of the fact\
+    that part of it is a work based on the Library, and explaining\
+    where to find the accompanying uncombined form of the same work.\
+\
+  8. You may not copy, modify, sublicense, link with, or distribute\
+the Library except as expressly provided under this License.  Any\
+attempt otherwise to copy, modify, sublicense, link with, or\
+distribute the Library is void, and will automatically terminate your\
+rights under this License.  However, parties who have received copies,\
+or rights, from you under this License will not have their licenses\
+terminated so long as such parties remain in full compliance.\
+\
+  9. You are not required to accept this License, since you have not\
+signed it.  However, nothing else grants you permission to modify or\
+distribute the Library or its derivative works.  These actions are\
+prohibited by law if you do not accept this License.  Therefore, by\
+modifying or distributing the Library (or any work based on the\
+Library), you indicate your acceptance of this License to do so, and\
+all its terms and conditions for copying, distributing or modifying\
+the Library or works based on it.\
+\
+  10. Each time you redistribute the Library (or any work based on the\
+Library), the recipient automatically receives a license from the\
+original licensor to copy, distribute, link with or modify the Library\
+subject to these terms and conditions.  You may not impose any further\
+restrictions on the recipients' exercise of the rights granted herein.\
+You are not responsible for enforcing compliance by third parties with\
+this License.\
+\
+\page \
+  11. If, as a consequence of a court judgment or allegation of patent\
+infringement or for any other reason (not limited to patent issues),\
+conditions are imposed on you (whether by court order, agreement or\
+otherwise) that contradict the conditions of this License, they do not\
+excuse you from the conditions of this License.  If you cannot\
+distribute so as to satisfy simultaneously your obligations under this\
+License and any other pertinent obligations, then as a consequence you\
+may not distribute the Library at all.  For example, if a patent\
+license would not permit royalty-free redistribution of the Library by\
+all those who receive copies directly or indirectly through you, then\
+the only way you could satisfy both it and this License would be to\
+refrain entirely from distribution of the Library.\
+\
+If any portion of this section is held invalid or unenforceable under any\
+particular circumstance, the balance of the section is intended to apply,\
+and the section as a whole is intended to apply in other circumstances.\
+\
+It is not the purpose of this section to induce you to infringe any\
+patents or other property right claims or to contest validity of any\
+such claims; this section has the sole purpose of protecting the\
+integrity of the free software distribution system which is\
+implemented by public license practices.  Many people have made\
+generous contributions to the wide range of software distributed\
+through that system in reliance on consistent application of that\
+system; it is up to the author/donor to decide if he or she is willing\
+to distribute software through any other system and a licensee cannot\
+impose that choice.\
+\
+This section is intended to make thoroughly clear what is believed to\
+be a consequence of the rest of this License.\
+\
+  12. If the distribution and/or use of the Library is restricted in\
+certain countries either by patents or by copyrighted interfaces, the\
+original copyright holder who places the Library under this License may add\
+an explicit geographical distribution limitation excluding those countries,\
+so that distribution is permitted only in or among countries not thus\
+excluded.  In such case, this License incorporates the limitation as if\
+written in the body of this License.\
+\
+  13. The Free Software Foundation may publish revised and/or new\
+versions of the Lesser General Public License from time to time.\
+Such new versions will be similar in spirit to the present version,\
+but may differ in detail to address new problems or concerns.\
+\
+Each version is given a distinguishing version number.  If the Library\
+specifies a version number of this License which applies to it and\
+"any later version", you have the option of following the terms and\
+conditions either of that version or of any later version published by\
+the Free Software Foundation.  If the Library does not specify a\
+license version number, you may choose any version ever published by\
+the Free Software Foundation.\
+\
+\page \
+  14. If you wish to incorporate parts of the Library into other free\
+programs whose distribution conditions are incompatible with these,\
+write to the author to ask for permission.  For software which is\
+copyrighted by the Free Software Foundation, write to the Free\
+Software Foundation; we sometimes make exceptions for this.  Our\
+decision will be guided by the two goals of preserving the free status\
+of all derivatives of our free software and of promoting the sharing\
+and reuse of software generally.\
+\
+			    NO WARRANTY\
+\
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO\
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.\
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR\
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY\
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE\
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE\
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME\
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.\
+\
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN\
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY\
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU\
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR\
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE\
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING\
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A\
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF\
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\
+DAMAGES.\
+\
+		     END OF TERMS AND CONDITIONS\
+\
+\page \
+           How to Apply These Terms to Your New Libraries\
+\
+  If you develop a new library, and you want it to be of the greatest\
+possible use to the public, we recommend making it free software that\
+everyone can redistribute and change.  You can do so by permitting\
+redistribution under these terms (or, alternatively, under the terms of the\
+ordinary General Public License).\
+\
+  To apply these terms, attach the following notices to the library.  It is\
+safest to attach them to the start of each source file to most effectively\
+convey the exclusion of warranty; and each file should have at least the\
+"copyright" line and a pointer to where the full notice is found.\
+\
+    <one line to give the library's name and a brief idea of what it does.>\
+    Copyright (C) <year>  <name of author>\
+\
+    This library is free software; you can redistribute it and/or\
+    modify it under the terms of the GNU Lesser General Public\
+    License as published by the Free Software Foundation; either\
+    version 2.1 of the License, or (at your option) any later version.\
+\
+    This library 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\
+    Lesser General Public License for more details.\
+\
+    You should have received a copy of the GNU Lesser General Public\
+    License along with this library; if not, write to the Free Software\
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\
+\
+Also add information on how to contact you by electronic and paper mail.\
+\
+You should also get your employer (if you work as a programmer) or your\
+school, if any, to sign a "copyright disclaimer" for the library, if\
+necessary.  Here is a sample; alter the names:\
+\
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the\
+  library `Frob' (a library for tweaking knobs) written by James Random Hacker.\
+\
+  <signature of Ty Coon>, 1 April 1990\
+  Ty Coon, President of Vice\
+\
+That's all there is to it!\
+\
+\
+\
+}
\ No newline at end of file
diff --git a/installer/macosx/PkgResources/CsoundLib64/ReadMe.rtf b/installer/macosx/PkgResources/CsoundLib64/ReadMe.rtf
new file mode 100755
index 0000000..345ccdc
--- /dev/null
+++ b/installer/macosx/PkgResources/CsoundLib64/ReadMe.rtf
@@ -0,0 +1,12 @@
+{\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf540
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\margl1440\margr1440\vieww16680\viewh9760\viewkind0
+\pard\tx565\tx1133\tx1700\tx2266\tx2832\tx3401\tx3967\tx4535\tx5102\tx5669\tx6235\tx6802\ql\qnatural
+
+\f0\fs24 \cf0 Csound 5 Library (API version 2) Framework, 64-bit floats\
+\
+\
+Victor Lazzarini, 2005\
+(c) 2005, The Csound Team, csound.sf.net\
+}
\ No newline at end of file
diff --git a/installer/macosx/PkgResources/CsoundLib64/Welcome.rtf b/installer/macosx/PkgResources/CsoundLib64/Welcome.rtf
new file mode 100755
index 0000000..499cbdb
--- /dev/null
+++ b/installer/macosx/PkgResources/CsoundLib64/Welcome.rtf
@@ -0,0 +1,16 @@
+{\rtf1\mac\ansicpg10000\cocoartf102
+{\fonttbl\f0\fswiss\fcharset77 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\margl1440\margr1440\vieww9000\viewh9000\viewkind0
+\pard\tx565\tx1133\tx1700\tx2266\tx2833\tx3401\tx3967\tx4535\tx5102\tx5669\tx6235\tx6802\ql\qnatural
+
+\f0\fs24 \cf0 You are about to install the Csound 5 library in your\
+computer. This software will allow you to run Csound 5\
+applications.\
+\
+The Csound Team\
+csound.sf.net\
+\
+\
+\
+}
\ No newline at end of file
diff --git a/installer/macosx/PkgResources/CsoundLib64/postinstall b/installer/macosx/PkgResources/CsoundLib64/postinstall
new file mode 100755
index 0000000..b22c136
--- /dev/null
+++ b/installer/macosx/PkgResources/CsoundLib64/postinstall
@@ -0,0 +1,29 @@
+#!/bin/sh
+/bin/ln -sF /Library/Frameworks/CsoundLib64.framework/Resources/Java/lib_jcsound.jnilib /Library/Java/Extensions/lib_jcsound.jnilib
+
+PY_SRC_DIR="/Library/Frameworks/CsoundLib64.framework/Resources/Python/Current"
+
+PYTHON_DIR="/Library/Python/2.7/site-packages"
+if [ -d "$PYTHON_DIR" ]; then
+  /bin/ln -sF $PY_SRC_DIR/CsoundAC.py $PYTHON_DIR
+  /bin/ln -sF $PY_SRC_DIR/_CsoundAC.so $PYTHON_DIR
+  /bin/ln -sF $PY_SRC_DIR/_csnd.so $PYTHON_DIR
+  /bin/ln -sF $PY_SRC_DIR/csnd.py $PYTHON_DIR
+fi
+
+
+PYTHON_DIR="/Library/Python/2.6/site-packages"
+if [ -d "$PYTHON_DIR" ]; then
+  /bin/ln -sF $PY_SRC_DIR/CsoundAC.py $PYTHON_DIR
+  /bin/ln -sF $PY_SRC_DIR/_CsoundAC.so $PYTHON_DIR
+  /bin/ln -sF $PY_SRC_DIR/_csnd.so $PYTHON_DIR
+  /bin/ln -sF $PY_SRC_DIR/csnd.py $PYTHON_DIR
+fi
+
+PYTHON_DIR="/Library/Python/2.5/site-packages"
+if [ -d "$PYTHON_DIR" ]; then
+  /bin/ln -sF $PY_SRC_DIR/CsoundAC.py $PYTHON_DIR
+  /bin/ln -sF $PY_SRC_DIR/_CsoundAC.so $PYTHON_DIR
+  /bin/ln -sF $PY_SRC_DIR/_csnd.so $PYTHON_DIR
+  /bin/ln -sF $PY_SRC_DIR/csnd.py $PYTHON_DIR
+fi
diff --git a/installer/macosx/PkgResources/CsoundLib64/postupgrade b/installer/macosx/PkgResources/CsoundLib64/postupgrade
new file mode 100755
index 0000000..b22c136
--- /dev/null
+++ b/installer/macosx/PkgResources/CsoundLib64/postupgrade
@@ -0,0 +1,29 @@
+#!/bin/sh
+/bin/ln -sF /Library/Frameworks/CsoundLib64.framework/Resources/Java/lib_jcsound.jnilib /Library/Java/Extensions/lib_jcsound.jnilib
+
+PY_SRC_DIR="/Library/Frameworks/CsoundLib64.framework/Resources/Python/Current"
+
+PYTHON_DIR="/Library/Python/2.7/site-packages"
+if [ -d "$PYTHON_DIR" ]; then
+  /bin/ln -sF $PY_SRC_DIR/CsoundAC.py $PYTHON_DIR
+  /bin/ln -sF $PY_SRC_DIR/_CsoundAC.so $PYTHON_DIR
+  /bin/ln -sF $PY_SRC_DIR/_csnd.so $PYTHON_DIR
+  /bin/ln -sF $PY_SRC_DIR/csnd.py $PYTHON_DIR
+fi
+
+
+PYTHON_DIR="/Library/Python/2.6/site-packages"
+if [ -d "$PYTHON_DIR" ]; then
+  /bin/ln -sF $PY_SRC_DIR/CsoundAC.py $PYTHON_DIR
+  /bin/ln -sF $PY_SRC_DIR/_CsoundAC.so $PYTHON_DIR
+  /bin/ln -sF $PY_SRC_DIR/_csnd.so $PYTHON_DIR
+  /bin/ln -sF $PY_SRC_DIR/csnd.py $PYTHON_DIR
+fi
+
+PYTHON_DIR="/Library/Python/2.5/site-packages"
+if [ -d "$PYTHON_DIR" ]; then
+  /bin/ln -sF $PY_SRC_DIR/CsoundAC.py $PYTHON_DIR
+  /bin/ln -sF $PY_SRC_DIR/_CsoundAC.so $PYTHON_DIR
+  /bin/ln -sF $PY_SRC_DIR/_csnd.so $PYTHON_DIR
+  /bin/ln -sF $PY_SRC_DIR/csnd.py $PYTHON_DIR
+fi
diff --git a/installer/macosx/PkgResources/CsoundLib64/preinstall b/installer/macosx/PkgResources/CsoundLib64/preinstall
new file mode 100755
index 0000000..fed3638
--- /dev/null
+++ b/installer/macosx/PkgResources/CsoundLib64/preinstall
@@ -0,0 +1,4 @@
+#!/bin/sh
+if /bin/test -d /Library/Frameworks/CsoundLib64.Framework
+then /bin/rm -R /Library/Frameworks/CsoundLib64.Framework
+fi
\ No newline at end of file
diff --git a/installer/macosx/PkgResources/CsoundLib64/preupgrade b/installer/macosx/PkgResources/CsoundLib64/preupgrade
new file mode 100755
index 0000000..fed3638
--- /dev/null
+++ b/installer/macosx/PkgResources/CsoundLib64/preupgrade
@@ -0,0 +1,4 @@
+#!/bin/sh
+if /bin/test -d /Library/Frameworks/CsoundLib64.Framework
+then /bin/rm -R /Library/Frameworks/CsoundLib64.Framework
+fi
\ No newline at end of file
diff --git a/installer/macosx/PkgResources/SupportLibs/License.rtf b/installer/macosx/PkgResources/SupportLibs/License.rtf
new file mode 100755
index 0000000..5ddd899
--- /dev/null
+++ b/installer/macosx/PkgResources/SupportLibs/License.rtf
@@ -0,0 +1,521 @@
+{\rtf1\mac\ansicpg10000\cocoartf102
+{\fonttbl\f0\fswiss\fcharset77 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\margl1440\margr1440\vieww9000\viewh9000\viewkind0
+\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\ql\qnatural
+
+\f0\fs24 \cf0 		  GNU LESSER GENERAL PUBLIC LICENSE\
+		       Version 2.1, February 1999\
+\
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.\
+     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\
+ Everyone is permitted to copy and distribute verbatim copies\
+ of this license document, but changing it is not allowed.\
+\
+[This is the first released version of the Lesser GPL.  It also counts\
+ as the successor of the GNU Library Public License, version 2, hence\
+ the version number 2.1.]\
+\
+			    Preamble\
+\
+  The licenses for most software are designed to take away your\
+freedom to share and change it.  By contrast, the GNU General Public\
+Licenses are intended to guarantee your freedom to share and change\
+free software--to make sure the software is free for all its users.\
+\
+  This license, the Lesser General Public License, applies to some\
+specially designated software packages--typically libraries--of the\
+Free Software Foundation and other authors who decide to use it.  You\
+can use it too, but we suggest you first think carefully about whether\
+this license or the ordinary General Public License is the better\
+strategy to use in any particular case, based on the explanations below.\
+\
+  When we speak of free software, we are referring to freedom of use,\
+not price.  Our General Public Licenses are designed to make sure that\
+you have the freedom to distribute copies of free software (and charge\
+for this service if you wish); that you receive source code or can get\
+it if you want it; that you can change the software and use pieces of\
+it in new free programs; and that you are informed that you can do\
+these things.\
+\
+  To protect your rights, we need to make restrictions that forbid\
+distributors to deny you these rights or to ask you to surrender these\
+rights.  These restrictions translate to certain responsibilities for\
+you if you distribute copies of the library or if you modify it.\
+\
+  For example, if you distribute copies of the library, whether gratis\
+or for a fee, you must give the recipients all the rights that we gave\
+you.  You must make sure that they, too, receive or can get the source\
+code.  If you link other code with the library, you must provide\
+complete object files to the recipients, so that they can relink them\
+with the library after making changes to the library and recompiling\
+it.  And you must show them these terms so they know their rights.\
+\
+  We protect your rights with a two-step method: (1) we copyright the\
+library, and (2) we offer you this license, which gives you legal\
+permission to copy, distribute and/or modify the library.\
+\
+  To protect each distributor, we want to make it very clear that\
+there is no warranty for the free library.  Also, if the library is\
+modified by someone else and passed on, the recipients should know\
+that what they have is not the original version, so that the original\
+author's reputation will not be affected by problems that might be\
+introduced by others.\
+\
+\page \
+  Finally, software patents pose a constant threat to the existence of\
+any free program.  We wish to make sure that a company cannot\
+effectively restrict the users of a free program by obtaining a\
+restrictive license from a patent holder.  Therefore, we insist that\
+any patent license obtained for a version of the library must be\
+consistent with the full freedom of use specified in this license.\
+\
+  Most GNU software, including some libraries, is covered by the\
+ordinary GNU General Public License.  This license, the GNU Lesser\
+General Public License, applies to certain designated libraries, and\
+is quite different from the ordinary General Public License.  We use\
+this license for certain libraries in order to permit linking those\
+libraries into non-free programs.\
+\
+  When a program is linked with a library, whether statically or using\
+a shared library, the combination of the two is legally speaking a\
+combined work, a derivative of the original library.  The ordinary\
+General Public License therefore permits such linking only if the\
+entire combination fits its criteria of freedom.  The Lesser General\
+Public License permits more lax criteria for linking other code with\
+the library.\
+\
+  We call this license the "Lesser" General Public License because it\
+does Less to protect the user's freedom than the ordinary General\
+Public License.  It also provides other free software developers Less\
+of an advantage over competing non-free programs.  These disadvantages\
+are the reason we use the ordinary General Public License for many\
+libraries.  However, the Lesser license provides advantages in certain\
+special circumstances.\
+\
+  For example, on rare occasions, there may be a special need to\
+encourage the widest possible use of a certain library, so that it becomes\
+a de-facto standard.  To achieve this, non-free programs must be\
+allowed to use the library.  A more frequent case is that a free\
+library does the same job as widely used non-free libraries.  In this\
+case, there is little to gain by limiting the free library to free\
+software only, so we use the Lesser General Public License.\
+\
+  In other cases, permission to use a particular library in non-free\
+programs enables a greater number of people to use a large body of\
+free software.  For example, permission to use the GNU C Library in\
+non-free programs enables many more people to use the whole GNU\
+operating system, as well as its variant, the GNU/Linux operating\
+system.\
+\
+  Although the Lesser General Public License is Less protective of the\
+users' freedom, it does ensure that the user of a program that is\
+linked with the Library has the freedom and the wherewithal to run\
+that program using a modified version of the Library.\
+\
+  The precise terms and conditions for copying, distribution and\
+modification follow.  Pay close attention to the difference between a\
+"work based on the library" and a "work that uses the library".  The\
+former contains code derived from the library, whereas the latter must\
+be combined with the library in order to run.\
+\
+\page \
+		  GNU LESSER GENERAL PUBLIC LICENSE\
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\
+\
+  0. This License Agreement applies to any software library or other\
+program which contains a notice placed by the copyright holder or\
+other authorized party saying it may be distributed under the terms of\
+this Lesser General Public License (also called "this License").\
+Each licensee is addressed as "you".\
+\
+  A "library" means a collection of software functions and/or data\
+prepared so as to be conveniently linked with application programs\
+(which use some of those functions and data) to form executables.\
+\
+  The "Library", below, refers to any such software library or work\
+which has been distributed under these terms.  A "work based on the\
+Library" means either the Library or any derivative work under\
+copyright law: that is to say, a work containing the Library or a\
+portion of it, either verbatim or with modifications and/or translated\
+straightforwardly into another language.  (Hereinafter, translation is\
+included without limitation in the term "modification".)\
+\
+  "Source code" for a work means the preferred form of the work for\
+making modifications to it.  For a library, complete source code means\
+all the source code for all modules it contains, plus any associated\
+interface definition files, plus the scripts used to control compilation\
+and installation of the library.\
+\
+  Activities other than copying, distribution and modification are not\
+covered by this License; they are outside its scope.  The act of\
+running a program using the Library is not restricted, and output from\
+such a program is covered only if its contents constitute a work based\
+on the Library (independent of the use of the Library in a tool for\
+writing it).  Whether that is true depends on what the Library does\
+and what the program that uses the Library does.\
+  \
+  1. You may copy and distribute verbatim copies of the Library's\
+complete source code as you receive it, in any medium, provided that\
+you conspicuously and appropriately publish on each copy an\
+appropriate copyright notice and disclaimer of warranty; keep intact\
+all the notices that refer to this License and to the absence of any\
+warranty; and distribute a copy of this License along with the\
+Library.\
+\
+  You may charge a fee for the physical act of transferring a copy,\
+and you may at your option offer warranty protection in exchange for a\
+fee.\
+\
+\page \
+  2. You may modify your copy or copies of the Library or any portion\
+of it, thus forming a work based on the Library, and copy and\
+distribute such modifications or work under the terms of Section 1\
+above, provided that you also meet all of these conditions:\
+\
+    a) The modified work must itself be a software library.\
+\
+    b) You must cause the files modified to carry prominent notices\
+    stating that you changed the files and the date of any change.\
+\
+    c) You must cause the whole of the work to be licensed at no\
+    charge to all third parties under the terms of this License.\
+\
+    d) If a facility in the modified Library refers to a function or a\
+    table of data to be supplied by an application program that uses\
+    the facility, other than as an argument passed when the facility\
+    is invoked, then you must make a good faith effort to ensure that,\
+    in the event an application does not supply such function or\
+    table, the facility still operates, and performs whatever part of\
+    its purpose remains meaningful.\
+\
+    (For example, a function in a library to compute square roots has\
+    a purpose that is entirely well-defined independent of the\
+    application.  Therefore, Subsection 2d requires that any\
+    application-supplied function or table used by this function must\
+    be optional: if the application does not supply it, the square\
+    root function must still compute square roots.)\
+\
+These requirements apply to the modified work as a whole.  If\
+identifiable sections of that work are not derived from the Library,\
+and can be reasonably considered independent and separate works in\
+themselves, then this License, and its terms, do not apply to those\
+sections when you distribute them as separate works.  But when you\
+distribute the same sections as part of a whole which is a work based\
+on the Library, the distribution of the whole must be on the terms of\
+this License, whose permissions for other licensees extend to the\
+entire whole, and thus to each and every part regardless of who wrote\
+it.\
+\
+Thus, it is not the intent of this section to claim rights or contest\
+your rights to work written entirely by you; rather, the intent is to\
+exercise the right to control the distribution of derivative or\
+collective works based on the Library.\
+\
+In addition, mere aggregation of another work not based on the Library\
+with the Library (or with a work based on the Library) on a volume of\
+a storage or distribution medium does not bring the other work under\
+the scope of this License.\
+\
+  3. You may opt to apply the terms of the ordinary GNU General Public\
+License instead of this License to a given copy of the Library.  To do\
+this, you must alter all the notices that refer to this License, so\
+that they refer to the ordinary GNU General Public License, version 2,\
+instead of to this License.  (If a newer version than version 2 of the\
+ordinary GNU General Public License has appeared, then you can specify\
+that version instead if you wish.)  Do not make any other change in\
+these notices.\
+\
+\page \
+  Once this change is made in a given copy, it is irreversible for\
+that copy, so the ordinary GNU General Public License applies to all\
+subsequent copies and derivative works made from that copy.\
+\
+  This option is useful when you wish to copy part of the code of\
+the Library into a program that is not a library.\
+\
+  4. You may copy and distribute the Library (or a portion or\
+derivative of it, under Section 2) in object code or executable form\
+under the terms of Sections 1 and 2 above provided that you accompany\
+it with the complete corresponding machine-readable source code, which\
+must be distributed under the terms of Sections 1 and 2 above on a\
+medium customarily used for software interchange.\
+\
+  If distribution of object code is made by offering access to copy\
+from a designated place, then offering equivalent access to copy the\
+source code from the same place satisfies the requirement to\
+distribute the source code, even though third parties are not\
+compelled to copy the source along with the object code.\
+\
+  5. A program that contains no derivative of any portion of the\
+Library, but is designed to work with the Library by being compiled or\
+linked with it, is called a "work that uses the Library".  Such a\
+work, in isolation, is not a derivative work of the Library, and\
+therefore falls outside the scope of this License.\
+\
+  However, linking a "work that uses the Library" with the Library\
+creates an executable that is a derivative of the Library (because it\
+contains portions of the Library), rather than a "work that uses the\
+library".  The executable is therefore covered by this License.\
+Section 6 states terms for distribution of such executables.\
+\
+  When a "work that uses the Library" uses material from a header file\
+that is part of the Library, the object code for the work may be a\
+derivative work of the Library even though the source code is not.\
+Whether this is true is especially significant if the work can be\
+linked without the Library, or if the work is itself a library.  The\
+threshold for this to be true is not precisely defined by law.\
+\
+  If such an object file uses only numerical parameters, data\
+structure layouts and accessors, and small macros and small inline\
+functions (ten lines or less in length), then the use of the object\
+file is unrestricted, regardless of whether it is legally a derivative\
+work.  (Executables containing this object code plus portions of the\
+Library will still fall under Section 6.)\
+\
+  Otherwise, if the work is a derivative of the Library, you may\
+distribute the object code for the work under the terms of Section 6.\
+Any executables containing that work also fall under Section 6,\
+whether or not they are linked directly with the Library itself.\
+\
+\page \
+  6. As an exception to the Sections above, you may also combine or\
+link a "work that uses the Library" with the Library to produce a\
+work containing portions of the Library, and distribute that work\
+under terms of your choice, provided that the terms permit\
+modification of the work for the customer's own use and reverse\
+engineering for debugging such modifications.\
+\
+  You must give prominent notice with each copy of the work that the\
+Library is used in it and that the Library and its use are covered by\
+this License.  You must supply a copy of this License.  If the work\
+during execution displays copyright notices, you must include the\
+copyright notice for the Library among them, as well as a reference\
+directing the user to the copy of this License.  Also, you must do one\
+of these things:\
+\
+    a) Accompany the work with the complete corresponding\
+    machine-readable source code for the Library including whatever\
+    changes were used in the work (which must be distributed under\
+    Sections 1 and 2 above); and, if the work is an executable linked\
+    with the Library, with the complete machine-readable "work that\
+    uses the Library", as object code and/or source code, so that the\
+    user can modify the Library and then relink to produce a modified\
+    executable containing the modified Library.  (It is understood\
+    that the user who changes the contents of definitions files in the\
+    Library will not necessarily be able to recompile the application\
+    to use the modified definitions.)\
+\
+    b) Use a suitable shared library mechanism for linking with the\
+    Library.  A suitable mechanism is one that (1) uses at run time a\
+    copy of the library already present on the user's computer system,\
+    rather than copying library functions into the executable, and (2)\
+    will operate properly with a modified version of the library, if\
+    the user installs one, as long as the modified version is\
+    interface-compatible with the version that the work was made with.\
+\
+    c) Accompany the work with a written offer, valid for at\
+    least three years, to give the same user the materials\
+    specified in Subsection 6a, above, for a charge no more\
+    than the cost of performing this distribution.\
+\
+    d) If distribution of the work is made by offering access to copy\
+    from a designated place, offer equivalent access to copy the above\
+    specified materials from the same place.\
+\
+    e) Verify that the user has already received a copy of these\
+    materials or that you have already sent this user a copy.\
+\
+  For an executable, the required form of the "work that uses the\
+Library" must include any data and utility programs needed for\
+reproducing the executable from it.  However, as a special exception,\
+the materials to be distributed need not include anything that is\
+normally distributed (in either source or binary form) with the major\
+components (compiler, kernel, and so on) of the operating system on\
+which the executable runs, unless that component itself accompanies\
+the executable.\
+\
+  It may happen that this requirement contradicts the license\
+restrictions of other proprietary libraries that do not normally\
+accompany the operating system.  Such a contradiction means you cannot\
+use both them and the Library together in an executable that you\
+distribute.\
+\
+\page \
+  7. You may place library facilities that are a work based on the\
+Library side-by-side in a single library together with other library\
+facilities not covered by this License, and distribute such a combined\
+library, provided that the separate distribution of the work based on\
+the Library and of the other library facilities is otherwise\
+permitted, and provided that you do these two things:\
+\
+    a) Accompany the combined library with a copy of the same work\
+    based on the Library, uncombined with any other library\
+    facilities.  This must be distributed under the terms of the\
+    Sections above.\
+\
+    b) Give prominent notice with the combined library of the fact\
+    that part of it is a work based on the Library, and explaining\
+    where to find the accompanying uncombined form of the same work.\
+\
+  8. You may not copy, modify, sublicense, link with, or distribute\
+the Library except as expressly provided under this License.  Any\
+attempt otherwise to copy, modify, sublicense, link with, or\
+distribute the Library is void, and will automatically terminate your\
+rights under this License.  However, parties who have received copies,\
+or rights, from you under this License will not have their licenses\
+terminated so long as such parties remain in full compliance.\
+\
+  9. You are not required to accept this License, since you have not\
+signed it.  However, nothing else grants you permission to modify or\
+distribute the Library or its derivative works.  These actions are\
+prohibited by law if you do not accept this License.  Therefore, by\
+modifying or distributing the Library (or any work based on the\
+Library), you indicate your acceptance of this License to do so, and\
+all its terms and conditions for copying, distributing or modifying\
+the Library or works based on it.\
+\
+  10. Each time you redistribute the Library (or any work based on the\
+Library), the recipient automatically receives a license from the\
+original licensor to copy, distribute, link with or modify the Library\
+subject to these terms and conditions.  You may not impose any further\
+restrictions on the recipients' exercise of the rights granted herein.\
+You are not responsible for enforcing compliance by third parties with\
+this License.\
+\
+\page \
+  11. If, as a consequence of a court judgment or allegation of patent\
+infringement or for any other reason (not limited to patent issues),\
+conditions are imposed on you (whether by court order, agreement or\
+otherwise) that contradict the conditions of this License, they do not\
+excuse you from the conditions of this License.  If you cannot\
+distribute so as to satisfy simultaneously your obligations under this\
+License and any other pertinent obligations, then as a consequence you\
+may not distribute the Library at all.  For example, if a patent\
+license would not permit royalty-free redistribution of the Library by\
+all those who receive copies directly or indirectly through you, then\
+the only way you could satisfy both it and this License would be to\
+refrain entirely from distribution of the Library.\
+\
+If any portion of this section is held invalid or unenforceable under any\
+particular circumstance, the balance of the section is intended to apply,\
+and the section as a whole is intended to apply in other circumstances.\
+\
+It is not the purpose of this section to induce you to infringe any\
+patents or other property right claims or to contest validity of any\
+such claims; this section has the sole purpose of protecting the\
+integrity of the free software distribution system which is\
+implemented by public license practices.  Many people have made\
+generous contributions to the wide range of software distributed\
+through that system in reliance on consistent application of that\
+system; it is up to the author/donor to decide if he or she is willing\
+to distribute software through any other system and a licensee cannot\
+impose that choice.\
+\
+This section is intended to make thoroughly clear what is believed to\
+be a consequence of the rest of this License.\
+\
+  12. If the distribution and/or use of the Library is restricted in\
+certain countries either by patents or by copyrighted interfaces, the\
+original copyright holder who places the Library under this License may add\
+an explicit geographical distribution limitation excluding those countries,\
+so that distribution is permitted only in or among countries not thus\
+excluded.  In such case, this License incorporates the limitation as if\
+written in the body of this License.\
+\
+  13. The Free Software Foundation may publish revised and/or new\
+versions of the Lesser General Public License from time to time.\
+Such new versions will be similar in spirit to the present version,\
+but may differ in detail to address new problems or concerns.\
+\
+Each version is given a distinguishing version number.  If the Library\
+specifies a version number of this License which applies to it and\
+"any later version", you have the option of following the terms and\
+conditions either of that version or of any later version published by\
+the Free Software Foundation.  If the Library does not specify a\
+license version number, you may choose any version ever published by\
+the Free Software Foundation.\
+\
+\page \
+  14. If you wish to incorporate parts of the Library into other free\
+programs whose distribution conditions are incompatible with these,\
+write to the author to ask for permission.  For software which is\
+copyrighted by the Free Software Foundation, write to the Free\
+Software Foundation; we sometimes make exceptions for this.  Our\
+decision will be guided by the two goals of preserving the free status\
+of all derivatives of our free software and of promoting the sharing\
+and reuse of software generally.\
+\
+			    NO WARRANTY\
+\
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO\
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.\
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR\
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY\
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE\
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE\
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME\
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.\
+\
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN\
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY\
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU\
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR\
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE\
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING\
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A\
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF\
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\
+DAMAGES.\
+\
+		     END OF TERMS AND CONDITIONS\
+\
+\page \
+           How to Apply These Terms to Your New Libraries\
+\
+  If you develop a new library, and you want it to be of the greatest\
+possible use to the public, we recommend making it free software that\
+everyone can redistribute and change.  You can do so by permitting\
+redistribution under these terms (or, alternatively, under the terms of the\
+ordinary General Public License).\
+\
+  To apply these terms, attach the following notices to the library.  It is\
+safest to attach them to the start of each source file to most effectively\
+convey the exclusion of warranty; and each file should have at least the\
+"copyright" line and a pointer to where the full notice is found.\
+\
+    <one line to give the library's name and a brief idea of what it does.>\
+    Copyright (C) <year>  <name of author>\
+\
+    This library is free software; you can redistribute it and/or\
+    modify it under the terms of the GNU Lesser General Public\
+    License as published by the Free Software Foundation; either\
+    version 2.1 of the License, or (at your option) any later version.\
+\
+    This library 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\
+    Lesser General Public License for more details.\
+\
+    You should have received a copy of the GNU Lesser General Public\
+    License along with this library; if not, write to the Free Software\
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\
+\
+Also add information on how to contact you by electronic and paper mail.\
+\
+You should also get your employer (if you work as a programmer) or your\
+school, if any, to sign a "copyright disclaimer" for the library, if\
+necessary.  Here is a sample; alter the names:\
+\
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the\
+  library `Frob' (a library for tweaking knobs) written by James Random Hacker.\
+\
+  <signature of Ty Coon>, 1 April 1990\
+  Ty Coon, President of Vice\
+\
+That's all there is to it!\
+\
+\
+\
+}
\ No newline at end of file
diff --git a/installer/macosx/PkgResources/SupportLibs/ReadMe.rtf b/installer/macosx/PkgResources/SupportLibs/ReadMe.rtf
new file mode 100755
index 0000000..5d432d7
--- /dev/null
+++ b/installer/macosx/PkgResources/SupportLibs/ReadMe.rtf
@@ -0,0 +1,31 @@
+{\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf540
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\margl1440\margr1440\vieww12440\viewh10020\viewkind0
+\pard\tx565\tx1133\tx1700\tx2266\tx2832\tx3401\tx3967\tx4535\tx5102\tx5669\tx6235\tx6802\ql\qnatural
+
+\f0\fs24 \cf0 Csound 5 (API version 2) Dependencies.\
+\
+This will install a number of dynamic libraries on which\
+csound 5 depends. If you already have these, then you\
+can skip this installation. \
+\
+
+\b Warning:
+\b0  this installation will overwrite any previously\
+installed libraries (check the list below)\
+\
+These are the libraries (and files) that will be installed in your\
+/usr/local/:\
+\
+libfltk.1.1.dylib\
+libfltk_images.1.1.dylib\
+libfluidsynth.1.dylib\
+liblo.0.6.0.dylib\
+liblo.0.dylib -> /usr/local/lib/liblo.0.6.0.dylib\
+libpng12.0.dylib\
+ibportaudio.2.0.0.dylib\
+libportaudio.2.dylib -> /usr/local/lib/libportaudio.2.0.0.dylib\
+libportmidi.dylib\
+libsndfile.1.dylib\
+}
\ No newline at end of file
diff --git a/installer/macosx/PkgResources/SupportLibs/Welcome.rtf b/installer/macosx/PkgResources/SupportLibs/Welcome.rtf
new file mode 100755
index 0000000..3f5e82f
--- /dev/null
+++ b/installer/macosx/PkgResources/SupportLibs/Welcome.rtf
@@ -0,0 +1,13 @@
+{\rtf1\mac\ansicpg10000\cocoartf102
+{\fonttbl\f0\fswiss\fcharset77 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\margl1440\margr1440\vieww9000\viewh9000\viewkind0
+\pard\tx565\tx1133\tx1700\tx2266\tx2832\tx3401\tx3967\tx4535\tx5102\tx5669\tx6235\tx6802\ql\qnatural
+
+\f0\fs24 \cf0 You are about to install some libraries upon which Csound 5 depends:\
+FLTK, libsndfile, liblo, libjack, fluidsynth and portaudio v.19. If you do not\
+require these, please skip this installation.\
+\
+\
+\
+}
\ No newline at end of file
diff --git a/installer/macosx/PkgResources/en.lproj/License.rtf b/installer/macosx/PkgResources/en.lproj/License.rtf
new file mode 100644
index 0000000..5ddd899
--- /dev/null
+++ b/installer/macosx/PkgResources/en.lproj/License.rtf
@@ -0,0 +1,521 @@
+{\rtf1\mac\ansicpg10000\cocoartf102
+{\fonttbl\f0\fswiss\fcharset77 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\margl1440\margr1440\vieww9000\viewh9000\viewkind0
+\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\ql\qnatural
+
+\f0\fs24 \cf0 		  GNU LESSER GENERAL PUBLIC LICENSE\
+		       Version 2.1, February 1999\
+\
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.\
+     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\
+ Everyone is permitted to copy and distribute verbatim copies\
+ of this license document, but changing it is not allowed.\
+\
+[This is the first released version of the Lesser GPL.  It also counts\
+ as the successor of the GNU Library Public License, version 2, hence\
+ the version number 2.1.]\
+\
+			    Preamble\
+\
+  The licenses for most software are designed to take away your\
+freedom to share and change it.  By contrast, the GNU General Public\
+Licenses are intended to guarantee your freedom to share and change\
+free software--to make sure the software is free for all its users.\
+\
+  This license, the Lesser General Public License, applies to some\
+specially designated software packages--typically libraries--of the\
+Free Software Foundation and other authors who decide to use it.  You\
+can use it too, but we suggest you first think carefully about whether\
+this license or the ordinary General Public License is the better\
+strategy to use in any particular case, based on the explanations below.\
+\
+  When we speak of free software, we are referring to freedom of use,\
+not price.  Our General Public Licenses are designed to make sure that\
+you have the freedom to distribute copies of free software (and charge\
+for this service if you wish); that you receive source code or can get\
+it if you want it; that you can change the software and use pieces of\
+it in new free programs; and that you are informed that you can do\
+these things.\
+\
+  To protect your rights, we need to make restrictions that forbid\
+distributors to deny you these rights or to ask you to surrender these\
+rights.  These restrictions translate to certain responsibilities for\
+you if you distribute copies of the library or if you modify it.\
+\
+  For example, if you distribute copies of the library, whether gratis\
+or for a fee, you must give the recipients all the rights that we gave\
+you.  You must make sure that they, too, receive or can get the source\
+code.  If you link other code with the library, you must provide\
+complete object files to the recipients, so that they can relink them\
+with the library after making changes to the library and recompiling\
+it.  And you must show them these terms so they know their rights.\
+\
+  We protect your rights with a two-step method: (1) we copyright the\
+library, and (2) we offer you this license, which gives you legal\
+permission to copy, distribute and/or modify the library.\
+\
+  To protect each distributor, we want to make it very clear that\
+there is no warranty for the free library.  Also, if the library is\
+modified by someone else and passed on, the recipients should know\
+that what they have is not the original version, so that the original\
+author's reputation will not be affected by problems that might be\
+introduced by others.\
+\
+\page \
+  Finally, software patents pose a constant threat to the existence of\
+any free program.  We wish to make sure that a company cannot\
+effectively restrict the users of a free program by obtaining a\
+restrictive license from a patent holder.  Therefore, we insist that\
+any patent license obtained for a version of the library must be\
+consistent with the full freedom of use specified in this license.\
+\
+  Most GNU software, including some libraries, is covered by the\
+ordinary GNU General Public License.  This license, the GNU Lesser\
+General Public License, applies to certain designated libraries, and\
+is quite different from the ordinary General Public License.  We use\
+this license for certain libraries in order to permit linking those\
+libraries into non-free programs.\
+\
+  When a program is linked with a library, whether statically or using\
+a shared library, the combination of the two is legally speaking a\
+combined work, a derivative of the original library.  The ordinary\
+General Public License therefore permits such linking only if the\
+entire combination fits its criteria of freedom.  The Lesser General\
+Public License permits more lax criteria for linking other code with\
+the library.\
+\
+  We call this license the "Lesser" General Public License because it\
+does Less to protect the user's freedom than the ordinary General\
+Public License.  It also provides other free software developers Less\
+of an advantage over competing non-free programs.  These disadvantages\
+are the reason we use the ordinary General Public License for many\
+libraries.  However, the Lesser license provides advantages in certain\
+special circumstances.\
+\
+  For example, on rare occasions, there may be a special need to\
+encourage the widest possible use of a certain library, so that it becomes\
+a de-facto standard.  To achieve this, non-free programs must be\
+allowed to use the library.  A more frequent case is that a free\
+library does the same job as widely used non-free libraries.  In this\
+case, there is little to gain by limiting the free library to free\
+software only, so we use the Lesser General Public License.\
+\
+  In other cases, permission to use a particular library in non-free\
+programs enables a greater number of people to use a large body of\
+free software.  For example, permission to use the GNU C Library in\
+non-free programs enables many more people to use the whole GNU\
+operating system, as well as its variant, the GNU/Linux operating\
+system.\
+\
+  Although the Lesser General Public License is Less protective of the\
+users' freedom, it does ensure that the user of a program that is\
+linked with the Library has the freedom and the wherewithal to run\
+that program using a modified version of the Library.\
+\
+  The precise terms and conditions for copying, distribution and\
+modification follow.  Pay close attention to the difference between a\
+"work based on the library" and a "work that uses the library".  The\
+former contains code derived from the library, whereas the latter must\
+be combined with the library in order to run.\
+\
+\page \
+		  GNU LESSER GENERAL PUBLIC LICENSE\
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\
+\
+  0. This License Agreement applies to any software library or other\
+program which contains a notice placed by the copyright holder or\
+other authorized party saying it may be distributed under the terms of\
+this Lesser General Public License (also called "this License").\
+Each licensee is addressed as "you".\
+\
+  A "library" means a collection of software functions and/or data\
+prepared so as to be conveniently linked with application programs\
+(which use some of those functions and data) to form executables.\
+\
+  The "Library", below, refers to any such software library or work\
+which has been distributed under these terms.  A "work based on the\
+Library" means either the Library or any derivative work under\
+copyright law: that is to say, a work containing the Library or a\
+portion of it, either verbatim or with modifications and/or translated\
+straightforwardly into another language.  (Hereinafter, translation is\
+included without limitation in the term "modification".)\
+\
+  "Source code" for a work means the preferred form of the work for\
+making modifications to it.  For a library, complete source code means\
+all the source code for all modules it contains, plus any associated\
+interface definition files, plus the scripts used to control compilation\
+and installation of the library.\
+\
+  Activities other than copying, distribution and modification are not\
+covered by this License; they are outside its scope.  The act of\
+running a program using the Library is not restricted, and output from\
+such a program is covered only if its contents constitute a work based\
+on the Library (independent of the use of the Library in a tool for\
+writing it).  Whether that is true depends on what the Library does\
+and what the program that uses the Library does.\
+  \
+  1. You may copy and distribute verbatim copies of the Library's\
+complete source code as you receive it, in any medium, provided that\
+you conspicuously and appropriately publish on each copy an\
+appropriate copyright notice and disclaimer of warranty; keep intact\
+all the notices that refer to this License and to the absence of any\
+warranty; and distribute a copy of this License along with the\
+Library.\
+\
+  You may charge a fee for the physical act of transferring a copy,\
+and you may at your option offer warranty protection in exchange for a\
+fee.\
+\
+\page \
+  2. You may modify your copy or copies of the Library or any portion\
+of it, thus forming a work based on the Library, and copy and\
+distribute such modifications or work under the terms of Section 1\
+above, provided that you also meet all of these conditions:\
+\
+    a) The modified work must itself be a software library.\
+\
+    b) You must cause the files modified to carry prominent notices\
+    stating that you changed the files and the date of any change.\
+\
+    c) You must cause the whole of the work to be licensed at no\
+    charge to all third parties under the terms of this License.\
+\
+    d) If a facility in the modified Library refers to a function or a\
+    table of data to be supplied by an application program that uses\
+    the facility, other than as an argument passed when the facility\
+    is invoked, then you must make a good faith effort to ensure that,\
+    in the event an application does not supply such function or\
+    table, the facility still operates, and performs whatever part of\
+    its purpose remains meaningful.\
+\
+    (For example, a function in a library to compute square roots has\
+    a purpose that is entirely well-defined independent of the\
+    application.  Therefore, Subsection 2d requires that any\
+    application-supplied function or table used by this function must\
+    be optional: if the application does not supply it, the square\
+    root function must still compute square roots.)\
+\
+These requirements apply to the modified work as a whole.  If\
+identifiable sections of that work are not derived from the Library,\
+and can be reasonably considered independent and separate works in\
+themselves, then this License, and its terms, do not apply to those\
+sections when you distribute them as separate works.  But when you\
+distribute the same sections as part of a whole which is a work based\
+on the Library, the distribution of the whole must be on the terms of\
+this License, whose permissions for other licensees extend to the\
+entire whole, and thus to each and every part regardless of who wrote\
+it.\
+\
+Thus, it is not the intent of this section to claim rights or contest\
+your rights to work written entirely by you; rather, the intent is to\
+exercise the right to control the distribution of derivative or\
+collective works based on the Library.\
+\
+In addition, mere aggregation of another work not based on the Library\
+with the Library (or with a work based on the Library) on a volume of\
+a storage or distribution medium does not bring the other work under\
+the scope of this License.\
+\
+  3. You may opt to apply the terms of the ordinary GNU General Public\
+License instead of this License to a given copy of the Library.  To do\
+this, you must alter all the notices that refer to this License, so\
+that they refer to the ordinary GNU General Public License, version 2,\
+instead of to this License.  (If a newer version than version 2 of the\
+ordinary GNU General Public License has appeared, then you can specify\
+that version instead if you wish.)  Do not make any other change in\
+these notices.\
+\
+\page \
+  Once this change is made in a given copy, it is irreversible for\
+that copy, so the ordinary GNU General Public License applies to all\
+subsequent copies and derivative works made from that copy.\
+\
+  This option is useful when you wish to copy part of the code of\
+the Library into a program that is not a library.\
+\
+  4. You may copy and distribute the Library (or a portion or\
+derivative of it, under Section 2) in object code or executable form\
+under the terms of Sections 1 and 2 above provided that you accompany\
+it with the complete corresponding machine-readable source code, which\
+must be distributed under the terms of Sections 1 and 2 above on a\
+medium customarily used for software interchange.\
+\
+  If distribution of object code is made by offering access to copy\
+from a designated place, then offering equivalent access to copy the\
+source code from the same place satisfies the requirement to\
+distribute the source code, even though third parties are not\
+compelled to copy the source along with the object code.\
+\
+  5. A program that contains no derivative of any portion of the\
+Library, but is designed to work with the Library by being compiled or\
+linked with it, is called a "work that uses the Library".  Such a\
+work, in isolation, is not a derivative work of the Library, and\
+therefore falls outside the scope of this License.\
+\
+  However, linking a "work that uses the Library" with the Library\
+creates an executable that is a derivative of the Library (because it\
+contains portions of the Library), rather than a "work that uses the\
+library".  The executable is therefore covered by this License.\
+Section 6 states terms for distribution of such executables.\
+\
+  When a "work that uses the Library" uses material from a header file\
+that is part of the Library, the object code for the work may be a\
+derivative work of the Library even though the source code is not.\
+Whether this is true is especially significant if the work can be\
+linked without the Library, or if the work is itself a library.  The\
+threshold for this to be true is not precisely defined by law.\
+\
+  If such an object file uses only numerical parameters, data\
+structure layouts and accessors, and small macros and small inline\
+functions (ten lines or less in length), then the use of the object\
+file is unrestricted, regardless of whether it is legally a derivative\
+work.  (Executables containing this object code plus portions of the\
+Library will still fall under Section 6.)\
+\
+  Otherwise, if the work is a derivative of the Library, you may\
+distribute the object code for the work under the terms of Section 6.\
+Any executables containing that work also fall under Section 6,\
+whether or not they are linked directly with the Library itself.\
+\
+\page \
+  6. As an exception to the Sections above, you may also combine or\
+link a "work that uses the Library" with the Library to produce a\
+work containing portions of the Library, and distribute that work\
+under terms of your choice, provided that the terms permit\
+modification of the work for the customer's own use and reverse\
+engineering for debugging such modifications.\
+\
+  You must give prominent notice with each copy of the work that the\
+Library is used in it and that the Library and its use are covered by\
+this License.  You must supply a copy of this License.  If the work\
+during execution displays copyright notices, you must include the\
+copyright notice for the Library among them, as well as a reference\
+directing the user to the copy of this License.  Also, you must do one\
+of these things:\
+\
+    a) Accompany the work with the complete corresponding\
+    machine-readable source code for the Library including whatever\
+    changes were used in the work (which must be distributed under\
+    Sections 1 and 2 above); and, if the work is an executable linked\
+    with the Library, with the complete machine-readable "work that\
+    uses the Library", as object code and/or source code, so that the\
+    user can modify the Library and then relink to produce a modified\
+    executable containing the modified Library.  (It is understood\
+    that the user who changes the contents of definitions files in the\
+    Library will not necessarily be able to recompile the application\
+    to use the modified definitions.)\
+\
+    b) Use a suitable shared library mechanism for linking with the\
+    Library.  A suitable mechanism is one that (1) uses at run time a\
+    copy of the library already present on the user's computer system,\
+    rather than copying library functions into the executable, and (2)\
+    will operate properly with a modified version of the library, if\
+    the user installs one, as long as the modified version is\
+    interface-compatible with the version that the work was made with.\
+\
+    c) Accompany the work with a written offer, valid for at\
+    least three years, to give the same user the materials\
+    specified in Subsection 6a, above, for a charge no more\
+    than the cost of performing this distribution.\
+\
+    d) If distribution of the work is made by offering access to copy\
+    from a designated place, offer equivalent access to copy the above\
+    specified materials from the same place.\
+\
+    e) Verify that the user has already received a copy of these\
+    materials or that you have already sent this user a copy.\
+\
+  For an executable, the required form of the "work that uses the\
+Library" must include any data and utility programs needed for\
+reproducing the executable from it.  However, as a special exception,\
+the materials to be distributed need not include anything that is\
+normally distributed (in either source or binary form) with the major\
+components (compiler, kernel, and so on) of the operating system on\
+which the executable runs, unless that component itself accompanies\
+the executable.\
+\
+  It may happen that this requirement contradicts the license\
+restrictions of other proprietary libraries that do not normally\
+accompany the operating system.  Such a contradiction means you cannot\
+use both them and the Library together in an executable that you\
+distribute.\
+\
+\page \
+  7. You may place library facilities that are a work based on the\
+Library side-by-side in a single library together with other library\
+facilities not covered by this License, and distribute such a combined\
+library, provided that the separate distribution of the work based on\
+the Library and of the other library facilities is otherwise\
+permitted, and provided that you do these two things:\
+\
+    a) Accompany the combined library with a copy of the same work\
+    based on the Library, uncombined with any other library\
+    facilities.  This must be distributed under the terms of the\
+    Sections above.\
+\
+    b) Give prominent notice with the combined library of the fact\
+    that part of it is a work based on the Library, and explaining\
+    where to find the accompanying uncombined form of the same work.\
+\
+  8. You may not copy, modify, sublicense, link with, or distribute\
+the Library except as expressly provided under this License.  Any\
+attempt otherwise to copy, modify, sublicense, link with, or\
+distribute the Library is void, and will automatically terminate your\
+rights under this License.  However, parties who have received copies,\
+or rights, from you under this License will not have their licenses\
+terminated so long as such parties remain in full compliance.\
+\
+  9. You are not required to accept this License, since you have not\
+signed it.  However, nothing else grants you permission to modify or\
+distribute the Library or its derivative works.  These actions are\
+prohibited by law if you do not accept this License.  Therefore, by\
+modifying or distributing the Library (or any work based on the\
+Library), you indicate your acceptance of this License to do so, and\
+all its terms and conditions for copying, distributing or modifying\
+the Library or works based on it.\
+\
+  10. Each time you redistribute the Library (or any work based on the\
+Library), the recipient automatically receives a license from the\
+original licensor to copy, distribute, link with or modify the Library\
+subject to these terms and conditions.  You may not impose any further\
+restrictions on the recipients' exercise of the rights granted herein.\
+You are not responsible for enforcing compliance by third parties with\
+this License.\
+\
+\page \
+  11. If, as a consequence of a court judgment or allegation of patent\
+infringement or for any other reason (not limited to patent issues),\
+conditions are imposed on you (whether by court order, agreement or\
+otherwise) that contradict the conditions of this License, they do not\
+excuse you from the conditions of this License.  If you cannot\
+distribute so as to satisfy simultaneously your obligations under this\
+License and any other pertinent obligations, then as a consequence you\
+may not distribute the Library at all.  For example, if a patent\
+license would not permit royalty-free redistribution of the Library by\
+all those who receive copies directly or indirectly through you, then\
+the only way you could satisfy both it and this License would be to\
+refrain entirely from distribution of the Library.\
+\
+If any portion of this section is held invalid or unenforceable under any\
+particular circumstance, the balance of the section is intended to apply,\
+and the section as a whole is intended to apply in other circumstances.\
+\
+It is not the purpose of this section to induce you to infringe any\
+patents or other property right claims or to contest validity of any\
+such claims; this section has the sole purpose of protecting the\
+integrity of the free software distribution system which is\
+implemented by public license practices.  Many people have made\
+generous contributions to the wide range of software distributed\
+through that system in reliance on consistent application of that\
+system; it is up to the author/donor to decide if he or she is willing\
+to distribute software through any other system and a licensee cannot\
+impose that choice.\
+\
+This section is intended to make thoroughly clear what is believed to\
+be a consequence of the rest of this License.\
+\
+  12. If the distribution and/or use of the Library is restricted in\
+certain countries either by patents or by copyrighted interfaces, the\
+original copyright holder who places the Library under this License may add\
+an explicit geographical distribution limitation excluding those countries,\
+so that distribution is permitted only in or among countries not thus\
+excluded.  In such case, this License incorporates the limitation as if\
+written in the body of this License.\
+\
+  13. The Free Software Foundation may publish revised and/or new\
+versions of the Lesser General Public License from time to time.\
+Such new versions will be similar in spirit to the present version,\
+but may differ in detail to address new problems or concerns.\
+\
+Each version is given a distinguishing version number.  If the Library\
+specifies a version number of this License which applies to it and\
+"any later version", you have the option of following the terms and\
+conditions either of that version or of any later version published by\
+the Free Software Foundation.  If the Library does not specify a\
+license version number, you may choose any version ever published by\
+the Free Software Foundation.\
+\
+\page \
+  14. If you wish to incorporate parts of the Library into other free\
+programs whose distribution conditions are incompatible with these,\
+write to the author to ask for permission.  For software which is\
+copyrighted by the Free Software Foundation, write to the Free\
+Software Foundation; we sometimes make exceptions for this.  Our\
+decision will be guided by the two goals of preserving the free status\
+of all derivatives of our free software and of promoting the sharing\
+and reuse of software generally.\
+\
+			    NO WARRANTY\
+\
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO\
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.\
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR\
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY\
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE\
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE\
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME\
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.\
+\
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN\
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY\
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU\
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR\
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE\
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING\
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A\
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF\
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\
+DAMAGES.\
+\
+		     END OF TERMS AND CONDITIONS\
+\
+\page \
+           How to Apply These Terms to Your New Libraries\
+\
+  If you develop a new library, and you want it to be of the greatest\
+possible use to the public, we recommend making it free software that\
+everyone can redistribute and change.  You can do so by permitting\
+redistribution under these terms (or, alternatively, under the terms of the\
+ordinary General Public License).\
+\
+  To apply these terms, attach the following notices to the library.  It is\
+safest to attach them to the start of each source file to most effectively\
+convey the exclusion of warranty; and each file should have at least the\
+"copyright" line and a pointer to where the full notice is found.\
+\
+    <one line to give the library's name and a brief idea of what it does.>\
+    Copyright (C) <year>  <name of author>\
+\
+    This library is free software; you can redistribute it and/or\
+    modify it under the terms of the GNU Lesser General Public\
+    License as published by the Free Software Foundation; either\
+    version 2.1 of the License, or (at your option) any later version.\
+\
+    This library 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\
+    Lesser General Public License for more details.\
+\
+    You should have received a copy of the GNU Lesser General Public\
+    License along with this library; if not, write to the Free Software\
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\
+\
+Also add information on how to contact you by electronic and paper mail.\
+\
+You should also get your employer (if you work as a programmer) or your\
+school, if any, to sign a "copyright disclaimer" for the library, if\
+necessary.  Here is a sample; alter the names:\
+\
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the\
+  library `Frob' (a library for tweaking knobs) written by James Random Hacker.\
+\
+  <signature of Ty Coon>, 1 April 1990\
+  Ty Coon, President of Vice\
+\
+That's all there is to it!\
+\
+\
+\
+}
\ No newline at end of file
diff --git a/installer/macosx/PkgResources/en.lproj/ReadMe.rtf b/installer/macosx/PkgResources/en.lproj/ReadMe.rtf
new file mode 100644
index 0000000..57f70da
--- /dev/null
+++ b/installer/macosx/PkgResources/en.lproj/ReadMe.rtf
@@ -0,0 +1,48 @@
+{\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf540
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\margl1440\margr1440\vieww13520\viewh8920\viewkind0
+\pard\tx565\tx1133\tx1700\tx2266\tx2832\tx3401\tx3967\tx4535\tx5102\tx5669\tx6235\tx6802\ql\qnatural
+
+\f0\fs24 \cf0 Csound 5 Environment (API version 2).\
+\
+This package installs all the required components\
+for the Csound 5 Environment. It is divided into three\
+separate installers. If you do not require one of them,\
+please unselect the package in custom installation\
+mode.\
+\
+
+\b 1. Csound 5 Library (API version 2) Framework (32-bit floating-point)\
+2. Csound 5 Library (API Version 2) Framework (64-bit floating-point)\
+3. Csound command-line applications (32-bit floating-point)\
+4. Csound command-line applications (64-bit floating-point)\
+5. Support libraries: \
+
+\b0 This component will install a number of dynamic libraries on which\
+csound 5 depends. If you already have these, then you\
+can skip this installation. \
+\
+
+\b Warning:
+\b0  this installation will overwrite any previously\
+installed libraries. These are the libraries that will be \
+installed in your /usr/local/lib directory:
+\b \
+
+\b0 \
+libfltk.1.1.dylib\
+libfltk_images.1.1.dylib\
+libfluidsynth.1.dylib\
+liblo.0.6.0.dylib\
+libpng12.0.dylib\
+libportaudio.2.0.0.dylib\
+libportmidi.dylib\
+libsndfile.1.dylib
+\b \
+
+\b0 \
+\
+Victor Lazzarini, 2009\
+(c) 2009, The Csound Team, csound.sf.net\
+}
\ No newline at end of file
diff --git a/installer/macosx/PkgResources/en.lproj/Welcome.rtf b/installer/macosx/PkgResources/en.lproj/Welcome.rtf
new file mode 100644
index 0000000..a61a85f
--- /dev/null
+++ b/installer/macosx/PkgResources/en.lproj/Welcome.rtf
@@ -0,0 +1,13 @@
+{\rtf1\mac\ansicpg10000\cocoartf102
+{\fonttbl\f0\fswiss\fcharset77 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\margl1440\margr1440\vieww9000\viewh9000\viewkind0
+\pard\tx565\tx1133\tx1700\tx2266\tx2833\tx3401\tx3967\tx4535\tx5102\tx5669\tx6235\tx6802\ql\qnatural
+
+\f0\fs24 \cf0 You are about to install Csound 5 in your\
+computer. This includes the CsoundLib framework, applications and\
+support libs.\
+\
+\
+\
+}
\ No newline at end of file
diff --git a/installer/macosx/PkgResources/en.lproj/background.tiff b/installer/macosx/PkgResources/en.lproj/background.tiff
new file mode 100644
index 0000000..809c703
Binary files /dev/null and b/installer/macosx/PkgResources/en.lproj/background.tiff differ
diff --git a/installer/macosx/Readme_temp.txt b/installer/macosx/Readme_temp.txt
deleted file mode 100644
index 50beb11..0000000
--- a/installer/macosx/Readme_temp.txt
+++ /dev/null
@@ -1,26 +0,0 @@
-Here are the files from Hans showing how to build an OS X installer package
-and make a DMG disk image of the package from a command-line script.  His files
-were for Csound 4.23 and his email about them is below.  This should hopefully
-help someone get started on this task for Csound 5.
-
-The package-building commands are in the Makefile.macosx.
-
-I would also suggest including a nice README intro to Csound in the DMG
-explaining how to install and configure.  (Links to the manual might be nice
-too :)
-
--- Anthony Kozar
-
-Date: Tue, 14 Oct 2003 12:20:47 -0400
-Subject: [CSOUND-DEV:3135] MacOS X installer maker
-From: Hans-Christoph Steiner <hans at eds.org>
-To: Csound Developers Discussion List <csound-dev at eartha.mills.edu>
-
-I have written up a section for the Makefile which creates a MacOS X
-installer for csound just by typing 'make darwin_pkg'.  You can make a
-distributable .dmg file by typing 'make dmg' afterwards.  There are
-three files involved: csound.info (the .pkg info), mkdmg (script to
-make the .dmg), and Makefile.macosx.  These three files are all
-attached.
-For Makefile.macosx, all of the pkg building stuff is appended to the
-end of the file.  I would love to see these files added to the CVS.
diff --git a/installer/macosx/csound.info b/installer/macosx/csound.info
deleted file mode 100644
index 4c35d72..0000000
--- a/installer/macosx/csound.info
+++ /dev/null
@@ -1,17 +0,0 @@
-Title Csound
-Version UNIX-style paths
-Description Csound is a sound and music synthesis system, providing facilities for composition and performance over a wide range of platforms.
-DefaultLocation /usr/local
-DeleteWarning No more Csound? :(
-
-### Package Flags
-
-NeedsAuthorization YES
-Required YES
-Relocatable YES
-RequiresReboot NO
-UseUserMask NO
-OverwritePermissions NO
-InstallFat NO
-RootVolumeOnly NO
-
diff --git a/installer/macosx/custom.10.7.py b/installer/macosx/custom.10.7.py
new file mode 100755
index 0000000..639b49e
--- /dev/null
+++ b/installer/macosx/custom.10.7.py
@@ -0,0 +1,128 @@
+'''
+Modify this file, by platform, to handle nonstandard options for third-party
+dependencies. If you do modify this file, you should make it read-only
+(or otherwise protect it) so that CVS will not overwrite it.
+
+Order is important: place local paths ahead of system paths.
+'''
+import sys
+
+customCPPPATH = []
+customCCFLAGS = []
+customCCPFLAGS = []
+customCXXFLAGS = []
+customLIBS = []
+customLIBPATH = []
+customSHLINKFLAGS = []
+customSWIGFLAGS = []
+
+## This seems to do nothing
+if sys.platform != 'darwin':
+    customSHLINKFLAGS.append('-Wl,--as-needed')
+if sys.platform[:5] == 'linux':
+    platform = 'linux'
+    customCPPPATH.append('/usr/lib/jvm/java-1.5.0/include')
+    customCPPPATH.append('/usr/lib/jvm/java-1.5.0/include/linux')
+    customCCFLAGS.append('-I/usr/local/include/libcwiimote-0.4.0/libcwiimote')
+elif sys.platform == 'darwin':
+    platform = 'darwin'
+    customLIBPATH.append('/usr/local/lib')
+    customCPPPATH.append('/usr/local/include')
+    customCPPPATH.append('/usr/local/include/luajit-2.0')
+    customCPPPATH.append('/usr/include/malloc')
+    customCPPPATH.append('/opt/local/include/boost-1_32/')
+    customCPPPATH.append('/usr/include/python2.3')
+    customCXXFLAGS.append('-fabi-version=0')
+    customCPPPATH.append('/Applications/Pd-extended.app/Contents/Resources/include/')
+    customCPPPATH.append('/Users/stevenyi/work/csound/dependencies/boost_1_47_0')
+    #customCPPPATH.append('/opt/local/include')
+    #customLIBPATH.append('/opt/local/lib')
+elif sys.platform[:3] == 'win':
+    # For the basic build you need MinGW, MSys, and libsndfile.
+    # Add them here:
+    customCPPPATH.append('c:/utah/usr/msys/1.0/local/include')
+    customLIBPATH.append('c:/utah/usr/msys/1.0/local/lib')
+    customCPPPATH.append('c:/utah/usr/mingw/include')
+    customLIBPATH.append('c:/utah/usr/mingw/lib')
+    # If libsndfile is not in a standard location add it here:
+    customCPPPATH.append('C:/utah/opt/libsndfile-1.0.13pre6/src')
+    customLIBPATH.append('C:/utah/opt/libsndfile-1.0.13pre6/src/.libs')
+    ################################################################
+    # If you want real-time audio you need PortAudio.
+    # If it is not in a standard location add it here
+    # (of course you must build it first):
+    customCPPPATH.append('C:/utah/home/mkg/projects/portaudio/pa_common')
+    customLIBPATH.append('C:/utah/home/mkg/projects/portaudio/lib')
+    ################################################################
+    # If you want PortMidi for real-time midi,
+    # if it is not in a standard location add it here
+    # (of course you must build it first):
+    customCPPPATH.append('C:/utah/opt/portmidi/pa_common')
+    customLIBPATH.append('C:/utah/opt/portmidi')
+    ################################################################
+    # If you want FLTK widgets or if you want to build CsoundVST,
+    # you need FLTK. If it is not in a standard location,
+    # add it here (of course you must build it first):
+    customCPPPATH.append('C:/utah/opt/fltk-1.1.6')
+    customLIBPATH.append('C:/utah/opt/fltk-1.1.6/lib')
+    ################################################################
+    # If you want to build CsoundVST you need Python and
+    # a MinGW import library for Python. Add them here:
+    customCPPPATH.append('c:/utah/opt/Python24/include')
+    customLIBPATH.append('c:/WINDOWS/system32')
+    ################################################################
+    # If you want to build Lua interfaces you need Lua.
+    # Add it here:
+    customCPPPATH.append('c:/utah/opt/lua50/include')
+    customLIBPATH.append('c:/utah/opt/lua50/lib/mingw3')
+    ################################################################
+    # If you want to build Tcl/Tk interfaces
+    # and Tclcsound you need Tcl/Tk.
+    # Add it here:
+    customCPPPATH.append('c:/utah/opt/Tcl/include')
+    customLIBPATH.append('c:/utah/opt/Tcl/bin')
+    ################################################################
+    # If you want to build CsoundVST you need boost.
+    # If it is not in a standard lcoation add it here
+    # (you do NOT need to build it first):
+    customCPPPATH.append('c:/utah/opt/boost/')
+    ################################################################
+    # If you want to build the FluidSynth opcodes
+    # you need FluidSynth. If it is not a standard location,
+    # add it here (you do NOT need to build it first):
+    customLIBPATH.append('c:/utah/opt/fluidsynth-1.0.3-win32')
+    customCPPPATH.append('c:/utah/opt/fluidsynth-1.0.3-win32/include')
+    ################################################################
+    # If you want to build the Java wrapper for CsoundVST
+    # you need Java. If it is not in a standard location,
+    # add it here (you do NOT need to build it first):
+    customCPPPATH.append('c:/utah/opt/jdk1.5.0/include')
+    customCPPPATH.append('c:/utah/opt/jdk1.5.0/include/win32')
+    ################################################################
+    # If you want to build the PD external csoundapi~
+    # you need PD. If it is not in a standard location,
+    # add it here (you do NOT need to build it first):
+    customCPPPATH.append('c:/utah/opt/pd-0.38-4-devel-2/src')
+    customLIBPATH.append('c:/utah/opt/pd-0.38-4-devel-2/bin')
+    platform = 'mingw'
+    ################################################################
+    # If you want to build the Loris opcodes,
+    # then copy Loris to csound5/Opcodes/Loris. Loris also
+    # requires FFTW, if it is not in a standard location,
+    # add it here (you do need to build it first):
+    customCPPPATH.append('c:/utah/opt/fftw-3.0.1/api')
+    customLIBPATH.append('c:/utah/opt/fftw-3.0.1/.libs')
+    ################################################################
+    # If you want to build the OSC opcodes,
+    # if it is not in a standard location,
+    # add it here (you do need to build it first):
+    customCPPPATH.append('c:/utah/home/mkg/projects/liblo')
+    customLIBPATH.append('c:/utah/home/mkg/projects/liblo/src/.libs')
+    # For OSC on Windows you will also need a Windows pthread library,
+    # if it is not in a standard location,
+    # add it here (you do need to build it first):
+    customCPPPATH.append('c:/utah/opt/pthreads')
+    customLIBPATH.append('c:/utah/opt/pthreads')
+else:
+    platform = 'unsupported platform'
+
diff --git a/installer/macosx/installer.cxx b/installer/macosx/installer.cxx
deleted file mode 100644
index 4fec181..0000000
--- a/installer/macosx/installer.cxx
+++ /dev/null
@@ -1,174 +0,0 @@
-// generated by Fast Light User Interface Designer (fluid) version 1.0106
-
-#include "installer.h"
-
-Fl_Output *bintype=(Fl_Output *)0;
-
-Fl_Check_Button *systemp=(Fl_Check_Button *)0;
-
-Fl_File_Input *bindir=(Fl_File_Input *)0;
-
-Fl_File_Input *opcdir=(Fl_File_Input *)0;
-
-Fl_File_Input *doc=(Fl_File_Input *)0;
-
-Fl_File_Input *libdir=(Fl_File_Input *)0;
-
-Fl_Progress *progress=(Fl_Progress *)0;
-
-static void cb_INSTALL(Fl_Button*, void*) {
-  do_install = 1;
-}
-
-static void cb_ABORT(Fl_Button*, void*) {
-  exit(0);
-}
-
-Fl_Check_Button *doBin=(Fl_Check_Button *)0;
-
-Fl_Check_Button *doOpc=(Fl_Check_Button *)0;
-
-Fl_Check_Button *doDoc=(Fl_Check_Button *)0;
-
-Fl_Check_Button *doLib=(Fl_Check_Button *)0;
-
-Fl_Double_Window* make_window(char* type) {
-  Fl_Double_Window* w;
-  { Fl_Double_Window* o = new Fl_Double_Window(370, 325, "Csound5 Installer");
-    w = o;
-    { Fl_Text_Display* o = new Fl_Text_Display(85, 30, 25, 25, "Csound5 Installer for");
-      o->box(FL_NO_BOX);
-      o->labelfont(9);
-      o->labelsize(20);
-    }
-    { Fl_Output* o = bintype = new Fl_Output(185, 6, 170, 30);
-      o->box(FL_NO_BOX);
-      o->labelfont(1);
-      o->labelsize(20);
-      o->textfont(9);
-      o->textsize(20);
-      bintype->value(type);
-    }
-    { Fl_Check_Button* o = systemp = new Fl_Check_Button(265, 45, 25, 25, "Install in System Files");
-      o->down_box(FL_DOWN_BOX);
-      o->callback((Fl_Callback*)set_system);
-      o->align(FL_ALIGN_LEFT);
-    }
-    bindir = new Fl_File_Input(90, 75, 235, 30, "Binary");
-    opcdir = new Fl_File_Input(90, 115, 235, 30, "Opcodes");
-    doc = new Fl_File_Input(90, 155, 235, 30, "Manual");
-    libdir = new Fl_File_Input(90, 195, 235, 30, "Libraries");
-    progress = new Fl_Progress(150, 275, 210, 30);
-    { Fl_Button* o = new Fl_Button(10, 245, 70, 60, "INSTALL");
-      o->color((Fl_Color)1);
-      o->labelfont(9);
-      o->labelsize(12);
-      o->callback((Fl_Callback*)cb_INSTALL);
-    }
-    { Fl_Button* o = new Fl_Button(90, 260, 50, 45, "ABORT");
-      o->color((Fl_Color)10);
-      o->labelfont(9);
-      o->labelsize(12);
-      o->callback((Fl_Callback*)cb_ABORT);
-    }
-    { Fl_Check_Button* o = doBin = new Fl_Check_Button(10, 80, 25, 25);
-      o->down_box(FL_DOWN_BOX);
-    }
-    { Fl_Check_Button* o = doOpc = new Fl_Check_Button(10, 120, 25, 25);
-      o->down_box(FL_DOWN_BOX);
-    }
-    { Fl_Check_Button* o = doDoc = new Fl_Check_Button(10, 160, 25, 25);
-      o->down_box(FL_DOWN_BOX);
-    }
-    { Fl_Check_Button* o = doLib = new Fl_Check_Button(10, 200, 25, 25);
-      o->down_box(FL_DOWN_BOX);
-    }
-    o->end();
-  }
-  return w;
-}
-
-Fl_Output *err_text=(Fl_Output *)0;
-
-static void cb_OK(Fl_Return_Button*, void*) {
-  end_alert = 1;
-}
-
-Fl_Double_Window* make_alert() {
-  Fl_Double_Window* w;
-  { Fl_Double_Window* o = new Fl_Double_Window(345, 75, "Installer Alert");
-    w = o;
-    o->color((Fl_Color)1);
-    o->labelcolor(FL_BACKGROUND2_COLOR);
-    { Fl_Output* o = err_text = new Fl_Output(5, 10, 310, 25);
-      o->color((Fl_Color)1);
-      o->textcolor(7);
-    }
-    { Fl_Return_Button* o = new Fl_Return_Button(5, 45, 50, 25, "OK");
-      o->color((Fl_Color)1);
-      o->callback((Fl_Callback*)cb_OK);
-    }
-    o->end();
-  }
-  return w;
-}
-
-Fl_Check_Button *do_asound=(Fl_Check_Button *)0;
-
-Fl_Check_Button *do_fluidsynth=(Fl_Check_Button *)0;
-
-Fl_Check_Button *do_jack=(Fl_Check_Button *)0;
-
-Fl_Check_Button *do_lo=(Fl_Check_Button *)0;
-
-Fl_Check_Button *do_portaudio=(Fl_Check_Button *)0;
-
-Fl_Check_Button *do_sndfile=(Fl_Check_Button *)0;
-
-static void cb_install(Fl_Button*, void*) {
-  do_libinstall=1;
-lib_exit=1;
-}
-
-static void cb_cancel(Fl_Button*, void*) {
-  do_libinstall=0;
-lib_exit=1;
-}
-
-Fl_Double_Window* make_libraries() {
-  Fl_Double_Window* w;
-  { Fl_Double_Window* o = new Fl_Double_Window(255, 210);
-    w = o;
-    { Fl_Text_Display* o = new Fl_Text_Display(25, 25, 25, 25, "Optional Libraries Installation");
-      o->box(FL_NO_BOX);
-      o->labelfont(1);
-      o->align(FL_ALIGN_TOP_LEFT);
-    }
-    { Fl_Check_Button* o = do_asound = new Fl_Check_Button(25, 50, 200, 20, "libasound");
-      o->down_box(FL_DOWN_BOX);
-    }
-    { Fl_Check_Button* o = do_fluidsynth = new Fl_Check_Button(25, 75, 200, 20, "libfluidsynth");
-      o->down_box(FL_DOWN_BOX);
-    }
-    { Fl_Check_Button* o = do_jack = new Fl_Check_Button(25, 100, 200, 25, "libjack");
-      o->down_box(FL_DOWN_BOX);
-    }
-    { Fl_Check_Button* o = do_lo = new Fl_Check_Button(25, 125, 200, 20, "liblo");
-      o->down_box(FL_DOWN_BOX);
-    }
-    { Fl_Check_Button* o = do_portaudio = new Fl_Check_Button(25, 150, 200, 20, "libportaudio");
-      o->down_box(FL_DOWN_BOX);
-    }
-    { Fl_Check_Button* o = do_sndfile = new Fl_Check_Button(25, 175, 200, 20, "libsndfile");
-      o->down_box(FL_DOWN_BOX);
-    }
-    { Fl_Button* o = new Fl_Button(25, 25, 55, 20, "install");
-      o->callback((Fl_Callback*)cb_install);
-    }
-    { Fl_Button* o = new Fl_Button(175, 25, 55, 20, "cancel");
-      o->callback((Fl_Callback*)cb_cancel);
-    }
-    o->end();
-  }
-  return w;
-}
diff --git a/installer/macosx/installer.fl b/installer/macosx/installer.fl
deleted file mode 100644
index 0ffd602..0000000
--- a/installer/macosx/installer.fl
+++ /dev/null
@@ -1,131 +0,0 @@
-# data file for the Fltk User Interface Designer (fluid)
-version 1.0106 
-header_name {.h} 
-code_name {.cxx}
-Function {make_window(char* type)} {open
-} {
-  Fl_Window {} {
-    label {Csound5 Installer} open
-    xywh {504 123 370 325} type Double visible
-  } {
-    Fl_Text_Display {} {
-      label {Csound5 Installer for}
-      xywh {85 30 25 25} box NO_BOX labelfont 9 labelsize 20
-    }
-    Fl_Output bintype {
-      xywh {185 6 170 30} box NO_BOX labelfont 1 labelsize 20 textfont 9 textsize 20
-      code0 {bintype->value(type);}
-    }
-    Fl_Check_Button systemp {
-      label {Install in System Files}
-      callback set_system
-      xywh {265 45 25 25} down_box DOWN_BOX align 4
-    }
-    Fl_File_Input bindir {
-      label Binary
-      xywh {90 75 235 30}
-    }
-    Fl_File_Input opcdir {
-      label Opcodes
-      xywh {90 115 235 30}
-    }
-    Fl_File_Input doc {
-      label Manual
-      xywh {90 155 235 30}
-    }
-    Fl_File_Input libdir {
-      label Libraries
-      xywh {90 195 235 30}
-    }
-    Fl_Progress progress {
-      xywh {150 275 210 30}
-    }
-    Fl_Button {} {
-      label INSTALL
-      callback {do_install = 1;}
-      xywh {10 245 70 60} color 1 labelfont 9 labelsize 12
-    }
-    Fl_Button {} {
-      label ABORT
-      callback {exit(0);}
-      xywh {90 260 50 45} color 10 labelfont 9 labelsize 12
-    }
-    Fl_Check_Button doBin {
-      xywh {10 80 25 25} down_box DOWN_BOX
-    }
-    Fl_Check_Button doOpc {
-      xywh {10 120 25 25} down_box DOWN_BOX
-    }
-    Fl_Check_Button doDoc {
-      xywh {10 160 25 25} down_box DOWN_BOX
-    }
-    Fl_Check_Button doLib {
-      xywh {10 200 25 25} down_box DOWN_BOX
-    }
-  }
-} 
-
-Function {make_alert()} {open
-} {
-  Fl_Window {} {
-    label {Installer Alert} open
-    xywh {678 283 345 75} type Double color 1 labelcolor 7 visible
-  } {
-    Fl_Output err_text {
-      xywh {5 10 310 25} color 1 textcolor 7
-    }
-    Fl_Return_Button {} {
-      label OK
-      callback {end_alert = 1;}
-      xywh {5 45 50 25} color 1
-    }
-  }
-} 
-
-Function {make_libraries()} {open
-} {
-  Fl_Window {} {open
-    xywh {471 242 255 210} type Double visible
-  } {
-    Fl_Text_Display {} {
-      label {Optional Libraries Installation}
-      xywh {25 25 25 25} box NO_BOX labelfont 1 align 5
-    }
-    Fl_Check_Button do_asound {
-      label libasound
-      xywh {25 50 200 20} down_box DOWN_BOX
-    }
-    Fl_Check_Button do_fluidsynth {
-      label libfluidsynth
-      xywh {25 75 200 20} down_box DOWN_BOX
-    }
-    Fl_Check_Button do_jack {
-      label libjack
-      xywh {25 100 200 25} down_box DOWN_BOX
-    }
-    Fl_Check_Button do_lo {
-      label liblo
-      xywh {25 125 200 20} down_box DOWN_BOX
-    }
-    Fl_Check_Button do_portaudio {
-      label libportaudio
-      xywh {25 150 200 20} down_box DOWN_BOX
-    }
-    Fl_Check_Button do_sndfile {
-      label libsndfile
-      xywh {25 175 200 20} down_box DOWN_BOX
-    }
-    Fl_Button {} {
-      label install
-      callback {do_libinstall=1;
-lib_exit=1;} selected
-      xywh {25 25 55 20}
-    }
-    Fl_Button {} {
-      label cancel
-      callback {do_libinstall=0;
-lib_exit=1;}
-      xywh {175 25 55 20}
-    }
-  }
-} 
diff --git a/installer/macosx/installer.h b/installer/macosx/installer.h
deleted file mode 100644
index 52d621d..0000000
--- a/installer/macosx/installer.h
+++ /dev/null
@@ -1,36 +0,0 @@
-// generated by Fast Light User Interface Designer (fluid) version 1.0106
-
-#ifndef installer_h
-#define installer_h
-#include <FL/Fl.H>
-#include <FL/Fl_Double_Window.H>
-#include <FL/Fl_Text_Display.H>
-#include <FL/Fl_Output.H>
-extern Fl_Output *bintype;
-#include <FL/Fl_Check_Button.H>
-extern void set_system(Fl_Check_Button*, void*);
-extern Fl_Check_Button *systemp;
-#include <FL/Fl_File_Input.H>
-extern Fl_File_Input *bindir;
-extern Fl_File_Input *opcdir;
-extern Fl_File_Input *doc;
-extern Fl_File_Input *libdir;
-#include <FL/Fl_Progress.H>
-extern Fl_Progress *progress;
-#include <FL/Fl_Button.H>
-extern Fl_Check_Button *doBin;
-extern Fl_Check_Button *doOpc;
-extern Fl_Check_Button *doDoc;
-extern Fl_Check_Button *doLib;
-Fl_Double_Window* make_window(char* type);
-extern Fl_Output *err_text;
-#include <FL/Fl_Return_Button.H>
-Fl_Double_Window* make_alert();
-extern Fl_Check_Button *do_asound;
-extern Fl_Check_Button *do_fluidsynth;
-extern Fl_Check_Button *do_jack;
-extern Fl_Check_Button *do_lo;
-extern Fl_Check_Button *do_portaudio;
-extern Fl_Check_Button *do_sndfile;
-Fl_Double_Window* make_libraries();
-#endif
diff --git a/installer/macosx/mkdmg b/installer/macosx/mkdmg
deleted file mode 100644
index 5fc657b..0000000
--- a/installer/macosx/mkdmg
+++ /dev/null
@@ -1,95 +0,0 @@
-#!/bin/sh
-#
-# from: http://www.macosxhints.com/article.php?story=20020311215452999
-# 
-# 
-# Creates a disk image (dmg) on Mac OS X from the command line
-# from a folder.
-
-FOLDER="$1"
-if [ -z "$FOLDER" ]; then
-echo
-echo "usage: $0 <folder>"
-echo
-exit 1
-fi
-
-if [ ! -d "$FOLDER" ]; then
-echo $FOLDER does not exist
-exit 2
-fi
-
-SIZE=`/usr/bin/du -s "$FOLDER" | awk '{ print $1 }'`
-# allow space for partition map and directory structure
-SIZE=`echo 1024 + $SIZE \* 1.1 / 1 | bc`
-NAME=`basename "$FOLDER"`
-FILE=$NAME.dmg
-TMP=${TMP:-/tmp}
-
-if [ $SIZE -lt 9216 ]; then
-SIZE=9216
-fi
-
-if [ -e "$FILE" ] ; then
-echo $FILE already exists!
-exit 3
-fi
-
-TMPFILE=$TMP/$$.dmg
-
-echo Creating $TMPFILE from $FOLDER, $SIZE sectors...
-hdiutil create $TMPFILE -sectors $SIZE -ov
-if [ $? -ne 0 ] ; then
-rm -f $TMPFILE
-exit 4
-fi
-echo
-
-DEVICES=`hdid -nomount $TMPFILE`
-DEVMASTER=`echo $DEVICES| awk '{ print $1 }'`
-DEVHFS=`echo $DEVICES| awk '{ print $5 }'`
-echo Creating HFS partition $NAME on $TMPFILE at $DEVHFS
-newfs_hfs -v "$NAME" $DEVHFS
-if [ $? -ne 0 ] ; then
-rm -f $TMPFILE
-exit 5
-fi
-hdiutil eject $DEVMASTER
-if [ $? -ne 0 ] ; then
-rm -f $TMPFILE
-exit 6
-fi
-DEVICES=`hdid $TMPFILE`
-if [ $? -ne 0 ] ; then
-rm -f $TMPFILE
-exit 7
-fi
-
-DEVMASTER=`echo $DEVICES| awk '{ print $1 }'`
-DEVHFS=`echo $DEVICES| awk '{ print $5 }'`
-echo Copying $FOLDER to /Volumes/$NAME on $DEVMASTER
-sudo ditto -rsrcFork "$FOLDER" "/Volumes/$NAME"
-if [ $? -ne 0 ]; then
-hdiutil eject $DEVMASTER
-rm -f $TMPFILE
-exit 8
-fi
-
-hdiutil eject $DEVMASTER
-if [ $? -ne 0 ]; then
-#rm -f $TMPFILE
-exit 9
-fi
-
-echo "Compressing $NAME to $FILE"
-#hdiutil convert $TMPFILE -format UDZO -o "$FILE"
-hdiutil convert $TMPFILE -format UDZO -imagekey zlib-level=9 -o "$FILE"
-if [ $? -ne 0 ]; then
-rm -f "$FILE" $TMPFILE
-exit 10
-fi
-
-rm -f $TMPFILE
-
-# end
-
diff --git a/installer/macosx/new_install.cxx b/installer/macosx/new_install.cxx
deleted file mode 100644
index e365c1b..0000000
--- a/installer/macosx/new_install.cxx
+++ /dev/null
@@ -1,285 +0,0 @@
-#include <stdio.h>
-#include <sys/types.h>
-#include <dirent.h>
-#include <sys/stat.h>
-#include <string.h>
-#include <stdlib.h>
-#include <unistd.h>
-
-int do_install = 0;
-int end_alert = 0;
-int do_libinstall = 0;
-int lib_exit = 0;
-
-char type[256];
-char bin[256];
-char opc[256];
-char doh[256];
-char lib[256];
-char envy[256];
-
-#include "installer.cxx"
-
-void set_system(Fl_Check_Button*, void*)
-{
-    bindir->value(bin);
-    opcdir->value(opc);
-    doc->value(doh);
-    libdir->value(lib);
-}
-
-Fl_Double_Window* err;
-
-void do_alert(char *msg)
-{
-      err_text->value(msg);
-      end_alert = 0;
-      err->show();
-      while (end_alert==0) Fl::wait();
-      err->hide();
-}
-
-/* Unsure that dir exists with all directories on the way. */
-void check_exists(const char *dir)
-{
-    char test[80];
-    char *p;
-    int ans;
-    struct stat buf;
-    strcpy(test,dir);
-    //    printf("Checking %s\n", dir);
-    p = test;
-    while ((p = strchr(p+1, '/')) != NULL) {
-      *p = '\0';
-      if (test[0]=='\0') break; // Should not happen
-      //      printf("..Checking %s\n", test);
-      ans = stat(test, &buf);
-      if (ans!=0 || !S_ISDIR(buf.st_mode)) {
-        if (ans!=0) {
-          //          printf("Directory %s does not exist; creating...\n", test);
-          mkdir(test, 0766);
-        }
-        else {
-          do_alert("Trouble with file; stopping");
-          exit(1);
-        }
-      }
-      else {
-        //        printf("Directory %s OK\n", test);
-      }
-      *p = '/';
-    }
-    return;
-}
-
-int main(void)
-{
-    FILE *defs = fopen("def.ins", "r");
-    Fl_Double_Window* www;
-    char *p;
-    if (defs==0) {
-      err = make_alert();
-      do_alert("Definitions file is missing");
-      exit(1);
-    }
-    fgets(type,256,defs);
-    p = strchr(type,'\n');
-    if (p!=type) *p = '\0';
-    fgets(bin,256,defs);
-    p = strchr(bin,'\n');
-    if (p!=bin) *p = '\0';
-    fgets(opc,256,defs);
-    p = strchr(opc,'\n');
-    if (p!=opc) *p = '\0';
-    fgets(doh,256,defs);
-    p = strchr(doh,'\n');
-    if (p!=doh) *p = '\0';
-    fgets(lib,256,defs);
-    p = strchr(lib,'\n');
-    if (p!=lib) *p = '\0';
-    fgets(envy,256,defs);
-    p = strchr(envy,'\n');
-    if (p!=envy) *p = '\0';
-    www = make_window(type);
-    doBin->value(1); doOpc->value(1);
-    www->show();
-    err = make_alert();
- again:
-    while (do_install==0) Fl::wait(1.0);
-    // Check that install is correct
-    if (doBin->value() && strlen(bindir->value())==0) {
-      do_alert("No binary directory");
-      goto again;
-    }
-    if (doOpc->value() && strlen(opcdir->value())==0) {
-      do_alert("No opcode directory");
-      goto again;
-    }
-    //Copy binaries
-    if (doBin->value()) {
-      struct dirent **namelist;
-      char b[256];
-      int n = scandir("./bin", &namelist, NULL, alphasort);
-      int i;
-      progress->label("binaries");
-      strcpy(b, bindir->value());
-      if (b[strlen(b)-1]!='/')
-        strcat(b, "/");
-      check_exists(b);
-      progress->minimum(0.0f); progress->maximum((float)n);
-      progress->value(0.0f);
-      Fl::wait(0.1);
-      for (i=0; i<n; i++)
-        if ((namelist[i]->d_name)[0]!='.') {
-          char buff[256];
-          sprintf(buff,"cp -pv ./bin/%s %s>/dev/null", namelist[i]->d_name,b);
-          system(buff);
-          progress->value((float)(i+1));
-          Fl::wait(0.1);
-        }
-        else progress->value((float)(i+1));
-    }
-    //Copy opcodes
-    if (doOpc->value()) {
-      struct dirent **namelist;
-      char b[256];
-      int n = scandir("./opc", &namelist, NULL, alphasort);
-      int i;
-      progress->label("opcodes");
-      strcpy(b, opcdir->value());
-      if (b[strlen(b)-1]!='/')
-        strcat(b, "/");
-      check_exists(b);
-      progress->minimum(0.0f); progress->maximum((float)n);
-      progress->value(0.0f);
-      Fl::wait(0.1);
-      for (i=0; i<n; i++)
-        if ((namelist[i]->d_name)[0]!='.') {
-          char buff[256];
-          sprintf(buff,"cp -pv ./opc/%s %s>/dev/null", namelist[i]->d_name,b);
-          system(buff);
-          progress->value((float)(i+1));
-          Fl::wait(0.1);
-        }
-        else progress->value((float)(i+1));
-    }
-    if (doDoc->value() && strlen(doc->value())!=0) {
-      struct dirent **namelist;
-      char b[256];
-      int n = scandir("./html", &namelist, NULL, alphasort);
-      int i;
-      progress->label("documentation");
-      strcpy(b, doc->value());
-      check_exists(b);
-      if (b[strlen(b)-1]!='/')
-        strcat(b, "/");
-      check_exists(b);
-      check_exists(doc->value());
-      progress->minimum(0.0f); progress->maximum((float)n);
-      progress->value(0.0f);
-      Fl::wait(0.1);
-      for (i=0; i<n; i++)
-        if ((namelist[i]->d_name)[0]!='.') {
-          char buff[256];
-          sprintf(buff,"cp -pv ./html/%s %s>/dev/null", namelist[i]->d_name,b);
-          system(buff);
-          progress->value((float)(i+1));
-          Fl::wait(0.1);
-        }
-        else progress->value((float)(i+1));
-    }
-    if (doLib->value() && strlen(libdir->value())!=0) {
-      char b[256];
-      Fl_Double_Window *ll = make_libraries();
-      strcpy(b, libdir->value());
-      // really ought to pre-mark acording to availability
-      lib_exit = 0;
-      ll->show();
-      while (lib_exit==0) Fl::wait();
-      progress->label("libraries");
-      progress->minimum(0.0f); progress->maximum(7.0);
-      progress->value(0.0f);
-      if (do_libinstall) {
-        char buff[256];
-        float n = 0.0f;
-        check_exists(b);
-        sprintf(buff,"cp -pv ./lib/libcsound.a %s>/dev/null", b);
-        system(buff);
-        progress->value(n+= 1.0f);
-        if (do_asound->value()) {
-          sprintf(buff,"cp -pv ./lib/libasound.so.2 %s>/dev/null", b);
-          system(buff);
-          sprintf(buff,"ln -s %s/libasound.so.2 %s/libasound.so",b,b);
-          system(buff);
-          progress->value(n+= 1.0f);
-        }
-        if (do_fluidsynth->value()) {
-          sprintf(buff,"cp -pv ./lib/libfluidsynth.so.1 %s>/dev/null", b);
-          system(buff);
-          sprintf(buff,"ln -s %s/libfluidsynth.so.1 %s/libfluidsynth.so",b,b);
-          system(buff);
-          progress->value(n+= 1.0f);
-        }
-        if (do_jack->value()) {
-          sprintf(buff,"cp -pv ./lib/libjack.so.0 %s>/dev/null", b);
-          system(buff);
-          sprintf(buff,"ln -s %s/libjacl.so.0 %s/libjack.so",b,b);
-          system(buff);
-          progress->value(n+= 1.0f);
-        }
-        if (do_lo->value()) {
-          sprintf(buff,"cp -pv ./lib/liblo.so.0 %s>/dev/null", b);
-          system(buff);
-          sprintf(buff,"ln -s %s/liblo.so.0 %s/liblo.so",b,b);
-          system(buff);
-          progress->value(n+= 1.0f);
-        }
-        if (do_portaudio->value()) {
-          sprintf(buff,"cp -pv ./lib/libportaudio.so %s>/dev/null", b);
-          system(buff);
-          progress->value(n+= 1.0f);
-        }
-        if (do_sndfile->value()) {
-          sprintf(buff,"cp -pv ./lib/libsndfile.so.1 %s>/dev/null", b);
-          system(buff);
-          sprintf(buff,"ln -s %s/libsndfile.so.1 %s/libsndfile.so",b,b);
-          system(buff);
-          progress->value(n+= 1.0f);
-        }
-      }
-    }
-    if (doBin->value() && strlen(opcdir->value())!=0) {
-      /* Need to setup OPCODEDIR or OPCODEDIR64 */
-      /* This differs according to which shell is being used, so for
-         bash/sh add to .profile "OPCODEDIRxx=yyy; export OPCODEDIRxx"
-         csh/tcsh add to .cshrc "setenv OPCODEDIRxx yyyy"
-      */
-      char buff[120];
-      char binlink[256];
-      char oplink[256];
-      FILE *rc;
-      // Make full address
-      if (bindir->value()[0]!='/') {
-        char bb[200];
-        getcwd(bb, 200);
-        sprintf(binlink, "%s/%s", bb, bindir->value());
-      }
-      else
-        strcpy(binlink, bindir->value());
-      if (opcdir->value()[0]!='/') {
-        char bb[200];
-        getcwd(bb, 200);
-        sprintf(oplink, "%s/%s", bb, opcdir->value());
-      }
-      else
-        strcpy(oplink, opcdir->value());
-      sprintf(buff, "%s/cs5", binlink);
-      rc = fopen(buff, "w");
-      fprintf(rc, "#!/bin/sh\n%s=%s\n%s/csound $0\n",
-              envy, oplink, binlink);
-      fclose(rc);
-      chmod(buff,S_IEXEC|S_IREAD|S_IWRITE|S_IXGRP|S_IXOTH);
-    }
-    err->color(FL_GRAY);
-    do_alert("Installation finished");
-}
diff --git a/installer/macosx/release-build-10.7.sh b/installer/macosx/release-build-10.7.sh
new file mode 100755
index 0000000..e0dc235
--- /dev/null
+++ b/installer/macosx/release-build-10.7.sh
@@ -0,0 +1,275 @@
+#!/bin/sh
+
+export MANUAL_DIR=`pwd`/../../../manual
+export PACKAGE_NAME=csound5.14-OSX10.7-universal.pkg
+export DMG_DIR="Csound 5.14"
+export DMG_NAME="csound5.14-OSX10.7-universal.dmg"
+# If arg2 passed in, will cd into that dir and rebuild, otherwise
+# will clone from repo and do a fresh build
+
+if [ $# -gt 0 ]; then
+	cd $1
+	echo "Using directory $1 `pwd`"
+        export INSTALLER_DIR=`pwd`/installer
+        rm -rf installer 
+        mkdir installer
+else
+	export RELEASE_DIR="`eval date +%Y-%m-%d-%H%M%S`"
+        export INSTALLER_DIR=`pwd`/$RELEASE_DIR/installer
+	mkdir $RELEASE_DIR 
+        mkdir $INSTALLER_DIR
+	cd $RELEASE_DIR
+
+	#git clone git://csound.git.sourceforge.net/gitroot/csound/csound5
+	git clone ../../.. csound5 
+	cp -R csound5 csound5-f
+fi
+
+#BUILD DOUBLES CSOUND
+echo "Building Csound (double)..."
+cd csound5
+cp ../../custom.10.7.py custom.py 
+
+export SCONSFLAGS="CC=gcc-4.2 CXX=g++-4.2 gcc4opt=universalX86 useFLTK=1 includeMP3=1 noDebug=1 buildInterfaces=1 buildPythonOpcodes=1 buildRelease=1 buildTclcsound=1 buildPDClass=1 useOSC=1 buildNewParser=1 dynamicCsoundLibrary=1 buildVirtual=1 useJack=1 buildCsoundAC=1 useGettext=0 NewParserDebug=0 buildPythonWrapper=1 buildMultiCore=1 buildJavaWrapper=1 buildLuaOpcodes=0 useDouble=1"
+/usr/local/bin/scons -j2 &> ../csound5_build_log.txt
+
+# BUILD FLOAT CSOUND5
+echo "Building Csound (float)..."
+
+cd ../csound5-f
+cp ../../custom.10.7.py custom.py 
+
+export SCONSFLAGS="CC=gcc-4.2 CXX=g++-4.2 gcc4opt=universalX86 useFLTK=1 includeMP3=1 noDebug=1 buildInterfaces=1 buildPythonOpcodes=1 buildRelease=1 buildTclcsound=1 buildPDClass=1 useOSC=1 buildNewParser=1 dynamicCsoundLibrary=1 buildVirtual=1 useJack=1 buildCsoundAC=1 useGettext=0 NewParserDebug=0 buildPythonWrapper=1 buildMultiCore=1 buildJavaWrapper=1 buildLuaOpcodes=0"
+/usr/local/bin/scons -j2 &> ../csound5-f_build_log.txt
+
+cd ..
+
+# ASSEMBLE FILES FOR INSTALLER
+export CSLIBVERSION=5.2
+export SUPPORT_LIBS_DIR=$INSTALLER_DIR/SupportLibs/Package_Contents/usr/local/lib
+export APPS32_DIR=$INSTALLER_DIR/CsoundApps/Package_Contents/usr/local/bin
+export APPS64_DIR=$INSTALLER_DIR/CsoundApps64/Package_Contents/usr/local/bin
+export FRAMEWORK32_DIR=$INSTALLER_DIR/CsoundLib/Package_Contents/Library/Frameworks/CsoundLib.framework
+export FRAMEWORK64_DIR=$INSTALLER_DIR/CsoundLib64/Package_Contents/Library/Frameworks/CsoundLib64.framework
+
+export PYTHON_DIR=Versions/$CSLIBVERSION/Resources/Python/Current
+export TCLTK_DIR=Versions/$CSLIBVERSION/Resources/TclTk
+export JAVA_DIR=Versions/$CSLIBVERSION/Resources/Java
+export CSLADSPA_DIR=Versions/$CSLIBVERSION/Resources/csladspa
+export SAMPLES_DIR=Versions/$CSLIBVERSION/Resources/samples
+export PD_DIR=Versions/$CSLIBVERSION/Resources/PD
+
+mkdir -p $SUPPORT_LIBS_DIR
+mkdir -p $APPS32_DIR
+mkdir -p $APPS64_DIR
+mkdir -p $FRAMEWORK32_DIR
+mkdir -p $FRAMEWORK64_DIR
+
+mkdir -p $FRAMEWORK32_DIR/$PYTHON_DIR
+mkdir -p $FRAMEWORK32_DIR/$TCLTK_DIR
+mkdir -p $FRAMEWORK32_DIR/$PYTHON_DIR
+mkdir -p $FRAMEWORK32_DIR/$JAVA_DIR
+mkdir -p $FRAMEWORK32_DIR/$SAMPLES_DIR
+mkdir -p $FRAMEWORK32_DIR/$PD_DIR
+mkdir -p $FRAMEWORK32_DIR/../Documentation
+#mkdir -p $FRAMEWORK32_DIR/Headers
+
+mkdir -p $FRAMEWORK64_DIR/$PYTHON_DIR
+mkdir -p $FRAMEWORK64_DIR/$TCLTK_DIR
+mkdir -p $FRAMEWORK64_DIR/$PYTHON_DIR
+mkdir -p $FRAMEWORK64_DIR/$JAVA_DIR
+mkdir -p $FRAMEWORK64_DIR/$SAMPLES_DIR
+mkdir -p $FRAMEWORK64_DIR/$PD_DIR
+mkdir -p $FRAMEWORK64_DIR/../Documentation
+#mkdir -p $FRAMEWORK64_DIR/Headers
+
+cp -R csound5/CsoundLib64.framework/ $FRAMEWORK64_DIR
+cp -R csound5-f/CsoundLib.framework/ $FRAMEWORK32_DIR
+
+
+
+echo "Copying Python Libs..."
+
+cp csound5-f/_csnd.so $FRAMEWORK32_DIR/$PYTHON_DIR
+cp csound5-f/csnd.py $FRAMEWORK32_DIR/$PYTHON_DIR
+cp csound5-f/CsoundAC.py $FRAMEWORK32_DIR/$PYTHON_DIR
+cp csound5-f/_CsoundAC.so $FRAMEWORK32_DIR/$PYTHON_DIR
+
+cp csound5/_csnd.so $FRAMEWORK64_DIR/$PYTHON_DIR
+cp csound5/csnd.py $FRAMEWORK64_DIR/$PYTHON_DIR
+cp csound5/CsoundAC.py $FRAMEWORK64_DIR/$PYTHON_DIR
+cp csound5/_CsoundAC.so $FRAMEWORK64_DIR/$PYTHON_DIR
+
+
+
+echo "preparing framework..."
+
+cp  csound5-f/lib_csnd.dylib $FRAMEWORK32_DIR/Versions/$CSLIBVERSION/
+cp  csound5-f/tclcsound.dylib $FRAMEWORK32_DIR/$TCLTK_DIR
+cp  csound5-f/csladspa.so  $FRAMEWORK32_DIR/$CSLADSPA_DIR
+cp  csound5-f/lib_jcsound.jnilib $FRAMEWORK32_DIR/$JAVA_DIR
+cp  csound5-f/csnd.jar $FRAMEWORK32_DIR/$JAVA_DIR
+cp  csound5-f/csoundapi~.pd_darwin $FRAMEWORK32_DIR/$PD_DIR
+cp  csound5-f/examples/csoundapi_tilde/csoundapi-osx.pd $FRAMEWORK32_DIR/$PD_DIR/csoundapi.pd
+cp  csound5-f/examples/csoundapi_tilde/csapi_demo.csd $FRAMEWORK32_DIR/../Documentation/
+
+cp  csound5/lib_csnd.dylib $FRAMEWORK64_DIR/Versions/$CSLIBVERSION/
+cp  csound5/tclcsound.dylib $FRAMEWORK64_DIR/$TCLTK_DIR
+cp  csound5/csladspa.so  $FRAMEWORK64_DIR/$CSLADSPA_DIR
+cp  csound5/lib_jcsound.jnilib $FRAMEWORK64_DIR/$JAVA_DIR
+cp  csound5/csnd.jar $FRAMEWORK64_DIR/$JAVA_DIR
+cp  csound5/csoundapi~.pd_darwin $FRAMEWORK64_DIR/$PD_DIR
+cp  csound5/examples/csoundapi_tilde/csoundapi-osx.pd $FRAMEWORK64_DIR/$PD_DIR/csoundapi.pd
+cp  csound5/examples/csoundapi_tilde/csapi_demo.csd $FRAMEWORK64_DIR/../Documentation/
+
+
+echo "copying manual..."
+
+cp -Rf $MANUAL_DIR/html $FRAMEWORK32_DIR/Resources/
+mv $FRAMEWORK32_DIR/Resources/html $FRAMEWORK32_DIR/Resources/Manual
+
+cp -Rf $MANUAL_DIR/html $FRAMEWORK64_DIR/Resources/
+mv $FRAMEWORK64_DIR/Resources/html $FRAMEWORK64_DIR/Resources/Manual
+
+
+echo "copying headers..."
+
+cp csound5-f/interfaces/*.hpp $FRAMEWORK32_DIR/Headers
+cp csound5/interfaces/*.hpp $FRAMEWORK64_DIR/Headers
+
+
+echo "copying samples..."
+
+cp csound5-f/samples/*.dat $FRAMEWORK32_DIR/$SAMPLES_DIR
+cp csound5/samples/*.dat $FRAMEWORK64_DIR/$SAMPLES_DIR
+
+
+echo "copying csladspa..."
+
+mkdir -p $APPS32_DIR/../../../Library/Audio/Plug-Ins/LADSPA
+cp csound5-f/csladspa.so $APPS32_DIR/../../../Library/Audio/Plug-Ins/LADSPA/csladspa.so
+
+
+mkdir -p $APPS64_DIR/../../../Library/Audio/Plug-Ins/LADSPA
+cp csound5/csladspa.so $APPS64_DIR/../../../Library/Audio/Plug-Ins/LADSPA/csladspa64.so
+
+
+echo "copying apps..."
+
+cd csound5-f
+
+cp csound  $APPS32_DIR
+cp dnoise   $APPS32_DIR
+cp het_export $APPS32_DIR     
+cp lpanal  $APPS32_DIR        
+cp scale  $APPS32_DIR         
+cp tabdes $APPS32_DIR
+cp cs   $APPS32_DIR           
+cp cstclsh $APPS32_DIR        
+cp envext $APPS32_DIR          
+cp het_import $APPS32_DIR     
+cp lpc_export $APPS32_DIR     
+cp mixer  $APPS32_DIR         
+cp scsort $APPS32_DIR
+cp cswish  $APPS32_DIR        
+cp extract $APPS32_DIR         
+cp hetro $APPS32_DIR          
+cp lpc_import $APPS32_DIR     
+cp pvanal  $APPS32_DIR        
+cp sndinfo $APPS32_DIR
+cp csb64enc $APPS32_DIR        
+cp cvanal  $APPS32_DIR        
+cp extractor $APPS32_DIR       
+cp linseg    $APPS32_DIR      
+cp makecsd   $APPS32_DIR      
+cp pvlook   $APPS32_DIR       
+cp srconv $APPS32_DIR
+cp atsa  $APPS32_DIR
+
+cd ../csound5
+
+cp csound  $APPS64_DIR/csound64
+
+cd ..
+
+
+
+echo "copying support libs..."
+
+cp /usr/local/lib/libfltk.1.3.dylib $SUPPORT_LIBS_DIR
+cp /usr/local/lib/libfltk_images.1.3.dylib $SUPPORT_LIBS_DIR
+cp /usr/local/lib/libfluidsynth.1.dylib $SUPPORT_LIBS_DIR
+cp /usr/local/lib/liblo.7.dylib $SUPPORT_LIBS_DIR
+cp /usr/local/lib/libsndfile.1.dylib $SUPPORT_LIBS_DIR
+cp /usr/local/lib/libportaudio.2.dylib $SUPPORT_LIBS_DIR
+cp /usr/local/lib/libportmidi.dylib $SUPPORT_LIBS_DIR
+#cp /usr/local/lib/libpng12.0.dylib $SUPLIBS
+cp /usr/local/lib/libmpadec.so $SUPPORT_LIBS_DIR
+#cp /usr/local/lib/libmpadec.dylib $SUPPORT_LIBS_DIR
+#cp /usr/local/lib/libluajit.dylib $SUPLIBS
+
+
+echo "...setting permissions..."
+
+cd installer
+
+chgrp -R admin  CsoundLib/Package_Contents/Library
+chown -R root   CsoundLib/Package_Contents/Library
+chmod -R 775    CsoundLib/Package_Contents/Library
+#chgrp -R wheel  CsoundLib/Package_Contents/System
+#chown -R root   CsoundLib/Package_Contents/System
+#chmod -R 755    CsoundLib/Package_Contents/System
+
+chgrp -R admin  CsoundApps/Package_Contents/Library
+chown -R root   CsoundApps/Package_Contents/Library
+chmod -R 775    CsoundApps/Package_Contents/Library
+chgrp -R wheel  CsoundApps/Package_Contents/usr
+chown -R root   CsoundApps/Package_Contents/usr
+chmod -R 755    CsoundApps/Package_Contents/usr
+
+chgrp -R admin  CsoundLib64/Package_Contents/Library
+chown -R root   CsoundLib64/Package_Contents/Library
+chmod -R 775    CsoundLib64/Package_Contents/Library
+#chgrp -R wheel  CsoundLib64/Package_Contents/System
+#chown -R root   CsoundLib64/Package_Contents/System
+#chmod -R 755    CsoundLib64/Package_Contents/System
+
+chgrp -R admin  CsoundApps64/Package_Contents/Library
+chown -R root   CsoundApps64/Package_Contents/Library
+chmod -R 775    CsoundApps64/Package_Contents/Library
+chgrp -R wheel  CsoundApps64/Package_Contents/usr
+chown -R root   CsoundApps64/Package_Contents/usr
+chmod -R 755    CsoundApps64/Package_Contents/usr
+
+
+chgrp -R wheel  SupportLibs/Package_Contents/usr
+chown -R root   SupportLibs/Package_Contents/usr
+chmod -R 755    SupportLibs/Package_Contents/usr
+
+echo "building packages ..."
+
+pkgbuild --identifier com.csound.csound5Environment.csoundLib64 --root CsoundLib64/Package_Contents/ --version 1 --scripts ../../PkgResources/CsoundLib64 CsoundLib64.pkg
+pkgbuild --identifier com.csound.csound5Environment.csoundLib --root CsoundLib/Package_Contents/ --version 1 --scripts ../../PkgResources/CsoundLib CsoundLib.pkg
+pkgbuild --identifier com.csound.csound5Environment.csoundApps --root CsoundApps/Package_Contents/ --version 1 --scripts ../../PkgResources/CsoundApps CsoundApps.pkg
+pkgbuild --identifier com.csound.csound5Environment.csoundApps64 --root CsoundApps64/Package_Contents/ --version 1 --scripts ../../PkgResources/CsoundApps64 CsoundApps64.pkg
+pkgbuild --identifier com.csound.csound5Environment.supportLibs --root SupportLibs/Package_Contents/ --version 1 --scripts ../../PkgResources/SupportLibs SupportLibs.pkg
+
+
+echo "building product..."
+
+productbuild --distribution ../../Distribution.dist --resources ../../PkgResources/en.lproj $PACKAGE_NAME
+
+echo "assembling DMG..."
+
+mkdir "$DMG_DIR" 
+cd "$DMG_DIR"
+cp ../$PACKAGE_NAME .
+cp -R ../../../DmgResources/* .
+ln -s /Applications .
+cd ..
+
+hdiutil create "$DMG_NAME" -srcfolder "$DMG_DIR"
+
+echo "... finished."
+
+open $INSTALLER_DIR
diff --git a/installer/windows/csoundd.nsi b/installer/windows/csoundd.nsi
index 368a338..91d6a9a 100644
--- a/installer/windows/csoundd.nsi
+++ b/installer/windows/csoundd.nsi
@@ -18,7 +18,7 @@
 #######################################################################
 
 !define PRODUCT "Csound"
-!define PROGRAM "Csound5.14.0"
+!define PROGRAM "Csound5.14.2"
 !echo "Building installer for: ${PROGRAM}"
 !ifdef FLOAT
 !ifdef NONFREE
diff --git a/po/american.po b/po/american.po
index 294f4f4..2e66851 100644
--- a/po/american.po
+++ b/po/american.po
@@ -8,7 +8,7 @@ msgstr ""
 "Project-Id-Version: CSOUND 5.xx\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2008-07-26 19:39+0100\n"
-"PO-Revision-Date: 2010-12-28 14:14+0000\n"
+"PO-Revision-Date: 2011-12-20 13:18+0000\n"
 "Last-Translator: John ffitch <jpff at sourceforge.net>\n"
 "Language-Team: English (USA)\n"
 "Language: \n"
@@ -31,22 +31,22 @@ msgstr ""
 msgid "auxlist for instr %d (%p):\n"
 msgstr ""
 
-#: Engine/auxfd.c:153
+#: Engine/auxfd.c:154
 #, c-format
 msgid "\tauxch at %p: size %ld, auxp %p, endp %p\n"
 msgstr ""
 
-#: Engine/auxfd.c:165
+#: Engine/auxfd.c:166
 #, c-format
 msgid "fdlist for instr %s [%d] (%p):"
 msgstr ""
 
-#: Engine/auxfd.c:168
+#: Engine/auxfd.c:169
 #, c-format
 msgid "fdlist for instr %d (%p):"
 msgstr ""
 
-#: Engine/auxfd.c:171
+#: Engine/auxfd.c:172
 #, c-format
 msgid "  fd %p in %p"
 msgstr ""
@@ -99,356 +99,316 @@ msgstr ""
 msgid "(unknown error)"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:214 Engine/rdorch.c:1832
+#: Engine/csound_orc_compile.c:138
+#, c-format
+msgid ""
+"input arg %d '%s' of type %s not allowed when expecting %c (for opcode %s), "
+"line %d\n"
+msgstr ""
+
+#: Engine/csound_orc_compile.c:265 Engine/rdorch.c:1862
 msgid "missing or extra arg"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:218
+#: Engine/csound_orc_compile.c:269
 msgid "too many input args\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:475
+#: Engine/csound_orc_compile.c:304
 #, c-format
-msgid "create_opcode: No rule to handle statement of type %d\n"
+msgid "input arg '%s' used before defined (in opcode %s), line %d\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:671
+#: Engine/csound_orc_compile.c:380
 #, c-format
-msgid "create_instrument: instr num %ld\n"
+msgid ""
+"output name previously used, type '%c' must be uniquely defined, line %d"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:681
+#: Engine/csound_orc_compile.c:386
 #, c-format
-msgid "create_instrument: instr name %s\n"
+msgid "output arg '%s' illegal type (for opcode %s), line %d\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:688 Engine/otran.c:351
-msgid "invalid name for instrument"
-msgstr ""
-
-#: Engine/csound_orc_compile.c:692 Engine/otran.c:356
+#: Engine/csound_orc_compile.c:541
 #, c-format
-msgid "instr %s redefined"
-msgstr "instr %s redefined"
+msgid "create_opcode: No rule to handle statement of type %d\n"
+msgstr ""
 
-#: Engine/csound_orc_compile.c:833 Engine/otran.c:145 Engine/symbtab.c:394
+#: Engine/csound_orc_compile.c:738
 #, c-format
-msgid "invalid input type for opcode %s"
+msgid "create_instrument: instr num %ld\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:838 Engine/otran.c:150 Engine/symbtab.c:399
+#: Engine/csound_orc_compile.c:748
 #, c-format
-msgid "too many input args for opcode %s"
+msgid "create_instrument: instr name %s\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:853 Engine/otran.c:165 Engine/symbtab.c:414
-#, c-format
-msgid "too many output args for opcode %s"
+#: Engine/csound_orc_compile.c:755 Engine/otran.c:364
+msgid "invalid name for instrument"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:869 Engine/otran.c:187 Engine/symbtab.c:433
+#: Engine/csound_orc_compile.c:759 Engine/otran.c:370
 #, c-format
-msgid "invalid output type for opcode %s"
-msgstr ""
+msgid "instr %s redefined"
+msgstr "instr %s redefined"
 
-#: Engine/csound_orc_compile.c:954 Engine/otran.c:339
+#: Engine/csound_orc_compile.c:903 Engine/otran.c:352
 #, c-format
 msgid "instr %ld redefined"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:964
+#: Engine/csound_orc_compile.c:914
 msgid "!!! csound->opcodeInfo is NULL !!!\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1111
+#: Engine/csound_orc_compile.c:1083
 #, c-format
 msgid "Unknown TREE node of type %d found in root.\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1168 Engine/otran.c:565 Engine/otran.c:1414
+#: Engine/csound_orc_compile.c:1140 Engine/otran.c:579 Engine/otran.c:1433
 #, c-format
 msgid "%s invalid sample rate"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1170 Engine/otran.c:567 Engine/otran.c:1416
+#: Engine/csound_orc_compile.c:1142 Engine/otran.c:581 Engine/otran.c:1435
 #, c-format
 msgid "%s invalid control rate"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1173 Engine/otran.c:570 Engine/otran.c:1412
+#: Engine/csound_orc_compile.c:1146 Engine/otran.c:584 Engine/otran.c:1431
 #, c-format
 msgid "%s invalid ksmps value"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1176 Engine/otran.c:572 Engine/otran.c:1418
+#: Engine/csound_orc_compile.c:1149 Engine/otran.c:587 Engine/otran.c:1437
 #, c-format
 msgid "%s inconsistent sr, kr, ksmps"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1190
+#: Engine/csound_orc_compile.c:1165
 msgid "perf-pass statements illegal in header blk\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1195
+#: Engine/csound_orc_compile.c:1170
 #, c-format
 msgid "%d syntax errors in orchestra.  compilation invalid\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1255 Engine/otran.c:656
+#: Engine/csound_orc_compile.c:1230 Engine/otran.c:671
 msgid "inconsistent argoff sumcount"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1327 Engine/otran.c:725
+#: Engine/csound_orc_compile.c:1302 Engine/otran.c:740
 #, c-format
 msgid "LABELS list is full...extending to %d\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1365 Engine/otran.c:763
+#: Engine/csound_orc_compile.c:1340 Engine/otran.c:778
 #, c-format
 msgid "GOTOS list is full..extending to %d\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1398 Engine/otran.c:796
+#: Engine/csound_orc_compile.c:1373 Engine/otran.c:811
 #, c-format
 msgid "target label '%s' not found"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1463 Engine/otran.c:851
+#: Engine/csound_orc_compile.c:1451 Engine/otran.c:866
 #, c-format
 msgid "string syntax '%s'"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1513 Engine/otran.c:901
+#: Engine/csound_orc_compile.c:1501 Engine/otran.c:916
 #, c-format
 msgid "numeric syntax '%s'"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1539 Engine/otran.c:927
+#: Engine/csound_orc_compile.c:1527 Engine/otran.c:942
 #, c-format
 msgid "extending Floating pool to %d\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1578 Engine/otran.c:999
+#: Engine/csound_orc_compile.c:1566 Engine/otran.c:1018
 msgid "gblnamset(): memory allocation failure"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1606 Engine/otran.c:1027
+#: Engine/csound_orc_compile.c:1594 Engine/otran.c:1046
 msgid "lclnamset(): memory allocation failure"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1632 Engine/otran.c:1052
+#: Engine/csound_orc_compile.c:1620 Engine/otran.c:1071
 msgid "unexpected global name"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1655 Engine/otran.c:1074
+#: Engine/csound_orc_compile.c:1643 Engine/otran.c:1093
 msgid "unknown nametype"
 msgstr ""
 
-#: Engine/csound_orc.l:239
+#: Engine/csound_orc_expressions.c:459
 #, c-format
-msgid "unterminated string found on line %d >>%s<<\n"
+msgid "error: function %s with arg type %c not found, line %d \n"
 msgstr ""
 
-#: Engine/csound_orc.l:259 Engine/csound_orc.l:286 Engine/csound_orc.l:314
-#: Engine/csound_orc.l:367 Engine/rdorch.c:901 Engine/sread.c:396
+#: Engine/csound_orc_expressions.c:862
 #, c-format
-msgid "Undefined macro: '%s'"
-msgstr ""
-
-#: Engine/csound_orc.l:265 Engine/csound_orc.l:292
-msgid "Includes nested too deeply"
+msgid "error: non-existent statement in conditional, line %d \n"
 msgstr ""
 
-#: Engine/csound_orc.l:335 Engine/csound_orc.l:388 Engine/rdorch.c:940
+#: Engine/csound_orc_semantics.c:157
 #, c-format
 msgid ""
-"Missing argument terminator\n"
-"%.98s"
-msgstr ""
-
-#: Engine/csound_orc.l:484
-#, c-format
-msgid "Line %d: Unknown character: '%c'(%2x)\n"
-msgstr ""
-
-#: Engine/csound_orc.l:527
-#, c-format
-msgid "Cannot open file \"%s\"\n"
-msgstr "Can't open input file \"%s\"\n"
-
-#: Engine/csound_orc.l:573 Engine/rdorch.c:689 Engine/sread.c:1595
-msgid "macro error\n"
-msgstr ""
-
-#: Engine/csound_orc.l:631 Engine/rdorch.c:845 Engine/sread.c:1686
-#, c-format
-msgid "macro %s undefined\n"
-msgstr ""
-
-#: Engine/csound_orc.l:645 Engine/rdorch.c:859 Engine/sread.c:294
-msgid "Undefining undefined macro"
-msgstr ""
-
-#: Engine/csound_orc.l:786 Engine/rdorch.c:413 Engine/sread.c:741
-#, c-format
-msgid "Macro definition for %*s\n"
-msgstr ""
-
-#: Engine/csound_orc.l:789 Engine/rdorch.c:416
-msgid "Invalid macro name for --omacro"
-msgstr ""
-
-#: Engine/csound_orc.y:270
-msgid "No number following instr\n"
+"\n"
+"error: %s  (token \"%s\")"
 msgstr ""
 
-#: Engine/csound_orc_semantics.c:127
+#: Engine/csound_orc_semantics.c:159
 #, c-format
-msgid "error: %s (token \"%s\")"
+msgid ""
+" line %d:\n"
+">>>"
 msgstr ""
 
-#: Engine/csound_orc_semantics.c:129
+#: Engine/csound_orc_semantics.c:732
 #, c-format
-msgid " line %d: %s"
-msgstr ""
-
-#: Engine/csound_orc_semantics.c:702 Engine/rdorch.c:1863
-msgid "insufficient required arguments"
+msgid "insufficient required arguments for opcode %s on line %d\n"
 msgstr ""
 
-#: Engine/csound_orc_semantics.c:768 Engine/rdorch.c:1617 Engine/rdorch.c:1635
-#: Engine/rdorch.c:1676 Engine/rdorch.c:1811 Engine/rdorch.c:1980
+#: Engine/csound_orc_semantics.c:797 Engine/rdorch.c:1644 Engine/rdorch.c:1662
+#: Engine/rdorch.c:1703 Engine/rdorch.c:1841 Engine/rdorch.c:2011
 #, c-format
 msgid "modified opcod: %s"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:113 Engine/cs_par_dispatch.c:125
+#: Engine/cs_par_dispatch.c:115 Engine/cs_par_dispatch.c:128
 #, c-format
 msgid "Poorly specified global lock index: %i [max: %i]\n"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:138 Engine/cs_par_dispatch.c:157
+#: Engine/cs_par_dispatch.c:142 Engine/cs_par_dispatch.c:162
 msgid "Invalid NULL parameter name for a global variable\n"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:505 Engine/cs_par_dispatch.c:528
-#: Engine/cs_par_dispatch.c:2463 Engine/cs_par_dispatch.c:2507
-#: Engine/cs_par_dispatch.c:2509 Engine/cs_par_dispatch.c:2570
+#: Engine/cs_par_dispatch.c:526 Engine/cs_par_dispatch.c:553
+#: Engine/cs_par_dispatch.c:2543 Engine/cs_par_dispatch.c:2588
+#: Engine/cs_par_dispatch.c:2590 Engine/cs_par_dispatch.c:2654
 msgid "Invalid NULL Parameter entry"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:507 Engine/cs_par_dispatch.c:541
-#: Engine/cs_par_dispatch.c:566 Engine/cs_par_dispatch.c:605
+#: Engine/cs_par_dispatch.c:528 Engine/cs_par_dispatch.c:567
+#: Engine/cs_par_dispatch.c:594 Engine/cs_par_dispatch.c:635
 msgid "Invalid NULL Parameter name"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:512
+#: Engine/cs_par_dispatch.c:535
 msgid "Failed to allocate Opcode Weight cache entry"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:632 Engine/cs_par_dispatch.c:718
+#: Engine/cs_par_dispatch.c:664 Engine/cs_par_dispatch.c:755
 msgid "No Weights to Dump (Using Defaults)\n"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:670 Engine/cs_par_dispatch.c:794
+#: Engine/cs_par_dispatch.c:705 Engine/cs_par_dispatch.c:835
 #, c-format
 msgid "Opcode Weight Spec File not found at: %s"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:722
+#: Engine/cs_par_dispatch.c:759
 msgid "Weights Dump\n"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:866
+#: Engine/cs_par_dispatch.c:907
 #, c-format
 msgid "Parallel Spec File not found at: %s"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:872
+#: Engine/cs_par_dispatch.c:913
 msgid "Parallel Spec File invalid format expected weight_min parameter"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:877
+#: Engine/cs_par_dispatch.c:918
 msgid "Parallel Spec File invalid format expected weight_max parameter"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:881
+#: Engine/cs_par_dispatch.c:922
 msgid "Parallel Spec File invalid format expected roots_avail_min parameter"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:885
+#: Engine/cs_par_dispatch.c:926
 msgid "Parallel Spec File invalid format expected roots_avail_max parameter"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:961 Engine/cs_par_dispatch.c:985
-#: Engine/cs_par_dispatch.c:1109 Engine/cs_par_dispatch.c:1195
-#: Engine/cs_par_dispatch.c:1332 Engine/cs_par_dispatch.c:1366
-#: Engine/cs_par_dispatch.c:1383 Engine/cs_par_dispatch.c:1405
-#: Engine/cs_par_dispatch.c:1432 Engine/cs_par_dispatch.c:1452
-#: Engine/cs_par_dispatch.c:1476 Engine/cs_par_dispatch.c:1566
-#: Engine/cs_par_dispatch.c:1621 Engine/cs_par_dispatch.c:1714
-#: Engine/cs_par_dispatch.c:1769 Engine/cs_par_dispatch.c:2597
+#: Engine/cs_par_dispatch.c:1003 Engine/cs_par_dispatch.c:1027
+#: Engine/cs_par_dispatch.c:1155 Engine/cs_par_dispatch.c:1251
+#: Engine/cs_par_dispatch.c:1405 Engine/cs_par_dispatch.c:1439
+#: Engine/cs_par_dispatch.c:1456 Engine/cs_par_dispatch.c:1478
+#: Engine/cs_par_dispatch.c:1506 Engine/cs_par_dispatch.c:1528
+#: Engine/cs_par_dispatch.c:1552 Engine/cs_par_dispatch.c:1644
+#: Engine/cs_par_dispatch.c:1699 Engine/cs_par_dispatch.c:1792
+#: Engine/cs_par_dispatch.c:1847 Engine/cs_par_dispatch.c:2681
 msgid "Invalid NULL Parameter dag"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:966
+#: Engine/cs_par_dispatch.c:1008
 msgid "Failed to allocate dag"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1017 Engine/cs_par_dispatch.c:1040
-#: Engine/cs_par_dispatch.c:1062 Engine/cs_par_dispatch.c:1064
+#: Engine/cs_par_dispatch.c:1060 Engine/cs_par_dispatch.c:1083
+#: Engine/cs_par_dispatch.c:1105 Engine/cs_par_dispatch.c:1107
 msgid "Invalid NULL Parameter dag_node"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1019
+#: Engine/cs_par_dispatch.c:1062
 msgid "Invalid NULL Parameter instr"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1021
+#: Engine/cs_par_dispatch.c:1064
 msgid "Invalid NULL Parameter insds"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1026 Engine/cs_par_dispatch.c:1048
+#: Engine/cs_par_dispatch.c:1069 Engine/cs_par_dispatch.c:1091
 msgid "Failed to allocate dag_node"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1043
+#: Engine/cs_par_dispatch.c:1086
 msgid "Invalid Parameter count must be greater than 0"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1175 Engine/cs_par_dispatch.c:1433
-#: Engine/cs_par_dispatch.c:2465 Engine/cs_par_dispatch.c:2571
-#: Engine/cs_par_dispatch.c:2598
+#: Engine/cs_par_dispatch.c:1229 Engine/cs_par_dispatch.c:1508
+#: Engine/cs_par_dispatch.c:2545 Engine/cs_par_dispatch.c:2655
+#: Engine/cs_par_dispatch.c:2682
 msgid "Invalid NULL Parameter chain"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1183
+#: Engine/cs_par_dispatch.c:1237
 #, c-format
 msgid "Failed to find semantic information for instrument '%i'"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1478
+#: Engine/cs_par_dispatch.c:1554
 msgid "Invalid NULL Parameter node"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1480
+#: Engine/cs_par_dispatch.c:1556
 msgid "Invalid NULL Parameter update_hdl"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1569
+#: Engine/cs_par_dispatch.c:1647
 msgid "Invalid Parameter update_hdl is outside the DAG range"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:2417
-#, fuzzy, c-format
+#: Engine/cs_par_dispatch.c:2497
+#, c-format
 msgid "Parallel Dump File not found at: %s for writing"
-msgstr "can't open %s for writing"
+msgstr "Parallel Dump File not found at: %s for writing"
 
-#: Engine/cs_par_dispatch.c:2477
+#: Engine/cs_par_dispatch.c:2557
 msgid "Failed to allocate Dag2 cache entry"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:2527
+#: Engine/cs_par_dispatch.c:2610
 msgid "Cache Update\n"
 msgstr ""
 
@@ -462,12 +422,12 @@ msgstr ""
 msgid "Creating search path cache for '%s':"
 msgstr ""
 
-#: Engine/envvar.c:1082
+#: Engine/envvar.c:1083
 #, c-format
 msgid "internal error: csoundFileOpen(): invalid type: %d"
 msgstr ""
 
-#: Engine/envvar.c:1264
+#: Engine/envvar.c:1266
 #, c-format
 msgid "internal error: csoundCreateFileHandle(): invalid type: %d"
 msgstr ""
@@ -525,345 +485,346 @@ msgstr ""
 msgid "expression syntax"
 msgstr ""
 
-#: Engine/fgens.c:95
+#: Engine/fgens.c:91
 msgid "unknown GEN number"
 msgstr ""
 
-#: Engine/fgens.c:137
+#: Engine/fgens.c:133
 msgid "ftable does not exist"
 msgstr "ftable doesn't exist"
 
-#: Engine/fgens.c:142
+#: Engine/fgens.c:138
 #, c-format
 msgid "ftable %d now deleted\n"
 msgstr ""
 
-#: Engine/fgens.c:157 Engine/fgens.c:1597 Engine/fgens.c:1683
-#: Engine/fgens.c:1762 Engine/fgens.c:1878 Engine/fgens.c:1959
-#: Engine/fgens.c:2867
+#: Engine/fgens.c:153 Engine/fgens.c:1593 Engine/fgens.c:1679
+#: Engine/fgens.c:1758 Engine/fgens.c:1874 Engine/fgens.c:1955
+#: Engine/fgens.c:2909
 msgid "insufficient gen arguments"
 msgstr ""
 
-#: Engine/fgens.c:183 Opcodes/ftgen.c:116
+#: Engine/fgens.c:179 Opcodes/ftgen.c:116
 #, c-format
 msgid "Named gen \"%s\" not defined"
 msgstr ""
 
-#: Engine/fgens.c:190
+#: Engine/fgens.c:186
 msgid "illegal gen number"
 msgstr ""
 
-#: Engine/fgens.c:198
-msgid "deferred size for GENs 1, 23 or 28 only"
+#: Engine/fgens.c:194
+msgid "deferred size for GENs 1, 23, 28 or 49 only"
 msgstr ""
 
-#: Engine/fgens.c:201 Engine/fgens.c:249
+#: Engine/fgens.c:197 Engine/fgens.c:245
 #, c-format
 msgid "ftable %d:\n"
 msgstr ""
 
-#: Engine/fgens.c:226 Engine/fgens.c:233
+#: Engine/fgens.c:222 Engine/fgens.c:229
 msgid "illegal table length"
 msgstr ""
 
-#: Engine/fgens.c:292 Engine/fgens.c:2219
+#: Engine/fgens.c:288 Engine/fgens.c:2215
 #, c-format
 msgid ""
 "ftable %d relocating due to size change\n"
 "         currently active instruments may find this disturbing"
 msgstr ""
 
-#: Engine/fgens.c:350 Engine/fgens.c:471 Engine/fgens.c:555 Engine/fgens.c:636
-#: Engine/fgens.c:711 Engine/fgens.c:760 Engine/fgens.c:881 Engine/fgens.c:958
-#: Engine/fgens.c:1053 Engine/fgens.c:1097 Engine/fgens.c:1144
-#: Engine/fgens.c:1397 Engine/fgens.c:1459 Engine/fgens.c:1681
-#: Engine/fgens.c:1759 Engine/fgens.c:2114 Engine/fgens.c:2821
-#: Engine/fgens.c:2864
+#: Engine/fgens.c:346 Engine/fgens.c:467 Engine/fgens.c:551 Engine/fgens.c:632
+#: Engine/fgens.c:707 Engine/fgens.c:756 Engine/fgens.c:877 Engine/fgens.c:954
+#: Engine/fgens.c:1049 Engine/fgens.c:1093 Engine/fgens.c:1140
+#: Engine/fgens.c:1393 Engine/fgens.c:1455 Engine/fgens.c:1677
+#: Engine/fgens.c:1755 Engine/fgens.c:2110 Engine/fgens.c:2863
+#: Engine/fgens.c:2906
 msgid "using extended arguments\n"
 msgstr ""
 
-#: Engine/fgens.c:374
+#: Engine/fgens.c:370
 msgid "no coefs present"
 msgstr ""
 
-#: Engine/fgens.c:379 Engine/fgens.c:645 Engine/fgens.c:653
+#: Engine/fgens.c:375 Engine/fgens.c:641 Engine/fgens.c:649
 msgid "illegal x interval"
 msgstr ""
 
-#: Engine/fgens.c:408 Engine/fgens.c:557 Engine/fgens.c:638 Engine/fgens.c:883
-#: Engine/fgens.c:1354 Engine/fgens.c:2378 Engine/fgens.c:2694 Top/main.c:142
-#: util/cvanal.c:66 util/lpanal.c:398 util/pvanal.c:170
+#: Engine/fgens.c:404 Engine/fgens.c:553 Engine/fgens.c:634 Engine/fgens.c:879
+#: Engine/fgens.c:1350 Engine/fgens.c:2375 Engine/fgens.c:2690
+#: Engine/fgens.c:2810 Top/main.c:141 util/cvanal.c:66 util/lpanal.c:398
+#: util/pvanal.c:170
 msgid "insufficient arguments"
 msgstr ""
 
-#: Engine/fgens.c:412 Engine/fgens.c:1359
+#: Engine/fgens.c:408 Engine/fgens.c:1355
 msgid "unknown srctable number"
 msgstr ""
 
-#: Engine/fgens.c:425
+#: Engine/fgens.c:421
 msgid "table size too large"
 msgstr ""
 
-#: Engine/fgens.c:510 Engine/fgens.c:543
+#: Engine/fgens.c:506 Engine/fgens.c:539
 msgid "gen call has negative segment size:"
 msgstr ""
 
-#: Engine/fgens.c:512
+#: Engine/fgens.c:508
 msgid "illegal input vals for gen call, beginning:"
 msgstr ""
 
-#: Engine/fgens.c:578
+#: Engine/fgens.c:574
 msgid "negative segsiz"
 msgstr ""
 
-#: Engine/fgens.c:787
+#: Engine/fgens.c:783
 msgid "nh partials < 1"
 msgstr ""
 
-#: Engine/fgens.c:886
+#: Engine/fgens.c:882
 msgid "illegal xint value"
 msgstr ""
 
-#: Engine/fgens.c:889
+#: Engine/fgens.c:885
 msgid "illegal xamp value"
 msgstr ""
 
-#: Engine/fgens.c:961
+#: Engine/fgens.c:957
 msgid "uneven number of args"
 msgstr ""
 
-#: Engine/fgens.c:1081
+#: Engine/fgens.c:1077
 msgid "gen call has illegal x-ordinate values:"
 msgstr ""
 
-#: Engine/fgens.c:1099
+#: Engine/fgens.c:1095
 msgid "wrong number of args"
 msgstr ""
 
-#: Engine/fgens.c:1113
+#: Engine/fgens.c:1109
 msgid "a range given exceeds table length"
 msgstr ""
 
-#: Engine/fgens.c:1120
+#: Engine/fgens.c:1116
 msgid "an input function does not exist"
 msgstr "an input function doesn't exist"
 
-#: Engine/fgens.c:1253
+#: Engine/fgens.c:1249
 msgid "No such window!"
 msgstr ""
 
-#: Engine/fgens.c:1271
+#: Engine/fgens.c:1267
 msgid "Wrong number of input arguments"
 msgstr ""
 
-#: Engine/fgens.c:1272
+#: Engine/fgens.c:1268
 msgid "unknown distribution"
 msgstr ""
 
-#: Engine/fgens.c:1321
+#: Engine/fgens.c:1317
 msgid "error opening ASCII file"
 msgstr ""
 
-#: Engine/fgens.c:1327
+#: Engine/fgens.c:1323
 #, c-format
 msgid "%ld elements in %s\n"
 msgstr ""
 
-#: Engine/fgens.c:1338
+#: Engine/fgens.c:1334
 msgid "Numbers after table full in GEN23"
 msgstr ""
 
-#: Engine/fgens.c:1367
+#: Engine/fgens.c:1363
 msgid "table size must be the same of source table"
 msgstr ""
 
-#: Engine/fgens.c:1439 Engine/fgens.c:1499
+#: Engine/fgens.c:1435 Engine/fgens.c:1495
 msgid "x coordinates must all be in increasing order:"
 msgstr ""
 
-#: Engine/fgens.c:1442 Engine/fgens.c:1501
+#: Engine/fgens.c:1438 Engine/fgens.c:1497
 msgid "x coordinate greater than function size:"
 msgstr ""
 
-#: Engine/fgens.c:1446
+#: Engine/fgens.c:1442
 msgid "illegal input val (y <= 0) for gen call, beginning:"
 msgstr ""
 
-#: Engine/fgens.c:1519
+#: Engine/fgens.c:1515
 msgid "GEN28 requires zero table length"
 msgstr ""
 
-#: Engine/fgens.c:1581
+#: Engine/fgens.c:1577
 msgid "could not open space file"
 msgstr "couldn't open space file"
 
-#: Engine/fgens.c:1583
+#: Engine/fgens.c:1579
 msgid "Time values must be in increasing order"
 msgstr ""
 
-#: Engine/fgens.c:1604
+#: Engine/fgens.c:1600
 msgid "GEN30: source ftable not found"
 msgstr ""
 
-#: Engine/fgens.c:1687
+#: Engine/fgens.c:1683
 msgid "GEN31: source ftable not found"
 msgstr ""
 
-#: Engine/fgens.c:1795
+#: Engine/fgens.c:1791
 #, c-format
 msgid "GEN32: source ftable %d not found"
 msgstr ""
 
-#: Engine/fgens.c:1889
+#: Engine/fgens.c:1885
 msgid "GEN33: source ftable not found"
 msgstr ""
 
-#: Engine/fgens.c:2057
+#: Engine/fgens.c:2053
 msgid "unknown source table number"
 msgstr ""
 
-#: Engine/fgens.c:2089
+#: Engine/fgens.c:2085
 msgid "Gen41: negative probability not allowed"
 msgstr ""
 
-#: Engine/fgens.c:2155 Opcodes/fareygen.c:70
+#: Engine/fgens.c:2151 Opcodes/fareygen.c:70
 #, c-format
 msgid "ftable %d: "
 msgstr ""
 
-#: Engine/fgens.c:2199
+#: Engine/fgens.c:2195
 #, c-format
 msgid "ftable %d:"
 msgstr ""
 
-#: Engine/fgens.c:2214
+#: Engine/fgens.c:2210
 #, c-format
 msgid "replacing previous ftable %d"
 msgstr ""
 
-#: Engine/fgens.c:2250 Engine/fgens.c:2337 Engine/fgens.c:2361
-#: Opcodes/gab/gab.c:578 Opcodes/gab/gab.c:632 Opcodes/midiops2.c:218
+#: Engine/fgens.c:2246 Engine/fgens.c:2334 Engine/fgens.c:2358
+#: Opcodes/gab/gab.c:580 Opcodes/gab/gab.c:634 Opcodes/midiops2.c:218
 #: Opcodes/midiops2.c:370 Opcodes/midiops2.c:452 Opcodes/uggab.c:1317
 #: Opcodes/uggab.c:1344 Opcodes/uggab.c:1364 Opcodes/uggab.c:1407
 #, c-format
 msgid "Invalid ftable no. %f"
 msgstr ""
 
-#: Engine/fgens.c:2255
+#: Engine/fgens.c:2251
 #, c-format
 msgid "deferred-size ftable %f illegal here"
 msgstr ""
 
-#: Engine/fgens.c:2281
+#: Engine/fgens.c:2278 Engine/fgens.c:2848
 #, c-format
 msgid "Deferred load of '%s' failed"
 msgstr ""
 
-#: Engine/fgens.c:2343
+#: Engine/fgens.c:2340
 #, c-format
 msgid "Deferred-size ftable %f load not available at perf time."
 msgstr ""
 
-#: Engine/fgens.c:2402
+#: Engine/fgens.c:2399
 #, c-format
 msgid "non-deferred ftable %d needs size %d\n"
 msgstr ""
 
-#: Engine/fgens.c:2449 Opcodes/loscilx.c:62
+#: Engine/fgens.c:2446 Opcodes/loscilx.c:64
 #, c-format
 msgid "invalid sample format: %d"
 msgstr ""
 
-#: Engine/fgens.c:2457 Engine/fgens.c:2718
+#: Engine/fgens.c:2454 Engine/fgens.c:2714
 #, c-format
 msgid "channel %d illegal"
 msgstr ""
 
-#: Engine/fgens.c:2463
+#: Engine/fgens.c:2460
 msgid "deferred alloc\n"
 msgstr ""
 
-#: Engine/fgens.c:2471
+#: Engine/fgens.c:2468
 msgid "deferred size, but filesize unknown"
 msgstr ""
 
-#: Engine/fgens.c:2474
+#: Engine/fgens.c:2471
 #, c-format
 msgid "  defer length %d\n"
 msgstr ""
 
-#: Engine/fgens.c:2543
+#: Engine/fgens.c:2540
 msgid "GEN1: input file truncated by ftable size"
 msgstr ""
 
-#: Engine/fgens.c:2547
+#: Engine/fgens.c:2544
 #, c-format
 msgid "\tlooping endpoint %d exceeds ftsize %d\n"
 msgstr ""
 
-#: Engine/fgens.c:2569
+#: Engine/fgens.c:2566
 msgid "GEN1 read error"
 msgstr ""
 
-#: Engine/fgens.c:2574
+#: Engine/fgens.c:2571
 msgid "GEN1: aiff file truncated by ftable size"
 msgstr ""
 
-#: Engine/fgens.c:2575
+#: Engine/fgens.c:2572
 #, c-format
 msgid "\taudio samps %d exceeds ftsize %d"
 msgstr ""
 
-#: Engine/fgens.c:2619
+#: Engine/fgens.c:2616
 msgid "wrong number of ftable arguments"
 msgstr ""
 
-#: Engine/fgens.c:2629 OOps/pstream.c:326
+#: Engine/fgens.c:2626 OOps/pstream.c:326
 msgid "Failed to load PVOC-EX file"
 msgstr ""
 
-#: Engine/fgens.c:2640 InOut/midirecv.c:416 OOps/midiops.c:377
+#: Engine/fgens.c:2637 InOut/midirecv.c:416 OOps/midiops.c:377
 #: OOps/midiops.c:419 OOps/midiops.c:431
 msgid "illegal channel number"
 msgstr ""
 
-#: Engine/fgens.c:2658
+#: Engine/fgens.c:2655
 msgid "ftable size too small"
 msgstr ""
 
-#: Engine/fgens.c:2734 Opcodes/mp3in.c:79 Opcodes/mp3in.c:218
+#: Engine/fgens.c:2730 Opcodes/mp3in.c:80 Opcodes/mp3in.c:219
 msgid "Not enough memory\n"
 msgstr ""
 
-#: Engine/fgens.c:2831
+#: Engine/fgens.c:2873
 msgid "gen51: invalid number of p-fields (too few grades)"
 msgstr ""
 
-#: Engine/fgens.c:2871
+#: Engine/fgens.c:2913
 msgid "number of channels inconsistent with number of args"
 msgstr ""
 
-#: Engine/fgens.c:3030
+#: Engine/fgens.c:3072
 msgid "GEN53: invalid number of gen arguments"
 msgstr ""
 
-#: Engine/fgens.c:3040
+#: Engine/fgens.c:3082
 msgid "GEN53: invalid table length"
 msgstr ""
 
-#: Engine/fgens.c:3044
+#: Engine/fgens.c:3086
 msgid "GEN53: invalid source table number"
 msgstr ""
 
-#: Engine/fgens.c:3047
+#: Engine/fgens.c:3089
 msgid "GEN53: mode must be in the range 0 to 15"
 msgstr ""
 
-#: Engine/fgens.c:3051
+#: Engine/fgens.c:3093
 msgid "GEN53: invalid source table length"
 msgstr ""
 
-#: Engine/fgens.c:3056
+#: Engine/fgens.c:3098
 msgid "GEN53: invalid window table"
 msgstr ""
 
@@ -887,31 +848,31 @@ msgstr ""
 msgid "Instrument %d muted\n"
 msgstr ""
 
-#: Engine/insert.c:103 Engine/insert.c:1249
+#: Engine/insert.c:103 Engine/insert.c:1301
 #, c-format
 msgid "instr %s expects midi event data, cannot run from score\n"
 msgstr "instr %s expects midi event data, can't run from score\n"
 
-#: Engine/insert.c:106 Engine/insert.c:1252
+#: Engine/insert.c:106 Engine/insert.c:1304
 #, c-format
 msgid "instr %d expects midi event data, cannot run from score\n"
 msgstr "instr %d expects midi event data, can't run from score\n"
 
-#: Engine/insert.c:115 Engine/insert.c:279 Engine/insert.c:1234
+#: Engine/insert.c:115 Engine/insert.c:279 Engine/insert.c:1286
 #, c-format
 msgid "cannot allocate last note because it exceeds 100%% of cpu time"
 msgstr "can't allocate last note because it exceeds 100%% of cpu time"
 
-#: Engine/insert.c:121 Engine/insert.c:285 Engine/insert.c:1239
+#: Engine/insert.c:121 Engine/insert.c:285 Engine/insert.c:1291
 msgid "cannot allocate last note because it exceeds instr maxalloc"
 msgstr "can't allocate last note because it exceeds instr maxalloc"
 
-#: Engine/insert.c:137 Engine/insert.c:305 Engine/insert.c:1270
+#: Engine/insert.c:137 Engine/insert.c:305 Engine/insert.c:1322
 #, c-format
 msgid "new alloc for instr %s:\n"
 msgstr ""
 
-#: Engine/insert.c:139 Engine/insert.c:307 Engine/insert.c:1272
+#: Engine/insert.c:139 Engine/insert.c:307 Engine/insert.c:1324
 #, c-format
 msgid "new alloc for instr %d:\n"
 msgstr ""
@@ -926,12 +887,12 @@ msgstr ""
 msgid "instr %d uses %d p-fields but is given %d"
 msgstr ""
 
-#: Engine/insert.c:251 Engine/insert.c:463
+#: Engine/insert.c:251 Engine/insert.c:482
 #, c-format
 msgid "instr %s now active:\n"
 msgstr ""
 
-#: Engine/insert.c:253 Engine/insert.c:465
+#: Engine/insert.c:253 Engine/insert.c:484
 #, c-format
 msgid "instr %d now active:\n"
 msgstr ""
@@ -951,153 +912,153 @@ msgstr ""
 msgid "MIDI note overlaps with key %d on same channel"
 msgstr ""
 
-#: Engine/insert.c:566
+#: Engine/insert.c:585
 #, c-format
 msgid "removed instance of instr %s\n"
 msgstr ""
 
-#: Engine/insert.c:568
+#: Engine/insert.c:587
 #, c-format
 msgid "removed instance of instr %d\n"
 msgstr ""
 
-#: Engine/insert.c:691
+#: Engine/insert.c:710
 msgid "inactive allocs returned to freespace\n"
 msgstr ""
 
-#: Engine/insert.c:716
+#: Engine/insert.c:735
 #, c-format
 msgid "could not find playing instr %f\n"
 msgstr "couldn't find playing instr %f\n"
 
-#: Engine/insert.c:729
+#: Engine/insert.c:748
 msgid ""
 "\n"
 "INIT ERROR: "
 msgstr ""
 
-#: Engine/insert.c:742
+#: Engine/insert.c:761
 #, c-format
 msgid "INIT ERROR in instr %d (opcode %s): "
 msgstr ""
 
-#: Engine/insert.c:745
+#: Engine/insert.c:764
 #, c-format
 msgid "INIT ERROR in instr %d (subinstr %d): "
 msgstr ""
 
-#: Engine/insert.c:749
+#: Engine/insert.c:768
 #, c-format
 msgid "INIT ERROR in instr %d: "
 msgstr ""
 
-#: Engine/insert.c:767
+#: Engine/insert.c:786
 msgid ""
 "\n"
 "PERF ERROR: "
 msgstr ""
 
-#: Engine/insert.c:780
+#: Engine/insert.c:799
 #, c-format
 msgid "PERF ERROR in instr %d (opcode %s): "
 msgstr ""
 
-#: Engine/insert.c:783
+#: Engine/insert.c:802
 #, c-format
 msgid "PERF ERROR in instr %d (subinstr %d): "
 msgstr ""
 
-#: Engine/insert.c:787
+#: Engine/insert.c:806
 #, c-format
 msgid "PERF ERROR in instr %d: "
 msgstr ""
 
-#: Engine/insert.c:792
+#: Engine/insert.c:811
 msgid "   note aborted\n"
 msgstr ""
 
-#: Engine/insert.c:820
+#: Engine/insert.c:839
 msgid "subinstr: number of output args greater than nchnls"
 msgstr ""
 
-#: Engine/insert.c:861
+#: Engine/insert.c:880
 msgid "subinstr: too many p-fields"
 msgstr ""
 
-#: Engine/insert.c:920
+#: Engine/insert.c:939
 #, c-format
 msgid "%s: invalid local ksmps value: %d"
 msgstr ""
 
-#: Engine/insert.c:1040 OOps/bus.c:835 Opcodes/stackops.c:293
+#: Engine/insert.c:1062 OOps/bus.c:835 Opcodes/stackops.c:286
 #, c-format
 msgid "%s: not initialised"
 msgstr "%s: not initialized"
 
-#: Engine/insert.c:1169
+#: Engine/insert.c:1221
 #, c-format
 msgid "setksmps: invalid ksmps value: %d"
 msgstr ""
 
-#: Engine/insert.c:1225
+#: Engine/insert.c:1277
 #, c-format
 msgid "schedule event ignored. instr %d undefined\n"
 msgstr ""
 
-#: Engine/insert.c:1303
+#: Engine/insert.c:1355
 #, c-format
 msgid "instr %s pmax = %d, note pcnt = %d"
 msgstr ""
 
-#: Engine/insert.c:1306
+#: Engine/insert.c:1358
 #, c-format
 msgid "instr %d pmax = %d, note pcnt = %d"
 msgstr ""
 
-#: Engine/insert.c:1314
+#: Engine/insert.c:1366
 #, c-format
 msgid "psave beg at %p\n"
 msgstr ""
 
-#: Engine/insert.c:1322
+#: Engine/insert.c:1374
 #, c-format
 msgid "   ending at %p\n"
 msgstr ""
 
-#: Engine/insert.c:1466
+#: Engine/insert.c:1518
 msgid "subinstr: not initialised"
 msgstr "subinstr: not initialized"
 
-#: Engine/insert.c:1723
+#: Engine/insert.c:1855
 #, c-format
 msgid ""
 "instr %d allocated at %p\n"
 "\tlclbas %p, opds %p\n"
 msgstr ""
 
-#: Engine/insert.c:1740
+#: Engine/insert.c:1872
 #, c-format
 msgid "op %d (%s) allocated at %p\n"
 msgstr ""
 
-#: Engine/insert.c:1766
+#: Engine/insert.c:1898
 msgid "null iopadr"
 msgstr ""
 
-#: Engine/insert.c:1777
+#: Engine/insert.c:1909
 msgid "null opadr"
 msgstr ""
 
-#: Engine/insert.c:1834
+#: Engine/insert.c:1966
 msgid "inconsistent opds total"
 msgstr ""
 
-#: Engine/insert.c:1879
+#: Engine/insert.c:2011
 #, c-format
 msgid "Instrument %s is still active"
 msgstr ""
 
-#: Engine/insert.c:1882
+#: Engine/insert.c:2014
 #, c-format
 msgid "Instrument %d is still active"
 msgstr ""
@@ -1131,7 +1092,7 @@ msgstr ""
 msgid "multiple string p-fields"
 msgstr ""
 
-#: Engine/linevent.c:273 Engine/rdorch.c:1157
+#: Engine/linevent.c:273 Engine/rdorch.c:1184
 msgid "unmatched quotes"
 msgstr ""
 
@@ -1190,297 +1151,292 @@ msgstr ""
 msgid "memory allocate failure for %lu"
 msgstr ""
 
-#: Engine/memfiles.c:112
+#: Engine/memfiles.c:113
 #, c-format
 msgid "cannot load %s\n"
 msgstr "can't load %s\n"
 
-#: Engine/memfiles.c:118
+#: Engine/memfiles.c:119
 #, c-format
 msgid "cannot load %s, or SADIR undefined\n"
 msgstr "can't load %s, or SADIR undefined\n"
 
-#: Engine/memfiles.c:130
+#: Engine/memfiles.c:131
 #, c-format
 msgid "error processing file %s\n"
 msgstr ""
 
-#: Engine/memfiles.c:136 Engine/memfiles.c:319
+#: Engine/memfiles.c:137 Engine/memfiles.c:320
 #, c-format
 msgid "file %s (%ld bytes) loaded into memory\n"
 msgstr ""
 
-#: Engine/memfiles.c:199
+#: Engine/memfiles.c:200
 msgid ""
 "PVOCEX_LoadFile(): error:\n"
 "    "
 msgstr ""
 
-#: Engine/memfiles.c:216
+#: Engine/memfiles.c:217
 msgid "Empty or NULL file name"
 msgstr ""
 
-#: Engine/memfiles.c:234
+#: Engine/memfiles.c:235
 #, c-format
 msgid "unable to open pvocex file %s: %s"
 msgstr ""
 
-#: Engine/memfiles.c:240
+#: Engine/memfiles.c:241
 #, c-format
 msgid "pvoc-ex file %s is not 32bit floats"
 msgstr ""
 
-#: Engine/memfiles.c:246
+#: Engine/memfiles.c:247
 #, c-format
 msgid "pvoc-ex file %s not in AMP_FREQ format"
 msgstr ""
 
-#: Engine/memfiles.c:252
+#: Engine/memfiles.c:253
 #, c-format
 msgid "pvoc-ex file %s is empty!"
 msgstr ""
 
-#: Engine/memfiles.c:282
+#: Engine/memfiles.c:283
 #, c-format
 msgid "error reading pvoc-ex file %s"
 msgstr ""
 
-#: Engine/memfiles.c:286
+#: Engine/memfiles.c:287
 #, c-format
 msgid "error reading pvoc-ex file %s after %d frames"
 msgstr ""
 
-#: Engine/memfiles.c:291 Opcodes/pvinterp.c:71 Opcodes/pvinterp.c:174
-#: Opcodes/pvinterp.c:346 Opcodes/ugens9.c:97 Opcodes/vpvoc.c:201
+#: Engine/memfiles.c:292 Opcodes/pvinterp.c:71 Opcodes/pvinterp.c:173
+#: Opcodes/pvinterp.c:344 Opcodes/ugens9.c:97 Opcodes/vpvoc.c:202
 #, c-format
 msgid "%s's srate = %8.0f, orch's srate = %8.0f"
 msgstr ""
 
-#: Engine/memfiles.c:389
+#: Engine/memfiles.c:390
 #, c-format
 msgid "csoundLoadSoundFile(): failed to open '%s'"
 msgstr ""
 
-#: Engine/memfiles.c:444
+#: Engine/memfiles.c:445
 #, c-format
 msgid "csoundLoadSoundFile(): error reading '%s'"
 msgstr ""
 
-#: Engine/memfiles.c:450
+#: Engine/memfiles.c:451
 #, c-format
 msgid ""
 "File '%s' (sr = %d Hz, %d channel(s), %lu sample frames) loaded into memory\n"
 msgstr ""
 
-#: Engine/musmon.c:79
+#: Engine/musmon.c:81
 #, c-format
 msgid "Elapsed time at %s: real: %.3fs, CPU: %.3fs\n"
 msgstr ""
 
-#: Engine/musmon.c:106
+#: Engine/musmon.c:108
 msgid "illegal istartempo value"
 msgstr ""
 
-#: Engine/musmon.c:109
+#: Engine/musmon.c:111
 msgid "Beat mode not in force"
 msgstr ""
 
-#: Engine/musmon.c:182 Top/main.c:122
+#: Engine/musmon.c:184 Top/main.c:121
 #, c-format
 msgid "Csound version %s beta (double samples) %s\n"
 msgstr ""
 
-#: Engine/musmon.c:185 Top/main.c:125
+#: Engine/musmon.c:187 Top/main.c:124
 #, c-format
 msgid "Csound version %s (double samples) %s\n"
 msgstr ""
 
-#: Engine/musmon.c:190 Top/main.c:114
+#: Engine/musmon.c:192 Top/main.c:113
 #, c-format
 msgid "Csound version %s beta (float samples) %s\n"
 msgstr ""
 
-#: Engine/musmon.c:193 Top/main.c:117
+#: Engine/musmon.c:195 Top/main.c:116
 #, c-format
 msgid "Csound version %s (float samples) %s\n"
 msgstr ""
 
-#: Engine/musmon.c:218
+#: Engine/musmon.c:220
 msgid "orch now loaded\n"
 msgstr ""
 
-#: Engine/musmon.c:243
+#: Engine/musmon.c:245
 msgid "k-period aligned audio buffering\n"
 msgstr ""
 
-#: Engine/musmon.c:259
+#: Engine/musmon.c:261
 #, c-format
 msgid "audio buffered in %d sample-frame blocks\n"
 msgstr ""
 
-#: Engine/musmon.c:276 Top/main.c:395
-#, c-format
-msgid "cannot reopen %s"
-msgstr "can't reopen %s"
-
-#: Engine/musmon.c:287
+#: Engine/musmon.c:283
 msgid "using Cscore processing\n"
 msgstr ""
 
-#: Engine/musmon.c:290
+#: Engine/musmon.c:286
 msgid "cannot create cscore.out"
 msgstr "can't create cscore.out"
 
-#: Engine/musmon.c:303
+#: Engine/musmon.c:299
 msgid "cannot reopen cscore.out"
 msgstr "can't reopen cscore.out"
 
-#: Engine/musmon.c:307 Engine/musmon.c:315
+#: Engine/musmon.c:303
 msgid "cannot reopen cscore.srt"
 msgstr "can't reopen cscore.srt"
 
-#: Engine/musmon.c:309
+#: Engine/musmon.c:305
 msgid "sorting cscore.out ..\n"
 msgstr ""
 
-#: Engine/musmon.c:313 Top/main.c:409
+#: Engine/musmon.c:311 Top/main.c:401
 msgid "\t... done\n"
 msgstr ""
 
-#: Engine/musmon.c:317
+#: Engine/musmon.c:312
 msgid "playing from cscore.srt\n"
 msgstr ""
 
-#: Engine/musmon.c:321 Engine/musmon.c:453 Engine/musmon.c:1021
-#: Engine/musmon.c:1225
+#: Engine/musmon.c:316 Engine/musmon.c:446 Engine/musmon.c:1015
+#: Engine/musmon.c:1216
 #, c-format
 msgid "SECTION %d:\n"
 msgstr ""
 
-#: Engine/musmon.c:397
+#: Engine/musmon.c:390
 msgid "end of score.\t\t   overall amps:"
 msgstr ""
 
-#: Engine/musmon.c:408
+#: Engine/musmon.c:401
 msgid ""
 "\n"
 "\t   overall samples out of range:"
 msgstr ""
 
-#: Engine/musmon.c:412
+#: Engine/musmon.c:405
 #, c-format
 msgid ""
 "\n"
 "%d errors in performance\n"
 msgstr ""
 
-#: Engine/musmon.c:414
+#: Engine/musmon.c:407
 msgid "end of performance"
 msgstr ""
 
-#: Engine/musmon.c:428
+#: Engine/musmon.c:421
 msgid "no sound written to disk\n"
 msgstr ""
 
-#: Engine/musmon.c:443
+#: Engine/musmon.c:436
 #, c-format
 msgid "%c\tbeep!\n"
 msgstr ""
 
-#: Engine/musmon.c:509 Engine/musmon.c:555
+#: Engine/musmon.c:502 Engine/musmon.c:548
 msgid "\t number of samples out of range:"
 msgstr ""
 
-#: Engine/musmon.c:548
+#: Engine/musmon.c:541
 #, c-format
 msgid "end of section %d\t sect peak amps:"
 msgstr ""
 
-#: Engine/musmon.c:550
+#: Engine/musmon.c:543
 msgid "end of lplay event list\t      peak amps:"
 msgstr ""
 
-#: Engine/musmon.c:614 Engine/musmon.c:639
+#: Engine/musmon.c:607 Engine/musmon.c:632
 #, c-format
 msgid " - note deleted. instr %s undefined"
 msgstr ""
 
-#: Engine/musmon.c:618
+#: Engine/musmon.c:611
 #, c-format
 msgid "Setting instrument %s %s\n"
 msgstr ""
 
-#: Engine/musmon.c:619 Engine/musmon.c:632
+#: Engine/musmon.c:612 Engine/musmon.c:625
 #: Opcodes/fluidOpcodes/fluidOpcodes.c:207
 #: Opcodes/fluidOpcodes/fluidOpcodes.c:208
 msgid "off"
 msgstr ""
 
-#: Engine/musmon.c:619 Engine/musmon.c:632
+#: Engine/musmon.c:612 Engine/musmon.c:625
 #: Opcodes/fluidOpcodes/fluidOpcodes.c:207
 #: Opcodes/fluidOpcodes/fluidOpcodes.c:208
 msgid "on"
 msgstr ""
 
-#: Engine/musmon.c:627 Engine/musmon.c:666
+#: Engine/musmon.c:620 Engine/musmon.c:659
 #, c-format
 msgid " - note deleted. instr %d(%d) undefined"
 msgstr ""
 
-#: Engine/musmon.c:631
+#: Engine/musmon.c:624
 #, c-format
 msgid "Setting instrument %d %s\n"
 msgstr ""
 
-#: Engine/musmon.c:657
+#: Engine/musmon.c:650
 #, c-format
 msgid " - note deleted.  i%d (%s) had %d init errors"
 msgstr ""
 
-#: Engine/musmon.c:687
+#: Engine/musmon.c:680
 #, c-format
 msgid " - note deleted.  i%d had %d init errors"
 msgstr ""
 
-#: Engine/musmon.c:708
+#: Engine/musmon.c:701
 #, c-format
 msgid "time advanced %5.3f beats by score request\n"
 msgstr ""
 
-#: Engine/musmon.c:725
+#: Engine/musmon.c:719
 #, c-format
 msgid "\t\t   T%7.3f - note deleted. "
 msgstr ""
 
-#: Engine/musmon.c:729
+#: Engine/musmon.c:723
 #, c-format
 msgid "instr %s had %d init errors\n"
 msgstr ""
 
-#: Engine/musmon.c:731
+#: Engine/musmon.c:725
 #, c-format
 msgid "instr %d had %d init errors\n"
 msgstr ""
 
-#: Engine/musmon.c:822
+#: Engine/musmon.c:816
 msgid "terminating.\n"
 msgstr ""
 
-#: Engine/musmon.c:908
+#: Engine/musmon.c:902
 #, c-format
 msgid "error in score.  illegal opcode %c (ASCII %d)\n"
 msgstr ""
 
-#: Engine/musmon.c:1135
+#: Engine/musmon.c:1129
 msgid "insert_score_event(): invalid instrument number or name\n"
 msgstr ""
 
-#: Engine/musmon.c:1155
+#: Engine/musmon.c:1149
 #, c-format
 msgid "insert_score_event(): unknown opcode: %c\n"
 msgstr ""
 
-#: Engine/musmon.c:1178
+#: Engine/musmon.c:1172
 msgid "insert_score_event(): insufficient p-fields\n"
 msgstr ""
 
@@ -1503,350 +1459,402 @@ msgstr "Can't Find Instrument %d"
 msgid "cannot find the specified instrument or opcode"
 msgstr "can't find the specified instrument or opcode"
 
-#: Engine/new_orc_parser.c:74 Engine/rdorch.c:488
+#: Engine/new_orc_parser.c:91
+msgid "Unmatched #ifdef\n"
+msgstr ""
+
+#: Engine/otran.c:149 Engine/symbtab.c:413
 #, c-format
-msgid "cannot open orch file %s"
-msgstr "can't open orch file %s"
+msgid "invalid input type for opcode %s"
+msgstr ""
 
-#: Engine/otran.c:312 Engine/otran.c:319
+#: Engine/otran.c:154 Engine/symbtab.c:418
+#, c-format
+msgid "too many input args for opcode %s"
+msgstr ""
+
+#: Engine/otran.c:169 Engine/symbtab.c:433
+#, c-format
+msgid "too many output args for opcode %s"
+msgstr ""
+
+#: Engine/otran.c:194 Engine/symbtab.c:458
+#, c-format
+msgid "invalid output type for opcode %s"
+msgstr ""
+
+#: Engine/otran.c:325 Engine/otran.c:332
 msgid "missing instrument number or name"
 msgstr ""
 
-#: Engine/otran.c:324
+#: Engine/otran.c:337
 msgid "illegal instr number"
 msgstr ""
 
-#: Engine/otran.c:374
+#: Engine/otran.c:388
 msgid "No opcode name"
 msgstr ""
 
-#: Engine/otran.c:379 Engine/symbtab.c:501
+#: Engine/otran.c:393 Engine/symbtab.c:538
 msgid "invalid name for opcode"
 msgstr ""
 
-#: Engine/otran.c:383
+#: Engine/otran.c:397
 #, c-format
 msgid ""
 "opcode declaration error (usage: opcode name, outtypes, intypes) -- opcode %s"
 msgstr ""
 
-#: Engine/otran.c:394 Engine/symbtab.c:511
+#: Engine/otran.c:408 Engine/symbtab.c:548
 #, c-format
 msgid "cannot redefine %s"
 msgstr "can't redefine %s"
 
-#: Engine/otran.c:398 Engine/symbtab.c:516
+#: Engine/otran.c:412 Engine/symbtab.c:553
 #, c-format
 msgid "WARNING: redefined opcode: %s\n"
 msgstr ""
 
-#: Engine/otran.c:489
+#: Engine/otran.c:503
 msgid "string constant used as output"
 msgstr ""
 
-#: Engine/otran.c:520
+#: Engine/otran.c:534
 msgid "Missing endin"
 msgstr ""
 
-#: Engine/otran.c:584
+#: Engine/otran.c:599
 msgid "perf-pass statements illegal in header blk"
 msgstr ""
 
-#: Engine/otran.c:588
+#: Engine/otran.c:603
 #, c-format
 msgid "%d syntax errors in orchestra.  compilation invalid"
 msgstr ""
 
-#: Engine/otran.c:1238
+#: Engine/otran.c:1257
 msgid "bad value for 0dbfs: must be positive."
 msgstr ""
 
-#: Engine/otran.c:1248
+#: Engine/otran.c:1267
 #, c-format
 msgid "sample rate overrides: esr = %7.4f, ekr = %7.4f, ksmps = %d\n"
 msgstr ""
 
-#: Engine/otran.c:1320
+#: Engine/otran.c:1339
 msgid "internal error: string constant outarg"
 msgstr ""
 
-#: Engine/otran.c:1346
+#: Engine/otran.c:1365
 #, c-format
 msgid "i%d pset args != pmax"
 msgstr ""
 
-#: Engine/otran.c:1409
+#: Engine/otran.c:1428
 #, c-format
 msgid ""
 "sr = %.7g, kr = %.7g, ksmps = %.7g\n"
 "error:"
 msgstr ""
 
-#: Engine/otran.c:1442
+#: Engine/otran.c:1461
 msgid "header init errors"
 msgstr ""
 
-#: Engine/rdorch.c:166
+#: Engine/rdorch.c:169
 msgid "ungetorchar(): buffer overflow"
 msgstr ""
 
-#: Engine/rdorch.c:330
+#: Engine/rdorch.c:348
 msgid "Unexpected end of orchestra file"
 msgstr ""
 
-#: Engine/rdorch.c:484
+#: Engine/rdorch.c:431 Engine/sread.c:758
+#, c-format
+msgid "Macro definition for %*s\n"
+msgstr ""
+
+#: Engine/rdorch.c:434
+msgid "Invalid macro name for --omacro"
+msgstr ""
+
+#: Engine/rdorch.c:502
 msgid "orch compiler:\n"
 msgstr ""
 
-#: Engine/rdorch.c:490
+#: Engine/rdorch.c:520
 #, c-format
-msgid "cannot find end of file %s"
-msgstr "can't find end of file %s"
+msgid "cannot open orch file %s"
+msgstr "can't open orch file %s"
 
-#: Engine/rdorch.c:492
+#: Engine/rdorch.c:684 Engine/sread.c:1584
 #, c-format
-msgid "ftell error on %s"
+msgid "Macro definition for %s\n"
 msgstr ""
 
-#: Engine/rdorch.c:657 Engine/sread.c:1572
-#, c-format
-msgid "Macro definition for %s\n"
+#: Engine/rdorch.c:716 Engine/sread.c:1607
+msgid "macro error\n"
 msgstr ""
 
-#: Engine/rdorch.c:748
+#: Engine/rdorch.c:775
 #, c-format
 msgid "Cannot open #include'd file %s\n"
 msgstr "Can't open #include'd file %s\n"
 
-#: Engine/rdorch.c:797
+#: Engine/rdorch.c:824
 msgid "unmatched #ifdef"
 msgstr ""
 
-#: Engine/rdorch.c:808
+#: Engine/rdorch.c:835
 msgid "Unmatched #else"
 msgstr ""
 
-#: Engine/rdorch.c:822
+#: Engine/rdorch.c:849
 msgid "Unmatched #endif"
 msgstr ""
 
-#: Engine/rdorch.c:875
+#: Engine/rdorch.c:872 Engine/sread.c:1694
+#, c-format
+msgid "macro %s undefined\n"
+msgstr ""
+
+#: Engine/rdorch.c:886 Engine/sread.c:286
+msgid "Undefining undefined macro"
+msgstr ""
+
+#: Engine/rdorch.c:902
 msgid "Unexpected # character"
 msgstr ""
 
-#: Engine/rdorch.c:877
+#: Engine/rdorch.c:904
 #, c-format
 msgid "Unknown # option: '%s'"
 msgstr ""
 
-#: Engine/rdorch.c:903 Engine/sread.c:394
+#: Engine/rdorch.c:928 Engine/sread.c:380
+#, c-format
+msgid "Undefined macro: '%s'"
+msgstr ""
+
+#: Engine/rdorch.c:930 Engine/sread.c:378
 msgid "Macro expansion symbol ($) without macro name"
 msgstr ""
 
-#: Engine/rdorch.c:908 Engine/sread.c:400
+#: Engine/rdorch.c:935 Engine/sread.c:384
 #, c-format
 msgid "$%s matches macro name $%s"
 msgstr ""
 
-#: Engine/rdorch.c:925 Engine/sread.c:417
+#: Engine/rdorch.c:952 Engine/sread.c:401
 msgid "Syntax error in macro call"
 msgstr ""
 
-#: Engine/rdorch.c:975
+#: Engine/rdorch.c:967
+#, c-format
+msgid ""
+"Missing argument terminator\n"
+"%.98s"
+msgstr ""
+
+#: Engine/rdorch.c:1002
 msgid "Unmatched #ifdef"
 msgstr ""
 
-#: Engine/rdorch.c:977
+#: Engine/rdorch.c:1004
 msgid "file too large for ortext space"
 msgstr ""
 
-#: Engine/rdorch.c:984
+#: Engine/rdorch.c:1011
 #, c-format
 msgid "%d (%d) lines read\n"
 msgstr ""
 
-#: Engine/rdorch.c:1052
+#: Engine/rdorch.c:1079
 #, c-format
 msgid "LINE %d:"
 msgstr ""
 
-#: Engine/rdorch.c:1071
+#: Engine/rdorch.c:1098
 msgid "invalid 'elseif' statement.  must have a corresponding 'if'"
 msgstr ""
 
-#: Engine/rdorch.c:1078
+#: Engine/rdorch.c:1105
 msgid "'elseif' statement cannot occur after an 'else'"
 msgstr "'elseif' statement can't occur after an 'else'"
 
-#: Engine/rdorch.c:1134
+#: Engine/rdorch.c:1161
 msgid "Unmatched comment"
 msgstr ""
 
-#: Engine/rdorch.c:1198
+#: Engine/rdorch.c:1225
 msgid "misplaced comma"
 msgstr ""
 
-#: Engine/rdorch.c:1200 Engine/rdorch.c:1342 Engine/rdorch.c:1440
+#: Engine/rdorch.c:1227 Engine/rdorch.c:1369 Engine/rdorch.c:1467
 msgid "unbalanced parens"
 msgstr ""
 
-#: Engine/rdorch.c:1364
+#: Engine/rdorch.c:1391
 #, c-format
 msgid "illegal character %c"
 msgstr ""
 
-#: Engine/rdorch.c:1377
+#: Engine/rdorch.c:1404
 msgid "invalid 'else' statement.  must have a corresponding 'if'"
 msgstr ""
 
-#: Engine/rdorch.c:1384
+#: Engine/rdorch.c:1411
 msgid "duplicate 'else' statement"
 msgstr ""
 
-#: Engine/rdorch.c:1413
+#: Engine/rdorch.c:1440
 msgid "invalid 'endif' statement.  must have a corresponding 'if'"
 msgstr ""
 
-#: Engine/rdorch.c:1442
+#: Engine/rdorch.c:1469
 msgid "no legal opcode"
 msgstr ""
 
-#: Engine/rdorch.c:1573
+#: Engine/rdorch.c:1600
 msgid "illegal opcod from expr anal"
 msgstr ""
 
-#: Engine/rdorch.c:1606 Engine/rdorch.c:1628
+#: Engine/rdorch.c:1633 Engine/rdorch.c:1655
 #, c-format
 msgid "failed to find %s, output arg '%s' illegal type"
 msgstr ""
 
-#: Engine/rdorch.c:1670
+#: Engine/rdorch.c:1697
 #, c-format
 msgid "failed to find %s, input arg illegal type"
 msgstr ""
 
-#: Engine/rdorch.c:1684
+#: Engine/rdorch.c:1711
 msgid "setksmps is allowed only in user defined opcodes"
 msgstr ""
 
-#: Engine/rdorch.c:1687
+#: Engine/rdorch.c:1714
 msgid "multiple uses of setksmps in the same opcode definition"
 msgstr ""
 
-#: Engine/rdorch.c:1710
+#: Engine/rdorch.c:1739
 #, c-format
 msgid "%s inconsistent with global nchnls (%d); replaced with %s\n"
 msgstr ""
 
-#: Engine/rdorch.c:1740
+#: Engine/rdorch.c:1770
 msgid "opcode blks cannot be nested (missing 'endop'?)"
 msgstr "opcode blks can't be nested (missing 'endop'?)"
 
-#: Engine/rdorch.c:1742
+#: Engine/rdorch.c:1772
 msgid "opcode not allowed in instr block"
 msgstr ""
 
-#: Engine/rdorch.c:1751
+#: Engine/rdorch.c:1781
 msgid "unmatched endop"
 msgstr ""
 
-#: Engine/rdorch.c:1753
+#: Engine/rdorch.c:1783
 msgid "endop not allowed in instr block"
 msgstr ""
 
-#: Engine/rdorch.c:1758
+#: Engine/rdorch.c:1788
 msgid "instr not allowed in opcode block"
 msgstr ""
 
-#: Engine/rdorch.c:1761
+#: Engine/rdorch.c:1791
 msgid "instr blocks cannot be nested (missing 'endin'?)"
 msgstr "instr blocks can't be nested (missing 'endin'?)"
 
-#: Engine/rdorch.c:1769
+#: Engine/rdorch.c:1799
 msgid "endin not allowed in opcode blk"
 msgstr ""
 
-#: Engine/rdorch.c:1771
+#: Engine/rdorch.c:1801
 msgid "unmatched endin"
 msgstr ""
 
-#: Engine/rdorch.c:1781
+#: Engine/rdorch.c:1811
 msgid "misplaced opcode"
 msgstr ""
 
-#: Engine/rdorch.c:1787
+#: Engine/rdorch.c:1817
 msgid "xout is allowed only in user defined opcodes"
 msgstr ""
 
-#: Engine/rdorch.c:1790
+#: Engine/rdorch.c:1820
 msgid "multiple uses of xout in the same opcode definition"
 msgstr ""
 
-#: Engine/rdorch.c:1837
+#: Engine/rdorch.c:1867
 msgid "too many input args"
 msgstr ""
 
-#: Engine/rdorch.c:1909
+#: Engine/rdorch.c:1893
+msgid "insufficient required arguments"
+msgstr ""
+
+#: Engine/rdorch.c:1940
 #, c-format
-msgid "input arg '%s' used before defined"
+msgid "input arg '%s' used before defined \n"
 msgstr ""
 
-#: Engine/rdorch.c:1956
+#: Engine/rdorch.c:1987
 msgid "xin is allowed only in user defined opcodes"
 msgstr ""
 
-#: Engine/rdorch.c:1959
+#: Engine/rdorch.c:1990
 msgid "multiple uses of xin in the same opcode definition"
 msgstr ""
 
-#: Engine/rdorch.c:2004
+#: Engine/rdorch.c:2035
 msgid "illegal no of output args"
 msgstr ""
 
-#: Engine/rdorch.c:2023
+#: Engine/rdorch.c:2054
 #, c-format
 msgid "output name previously used, type '%c' must be uniquely defined"
 msgstr ""
 
-#: Engine/rdorch.c:2028
+#: Engine/rdorch.c:2059
 #, c-format
 msgid "output arg '%s' illegal type"
 msgstr ""
 
-#: Engine/rdorch.c:2069
+#: Engine/rdorch.c:2100
 #, c-format
 msgid "input arg '%s' of type %s not allowed when expecting %c"
 msgstr ""
 
-#: Engine/rdorch.c:2155
+#: Engine/rdorch.c:2187
 msgid "duplicate label"
 msgstr ""
 
-#: Engine/rdorch.c:2177
+#: Engine/rdorch.c:2209
 #, c-format
 msgid "error line %d.  unknown label:\n"
 msgstr ""
 
-#: Engine/rdorch.c:2192 Engine/rdorch.c:2239
+#: Engine/rdorch.c:2222 Engine/rdorch.c:2271
 msgid "error:  "
 msgstr ""
 
-#: Engine/rdorch.c:2208
+#: Engine/rdorch.c:2239
 #, c-format
 msgid ", line %d:\n"
 msgstr ""
 
-#: Engine/rdorch.c:2246
+#: Engine/rdorch.c:2278
 #, c-format
 msgid "called from line %d of macro %s"
 msgstr ""
 
-#: Engine/rdorch.c:2250
+#: Engine/rdorch.c:2282
 #, c-format
 msgid "in line %d of file input %s"
 msgstr ""
 
-#: Engine/rdscor.c:79
+#: Engine/rdscor.c:80
 #, c-format
 msgid "ERROR: illegal character %c(%.2x) in scoreline: "
 msgstr ""
@@ -1857,7 +1865,7 @@ msgid ""
 "\tremainder of line flushed\n"
 msgstr ""
 
-#: Engine/rdscor.c:144
+#: Engine/rdscor.c:146
 msgid "ERROR: too many pfields: "
 msgstr ""
 
@@ -1883,349 +1891,316 @@ msgstr ""
 msgid "  section %d:  at position %d%s"
 msgstr ""
 
-#: Engine/sread.c:217
+#: Engine/sread.c:216
 msgid "Internal error in print_input_backtrace()"
 msgstr ""
 
-#: Engine/sread.c:219
+#: Engine/sread.c:218
 #, c-format
 msgid "  included from line %d of macro %s%s"
 msgstr ""
 
-#: Engine/sread.c:220
+#: Engine/sread.c:219
 #, c-format
 msgid "  called from line %d of macro %s%s"
 msgstr ""
 
-#: Engine/sread.c:222
+#: Engine/sread.c:221
 #, c-format
 msgid "  in line %d of macro %s%s"
 msgstr ""
 
-#: Engine/sread.c:229
-#, c-format
-msgid "  included from line %d of file input %s%s"
-msgstr ""
-
-#: Engine/sread.c:230
-#, c-format
-msgid "  called from line %d of file input %s%s"
-msgstr ""
-
-#: Engine/sread.c:232
-#, c-format
-msgid "  in line %d of file input %s%s"
-msgstr ""
-
-#: Engine/sread.c:268
+#: Engine/sread.c:256
 #, c-format
 msgid "Internal error op=%c"
 msgstr ""
 
-#: Engine/sread.c:322
-msgid "ungetscochar(): buffer overflow"
-msgstr ""
-
-#: Engine/sread.c:479
+#: Engine/sread.c:464
 msgid "illegal placement of number in [] expression"
 msgstr ""
 
-#: Engine/sread.c:506
+#: Engine/sread.c:491
 msgid "illegal placement of operator ~ in [] expression"
 msgstr ""
 
-#: Engine/sread.c:516
+#: Engine/sread.c:501
 msgid "illegal placement of operator @ or @@ in [] expression"
 msgstr ""
 
-#: Engine/sread.c:548 Engine/sread.c:562
+#: Engine/sread.c:533 Engine/sread.c:547
 #, c-format
 msgid "illegal placement of operator %c in [] expression"
 msgstr ""
 
-#: Engine/sread.c:574
+#: Engine/sread.c:559
 msgid "illegal placement of '(' in [] expression"
 msgstr ""
 
-#: Engine/sread.c:580
+#: Engine/sread.c:565
 msgid "missing operand before ')' in [] expression"
 msgstr ""
 
-#: Engine/sread.c:594
+#: Engine/sread.c:579
 msgid "missing operand before closing bracket in []"
 msgstr ""
 
-#: Engine/sread.c:609
+#: Engine/sread.c:594
 #, c-format
 msgid "illegal character %c(%.2x) in [] expression"
 msgstr ""
 
-#: Engine/sread.c:658
+#: Engine/sread.c:646
 #, c-format
 msgid "%s Nested LOOP terminated, level:%d\n"
 msgstr ""
 
-#: Engine/sread.c:664
+#: Engine/sread.c:652
 #, c-format
 msgid "External LOOP terminated, level:%d\n"
 msgstr ""
 
-#: Engine/sread.c:684
+#: Engine/sread.c:696
 #, c-format
 msgid "%s  Nested LOOP section (%d) Level:%d\n"
 msgstr ""
 
-#: Engine/sread.c:689
+#: Engine/sread.c:701
 #, c-format
 msgid " External LOOP section (%d) Level:%d\n"
 msgstr ""
 
-#: Engine/sread.c:703
+#: Engine/sread.c:715
 msgid "Loop terminated\n"
 msgstr ""
 
-#: Engine/sread.c:716
+#: Engine/sread.c:733
 #, c-format
 msgid "Repeat section (%d)\n"
 msgstr ""
 
-#: Engine/sread.c:719
+#: Engine/sread.c:736
 msgid "Repeat section\n"
 msgstr ""
 
-#: Engine/sread.c:744
+#: Engine/sread.c:761
 msgid "Invalid macro name for --smacro"
 msgstr ""
 
-#: Engine/sread.c:831
+#: Engine/sread.c:865
 #, c-format
 msgid "Clockbase = %f\n"
 msgstr ""
 
-#: Engine/sread.c:898
+#: Engine/sread.c:934
 msgid "Loops are nested too deeply"
 msgstr ""
 
-#: Engine/sread.c:901
-msgid "Loop cannot start inside of a macro"
-msgstr "Loop can't start inside of a macro"
-
-#: Engine/sread.c:920
+#: Engine/sread.c:948
 msgid "{: invalid repeat count"
 msgstr ""
 
-#: Engine/sread.c:929
+#: Engine/sread.c:957
 #, c-format
 msgid "%s Nested LOOP=%d Level:%d\n"
 msgstr ""
 
-#: Engine/sread.c:935
+#: Engine/sread.c:963
 #, c-format
 msgid "External LOOP=%d Level:%d\n"
 msgstr ""
 
-#: Engine/sread.c:1004
-msgid "Repeat cannot start inside of a macro (ignored)"
-msgstr "Repeat can't start inside of a macro (ignored)"
-
-#: Engine/sread.c:1019
+#: Engine/sread.c:1047
 msgid "r: invalid repeat count"
 msgstr ""
 
-#: Engine/sread.c:1021
+#: Engine/sread.c:1049
 #, c-format
 msgid "Repeats=%d\n"
 msgstr ""
 
-#: Engine/sread.c:1063
+#: Engine/sread.c:1093
 #, c-format
 msgid "Named section >>>%s<<<\n"
 msgstr ""
 
-#: Engine/sread.c:1079
+#: Engine/sread.c:1108
 #, c-format
 msgid "%d: File %s position %ld\n"
 msgstr ""
 
-#: Engine/sread.c:1085
-#, c-format
-msgid "Ignoring name %s not in file\n"
-msgstr ""
-
-#: Engine/sread.c:1110
+#: Engine/sread.c:1133
 #, c-format
 msgid "Name %s not found"
 msgstr ""
 
-#: Engine/sread.c:1112
+#: Engine/sread.c:1135
 #, c-format
 msgid "Duplicate %d: %s (%s,%ld)\n"
 msgstr ""
 
-#: Engine/sread.c:1129
-#, c-format
-msgid "cannot open input file %s"
-msgstr "can't open input file %s"
-
-#: Engine/sread.c:1149
+#: Engine/sread.c:1164
 #, c-format
 msgid "Warp_factor = %f\n"
 msgstr ""
 
-#: Engine/sread.c:1174
+#: Engine/sread.c:1189
 msgid "sread is confused on legal opcodes\n"
 msgstr ""
 
-#: Engine/sread.c:1236
+#: Engine/sread.c:1251
 msgid "No previous event for ^"
 msgstr ""
 
-#: Engine/sread.c:1241
+#: Engine/sread.c:1256
 #, c-format
 msgid "illegal space following %s, zero substituted"
 msgstr ""
 
-#: Engine/sread.c:1271
+#: Engine/sread.c:1286
 #, c-format
 msgid "ignoring '%s' in '%c' event"
 msgstr ""
 
-#: Engine/sread.c:1274
+#: Engine/sread.c:1289
 msgid "! invalid in p1, p2, or p3"
 msgstr ""
 
-#: Engine/sread.c:1275 Engine/sread.c:1280 Engine/sread.c:1730
-#: Engine/sread.c:1753 Engine/sread.c:1767
+#: Engine/sread.c:1290 Engine/sread.c:1295 Engine/sread.c:1738
+#: Engine/sread.c:1761 Engine/sread.c:1775
 msgid "      remainder of line flushed\n"
 msgstr ""
 
-#: Engine/sread.c:1279
+#: Engine/sread.c:1294
 #, c-format
 msgid "illegal character after !: '%c'"
 msgstr ""
 
-#: Engine/sread.c:1358
+#: Engine/sread.c:1373
 #, c-format
 msgid "WARNING: instr %s not found, assuming insno = -1\n"
 msgstr ""
 
-#: Engine/sread.c:1378
+#: Engine/sread.c:1393
 msgid "sread: illegal use of carry,   0 substituted\n"
 msgstr ""
 
-#: Engine/sread.c:1526
+#: Engine/sread.c:1539
 msgid "Improper \\"
 msgstr ""
 
-#: Engine/sread.c:1558
+#: Engine/sread.c:1570
 msgid "Not #define"
 msgstr ""
 
-#: Engine/sread.c:1620
+#: Engine/sread.c:1630
 #, c-format
 msgid "Macro %s with %d arguments defined\n"
 msgstr ""
 
-#: Engine/sread.c:1631
+#: Engine/sread.c:1642
 msgid "Not #include"
 msgstr ""
 
-#: Engine/sread.c:1662
+#: Engine/sread.c:1671
 #, c-format
 msgid "Cannot open #include'd file %s"
 msgstr "Can't open #include'd file %s"
 
-#: Engine/sread.c:1673
+#: Engine/sread.c:1681
 msgid "Not #undef"
 msgstr ""
 
-#: Engine/sread.c:1692
+#: Engine/sread.c:1700
 msgid "unknown # option"
 msgstr ""
 
-#: Engine/sread.c:1729
+#: Engine/sread.c:1737
 #, c-format
 msgid "illegal opcode %c"
 msgstr ""
 
-#: Engine/sread.c:1752
+#: Engine/sread.c:1760
 #, c-format
 msgid "unexpected char %c"
 msgstr ""
 
-#: Engine/sread.c:1766
+#: Engine/sread.c:1774
 msgid "illegally placed string"
 msgstr ""
 
-#: Engine/sread.c:1773
+#: Engine/sread.c:1781
 msgid "unmatched quote"
 msgstr ""
 
-#: Engine/sread.c:1817
+#: Engine/sread.c:1825
 msgid "sread: illegal number format:  "
 msgstr ""
 
-#: Engine/sread.c:1823
+#: Engine/sread.c:1831
 msgid "   zero substituted.\n"
 msgstr ""
 
-#: Engine/swrite.c:123
+#: Engine/swrite.c:123 Engine/swritestr.c:134
 #, c-format
 msgid "swrite: unexpected opcode, section %d line %d\n"
 msgstr ""
 
-#: Engine/swrite.c:209 Engine/swrite.c:249
+#: Engine/swrite.c:209 Engine/swrite.c:249 Engine/swritestr.c:220
+#: Engine/swritestr.c:260
 #, c-format
 msgid "swrite: output, sect%d line%d p%d makes illegal reference to "
 msgstr ""
 
-#: Engine/swrite.c:216 Engine/swrite.c:255
+#: Engine/swrite.c:216 Engine/swrite.c:255 Engine/swritestr.c:227
+#: Engine/swritestr.c:266
 msgid "   Zero substituted\n"
 msgstr ""
 
-#: Engine/swrite.c:313
+#: Engine/swrite.c:313 Engine/swritestr.c:324
 #, c-format
 msgid "swrite: output, sect%d line%d p%d has illegal ramp symbol\n"
 msgstr ""
 
-#: Engine/swrite.c:317
+#: Engine/swrite.c:317 Engine/swritestr.c:328
 #, c-format
 msgid ""
 "swrite: output, sect%d line%d p%d ramp has illegal forward or backward ref\n"
 msgstr ""
 
-#: Engine/swrite.c:380 Engine/swrite.c:445
+#: Engine/swrite.c:380 Engine/swrite.c:445 Engine/swritestr.c:391
+#: Engine/swritestr.c:456
 #, c-format
 msgid "swrite: output, sect%d line%d p%d has illegal expramp symbol\n"
 msgstr ""
 
-#: Engine/swrite.c:385 Engine/swrite.c:450
+#: Engine/swrite.c:385 Engine/swrite.c:450 Engine/swritestr.c:396
+#: Engine/swritestr.c:461
 #, c-format
 msgid ""
 "swrite: output, sect%d line%d p%d expramp has illegal forward or backward "
 "ref\n"
 msgstr ""
 
-#: Engine/swrite.c:466
+#: Engine/swrite.c:466 Engine/swritestr.c:477
 #, c-format
 msgid "swrite: output, sect%d line%d p%d has illegally terminated string   "
 msgstr ""
 
-#: Engine/swrite.c:514
+#: Engine/swrite.c:514 Engine/swritestr.c:529
 #, c-format
 msgid "swrite: output, sect%d line%d p%d has illegal number  "
 msgstr ""
 
-#: Engine/swrite.c:521
+#: Engine/swrite.c:521 Engine/swritestr.c:536
 msgid "    String truncated\n"
 msgstr ""
 
-#: Engine/symbtab.c:202
+#: Engine/symbtab.c:208
 #, c-format
 msgid "Type confusion for %s (%d,%d), replacing\n"
 msgstr ""
 
-#: Engine/symbtab.c:333
+#: Engine/symbtab.c:345
 #, c-format
 msgid "Unknown word type for %s on line %d\n"
 msgstr ""
@@ -2246,6 +2221,14 @@ msgstr ""
 msgid "twarp: t segments exceed twarp array\n"
 msgstr ""
 
+#: InOut/cmidi.c:233
+msgid "CoreMIDI real time MIDI plugin for Csound\n"
+msgstr ""
+
+#: InOut/cmidi.c:247
+msgid "rtmidi: CoreMIDI module enabled\n"
+msgstr ""
+
 #: InOut/libsnd.c:486
 msgid "error: no input file name"
 msgstr ""
@@ -2269,54 +2252,69 @@ msgstr ""
 msgid "audio_in %s has %d chnls, orch %d chnls_i"
 msgstr ""
 
-#: InOut/libsnd.c:573
+#: InOut/libsnd.c:574
+#, c-format
+msgid "reading %d sample blks of %d-bit floats from %s \n"
+msgstr ""
+
+#: InOut/libsnd.c:578
 #, c-format
 msgid "reading %d-byte blks of %s from %s (%s)\n"
 msgstr ""
 
-#: InOut/libsnd.c:608
+#: InOut/libsnd.c:614
 msgid "Output file type changed to IRCAM for use in pipe\n"
 msgstr ""
 
-#: InOut/libsnd.c:628
+#: InOut/libsnd.c:634
 msgid "Failed to initialise real time audio output"
 msgstr "Failed to initialize real time audio output"
 
-#: InOut/libsnd.c:669 InOut/libsnd.c:673
+#: InOut/libsnd.c:675 InOut/libsnd.c:679
 #, c-format
 msgid "sfinit: cannot open %s"
 msgstr "sfinit: can't open %s"
 
-#: InOut/libsnd.c:733 util/srconv.c:485
+#: InOut/libsnd.c:741
+#, c-format
+msgid "writing %d sample blks of %d-bit floats to %s \n"
+msgstr ""
+
+#: InOut/libsnd.c:744 util/srconv.c:484
 #, c-format
 msgid "writing %d-byte blks of %s to %s"
 msgstr ""
 
-#: InOut/libsnd.c:740 InOut/libsnd.c:810
+#: InOut/libsnd.c:749 InOut/libsnd.c:824
 msgid " (raw)\n"
 msgstr ""
 
-#: InOut/libsnd.c:803
+#: InOut/libsnd.c:815
 #, c-format
-msgid "%ld %d-byte soundblks of %s written to %s"
+msgid "%ld %d sample blks of %d-bit floats written to %s\n"
 msgstr ""
 
-#: InOut/libsnd.c:822
+#: InOut/libsnd.c:820
+#, c-format
+msgid "%ld %d sample blks of %s written to %s"
+msgstr ""
+
+#: InOut/libsnd.c:837
 #, c-format
 msgid "soundfile write returned bytecount of %d, not %d"
 msgstr ""
 
-#: InOut/libsnd.c:825
+#: InOut/libsnd.c:840
 msgid ""
 "(disk may be full...\n"
 " closing the file ...)"
 msgstr ""
 
-#: InOut/libsnd.c:828 util/dnoise.c:1192
+#: InOut/libsnd.c:843 util/dnoise.c:1177
 msgid "\t... closed\n"
 msgstr ""
 
-#: InOut/libsnd.c:834
+#: InOut/libsnd.c:849
 msgid "not writing to sound disk\n"
 msgstr ""
 
@@ -2716,20 +2714,20 @@ msgstr ""
 msgid "Error closing MIDI out device: %d (%s)"
 msgstr ""
 
-#: InOut/midisend.c:171
+#: InOut/midisend.c:170
 msgid " *** no callback for opening MIDI output"
 msgstr ""
 
-#: InOut/midisend.c:173
+#: InOut/midisend.c:172
 msgid " *** no callback for writing MIDI data"
 msgstr ""
 
-#: InOut/midisend.c:179
+#: InOut/midisend.c:178
 #, c-format
 msgid " *** error opening MIDI out device: %d (%s)"
 msgstr ""
 
-#: InOut/midisend.c:190
+#: InOut/midisend.c:189
 #, c-format
 msgid " *** error opening MIDI out file '%s'"
 msgstr ""
@@ -2983,7 +2981,7 @@ msgstr ""
 msgid "Opened MIDI output device file '%s'\n"
 msgstr ""
 
-#: InOut/rtalsa.c:1101 InOut/rtcoreaudio.c:64 InOut/rtcoreaudio.c:74
+#: InOut/rtalsa.c:1101 InOut/rtcoreaudio.c:71 InOut/rtcoreaudio.c:81
 msgid "warning... could not create global var\n"
 msgstr "warning... couldn't create global var\n"
 
@@ -3007,64 +3005,82 @@ msgstr ""
 msgid "rtmidi: devfile module enabled\n"
 msgstr ""
 
-#: InOut/rtcoreaudio.c:83
+#: InOut/rtauhal.c:163
+#, c-format
+msgid "selected input device: %s \n"
+msgstr ""
+
+#: InOut/rtauhal.c:166
+#, c-format
+msgid "selected output device: %s \n"
+msgstr ""
+
+#: InOut/rtauhal.c:524
+msgid "AuHAL module: device closed\n"
+msgstr ""
+
+#: InOut/rtauhal.c:541
+msgid "rtaudio: coreaaudio-AuHAL module enabled\n"
+msgstr ""
+
+#: InOut/rtcoreaudio.c:90
 msgid ""
 "CoreAudio real-time audio module for Csound\n"
 "by Victor Lazzarini\n"
 msgstr ""
 
-#: InOut/rtcoreaudio.c:105
+#: InOut/rtcoreaudio.c:112
 msgid "rtaudio: CoreAudio module enabled\n"
 msgstr ""
 
-#: InOut/rtcoreaudio.c:254
+#: InOut/rtcoreaudio.c:261
 #, c-format
 msgid "selected device: %u \n"
 msgstr ""
 
-#: InOut/rtcoreaudio.c:263
+#: InOut/rtcoreaudio.c:270
 #, c-format
 msgid "CoreAudio module: opening %s \n"
 msgstr ""
 
-#: InOut/rtcoreaudio.c:297
+#: InOut/rtcoreaudio.c:304
 msgid " *** CoreAudio: open: could not set buffer size\n"
 msgstr ""
 
-#: InOut/rtcoreaudio.c:342
+#: InOut/rtcoreaudio.c:349
 #, c-format
 msgid " *** CoreAudio: open: could not set device parameter sr: %d \n"
 msgstr ""
 
-#: InOut/rtcoreaudio.c:344
+#: InOut/rtcoreaudio.c:351
 #, c-format
 msgid ""
 " *** CoreAudio: current device sampling rate is:%d \n"
 "     try setting the above value in your csound orchestra \n"
 msgstr ""
 
-#: InOut/rtcoreaudio.c:353
+#: InOut/rtcoreaudio.c:360
 #, c-format
 msgid "CoreAudio module: sr set to %d with %d audio channels \n"
 msgstr ""
 
-#: InOut/rtcoreaudio.c:374 InOut/rtcoreaudio.c:387 InOut/rtcoreaudio.c:432
-#: InOut/rtcoreaudio.c:452
+#: InOut/rtcoreaudio.c:381 InOut/rtcoreaudio.c:394 InOut/rtcoreaudio.c:439
+#: InOut/rtcoreaudio.c:459
 msgid " *** CoreAudio: open: memory allocation failure\n"
 msgstr ""
 
-#: InOut/rtcoreaudio.c:414
+#: InOut/rtcoreaudio.c:421
 #, c-format
 msgid ""
 "CoreAudio module: device open with %d buffers of %d frames\n"
 "==========================================================\n"
 msgstr ""
 
-#: InOut/rtcoreaudio.c:552
+#: InOut/rtcoreaudio.c:559
 msgid "coreaudio module: closing device...\n"
 msgstr ""
 
-#: InOut/rtcoreaudio.c:566
+#: InOut/rtcoreaudio.c:573
 msgid "coreaudio module: device closed\n"
 msgstr ""
 
@@ -3464,294 +3480,12 @@ msgstr "couldn't allocate global structure"
 msgid "rtaudio: WinMM module enabled\n"
 msgstr ""
 
-#: InOut/virtual_keyboard/virtual_keyboard.cpp:435
-msgid "virtual_keyboard.cpp: error allocating FLTK flags"
-msgstr ""
-
-#: InOut/virtual_keyboard/virtual_keyboard.cpp:443 InOut/winFLTK.c:125
-#: InOut/winFLTK.c:139
-#, c-format
-msgid "Error registering opcode '%s'"
-msgstr ""
-
-#: InOut/widgets.cpp:1081
-msgid ""
-"Invalid snapshot. Perhaps you modified orchestra widget code after you saved "
-"the snapshot bank."
-msgstr ""
-
-#: InOut/widgets.cpp:1226
-msgid "No name for FLbutbank"
-msgstr ""
-
-#: InOut/widgets.cpp:1466
-msgid "FLsetsnap: invalid table"
-msgstr ""
-
-#: InOut/widgets.cpp:1504
-msgid ""
-"Saving could overwrite the old file.\n"
-"Are you sure to save ?"
-msgstr ""
-
-#: InOut/widgets.cpp:1516
-msgid ""
-"Saving could overwrite the old file.\n"
-"Are you sure you want to save ?"
-msgstr ""
-
-#: InOut/widgets.cpp:1518
-msgid "No"
-msgstr ""
-
-#: InOut/widgets.cpp:1518
-msgid "Yes"
-msgstr ""
-
-#: InOut/widgets.cpp:1527
-msgid "FLsavesnap: cannot open file"
-msgstr "FLsavesnap: can't open file"
-
-#: InOut/widgets.cpp:1580
-msgid "FLloadsnap: cannot open file"
-msgstr "FLloadsnap: can't open file"
-
-#: InOut/widgets.cpp:1625
-msgid ""
-"unmatched widget, probably due to a modified orchestra. Modifying an "
-"orchestra makes it incompatible with old snapshot files"
-msgstr ""
-
-#: InOut/widgets.cpp:1994
-msgid "end of widget thread\n"
-msgstr ""
-
-#: InOut/widgets.cpp:2020
-msgid "FLrun was already called"
-msgstr ""
-
-#: InOut/widgets.cpp:2023
-msgid "FL_run: memory allocation failure"
-msgstr ""
-
-#: InOut/widgets.cpp:2125 InOut/widgets.cpp:2145
-msgid "Error: Unable to fork process\n"
-msgstr ""
-
-#: InOut/widgets.cpp:2545
-msgid "FLpanel_end: invalid stack pointer: verify its placement"
-msgstr ""
-
-#: InOut/widgets.cpp:2548
-msgid ""
-"FLpanel_end: invalid stack count: verify FLpanel/FLpanel_end count and "
-"placement"
-msgstr ""
-
-#: InOut/widgets.cpp:2573 InOut/widgets.cpp:2604
-msgid "FLscroll_end: invalid stack pointer: verify its placement"
-msgstr ""
-
-#: InOut/widgets.cpp:2576
-msgid ""
-"FLscroll_end: invalid stack count: verify FLscroll/FLscroll_end count and "
-"placement"
-msgstr ""
-
-#: InOut/widgets.cpp:2607
-msgid ""
-"FLtabs_end: invalid stack count: verify FLtabs/FLtabs_end count and placement"
-msgstr ""
-
-#: InOut/widgets.cpp:2651
-msgid "FLgroup_end: invalid stack pointer: verify its placement"
-msgstr ""
-
-#: InOut/widgets.cpp:2654
-msgid ""
-"FLgroup_end: invalid stack count: verify FLgroup/FLgroup_end count and "
-"placement"
-msgstr ""
-
-#: InOut/widgets.cpp:2684
-msgid "FLpack_end: invalid stack pointer: verify its placement"
-msgstr ""
-
-#: InOut/widgets.cpp:2687
-msgid ""
-"FLpack_end: invalid stack count: verify FLpack/FLpack_end count and placement"
-msgstr ""
-
-#: InOut/widgets.cpp:2840
-msgid "FLvalue cannot be set by FLsetVal.\n"
-msgstr "FLvalue can't be set by FLsetVal.\n"
-
-#: InOut/widgets.cpp:2857
-#, c-format
-msgid "(fl_setWidgetValuei): not fully implemented yet; exp=%d"
-msgstr ""
-
-#: InOut/widgets.cpp:2876
-msgid "FLvalue cannot be set by FLsetVal\n"
-msgstr "FLvalue can't be set by FLsetVal\n"
-
-#: InOut/widgets.cpp:2893
-#, c-format
-msgid "(fl_setWidgetValue_set): not fully implemented yet; exp=%d"
-msgstr ""
-
-#: InOut/widgets.cpp:3242 InOut/widgets.cpp:4648
-msgid "FLslider exponential, using non-labeled slider"
-msgstr ""
-
-#: InOut/widgets.cpp:3264
-msgid "FLslider: invalid slider type"
-msgstr ""
-
-#: InOut/widgets.cpp:3276 InOut/widgets.cpp:4072
-msgid "FLslider: zero is illegal in exponential operations"
-msgstr ""
-
-#: InOut/widgets.cpp:3337 InOut/widgets.cpp:4399 InOut/widgets.cpp:4610
-#: InOut/widgets.cpp:4787
-msgid "invalid ZAK space allocation"
-msgstr ""
-
-#: InOut/widgets.cpp:3451
-msgid "FLslidBnk: zero is illegal in exponential operations"
-msgstr ""
-
-#: InOut/widgets.cpp:3548 InOut/widgets.cpp:3581
-msgid "FLjoy X axe: zero is illegal in exponential operations"
-msgstr ""
-
-#: InOut/widgets.cpp:3675
-msgid "FLknob: invalid knob type"
-msgstr ""
-
-#: InOut/widgets.cpp:3690
-msgid "FLknob: zero is illegal in exponential operations"
-msgstr ""
-
-#: InOut/widgets.cpp:3790 InOut/widgets.cpp:3912
-#, c-format
-msgid "FLbutton \"%s\" ignoring snapshot capture retrieve"
-msgstr ""
-
-#: InOut/widgets.cpp:3831
-msgid "FLbutton: invalid button type"
-msgstr ""
-
-#: InOut/widgets.cpp:3863
-msgid "FLcloseButton: invalid stack pointer: verify its placement"
-msgstr ""
-
-#: InOut/widgets.cpp:3882
-#, c-format
-msgid "Command Found: %s\n"
-msgstr ""
-
-#: InOut/widgets.cpp:3954
-msgid "FLbuttonBank: invalid button type"
-msgstr ""
-
-#: InOut/widgets.cpp:3992
-#, c-format
-msgid "FLcount \"%s\" ignoring snapshot capture retrieve"
-msgstr ""
-
-#: InOut/widgets.cpp:4059
-msgid "FLroller: invalid roller type"
-msgstr ""
-
-#: InOut/widgets.cpp:4254
-msgid "FLhvsBox: a square area must be delimited by 2 lines at least"
-msgstr ""
-
-#: InOut/widgets.cpp:4302
-msgid "FLkeyIn: invalid table number"
-msgstr ""
-
-#: InOut/widgets.cpp:4305
-msgid "FLkeyIn: table too short!"
-msgstr ""
-
-#: InOut/widgets.cpp:4522
-msgid "FLvslidBnk: zero is illegal in exponential operations"
-msgstr ""
-
-#: InOut/widgets.cpp:4698 InOut/widgets.cpp:4875
-msgid "FLsliderBank: zero is illegal in exponential operations"
-msgstr ""
-
-#: InOut/widgets.cpp:4825
-msgid "FLslidBnk2: FLslider exponential, using non-labeled slider"
-msgstr ""
-
-#: InOut/widgets.cpp:4955 InOut/widgets.cpp:5018
-msgid "FLsldBnkSet: invalid table number"
-msgstr ""
-
-#: InOut/widgets.cpp:4959 InOut/widgets.cpp:5022
-msgid "FLslidBnkSet: table too short!"
-msgstr ""
-
-#: InOut/widgets.cpp:4967 InOut/widgets.cpp:5031
-msgid "FLsldBnkSet: invalid outable number"
-msgstr ""
-
-#: InOut/widgets.cpp:4972 InOut/widgets.cpp:5037
-msgid "FLslidBnkSet: too many sliders to reset!"
-msgstr ""
-
-#: InOut/widgets.cpp:4995
-msgid "FLslidBnkSet: function mapping not available"
-msgstr ""
-
-#: InOut/widgets.cpp:5064 InOut/widgets.cpp:5149 InOut/widgets.cpp:5236
-msgid ""
-"FLslidBnk2Setk: value out of range: function mapping requires a 0 to 1 range "
-"for input"
-msgstr ""
-
-#: InOut/widgets.cpp:5093
-msgid "FLsldBnkSetk: invalid table number"
-msgstr ""
-
-#: InOut/widgets.cpp:5097 InOut/widgets.cpp:5183
-msgid "FLslidBnkSetk: table too short!"
-msgstr ""
-
-#: InOut/widgets.cpp:5105
-msgid "FLsldBnkSetk: invalid outable number"
-msgstr ""
-
-#: InOut/widgets.cpp:5111 InOut/widgets.cpp:5197
-msgid "FLslidBnkSetk: too many sliders to reset!"
-msgstr ""
-
-#: InOut/widgets.cpp:5179
-msgid "FLslidBnkSetk: invalid table number"
-msgstr ""
-
-#: InOut/widgets.cpp:5191
-msgid "FLslidBnkSetk: invalid outable number"
-msgstr ""
-
-#: InOut/widgets.cpp:5268
-msgid "FLxyin: none of X limits can be zero in exponential mode!"
-msgstr ""
-
-#: InOut/widgets.cpp:5294
-msgid "FLxyin: none of Y limits can be zero in exponential mode!"
-msgstr ""
-
 #: InOut/winascii.c:75
 #, c-format
 msgid "%s\t%ld points, scalemax %5.3f\n"
 msgstr ""
 
-#: InOut/windin.c:46 Opcodes/pitch.c:82 Opcodes/spectra.c:76
+#: InOut/windin.c:46 Opcodes/pitch.c:83 Opcodes/spectra.c:78
 msgid "illegal iprd"
 msgstr ""
 
@@ -3794,47 +3528,61 @@ msgstr ""
 msgid "widgets.cpp: error allocating FLTK flags"
 msgstr ""
 
-#: OOps/aops.c:95 OOps/aops.c:119
+#: InOut/winFLTK.c:124 InOut/winFLTK.c:137
+#: InOut/virtual_keyboard/virtual_keyboard.cpp:443
+#, c-format
+msgid "Error registering opcode '%s'"
+msgstr ""
+
+#: InOut/virtual_keyboard/virtual_keyboard.cpp:435
+msgid "virtual_keyboard.cpp: error allocating FLTK flags"
+msgstr ""
+
+#: OOps/aops.c:120 OOps/aops.c:144
 #, c-format
 msgid "Cannot be more In arguments than Out in init (%d,%d)"
 msgstr ""
 
-#: OOps/aops.c:175 OOps/aops.c:194
+#: OOps/aops.c:200 OOps/aops.c:219
 #, c-format
 msgid "Index %d out of range [0,%d] in t[]\n"
 msgstr ""
 
-#: OOps/aops.c:184
-#, fuzzy
-msgid "Vector notinitialised\n"
-msgstr "vco: not initialized"
+#: OOps/aops.c:209
+#
+msgid "Vector not initialised\n"
+msgstr "Vector not initialized\n"
 
-#: OOps/aops.c:686
+#: OOps/aops.c:711
 msgid "non-looping sample"
 msgstr ""
 
-#: OOps/aops.c:828 OOps/aops.c:856
+#: OOps/aops.c:853 OOps/aops.c:881
 #, c-format
 msgid "No tuning table %d"
 msgstr ""
 
-#: OOps/aops.c:901 OOps/aops.c:939
+#: OOps/aops.c:926 OOps/aops.c:964
 msgid "cpstun: invalid table"
 msgstr ""
 
-#: OOps/aops.c:1189
+#: OOps/aops.c:1214
 msgid "Input and output argument count differs in inch"
 msgstr ""
 
-#: OOps/aops.c:1193
+#: OOps/aops.c:1218
 #, c-format
 msgid "Input channel %d too large; ignored"
 msgstr ""
 
-#: OOps/aops.c:1667
+#: OOps/aops.c:1698
 msgid "k-rate invalue ChannelName cannot start with $"
 msgstr "k-rate invalue ChannelName can't start with $"
 
+#: OOps/aops.c:1835
+msgid "Unknown functuon called"
+msgstr ""
+
 #: OOps/bus.c:313 OOps/bus.c:345
 msgid "chani: invalid index"
 msgstr ""
@@ -4117,7 +3865,7 @@ msgstr ""
 msgid "dispfft: not initialised"
 msgstr "dispfft: not initialized"
 
-#: OOps/disprep.c:435 Opcodes/spectra.c:516
+#: OOps/disprep.c:435 Opcodes/spectra.c:518
 msgid "illegal iperiod"
 msgstr ""
 
@@ -4181,15 +3929,15 @@ msgstr ""
 msgid " *** fftlib.c: internal error: invalid FFT size: %d"
 msgstr ""
 
-#: OOps/goto_ops.c:92
+#: OOps/goto_ops.c:93
 msgid "negative time period"
 msgstr ""
 
-#: OOps/goto_ops.c:182
+#: OOps/goto_ops.c:186
 msgid "turnoff2: invalid instrument number"
 msgstr ""
 
-#: OOps/goto_ops.c:187
+#: OOps/goto_ops.c:191
 msgid "turnoff2: invalid mode parameter"
 msgstr ""
 
@@ -4206,7 +3954,7 @@ msgid "cpstabm: invalid modulator table"
 msgstr ""
 
 #: OOps/midiops.c:304 OOps/midiops.c:314 OOps/midiops.c:334 OOps/midiops.c:344
-#: OOps/midiops.c:421 OOps/midiops.c:435 Opcodes/gab/sliderTable.c:563
+#: OOps/midiops.c:421 OOps/midiops.c:435 Opcodes/gab/sliderTable.c:567
 #: Opcodes/midiops2.c:56 Opcodes/midiops2.c:73 Opcodes/midiops2.c:111
 #: Opcodes/midiops2.c:145 Opcodes/midiops2.c:206 Opcodes/midiops2.c:237
 #: Opcodes/midiops2.c:298 Opcodes/midiops2.c:317 Opcodes/midiops2.c:357
@@ -4222,7 +3970,7 @@ msgstr ""
 msgid "illegal mrtmsg argument"
 msgstr ""
 
-#: OOps/midiout.c:383
+#: OOps/midiout.c:389
 #, c-format
 msgid "out contr14 msb:%x lsb:%x\n"
 msgstr ""
@@ -4688,148 +4436,148 @@ msgstr "pvsanal: Not Initialized.\n"
 msgid "Unknown window type; replaced by rectangular\n"
 msgstr ""
 
-#: OOps/pvsanal.c:1025
+#: OOps/pvsanal.c:1027
 msgid "pvsynth: Not Initialised.\n"
 msgstr "pvsynth: Not Initialized.\n"
 
-#: OOps/remote.c:100
+#: OOps/remote.c:103
 msgid "insufficient memory to initialise remote globals."
 msgstr ""
 
-#: OOps/remote.c:109
+#: OOps/remote.c:112
 msgid "insufficient memory to initialise outgoing socket table."
 msgstr ""
 
-#: OOps/remote.c:116
+#: OOps/remote.c:119
 msgid "insufficient memory to initialise incoming socket table."
 msgstr ""
 
-#: OOps/remote.c:124
+#: OOps/remote.c:127
 msgid "insufficient memory to initialise insrfd_list."
 msgstr ""
 
-#: OOps/remote.c:132
+#: OOps/remote.c:135
 msgid "insufficient memory to initialise chnrfd_list."
 msgstr ""
 
-#: OOps/remote.c:139
+#: OOps/remote.c:142
 msgid "insufficient memory to initialise insrfd table."
 msgstr ""
 
-#: OOps/remote.c:146
+#: OOps/remote.c:149
 msgid "insufficient memory to initialise chnrfd table."
 msgstr ""
 
-#: OOps/remote.c:153
+#: OOps/remote.c:156
 msgid "insufficient memory to initialise local ip address."
 msgstr ""
 
-#: OOps/remote.c:161
+#: OOps/remote.c:164
 msgid "unable to get local ip address."
 msgstr ""
 
-#: OOps/remote.c:222
+#: OOps/remote.c:225
 msgid "could not open remote port"
 msgstr "couldn't open remote port"
 
-#: OOps/remote.c:237
+#: OOps/remote.c:240
 msgid "---> Could not connect \n"
 msgstr "---> Couldn't connect \n"
 
-#: OOps/remote.c:241
+#: OOps/remote.c:244
 msgid "---> Failed all attempts to connect. \n"
 msgstr ""
 
-#: OOps/remote.c:244
+#: OOps/remote.c:247
 msgid "--->  Connected. \n"
 msgstr ""
 
-#: OOps/remote.c:258 Opcodes/socksend.c:232
+#: OOps/remote.c:261 Opcodes/socksend.c:305
 msgid "write to socket failed"
 msgstr ""
 
-#: OOps/remote.c:278
+#: OOps/remote.c:281
 msgid "creating socket\n"
 msgstr ""
 
-#: OOps/remote.c:280
+#: OOps/remote.c:283
 msgid "created socket \n"
 msgstr ""
 
-#: OOps/remote.c:292
+#: OOps/remote.c:295
 msgid "setting socket option to reuse the addresse \n"
 msgstr ""
 
-#: OOps/remote.c:309 Opcodes/sockrecv.c:133 Opcodes/sockrecv.c:223
-#: Opcodes/socksend.c:211
+#: OOps/remote.c:312 Opcodes/sockrecv.c:141 Opcodes/sockrecv.c:237
+#: Opcodes/socksend.c:284
 msgid "bind failed"
 msgstr ""
 
-#: OOps/remote.c:313 Opcodes/socksend.c:216
+#: OOps/remote.c:316 Opcodes/socksend.c:289
 msgid "listen failed"
 msgstr ""
 
-#: OOps/remote.c:318 Opcodes/socksend.c:222
+#: OOps/remote.c:321 Opcodes/socksend.c:295
 msgid "accept failed"
 msgstr ""
 
-#: OOps/remote.c:321
+#: OOps/remote.c:324
 #, c-format
 msgid "accepted, conn=%d \n"
 msgstr ""
 
-#: OOps/remote.c:353 OOps/remote.c:374 OOps/remote.c:417 OOps/remote.c:449
-#: OOps/remote.c:489
+#: OOps/remote.c:356 OOps/remote.c:377 OOps/remote.c:420 OOps/remote.c:452
+#: OOps/remote.c:492
 msgid "failed to initialise remote globals."
 msgstr "failed to initialize remote globals."
 
-#: OOps/remote.c:378 OOps/remote.c:421
+#: OOps/remote.c:381 OOps/remote.c:424
 msgid "missing instr nos"
 msgstr ""
 
-#: OOps/remote.c:390 OOps/remote.c:430
+#: OOps/remote.c:393 OOps/remote.c:433
 msgid "illegal instr no"
 msgstr ""
 
-#: OOps/remote.c:393
+#: OOps/remote.c:396
 msgid "insno already remote"
 msgstr ""
 
-#: OOps/remote.c:403 OOps/remote.c:474
+#: OOps/remote.c:406 OOps/remote.c:477
 msgid "Failed to open port to listen"
 msgstr ""
 
-#: OOps/remote.c:423
+#: OOps/remote.c:426
 #, c-format
 msgid "*** str1: %s own:%s\n"
 msgstr ""
 
-#: OOps/remote.c:433
+#: OOps/remote.c:436
 msgid "insno already specific remote"
 msgstr ""
 
-#: OOps/remote.c:453 OOps/remote.c:493
+#: OOps/remote.c:456 OOps/remote.c:496
 msgid "missing channel nos"
 msgstr ""
 
-#: OOps/remote.c:463 OOps/remote.c:502
+#: OOps/remote.c:466 OOps/remote.c:505
 msgid "illegal channel no"
 msgstr ""
 
-#: OOps/remote.c:466
+#: OOps/remote.c:469
 msgid "channel already remote"
 msgstr ""
 
-#: OOps/remote.c:505
+#: OOps/remote.c:508
 msgid "channel already specific remote"
 msgstr ""
 
-#: OOps/remote.c:531 OOps/remote.c:555 OOps/remote.c:579
+#: OOps/remote.c:534 OOps/remote.c:558 OOps/remote.c:582
 msgid "CLsend failed"
 msgstr ""
 
-#: OOps/remote.c:645 OOps/remote.c:653 OOps/remote.c:661 OOps/remote.c:669
-#: OOps/remote.c:677
+#: OOps/remote.c:648 OOps/remote.c:656 OOps/remote.c:664 OOps/remote.c:672
+#: OOps/remote.c:680
 msgid ""
 "*** This version of Csound was not compiled with remote event support ***\n"
 msgstr ""
@@ -4938,53 +4686,53 @@ msgstr "linseg not initialized (krate)\n"
 msgid "linseg: not initialised (arate)\n"
 msgstr "linseg: not initialized (arate)\n"
 
-#: OOps/ugens1.c:463 OOps/ugens1.c:465 OOps/ugens1.c:512 OOps/ugens1.c:514
-#: OOps/ugens1.c:564 OOps/ugens1.c:566 OOps/ugens1.c:610 OOps/ugens1.c:612
-#: OOps/ugens1.c:774 OOps/ugens1.c:776
+#: OOps/ugens1.c:464 OOps/ugens1.c:466 OOps/ugens1.c:513 OOps/ugens1.c:515
+#: OOps/ugens1.c:565 OOps/ugens1.c:567 OOps/ugens1.c:611 OOps/ugens1.c:613
+#: OOps/ugens1.c:775 OOps/ugens1.c:777
 #, c-format
 msgid "ival%d is zero"
 msgstr ""
 
-#: OOps/ugens1.c:466 OOps/ugens1.c:515 OOps/ugens1.c:567 OOps/ugens1.c:613
-#: OOps/ugens1.c:777
+#: OOps/ugens1.c:467 OOps/ugens1.c:516 OOps/ugens1.c:568 OOps/ugens1.c:614
+#: OOps/ugens1.c:778
 #, c-format
 msgid "ival%d sign conflict"
 msgstr ""
 
-#: OOps/ugens1.c:495 OOps/ugens1.c:544
+#: OOps/ugens1.c:496 OOps/ugens1.c:545
 #, c-format
 msgid "Breakpoint time %f not valid"
 msgstr ""
 
-#: OOps/ugens1.c:706
+#: OOps/ugens1.c:707
 msgid "expseg (krate): not initialised"
 msgstr "expseg (krate): not initialized"
 
-#: OOps/ugens1.c:732
+#: OOps/ugens1.c:733
 msgid "expseg (arate): not initialised"
 msgstr "expseg (arate): not initialized"
 
-#: OOps/ugens1.c:1013 OOps/ugens1.c:1149 OOps/ugens1.c:1311
+#: OOps/ugens1.c:1014 OOps/ugens1.c:1150 OOps/ugens1.c:1312
 msgid "non-positive iatdec"
 msgstr ""
 
-#: OOps/ugens1.c:1106 OOps/ugens1.c:1273
+#: OOps/ugens1.c:1107 OOps/ugens1.c:1274
 msgid "ixmod out of range."
 msgstr ""
 
-#: OOps/ugens1.c:1134 OOps/ugens1.c:1301
+#: OOps/ugens1.c:1135 OOps/ugens1.c:1302
 msgid "rise func ends with zero"
 msgstr ""
 
-#: OOps/ugens1.c:1178 OOps/ugens1.c:1257
+#: OOps/ugens1.c:1179 OOps/ugens1.c:1258
 msgid "envlpx rise func ends with zero"
 msgstr ""
 
-#: OOps/ugens1.c:1199 OOps/ugens1.c:1254
+#: OOps/ugens1.c:1200 OOps/ugens1.c:1255
 msgid "envlpx(krate): not initialised"
 msgstr "envlpx(krate): not initialized"
 
-#: OOps/ugens2.c:48 OOps/ugens2.c:61 Opcodes/shape.c:377
+#: OOps/ugens2.c:48 OOps/ugens2.c:61 Opcodes/shape.c:379
 msgid "init phase truncation\n"
 msgstr ""
 
@@ -5048,8 +4796,8 @@ msgid "oscil(krate): not initialised"
 msgstr "oscil(krate): not initialized"
 
 #: OOps/ugens2.c:1139 OOps/ugens2.c:1167 OOps/ugens2.c:1192 OOps/ugens2.c:1219
-#: Opcodes/pitch.c:1579 Opcodes/pitch.c:1606 Opcodes/pitch.c:1633
-#: Opcodes/pitch.c:1662
+#: Opcodes/pitch.c:1580 Opcodes/pitch.c:1607 Opcodes/pitch.c:1634
+#: Opcodes/pitch.c:1663
 msgid "oscil: not initialised"
 msgstr "oscil: not initialized"
 
@@ -5165,7 +4913,7 @@ msgstr ""
 msgid "Seeding from current time %lu\n"
 msgstr ""
 
-#: OOps/ugens5.c:198 OOps/ugens5.c:260 Opcodes/gab/gab.c:45 Opcodes/ugsc.c:188
+#: OOps/ugens5.c:198 OOps/ugens5.c:260 Opcodes/gab/gab.c:47 Opcodes/ugsc.c:186
 #, c-format
 msgid "illegal reson iscl value, %f"
 msgstr ""
@@ -5397,8 +5145,8 @@ msgstr ""
 msgid "Table no. < 1 dft=%.2f  sft=%.2f"
 msgstr ""
 
-#: OOps/ugrw1.c:1781 OOps/ugrw1.c:1822 Opcodes/fareyseq.c:455
-#: Opcodes/fareyseq.c:477
+#: OOps/ugrw1.c:1781 OOps/ugrw1.c:1822 Opcodes/fareyseq.c:453
+#: Opcodes/fareyseq.c:475
 #, c-format
 msgid "Source sft table %.2f not found."
 msgstr ""
@@ -5628,19 +5376,19 @@ msgstr ""
 msgid "reverbx: not initialised"
 msgstr "reverbx: not initialized"
 
-#: Opcodes/ambicode1.c:80
+#: Opcodes/ambicode1.c:82
 msgid "The numbers of input and output arguments are not valid."
 msgstr ""
 
-#: Opcodes/ambicode1.c:163
+#: Opcodes/ambicode1.c:165
 msgid "The number of input arguments is not valid."
 msgstr ""
 
-#: Opcodes/ambicode1.c:167
+#: Opcodes/ambicode1.c:169
 msgid "The isetup value should be between 1 and 5."
 msgstr ""
 
-#: Opcodes/ambicode1.c:193
+#: Opcodes/ambicode1.c:195
 msgid "The output channel count does not match the isetup value."
 msgstr ""
 
@@ -5680,16 +5428,16 @@ msgstr ""
 msgid "Not supported setup number!"
 msgstr ""
 
-#: Opcodes/babo.c:740
+#: Opcodes/babo.c:742
 #, c-format
 msgid "Babo: resonator dimensions are incorrect (%.1f, %.1f, %.1f)"
 msgstr ""
 
-#: Opcodes/bilbar.c:82
+#: Opcodes/bilbar.c:83
 msgid "No data to continue"
 msgstr ""
 
-#: Opcodes/bilbar.c:108
+#: Opcodes/bilbar.c:109
 msgid "Ends must be clamped(1), pivoting(2) or free(3)"
 msgstr ""
 
@@ -5702,8 +5450,8 @@ msgstr "vco: not initialized"
 msgid "DLineN: Delay length too big ... setting to maximum length of %ld.\n"
 msgstr ""
 
-#: Opcodes/bowedbar.c:98 Opcodes/physmod.c:489
-msgid "unknown lowest frequency for bowed string -- assuming 50Hz\n"
+#: Opcodes/bowedbar.c:98
+msgid "unknown lowest frequency for bowed bar -- assuming 50Hz\n"
 msgstr ""
 
 #: Opcodes/clfilt.c:53
@@ -5781,17 +5529,17 @@ msgstr ""
 msgid "Unknown control %d"
 msgstr ""
 
-#: Opcodes/cpumeter.c:73
+#: Opcodes/cpumeter.c:77
 #, c-format
 msgid "Failed to open /proc/stat: %s"
 msgstr ""
 
-#: Opcodes/cpumeter.c:75 Opcodes/cpumeter.c:80 Opcodes/cpumeter.c:107
-#: Opcodes/cpumeter.c:147
+#: Opcodes/cpumeter.c:79 Opcodes/cpumeter.c:84 Opcodes/cpumeter.c:111
+#: Opcodes/cpumeter.c:151
 msgid "failed /proc/stat read"
 msgstr ""
 
-#: Opcodes/crossfm.c:33
+#: Opcodes/crossfm.c:34
 msgid "crossfm: ftable not found"
 msgstr ""
 
@@ -5832,31 +5580,31 @@ msgstr ""
 msgid "insufficient arguments for fareytable"
 msgstr ""
 
-#: Opcodes/fareyseq.c:250 Opcodes/fareyseq.c:300
+#: Opcodes/fareyseq.c:251 Opcodes/fareyseq.c:301
 #, c-format
 msgid "Farey: Table no. < 1 dft=%.2f  sft=%.2f"
 msgstr ""
 
-#: Opcodes/fareyseq.c:255
+#: Opcodes/fareyseq.c:256
 #, c-format
 msgid "Farey: Filter type < 1 dft=%.2f  sft=%.2f"
 msgstr ""
 
-#: Opcodes/fareyseq.c:270 Opcodes/fareyseq.c:318
+#: Opcodes/fareyseq.c:271 Opcodes/fareyseq.c:319
 #, c-format
 msgid "Farey: Destination dft table %.2f not found."
 msgstr ""
 
-#: Opcodes/fareyseq.c:281 Opcodes/fareyseq.c:329
+#: Opcodes/fareyseq.c:282 Opcodes/fareyseq.c:330
 #, c-format
 msgid "Farey: Source sft table %.2f not found."
 msgstr ""
 
-#: Opcodes/fareyseq.c:305
+#: Opcodes/fareyseq.c:306
 msgid "Farey: Filter type < 1"
 msgstr ""
 
-#: Opcodes/fareyseq.c:447 Opcodes/fareyseq.c:468
+#: Opcodes/fareyseq.c:445 Opcodes/fareyseq.c:466
 #, c-format
 msgid "Table no. < 1 sft=%.2f"
 msgstr ""
@@ -5964,45 +5712,45 @@ msgstr ""
 msgid "follow - zero length!"
 msgstr ""
 
-#: Opcodes/fout.c:59
+#: Opcodes/fout.c:60
 #, c-format
 msgid "Closing file '%s'...\n"
 msgstr ""
 
-#: Opcodes/fout.c:101
+#: Opcodes/fout.c:102
 msgid "invalid file handle"
 msgstr ""
 
-#: Opcodes/fout.c:108 Opcodes/fout.c:420
+#: Opcodes/fout.c:109 Opcodes/fout.c:421
 msgid "invalid file name"
 msgstr ""
 
-#: Opcodes/fout.c:165
+#: Opcodes/fout.c:166
 #, c-format
 msgid "error opening file '%s'"
 msgstr ""
 
-#: Opcodes/fout.c:192
+#: Opcodes/fout.c:193
 #, c-format
 msgid "error opening sound file '%s'"
 msgstr ""
 
-#: Opcodes/fout.c:429
+#: Opcodes/fout.c:430
 #, c-format
 msgid "cannot close '%s': not found in list of open files"
 msgstr "can't close '%s': not found in list of open files"
 
-#: Opcodes/fout.c:440
+#: Opcodes/fout.c:441
 #, c-format
 msgid "cannot close file #%d: not a valid handle"
 msgstr "can't close file #%d: not a valid handle"
 
-#: Opcodes/fout.c:447
+#: Opcodes/fout.c:448
 #, c-format
 msgid "file #%d (%s) is in use, will be closed when released"
 msgstr ""
 
-#: Opcodes/fout.c:476 Opcodes/fout.c:479 Opcodes/fout.c:550 Opcodes/fout.c:553
+#: Opcodes/fout.c:477 Opcodes/fout.c:480 Opcodes/fout.c:551 Opcodes/fout.c:554
 msgid "fouti: invalid file handle"
 msgstr ""
 
@@ -6080,554 +5828,689 @@ msgstr ""
 msgid "ftsave: failed to write file"
 msgstr "ftsave: failed to write file"
 
-#: Opcodes/gab/gab.c:109
+#: Opcodes/gab/gab.c:111
 msgid "fastab: incorrect table number"
 msgstr ""
 
-#: Opcodes/gab/gab.c:132 Opcodes/gab/gab.c:141 Opcodes/gab/gab.c:171
+#: Opcodes/gab/gab.c:134 Opcodes/gab/gab.c:143 Opcodes/gab/gab.c:173
 msgid "tabw off end"
 msgstr ""
 
-#: Opcodes/gab/gab.c:157 Opcodes/gab/gab.c:225 Opcodes/gab/gab.c:234
+#: Opcodes/gab/gab.c:159 Opcodes/gab/gab.c:227 Opcodes/gab/gab.c:236
 msgid "tab off end"
 msgstr ""
 
-#: Opcodes/gab/gab.c:183
+#: Opcodes/gab/gab.c:185
 msgid "tab_i: incorrect table number"
 msgstr ""
 
-#: Opcodes/gab/gab.c:190
-msgid "tab_i off end"
+#: Opcodes/gab/gab.c:192
+#, c-format
+msgid "tab_i off end: table number: %d\n"
 msgstr ""
 
-#: Opcodes/gab/gab.c:202
+#: Opcodes/gab/gab.c:204
 msgid "tabw_i: incorrect table number"
 msgstr ""
 
-#: Opcodes/gab/gab.c:209
+#: Opcodes/gab/gab.c:211
 msgid "tabw_i off end"
 msgstr ""
 
-#: Opcodes/gab/gab.c:247
+#: Opcodes/gab/gab.c:249
 msgid "tab_init: incorrect table number"
 msgstr ""
 
-#: Opcodes/gab/gab.c:316
+#: Opcodes/gab/gab.c:318
 msgid "printi parameter was not a \"quoted string\""
 msgstr ""
 
-#: Opcodes/gab/gab.c:423
+#: Opcodes/gab/gab.c:425
 msgid "adsynt2: wavetable not found!"
 msgstr ""
 
-#: Opcodes/gab/gab.c:435
+#: Opcodes/gab/gab.c:437
 msgid "adsynt2: freqtable not found!"
 msgstr ""
 
-#: Opcodes/gab/gab.c:440
+#: Opcodes/gab/gab.c:442
 msgid "adsynt2: partial count is greater than freqtable size!"
 msgstr ""
 
-#: Opcodes/gab/gab.c:449
+#: Opcodes/gab/gab.c:451
 msgid "adsynt2: amptable not found!"
 msgstr ""
 
-#: Opcodes/gab/gab.c:454
+#: Opcodes/gab/gab.c:456
 msgid "adsynt2: partial count is greater than amptable size!"
 msgstr ""
 
-#: Opcodes/gab/gab.c:499
+#: Opcodes/gab/gab.c:501
 msgid "adsynt2: not initialised"
 msgstr ""
 
-#: Opcodes/gab/gab.c:741
+#: Opcodes/gab/gab.c:743
 msgid "max_k: invalid imaxflag value"
 msgstr ""
 
-#: Opcodes/gab/hvs.c:68
+#: Opcodes/gab/hvs.c:70
 msgid "hvs1: a line segment must be delimited by 2 points at least"
 msgstr ""
 
-#: Opcodes/gab/hvs.c:150
+#: Opcodes/gab/hvs.c:152
 msgid "hvs2: a square area must be delimited by 2 lines at least"
 msgstr ""
 
-#: Opcodes/gab/hvs.c:246
+#: Opcodes/gab/hvs.c:248
 msgid "hvs3: a square area must be delimited by 2 lines at least"
 msgstr ""
 
-#: Opcodes/gab/hvs.c:389
+#: Opcodes/gab/hvs.c:390
 msgid "vphaseseg: the first function is invalid or missing"
 msgstr ""
 
-#: Opcodes/gab/hvs.c:396
+#: Opcodes/gab/hvs.c:398 Opcodes/gab/vectorial.c:2301
 msgid "vphaseseg: invalid num. of elements"
 msgstr ""
 
-#: Opcodes/gab/hvs.c:414
+#: Opcodes/gab/hvs.c:416
 msgid "vphaseseg: function invalid or missing"
 msgstr ""
 
-#: Opcodes/gab/newgabopc.c:39 Opcodes/gab/newgabopc.c:54
+#: Opcodes/gab/newgabopc.c:40 Opcodes/gab/newgabopc.c:55
 msgid "vtable1: incorrect table number"
 msgstr ""
 
-#: Opcodes/gab/newgabopc.c:359
+#: Opcodes/gab/newgabopc.c:241 Opcodes/gab/newgabopc.c:296
+msgid "copyTabElems: incorrect destination table number"
+msgstr ""
+
+#: Opcodes/gab/newgabopc.c:246 Opcodes/gab/newgabopc.c:301
+msgid ""
+"copyTabElems: destination table too short or number of elements to copy too "
+"big"
+msgstr ""
+
+#: Opcodes/gab/newgabopc.c:252 Opcodes/gab/newgabopc.c:306
+msgid "copyTabElems: incorrect source table number"
+msgstr ""
+
+#: Opcodes/gab/newgabopc.c:257 Opcodes/gab/newgabopc.c:310
+msgid ""
+"copyTabElems: source table size less than the number of elements to copy"
+msgstr ""
+
+#: Opcodes/gab/newgabopc.c:273 Opcodes/gab/newgabopc.c:318
+msgid "copyTabElems: source table too short"
+msgstr ""
+
+#: Opcodes/gab/newgabopc.c:276 Opcodes/gab/newgabopc.c:321
+msgid "copyTabElems: destination table too short"
+msgstr ""
+
+#: Opcodes/gab/newgabopc.c:347
+msgid "inrg: audio input is not enabled"
+msgstr ""
+
+#: Opcodes/gab/newgabopc.c:362
 msgid "inrg: channel number cannot be < 1 (1 is the first channel)"
 msgstr "inrg: channel number can't be < 1 (1 is the first channel)"
 
-#: Opcodes/gab/newgabopc.c:400
+#: Opcodes/gab/newgabopc.c:403
 msgid "outrg: channel number cannot be < 1 (1 is the first channel)"
 msgstr "outrg: channel number can't be < 1 (1 is the first channel)"
 
-#: Opcodes/gab/newgabopc.c:439 Opcodes/gab/newgabopc.c:671
+#: Opcodes/gab/newgabopc.c:440 Opcodes/gab/newgabopc.c:574
+#: Opcodes/gab/newgabopc.c:672
 msgid "invalid function"
 msgstr ""
 
-#: Opcodes/gab/newgabopc.c:442
+#: Opcodes/gab/newgabopc.c:443
 msgid "lposc: no sample rate stored in function; assuming=sr\n"
 msgstr ""
 
-#: Opcodes/gab/newgabopc.c:673
+#: Opcodes/gab/newgabopc.c:577
+msgid "lposcil: no sample rate stored in function assuming=sr\n"
+msgstr ""
+
+#: Opcodes/gab/newgabopc.c:674
 msgid "lposcil: no sample rate stored in function; assuming=sr\n"
 msgstr ""
 
-#: Opcodes/gab/sliderTable.c:45 Opcodes/gab/sliderTable.c:254
+#: Opcodes/gab/sliderTable.c:47 Opcodes/gab/sliderTable.c:256
 #: Opcodes/midiops3.c:44 Opcodes/midiops3.c:146 Opcodes/midiops3.c:259
 #: Opcodes/midiops3.c:317 Opcodes/midiops3.c:413
 msgid "illegal channel"
 msgstr ""
 
-#: Opcodes/gab/sliderTable.c:65 Opcodes/gab/sliderTable.c:277
+#: Opcodes/gab/sliderTable.c:67 Opcodes/gab/sliderTable.c:280
 #: Opcodes/midiops3.c:58 Opcodes/midiops3.c:162 Opcodes/midiops3.c:273
 #, c-format
 msgid "illegal control number at position n.%d"
 msgstr ""
 
-#: Opcodes/gab/sliderTable.c:74
+#: Opcodes/gab/sliderTable.c:76
 #, c-format
 msgid ""
 "sliderXtable: illegal initvalue at position %d.  When using table indexing, "
 "the init range is 0 to 1"
 msgstr ""
 
-#: Opcodes/gab/sliderTable.c:84 Opcodes/gab/sliderTable.c:284
-#: Opcodes/gab/sliderTable.c:509 Opcodes/midiops3.c:64 Opcodes/midiops3.c:168
+#: Opcodes/gab/sliderTable.c:86 Opcodes/gab/sliderTable.c:287
+#: Opcodes/gab/sliderTable.c:513 Opcodes/midiops3.c:64 Opcodes/midiops3.c:168
 #: Opcodes/midiops3.c:347
 #, c-format
 msgid "illegal initvalue at position n.%d"
 msgstr ""
 
-#: Opcodes/gab/sliderTable.c:96 Opcodes/gab/sliderTable.c:296
+#: Opcodes/gab/sliderTable.c:98 Opcodes/gab/sliderTable.c:299
 msgid "sliderXtable: zero is illegal in exponential operations"
 msgstr ""
 
-#: Opcodes/gab/sliderTable.c:312
+#: Opcodes/gab/sliderTable.c:315
 #, c-format
 msgid ""
 "sliderXtable: illegal initvalue at position %d. When using table indexing, "
 "the init range is 0 to 1"
 msgstr ""
 
-#: Opcodes/gab/sliderTable.c:565 Opcodes/midiops2.c:321 Opcodes/midiops2.c:359
+#: Opcodes/gab/sliderTable.c:569 Opcodes/midiops2.c:321 Opcodes/midiops2.c:359
 #: Opcodes/midiops2.c:391 Opcodes/midiops2.c:440 Opcodes/midiops2.c:475
 #: Opcodes/midiops2.c:517 Opcodes/midiops2.c:532 Opcodes/midiops2.c:551
 msgid "illegal midi channel"
 msgstr ""
 
-#: Opcodes/gab/tabmorph.c:42
+#: Opcodes/gab/tabmorph.c:43
 msgid "tabmorph: invalid table number"
 msgstr ""
 
-#: Opcodes/gab/tabmorph.c:46
+#: Opcodes/gab/tabmorph.c:47
 msgid "tabmorph: all tables must have the same length!"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:33
+#: Opcodes/gab/vectorial.c:35
 msgid "mtablei: incorrect table number"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:63 Opcodes/gab/vectorial.c:83
-#: Opcodes/gab/vectorial.c:133 Opcodes/gab/vectorial.c:200
+#: Opcodes/gab/vectorial.c:65 Opcodes/gab/vectorial.c:85
+#: Opcodes/gab/vectorial.c:135 Opcodes/gab/vectorial.c:202
 msgid "mtable: incorrect table number"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:185
+#: Opcodes/gab/vectorial.c:187
 msgid "mtabi: incorrect table number"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:252
+#: Opcodes/gab/vectorial.c:254
 msgid "mtablewi: incorrect table number"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:268 Opcodes/gab/vectorial.c:288
-#: Opcodes/gab/vectorial.c:317 Opcodes/gab/vectorial.c:362
-#: Opcodes/gab/vectorial.c:406
+#: Opcodes/gab/vectorial.c:270 Opcodes/gab/vectorial.c:290
+#: Opcodes/gab/vectorial.c:319 Opcodes/gab/vectorial.c:364
+#: Opcodes/gab/vectorial.c:408
 msgid "mtabw: incorrect table number"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:348
+#: Opcodes/gab/vectorial.c:350
 msgid "mtabwi: incorrect table number"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:380
+#: Opcodes/gab/vectorial.c:382
 msgid "mtablew: incorrect table number"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:454 Opcodes/gab/vectorial.c:513
+#: Opcodes/gab/vectorial.c:457 Opcodes/gab/vectorial.c:516
 #, c-format
 msgid "vadd_i: invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:470
+#: Opcodes/gab/vectorial.c:473
 msgid "vadd_i: ifn length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:497
+#: Opcodes/gab/vectorial.c:500
 msgid "vadd: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:529
+#: Opcodes/gab/vectorial.c:532
 msgid "vmult_i: ifn length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:556
+#: Opcodes/gab/vectorial.c:559
 msgid "vmult: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:572
+#: Opcodes/gab/vectorial.c:575
 #, c-format
 msgid "vpow_i: invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:589
+#: Opcodes/gab/vectorial.c:592
 msgid "vpow_i: ifn length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:617
+#: Opcodes/gab/vectorial.c:620
 msgid "vpow: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:633
+#: Opcodes/gab/vectorial.c:636
 #, c-format
 msgid "vexp_i: invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:649
+#: Opcodes/gab/vectorial.c:652
 msgid "vexp_i: ifn length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:676
+#: Opcodes/gab/vectorial.c:679
 msgid "vexp: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:694
+#: Opcodes/gab/vectorial.c:697
 #, c-format
 msgid "vectorsop: ifn1 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:699
+#: Opcodes/gab/vectorial.c:702
 #, c-format
 msgid "vectorsop: ifn2 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:738
+#: Opcodes/gab/vectorial.c:742
 msgid "vcopy: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:756
+#: Opcodes/gab/vectorial.c:760
 msgid "vcopy: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:783
+#: Opcodes/gab/vectorial.c:787
 #, c-format
 msgid "vcopy_i: ifn1 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:788
+#: Opcodes/gab/vectorial.c:792
 #, c-format
 msgid "vcopy_i: ifn2 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:810
+#: Opcodes/gab/vectorial.c:814
 msgid "vcopy_i: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:827
+#: Opcodes/gab/vectorial.c:831
 msgid "vcopy_i: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:866
+#: Opcodes/gab/vectorial.c:870
 msgid "vaddv: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:885
+#: Opcodes/gab/vectorial.c:889
 msgid "vaddv: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:911
+#: Opcodes/gab/vectorial.c:915
 #, c-format
 msgid "vaddv_i: ifn1 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:916
+#: Opcodes/gab/vectorial.c:920
 #, c-format
 msgid "vaddv_i: ifn2 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:938
+#: Opcodes/gab/vectorial.c:942
 msgid "vaddv_i: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:956
+#: Opcodes/gab/vectorial.c:960
 msgid "vaddv_i: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:987
+#: Opcodes/gab/vectorial.c:991
 msgid "vsubv: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1006
+#: Opcodes/gab/vectorial.c:1010
 msgid "vsubv: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1033
+#: Opcodes/gab/vectorial.c:1037
 #, c-format
 msgid "vsubv_i: ifn1 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1038
+#: Opcodes/gab/vectorial.c:1042
 #, c-format
 msgid "vsubv_i: ifn2 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1060
+#: Opcodes/gab/vectorial.c:1064
 msgid "vsubv_i: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1078
+#: Opcodes/gab/vectorial.c:1082
 msgid "vsubv_i: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1115
+#: Opcodes/gab/vectorial.c:1119
 msgid "vmultv: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1134
+#: Opcodes/gab/vectorial.c:1138
 msgid "vmultv: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1161
+#: Opcodes/gab/vectorial.c:1165
 #, c-format
 msgid "vmultv_i: ifn1 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1166
+#: Opcodes/gab/vectorial.c:1170
 #, c-format
 msgid "vmultv_i: ifn2 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1188
+#: Opcodes/gab/vectorial.c:1192
 msgid "vmultv_i: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1205
+#: Opcodes/gab/vectorial.c:1209
 msgid "vmultv_i: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1242
+#: Opcodes/gab/vectorial.c:1246
 msgid "vdivv: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1261
+#: Opcodes/gab/vectorial.c:1265
 msgid "vdivv: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1288
+#: Opcodes/gab/vectorial.c:1292
 #, c-format
 msgid "vdivv_i: ifn1 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1293
+#: Opcodes/gab/vectorial.c:1297
 #, c-format
 msgid "vdivv_i: ifn2 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1315
+#: Opcodes/gab/vectorial.c:1319
 msgid "vdivv_i: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1333
+#: Opcodes/gab/vectorial.c:1337
 msgid "vdivv_i: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1370
+#: Opcodes/gab/vectorial.c:1374
 msgid "vpowv: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1389
+#: Opcodes/gab/vectorial.c:1393
 msgid "vpowv: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1416
+#: Opcodes/gab/vectorial.c:1420
 #, c-format
 msgid "vpowv_i: ifn1 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1421
+#: Opcodes/gab/vectorial.c:1425
 #, c-format
 msgid "vpowv_i: ifn2 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1443
+#: Opcodes/gab/vectorial.c:1447
 msgid "vpowv_i: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1460
+#: Opcodes/gab/vectorial.c:1464
 msgid "vpowv_i: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1497
+#: Opcodes/gab/vectorial.c:1501
 msgid "vexpv: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1516
+#: Opcodes/gab/vectorial.c:1520
 msgid "vexpv: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1543
+#: Opcodes/gab/vectorial.c:1547
 #, c-format
 msgid "vexpv_i: ifn1 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1548
+#: Opcodes/gab/vectorial.c:1552
 #, c-format
 msgid "vexpv_i: ifn2 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1570
+#: Opcodes/gab/vectorial.c:1574
 msgid "vexpv_i: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1588
+#: Opcodes/gab/vectorial.c:1592
 msgid "vexpv_i: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1625
+#: Opcodes/gab/vectorial.c:1629
 msgid "vmap: Error: ifn1 and ifn2 can not be the same"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1630
+#: Opcodes/gab/vectorial.c:1634
 #, c-format
 msgid "vmap: ifn1 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1635
+#: Opcodes/gab/vectorial.c:1639
 #, c-format
 msgid "vmap: ifn2 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1657
+#: Opcodes/gab/vectorial.c:1661
 msgid "vmap: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1674
+#: Opcodes/gab/vectorial.c:1678
 msgid "vmap: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1870
+#: Opcodes/gab/vectorial.c:1698
+msgid "vectorop: invalid num of elements"
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:1727
+msgid "vport: invalid table length or num of elements"
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:1730
+msgid "vport: invalid table"
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:1735
+msgid "vport: invalid init table length or num of elements"
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:1738
+msgid "vport: invalid init table"
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:1875
 #, c-format
 msgid "vrandh: Seeding from current time %lu\n"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1968
+#: Opcodes/gab/vectorial.c:1888
+msgid "vrandh: Invalid table."
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:1891
+msgid "vrandh: idstoffset is greater than table length."
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:1896
+msgid "randh: Table length exceeded, last elements discarded."
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:1975
 #, c-format
 msgid "vrandi: Seeding from current time %lu\n"
 msgstr ""
 
-#: Opcodes/grain4.c:57
+#: Opcodes/gab/vectorial.c:1987
+msgid "vrandi: Invalid table."
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:1990
+msgid "vrandi: idstoffset is greater thantable length."
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:1995
+msgid "vrandi: Table length exceeded, last elements discarded."
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:2077 Opcodes/gab/vectorial.c:2084
+#: Opcodes/gab/vectorial.c:2091
+msgid "vecdelay: invalid num of elements"
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:2079
+msgid "vecdly: invalid output table"
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:2086
+msgid "vecdly: invalid input table"
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:2093
+msgid "vecdly: invalid delay table"
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:2138
+msgid "vecdly: not initialised"
+msgstr "vecdly: not initialized"
+
+#: Opcodes/gab/vectorial.c:2181
+msgid "vlinseg/vexpseg: invalid num. of elements"
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:2223 Opcodes/vpvoc.c:118
+msgid "tableseg: not initialised"
+msgstr "tableseg: not initialized"
+
+#: Opcodes/gab/vectorial.c:2253 Opcodes/vpvoc.c:146
+msgid "tablexseg: not initialised"
+msgstr "tablexseg: not initialized"
+
+#: Opcodes/gab/vectorial.c:2406
+#
+msgid "vdelayk: not initialised"
+msgstr "vdelayk: not initialized"
+
+#: Opcodes/gab/vectorial.c:2439 Opcodes/gab/vectorial.c:2445
+msgid "cella: invalid num of elements"
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:2441
+msgid "cella: invalid output table"
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:2448
+msgid "cella: invalid initial state table"
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:2452
+msgid "cella: invalid rule table"
+msgstr ""
+
+#: Opcodes/grain4.c:59
 msgid "granule_set: Unable to find function table"
 msgstr ""
 
-#: Opcodes/grain4.c:67
+#: Opcodes/grain4.c:69
 msgid "granule_set: Unable to find function table for envelope"
 msgstr ""
 
-#: Opcodes/grain4.c:73
+#: Opcodes/grain4.c:75
 msgid "granule_set: Too many voices"
 msgstr ""
 
-#: Opcodes/grain4.c:76
+#: Opcodes/grain4.c:78
 msgid "granule_set: iratio must be greater then 0"
 msgstr ""
 
-#: Opcodes/grain4.c:80
+#: Opcodes/grain4.c:82
 msgid "granule_set: imode must be -1, 0 or +1"
 msgstr ""
 
-#: Opcodes/grain4.c:84
+#: Opcodes/grain4.c:86
 msgid "granule_set: Illegal ithd, must be greater than zero"
 msgstr ""
 
-#: Opcodes/grain4.c:89
+#: Opcodes/grain4.c:91
 msgid "granule_set: ipshift must be integer between 0 and 4"
 msgstr ""
 
-#: Opcodes/grain4.c:94
+#: Opcodes/grain4.c:96
 msgid "granule_set: Not enough voices for the number of pitches"
 msgstr ""
 
-#: Opcodes/grain4.c:101
+#: Opcodes/grain4.c:103
 msgid "granule_set: ipitch1 must be greater then zero"
 msgstr ""
 
-#: Opcodes/grain4.c:106
+#: Opcodes/grain4.c:108
 msgid "granule_set: ipitch2 must be greater then zero"
 msgstr ""
 
-#: Opcodes/grain4.c:111
+#: Opcodes/grain4.c:113
 msgid "granule_set: ipitch3 must be greater then zero"
 msgstr ""
 
-#: Opcodes/grain4.c:116
+#: Opcodes/grain4.c:118
 msgid "granule_set: ipitch4 must be greater then zero"
 msgstr ""
 
-#: Opcodes/grain4.c:121
+#: Opcodes/grain4.c:123
 msgid "granule_set: must be positive and less than function table length"
 msgstr ""
 
-#: Opcodes/grain4.c:125
+#: Opcodes/grain4.c:127
 msgid "granule_set: igskip_os must be greater then 0"
 msgstr ""
 
-#: Opcodes/grain4.c:134
+#: Opcodes/grain4.c:136
 msgid "granule_set: kgap must be greater then 0"
 msgstr ""
 
-#: Opcodes/grain4.c:138
+#: Opcodes/grain4.c:140
 #, c-format
 msgid "granule_set: igap_os must be 0%% to 100%%"
 msgstr ""
 
-#: Opcodes/grain4.c:142
+#: Opcodes/grain4.c:144
 msgid "granule_set: kgsize must be greater then 0"
 msgstr ""
 
-#: Opcodes/grain4.c:146
+#: Opcodes/grain4.c:148
 #, c-format
 msgid "granule_set: igsize_os must be 0%% to 100%%"
 msgstr ""
 
-#: Opcodes/grain4.c:152
+#: Opcodes/grain4.c:154
 msgid "granule_set: Illegal value of iatt and/or idec"
 msgstr ""
 
-#: Opcodes/grain4.c:236
+#: Opcodes/grain4.c:238
 msgid "granule_set: Illegal combination of igskip and ilength"
 msgstr ""
 
-#: Opcodes/grain4.c:243
+#: Opcodes/grain4.c:245
 #, c-format
 msgid ""
 "granule_set: WARNING * ilength may be too short * \n"
@@ -6637,7 +6520,7 @@ msgid ""
 "ilength is %f Sec, kgsize is %f Sec\n"
 msgstr ""
 
-#: Opcodes/grain4.c:418
+#: Opcodes/grain4.c:419
 msgid "grain4: not initialised"
 msgstr "grain4: not initialized"
 
@@ -6649,54 +6532,53 @@ msgstr ""
 msgid "grain: not initialised"
 msgstr "grain: not initialized"
 
-#: Opcodes/harmon.c:224
+#: Opcodes/harmon.c:226
 msgid "harm signal has positive lead\n"
 msgstr ""
 
-#: Opcodes/harmon.c:231
+#: Opcodes/harmon.c:233
 msgid "harm signal has negative lead\n"
 msgstr ""
 
-#: Opcodes/harmon.c:361
+#: Opcodes/harmon.c:363
 msgid "harmon234: out of range\n"
 msgstr ""
 
-#: Opcodes/hrtferX.c:79
+#: Opcodes/hrtferX.c:81
 #, c-format
 msgid ""
 "Orchestra sampling rate is not compatible with HRTF.\n"
 "Should be %d...exiting."
 msgstr ""
 
-#: Opcodes/hrtferX.c:87
+#: Opcodes/hrtferX.c:89
 msgid ""
 "\n"
 "Last argument must be the string 'HRTFcompact' ...correcting.\n"
 msgstr ""
 
-#: Opcodes/hrtferX.c:489
+#: Opcodes/hrtferX.c:494
 msgid "hrtfer: not initialised"
 msgstr "hrtfer: not initialized"
 
-#: Opcodes/hrtfopcodes.c:232
+#: Opcodes/hrtfopcodes.c:260 Opcodes/hrtfopcodes.c:1434
+#: Opcodes/hrtfearly.c:300 Opcodes/hrtfreverb.c:257
 #, c-format
 msgid ""
 "\n"
-"Orchestra sampling rate is not compatible with HRTF data files\n"
-"Should be %.0f, see Csound help for object\n"
+"\n"
+"WARNING!!:\n"
+"Orchestra SR not compatible with HRTF processing SR of: %.0f\n"
 "\n"
 msgstr ""
 
-#: Opcodes/hrtfopcodes.c:251 Opcodes/hrtfopcodes.c:275
-#: Opcodes/hrtfopcodes.c:298 Opcodes/hrtfopcodes.c:1257
-#: Opcodes/hrtfopcodes.c:1280 Opcodes/hrtfopcodes.c:1303
-#: Opcodes/hrtfopcodes.c:1854 Opcodes/hrtfopcodes.c:1876
-#: Opcodes/hrtfopcodes.c:1898
+#: Opcodes/hrtfopcodes.c:287 Opcodes/hrtfopcodes.c:1461
+#: Opcodes/hrtfopcodes.c:2071 Opcodes/hrtfearly.c:327 Opcodes/hrtfreverb.c:300
 msgid ""
 "\n"
 "\n"
 "\n"
-"cannot load left data file, exiting\n"
+"Cannot load left data file, exiting\n"
 "\n"
 msgstr ""
 "\n"
@@ -6705,16 +6587,13 @@ msgstr ""
 "can't load left data file, exiting\n"
 "\n"
 
-#: Opcodes/hrtfopcodes.c:259 Opcodes/hrtfopcodes.c:283
-#: Opcodes/hrtfopcodes.c:306 Opcodes/hrtfopcodes.c:1265
-#: Opcodes/hrtfopcodes.c:1288 Opcodes/hrtfopcodes.c:1311
-#: Opcodes/hrtfopcodes.c:1862 Opcodes/hrtfopcodes.c:1884
-#: Opcodes/hrtfopcodes.c:1906
+#: Opcodes/hrtfopcodes.c:294 Opcodes/hrtfopcodes.c:1468
+#: Opcodes/hrtfopcodes.c:2078 Opcodes/hrtfearly.c:334 Opcodes/hrtfreverb.c:306
 msgid ""
 "\n"
 "\n"
 "\n"
-"cannot load right data file, exiting\n"
+"Cannot load right data file, exiting\n"
 "\n"
 msgstr ""
 "\n"
@@ -6723,28 +6602,28 @@ msgstr ""
 "can't load right data file, exiting\n"
 "\n"
 
-#: Opcodes/hrtfopcodes.c:313 Opcodes/hrtfopcodes.c:1912
+#: Opcodes/hrtfopcodes.c:690 Opcodes/hrtfearly.c:1241
 msgid ""
 "\n"
-"\n"
-"\n"
-" Sampling rate not supported, exiting\n"
+"WARNING: fades are overlapping: this could lead to noise: reduce fade size "
+"or change trajectory\n"
 "\n"
 msgstr ""
 
-#: Opcodes/hrtfopcodes.c:600
+#: Opcodes/hrtfopcodes.c:2052
+#, c-format
 msgid ""
-"fades are overlapping: this could lead to noise: reduce fade size or change "
-"trajectory\n"
+"\n"
+"\n"
+"WARNING!!:\n"
+"Orchestra SR not compatiblewith HRTF processing SR of: %.0f\n"
 "\n"
 msgstr ""
 
-#: Opcodes/hrtfopcodes.c:1239 Opcodes/hrtfopcodes.c:1837
-#, c-format
+#: Opcodes/hrtfreverb.c:832
 msgid ""
-"Orchestra sampling rate is not compatible with HRTF data files\n"
-"Should be %.0f, see Csound help for object\n"
 "\n"
+"warning, approaching instability, fixed with a flat late reverb!"
 msgstr ""
 
 #: Opcodes/ifd.c:74
@@ -6770,10 +6649,9 @@ msgid "imageload: file %s is not in PNG format.\n"
 msgstr ""
 
 #: Opcodes/imageOpcodes.c:119 Opcodes/imageOpcodes.c:126
-#: Opcodes/imageOpcodes.c:134 Opcodes/imageOpcodes.c:165
-#: Opcodes/imageOpcodes.c:174 Opcodes/imageOpcodes.c:188
-#: Opcodes/imageOpcodes.c:291 Opcodes/imageOpcodes.c:298
-#: Opcodes/imageOpcodes.c:311
+#: Opcodes/imageOpcodes.c:165 Opcodes/imageOpcodes.c:174
+#: Opcodes/imageOpcodes.c:188 Opcodes/imageOpcodes.c:291
+#: Opcodes/imageOpcodes.c:298 Opcodes/imageOpcodes.c:311
 msgid "imageload: out of memory.\n"
 msgstr ""
 
@@ -6793,62 +6671,62 @@ msgid ""
 "Status: %d\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:543
+#: Opcodes/jacko.cpp:545
 #, c-format
 msgid "Created Jack client \"%s\" for Jack server \"%s\".\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:548
+#: Opcodes/jacko.cpp:551
 #, c-format
 msgid "Jack buffer size %d != Csound ksmps %d, exiting...\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:556
+#: Opcodes/jacko.cpp:559
 #, c-format
 msgid "Jack sampling rate %d != Csound sr %d, exiting...\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:567
+#: Opcodes/jacko.cpp:570
 #, c-format
 msgid "Activated Jack client \"%s\".\n"
 msgstr "Activated Jack client \"%s\".\n"
 
-#: Opcodes/jacko.cpp:571
+#: Opcodes/jacko.cpp:574
 #, c-format
 msgid "Failed to activate Jack client \"%s\": status %d.\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:586
+#: Opcodes/jacko.cpp:589
 msgid "BEGAN JackoState::close()...\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:622
+#: Opcodes/jacko.cpp:629
 msgid "ENDED JackoState::close().\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:876
+#: Opcodes/jacko.cpp:892
 #, c-format
 msgid "Failed to set Jack freewheeling mode to \"%s\": error %d.\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:878
+#: Opcodes/jacko.cpp:895
 #, c-format
 msgid "Set Jack freewheeling mode to \"%s\".\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:893
+#: Opcodes/jacko.cpp:911
 #, c-format
 msgid "Turned Jack connections \"%s\".\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:934 Opcodes/jacko.cpp:1034 Opcodes/jacko.cpp:1134
-#: Opcodes/jacko.cpp:1200
+#: Opcodes/jacko.cpp:955 Opcodes/jacko.cpp:1062 Opcodes/jacko.cpp:1169
+#: Opcodes/jacko.cpp:1241
 #, c-format
 msgid "Could not create Jack port \"%s\".\n"
 msgstr "Couldn't create Jack port \"%s\".\n"
 
-#: Opcodes/jacko.cpp:946 Opcodes/jacko.cpp:1046 Opcodes/jacko.cpp:1146
-#: Opcodes/jacko.cpp:1212
+#: Opcodes/jacko.cpp:969 Opcodes/jacko.cpp:1077 Opcodes/jacko.cpp:1184
+#: Opcodes/jacko.cpp:1255
 #, c-format
 msgid "Could not create Jack connection from \"%s\" to \"%s\": status %d.\n"
 msgstr "Couldn't create Jack connection from \"%s\" to \"%s\": status %d.\n"
@@ -6887,27 +6765,27 @@ msgstr ""
 msgid "lorisread cannot load %s"
 msgstr "lorisread can't load %s"
 
-#: Opcodes/loscilx.c:74 Opcodes/loscilx.c:178
+#: Opcodes/loscilx.c:76 Opcodes/loscilx.c:180
 #, c-format
 msgid "could not load '%s'"
 msgstr "couldn't load '%s'"
 
-#: Opcodes/loscilx.c:88 Opcodes/loscilx.c:258
+#: Opcodes/loscilx.c:90 Opcodes/loscilx.c:260
 #, c-format
 msgid "invalid loop mode: %d"
 msgstr ""
 
-#: Opcodes/loscilx.c:170
+#: Opcodes/loscilx.c:172
 msgid "loscilx: invalid number of output arguments"
 msgstr ""
 
-#: Opcodes/loscilx.c:190 Opcodes/loscilx.c:219 Opcodes/pvlock.c:94
-#: Opcodes/pvlock.c:296 Opcodes/pvsbasic.c:460
+#: Opcodes/loscilx.c:192 Opcodes/loscilx.c:221 Opcodes/pvlock.c:118
+#: Opcodes/pvlock.c:320 Opcodes/pvsbasic.c:460
 msgid ""
 "number of output arguments inconsistent with number of sound file channels"
 msgstr ""
 
-#: Opcodes/loscilx.c:665
+#: Opcodes/loscilx.c:667
 msgid "loscilx: not initialised"
 msgstr "loscilx: not initialized"
 
@@ -6915,11 +6793,11 @@ msgstr "loscilx: not initialized"
 msgid "illegal order num. (min 1, max 10)"
 msgstr ""
 
-#: Opcodes/mandolin.c:80
+#: Opcodes/mandolin.c:81
 msgid "No table for Mandolin"
 msgstr ""
 
-#: Opcodes/mandolin.c:90
+#: Opcodes/mandolin.c:91
 msgid "No base frequency for mandolin"
 msgstr ""
 
@@ -6950,27 +6828,27 @@ msgstr ""
 msgid "illegal lsb control number at position n.%d"
 msgstr ""
 
-#: Opcodes/modal4.c:45
+#: Opcodes/modal4.c:46
 msgid "No table for Modal4 case"
 msgstr ""
 
-#: Opcodes/modal4.c:245
+#: Opcodes/modal4.c:246
 msgid "No table for Marimba strike"
 msgstr ""
 
-#: Opcodes/modal4.c:284
+#: Opcodes/modal4.c:285
 msgid "striking three times here!!!\n"
 msgstr ""
 
-#: Opcodes/modal4.c:289
+#: Opcodes/modal4.c:290
 msgid "striking twice here!!\n"
 msgstr ""
 
-#: Opcodes/modal4.c:359
+#: Opcodes/modal4.c:360
 msgid "No table for Vibraphone strike"
 msgstr ""
 
-#: Opcodes/modal4.c:440
+#: Opcodes/modal4.c:441
 msgid "No table for Agogobell strike"
 msgstr ""
 
@@ -6978,12 +6856,12 @@ msgstr ""
 msgid "modmatrix: "
 msgstr ""
 
-#: Opcodes/mp3in.c:92 Opcodes/mp3in.c:230
+#: Opcodes/mp3in.c:93 Opcodes/mp3in.c:231
 #, c-format
 msgid "mp3in: %s: failed to open file"
 msgstr ""
 
-#: Opcodes/mp3in.c:139
+#: Opcodes/mp3in.c:140
 #, c-format
 msgid "mp3in: file sample rate (%d) != orchestra sr (%d)\n"
 msgstr ""
@@ -7216,9 +7094,9 @@ msgid "Time stamp is two values"
 msgstr ""
 
 #: Opcodes/OSC.c:240
-#, fuzzy, c-format
+#, c-format
 msgid "ftable %.2f does not exist"
-msgstr "ftable doesn't exist"
+msgstr "ftable %.2f doesn't exist"
 
 #: Opcodes/OSC.c:249
 #, c-format
@@ -7270,7 +7148,7 @@ msgstr ""
 msgid "No open glove"
 msgstr ""
 
-#: Opcodes/pan2.c:43
+#: Opcodes/pan2.c:45
 msgid "Unknown panning type"
 msgstr ""
 
@@ -7286,192 +7164,196 @@ msgstr ""
 msgid "partikkelsync: could not find opcode id"
 msgstr "partikkelsync: couldn't find opcode id"
 
-#: Opcodes/physmod.c:121
+#: Opcodes/physmod.c:122
 msgid "No table for Clarinet"
 msgstr ""
 
-#: Opcodes/physmod.c:129
+#: Opcodes/physmod.c:130
 msgid "No base frequency for clarinet -- assuming 50Hz\n"
 msgstr ""
 
-#: Opcodes/physmod.c:283
+#: Opcodes/physmod.c:284
 msgid "No table for Flute"
 msgstr ""
 
-#: Opcodes/physmod.c:291
+#: Opcodes/physmod.c:292
 msgid "No base frequency for flute -- assumed to be 50Hz\n"
 msgstr ""
 
-#: Opcodes/physmod.c:481
+#: Opcodes/physmod.c:482
 msgid "No table for wgbow vibrato"
 msgstr ""
 
-#: Opcodes/physmod.c:689
+#: Opcodes/physmod.c:490
+msgid "unknown lowest frequency for bowed string -- assuming 50Hz\n"
+msgstr ""
+
+#: Opcodes/physmod.c:690
 msgid "DlineA not initialised"
 msgstr "DlineA not initialized"
 
-#: Opcodes/physmod.c:756
+#: Opcodes/physmod.c:757
 msgid "No table for Brass"
 msgstr ""
 
-#: Opcodes/physmod.c:765
+#: Opcodes/physmod.c:766
 msgid "No base frequency for brass -- assumed to be 50Hz\n"
 msgstr ""
 
-#: Opcodes/physutil.c:137 Opcodes/physutil.c:312 Opcodes/physutil.c:324
-#: Opcodes/physutil.c:345
+#: Opcodes/physutil.c:138 Opcodes/physutil.c:313 Opcodes/physutil.c:325
+#: Opcodes/physutil.c:346
 msgid "negative rates not allowed!!, correcting\n"
 msgstr ""
 
-#: Opcodes/physutil.c:186
+#: Opcodes/physutil.c:187
 #, c-format
 msgid "Envelope: value=%f target=%f rate=%f state=%d\n"
 msgstr ""
 
-#: Opcodes/physutil.c:335
+#: Opcodes/physutil.c:336
 msgid "Sustain level out of range!!, correcting\n"
 msgstr ""
 
-#: Opcodes/physutil.c:356 Opcodes/physutil.c:366 Opcodes/physutil.c:376
+#: Opcodes/physutil.c:357 Opcodes/physutil.c:367 Opcodes/physutil.c:377
 msgid "negative times not allowed!!, correcting\n"
 msgstr ""
 
-#: Opcodes/pitch0.c:37
+#: Opcodes/pitch0.c:38
 #, c-format
 msgid "Muting new instances of instr %d\n"
 msgstr ""
 
-#: Opcodes/pitch0.c:40
+#: Opcodes/pitch0.c:41
 #, c-format
 msgid "Allowing instrument %d to start\n"
 msgstr ""
 
-#: Opcodes/pitch.c:84 Opcodes/spectra.c:78
+#: Opcodes/pitch.c:85 Opcodes/spectra.c:80
 msgid "illegal iocts"
 msgstr ""
 
-#: Opcodes/pitch.c:86 Opcodes/spectra.c:80
+#: Opcodes/pitch.c:87 Opcodes/spectra.c:82
 msgid "illegal ifrqs"
 msgstr ""
 
-#: Opcodes/pitch.c:180 Opcodes/spectra.c:584
+#: Opcodes/pitch.c:181 Opcodes/spectra.c:586
 msgid "illegal no of partials"
 msgstr ""
 
-#: Opcodes/pitch.c:205
+#: Opcodes/pitch.c:206
 msgid "per octave rolloff too steep"
 msgstr ""
 
-#: Opcodes/pitch.c:219 Opcodes/spectra.c:625
+#: Opcodes/pitch.c:220 Opcodes/spectra.c:627
 msgid "illegal lo-hi values"
 msgstr ""
 
-#: Opcodes/pitch.c:454
+#: Opcodes/pitch.c:455
 msgid "pitch: not initialised"
 msgstr "pitch: not initialized"
 
-#: Opcodes/pitch.c:463
+#: Opcodes/pitch.c:464
 msgid "Must have even number of arguments in mac\n"
 msgstr ""
 
-#: Opcodes/pitch.c:552
+#: Opcodes/pitch.c:553
 msgid "clockread: clock still running, call clockoff first"
 msgstr ""
 
-#: Opcodes/pitch.c:578
+#: Opcodes/pitch.c:579
 msgid "adsynt: wavetable not found!"
 msgstr ""
 
-#: Opcodes/pitch.c:591
+#: Opcodes/pitch.c:592
 msgid "adsynt: freqtable not found!"
 msgstr ""
 
-#: Opcodes/pitch.c:596
+#: Opcodes/pitch.c:597
 msgid "adsynt: partial count is greater than freqtable size!"
 msgstr ""
 
-#: Opcodes/pitch.c:604
+#: Opcodes/pitch.c:605
 msgid "adsynt: amptable not found!"
 msgstr ""
 
-#: Opcodes/pitch.c:609
+#: Opcodes/pitch.c:610
 msgid "adsynt: partial count is greater than amptable size!"
 msgstr ""
 
-#: Opcodes/pitch.c:640
+#: Opcodes/pitch.c:641
 msgid "adsynt: not initialised"
 msgstr "adsynt: not initialized"
 
-#: Opcodes/pitch.c:716
+#: Opcodes/pitch.c:717
 msgid "hsboscil: not initialised"
 msgstr "hsboscil: not initialized"
 
-#: Opcodes/pitch.c:799
+#: Opcodes/pitch.c:800
 msgid "pitchamdf: maxcps must be > mincps !"
 msgstr ""
 
-#: Opcodes/pitch.c:945
+#: Opcodes/pitch.c:946
 msgid "pitchamdf: not initialised"
 msgstr "pitchamdf: not initialized"
 
-#: Opcodes/pitch.c:1125 Opcodes/pitch.c:1152
+#: Opcodes/pitch.c:1126 Opcodes/pitch.c:1153
 msgid "phasorbnk: not initialised"
 msgstr "phasorbnk: not initialized"
 
-#: Opcodes/pitch.c:1214
+#: Opcodes/pitch.c:1215
 msgid "pinkish: Invalid method code"
 msgstr ""
 
-#: Opcodes/pitch.c:1225
+#: Opcodes/pitch.c:1226
 msgid "pinkish: Filter method requires a-rate (noise) input"
 msgstr ""
 
-#: Opcodes/pitch.c:1348
+#: Opcodes/pitch.c:1349
 #, c-format
 msgid ""
 "pinkish: Gardner method requires 4-%d bands. Default %ld substituted for "
 "%d.\n"
 msgstr ""
 
-#: Opcodes/pitch.c:1731
+#: Opcodes/pitch.c:1733
 msgid "Incorrect argument count in transeg"
 msgstr ""
 
-#: Opcodes/pitch.c:1782
+#: Opcodes/pitch.c:1784
 msgid "Incorrect argument count in transegb"
 msgstr ""
 
-#: Opcodes/pitch.c:1832 Opcodes/pitch.c:1971
+#: Opcodes/pitch.c:1834 Opcodes/pitch.c:1977
 msgid "Error: transeg not initialised (krate)\n"
 msgstr "Error: transeg not initialized (krate)\n"
 
-#: Opcodes/pitch.c:1867 Opcodes/pitch.c:2013
+#: Opcodes/pitch.c:1869 Opcodes/pitch.c:2027
 msgid "transeg: not initialised (arate)\n"
 msgstr "transeg: not initialized (arate)\n"
 
-#: Opcodes/pitch.c:1921
+#: Opcodes/pitch.c:1924
 msgid "Incorrect argument count in transegr"
 msgstr ""
 
-#: Opcodes/pitch.c:2269
+#: Opcodes/pitch.c:2294
 msgid "median: not initialised (arate)\n"
 msgstr "median: not initialized (arate)\n"
 
-#: Opcodes/pitch.c:2273 Opcodes/pitch.c:2321
+#: Opcodes/pitch.c:2298 Opcodes/pitch.c:2345
 #, c-format
 msgid "median: window (%d)larger than maximum(%d); truncated"
 msgstr ""
 
-#: Opcodes/pitch.c:2317
+#: Opcodes/pitch.c:2341
 msgid "median: not initialised (krate)\n"
 msgstr "median: not initialized (krate)\n"
 
-#: Opcodes/pitchtrack.c:369
+#: Opcodes/pitchtrack.c:370
 #, c-format
 msgid "ptrack: FFT size out of range; using %d\n"
 msgstr ""
 
-#: Opcodes/pitchtrack.c:382
+#: Opcodes/pitchtrack.c:383
 #, c-format
 msgid "ptrack: FFT size not a power of 2; using %d\n"
 msgstr ""
@@ -7489,7 +7371,7 @@ msgstr ""
 msgid "Error: %s, %s"
 msgstr ""
 
-#: Opcodes/ppp.c:20 Opcodes/pvlock.c:454 Opcodes/pvsband.c:46
+#: Opcodes/ppp.c:20 Opcodes/pvlock.c:478 Opcodes/pvsband.c:46
 #: Opcodes/pvsbasic.c:575 Opcodes/pvsbasic.c:880 Opcodes/pvsbasic.c:1080
 #: Opcodes/pvsbasic.c:1180 Opcodes/pvsbasic.c:1395 Opcodes/pvsbasic.c:1593
 #: Opcodes/pvsbasic.c:1756 Opcodes/pvslock.c:20
@@ -7508,62 +7390,62 @@ msgstr ""
 msgid "psynth: function table not found\n"
 msgstr ""
 
-#: Opcodes/psynth.c:569 Opcodes/psynth.c:662
+#: Opcodes/psynth.c:567 Opcodes/psynth.c:660
 msgid "Input not in TRACKS format\n"
 msgstr ""
 
-#: Opcodes/psynth.c:767
+#: Opcodes/psynth.c:765
 msgid "trsplit: input not in TRACKS format\n"
 msgstr ""
 
-#: Opcodes/psynth.c:863 Opcodes/psynth.c:1027
+#: Opcodes/psynth.c:861 Opcodes/psynth.c:1023
 msgid "trmix: first input not in TRACKS format\n"
 msgstr ""
 
-#: Opcodes/psynth.c:868 Opcodes/psynth.c:1032
+#: Opcodes/psynth.c:866 Opcodes/psynth.c:1028
 msgid "trmix: second input not in TRACKS format\n"
 msgstr ""
 
-#: Opcodes/psynth.c:943
+#: Opcodes/psynth.c:939
 msgid "trfil: input not in TRACKS format\n"
 msgstr ""
 
-#: Opcodes/psynth.c:948
+#: Opcodes/psynth.c:944
 msgid "trfil: could not find function table\n"
 msgstr "trfil: couldn't find function table\n"
 
-#: Opcodes/psynth.c:1135
+#: Opcodes/psynth.c:1131
 msgid "binit: first input not in TRACKS format\n"
 msgstr ""
 
-#: Opcodes/pvadd.c:153
+#: Opcodes/pvadd.c:150
 msgid "PVADD ktimpnt truncated to last frame"
 msgstr ""
 
-#: Opcodes/pvadd.c:191
+#: Opcodes/pvadd.c:188
 msgid "pvadd: not initialised"
 msgstr "pvadd: not initialized"
 
-#: Opcodes/pvadd.c:193
+#: Opcodes/pvadd.c:190
 msgid "PVADD timpnt < 0"
 msgstr ""
 
-#: Opcodes/pvadd.c:201
+#: Opcodes/pvadd.c:198
 #, c-format
 msgid "PVADD cannot load %s"
 msgstr "PVADD can't load %s"
 
-#: Opcodes/pvadd.c:205 Opcodes/ugens8.c:223
+#: Opcodes/pvadd.c:202 Opcodes/ugens8.c:223
 #, c-format
 msgid "pvoc-ex file %s: FFT size %d too large for Csound"
 msgstr ""
 
-#: Opcodes/pvadd.c:210
+#: Opcodes/pvadd.c:207
 #, c-format
 msgid "PV frame %ld seems too small in %s"
 msgstr ""
 
-#: Opcodes/pvadd.c:215 Opcodes/pvread.c:115 Opcodes/ugens8.c:229
+#: Opcodes/pvadd.c:212 Opcodes/pvread.c:115 Opcodes/ugens8.c:229
 #, c-format
 msgid "pvoc-ex file %s is not mono"
 msgstr ""
@@ -7573,97 +7455,97 @@ msgstr ""
 msgid "PVBUFREAD cannot load %s"
 msgstr "PVBUFREAD can't load %s"
 
-#: Opcodes/pvinterp.c:76 Opcodes/vpvoc.c:206
+#: Opcodes/pvinterp.c:76 Opcodes/vpvoc.c:207
 #, c-format
 msgid "PVOC frame %ld bigger than %ld in %s"
 msgstr ""
 
-#: Opcodes/pvinterp.c:81 Opcodes/vpvoc.c:211
+#: Opcodes/pvinterp.c:81 Opcodes/vpvoc.c:212
 #, c-format
 msgid "PVOC frame %ld seems too small in %s"
 msgstr ""
 
-#: Opcodes/pvinterp.c:85 Opcodes/pvinterp.c:184 Opcodes/pvinterp.c:356
-#: Opcodes/vpvoc.c:215
+#: Opcodes/pvinterp.c:85 Opcodes/pvinterp.c:183 Opcodes/pvinterp.c:354
+#: Opcodes/vpvoc.c:216
 #, c-format
 msgid "%d chans (not 1) in PVOC file %s"
 msgstr ""
 
-#: Opcodes/pvinterp.c:101 Opcodes/pvinterp.c:212 Opcodes/pvinterp.c:382
+#: Opcodes/pvinterp.c:100 Opcodes/pvinterp.c:210 Opcodes/pvinterp.c:379
 #: Opcodes/ugens8.c:95 Opcodes/vpvoc.c:244
 #, c-format
 msgid "ksmps of %d needs wdw of %d, max is %d for pv %s"
 msgstr ""
 
-#: Opcodes/pvinterp.c:122 Opcodes/pvinterp.c:256 Opcodes/pvinterp.c:431
+#: Opcodes/pvinterp.c:121 Opcodes/pvinterp.c:254 Opcodes/pvinterp.c:428
 #: Opcodes/pvread.c:95 Opcodes/ugens8.c:156 Opcodes/vpvoc.c:297
 msgid "PVOC ktimpnt truncated to last frame"
 msgstr ""
 
-#: Opcodes/pvinterp.c:130
+#: Opcodes/pvinterp.c:129
 msgid "pvbufread: not initialised"
 msgstr "pvbufread: not initialized"
 
-#: Opcodes/pvinterp.c:132 Opcodes/pvinterp.c:306 Opcodes/pvinterp.c:492
+#: Opcodes/pvinterp.c:131 Opcodes/pvinterp.c:304 Opcodes/pvinterp.c:489
 #: Opcodes/pvread.c:103 Opcodes/ugens8.c:206 Opcodes/vpvoc.c:361
 msgid "PVOC timpnt < 0"
 msgstr ""
 
-#: Opcodes/pvinterp.c:149
+#: Opcodes/pvinterp.c:148
 msgid "pvinterp: associated pvbufread not found"
 msgstr ""
 
-#: Opcodes/pvinterp.c:166
+#: Opcodes/pvinterp.c:165
 #, c-format
 msgid "PVINTERP cannot load %s"
 msgstr "PVINTERP can't load %s"
 
-#: Opcodes/pvinterp.c:179
+#: Opcodes/pvinterp.c:178
 #, c-format
 msgid "pvinterp: %s: frame size %d does not match pvbufread frame size %d\n"
 msgstr "pvinterp: %s: frame size %d doesn't match pvbufread frame size %d\n"
 
-#: Opcodes/pvinterp.c:300
+#: Opcodes/pvinterp.c:298
 msgid "pvinterp: not initialised"
 msgstr "pvinterp: not initialized"
 
-#: Opcodes/pvinterp.c:302 Opcodes/pvinterp.c:488 Opcodes/ugens8.c:202
+#: Opcodes/pvinterp.c:300 Opcodes/pvinterp.c:485 Opcodes/ugens8.c:202
 #: Opcodes/vpvoc.c:357
 msgid "PVOC transpose too low"
 msgstr ""
 
-#: Opcodes/pvinterp.c:304 Opcodes/pvinterp.c:490 Opcodes/ugens8.c:204
+#: Opcodes/pvinterp.c:302 Opcodes/pvinterp.c:487 Opcodes/ugens8.c:204
 #: Opcodes/vpvoc.c:359
 msgid "PVOC transpose too high"
 msgstr ""
 
-#: Opcodes/pvinterp.c:323
+#: Opcodes/pvinterp.c:321
 msgid "pvcross: associated pvbufread not found"
 msgstr ""
 
-#: Opcodes/pvinterp.c:339
+#: Opcodes/pvinterp.c:337
 #, c-format
 msgid "PVCROSS cannot load %s"
 msgstr "PVCROSS can't load %s"
 
-#: Opcodes/pvinterp.c:351
+#: Opcodes/pvinterp.c:349
 #, c-format
 msgid "pvcross: %s: frame size %d does not match pvbufread frame size %d\n"
 msgstr "pvcross: %s: frame size %d doesn't match pvbufread frame size %d\n"
 
-#: Opcodes/pvinterp.c:454 Opcodes/vpvoc.c:322
+#: Opcodes/pvinterp.c:451 Opcodes/vpvoc.c:322
 msgid "PVOC debug: one frame gets through\n"
 msgstr ""
 
-#: Opcodes/pvinterp.c:486
+#: Opcodes/pvinterp.c:483
 msgid "pvcross: not initialised"
 msgstr "pvcross: not initialized"
 
-#: Opcodes/pvlock.c:35 Opcodes/pvsbasic.c:380
+#: Opcodes/pvlock.c:59 Opcodes/pvsbasic.c:380
 msgid "invalid number of output arguments"
 msgstr ""
 
-#: Opcodes/pvlock.c:466
+#: Opcodes/pvlock.c:490
 msgid "pvsfreeze: signal format must be amp-freq."
 msgstr ""
 
@@ -7770,29 +7652,33 @@ msgstr "pvstencil: not initialized"
 msgid "pvs2tab: signal format must be amp-phase or amp-freq."
 msgstr ""
 
-#: Opcodes/pvsbasic.c:2151 Opcodes/pvsbasic.c:2190 Opcodes/tabvars.c:53
-#: Opcodes/tabvars.c:89 Opcodes/tabvars.c:131 Opcodes/tabvars.c:176
-#: Opcodes/tabvars.c:178
-#, fuzzy
+#: Opcodes/pvsbasic.c:2151 Opcodes/pvsbasic.c:2189 Opcodes/tabvars.c:56
+#: Opcodes/tabvars.c:92 Opcodes/tabvars.c:134 Opcodes/tabvars.c:179
+#: Opcodes/tabvars.c:181
 msgid "t-variable not initialised"
-msgstr "table: not initialized"
+msgstr "t-variable not initialized"
 
-#: Opcodes/pvsbuffer.c:53 Opcodes/pvscent.c:164 Opcodes/pvsdemix.c:49
+#: Opcodes/pvsbuffer.c:56 Opcodes/pvscent.c:164 Opcodes/pvsdemix.c:49
 msgid "SDFT case not implemented yet"
 msgstr ""
 
-#: Opcodes/pvsbuffer.c:85
+#: Opcodes/pvsbuffer.c:89
 msgid "error... could not create global var for handle\n"
 msgstr "error... couldn't create global var for handle\n"
 
-#: Opcodes/pvsbuffer.c:143 Opcodes/pvsbuffer.c:190 Opcodes/pvsbuffer.c:258
+#: Opcodes/pvsbuffer.c:148 Opcodes/pvsbuffer.c:197 Opcodes/pvsbuffer.c:266
 msgid "error... could not read handle from global variable\n"
 msgstr "error... couldn't read handle from global variable\n"
 
-#: Opcodes/pvsbuffer.c:238 Opcodes/pvsbuffer.c:306
+#: Opcodes/pvsbuffer.c:246 Opcodes/pvsbuffer.c:316
 msgid "Invalid buffer handle"
 msgstr ""
 
+#: Opcodes/pvsbuffer.c:285 Opcodes/pvsbuffer.c:291
+#, c-format
+msgid "table length too small: needed %d, got %d\n"
+msgstr ""
+
 #: Opcodes/pvscent.c:42
 msgid "pvscent: format must be amp-phase or amp-freq.\n"
 msgstr ""
@@ -7981,48 +7867,48 @@ msgstr ""
 msgid "seqtim: incorrect table number"
 msgstr ""
 
-#: Opcodes/sfont.c:118
+#: Opcodes/sfont.c:121
 #, c-format
 msgid "sfload: cannot open SoundFont file \"%s\" (error %s)"
 msgstr "sfload: can't open SoundFont file \"%s\" (error %s)"
 
-#: Opcodes/sfont.c:123
+#: Opcodes/sfont.c:126
 msgid "Sfload: cannot use globals"
 msgstr "Sfload: can't use globals"
 
-#: Opcodes/sfont.c:153
+#: Opcodes/sfont.c:156
 msgid "sfload: could not open globals\n"
 msgstr "Sfload: can't open globals\n"
 
-#: Opcodes/sfont.c:170
+#: Opcodes/sfont.c:173
 msgid "Extending soundfonts"
 msgstr ""
 
-#: Opcodes/sfont.c:201
+#: Opcodes/sfont.c:204
 #, c-format
 msgid ""
 "\n"
 "Preset list of \"%s\"\n"
 msgstr ""
 
-#: Opcodes/sfont.c:204
+#: Opcodes/sfont.c:207
 #, c-format
 msgid "%3d) %-20s\tprog:%-3d bank:%d\n"
 msgstr ""
 
-#: Opcodes/sfont.c:226
+#: Opcodes/sfont.c:229
 #, c-format
 msgid ""
 "\n"
 "Assigning all Presets of \"%s\" starting from %d (preset handle number)\n"
 msgstr ""
 
-#: Opcodes/sfont.c:231
+#: Opcodes/sfont.c:234
 #, c-format
 msgid "%3d<--%-20s\t(prog:%-3d bank:%d)\n"
 msgstr ""
 
-#: Opcodes/sfont.c:238
+#: Opcodes/sfont.c:241
 #, c-format
 msgid ""
 "\n"
@@ -8030,19 +7916,19 @@ msgid ""
 "\n"
 msgstr ""
 
-#: Opcodes/sfont.c:251
+#: Opcodes/sfont.c:254
 #, c-format
 msgid ""
 "\n"
 "Instrument list of \"%s\"\n"
 msgstr ""
 
-#: Opcodes/sfont.c:268
+#: Opcodes/sfont.c:271
 #, c-format
 msgid "sfpreset: preset handle too big (%d), max: %d"
 msgstr ""
 
-#: Opcodes/sfont.c:284
+#: Opcodes/sfont.c:287
 #, c-format
 msgid ""
 "sfpreset: cannot find any preset having prog number %d and bank number %d in "
@@ -8051,19 +7937,19 @@ msgstr ""
 "sfpreset: can't find any preset having prog number %d and bank number %d in "
 "SoundFont file \"%s\""
 
-#: Opcodes/sfont.c:306 Opcodes/sfont.c:2189
+#: Opcodes/sfont.c:309 Opcodes/sfont.c:2192
 msgid "sfplay: invalid or out-of-range preset number"
 msgstr ""
 
-#: Opcodes/sfont.c:633
+#: Opcodes/sfont.c:636
 msgid "sfplaym: invalid or out-of-range preset number"
 msgstr ""
 
-#: Opcodes/sfont.c:888 Opcodes/sfont.c:1150
+#: Opcodes/sfont.c:891 Opcodes/sfont.c:1153
 msgid "sfinstr: instrument out of range"
 msgstr ""
 
-#: Opcodes/sfont.c:1598 Opcodes/sfont.c:1835
+#: Opcodes/sfont.c:1601 Opcodes/sfont.c:1838
 #, c-format
 msgid ""
 "SoundFont file \"%s\" contains ROM samples !\n"
@@ -8071,19 +7957,19 @@ msgid ""
 "Session aborted !"
 msgstr ""
 
-#: Opcodes/sfont.c:1987 Opcodes/sfont.c:1993
+#: Opcodes/sfont.c:1990 Opcodes/sfont.c:1996
 msgid "Sfont: cannot use globals/"
 msgstr "Sfont: can't use globals/"
 
-#: Opcodes/sfont.c:1996
+#: Opcodes/sfont.c:1999
 msgid "Sfont format not compatible"
 msgstr ""
 
-#: Opcodes/sfont.c:2534
+#: Opcodes/sfont.c:2537
 msgid "error... could not create sfont globals\n"
 msgstr "error... couldn't create sfont globals\n"
 
-#: Opcodes/shape.c:49
+#: Opcodes/shape.c:51
 msgid "powershape: ifullscale must be strictly positive"
 msgstr ""
 
@@ -8095,25 +7981,25 @@ msgstr ""
 msgid "ftgenonce error"
 msgstr ""
 
-#: Opcodes/singwave.c:85
+#: Opcodes/singwave.c:86
 msgid "No table for Modulatr"
 msgstr ""
 
-#: Opcodes/singwave.c:127
+#: Opcodes/singwave.c:128
 msgid "No table for Singwave"
 msgstr ""
 
-#: Opcodes/singwave.c:207
+#: Opcodes/singwave.c:208
 #, c-format
 msgid "SingWave: rate=%f sweepRate=%f mytime=%f\n"
 msgstr ""
 
-#: Opcodes/singwave.c:273
+#: Opcodes/singwave.c:280
 #, c-format
 msgid "Found Formant: %s (number %i)\n"
 msgstr ""
 
-#: Opcodes/singwave.c:395
+#: Opcodes/singwave.c:397
 #, c-format
 msgid "Setting Phoneme: %d %f\n"
 msgstr ""
@@ -8146,15 +8032,15 @@ msgstr ""
 msgid "pvsarp: not initialised\n"
 msgstr "pvsarp: not initialized\n"
 
-#: Opcodes/sndloop.c:995 Opcodes/sndloop.c:1092
+#: Opcodes/sndloop.c:995 Opcodes/sndloop.c:1091
 msgid "signal format must be amp-phase or amp-freq.\n"
 msgstr ""
 
-#: Opcodes/sndloop.c:1072
+#: Opcodes/sndloop.c:1071
 msgid "pvsvoc: not initialised\n"
 msgstr "pvsvoc: not initialized\n"
 
-#: Opcodes/sndloop.c:1123
+#: Opcodes/sndloop.c:1122
 msgid "pvsmorph: not initialised\n"
 msgstr "pvsmorph: not initialized\n"
 
@@ -8174,25 +8060,27 @@ msgstr ""
 msgid "sndwarpst: not initialised"
 msgstr "sndwarpst: not initialized"
 
-#: Opcodes/sockrecv.c:123 Opcodes/sockrecv.c:213 Opcodes/sockrecv.c:300
-#: Opcodes/socksend.c:75 Opcodes/socksend.c:133 Opcodes/socksend.c:190
-msgid "creating socket"
+#: Opcodes/sockrecv.c:117 Opcodes/sockrecv.c:215 Opcodes/sockrecv.c:314
+#: Opcodes/socksend.c:73 Opcodes/socksend.c:157 Opcodes/socksend.c:252
+#, c-format
+msgid "Winsock2 failed to start: %d"
 msgstr ""
 
-#: Opcodes/sockrecv.c:322
-msgid "connect failed"
+#: Opcodes/sockrecv.c:131 Opcodes/sockrecv.c:227 Opcodes/sockrecv.c:320
+#: Opcodes/socksend.c:86 Opcodes/socksend.c:171 Opcodes/socksend.c:259
+msgid "creating socket"
 msgstr ""
 
-#: Opcodes/sockrecv.c:335
-msgid "read from socket failed"
+#: Opcodes/sockrecv.c:347
+#, c-format
+msgid "connect failed (%d)"
 msgstr ""
 
-#: Opcodes/socksend.c:67 Opcodes/socksend.c:125
-#, c-format
-msgid "The buffersize must be <= %d samples to fit in a udp-packet."
+#: Opcodes/sockrecv.c:360
+msgid "read from socket failed"
 msgstr ""
 
-#: Opcodes/socksend.c:107 Opcodes/socksend.c:169
+#: Opcodes/socksend.c:126 Opcodes/socksend.c:215
 msgid "sendto failed"
 msgstr ""
 
@@ -8212,199 +8100,199 @@ msgstr "spat3d: not initialized"
 msgid "spat3di: not initialised"
 msgstr "spat3di: not initialized"
 
-#: Opcodes/spectra.c:82
+#: Opcodes/spectra.c:84
 msgid "illegal Q value"
 msgstr ""
 
-#: Opcodes/spectra.c:84
+#: Opcodes/spectra.c:86
 msgid "unknown dbout code"
 msgstr ""
 
-#: Opcodes/spectra.c:104
+#: Opcodes/spectra.c:106
 #, c-format
 msgid "spectrum: %s window, %s out, making tables ...\n"
 msgstr ""
 
-#: Opcodes/spectra.c:123
+#: Opcodes/spectra.c:125
 #, c-format
 msgid ""
 "\thigh cps %7.1f\n"
 "\t low cps %7.1f\n"
 msgstr ""
 
-#: Opcodes/spectra.c:138
+#: Opcodes/spectra.c:140
 #, c-format
 msgid "\tQ %4.1f uses a %d sample window each octdown\n"
 msgstr ""
 
-#: Opcodes/spectra.c:169
+#: Opcodes/spectra.c:171
 msgid "spectrum windowed sines:"
 msgstr ""
 
-#: Opcodes/spectra.c:187
+#: Opcodes/spectra.c:189
 #, c-format
 msgid "\t%d oct analysis window delay = %ld samples (%d msecs)\n"
 msgstr ""
 
-#: Opcodes/spectra.c:195
+#: Opcodes/spectra.c:197
 msgid "octdown buffers:"
 msgstr ""
 
-#: Opcodes/spectra.c:513 Opcodes/spectra.c:553
+#: Opcodes/spectra.c:515 Opcodes/spectra.c:555
 msgid "specdisp: not initialised"
 msgstr "specdisp: not initialized"
 
-#: Opcodes/spectra.c:523
+#: Opcodes/spectra.c:525
 #, c-format
 msgid "instr %d %s, dft (%s), %ld octaves (%d - %d Hz):"
 msgstr ""
 
-#: Opcodes/spectra.c:530
+#: Opcodes/spectra.c:532
 #, c-format
 msgid "instr %d %s, dft (%s), %ld octaves (%3.1f - %3.1f Hz):"
 msgstr ""
 
-#: Opcodes/spectra.c:611
+#: Opcodes/spectra.c:613
 msgid "per oct rolloff too steep"
 msgstr ""
 
-#: Opcodes/spectra.c:632
+#: Opcodes/spectra.c:634
 #, c-format
 msgid "specptrk: %d freqs, %d%s ptls at "
 msgstr ""
 
-#: Opcodes/spectra.c:633
+#: Opcodes/spectra.c:635
 msgid " odd"
 msgstr ""
 
-#: Opcodes/spectra.c:637
+#: Opcodes/spectra.c:639
 msgid ""
 "\n"
 "\t\trolloff vals:"
 msgstr ""
 
-#: Opcodes/spectra.c:660
+#: Opcodes/spectra.c:662
 #, c-format
 msgid ""
 "\n"
 "\tdbthresh %4.1f: X-corr %s threshon %4.1f, threshoff %4.1f\n"
 msgstr ""
 
-#: Opcodes/spectra.c:817
+#: Opcodes/spectra.c:819
 msgid "specptrk: not initialised"
 msgstr "specptrk: not initialized"
 
-#: Opcodes/spectra.c:849
+#: Opcodes/spectra.c:851
 msgid "specsum: not initialised"
 msgstr "specsum: not initialized"
 
-#: Opcodes/spectra.c:860
+#: Opcodes/spectra.c:862
 msgid "inputs have different sizes"
 msgstr ""
 
-#: Opcodes/spectra.c:863
+#: Opcodes/spectra.c:865
 msgid "inputs have diff. time periods"
 msgstr ""
 
-#: Opcodes/spectra.c:867
+#: Opcodes/spectra.c:869
 msgid "inputs have different freq resolution"
 msgstr ""
 
-#: Opcodes/spectra.c:870
+#: Opcodes/spectra.c:872
 msgid "inputs have different amptypes"
 msgstr ""
 
-#: Opcodes/spectra.c:902
+#: Opcodes/spectra.c:904
 msgid "specaddm: not initialised"
 msgstr "specaddm: not initialized"
 
-#: Opcodes/spectra.c:926
+#: Opcodes/spectra.c:928
 msgid "specdiff: local buffers not initialised"
 msgstr "specdiff: local buffers not initialized"
 
-#: Opcodes/spectra.c:964
+#: Opcodes/spectra.c:966
 msgid "specdiff: not initialised"
 msgstr "specdiff: not initialized"
 
-#: Opcodes/spectra.c:986
+#: Opcodes/spectra.c:988
 msgid "specscal: local buffer not initialised"
 msgstr "specscal: local buffer not initialized"
 
-#: Opcodes/spectra.c:991
+#: Opcodes/spectra.c:993
 msgid "missing fscale table"
 msgstr ""
 
-#: Opcodes/spectra.c:1057
+#: Opcodes/spectra.c:1059
 msgid "specscal: not initialised"
 msgstr "specscal: not initialized"
 
-#: Opcodes/spectra.c:1081
+#: Opcodes/spectra.c:1083
 msgid "spechist: local buffers not intiialised"
 msgstr ""
 
-#: Opcodes/spectra.c:1113
+#: Opcodes/spectra.c:1115
 msgid "spechist: not initialised"
 msgstr "spechist: not initialized"
 
-#: Opcodes/spectra.c:1134
+#: Opcodes/spectra.c:1136
 msgid "specfilt: local buffers not initialised"
 msgstr "specfilt: local buffers not initialized"
 
-#: Opcodes/spectra.c:1142
+#: Opcodes/spectra.c:1144
 msgid "missing htim ftable"
 msgstr ""
 
-#: Opcodes/spectra.c:1165
+#: Opcodes/spectra.c:1167
 msgid "htim ftable must be all-positive"
 msgstr ""
 
-#: Opcodes/spectra.c:1169
+#: Opcodes/spectra.c:1171
 #, c-format
 msgid "coef range: %6.3f - %6.3f\n"
 msgstr ""
 
-#: Opcodes/spectra.c:1201
+#: Opcodes/spectra.c:1203
 msgid "specfilt: not initialised"
 msgstr "specfilt: not initialized"
 
-#: Opcodes/stackops.c:80
+#: Opcodes/stackops.c:81
 msgid "fsig = : source signal is not initialised"
 msgstr "fsig = : source signal is not initialized"
 
-#: Opcodes/stackops.c:126
+#: Opcodes/stackops.c:125
 msgid "stack overflow"
 msgstr ""
 
-#: Opcodes/stackops.c:134
+#: Opcodes/stackops.c:131
 msgid "cannot pop from empty stack"
 msgstr "can't pop from empty stack"
 
-#: Opcodes/stackops.c:142
+#: Opcodes/stackops.c:137
 msgid "argument number or type mismatch"
 msgstr ""
 
-#: Opcodes/stackops.c:150
+#: Opcodes/stackops.c:143
 msgid "string argument is too long"
 msgstr ""
 
-#: Opcodes/stackops.c:167
+#: Opcodes/stackops.c:160
 msgid "Error allocating argument stack"
 msgstr ""
 
-#: Opcodes/stackops.c:207 Top/argdecode.c:1212 util/envext.c:99
+#: Opcodes/stackops.c:200 Top/argdecode.c:1212 util/envext.c:99
 #: util/scale.c:248
 msgid "too many arguments"
 msgstr ""
 
-#: Opcodes/stackops.c:286
+#: Opcodes/stackops.c:279
 msgid "the stack is already allocated"
 msgstr ""
 
-#: Opcodes/stackops.c:637
+#: Opcodes/stackops.c:630
 msgid "number of arguments != nchnls"
 msgstr ""
 
-#: Opcodes/stdopcod.c:36
+#: Opcodes/stdopcod.c:37
 msgid "stdopcod.c: error: globals already allocated"
 msgstr ""
 
@@ -8419,35 +8307,43 @@ msgstr ""
 msgid "RAWWAVE_PATH: %s\n"
 msgstr ""
 
-#: Opcodes/syncgrain.c:175 Opcodes/syncgrain.c:338 Opcodes/syncgrain.c:683
+#: Opcodes/syncgrain.c:176 Opcodes/syncgrain.c:339 Opcodes/syncgrain.c:684
 msgid "grain size smaller than 1 sample\n"
 msgstr ""
 
-#: Opcodes/syncgrain.c:387
+#: Opcodes/syncgrain.c:388
 msgid "diskgrain: invalid number of channels"
 msgstr ""
 
-#: Opcodes/syncgrain.c:419
+#: Opcodes/syncgrain.c:420
 msgid "diskgrain: could not open file\n"
 msgstr "diskgrain: couldn't open file\n"
 
-#: Opcodes/syncgrain.c:423
+#: Opcodes/syncgrain.c:424
 msgid ""
 "diskgrain: soundfile channel numbers do not match the number of outputs \n"
 msgstr ""
 
-#: Opcodes/syncgrain.c:435
+#: Opcodes/syncgrain.c:436
 msgid "diskgrain: could not read file \n"
 msgstr "diskgrain: couldn't read file \n"
 
-#: Opcodes/tabsum.c:39
+#: Opcodes/tabsum.c:40
 msgid "tabsum: No table"
 msgstr "tabsum: No table"
 
-#: Opcodes/tabsum.c:54
+#: Opcodes/tabsum.c:55
 msgid "tabsum: Not initialised"
 msgstr "tabsum: not initialized"
 
+#: Opcodes/tabvars.c:201 Opcodes/tabvars.c:218
+msgid "t-var not initialised"
+msgstr "t-var not initialized"
+
+#: Opcodes/tabvars.c:203 Opcodes/tabvars.c:220
+msgid "No table for copy2ftab"
+msgstr ""
+
 #: Opcodes/ugens7.c:46 Opcodes/ugensa.c:49
 msgid "illegal value for iolaps"
 msgstr ""
@@ -8593,17 +8489,17 @@ msgstr ""
 msgid "table in iftfn for ftmorf does not exist"
 msgstr "table in iftfn for ftmorf doesn't exist"
 
-#: Opcodes/ugnorman.c:120
+#: Opcodes/ugnorman.c:121
 #, c-format
 msgid "%s: Ats file %s not read (does it exist?)"
 msgstr ""
 
-#: Opcodes/ugnorman.c:131
+#: Opcodes/ugnorman.c:132
 #, c-format
 msgid "%s: either %s is not an ATS file or the byte endianness is wrong"
 msgstr ""
 
-#: Opcodes/ugnorman.c:139
+#: Opcodes/ugnorman.c:140
 #, c-format
 msgid ""
 "%s: %s is byte-swapped\n"
@@ -8611,125 +8507,125 @@ msgid ""
 "\twill not result in different audio, but they may slow down processing."
 msgstr ""
 
-#: Opcodes/ugnorman.c:175
+#: Opcodes/ugnorman.c:176
 msgid ""
 "ATSINFO: location is out of bounds: 0-8 are the only possible selections"
 msgstr ""
 
-#: Opcodes/ugnorman.c:265
+#: Opcodes/ugnorman.c:266
 #, c-format
 msgid "ATSREAD: partial %i out of range, max allowed is %i"
 msgstr ""
 
-#: Opcodes/ugnorman.c:291
+#: Opcodes/ugnorman.c:292
 msgid "Type not implemented"
 msgstr ""
 
-#: Opcodes/ugnorman.c:310
+#: Opcodes/ugnorman.c:311
 msgid "ATSREAD: only positive time pointer values allowed, setting to zero\n"
 msgstr ""
 
-#: Opcodes/ugnorman.c:319
+#: Opcodes/ugnorman.c:320
 msgid "ATSREAD: timepointer out of range, truncated to last frame\n"
 msgstr ""
 
-#: Opcodes/ugnorman.c:332
+#: Opcodes/ugnorman.c:333
 msgid "ATSREAD: not initialised"
 msgstr "ATSREAD: not initialized"
 
-#: Opcodes/ugnorman.c:394
+#: Opcodes/ugnorman.c:395
 #, c-format
 msgid "ATSREADNZ: band %i out of range, 1-25 are the valid band values"
 msgstr ""
 
-#: Opcodes/ugnorman.c:412
+#: Opcodes/ugnorman.c:413
 msgid "ATSREADNZ: Type either not implemented or does not contain noise"
 msgstr "ATSREADNZ: Type either not implemented or doesn't contain noise"
 
-#: Opcodes/ugnorman.c:431
+#: Opcodes/ugnorman.c:432
 msgid "ATSREADNZ: only positive time pointer values allowed, setting to zero\n"
 msgstr ""
 
-#: Opcodes/ugnorman.c:440
+#: Opcodes/ugnorman.c:441
 msgid "ATSREADNZ: timepointer out of range, truncated to last frame\n"
 msgstr ""
 
-#: Opcodes/ugnorman.c:449
+#: Opcodes/ugnorman.c:450
 msgid "ATSREADNZ: not initialised"
 msgstr "ATSREADNZ: not initialized"
 
-#: Opcodes/ugnorman.c:467
+#: Opcodes/ugnorman.c:468
 msgid "ATSADD: Function table number for synthesis waveform not valid"
 msgstr ""
 
-#: Opcodes/ugnorman.c:475
+#: Opcodes/ugnorman.c:476
 msgid "ATSADD: Gate Function table number not valid"
 msgstr ""
 
-#: Opcodes/ugnorman.c:521
+#: Opcodes/ugnorman.c:522
 #, c-format
 msgid "ATSADD: Partial(s) out of range, max partial allowed is %i"
 msgstr ""
 
-#: Opcodes/ugnorman.c:555
+#: Opcodes/ugnorman.c:556
 msgid "ATSADD: Type not implemented"
 msgstr ""
 
-#: Opcodes/ugnorman.c:585
+#: Opcodes/ugnorman.c:586
 msgid ""
 "ATSADD: only positive time pointer values are allowed, setting to zero\n"
 msgstr ""
 
-#: Opcodes/ugnorman.c:594
+#: Opcodes/ugnorman.c:595
 msgid "ATSADD: time pointer out of range, truncating to last frame\n"
 msgstr ""
 
-#: Opcodes/ugnorman.c:638
+#: Opcodes/ugnorman.c:639
 msgid "ATSADD: not initialised"
 msgstr "ATSADD: not initialized"
 
-#: Opcodes/ugnorman.c:842
+#: Opcodes/ugnorman.c:845
 msgid "ATSADDNZ: This file type contains no noise"
 msgstr ""
 
-#: Opcodes/ugnorman.c:846
+#: Opcodes/ugnorman.c:849
 msgid "ATSADDNZ: This file type has not been implemented in this code yet."
 msgstr ""
 
-#: Opcodes/ugnorman.c:869
+#: Opcodes/ugnorman.c:872
 msgid "ATSADDNZ: Band(s) out of range, max band allowed is 25"
 msgstr ""
 
-#: Opcodes/ugnorman.c:886
+#: Opcodes/ugnorman.c:889
 msgid ""
 "ATSADDNZ: Type either has no noise or is not implemented (only type 3 and 4 "
 "work now)"
 msgstr ""
 
-#: Opcodes/ugnorman.c:1002
+#: Opcodes/ugnorman.c:1005
 msgid ""
 "ATSADDNZ: only positive time pointer values are allowed, setting to zero\n"
 msgstr ""
 
-#: Opcodes/ugnorman.c:1011
+#: Opcodes/ugnorman.c:1014
 msgid "ATSADDNZ: time pointer out of range, truncating to last frame\n"
 msgstr ""
 
-#: Opcodes/ugnorman.c:1165
+#: Opcodes/ugnorman.c:1168
 #, c-format
 msgid "ATSSINNOI: Partial(s) out of range, max partial allowed is %i"
 msgstr ""
 
-#: Opcodes/ugnorman.c:1202
+#: Opcodes/ugnorman.c:1205
 msgid "ATSSINNOI: Type not implemented"
 msgstr ""
 
-#: Opcodes/ugnorman.c:1315
+#: Opcodes/ugnorman.c:1316
 msgid ""
 "ATSSINNOI: only positive time pointer values are allowed, setting to zero\n"
 msgstr ""
 
-#: Opcodes/ugnorman.c:1324
+#: Opcodes/ugnorman.c:1325
 msgid "ATSSINNOI: time pointer out of range, truncating to last frame\n"
 msgstr ""
 
@@ -8802,44 +8698,44 @@ msgstr ""
 msgid "ATSCROSS: you must have an atsbufread before an atsinterpread"
 msgstr ""
 
-#: Opcodes/ugsc.c:394
+#: Opcodes/ugsc.c:390
 msgid "Phaser mode must be either 1 or 2"
 msgstr ""
 
-#: Opcodes/vbap.c:57
+#: Opcodes/vbap.c:59
 msgid "vbap: error allocating loudspeaker table"
 msgstr ""
 
-#: Opcodes/vbap.c:264
+#: Opcodes/vbap.c:266
 msgid ""
 "Number of loudspeakers is zero\n"
 "Exiting"
 msgstr ""
 
-#: Opcodes/vbap.c:573
+#: Opcodes/vbap.c:575
 msgid "Error in loudspeaker dimension."
 msgstr ""
 
-#: Opcodes/vbap.c:596
+#: Opcodes/vbap.c:598
 msgid "Too few loudspeakers"
 msgstr ""
 
-#: Opcodes/vbap.c:622
+#: Opcodes/vbap.c:624
 msgid "Not valid 3-D configuration"
 msgstr ""
 
-#: Opcodes/vbap.c:668 Opcodes/vbap.c:767
+#: Opcodes/vbap.c:670 Opcodes/vbap.c:769
 msgid ""
 "\n"
 "Configured loudspeakers\n"
 msgstr ""
 
-#: Opcodes/vbap.c:670
+#: Opcodes/vbap.c:672
 #, c-format
 msgid "Triplet %d Loudspeakers: "
 msgstr ""
 
-#: Opcodes/vbap.c:769
+#: Opcodes/vbap.c:771
 #, c-format
 msgid "Pair %d Loudspeakers: "
 msgstr ""
@@ -8921,41 +8817,33 @@ msgstr ""
 msgid "Have to have at least %d directions in vbapzmove"
 msgstr ""
 
-#: Opcodes/Vosim.c:49
+#: Opcodes/Vosim.c:51
 msgid "vosim: pulse table not found"
 msgstr ""
 
-#: Opcodes/Vosim.c:72
+#: Opcodes/Vosim.c:74
 msgid "vosim: zero kfund. 'Infinite' length event generated."
 msgstr ""
 
-#: Opcodes/Vosim.c:80
+#: Opcodes/Vosim.c:82
 #, c-format
 msgid "vosim: kfund (%f) > sr. Generating ksmps silence."
 msgstr ""
 
-#: Opcodes/Vosim.c:158
+#: Opcodes/Vosim.c:160
 msgid "vosim: not initialised"
 msgstr "vosim: not initialized"
 
-#: Opcodes/vpvoc.c:118
-msgid "tableseg: not initialised"
-msgstr "tableseg: not initialized"
-
-#: Opcodes/vpvoc.c:146
-msgid "tablexseg: not initialised"
-msgstr "tablexseg: not initialized"
-
-#: Opcodes/vpvoc.c:172
+#: Opcodes/vpvoc.c:173
 #, c-format
 msgid "vpvoc: Could not find ifnmagctrl table %f"
 msgstr "vpvoc: Couldn't find ifnmagctrl table %f"
 
-#: Opcodes/vpvoc.c:178
+#: Opcodes/vpvoc.c:179
 msgid "vpvoc: associated tableseg not found"
 msgstr ""
 
-#: Opcodes/vpvoc.c:194
+#: Opcodes/vpvoc.c:195
 #, c-format
 msgid "VPVOC cannot load %s"
 msgstr "VPVOC can't load %s"
@@ -9072,47 +8960,47 @@ msgstr ""
 msgid "-B N\tsamples per hardware sound I/O buffer"
 msgstr ""
 
-#: Top/argdecode.c:75 util/mixer.c:95 util/scale.c:46 util/srconv.c:739
+#: Top/argdecode.c:75 util/mixer.c:95 util/scale.c:46 util/srconv.c:738
 msgid "-A\tcreate an AIFF format output soundfile"
 msgstr ""
 
-#: Top/argdecode.c:76 util/mixer.c:96 util/scale.c:47 util/srconv.c:741
+#: Top/argdecode.c:76 util/mixer.c:96 util/scale.c:47 util/srconv.c:740
 msgid "-W\tcreate a WAV format output soundfile"
 msgstr ""
 
-#: Top/argdecode.c:77 util/srconv.c:740
+#: Top/argdecode.c:77 util/srconv.c:739
 msgid "-J\tcreate an IRCAM format output soundfile"
 msgstr ""
 
-#: Top/argdecode.c:78 util/mixer.c:97 util/scale.c:48 util/srconv.c:742
+#: Top/argdecode.c:78 util/mixer.c:97 util/scale.c:48 util/srconv.c:741
 msgid "-h\tno header on output soundfile"
 msgstr ""
 
-#: Top/argdecode.c:79 util/mixer.c:99 util/scale.c:49 util/srconv.c:743
+#: Top/argdecode.c:79 util/mixer.c:99 util/scale.c:49 util/srconv.c:742
 msgid "-c\t8-bit signed_char sound samples"
 msgstr ""
 
-#: Top/argdecode.c:81 util/mixer.c:101 util/scale.c:50 util/srconv.c:744
+#: Top/argdecode.c:81 util/mixer.c:101 util/scale.c:50 util/srconv.c:743
 msgid "-a\talaw sound samples"
 msgstr ""
 
-#: Top/argdecode.c:83 util/mixer.c:98 util/mixer.c:100 util/srconv.c:745
+#: Top/argdecode.c:83 util/mixer.c:98 util/mixer.c:100 util/srconv.c:744
 msgid "-8\t8-bit unsigned_char sound samples"
 msgstr ""
 
-#: Top/argdecode.c:84 util/mixer.c:102 util/scale.c:51 util/srconv.c:746
+#: Top/argdecode.c:84 util/mixer.c:102 util/scale.c:51 util/srconv.c:745
 msgid "-u\tulaw sound samples"
 msgstr ""
 
-#: Top/argdecode.c:85 util/mixer.c:103 util/scale.c:52 util/srconv.c:747
+#: Top/argdecode.c:85 util/mixer.c:103 util/scale.c:52 util/srconv.c:746
 msgid "-s\tshort_int sound samples"
 msgstr ""
 
-#: Top/argdecode.c:86 util/mixer.c:104 util/scale.c:53 util/srconv.c:748
+#: Top/argdecode.c:86 util/mixer.c:104 util/scale.c:53 util/srconv.c:747
 msgid "-l\tlong_int sound samples"
 msgstr ""
 
-#: Top/argdecode.c:87 util/mixer.c:105 util/scale.c:54 util/srconv.c:749
+#: Top/argdecode.c:87 util/mixer.c:105 util/scale.c:54 util/srconv.c:748
 msgid "-f\tfloat sound samples"
 msgstr ""
 
@@ -9120,7 +9008,7 @@ msgstr ""
 msgid "-3\t24bit sound samples"
 msgstr ""
 
-#: Top/argdecode.c:89 util/srconv.c:750
+#: Top/argdecode.c:89 util/srconv.c:749
 msgid "-r N\torchestra srate override"
 msgstr ""
 
@@ -9128,7 +9016,7 @@ msgstr ""
 msgid "-k N\torchestra krate override"
 msgstr ""
 
-#: Top/argdecode.c:91 util/srconv.c:751
+#: Top/argdecode.c:91 util/srconv.c:750
 msgid "-K\tDo not generate PEAK chunks"
 msgstr ""
 
@@ -9188,7 +9076,7 @@ msgstr ""
 msgid "-F fnam\tread MIDIfile event stream from file 'fnam'"
 msgstr ""
 
-#: Top/argdecode.c:107 util/mixer.c:106 util/scale.c:59 util/srconv.c:752
+#: Top/argdecode.c:107 util/mixer.c:106 util/scale.c:59 util/srconv.c:751
 msgid "-R\tcontinually rewrite header while writing soundfile (WAV/AIFF)"
 msgstr ""
 
@@ -9196,7 +9084,7 @@ msgstr ""
 msgid "-H#\tprint heartbeat style 1, 2 or 3 at each soundfile write"
 msgstr ""
 
-#: Top/argdecode.c:109 util/mixer.c:108 util/scale.c:61 util/srconv.c:754
+#: Top/argdecode.c:109 util/mixer.c:108 util/scale.c:61 util/srconv.c:753
 msgid "-N\tnotify (ring the bell) when score or miditrack is done"
 msgstr ""
 
@@ -9682,16 +9570,16 @@ msgid "-M: stdin not supported on this platform"
 msgstr ""
 
 #: Top/argdecode.c:668 Top/argdecode.c:959 util/envext.c:84 util/mixer.c:205
-#: util/scale.c:173 util/srconv.c:248 util/xtrct.c:116
+#: util/scale.c:173 util/srconv.c:247 util/xtrct.c:116
 msgid "no outfilename"
 msgstr ""
 
-#: Top/argdecode.c:671 Top/argdecode.c:963 util/scale.c:177 util/srconv.c:252
+#: Top/argdecode.c:671 Top/argdecode.c:963 util/scale.c:177 util/srconv.c:251
 #: util/xtrct.c:120
 msgid "-o cannot be stdin"
 msgstr "-o can't be stdin"
 
-#: Top/argdecode.c:675 Top/argdecode.c:967 util/scale.c:180 util/srconv.c:257
+#: Top/argdecode.c:675 Top/argdecode.c:967 util/scale.c:180 util/srconv.c:256
 #: util/xtrct.c:123
 msgid "stdout audio not supported"
 msgstr ""
@@ -9810,164 +9698,164 @@ msgstr ""
 msgid "cscoreFileGetCurrent: no fp current"
 msgstr ""
 
-#: Top/csmodule.c:192
+#: Top/csmodule.c:199
 #, c-format
 msgid "not loading '%s' (uses incompatible floating point type)"
 msgstr ""
 
-#: Top/csmodule.c:201
+#: Top/csmodule.c:209
 #, c-format
 msgid ""
 "not loading '%s' (incompatible with this version of Csound (%d.%d/%d.%d)"
 msgstr ""
 
-#: Top/csmodule.c:244
+#: Top/csmodule.c:252
 #, c-format
 msgid "could not open library '%s' (%s)"
 msgstr "couldn't open library '%s' (%s)"
 
-#: Top/csmodule.c:247
+#: Top/csmodule.c:255
 #, c-format
 msgid "could not open library '%s' (%d)"
 msgstr "couldn't open library '%s' (%d)"
 
-#: Top/csmodule.c:303
+#: Top/csmodule.c:311
 #, c-format
 msgid "'%s' is not a Csound plugin library"
 msgstr "'%s' isn't a Csound plugin library"
 
-#: Top/csmodule.c:314
+#: Top/csmodule.c:322
 msgid "csoundLoadExternal(): memory allocation failure"
 msgstr ""
 
-#: Top/csmodule.c:328 Top/csmodule.c:336
+#: Top/csmodule.c:336 Top/csmodule.c:344
 #, c-format
 msgid "Error in pre-initialisation function of module '%s'"
 msgstr ""
 
-#: Top/csmodule.c:599 Top/csmodule.c:605 Top/csmodule.c:616 Top/csmodule.c:623
-#: Top/csmodule.c:629 Top/csmodule.c:637
+#: Top/csmodule.c:608 Top/csmodule.c:614 Top/csmodule.c:625 Top/csmodule.c:632
+#: Top/csmodule.c:638 Top/csmodule.c:646
 msgid "Error opening plugin directory\n"
 msgstr ""
 
-#: Top/csmodule.c:687
+#: Top/csmodule.c:696
 #, c-format
 msgid "Error opening plugin directory '%s': %s"
 msgstr ""
 
-#: Top/csmodule.c:722
+#: Top/csmodule.c:731
 #, c-format
 msgid "path name too long, skipping '%s'"
 msgstr ""
 
-#: Top/csmodule.c:728
+#: Top/csmodule.c:737
 #, c-format
 msgid "Library %s omitted\n"
 msgstr ""
 
-#: Top/csmodule.c:764
+#: Top/csmodule.c:773
 msgid "Loading command-line libraries:\n"
 msgstr ""
 
-#: Top/csmodule.c:787
+#: Top/csmodule.c:796
 #, c-format
 msgid " *** error loading '%s'"
 msgstr ""
 
-#: Top/csmodule.c:810
+#: Top/csmodule.c:819
 #, c-format
 msgid "Error starting module '%s'"
 msgstr ""
 
-#: Top/csmodule.c:907
+#: Top/csmodule.c:918
 #, c-format
 msgid "Error de-initialising module '%s'"
 msgstr ""
 
-#: Top/csound.c:1606 Top/csound.c:1626
+#: Top/csound.c:1636 Top/csound.c:1656
 msgid "Early return from csoundPerformKsmps().\n"
 msgstr ""
 
-#: Top/csound.c:1612
+#: Top/csound.c:1642
 msgid "Score finished in csoundPerformKsmps().\n"
 msgstr ""
 
-#: Top/csound.c:1645
+#: Top/csound.c:1675
 msgid "Early return from csoundPerformBuffer().\n"
 msgstr ""
 
-#: Top/csound.c:1670
+#: Top/csound.c:1700
 msgid "Early return from csoundPerform().\n"
 msgstr ""
 
-#: Top/csound.c:1677
+#: Top/csound.c:1707
 msgid "Score finished in csoundPerform().\n"
 msgstr ""
 
-#: Top/csound.c:1697
+#: Top/csound.c:1727
 msgid "csoundPerform(): stopped.\n"
 msgstr ""
 
-#: Top/csound.c:1968
+#: Top/csound.c:1998
 msgid "WARNING: "
 msgstr ""
 
-#: Top/csound.c:2089
+#: Top/csound.c:2119
 msgid "rtdummy: failed to allocate globals"
 msgstr ""
 
-#: Top/csound.c:2090
+#: Top/csound.c:2120
 msgid "rtaudio: dummy module enabled\n"
 msgstr ""
 
-#: Top/csound.c:2119 Top/csound.c:2155
+#: Top/csound.c:2149 Top/csound.c:2185
 msgid " *** error: rtaudio module set to empty string"
 msgstr ""
 
-#: Top/csound.c:2123 Top/csound.c:2159
+#: Top/csound.c:2153 Top/csound.c:2189
 #, c-format
 msgid " *** error: unknown rtaudio module: '%s'"
 msgstr ""
 
-#: Top/csound.c:2241
+#: Top/csound.c:2271
 msgid "WARNING: real time midi input disabled, using dummy functions\n"
 msgstr ""
 
-#: Top/csound.c:2246 Top/csound.c:2280
+#: Top/csound.c:2276 Top/csound.c:2310
 msgid "error: -+rtmidi set to empty string"
 msgstr ""
 
-#: Top/csound.c:2249 Top/csound.c:2283
+#: Top/csound.c:2279 Top/csound.c:2313
 #, c-format
 msgid "error: -+rtmidi='%s': unknown module"
 msgstr ""
 
-#: Top/csound.c:2275
+#: Top/csound.c:2305
 msgid "WARNING: real time midi output disabled, using dummy functions\n"
 msgstr ""
 
-#: Top/csound.c:2297
+#: Top/csound.c:2327
 msgid "Unknown MIDI error"
 msgstr ""
 
-#: Top/csound.c:2415
+#: Top/csound.c:2445
 msgid "xyin not supported. use invalue opcode instead."
 msgstr ""
 
-#: Top/csound.c:2522
+#: Top/csound.c:2552
 msgid "Failed to allocate new opcode entry."
 msgstr ""
 
-#: Top/csound.c:2545
+#: Top/csound.c:2575
 #, c-format
 msgid "Failed to allocate opcode entry for %s."
 msgstr ""
 
-#: Top/csound.c:2876
+#: Top/csound.c:2906
 msgid "Cannot open /proc/cpuinfo. Support for RDTSC is not available.\n"
 msgstr "Can't open /proc/cpuinfo. Support for RDTSC is not available.\n"
 
-#: Top/csound.c:2927
+#: Top/csound.c:2957
 msgid "No valid CPU frequency entry was found in /proc/cpuinfo.\n"
 msgstr ""
 
@@ -9975,25 +9863,25 @@ msgstr ""
 msgid "Error allocating opcode list"
 msgstr ""
 
-#: Top/main.c:161
+#: Top/main.c:160
 #, c-format
 msgid "WARNING: cannot open csoundrc file %s\n"
 msgstr "WARNING: can't open csoundrc file %s\n"
 
-#: Top/main.c:164
+#: Top/main.c:163
 #, c-format
 msgid "Reading options from $CSOUNDRC: %s \n"
 msgstr ""
 
-#: Top/main.c:173
+#: Top/main.c:172
 msgid "Reading options from $HOME/.csoundrc\n"
 msgstr ""
 
-#: Top/main.c:200
+#: Top/main.c:199
 msgid "no orchestra name"
 msgstr ""
 
-#: Top/main.c:225
+#: Top/main.c:224
 msgid "Reading CSD failed ... stopping"
 msgstr ""
 
@@ -10005,7 +9893,7 @@ msgstr ""
 msgid "error: multiple uses of stdout"
 msgstr ""
 
-#: Top/main.c:260 util/dnoise.c:268
+#: Top/main.c:260 util/dnoise.c:264
 #, c-format
 msgid "%s not a recognised SFOUTYP env setting"
 msgstr ""
@@ -10018,58 +9906,62 @@ msgstr ""
 msgid "realtime performance using dummy numeric scorefile\n"
 msgstr ""
 
-#: Top/main.c:319
+#: Top/main.c:314
 #, c-format
 msgid "orchname:  %s\n"
 msgstr ""
 
-#: Top/main.c:321
-#, c-format
-msgid "scorename: %s\n"
+#: Top/main.c:334
+msgid "Stopping on parser failure\n"
 msgstr ""
 
-#: Top/main.c:353
+#: Top/main.c:352
 msgid "end of orchestra compile"
 msgstr ""
 
-#: Top/main.c:360
+#: Top/main.c:359
 #, c-format
 msgid "using previous %s\n"
 msgstr ""
 
-#: Top/main.c:373
+#: Top/main.c:369
 #, c-format
 msgid "cannot open scorefile %s"
 msgstr "can't open scorefile %s"
 
-#: Top/main.c:378 Top/main.c:399
-#, c-format
-msgid "cannot open %s for writing"
-msgstr "can't open %s for writing"
-
-#: Top/main.c:381
+#: Top/main.c:371
 msgid "sorting score ...\n"
 msgstr ""
 
-#: Top/main.c:388
+#: Top/main.c:381
 #, c-format
 msgid "cannot extract %s, name conflict"
 msgstr "can't extract %s, name conflict"
 
-#: Top/main.c:391
+#: Top/main.c:384
 #, c-format
 msgid "cannot open extract file %s"
 msgstr "can't open extract file %s"
 
-#: Top/main.c:401
+#: Top/main.c:388
+#, c-format
+msgid "cannot reopen %s"
+msgstr "can't reopen %s"
+
+#: Top/main.c:392
+#, c-format
+msgid "cannot open %s for writing"
+msgstr "can't open %s for writing"
+
+#: Top/main.c:394
 msgid "  ... extracting ...\n"
 msgstr ""
 
-#: Top/main.c:414
+#: Top/main.c:405
 msgid "end of score sort"
 msgstr ""
 
-#: Top/main.c:416
+#: Top/main.c:407
 msgid "Syntax check completed.\n"
 msgstr ""
 
@@ -10134,163 +10026,158 @@ msgstr ""
 msgid " *** error setting option '%s' to '%s': %s\n"
 msgstr ""
 
-#: Top/one_file.c:105 Top/one_file.c:113
+#: Top/one_file.c:110 Top/one_file.c:118
 msgid " *** cannot create temporary file"
 msgstr " *** can't create temporary file"
 
-#: Top/one_file.c:198
+#: Top/one_file.c:203
 #, c-format
 msgid "Removing temporary file %s ...\n"
 msgstr ""
 
-#: Top/one_file.c:202
+#: Top/one_file.c:207
 #, c-format
 msgid "WARNING: could not remove %s\n"
 msgstr "WARNING: couldn't remove %s\n"
 
-#: Top/one_file.c:268 Top/one_file.c:296
+#: Top/one_file.c:274 Top/one_file.c:302
 #, c-format
 msgid "More than %d arguments in <CsOptions>"
 msgstr ""
 
-#: Top/one_file.c:313
+#: Top/one_file.c:319
 #, c-format
 msgid "Invalid arguments in <CsOptions>: %s"
 msgstr ""
 
-#: Top/one_file.c:316
+#: Top/one_file.c:322
 #, c-format
 msgid "Invalid arguments in .csoundrc or -@ file: %s"
 msgstr ""
 
-#: Top/one_file.c:322 Top/one_file.c:790
+#: Top/one_file.c:328 Top/one_file.c:744
 msgid "Missing end tag </CsOptions>"
 msgstr ""
 
-#: Top/one_file.c:340 Top/one_file.c:372 Top/one_file.c:420
-#, c-format
-msgid "Creating %s (%p)\n"
-msgstr ""
-
-#: Top/one_file.c:343
-#, c-format
-msgid "Failed to create %s"
-msgstr ""
-
-#: Top/one_file.c:356
+#: Top/one_file.c:354
 msgid "Missing end tag </CsInstruments>"
 msgstr ""
 
-#: Top/one_file.c:389 Top/one_file.c:442
+#: Top/one_file.c:376 Top/one_file.c:430
 msgid "Missing end tag </CsScore>"
 msgstr ""
 
-#: Top/one_file.c:403 Top/one_file.c:408
+#: Top/one_file.c:391 Top/one_file.c:396
 msgid "Missing program in tag <CsScore>"
 msgstr ""
 
-#: Top/one_file.c:433
+#: Top/one_file.c:408
+#, c-format
+msgid "Creating %s (%p)\n"
+msgstr ""
+
+#: Top/one_file.c:421
 msgid "External generation failed"
 msgstr ""
 
-#: Top/one_file.c:520
+#: Top/one_file.c:468
 #, c-format
 msgid "Non base64 character %c(%2x)"
 msgstr ""
 
-#: Top/one_file.c:539
+#: Top/one_file.c:487
 msgid "Truncated byte at end of base64 stream"
 msgstr ""
 
-#: Top/one_file.c:554
+#: Top/one_file.c:503
 #, c-format
 msgid "Cannot open temporary file (%s) for MIDI subfile"
 msgstr "Can't open temporary file (%s) for MIDI subfile"
 
-#: Top/one_file.c:571
+#: Top/one_file.c:520
 msgid "Missing end tag </CsMidifileB>"
 msgstr ""
 
-#: Top/one_file.c:586 Top/one_file.c:633
+#: Top/one_file.c:536 Top/one_file.c:584
 #, c-format
 msgid "File %s already exists"
 msgstr ""
 
-#: Top/one_file.c:591
+#: Top/one_file.c:541
 #, c-format
 msgid "Cannot open sample file (%s) subfile"
 msgstr "Can't open sample file (%s) subfile"
 
-#: Top/one_file.c:605
+#: Top/one_file.c:555
 msgid "Missing end tag </CsSampleB>"
 msgstr ""
 
-#: Top/one_file.c:638
+#: Top/one_file.c:589
 #, c-format
 msgid "Cannot open file (%s) subfile"
 msgstr "Can't open file (%s) subfile"
 
-#: Top/one_file.c:653
+#: Top/one_file.c:604
 msgid "Missing end tag </CsFileB>"
 msgstr ""
 
-#: Top/one_file.c:672
+#: Top/one_file.c:624
 #, c-format
 msgid "This CSD file requires a version of Csound before %d.%02d"
 msgstr ""
 
-#: Top/one_file.c:680 Top/one_file.c:687
+#: Top/one_file.c:632 Top/one_file.c:639
 #, c-format
 msgid "This CSD file requires a version of Csound after %d.%02d"
 msgstr ""
 
-#: Top/one_file.c:693
+#: Top/one_file.c:645
 msgid "Missing end tag </CsVersion>"
 msgstr ""
 
-#: Top/one_file.c:702
+#: Top/one_file.c:655
 msgid "**** Licence Information ****\n"
 msgstr "**** License Information ****\n"
 
-#: Top/one_file.c:708
+#: Top/one_file.c:661
 msgid "**** End of Licence Information ****\n"
 msgstr "**** End of License Information ****\n"
 
-#: Top/one_file.c:719
+#: Top/one_file.c:672
 msgid "Missing end tag </CsLicence>"
 msgstr ""
 
-#: Top/one_file.c:749
+#: Top/one_file.c:703
 #, c-format
 msgid "Failed to open csd file: %s"
 msgstr ""
 
-#: Top/one_file.c:764
+#: Top/one_file.c:718
 msgid "STARTING FILE\n"
 msgstr ""
 
-#: Top/one_file.c:780
+#: Top/one_file.c:734
 msgid "Creating options\n"
 msgstr ""
 
-#: Top/one_file.c:786
+#: Top/one_file.c:740
 msgid "Skipping <CsOptions>\n"
 msgstr ""
 
-#: Top/one_file.c:800
+#: Top/one_file.c:754
 msgid "Creating orchestra\n"
 msgstr ""
 
-#: Top/one_file.c:805
+#: Top/one_file.c:759
 msgid "Creating score\n"
 msgstr ""
 
-#: Top/one_file.c:839
+#: Top/one_file.c:793
 #, c-format
 msgid "unknown CSD tag: %s\n"
 msgstr ""
 
-#: Top/one_file.c:844
+#: Top/one_file.c:798
 msgid "Could not find <CsoundSynthesizer> tag in CSD file.\n"
 msgstr "Couldn't find <CsoundSynthesizer> tag in CSD file.\n"
 
@@ -10464,7 +10351,7 @@ msgstr ""
 #, c-format
 msgid ""
 "\n"
-" Could not open %s for writing, bye...\n"
+"Could not open %s for writing, bye...\n"
 msgstr ""
 "\n"
 " Couldn't open %s for writing, bye...\n"
@@ -10473,8 +10360,8 @@ msgstr ""
 msgid "saving ATS data..."
 msgstr ""
 
-#: util/atsa.c:546 util/atsa.c:2344 util/atsa.c:2358 util/atsa.c:2368
-#: util/atsa.c:2548 util/atsa.c:2611 util/atsa.c:2699
+#: util/atsa.c:546 util/atsa.c:2354 util/atsa.c:2368 util/atsa.c:2387
+#: util/atsa.c:2567 util/atsa.c:2630 util/atsa.c:2718
 msgid "done!\n"
 msgstr ""
 
@@ -10582,17 +10469,17 @@ msgid ""
 "\n"
 msgstr ""
 
-#: util/atsa.c:1482
+#: util/atsa.c:1492
 #, c-format
 msgid "atsa: error opening residual file '%s'"
 msgstr ""
 
-#: util/atsa.c:1486
+#: util/atsa.c:1496
 #, c-format
 msgid "atsa: residual file has %d channels, must be stereo !"
 msgstr ""
 
-#: util/atsa.c:1813
+#: util/atsa.c:1823
 #, c-format
 msgid ""
 "\n"
@@ -10601,164 +10488,164 @@ msgstr ""
 "\n"
 "ERROR: can't open file %s for writing\n"
 
-#: util/atsa.c:1908
+#: util/atsa.c:1918
 msgid "Error: sound not optimised !"
 msgstr ""
 
-#: util/atsa.c:2003
+#: util/atsa.c:2013
 #, c-format
 msgid "atsa: cannot open input file '%s'"
 msgstr "atsa: can't open input file '%s'"
 
-#: util/atsa.c:2010
+#: util/atsa.c:2020
 #, c-format
 msgid "atsa: file has %d channels, must be mono !"
 msgstr ""
 
-#: util/atsa.c:2015
+#: util/atsa.c:2025
 msgid "tracking...\n"
 msgstr ""
 
-#: util/atsa.c:2024
+#: util/atsa.c:2034
 #, c-format
 msgid "start %f out of bounds, corrected to 0.0"
 msgstr ""
 
-#: util/atsa.c:2034
+#: util/atsa.c:2044
 #, c-format
 msgid "duration %f out of bounds, limited to file duration"
 msgstr ""
 
-#: util/atsa.c:2040
+#: util/atsa.c:2050
 #, c-format
 msgid "start: %f duration: %f file dur: %f\n"
 msgstr ""
 
-#: util/atsa.c:2047
+#: util/atsa.c:2057
 #, c-format
 msgid "lowest freq. %f out of bounds, forced to default: %f"
 msgstr ""
 
-#: util/atsa.c:2057
+#: util/atsa.c:2067
 #, c-format
 msgid "highest freq. %f out of bounds, forced to default: %f"
 msgstr ""
 
-#: util/atsa.c:2064
+#: util/atsa.c:2074
 #, c-format
 msgid ""
 "freq. dev. %f out of bounds, should be > 0.0 and <= 1.0, forced to default: "
 "%f"
 msgstr ""
 
-#: util/atsa.c:2072
+#: util/atsa.c:2082
 #, c-format
 msgid ""
 "windows cycles %d out of bounds, should be between 1 and 8, forced to "
 "default: %d"
 msgstr ""
 
-#: util/atsa.c:2080
+#: util/atsa.c:2090
 #, c-format
 msgid ""
 "window type %d out of bounds, should be between 0 and 3, forced to default: "
 "%d"
 msgstr ""
 
-#: util/atsa.c:2088
+#: util/atsa.c:2098
 #, c-format
 msgid ""
 "hop size %f out of bounds, should be > 0.0 and <= 1.0, forced to default: %f"
 msgstr ""
 
-#: util/atsa.c:2096
+#: util/atsa.c:2106
 #, c-format
 msgid ""
 "lowest magnitude %f out of bounds, should be >= 0.0 and <= 1.0, forced to "
 "default: %f"
 msgstr ""
 
-#: util/atsa.c:2120
+#: util/atsa.c:2130
 #, c-format
 msgid "atsa: %d frames are not enough for analysis, need at least %d"
 msgstr ""
 
-#: util/atsa.c:2129
+#: util/atsa.c:2139
 #, c-format
 msgid "track length %d out of bounds, forced to: %d"
 msgstr ""
 
-#: util/atsa.c:2138
+#: util/atsa.c:2148
 #, c-format
 msgid "min. segment length %d out of bounds, forced to: %d"
 msgstr ""
 
-#: util/atsa.c:2147
+#: util/atsa.c:2157
 #, c-format
 msgid "min. gap length %d out of bounds, forced to: %d"
 msgstr ""
 
-#: util/atsa.c:2153
+#: util/atsa.c:2163
 #, c-format
 msgid ""
 "SMR threshold %f out of bounds, should be >= 0.0 and < %f dB SPL, forced to "
 "default: %f"
 msgstr ""
 
-#: util/atsa.c:2164
+#: util/atsa.c:2174
 #, c-format
 msgid ""
 "min. seg. SMR %f out of bounds, should be >= %f and < %f dB SPL, forced to "
 "default: %f"
 msgstr ""
 
-#: util/atsa.c:2172
+#: util/atsa.c:2182
 #, c-format
 msgid ""
 "last peak contribution %f out of bounds, should be >= 0.0 and <= 1.0, forced "
 "to default: %f"
 msgstr ""
 
-#: util/atsa.c:2180
+#: util/atsa.c:2190
 #, c-format
 msgid ""
 "SMR contribution %f out of bounds, should be >= 0.0 and <= 1.0, forced to "
 "default: %f"
 msgstr ""
 
-#: util/atsa.c:2325
+#: util/atsa.c:2335
 msgid "Initializing ATS data..."
 msgstr ""
 
-#: util/atsa.c:2355
+#: util/atsa.c:2365
 msgid "Computing residual..."
 msgstr ""
 
-#: util/atsa.c:2366
+#: util/atsa.c:2381 util/atsa.c:2384
 msgid "Analysing residual..."
 msgstr ""
 
-#: util/atsa.c:2370
+#: util/atsa.c:2389
 msgid "tracking completed.\n"
 msgstr ""
 
-#: util/atsa.c:2478
+#: util/atsa.c:2497
 msgid "Filling sound gaps..."
 msgstr ""
 
-#: util/atsa.c:2566
+#: util/atsa.c:2585
 msgid "Trimming short partials..."
 msgstr ""
 
-#: util/atsa.c:2662
+#: util/atsa.c:2681
 msgid "Computing averages..."
 msgstr ""
 
-#: util/atsa.c:2713
+#: util/atsa.c:2732
 msgid "No partials to track -- stopping\n"
 msgstr ""
 
-#: util/atsa.c:2813
+#: util/atsa.c:2832
 msgid "Soundfile analysis for ATS opcodes"
 msgstr ""
 
@@ -10790,8 +10677,8 @@ msgstr ""
 msgid "illegal number of filenames"
 msgstr ""
 
-#: util/cvanal.c:113 util/dnoise.c:456 util/lpanal.c:518 util/pvanal.c:258
-#: util/srconv.c:351
+#: util/cvanal.c:113 util/dnoise.c:445 util/lpanal.c:518 util/pvanal.c:258
+#: util/srconv.c:350
 #, c-format
 msgid "error while opening %s"
 msgstr ""
@@ -10831,256 +10718,256 @@ msgstr ""
 msgid "Soundfile analysis for convolve"
 msgstr ""
 
-#: util/dnoise.c:285
+#: util/dnoise.c:281
 msgid "-o cannot be stdin\n"
 msgstr "-o can't be stdin\n"
 
-#: util/dnoise.c:297
+#: util/dnoise.c:293
 msgid "-A overriding local default WAV out"
 msgstr ""
 
-#: util/dnoise.c:302
+#: util/dnoise.c:298
 msgid "-J overriding local default AIFF/WAV out"
 msgstr ""
 
-#: util/dnoise.c:309
+#: util/dnoise.c:305
 msgid "-W overriding local default AIFF out"
 msgstr ""
 
-#: util/dnoise.c:356
+#: util/dnoise.c:345
 msgid "no t argument"
 msgstr ""
 
-#: util/dnoise.c:379
+#: util/dnoise.c:368
 msgid "no n argument"
 msgstr ""
 
-#: util/dnoise.c:384
+#: util/dnoise.c:373
 msgid "no b argument"
 msgstr ""
 
-#: util/dnoise.c:392
+#: util/dnoise.c:381
 msgid "no B argument"
 msgstr ""
 
-#: util/dnoise.c:404
+#: util/dnoise.c:393
 msgid "no E argument"
 msgstr ""
 
-#: util/dnoise.c:408
+#: util/dnoise.c:397
 msgid "no N argument"
 msgstr ""
 
-#: util/dnoise.c:412
+#: util/dnoise.c:401
 msgid "no M argument"
 msgstr ""
 
-#: util/dnoise.c:416
+#: util/dnoise.c:405
 msgid "no L argument"
 msgstr ""
 
-#: util/dnoise.c:420
+#: util/dnoise.c:409
 msgid "no w argument"
 msgstr ""
 
-#: util/dnoise.c:424
+#: util/dnoise.c:413
 msgid "no D argument"
 msgstr ""
 
-#: util/dnoise.c:431 util/srconv.c:328
+#: util/dnoise.c:420 util/srconv.c:327
 #, c-format
 msgid "Looking at %c\n"
 msgstr ""
 
-#: util/dnoise.c:438 util/srconv.c:336
+#: util/dnoise.c:427 util/srconv.c:335
 #, c-format
 msgid "Infile set to %s\n"
 msgstr ""
 
-#: util/dnoise.c:441 util/srconv.c:339
+#: util/dnoise.c:430 util/srconv.c:338
 #, c-format
 msgid "End with %s\n"
 msgstr ""
 
-#: util/dnoise.c:447
+#: util/dnoise.c:436
 msgid "dnoise: no input file\n"
 msgstr ""
 
-#: util/dnoise.c:451
+#: util/dnoise.c:440
 msgid "Must have an example noise file (-i name)\n"
 msgstr ""
 
-#: util/dnoise.c:479
+#: util/dnoise.c:468
 #, c-format
 msgid "cannot open %s.\n"
 msgstr "can't open %s.\n"
 
-#: util/dnoise.c:491 util/srconv.c:461 util/srconv.c:473
+#: util/dnoise.c:480 util/srconv.c:460 util/srconv.c:472
 #, c-format
 msgid "cannot open %s."
 msgstr "can't open %s."
 
-#: util/dnoise.c:510
+#: util/dnoise.c:499
 msgid "dnoise: input MUST be mono or stereo\n"
 msgstr ""
 
-#: util/dnoise.c:518
+#: util/dnoise.c:507
 msgid "dnoise: cannot open noise reference file\n"
 msgstr "dnoise: can't open noise reference file\n"
 
-#: util/dnoise.c:523
+#: util/dnoise.c:512
 msgid "Incompatible sample rates\n"
 msgstr ""
 
-#: util/dnoise.c:542
+#: util/dnoise.c:531
 #, c-format
 msgid "dnoise: warning - N not a valid power of two; revised N = %d\n"
 msgstr ""
 
-#: util/dnoise.c:552
+#: util/dnoise.c:541
 msgid "dnoise: warning - do not specify both M and W\n"
 msgstr "dnoise: warning - don't specify both M and W\n"
 
-#: util/dnoise.c:562
+#: util/dnoise.c:551
 msgid "dnoise: warning - invalid W ignored\n"
 msgstr ""
 
-#: util/dnoise.c:576
+#: util/dnoise.c:565
 msgid "dnoise: warning - M is too small\n"
 msgstr ""
 
-#: util/dnoise.c:586
+#: util/dnoise.c:575
 msgid "dnoise: M too large\n"
 msgstr ""
 
-#: util/dnoise.c:592
+#: util/dnoise.c:581
 msgid "dnoise: L too large\n"
 msgstr ""
 
-#: util/dnoise.c:602
+#: util/dnoise.c:591
 #, c-format
 msgid "writing %u-byte blks of %s to %s"
 msgstr ""
 
-#: util/dnoise.c:627 util/dnoise.c:666 util/dnoise.c:721 util/dnoise.c:732
-#: util/dnoise.c:736 util/dnoise.c:743 util/dnoise.c:753 util/dnoise.c:758
-#: util/dnoise.c:762 util/dnoise.c:766 util/dnoise.c:770
+#: util/dnoise.c:616 util/dnoise.c:655 util/dnoise.c:710 util/dnoise.c:721
+#: util/dnoise.c:725 util/dnoise.c:732 util/dnoise.c:742 util/dnoise.c:747
+#: util/dnoise.c:751 util/dnoise.c:755 util/dnoise.c:759
 msgid "dnoise: insufficient memory\n"
 msgstr ""
 
-#: util/dnoise.c:779 util/dnoise.c:788
+#: util/dnoise.c:768 util/dnoise.c:777
 msgid "dnoise: begin time is greater than EOF of noise file!"
 msgstr ""
 
-#: util/dnoise.c:820
+#: util/dnoise.c:809
 msgid "dnoise: not enough samples of noise reference\n"
 msgstr ""
 
-#: util/dnoise.c:1118
+#: util/dnoise.c:1103
 #, c-format
 msgid "%5.1f seconds of input complete\n"
 msgstr ""
 
-#: util/dnoise.c:1137
+#: util/dnoise.c:1122
 msgid "processing complete\n"
 msgstr ""
 
-#: util/dnoise.c:1147
+#: util/dnoise.c:1132
 msgid "usage: dnoise [flags] input_file"
 msgstr ""
 
-#: util/dnoise.c:1149
+#: util/dnoise.c:1134
 msgid "flags:"
 msgstr ""
 
-#: util/dnoise.c:1150
+#: util/dnoise.c:1135
 msgid "i = noise reference soundfile"
 msgstr ""
 
-#: util/dnoise.c:1151
+#: util/dnoise.c:1136
 msgid "o = output file"
 msgstr ""
 
-#: util/dnoise.c:1152
+#: util/dnoise.c:1137
 msgid "N = # of bandpass filters (1024)"
 msgstr ""
 
-#: util/dnoise.c:1153
+#: util/dnoise.c:1138
 msgid "w = filter overlap factor: {0,1,(2),3} DON'T USE -w AND -M"
 msgstr ""
 
-#: util/dnoise.c:1154
+#: util/dnoise.c:1139
 msgid "M = analysis window length (N-1 unless -w is specified)"
 msgstr ""
 
-#: util/dnoise.c:1155
+#: util/dnoise.c:1140
 msgid "L = synthesis window length (M)"
 msgstr ""
 
-#: util/dnoise.c:1156
+#: util/dnoise.c:1141
 msgid "D = decimation factor (M/8)"
 msgstr ""
 
-#: util/dnoise.c:1157
+#: util/dnoise.c:1142
 msgid "b = begin time in noise reference soundfile (0)"
 msgstr ""
 
-#: util/dnoise.c:1158
+#: util/dnoise.c:1143
 msgid "B = starting sample in noise reference soundfile (0)"
 msgstr ""
 
-#: util/dnoise.c:1159
+#: util/dnoise.c:1144
 msgid "e = end time in noise reference soundfile (end)"
 msgstr ""
 
-#: util/dnoise.c:1160
+#: util/dnoise.c:1145
 msgid "E = final sample in noise reference soundfile (end)"
 msgstr ""
 
-#: util/dnoise.c:1161
+#: util/dnoise.c:1146
 msgid "t = threshold above noise reference in dB (30)"
 msgstr ""
 
-#: util/dnoise.c:1162
+#: util/dnoise.c:1147
 msgid "S = sharpness of noise-gate turnoff (1) (1 to 5)"
 msgstr ""
 
-#: util/dnoise.c:1163
+#: util/dnoise.c:1148
 msgid "n = number of FFT frames to average over (5)"
 msgstr ""
 
-#: util/dnoise.c:1164
+#: util/dnoise.c:1149
 msgid "m = minimum gain of noise-gate when off in dB (-40)"
 msgstr ""
 
-#: util/dnoise.c:1165
+#: util/dnoise.c:1150
 msgid "V : verbose - print status info"
 msgstr ""
 
-#: util/dnoise.c:1166
+#: util/dnoise.c:1151
 msgid "A : AIFF format output"
 msgstr ""
 
-#: util/dnoise.c:1167
+#: util/dnoise.c:1152
 msgid "W : WAV format output"
 msgstr ""
 
-#: util/dnoise.c:1168
+#: util/dnoise.c:1153
 msgid "J : IRCAM format output"
 msgstr ""
 
-#: util/dnoise.c:1187
+#: util/dnoise.c:1172
 #, c-format
 msgid "soundfile write returned sample count of %d, not %d\n"
 msgstr ""
 
-#: util/dnoise.c:1189
+#: util/dnoise.c:1174
 msgid ""
 "(disk may be full...\n"
 " closing the file ...)\n"
 msgstr ""
 
-#: util/dnoise.c:1257
+#: util/dnoise.c:1242
 msgid "Removes noise from a sound file"
 msgstr ""
 
@@ -11088,7 +10975,7 @@ msgstr ""
 msgid "Usage:\tenvext [-flags] soundfile\n"
 msgstr ""
 
-#: util/envext.c:54 util/srconv.c:738
+#: util/envext.c:54 util/srconv.c:737
 msgid "-o fnam\tsound output filename\n"
 msgstr ""
 
@@ -11122,7 +11009,7 @@ msgstr ""
 msgid "enveloping %ld sample frames (%3.1f secs)\n"
 msgstr ""
 
-#: util/envext.c:179
+#: util/envext.c:177
 msgid "Create a text file of envelope"
 msgstr ""
 
@@ -11536,7 +11423,7 @@ msgstr ""
 msgid "Legal flags are:"
 msgstr ""
 
-#: util/mixer.c:107 util/scale.c:60 util/srconv.c:753
+#: util/mixer.c:107 util/scale.c:60 util/srconv.c:752
 msgid "-H#\tprint a heartbeat style 1, 2 or 3 at each soundfile write"
 msgstr ""
 
@@ -11576,7 +11463,7 @@ msgstr ""
 msgid "mixer: error: "
 msgstr ""
 
-#: util/mixer.c:188 util/scale.c:161 util/srconv.c:232
+#: util/mixer.c:188 util/scale.c:161 util/srconv.c:231
 #, c-format
 msgid "%s not a recognized SFOUTYP env setting"
 msgstr ""
@@ -11805,17 +11692,17 @@ msgstr ""
 msgid "Soundfile analysis for pvoc"
 msgstr ""
 
-#: util/pvanal.c:469
+#: util/pvanal.c:467
 #, c-format
 msgid "pvxanal: unable to create analysis file: %s"
 msgstr ""
 
-#: util/pvanal.c:500 util/pvanal.c:532
+#: util/pvanal.c:498 util/pvanal.c:530
 #, c-format
 msgid "pvxanal: error writing analysis frames: %s\n"
 msgstr ""
 
-#: util/pvanal.c:542
+#: util/pvanal.c:540
 #, c-format
 msgid ""
 "\n"
@@ -11905,7 +11792,7 @@ msgstr ""
 msgid "-P fpnum\tscale file to given percentage of full"
 msgstr ""
 
-#: util/scale.c:62 util/srconv.c:755
+#: util/scale.c:62 util/srconv.c:754
 msgid "-- fnam\tlog output to file"
 msgstr ""
 
@@ -12058,75 +11945,75 @@ msgstr ""
 msgid "Sound format -%c has been overruled by -%c"
 msgstr ""
 
-#: util/srconv.c:299
+#: util/srconv.c:298
 msgid "No Q argument"
 msgstr ""
 
-#: util/srconv.c:304
+#: util/srconv.c:303
 msgid "No P argument"
 msgstr ""
 
-#: util/srconv.c:313
+#: util/srconv.c:312
 msgid "No r argument"
 msgstr ""
 
-#: util/srconv.c:322
+#: util/srconv.c:321
 msgid "No break file"
 msgstr ""
 
-#: util/srconv.c:345
+#: util/srconv.c:344
 msgid "No input given\n"
 msgstr ""
 
-#: util/srconv.c:362
+#: util/srconv.c:361
 msgid "srconv: cannot specify both -r and -P"
 msgstr "srconv: can't specify both -r and -P"
 
-#: util/srconv.c:373
+#: util/srconv.c:372
 msgid "srconv: cannot open time-vary function file"
 msgstr "srconv: can't open time-vary function file"
 
-#: util/srconv.c:389
+#: util/srconv.c:388
 msgid "srconv: too few x-y pairs in time-vary function file"
 msgstr ""
 
-#: util/srconv.c:403
+#: util/srconv.c:402
 msgid "srconv: first x value in time-vary function must be 0"
 msgstr ""
 
-#: util/srconv.c:408
+#: util/srconv.c:407
 msgid "srconv: invalid initial y value in time-vary function"
 msgstr ""
 
-#: util/srconv.c:413 util/srconv.c:705
+#: util/srconv.c:412 util/srconv.c:704
 msgid "srconv: invalid x values in time-vary function"
 msgstr ""
 
-#: util/srconv.c:732
+#: util/srconv.c:731
 msgid ""
 "usage: srconv [flags] infile\n"
 "\n"
 "flags:"
 msgstr ""
 
-#: util/srconv.c:733
+#: util/srconv.c:732
 msgid ""
 "-P num\tpitch transposition ratio (srate/r) [do not specify both P and r]"
 msgstr ""
 
-#: util/srconv.c:735
+#: util/srconv.c:734
 msgid "-Q num\tquality factor (1 to 8: default = 2)"
 msgstr ""
 
-#: util/srconv.c:736
+#: util/srconv.c:735
 msgid "-i filnam\tbreak file"
 msgstr ""
 
-#: util/srconv.c:737
+#: util/srconv.c:736
 msgid "-r num\toutput sample rate (must be specified)"
 msgstr ""
 
-#: util/srconv.c:821
+#: util/srconv.c:820
 msgid "Sample rate conversion"
 msgstr ""
 
@@ -12276,6 +12163,42 @@ msgstr ""
 msgid "Extract part of a sound file"
 msgstr ""
 
+#~ msgid "tableseg: not initialized"
+#~ msgstr "tableseg: not initialized"
+
+#~ msgid "tablexseg: not initialized"
+#~ msgstr "tablexseg: not initialized"
+
+#~ msgid "vdelayk: not initialized"
+#~ msgstr "vdelayk: not initialized"
+
+#~ msgid "Cannot open file \"%s\"\n"
+#~ msgstr "Can't open input file \"%s\"\n"
+
+#~ msgid "cannot find end of file %s"
+#~ msgstr "can't find end of file %s"
+
+#~ msgid "Loop cannot start inside of a macro"
+#~ msgstr "Loop can't start inside of a macro"
+
+#~ msgid "Repeat cannot start inside of a macro (ignored)"
+#~ msgstr "Repeat can't start inside of a macro (ignored)"
+
+#~ msgid "cannot open input file %s"
+#~ msgstr "can't open input file %s"
+
+#~ msgid "FLsavesnap: cannot open file"
+#~ msgstr "FLsavesnap: can't open file"
+
+#~ msgid "FLloadsnap: cannot open file"
+#~ msgstr "FLloadsnap: can't open file"
+
+#~ msgid "FLvalue cannot be set by FLsetVal.\n"
+#~ msgstr "FLvalue can't be set by FLsetVal.\n"
+
+#~ msgid "FLvalue cannot be set by FLsetVal\n"
+#~ msgstr "FLvalue can't be set by FLsetVal\n"
+
 #~ msgid "cannot open %s.  Not in cur dir, SSDIR or SFDIR as defined"
 #~ msgstr "can't open %s.  Not in cur dir, SSDIR or SFDIR as defined"
 
diff --git a/po/csound.po b/po/csound.po
index 3999fa3..f1b052f 100644
--- a/po/csound.po
+++ b/po/csound.po
@@ -32,22 +32,22 @@ msgstr ""
 msgid "auxlist for instr %d (%p):\n"
 msgstr ""
 
-#: Engine/auxfd.c:153
+#: Engine/auxfd.c:154
 #, c-format
 msgid "\tauxch at %p: size %ld, auxp %p, endp %p\n"
 msgstr ""
 
-#: Engine/auxfd.c:165
+#: Engine/auxfd.c:166
 #, c-format
 msgid "fdlist for instr %s [%d] (%p):"
 msgstr ""
 
-#: Engine/auxfd.c:168
+#: Engine/auxfd.c:169
 #, c-format
 msgid "fdlist for instr %d (%p):"
 msgstr ""
 
-#: Engine/auxfd.c:171
+#: Engine/auxfd.c:172
 #, c-format
 msgid "  fd %p in %p"
 msgstr ""
@@ -100,356 +100,316 @@ msgstr ""
 msgid "(unknown error)"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:214 Engine/rdorch.c:1832
+#: Engine/csound_orc_compile.c:138
+#, c-format
+msgid ""
+"input arg %d '%s' of type %s not allowed when expecting %c (for opcode %s), "
+"line %d\n"
+msgstr ""
+
+#: Engine/csound_orc_compile.c:265 Engine/rdorch.c:1862
 msgid "missing or extra arg"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:218
+#: Engine/csound_orc_compile.c:269
 msgid "too many input args\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:475
+#: Engine/csound_orc_compile.c:304
 #, c-format
-msgid "create_opcode: No rule to handle statement of type %d\n"
+msgid "input arg '%s' used before defined (in opcode %s), line %d\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:671
+#: Engine/csound_orc_compile.c:380
 #, c-format
-msgid "create_instrument: instr num %ld\n"
+msgid ""
+"output name previously used, type '%c' must be uniquely defined, line %d"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:681
+#: Engine/csound_orc_compile.c:386
 #, c-format
-msgid "create_instrument: instr name %s\n"
+msgid "output arg '%s' illegal type (for opcode %s), line %d\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:688 Engine/otran.c:351
-msgid "invalid name for instrument"
-msgstr ""
-
-#: Engine/csound_orc_compile.c:692 Engine/otran.c:356
+#: Engine/csound_orc_compile.c:541
 #, c-format
-msgid "instr %s redefined"
+msgid "create_opcode: No rule to handle statement of type %d\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:833 Engine/otran.c:145 Engine/symbtab.c:394
+#: Engine/csound_orc_compile.c:738
 #, c-format
-msgid "invalid input type for opcode %s"
+msgid "create_instrument: instr num %ld\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:838 Engine/otran.c:150 Engine/symbtab.c:399
+#: Engine/csound_orc_compile.c:748
 #, c-format
-msgid "too many input args for opcode %s"
+msgid "create_instrument: instr name %s\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:853 Engine/otran.c:165 Engine/symbtab.c:414
-#, c-format
-msgid "too many output args for opcode %s"
+#: Engine/csound_orc_compile.c:755 Engine/otran.c:364
+msgid "invalid name for instrument"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:869 Engine/otran.c:187 Engine/symbtab.c:433
+#: Engine/csound_orc_compile.c:759 Engine/otran.c:370
 #, c-format
-msgid "invalid output type for opcode %s"
+msgid "instr %s redefined"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:954 Engine/otran.c:339
+#: Engine/csound_orc_compile.c:903 Engine/otran.c:352
 #, c-format
 msgid "instr %ld redefined"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:964
+#: Engine/csound_orc_compile.c:914
 msgid "!!! csound->opcodeInfo is NULL !!!\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1111
+#: Engine/csound_orc_compile.c:1083
 #, c-format
 msgid "Unknown TREE node of type %d found in root.\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1168 Engine/otran.c:565 Engine/otran.c:1414
+#: Engine/csound_orc_compile.c:1140 Engine/otran.c:579 Engine/otran.c:1433
 #, c-format
 msgid "%s invalid sample rate"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1170 Engine/otran.c:567 Engine/otran.c:1416
+#: Engine/csound_orc_compile.c:1142 Engine/otran.c:581 Engine/otran.c:1435
 #, c-format
 msgid "%s invalid control rate"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1173 Engine/otran.c:570 Engine/otran.c:1412
+#: Engine/csound_orc_compile.c:1146 Engine/otran.c:584 Engine/otran.c:1431
 #, c-format
 msgid "%s invalid ksmps value"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1176 Engine/otran.c:572 Engine/otran.c:1418
+#: Engine/csound_orc_compile.c:1149 Engine/otran.c:587 Engine/otran.c:1437
 #, c-format
 msgid "%s inconsistent sr, kr, ksmps"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1190
+#: Engine/csound_orc_compile.c:1165
 msgid "perf-pass statements illegal in header blk\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1195
+#: Engine/csound_orc_compile.c:1170
 #, c-format
 msgid "%d syntax errors in orchestra.  compilation invalid\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1255 Engine/otran.c:656
+#: Engine/csound_orc_compile.c:1230 Engine/otran.c:671
 msgid "inconsistent argoff sumcount"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1327 Engine/otran.c:725
+#: Engine/csound_orc_compile.c:1302 Engine/otran.c:740
 #, c-format
 msgid "LABELS list is full...extending to %d\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1365 Engine/otran.c:763
+#: Engine/csound_orc_compile.c:1340 Engine/otran.c:778
 #, c-format
 msgid "GOTOS list is full..extending to %d\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1398 Engine/otran.c:796
+#: Engine/csound_orc_compile.c:1373 Engine/otran.c:811
 #, c-format
 msgid "target label '%s' not found"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1463 Engine/otran.c:851
+#: Engine/csound_orc_compile.c:1451 Engine/otran.c:866
 #, c-format
 msgid "string syntax '%s'"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1513 Engine/otran.c:901
+#: Engine/csound_orc_compile.c:1501 Engine/otran.c:916
 #, c-format
 msgid "numeric syntax '%s'"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1539 Engine/otran.c:927
+#: Engine/csound_orc_compile.c:1527 Engine/otran.c:942
 #, c-format
 msgid "extending Floating pool to %d\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1578 Engine/otran.c:999
+#: Engine/csound_orc_compile.c:1566 Engine/otran.c:1018
 msgid "gblnamset(): memory allocation failure"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1606 Engine/otran.c:1027
+#: Engine/csound_orc_compile.c:1594 Engine/otran.c:1046
 msgid "lclnamset(): memory allocation failure"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1632 Engine/otran.c:1052
+#: Engine/csound_orc_compile.c:1620 Engine/otran.c:1071
 msgid "unexpected global name"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1655 Engine/otran.c:1074
+#: Engine/csound_orc_compile.c:1643 Engine/otran.c:1093
 msgid "unknown nametype"
 msgstr ""
 
-#: Engine/csound_orc.l:239
+#: Engine/csound_orc_expressions.c:459
 #, c-format
-msgid "unterminated string found on line %d >>%s<<\n"
+msgid "error: function %s with arg type %c not found, line %d \n"
 msgstr ""
 
-#: Engine/csound_orc.l:259 Engine/csound_orc.l:286 Engine/csound_orc.l:314
-#: Engine/csound_orc.l:367 Engine/rdorch.c:901 Engine/sread.c:396
+#: Engine/csound_orc_expressions.c:862
 #, c-format
-msgid "Undefined macro: '%s'"
+msgid "error: non-existent statement in conditional, line %d \n"
 msgstr ""
 
-#: Engine/csound_orc.l:265 Engine/csound_orc.l:292
-msgid "Includes nested too deeply"
-msgstr ""
-
-#: Engine/csound_orc.l:335 Engine/csound_orc.l:388 Engine/rdorch.c:940
+#: Engine/csound_orc_semantics.c:157
 #, c-format
 msgid ""
-"Missing argument terminator\n"
-"%.98s"
-msgstr ""
-
-#: Engine/csound_orc.l:484
-#, c-format
-msgid "Line %d: Unknown character: '%c'(%2x)\n"
-msgstr ""
-
-#: Engine/csound_orc.l:527
-#, c-format
-msgid "Cannot open file \"%s\"\n"
-msgstr ""
-
-#: Engine/csound_orc.l:573 Engine/rdorch.c:689 Engine/sread.c:1595
-msgid "macro error\n"
-msgstr ""
-
-#: Engine/csound_orc.l:631 Engine/rdorch.c:845 Engine/sread.c:1686
-#, c-format
-msgid "macro %s undefined\n"
-msgstr ""
-
-#: Engine/csound_orc.l:645 Engine/rdorch.c:859 Engine/sread.c:294
-msgid "Undefining undefined macro"
-msgstr ""
-
-#: Engine/csound_orc.l:786 Engine/rdorch.c:413 Engine/sread.c:741
-#, c-format
-msgid "Macro definition for %*s\n"
-msgstr ""
-
-#: Engine/csound_orc.l:789 Engine/rdorch.c:416
-msgid "Invalid macro name for --omacro"
-msgstr ""
-
-#: Engine/csound_orc.y:270
-msgid "No number following instr\n"
+"\n"
+"error: %s  (token \"%s\")"
 msgstr ""
 
-#: Engine/csound_orc_semantics.c:127
+#: Engine/csound_orc_semantics.c:159
 #, c-format
-msgid "error: %s (token \"%s\")"
+msgid ""
+" line %d:\n"
+">>>"
 msgstr ""
 
-#: Engine/csound_orc_semantics.c:129
+#: Engine/csound_orc_semantics.c:732
 #, c-format
-msgid " line %d: %s"
+msgid "insufficient required arguments for opcode %s on line %d\n"
 msgstr ""
 
-#: Engine/csound_orc_semantics.c:702 Engine/rdorch.c:1863
-msgid "insufficient required arguments"
-msgstr ""
-
-#: Engine/csound_orc_semantics.c:768 Engine/rdorch.c:1617 Engine/rdorch.c:1635
-#: Engine/rdorch.c:1676 Engine/rdorch.c:1811 Engine/rdorch.c:1980
+#: Engine/csound_orc_semantics.c:797 Engine/rdorch.c:1644 Engine/rdorch.c:1662
+#: Engine/rdorch.c:1703 Engine/rdorch.c:1841 Engine/rdorch.c:2011
 #, c-format
 msgid "modified opcod: %s"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:113 Engine/cs_par_dispatch.c:125
+#: Engine/cs_par_dispatch.c:115 Engine/cs_par_dispatch.c:128
 #, c-format
 msgid "Poorly specified global lock index: %i [max: %i]\n"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:138 Engine/cs_par_dispatch.c:157
+#: Engine/cs_par_dispatch.c:142 Engine/cs_par_dispatch.c:162
 msgid "Invalid NULL parameter name for a global variable\n"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:505 Engine/cs_par_dispatch.c:528
-#: Engine/cs_par_dispatch.c:2463 Engine/cs_par_dispatch.c:2507
-#: Engine/cs_par_dispatch.c:2509 Engine/cs_par_dispatch.c:2570
+#: Engine/cs_par_dispatch.c:526 Engine/cs_par_dispatch.c:553
+#: Engine/cs_par_dispatch.c:2543 Engine/cs_par_dispatch.c:2588
+#: Engine/cs_par_dispatch.c:2590 Engine/cs_par_dispatch.c:2654
 msgid "Invalid NULL Parameter entry"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:507 Engine/cs_par_dispatch.c:541
-#: Engine/cs_par_dispatch.c:566 Engine/cs_par_dispatch.c:605
+#: Engine/cs_par_dispatch.c:528 Engine/cs_par_dispatch.c:567
+#: Engine/cs_par_dispatch.c:594 Engine/cs_par_dispatch.c:635
 msgid "Invalid NULL Parameter name"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:512
+#: Engine/cs_par_dispatch.c:535
 msgid "Failed to allocate Opcode Weight cache entry"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:632 Engine/cs_par_dispatch.c:718
+#: Engine/cs_par_dispatch.c:664 Engine/cs_par_dispatch.c:755
 msgid "No Weights to Dump (Using Defaults)\n"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:670 Engine/cs_par_dispatch.c:794
+#: Engine/cs_par_dispatch.c:705 Engine/cs_par_dispatch.c:835
 #, c-format
 msgid "Opcode Weight Spec File not found at: %s"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:722
+#: Engine/cs_par_dispatch.c:759
 msgid "Weights Dump\n"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:866
+#: Engine/cs_par_dispatch.c:907
 #, c-format
 msgid "Parallel Spec File not found at: %s"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:872
+#: Engine/cs_par_dispatch.c:913
 msgid "Parallel Spec File invalid format expected weight_min parameter"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:877
+#: Engine/cs_par_dispatch.c:918
 msgid "Parallel Spec File invalid format expected weight_max parameter"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:881
+#: Engine/cs_par_dispatch.c:922
 msgid "Parallel Spec File invalid format expected roots_avail_min parameter"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:885
+#: Engine/cs_par_dispatch.c:926
 msgid "Parallel Spec File invalid format expected roots_avail_max parameter"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:961 Engine/cs_par_dispatch.c:985
-#: Engine/cs_par_dispatch.c:1109 Engine/cs_par_dispatch.c:1195
-#: Engine/cs_par_dispatch.c:1332 Engine/cs_par_dispatch.c:1366
-#: Engine/cs_par_dispatch.c:1383 Engine/cs_par_dispatch.c:1405
-#: Engine/cs_par_dispatch.c:1432 Engine/cs_par_dispatch.c:1452
-#: Engine/cs_par_dispatch.c:1476 Engine/cs_par_dispatch.c:1566
-#: Engine/cs_par_dispatch.c:1621 Engine/cs_par_dispatch.c:1714
-#: Engine/cs_par_dispatch.c:1769 Engine/cs_par_dispatch.c:2597
+#: Engine/cs_par_dispatch.c:1003 Engine/cs_par_dispatch.c:1027
+#: Engine/cs_par_dispatch.c:1155 Engine/cs_par_dispatch.c:1251
+#: Engine/cs_par_dispatch.c:1405 Engine/cs_par_dispatch.c:1439
+#: Engine/cs_par_dispatch.c:1456 Engine/cs_par_dispatch.c:1478
+#: Engine/cs_par_dispatch.c:1506 Engine/cs_par_dispatch.c:1528
+#: Engine/cs_par_dispatch.c:1552 Engine/cs_par_dispatch.c:1644
+#: Engine/cs_par_dispatch.c:1699 Engine/cs_par_dispatch.c:1792
+#: Engine/cs_par_dispatch.c:1847 Engine/cs_par_dispatch.c:2681
 msgid "Invalid NULL Parameter dag"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:966
+#: Engine/cs_par_dispatch.c:1008
 msgid "Failed to allocate dag"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1017 Engine/cs_par_dispatch.c:1040
-#: Engine/cs_par_dispatch.c:1062 Engine/cs_par_dispatch.c:1064
+#: Engine/cs_par_dispatch.c:1060 Engine/cs_par_dispatch.c:1083
+#: Engine/cs_par_dispatch.c:1105 Engine/cs_par_dispatch.c:1107
 msgid "Invalid NULL Parameter dag_node"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1019
+#: Engine/cs_par_dispatch.c:1062
 msgid "Invalid NULL Parameter instr"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1021
+#: Engine/cs_par_dispatch.c:1064
 msgid "Invalid NULL Parameter insds"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1026 Engine/cs_par_dispatch.c:1048
+#: Engine/cs_par_dispatch.c:1069 Engine/cs_par_dispatch.c:1091
 msgid "Failed to allocate dag_node"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1043
+#: Engine/cs_par_dispatch.c:1086
 msgid "Invalid Parameter count must be greater than 0"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1175 Engine/cs_par_dispatch.c:1433
-#: Engine/cs_par_dispatch.c:2465 Engine/cs_par_dispatch.c:2571
-#: Engine/cs_par_dispatch.c:2598
+#: Engine/cs_par_dispatch.c:1229 Engine/cs_par_dispatch.c:1508
+#: Engine/cs_par_dispatch.c:2545 Engine/cs_par_dispatch.c:2655
+#: Engine/cs_par_dispatch.c:2682
 msgid "Invalid NULL Parameter chain"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1183
+#: Engine/cs_par_dispatch.c:1237
 #, c-format
 msgid "Failed to find semantic information for instrument '%i'"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1478
+#: Engine/cs_par_dispatch.c:1554
 msgid "Invalid NULL Parameter node"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1480
+#: Engine/cs_par_dispatch.c:1556
 msgid "Invalid NULL Parameter update_hdl"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1569
+#: Engine/cs_par_dispatch.c:1647
 msgid "Invalid Parameter update_hdl is outside the DAG range"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:2417
+#: Engine/cs_par_dispatch.c:2497
 #, c-format
 msgid "Parallel Dump File not found at: %s for writing"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:2477
+#: Engine/cs_par_dispatch.c:2557
 msgid "Failed to allocate Dag2 cache entry"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:2527
+#: Engine/cs_par_dispatch.c:2610
 msgid "Cache Update\n"
 msgstr ""
 
@@ -463,12 +423,12 @@ msgstr ""
 msgid "Creating search path cache for '%s':"
 msgstr ""
 
-#: Engine/envvar.c:1082
+#: Engine/envvar.c:1083
 #, c-format
 msgid "internal error: csoundFileOpen(): invalid type: %d"
 msgstr ""
 
-#: Engine/envvar.c:1264
+#: Engine/envvar.c:1266
 #, c-format
 msgid "internal error: csoundCreateFileHandle(): invalid type: %d"
 msgstr ""
@@ -526,345 +486,346 @@ msgstr ""
 msgid "expression syntax"
 msgstr ""
 
-#: Engine/fgens.c:95
+#: Engine/fgens.c:91
 msgid "unknown GEN number"
 msgstr ""
 
-#: Engine/fgens.c:137
+#: Engine/fgens.c:133
 msgid "ftable does not exist"
 msgstr ""
 
-#: Engine/fgens.c:142
+#: Engine/fgens.c:138
 #, c-format
 msgid "ftable %d now deleted\n"
 msgstr ""
 
-#: Engine/fgens.c:157 Engine/fgens.c:1597 Engine/fgens.c:1683
-#: Engine/fgens.c:1762 Engine/fgens.c:1878 Engine/fgens.c:1959
-#: Engine/fgens.c:2867
+#: Engine/fgens.c:153 Engine/fgens.c:1593 Engine/fgens.c:1679
+#: Engine/fgens.c:1758 Engine/fgens.c:1874 Engine/fgens.c:1955
+#: Engine/fgens.c:2909
 msgid "insufficient gen arguments"
 msgstr ""
 
-#: Engine/fgens.c:183 Opcodes/ftgen.c:116
+#: Engine/fgens.c:179 Opcodes/ftgen.c:116
 #, c-format
 msgid "Named gen \"%s\" not defined"
 msgstr ""
 
-#: Engine/fgens.c:190
+#: Engine/fgens.c:186
 msgid "illegal gen number"
 msgstr ""
 
-#: Engine/fgens.c:198
-msgid "deferred size for GENs 1, 23 or 28 only"
+#: Engine/fgens.c:194
+msgid "deferred size for GENs 1, 23, 28 or 49 only"
 msgstr ""
 
-#: Engine/fgens.c:201 Engine/fgens.c:249
+#: Engine/fgens.c:197 Engine/fgens.c:245
 #, c-format
 msgid "ftable %d:\n"
 msgstr ""
 
-#: Engine/fgens.c:226 Engine/fgens.c:233
+#: Engine/fgens.c:222 Engine/fgens.c:229
 msgid "illegal table length"
 msgstr ""
 
-#: Engine/fgens.c:292 Engine/fgens.c:2219
+#: Engine/fgens.c:288 Engine/fgens.c:2215
 #, c-format
 msgid ""
 "ftable %d relocating due to size change\n"
 "         currently active instruments may find this disturbing"
 msgstr ""
 
-#: Engine/fgens.c:350 Engine/fgens.c:471 Engine/fgens.c:555 Engine/fgens.c:636
-#: Engine/fgens.c:711 Engine/fgens.c:760 Engine/fgens.c:881 Engine/fgens.c:958
-#: Engine/fgens.c:1053 Engine/fgens.c:1097 Engine/fgens.c:1144
-#: Engine/fgens.c:1397 Engine/fgens.c:1459 Engine/fgens.c:1681
-#: Engine/fgens.c:1759 Engine/fgens.c:2114 Engine/fgens.c:2821
-#: Engine/fgens.c:2864
+#: Engine/fgens.c:346 Engine/fgens.c:467 Engine/fgens.c:551 Engine/fgens.c:632
+#: Engine/fgens.c:707 Engine/fgens.c:756 Engine/fgens.c:877 Engine/fgens.c:954
+#: Engine/fgens.c:1049 Engine/fgens.c:1093 Engine/fgens.c:1140
+#: Engine/fgens.c:1393 Engine/fgens.c:1455 Engine/fgens.c:1677
+#: Engine/fgens.c:1755 Engine/fgens.c:2110 Engine/fgens.c:2863
+#: Engine/fgens.c:2906
 msgid "using extended arguments\n"
 msgstr ""
 
-#: Engine/fgens.c:374
+#: Engine/fgens.c:370
 msgid "no coefs present"
 msgstr ""
 
-#: Engine/fgens.c:379 Engine/fgens.c:645 Engine/fgens.c:653
+#: Engine/fgens.c:375 Engine/fgens.c:641 Engine/fgens.c:649
 msgid "illegal x interval"
 msgstr ""
 
-#: Engine/fgens.c:408 Engine/fgens.c:557 Engine/fgens.c:638 Engine/fgens.c:883
-#: Engine/fgens.c:1354 Engine/fgens.c:2378 Engine/fgens.c:2694 Top/main.c:142
-#: util/cvanal.c:66 util/lpanal.c:398 util/pvanal.c:170
+#: Engine/fgens.c:404 Engine/fgens.c:553 Engine/fgens.c:634 Engine/fgens.c:879
+#: Engine/fgens.c:1350 Engine/fgens.c:2375 Engine/fgens.c:2690
+#: Engine/fgens.c:2810 Top/main.c:141 util/cvanal.c:66 util/lpanal.c:398
+#: util/pvanal.c:170
 msgid "insufficient arguments"
 msgstr ""
 
-#: Engine/fgens.c:412 Engine/fgens.c:1359
+#: Engine/fgens.c:408 Engine/fgens.c:1355
 msgid "unknown srctable number"
 msgstr ""
 
-#: Engine/fgens.c:425
+#: Engine/fgens.c:421
 msgid "table size too large"
 msgstr ""
 
-#: Engine/fgens.c:510 Engine/fgens.c:543
+#: Engine/fgens.c:506 Engine/fgens.c:539
 msgid "gen call has negative segment size:"
 msgstr ""
 
-#: Engine/fgens.c:512
+#: Engine/fgens.c:508
 msgid "illegal input vals for gen call, beginning:"
 msgstr ""
 
-#: Engine/fgens.c:578
+#: Engine/fgens.c:574
 msgid "negative segsiz"
 msgstr ""
 
-#: Engine/fgens.c:787
+#: Engine/fgens.c:783
 msgid "nh partials < 1"
 msgstr ""
 
-#: Engine/fgens.c:886
+#: Engine/fgens.c:882
 msgid "illegal xint value"
 msgstr ""
 
-#: Engine/fgens.c:889
+#: Engine/fgens.c:885
 msgid "illegal xamp value"
 msgstr ""
 
-#: Engine/fgens.c:961
+#: Engine/fgens.c:957
 msgid "uneven number of args"
 msgstr ""
 
-#: Engine/fgens.c:1081
+#: Engine/fgens.c:1077
 msgid "gen call has illegal x-ordinate values:"
 msgstr ""
 
-#: Engine/fgens.c:1099
+#: Engine/fgens.c:1095
 msgid "wrong number of args"
 msgstr ""
 
-#: Engine/fgens.c:1113
+#: Engine/fgens.c:1109
 msgid "a range given exceeds table length"
 msgstr ""
 
-#: Engine/fgens.c:1120
+#: Engine/fgens.c:1116
 msgid "an input function does not exist"
 msgstr ""
 
-#: Engine/fgens.c:1253
+#: Engine/fgens.c:1249
 msgid "No such window!"
 msgstr ""
 
-#: Engine/fgens.c:1271
+#: Engine/fgens.c:1267
 msgid "Wrong number of input arguments"
 msgstr ""
 
-#: Engine/fgens.c:1272
+#: Engine/fgens.c:1268
 msgid "unknown distribution"
 msgstr ""
 
-#: Engine/fgens.c:1321
+#: Engine/fgens.c:1317
 msgid "error opening ASCII file"
 msgstr ""
 
-#: Engine/fgens.c:1327
+#: Engine/fgens.c:1323
 #, c-format
 msgid "%ld elements in %s\n"
 msgstr ""
 
-#: Engine/fgens.c:1338
+#: Engine/fgens.c:1334
 msgid "Numbers after table full in GEN23"
 msgstr ""
 
-#: Engine/fgens.c:1367
+#: Engine/fgens.c:1363
 msgid "table size must be the same of source table"
 msgstr ""
 
-#: Engine/fgens.c:1439 Engine/fgens.c:1499
+#: Engine/fgens.c:1435 Engine/fgens.c:1495
 msgid "x coordinates must all be in increasing order:"
 msgstr ""
 
-#: Engine/fgens.c:1442 Engine/fgens.c:1501
+#: Engine/fgens.c:1438 Engine/fgens.c:1497
 msgid "x coordinate greater than function size:"
 msgstr ""
 
-#: Engine/fgens.c:1446
+#: Engine/fgens.c:1442
 msgid "illegal input val (y <= 0) for gen call, beginning:"
 msgstr ""
 
-#: Engine/fgens.c:1519
+#: Engine/fgens.c:1515
 msgid "GEN28 requires zero table length"
 msgstr ""
 
-#: Engine/fgens.c:1581
+#: Engine/fgens.c:1577
 msgid "could not open space file"
 msgstr ""
 
-#: Engine/fgens.c:1583
+#: Engine/fgens.c:1579
 msgid "Time values must be in increasing order"
 msgstr ""
 
-#: Engine/fgens.c:1604
+#: Engine/fgens.c:1600
 msgid "GEN30: source ftable not found"
 msgstr ""
 
-#: Engine/fgens.c:1687
+#: Engine/fgens.c:1683
 msgid "GEN31: source ftable not found"
 msgstr ""
 
-#: Engine/fgens.c:1795
+#: Engine/fgens.c:1791
 #, c-format
 msgid "GEN32: source ftable %d not found"
 msgstr ""
 
-#: Engine/fgens.c:1889
+#: Engine/fgens.c:1885
 msgid "GEN33: source ftable not found"
 msgstr ""
 
-#: Engine/fgens.c:2057
+#: Engine/fgens.c:2053
 msgid "unknown source table number"
 msgstr ""
 
-#: Engine/fgens.c:2089
+#: Engine/fgens.c:2085
 msgid "Gen41: negative probability not allowed"
 msgstr ""
 
-#: Engine/fgens.c:2155 Opcodes/fareygen.c:70
+#: Engine/fgens.c:2151 Opcodes/fareygen.c:70
 #, c-format
 msgid "ftable %d: "
 msgstr ""
 
-#: Engine/fgens.c:2199
+#: Engine/fgens.c:2195
 #, c-format
 msgid "ftable %d:"
 msgstr ""
 
-#: Engine/fgens.c:2214
+#: Engine/fgens.c:2210
 #, c-format
 msgid "replacing previous ftable %d"
 msgstr ""
 
-#: Engine/fgens.c:2250 Engine/fgens.c:2337 Engine/fgens.c:2361
-#: Opcodes/gab/gab.c:578 Opcodes/gab/gab.c:632 Opcodes/midiops2.c:218
+#: Engine/fgens.c:2246 Engine/fgens.c:2334 Engine/fgens.c:2358
+#: Opcodes/gab/gab.c:580 Opcodes/gab/gab.c:634 Opcodes/midiops2.c:218
 #: Opcodes/midiops2.c:370 Opcodes/midiops2.c:452 Opcodes/uggab.c:1317
 #: Opcodes/uggab.c:1344 Opcodes/uggab.c:1364 Opcodes/uggab.c:1407
 #, c-format
 msgid "Invalid ftable no. %f"
 msgstr ""
 
-#: Engine/fgens.c:2255
+#: Engine/fgens.c:2251
 #, c-format
 msgid "deferred-size ftable %f illegal here"
 msgstr ""
 
-#: Engine/fgens.c:2281
+#: Engine/fgens.c:2278 Engine/fgens.c:2848
 #, c-format
 msgid "Deferred load of '%s' failed"
 msgstr ""
 
-#: Engine/fgens.c:2343
+#: Engine/fgens.c:2340
 #, c-format
 msgid "Deferred-size ftable %f load not available at perf time."
 msgstr ""
 
-#: Engine/fgens.c:2402
+#: Engine/fgens.c:2399
 #, c-format
 msgid "non-deferred ftable %d needs size %d\n"
 msgstr ""
 
-#: Engine/fgens.c:2449 Opcodes/loscilx.c:62
+#: Engine/fgens.c:2446 Opcodes/loscilx.c:64
 #, c-format
 msgid "invalid sample format: %d"
 msgstr ""
 
-#: Engine/fgens.c:2457 Engine/fgens.c:2718
+#: Engine/fgens.c:2454 Engine/fgens.c:2714
 #, c-format
 msgid "channel %d illegal"
 msgstr ""
 
-#: Engine/fgens.c:2463
+#: Engine/fgens.c:2460
 msgid "deferred alloc\n"
 msgstr ""
 
-#: Engine/fgens.c:2471
+#: Engine/fgens.c:2468
 msgid "deferred size, but filesize unknown"
 msgstr ""
 
-#: Engine/fgens.c:2474
+#: Engine/fgens.c:2471
 #, c-format
 msgid "  defer length %d\n"
 msgstr ""
 
-#: Engine/fgens.c:2543
+#: Engine/fgens.c:2540
 msgid "GEN1: input file truncated by ftable size"
 msgstr ""
 
-#: Engine/fgens.c:2547
+#: Engine/fgens.c:2544
 #, c-format
 msgid "\tlooping endpoint %d exceeds ftsize %d\n"
 msgstr ""
 
-#: Engine/fgens.c:2569
+#: Engine/fgens.c:2566
 msgid "GEN1 read error"
 msgstr ""
 
-#: Engine/fgens.c:2574
+#: Engine/fgens.c:2571
 msgid "GEN1: aiff file truncated by ftable size"
 msgstr ""
 
-#: Engine/fgens.c:2575
+#: Engine/fgens.c:2572
 #, c-format
 msgid "\taudio samps %d exceeds ftsize %d"
 msgstr ""
 
-#: Engine/fgens.c:2619
+#: Engine/fgens.c:2616
 msgid "wrong number of ftable arguments"
 msgstr ""
 
-#: Engine/fgens.c:2629 OOps/pstream.c:326
+#: Engine/fgens.c:2626 OOps/pstream.c:326
 msgid "Failed to load PVOC-EX file"
 msgstr ""
 
-#: Engine/fgens.c:2640 InOut/midirecv.c:416 OOps/midiops.c:377
+#: Engine/fgens.c:2637 InOut/midirecv.c:416 OOps/midiops.c:377
 #: OOps/midiops.c:419 OOps/midiops.c:431
 msgid "illegal channel number"
 msgstr ""
 
-#: Engine/fgens.c:2658
+#: Engine/fgens.c:2655
 msgid "ftable size too small"
 msgstr ""
 
-#: Engine/fgens.c:2734 Opcodes/mp3in.c:79 Opcodes/mp3in.c:218
+#: Engine/fgens.c:2730 Opcodes/mp3in.c:80 Opcodes/mp3in.c:219
 msgid "Not enough memory\n"
 msgstr ""
 
-#: Engine/fgens.c:2831
+#: Engine/fgens.c:2873
 msgid "gen51: invalid number of p-fields (too few grades)"
 msgstr ""
 
-#: Engine/fgens.c:2871
+#: Engine/fgens.c:2913
 msgid "number of channels inconsistent with number of args"
 msgstr ""
 
-#: Engine/fgens.c:3030
+#: Engine/fgens.c:3072
 msgid "GEN53: invalid number of gen arguments"
 msgstr ""
 
-#: Engine/fgens.c:3040
+#: Engine/fgens.c:3082
 msgid "GEN53: invalid table length"
 msgstr ""
 
-#: Engine/fgens.c:3044
+#: Engine/fgens.c:3086
 msgid "GEN53: invalid source table number"
 msgstr ""
 
-#: Engine/fgens.c:3047
+#: Engine/fgens.c:3089
 msgid "GEN53: mode must be in the range 0 to 15"
 msgstr ""
 
-#: Engine/fgens.c:3051
+#: Engine/fgens.c:3093
 msgid "GEN53: invalid source table length"
 msgstr ""
 
-#: Engine/fgens.c:3056
+#: Engine/fgens.c:3098
 msgid "GEN53: invalid window table"
 msgstr ""
 
@@ -888,31 +849,31 @@ msgstr ""
 msgid "Instrument %d muted\n"
 msgstr ""
 
-#: Engine/insert.c:103 Engine/insert.c:1249
+#: Engine/insert.c:103 Engine/insert.c:1301
 #, c-format
 msgid "instr %s expects midi event data, cannot run from score\n"
 msgstr ""
 
-#: Engine/insert.c:106 Engine/insert.c:1252
+#: Engine/insert.c:106 Engine/insert.c:1304
 #, c-format
 msgid "instr %d expects midi event data, cannot run from score\n"
 msgstr ""
 
-#: Engine/insert.c:115 Engine/insert.c:279 Engine/insert.c:1234
+#: Engine/insert.c:115 Engine/insert.c:279 Engine/insert.c:1286
 #, c-format
 msgid "cannot allocate last note because it exceeds 100%% of cpu time"
 msgstr ""
 
-#: Engine/insert.c:121 Engine/insert.c:285 Engine/insert.c:1239
+#: Engine/insert.c:121 Engine/insert.c:285 Engine/insert.c:1291
 msgid "cannot allocate last note because it exceeds instr maxalloc"
 msgstr ""
 
-#: Engine/insert.c:137 Engine/insert.c:305 Engine/insert.c:1270
+#: Engine/insert.c:137 Engine/insert.c:305 Engine/insert.c:1322
 #, c-format
 msgid "new alloc for instr %s:\n"
 msgstr ""
 
-#: Engine/insert.c:139 Engine/insert.c:307 Engine/insert.c:1272
+#: Engine/insert.c:139 Engine/insert.c:307 Engine/insert.c:1324
 #, c-format
 msgid "new alloc for instr %d:\n"
 msgstr ""
@@ -927,12 +888,12 @@ msgstr ""
 msgid "instr %d uses %d p-fields but is given %d"
 msgstr ""
 
-#: Engine/insert.c:251 Engine/insert.c:463
+#: Engine/insert.c:251 Engine/insert.c:482
 #, c-format
 msgid "instr %s now active:\n"
 msgstr ""
 
-#: Engine/insert.c:253 Engine/insert.c:465
+#: Engine/insert.c:253 Engine/insert.c:484
 #, c-format
 msgid "instr %d now active:\n"
 msgstr ""
@@ -952,153 +913,153 @@ msgstr ""
 msgid "MIDI note overlaps with key %d on same channel"
 msgstr ""
 
-#: Engine/insert.c:566
+#: Engine/insert.c:585
 #, c-format
 msgid "removed instance of instr %s\n"
 msgstr ""
 
-#: Engine/insert.c:568
+#: Engine/insert.c:587
 #, c-format
 msgid "removed instance of instr %d\n"
 msgstr ""
 
-#: Engine/insert.c:691
+#: Engine/insert.c:710
 msgid "inactive allocs returned to freespace\n"
 msgstr ""
 
-#: Engine/insert.c:716
+#: Engine/insert.c:735
 #, c-format
 msgid "could not find playing instr %f\n"
 msgstr ""
 
-#: Engine/insert.c:729
+#: Engine/insert.c:748
 msgid ""
 "\n"
 "INIT ERROR: "
 msgstr ""
 
-#: Engine/insert.c:742
+#: Engine/insert.c:761
 #, c-format
 msgid "INIT ERROR in instr %d (opcode %s): "
 msgstr ""
 
-#: Engine/insert.c:745
+#: Engine/insert.c:764
 #, c-format
 msgid "INIT ERROR in instr %d (subinstr %d): "
 msgstr ""
 
-#: Engine/insert.c:749
+#: Engine/insert.c:768
 #, c-format
 msgid "INIT ERROR in instr %d: "
 msgstr ""
 
-#: Engine/insert.c:767
+#: Engine/insert.c:786
 msgid ""
 "\n"
 "PERF ERROR: "
 msgstr ""
 
-#: Engine/insert.c:780
+#: Engine/insert.c:799
 #, c-format
 msgid "PERF ERROR in instr %d (opcode %s): "
 msgstr ""
 
-#: Engine/insert.c:783
+#: Engine/insert.c:802
 #, c-format
 msgid "PERF ERROR in instr %d (subinstr %d): "
 msgstr ""
 
-#: Engine/insert.c:787
+#: Engine/insert.c:806
 #, c-format
 msgid "PERF ERROR in instr %d: "
 msgstr ""
 
-#: Engine/insert.c:792
+#: Engine/insert.c:811
 msgid "   note aborted\n"
 msgstr ""
 
-#: Engine/insert.c:820
+#: Engine/insert.c:839
 msgid "subinstr: number of output args greater than nchnls"
 msgstr ""
 
-#: Engine/insert.c:861
+#: Engine/insert.c:880
 msgid "subinstr: too many p-fields"
 msgstr ""
 
-#: Engine/insert.c:920
+#: Engine/insert.c:939
 #, c-format
 msgid "%s: invalid local ksmps value: %d"
 msgstr ""
 
-#: Engine/insert.c:1040 OOps/bus.c:835 Opcodes/stackops.c:293
+#: Engine/insert.c:1062 OOps/bus.c:835 Opcodes/stackops.c:286
 #, c-format
 msgid "%s: not initialised"
 msgstr ""
 
-#: Engine/insert.c:1169
+#: Engine/insert.c:1221
 #, c-format
 msgid "setksmps: invalid ksmps value: %d"
 msgstr ""
 
-#: Engine/insert.c:1225
+#: Engine/insert.c:1277
 #, c-format
 msgid "schedule event ignored. instr %d undefined\n"
 msgstr ""
 
-#: Engine/insert.c:1303
+#: Engine/insert.c:1355
 #, c-format
 msgid "instr %s pmax = %d, note pcnt = %d"
 msgstr ""
 
-#: Engine/insert.c:1306
+#: Engine/insert.c:1358
 #, c-format
 msgid "instr %d pmax = %d, note pcnt = %d"
 msgstr ""
 
-#: Engine/insert.c:1314
+#: Engine/insert.c:1366
 #, c-format
 msgid "psave beg at %p\n"
 msgstr ""
 
-#: Engine/insert.c:1322
+#: Engine/insert.c:1374
 #, c-format
 msgid "   ending at %p\n"
 msgstr ""
 
-#: Engine/insert.c:1466
+#: Engine/insert.c:1518
 msgid "subinstr: not initialised"
 msgstr ""
 
-#: Engine/insert.c:1723
+#: Engine/insert.c:1855
 #, c-format
 msgid ""
 "instr %d allocated at %p\n"
 "\tlclbas %p, opds %p\n"
 msgstr ""
 
-#: Engine/insert.c:1740
+#: Engine/insert.c:1872
 #, c-format
 msgid "op %d (%s) allocated at %p\n"
 msgstr ""
 
-#: Engine/insert.c:1766
+#: Engine/insert.c:1898
 msgid "null iopadr"
 msgstr ""
 
-#: Engine/insert.c:1777
+#: Engine/insert.c:1909
 msgid "null opadr"
 msgstr ""
 
-#: Engine/insert.c:1834
+#: Engine/insert.c:1966
 msgid "inconsistent opds total"
 msgstr ""
 
-#: Engine/insert.c:1879
+#: Engine/insert.c:2011
 #, c-format
 msgid "Instrument %s is still active"
 msgstr ""
 
-#: Engine/insert.c:1882
+#: Engine/insert.c:2014
 #, c-format
 msgid "Instrument %d is still active"
 msgstr ""
@@ -1132,7 +1093,7 @@ msgstr ""
 msgid "multiple string p-fields"
 msgstr ""
 
-#: Engine/linevent.c:273 Engine/rdorch.c:1157
+#: Engine/linevent.c:273 Engine/rdorch.c:1184
 msgid "unmatched quotes"
 msgstr ""
 
@@ -1191,297 +1152,292 @@ msgstr ""
 msgid "memory allocate failure for %lu"
 msgstr ""
 
-#: Engine/memfiles.c:112
+#: Engine/memfiles.c:113
 #, c-format
 msgid "cannot load %s\n"
 msgstr ""
 
-#: Engine/memfiles.c:118
+#: Engine/memfiles.c:119
 #, c-format
 msgid "cannot load %s, or SADIR undefined\n"
 msgstr ""
 
-#: Engine/memfiles.c:130
+#: Engine/memfiles.c:131
 #, c-format
 msgid "error processing file %s\n"
 msgstr ""
 
-#: Engine/memfiles.c:136 Engine/memfiles.c:319
+#: Engine/memfiles.c:137 Engine/memfiles.c:320
 #, c-format
 msgid "file %s (%ld bytes) loaded into memory\n"
 msgstr ""
 
-#: Engine/memfiles.c:199
+#: Engine/memfiles.c:200
 msgid ""
 "PVOCEX_LoadFile(): error:\n"
 "    "
 msgstr ""
 
-#: Engine/memfiles.c:216
+#: Engine/memfiles.c:217
 msgid "Empty or NULL file name"
 msgstr ""
 
-#: Engine/memfiles.c:234
+#: Engine/memfiles.c:235
 #, c-format
 msgid "unable to open pvocex file %s: %s"
 msgstr ""
 
-#: Engine/memfiles.c:240
+#: Engine/memfiles.c:241
 #, c-format
 msgid "pvoc-ex file %s is not 32bit floats"
 msgstr ""
 
-#: Engine/memfiles.c:246
+#: Engine/memfiles.c:247
 #, c-format
 msgid "pvoc-ex file %s not in AMP_FREQ format"
 msgstr ""
 
-#: Engine/memfiles.c:252
+#: Engine/memfiles.c:253
 #, c-format
 msgid "pvoc-ex file %s is empty!"
 msgstr ""
 
-#: Engine/memfiles.c:282
+#: Engine/memfiles.c:283
 #, c-format
 msgid "error reading pvoc-ex file %s"
 msgstr ""
 
-#: Engine/memfiles.c:286
+#: Engine/memfiles.c:287
 #, c-format
 msgid "error reading pvoc-ex file %s after %d frames"
 msgstr ""
 
-#: Engine/memfiles.c:291 Opcodes/pvinterp.c:71 Opcodes/pvinterp.c:174
-#: Opcodes/pvinterp.c:346 Opcodes/ugens9.c:97 Opcodes/vpvoc.c:201
+#: Engine/memfiles.c:292 Opcodes/pvinterp.c:71 Opcodes/pvinterp.c:173
+#: Opcodes/pvinterp.c:344 Opcodes/ugens9.c:97 Opcodes/vpvoc.c:202
 #, c-format
 msgid "%s's srate = %8.0f, orch's srate = %8.0f"
 msgstr ""
 
-#: Engine/memfiles.c:389
+#: Engine/memfiles.c:390
 #, c-format
 msgid "csoundLoadSoundFile(): failed to open '%s'"
 msgstr ""
 
-#: Engine/memfiles.c:444
+#: Engine/memfiles.c:445
 #, c-format
 msgid "csoundLoadSoundFile(): error reading '%s'"
 msgstr ""
 
-#: Engine/memfiles.c:450
+#: Engine/memfiles.c:451
 #, c-format
 msgid ""
 "File '%s' (sr = %d Hz, %d channel(s), %lu sample frames) loaded into memory\n"
 msgstr ""
 
-#: Engine/musmon.c:79
+#: Engine/musmon.c:81
 #, c-format
 msgid "Elapsed time at %s: real: %.3fs, CPU: %.3fs\n"
 msgstr ""
 
-#: Engine/musmon.c:106
+#: Engine/musmon.c:108
 msgid "illegal istartempo value"
 msgstr ""
 
-#: Engine/musmon.c:109
+#: Engine/musmon.c:111
 msgid "Beat mode not in force"
 msgstr ""
 
-#: Engine/musmon.c:182 Top/main.c:122
+#: Engine/musmon.c:184 Top/main.c:121
 #, c-format
 msgid "Csound version %s beta (double samples) %s\n"
 msgstr ""
 
-#: Engine/musmon.c:185 Top/main.c:125
+#: Engine/musmon.c:187 Top/main.c:124
 #, c-format
 msgid "Csound version %s (double samples) %s\n"
 msgstr ""
 
-#: Engine/musmon.c:190 Top/main.c:114
+#: Engine/musmon.c:192 Top/main.c:113
 #, c-format
 msgid "Csound version %s beta (float samples) %s\n"
 msgstr ""
 
-#: Engine/musmon.c:193 Top/main.c:117
+#: Engine/musmon.c:195 Top/main.c:116
 #, c-format
 msgid "Csound version %s (float samples) %s\n"
 msgstr ""
 
-#: Engine/musmon.c:218
+#: Engine/musmon.c:220
 msgid "orch now loaded\n"
 msgstr ""
 
-#: Engine/musmon.c:243
+#: Engine/musmon.c:245
 msgid "k-period aligned audio buffering\n"
 msgstr ""
 
-#: Engine/musmon.c:259
+#: Engine/musmon.c:261
 #, c-format
 msgid "audio buffered in %d sample-frame blocks\n"
 msgstr ""
 
-#: Engine/musmon.c:276 Top/main.c:395
-#, c-format
-msgid "cannot reopen %s"
-msgstr ""
-
-#: Engine/musmon.c:287
+#: Engine/musmon.c:283
 msgid "using Cscore processing\n"
 msgstr ""
 
-#: Engine/musmon.c:290
+#: Engine/musmon.c:286
 msgid "cannot create cscore.out"
 msgstr ""
 
-#: Engine/musmon.c:303
+#: Engine/musmon.c:299
 msgid "cannot reopen cscore.out"
 msgstr ""
 
-#: Engine/musmon.c:307 Engine/musmon.c:315
+#: Engine/musmon.c:303
 msgid "cannot reopen cscore.srt"
 msgstr ""
 
-#: Engine/musmon.c:309
+#: Engine/musmon.c:305
 msgid "sorting cscore.out ..\n"
 msgstr ""
 
-#: Engine/musmon.c:313 Top/main.c:409
+#: Engine/musmon.c:311 Top/main.c:401
 msgid "\t... done\n"
 msgstr ""
 
-#: Engine/musmon.c:317
+#: Engine/musmon.c:312
 msgid "playing from cscore.srt\n"
 msgstr ""
 
-#: Engine/musmon.c:321 Engine/musmon.c:453 Engine/musmon.c:1021
-#: Engine/musmon.c:1225
+#: Engine/musmon.c:316 Engine/musmon.c:446 Engine/musmon.c:1015
+#: Engine/musmon.c:1216
 #, c-format
 msgid "SECTION %d:\n"
 msgstr ""
 
-#: Engine/musmon.c:397
+#: Engine/musmon.c:390
 msgid "end of score.\t\t   overall amps:"
 msgstr ""
 
-#: Engine/musmon.c:408
+#: Engine/musmon.c:401
 msgid ""
 "\n"
 "\t   overall samples out of range:"
 msgstr ""
 
-#: Engine/musmon.c:412
+#: Engine/musmon.c:405
 #, c-format
 msgid ""
 "\n"
 "%d errors in performance\n"
 msgstr ""
 
-#: Engine/musmon.c:414
+#: Engine/musmon.c:407
 msgid "end of performance"
 msgstr ""
 
-#: Engine/musmon.c:428
+#: Engine/musmon.c:421
 msgid "no sound written to disk\n"
 msgstr ""
 
-#: Engine/musmon.c:443
+#: Engine/musmon.c:436
 #, c-format
 msgid "%c\tbeep!\n"
 msgstr ""
 
-#: Engine/musmon.c:509 Engine/musmon.c:555
+#: Engine/musmon.c:502 Engine/musmon.c:548
 msgid "\t number of samples out of range:"
 msgstr ""
 
-#: Engine/musmon.c:548
+#: Engine/musmon.c:541
 #, c-format
 msgid "end of section %d\t sect peak amps:"
 msgstr ""
 
-#: Engine/musmon.c:550
+#: Engine/musmon.c:543
 msgid "end of lplay event list\t      peak amps:"
 msgstr ""
 
-#: Engine/musmon.c:614 Engine/musmon.c:639
+#: Engine/musmon.c:607 Engine/musmon.c:632
 #, c-format
 msgid " - note deleted. instr %s undefined"
 msgstr ""
 
-#: Engine/musmon.c:618
+#: Engine/musmon.c:611
 #, c-format
 msgid "Setting instrument %s %s\n"
 msgstr ""
 
-#: Engine/musmon.c:619 Engine/musmon.c:632
+#: Engine/musmon.c:612 Engine/musmon.c:625
 #: Opcodes/fluidOpcodes/fluidOpcodes.c:207
 #: Opcodes/fluidOpcodes/fluidOpcodes.c:208
 msgid "off"
 msgstr ""
 
-#: Engine/musmon.c:619 Engine/musmon.c:632
+#: Engine/musmon.c:612 Engine/musmon.c:625
 #: Opcodes/fluidOpcodes/fluidOpcodes.c:207
 #: Opcodes/fluidOpcodes/fluidOpcodes.c:208
 msgid "on"
 msgstr ""
 
-#: Engine/musmon.c:627 Engine/musmon.c:666
+#: Engine/musmon.c:620 Engine/musmon.c:659
 #, c-format
 msgid " - note deleted. instr %d(%d) undefined"
 msgstr ""
 
-#: Engine/musmon.c:631
+#: Engine/musmon.c:624
 #, c-format
 msgid "Setting instrument %d %s\n"
 msgstr ""
 
-#: Engine/musmon.c:657
+#: Engine/musmon.c:650
 #, c-format
 msgid " - note deleted.  i%d (%s) had %d init errors"
 msgstr ""
 
-#: Engine/musmon.c:687
+#: Engine/musmon.c:680
 #, c-format
 msgid " - note deleted.  i%d had %d init errors"
 msgstr ""
 
-#: Engine/musmon.c:708
+#: Engine/musmon.c:701
 #, c-format
 msgid "time advanced %5.3f beats by score request\n"
 msgstr ""
 
-#: Engine/musmon.c:725
+#: Engine/musmon.c:719
 #, c-format
 msgid "\t\t   T%7.3f - note deleted. "
 msgstr ""
 
-#: Engine/musmon.c:729
+#: Engine/musmon.c:723
 #, c-format
 msgid "instr %s had %d init errors\n"
 msgstr ""
 
-#: Engine/musmon.c:731
+#: Engine/musmon.c:725
 #, c-format
 msgid "instr %d had %d init errors\n"
 msgstr ""
 
-#: Engine/musmon.c:822
+#: Engine/musmon.c:816
 msgid "terminating.\n"
 msgstr ""
 
-#: Engine/musmon.c:908
+#: Engine/musmon.c:902
 #, c-format
 msgid "error in score.  illegal opcode %c (ASCII %d)\n"
 msgstr ""
 
-#: Engine/musmon.c:1135
+#: Engine/musmon.c:1129
 msgid "insert_score_event(): invalid instrument number or name\n"
 msgstr ""
 
-#: Engine/musmon.c:1155
+#: Engine/musmon.c:1149
 #, c-format
 msgid "insert_score_event(): unknown opcode: %c\n"
 msgstr ""
 
-#: Engine/musmon.c:1178
+#: Engine/musmon.c:1172
 msgid "insert_score_event(): insufficient p-fields\n"
 msgstr ""
 
@@ -1504,350 +1460,402 @@ msgstr ""
 msgid "cannot find the specified instrument or opcode"
 msgstr ""
 
-#: Engine/new_orc_parser.c:74 Engine/rdorch.c:488
+#: Engine/new_orc_parser.c:91
+msgid "Unmatched #ifdef\n"
+msgstr ""
+
+#: Engine/otran.c:149 Engine/symbtab.c:413
 #, c-format
-msgid "cannot open orch file %s"
+msgid "invalid input type for opcode %s"
+msgstr ""
+
+#: Engine/otran.c:154 Engine/symbtab.c:418
+#, c-format
+msgid "too many input args for opcode %s"
+msgstr ""
+
+#: Engine/otran.c:169 Engine/symbtab.c:433
+#, c-format
+msgid "too many output args for opcode %s"
+msgstr ""
+
+#: Engine/otran.c:194 Engine/symbtab.c:458
+#, c-format
+msgid "invalid output type for opcode %s"
 msgstr ""
 
-#: Engine/otran.c:312 Engine/otran.c:319
+#: Engine/otran.c:325 Engine/otran.c:332
 msgid "missing instrument number or name"
 msgstr ""
 
-#: Engine/otran.c:324
+#: Engine/otran.c:337
 msgid "illegal instr number"
 msgstr ""
 
-#: Engine/otran.c:374
+#: Engine/otran.c:388
 msgid "No opcode name"
 msgstr ""
 
-#: Engine/otran.c:379 Engine/symbtab.c:501
+#: Engine/otran.c:393 Engine/symbtab.c:538
 msgid "invalid name for opcode"
 msgstr ""
 
-#: Engine/otran.c:383
+#: Engine/otran.c:397
 #, c-format
 msgid ""
 "opcode declaration error (usage: opcode name, outtypes, intypes) -- opcode %s"
 msgstr ""
 
-#: Engine/otran.c:394 Engine/symbtab.c:511
+#: Engine/otran.c:408 Engine/symbtab.c:548
 #, c-format
 msgid "cannot redefine %s"
 msgstr ""
 
-#: Engine/otran.c:398 Engine/symbtab.c:516
+#: Engine/otran.c:412 Engine/symbtab.c:553
 #, c-format
 msgid "WARNING: redefined opcode: %s\n"
 msgstr ""
 
-#: Engine/otran.c:489
+#: Engine/otran.c:503
 msgid "string constant used as output"
 msgstr ""
 
-#: Engine/otran.c:520
+#: Engine/otran.c:534
 msgid "Missing endin"
 msgstr ""
 
-#: Engine/otran.c:584
+#: Engine/otran.c:599
 msgid "perf-pass statements illegal in header blk"
 msgstr ""
 
-#: Engine/otran.c:588
+#: Engine/otran.c:603
 #, c-format
 msgid "%d syntax errors in orchestra.  compilation invalid"
 msgstr ""
 
-#: Engine/otran.c:1238
+#: Engine/otran.c:1257
 msgid "bad value for 0dbfs: must be positive."
 msgstr ""
 
-#: Engine/otran.c:1248
+#: Engine/otran.c:1267
 #, c-format
 msgid "sample rate overrides: esr = %7.4f, ekr = %7.4f, ksmps = %d\n"
 msgstr ""
 
-#: Engine/otran.c:1320
+#: Engine/otran.c:1339
 msgid "internal error: string constant outarg"
 msgstr ""
 
-#: Engine/otran.c:1346
+#: Engine/otran.c:1365
 #, c-format
 msgid "i%d pset args != pmax"
 msgstr ""
 
-#: Engine/otran.c:1409
+#: Engine/otran.c:1428
 #, c-format
 msgid ""
 "sr = %.7g, kr = %.7g, ksmps = %.7g\n"
 "error:"
 msgstr ""
 
-#: Engine/otran.c:1442
+#: Engine/otran.c:1461
 msgid "header init errors"
 msgstr ""
 
-#: Engine/rdorch.c:166
+#: Engine/rdorch.c:169
 msgid "ungetorchar(): buffer overflow"
 msgstr ""
 
-#: Engine/rdorch.c:330
+#: Engine/rdorch.c:348
 msgid "Unexpected end of orchestra file"
 msgstr ""
 
-#: Engine/rdorch.c:484
-msgid "orch compiler:\n"
+#: Engine/rdorch.c:431 Engine/sread.c:758
+#, c-format
+msgid "Macro definition for %*s\n"
 msgstr ""
 
-#: Engine/rdorch.c:490
-#, c-format
-msgid "cannot find end of file %s"
+#: Engine/rdorch.c:434
+msgid "Invalid macro name for --omacro"
+msgstr ""
+
+#: Engine/rdorch.c:502
+msgid "orch compiler:\n"
 msgstr ""
 
-#: Engine/rdorch.c:492
+#: Engine/rdorch.c:520
 #, c-format
-msgid "ftell error on %s"
+msgid "cannot open orch file %s"
 msgstr ""
 
-#: Engine/rdorch.c:657 Engine/sread.c:1572
+#: Engine/rdorch.c:684 Engine/sread.c:1584
 #, c-format
 msgid "Macro definition for %s\n"
 msgstr ""
 
-#: Engine/rdorch.c:748
+#: Engine/rdorch.c:716 Engine/sread.c:1607
+msgid "macro error\n"
+msgstr ""
+
+#: Engine/rdorch.c:775
 #, c-format
 msgid "Cannot open #include'd file %s\n"
 msgstr ""
 
-#: Engine/rdorch.c:797
+#: Engine/rdorch.c:824
 msgid "unmatched #ifdef"
 msgstr ""
 
-#: Engine/rdorch.c:808
+#: Engine/rdorch.c:835
 msgid "Unmatched #else"
 msgstr ""
 
-#: Engine/rdorch.c:822
+#: Engine/rdorch.c:849
 msgid "Unmatched #endif"
 msgstr ""
 
-#: Engine/rdorch.c:875
+#: Engine/rdorch.c:872 Engine/sread.c:1694
+#, c-format
+msgid "macro %s undefined\n"
+msgstr ""
+
+#: Engine/rdorch.c:886 Engine/sread.c:286
+msgid "Undefining undefined macro"
+msgstr ""
+
+#: Engine/rdorch.c:902
 msgid "Unexpected # character"
 msgstr ""
 
-#: Engine/rdorch.c:877
+#: Engine/rdorch.c:904
 #, c-format
 msgid "Unknown # option: '%s'"
 msgstr ""
 
-#: Engine/rdorch.c:903 Engine/sread.c:394
+#: Engine/rdorch.c:928 Engine/sread.c:380
+#, c-format
+msgid "Undefined macro: '%s'"
+msgstr ""
+
+#: Engine/rdorch.c:930 Engine/sread.c:378
 msgid "Macro expansion symbol ($) without macro name"
 msgstr ""
 
-#: Engine/rdorch.c:908 Engine/sread.c:400
+#: Engine/rdorch.c:935 Engine/sread.c:384
 #, c-format
 msgid "$%s matches macro name $%s"
 msgstr ""
 
-#: Engine/rdorch.c:925 Engine/sread.c:417
+#: Engine/rdorch.c:952 Engine/sread.c:401
 msgid "Syntax error in macro call"
 msgstr ""
 
-#: Engine/rdorch.c:975
+#: Engine/rdorch.c:967
+#, c-format
+msgid ""
+"Missing argument terminator\n"
+"%.98s"
+msgstr ""
+
+#: Engine/rdorch.c:1002
 msgid "Unmatched #ifdef"
 msgstr ""
 
-#: Engine/rdorch.c:977
+#: Engine/rdorch.c:1004
 msgid "file too large for ortext space"
 msgstr ""
 
-#: Engine/rdorch.c:984
+#: Engine/rdorch.c:1011
 #, c-format
 msgid "%d (%d) lines read\n"
 msgstr ""
 
-#: Engine/rdorch.c:1052
+#: Engine/rdorch.c:1079
 #, c-format
 msgid "LINE %d:"
 msgstr ""
 
-#: Engine/rdorch.c:1071
+#: Engine/rdorch.c:1098
 msgid "invalid 'elseif' statement.  must have a corresponding 'if'"
 msgstr ""
 
-#: Engine/rdorch.c:1078
+#: Engine/rdorch.c:1105
 msgid "'elseif' statement cannot occur after an 'else'"
 msgstr ""
 
-#: Engine/rdorch.c:1134
+#: Engine/rdorch.c:1161
 msgid "Unmatched comment"
 msgstr ""
 
-#: Engine/rdorch.c:1198
+#: Engine/rdorch.c:1225
 msgid "misplaced comma"
 msgstr ""
 
-#: Engine/rdorch.c:1200 Engine/rdorch.c:1342 Engine/rdorch.c:1440
+#: Engine/rdorch.c:1227 Engine/rdorch.c:1369 Engine/rdorch.c:1467
 msgid "unbalanced parens"
 msgstr ""
 
-#: Engine/rdorch.c:1364
+#: Engine/rdorch.c:1391
 #, c-format
 msgid "illegal character %c"
 msgstr ""
 
-#: Engine/rdorch.c:1377
+#: Engine/rdorch.c:1404
 msgid "invalid 'else' statement.  must have a corresponding 'if'"
 msgstr ""
 
-#: Engine/rdorch.c:1384
+#: Engine/rdorch.c:1411
 msgid "duplicate 'else' statement"
 msgstr ""
 
-#: Engine/rdorch.c:1413
+#: Engine/rdorch.c:1440
 msgid "invalid 'endif' statement.  must have a corresponding 'if'"
 msgstr ""
 
-#: Engine/rdorch.c:1442
+#: Engine/rdorch.c:1469
 msgid "no legal opcode"
 msgstr ""
 
-#: Engine/rdorch.c:1573
+#: Engine/rdorch.c:1600
 msgid "illegal opcod from expr anal"
 msgstr ""
 
-#: Engine/rdorch.c:1606 Engine/rdorch.c:1628
+#: Engine/rdorch.c:1633 Engine/rdorch.c:1655
 #, c-format
 msgid "failed to find %s, output arg '%s' illegal type"
 msgstr ""
 
-#: Engine/rdorch.c:1670
+#: Engine/rdorch.c:1697
 #, c-format
 msgid "failed to find %s, input arg illegal type"
 msgstr ""
 
-#: Engine/rdorch.c:1684
+#: Engine/rdorch.c:1711
 msgid "setksmps is allowed only in user defined opcodes"
 msgstr ""
 
-#: Engine/rdorch.c:1687
+#: Engine/rdorch.c:1714
 msgid "multiple uses of setksmps in the same opcode definition"
 msgstr ""
 
-#: Engine/rdorch.c:1710
+#: Engine/rdorch.c:1739
 #, c-format
 msgid "%s inconsistent with global nchnls (%d); replaced with %s\n"
 msgstr ""
 
-#: Engine/rdorch.c:1740
+#: Engine/rdorch.c:1770
 msgid "opcode blks cannot be nested (missing 'endop'?)"
 msgstr ""
 
-#: Engine/rdorch.c:1742
+#: Engine/rdorch.c:1772
 msgid "opcode not allowed in instr block"
 msgstr ""
 
-#: Engine/rdorch.c:1751
+#: Engine/rdorch.c:1781
 msgid "unmatched endop"
 msgstr ""
 
-#: Engine/rdorch.c:1753
+#: Engine/rdorch.c:1783
 msgid "endop not allowed in instr block"
 msgstr ""
 
-#: Engine/rdorch.c:1758
+#: Engine/rdorch.c:1788
 msgid "instr not allowed in opcode block"
 msgstr ""
 
-#: Engine/rdorch.c:1761
+#: Engine/rdorch.c:1791
 msgid "instr blocks cannot be nested (missing 'endin'?)"
 msgstr ""
 
-#: Engine/rdorch.c:1769
+#: Engine/rdorch.c:1799
 msgid "endin not allowed in opcode blk"
 msgstr ""
 
-#: Engine/rdorch.c:1771
+#: Engine/rdorch.c:1801
 msgid "unmatched endin"
 msgstr ""
 
-#: Engine/rdorch.c:1781
+#: Engine/rdorch.c:1811
 msgid "misplaced opcode"
 msgstr ""
 
-#: Engine/rdorch.c:1787
+#: Engine/rdorch.c:1817
 msgid "xout is allowed only in user defined opcodes"
 msgstr ""
 
-#: Engine/rdorch.c:1790
+#: Engine/rdorch.c:1820
 msgid "multiple uses of xout in the same opcode definition"
 msgstr ""
 
-#: Engine/rdorch.c:1837
+#: Engine/rdorch.c:1867
 msgid "too many input args"
 msgstr ""
 
-#: Engine/rdorch.c:1909
+#: Engine/rdorch.c:1893
+msgid "insufficient required arguments"
+msgstr ""
+
+#: Engine/rdorch.c:1940
 #, c-format
-msgid "input arg '%s' used before defined"
+msgid "input arg '%s' used before defined \n"
 msgstr ""
 
-#: Engine/rdorch.c:1956
+#: Engine/rdorch.c:1987
 msgid "xin is allowed only in user defined opcodes"
 msgstr ""
 
-#: Engine/rdorch.c:1959
+#: Engine/rdorch.c:1990
 msgid "multiple uses of xin in the same opcode definition"
 msgstr ""
 
-#: Engine/rdorch.c:2004
+#: Engine/rdorch.c:2035
 msgid "illegal no of output args"
 msgstr ""
 
-#: Engine/rdorch.c:2023
+#: Engine/rdorch.c:2054
 #, c-format
 msgid "output name previously used, type '%c' must be uniquely defined"
 msgstr ""
 
-#: Engine/rdorch.c:2028
+#: Engine/rdorch.c:2059
 #, c-format
 msgid "output arg '%s' illegal type"
 msgstr ""
 
-#: Engine/rdorch.c:2069
+#: Engine/rdorch.c:2100
 #, c-format
 msgid "input arg '%s' of type %s not allowed when expecting %c"
 msgstr ""
 
-#: Engine/rdorch.c:2155
+#: Engine/rdorch.c:2187
 msgid "duplicate label"
 msgstr ""
 
-#: Engine/rdorch.c:2177
+#: Engine/rdorch.c:2209
 #, c-format
 msgid "error line %d.  unknown label:\n"
 msgstr ""
 
-#: Engine/rdorch.c:2192 Engine/rdorch.c:2239
+#: Engine/rdorch.c:2222 Engine/rdorch.c:2271
 msgid "error:  "
 msgstr ""
 
-#: Engine/rdorch.c:2208
+#: Engine/rdorch.c:2239
 #, c-format
 msgid ", line %d:\n"
 msgstr ""
 
-#: Engine/rdorch.c:2246
+#: Engine/rdorch.c:2278
 #, c-format
 msgid "called from line %d of macro %s"
 msgstr ""
 
-#: Engine/rdorch.c:2250
+#: Engine/rdorch.c:2282
 #, c-format
 msgid "in line %d of file input %s"
 msgstr ""
 
-#: Engine/rdscor.c:79
+#: Engine/rdscor.c:80
 #, c-format
 msgid "ERROR: illegal character %c(%.2x) in scoreline: "
 msgstr ""
@@ -1858,7 +1866,7 @@ msgid ""
 "\tremainder of line flushed\n"
 msgstr ""
 
-#: Engine/rdscor.c:144
+#: Engine/rdscor.c:146
 msgid "ERROR: too many pfields: "
 msgstr ""
 
@@ -1884,349 +1892,316 @@ msgstr ""
 msgid "  section %d:  at position %d%s"
 msgstr ""
 
-#: Engine/sread.c:217
+#: Engine/sread.c:216
 msgid "Internal error in print_input_backtrace()"
 msgstr ""
 
-#: Engine/sread.c:219
+#: Engine/sread.c:218
 #, c-format
 msgid "  included from line %d of macro %s%s"
 msgstr ""
 
-#: Engine/sread.c:220
+#: Engine/sread.c:219
 #, c-format
 msgid "  called from line %d of macro %s%s"
 msgstr ""
 
-#: Engine/sread.c:222
+#: Engine/sread.c:221
 #, c-format
 msgid "  in line %d of macro %s%s"
 msgstr ""
 
-#: Engine/sread.c:229
-#, c-format
-msgid "  included from line %d of file input %s%s"
-msgstr ""
-
-#: Engine/sread.c:230
-#, c-format
-msgid "  called from line %d of file input %s%s"
-msgstr ""
-
-#: Engine/sread.c:232
-#, c-format
-msgid "  in line %d of file input %s%s"
-msgstr ""
-
-#: Engine/sread.c:268
+#: Engine/sread.c:256
 #, c-format
 msgid "Internal error op=%c"
 msgstr ""
 
-#: Engine/sread.c:322
-msgid "ungetscochar(): buffer overflow"
-msgstr ""
-
-#: Engine/sread.c:479
+#: Engine/sread.c:464
 msgid "illegal placement of number in [] expression"
 msgstr ""
 
-#: Engine/sread.c:506
+#: Engine/sread.c:491
 msgid "illegal placement of operator ~ in [] expression"
 msgstr ""
 
-#: Engine/sread.c:516
+#: Engine/sread.c:501
 msgid "illegal placement of operator @ or @@ in [] expression"
 msgstr ""
 
-#: Engine/sread.c:548 Engine/sread.c:562
+#: Engine/sread.c:533 Engine/sread.c:547
 #, c-format
 msgid "illegal placement of operator %c in [] expression"
 msgstr ""
 
-#: Engine/sread.c:574
+#: Engine/sread.c:559
 msgid "illegal placement of '(' in [] expression"
 msgstr ""
 
-#: Engine/sread.c:580
+#: Engine/sread.c:565
 msgid "missing operand before ')' in [] expression"
 msgstr ""
 
-#: Engine/sread.c:594
+#: Engine/sread.c:579
 msgid "missing operand before closing bracket in []"
 msgstr ""
 
-#: Engine/sread.c:609
+#: Engine/sread.c:594
 #, c-format
 msgid "illegal character %c(%.2x) in [] expression"
 msgstr ""
 
-#: Engine/sread.c:658
+#: Engine/sread.c:646
 #, c-format
 msgid "%s Nested LOOP terminated, level:%d\n"
 msgstr ""
 
-#: Engine/sread.c:664
+#: Engine/sread.c:652
 #, c-format
 msgid "External LOOP terminated, level:%d\n"
 msgstr ""
 
-#: Engine/sread.c:684
+#: Engine/sread.c:696
 #, c-format
 msgid "%s  Nested LOOP section (%d) Level:%d\n"
 msgstr ""
 
-#: Engine/sread.c:689
+#: Engine/sread.c:701
 #, c-format
 msgid " External LOOP section (%d) Level:%d\n"
 msgstr ""
 
-#: Engine/sread.c:703
+#: Engine/sread.c:715
 msgid "Loop terminated\n"
 msgstr ""
 
-#: Engine/sread.c:716
+#: Engine/sread.c:733
 #, c-format
 msgid "Repeat section (%d)\n"
 msgstr ""
 
-#: Engine/sread.c:719
+#: Engine/sread.c:736
 msgid "Repeat section\n"
 msgstr ""
 
-#: Engine/sread.c:744
+#: Engine/sread.c:761
 msgid "Invalid macro name for --smacro"
 msgstr ""
 
-#: Engine/sread.c:831
+#: Engine/sread.c:865
 #, c-format
 msgid "Clockbase = %f\n"
 msgstr ""
 
-#: Engine/sread.c:898
+#: Engine/sread.c:934
 msgid "Loops are nested too deeply"
 msgstr ""
 
-#: Engine/sread.c:901
-msgid "Loop cannot start inside of a macro"
-msgstr ""
-
-#: Engine/sread.c:920
+#: Engine/sread.c:948
 msgid "{: invalid repeat count"
 msgstr ""
 
-#: Engine/sread.c:929
+#: Engine/sread.c:957
 #, c-format
 msgid "%s Nested LOOP=%d Level:%d\n"
 msgstr ""
 
-#: Engine/sread.c:935
+#: Engine/sread.c:963
 #, c-format
 msgid "External LOOP=%d Level:%d\n"
 msgstr ""
 
-#: Engine/sread.c:1004
-msgid "Repeat cannot start inside of a macro (ignored)"
-msgstr ""
-
-#: Engine/sread.c:1019
+#: Engine/sread.c:1047
 msgid "r: invalid repeat count"
 msgstr ""
 
-#: Engine/sread.c:1021
+#: Engine/sread.c:1049
 #, c-format
 msgid "Repeats=%d\n"
 msgstr ""
 
-#: Engine/sread.c:1063
+#: Engine/sread.c:1093
 #, c-format
 msgid "Named section >>>%s<<<\n"
 msgstr ""
 
-#: Engine/sread.c:1079
+#: Engine/sread.c:1108
 #, c-format
 msgid "%d: File %s position %ld\n"
 msgstr ""
 
-#: Engine/sread.c:1085
-#, c-format
-msgid "Ignoring name %s not in file\n"
-msgstr ""
-
-#: Engine/sread.c:1110
+#: Engine/sread.c:1133
 #, c-format
 msgid "Name %s not found"
 msgstr ""
 
-#: Engine/sread.c:1112
+#: Engine/sread.c:1135
 #, c-format
 msgid "Duplicate %d: %s (%s,%ld)\n"
 msgstr ""
 
-#: Engine/sread.c:1129
-#, c-format
-msgid "cannot open input file %s"
-msgstr ""
-
-#: Engine/sread.c:1149
+#: Engine/sread.c:1164
 #, c-format
 msgid "Warp_factor = %f\n"
 msgstr ""
 
-#: Engine/sread.c:1174
+#: Engine/sread.c:1189
 msgid "sread is confused on legal opcodes\n"
 msgstr ""
 
-#: Engine/sread.c:1236
+#: Engine/sread.c:1251
 msgid "No previous event for ^"
 msgstr ""
 
-#: Engine/sread.c:1241
+#: Engine/sread.c:1256
 #, c-format
 msgid "illegal space following %s, zero substituted"
 msgstr ""
 
-#: Engine/sread.c:1271
+#: Engine/sread.c:1286
 #, c-format
 msgid "ignoring '%s' in '%c' event"
 msgstr ""
 
-#: Engine/sread.c:1274
+#: Engine/sread.c:1289
 msgid "! invalid in p1, p2, or p3"
 msgstr ""
 
-#: Engine/sread.c:1275 Engine/sread.c:1280 Engine/sread.c:1730
-#: Engine/sread.c:1753 Engine/sread.c:1767
+#: Engine/sread.c:1290 Engine/sread.c:1295 Engine/sread.c:1738
+#: Engine/sread.c:1761 Engine/sread.c:1775
 msgid "      remainder of line flushed\n"
 msgstr ""
 
-#: Engine/sread.c:1279
+#: Engine/sread.c:1294
 #, c-format
 msgid "illegal character after !: '%c'"
 msgstr ""
 
-#: Engine/sread.c:1358
+#: Engine/sread.c:1373
 #, c-format
 msgid "WARNING: instr %s not found, assuming insno = -1\n"
 msgstr ""
 
-#: Engine/sread.c:1378
+#: Engine/sread.c:1393
 msgid "sread: illegal use of carry,   0 substituted\n"
 msgstr ""
 
-#: Engine/sread.c:1526
+#: Engine/sread.c:1539
 msgid "Improper \\"
 msgstr ""
 
-#: Engine/sread.c:1558
+#: Engine/sread.c:1570
 msgid "Not #define"
 msgstr ""
 
-#: Engine/sread.c:1620
+#: Engine/sread.c:1630
 #, c-format
 msgid "Macro %s with %d arguments defined\n"
 msgstr ""
 
-#: Engine/sread.c:1631
+#: Engine/sread.c:1642
 msgid "Not #include"
 msgstr ""
 
-#: Engine/sread.c:1662
+#: Engine/sread.c:1671
 #, c-format
 msgid "Cannot open #include'd file %s"
 msgstr ""
 
-#: Engine/sread.c:1673
+#: Engine/sread.c:1681
 msgid "Not #undef"
 msgstr ""
 
-#: Engine/sread.c:1692
+#: Engine/sread.c:1700
 msgid "unknown # option"
 msgstr ""
 
-#: Engine/sread.c:1729
+#: Engine/sread.c:1737
 #, c-format
 msgid "illegal opcode %c"
 msgstr ""
 
-#: Engine/sread.c:1752
+#: Engine/sread.c:1760
 #, c-format
 msgid "unexpected char %c"
 msgstr ""
 
-#: Engine/sread.c:1766
+#: Engine/sread.c:1774
 msgid "illegally placed string"
 msgstr ""
 
-#: Engine/sread.c:1773
+#: Engine/sread.c:1781
 msgid "unmatched quote"
 msgstr ""
 
-#: Engine/sread.c:1817
+#: Engine/sread.c:1825
 msgid "sread: illegal number format:  "
 msgstr ""
 
-#: Engine/sread.c:1823
+#: Engine/sread.c:1831
 msgid "   zero substituted.\n"
 msgstr ""
 
-#: Engine/swrite.c:123
+#: Engine/swrite.c:123 Engine/swritestr.c:134
 #, c-format
 msgid "swrite: unexpected opcode, section %d line %d\n"
 msgstr ""
 
-#: Engine/swrite.c:209 Engine/swrite.c:249
+#: Engine/swrite.c:209 Engine/swrite.c:249 Engine/swritestr.c:220
+#: Engine/swritestr.c:260
 #, c-format
 msgid "swrite: output, sect%d line%d p%d makes illegal reference to "
 msgstr ""
 
-#: Engine/swrite.c:216 Engine/swrite.c:255
+#: Engine/swrite.c:216 Engine/swrite.c:255 Engine/swritestr.c:227
+#: Engine/swritestr.c:266
 msgid "   Zero substituted\n"
 msgstr ""
 
-#: Engine/swrite.c:313
+#: Engine/swrite.c:313 Engine/swritestr.c:324
 #, c-format
 msgid "swrite: output, sect%d line%d p%d has illegal ramp symbol\n"
 msgstr ""
 
-#: Engine/swrite.c:317
+#: Engine/swrite.c:317 Engine/swritestr.c:328
 #, c-format
 msgid ""
 "swrite: output, sect%d line%d p%d ramp has illegal forward or backward ref\n"
 msgstr ""
 
-#: Engine/swrite.c:380 Engine/swrite.c:445
+#: Engine/swrite.c:380 Engine/swrite.c:445 Engine/swritestr.c:391
+#: Engine/swritestr.c:456
 #, c-format
 msgid "swrite: output, sect%d line%d p%d has illegal expramp symbol\n"
 msgstr ""
 
-#: Engine/swrite.c:385 Engine/swrite.c:450
+#: Engine/swrite.c:385 Engine/swrite.c:450 Engine/swritestr.c:396
+#: Engine/swritestr.c:461
 #, c-format
 msgid ""
 "swrite: output, sect%d line%d p%d expramp has illegal forward or backward "
 "ref\n"
 msgstr ""
 
-#: Engine/swrite.c:466
+#: Engine/swrite.c:466 Engine/swritestr.c:477
 #, c-format
 msgid "swrite: output, sect%d line%d p%d has illegally terminated string   "
 msgstr ""
 
-#: Engine/swrite.c:514
+#: Engine/swrite.c:514 Engine/swritestr.c:529
 #, c-format
 msgid "swrite: output, sect%d line%d p%d has illegal number  "
 msgstr ""
 
-#: Engine/swrite.c:521
+#: Engine/swrite.c:521 Engine/swritestr.c:536
 msgid "    String truncated\n"
 msgstr ""
 
-#: Engine/symbtab.c:202
+#: Engine/symbtab.c:208
 #, c-format
 msgid "Type confusion for %s (%d,%d), replacing\n"
 msgstr ""
 
-#: Engine/symbtab.c:333
+#: Engine/symbtab.c:345
 #, c-format
 msgid "Unknown word type for %s on line %d\n"
 msgstr ""
@@ -2247,6 +2222,14 @@ msgstr ""
 msgid "twarp: t segments exceed twarp array\n"
 msgstr ""
 
+#: InOut/cmidi.c:233
+msgid "CoreMIDI real time MIDI plugin for Csound\n"
+msgstr ""
+
+#: InOut/cmidi.c:247
+msgid "rtmidi: CoreMIDI module enabled\n"
+msgstr ""
+
 #: InOut/libsnd.c:486
 msgid "error: no input file name"
 msgstr ""
@@ -2270,54 +2253,69 @@ msgstr ""
 msgid "audio_in %s has %d chnls, orch %d chnls_i"
 msgstr ""
 
-#: InOut/libsnd.c:573
+#: InOut/libsnd.c:574
+#, c-format
+msgid "reading %d sample blks of %d-bit floats from %s \n"
+msgstr ""
+
+#: InOut/libsnd.c:578
 #, c-format
 msgid "reading %d-byte blks of %s from %s (%s)\n"
 msgstr ""
 
-#: InOut/libsnd.c:608
+#: InOut/libsnd.c:614
 msgid "Output file type changed to IRCAM for use in pipe\n"
 msgstr ""
 
-#: InOut/libsnd.c:628
+#: InOut/libsnd.c:634
 msgid "Failed to initialise real time audio output"
 msgstr ""
 
-#: InOut/libsnd.c:669 InOut/libsnd.c:673
+#: InOut/libsnd.c:675 InOut/libsnd.c:679
 #, c-format
 msgid "sfinit: cannot open %s"
 msgstr ""
 
-#: InOut/libsnd.c:733 util/srconv.c:485
+#: InOut/libsnd.c:741
+#, c-format
+msgid "writing %d sample blks of %d-bit floats to %s \n"
+msgstr ""
+
+#: InOut/libsnd.c:744 util/srconv.c:484
 #, c-format
 msgid "writing %d-byte blks of %s to %s"
 msgstr ""
 
-#: InOut/libsnd.c:740 InOut/libsnd.c:810
+#: InOut/libsnd.c:749 InOut/libsnd.c:824
 msgid " (raw)\n"
 msgstr ""
 
-#: InOut/libsnd.c:803
+#: InOut/libsnd.c:815
+#, c-format
+msgid "%ld %d sample blks of %d-bit floats written to %s\n"
+msgstr ""
+
+#: InOut/libsnd.c:820
 #, c-format
-msgid "%ld %d-byte soundblks of %s written to %s"
+msgid "%ld %d sample blks of %s written to %s"
 msgstr ""
 
-#: InOut/libsnd.c:822
+#: InOut/libsnd.c:837
 #, c-format
 msgid "soundfile write returned bytecount of %d, not %d"
 msgstr ""
 
-#: InOut/libsnd.c:825
+#: InOut/libsnd.c:840
 msgid ""
 "(disk may be full...\n"
 " closing the file ...)"
 msgstr ""
 
-#: InOut/libsnd.c:828 util/dnoise.c:1192
+#: InOut/libsnd.c:843 util/dnoise.c:1177
 msgid "\t... closed\n"
 msgstr ""
 
-#: InOut/libsnd.c:834
+#: InOut/libsnd.c:849
 msgid "not writing to sound disk\n"
 msgstr ""
 
@@ -2717,20 +2715,20 @@ msgstr ""
 msgid "Error closing MIDI out device: %d (%s)"
 msgstr ""
 
-#: InOut/midisend.c:171
+#: InOut/midisend.c:170
 msgid " *** no callback for opening MIDI output"
 msgstr ""
 
-#: InOut/midisend.c:173
+#: InOut/midisend.c:172
 msgid " *** no callback for writing MIDI data"
 msgstr ""
 
-#: InOut/midisend.c:179
+#: InOut/midisend.c:178
 #, c-format
 msgid " *** error opening MIDI out device: %d (%s)"
 msgstr ""
 
-#: InOut/midisend.c:190
+#: InOut/midisend.c:189
 #, c-format
 msgid " *** error opening MIDI out file '%s'"
 msgstr ""
@@ -2984,7 +2982,7 @@ msgstr ""
 msgid "Opened MIDI output device file '%s'\n"
 msgstr ""
 
-#: InOut/rtalsa.c:1101 InOut/rtcoreaudio.c:64 InOut/rtcoreaudio.c:74
+#: InOut/rtalsa.c:1101 InOut/rtcoreaudio.c:71 InOut/rtcoreaudio.c:81
 msgid "warning... could not create global var\n"
 msgstr ""
 
@@ -3008,64 +3006,82 @@ msgstr ""
 msgid "rtmidi: devfile module enabled\n"
 msgstr ""
 
-#: InOut/rtcoreaudio.c:83
+#: InOut/rtauhal.c:163
+#, c-format
+msgid "selected input device: %s \n"
+msgstr ""
+
+#: InOut/rtauhal.c:166
+#, c-format
+msgid "selected output device: %s \n"
+msgstr ""
+
+#: InOut/rtauhal.c:524
+msgid "AuHAL module: device closed\n"
+msgstr ""
+
+#: InOut/rtauhal.c:541
+msgid "rtaudio: coreaaudio-AuHAL module enabled\n"
+msgstr ""
+
+#: InOut/rtcoreaudio.c:90
 msgid ""
 "CoreAudio real-time audio module for Csound\n"
 "by Victor Lazzarini\n"
 msgstr ""
 
-#: InOut/rtcoreaudio.c:105
+#: InOut/rtcoreaudio.c:112
 msgid "rtaudio: CoreAudio module enabled\n"
 msgstr ""
 
-#: InOut/rtcoreaudio.c:254
+#: InOut/rtcoreaudio.c:261
 #, c-format
 msgid "selected device: %u \n"
 msgstr ""
 
-#: InOut/rtcoreaudio.c:263
+#: InOut/rtcoreaudio.c:270
 #, c-format
 msgid "CoreAudio module: opening %s \n"
 msgstr ""
 
-#: InOut/rtcoreaudio.c:297
+#: InOut/rtcoreaudio.c:304
 msgid " *** CoreAudio: open: could not set buffer size\n"
 msgstr ""
 
-#: InOut/rtcoreaudio.c:342
+#: InOut/rtcoreaudio.c:349
 #, c-format
 msgid " *** CoreAudio: open: could not set device parameter sr: %d \n"
 msgstr ""
 
-#: InOut/rtcoreaudio.c:344
+#: InOut/rtcoreaudio.c:351
 #, c-format
 msgid ""
 " *** CoreAudio: current device sampling rate is:%d \n"
 "     try setting the above value in your csound orchestra \n"
 msgstr ""
 
-#: InOut/rtcoreaudio.c:353
+#: InOut/rtcoreaudio.c:360
 #, c-format
 msgid "CoreAudio module: sr set to %d with %d audio channels \n"
 msgstr ""
 
-#: InOut/rtcoreaudio.c:374 InOut/rtcoreaudio.c:387 InOut/rtcoreaudio.c:432
-#: InOut/rtcoreaudio.c:452
+#: InOut/rtcoreaudio.c:381 InOut/rtcoreaudio.c:394 InOut/rtcoreaudio.c:439
+#: InOut/rtcoreaudio.c:459
 msgid " *** CoreAudio: open: memory allocation failure\n"
 msgstr ""
 
-#: InOut/rtcoreaudio.c:414
+#: InOut/rtcoreaudio.c:421
 #, c-format
 msgid ""
 "CoreAudio module: device open with %d buffers of %d frames\n"
 "==========================================================\n"
 msgstr ""
 
-#: InOut/rtcoreaudio.c:552
+#: InOut/rtcoreaudio.c:559
 msgid "coreaudio module: closing device...\n"
 msgstr ""
 
-#: InOut/rtcoreaudio.c:566
+#: InOut/rtcoreaudio.c:573
 msgid "coreaudio module: device closed\n"
 msgstr ""
 
@@ -3465,294 +3481,12 @@ msgstr ""
 msgid "rtaudio: WinMM module enabled\n"
 msgstr ""
 
-#: InOut/virtual_keyboard/virtual_keyboard.cpp:435
-msgid "virtual_keyboard.cpp: error allocating FLTK flags"
-msgstr ""
-
-#: InOut/virtual_keyboard/virtual_keyboard.cpp:443 InOut/winFLTK.c:125
-#: InOut/winFLTK.c:139
-#, c-format
-msgid "Error registering opcode '%s'"
-msgstr ""
-
-#: InOut/widgets.cpp:1081
-msgid ""
-"Invalid snapshot. Perhaps you modified orchestra widget code after you saved "
-"the snapshot bank."
-msgstr ""
-
-#: InOut/widgets.cpp:1226
-msgid "No name for FLbutbank"
-msgstr ""
-
-#: InOut/widgets.cpp:1466
-msgid "FLsetsnap: invalid table"
-msgstr ""
-
-#: InOut/widgets.cpp:1504
-msgid ""
-"Saving could overwrite the old file.\n"
-"Are you sure to save ?"
-msgstr ""
-
-#: InOut/widgets.cpp:1516
-msgid ""
-"Saving could overwrite the old file.\n"
-"Are you sure you want to save ?"
-msgstr ""
-
-#: InOut/widgets.cpp:1518
-msgid "No"
-msgstr ""
-
-#: InOut/widgets.cpp:1518
-msgid "Yes"
-msgstr ""
-
-#: InOut/widgets.cpp:1527
-msgid "FLsavesnap: cannot open file"
-msgstr ""
-
-#: InOut/widgets.cpp:1580
-msgid "FLloadsnap: cannot open file"
-msgstr ""
-
-#: InOut/widgets.cpp:1625
-msgid ""
-"unmatched widget, probably due to a modified orchestra. Modifying an "
-"orchestra makes it incompatible with old snapshot files"
-msgstr ""
-
-#: InOut/widgets.cpp:1994
-msgid "end of widget thread\n"
-msgstr ""
-
-#: InOut/widgets.cpp:2020
-msgid "FLrun was already called"
-msgstr ""
-
-#: InOut/widgets.cpp:2023
-msgid "FL_run: memory allocation failure"
-msgstr ""
-
-#: InOut/widgets.cpp:2125 InOut/widgets.cpp:2145
-msgid "Error: Unable to fork process\n"
-msgstr ""
-
-#: InOut/widgets.cpp:2545
-msgid "FLpanel_end: invalid stack pointer: verify its placement"
-msgstr ""
-
-#: InOut/widgets.cpp:2548
-msgid ""
-"FLpanel_end: invalid stack count: verify FLpanel/FLpanel_end count and "
-"placement"
-msgstr ""
-
-#: InOut/widgets.cpp:2573 InOut/widgets.cpp:2604
-msgid "FLscroll_end: invalid stack pointer: verify its placement"
-msgstr ""
-
-#: InOut/widgets.cpp:2576
-msgid ""
-"FLscroll_end: invalid stack count: verify FLscroll/FLscroll_end count and "
-"placement"
-msgstr ""
-
-#: InOut/widgets.cpp:2607
-msgid ""
-"FLtabs_end: invalid stack count: verify FLtabs/FLtabs_end count and placement"
-msgstr ""
-
-#: InOut/widgets.cpp:2651
-msgid "FLgroup_end: invalid stack pointer: verify its placement"
-msgstr ""
-
-#: InOut/widgets.cpp:2654
-msgid ""
-"FLgroup_end: invalid stack count: verify FLgroup/FLgroup_end count and "
-"placement"
-msgstr ""
-
-#: InOut/widgets.cpp:2684
-msgid "FLpack_end: invalid stack pointer: verify its placement"
-msgstr ""
-
-#: InOut/widgets.cpp:2687
-msgid ""
-"FLpack_end: invalid stack count: verify FLpack/FLpack_end count and placement"
-msgstr ""
-
-#: InOut/widgets.cpp:2840
-msgid "FLvalue cannot be set by FLsetVal.\n"
-msgstr ""
-
-#: InOut/widgets.cpp:2857
-#, c-format
-msgid "(fl_setWidgetValuei): not fully implemented yet; exp=%d"
-msgstr ""
-
-#: InOut/widgets.cpp:2876
-msgid "FLvalue cannot be set by FLsetVal\n"
-msgstr ""
-
-#: InOut/widgets.cpp:2893
-#, c-format
-msgid "(fl_setWidgetValue_set): not fully implemented yet; exp=%d"
-msgstr ""
-
-#: InOut/widgets.cpp:3242 InOut/widgets.cpp:4648
-msgid "FLslider exponential, using non-labeled slider"
-msgstr ""
-
-#: InOut/widgets.cpp:3264
-msgid "FLslider: invalid slider type"
-msgstr ""
-
-#: InOut/widgets.cpp:3276 InOut/widgets.cpp:4072
-msgid "FLslider: zero is illegal in exponential operations"
-msgstr ""
-
-#: InOut/widgets.cpp:3337 InOut/widgets.cpp:4399 InOut/widgets.cpp:4610
-#: InOut/widgets.cpp:4787
-msgid "invalid ZAK space allocation"
-msgstr ""
-
-#: InOut/widgets.cpp:3451
-msgid "FLslidBnk: zero is illegal in exponential operations"
-msgstr ""
-
-#: InOut/widgets.cpp:3548 InOut/widgets.cpp:3581
-msgid "FLjoy X axe: zero is illegal in exponential operations"
-msgstr ""
-
-#: InOut/widgets.cpp:3675
-msgid "FLknob: invalid knob type"
-msgstr ""
-
-#: InOut/widgets.cpp:3690
-msgid "FLknob: zero is illegal in exponential operations"
-msgstr ""
-
-#: InOut/widgets.cpp:3790 InOut/widgets.cpp:3912
-#, c-format
-msgid "FLbutton \"%s\" ignoring snapshot capture retrieve"
-msgstr ""
-
-#: InOut/widgets.cpp:3831
-msgid "FLbutton: invalid button type"
-msgstr ""
-
-#: InOut/widgets.cpp:3863
-msgid "FLcloseButton: invalid stack pointer: verify its placement"
-msgstr ""
-
-#: InOut/widgets.cpp:3882
-#, c-format
-msgid "Command Found: %s\n"
-msgstr ""
-
-#: InOut/widgets.cpp:3954
-msgid "FLbuttonBank: invalid button type"
-msgstr ""
-
-#: InOut/widgets.cpp:3992
-#, c-format
-msgid "FLcount \"%s\" ignoring snapshot capture retrieve"
-msgstr ""
-
-#: InOut/widgets.cpp:4059
-msgid "FLroller: invalid roller type"
-msgstr ""
-
-#: InOut/widgets.cpp:4254
-msgid "FLhvsBox: a square area must be delimited by 2 lines at least"
-msgstr ""
-
-#: InOut/widgets.cpp:4302
-msgid "FLkeyIn: invalid table number"
-msgstr ""
-
-#: InOut/widgets.cpp:4305
-msgid "FLkeyIn: table too short!"
-msgstr ""
-
-#: InOut/widgets.cpp:4522
-msgid "FLvslidBnk: zero is illegal in exponential operations"
-msgstr ""
-
-#: InOut/widgets.cpp:4698 InOut/widgets.cpp:4875
-msgid "FLsliderBank: zero is illegal in exponential operations"
-msgstr ""
-
-#: InOut/widgets.cpp:4825
-msgid "FLslidBnk2: FLslider exponential, using non-labeled slider"
-msgstr ""
-
-#: InOut/widgets.cpp:4955 InOut/widgets.cpp:5018
-msgid "FLsldBnkSet: invalid table number"
-msgstr ""
-
-#: InOut/widgets.cpp:4959 InOut/widgets.cpp:5022
-msgid "FLslidBnkSet: table too short!"
-msgstr ""
-
-#: InOut/widgets.cpp:4967 InOut/widgets.cpp:5031
-msgid "FLsldBnkSet: invalid outable number"
-msgstr ""
-
-#: InOut/widgets.cpp:4972 InOut/widgets.cpp:5037
-msgid "FLslidBnkSet: too many sliders to reset!"
-msgstr ""
-
-#: InOut/widgets.cpp:4995
-msgid "FLslidBnkSet: function mapping not available"
-msgstr ""
-
-#: InOut/widgets.cpp:5064 InOut/widgets.cpp:5149 InOut/widgets.cpp:5236
-msgid ""
-"FLslidBnk2Setk: value out of range: function mapping requires a 0 to 1 range "
-"for input"
-msgstr ""
-
-#: InOut/widgets.cpp:5093
-msgid "FLsldBnkSetk: invalid table number"
-msgstr ""
-
-#: InOut/widgets.cpp:5097 InOut/widgets.cpp:5183
-msgid "FLslidBnkSetk: table too short!"
-msgstr ""
-
-#: InOut/widgets.cpp:5105
-msgid "FLsldBnkSetk: invalid outable number"
-msgstr ""
-
-#: InOut/widgets.cpp:5111 InOut/widgets.cpp:5197
-msgid "FLslidBnkSetk: too many sliders to reset!"
-msgstr ""
-
-#: InOut/widgets.cpp:5179
-msgid "FLslidBnkSetk: invalid table number"
-msgstr ""
-
-#: InOut/widgets.cpp:5191
-msgid "FLslidBnkSetk: invalid outable number"
-msgstr ""
-
-#: InOut/widgets.cpp:5268
-msgid "FLxyin: none of X limits can be zero in exponential mode!"
-msgstr ""
-
-#: InOut/widgets.cpp:5294
-msgid "FLxyin: none of Y limits can be zero in exponential mode!"
-msgstr ""
-
 #: InOut/winascii.c:75
 #, c-format
 msgid "%s\t%ld points, scalemax %5.3f\n"
 msgstr ""
 
-#: InOut/windin.c:46 Opcodes/pitch.c:82 Opcodes/spectra.c:76
+#: InOut/windin.c:46 Opcodes/pitch.c:83 Opcodes/spectra.c:78
 msgid "illegal iprd"
 msgstr ""
 
@@ -3795,46 +3529,60 @@ msgstr ""
 msgid "widgets.cpp: error allocating FLTK flags"
 msgstr ""
 
-#: OOps/aops.c:95 OOps/aops.c:119
+#: InOut/winFLTK.c:124 InOut/winFLTK.c:137
+#: InOut/virtual_keyboard/virtual_keyboard.cpp:443
+#, c-format
+msgid "Error registering opcode '%s'"
+msgstr ""
+
+#: InOut/virtual_keyboard/virtual_keyboard.cpp:435
+msgid "virtual_keyboard.cpp: error allocating FLTK flags"
+msgstr ""
+
+#: OOps/aops.c:120 OOps/aops.c:144
 #, c-format
 msgid "Cannot be more In arguments than Out in init (%d,%d)"
 msgstr ""
 
-#: OOps/aops.c:175 OOps/aops.c:194
+#: OOps/aops.c:200 OOps/aops.c:219
 #, c-format
 msgid "Index %d out of range [0,%d] in t[]\n"
 msgstr ""
 
-#: OOps/aops.c:184
-msgid "Vector notinitialised\n"
+#: OOps/aops.c:209
+msgid "Vector not initialised\n"
 msgstr ""
 
-#: OOps/aops.c:686
+#: OOps/aops.c:711
 msgid "non-looping sample"
 msgstr ""
 
-#: OOps/aops.c:828 OOps/aops.c:856
+#: OOps/aops.c:853 OOps/aops.c:881
 #, c-format
 msgid "No tuning table %d"
 msgstr ""
 
-#: OOps/aops.c:901 OOps/aops.c:939
+#: OOps/aops.c:926 OOps/aops.c:964
 msgid "cpstun: invalid table"
 msgstr ""
 
-#: OOps/aops.c:1189
+#: OOps/aops.c:1214
 msgid "Input and output argument count differs in inch"
 msgstr ""
 
-#: OOps/aops.c:1193
+#: OOps/aops.c:1218
 #, c-format
 msgid "Input channel %d too large; ignored"
 msgstr ""
 
-#: OOps/aops.c:1667
+#: OOps/aops.c:1698
 msgid "k-rate invalue ChannelName cannot start with $"
 msgstr ""
 
+#: OOps/aops.c:1835
+msgid "Unknown functuon called"
+msgstr ""
+
 #: OOps/bus.c:313 OOps/bus.c:345
 msgid "chani: invalid index"
 msgstr ""
@@ -4117,7 +3865,7 @@ msgstr ""
 msgid "dispfft: not initialised"
 msgstr ""
 
-#: OOps/disprep.c:435 Opcodes/spectra.c:516
+#: OOps/disprep.c:435 Opcodes/spectra.c:518
 msgid "illegal iperiod"
 msgstr ""
 
@@ -4181,15 +3929,15 @@ msgstr ""
 msgid " *** fftlib.c: internal error: invalid FFT size: %d"
 msgstr ""
 
-#: OOps/goto_ops.c:92
+#: OOps/goto_ops.c:93
 msgid "negative time period"
 msgstr ""
 
-#: OOps/goto_ops.c:182
+#: OOps/goto_ops.c:186
 msgid "turnoff2: invalid instrument number"
 msgstr ""
 
-#: OOps/goto_ops.c:187
+#: OOps/goto_ops.c:191
 msgid "turnoff2: invalid mode parameter"
 msgstr ""
 
@@ -4206,7 +3954,7 @@ msgid "cpstabm: invalid modulator table"
 msgstr ""
 
 #: OOps/midiops.c:304 OOps/midiops.c:314 OOps/midiops.c:334 OOps/midiops.c:344
-#: OOps/midiops.c:421 OOps/midiops.c:435 Opcodes/gab/sliderTable.c:563
+#: OOps/midiops.c:421 OOps/midiops.c:435 Opcodes/gab/sliderTable.c:567
 #: Opcodes/midiops2.c:56 Opcodes/midiops2.c:73 Opcodes/midiops2.c:111
 #: Opcodes/midiops2.c:145 Opcodes/midiops2.c:206 Opcodes/midiops2.c:237
 #: Opcodes/midiops2.c:298 Opcodes/midiops2.c:317 Opcodes/midiops2.c:357
@@ -4222,7 +3970,7 @@ msgstr ""
 msgid "illegal mrtmsg argument"
 msgstr ""
 
-#: OOps/midiout.c:383
+#: OOps/midiout.c:389
 #, c-format
 msgid "out contr14 msb:%x lsb:%x\n"
 msgstr ""
@@ -4684,148 +4432,148 @@ msgstr ""
 msgid "Unknown window type; replaced by rectangular\n"
 msgstr ""
 
-#: OOps/pvsanal.c:1025
+#: OOps/pvsanal.c:1027
 msgid "pvsynth: Not Initialised.\n"
 msgstr ""
 
-#: OOps/remote.c:100
+#: OOps/remote.c:103
 msgid "insufficient memory to initialise remote globals."
 msgstr ""
 
-#: OOps/remote.c:109
+#: OOps/remote.c:112
 msgid "insufficient memory to initialise outgoing socket table."
 msgstr ""
 
-#: OOps/remote.c:116
+#: OOps/remote.c:119
 msgid "insufficient memory to initialise incoming socket table."
 msgstr ""
 
-#: OOps/remote.c:124
+#: OOps/remote.c:127
 msgid "insufficient memory to initialise insrfd_list."
 msgstr ""
 
-#: OOps/remote.c:132
+#: OOps/remote.c:135
 msgid "insufficient memory to initialise chnrfd_list."
 msgstr ""
 
-#: OOps/remote.c:139
+#: OOps/remote.c:142
 msgid "insufficient memory to initialise insrfd table."
 msgstr ""
 
-#: OOps/remote.c:146
+#: OOps/remote.c:149
 msgid "insufficient memory to initialise chnrfd table."
 msgstr ""
 
-#: OOps/remote.c:153
+#: OOps/remote.c:156
 msgid "insufficient memory to initialise local ip address."
 msgstr ""
 
-#: OOps/remote.c:161
+#: OOps/remote.c:164
 msgid "unable to get local ip address."
 msgstr ""
 
-#: OOps/remote.c:222
+#: OOps/remote.c:225
 msgid "could not open remote port"
 msgstr ""
 
-#: OOps/remote.c:237
+#: OOps/remote.c:240
 msgid "---> Could not connect \n"
 msgstr ""
 
-#: OOps/remote.c:241
+#: OOps/remote.c:244
 msgid "---> Failed all attempts to connect. \n"
 msgstr ""
 
-#: OOps/remote.c:244
+#: OOps/remote.c:247
 msgid "--->  Connected. \n"
 msgstr ""
 
-#: OOps/remote.c:258 Opcodes/socksend.c:232
+#: OOps/remote.c:261 Opcodes/socksend.c:305
 msgid "write to socket failed"
 msgstr ""
 
-#: OOps/remote.c:278
+#: OOps/remote.c:281
 msgid "creating socket\n"
 msgstr ""
 
-#: OOps/remote.c:280
+#: OOps/remote.c:283
 msgid "created socket \n"
 msgstr ""
 
-#: OOps/remote.c:292
+#: OOps/remote.c:295
 msgid "setting socket option to reuse the addresse \n"
 msgstr ""
 
-#: OOps/remote.c:309 Opcodes/sockrecv.c:133 Opcodes/sockrecv.c:223
-#: Opcodes/socksend.c:211
+#: OOps/remote.c:312 Opcodes/sockrecv.c:141 Opcodes/sockrecv.c:237
+#: Opcodes/socksend.c:284
 msgid "bind failed"
 msgstr ""
 
-#: OOps/remote.c:313 Opcodes/socksend.c:216
+#: OOps/remote.c:316 Opcodes/socksend.c:289
 msgid "listen failed"
 msgstr ""
 
-#: OOps/remote.c:318 Opcodes/socksend.c:222
+#: OOps/remote.c:321 Opcodes/socksend.c:295
 msgid "accept failed"
 msgstr ""
 
-#: OOps/remote.c:321
+#: OOps/remote.c:324
 #, c-format
 msgid "accepted, conn=%d \n"
 msgstr ""
 
-#: OOps/remote.c:353 OOps/remote.c:374 OOps/remote.c:417 OOps/remote.c:449
-#: OOps/remote.c:489
+#: OOps/remote.c:356 OOps/remote.c:377 OOps/remote.c:420 OOps/remote.c:452
+#: OOps/remote.c:492
 msgid "failed to initialise remote globals."
 msgstr ""
 
-#: OOps/remote.c:378 OOps/remote.c:421
+#: OOps/remote.c:381 OOps/remote.c:424
 msgid "missing instr nos"
 msgstr ""
 
-#: OOps/remote.c:390 OOps/remote.c:430
+#: OOps/remote.c:393 OOps/remote.c:433
 msgid "illegal instr no"
 msgstr ""
 
-#: OOps/remote.c:393
+#: OOps/remote.c:396
 msgid "insno already remote"
 msgstr ""
 
-#: OOps/remote.c:403 OOps/remote.c:474
+#: OOps/remote.c:406 OOps/remote.c:477
 msgid "Failed to open port to listen"
 msgstr ""
 
-#: OOps/remote.c:423
+#: OOps/remote.c:426
 #, c-format
 msgid "*** str1: %s own:%s\n"
 msgstr ""
 
-#: OOps/remote.c:433
+#: OOps/remote.c:436
 msgid "insno already specific remote"
 msgstr ""
 
-#: OOps/remote.c:453 OOps/remote.c:493
+#: OOps/remote.c:456 OOps/remote.c:496
 msgid "missing channel nos"
 msgstr ""
 
-#: OOps/remote.c:463 OOps/remote.c:502
+#: OOps/remote.c:466 OOps/remote.c:505
 msgid "illegal channel no"
 msgstr ""
 
-#: OOps/remote.c:466
+#: OOps/remote.c:469
 msgid "channel already remote"
 msgstr ""
 
-#: OOps/remote.c:505
+#: OOps/remote.c:508
 msgid "channel already specific remote"
 msgstr ""
 
-#: OOps/remote.c:531 OOps/remote.c:555 OOps/remote.c:579
+#: OOps/remote.c:534 OOps/remote.c:558 OOps/remote.c:582
 msgid "CLsend failed"
 msgstr ""
 
-#: OOps/remote.c:645 OOps/remote.c:653 OOps/remote.c:661 OOps/remote.c:669
-#: OOps/remote.c:677
+#: OOps/remote.c:648 OOps/remote.c:656 OOps/remote.c:664 OOps/remote.c:672
+#: OOps/remote.c:680
 msgid ""
 "*** This version of Csound was not compiled with remote event support ***\n"
 msgstr ""
@@ -4934,53 +4682,53 @@ msgstr ""
 msgid "linseg: not initialised (arate)\n"
 msgstr ""
 
-#: OOps/ugens1.c:463 OOps/ugens1.c:465 OOps/ugens1.c:512 OOps/ugens1.c:514
-#: OOps/ugens1.c:564 OOps/ugens1.c:566 OOps/ugens1.c:610 OOps/ugens1.c:612
-#: OOps/ugens1.c:774 OOps/ugens1.c:776
+#: OOps/ugens1.c:464 OOps/ugens1.c:466 OOps/ugens1.c:513 OOps/ugens1.c:515
+#: OOps/ugens1.c:565 OOps/ugens1.c:567 OOps/ugens1.c:611 OOps/ugens1.c:613
+#: OOps/ugens1.c:775 OOps/ugens1.c:777
 #, c-format
 msgid "ival%d is zero"
 msgstr ""
 
-#: OOps/ugens1.c:466 OOps/ugens1.c:515 OOps/ugens1.c:567 OOps/ugens1.c:613
-#: OOps/ugens1.c:777
+#: OOps/ugens1.c:467 OOps/ugens1.c:516 OOps/ugens1.c:568 OOps/ugens1.c:614
+#: OOps/ugens1.c:778
 #, c-format
 msgid "ival%d sign conflict"
 msgstr ""
 
-#: OOps/ugens1.c:495 OOps/ugens1.c:544
+#: OOps/ugens1.c:496 OOps/ugens1.c:545
 #, c-format
 msgid "Breakpoint time %f not valid"
 msgstr ""
 
-#: OOps/ugens1.c:706
+#: OOps/ugens1.c:707
 msgid "expseg (krate): not initialised"
 msgstr ""
 
-#: OOps/ugens1.c:732
+#: OOps/ugens1.c:733
 msgid "expseg (arate): not initialised"
 msgstr ""
 
-#: OOps/ugens1.c:1013 OOps/ugens1.c:1149 OOps/ugens1.c:1311
+#: OOps/ugens1.c:1014 OOps/ugens1.c:1150 OOps/ugens1.c:1312
 msgid "non-positive iatdec"
 msgstr ""
 
-#: OOps/ugens1.c:1106 OOps/ugens1.c:1273
+#: OOps/ugens1.c:1107 OOps/ugens1.c:1274
 msgid "ixmod out of range."
 msgstr ""
 
-#: OOps/ugens1.c:1134 OOps/ugens1.c:1301
+#: OOps/ugens1.c:1135 OOps/ugens1.c:1302
 msgid "rise func ends with zero"
 msgstr ""
 
-#: OOps/ugens1.c:1178 OOps/ugens1.c:1257
+#: OOps/ugens1.c:1179 OOps/ugens1.c:1258
 msgid "envlpx rise func ends with zero"
 msgstr ""
 
-#: OOps/ugens1.c:1199 OOps/ugens1.c:1254
+#: OOps/ugens1.c:1200 OOps/ugens1.c:1255
 msgid "envlpx(krate): not initialised"
 msgstr ""
 
-#: OOps/ugens2.c:48 OOps/ugens2.c:61 Opcodes/shape.c:377
+#: OOps/ugens2.c:48 OOps/ugens2.c:61 Opcodes/shape.c:379
 msgid "init phase truncation\n"
 msgstr ""
 
@@ -5044,8 +4792,8 @@ msgid "oscil(krate): not initialised"
 msgstr ""
 
 #: OOps/ugens2.c:1139 OOps/ugens2.c:1167 OOps/ugens2.c:1192 OOps/ugens2.c:1219
-#: Opcodes/pitch.c:1579 Opcodes/pitch.c:1606 Opcodes/pitch.c:1633
-#: Opcodes/pitch.c:1662
+#: Opcodes/pitch.c:1580 Opcodes/pitch.c:1607 Opcodes/pitch.c:1634
+#: Opcodes/pitch.c:1663
 msgid "oscil: not initialised"
 msgstr ""
 
@@ -5161,7 +4909,7 @@ msgstr ""
 msgid "Seeding from current time %lu\n"
 msgstr ""
 
-#: OOps/ugens5.c:198 OOps/ugens5.c:260 Opcodes/gab/gab.c:45 Opcodes/ugsc.c:188
+#: OOps/ugens5.c:198 OOps/ugens5.c:260 Opcodes/gab/gab.c:47 Opcodes/ugsc.c:186
 #, c-format
 msgid "illegal reson iscl value, %f"
 msgstr ""
@@ -5393,8 +5141,8 @@ msgstr ""
 msgid "Table no. < 1 dft=%.2f  sft=%.2f"
 msgstr ""
 
-#: OOps/ugrw1.c:1781 OOps/ugrw1.c:1822 Opcodes/fareyseq.c:455
-#: Opcodes/fareyseq.c:477
+#: OOps/ugrw1.c:1781 OOps/ugrw1.c:1822 Opcodes/fareyseq.c:453
+#: Opcodes/fareyseq.c:475
 #, c-format
 msgid "Source sft table %.2f not found."
 msgstr ""
@@ -5624,19 +5372,19 @@ msgstr ""
 msgid "reverbx: not initialised"
 msgstr ""
 
-#: Opcodes/ambicode1.c:80
+#: Opcodes/ambicode1.c:82
 msgid "The numbers of input and output arguments are not valid."
 msgstr ""
 
-#: Opcodes/ambicode1.c:163
+#: Opcodes/ambicode1.c:165
 msgid "The number of input arguments is not valid."
 msgstr ""
 
-#: Opcodes/ambicode1.c:167
+#: Opcodes/ambicode1.c:169
 msgid "The isetup value should be between 1 and 5."
 msgstr ""
 
-#: Opcodes/ambicode1.c:193
+#: Opcodes/ambicode1.c:195
 msgid "The output channel count does not match the isetup value."
 msgstr ""
 
@@ -5676,16 +5424,16 @@ msgstr ""
 msgid "Not supported setup number!"
 msgstr ""
 
-#: Opcodes/babo.c:740
+#: Opcodes/babo.c:742
 #, c-format
 msgid "Babo: resonator dimensions are incorrect (%.1f, %.1f, %.1f)"
 msgstr ""
 
-#: Opcodes/bilbar.c:82
+#: Opcodes/bilbar.c:83
 msgid "No data to continue"
 msgstr ""
 
-#: Opcodes/bilbar.c:108
+#: Opcodes/bilbar.c:109
 msgid "Ends must be clamped(1), pivoting(2) or free(3)"
 msgstr ""
 
@@ -5698,8 +5446,8 @@ msgstr ""
 msgid "DLineN: Delay length too big ... setting to maximum length of %ld.\n"
 msgstr ""
 
-#: Opcodes/bowedbar.c:98 Opcodes/physmod.c:489
-msgid "unknown lowest frequency for bowed string -- assuming 50Hz\n"
+#: Opcodes/bowedbar.c:98
+msgid "unknown lowest frequency for bowed bar -- assuming 50Hz\n"
 msgstr ""
 
 #: Opcodes/clfilt.c:53
@@ -5777,17 +5525,17 @@ msgstr ""
 msgid "Unknown control %d"
 msgstr ""
 
-#: Opcodes/cpumeter.c:73
+#: Opcodes/cpumeter.c:77
 #, c-format
 msgid "Failed to open /proc/stat: %s"
 msgstr ""
 
-#: Opcodes/cpumeter.c:75 Opcodes/cpumeter.c:80 Opcodes/cpumeter.c:107
-#: Opcodes/cpumeter.c:147
+#: Opcodes/cpumeter.c:79 Opcodes/cpumeter.c:84 Opcodes/cpumeter.c:111
+#: Opcodes/cpumeter.c:151
 msgid "failed /proc/stat read"
 msgstr ""
 
-#: Opcodes/crossfm.c:33
+#: Opcodes/crossfm.c:34
 msgid "crossfm: ftable not found"
 msgstr ""
 
@@ -5828,31 +5576,31 @@ msgstr ""
 msgid "insufficient arguments for fareytable"
 msgstr ""
 
-#: Opcodes/fareyseq.c:250 Opcodes/fareyseq.c:300
+#: Opcodes/fareyseq.c:251 Opcodes/fareyseq.c:301
 #, c-format
 msgid "Farey: Table no. < 1 dft=%.2f  sft=%.2f"
 msgstr ""
 
-#: Opcodes/fareyseq.c:255
+#: Opcodes/fareyseq.c:256
 #, c-format
 msgid "Farey: Filter type < 1 dft=%.2f  sft=%.2f"
 msgstr ""
 
-#: Opcodes/fareyseq.c:270 Opcodes/fareyseq.c:318
+#: Opcodes/fareyseq.c:271 Opcodes/fareyseq.c:319
 #, c-format
 msgid "Farey: Destination dft table %.2f not found."
 msgstr ""
 
-#: Opcodes/fareyseq.c:281 Opcodes/fareyseq.c:329
+#: Opcodes/fareyseq.c:282 Opcodes/fareyseq.c:330
 #, c-format
 msgid "Farey: Source sft table %.2f not found."
 msgstr ""
 
-#: Opcodes/fareyseq.c:305
+#: Opcodes/fareyseq.c:306
 msgid "Farey: Filter type < 1"
 msgstr ""
 
-#: Opcodes/fareyseq.c:447 Opcodes/fareyseq.c:468
+#: Opcodes/fareyseq.c:445 Opcodes/fareyseq.c:466
 #, c-format
 msgid "Table no. < 1 sft=%.2f"
 msgstr ""
@@ -5960,45 +5708,45 @@ msgstr ""
 msgid "follow - zero length!"
 msgstr ""
 
-#: Opcodes/fout.c:59
+#: Opcodes/fout.c:60
 #, c-format
 msgid "Closing file '%s'...\n"
 msgstr ""
 
-#: Opcodes/fout.c:101
+#: Opcodes/fout.c:102
 msgid "invalid file handle"
 msgstr ""
 
-#: Opcodes/fout.c:108 Opcodes/fout.c:420
+#: Opcodes/fout.c:109 Opcodes/fout.c:421
 msgid "invalid file name"
 msgstr ""
 
-#: Opcodes/fout.c:165
+#: Opcodes/fout.c:166
 #, c-format
 msgid "error opening file '%s'"
 msgstr ""
 
-#: Opcodes/fout.c:192
+#: Opcodes/fout.c:193
 #, c-format
 msgid "error opening sound file '%s'"
 msgstr ""
 
-#: Opcodes/fout.c:429
+#: Opcodes/fout.c:430
 #, c-format
 msgid "cannot close '%s': not found in list of open files"
 msgstr ""
 
-#: Opcodes/fout.c:440
+#: Opcodes/fout.c:441
 #, c-format
 msgid "cannot close file #%d: not a valid handle"
 msgstr ""
 
-#: Opcodes/fout.c:447
+#: Opcodes/fout.c:448
 #, c-format
 msgid "file #%d (%s) is in use, will be closed when released"
 msgstr ""
 
-#: Opcodes/fout.c:476 Opcodes/fout.c:479 Opcodes/fout.c:550 Opcodes/fout.c:553
+#: Opcodes/fout.c:477 Opcodes/fout.c:480 Opcodes/fout.c:551 Opcodes/fout.c:554
 msgid "fouti: invalid file handle"
 msgstr ""
 
@@ -6076,554 +5824,688 @@ msgstr ""
 msgid "ftsave: failed to write file"
 msgstr ""
 
-#: Opcodes/gab/gab.c:109
+#: Opcodes/gab/gab.c:111
 msgid "fastab: incorrect table number"
 msgstr ""
 
-#: Opcodes/gab/gab.c:132 Opcodes/gab/gab.c:141 Opcodes/gab/gab.c:171
+#: Opcodes/gab/gab.c:134 Opcodes/gab/gab.c:143 Opcodes/gab/gab.c:173
 msgid "tabw off end"
 msgstr ""
 
-#: Opcodes/gab/gab.c:157 Opcodes/gab/gab.c:225 Opcodes/gab/gab.c:234
+#: Opcodes/gab/gab.c:159 Opcodes/gab/gab.c:227 Opcodes/gab/gab.c:236
 msgid "tab off end"
 msgstr ""
 
-#: Opcodes/gab/gab.c:183
+#: Opcodes/gab/gab.c:185
 msgid "tab_i: incorrect table number"
 msgstr ""
 
-#: Opcodes/gab/gab.c:190
-msgid "tab_i off end"
+#: Opcodes/gab/gab.c:192
+#, c-format
+msgid "tab_i off end: table number: %d\n"
 msgstr ""
 
-#: Opcodes/gab/gab.c:202
+#: Opcodes/gab/gab.c:204
 msgid "tabw_i: incorrect table number"
 msgstr ""
 
-#: Opcodes/gab/gab.c:209
+#: Opcodes/gab/gab.c:211
 msgid "tabw_i off end"
 msgstr ""
 
-#: Opcodes/gab/gab.c:247
+#: Opcodes/gab/gab.c:249
 msgid "tab_init: incorrect table number"
 msgstr ""
 
-#: Opcodes/gab/gab.c:316
+#: Opcodes/gab/gab.c:318
 msgid "printi parameter was not a \"quoted string\""
 msgstr ""
 
-#: Opcodes/gab/gab.c:423
+#: Opcodes/gab/gab.c:425
 msgid "adsynt2: wavetable not found!"
 msgstr ""
 
-#: Opcodes/gab/gab.c:435
+#: Opcodes/gab/gab.c:437
 msgid "adsynt2: freqtable not found!"
 msgstr ""
 
-#: Opcodes/gab/gab.c:440
+#: Opcodes/gab/gab.c:442
 msgid "adsynt2: partial count is greater than freqtable size!"
 msgstr ""
 
-#: Opcodes/gab/gab.c:449
+#: Opcodes/gab/gab.c:451
 msgid "adsynt2: amptable not found!"
 msgstr ""
 
-#: Opcodes/gab/gab.c:454
+#: Opcodes/gab/gab.c:456
 msgid "adsynt2: partial count is greater than amptable size!"
 msgstr ""
 
-#: Opcodes/gab/gab.c:499
+#: Opcodes/gab/gab.c:501
 msgid "adsynt2: not initialised"
 msgstr ""
 
-#: Opcodes/gab/gab.c:741
+#: Opcodes/gab/gab.c:743
 msgid "max_k: invalid imaxflag value"
 msgstr ""
 
-#: Opcodes/gab/hvs.c:68
+#: Opcodes/gab/hvs.c:70
 msgid "hvs1: a line segment must be delimited by 2 points at least"
 msgstr ""
 
-#: Opcodes/gab/hvs.c:150
+#: Opcodes/gab/hvs.c:152
 msgid "hvs2: a square area must be delimited by 2 lines at least"
 msgstr ""
 
-#: Opcodes/gab/hvs.c:246
+#: Opcodes/gab/hvs.c:248
 msgid "hvs3: a square area must be delimited by 2 lines at least"
 msgstr ""
 
-#: Opcodes/gab/hvs.c:389
+#: Opcodes/gab/hvs.c:390
 msgid "vphaseseg: the first function is invalid or missing"
 msgstr ""
 
-#: Opcodes/gab/hvs.c:396
+#: Opcodes/gab/hvs.c:398 Opcodes/gab/vectorial.c:2301
 msgid "vphaseseg: invalid num. of elements"
 msgstr ""
 
-#: Opcodes/gab/hvs.c:414
+#: Opcodes/gab/hvs.c:416
 msgid "vphaseseg: function invalid or missing"
 msgstr ""
 
-#: Opcodes/gab/newgabopc.c:39 Opcodes/gab/newgabopc.c:54
+#: Opcodes/gab/newgabopc.c:40 Opcodes/gab/newgabopc.c:55
 msgid "vtable1: incorrect table number"
 msgstr ""
 
-#: Opcodes/gab/newgabopc.c:359
+#: Opcodes/gab/newgabopc.c:241 Opcodes/gab/newgabopc.c:296
+msgid "copyTabElems: incorrect destination table number"
+msgstr ""
+
+#: Opcodes/gab/newgabopc.c:246 Opcodes/gab/newgabopc.c:301
+msgid ""
+"copyTabElems: destination table too short or number of elements to copy too "
+"big"
+msgstr ""
+
+#: Opcodes/gab/newgabopc.c:252 Opcodes/gab/newgabopc.c:306
+msgid "copyTabElems: incorrect source table number"
+msgstr ""
+
+#: Opcodes/gab/newgabopc.c:257 Opcodes/gab/newgabopc.c:310
+msgid ""
+"copyTabElems: source table size less than the number of elements to copy"
+msgstr ""
+
+#: Opcodes/gab/newgabopc.c:273 Opcodes/gab/newgabopc.c:318
+msgid "copyTabElems: source table too short"
+msgstr ""
+
+#: Opcodes/gab/newgabopc.c:276 Opcodes/gab/newgabopc.c:321
+msgid "copyTabElems: destination table too short"
+msgstr ""
+
+#: Opcodes/gab/newgabopc.c:347
+msgid "inrg: audio input is not enabled"
+msgstr ""
+
+#: Opcodes/gab/newgabopc.c:362
 msgid "inrg: channel number cannot be < 1 (1 is the first channel)"
 msgstr ""
 
-#: Opcodes/gab/newgabopc.c:400
+#: Opcodes/gab/newgabopc.c:403
 msgid "outrg: channel number cannot be < 1 (1 is the first channel)"
 msgstr ""
 
-#: Opcodes/gab/newgabopc.c:439 Opcodes/gab/newgabopc.c:671
+#: Opcodes/gab/newgabopc.c:440 Opcodes/gab/newgabopc.c:574
+#: Opcodes/gab/newgabopc.c:672
 msgid "invalid function"
 msgstr ""
 
-#: Opcodes/gab/newgabopc.c:442
+#: Opcodes/gab/newgabopc.c:443
 msgid "lposc: no sample rate stored in function; assuming=sr\n"
 msgstr ""
 
-#: Opcodes/gab/newgabopc.c:673
+#: Opcodes/gab/newgabopc.c:577
+msgid "lposcil: no sample rate stored in function assuming=sr\n"
+msgstr ""
+
+#: Opcodes/gab/newgabopc.c:674
 msgid "lposcil: no sample rate stored in function; assuming=sr\n"
 msgstr ""
 
-#: Opcodes/gab/sliderTable.c:45 Opcodes/gab/sliderTable.c:254
+#: Opcodes/gab/sliderTable.c:47 Opcodes/gab/sliderTable.c:256
 #: Opcodes/midiops3.c:44 Opcodes/midiops3.c:146 Opcodes/midiops3.c:259
 #: Opcodes/midiops3.c:317 Opcodes/midiops3.c:413
 msgid "illegal channel"
 msgstr ""
 
-#: Opcodes/gab/sliderTable.c:65 Opcodes/gab/sliderTable.c:277
+#: Opcodes/gab/sliderTable.c:67 Opcodes/gab/sliderTable.c:280
 #: Opcodes/midiops3.c:58 Opcodes/midiops3.c:162 Opcodes/midiops3.c:273
 #, c-format
 msgid "illegal control number at position n.%d"
 msgstr ""
 
-#: Opcodes/gab/sliderTable.c:74
+#: Opcodes/gab/sliderTable.c:76
 #, c-format
 msgid ""
 "sliderXtable: illegal initvalue at position %d.  When using table indexing, "
 "the init range is 0 to 1"
 msgstr ""
 
-#: Opcodes/gab/sliderTable.c:84 Opcodes/gab/sliderTable.c:284
-#: Opcodes/gab/sliderTable.c:509 Opcodes/midiops3.c:64 Opcodes/midiops3.c:168
+#: Opcodes/gab/sliderTable.c:86 Opcodes/gab/sliderTable.c:287
+#: Opcodes/gab/sliderTable.c:513 Opcodes/midiops3.c:64 Opcodes/midiops3.c:168
 #: Opcodes/midiops3.c:347
 #, c-format
 msgid "illegal initvalue at position n.%d"
 msgstr ""
 
-#: Opcodes/gab/sliderTable.c:96 Opcodes/gab/sliderTable.c:296
+#: Opcodes/gab/sliderTable.c:98 Opcodes/gab/sliderTable.c:299
 msgid "sliderXtable: zero is illegal in exponential operations"
 msgstr ""
 
-#: Opcodes/gab/sliderTable.c:312
+#: Opcodes/gab/sliderTable.c:315
 #, c-format
 msgid ""
 "sliderXtable: illegal initvalue at position %d. When using table indexing, "
 "the init range is 0 to 1"
 msgstr ""
 
-#: Opcodes/gab/sliderTable.c:565 Opcodes/midiops2.c:321 Opcodes/midiops2.c:359
+#: Opcodes/gab/sliderTable.c:569 Opcodes/midiops2.c:321 Opcodes/midiops2.c:359
 #: Opcodes/midiops2.c:391 Opcodes/midiops2.c:440 Opcodes/midiops2.c:475
 #: Opcodes/midiops2.c:517 Opcodes/midiops2.c:532 Opcodes/midiops2.c:551
 msgid "illegal midi channel"
 msgstr ""
 
-#: Opcodes/gab/tabmorph.c:42
+#: Opcodes/gab/tabmorph.c:43
 msgid "tabmorph: invalid table number"
 msgstr ""
 
-#: Opcodes/gab/tabmorph.c:46
+#: Opcodes/gab/tabmorph.c:47
 msgid "tabmorph: all tables must have the same length!"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:33
+#: Opcodes/gab/vectorial.c:35
 msgid "mtablei: incorrect table number"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:63 Opcodes/gab/vectorial.c:83
-#: Opcodes/gab/vectorial.c:133 Opcodes/gab/vectorial.c:200
+#: Opcodes/gab/vectorial.c:65 Opcodes/gab/vectorial.c:85
+#: Opcodes/gab/vectorial.c:135 Opcodes/gab/vectorial.c:202
 msgid "mtable: incorrect table number"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:185
+#: Opcodes/gab/vectorial.c:187
 msgid "mtabi: incorrect table number"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:252
+#: Opcodes/gab/vectorial.c:254
 msgid "mtablewi: incorrect table number"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:268 Opcodes/gab/vectorial.c:288
-#: Opcodes/gab/vectorial.c:317 Opcodes/gab/vectorial.c:362
-#: Opcodes/gab/vectorial.c:406
+#: Opcodes/gab/vectorial.c:270 Opcodes/gab/vectorial.c:290
+#: Opcodes/gab/vectorial.c:319 Opcodes/gab/vectorial.c:364
+#: Opcodes/gab/vectorial.c:408
 msgid "mtabw: incorrect table number"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:348
+#: Opcodes/gab/vectorial.c:350
 msgid "mtabwi: incorrect table number"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:380
+#: Opcodes/gab/vectorial.c:382
 msgid "mtablew: incorrect table number"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:454 Opcodes/gab/vectorial.c:513
+#: Opcodes/gab/vectorial.c:457 Opcodes/gab/vectorial.c:516
 #, c-format
 msgid "vadd_i: invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:470
+#: Opcodes/gab/vectorial.c:473
 msgid "vadd_i: ifn length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:497
+#: Opcodes/gab/vectorial.c:500
 msgid "vadd: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:529
+#: Opcodes/gab/vectorial.c:532
 msgid "vmult_i: ifn length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:556
+#: Opcodes/gab/vectorial.c:559
 msgid "vmult: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:572
+#: Opcodes/gab/vectorial.c:575
 #, c-format
 msgid "vpow_i: invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:589
+#: Opcodes/gab/vectorial.c:592
 msgid "vpow_i: ifn length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:617
+#: Opcodes/gab/vectorial.c:620
 msgid "vpow: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:633
+#: Opcodes/gab/vectorial.c:636
 #, c-format
 msgid "vexp_i: invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:649
+#: Opcodes/gab/vectorial.c:652
 msgid "vexp_i: ifn length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:676
+#: Opcodes/gab/vectorial.c:679
 msgid "vexp: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:694
+#: Opcodes/gab/vectorial.c:697
 #, c-format
 msgid "vectorsop: ifn1 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:699
+#: Opcodes/gab/vectorial.c:702
 #, c-format
 msgid "vectorsop: ifn2 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:738
+#: Opcodes/gab/vectorial.c:742
 msgid "vcopy: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:756
+#: Opcodes/gab/vectorial.c:760
 msgid "vcopy: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:783
+#: Opcodes/gab/vectorial.c:787
 #, c-format
 msgid "vcopy_i: ifn1 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:788
+#: Opcodes/gab/vectorial.c:792
 #, c-format
 msgid "vcopy_i: ifn2 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:810
+#: Opcodes/gab/vectorial.c:814
 msgid "vcopy_i: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:827
+#: Opcodes/gab/vectorial.c:831
 msgid "vcopy_i: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:866
+#: Opcodes/gab/vectorial.c:870
 msgid "vaddv: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:885
+#: Opcodes/gab/vectorial.c:889
 msgid "vaddv: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:911
+#: Opcodes/gab/vectorial.c:915
 #, c-format
 msgid "vaddv_i: ifn1 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:916
+#: Opcodes/gab/vectorial.c:920
 #, c-format
 msgid "vaddv_i: ifn2 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:938
+#: Opcodes/gab/vectorial.c:942
 msgid "vaddv_i: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:956
+#: Opcodes/gab/vectorial.c:960
 msgid "vaddv_i: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:987
+#: Opcodes/gab/vectorial.c:991
 msgid "vsubv: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1006
+#: Opcodes/gab/vectorial.c:1010
 msgid "vsubv: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1033
+#: Opcodes/gab/vectorial.c:1037
 #, c-format
 msgid "vsubv_i: ifn1 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1038
+#: Opcodes/gab/vectorial.c:1042
 #, c-format
 msgid "vsubv_i: ifn2 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1060
+#: Opcodes/gab/vectorial.c:1064
 msgid "vsubv_i: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1078
+#: Opcodes/gab/vectorial.c:1082
 msgid "vsubv_i: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1115
+#: Opcodes/gab/vectorial.c:1119
 msgid "vmultv: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1134
+#: Opcodes/gab/vectorial.c:1138
 msgid "vmultv: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1161
+#: Opcodes/gab/vectorial.c:1165
 #, c-format
 msgid "vmultv_i: ifn1 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1166
+#: Opcodes/gab/vectorial.c:1170
 #, c-format
 msgid "vmultv_i: ifn2 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1188
+#: Opcodes/gab/vectorial.c:1192
 msgid "vmultv_i: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1205
+#: Opcodes/gab/vectorial.c:1209
 msgid "vmultv_i: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1242
+#: Opcodes/gab/vectorial.c:1246
 msgid "vdivv: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1261
+#: Opcodes/gab/vectorial.c:1265
 msgid "vdivv: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1288
+#: Opcodes/gab/vectorial.c:1292
 #, c-format
 msgid "vdivv_i: ifn1 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1293
+#: Opcodes/gab/vectorial.c:1297
 #, c-format
 msgid "vdivv_i: ifn2 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1315
+#: Opcodes/gab/vectorial.c:1319
 msgid "vdivv_i: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1333
+#: Opcodes/gab/vectorial.c:1337
 msgid "vdivv_i: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1370
+#: Opcodes/gab/vectorial.c:1374
 msgid "vpowv: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1389
+#: Opcodes/gab/vectorial.c:1393
 msgid "vpowv: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1416
+#: Opcodes/gab/vectorial.c:1420
 #, c-format
 msgid "vpowv_i: ifn1 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1421
+#: Opcodes/gab/vectorial.c:1425
 #, c-format
 msgid "vpowv_i: ifn2 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1443
+#: Opcodes/gab/vectorial.c:1447
 msgid "vpowv_i: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1460
+#: Opcodes/gab/vectorial.c:1464
 msgid "vpowv_i: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1497
+#: Opcodes/gab/vectorial.c:1501
 msgid "vexpv: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1516
+#: Opcodes/gab/vectorial.c:1520
 msgid "vexpv: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1543
+#: Opcodes/gab/vectorial.c:1547
 #, c-format
 msgid "vexpv_i: ifn1 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1548
+#: Opcodes/gab/vectorial.c:1552
 #, c-format
 msgid "vexpv_i: ifn2 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1570
+#: Opcodes/gab/vectorial.c:1574
 msgid "vexpv_i: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1588
+#: Opcodes/gab/vectorial.c:1592
 msgid "vexpv_i: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1625
+#: Opcodes/gab/vectorial.c:1629
 msgid "vmap: Error: ifn1 and ifn2 can not be the same"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1630
+#: Opcodes/gab/vectorial.c:1634
 #, c-format
 msgid "vmap: ifn1 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1635
+#: Opcodes/gab/vectorial.c:1639
 #, c-format
 msgid "vmap: ifn2 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1657
+#: Opcodes/gab/vectorial.c:1661
 msgid "vmap: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1674
+#: Opcodes/gab/vectorial.c:1678
 msgid "vmap: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1870
+#: Opcodes/gab/vectorial.c:1698
+msgid "vectorop: invalid num of elements"
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:1727
+msgid "vport: invalid table length or num of elements"
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:1730
+msgid "vport: invalid table"
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:1735
+msgid "vport: invalid init table length or num of elements"
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:1738
+msgid "vport: invalid init table"
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:1875
 #, c-format
 msgid "vrandh: Seeding from current time %lu\n"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1968
+#: Opcodes/gab/vectorial.c:1888
+msgid "vrandh: Invalid table."
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:1891
+msgid "vrandh: idstoffset is greater than table length."
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:1896
+msgid "randh: Table length exceeded, last elements discarded."
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:1975
 #, c-format
 msgid "vrandi: Seeding from current time %lu\n"
 msgstr ""
 
-#: Opcodes/grain4.c:57
+#: Opcodes/gab/vectorial.c:1987
+msgid "vrandi: Invalid table."
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:1990
+msgid "vrandi: idstoffset is greater thantable length."
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:1995
+msgid "vrandi: Table length exceeded, last elements discarded."
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:2077 Opcodes/gab/vectorial.c:2084
+#: Opcodes/gab/vectorial.c:2091
+msgid "vecdelay: invalid num of elements"
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:2079
+msgid "vecdly: invalid output table"
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:2086
+msgid "vecdly: invalid input table"
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:2093
+msgid "vecdly: invalid delay table"
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:2138
+msgid "vecdly: not initialised"
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:2181
+msgid "vlinseg/vexpseg: invalid num. of elements"
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:2223 Opcodes/vpvoc.c:118
+msgid "tableseg: not initialised"
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:2253 Opcodes/vpvoc.c:146
+msgid "tablexseg: not initialised"
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:2406
+msgid "vdelayk: not initialised"
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:2439 Opcodes/gab/vectorial.c:2445
+msgid "cella: invalid num of elements"
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:2441
+msgid "cella: invalid output table"
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:2448
+msgid "cella: invalid initial state table"
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:2452
+msgid "cella: invalid rule table"
+msgstr ""
+
+#: Opcodes/grain4.c:59
 msgid "granule_set: Unable to find function table"
 msgstr ""
 
-#: Opcodes/grain4.c:67
+#: Opcodes/grain4.c:69
 msgid "granule_set: Unable to find function table for envelope"
 msgstr ""
 
-#: Opcodes/grain4.c:73
+#: Opcodes/grain4.c:75
 msgid "granule_set: Too many voices"
 msgstr ""
 
-#: Opcodes/grain4.c:76
+#: Opcodes/grain4.c:78
 msgid "granule_set: iratio must be greater then 0"
 msgstr ""
 
-#: Opcodes/grain4.c:80
+#: Opcodes/grain4.c:82
 msgid "granule_set: imode must be -1, 0 or +1"
 msgstr ""
 
-#: Opcodes/grain4.c:84
+#: Opcodes/grain4.c:86
 msgid "granule_set: Illegal ithd, must be greater than zero"
 msgstr ""
 
-#: Opcodes/grain4.c:89
+#: Opcodes/grain4.c:91
 msgid "granule_set: ipshift must be integer between 0 and 4"
 msgstr ""
 
-#: Opcodes/grain4.c:94
+#: Opcodes/grain4.c:96
 msgid "granule_set: Not enough voices for the number of pitches"
 msgstr ""
 
-#: Opcodes/grain4.c:101
+#: Opcodes/grain4.c:103
 msgid "granule_set: ipitch1 must be greater then zero"
 msgstr ""
 
-#: Opcodes/grain4.c:106
+#: Opcodes/grain4.c:108
 msgid "granule_set: ipitch2 must be greater then zero"
 msgstr ""
 
-#: Opcodes/grain4.c:111
+#: Opcodes/grain4.c:113
 msgid "granule_set: ipitch3 must be greater then zero"
 msgstr ""
 
-#: Opcodes/grain4.c:116
+#: Opcodes/grain4.c:118
 msgid "granule_set: ipitch4 must be greater then zero"
 msgstr ""
 
-#: Opcodes/grain4.c:121
+#: Opcodes/grain4.c:123
 msgid "granule_set: must be positive and less than function table length"
 msgstr ""
 
-#: Opcodes/grain4.c:125
+#: Opcodes/grain4.c:127
 msgid "granule_set: igskip_os must be greater then 0"
 msgstr ""
 
-#: Opcodes/grain4.c:134
+#: Opcodes/grain4.c:136
 msgid "granule_set: kgap must be greater then 0"
 msgstr ""
 
-#: Opcodes/grain4.c:138
+#: Opcodes/grain4.c:140
 #, c-format
 msgid "granule_set: igap_os must be 0%% to 100%%"
 msgstr ""
 
-#: Opcodes/grain4.c:142
+#: Opcodes/grain4.c:144
 msgid "granule_set: kgsize must be greater then 0"
 msgstr ""
 
-#: Opcodes/grain4.c:146
+#: Opcodes/grain4.c:148
 #, c-format
 msgid "granule_set: igsize_os must be 0%% to 100%%"
 msgstr ""
 
-#: Opcodes/grain4.c:152
+#: Opcodes/grain4.c:154
 msgid "granule_set: Illegal value of iatt and/or idec"
 msgstr ""
 
-#: Opcodes/grain4.c:236
+#: Opcodes/grain4.c:238
 msgid "granule_set: Illegal combination of igskip and ilength"
 msgstr ""
 
-#: Opcodes/grain4.c:243
+#: Opcodes/grain4.c:245
 #, c-format
 msgid ""
 "granule_set: WARNING * ilength may be too short * \n"
@@ -6633,7 +6515,7 @@ msgid ""
 "ilength is %f Sec, kgsize is %f Sec\n"
 msgstr ""
 
-#: Opcodes/grain4.c:418
+#: Opcodes/grain4.c:419
 msgid "grain4: not initialised"
 msgstr ""
 
@@ -6645,92 +6527,88 @@ msgstr ""
 msgid "grain: not initialised"
 msgstr ""
 
-#: Opcodes/harmon.c:224
+#: Opcodes/harmon.c:226
 msgid "harm signal has positive lead\n"
 msgstr ""
 
-#: Opcodes/harmon.c:231
+#: Opcodes/harmon.c:233
 msgid "harm signal has negative lead\n"
 msgstr ""
 
-#: Opcodes/harmon.c:361
+#: Opcodes/harmon.c:363
 msgid "harmon234: out of range\n"
 msgstr ""
 
-#: Opcodes/hrtferX.c:79
+#: Opcodes/hrtferX.c:81
 #, c-format
 msgid ""
 "Orchestra sampling rate is not compatible with HRTF.\n"
 "Should be %d...exiting."
 msgstr ""
 
-#: Opcodes/hrtferX.c:87
+#: Opcodes/hrtferX.c:89
 msgid ""
 "\n"
 "Last argument must be the string 'HRTFcompact' ...correcting.\n"
 msgstr ""
 
-#: Opcodes/hrtferX.c:489
+#: Opcodes/hrtferX.c:494
 msgid "hrtfer: not initialised"
 msgstr ""
 
-#: Opcodes/hrtfopcodes.c:232
+#: Opcodes/hrtfopcodes.c:260 Opcodes/hrtfopcodes.c:1434
+#: Opcodes/hrtfearly.c:300 Opcodes/hrtfreverb.c:257
 #, c-format
 msgid ""
 "\n"
-"Orchestra sampling rate is not compatible with HRTF data files\n"
-"Should be %.0f, see Csound help for object\n"
+"\n"
+"WARNING!!:\n"
+"Orchestra SR not compatible with HRTF processing SR of: %.0f\n"
 "\n"
 msgstr ""
 
-#: Opcodes/hrtfopcodes.c:251 Opcodes/hrtfopcodes.c:275
-#: Opcodes/hrtfopcodes.c:298 Opcodes/hrtfopcodes.c:1257
-#: Opcodes/hrtfopcodes.c:1280 Opcodes/hrtfopcodes.c:1303
-#: Opcodes/hrtfopcodes.c:1854 Opcodes/hrtfopcodes.c:1876
-#: Opcodes/hrtfopcodes.c:1898
+#: Opcodes/hrtfopcodes.c:287 Opcodes/hrtfopcodes.c:1461
+#: Opcodes/hrtfopcodes.c:2071 Opcodes/hrtfearly.c:327 Opcodes/hrtfreverb.c:300
 msgid ""
 "\n"
 "\n"
 "\n"
-"cannot load left data file, exiting\n"
+"Cannot load left data file, exiting\n"
 "\n"
 msgstr ""
 
-#: Opcodes/hrtfopcodes.c:259 Opcodes/hrtfopcodes.c:283
-#: Opcodes/hrtfopcodes.c:306 Opcodes/hrtfopcodes.c:1265
-#: Opcodes/hrtfopcodes.c:1288 Opcodes/hrtfopcodes.c:1311
-#: Opcodes/hrtfopcodes.c:1862 Opcodes/hrtfopcodes.c:1884
-#: Opcodes/hrtfopcodes.c:1906
+#: Opcodes/hrtfopcodes.c:294 Opcodes/hrtfopcodes.c:1468
+#: Opcodes/hrtfopcodes.c:2078 Opcodes/hrtfearly.c:334 Opcodes/hrtfreverb.c:306
 msgid ""
 "\n"
 "\n"
 "\n"
-"cannot load right data file, exiting\n"
+"Cannot load right data file, exiting\n"
 "\n"
 msgstr ""
 
-#: Opcodes/hrtfopcodes.c:313 Opcodes/hrtfopcodes.c:1912
+#: Opcodes/hrtfopcodes.c:690 Opcodes/hrtfearly.c:1241
 msgid ""
 "\n"
-"\n"
-"\n"
-" Sampling rate not supported, exiting\n"
+"WARNING: fades are overlapping: this could lead to noise: reduce fade size "
+"or change trajectory\n"
 "\n"
 msgstr ""
 
-#: Opcodes/hrtfopcodes.c:600
+#: Opcodes/hrtfopcodes.c:2052
+#, c-format
 msgid ""
-"fades are overlapping: this could lead to noise: reduce fade size or change "
-"trajectory\n"
+"\n"
+"\n"
+"WARNING!!:\n"
+"Orchestra SR not compatiblewith HRTF processing SR of: %.0f\n"
 "\n"
 msgstr ""
 
-#: Opcodes/hrtfopcodes.c:1239 Opcodes/hrtfopcodes.c:1837
-#, c-format
+#: Opcodes/hrtfreverb.c:832
 msgid ""
-"Orchestra sampling rate is not compatible with HRTF data files\n"
-"Should be %.0f, see Csound help for object\n"
 "\n"
+"warning, approaching instability, fixed with a flat late reverb!"
 msgstr ""
 
 #: Opcodes/ifd.c:74
@@ -6756,10 +6634,9 @@ msgid "imageload: file %s is not in PNG format.\n"
 msgstr ""
 
 #: Opcodes/imageOpcodes.c:119 Opcodes/imageOpcodes.c:126
-#: Opcodes/imageOpcodes.c:134 Opcodes/imageOpcodes.c:165
-#: Opcodes/imageOpcodes.c:174 Opcodes/imageOpcodes.c:188
-#: Opcodes/imageOpcodes.c:291 Opcodes/imageOpcodes.c:298
-#: Opcodes/imageOpcodes.c:311
+#: Opcodes/imageOpcodes.c:165 Opcodes/imageOpcodes.c:174
+#: Opcodes/imageOpcodes.c:188 Opcodes/imageOpcodes.c:291
+#: Opcodes/imageOpcodes.c:298 Opcodes/imageOpcodes.c:311
 msgid "imageload: out of memory.\n"
 msgstr ""
 
@@ -6779,62 +6656,62 @@ msgid ""
 "Status: %d\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:543
+#: Opcodes/jacko.cpp:545
 #, c-format
 msgid "Created Jack client \"%s\" for Jack server \"%s\".\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:548
+#: Opcodes/jacko.cpp:551
 #, c-format
 msgid "Jack buffer size %d != Csound ksmps %d, exiting...\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:556
+#: Opcodes/jacko.cpp:559
 #, c-format
 msgid "Jack sampling rate %d != Csound sr %d, exiting...\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:567
+#: Opcodes/jacko.cpp:570
 #, c-format
 msgid "Activated Jack client \"%s\".\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:571
+#: Opcodes/jacko.cpp:574
 #, c-format
 msgid "Failed to activate Jack client \"%s\": status %d.\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:586
+#: Opcodes/jacko.cpp:589
 msgid "BEGAN JackoState::close()...\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:622
+#: Opcodes/jacko.cpp:629
 msgid "ENDED JackoState::close().\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:876
+#: Opcodes/jacko.cpp:892
 #, c-format
 msgid "Failed to set Jack freewheeling mode to \"%s\": error %d.\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:878
+#: Opcodes/jacko.cpp:895
 #, c-format
 msgid "Set Jack freewheeling mode to \"%s\".\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:893
+#: Opcodes/jacko.cpp:911
 #, c-format
 msgid "Turned Jack connections \"%s\".\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:934 Opcodes/jacko.cpp:1034 Opcodes/jacko.cpp:1134
-#: Opcodes/jacko.cpp:1200
+#: Opcodes/jacko.cpp:955 Opcodes/jacko.cpp:1062 Opcodes/jacko.cpp:1169
+#: Opcodes/jacko.cpp:1241
 #, c-format
 msgid "Could not create Jack port \"%s\".\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:946 Opcodes/jacko.cpp:1046 Opcodes/jacko.cpp:1146
-#: Opcodes/jacko.cpp:1212
+#: Opcodes/jacko.cpp:969 Opcodes/jacko.cpp:1077 Opcodes/jacko.cpp:1184
+#: Opcodes/jacko.cpp:1255
 #, c-format
 msgid "Could not create Jack connection from \"%s\" to \"%s\": status %d.\n"
 msgstr ""
@@ -6873,27 +6750,27 @@ msgstr ""
 msgid "lorisread cannot load %s"
 msgstr ""
 
-#: Opcodes/loscilx.c:74 Opcodes/loscilx.c:178
+#: Opcodes/loscilx.c:76 Opcodes/loscilx.c:180
 #, c-format
 msgid "could not load '%s'"
 msgstr ""
 
-#: Opcodes/loscilx.c:88 Opcodes/loscilx.c:258
+#: Opcodes/loscilx.c:90 Opcodes/loscilx.c:260
 #, c-format
 msgid "invalid loop mode: %d"
 msgstr ""
 
-#: Opcodes/loscilx.c:170
+#: Opcodes/loscilx.c:172
 msgid "loscilx: invalid number of output arguments"
 msgstr ""
 
-#: Opcodes/loscilx.c:190 Opcodes/loscilx.c:219 Opcodes/pvlock.c:94
-#: Opcodes/pvlock.c:296 Opcodes/pvsbasic.c:460
+#: Opcodes/loscilx.c:192 Opcodes/loscilx.c:221 Opcodes/pvlock.c:118
+#: Opcodes/pvlock.c:320 Opcodes/pvsbasic.c:460
 msgid ""
 "number of output arguments inconsistent with number of sound file channels"
 msgstr ""
 
-#: Opcodes/loscilx.c:665
+#: Opcodes/loscilx.c:667
 msgid "loscilx: not initialised"
 msgstr ""
 
@@ -6901,11 +6778,11 @@ msgstr ""
 msgid "illegal order num. (min 1, max 10)"
 msgstr ""
 
-#: Opcodes/mandolin.c:80
+#: Opcodes/mandolin.c:81
 msgid "No table for Mandolin"
 msgstr ""
 
-#: Opcodes/mandolin.c:90
+#: Opcodes/mandolin.c:91
 msgid "No base frequency for mandolin"
 msgstr ""
 
@@ -6936,27 +6813,27 @@ msgstr ""
 msgid "illegal lsb control number at position n.%d"
 msgstr ""
 
-#: Opcodes/modal4.c:45
+#: Opcodes/modal4.c:46
 msgid "No table for Modal4 case"
 msgstr ""
 
-#: Opcodes/modal4.c:245
+#: Opcodes/modal4.c:246
 msgid "No table for Marimba strike"
 msgstr ""
 
-#: Opcodes/modal4.c:284
+#: Opcodes/modal4.c:285
 msgid "striking three times here!!!\n"
 msgstr ""
 
-#: Opcodes/modal4.c:289
+#: Opcodes/modal4.c:290
 msgid "striking twice here!!\n"
 msgstr ""
 
-#: Opcodes/modal4.c:359
+#: Opcodes/modal4.c:360
 msgid "No table for Vibraphone strike"
 msgstr ""
 
-#: Opcodes/modal4.c:440
+#: Opcodes/modal4.c:441
 msgid "No table for Agogobell strike"
 msgstr ""
 
@@ -6964,12 +6841,12 @@ msgstr ""
 msgid "modmatrix: "
 msgstr ""
 
-#: Opcodes/mp3in.c:92 Opcodes/mp3in.c:230
+#: Opcodes/mp3in.c:93 Opcodes/mp3in.c:231
 #, c-format
 msgid "mp3in: %s: failed to open file"
 msgstr ""
 
-#: Opcodes/mp3in.c:139
+#: Opcodes/mp3in.c:140
 #, c-format
 msgid "mp3in: file sample rate (%d) != orchestra sr (%d)\n"
 msgstr ""
@@ -7256,7 +7133,7 @@ msgstr ""
 msgid "No open glove"
 msgstr ""
 
-#: Opcodes/pan2.c:43
+#: Opcodes/pan2.c:45
 msgid "Unknown panning type"
 msgstr ""
 
@@ -7272,192 +7149,196 @@ msgstr ""
 msgid "partikkelsync: could not find opcode id"
 msgstr ""
 
-#: Opcodes/physmod.c:121
+#: Opcodes/physmod.c:122
 msgid "No table for Clarinet"
 msgstr ""
 
-#: Opcodes/physmod.c:129
+#: Opcodes/physmod.c:130
 msgid "No base frequency for clarinet -- assuming 50Hz\n"
 msgstr ""
 
-#: Opcodes/physmod.c:283
+#: Opcodes/physmod.c:284
 msgid "No table for Flute"
 msgstr ""
 
-#: Opcodes/physmod.c:291
+#: Opcodes/physmod.c:292
 msgid "No base frequency for flute -- assumed to be 50Hz\n"
 msgstr ""
 
-#: Opcodes/physmod.c:481
+#: Opcodes/physmod.c:482
 msgid "No table for wgbow vibrato"
 msgstr ""
 
-#: Opcodes/physmod.c:689
+#: Opcodes/physmod.c:490
+msgid "unknown lowest frequency for bowed string -- assuming 50Hz\n"
+msgstr ""
+
+#: Opcodes/physmod.c:690
 msgid "DlineA not initialised"
 msgstr ""
 
-#: Opcodes/physmod.c:756
+#: Opcodes/physmod.c:757
 msgid "No table for Brass"
 msgstr ""
 
-#: Opcodes/physmod.c:765
+#: Opcodes/physmod.c:766
 msgid "No base frequency for brass -- assumed to be 50Hz\n"
 msgstr ""
 
-#: Opcodes/physutil.c:137 Opcodes/physutil.c:312 Opcodes/physutil.c:324
-#: Opcodes/physutil.c:345
+#: Opcodes/physutil.c:138 Opcodes/physutil.c:313 Opcodes/physutil.c:325
+#: Opcodes/physutil.c:346
 msgid "negative rates not allowed!!, correcting\n"
 msgstr ""
 
-#: Opcodes/physutil.c:186
+#: Opcodes/physutil.c:187
 #, c-format
 msgid "Envelope: value=%f target=%f rate=%f state=%d\n"
 msgstr ""
 
-#: Opcodes/physutil.c:335
+#: Opcodes/physutil.c:336
 msgid "Sustain level out of range!!, correcting\n"
 msgstr ""
 
-#: Opcodes/physutil.c:356 Opcodes/physutil.c:366 Opcodes/physutil.c:376
+#: Opcodes/physutil.c:357 Opcodes/physutil.c:367 Opcodes/physutil.c:377
 msgid "negative times not allowed!!, correcting\n"
 msgstr ""
 
-#: Opcodes/pitch0.c:37
+#: Opcodes/pitch0.c:38
 #, c-format
 msgid "Muting new instances of instr %d\n"
 msgstr ""
 
-#: Opcodes/pitch0.c:40
+#: Opcodes/pitch0.c:41
 #, c-format
 msgid "Allowing instrument %d to start\n"
 msgstr ""
 
-#: Opcodes/pitch.c:84 Opcodes/spectra.c:78
+#: Opcodes/pitch.c:85 Opcodes/spectra.c:80
 msgid "illegal iocts"
 msgstr ""
 
-#: Opcodes/pitch.c:86 Opcodes/spectra.c:80
+#: Opcodes/pitch.c:87 Opcodes/spectra.c:82
 msgid "illegal ifrqs"
 msgstr ""
 
-#: Opcodes/pitch.c:180 Opcodes/spectra.c:584
+#: Opcodes/pitch.c:181 Opcodes/spectra.c:586
 msgid "illegal no of partials"
 msgstr ""
 
-#: Opcodes/pitch.c:205
+#: Opcodes/pitch.c:206
 msgid "per octave rolloff too steep"
 msgstr ""
 
-#: Opcodes/pitch.c:219 Opcodes/spectra.c:625
+#: Opcodes/pitch.c:220 Opcodes/spectra.c:627
 msgid "illegal lo-hi values"
 msgstr ""
 
-#: Opcodes/pitch.c:454
+#: Opcodes/pitch.c:455
 msgid "pitch: not initialised"
 msgstr ""
 
-#: Opcodes/pitch.c:463
+#: Opcodes/pitch.c:464
 msgid "Must have even number of arguments in mac\n"
 msgstr ""
 
-#: Opcodes/pitch.c:552
+#: Opcodes/pitch.c:553
 msgid "clockread: clock still running, call clockoff first"
 msgstr ""
 
-#: Opcodes/pitch.c:578
+#: Opcodes/pitch.c:579
 msgid "adsynt: wavetable not found!"
 msgstr ""
 
-#: Opcodes/pitch.c:591
+#: Opcodes/pitch.c:592
 msgid "adsynt: freqtable not found!"
 msgstr ""
 
-#: Opcodes/pitch.c:596
+#: Opcodes/pitch.c:597
 msgid "adsynt: partial count is greater than freqtable size!"
 msgstr ""
 
-#: Opcodes/pitch.c:604
+#: Opcodes/pitch.c:605
 msgid "adsynt: amptable not found!"
 msgstr ""
 
-#: Opcodes/pitch.c:609
+#: Opcodes/pitch.c:610
 msgid "adsynt: partial count is greater than amptable size!"
 msgstr ""
 
-#: Opcodes/pitch.c:640
+#: Opcodes/pitch.c:641
 msgid "adsynt: not initialised"
 msgstr ""
 
-#: Opcodes/pitch.c:716
+#: Opcodes/pitch.c:717
 msgid "hsboscil: not initialised"
 msgstr ""
 
-#: Opcodes/pitch.c:799
+#: Opcodes/pitch.c:800
 msgid "pitchamdf: maxcps must be > mincps !"
 msgstr ""
 
-#: Opcodes/pitch.c:945
+#: Opcodes/pitch.c:946
 msgid "pitchamdf: not initialised"
 msgstr ""
 
-#: Opcodes/pitch.c:1125 Opcodes/pitch.c:1152
+#: Opcodes/pitch.c:1126 Opcodes/pitch.c:1153
 msgid "phasorbnk: not initialised"
 msgstr ""
 
-#: Opcodes/pitch.c:1214
+#: Opcodes/pitch.c:1215
 msgid "pinkish: Invalid method code"
 msgstr ""
 
-#: Opcodes/pitch.c:1225
+#: Opcodes/pitch.c:1226
 msgid "pinkish: Filter method requires a-rate (noise) input"
 msgstr ""
 
-#: Opcodes/pitch.c:1348
+#: Opcodes/pitch.c:1349
 #, c-format
 msgid ""
 "pinkish: Gardner method requires 4-%d bands. Default %ld substituted for "
 "%d.\n"
 msgstr ""
 
-#: Opcodes/pitch.c:1731
+#: Opcodes/pitch.c:1733
 msgid "Incorrect argument count in transeg"
 msgstr ""
 
-#: Opcodes/pitch.c:1782
+#: Opcodes/pitch.c:1784
 msgid "Incorrect argument count in transegb"
 msgstr ""
 
-#: Opcodes/pitch.c:1832 Opcodes/pitch.c:1971
+#: Opcodes/pitch.c:1834 Opcodes/pitch.c:1977
 msgid "Error: transeg not initialised (krate)\n"
 msgstr ""
 
-#: Opcodes/pitch.c:1867 Opcodes/pitch.c:2013
+#: Opcodes/pitch.c:1869 Opcodes/pitch.c:2027
 msgid "transeg: not initialised (arate)\n"
 msgstr ""
 
-#: Opcodes/pitch.c:1921
+#: Opcodes/pitch.c:1924
 msgid "Incorrect argument count in transegr"
 msgstr ""
 
-#: Opcodes/pitch.c:2269
+#: Opcodes/pitch.c:2294
 msgid "median: not initialised (arate)\n"
 msgstr ""
 
-#: Opcodes/pitch.c:2273 Opcodes/pitch.c:2321
+#: Opcodes/pitch.c:2298 Opcodes/pitch.c:2345
 #, c-format
 msgid "median: window (%d)larger than maximum(%d); truncated"
 msgstr ""
 
-#: Opcodes/pitch.c:2317
+#: Opcodes/pitch.c:2341
 msgid "median: not initialised (krate)\n"
 msgstr ""
 
-#: Opcodes/pitchtrack.c:369
+#: Opcodes/pitchtrack.c:370
 #, c-format
 msgid "ptrack: FFT size out of range; using %d\n"
 msgstr ""
 
-#: Opcodes/pitchtrack.c:382
+#: Opcodes/pitchtrack.c:383
 #, c-format
 msgid "ptrack: FFT size not a power of 2; using %d\n"
 msgstr ""
@@ -7475,7 +7356,7 @@ msgstr ""
 msgid "Error: %s, %s"
 msgstr ""
 
-#: Opcodes/ppp.c:20 Opcodes/pvlock.c:454 Opcodes/pvsband.c:46
+#: Opcodes/ppp.c:20 Opcodes/pvlock.c:478 Opcodes/pvsband.c:46
 #: Opcodes/pvsbasic.c:575 Opcodes/pvsbasic.c:880 Opcodes/pvsbasic.c:1080
 #: Opcodes/pvsbasic.c:1180 Opcodes/pvsbasic.c:1395 Opcodes/pvsbasic.c:1593
 #: Opcodes/pvsbasic.c:1756 Opcodes/pvslock.c:20
@@ -7494,62 +7375,62 @@ msgstr ""
 msgid "psynth: function table not found\n"
 msgstr ""
 
-#: Opcodes/psynth.c:569 Opcodes/psynth.c:662
+#: Opcodes/psynth.c:567 Opcodes/psynth.c:660
 msgid "Input not in TRACKS format\n"
 msgstr ""
 
-#: Opcodes/psynth.c:767
+#: Opcodes/psynth.c:765
 msgid "trsplit: input not in TRACKS format\n"
 msgstr ""
 
-#: Opcodes/psynth.c:863 Opcodes/psynth.c:1027
+#: Opcodes/psynth.c:861 Opcodes/psynth.c:1023
 msgid "trmix: first input not in TRACKS format\n"
 msgstr ""
 
-#: Opcodes/psynth.c:868 Opcodes/psynth.c:1032
+#: Opcodes/psynth.c:866 Opcodes/psynth.c:1028
 msgid "trmix: second input not in TRACKS format\n"
 msgstr ""
 
-#: Opcodes/psynth.c:943
+#: Opcodes/psynth.c:939
 msgid "trfil: input not in TRACKS format\n"
 msgstr ""
 
-#: Opcodes/psynth.c:948
+#: Opcodes/psynth.c:944
 msgid "trfil: could not find function table\n"
 msgstr ""
 
-#: Opcodes/psynth.c:1135
+#: Opcodes/psynth.c:1131
 msgid "binit: first input not in TRACKS format\n"
 msgstr ""
 
-#: Opcodes/pvadd.c:153
+#: Opcodes/pvadd.c:150
 msgid "PVADD ktimpnt truncated to last frame"
 msgstr ""
 
-#: Opcodes/pvadd.c:191
+#: Opcodes/pvadd.c:188
 msgid "pvadd: not initialised"
 msgstr ""
 
-#: Opcodes/pvadd.c:193
+#: Opcodes/pvadd.c:190
 msgid "PVADD timpnt < 0"
 msgstr ""
 
-#: Opcodes/pvadd.c:201
+#: Opcodes/pvadd.c:198
 #, c-format
 msgid "PVADD cannot load %s"
 msgstr ""
 
-#: Opcodes/pvadd.c:205 Opcodes/ugens8.c:223
+#: Opcodes/pvadd.c:202 Opcodes/ugens8.c:223
 #, c-format
 msgid "pvoc-ex file %s: FFT size %d too large for Csound"
 msgstr ""
 
-#: Opcodes/pvadd.c:210
+#: Opcodes/pvadd.c:207
 #, c-format
 msgid "PV frame %ld seems too small in %s"
 msgstr ""
 
-#: Opcodes/pvadd.c:215 Opcodes/pvread.c:115 Opcodes/ugens8.c:229
+#: Opcodes/pvadd.c:212 Opcodes/pvread.c:115 Opcodes/ugens8.c:229
 #, c-format
 msgid "pvoc-ex file %s is not mono"
 msgstr ""
@@ -7559,97 +7440,97 @@ msgstr ""
 msgid "PVBUFREAD cannot load %s"
 msgstr ""
 
-#: Opcodes/pvinterp.c:76 Opcodes/vpvoc.c:206
+#: Opcodes/pvinterp.c:76 Opcodes/vpvoc.c:207
 #, c-format
 msgid "PVOC frame %ld bigger than %ld in %s"
 msgstr ""
 
-#: Opcodes/pvinterp.c:81 Opcodes/vpvoc.c:211
+#: Opcodes/pvinterp.c:81 Opcodes/vpvoc.c:212
 #, c-format
 msgid "PVOC frame %ld seems too small in %s"
 msgstr ""
 
-#: Opcodes/pvinterp.c:85 Opcodes/pvinterp.c:184 Opcodes/pvinterp.c:356
-#: Opcodes/vpvoc.c:215
+#: Opcodes/pvinterp.c:85 Opcodes/pvinterp.c:183 Opcodes/pvinterp.c:354
+#: Opcodes/vpvoc.c:216
 #, c-format
 msgid "%d chans (not 1) in PVOC file %s"
 msgstr ""
 
-#: Opcodes/pvinterp.c:101 Opcodes/pvinterp.c:212 Opcodes/pvinterp.c:382
+#: Opcodes/pvinterp.c:100 Opcodes/pvinterp.c:210 Opcodes/pvinterp.c:379
 #: Opcodes/ugens8.c:95 Opcodes/vpvoc.c:244
 #, c-format
 msgid "ksmps of %d needs wdw of %d, max is %d for pv %s"
 msgstr ""
 
-#: Opcodes/pvinterp.c:122 Opcodes/pvinterp.c:256 Opcodes/pvinterp.c:431
+#: Opcodes/pvinterp.c:121 Opcodes/pvinterp.c:254 Opcodes/pvinterp.c:428
 #: Opcodes/pvread.c:95 Opcodes/ugens8.c:156 Opcodes/vpvoc.c:297
 msgid "PVOC ktimpnt truncated to last frame"
 msgstr ""
 
-#: Opcodes/pvinterp.c:130
+#: Opcodes/pvinterp.c:129
 msgid "pvbufread: not initialised"
 msgstr ""
 
-#: Opcodes/pvinterp.c:132 Opcodes/pvinterp.c:306 Opcodes/pvinterp.c:492
+#: Opcodes/pvinterp.c:131 Opcodes/pvinterp.c:304 Opcodes/pvinterp.c:489
 #: Opcodes/pvread.c:103 Opcodes/ugens8.c:206 Opcodes/vpvoc.c:361
 msgid "PVOC timpnt < 0"
 msgstr ""
 
-#: Opcodes/pvinterp.c:149
+#: Opcodes/pvinterp.c:148
 msgid "pvinterp: associated pvbufread not found"
 msgstr ""
 
-#: Opcodes/pvinterp.c:166
+#: Opcodes/pvinterp.c:165
 #, c-format
 msgid "PVINTERP cannot load %s"
 msgstr ""
 
-#: Opcodes/pvinterp.c:179
+#: Opcodes/pvinterp.c:178
 #, c-format
 msgid "pvinterp: %s: frame size %d does not match pvbufread frame size %d\n"
 msgstr ""
 
-#: Opcodes/pvinterp.c:300
+#: Opcodes/pvinterp.c:298
 msgid "pvinterp: not initialised"
 msgstr ""
 
-#: Opcodes/pvinterp.c:302 Opcodes/pvinterp.c:488 Opcodes/ugens8.c:202
+#: Opcodes/pvinterp.c:300 Opcodes/pvinterp.c:485 Opcodes/ugens8.c:202
 #: Opcodes/vpvoc.c:357
 msgid "PVOC transpose too low"
 msgstr ""
 
-#: Opcodes/pvinterp.c:304 Opcodes/pvinterp.c:490 Opcodes/ugens8.c:204
+#: Opcodes/pvinterp.c:302 Opcodes/pvinterp.c:487 Opcodes/ugens8.c:204
 #: Opcodes/vpvoc.c:359
 msgid "PVOC transpose too high"
 msgstr ""
 
-#: Opcodes/pvinterp.c:323
+#: Opcodes/pvinterp.c:321
 msgid "pvcross: associated pvbufread not found"
 msgstr ""
 
-#: Opcodes/pvinterp.c:339
+#: Opcodes/pvinterp.c:337
 #, c-format
 msgid "PVCROSS cannot load %s"
 msgstr ""
 
-#: Opcodes/pvinterp.c:351
+#: Opcodes/pvinterp.c:349
 #, c-format
 msgid "pvcross: %s: frame size %d does not match pvbufread frame size %d\n"
 msgstr ""
 
-#: Opcodes/pvinterp.c:454 Opcodes/vpvoc.c:322
+#: Opcodes/pvinterp.c:451 Opcodes/vpvoc.c:322
 msgid "PVOC debug: one frame gets through\n"
 msgstr ""
 
-#: Opcodes/pvinterp.c:486
+#: Opcodes/pvinterp.c:483
 msgid "pvcross: not initialised"
 msgstr ""
 
-#: Opcodes/pvlock.c:35 Opcodes/pvsbasic.c:380
+#: Opcodes/pvlock.c:59 Opcodes/pvsbasic.c:380
 msgid "invalid number of output arguments"
 msgstr ""
 
-#: Opcodes/pvlock.c:466
+#: Opcodes/pvlock.c:490
 msgid "pvsfreeze: signal format must be amp-freq."
 msgstr ""
 
@@ -7756,28 +7637,33 @@ msgstr ""
 msgid "pvs2tab: signal format must be amp-phase or amp-freq."
 msgstr ""
 
-#: Opcodes/pvsbasic.c:2151 Opcodes/pvsbasic.c:2190 Opcodes/tabvars.c:53
-#: Opcodes/tabvars.c:89 Opcodes/tabvars.c:131 Opcodes/tabvars.c:176
-#: Opcodes/tabvars.c:178
+#: Opcodes/pvsbasic.c:2151 Opcodes/pvsbasic.c:2189 Opcodes/tabvars.c:56
+#: Opcodes/tabvars.c:92 Opcodes/tabvars.c:134 Opcodes/tabvars.c:179
+#: Opcodes/tabvars.c:181
 msgid "t-variable not initialised"
 msgstr ""
 
-#: Opcodes/pvsbuffer.c:53 Opcodes/pvscent.c:164 Opcodes/pvsdemix.c:49
+#: Opcodes/pvsbuffer.c:56 Opcodes/pvscent.c:164 Opcodes/pvsdemix.c:49
 msgid "SDFT case not implemented yet"
 msgstr ""
 
-#: Opcodes/pvsbuffer.c:85
+#: Opcodes/pvsbuffer.c:89
 msgid "error... could not create global var for handle\n"
 msgstr ""
 
-#: Opcodes/pvsbuffer.c:143 Opcodes/pvsbuffer.c:190 Opcodes/pvsbuffer.c:258
+#: Opcodes/pvsbuffer.c:148 Opcodes/pvsbuffer.c:197 Opcodes/pvsbuffer.c:266
 msgid "error... could not read handle from global variable\n"
 msgstr ""
 
-#: Opcodes/pvsbuffer.c:238 Opcodes/pvsbuffer.c:306
+#: Opcodes/pvsbuffer.c:246 Opcodes/pvsbuffer.c:316
 msgid "Invalid buffer handle"
 msgstr ""
 
+#: Opcodes/pvsbuffer.c:285 Opcodes/pvsbuffer.c:291
+#, c-format
+msgid "table length too small: needed %d, got %d\n"
+msgstr ""
+
 #: Opcodes/pvscent.c:42
 msgid "pvscent: format must be amp-phase or amp-freq.\n"
 msgstr ""
@@ -7966,48 +7852,48 @@ msgstr ""
 msgid "seqtim: incorrect table number"
 msgstr ""
 
-#: Opcodes/sfont.c:118
+#: Opcodes/sfont.c:121
 #, c-format
 msgid "sfload: cannot open SoundFont file \"%s\" (error %s)"
 msgstr ""
 
-#: Opcodes/sfont.c:123
+#: Opcodes/sfont.c:126
 msgid "Sfload: cannot use globals"
 msgstr ""
 
-#: Opcodes/sfont.c:153
+#: Opcodes/sfont.c:156
 msgid "sfload: could not open globals\n"
 msgstr ""
 
-#: Opcodes/sfont.c:170
+#: Opcodes/sfont.c:173
 msgid "Extending soundfonts"
 msgstr ""
 
-#: Opcodes/sfont.c:201
+#: Opcodes/sfont.c:204
 #, c-format
 msgid ""
 "\n"
 "Preset list of \"%s\"\n"
 msgstr ""
 
-#: Opcodes/sfont.c:204
+#: Opcodes/sfont.c:207
 #, c-format
 msgid "%3d) %-20s\tprog:%-3d bank:%d\n"
 msgstr ""
 
-#: Opcodes/sfont.c:226
+#: Opcodes/sfont.c:229
 #, c-format
 msgid ""
 "\n"
 "Assigning all Presets of \"%s\" starting from %d (preset handle number)\n"
 msgstr ""
 
-#: Opcodes/sfont.c:231
+#: Opcodes/sfont.c:234
 #, c-format
 msgid "%3d<--%-20s\t(prog:%-3d bank:%d)\n"
 msgstr ""
 
-#: Opcodes/sfont.c:238
+#: Opcodes/sfont.c:241
 #, c-format
 msgid ""
 "\n"
@@ -8015,38 +7901,38 @@ msgid ""
 "\n"
 msgstr ""
 
-#: Opcodes/sfont.c:251
+#: Opcodes/sfont.c:254
 #, c-format
 msgid ""
 "\n"
 "Instrument list of \"%s\"\n"
 msgstr ""
 
-#: Opcodes/sfont.c:268
+#: Opcodes/sfont.c:271
 #, c-format
 msgid "sfpreset: preset handle too big (%d), max: %d"
 msgstr ""
 
-#: Opcodes/sfont.c:284
+#: Opcodes/sfont.c:287
 #, c-format
 msgid ""
 "sfpreset: cannot find any preset having prog number %d and bank number %d in "
 "SoundFont file \"%s\""
 msgstr ""
 
-#: Opcodes/sfont.c:306 Opcodes/sfont.c:2189
+#: Opcodes/sfont.c:309 Opcodes/sfont.c:2192
 msgid "sfplay: invalid or out-of-range preset number"
 msgstr ""
 
-#: Opcodes/sfont.c:633
+#: Opcodes/sfont.c:636
 msgid "sfplaym: invalid or out-of-range preset number"
 msgstr ""
 
-#: Opcodes/sfont.c:888 Opcodes/sfont.c:1150
+#: Opcodes/sfont.c:891 Opcodes/sfont.c:1153
 msgid "sfinstr: instrument out of range"
 msgstr ""
 
-#: Opcodes/sfont.c:1598 Opcodes/sfont.c:1835
+#: Opcodes/sfont.c:1601 Opcodes/sfont.c:1838
 #, c-format
 msgid ""
 "SoundFont file \"%s\" contains ROM samples !\n"
@@ -8054,19 +7940,19 @@ msgid ""
 "Session aborted !"
 msgstr ""
 
-#: Opcodes/sfont.c:1987 Opcodes/sfont.c:1993
+#: Opcodes/sfont.c:1990 Opcodes/sfont.c:1996
 msgid "Sfont: cannot use globals/"
 msgstr ""
 
-#: Opcodes/sfont.c:1996
+#: Opcodes/sfont.c:1999
 msgid "Sfont format not compatible"
 msgstr ""
 
-#: Opcodes/sfont.c:2534
+#: Opcodes/sfont.c:2537
 msgid "error... could not create sfont globals\n"
 msgstr ""
 
-#: Opcodes/shape.c:49
+#: Opcodes/shape.c:51
 msgid "powershape: ifullscale must be strictly positive"
 msgstr ""
 
@@ -8078,25 +7964,25 @@ msgstr ""
 msgid "ftgenonce error"
 msgstr ""
 
-#: Opcodes/singwave.c:85
+#: Opcodes/singwave.c:86
 msgid "No table for Modulatr"
 msgstr ""
 
-#: Opcodes/singwave.c:127
+#: Opcodes/singwave.c:128
 msgid "No table for Singwave"
 msgstr ""
 
-#: Opcodes/singwave.c:207
+#: Opcodes/singwave.c:208
 #, c-format
 msgid "SingWave: rate=%f sweepRate=%f mytime=%f\n"
 msgstr ""
 
-#: Opcodes/singwave.c:273
+#: Opcodes/singwave.c:280
 #, c-format
 msgid "Found Formant: %s (number %i)\n"
 msgstr ""
 
-#: Opcodes/singwave.c:395
+#: Opcodes/singwave.c:397
 #, c-format
 msgid "Setting Phoneme: %d %f\n"
 msgstr ""
@@ -8129,15 +8015,15 @@ msgstr ""
 msgid "pvsarp: not initialised\n"
 msgstr ""
 
-#: Opcodes/sndloop.c:995 Opcodes/sndloop.c:1092
+#: Opcodes/sndloop.c:995 Opcodes/sndloop.c:1091
 msgid "signal format must be amp-phase or amp-freq.\n"
 msgstr ""
 
-#: Opcodes/sndloop.c:1072
+#: Opcodes/sndloop.c:1071
 msgid "pvsvoc: not initialised\n"
 msgstr ""
 
-#: Opcodes/sndloop.c:1123
+#: Opcodes/sndloop.c:1122
 msgid "pvsmorph: not initialised\n"
 msgstr ""
 
@@ -8157,25 +8043,27 @@ msgstr ""
 msgid "sndwarpst: not initialised"
 msgstr ""
 
-#: Opcodes/sockrecv.c:123 Opcodes/sockrecv.c:213 Opcodes/sockrecv.c:300
-#: Opcodes/socksend.c:75 Opcodes/socksend.c:133 Opcodes/socksend.c:190
-msgid "creating socket"
+#: Opcodes/sockrecv.c:117 Opcodes/sockrecv.c:215 Opcodes/sockrecv.c:314
+#: Opcodes/socksend.c:73 Opcodes/socksend.c:157 Opcodes/socksend.c:252
+#, c-format
+msgid "Winsock2 failed to start: %d"
 msgstr ""
 
-#: Opcodes/sockrecv.c:322
-msgid "connect failed"
+#: Opcodes/sockrecv.c:131 Opcodes/sockrecv.c:227 Opcodes/sockrecv.c:320
+#: Opcodes/socksend.c:86 Opcodes/socksend.c:171 Opcodes/socksend.c:259
+msgid "creating socket"
 msgstr ""
 
-#: Opcodes/sockrecv.c:335
-msgid "read from socket failed"
+#: Opcodes/sockrecv.c:347
+#, c-format
+msgid "connect failed (%d)"
 msgstr ""
 
-#: Opcodes/socksend.c:67 Opcodes/socksend.c:125
-#, c-format
-msgid "The buffersize must be <= %d samples to fit in a udp-packet."
+#: Opcodes/sockrecv.c:360
+msgid "read from socket failed"
 msgstr ""
 
-#: Opcodes/socksend.c:107 Opcodes/socksend.c:169
+#: Opcodes/socksend.c:126 Opcodes/socksend.c:215
 msgid "sendto failed"
 msgstr ""
 
@@ -8195,199 +8083,199 @@ msgstr ""
 msgid "spat3di: not initialised"
 msgstr ""
 
-#: Opcodes/spectra.c:82
+#: Opcodes/spectra.c:84
 msgid "illegal Q value"
 msgstr ""
 
-#: Opcodes/spectra.c:84
+#: Opcodes/spectra.c:86
 msgid "unknown dbout code"
 msgstr ""
 
-#: Opcodes/spectra.c:104
+#: Opcodes/spectra.c:106
 #, c-format
 msgid "spectrum: %s window, %s out, making tables ...\n"
 msgstr ""
 
-#: Opcodes/spectra.c:123
+#: Opcodes/spectra.c:125
 #, c-format
 msgid ""
 "\thigh cps %7.1f\n"
 "\t low cps %7.1f\n"
 msgstr ""
 
-#: Opcodes/spectra.c:138
+#: Opcodes/spectra.c:140
 #, c-format
 msgid "\tQ %4.1f uses a %d sample window each octdown\n"
 msgstr ""
 
-#: Opcodes/spectra.c:169
+#: Opcodes/spectra.c:171
 msgid "spectrum windowed sines:"
 msgstr ""
 
-#: Opcodes/spectra.c:187
+#: Opcodes/spectra.c:189
 #, c-format
 msgid "\t%d oct analysis window delay = %ld samples (%d msecs)\n"
 msgstr ""
 
-#: Opcodes/spectra.c:195
+#: Opcodes/spectra.c:197
 msgid "octdown buffers:"
 msgstr ""
 
-#: Opcodes/spectra.c:513 Opcodes/spectra.c:553
+#: Opcodes/spectra.c:515 Opcodes/spectra.c:555
 msgid "specdisp: not initialised"
 msgstr ""
 
-#: Opcodes/spectra.c:523
+#: Opcodes/spectra.c:525
 #, c-format
 msgid "instr %d %s, dft (%s), %ld octaves (%d - %d Hz):"
 msgstr ""
 
-#: Opcodes/spectra.c:530
+#: Opcodes/spectra.c:532
 #, c-format
 msgid "instr %d %s, dft (%s), %ld octaves (%3.1f - %3.1f Hz):"
 msgstr ""
 
-#: Opcodes/spectra.c:611
+#: Opcodes/spectra.c:613
 msgid "per oct rolloff too steep"
 msgstr ""
 
-#: Opcodes/spectra.c:632
+#: Opcodes/spectra.c:634
 #, c-format
 msgid "specptrk: %d freqs, %d%s ptls at "
 msgstr ""
 
-#: Opcodes/spectra.c:633
+#: Opcodes/spectra.c:635
 msgid " odd"
 msgstr ""
 
-#: Opcodes/spectra.c:637
+#: Opcodes/spectra.c:639
 msgid ""
 "\n"
 "\t\trolloff vals:"
 msgstr ""
 
-#: Opcodes/spectra.c:660
+#: Opcodes/spectra.c:662
 #, c-format
 msgid ""
 "\n"
 "\tdbthresh %4.1f: X-corr %s threshon %4.1f, threshoff %4.1f\n"
 msgstr ""
 
-#: Opcodes/spectra.c:817
+#: Opcodes/spectra.c:819
 msgid "specptrk: not initialised"
 msgstr ""
 
-#: Opcodes/spectra.c:849
+#: Opcodes/spectra.c:851
 msgid "specsum: not initialised"
 msgstr ""
 
-#: Opcodes/spectra.c:860
+#: Opcodes/spectra.c:862
 msgid "inputs have different sizes"
 msgstr ""
 
-#: Opcodes/spectra.c:863
+#: Opcodes/spectra.c:865
 msgid "inputs have diff. time periods"
 msgstr ""
 
-#: Opcodes/spectra.c:867
+#: Opcodes/spectra.c:869
 msgid "inputs have different freq resolution"
 msgstr ""
 
-#: Opcodes/spectra.c:870
+#: Opcodes/spectra.c:872
 msgid "inputs have different amptypes"
 msgstr ""
 
-#: Opcodes/spectra.c:902
+#: Opcodes/spectra.c:904
 msgid "specaddm: not initialised"
 msgstr ""
 
-#: Opcodes/spectra.c:926
+#: Opcodes/spectra.c:928
 msgid "specdiff: local buffers not initialised"
 msgstr ""
 
-#: Opcodes/spectra.c:964
+#: Opcodes/spectra.c:966
 msgid "specdiff: not initialised"
 msgstr ""
 
-#: Opcodes/spectra.c:986
+#: Opcodes/spectra.c:988
 msgid "specscal: local buffer not initialised"
 msgstr ""
 
-#: Opcodes/spectra.c:991
+#: Opcodes/spectra.c:993
 msgid "missing fscale table"
 msgstr ""
 
-#: Opcodes/spectra.c:1057
+#: Opcodes/spectra.c:1059
 msgid "specscal: not initialised"
 msgstr ""
 
-#: Opcodes/spectra.c:1081
+#: Opcodes/spectra.c:1083
 msgid "spechist: local buffers not intiialised"
 msgstr ""
 
-#: Opcodes/spectra.c:1113
+#: Opcodes/spectra.c:1115
 msgid "spechist: not initialised"
 msgstr ""
 
-#: Opcodes/spectra.c:1134
+#: Opcodes/spectra.c:1136
 msgid "specfilt: local buffers not initialised"
 msgstr ""
 
-#: Opcodes/spectra.c:1142
+#: Opcodes/spectra.c:1144
 msgid "missing htim ftable"
 msgstr ""
 
-#: Opcodes/spectra.c:1165
+#: Opcodes/spectra.c:1167
 msgid "htim ftable must be all-positive"
 msgstr ""
 
-#: Opcodes/spectra.c:1169
+#: Opcodes/spectra.c:1171
 #, c-format
 msgid "coef range: %6.3f - %6.3f\n"
 msgstr ""
 
-#: Opcodes/spectra.c:1201
+#: Opcodes/spectra.c:1203
 msgid "specfilt: not initialised"
 msgstr ""
 
-#: Opcodes/stackops.c:80
+#: Opcodes/stackops.c:81
 msgid "fsig = : source signal is not initialised"
 msgstr ""
 
-#: Opcodes/stackops.c:126
+#: Opcodes/stackops.c:125
 msgid "stack overflow"
 msgstr ""
 
-#: Opcodes/stackops.c:134
+#: Opcodes/stackops.c:131
 msgid "cannot pop from empty stack"
 msgstr ""
 
-#: Opcodes/stackops.c:142
+#: Opcodes/stackops.c:137
 msgid "argument number or type mismatch"
 msgstr ""
 
-#: Opcodes/stackops.c:150
+#: Opcodes/stackops.c:143
 msgid "string argument is too long"
 msgstr ""
 
-#: Opcodes/stackops.c:167
+#: Opcodes/stackops.c:160
 msgid "Error allocating argument stack"
 msgstr ""
 
-#: Opcodes/stackops.c:207 Top/argdecode.c:1212 util/envext.c:99
+#: Opcodes/stackops.c:200 Top/argdecode.c:1212 util/envext.c:99
 #: util/scale.c:248
 msgid "too many arguments"
 msgstr ""
 
-#: Opcodes/stackops.c:286
+#: Opcodes/stackops.c:279
 msgid "the stack is already allocated"
 msgstr ""
 
-#: Opcodes/stackops.c:637
+#: Opcodes/stackops.c:630
 msgid "number of arguments != nchnls"
 msgstr ""
 
-#: Opcodes/stdopcod.c:36
+#: Opcodes/stdopcod.c:37
 msgid "stdopcod.c: error: globals already allocated"
 msgstr ""
 
@@ -8402,35 +8290,43 @@ msgstr ""
 msgid "RAWWAVE_PATH: %s\n"
 msgstr ""
 
-#: Opcodes/syncgrain.c:175 Opcodes/syncgrain.c:338 Opcodes/syncgrain.c:683
+#: Opcodes/syncgrain.c:176 Opcodes/syncgrain.c:339 Opcodes/syncgrain.c:684
 msgid "grain size smaller than 1 sample\n"
 msgstr ""
 
-#: Opcodes/syncgrain.c:387
+#: Opcodes/syncgrain.c:388
 msgid "diskgrain: invalid number of channels"
 msgstr ""
 
-#: Opcodes/syncgrain.c:419
+#: Opcodes/syncgrain.c:420
 msgid "diskgrain: could not open file\n"
 msgstr ""
 
-#: Opcodes/syncgrain.c:423
+#: Opcodes/syncgrain.c:424
 msgid ""
 "diskgrain: soundfile channel numbers do not match the number of outputs \n"
 msgstr ""
 
-#: Opcodes/syncgrain.c:435
+#: Opcodes/syncgrain.c:436
 msgid "diskgrain: could not read file \n"
 msgstr ""
 
-#: Opcodes/tabsum.c:39
+#: Opcodes/tabsum.c:40
 msgid "tabsum: No table"
 msgstr ""
 
-#: Opcodes/tabsum.c:54
+#: Opcodes/tabsum.c:55
 msgid "tabsum: Not initialised"
 msgstr ""
 
+#: Opcodes/tabvars.c:201 Opcodes/tabvars.c:218
+msgid "t-var not initialised"
+msgstr ""
+
+#: Opcodes/tabvars.c:203 Opcodes/tabvars.c:220
+msgid "No table for copy2ftab"
+msgstr ""
+
 #: Opcodes/ugens7.c:46 Opcodes/ugensa.c:49
 msgid "illegal value for iolaps"
 msgstr ""
@@ -8576,17 +8472,17 @@ msgstr ""
 msgid "table in iftfn for ftmorf does not exist"
 msgstr ""
 
-#: Opcodes/ugnorman.c:120
+#: Opcodes/ugnorman.c:121
 #, c-format
 msgid "%s: Ats file %s not read (does it exist?)"
 msgstr ""
 
-#: Opcodes/ugnorman.c:131
+#: Opcodes/ugnorman.c:132
 #, c-format
 msgid "%s: either %s is not an ATS file or the byte endianness is wrong"
 msgstr ""
 
-#: Opcodes/ugnorman.c:139
+#: Opcodes/ugnorman.c:140
 #, c-format
 msgid ""
 "%s: %s is byte-swapped\n"
@@ -8594,125 +8490,125 @@ msgid ""
 "\twill not result in different audio, but they may slow down processing."
 msgstr ""
 
-#: Opcodes/ugnorman.c:175
+#: Opcodes/ugnorman.c:176
 msgid ""
 "ATSINFO: location is out of bounds: 0-8 are the only possible selections"
 msgstr ""
 
-#: Opcodes/ugnorman.c:265
+#: Opcodes/ugnorman.c:266
 #, c-format
 msgid "ATSREAD: partial %i out of range, max allowed is %i"
 msgstr ""
 
-#: Opcodes/ugnorman.c:291
+#: Opcodes/ugnorman.c:292
 msgid "Type not implemented"
 msgstr ""
 
-#: Opcodes/ugnorman.c:310
+#: Opcodes/ugnorman.c:311
 msgid "ATSREAD: only positive time pointer values allowed, setting to zero\n"
 msgstr ""
 
-#: Opcodes/ugnorman.c:319
+#: Opcodes/ugnorman.c:320
 msgid "ATSREAD: timepointer out of range, truncated to last frame\n"
 msgstr ""
 
-#: Opcodes/ugnorman.c:332
+#: Opcodes/ugnorman.c:333
 msgid "ATSREAD: not initialised"
 msgstr ""
 
-#: Opcodes/ugnorman.c:394
+#: Opcodes/ugnorman.c:395
 #, c-format
 msgid "ATSREADNZ: band %i out of range, 1-25 are the valid band values"
 msgstr ""
 
-#: Opcodes/ugnorman.c:412
+#: Opcodes/ugnorman.c:413
 msgid "ATSREADNZ: Type either not implemented or does not contain noise"
 msgstr ""
 
-#: Opcodes/ugnorman.c:431
+#: Opcodes/ugnorman.c:432
 msgid "ATSREADNZ: only positive time pointer values allowed, setting to zero\n"
 msgstr ""
 
-#: Opcodes/ugnorman.c:440
+#: Opcodes/ugnorman.c:441
 msgid "ATSREADNZ: timepointer out of range, truncated to last frame\n"
 msgstr ""
 
-#: Opcodes/ugnorman.c:449
+#: Opcodes/ugnorman.c:450
 msgid "ATSREADNZ: not initialised"
 msgstr ""
 
-#: Opcodes/ugnorman.c:467
+#: Opcodes/ugnorman.c:468
 msgid "ATSADD: Function table number for synthesis waveform not valid"
 msgstr ""
 
-#: Opcodes/ugnorman.c:475
+#: Opcodes/ugnorman.c:476
 msgid "ATSADD: Gate Function table number not valid"
 msgstr ""
 
-#: Opcodes/ugnorman.c:521
+#: Opcodes/ugnorman.c:522
 #, c-format
 msgid "ATSADD: Partial(s) out of range, max partial allowed is %i"
 msgstr ""
 
-#: Opcodes/ugnorman.c:555
+#: Opcodes/ugnorman.c:556
 msgid "ATSADD: Type not implemented"
 msgstr ""
 
-#: Opcodes/ugnorman.c:585
+#: Opcodes/ugnorman.c:586
 msgid ""
 "ATSADD: only positive time pointer values are allowed, setting to zero\n"
 msgstr ""
 
-#: Opcodes/ugnorman.c:594
+#: Opcodes/ugnorman.c:595
 msgid "ATSADD: time pointer out of range, truncating to last frame\n"
 msgstr ""
 
-#: Opcodes/ugnorman.c:638
+#: Opcodes/ugnorman.c:639
 msgid "ATSADD: not initialised"
 msgstr ""
 
-#: Opcodes/ugnorman.c:842
+#: Opcodes/ugnorman.c:845
 msgid "ATSADDNZ: This file type contains no noise"
 msgstr ""
 
-#: Opcodes/ugnorman.c:846
+#: Opcodes/ugnorman.c:849
 msgid "ATSADDNZ: This file type has not been implemented in this code yet."
 msgstr ""
 
-#: Opcodes/ugnorman.c:869
+#: Opcodes/ugnorman.c:872
 msgid "ATSADDNZ: Band(s) out of range, max band allowed is 25"
 msgstr ""
 
-#: Opcodes/ugnorman.c:886
+#: Opcodes/ugnorman.c:889
 msgid ""
 "ATSADDNZ: Type either has no noise or is not implemented (only type 3 and 4 "
 "work now)"
 msgstr ""
 
-#: Opcodes/ugnorman.c:1002
+#: Opcodes/ugnorman.c:1005
 msgid ""
 "ATSADDNZ: only positive time pointer values are allowed, setting to zero\n"
 msgstr ""
 
-#: Opcodes/ugnorman.c:1011
+#: Opcodes/ugnorman.c:1014
 msgid "ATSADDNZ: time pointer out of range, truncating to last frame\n"
 msgstr ""
 
-#: Opcodes/ugnorman.c:1165
+#: Opcodes/ugnorman.c:1168
 #, c-format
 msgid "ATSSINNOI: Partial(s) out of range, max partial allowed is %i"
 msgstr ""
 
-#: Opcodes/ugnorman.c:1202
+#: Opcodes/ugnorman.c:1205
 msgid "ATSSINNOI: Type not implemented"
 msgstr ""
 
-#: Opcodes/ugnorman.c:1315
+#: Opcodes/ugnorman.c:1316
 msgid ""
 "ATSSINNOI: only positive time pointer values are allowed, setting to zero\n"
 msgstr ""
 
-#: Opcodes/ugnorman.c:1324
+#: Opcodes/ugnorman.c:1325
 msgid "ATSSINNOI: time pointer out of range, truncating to last frame\n"
 msgstr ""
 
@@ -8785,44 +8681,44 @@ msgstr ""
 msgid "ATSCROSS: you must have an atsbufread before an atsinterpread"
 msgstr ""
 
-#: Opcodes/ugsc.c:394
+#: Opcodes/ugsc.c:390
 msgid "Phaser mode must be either 1 or 2"
 msgstr ""
 
-#: Opcodes/vbap.c:57
+#: Opcodes/vbap.c:59
 msgid "vbap: error allocating loudspeaker table"
 msgstr ""
 
-#: Opcodes/vbap.c:264
+#: Opcodes/vbap.c:266
 msgid ""
 "Number of loudspeakers is zero\n"
 "Exiting"
 msgstr ""
 
-#: Opcodes/vbap.c:573
+#: Opcodes/vbap.c:575
 msgid "Error in loudspeaker dimension."
 msgstr ""
 
-#: Opcodes/vbap.c:596
+#: Opcodes/vbap.c:598
 msgid "Too few loudspeakers"
 msgstr ""
 
-#: Opcodes/vbap.c:622
+#: Opcodes/vbap.c:624
 msgid "Not valid 3-D configuration"
 msgstr ""
 
-#: Opcodes/vbap.c:668 Opcodes/vbap.c:767
+#: Opcodes/vbap.c:670 Opcodes/vbap.c:769
 msgid ""
 "\n"
 "Configured loudspeakers\n"
 msgstr ""
 
-#: Opcodes/vbap.c:670
+#: Opcodes/vbap.c:672
 #, c-format
 msgid "Triplet %d Loudspeakers: "
 msgstr ""
 
-#: Opcodes/vbap.c:769
+#: Opcodes/vbap.c:771
 #, c-format
 msgid "Pair %d Loudspeakers: "
 msgstr ""
@@ -8904,41 +8800,33 @@ msgstr ""
 msgid "Have to have at least %d directions in vbapzmove"
 msgstr ""
 
-#: Opcodes/Vosim.c:49
+#: Opcodes/Vosim.c:51
 msgid "vosim: pulse table not found"
 msgstr ""
 
-#: Opcodes/Vosim.c:72
+#: Opcodes/Vosim.c:74
 msgid "vosim: zero kfund. 'Infinite' length event generated."
 msgstr ""
 
-#: Opcodes/Vosim.c:80
+#: Opcodes/Vosim.c:82
 #, c-format
 msgid "vosim: kfund (%f) > sr. Generating ksmps silence."
 msgstr ""
 
-#: Opcodes/Vosim.c:158
+#: Opcodes/Vosim.c:160
 msgid "vosim: not initialised"
 msgstr ""
 
-#: Opcodes/vpvoc.c:118
-msgid "tableseg: not initialised"
-msgstr ""
-
-#: Opcodes/vpvoc.c:146
-msgid "tablexseg: not initialised"
-msgstr ""
-
-#: Opcodes/vpvoc.c:172
+#: Opcodes/vpvoc.c:173
 #, c-format
 msgid "vpvoc: Could not find ifnmagctrl table %f"
 msgstr ""
 
-#: Opcodes/vpvoc.c:178
+#: Opcodes/vpvoc.c:179
 msgid "vpvoc: associated tableseg not found"
 msgstr ""
 
-#: Opcodes/vpvoc.c:194
+#: Opcodes/vpvoc.c:195
 #, c-format
 msgid "VPVOC cannot load %s"
 msgstr ""
@@ -9055,47 +8943,47 @@ msgstr ""
 msgid "-B N\tsamples per hardware sound I/O buffer"
 msgstr ""
 
-#: Top/argdecode.c:75 util/mixer.c:95 util/scale.c:46 util/srconv.c:739
+#: Top/argdecode.c:75 util/mixer.c:95 util/scale.c:46 util/srconv.c:738
 msgid "-A\tcreate an AIFF format output soundfile"
 msgstr ""
 
-#: Top/argdecode.c:76 util/mixer.c:96 util/scale.c:47 util/srconv.c:741
+#: Top/argdecode.c:76 util/mixer.c:96 util/scale.c:47 util/srconv.c:740
 msgid "-W\tcreate a WAV format output soundfile"
 msgstr ""
 
-#: Top/argdecode.c:77 util/srconv.c:740
+#: Top/argdecode.c:77 util/srconv.c:739
 msgid "-J\tcreate an IRCAM format output soundfile"
 msgstr ""
 
-#: Top/argdecode.c:78 util/mixer.c:97 util/scale.c:48 util/srconv.c:742
+#: Top/argdecode.c:78 util/mixer.c:97 util/scale.c:48 util/srconv.c:741
 msgid "-h\tno header on output soundfile"
 msgstr ""
 
-#: Top/argdecode.c:79 util/mixer.c:99 util/scale.c:49 util/srconv.c:743
+#: Top/argdecode.c:79 util/mixer.c:99 util/scale.c:49 util/srconv.c:742
 msgid "-c\t8-bit signed_char sound samples"
 msgstr ""
 
-#: Top/argdecode.c:81 util/mixer.c:101 util/scale.c:50 util/srconv.c:744
+#: Top/argdecode.c:81 util/mixer.c:101 util/scale.c:50 util/srconv.c:743
 msgid "-a\talaw sound samples"
 msgstr ""
 
-#: Top/argdecode.c:83 util/mixer.c:98 util/mixer.c:100 util/srconv.c:745
+#: Top/argdecode.c:83 util/mixer.c:98 util/mixer.c:100 util/srconv.c:744
 msgid "-8\t8-bit unsigned_char sound samples"
 msgstr ""
 
-#: Top/argdecode.c:84 util/mixer.c:102 util/scale.c:51 util/srconv.c:746
+#: Top/argdecode.c:84 util/mixer.c:102 util/scale.c:51 util/srconv.c:745
 msgid "-u\tulaw sound samples"
 msgstr ""
 
-#: Top/argdecode.c:85 util/mixer.c:103 util/scale.c:52 util/srconv.c:747
+#: Top/argdecode.c:85 util/mixer.c:103 util/scale.c:52 util/srconv.c:746
 msgid "-s\tshort_int sound samples"
 msgstr ""
 
-#: Top/argdecode.c:86 util/mixer.c:104 util/scale.c:53 util/srconv.c:748
+#: Top/argdecode.c:86 util/mixer.c:104 util/scale.c:53 util/srconv.c:747
 msgid "-l\tlong_int sound samples"
 msgstr ""
 
-#: Top/argdecode.c:87 util/mixer.c:105 util/scale.c:54 util/srconv.c:749
+#: Top/argdecode.c:87 util/mixer.c:105 util/scale.c:54 util/srconv.c:748
 msgid "-f\tfloat sound samples"
 msgstr ""
 
@@ -9103,7 +8991,7 @@ msgstr ""
 msgid "-3\t24bit sound samples"
 msgstr ""
 
-#: Top/argdecode.c:89 util/srconv.c:750
+#: Top/argdecode.c:89 util/srconv.c:749
 msgid "-r N\torchestra srate override"
 msgstr ""
 
@@ -9111,7 +8999,7 @@ msgstr ""
 msgid "-k N\torchestra krate override"
 msgstr ""
 
-#: Top/argdecode.c:91 util/srconv.c:751
+#: Top/argdecode.c:91 util/srconv.c:750
 msgid "-K\tDo not generate PEAK chunks"
 msgstr ""
 
@@ -9171,7 +9059,7 @@ msgstr ""
 msgid "-F fnam\tread MIDIfile event stream from file 'fnam'"
 msgstr ""
 
-#: Top/argdecode.c:107 util/mixer.c:106 util/scale.c:59 util/srconv.c:752
+#: Top/argdecode.c:107 util/mixer.c:106 util/scale.c:59 util/srconv.c:751
 msgid "-R\tcontinually rewrite header while writing soundfile (WAV/AIFF)"
 msgstr ""
 
@@ -9179,7 +9067,7 @@ msgstr ""
 msgid "-H#\tprint heartbeat style 1, 2 or 3 at each soundfile write"
 msgstr ""
 
-#: Top/argdecode.c:109 util/mixer.c:108 util/scale.c:61 util/srconv.c:754
+#: Top/argdecode.c:109 util/mixer.c:108 util/scale.c:61 util/srconv.c:753
 msgid "-N\tnotify (ring the bell) when score or miditrack is done"
 msgstr ""
 
@@ -9665,16 +9553,16 @@ msgid "-M: stdin not supported on this platform"
 msgstr ""
 
 #: Top/argdecode.c:668 Top/argdecode.c:959 util/envext.c:84 util/mixer.c:205
-#: util/scale.c:173 util/srconv.c:248 util/xtrct.c:116
+#: util/scale.c:173 util/srconv.c:247 util/xtrct.c:116
 msgid "no outfilename"
 msgstr ""
 
-#: Top/argdecode.c:671 Top/argdecode.c:963 util/scale.c:177 util/srconv.c:252
+#: Top/argdecode.c:671 Top/argdecode.c:963 util/scale.c:177 util/srconv.c:251
 #: util/xtrct.c:120
 msgid "-o cannot be stdin"
 msgstr ""
 
-#: Top/argdecode.c:675 Top/argdecode.c:967 util/scale.c:180 util/srconv.c:257
+#: Top/argdecode.c:675 Top/argdecode.c:967 util/scale.c:180 util/srconv.c:256
 #: util/xtrct.c:123
 msgid "stdout audio not supported"
 msgstr ""
@@ -9793,164 +9681,164 @@ msgstr ""
 msgid "cscoreFileGetCurrent: no fp current"
 msgstr ""
 
-#: Top/csmodule.c:192
+#: Top/csmodule.c:199
 #, c-format
 msgid "not loading '%s' (uses incompatible floating point type)"
 msgstr ""
 
-#: Top/csmodule.c:201
+#: Top/csmodule.c:209
 #, c-format
 msgid ""
 "not loading '%s' (incompatible with this version of Csound (%d.%d/%d.%d)"
 msgstr ""
 
-#: Top/csmodule.c:244
+#: Top/csmodule.c:252
 #, c-format
 msgid "could not open library '%s' (%s)"
 msgstr ""
 
-#: Top/csmodule.c:247
+#: Top/csmodule.c:255
 #, c-format
 msgid "could not open library '%s' (%d)"
 msgstr ""
 
-#: Top/csmodule.c:303
+#: Top/csmodule.c:311
 #, c-format
 msgid "'%s' is not a Csound plugin library"
 msgstr ""
 
-#: Top/csmodule.c:314
+#: Top/csmodule.c:322
 msgid "csoundLoadExternal(): memory allocation failure"
 msgstr ""
 
-#: Top/csmodule.c:328 Top/csmodule.c:336
+#: Top/csmodule.c:336 Top/csmodule.c:344
 #, c-format
 msgid "Error in pre-initialisation function of module '%s'"
 msgstr ""
 
-#: Top/csmodule.c:599 Top/csmodule.c:605 Top/csmodule.c:616 Top/csmodule.c:623
-#: Top/csmodule.c:629 Top/csmodule.c:637
+#: Top/csmodule.c:608 Top/csmodule.c:614 Top/csmodule.c:625 Top/csmodule.c:632
+#: Top/csmodule.c:638 Top/csmodule.c:646
 msgid "Error opening plugin directory\n"
 msgstr ""
 
-#: Top/csmodule.c:687
+#: Top/csmodule.c:696
 #, c-format
 msgid "Error opening plugin directory '%s': %s"
 msgstr ""
 
-#: Top/csmodule.c:722
+#: Top/csmodule.c:731
 #, c-format
 msgid "path name too long, skipping '%s'"
 msgstr ""
 
-#: Top/csmodule.c:728
+#: Top/csmodule.c:737
 #, c-format
 msgid "Library %s omitted\n"
 msgstr ""
 
-#: Top/csmodule.c:764
+#: Top/csmodule.c:773
 msgid "Loading command-line libraries:\n"
 msgstr ""
 
-#: Top/csmodule.c:787
+#: Top/csmodule.c:796
 #, c-format
 msgid " *** error loading '%s'"
 msgstr ""
 
-#: Top/csmodule.c:810
+#: Top/csmodule.c:819
 #, c-format
 msgid "Error starting module '%s'"
 msgstr ""
 
-#: Top/csmodule.c:907
+#: Top/csmodule.c:918
 #, c-format
 msgid "Error de-initialising module '%s'"
 msgstr ""
 
-#: Top/csound.c:1606 Top/csound.c:1626
+#: Top/csound.c:1636 Top/csound.c:1656
 msgid "Early return from csoundPerformKsmps().\n"
 msgstr ""
 
-#: Top/csound.c:1612
+#: Top/csound.c:1642
 msgid "Score finished in csoundPerformKsmps().\n"
 msgstr ""
 
-#: Top/csound.c:1645
+#: Top/csound.c:1675
 msgid "Early return from csoundPerformBuffer().\n"
 msgstr ""
 
-#: Top/csound.c:1670
+#: Top/csound.c:1700
 msgid "Early return from csoundPerform().\n"
 msgstr ""
 
-#: Top/csound.c:1677
+#: Top/csound.c:1707
 msgid "Score finished in csoundPerform().\n"
 msgstr ""
 
-#: Top/csound.c:1697
+#: Top/csound.c:1727
 msgid "csoundPerform(): stopped.\n"
 msgstr ""
 
-#: Top/csound.c:1968
+#: Top/csound.c:1998
 msgid "WARNING: "
 msgstr ""
 
-#: Top/csound.c:2089
+#: Top/csound.c:2119
 msgid "rtdummy: failed to allocate globals"
 msgstr ""
 
-#: Top/csound.c:2090
+#: Top/csound.c:2120
 msgid "rtaudio: dummy module enabled\n"
 msgstr ""
 
-#: Top/csound.c:2119 Top/csound.c:2155
+#: Top/csound.c:2149 Top/csound.c:2185
 msgid " *** error: rtaudio module set to empty string"
 msgstr ""
 
-#: Top/csound.c:2123 Top/csound.c:2159
+#: Top/csound.c:2153 Top/csound.c:2189
 #, c-format
 msgid " *** error: unknown rtaudio module: '%s'"
 msgstr ""
 
-#: Top/csound.c:2241
+#: Top/csound.c:2271
 msgid "WARNING: real time midi input disabled, using dummy functions\n"
 msgstr ""
 
-#: Top/csound.c:2246 Top/csound.c:2280
+#: Top/csound.c:2276 Top/csound.c:2310
 msgid "error: -+rtmidi set to empty string"
 msgstr ""
 
-#: Top/csound.c:2249 Top/csound.c:2283
+#: Top/csound.c:2279 Top/csound.c:2313
 #, c-format
 msgid "error: -+rtmidi='%s': unknown module"
 msgstr ""
 
-#: Top/csound.c:2275
+#: Top/csound.c:2305
 msgid "WARNING: real time midi output disabled, using dummy functions\n"
 msgstr ""
 
-#: Top/csound.c:2297
+#: Top/csound.c:2327
 msgid "Unknown MIDI error"
 msgstr ""
 
-#: Top/csound.c:2415
+#: Top/csound.c:2445
 msgid "xyin not supported. use invalue opcode instead."
 msgstr ""
 
-#: Top/csound.c:2522
+#: Top/csound.c:2552
 msgid "Failed to allocate new opcode entry."
 msgstr ""
 
-#: Top/csound.c:2545
+#: Top/csound.c:2575
 #, c-format
 msgid "Failed to allocate opcode entry for %s."
 msgstr ""
 
-#: Top/csound.c:2876
+#: Top/csound.c:2906
 msgid "Cannot open /proc/cpuinfo. Support for RDTSC is not available.\n"
 msgstr ""
 
-#: Top/csound.c:2927
+#: Top/csound.c:2957
 msgid "No valid CPU frequency entry was found in /proc/cpuinfo.\n"
 msgstr ""
 
@@ -9958,25 +9846,25 @@ msgstr ""
 msgid "Error allocating opcode list"
 msgstr ""
 
-#: Top/main.c:161
+#: Top/main.c:160
 #, c-format
 msgid "WARNING: cannot open csoundrc file %s\n"
 msgstr ""
 
-#: Top/main.c:164
+#: Top/main.c:163
 #, c-format
 msgid "Reading options from $CSOUNDRC: %s \n"
 msgstr ""
 
-#: Top/main.c:173
+#: Top/main.c:172
 msgid "Reading options from $HOME/.csoundrc\n"
 msgstr ""
 
-#: Top/main.c:200
+#: Top/main.c:199
 msgid "no orchestra name"
 msgstr ""
 
-#: Top/main.c:225
+#: Top/main.c:224
 msgid "Reading CSD failed ... stopping"
 msgstr ""
 
@@ -9988,7 +9876,7 @@ msgstr ""
 msgid "error: multiple uses of stdout"
 msgstr ""
 
-#: Top/main.c:260 util/dnoise.c:268
+#: Top/main.c:260 util/dnoise.c:264
 #, c-format
 msgid "%s not a recognised SFOUTYP env setting"
 msgstr ""
@@ -10001,58 +9889,62 @@ msgstr ""
 msgid "realtime performance using dummy numeric scorefile\n"
 msgstr ""
 
-#: Top/main.c:319
+#: Top/main.c:314
 #, c-format
 msgid "orchname:  %s\n"
 msgstr ""
 
-#: Top/main.c:321
-#, c-format
-msgid "scorename: %s\n"
+#: Top/main.c:334
+msgid "Stopping on parser failure\n"
 msgstr ""
 
-#: Top/main.c:353
+#: Top/main.c:352
 msgid "end of orchestra compile"
 msgstr ""
 
-#: Top/main.c:360
+#: Top/main.c:359
 #, c-format
 msgid "using previous %s\n"
 msgstr ""
 
-#: Top/main.c:373
+#: Top/main.c:369
 #, c-format
 msgid "cannot open scorefile %s"
 msgstr ""
 
-#: Top/main.c:378 Top/main.c:399
-#, c-format
-msgid "cannot open %s for writing"
+#: Top/main.c:371
+msgid "sorting score ...\n"
 msgstr ""
 
 #: Top/main.c:381
-msgid "sorting score ...\n"
+#, c-format
+msgid "cannot extract %s, name conflict"
+msgstr ""
+
+#: Top/main.c:384
+#, c-format
+msgid "cannot open extract file %s"
 msgstr ""
 
 #: Top/main.c:388
 #, c-format
-msgid "cannot extract %s, name conflict"
+msgid "cannot reopen %s"
 msgstr ""
 
-#: Top/main.c:391
+#: Top/main.c:392
 #, c-format
-msgid "cannot open extract file %s"
+msgid "cannot open %s for writing"
 msgstr ""
 
-#: Top/main.c:401
+#: Top/main.c:394
 msgid "  ... extracting ...\n"
 msgstr ""
 
-#: Top/main.c:414
+#: Top/main.c:405
 msgid "end of score sort"
 msgstr ""
 
-#: Top/main.c:416
+#: Top/main.c:407
 msgid "Syntax check completed.\n"
 msgstr ""
 
@@ -10117,163 +10009,158 @@ msgstr ""
 msgid " *** error setting option '%s' to '%s': %s\n"
 msgstr ""
 
-#: Top/one_file.c:105 Top/one_file.c:113
+#: Top/one_file.c:110 Top/one_file.c:118
 msgid " *** cannot create temporary file"
 msgstr ""
 
-#: Top/one_file.c:198
+#: Top/one_file.c:203
 #, c-format
 msgid "Removing temporary file %s ...\n"
 msgstr ""
 
-#: Top/one_file.c:202
+#: Top/one_file.c:207
 #, c-format
 msgid "WARNING: could not remove %s\n"
 msgstr ""
 
-#: Top/one_file.c:268 Top/one_file.c:296
+#: Top/one_file.c:274 Top/one_file.c:302
 #, c-format
 msgid "More than %d arguments in <CsOptions>"
 msgstr ""
 
-#: Top/one_file.c:313
+#: Top/one_file.c:319
 #, c-format
 msgid "Invalid arguments in <CsOptions>: %s"
 msgstr ""
 
-#: Top/one_file.c:316
+#: Top/one_file.c:322
 #, c-format
 msgid "Invalid arguments in .csoundrc or -@ file: %s"
 msgstr ""
 
-#: Top/one_file.c:322 Top/one_file.c:790
+#: Top/one_file.c:328 Top/one_file.c:744
 msgid "Missing end tag </CsOptions>"
 msgstr ""
 
-#: Top/one_file.c:340 Top/one_file.c:372 Top/one_file.c:420
-#, c-format
-msgid "Creating %s (%p)\n"
-msgstr ""
-
-#: Top/one_file.c:343
-#, c-format
-msgid "Failed to create %s"
-msgstr ""
-
-#: Top/one_file.c:356
+#: Top/one_file.c:354
 msgid "Missing end tag </CsInstruments>"
 msgstr ""
 
-#: Top/one_file.c:389 Top/one_file.c:442
+#: Top/one_file.c:376 Top/one_file.c:430
 msgid "Missing end tag </CsScore>"
 msgstr ""
 
-#: Top/one_file.c:403 Top/one_file.c:408
+#: Top/one_file.c:391 Top/one_file.c:396
 msgid "Missing program in tag <CsScore>"
 msgstr ""
 
-#: Top/one_file.c:433
+#: Top/one_file.c:408
+#, c-format
+msgid "Creating %s (%p)\n"
+msgstr ""
+
+#: Top/one_file.c:421
 msgid "External generation failed"
 msgstr ""
 
-#: Top/one_file.c:520
+#: Top/one_file.c:468
 #, c-format
 msgid "Non base64 character %c(%2x)"
 msgstr ""
 
-#: Top/one_file.c:539
+#: Top/one_file.c:487
 msgid "Truncated byte at end of base64 stream"
 msgstr ""
 
-#: Top/one_file.c:554
+#: Top/one_file.c:503
 #, c-format
 msgid "Cannot open temporary file (%s) for MIDI subfile"
 msgstr ""
 
-#: Top/one_file.c:571
+#: Top/one_file.c:520
 msgid "Missing end tag </CsMidifileB>"
 msgstr ""
 
-#: Top/one_file.c:586 Top/one_file.c:633
+#: Top/one_file.c:536 Top/one_file.c:584
 #, c-format
 msgid "File %s already exists"
 msgstr ""
 
-#: Top/one_file.c:591
+#: Top/one_file.c:541
 #, c-format
 msgid "Cannot open sample file (%s) subfile"
 msgstr ""
 
-#: Top/one_file.c:605
+#: Top/one_file.c:555
 msgid "Missing end tag </CsSampleB>"
 msgstr ""
 
-#: Top/one_file.c:638
+#: Top/one_file.c:589
 #, c-format
 msgid "Cannot open file (%s) subfile"
 msgstr ""
 
-#: Top/one_file.c:653
+#: Top/one_file.c:604
 msgid "Missing end tag </CsFileB>"
 msgstr ""
 
-#: Top/one_file.c:672
+#: Top/one_file.c:624
 #, c-format
 msgid "This CSD file requires a version of Csound before %d.%02d"
 msgstr ""
 
-#: Top/one_file.c:680 Top/one_file.c:687
+#: Top/one_file.c:632 Top/one_file.c:639
 #, c-format
 msgid "This CSD file requires a version of Csound after %d.%02d"
 msgstr ""
 
-#: Top/one_file.c:693
+#: Top/one_file.c:645
 msgid "Missing end tag </CsVersion>"
 msgstr ""
 
-#: Top/one_file.c:702
+#: Top/one_file.c:655
 msgid "**** Licence Information ****\n"
 msgstr ""
 
-#: Top/one_file.c:708
+#: Top/one_file.c:661
 msgid "**** End of Licence Information ****\n"
 msgstr ""
 
-#: Top/one_file.c:719
+#: Top/one_file.c:672
 msgid "Missing end tag </CsLicence>"
 msgstr ""
 
-#: Top/one_file.c:749
+#: Top/one_file.c:703
 #, c-format
 msgid "Failed to open csd file: %s"
 msgstr ""
 
-#: Top/one_file.c:764
+#: Top/one_file.c:718
 msgid "STARTING FILE\n"
 msgstr ""
 
-#: Top/one_file.c:780
+#: Top/one_file.c:734
 msgid "Creating options\n"
 msgstr ""
 
-#: Top/one_file.c:786
+#: Top/one_file.c:740
 msgid "Skipping <CsOptions>\n"
 msgstr ""
 
-#: Top/one_file.c:800
+#: Top/one_file.c:754
 msgid "Creating orchestra\n"
 msgstr ""
 
-#: Top/one_file.c:805
+#: Top/one_file.c:759
 msgid "Creating score\n"
 msgstr ""
 
-#: Top/one_file.c:839
+#: Top/one_file.c:793
 #, c-format
 msgid "unknown CSD tag: %s\n"
 msgstr ""
 
-#: Top/one_file.c:844
+#: Top/one_file.c:798
 msgid "Could not find <CsoundSynthesizer> tag in CSD file.\n"
 msgstr ""
 
@@ -10447,15 +10334,15 @@ msgstr ""
 #, c-format
 msgid ""
 "\n"
-" Could not open %s for writing, bye...\n"
+"Could not open %s for writing, bye...\n"
 msgstr ""
 
 #: util/atsa.c:544
 msgid "saving ATS data..."
 msgstr ""
 
-#: util/atsa.c:546 util/atsa.c:2344 util/atsa.c:2358 util/atsa.c:2368
-#: util/atsa.c:2548 util/atsa.c:2611 util/atsa.c:2699
+#: util/atsa.c:546 util/atsa.c:2354 util/atsa.c:2368 util/atsa.c:2387
+#: util/atsa.c:2567 util/atsa.c:2630 util/atsa.c:2718
 msgid "done!\n"
 msgstr ""
 
@@ -10563,181 +10450,181 @@ msgid ""
 "\n"
 msgstr ""
 
-#: util/atsa.c:1482
+#: util/atsa.c:1492
 #, c-format
 msgid "atsa: error opening residual file '%s'"
 msgstr ""
 
-#: util/atsa.c:1486
+#: util/atsa.c:1496
 #, c-format
 msgid "atsa: residual file has %d channels, must be stereo !"
 msgstr ""
 
-#: util/atsa.c:1813
+#: util/atsa.c:1823
 #, c-format
 msgid ""
 "\n"
 "ERROR: cannot open file %s for writing\n"
 msgstr ""
 
-#: util/atsa.c:1908
+#: util/atsa.c:1918
 msgid "Error: sound not optimised !"
 msgstr ""
 
-#: util/atsa.c:2003
+#: util/atsa.c:2013
 #, c-format
 msgid "atsa: cannot open input file '%s'"
 msgstr ""
 
-#: util/atsa.c:2010
+#: util/atsa.c:2020
 #, c-format
 msgid "atsa: file has %d channels, must be mono !"
 msgstr ""
 
-#: util/atsa.c:2015
+#: util/atsa.c:2025
 msgid "tracking...\n"
 msgstr ""
 
-#: util/atsa.c:2024
+#: util/atsa.c:2034
 #, c-format
 msgid "start %f out of bounds, corrected to 0.0"
 msgstr ""
 
-#: util/atsa.c:2034
+#: util/atsa.c:2044
 #, c-format
 msgid "duration %f out of bounds, limited to file duration"
 msgstr ""
 
-#: util/atsa.c:2040
+#: util/atsa.c:2050
 #, c-format
 msgid "start: %f duration: %f file dur: %f\n"
 msgstr ""
 
-#: util/atsa.c:2047
+#: util/atsa.c:2057
 #, c-format
 msgid "lowest freq. %f out of bounds, forced to default: %f"
 msgstr ""
 
-#: util/atsa.c:2057
+#: util/atsa.c:2067
 #, c-format
 msgid "highest freq. %f out of bounds, forced to default: %f"
 msgstr ""
 
-#: util/atsa.c:2064
+#: util/atsa.c:2074
 #, c-format
 msgid ""
 "freq. dev. %f out of bounds, should be > 0.0 and <= 1.0, forced to default: "
 "%f"
 msgstr ""
 
-#: util/atsa.c:2072
+#: util/atsa.c:2082
 #, c-format
 msgid ""
 "windows cycles %d out of bounds, should be between 1 and 8, forced to "
 "default: %d"
 msgstr ""
 
-#: util/atsa.c:2080
+#: util/atsa.c:2090
 #, c-format
 msgid ""
 "window type %d out of bounds, should be between 0 and 3, forced to default: "
 "%d"
 msgstr ""
 
-#: util/atsa.c:2088
+#: util/atsa.c:2098
 #, c-format
 msgid ""
 "hop size %f out of bounds, should be > 0.0 and <= 1.0, forced to default: %f"
 msgstr ""
 
-#: util/atsa.c:2096
+#: util/atsa.c:2106
 #, c-format
 msgid ""
 "lowest magnitude %f out of bounds, should be >= 0.0 and <= 1.0, forced to "
 "default: %f"
 msgstr ""
 
-#: util/atsa.c:2120
+#: util/atsa.c:2130
 #, c-format
 msgid "atsa: %d frames are not enough for analysis, need at least %d"
 msgstr ""
 
-#: util/atsa.c:2129
+#: util/atsa.c:2139
 #, c-format
 msgid "track length %d out of bounds, forced to: %d"
 msgstr ""
 
-#: util/atsa.c:2138
+#: util/atsa.c:2148
 #, c-format
 msgid "min. segment length %d out of bounds, forced to: %d"
 msgstr ""
 
-#: util/atsa.c:2147
+#: util/atsa.c:2157
 #, c-format
 msgid "min. gap length %d out of bounds, forced to: %d"
 msgstr ""
 
-#: util/atsa.c:2153
+#: util/atsa.c:2163
 #, c-format
 msgid ""
 "SMR threshold %f out of bounds, should be >= 0.0 and < %f dB SPL, forced to "
 "default: %f"
 msgstr ""
 
-#: util/atsa.c:2164
+#: util/atsa.c:2174
 #, c-format
 msgid ""
 "min. seg. SMR %f out of bounds, should be >= %f and < %f dB SPL, forced to "
 "default: %f"
 msgstr ""
 
-#: util/atsa.c:2172
+#: util/atsa.c:2182
 #, c-format
 msgid ""
 "last peak contribution %f out of bounds, should be >= 0.0 and <= 1.0, forced "
 "to default: %f"
 msgstr ""
 
-#: util/atsa.c:2180
+#: util/atsa.c:2190
 #, c-format
 msgid ""
 "SMR contribution %f out of bounds, should be >= 0.0 and <= 1.0, forced to "
 "default: %f"
 msgstr ""
 
-#: util/atsa.c:2325
+#: util/atsa.c:2335
 msgid "Initializing ATS data..."
 msgstr ""
 
-#: util/atsa.c:2355
+#: util/atsa.c:2365
 msgid "Computing residual..."
 msgstr ""
 
-#: util/atsa.c:2366
+#: util/atsa.c:2381 util/atsa.c:2384
 msgid "Analysing residual..."
 msgstr ""
 
-#: util/atsa.c:2370
+#: util/atsa.c:2389
 msgid "tracking completed.\n"
 msgstr ""
 
-#: util/atsa.c:2478
+#: util/atsa.c:2497
 msgid "Filling sound gaps..."
 msgstr ""
 
-#: util/atsa.c:2566
+#: util/atsa.c:2585
 msgid "Trimming short partials..."
 msgstr ""
 
-#: util/atsa.c:2662
+#: util/atsa.c:2681
 msgid "Computing averages..."
 msgstr ""
 
-#: util/atsa.c:2713
+#: util/atsa.c:2732
 msgid "No partials to track -- stopping\n"
 msgstr ""
 
-#: util/atsa.c:2813
+#: util/atsa.c:2832
 msgid "Soundfile analysis for ATS opcodes"
 msgstr ""
 
@@ -10769,8 +10656,8 @@ msgstr ""
 msgid "illegal number of filenames"
 msgstr ""
 
-#: util/cvanal.c:113 util/dnoise.c:456 util/lpanal.c:518 util/pvanal.c:258
-#: util/srconv.c:351
+#: util/cvanal.c:113 util/dnoise.c:445 util/lpanal.c:518 util/pvanal.c:258
+#: util/srconv.c:350
 #, c-format
 msgid "error while opening %s"
 msgstr ""
@@ -10810,256 +10697,256 @@ msgstr ""
 msgid "Soundfile analysis for convolve"
 msgstr ""
 
-#: util/dnoise.c:285
+#: util/dnoise.c:281
 msgid "-o cannot be stdin\n"
 msgstr ""
 
-#: util/dnoise.c:297
+#: util/dnoise.c:293
 msgid "-A overriding local default WAV out"
 msgstr ""
 
-#: util/dnoise.c:302
+#: util/dnoise.c:298
 msgid "-J overriding local default AIFF/WAV out"
 msgstr ""
 
-#: util/dnoise.c:309
+#: util/dnoise.c:305
 msgid "-W overriding local default AIFF out"
 msgstr ""
 
-#: util/dnoise.c:356
+#: util/dnoise.c:345
 msgid "no t argument"
 msgstr ""
 
-#: util/dnoise.c:379
+#: util/dnoise.c:368
 msgid "no n argument"
 msgstr ""
 
-#: util/dnoise.c:384
+#: util/dnoise.c:373
 msgid "no b argument"
 msgstr ""
 
-#: util/dnoise.c:392
+#: util/dnoise.c:381
 msgid "no B argument"
 msgstr ""
 
-#: util/dnoise.c:404
+#: util/dnoise.c:393
 msgid "no E argument"
 msgstr ""
 
-#: util/dnoise.c:408
+#: util/dnoise.c:397
 msgid "no N argument"
 msgstr ""
 
-#: util/dnoise.c:412
+#: util/dnoise.c:401
 msgid "no M argument"
 msgstr ""
 
-#: util/dnoise.c:416
+#: util/dnoise.c:405
 msgid "no L argument"
 msgstr ""
 
-#: util/dnoise.c:420
+#: util/dnoise.c:409
 msgid "no w argument"
 msgstr ""
 
-#: util/dnoise.c:424
+#: util/dnoise.c:413
 msgid "no D argument"
 msgstr ""
 
-#: util/dnoise.c:431 util/srconv.c:328
+#: util/dnoise.c:420 util/srconv.c:327
 #, c-format
 msgid "Looking at %c\n"
 msgstr ""
 
-#: util/dnoise.c:438 util/srconv.c:336
+#: util/dnoise.c:427 util/srconv.c:335
 #, c-format
 msgid "Infile set to %s\n"
 msgstr ""
 
-#: util/dnoise.c:441 util/srconv.c:339
+#: util/dnoise.c:430 util/srconv.c:338
 #, c-format
 msgid "End with %s\n"
 msgstr ""
 
-#: util/dnoise.c:447
+#: util/dnoise.c:436
 msgid "dnoise: no input file\n"
 msgstr ""
 
-#: util/dnoise.c:451
+#: util/dnoise.c:440
 msgid "Must have an example noise file (-i name)\n"
 msgstr ""
 
-#: util/dnoise.c:479
+#: util/dnoise.c:468
 #, c-format
 msgid "cannot open %s.\n"
 msgstr ""
 
-#: util/dnoise.c:491 util/srconv.c:461 util/srconv.c:473
+#: util/dnoise.c:480 util/srconv.c:460 util/srconv.c:472
 #, c-format
 msgid "cannot open %s."
 msgstr ""
 
-#: util/dnoise.c:510
+#: util/dnoise.c:499
 msgid "dnoise: input MUST be mono or stereo\n"
 msgstr ""
 
-#: util/dnoise.c:518
+#: util/dnoise.c:507
 msgid "dnoise: cannot open noise reference file\n"
 msgstr ""
 
-#: util/dnoise.c:523
+#: util/dnoise.c:512
 msgid "Incompatible sample rates\n"
 msgstr ""
 
-#: util/dnoise.c:542
+#: util/dnoise.c:531
 #, c-format
 msgid "dnoise: warning - N not a valid power of two; revised N = %d\n"
 msgstr ""
 
-#: util/dnoise.c:552
+#: util/dnoise.c:541
 msgid "dnoise: warning - do not specify both M and W\n"
 msgstr ""
 
-#: util/dnoise.c:562
+#: util/dnoise.c:551
 msgid "dnoise: warning - invalid W ignored\n"
 msgstr ""
 
-#: util/dnoise.c:576
+#: util/dnoise.c:565
 msgid "dnoise: warning - M is too small\n"
 msgstr ""
 
-#: util/dnoise.c:586
+#: util/dnoise.c:575
 msgid "dnoise: M too large\n"
 msgstr ""
 
-#: util/dnoise.c:592
+#: util/dnoise.c:581
 msgid "dnoise: L too large\n"
 msgstr ""
 
-#: util/dnoise.c:602
+#: util/dnoise.c:591
 #, c-format
 msgid "writing %u-byte blks of %s to %s"
 msgstr ""
 
-#: util/dnoise.c:627 util/dnoise.c:666 util/dnoise.c:721 util/dnoise.c:732
-#: util/dnoise.c:736 util/dnoise.c:743 util/dnoise.c:753 util/dnoise.c:758
-#: util/dnoise.c:762 util/dnoise.c:766 util/dnoise.c:770
+#: util/dnoise.c:616 util/dnoise.c:655 util/dnoise.c:710 util/dnoise.c:721
+#: util/dnoise.c:725 util/dnoise.c:732 util/dnoise.c:742 util/dnoise.c:747
+#: util/dnoise.c:751 util/dnoise.c:755 util/dnoise.c:759
 msgid "dnoise: insufficient memory\n"
 msgstr ""
 
-#: util/dnoise.c:779 util/dnoise.c:788
+#: util/dnoise.c:768 util/dnoise.c:777
 msgid "dnoise: begin time is greater than EOF of noise file!"
 msgstr ""
 
-#: util/dnoise.c:820
+#: util/dnoise.c:809
 msgid "dnoise: not enough samples of noise reference\n"
 msgstr ""
 
-#: util/dnoise.c:1118
+#: util/dnoise.c:1103
 #, c-format
 msgid "%5.1f seconds of input complete\n"
 msgstr ""
 
-#: util/dnoise.c:1137
+#: util/dnoise.c:1122
 msgid "processing complete\n"
 msgstr ""
 
-#: util/dnoise.c:1147
+#: util/dnoise.c:1132
 msgid "usage: dnoise [flags] input_file"
 msgstr ""
 
-#: util/dnoise.c:1149
+#: util/dnoise.c:1134
 msgid "flags:"
 msgstr ""
 
-#: util/dnoise.c:1150
+#: util/dnoise.c:1135
 msgid "i = noise reference soundfile"
 msgstr ""
 
-#: util/dnoise.c:1151
+#: util/dnoise.c:1136
 msgid "o = output file"
 msgstr ""
 
-#: util/dnoise.c:1152
+#: util/dnoise.c:1137
 msgid "N = # of bandpass filters (1024)"
 msgstr ""
 
-#: util/dnoise.c:1153
+#: util/dnoise.c:1138
 msgid "w = filter overlap factor: {0,1,(2),3} DON'T USE -w AND -M"
 msgstr ""
 
-#: util/dnoise.c:1154
+#: util/dnoise.c:1139
 msgid "M = analysis window length (N-1 unless -w is specified)"
 msgstr ""
 
-#: util/dnoise.c:1155
+#: util/dnoise.c:1140
 msgid "L = synthesis window length (M)"
 msgstr ""
 
-#: util/dnoise.c:1156
+#: util/dnoise.c:1141
 msgid "D = decimation factor (M/8)"
 msgstr ""
 
-#: util/dnoise.c:1157
+#: util/dnoise.c:1142
 msgid "b = begin time in noise reference soundfile (0)"
 msgstr ""
 
-#: util/dnoise.c:1158
+#: util/dnoise.c:1143
 msgid "B = starting sample in noise reference soundfile (0)"
 msgstr ""
 
-#: util/dnoise.c:1159
+#: util/dnoise.c:1144
 msgid "e = end time in noise reference soundfile (end)"
 msgstr ""
 
-#: util/dnoise.c:1160
+#: util/dnoise.c:1145
 msgid "E = final sample in noise reference soundfile (end)"
 msgstr ""
 
-#: util/dnoise.c:1161
+#: util/dnoise.c:1146
 msgid "t = threshold above noise reference in dB (30)"
 msgstr ""
 
-#: util/dnoise.c:1162
+#: util/dnoise.c:1147
 msgid "S = sharpness of noise-gate turnoff (1) (1 to 5)"
 msgstr ""
 
-#: util/dnoise.c:1163
+#: util/dnoise.c:1148
 msgid "n = number of FFT frames to average over (5)"
 msgstr ""
 
-#: util/dnoise.c:1164
+#: util/dnoise.c:1149
 msgid "m = minimum gain of noise-gate when off in dB (-40)"
 msgstr ""
 
-#: util/dnoise.c:1165
+#: util/dnoise.c:1150
 msgid "V : verbose - print status info"
 msgstr ""
 
-#: util/dnoise.c:1166
+#: util/dnoise.c:1151
 msgid "A : AIFF format output"
 msgstr ""
 
-#: util/dnoise.c:1167
+#: util/dnoise.c:1152
 msgid "W : WAV format output"
 msgstr ""
 
-#: util/dnoise.c:1168
+#: util/dnoise.c:1153
 msgid "J : IRCAM format output"
 msgstr ""
 
-#: util/dnoise.c:1187
+#: util/dnoise.c:1172
 #, c-format
 msgid "soundfile write returned sample count of %d, not %d\n"
 msgstr ""
 
-#: util/dnoise.c:1189
+#: util/dnoise.c:1174
 msgid ""
 "(disk may be full...\n"
 " closing the file ...)\n"
 msgstr ""
 
-#: util/dnoise.c:1257
+#: util/dnoise.c:1242
 msgid "Removes noise from a sound file"
 msgstr ""
 
@@ -11067,7 +10954,7 @@ msgstr ""
 msgid "Usage:\tenvext [-flags] soundfile\n"
 msgstr ""
 
-#: util/envext.c:54 util/srconv.c:738
+#: util/envext.c:54 util/srconv.c:737
 msgid "-o fnam\tsound output filename\n"
 msgstr ""
 
@@ -11101,7 +10988,7 @@ msgstr ""
 msgid "enveloping %ld sample frames (%3.1f secs)\n"
 msgstr ""
 
-#: util/envext.c:179
+#: util/envext.c:177
 msgid "Create a text file of envelope"
 msgstr ""
 
@@ -11515,7 +11402,7 @@ msgstr ""
 msgid "Legal flags are:"
 msgstr ""
 
-#: util/mixer.c:107 util/scale.c:60 util/srconv.c:753
+#: util/mixer.c:107 util/scale.c:60 util/srconv.c:752
 msgid "-H#\tprint a heartbeat style 1, 2 or 3 at each soundfile write"
 msgstr ""
 
@@ -11555,7 +11442,7 @@ msgstr ""
 msgid "mixer: error: "
 msgstr ""
 
-#: util/mixer.c:188 util/scale.c:161 util/srconv.c:232
+#: util/mixer.c:188 util/scale.c:161 util/srconv.c:231
 #, c-format
 msgid "%s not a recognized SFOUTYP env setting"
 msgstr ""
@@ -11784,17 +11671,17 @@ msgstr ""
 msgid "Soundfile analysis for pvoc"
 msgstr ""
 
-#: util/pvanal.c:469
+#: util/pvanal.c:467
 #, c-format
 msgid "pvxanal: unable to create analysis file: %s"
 msgstr ""
 
-#: util/pvanal.c:500 util/pvanal.c:532
+#: util/pvanal.c:498 util/pvanal.c:530
 #, c-format
 msgid "pvxanal: error writing analysis frames: %s\n"
 msgstr ""
 
-#: util/pvanal.c:542
+#: util/pvanal.c:540
 #, c-format
 msgid ""
 "\n"
@@ -11884,7 +11771,7 @@ msgstr ""
 msgid "-P fpnum\tscale file to given percentage of full"
 msgstr ""
 
-#: util/scale.c:62 util/srconv.c:755
+#: util/scale.c:62 util/srconv.c:754
 msgid "-- fnam\tlog output to file"
 msgstr ""
 
@@ -12035,75 +11922,75 @@ msgstr ""
 msgid "Sound format -%c has been overruled by -%c"
 msgstr ""
 
-#: util/srconv.c:299
+#: util/srconv.c:298
 msgid "No Q argument"
 msgstr ""
 
-#: util/srconv.c:304
+#: util/srconv.c:303
 msgid "No P argument"
 msgstr ""
 
-#: util/srconv.c:313
+#: util/srconv.c:312
 msgid "No r argument"
 msgstr ""
 
-#: util/srconv.c:322
+#: util/srconv.c:321
 msgid "No break file"
 msgstr ""
 
-#: util/srconv.c:345
+#: util/srconv.c:344
 msgid "No input given\n"
 msgstr ""
 
-#: util/srconv.c:362
+#: util/srconv.c:361
 msgid "srconv: cannot specify both -r and -P"
 msgstr ""
 
-#: util/srconv.c:373
+#: util/srconv.c:372
 msgid "srconv: cannot open time-vary function file"
 msgstr ""
 
-#: util/srconv.c:389
+#: util/srconv.c:388
 msgid "srconv: too few x-y pairs in time-vary function file"
 msgstr ""
 
-#: util/srconv.c:403
+#: util/srconv.c:402
 msgid "srconv: first x value in time-vary function must be 0"
 msgstr ""
 
-#: util/srconv.c:408
+#: util/srconv.c:407
 msgid "srconv: invalid initial y value in time-vary function"
 msgstr ""
 
-#: util/srconv.c:413 util/srconv.c:705
+#: util/srconv.c:412 util/srconv.c:704
 msgid "srconv: invalid x values in time-vary function"
 msgstr ""
 
-#: util/srconv.c:732
+#: util/srconv.c:731
 msgid ""
 "usage: srconv [flags] infile\n"
 "\n"
 "flags:"
 msgstr ""
 
-#: util/srconv.c:733
+#: util/srconv.c:732
 msgid ""
 "-P num\tpitch transposition ratio (srate/r) [do not specify both P and r]"
 msgstr ""
 
-#: util/srconv.c:735
+#: util/srconv.c:734
 msgid "-Q num\tquality factor (1 to 8: default = 2)"
 msgstr ""
 
-#: util/srconv.c:736
+#: util/srconv.c:735
 msgid "-i filnam\tbreak file"
 msgstr ""
 
-#: util/srconv.c:737
+#: util/srconv.c:736
 msgid "-r num\toutput sample rate (must be specified)"
 msgstr ""
 
-#: util/srconv.c:821
+#: util/srconv.c:820
 msgid "Sample rate conversion"
 msgstr ""
 
diff --git a/po/es_CO.po b/po/es_CO.po
index e51d5db..24c0b86 100644
--- a/po/es_CO.po
+++ b/po/es_CO.po
@@ -33,22 +33,22 @@ msgstr "auxlist para el instrumento %s (%p):\n"
 msgid "auxlist for instr %d (%p):\n"
 msgstr "auxlist para el instrumento %d (%p):\n"
 
-#: Engine/auxfd.c:153
+#: Engine/auxfd.c:154
 #, c-format
 msgid "\tauxch at %p: size %ld, auxp %p, endp %p\n"
 msgstr ""
 
-#: Engine/auxfd.c:165
+#: Engine/auxfd.c:166
 #, c-format
 msgid "fdlist for instr %s [%d] (%p):"
 msgstr "fdlist para el instrumento %s (%p):"
 
-#: Engine/auxfd.c:168
+#: Engine/auxfd.c:169
 #, c-format
 msgid "fdlist for instr %d (%p):"
 msgstr "fdlist para el instrumento %d (%p):"
 
-#: Engine/auxfd.c:171
+#: Engine/auxfd.c:172
 #, c-format
 msgid "  fd %p in %p"
 msgstr ""
@@ -101,369 +101,331 @@ msgstr ""
 msgid "(unknown error)"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:214 Engine/rdorch.c:1832
+#: Engine/csound_orc_compile.c:138
+#, c-format
+msgid ""
+"input arg %d '%s' of type %s not allowed when expecting %c (for opcode %s), "
+"line %d\n"
+msgstr ""
+
+#: Engine/csound_orc_compile.c:265 Engine/rdorch.c:1862
 msgid "missing or extra arg"
 msgstr "argumento sobrante o faltante"
 
-#: Engine/csound_orc_compile.c:218
+#: Engine/csound_orc_compile.c:269
 #, fuzzy
 msgid "too many input args\n"
-msgstr "demasiados argumentos de entrada"
+msgstr "demasiados argumentos de entrada\n"
 
-#: Engine/csound_orc_compile.c:475
+#: Engine/csound_orc_compile.c:304
+#, c-format
+msgid "input arg '%s' used before defined (in opcode %s), line %d\n"
+msgstr ""
+
+#: Engine/csound_orc_compile.c:380
+#, fuzzy, c-format
+msgid ""
+"output name previously used, type '%c' must be uniquely defined, line %d"
+msgstr ""
+"nombre de salida usado previamente, el tipo '%c' debe estar definido una "
+"sola vez"
+
+#: Engine/csound_orc_compile.c:386
+#, fuzzy, c-format
+msgid "output arg '%s' illegal type (for opcode %s), line %d\n"
+msgstr ""
+
+#: Engine/csound_orc_compile.c:541
 #, c-format
 msgid "create_opcode: No rule to handle statement of type %d\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:671
+#: Engine/csound_orc_compile.c:738
 #, c-format
 msgid "create_instrument: instr num %ld\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:681
+#: Engine/csound_orc_compile.c:748
 #, c-format
 msgid "create_instrument: instr name %s\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:688 Engine/otran.c:351
+#: Engine/csound_orc_compile.c:755 Engine/otran.c:364
 msgid "invalid name for instrument"
 msgstr "nombre inválido para el instrumento"
 
-#: Engine/csound_orc_compile.c:692 Engine/otran.c:356
+#: Engine/csound_orc_compile.c:759 Engine/otran.c:370
 #, c-format
 msgid "instr %s redefined"
 msgstr "instr %s redefinido"
 
-#: Engine/csound_orc_compile.c:833 Engine/otran.c:145 Engine/symbtab.c:394
-#, c-format
-msgid "invalid input type for opcode %s"
-msgstr ""
-
-#: Engine/csound_orc_compile.c:838 Engine/otran.c:150 Engine/symbtab.c:399
-#, fuzzy, c-format
-msgid "too many input args for opcode %s"
-msgstr "demasiados argumentos de entrada %s"
-
-#: Engine/csound_orc_compile.c:853 Engine/otran.c:165 Engine/symbtab.c:414
-#, c-format
-msgid "too many output args for opcode %s"
-msgstr ""
-
-#: Engine/csound_orc_compile.c:869 Engine/otran.c:187 Engine/symbtab.c:433
-#, c-format
-msgid "invalid output type for opcode %s"
-msgstr ""
-
-#: Engine/csound_orc_compile.c:954 Engine/otran.c:339
+#: Engine/csound_orc_compile.c:903 Engine/otran.c:352
 #, c-format
 msgid "instr %ld redefined"
 msgstr "instr %ld redefinido"
 
-#: Engine/csound_orc_compile.c:964
+#: Engine/csound_orc_compile.c:914
 msgid "!!! csound->opcodeInfo is NULL !!!\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1111
+#: Engine/csound_orc_compile.c:1083
 #, c-format
 msgid "Unknown TREE node of type %d found in root.\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1168 Engine/otran.c:565 Engine/otran.c:1414
+#: Engine/csound_orc_compile.c:1140 Engine/otran.c:579 Engine/otran.c:1433
 #, c-format
 msgid "%s invalid sample rate"
 msgstr "%s tasa de muestreo inválida"
 
-#: Engine/csound_orc_compile.c:1170 Engine/otran.c:567 Engine/otran.c:1416
+#: Engine/csound_orc_compile.c:1142 Engine/otran.c:581 Engine/otran.c:1435
 #, c-format
 msgid "%s invalid control rate"
 msgstr "%s frecuencia de control inválida"
 
-#: Engine/csound_orc_compile.c:1173 Engine/otran.c:570 Engine/otran.c:1412
+#: Engine/csound_orc_compile.c:1146 Engine/otran.c:584 Engine/otran.c:1431
 #, c-format
 msgid "%s invalid ksmps value"
 msgstr "%s valor de ksmps inválido"
 
-#: Engine/csound_orc_compile.c:1176 Engine/otran.c:572 Engine/otran.c:1418
+#: Engine/csound_orc_compile.c:1149 Engine/otran.c:587 Engine/otran.c:1437
 #, c-format
 msgid "%s inconsistent sr, kr, ksmps"
 msgstr "%s sr, kr, ksmps inconsistentes"
 
-#: Engine/csound_orc_compile.c:1190
+#: Engine/csound_orc_compile.c:1165
 msgid "perf-pass statements illegal in header blk\n"
 msgstr ""
 "enunciados de ejecución (perf-pass) son ilegales en el bloque de encabezado\n"
 
-#: Engine/csound_orc_compile.c:1195
+#: Engine/csound_orc_compile.c:1170
 #, c-format
 msgid "%d syntax errors in orchestra.  compilation invalid\n"
 msgstr "%d errores de sintaxis en la orquesta.  compilación inváilda\n"
 
-#: Engine/csound_orc_compile.c:1255 Engine/otran.c:656
+#: Engine/csound_orc_compile.c:1230 Engine/otran.c:671
 msgid "inconsistent argoff sumcount"
 msgstr "cuenta argoff inconsistente"
 
-#: Engine/csound_orc_compile.c:1327 Engine/otran.c:725
+#: Engine/csound_orc_compile.c:1302 Engine/otran.c:740
 #, c-format
 msgid "LABELS list is full...extending to %d\n"
 msgstr "la lista de etiquetas (LABELS) está llena...extendiendo a  %d\n"
 
-#: Engine/csound_orc_compile.c:1365 Engine/otran.c:763
+#: Engine/csound_orc_compile.c:1340 Engine/otran.c:778
 #, c-format
 msgid "GOTOS list is full..extending to %d\n"
 msgstr "la lista de GOTOS está llena..extendiendo a %d\n"
 
-#: Engine/csound_orc_compile.c:1398 Engine/otran.c:796
+#: Engine/csound_orc_compile.c:1373 Engine/otran.c:811
 #, c-format
 msgid "target label '%s' not found"
 msgstr "etiqueta '%s' no encontrada"
 
-#: Engine/csound_orc_compile.c:1463 Engine/otran.c:851
+#: Engine/csound_orc_compile.c:1451 Engine/otran.c:866
 #, c-format
 msgid "string syntax '%s'"
 msgstr "sintaxis de cadena '%s'"
 
-#: Engine/csound_orc_compile.c:1513 Engine/otran.c:901
+#: Engine/csound_orc_compile.c:1501 Engine/otran.c:916
 #, c-format
 msgid "numeric syntax '%s'"
 msgstr "sintaxis numérica '%s'"
 
-#: Engine/csound_orc_compile.c:1539 Engine/otran.c:927
+#: Engine/csound_orc_compile.c:1527 Engine/otran.c:942
 #, c-format
 msgid "extending Floating pool to %d\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1578 Engine/otran.c:999
+#: Engine/csound_orc_compile.c:1566 Engine/otran.c:1018
 msgid "gblnamset(): memory allocation failure"
 msgstr "gblnamset(): falla en asignación de memoria"
 
-#: Engine/csound_orc_compile.c:1606 Engine/otran.c:1027
+#: Engine/csound_orc_compile.c:1594 Engine/otran.c:1046
 msgid "lclnamset(): memory allocation failure"
 msgstr "lclnamset(): falla en asignación de memoria"
 
-#: Engine/csound_orc_compile.c:1632 Engine/otran.c:1052
+#: Engine/csound_orc_compile.c:1620 Engine/otran.c:1071
 msgid "unexpected global name"
 msgstr "nombre global inesperado"
 
-#: Engine/csound_orc_compile.c:1655 Engine/otran.c:1074
+#: Engine/csound_orc_compile.c:1643 Engine/otran.c:1093
 msgid "unknown nametype"
 msgstr ""
 
-#: Engine/csound_orc.l:239
+#: Engine/csound_orc_expressions.c:459
 #, c-format
-msgid "unterminated string found on line %d >>%s<<\n"
+msgid "error: function %s with arg type %c not found, line %d \n"
 msgstr ""
 
-#: Engine/csound_orc.l:259 Engine/csound_orc.l:286 Engine/csound_orc.l:314
-#: Engine/csound_orc.l:367 Engine/rdorch.c:901 Engine/sread.c:396
+#: Engine/csound_orc_expressions.c:862
 #, c-format
-msgid "Undefined macro: '%s'"
-msgstr "Macro indefinido: '%s'"
-
-#: Engine/csound_orc.l:265 Engine/csound_orc.l:292
-msgid "Includes nested too deeply"
+msgid "error: non-existent statement in conditional, line %d \n"
 msgstr ""
 
-#: Engine/csound_orc.l:335 Engine/csound_orc.l:388 Engine/rdorch.c:940
+#: Engine/csound_orc_semantics.c:157
 #, c-format
 msgid ""
-"Missing argument terminator\n"
-"%.98s"
-msgstr ""
-
-#: Engine/csound_orc.l:484
-#, c-format
-msgid "Line %d: Unknown character: '%c'(%2x)\n"
-msgstr ""
-
-#: Engine/csound_orc.l:527
-#, c-format
-msgid "Cannot open file \"%s\"\n"
-msgstr ""
-
-#: Engine/csound_orc.l:573 Engine/rdorch.c:689 Engine/sread.c:1595
-msgid "macro error\n"
-msgstr "error de macro\n"
-
-#: Engine/csound_orc.l:631 Engine/rdorch.c:845 Engine/sread.c:1686
-#, c-format
-msgid "macro %s undefined\n"
-msgstr "el macro %s no está definido\n"
-
-#: Engine/csound_orc.l:645 Engine/rdorch.c:859 Engine/sread.c:294
-msgid "Undefining undefined macro"
-msgstr ""
-
-#: Engine/csound_orc.l:786 Engine/rdorch.c:413 Engine/sread.c:741
-#, c-format
-msgid "Macro definition for %*s\n"
-msgstr "Definición del macro %*s\n"
-
-#: Engine/csound_orc.l:789 Engine/rdorch.c:416
-msgid "Invalid macro name for --omacro"
-msgstr "Nombre de macro inválido para --omacro"
-
-#: Engine/csound_orc.y:270
-msgid "No number following instr\n"
-msgstr ""
-
-#: Engine/csound_orc_semantics.c:127
-#, c-format
-msgid "error: %s (token \"%s\")"
+"\n"
+"error: %s  (token \"%s\")"
 msgstr ""
 
-#: Engine/csound_orc_semantics.c:129
+#: Engine/csound_orc_semantics.c:159
 #, fuzzy, c-format
-msgid " line %d: %s"
-msgstr ", línea %d:\n"
+msgid ""
+" line %d:\n"
+">>>"
+msgstr " línea %d:\n"
 
-#: Engine/csound_orc_semantics.c:702 Engine/rdorch.c:1863
-msgid "insufficient required arguments"
-msgstr "número insuficiente de argumentos requeridos"
+#: Engine/csound_orc_semantics.c:732
+#, fuzzy, c-format
+msgid "insufficient required arguments for opcode %s on line %d\n"
+msgstr ""
 
-#: Engine/csound_orc_semantics.c:768 Engine/rdorch.c:1617 Engine/rdorch.c:1635
-#: Engine/rdorch.c:1676 Engine/rdorch.c:1811 Engine/rdorch.c:1980
+#: Engine/csound_orc_semantics.c:797 Engine/rdorch.c:1644 Engine/rdorch.c:1662
+#: Engine/rdorch.c:1703 Engine/rdorch.c:1841 Engine/rdorch.c:2011
 #, c-format
 msgid "modified opcod: %s"
 msgstr "opcode modificado: %s"
 
-#: Engine/cs_par_dispatch.c:113 Engine/cs_par_dispatch.c:125
+#: Engine/cs_par_dispatch.c:115 Engine/cs_par_dispatch.c:128
 #, c-format
 msgid "Poorly specified global lock index: %i [max: %i]\n"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:138 Engine/cs_par_dispatch.c:157
+#: Engine/cs_par_dispatch.c:142 Engine/cs_par_dispatch.c:162
 msgid "Invalid NULL parameter name for a global variable\n"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:505 Engine/cs_par_dispatch.c:528
-#: Engine/cs_par_dispatch.c:2463 Engine/cs_par_dispatch.c:2507
-#: Engine/cs_par_dispatch.c:2509 Engine/cs_par_dispatch.c:2570
+#: Engine/cs_par_dispatch.c:526 Engine/cs_par_dispatch.c:553
+#: Engine/cs_par_dispatch.c:2543 Engine/cs_par_dispatch.c:2588
+#: Engine/cs_par_dispatch.c:2590 Engine/cs_par_dispatch.c:2654
 #, fuzzy
 msgid "Invalid NULL Parameter entry"
 msgstr "parámetros de modo inválidos"
 
-#: Engine/cs_par_dispatch.c:507 Engine/cs_par_dispatch.c:541
-#: Engine/cs_par_dispatch.c:566 Engine/cs_par_dispatch.c:605
+#: Engine/cs_par_dispatch.c:528 Engine/cs_par_dispatch.c:567
+#: Engine/cs_par_dispatch.c:594 Engine/cs_par_dispatch.c:635
 #, fuzzy
 msgid "Invalid NULL Parameter name"
 msgstr "parámetros de modo inválidos"
 
-#: Engine/cs_par_dispatch.c:512
+#: Engine/cs_par_dispatch.c:535
 msgid "Failed to allocate Opcode Weight cache entry"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:632 Engine/cs_par_dispatch.c:718
+#: Engine/cs_par_dispatch.c:664 Engine/cs_par_dispatch.c:755
 msgid "No Weights to Dump (Using Defaults)\n"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:670 Engine/cs_par_dispatch.c:794
+#: Engine/cs_par_dispatch.c:705 Engine/cs_par_dispatch.c:835
 #, c-format
 msgid "Opcode Weight Spec File not found at: %s"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:722
+#: Engine/cs_par_dispatch.c:759
 msgid "Weights Dump\n"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:866
+#: Engine/cs_par_dispatch.c:907
 #, c-format
 msgid "Parallel Spec File not found at: %s"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:872
+#: Engine/cs_par_dispatch.c:913
 msgid "Parallel Spec File invalid format expected weight_min parameter"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:877
+#: Engine/cs_par_dispatch.c:918
 msgid "Parallel Spec File invalid format expected weight_max parameter"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:881
+#: Engine/cs_par_dispatch.c:922
 msgid "Parallel Spec File invalid format expected roots_avail_min parameter"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:885
+#: Engine/cs_par_dispatch.c:926
 msgid "Parallel Spec File invalid format expected roots_avail_max parameter"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:961 Engine/cs_par_dispatch.c:985
-#: Engine/cs_par_dispatch.c:1109 Engine/cs_par_dispatch.c:1195
-#: Engine/cs_par_dispatch.c:1332 Engine/cs_par_dispatch.c:1366
-#: Engine/cs_par_dispatch.c:1383 Engine/cs_par_dispatch.c:1405
-#: Engine/cs_par_dispatch.c:1432 Engine/cs_par_dispatch.c:1452
-#: Engine/cs_par_dispatch.c:1476 Engine/cs_par_dispatch.c:1566
-#: Engine/cs_par_dispatch.c:1621 Engine/cs_par_dispatch.c:1714
-#: Engine/cs_par_dispatch.c:1769 Engine/cs_par_dispatch.c:2597
+#: Engine/cs_par_dispatch.c:1003 Engine/cs_par_dispatch.c:1027
+#: Engine/cs_par_dispatch.c:1155 Engine/cs_par_dispatch.c:1251
+#: Engine/cs_par_dispatch.c:1405 Engine/cs_par_dispatch.c:1439
+#: Engine/cs_par_dispatch.c:1456 Engine/cs_par_dispatch.c:1478
+#: Engine/cs_par_dispatch.c:1506 Engine/cs_par_dispatch.c:1528
+#: Engine/cs_par_dispatch.c:1552 Engine/cs_par_dispatch.c:1644
+#: Engine/cs_par_dispatch.c:1699 Engine/cs_par_dispatch.c:1792
+#: Engine/cs_par_dispatch.c:1847 Engine/cs_par_dispatch.c:2681
 #, fuzzy
 msgid "Invalid NULL Parameter dag"
-msgstr "parámetro de modo inválido: %d"
+msgstr ""
 
-#: Engine/cs_par_dispatch.c:966
+#: Engine/cs_par_dispatch.c:1008
 #, fuzzy
 msgid "Failed to allocate dag"
-msgstr "No fue posible crear %s"
+msgstr ""
 
-#: Engine/cs_par_dispatch.c:1017 Engine/cs_par_dispatch.c:1040
-#: Engine/cs_par_dispatch.c:1062 Engine/cs_par_dispatch.c:1064
+#: Engine/cs_par_dispatch.c:1060 Engine/cs_par_dispatch.c:1083
+#: Engine/cs_par_dispatch.c:1105 Engine/cs_par_dispatch.c:1107
 #, fuzzy
 msgid "Invalid NULL Parameter dag_node"
-msgstr "parámetro de modo inválido: %d"
+msgstr ""
 
-#: Engine/cs_par_dispatch.c:1019
+#: Engine/cs_par_dispatch.c:1062
 #, fuzzy
 msgid "Invalid NULL Parameter instr"
 msgstr "parámetros de modo inválidos"
 
-#: Engine/cs_par_dispatch.c:1021
+#: Engine/cs_par_dispatch.c:1064
 #, fuzzy
 msgid "Invalid NULL Parameter insds"
-msgstr "parámetro de modo inválido: %d"
+msgstr ""
 
-#: Engine/cs_par_dispatch.c:1026 Engine/cs_par_dispatch.c:1048
+#: Engine/cs_par_dispatch.c:1069 Engine/cs_par_dispatch.c:1091
 #, fuzzy
 msgid "Failed to allocate dag_node"
-msgstr "No fue posible crear %s"
+msgstr ""
 
-#: Engine/cs_par_dispatch.c:1043
+#: Engine/cs_par_dispatch.c:1086
 msgid "Invalid Parameter count must be greater than 0"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1175 Engine/cs_par_dispatch.c:1433
-#: Engine/cs_par_dispatch.c:2465 Engine/cs_par_dispatch.c:2571
-#: Engine/cs_par_dispatch.c:2598
+#: Engine/cs_par_dispatch.c:1229 Engine/cs_par_dispatch.c:1508
+#: Engine/cs_par_dispatch.c:2545 Engine/cs_par_dispatch.c:2655
+#: Engine/cs_par_dispatch.c:2682
 #, fuzzy
 msgid "Invalid NULL Parameter chain"
 msgstr "parámetros de modo inválidos"
 
-#: Engine/cs_par_dispatch.c:1183
+#: Engine/cs_par_dispatch.c:1237
 #, c-format
 msgid "Failed to find semantic information for instrument '%i'"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1478
+#: Engine/cs_par_dispatch.c:1554
 #, fuzzy
 msgid "Invalid NULL Parameter node"
-msgstr "parámetro de modo inválido: %d"
+msgstr ""
 
-#: Engine/cs_par_dispatch.c:1480
+#: Engine/cs_par_dispatch.c:1556
 #, fuzzy
 msgid "Invalid NULL Parameter update_hdl"
-msgstr "parámetro de modo inválido: %d"
+msgstr ""
 
-#: Engine/cs_par_dispatch.c:1569
+#: Engine/cs_par_dispatch.c:1647
 msgid "Invalid Parameter update_hdl is outside the DAG range"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:2417
+#: Engine/cs_par_dispatch.c:2497
 #, fuzzy, c-format
 msgid "Parallel Dump File not found at: %s for writing"
-msgstr "no es posible abrir para escritura el archivo %s"
+msgstr ""
 
-#: Engine/cs_par_dispatch.c:2477
+#: Engine/cs_par_dispatch.c:2557
 msgid "Failed to allocate Dag2 cache entry"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:2527
+#: Engine/cs_par_dispatch.c:2610
 msgid "Cache Update\n"
 msgstr ""
 
@@ -477,12 +439,12 @@ msgstr "Variable de entorno '%s' ha sido asignada como "
 msgid "Creating search path cache for '%s':"
 msgstr ""
 
-#: Engine/envvar.c:1082
+#: Engine/envvar.c:1083
 #, c-format
 msgid "internal error: csoundFileOpen(): invalid type: %d"
 msgstr "error interno: csoundFileOpen(): tipo inváido: %d"
 
-#: Engine/envvar.c:1264
+#: Engine/envvar.c:1266
 #, c-format
 msgid "internal error: csoundCreateFileHandle(): invalid type: %d"
 msgstr "error interno: csoundCreateFileHandle(): tipo inválido: %d"
@@ -541,347 +503,348 @@ msgstr "número de términos"
 msgid "expression syntax"
 msgstr "syntaxis de expresión"
 
-#: Engine/fgens.c:95
+#: Engine/fgens.c:91
 msgid "unknown GEN number"
 msgstr "número GEN desconocido"
 
-#: Engine/fgens.c:137
+#: Engine/fgens.c:133
 msgid "ftable does not exist"
 msgstr "la tabla-f (ftable) no existe"
 
-#: Engine/fgens.c:142
+#: Engine/fgens.c:138
 #, c-format
 msgid "ftable %d now deleted\n"
 msgstr "la tabla-f (ftable) %d ha sido borrada\n"
 
-#: Engine/fgens.c:157 Engine/fgens.c:1597 Engine/fgens.c:1683
-#: Engine/fgens.c:1762 Engine/fgens.c:1878 Engine/fgens.c:1959
-#: Engine/fgens.c:2867
+#: Engine/fgens.c:153 Engine/fgens.c:1593 Engine/fgens.c:1679
+#: Engine/fgens.c:1758 Engine/fgens.c:1874 Engine/fgens.c:1955
+#: Engine/fgens.c:2909
 msgid "insufficient gen arguments"
 msgstr "argumentos GEN insuficientes"
 
-#: Engine/fgens.c:183 Opcodes/ftgen.c:116
+#: Engine/fgens.c:179 Opcodes/ftgen.c:116
 #, c-format
 msgid "Named gen \"%s\" not defined"
 msgstr "GEN de nombre \"%s\" no definida"
 
-#: Engine/fgens.c:190
+#: Engine/fgens.c:186
 msgid "illegal gen number"
 msgstr "número GEN ilegal"
 
-#: Engine/fgens.c:198
-msgid "deferred size for GENs 1, 23 or 28 only"
-msgstr "tamaño diferido sólo permitido para GEN1, GEN23, GEN28"
+#: Engine/fgens.c:194
+msgid "deferred size for GENs 1, 23, 28 or 49 only"
+msgstr "tamaño diferido sólo permitido para GEN1, GEN23, GEN28, GEN49"
 
-#: Engine/fgens.c:201 Engine/fgens.c:249
+#: Engine/fgens.c:197 Engine/fgens.c:245
 #, c-format
 msgid "ftable %d:\n"
 msgstr "tabla-f (ftable) %d:\n"
 
-#: Engine/fgens.c:226 Engine/fgens.c:233
+#: Engine/fgens.c:222 Engine/fgens.c:229
 msgid "illegal table length"
 msgstr "longitud ilegal de tabla"
 
-#: Engine/fgens.c:292 Engine/fgens.c:2219
+#: Engine/fgens.c:288 Engine/fgens.c:2215
 #, c-format
 msgid ""
 "ftable %d relocating due to size change\n"
 "         currently active instruments may find this disturbing"
 msgstr ""
 
-#: Engine/fgens.c:350 Engine/fgens.c:471 Engine/fgens.c:555 Engine/fgens.c:636
-#: Engine/fgens.c:711 Engine/fgens.c:760 Engine/fgens.c:881 Engine/fgens.c:958
-#: Engine/fgens.c:1053 Engine/fgens.c:1097 Engine/fgens.c:1144
-#: Engine/fgens.c:1397 Engine/fgens.c:1459 Engine/fgens.c:1681
-#: Engine/fgens.c:1759 Engine/fgens.c:2114 Engine/fgens.c:2821
-#: Engine/fgens.c:2864
+#: Engine/fgens.c:346 Engine/fgens.c:467 Engine/fgens.c:551 Engine/fgens.c:632
+#: Engine/fgens.c:707 Engine/fgens.c:756 Engine/fgens.c:877 Engine/fgens.c:954
+#: Engine/fgens.c:1049 Engine/fgens.c:1093 Engine/fgens.c:1140
+#: Engine/fgens.c:1393 Engine/fgens.c:1455 Engine/fgens.c:1677
+#: Engine/fgens.c:1755 Engine/fgens.c:2110 Engine/fgens.c:2863
+#: Engine/fgens.c:2906
 msgid "using extended arguments\n"
 msgstr ""
 
-#: Engine/fgens.c:374
+#: Engine/fgens.c:370
 msgid "no coefs present"
 msgstr "no hay coeficientes"
 
-#: Engine/fgens.c:379 Engine/fgens.c:645 Engine/fgens.c:653
+#: Engine/fgens.c:375 Engine/fgens.c:641 Engine/fgens.c:649
 msgid "illegal x interval"
 msgstr "intervalo x ilegal"
 
-#: Engine/fgens.c:408 Engine/fgens.c:557 Engine/fgens.c:638 Engine/fgens.c:883
-#: Engine/fgens.c:1354 Engine/fgens.c:2378 Engine/fgens.c:2694 Top/main.c:142
-#: util/cvanal.c:66 util/lpanal.c:398 util/pvanal.c:170
+#: Engine/fgens.c:404 Engine/fgens.c:553 Engine/fgens.c:634 Engine/fgens.c:879
+#: Engine/fgens.c:1350 Engine/fgens.c:2375 Engine/fgens.c:2690
+#: Engine/fgens.c:2810 Top/main.c:141 util/cvanal.c:66 util/lpanal.c:398
+#: util/pvanal.c:170
 msgid "insufficient arguments"
 msgstr "argumentos insuficientes"
 
-#: Engine/fgens.c:412 Engine/fgens.c:1359
+#: Engine/fgens.c:408 Engine/fgens.c:1355
 msgid "unknown srctable number"
 msgstr "número de tabla fuente (srctable) desconocido"
 
-#: Engine/fgens.c:425
+#: Engine/fgens.c:421
 msgid "table size too large"
 msgstr "tamaño de la tabla demasiado grande"
 
-#: Engine/fgens.c:510 Engine/fgens.c:543
+#: Engine/fgens.c:506 Engine/fgens.c:539
 msgid "gen call has negative segment size:"
 msgstr ""
 
-#: Engine/fgens.c:512
+#: Engine/fgens.c:508
 msgid "illegal input vals for gen call, beginning:"
 msgstr ""
 
-#: Engine/fgens.c:578
+#: Engine/fgens.c:574
 msgid "negative segsiz"
 msgstr "segsiz negativo"
 
-#: Engine/fgens.c:787
+#: Engine/fgens.c:783
 msgid "nh partials < 1"
 msgstr ""
 
-#: Engine/fgens.c:886
+#: Engine/fgens.c:882
 msgid "illegal xint value"
 msgstr "valor de xint ilegal"
 
-#: Engine/fgens.c:889
+#: Engine/fgens.c:885
 msgid "illegal xamp value"
 msgstr "valor de xamp ilegal"
 
-#: Engine/fgens.c:961
+#: Engine/fgens.c:957
 msgid "uneven number of args"
 msgstr "numero de argumentos impar"
 
-#: Engine/fgens.c:1081
+#: Engine/fgens.c:1077
 msgid "gen call has illegal x-ordinate values:"
 msgstr "la llamada GEN tiene valores ilegales para el eje x:"
 
-#: Engine/fgens.c:1099
+#: Engine/fgens.c:1095
 msgid "wrong number of args"
 msgstr "número equivocado de argumentos"
 
-#: Engine/fgens.c:1113
+#: Engine/fgens.c:1109
 msgid "a range given exceeds table length"
 msgstr "uno de los rangos dado excede la longitud de  la tabla"
 
-#: Engine/fgens.c:1120
+#: Engine/fgens.c:1116
 msgid "an input function does not exist"
 msgstr "no existe función de entrada"
 
-#: Engine/fgens.c:1253
+#: Engine/fgens.c:1249
 msgid "No such window!"
 msgstr "No existe la ventana!"
 
-#: Engine/fgens.c:1271
+#: Engine/fgens.c:1267
 msgid "Wrong number of input arguments"
 msgstr "Número equivocado de argumentos de entrada"
 
-#: Engine/fgens.c:1272
+#: Engine/fgens.c:1268
 msgid "unknown distribution"
 msgstr "distribución desconocida"
 
-#: Engine/fgens.c:1321
+#: Engine/fgens.c:1317
 msgid "error opening ASCII file"
 msgstr "error abriendo archivo ASCII"
 
-#: Engine/fgens.c:1327
+#: Engine/fgens.c:1323
 #, c-format
 msgid "%ld elements in %s\n"
 msgstr "%ld elementos en %s\n"
 
-#: Engine/fgens.c:1338
+#: Engine/fgens.c:1334
 msgid "Numbers after table full in GEN23"
 msgstr ""
 
-#: Engine/fgens.c:1367
+#: Engine/fgens.c:1363
 msgid "table size must be the same of source table"
 msgstr "el tamaño de la tabla fuente y de la de destino debe ser igual"
 
-#: Engine/fgens.c:1439 Engine/fgens.c:1499
+#: Engine/fgens.c:1435 Engine/fgens.c:1495
 msgid "x coordinates must all be in increasing order:"
 msgstr "las coordenadas x deben estar en orden ascendente:"
 
-#: Engine/fgens.c:1442 Engine/fgens.c:1501
+#: Engine/fgens.c:1438 Engine/fgens.c:1497
 msgid "x coordinate greater than function size:"
 msgstr "coordenada x mayor que el tamaño de la función:"
 
-#: Engine/fgens.c:1446
+#: Engine/fgens.c:1442
 msgid "illegal input val (y <= 0) for gen call, beginning:"
 msgstr ""
 
-#: Engine/fgens.c:1519
+#: Engine/fgens.c:1515
 msgid "GEN28 requires zero table length"
 msgstr "GEN28 requiere tamaño de tabla cero"
 
-#: Engine/fgens.c:1581
+#: Engine/fgens.c:1577
 msgid "could not open space file"
 msgstr "no es posible abrir el archivo de espacio"
 
-#: Engine/fgens.c:1583
+#: Engine/fgens.c:1579
 msgid "Time values must be in increasing order"
 msgstr "Los valores de tiempo deben estar en orden ascendente"
 
-#: Engine/fgens.c:1604
+#: Engine/fgens.c:1600
 msgid "GEN30: source ftable not found"
 msgstr "GEN30: tabla-f (ftable) fuente no encontrada"
 
-#: Engine/fgens.c:1687
+#: Engine/fgens.c:1683
 msgid "GEN31: source ftable not found"
 msgstr "GEN31: tabla-f (ftable) fuente no encontrada"
 
-#: Engine/fgens.c:1795
+#: Engine/fgens.c:1791
 #, c-format
 msgid "GEN32: source ftable %d not found"
 msgstr "GEN32: tabla-f (ftable) fuente %d no encontrada"
 
-#: Engine/fgens.c:1889
+#: Engine/fgens.c:1885
 msgid "GEN33: source ftable not found"
 msgstr "GEN33: tabla-f (ftable) fuente no encontrada"
 
-#: Engine/fgens.c:2057
+#: Engine/fgens.c:2053
 msgid "unknown source table number"
 msgstr "número de tabla fuente desconocida"
 
-#: Engine/fgens.c:2089
+#: Engine/fgens.c:2085
 msgid "Gen41: negative probability not allowed"
 msgstr ""
 
-#: Engine/fgens.c:2155 Opcodes/fareygen.c:70
+#: Engine/fgens.c:2151 Opcodes/fareygen.c:70
 #, c-format
 msgid "ftable %d: "
 msgstr "tabla-f (ftable) %d: "
 
-#: Engine/fgens.c:2199
+#: Engine/fgens.c:2195
 #, c-format
 msgid "ftable %d:"
 msgstr "tabla-f (ftable) %d:"
 
-#: Engine/fgens.c:2214
+#: Engine/fgens.c:2210
 #, c-format
 msgid "replacing previous ftable %d"
 msgstr "reemplazando tabla-f (ftable) %d anterior"
 
-#: Engine/fgens.c:2250 Engine/fgens.c:2337 Engine/fgens.c:2361
-#: Opcodes/gab/gab.c:578 Opcodes/gab/gab.c:632 Opcodes/midiops2.c:218
+#: Engine/fgens.c:2246 Engine/fgens.c:2334 Engine/fgens.c:2358
+#: Opcodes/gab/gab.c:580 Opcodes/gab/gab.c:634 Opcodes/midiops2.c:218
 #: Opcodes/midiops2.c:370 Opcodes/midiops2.c:452 Opcodes/uggab.c:1317
 #: Opcodes/uggab.c:1344 Opcodes/uggab.c:1364 Opcodes/uggab.c:1407
 #, c-format
 msgid "Invalid ftable no. %f"
 msgstr "Tabla-f (ftable) no. %f inválida"
 
-#: Engine/fgens.c:2255
+#: Engine/fgens.c:2251
 #, c-format
 msgid "deferred-size ftable %f illegal here"
 msgstr "tabla-f (ftable) %f de tamaño diferido es ilegal aquí"
 
-#: Engine/fgens.c:2281
+#: Engine/fgens.c:2278 Engine/fgens.c:2848
 #, c-format
 msgid "Deferred load of '%s' failed"
 msgstr "Falló la carga diferida de '%s'"
 
-#: Engine/fgens.c:2343
+#: Engine/fgens.c:2340
 #, c-format
 msgid "Deferred-size ftable %f load not available at perf time."
 msgstr ""
 "Carga de la tabla-f (ftable) %f de tamaño diferido no disponible en tiempo "
 "perf."
 
-#: Engine/fgens.c:2402
+#: Engine/fgens.c:2399
 #, c-format
 msgid "non-deferred ftable %d needs size %d\n"
 msgstr ""
 
-#: Engine/fgens.c:2449 Opcodes/loscilx.c:62
+#: Engine/fgens.c:2446 Opcodes/loscilx.c:64
 #, c-format
 msgid "invalid sample format: %d"
 msgstr "formato de muestra inválido: %d"
 
-#: Engine/fgens.c:2457 Engine/fgens.c:2718
+#: Engine/fgens.c:2454 Engine/fgens.c:2714
 #, c-format
 msgid "channel %d illegal"
 msgstr "canal %d ilegal"
 
-#: Engine/fgens.c:2463
+#: Engine/fgens.c:2460
 msgid "deferred alloc\n"
 msgstr ""
 
-#: Engine/fgens.c:2471
+#: Engine/fgens.c:2468
 msgid "deferred size, but filesize unknown"
 msgstr "tamaño diferido, pero tamaño del archivo desconocido"
 
-#: Engine/fgens.c:2474
+#: Engine/fgens.c:2471
 #, c-format
 msgid "  defer length %d\n"
 msgstr ""
 
-#: Engine/fgens.c:2543
+#: Engine/fgens.c:2540
 msgid "GEN1: input file truncated by ftable size"
 msgstr "GEN1: archivo de entrada truncado por el tamaño de la tabla-f (ftable)"
 
-#: Engine/fgens.c:2547
+#: Engine/fgens.c:2544
 #, c-format
 msgid "\tlooping endpoint %d exceeds ftsize %d\n"
 msgstr "\tpunto final de bucle %ld excede el tamaño de la tabla %ld\n"
 
-#: Engine/fgens.c:2569
+#: Engine/fgens.c:2566
 msgid "GEN1 read error"
 msgstr "GEN1 error de lectura"
 
-#: Engine/fgens.c:2574
+#: Engine/fgens.c:2571
 msgid "GEN1: aiff file truncated by ftable size"
 msgstr "GEN1: archivo aiff truncado por el tamaño de la tabla-f (ftable)"
 
-#: Engine/fgens.c:2575
+#: Engine/fgens.c:2572
 #, c-format
 msgid "\taudio samps %d exceeds ftsize %d"
 msgstr "\tmuestras de audio %ld excedene el tamaño de la tabla %ld"
 
-#: Engine/fgens.c:2619
+#: Engine/fgens.c:2616
 msgid "wrong number of ftable arguments"
 msgstr "número equivocado de argumentos para la tabla-f (ftable)"
 
-#: Engine/fgens.c:2629 OOps/pstream.c:326
+#: Engine/fgens.c:2626 OOps/pstream.c:326
 msgid "Failed to load PVOC-EX file"
 msgstr "No fue posible cargar el archivo PVOC-EX"
 
-#: Engine/fgens.c:2640 InOut/midirecv.c:416 OOps/midiops.c:377
+#: Engine/fgens.c:2637 InOut/midirecv.c:416 OOps/midiops.c:377
 #: OOps/midiops.c:419 OOps/midiops.c:431
 msgid "illegal channel number"
 msgstr "número de canal ilegal"
 
-#: Engine/fgens.c:2658
+#: Engine/fgens.c:2655
 msgid "ftable size too small"
 msgstr "la tabla-f (ftable) es demasiado pequeña"
 
-#: Engine/fgens.c:2734 Opcodes/mp3in.c:79 Opcodes/mp3in.c:218
+#: Engine/fgens.c:2730 Opcodes/mp3in.c:80 Opcodes/mp3in.c:219
 msgid "Not enough memory\n"
 msgstr ""
 
-#: Engine/fgens.c:2831
+#: Engine/fgens.c:2873
 msgid "gen51: invalid number of p-fields (too few grades)"
 msgstr "GEN51: número inválido de campos-p (p-fields) (faltan grados)"
 
-#: Engine/fgens.c:2871
+#: Engine/fgens.c:2913
 msgid "number of channels inconsistent with number of args"
 msgstr "número de canales inconsistente con el número de argumentos"
 
-#: Engine/fgens.c:3030
+#: Engine/fgens.c:3072
 msgid "GEN53: invalid number of gen arguments"
 msgstr "GEN53: número inválido de argumentos"
 
-#: Engine/fgens.c:3040
+#: Engine/fgens.c:3082
 msgid "GEN53: invalid table length"
 msgstr "GEN53: tamaño inválido de tabla"
 
-#: Engine/fgens.c:3044
+#: Engine/fgens.c:3086
 msgid "GEN53: invalid source table number"
 msgstr "GEN53: número inválido de tabla fuente"
 
-#: Engine/fgens.c:3047
+#: Engine/fgens.c:3089
 msgid "GEN53: mode must be in the range 0 to 15"
 msgstr "GEN53: el modo debe estar entre 0 y 15"
 
-#: Engine/fgens.c:3051
+#: Engine/fgens.c:3093
 msgid "GEN53: invalid source table length"
 msgstr "GEN53: tamaño inválido de la tabla fuente"
 
-#: Engine/fgens.c:3056
+#: Engine/fgens.c:3098
 msgid "GEN53: invalid window table"
 msgstr "GEN53: tabla de ventana inválida"
 
@@ -905,34 +868,34 @@ msgstr "Intrumento %s desactivado\n"
 msgid "Instrument %d muted\n"
 msgstr "Intrumento %d desactivado\n"
 
-#: Engine/insert.c:103 Engine/insert.c:1249
+#: Engine/insert.c:103 Engine/insert.c:1301
 #, c-format
 msgid "instr %s expects midi event data, cannot run from score\n"
 msgstr "instr %s espera eventos MIDI, no puede llamarse desde el score\n"
 
-#: Engine/insert.c:106 Engine/insert.c:1252
+#: Engine/insert.c:106 Engine/insert.c:1304
 #, c-format
 msgid "instr %d expects midi event data, cannot run from score\n"
 msgstr "instr %d espera eventos MIDI, no puede llamarse desde el score\n"
 
-#: Engine/insert.c:115 Engine/insert.c:279 Engine/insert.c:1234
+#: Engine/insert.c:115 Engine/insert.c:279 Engine/insert.c:1286
 #, c-format
 msgid "cannot allocate last note because it exceeds 100%% of cpu time"
 msgstr ""
 "no es posible colocar la última nota porque escede el 100%% de tiempo de CPU"
 
-#: Engine/insert.c:121 Engine/insert.c:285 Engine/insert.c:1239
+#: Engine/insert.c:121 Engine/insert.c:285 Engine/insert.c:1291
 msgid "cannot allocate last note because it exceeds instr maxalloc"
 msgstr ""
 "no es posible colocar la última nota porque escede el valor de maxalloc del "
 "instrumento"
 
-#: Engine/insert.c:137 Engine/insert.c:305 Engine/insert.c:1270
+#: Engine/insert.c:137 Engine/insert.c:305 Engine/insert.c:1322
 #, c-format
 msgid "new alloc for instr %s:\n"
 msgstr "Nueva colocación para el instrumento %s:\n"
 
-#: Engine/insert.c:139 Engine/insert.c:307 Engine/insert.c:1272
+#: Engine/insert.c:139 Engine/insert.c:307 Engine/insert.c:1324
 #, c-format
 msgid "new alloc for instr %d:\n"
 msgstr "Nueva colocación para el instrumento %d:\n"
@@ -947,12 +910,12 @@ msgstr "instr %s usa %d campos-p (pfields) pero se han dado %d"
 msgid "instr %d uses %d p-fields but is given %d"
 msgstr "instr %d usa %d campos-p (pfields) pero se han dado %d"
 
-#: Engine/insert.c:251 Engine/insert.c:463
+#: Engine/insert.c:251 Engine/insert.c:482
 #, c-format
 msgid "instr %s now active:\n"
 msgstr ""
 
-#: Engine/insert.c:253 Engine/insert.c:465
+#: Engine/insert.c:253 Engine/insert.c:484
 #, c-format
 msgid "instr %d now active:\n"
 msgstr ""
@@ -972,124 +935,124 @@ msgstr ""
 msgid "MIDI note overlaps with key %d on same channel"
 msgstr "Nota MIDI se sobrepone a la tecla %d en el mismo canal"
 
-#: Engine/insert.c:566
+#: Engine/insert.c:585
 #, c-format
 msgid "removed instance of instr %s\n"
 msgstr "retirada instancia del instrumento %s\n"
 
-#: Engine/insert.c:568
+#: Engine/insert.c:587
 #, c-format
 msgid "removed instance of instr %d\n"
 msgstr "retirada instancia del instrumento %d\n"
 
-#: Engine/insert.c:691
+#: Engine/insert.c:710
 msgid "inactive allocs returned to freespace\n"
 msgstr ""
 
-#: Engine/insert.c:716
+#: Engine/insert.c:735
 #, c-format
 msgid "could not find playing instr %f\n"
 msgstr ""
 
-#: Engine/insert.c:729
+#: Engine/insert.c:748
 msgid ""
 "\n"
 "INIT ERROR: "
 msgstr ""
 
-#: Engine/insert.c:742
+#: Engine/insert.c:761
 #, c-format
 msgid "INIT ERROR in instr %d (opcode %s): "
 msgstr "INIT ERROR en instrumento %d (opcode %s): "
 
-#: Engine/insert.c:745
+#: Engine/insert.c:764
 #, c-format
 msgid "INIT ERROR in instr %d (subinstr %d): "
 msgstr "INIT ERROR en instrumento %d (subinstr %d): "
 
-#: Engine/insert.c:749
+#: Engine/insert.c:768
 #, c-format
 msgid "INIT ERROR in instr %d: "
 msgstr "INIT ERROR en instrumento %d: "
 
-#: Engine/insert.c:767
+#: Engine/insert.c:786
 msgid ""
 "\n"
 "PERF ERROR: "
 msgstr ""
 
-#: Engine/insert.c:780
+#: Engine/insert.c:799
 #, c-format
 msgid "PERF ERROR in instr %d (opcode %s): "
 msgstr "PERF ERROR en instrumento %d (opcode %s): "
 
-#: Engine/insert.c:783
+#: Engine/insert.c:802
 #, c-format
 msgid "PERF ERROR in instr %d (subinstr %d): "
 msgstr "PERF ERROR en instrumento %d (subinstr %d): "
 
-#: Engine/insert.c:787
+#: Engine/insert.c:806
 #, c-format
 msgid "PERF ERROR in instr %d: "
 msgstr "PERF ERROR en instrumento %d: "
 
-#: Engine/insert.c:792
+#: Engine/insert.c:811
 msgid "   note aborted\n"
 msgstr "    nota abortada\n"
 
-#: Engine/insert.c:820
+#: Engine/insert.c:839
 msgid "subinstr: number of output args greater than nchnls"
 msgstr "subinstr: número de argumentos de salida es mayor que nchnls"
 
-#: Engine/insert.c:861
+#: Engine/insert.c:880
 msgid "subinstr: too many p-fields"
 msgstr "subinstr: demasiados campos-p (pfields)"
 
-#: Engine/insert.c:920
+#: Engine/insert.c:939
 #, c-format
 msgid "%s: invalid local ksmps value: %d"
 msgstr "%s: valor inválido de ksmps local: %d"
 
-#: Engine/insert.c:1040 OOps/bus.c:835 Opcodes/stackops.c:293
+#: Engine/insert.c:1062 OOps/bus.c:835 Opcodes/stackops.c:286
 #, c-format
 msgid "%s: not initialised"
 msgstr "%s: no ha sido inicializado"
 
-#: Engine/insert.c:1169
+#: Engine/insert.c:1221
 #, c-format
 msgid "setksmps: invalid ksmps value: %d"
 msgstr "setksmps: valor inválido de ksmps: %d"
 
-#: Engine/insert.c:1225
+#: Engine/insert.c:1277
 #, c-format
 msgid "schedule event ignored. instr %d undefined\n"
 msgstr "evento de schedule ignorado. instr %d no definido\n"
 
-#: Engine/insert.c:1303
+#: Engine/insert.c:1355
 #, c-format
 msgid "instr %s pmax = %d, note pcnt = %d"
 msgstr ""
 
-#: Engine/insert.c:1306
+#: Engine/insert.c:1358
 #, c-format
 msgid "instr %d pmax = %d, note pcnt = %d"
 msgstr ""
 
-#: Engine/insert.c:1314
+#: Engine/insert.c:1366
 #, c-format
 msgid "psave beg at %p\n"
 msgstr ""
 
-#: Engine/insert.c:1322
+#: Engine/insert.c:1374
 #, c-format
 msgid "   ending at %p\n"
 msgstr "   terminando en %p\n"
 
-#: Engine/insert.c:1466
+#: Engine/insert.c:1518
 msgid "subinstr: not initialised"
 msgstr "subinstr: no ha sido inicializado"
 
-#: Engine/insert.c:1723
+#: Engine/insert.c:1855
 #, c-format
 msgid ""
 "instr %d allocated at %p\n"
@@ -1098,29 +1061,29 @@ msgstr ""
 "instr %d colocado en %p\n"
 "\tlclbas %p, opds %p\n"
 
-#: Engine/insert.c:1740
+#: Engine/insert.c:1872
 #, c-format
 msgid "op %d (%s) allocated at %p\n"
 msgstr "op %d (%s) colocado en %p\n"
 
-#: Engine/insert.c:1766
+#: Engine/insert.c:1898
 msgid "null iopadr"
 msgstr ""
 
-#: Engine/insert.c:1777
+#: Engine/insert.c:1909
 msgid "null opadr"
 msgstr ""
 
-#: Engine/insert.c:1834
+#: Engine/insert.c:1966
 msgid "inconsistent opds total"
 msgstr ""
 
-#: Engine/insert.c:1879
+#: Engine/insert.c:2011
 #, fuzzy, c-format
 msgid "Instrument %s is still active"
 msgstr "Intrumento %s desactivado"
 
-#: Engine/insert.c:1882
+#: Engine/insert.c:2014
 #, c-format
 msgid "Instrument %d is still active"
 msgstr "Intrumento %d desactivado"
@@ -1154,7 +1117,7 @@ msgstr "opcode desconocido '%c'"
 msgid "multiple string p-fields"
 msgstr "multiples campos-p (pfields) con cadenas"
 
-#: Engine/linevent.c:273 Engine/rdorch.c:1157
+#: Engine/linevent.c:273 Engine/rdorch.c:1184
 msgid "unmatched quotes"
 msgstr "comillas sin cerrar"
 
@@ -1216,84 +1179,84 @@ msgstr "event_i: error creando el evento '%c'"
 msgid "memory allocate failure for %lu"
 msgstr ""
 
-#: Engine/memfiles.c:112
+#: Engine/memfiles.c:113
 #, c-format
 msgid "cannot load %s\n"
 msgstr "No es posible cargar %s\n"
 
-#: Engine/memfiles.c:118
+#: Engine/memfiles.c:119
 #, c-format
 msgid "cannot load %s, or SADIR undefined\n"
 msgstr "No es posible cargar %s, o SADIR no está definido\n"
 
-#: Engine/memfiles.c:130
+#: Engine/memfiles.c:131
 #, c-format
 msgid "error processing file %s\n"
 msgstr ""
 
-#: Engine/memfiles.c:136 Engine/memfiles.c:319
+#: Engine/memfiles.c:137 Engine/memfiles.c:320
 #, c-format
 msgid "file %s (%ld bytes) loaded into memory\n"
 msgstr "archivo %s (%ld bytes) cargado en memoria\n"
 
-#: Engine/memfiles.c:199
+#: Engine/memfiles.c:200
 msgid ""
 "PVOCEX_LoadFile(): error:\n"
 "    "
 msgstr ""
 
-#: Engine/memfiles.c:216
+#: Engine/memfiles.c:217
 msgid "Empty or NULL file name"
 msgstr "Nombre de archivo vacío o nulo (NULL)"
 
-#: Engine/memfiles.c:234
+#: Engine/memfiles.c:235
 #, c-format
 msgid "unable to open pvocex file %s: %s"
 msgstr "No es posible abrir el archivo PVOC-EX %s: %s"
 
-#: Engine/memfiles.c:240
+#: Engine/memfiles.c:241
 #, c-format
 msgid "pvoc-ex file %s is not 32bit floats"
 msgstr "El archivo PVOC-EX %s no es un archivo de 32-bits punto flotante"
 
-#: Engine/memfiles.c:246
+#: Engine/memfiles.c:247
 #, c-format
 msgid "pvoc-ex file %s not in AMP_FREQ format"
 msgstr "El archivo PVOC-EX %s no está en formato AMP_FREQ"
 
-#: Engine/memfiles.c:252
+#: Engine/memfiles.c:253
 #, c-format
 msgid "pvoc-ex file %s is empty!"
 msgstr "El archivo PVOC-EX %s está vacío!"
 
-#: Engine/memfiles.c:282
+#: Engine/memfiles.c:283
 #, c-format
 msgid "error reading pvoc-ex file %s"
 msgstr "Error leyendo el archivo PVOC-EX %s"
 
-#: Engine/memfiles.c:286
+#: Engine/memfiles.c:287
 #, c-format
 msgid "error reading pvoc-ex file %s after %d frames"
 msgstr "Error leyendo el archivo PVOC-EX %s después de %d cuadros"
 
-#: Engine/memfiles.c:291 Opcodes/pvinterp.c:71 Opcodes/pvinterp.c:174
-#: Opcodes/pvinterp.c:346 Opcodes/ugens9.c:97 Opcodes/vpvoc.c:201
+#: Engine/memfiles.c:292 Opcodes/pvinterp.c:71 Opcodes/pvinterp.c:173
+#: Opcodes/pvinterp.c:344 Opcodes/ugens9.c:97 Opcodes/vpvoc.c:202
 #, c-format
 msgid "%s's srate = %8.0f, orch's srate = %8.0f"
 msgstr ""
 "tasa de muestreo de %s = %8.0f, tasa de muestreo de la orquesta = %8.0f"
 
-#: Engine/memfiles.c:389
+#: Engine/memfiles.c:390
 #, c-format
 msgid "csoundLoadSoundFile(): failed to open '%s'"
 msgstr "csoundLoadSoundFile(): No es posible abrir '%s'"
 
-#: Engine/memfiles.c:444
+#: Engine/memfiles.c:445
 #, c-format
 msgid "csoundLoadSoundFile(): error reading '%s'"
 msgstr "csoundLoadSoundFile(): Error leyendo '%s'"
 
-#: Engine/memfiles.c:450
+#: Engine/memfiles.c:451
 #, c-format
 msgid ""
 "File '%s' (sr = %d Hz, %d channel(s), %lu sample frames) loaded into memory\n"
@@ -1301,96 +1264,91 @@ msgstr ""
 "Archivo '%s' (sr = %d Hz, %d canal(es), %lu cuadros de muestra) cargado en "
 "la memoria\n"
 
-#: Engine/musmon.c:79
+#: Engine/musmon.c:81
 #, c-format
 msgid "Elapsed time at %s: real: %.3fs, CPU: %.3fs\n"
 msgstr "Tiempo transcurrido en %s: real: %.3fs, CPU: %.3fs\n"
 
-#: Engine/musmon.c:106
+#: Engine/musmon.c:108
 msgid "illegal istartempo value"
 msgstr "valor de tempo inicial (istartempo) ilegal"
 
-#: Engine/musmon.c:109
+#: Engine/musmon.c:111
 msgid "Beat mode not in force"
 msgstr ""
 
-#: Engine/musmon.c:182 Top/main.c:122
+#: Engine/musmon.c:184 Top/main.c:121
 #, c-format
 msgid "Csound version %s beta (double samples) %s\n"
 msgstr "Csound version %s beta (64-bit) %s\n"
 
-#: Engine/musmon.c:185 Top/main.c:125
+#: Engine/musmon.c:187 Top/main.c:124
 #, c-format
 msgid "Csound version %s (double samples) %s\n"
 msgstr "Csound version %s (64-bit) %s\n"
 
-#: Engine/musmon.c:190 Top/main.c:114
+#: Engine/musmon.c:192 Top/main.c:113
 #, c-format
 msgid "Csound version %s beta (float samples) %s\n"
 msgstr "Csound version %s beta (32-bit) %s\n"
 
-#: Engine/musmon.c:193 Top/main.c:117
+#: Engine/musmon.c:195 Top/main.c:116
 #, c-format
 msgid "Csound version %s (float samples) %s\n"
 msgstr "Csound version %s (32-bit) %s\n"
 
-#: Engine/musmon.c:218
+#: Engine/musmon.c:220
 msgid "orch now loaded\n"
 msgstr "orquesta cargada\n"
 
-#: Engine/musmon.c:243
+#: Engine/musmon.c:245
 msgid "k-period aligned audio buffering\n"
 msgstr ""
 
-#: Engine/musmon.c:259
+#: Engine/musmon.c:261
 #, c-format
 msgid "audio buffered in %d sample-frame blocks\n"
 msgstr ""
 
-#: Engine/musmon.c:276 Top/main.c:395
-#, c-format
-msgid "cannot reopen %s"
-msgstr "No fue posible reabrir %s"
-
-#: Engine/musmon.c:287
+#: Engine/musmon.c:283
 msgid "using Cscore processing\n"
 msgstr "usando procesamiento con Cscore\n"
 
-#: Engine/musmon.c:290
+#: Engine/musmon.c:286
 msgid "cannot create cscore.out"
 msgstr "no es posible crear cscore.out"
 
-#: Engine/musmon.c:303
+#: Engine/musmon.c:299
 msgid "cannot reopen cscore.out"
 msgstr "no es posible reabrir cscore.out"
 
-#: Engine/musmon.c:307 Engine/musmon.c:315
+#: Engine/musmon.c:303
 msgid "cannot reopen cscore.srt"
 msgstr "no es posible reabrir cscore.srt"
 
-#: Engine/musmon.c:309
+#: Engine/musmon.c:305
 msgid "sorting cscore.out ..\n"
 msgstr "ordenando cscore.out ...\n"
 
-#: Engine/musmon.c:313 Top/main.c:409
+#: Engine/musmon.c:311 Top/main.c:401
 msgid "\t... done\n"
 msgstr "\t... listo\n"
 
-#: Engine/musmon.c:317
+#: Engine/musmon.c:312
 msgid "playing from cscore.srt\n"
 msgstr ""
 
-#: Engine/musmon.c:321 Engine/musmon.c:453 Engine/musmon.c:1021
-#: Engine/musmon.c:1225
+#: Engine/musmon.c:316 Engine/musmon.c:446 Engine/musmon.c:1015
+#: Engine/musmon.c:1216
 #, c-format
 msgid "SECTION %d:\n"
 msgstr "SECCION %d:\n"
 
-#: Engine/musmon.c:397
+#: Engine/musmon.c:390
 msgid "end of score.\t\t   overall amps:"
 msgstr "fin del score.\t\t  amplitud global:"
 
-#: Engine/musmon.c:408
+#: Engine/musmon.c:401
 msgid ""
 "\n"
 "\t   overall samples out of range:"
@@ -1398,7 +1356,7 @@ msgstr ""
 "\n"
 "\t   número global de muestras fuera de rango:"
 
-#: Engine/musmon.c:412
+#: Engine/musmon.c:405
 #, c-format
 msgid ""
 "\n"
@@ -1407,113 +1365,113 @@ msgstr ""
 "\n"
 "%d errores en la ejecución\n"
 
-#: Engine/musmon.c:414
+#: Engine/musmon.c:407
 msgid "end of performance"
 msgstr "fin de la ejecución"
 
-#: Engine/musmon.c:428
+#: Engine/musmon.c:421
 msgid "no sound written to disk\n"
 msgstr "no se ecribió sonido en el disco\n"
 
-#: Engine/musmon.c:443
+#: Engine/musmon.c:436
 #, c-format
 msgid "%c\tbeep!\n"
 msgstr ""
 
-#: Engine/musmon.c:509 Engine/musmon.c:555
+#: Engine/musmon.c:502 Engine/musmon.c:548
 msgid "\t number of samples out of range:"
 msgstr "\t número de muestras fuera de rango:"
 
-#: Engine/musmon.c:548
+#: Engine/musmon.c:541
 #, c-format
 msgid "end of section %d\t sect peak amps:"
 msgstr "fin de la sección %d\t amplitud máxima de sección:"
 
-#: Engine/musmon.c:550
+#: Engine/musmon.c:543
 msgid "end of lplay event list\t      peak amps:"
 msgstr ""
 
-#: Engine/musmon.c:614 Engine/musmon.c:639
+#: Engine/musmon.c:607 Engine/musmon.c:632
 #, c-format
 msgid " - note deleted. instr %s undefined"
 msgstr " - nota descartada. Instrumento %s indefinido"
 
-#: Engine/musmon.c:618
+#: Engine/musmon.c:611
 #, c-format
 msgid "Setting instrument %s %s\n"
 msgstr ""
 
-#: Engine/musmon.c:619 Engine/musmon.c:632
+#: Engine/musmon.c:612 Engine/musmon.c:625
 #: Opcodes/fluidOpcodes/fluidOpcodes.c:207
 #: Opcodes/fluidOpcodes/fluidOpcodes.c:208
 msgid "off"
 msgstr "apagado"
 
-#: Engine/musmon.c:619 Engine/musmon.c:632
+#: Engine/musmon.c:612 Engine/musmon.c:625
 #: Opcodes/fluidOpcodes/fluidOpcodes.c:207
 #: Opcodes/fluidOpcodes/fluidOpcodes.c:208
 msgid "on"
 msgstr "prendido"
 
-#: Engine/musmon.c:627 Engine/musmon.c:666
+#: Engine/musmon.c:620 Engine/musmon.c:659
 #, c-format
 msgid " - note deleted. instr %d(%d) undefined"
 msgstr " - nota descartada. Instrumento %d(%d) indefinido"
 
-#: Engine/musmon.c:631
+#: Engine/musmon.c:624
 #, c-format
 msgid "Setting instrument %d %s\n"
 msgstr ""
 
-#: Engine/musmon.c:657
+#: Engine/musmon.c:650
 #, c-format
 msgid " - note deleted.  i%d (%s) had %d init errors"
 msgstr " - nota descartada.  i%d (%s) tuvo %d errores de inicialización"
 
-#: Engine/musmon.c:687
+#: Engine/musmon.c:680
 #, c-format
 msgid " - note deleted.  i%d had %d init errors"
 msgstr " - nota descartada.  i%d tuvo %d errores de inicialización"
 
-#: Engine/musmon.c:708
+#: Engine/musmon.c:701
 #, c-format
 msgid "time advanced %5.3f beats by score request\n"
 msgstr "avance de %5.3f tiempos por petición del score\n"
 
-#: Engine/musmon.c:725
+#: Engine/musmon.c:719
 #, c-format
 msgid "\t\t   T%7.3f - note deleted. "
 msgstr "\t\t   T%7.3f - nota descartada. "
 
-#: Engine/musmon.c:729
+#: Engine/musmon.c:723
 #, c-format
 msgid "instr %s had %d init errors\n"
 msgstr "el instrumento %s tuvo %d errores de inicialización\n"
 
-#: Engine/musmon.c:731
+#: Engine/musmon.c:725
 #, c-format
 msgid "instr %d had %d init errors\n"
 msgstr "el instrumento %d tuvo %d errores de inicialización\n"
 
-#: Engine/musmon.c:822
+#: Engine/musmon.c:816
 msgid "terminating.\n"
 msgstr "terminando.\n"
 
-#: Engine/musmon.c:908
+#: Engine/musmon.c:902
 #, c-format
 msgid "error in score.  illegal opcode %c (ASCII %d)\n"
 msgstr "error en el score.  opcode ilegal %c (ASCII %d)\n"
 
-#: Engine/musmon.c:1135
+#: Engine/musmon.c:1129
 msgid "insert_score_event(): invalid instrument number or name\n"
 msgstr "insert_score_event(): número o nombre de instrumento inválido\n"
 
-#: Engine/musmon.c:1155
+#: Engine/musmon.c:1149
 #, c-format
 msgid "insert_score_event(): unknown opcode: %c\n"
 msgstr "insert_score_event(): opcode desconocido: %c\n"
 
-#: Engine/musmon.c:1178
+#: Engine/musmon.c:1172
 msgid "insert_score_event(): insufficient p-fields\n"
 msgstr "insert_score_event(): faltan campos-p (p-fields)\n"
 
@@ -1536,28 +1494,48 @@ msgstr ""
 msgid "cannot find the specified instrument or opcode"
 msgstr "No se puede encontrar el instrumento o opcode especificado"
 
-#: Engine/new_orc_parser.c:74 Engine/rdorch.c:488
+#: Engine/new_orc_parser.c:91
+#, fuzzy
+msgid "Unmatched #ifdef\n"
+msgstr ""
+
+#: Engine/otran.c:149 Engine/symbtab.c:413
 #, c-format
-msgid "cannot open orch file %s"
-msgstr "No es posible abrir el archivo de orquesta %s"
+msgid "invalid input type for opcode %s"
+msgstr ""
+
+#: Engine/otran.c:154 Engine/symbtab.c:418
+#, fuzzy, c-format
+msgid "too many input args for opcode %s"
+msgstr "demasiados argumentos de entrada %s"
+
+#: Engine/otran.c:169 Engine/symbtab.c:433
+#, c-format
+msgid "too many output args for opcode %s"
+msgstr ""
+
+#: Engine/otran.c:194 Engine/symbtab.c:458
+#, c-format
+msgid "invalid output type for opcode %s"
+msgstr ""
 
-#: Engine/otran.c:312 Engine/otran.c:319
+#: Engine/otran.c:325 Engine/otran.c:332
 msgid "missing instrument number or name"
 msgstr "falta número o nombre de instrumento"
 
-#: Engine/otran.c:324
+#: Engine/otran.c:337
 msgid "illegal instr number"
 msgstr "número de instrumento ilegal"
 
-#: Engine/otran.c:374
+#: Engine/otran.c:388
 msgid "No opcode name"
 msgstr ""
 
-#: Engine/otran.c:379 Engine/symbtab.c:501
+#: Engine/otran.c:393 Engine/symbtab.c:538
 msgid "invalid name for opcode"
 msgstr "nombre inválido para opcode"
 
-#: Engine/otran.c:383
+#: Engine/otran.c:397
 #, c-format
 msgid ""
 "opcode declaration error (usage: opcode name, outtypes, intypes) -- opcode %s"
@@ -1565,331 +1543,364 @@ msgstr ""
 "error en la declaración de opcode (uso: nombre de opcode, tipos de salida "
 "(outtypes), tipos de entrada (intypes)) -- opcode %s"
 
-#: Engine/otran.c:394 Engine/symbtab.c:511
+#: Engine/otran.c:408 Engine/symbtab.c:548
 #, c-format
 msgid "cannot redefine %s"
 msgstr "no es posible redefinir %s"
 
-#: Engine/otran.c:398 Engine/symbtab.c:516
+#: Engine/otran.c:412 Engine/symbtab.c:553
 #, c-format
 msgid "WARNING: redefined opcode: %s\n"
 msgstr "ATENCION: redefinición de opcode: %s\n"
 
-#: Engine/otran.c:489
+#: Engine/otran.c:503
 msgid "string constant used as output"
 msgstr ""
 
-#: Engine/otran.c:520
+#: Engine/otran.c:534
 msgid "Missing endin"
 msgstr "Falta endin"
 
-#: Engine/otran.c:584
+#: Engine/otran.c:599
 msgid "perf-pass statements illegal in header blk"
 msgstr ""
 
-#: Engine/otran.c:588
+#: Engine/otran.c:603
 #, c-format
 msgid "%d syntax errors in orchestra.  compilation invalid"
 msgstr "%d errores de sintaxis en la orquesta. Compilación inválida"
 
-#: Engine/otran.c:1238
+#: Engine/otran.c:1257
 msgid "bad value for 0dbfs: must be positive."
 msgstr "valor incorrecto para 0dbfs: debe ser positivo."
 
-#: Engine/otran.c:1248
+#: Engine/otran.c:1267
 #, c-format
 msgid "sample rate overrides: esr = %7.4f, ekr = %7.4f, ksmps = %d\n"
 msgstr ""
 
-#: Engine/otran.c:1320
+#: Engine/otran.c:1339
 msgid "internal error: string constant outarg"
 msgstr ""
 
-#: Engine/otran.c:1346
+#: Engine/otran.c:1365
 #, c-format
 msgid "i%d pset args != pmax"
 msgstr ""
 
-#: Engine/otran.c:1409
+#: Engine/otran.c:1428
 #, c-format
 msgid ""
 "sr = %.7g, kr = %.7g, ksmps = %.7g\n"
 "error:"
 msgstr ""
 
-#: Engine/otran.c:1442
+#: Engine/otran.c:1461
 msgid "header init errors"
 msgstr "errores de inicialización en el encabezado"
 
-#: Engine/rdorch.c:166
+#: Engine/rdorch.c:169
 msgid "ungetorchar(): buffer overflow"
 msgstr ""
 
-#: Engine/rdorch.c:330
+#: Engine/rdorch.c:348
 msgid "Unexpected end of orchestra file"
 msgstr "Fin inesperado en el archivo de orquesta"
 
-#: Engine/rdorch.c:484
+#: Engine/rdorch.c:431 Engine/sread.c:758
+#, c-format
+msgid "Macro definition for %*s\n"
+msgstr "Definición del macro %*s\n"
+
+#: Engine/rdorch.c:434
+msgid "Invalid macro name for --omacro"
+msgstr "Nombre de macro inválido para --omacro"
+
+#: Engine/rdorch.c:502
 msgid "orch compiler:\n"
 msgstr "compilador de orquesta: \n"
 
-#: Engine/rdorch.c:490
-#, c-format
-msgid "cannot find end of file %s"
-msgstr "No se puede encontrar el final del archivo %s"
-
-#: Engine/rdorch.c:492
+#: Engine/rdorch.c:520
 #, c-format
-msgid "ftell error on %s"
-msgstr "ftell error en %s"
+msgid "cannot open orch file %s"
+msgstr "No es posible abrir el archivo de orquesta %s"
 
-#: Engine/rdorch.c:657 Engine/sread.c:1572
+#: Engine/rdorch.c:684 Engine/sread.c:1584
 #, c-format
 msgid "Macro definition for %s\n"
 msgstr "Definición del macro %s\n"
 
-#: Engine/rdorch.c:748
+#: Engine/rdorch.c:716 Engine/sread.c:1607
+msgid "macro error\n"
+msgstr "error de macro\n"
+
+#: Engine/rdorch.c:775
 #, c-format
 msgid "Cannot open #include'd file %s\n"
 msgstr "No se puede abrir el archivo pedido por #include %s\n"
 
-#: Engine/rdorch.c:797
+#: Engine/rdorch.c:824
 msgid "unmatched #ifdef"
 msgstr ""
 
-#: Engine/rdorch.c:808
+#: Engine/rdorch.c:835
 msgid "Unmatched #else"
 msgstr ""
 
-#: Engine/rdorch.c:822
+#: Engine/rdorch.c:849
 msgid "Unmatched #endif"
 msgstr ""
 
-#: Engine/rdorch.c:875
+#: Engine/rdorch.c:872 Engine/sread.c:1694
+#, c-format
+msgid "macro %s undefined\n"
+msgstr "el macro %s no está definido\n"
+
+#: Engine/rdorch.c:886 Engine/sread.c:286
+msgid "Undefining undefined macro"
+msgstr ""
+
+#: Engine/rdorch.c:902
 msgid "Unexpected # character"
 msgstr "Caracter # inesperado"
 
-#: Engine/rdorch.c:877
+#: Engine/rdorch.c:904
 #, c-format
 msgid "Unknown # option: '%s'"
 msgstr "Opción para # desconocida: '%s'"
 
-#: Engine/rdorch.c:903 Engine/sread.c:394
+#: Engine/rdorch.c:928 Engine/sread.c:380
+#, c-format
+msgid "Undefined macro: '%s'"
+msgstr "Macro indefinido: '%s'"
+
+#: Engine/rdorch.c:930 Engine/sread.c:378
 msgid "Macro expansion symbol ($) without macro name"
 msgstr "Símbolo de expansión de macro ($) sin nombre de macro"
 
-#: Engine/rdorch.c:908 Engine/sread.c:400
+#: Engine/rdorch.c:935 Engine/sread.c:384
 #, c-format
 msgid "$%s matches macro name $%s"
 msgstr "$%s coincide con el nombre de macro $%s"
 
-#: Engine/rdorch.c:925 Engine/sread.c:417
+#: Engine/rdorch.c:952 Engine/sread.c:401
 msgid "Syntax error in macro call"
 msgstr "Error de sintaxis en llamada de macro"
 
-#: Engine/rdorch.c:975
+#: Engine/rdorch.c:967
+#, c-format
+msgid ""
+"Missing argument terminator\n"
+"%.98s"
+msgstr ""
+
+#: Engine/rdorch.c:1002
 msgid "Unmatched #ifdef"
 msgstr ""
 
-#: Engine/rdorch.c:977
+#: Engine/rdorch.c:1004
 msgid "file too large for ortext space"
 msgstr "el archivo es demasiado grande para el espacio ortext"
 
-#: Engine/rdorch.c:984
+#: Engine/rdorch.c:1011
 #, c-format
 msgid "%d (%d) lines read\n"
 msgstr "%d (%d) líneas leídas\n"
 
-#: Engine/rdorch.c:1052
+#: Engine/rdorch.c:1079
 #, c-format
 msgid "LINE %d:"
 msgstr "LINEA %d:"
 
-#: Engine/rdorch.c:1071
+#: Engine/rdorch.c:1098
 msgid "invalid 'elseif' statement.  must have a corresponding 'if'"
 msgstr "enunciado 'elseif' inválido. Falta el 'if' correspondiente"
 
-#: Engine/rdorch.c:1078
+#: Engine/rdorch.c:1105
 msgid "'elseif' statement cannot occur after an 'else'"
 msgstr "el enunciado 'elseif' no puede aparecer después de un 'else'"
 
-#: Engine/rdorch.c:1134
+#: Engine/rdorch.c:1161
 msgid "Unmatched comment"
 msgstr ""
 
-#: Engine/rdorch.c:1198
+#: Engine/rdorch.c:1225
 msgid "misplaced comma"
 msgstr "coma mal colocada"
 
-#: Engine/rdorch.c:1200 Engine/rdorch.c:1342 Engine/rdorch.c:1440
+#: Engine/rdorch.c:1227 Engine/rdorch.c:1369 Engine/rdorch.c:1467
 msgid "unbalanced parens"
 msgstr "paréntesis desbalanceados"
 
-#: Engine/rdorch.c:1364
+#: Engine/rdorch.c:1391
 #, c-format
 msgid "illegal character %c"
 msgstr "caracter ilegal %c"
 
-#: Engine/rdorch.c:1377
+#: Engine/rdorch.c:1404
 msgid "invalid 'else' statement.  must have a corresponding 'if'"
 msgstr "enunciado 'else' inválido, debe tener un 'if' correspondiente"
 
-#: Engine/rdorch.c:1384
+#: Engine/rdorch.c:1411
 msgid "duplicate 'else' statement"
 msgstr "enunciado 'else' duplicado"
 
-#: Engine/rdorch.c:1413
+#: Engine/rdorch.c:1440
 msgid "invalid 'endif' statement.  must have a corresponding 'if'"
 msgstr "enunciado 'endif' inválido, debe tener un 'if' correspondiente"
 
-#: Engine/rdorch.c:1442
+#: Engine/rdorch.c:1469
 msgid "no legal opcode"
 msgstr "no es un opcode legal"
 
-#: Engine/rdorch.c:1573
+#: Engine/rdorch.c:1600
 msgid "illegal opcod from expr anal"
 msgstr "opcode ilegal según análisis de la expresión"
 
-#: Engine/rdorch.c:1606 Engine/rdorch.c:1628
+#: Engine/rdorch.c:1633 Engine/rdorch.c:1655
 #, c-format
 msgid "failed to find %s, output arg '%s' illegal type"
 msgstr "no se encontró %s, argumento de salida '%s' tiene tipo ilegal"
 
-#: Engine/rdorch.c:1670
+#: Engine/rdorch.c:1697
 #, c-format
 msgid "failed to find %s, input arg illegal type"
 msgstr "no se encontró %s, argumento de entrada tiene tipo ilegal"
 
-#: Engine/rdorch.c:1684
+#: Engine/rdorch.c:1711
 msgid "setksmps is allowed only in user defined opcodes"
 msgstr ""
 "setksmps solo está permitido en opcodes definidos por el usuario (UDOs)"
 
-#: Engine/rdorch.c:1687
+#: Engine/rdorch.c:1714
 msgid "multiple uses of setksmps in the same opcode definition"
 msgstr "uso de multiples setksmps en la misma definición de opcode"
 
-#: Engine/rdorch.c:1710
+#: Engine/rdorch.c:1739
 #, c-format
 msgid "%s inconsistent with global nchnls (%d); replaced with %s\n"
 msgstr ""
 "%s inconsistente con el número nchnls de canales (%d), reemplazado por %s\n"
 
-#: Engine/rdorch.c:1740
+#: Engine/rdorch.c:1770
 msgid "opcode blks cannot be nested (missing 'endop'?)"
 msgstr ""
 "los bloques de opcode no pueden estar uno dentro de otro (falta 'endop'?)"
 
-#: Engine/rdorch.c:1742
+#: Engine/rdorch.c:1772
 msgid "opcode not allowed in instr block"
 msgstr "el opcode no está permitido dentro de un bloque de instrumento"
 
-#: Engine/rdorch.c:1751
+#: Engine/rdorch.c:1781
 msgid "unmatched endop"
 msgstr ""
 
-#: Engine/rdorch.c:1753
+#: Engine/rdorch.c:1783
 msgid "endop not allowed in instr block"
 msgstr "endop no está permitido dentro de un bloque de instrumento"
 
-#: Engine/rdorch.c:1758
+#: Engine/rdorch.c:1788
 msgid "instr not allowed in opcode block"
 msgstr "instr no está permitido dentro de un bloque de opcode"
 
-#: Engine/rdorch.c:1761
+#: Engine/rdorch.c:1791
 msgid "instr blocks cannot be nested (missing 'endin'?)"
 msgstr ""
 "los bloques de instr no pueden estar uno dentro de otro (falta 'endin'?)"
 
-#: Engine/rdorch.c:1769
+#: Engine/rdorch.c:1799
 msgid "endin not allowed in opcode blk"
 msgstr "endin no está permitido dentro de un bloque de opcode"
 
-#: Engine/rdorch.c:1771
+#: Engine/rdorch.c:1801
 msgid "unmatched endin"
 msgstr "endin sin complemento"
 
-#: Engine/rdorch.c:1781
+#: Engine/rdorch.c:1811
 msgid "misplaced opcode"
 msgstr "opcode mal colocado"
 
-#: Engine/rdorch.c:1787
+#: Engine/rdorch.c:1817
 msgid "xout is allowed only in user defined opcodes"
 msgstr ""
 "xout solo está permitido dentro de opcodes definidos por el usuario (UDOs)"
 
-#: Engine/rdorch.c:1790
+#: Engine/rdorch.c:1820
 msgid "multiple uses of xout in the same opcode definition"
 msgstr "uso de multiples xout en la misma definición de opcode"
 
-#: Engine/rdorch.c:1837
+#: Engine/rdorch.c:1867
 msgid "too many input args"
 msgstr "demasiados argumentos de entrada"
 
-#: Engine/rdorch.c:1909
-#, c-format
-msgid "input arg '%s' used before defined"
-msgstr "argumento de entrada '%s' usado antes de ser definido"
+#: Engine/rdorch.c:1893
+msgid "insufficient required arguments"
+msgstr "número insuficiente de argumentos requeridos"
+
+#: Engine/rdorch.c:1940
+#, fuzzy, c-format
+msgid "input arg '%s' used before defined \n"
+msgstr "argumento de entrada '%s' usado antes de ser definido\n"
 
-#: Engine/rdorch.c:1956
+#: Engine/rdorch.c:1987
 msgid "xin is allowed only in user defined opcodes"
 msgstr ""
 "xin solo está permitido dentro de opcodes definidos por el usuario (UDOs)"
 
-#: Engine/rdorch.c:1959
+#: Engine/rdorch.c:1990
 msgid "multiple uses of xin in the same opcode definition"
 msgstr "uso de multiples xin en la misma definición de opcode"
 
-#: Engine/rdorch.c:2004
+#: Engine/rdorch.c:2035
 msgid "illegal no of output args"
 msgstr "número ilegal de argumentos de salida"
 
-#: Engine/rdorch.c:2023
+#: Engine/rdorch.c:2054
 #, c-format
 msgid "output name previously used, type '%c' must be uniquely defined"
 msgstr ""
 "nombre de salida usado previamente, el tipo '%c' debe estar definido una "
 "sola vez"
 
-#: Engine/rdorch.c:2028
+#: Engine/rdorch.c:2059
 #, c-format
 msgid "output arg '%s' illegal type"
 msgstr "tipo ilegal de argumento de salida '%s'"
 
-#: Engine/rdorch.c:2069
+#: Engine/rdorch.c:2100
 #, c-format
 msgid "input arg '%s' of type %s not allowed when expecting %c"
 msgstr "argumento de entrada '%s' de tipo %s no se permite porque se espera %c"
 
-#: Engine/rdorch.c:2155
+#: Engine/rdorch.c:2187
 msgid "duplicate label"
 msgstr "etiquieta (label) duplicada"
 
-#: Engine/rdorch.c:2177
+#: Engine/rdorch.c:2209
 #, c-format
 msgid "error line %d.  unknown label:\n"
 msgstr "error línea %d.  etiqueta desconocida:\n"
 
-#: Engine/rdorch.c:2192 Engine/rdorch.c:2239
+#: Engine/rdorch.c:2222 Engine/rdorch.c:2271
 msgid "error:  "
 msgstr ""
 
-#: Engine/rdorch.c:2208
+#: Engine/rdorch.c:2239
 #, c-format
 msgid ", line %d:\n"
 msgstr ", línea %d:\n"
 
-#: Engine/rdorch.c:2246
+#: Engine/rdorch.c:2278
 #, c-format
 msgid "called from line %d of macro %s"
 msgstr "llamado desde la línea %d del macro %s"
 
-#: Engine/rdorch.c:2250
+#: Engine/rdorch.c:2282
 #, c-format
 msgid "in line %d of file input %s"
 msgstr "en la línea %d del archivo de entrada %s"
 
-#: Engine/rdscor.c:79
+#: Engine/rdscor.c:80
 #, c-format
 msgid "ERROR: illegal character %c(%.2x) in scoreline: "
 msgstr "ERROR: caracter ilegal %c(%.2x) en línea del score: "
@@ -1902,7 +1913,7 @@ msgstr ""
 "\n"
 "\tel resto de la línea descartada\n"
 
-#: Engine/rdscor.c:144
+#: Engine/rdscor.c:146
 msgid "ERROR: too many pfields: "
 msgstr "ERROR: demasidados campos-p (pfields): "
 
@@ -1928,349 +1939,316 @@ msgstr "error en el score:  "
 msgid "  section %d:  at position %d%s"
 msgstr ""
 
-#: Engine/sread.c:217
+#: Engine/sread.c:216
 msgid "Internal error in print_input_backtrace()"
 msgstr ""
 
-#: Engine/sread.c:219
+#: Engine/sread.c:218
 #, c-format
 msgid "  included from line %d of macro %s%s"
 msgstr "llamado desde la línea %d del macro %s"
 
-#: Engine/sread.c:220
+#: Engine/sread.c:219
 #, c-format
 msgid "  called from line %d of macro %s%s"
 msgstr "llamado desde la línea %d del macro %s"
 
-#: Engine/sread.c:222
+#: Engine/sread.c:221
 #, c-format
 msgid "  in line %d of macro %s%s"
 msgstr "llamado desde la línea %d del macro %s"
 
-#: Engine/sread.c:229
-#, c-format
-msgid "  included from line %d of file input %s%s"
-msgstr "en la línea %d del archivo de entrada %s"
-
-#: Engine/sread.c:230
-#, c-format
-msgid "  called from line %d of file input %s%s"
-msgstr "en la línea %d del archivo de entrada %s"
-
-#: Engine/sread.c:232
-#, c-format
-msgid "  in line %d of file input %s%s"
-msgstr "en la línea %d del archivo de entrada %s"
-
-#: Engine/sread.c:268
+#: Engine/sread.c:256
 #, c-format
 msgid "Internal error op=%c"
 msgstr "error interno op=%c"
 
-#: Engine/sread.c:322
-msgid "ungetscochar(): buffer overflow"
-msgstr ""
-
-#: Engine/sread.c:479
+#: Engine/sread.c:464
 msgid "illegal placement of number in [] expression"
 msgstr ""
 
-#: Engine/sread.c:506
+#: Engine/sread.c:491
 msgid "illegal placement of operator ~ in [] expression"
 msgstr ""
 
-#: Engine/sread.c:516
+#: Engine/sread.c:501
 msgid "illegal placement of operator @ or @@ in [] expression"
 msgstr ""
 
-#: Engine/sread.c:548 Engine/sread.c:562
+#: Engine/sread.c:533 Engine/sread.c:547
 #, c-format
 msgid "illegal placement of operator %c in [] expression"
 msgstr ""
 
-#: Engine/sread.c:574
+#: Engine/sread.c:559
 msgid "illegal placement of '(' in [] expression"
 msgstr ""
 
-#: Engine/sread.c:580
+#: Engine/sread.c:565
 msgid "missing operand before ')' in [] expression"
 msgstr ""
 
-#: Engine/sread.c:594
+#: Engine/sread.c:579
 msgid "missing operand before closing bracket in []"
 msgstr ""
 
-#: Engine/sread.c:609
+#: Engine/sread.c:594
 #, c-format
 msgid "illegal character %c(%.2x) in [] expression"
 msgstr ""
 
-#: Engine/sread.c:658
+#: Engine/sread.c:646
 #, c-format
 msgid "%s Nested LOOP terminated, level:%d\n"
 msgstr ""
 
-#: Engine/sread.c:664
+#: Engine/sread.c:652
 #, c-format
 msgid "External LOOP terminated, level:%d\n"
 msgstr ""
 
-#: Engine/sread.c:684
+#: Engine/sread.c:696
 #, c-format
 msgid "%s  Nested LOOP section (%d) Level:%d\n"
 msgstr ""
 
-#: Engine/sread.c:689
+#: Engine/sread.c:701
 #, c-format
 msgid " External LOOP section (%d) Level:%d\n"
 msgstr ""
 
-#: Engine/sread.c:703
+#: Engine/sread.c:715
 msgid "Loop terminated\n"
 msgstr ""
 
-#: Engine/sread.c:716
+#: Engine/sread.c:733
 #, c-format
 msgid "Repeat section (%d)\n"
 msgstr "Sección repetida (%d)\n"
 
-#: Engine/sread.c:719
+#: Engine/sread.c:736
 msgid "Repeat section\n"
 msgstr "Sección repetida\n"
 
-#: Engine/sread.c:744
+#: Engine/sread.c:761
 msgid "Invalid macro name for --smacro"
 msgstr "Nombre de macro inválido para --smacro"
 
-#: Engine/sread.c:831
+#: Engine/sread.c:865
 #, c-format
 msgid "Clockbase = %f\n"
 msgstr "Base de reloj = %f\n"
 
-#: Engine/sread.c:898
+#: Engine/sread.c:934
 msgid "Loops are nested too deeply"
 msgstr ""
 
-#: Engine/sread.c:901
-msgid "Loop cannot start inside of a macro"
-msgstr ""
-
-#: Engine/sread.c:920
+#: Engine/sread.c:948
 msgid "{: invalid repeat count"
 msgstr "sread: {: número inválido de repeticiones"
 
-#: Engine/sread.c:929
+#: Engine/sread.c:957
 #, c-format
 msgid "%s Nested LOOP=%d Level:%d\n"
 msgstr ""
 
-#: Engine/sread.c:935
+#: Engine/sread.c:963
 #, c-format
 msgid "External LOOP=%d Level:%d\n"
 msgstr ""
 
-#: Engine/sread.c:1004
-msgid "Repeat cannot start inside of a macro (ignored)"
-msgstr ""
-
-#: Engine/sread.c:1019
+#: Engine/sread.c:1047
 msgid "r: invalid repeat count"
 msgstr "r: número inválido de repeticiones"
 
-#: Engine/sread.c:1021
+#: Engine/sread.c:1049
 #, c-format
 msgid "Repeats=%d\n"
 msgstr "Repeticiones=%d\n"
 
-#: Engine/sread.c:1063
+#: Engine/sread.c:1093
 #, c-format
 msgid "Named section >>>%s<<<\n"
 msgstr "Sección con nombre >>>%s<<<\n"
 
-#: Engine/sread.c:1079
+#: Engine/sread.c:1108
 #, c-format
 msgid "%d: File %s position %ld\n"
 msgstr "%d: Archivo %s posición %ld\n"
 
-#: Engine/sread.c:1085
-#, c-format
-msgid "Ignoring name %s not in file\n"
-msgstr "Ignorando nombre %s, no está en el archivo\n"
-
-#: Engine/sread.c:1110
+#: Engine/sread.c:1133
 #, c-format
 msgid "Name %s not found"
 msgstr "Nombre %s no encontrado"
 
-#: Engine/sread.c:1112
+#: Engine/sread.c:1135
 #, c-format
 msgid "Duplicate %d: %s (%s,%ld)\n"
 msgstr "%d duplicado: %s (%s,%ld)\n"
 
-#: Engine/sread.c:1129
-#, c-format
-msgid "cannot open input file %s"
-msgstr "No es posible abrir el archivo de entrada %s"
-
-#: Engine/sread.c:1149
+#: Engine/sread.c:1164
 #, c-format
 msgid "Warp_factor = %f\n"
 msgstr ""
 
-#: Engine/sread.c:1174
+#: Engine/sread.c:1189
 msgid "sread is confused on legal opcodes\n"
 msgstr ""
 
-#: Engine/sread.c:1236
+#: Engine/sread.c:1251
 msgid "No previous event for ^"
 msgstr "No hay evento previo en ^"
 
-#: Engine/sread.c:1241
+#: Engine/sread.c:1256
 #, c-format
 msgid "illegal space following %s, zero substituted"
 msgstr ""
 
-#: Engine/sread.c:1271
+#: Engine/sread.c:1286
 #, c-format
 msgid "ignoring '%s' in '%c' event"
 msgstr ""
 
-#: Engine/sread.c:1274
+#: Engine/sread.c:1289
 msgid "! invalid in p1, p2, or p3"
 msgstr ""
 
-#: Engine/sread.c:1275 Engine/sread.c:1280 Engine/sread.c:1730
-#: Engine/sread.c:1753 Engine/sread.c:1767
+#: Engine/sread.c:1290 Engine/sread.c:1295 Engine/sread.c:1738
+#: Engine/sread.c:1761 Engine/sread.c:1775
 msgid "      remainder of line flushed\n"
 msgstr "      el resto de la línea descartado\n"
 
-#: Engine/sread.c:1279
+#: Engine/sread.c:1294
 #, c-format
 msgid "illegal character after !: '%c'"
 msgstr ""
 
-#: Engine/sread.c:1358
+#: Engine/sread.c:1373
 #, c-format
 msgid "WARNING: instr %s not found, assuming insno = -1\n"
 msgstr "ATENCION: instr %s no encontrado, asumiendo insno = -1\n"
 
-#: Engine/sread.c:1378
+#: Engine/sread.c:1393
 msgid "sread: illegal use of carry,   0 substituted\n"
 msgstr ""
 
-#: Engine/sread.c:1526
+#: Engine/sread.c:1539
 msgid "Improper \\"
 msgstr ""
 
-#: Engine/sread.c:1558
+#: Engine/sread.c:1570
 msgid "Not #define"
 msgstr ""
 
-#: Engine/sread.c:1620
+#: Engine/sread.c:1630
 #, c-format
 msgid "Macro %s with %d arguments defined\n"
 msgstr "Macro %s con %d argumentos definido \n"
 
-#: Engine/sread.c:1631
+#: Engine/sread.c:1642
 msgid "Not #include"
 msgstr ""
 
-#: Engine/sread.c:1662
+#: Engine/sread.c:1671
 #, c-format
 msgid "Cannot open #include'd file %s"
 msgstr ""
 
-#: Engine/sread.c:1673
+#: Engine/sread.c:1681
 msgid "Not #undef"
 msgstr ""
 
-#: Engine/sread.c:1692
+#: Engine/sread.c:1700
 msgid "unknown # option"
 msgstr "Opción # desconocida"
 
-#: Engine/sread.c:1729
+#: Engine/sread.c:1737
 #, c-format
 msgid "illegal opcode %c"
 msgstr "no es un opcode legal"
 
-#: Engine/sread.c:1752
+#: Engine/sread.c:1760
 #, c-format
 msgid "unexpected char %c"
 msgstr ""
 
-#: Engine/sread.c:1766
+#: Engine/sread.c:1774
 msgid "illegally placed string"
 msgstr ""
 
-#: Engine/sread.c:1773
+#: Engine/sread.c:1781
 msgid "unmatched quote"
 msgstr "comillas sin cerrar"
 
-#: Engine/sread.c:1817
+#: Engine/sread.c:1825
 msgid "sread: illegal number format:  "
 msgstr ""
 
-#: Engine/sread.c:1823
+#: Engine/sread.c:1831
 msgid "   zero substituted.\n"
 msgstr "   sustituído por cero.\n"
 
-#: Engine/swrite.c:123
+#: Engine/swrite.c:123 Engine/swritestr.c:134
 #, c-format
 msgid "swrite: unexpected opcode, section %d line %d\n"
 msgstr ""
 
-#: Engine/swrite.c:209 Engine/swrite.c:249
+#: Engine/swrite.c:209 Engine/swrite.c:249 Engine/swritestr.c:220
+#: Engine/swritestr.c:260
 #, c-format
 msgid "swrite: output, sect%d line%d p%d makes illegal reference to "
 msgstr ""
 
-#: Engine/swrite.c:216 Engine/swrite.c:255
+#: Engine/swrite.c:216 Engine/swrite.c:255 Engine/swritestr.c:227
+#: Engine/swritestr.c:266
 msgid "   Zero substituted\n"
 msgstr "    Sustituído por cero.\n"
 
-#: Engine/swrite.c:313
+#: Engine/swrite.c:313 Engine/swritestr.c:324
 #, c-format
 msgid "swrite: output, sect%d line%d p%d has illegal ramp symbol\n"
 msgstr ""
 
-#: Engine/swrite.c:317
+#: Engine/swrite.c:317 Engine/swritestr.c:328
 #, c-format
 msgid ""
 "swrite: output, sect%d line%d p%d ramp has illegal forward or backward ref\n"
 msgstr ""
 
-#: Engine/swrite.c:380 Engine/swrite.c:445
+#: Engine/swrite.c:380 Engine/swrite.c:445 Engine/swritestr.c:391
+#: Engine/swritestr.c:456
 #, c-format
 msgid "swrite: output, sect%d line%d p%d has illegal expramp symbol\n"
 msgstr ""
 
-#: Engine/swrite.c:385 Engine/swrite.c:450
+#: Engine/swrite.c:385 Engine/swrite.c:450 Engine/swritestr.c:396
+#: Engine/swritestr.c:461
 #, c-format
 msgid ""
 "swrite: output, sect%d line%d p%d expramp has illegal forward or backward "
 "ref\n"
 msgstr ""
 
-#: Engine/swrite.c:466
+#: Engine/swrite.c:466 Engine/swritestr.c:477
 #, c-format
 msgid "swrite: output, sect%d line%d p%d has illegally terminated string   "
 msgstr ""
 
-#: Engine/swrite.c:514
+#: Engine/swrite.c:514 Engine/swritestr.c:529
 #, c-format
 msgid "swrite: output, sect%d line%d p%d has illegal number  "
 msgstr ""
 
-#: Engine/swrite.c:521
+#: Engine/swrite.c:521 Engine/swritestr.c:536
 msgid "    String truncated\n"
 msgstr "    Cadena truncada\n"
 
-#: Engine/symbtab.c:202
+#: Engine/symbtab.c:208
 #, c-format
 msgid "Type confusion for %s (%d,%d), replacing\n"
 msgstr ""
 
-#: Engine/symbtab.c:333
+#: Engine/symbtab.c:345
 #, c-format
 msgid "Unknown word type for %s on line %d\n"
 msgstr ""
@@ -2291,6 +2269,14 @@ msgstr ""
 msgid "twarp: t segments exceed twarp array\n"
 msgstr ""
 
+#: InOut/cmidi.c:233
+msgid "CoreMIDI real time MIDI plugin for Csound\n"
+msgstr ""
+
+#: InOut/cmidi.c:247
+msgid "rtmidi: CoreMIDI module enabled\n"
+msgstr ""
+
 #: InOut/libsnd.c:486
 msgid "error: no input file name"
 msgstr "error: hay nombre del archivo de entrada"
@@ -2314,44 +2300,59 @@ msgstr "audio_in %s tiene sr = %d, la orquesta tiene sr = %d"
 msgid "audio_in %s has %d chnls, orch %d chnls_i"
 msgstr "audio_in %s tiene %d canal(es), la orquesta tiene %d"
 
-#: InOut/libsnd.c:573
+#: InOut/libsnd.c:574
+#, c-format
+msgid "reading %d sample blks of %d-bit floats from %s \n"
+msgstr ""
+
+#: InOut/libsnd.c:578
 #, c-format
 msgid "reading %d-byte blks of %s from %s (%s)\n"
 msgstr ""
 
-#: InOut/libsnd.c:608
+#: InOut/libsnd.c:614
 msgid "Output file type changed to IRCAM for use in pipe\n"
 msgstr ""
 
-#: InOut/libsnd.c:628
+#: InOut/libsnd.c:634
 msgid "Failed to initialise real time audio output"
 msgstr "No se puede iniciar la salida de audio en tiempo real"
 
-#: InOut/libsnd.c:669 InOut/libsnd.c:673
+#: InOut/libsnd.c:675 InOut/libsnd.c:679
 #, c-format
 msgid "sfinit: cannot open %s"
 msgstr "sfinit: no se puede abrir %s"
 
-#: InOut/libsnd.c:733 util/srconv.c:485
+#: InOut/libsnd.c:741
+#, fuzzy, c-format
+msgid "writing %d sample blks of %d-bit floats to %s \n"
+msgstr ""
+
+#: InOut/libsnd.c:744 util/srconv.c:484
 #, c-format
 msgid "writing %d-byte blks of %s to %s"
 msgstr "escribiendo bloques de %d bytes de %s a %s"
 
-#: InOut/libsnd.c:740 InOut/libsnd.c:810
+#: InOut/libsnd.c:749 InOut/libsnd.c:824
 msgid " (raw)\n"
 msgstr ""
 
-#: InOut/libsnd.c:803
+#: InOut/libsnd.c:815
 #, c-format
-msgid "%ld %d-byte soundblks of %s written to %s"
+msgid "%ld %d sample blks of %d-bit floats written to %s\n"
 msgstr ""
 
-#: InOut/libsnd.c:822
+#: InOut/libsnd.c:820
+#, fuzzy, c-format
+msgid "%ld %d sample blks of %s written to %s"
+msgstr "escribiendo %ld bloques de %d bytes de %s a %s"
+
+#: InOut/libsnd.c:837
 #, c-format
 msgid "soundfile write returned bytecount of %d, not %d"
 msgstr ""
 
-#: InOut/libsnd.c:825
+#: InOut/libsnd.c:840
 msgid ""
 "(disk may be full...\n"
 " closing the file ...)"
@@ -2359,11 +2360,11 @@ msgstr ""
 "(el disco parece estar lleno...\n"
 " cerrando el archivo ...)"
 
-#: InOut/libsnd.c:828 util/dnoise.c:1192
+#: InOut/libsnd.c:843 util/dnoise.c:1177
 msgid "\t... closed\n"
 msgstr "\t... cerrado\n"
 
-#: InOut/libsnd.c:834
+#: InOut/libsnd.c:849
 msgid "not writing to sound disk\n"
 msgstr "No se escribe sonido en el disco\n"
 
@@ -2763,20 +2764,20 @@ msgstr "Error cerrando el dispositivo de entrada MIDI: %d (%s)"
 msgid "Error closing MIDI out device: %d (%s)"
 msgstr "Error cerrando el dispositivo de salida MIDI: %d (%s)"
 
-#: InOut/midisend.c:171
+#: InOut/midisend.c:170
 msgid " *** no callback for opening MIDI output"
 msgstr ""
 
-#: InOut/midisend.c:173
+#: InOut/midisend.c:172
 msgid " *** no callback for writing MIDI data"
 msgstr ""
 
-#: InOut/midisend.c:179
+#: InOut/midisend.c:178
 #, c-format
 msgid " *** error opening MIDI out device: %d (%s)"
 msgstr " *** error abriendo el dispositivo de salida MIDI: %d (%s)"
 
-#: InOut/midisend.c:190
+#: InOut/midisend.c:189
 #, c-format
 msgid " *** error opening MIDI out file '%s'"
 msgstr " *** error abriendo el archivo de salida MIDI '%s'"
@@ -3034,7 +3035,7 @@ msgstr "Error abriendo el dispositivo de salida MIDI '%s'"
 msgid "Opened MIDI output device file '%s'\n"
 msgstr "Dispositivo de salida MIDI '%s' abierto\n"
 
-#: InOut/rtalsa.c:1101 InOut/rtcoreaudio.c:64 InOut/rtcoreaudio.c:74
+#: InOut/rtalsa.c:1101 InOut/rtcoreaudio.c:71 InOut/rtcoreaudio.c:81
 msgid "warning... could not create global var\n"
 msgstr ""
 
@@ -3058,64 +3059,82 @@ msgstr ""
 msgid "rtmidi: devfile module enabled\n"
 msgstr ""
 
-#: InOut/rtcoreaudio.c:83
+#: InOut/rtauhal.c:163
+#, fuzzy, c-format
+msgid "selected input device: %s \n"
+msgstr ""
+
+#: InOut/rtauhal.c:166
+#, fuzzy, c-format
+msgid "selected output device: %s \n"
+msgstr ""
+
+#: InOut/rtauhal.c:524
+msgid "AuHAL module: device closed\n"
+msgstr ""
+
+#: InOut/rtauhal.c:541
+msgid "rtaudio: coreaaudio-AuHAL module enabled\n"
+msgstr ""
+
+#: InOut/rtcoreaudio.c:90
 msgid ""
 "CoreAudio real-time audio module for Csound\n"
 "by Victor Lazzarini\n"
 msgstr ""
 
-#: InOut/rtcoreaudio.c:105
+#: InOut/rtcoreaudio.c:112
 msgid "rtaudio: CoreAudio module enabled\n"
 msgstr ""
 
-#: InOut/rtcoreaudio.c:254
+#: InOut/rtcoreaudio.c:261
 #, c-format
 msgid "selected device: %u \n"
 msgstr ""
 
-#: InOut/rtcoreaudio.c:263
+#: InOut/rtcoreaudio.c:270
 #, c-format
 msgid "CoreAudio module: opening %s \n"
 msgstr ""
 
-#: InOut/rtcoreaudio.c:297
+#: InOut/rtcoreaudio.c:304
 msgid " *** CoreAudio: open: could not set buffer size\n"
 msgstr ""
 
-#: InOut/rtcoreaudio.c:342
+#: InOut/rtcoreaudio.c:349
 #, c-format
 msgid " *** CoreAudio: open: could not set device parameter sr: %d \n"
 msgstr ""
 
-#: InOut/rtcoreaudio.c:344
+#: InOut/rtcoreaudio.c:351
 #, c-format
 msgid ""
 " *** CoreAudio: current device sampling rate is:%d \n"
 "     try setting the above value in your csound orchestra \n"
 msgstr ""
 
-#: InOut/rtcoreaudio.c:353
+#: InOut/rtcoreaudio.c:360
 #, c-format
 msgid "CoreAudio module: sr set to %d with %d audio channels \n"
 msgstr ""
 
-#: InOut/rtcoreaudio.c:374 InOut/rtcoreaudio.c:387 InOut/rtcoreaudio.c:432
-#: InOut/rtcoreaudio.c:452
+#: InOut/rtcoreaudio.c:381 InOut/rtcoreaudio.c:394 InOut/rtcoreaudio.c:439
+#: InOut/rtcoreaudio.c:459
 msgid " *** CoreAudio: open: memory allocation failure\n"
 msgstr ""
 
-#: InOut/rtcoreaudio.c:414
+#: InOut/rtcoreaudio.c:421
 #, c-format
 msgid ""
 "CoreAudio module: device open with %d buffers of %d frames\n"
 "==========================================================\n"
 msgstr ""
 
-#: InOut/rtcoreaudio.c:552
+#: InOut/rtcoreaudio.c:559
 msgid "coreaudio module: closing device...\n"
 msgstr ""
 
-#: InOut/rtcoreaudio.c:566
+#: InOut/rtcoreaudio.c:573
 msgid "coreaudio module: device closed\n"
 msgstr ""
 
@@ -3470,332 +3489,50 @@ msgid "rtmidi: input device number is out of range"
 msgstr "rtmidi: número de dispositivo de entrada fuera de rango"
 
 #: InOut/rtwinmm.c:559
-msgid "rtmidi: memory allocation failure"
-msgstr ""
-
-#: InOut/rtwinmm.c:565
-#, c-format
-msgid "Opening MIDI input device %d (%s)\n"
-msgstr "Abriendo dispositivo de entrada MIDI %d (%s)\n"
-
-#: InOut/rtwinmm.c:571
-msgid "rtmidi: could not open input device"
-msgstr "rtmidi: no se puede abrir el dispositivo"
-
-#: InOut/rtwinmm.c:639
-msgid "rtmidi: no output devices are available"
-msgstr "rtmidi: no hay dispositivos de salida disponibles"
-
-#: InOut/rtwinmm.c:651
-msgid "The available MIDI output devices are:\n"
-msgstr "Los dispositivos de salida MIDI disponibles son:\n"
-
-#: InOut/rtwinmm.c:658
-msgid "rtmidi: output device number is out of range"
-msgstr "rtmidi: número de dispositivo de salida fuera de rango"
-
-#: InOut/rtwinmm.c:662
-#, c-format
-msgid "Opening MIDI output device %d (%s)\n"
-msgstr "Abriendo dispositivo de salida MIDI %d (%s)\n"
-
-#: InOut/rtwinmm.c:667
-msgid "rtmidi: could not open output device"
-msgstr "rtmidi: no se puede abrir el dispositivo de salida"
-
-#: InOut/rtwinmm.c:725
-msgid ""
-"Windows MME real time audio and MIDI module for Csound by Istvan Varga\n"
-msgstr "Modulo MME en tiempo real para audio y MIDI por Istvan Varga\n"
-
-#: InOut/rtwinmm.c:730
-msgid "could not allocate global structure"
-msgstr ""
-
-#: InOut/rtwinmm.c:762
-msgid "rtaudio: WinMM module enabled\n"
-msgstr ""
-
-#: InOut/virtual_keyboard/virtual_keyboard.cpp:435
-msgid "virtual_keyboard.cpp: error allocating FLTK flags"
-msgstr ""
-
-#: InOut/virtual_keyboard/virtual_keyboard.cpp:443 InOut/winFLTK.c:125
-#: InOut/winFLTK.c:139
-#, c-format
-msgid "Error registering opcode '%s'"
-msgstr "Error registrando el opcode '%s'"
-
-#: InOut/widgets.cpp:1081
-msgid ""
-"Invalid snapshot. Perhaps you modified orchestra widget code after you saved "
-"the snapshot bank."
-msgstr ""
-
-#: InOut/widgets.cpp:1226
-msgid "No name for FLbutbank"
-msgstr ""
-
-#: InOut/widgets.cpp:1466
-msgid "FLsetsnap: invalid table"
-msgstr "FLsetsnap: tabla inválida"
-
-#: InOut/widgets.cpp:1504
-msgid ""
-"Saving could overwrite the old file.\n"
-"Are you sure to save ?"
-msgstr ""
-
-#: InOut/widgets.cpp:1516
-msgid ""
-"Saving could overwrite the old file.\n"
-"Are you sure you want to save ?"
-msgstr ""
-
-#: InOut/widgets.cpp:1518
-msgid "No"
-msgstr ""
-
-#: InOut/widgets.cpp:1518
-msgid "Yes"
-msgstr "Si"
-
-#: InOut/widgets.cpp:1527
-msgid "FLsavesnap: cannot open file"
-msgstr ""
-
-#: InOut/widgets.cpp:1580
-msgid "FLloadsnap: cannot open file"
-msgstr ""
-
-#: InOut/widgets.cpp:1625
-msgid ""
-"unmatched widget, probably due to a modified orchestra. Modifying an "
-"orchestra makes it incompatible with old snapshot files"
-msgstr ""
-
-#: InOut/widgets.cpp:1994
-msgid "end of widget thread\n"
-msgstr "fin del hilo de widgets\n"
-
-#: InOut/widgets.cpp:2020
-msgid "FLrun was already called"
-msgstr ""
-
-#: InOut/widgets.cpp:2023
-msgid "FL_run: memory allocation failure"
-msgstr ""
-
-#: InOut/widgets.cpp:2125 InOut/widgets.cpp:2145
-msgid "Error: Unable to fork process\n"
-msgstr ""
-
-#: InOut/widgets.cpp:2545
-msgid "FLpanel_end: invalid stack pointer: verify its placement"
-msgstr ""
-
-#: InOut/widgets.cpp:2548
-msgid ""
-"FLpanel_end: invalid stack count: verify FLpanel/FLpanel_end count and "
-"placement"
-msgstr ""
-
-#: InOut/widgets.cpp:2573 InOut/widgets.cpp:2604
-msgid "FLscroll_end: invalid stack pointer: verify its placement"
-msgstr ""
-
-#: InOut/widgets.cpp:2576
-msgid ""
-"FLscroll_end: invalid stack count: verify FLscroll/FLscroll_end count and "
-"placement"
-msgstr ""
-
-#: InOut/widgets.cpp:2607
-msgid ""
-"FLtabs_end: invalid stack count: verify FLtabs/FLtabs_end count and placement"
-msgstr ""
-
-#: InOut/widgets.cpp:2651
-msgid "FLgroup_end: invalid stack pointer: verify its placement"
-msgstr ""
-
-#: InOut/widgets.cpp:2654
-msgid ""
-"FLgroup_end: invalid stack count: verify FLgroup/FLgroup_end count and "
-"placement"
-msgstr ""
-
-#: InOut/widgets.cpp:2684
-msgid "FLpack_end: invalid stack pointer: verify its placement"
-msgstr ""
-
-#: InOut/widgets.cpp:2687
-msgid ""
-"FLpack_end: invalid stack count: verify FLpack/FLpack_end count and placement"
-msgstr ""
-
-#: InOut/widgets.cpp:2840
-msgid "FLvalue cannot be set by FLsetVal.\n"
-msgstr ""
-
-#: InOut/widgets.cpp:2857
-#, c-format
-msgid "(fl_setWidgetValuei): not fully implemented yet; exp=%d"
-msgstr ""
-
-#: InOut/widgets.cpp:2876
-msgid "FLvalue cannot be set by FLsetVal\n"
-msgstr ""
-
-#: InOut/widgets.cpp:2893
-#, c-format
-msgid "(fl_setWidgetValue_set): not fully implemented yet; exp=%d"
-msgstr ""
-
-#: InOut/widgets.cpp:3242 InOut/widgets.cpp:4648
-msgid "FLslider exponential, using non-labeled slider"
-msgstr ""
-
-#: InOut/widgets.cpp:3264
-msgid "FLslider: invalid slider type"
-msgstr ""
-
-#: InOut/widgets.cpp:3276 InOut/widgets.cpp:4072
-msgid "FLslider: zero is illegal in exponential operations"
-msgstr ""
-
-#: InOut/widgets.cpp:3337 InOut/widgets.cpp:4399 InOut/widgets.cpp:4610
-#: InOut/widgets.cpp:4787
-msgid "invalid ZAK space allocation"
-msgstr ""
-
-#: InOut/widgets.cpp:3451
-msgid "FLslidBnk: zero is illegal in exponential operations"
-msgstr ""
-
-#: InOut/widgets.cpp:3548 InOut/widgets.cpp:3581
-msgid "FLjoy X axe: zero is illegal in exponential operations"
-msgstr ""
-
-#: InOut/widgets.cpp:3675
-msgid "FLknob: invalid knob type"
-msgstr ""
-
-#: InOut/widgets.cpp:3690
-msgid "FLknob: zero is illegal in exponential operations"
-msgstr ""
-
-#: InOut/widgets.cpp:3790 InOut/widgets.cpp:3912
-#, c-format
-msgid "FLbutton \"%s\" ignoring snapshot capture retrieve"
-msgstr ""
-
-#: InOut/widgets.cpp:3831
-msgid "FLbutton: invalid button type"
-msgstr ""
-
-#: InOut/widgets.cpp:3863
-msgid "FLcloseButton: invalid stack pointer: verify its placement"
-msgstr ""
-
-#: InOut/widgets.cpp:3882
-#, c-format
-msgid "Command Found: %s\n"
-msgstr ""
-
-#: InOut/widgets.cpp:3954
-msgid "FLbuttonBank: invalid button type"
-msgstr ""
-
-#: InOut/widgets.cpp:3992
-#, c-format
-msgid "FLcount \"%s\" ignoring snapshot capture retrieve"
-msgstr ""
-
-#: InOut/widgets.cpp:4059
-msgid "FLroller: invalid roller type"
-msgstr ""
-
-#: InOut/widgets.cpp:4254
-msgid "FLhvsBox: a square area must be delimited by 2 lines at least"
-msgstr ""
-
-#: InOut/widgets.cpp:4302
-msgid "FLkeyIn: invalid table number"
-msgstr ""
-
-#: InOut/widgets.cpp:4305
-msgid "FLkeyIn: table too short!"
-msgstr ""
-
-#: InOut/widgets.cpp:4522
-msgid "FLvslidBnk: zero is illegal in exponential operations"
-msgstr ""
-
-#: InOut/widgets.cpp:4698 InOut/widgets.cpp:4875
-msgid "FLsliderBank: zero is illegal in exponential operations"
-msgstr ""
-
-#: InOut/widgets.cpp:4825
-msgid "FLslidBnk2: FLslider exponential, using non-labeled slider"
-msgstr ""
-
-#: InOut/widgets.cpp:4955 InOut/widgets.cpp:5018
-msgid "FLsldBnkSet: invalid table number"
-msgstr ""
-
-#: InOut/widgets.cpp:4959 InOut/widgets.cpp:5022
-msgid "FLslidBnkSet: table too short!"
-msgstr ""
-
-#: InOut/widgets.cpp:4967 InOut/widgets.cpp:5031
-msgid "FLsldBnkSet: invalid outable number"
-msgstr ""
-
-#: InOut/widgets.cpp:4972 InOut/widgets.cpp:5037
-msgid "FLslidBnkSet: too many sliders to reset!"
+msgid "rtmidi: memory allocation failure"
 msgstr ""
 
-#: InOut/widgets.cpp:4995
-msgid "FLslidBnkSet: function mapping not available"
-msgstr ""
+#: InOut/rtwinmm.c:565
+#, c-format
+msgid "Opening MIDI input device %d (%s)\n"
+msgstr "Abriendo dispositivo de entrada MIDI %d (%s)\n"
 
-#: InOut/widgets.cpp:5064 InOut/widgets.cpp:5149 InOut/widgets.cpp:5236
-msgid ""
-"FLslidBnk2Setk: value out of range: function mapping requires a 0 to 1 range "
-"for input"
-msgstr ""
+#: InOut/rtwinmm.c:571
+msgid "rtmidi: could not open input device"
+msgstr "rtmidi: no se puede abrir el dispositivo"
 
-#: InOut/widgets.cpp:5093
-msgid "FLsldBnkSetk: invalid table number"
-msgstr ""
+#: InOut/rtwinmm.c:639
+msgid "rtmidi: no output devices are available"
+msgstr "rtmidi: no hay dispositivos de salida disponibles"
 
-#: InOut/widgets.cpp:5097 InOut/widgets.cpp:5183
-msgid "FLslidBnkSetk: table too short!"
-msgstr ""
+#: InOut/rtwinmm.c:651
+msgid "The available MIDI output devices are:\n"
+msgstr "Los dispositivos de salida MIDI disponibles son:\n"
 
-#: InOut/widgets.cpp:5105
-msgid "FLsldBnkSetk: invalid outable number"
-msgstr ""
+#: InOut/rtwinmm.c:658
+msgid "rtmidi: output device number is out of range"
+msgstr "rtmidi: número de dispositivo de salida fuera de rango"
 
-#: InOut/widgets.cpp:5111 InOut/widgets.cpp:5197
-msgid "FLslidBnkSetk: too many sliders to reset!"
-msgstr ""
+#: InOut/rtwinmm.c:662
+#, c-format
+msgid "Opening MIDI output device %d (%s)\n"
+msgstr "Abriendo dispositivo de salida MIDI %d (%s)\n"
 
-#: InOut/widgets.cpp:5179
-msgid "FLslidBnkSetk: invalid table number"
-msgstr ""
+#: InOut/rtwinmm.c:667
+msgid "rtmidi: could not open output device"
+msgstr "rtmidi: no se puede abrir el dispositivo de salida"
 
-#: InOut/widgets.cpp:5191
-msgid "FLslidBnkSetk: invalid outable number"
-msgstr ""
+#: InOut/rtwinmm.c:725
+msgid ""
+"Windows MME real time audio and MIDI module for Csound by Istvan Varga\n"
+msgstr "Modulo MME en tiempo real para audio y MIDI por Istvan Varga\n"
 
-#: InOut/widgets.cpp:5268
-msgid "FLxyin: none of X limits can be zero in exponential mode!"
+#: InOut/rtwinmm.c:730
+msgid "could not allocate global structure"
 msgstr ""
 
-#: InOut/widgets.cpp:5294
-msgid "FLxyin: none of Y limits can be zero in exponential mode!"
+#: InOut/rtwinmm.c:762
+msgid "rtaudio: WinMM module enabled\n"
 msgstr ""
 
 #: InOut/winascii.c:75
@@ -3803,7 +3540,7 @@ msgstr ""
 msgid "%s\t%ld points, scalemax %5.3f\n"
 msgstr "%s\t%ld puntos, máximo %5.3f\n"
 
-#: InOut/windin.c:46 Opcodes/pitch.c:82 Opcodes/spectra.c:76
+#: InOut/windin.c:46 Opcodes/pitch.c:83 Opcodes/spectra.c:78
 msgid "illegal iprd"
 msgstr ""
 
@@ -3846,47 +3583,61 @@ msgstr ""
 msgid "widgets.cpp: error allocating FLTK flags"
 msgstr ""
 
-#: OOps/aops.c:95 OOps/aops.c:119
+#: InOut/winFLTK.c:124 InOut/winFLTK.c:137
+#: InOut/virtual_keyboard/virtual_keyboard.cpp:443
+#, c-format
+msgid "Error registering opcode '%s'"
+msgstr "Error registrando el opcode '%s'"
+
+#: InOut/virtual_keyboard/virtual_keyboard.cpp:435
+msgid "virtual_keyboard.cpp: error allocating FLTK flags"
+msgstr ""
+
+#: OOps/aops.c:120 OOps/aops.c:144
 #, c-format
 msgid "Cannot be more In arguments than Out in init (%d,%d)"
 msgstr ""
 
-#: OOps/aops.c:175 OOps/aops.c:194
+#: OOps/aops.c:200 OOps/aops.c:219
 #, c-format
 msgid "Index %d out of range [0,%d] in t[]\n"
 msgstr ""
 
-#: OOps/aops.c:184
+#: OOps/aops.c:209
 #, fuzzy
-msgid "Vector notinitialised\n"
-msgstr "vco: no ha sido inicializado"
+msgid "Vector not initialised\n"
+msgstr "Vector: no ha sido inicializado\n"
 
-#: OOps/aops.c:686
+#: OOps/aops.c:711
 msgid "non-looping sample"
 msgstr ""
 
-#: OOps/aops.c:828 OOps/aops.c:856
+#: OOps/aops.c:853 OOps/aops.c:881
 #, c-format
 msgid "No tuning table %d"
 msgstr ""
 
-#: OOps/aops.c:901 OOps/aops.c:939
+#: OOps/aops.c:926 OOps/aops.c:964
 msgid "cpstun: invalid table"
 msgstr "cpstun: tabla inválida"
 
-#: OOps/aops.c:1189
+#: OOps/aops.c:1214
 msgid "Input and output argument count differs in inch"
 msgstr ""
 
-#: OOps/aops.c:1193
+#: OOps/aops.c:1218
 #, c-format
 msgid "Input channel %d too large; ignored"
 msgstr ""
 
-#: OOps/aops.c:1667
+#: OOps/aops.c:1698
 msgid "k-rate invalue ChannelName cannot start with $"
 msgstr ""
 
+#: OOps/aops.c:1835
+msgid "Unknown functuon called"
+msgstr ""
+
 #: OOps/bus.c:313 OOps/bus.c:345
 msgid "chani: invalid index"
 msgstr "chani: índice inválido"
@@ -3987,8 +3738,6 @@ msgid ""
 "diskin2: opened '%s':\n"
 "         %d Hz, %d channel(s), %ld sample frames\n"
 msgstr ""
-"Archivo '%s' (sr = %d Hz, %d canal(es), %lu cuadros de muestra) cargado en "
-"la memoria\n"
 
 #: OOps/diskin2.c:240
 msgid ""
@@ -4027,8 +3776,6 @@ msgid ""
 "soundin: opened '%s':\n"
 "         %d Hz, %d channel(s), %ld sample frames\n"
 msgstr ""
-"Archivo '%s' (sr = %d Hz, %d canal(es), %lu cuadros de muestra) cargado en "
-"la memoria\n"
 
 #: OOps/diskin2.c:609
 msgid ""
@@ -4067,8 +3814,6 @@ msgid ""
 "diskin: opened '%s':\n"
 "        %d Hz, %d channel(s), %ld sample frames\n"
 msgstr ""
-"Archivo '%s' (sr = %d Hz, %d canal(es), %lu cuadros de muestra) cargado en "
-"la memoria\n"
 
 #: OOps/diskin.c:207
 msgid "diskin: number of output args inconsistent with number of file channels"
@@ -4140,7 +3885,7 @@ msgstr ""
 #: OOps/disprep.c:96
 #, fuzzy
 msgid "illegal iprd in display"
-msgstr "iperiod ilegal"
+msgstr ""
 
 #: OOps/disprep.c:120
 #, c-format
@@ -4166,7 +3911,7 @@ msgstr "el tamaño de la ventana debe ser una potencia de dos"
 #: OOps/disprep.c:252
 #, fuzzy
 msgid "illegal iprd in ffy display"
-msgstr "iperiod ilegal"
+msgstr ""
 
 #: OOps/disprep.c:277
 #, c-format
@@ -4189,7 +3934,7 @@ msgstr ""
 msgid "dispfft: not initialised"
 msgstr "dispfft: no ha sido inicializado"
 
-#: OOps/disprep.c:435 Opcodes/spectra.c:516
+#: OOps/disprep.c:435 Opcodes/spectra.c:518
 msgid "illegal iperiod"
 msgstr "iperiod ilegal"
 
@@ -4253,15 +3998,15 @@ msgstr ""
 msgid " *** fftlib.c: internal error: invalid FFT size: %d"
 msgstr ""
 
-#: OOps/goto_ops.c:92
+#: OOps/goto_ops.c:93
 msgid "negative time period"
 msgstr ""
 
-#: OOps/goto_ops.c:182
+#: OOps/goto_ops.c:186
 msgid "turnoff2: invalid instrument number"
 msgstr "turnoff2: número de instrumento inválido"
 
-#: OOps/goto_ops.c:187
+#: OOps/goto_ops.c:191
 msgid "turnoff2: invalid mode parameter"
 msgstr "turnoff2: parámetro de modo inválido"
 
@@ -4278,7 +4023,7 @@ msgid "cpstabm: invalid modulator table"
 msgstr "cpstabm: tabla de modulador inválida"
 
 #: OOps/midiops.c:304 OOps/midiops.c:314 OOps/midiops.c:334 OOps/midiops.c:344
-#: OOps/midiops.c:421 OOps/midiops.c:435 Opcodes/gab/sliderTable.c:563
+#: OOps/midiops.c:421 OOps/midiops.c:435 Opcodes/gab/sliderTable.c:567
 #: Opcodes/midiops2.c:56 Opcodes/midiops2.c:73 Opcodes/midiops2.c:111
 #: Opcodes/midiops2.c:145 Opcodes/midiops2.c:206 Opcodes/midiops2.c:237
 #: Opcodes/midiops2.c:298 Opcodes/midiops2.c:317 Opcodes/midiops2.c:357
@@ -4294,7 +4039,7 @@ msgstr "pgmassign: número de programa inválido"
 msgid "illegal mrtmsg argument"
 msgstr ""
 
-#: OOps/midiout.c:383
+#: OOps/midiout.c:389
 #, c-format
 msgid "out contr14 msb:%x lsb:%x\n"
 msgstr ""
@@ -4757,148 +4502,148 @@ msgstr "pvsanal: no ha sido inicializado.\n"
 msgid "Unknown window type; replaced by rectangular\n"
 msgstr ""
 
-#: OOps/pvsanal.c:1025
+#: OOps/pvsanal.c:1027
 msgid "pvsynth: Not Initialised.\n"
 msgstr "pvsynth: no ha sido inicializado.\n"
 
-#: OOps/remote.c:100
+#: OOps/remote.c:103
 msgid "insufficient memory to initialise remote globals."
 msgstr "memoria insuficiente para inicializar globales remotas."
 
-#: OOps/remote.c:109
+#: OOps/remote.c:112
 msgid "insufficient memory to initialise outgoing socket table."
 msgstr ""
 
-#: OOps/remote.c:116
+#: OOps/remote.c:119
 msgid "insufficient memory to initialise incoming socket table."
 msgstr ""
 
-#: OOps/remote.c:124
+#: OOps/remote.c:127
 msgid "insufficient memory to initialise insrfd_list."
 msgstr "memoria insuficiente para inicializar insrfd_list."
 
-#: OOps/remote.c:132
+#: OOps/remote.c:135
 msgid "insufficient memory to initialise chnrfd_list."
 msgstr "memoria insuficiente para inicializar chnrfd_list."
 
-#: OOps/remote.c:139
+#: OOps/remote.c:142
 msgid "insufficient memory to initialise insrfd table."
 msgstr "memoria insuficiente para inicializar insrfd table."
 
-#: OOps/remote.c:146
+#: OOps/remote.c:149
 msgid "insufficient memory to initialise chnrfd table."
 msgstr "memoria insuficiente para inicializar chnrfd table."
 
-#: OOps/remote.c:153
+#: OOps/remote.c:156
 msgid "insufficient memory to initialise local ip address."
 msgstr "memoria insuficiente para inicializar dirección IP local."
 
-#: OOps/remote.c:161
+#: OOps/remote.c:164
 msgid "unable to get local ip address."
 msgstr "no es posible averiguar la dirección IP local."
 
-#: OOps/remote.c:222
+#: OOps/remote.c:225
 msgid "could not open remote port"
 msgstr "No es posible abrir el puerto remoto"
 
-#: OOps/remote.c:237
+#: OOps/remote.c:240
 msgid "---> Could not connect \n"
 msgstr "---> No es posible conectar \n"
 
-#: OOps/remote.c:241
+#: OOps/remote.c:244
 msgid "---> Failed all attempts to connect. \n"
 msgstr "---> Fallaron todos los intentos de conexión. \n"
 
-#: OOps/remote.c:244
+#: OOps/remote.c:247
 msgid "--->  Connected. \n"
 msgstr "--->  Conectado. \n"
 
-#: OOps/remote.c:258 Opcodes/socksend.c:232
+#: OOps/remote.c:261 Opcodes/socksend.c:305
 msgid "write to socket failed"
 msgstr ""
 
-#: OOps/remote.c:278
+#: OOps/remote.c:281
 msgid "creating socket\n"
 msgstr ""
 
-#: OOps/remote.c:280
+#: OOps/remote.c:283
 msgid "created socket \n"
 msgstr ""
 
-#: OOps/remote.c:292
+#: OOps/remote.c:295
 msgid "setting socket option to reuse the addresse \n"
 msgstr ""
 
-#: OOps/remote.c:309 Opcodes/sockrecv.c:133 Opcodes/sockrecv.c:223
-#: Opcodes/socksend.c:211
+#: OOps/remote.c:312 Opcodes/sockrecv.c:141 Opcodes/sockrecv.c:237
+#: Opcodes/socksend.c:284
 msgid "bind failed"
 msgstr ""
 
-#: OOps/remote.c:313 Opcodes/socksend.c:216
+#: OOps/remote.c:316 Opcodes/socksend.c:289
 msgid "listen failed"
 msgstr ""
 
-#: OOps/remote.c:318 Opcodes/socksend.c:222
+#: OOps/remote.c:321 Opcodes/socksend.c:295
 msgid "accept failed"
 msgstr ""
 
-#: OOps/remote.c:321
+#: OOps/remote.c:324
 #, c-format
 msgid "accepted, conn=%d \n"
 msgstr ""
 
-#: OOps/remote.c:353 OOps/remote.c:374 OOps/remote.c:417 OOps/remote.c:449
-#: OOps/remote.c:489
+#: OOps/remote.c:356 OOps/remote.c:377 OOps/remote.c:420 OOps/remote.c:452
+#: OOps/remote.c:492
 msgid "failed to initialise remote globals."
 msgstr "memoria insuficiente para inicializar globales remotas."
 
-#: OOps/remote.c:378 OOps/remote.c:421
+#: OOps/remote.c:381 OOps/remote.c:424
 msgid "missing instr nos"
 msgstr "falta el número de instrumento"
 
-#: OOps/remote.c:390 OOps/remote.c:430
+#: OOps/remote.c:393 OOps/remote.c:433
 msgid "illegal instr no"
 msgstr "número de instrumento ilegal"
 
-#: OOps/remote.c:393
+#: OOps/remote.c:396
 msgid "insno already remote"
 msgstr ""
 
-#: OOps/remote.c:403 OOps/remote.c:474
+#: OOps/remote.c:406 OOps/remote.c:477
 msgid "Failed to open port to listen"
 msgstr ""
 
-#: OOps/remote.c:423
+#: OOps/remote.c:426
 #, c-format
 msgid "*** str1: %s own:%s\n"
 msgstr ""
 
-#: OOps/remote.c:433
+#: OOps/remote.c:436
 msgid "insno already specific remote"
 msgstr ""
 
-#: OOps/remote.c:453 OOps/remote.c:493
+#: OOps/remote.c:456 OOps/remote.c:496
 msgid "missing channel nos"
 msgstr "falta el número de canales"
 
-#: OOps/remote.c:463 OOps/remote.c:502
+#: OOps/remote.c:466 OOps/remote.c:505
 msgid "illegal channel no"
 msgstr "número de canales ilegal"
 
-#: OOps/remote.c:466
+#: OOps/remote.c:469
 msgid "channel already remote"
 msgstr ""
 
-#: OOps/remote.c:505
+#: OOps/remote.c:508
 msgid "channel already specific remote"
 msgstr ""
 
-#: OOps/remote.c:531 OOps/remote.c:555 OOps/remote.c:579
+#: OOps/remote.c:534 OOps/remote.c:558 OOps/remote.c:582
 msgid "CLsend failed"
 msgstr ""
 
-#: OOps/remote.c:645 OOps/remote.c:653 OOps/remote.c:661 OOps/remote.c:669
-#: OOps/remote.c:677
+#: OOps/remote.c:648 OOps/remote.c:656 OOps/remote.c:664 OOps/remote.c:672
+#: OOps/remote.c:680
 msgid ""
 "*** This version of Csound was not compiled with remote event support ***\n"
 msgstr ""
@@ -5009,53 +4754,53 @@ msgstr "linseg no ha sido inicializado (krate)\n"
 msgid "linseg: not initialised (arate)\n"
 msgstr "linseg: no ha sido inicializado (arate)\n"
 
-#: OOps/ugens1.c:463 OOps/ugens1.c:465 OOps/ugens1.c:512 OOps/ugens1.c:514
-#: OOps/ugens1.c:564 OOps/ugens1.c:566 OOps/ugens1.c:610 OOps/ugens1.c:612
-#: OOps/ugens1.c:774 OOps/ugens1.c:776
+#: OOps/ugens1.c:464 OOps/ugens1.c:466 OOps/ugens1.c:513 OOps/ugens1.c:515
+#: OOps/ugens1.c:565 OOps/ugens1.c:567 OOps/ugens1.c:611 OOps/ugens1.c:613
+#: OOps/ugens1.c:775 OOps/ugens1.c:777
 #, c-format
 msgid "ival%d is zero"
 msgstr "ival%d es cero"
 
-#: OOps/ugens1.c:466 OOps/ugens1.c:515 OOps/ugens1.c:567 OOps/ugens1.c:613
-#: OOps/ugens1.c:777
+#: OOps/ugens1.c:467 OOps/ugens1.c:516 OOps/ugens1.c:568 OOps/ugens1.c:614
+#: OOps/ugens1.c:778
 #, c-format
 msgid "ival%d sign conflict"
 msgstr ""
 
-#: OOps/ugens1.c:495 OOps/ugens1.c:544
+#: OOps/ugens1.c:496 OOps/ugens1.c:545
 #, c-format
 msgid "Breakpoint time %f not valid"
 msgstr ""
 
-#: OOps/ugens1.c:706
+#: OOps/ugens1.c:707
 msgid "expseg (krate): not initialised"
 msgstr "expseg (krate): no ha sido inicializado"
 
-#: OOps/ugens1.c:732
+#: OOps/ugens1.c:733
 msgid "expseg (arate): not initialised"
 msgstr "expseg (arate): no ha sido inicializado"
 
-#: OOps/ugens1.c:1013 OOps/ugens1.c:1149 OOps/ugens1.c:1311
+#: OOps/ugens1.c:1014 OOps/ugens1.c:1150 OOps/ugens1.c:1312
 msgid "non-positive iatdec"
 msgstr ""
 
-#: OOps/ugens1.c:1106 OOps/ugens1.c:1273
+#: OOps/ugens1.c:1107 OOps/ugens1.c:1274
 msgid "ixmod out of range."
 msgstr ""
 
-#: OOps/ugens1.c:1134 OOps/ugens1.c:1301
+#: OOps/ugens1.c:1135 OOps/ugens1.c:1302
 msgid "rise func ends with zero"
 msgstr ""
 
-#: OOps/ugens1.c:1178 OOps/ugens1.c:1257
+#: OOps/ugens1.c:1179 OOps/ugens1.c:1258
 msgid "envlpx rise func ends with zero"
 msgstr ""
 
-#: OOps/ugens1.c:1199 OOps/ugens1.c:1254
+#: OOps/ugens1.c:1200 OOps/ugens1.c:1255
 msgid "envlpx(krate): not initialised"
 msgstr "envlpx(krate): no ha sido inicializado"
 
-#: OOps/ugens2.c:48 OOps/ugens2.c:61 Opcodes/shape.c:377
+#: OOps/ugens2.c:48 OOps/ugens2.c:61 Opcodes/shape.c:379
 msgid "init phase truncation\n"
 msgstr ""
 
@@ -5119,8 +4864,8 @@ msgid "oscil(krate): not initialised"
 msgstr "oscil(krate): no ha sido inicializado"
 
 #: OOps/ugens2.c:1139 OOps/ugens2.c:1167 OOps/ugens2.c:1192 OOps/ugens2.c:1219
-#: Opcodes/pitch.c:1579 Opcodes/pitch.c:1606 Opcodes/pitch.c:1633
-#: Opcodes/pitch.c:1662
+#: Opcodes/pitch.c:1580 Opcodes/pitch.c:1607 Opcodes/pitch.c:1634
+#: Opcodes/pitch.c:1663
 msgid "oscil: not initialised"
 msgstr "oscil: no ha sido inicializado"
 
@@ -5236,7 +4981,7 @@ msgstr ""
 msgid "Seeding from current time %lu\n"
 msgstr ""
 
-#: OOps/ugens5.c:198 OOps/ugens5.c:260 Opcodes/gab/gab.c:45 Opcodes/ugsc.c:188
+#: OOps/ugens5.c:198 OOps/ugens5.c:260 Opcodes/gab/gab.c:47 Opcodes/ugsc.c:186
 #, c-format
 msgid "illegal reson iscl value, %f"
 msgstr ""
@@ -5468,8 +5213,8 @@ msgstr ""
 msgid "Table no. < 1 dft=%.2f  sft=%.2f"
 msgstr ""
 
-#: OOps/ugrw1.c:1781 OOps/ugrw1.c:1822 Opcodes/fareyseq.c:455
-#: Opcodes/fareyseq.c:477
+#: OOps/ugrw1.c:1781 OOps/ugrw1.c:1822 Opcodes/fareyseq.c:453
+#: Opcodes/fareyseq.c:475
 #, c-format
 msgid "Source sft table %.2f not found."
 msgstr ""
@@ -5699,19 +5444,19 @@ msgstr ""
 msgid "reverbx: not initialised"
 msgstr "reverbx: no ha sido inicializado"
 
-#: Opcodes/ambicode1.c:80
+#: Opcodes/ambicode1.c:82
 msgid "The numbers of input and output arguments are not valid."
 msgstr ""
 
-#: Opcodes/ambicode1.c:163
+#: Opcodes/ambicode1.c:165
 msgid "The number of input arguments is not valid."
 msgstr ""
 
-#: Opcodes/ambicode1.c:167
+#: Opcodes/ambicode1.c:169
 msgid "The isetup value should be between 1 and 5."
 msgstr ""
 
-#: Opcodes/ambicode1.c:193
+#: Opcodes/ambicode1.c:195
 msgid "The output channel count does not match the isetup value."
 msgstr ""
 
@@ -5751,16 +5496,16 @@ msgstr ""
 msgid "Not supported setup number!"
 msgstr ""
 
-#: Opcodes/babo.c:740
+#: Opcodes/babo.c:742
 #, c-format
 msgid "Babo: resonator dimensions are incorrect (%.1f, %.1f, %.1f)"
 msgstr ""
 
-#: Opcodes/bilbar.c:82
+#: Opcodes/bilbar.c:83
 msgid "No data to continue"
 msgstr ""
 
-#: Opcodes/bilbar.c:108
+#: Opcodes/bilbar.c:109
 msgid "Ends must be clamped(1), pivoting(2) or free(3)"
 msgstr ""
 
@@ -5773,8 +5518,8 @@ msgstr "vco: no ha sido inicializado"
 msgid "DLineN: Delay length too big ... setting to maximum length of %ld.\n"
 msgstr ""
 
-#: Opcodes/bowedbar.c:98 Opcodes/physmod.c:489
-msgid "unknown lowest frequency for bowed string -- assuming 50Hz\n"
+#: Opcodes/bowedbar.c:98
+msgid "unknown lowest frequency for bowed bar -- assuming 50Hz\n"
 msgstr ""
 
 #: Opcodes/clfilt.c:53
@@ -5852,17 +5597,17 @@ msgstr ""
 msgid "Unknown control %d"
 msgstr ""
 
-#: Opcodes/cpumeter.c:73
+#: Opcodes/cpumeter.c:77
 #, fuzzy, c-format
 msgid "Failed to open /proc/stat: %s"
-msgstr "No fue posible abrir el archivo csd: %s"
+msgstr "No fue posible abrir el archivo /proc/stat : %s"
 
-#: Opcodes/cpumeter.c:75 Opcodes/cpumeter.c:80 Opcodes/cpumeter.c:107
-#: Opcodes/cpumeter.c:147
+#: Opcodes/cpumeter.c:79 Opcodes/cpumeter.c:84 Opcodes/cpumeter.c:111
+#: Opcodes/cpumeter.c:151
 msgid "failed /proc/stat read"
 msgstr ""
 
-#: Opcodes/crossfm.c:33
+#: Opcodes/crossfm.c:34
 msgid "crossfm: ftable not found"
 msgstr ""
 
@@ -5904,31 +5649,31 @@ msgstr ""
 msgid "insufficient arguments for fareytable"
 msgstr "argumentos insuficientes por fareytable"
 
-#: Opcodes/fareyseq.c:250 Opcodes/fareyseq.c:300
+#: Opcodes/fareyseq.c:251 Opcodes/fareyseq.c:301
 #, c-format
 msgid "Farey: Table no. < 1 dft=%.2f  sft=%.2f"
 msgstr ""
 
-#: Opcodes/fareyseq.c:255
+#: Opcodes/fareyseq.c:256
 #, c-format
 msgid "Farey: Filter type < 1 dft=%.2f  sft=%.2f"
 msgstr ""
 
-#: Opcodes/fareyseq.c:270 Opcodes/fareyseq.c:318
+#: Opcodes/fareyseq.c:271 Opcodes/fareyseq.c:319
 #, c-format
 msgid "Farey: Destination dft table %.2f not found."
 msgstr ""
 
-#: Opcodes/fareyseq.c:281 Opcodes/fareyseq.c:329
+#: Opcodes/fareyseq.c:282 Opcodes/fareyseq.c:330
 #, c-format
 msgid "Farey: Source sft table %.2f not found."
 msgstr ""
 
-#: Opcodes/fareyseq.c:305
+#: Opcodes/fareyseq.c:306
 msgid "Farey: Filter type < 1"
 msgstr ""
 
-#: Opcodes/fareyseq.c:447 Opcodes/fareyseq.c:468
+#: Opcodes/fareyseq.c:445 Opcodes/fareyseq.c:466
 #, c-format
 msgid "Table no. < 1 sft=%.2f"
 msgstr ""
@@ -5962,7 +5707,7 @@ msgstr ""
 #: Opcodes/fluidOpcodes/fluidOpcodes.c:553
 #, fuzzy, c-format
 msgid "Illegal Engine Number: %i.\n"
-msgstr "número GEN ilegal"
+msgstr ""
 
 #: Opcodes/fluidOpcodes/fluidOpcodes.c:238
 #, c-format
@@ -6036,45 +5781,45 @@ msgstr ""
 msgid "follow - zero length!"
 msgstr ""
 
-#: Opcodes/fout.c:59
+#: Opcodes/fout.c:60
 #, c-format
 msgid "Closing file '%s'...\n"
 msgstr ""
 
-#: Opcodes/fout.c:101
+#: Opcodes/fout.c:102
 msgid "invalid file handle"
 msgstr ""
 
-#: Opcodes/fout.c:108 Opcodes/fout.c:420
+#: Opcodes/fout.c:109 Opcodes/fout.c:421
 msgid "invalid file name"
 msgstr ""
 
-#: Opcodes/fout.c:165
+#: Opcodes/fout.c:166
 #, c-format
 msgid "error opening file '%s'"
 msgstr ""
 
-#: Opcodes/fout.c:192
+#: Opcodes/fout.c:193
 #, c-format
 msgid "error opening sound file '%s'"
 msgstr ""
 
-#: Opcodes/fout.c:429
+#: Opcodes/fout.c:430
 #, c-format
 msgid "cannot close '%s': not found in list of open files"
 msgstr ""
 
-#: Opcodes/fout.c:440
+#: Opcodes/fout.c:441
 #, c-format
 msgid "cannot close file #%d: not a valid handle"
 msgstr ""
 
-#: Opcodes/fout.c:447
+#: Opcodes/fout.c:448
 #, c-format
 msgid "file #%d (%s) is in use, will be closed when released"
 msgstr ""
 
-#: Opcodes/fout.c:476 Opcodes/fout.c:479 Opcodes/fout.c:550 Opcodes/fout.c:553
+#: Opcodes/fout.c:477 Opcodes/fout.c:480 Opcodes/fout.c:551 Opcodes/fout.c:554
 msgid "fouti: invalid file handle"
 msgstr ""
 
@@ -6152,554 +5897,705 @@ msgstr ""
 msgid "ftsave: failed to write file"
 msgstr ""
 
-#: Opcodes/gab/gab.c:109
+#: Opcodes/gab/gab.c:111
 msgid "fastab: incorrect table number"
 msgstr ""
 
-#: Opcodes/gab/gab.c:132 Opcodes/gab/gab.c:141 Opcodes/gab/gab.c:171
+#: Opcodes/gab/gab.c:134 Opcodes/gab/gab.c:143 Opcodes/gab/gab.c:173
 msgid "tabw off end"
 msgstr ""
 
-#: Opcodes/gab/gab.c:157 Opcodes/gab/gab.c:225 Opcodes/gab/gab.c:234
+#: Opcodes/gab/gab.c:159 Opcodes/gab/gab.c:227 Opcodes/gab/gab.c:236
 msgid "tab off end"
 msgstr ""
 
-#: Opcodes/gab/gab.c:183
+#: Opcodes/gab/gab.c:185
 msgid "tab_i: incorrect table number"
 msgstr ""
 
-#: Opcodes/gab/gab.c:190
-msgid "tab_i off end"
+#: Opcodes/gab/gab.c:192
+#, c-format
+msgid "tab_i off end: table number: %d\n"
 msgstr ""
 
-#: Opcodes/gab/gab.c:202
+#: Opcodes/gab/gab.c:204
 msgid "tabw_i: incorrect table number"
 msgstr ""
 
-#: Opcodes/gab/gab.c:209
+#: Opcodes/gab/gab.c:211
 msgid "tabw_i off end"
 msgstr ""
 
-#: Opcodes/gab/gab.c:247
+#: Opcodes/gab/gab.c:249
 msgid "tab_init: incorrect table number"
 msgstr ""
 
-#: Opcodes/gab/gab.c:316
+#: Opcodes/gab/gab.c:318
 msgid "printi parameter was not a \"quoted string\""
 msgstr ""
 
-#: Opcodes/gab/gab.c:423
+#: Opcodes/gab/gab.c:425
 msgid "adsynt2: wavetable not found!"
 msgstr ""
 
-#: Opcodes/gab/gab.c:435
+#: Opcodes/gab/gab.c:437
 msgid "adsynt2: freqtable not found!"
 msgstr ""
 
-#: Opcodes/gab/gab.c:440
+#: Opcodes/gab/gab.c:442
 msgid "adsynt2: partial count is greater than freqtable size!"
 msgstr ""
 
-#: Opcodes/gab/gab.c:449
+#: Opcodes/gab/gab.c:451
 msgid "adsynt2: amptable not found!"
 msgstr ""
 
-#: Opcodes/gab/gab.c:454
+#: Opcodes/gab/gab.c:456
 msgid "adsynt2: partial count is greater than amptable size!"
 msgstr ""
 
-#: Opcodes/gab/gab.c:499
+#: Opcodes/gab/gab.c:501
 msgid "adsynt2: not initialised"
 msgstr ""
 
-#: Opcodes/gab/gab.c:741
+#: Opcodes/gab/gab.c:743
 msgid "max_k: invalid imaxflag value"
 msgstr ""
 
-#: Opcodes/gab/hvs.c:68
+#: Opcodes/gab/hvs.c:70
 msgid "hvs1: a line segment must be delimited by 2 points at least"
 msgstr ""
 
-#: Opcodes/gab/hvs.c:150
+#: Opcodes/gab/hvs.c:152
 msgid "hvs2: a square area must be delimited by 2 lines at least"
 msgstr ""
 
-#: Opcodes/gab/hvs.c:246
+#: Opcodes/gab/hvs.c:248
 msgid "hvs3: a square area must be delimited by 2 lines at least"
 msgstr ""
 
-#: Opcodes/gab/hvs.c:389
+#: Opcodes/gab/hvs.c:390
 msgid "vphaseseg: the first function is invalid or missing"
 msgstr ""
 
-#: Opcodes/gab/hvs.c:396
+#: Opcodes/gab/hvs.c:398 Opcodes/gab/vectorial.c:2301
 msgid "vphaseseg: invalid num. of elements"
 msgstr ""
 
-#: Opcodes/gab/hvs.c:414
+#: Opcodes/gab/hvs.c:416
 msgid "vphaseseg: function invalid or missing"
 msgstr ""
 
-#: Opcodes/gab/newgabopc.c:39 Opcodes/gab/newgabopc.c:54
+#: Opcodes/gab/newgabopc.c:40 Opcodes/gab/newgabopc.c:55
 msgid "vtable1: incorrect table number"
 msgstr ""
 
-#: Opcodes/gab/newgabopc.c:359
+#: Opcodes/gab/newgabopc.c:241 Opcodes/gab/newgabopc.c:296
+msgid "copyTabElems: incorrect destination table number"
+msgstr ""
+
+#: Opcodes/gab/newgabopc.c:246 Opcodes/gab/newgabopc.c:301
+msgid ""
+"copyTabElems: destination table too short or number of elements to copy too "
+"big"
+msgstr ""
+
+#: Opcodes/gab/newgabopc.c:252 Opcodes/gab/newgabopc.c:306
+#, fuzzy
+msgid "copyTabElems: incorrect source table number"
+msgstr "copyTabElems: número inválido de tabla fuente"
+
+#: Opcodes/gab/newgabopc.c:257 Opcodes/gab/newgabopc.c:310
+msgid ""
+"copyTabElems: source table size less than the number of elements to copy"
+msgstr ""
+
+#: Opcodes/gab/newgabopc.c:273 Opcodes/gab/newgabopc.c:318
+msgid "copyTabElems: source table too short"
+msgstr ""
+
+#: Opcodes/gab/newgabopc.c:276 Opcodes/gab/newgabopc.c:321
+msgid "copyTabElems: destination table too short"
+msgstr ""
+
+#: Opcodes/gab/newgabopc.c:347
+msgid "inrg: audio input is not enabled"
+msgstr ""
+
+#: Opcodes/gab/newgabopc.c:362
 msgid "inrg: channel number cannot be < 1 (1 is the first channel)"
 msgstr ""
 
-#: Opcodes/gab/newgabopc.c:400
+#: Opcodes/gab/newgabopc.c:403
 msgid "outrg: channel number cannot be < 1 (1 is the first channel)"
 msgstr ""
 
-#: Opcodes/gab/newgabopc.c:439 Opcodes/gab/newgabopc.c:671
+#: Opcodes/gab/newgabopc.c:440 Opcodes/gab/newgabopc.c:574
+#: Opcodes/gab/newgabopc.c:672
 msgid "invalid function"
 msgstr ""
 
-#: Opcodes/gab/newgabopc.c:442
+#: Opcodes/gab/newgabopc.c:443
 msgid "lposc: no sample rate stored in function; assuming=sr\n"
 msgstr ""
 
-#: Opcodes/gab/newgabopc.c:673
+#: Opcodes/gab/newgabopc.c:577
+msgid "lposcil: no sample rate stored in function assuming=sr\n"
+msgstr ""
+
+#: Opcodes/gab/newgabopc.c:674
 msgid "lposcil: no sample rate stored in function; assuming=sr\n"
 msgstr ""
 
-#: Opcodes/gab/sliderTable.c:45 Opcodes/gab/sliderTable.c:254
+#: Opcodes/gab/sliderTable.c:47 Opcodes/gab/sliderTable.c:256
 #: Opcodes/midiops3.c:44 Opcodes/midiops3.c:146 Opcodes/midiops3.c:259
 #: Opcodes/midiops3.c:317 Opcodes/midiops3.c:413
 msgid "illegal channel"
 msgstr ""
 
-#: Opcodes/gab/sliderTable.c:65 Opcodes/gab/sliderTable.c:277
+#: Opcodes/gab/sliderTable.c:67 Opcodes/gab/sliderTable.c:280
 #: Opcodes/midiops3.c:58 Opcodes/midiops3.c:162 Opcodes/midiops3.c:273
 #, c-format
 msgid "illegal control number at position n.%d"
 msgstr ""
 
-#: Opcodes/gab/sliderTable.c:74
+#: Opcodes/gab/sliderTable.c:76
 #, c-format
 msgid ""
 "sliderXtable: illegal initvalue at position %d.  When using table indexing, "
 "the init range is 0 to 1"
 msgstr ""
 
-#: Opcodes/gab/sliderTable.c:84 Opcodes/gab/sliderTable.c:284
-#: Opcodes/gab/sliderTable.c:509 Opcodes/midiops3.c:64 Opcodes/midiops3.c:168
+#: Opcodes/gab/sliderTable.c:86 Opcodes/gab/sliderTable.c:287
+#: Opcodes/gab/sliderTable.c:513 Opcodes/midiops3.c:64 Opcodes/midiops3.c:168
 #: Opcodes/midiops3.c:347
 #, c-format
 msgid "illegal initvalue at position n.%d"
 msgstr ""
 
-#: Opcodes/gab/sliderTable.c:96 Opcodes/gab/sliderTable.c:296
+#: Opcodes/gab/sliderTable.c:98 Opcodes/gab/sliderTable.c:299
 msgid "sliderXtable: zero is illegal in exponential operations"
 msgstr ""
 
-#: Opcodes/gab/sliderTable.c:312
+#: Opcodes/gab/sliderTable.c:315
 #, c-format
 msgid ""
 "sliderXtable: illegal initvalue at position %d. When using table indexing, "
 "the init range is 0 to 1"
 msgstr ""
 
-#: Opcodes/gab/sliderTable.c:565 Opcodes/midiops2.c:321 Opcodes/midiops2.c:359
+#: Opcodes/gab/sliderTable.c:569 Opcodes/midiops2.c:321 Opcodes/midiops2.c:359
 #: Opcodes/midiops2.c:391 Opcodes/midiops2.c:440 Opcodes/midiops2.c:475
 #: Opcodes/midiops2.c:517 Opcodes/midiops2.c:532 Opcodes/midiops2.c:551
 msgid "illegal midi channel"
 msgstr ""
 
-#: Opcodes/gab/tabmorph.c:42
+#: Opcodes/gab/tabmorph.c:43
 msgid "tabmorph: invalid table number"
 msgstr ""
 
-#: Opcodes/gab/tabmorph.c:46
+#: Opcodes/gab/tabmorph.c:47
 msgid "tabmorph: all tables must have the same length!"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:33
+#: Opcodes/gab/vectorial.c:35
 msgid "mtablei: incorrect table number"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:63 Opcodes/gab/vectorial.c:83
-#: Opcodes/gab/vectorial.c:133 Opcodes/gab/vectorial.c:200
+#: Opcodes/gab/vectorial.c:65 Opcodes/gab/vectorial.c:85
+#: Opcodes/gab/vectorial.c:135 Opcodes/gab/vectorial.c:202
 msgid "mtable: incorrect table number"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:185
+#: Opcodes/gab/vectorial.c:187
 msgid "mtabi: incorrect table number"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:252
+#: Opcodes/gab/vectorial.c:254
 msgid "mtablewi: incorrect table number"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:268 Opcodes/gab/vectorial.c:288
-#: Opcodes/gab/vectorial.c:317 Opcodes/gab/vectorial.c:362
-#: Opcodes/gab/vectorial.c:406
+#: Opcodes/gab/vectorial.c:270 Opcodes/gab/vectorial.c:290
+#: Opcodes/gab/vectorial.c:319 Opcodes/gab/vectorial.c:364
+#: Opcodes/gab/vectorial.c:408
 msgid "mtabw: incorrect table number"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:348
+#: Opcodes/gab/vectorial.c:350
 msgid "mtabwi: incorrect table number"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:380
+#: Opcodes/gab/vectorial.c:382
 msgid "mtablew: incorrect table number"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:454 Opcodes/gab/vectorial.c:513
+#: Opcodes/gab/vectorial.c:457 Opcodes/gab/vectorial.c:516
 #, c-format
 msgid "vadd_i: invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:470
+#: Opcodes/gab/vectorial.c:473
 msgid "vadd_i: ifn length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:497
+#: Opcodes/gab/vectorial.c:500
 msgid "vadd: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:529
+#: Opcodes/gab/vectorial.c:532
 msgid "vmult_i: ifn length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:556
+#: Opcodes/gab/vectorial.c:559
 msgid "vmult: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:572
+#: Opcodes/gab/vectorial.c:575
 #, c-format
 msgid "vpow_i: invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:589
+#: Opcodes/gab/vectorial.c:592
 msgid "vpow_i: ifn length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:617
+#: Opcodes/gab/vectorial.c:620
 msgid "vpow: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:633
+#: Opcodes/gab/vectorial.c:636
 #, c-format
 msgid "vexp_i: invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:649
+#: Opcodes/gab/vectorial.c:652
 msgid "vexp_i: ifn length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:676
+#: Opcodes/gab/vectorial.c:679
 msgid "vexp: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:694
+#: Opcodes/gab/vectorial.c:697
 #, c-format
 msgid "vectorsop: ifn1 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:699
+#: Opcodes/gab/vectorial.c:702
 #, c-format
 msgid "vectorsop: ifn2 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:738
+#: Opcodes/gab/vectorial.c:742
 msgid "vcopy: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:756
+#: Opcodes/gab/vectorial.c:760
 msgid "vcopy: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:783
+#: Opcodes/gab/vectorial.c:787
 #, c-format
 msgid "vcopy_i: ifn1 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:788
+#: Opcodes/gab/vectorial.c:792
 #, c-format
 msgid "vcopy_i: ifn2 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:810
+#: Opcodes/gab/vectorial.c:814
 msgid "vcopy_i: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:827
+#: Opcodes/gab/vectorial.c:831
 msgid "vcopy_i: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:866
+#: Opcodes/gab/vectorial.c:870
 msgid "vaddv: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:885
+#: Opcodes/gab/vectorial.c:889
 msgid "vaddv: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:911
+#: Opcodes/gab/vectorial.c:915
 #, c-format
 msgid "vaddv_i: ifn1 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:916
+#: Opcodes/gab/vectorial.c:920
 #, c-format
 msgid "vaddv_i: ifn2 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:938
+#: Opcodes/gab/vectorial.c:942
 msgid "vaddv_i: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:956
+#: Opcodes/gab/vectorial.c:960
 msgid "vaddv_i: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:987
+#: Opcodes/gab/vectorial.c:991
 msgid "vsubv: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1006
+#: Opcodes/gab/vectorial.c:1010
 msgid "vsubv: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1033
+#: Opcodes/gab/vectorial.c:1037
 #, c-format
 msgid "vsubv_i: ifn1 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1038
+#: Opcodes/gab/vectorial.c:1042
 #, c-format
 msgid "vsubv_i: ifn2 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1060
+#: Opcodes/gab/vectorial.c:1064
 msgid "vsubv_i: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1078
+#: Opcodes/gab/vectorial.c:1082
 msgid "vsubv_i: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1115
+#: Opcodes/gab/vectorial.c:1119
 msgid "vmultv: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1134
+#: Opcodes/gab/vectorial.c:1138
 msgid "vmultv: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1161
+#: Opcodes/gab/vectorial.c:1165
 #, c-format
 msgid "vmultv_i: ifn1 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1166
+#: Opcodes/gab/vectorial.c:1170
 #, c-format
 msgid "vmultv_i: ifn2 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1188
+#: Opcodes/gab/vectorial.c:1192
 msgid "vmultv_i: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1205
+#: Opcodes/gab/vectorial.c:1209
 msgid "vmultv_i: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1242
+#: Opcodes/gab/vectorial.c:1246
 msgid "vdivv: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1261
+#: Opcodes/gab/vectorial.c:1265
 msgid "vdivv: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1288
+#: Opcodes/gab/vectorial.c:1292
 #, c-format
 msgid "vdivv_i: ifn1 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1293
+#: Opcodes/gab/vectorial.c:1297
 #, c-format
 msgid "vdivv_i: ifn2 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1315
+#: Opcodes/gab/vectorial.c:1319
 msgid "vdivv_i: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1333
+#: Opcodes/gab/vectorial.c:1337
 msgid "vdivv_i: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1370
+#: Opcodes/gab/vectorial.c:1374
 msgid "vpowv: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1389
+#: Opcodes/gab/vectorial.c:1393
 msgid "vpowv: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1416
+#: Opcodes/gab/vectorial.c:1420
 #, c-format
 msgid "vpowv_i: ifn1 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1421
+#: Opcodes/gab/vectorial.c:1425
 #, c-format
 msgid "vpowv_i: ifn2 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1443
+#: Opcodes/gab/vectorial.c:1447
 msgid "vpowv_i: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1460
+#: Opcodes/gab/vectorial.c:1464
 msgid "vpowv_i: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1497
+#: Opcodes/gab/vectorial.c:1501
 msgid "vexpv: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1516
+#: Opcodes/gab/vectorial.c:1520
 msgid "vexpv: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1543
+#: Opcodes/gab/vectorial.c:1547
 #, c-format
 msgid "vexpv_i: ifn1 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1548
+#: Opcodes/gab/vectorial.c:1552
 #, c-format
 msgid "vexpv_i: ifn2 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1570
+#: Opcodes/gab/vectorial.c:1574
 msgid "vexpv_i: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1588
+#: Opcodes/gab/vectorial.c:1592
 msgid "vexpv_i: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1625
+#: Opcodes/gab/vectorial.c:1629
 msgid "vmap: Error: ifn1 and ifn2 can not be the same"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1630
+#: Opcodes/gab/vectorial.c:1634
 #, c-format
 msgid "vmap: ifn1 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1635
+#: Opcodes/gab/vectorial.c:1639
 #, c-format
 msgid "vmap: ifn2 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1657
+#: Opcodes/gab/vectorial.c:1661
 msgid "vmap: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1674
+#: Opcodes/gab/vectorial.c:1678
 msgid "vmap: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1870
+#: Opcodes/gab/vectorial.c:1698
+#, fuzzy
+msgid "vectorop: invalid num of elements"
+msgstr "vectorop : número inválido de argumentos"
+
+#: Opcodes/gab/vectorial.c:1727
+#, fuzzy
+msgid "vport: invalid table length or num of elements"
+msgstr "vport : tamaño inválido de tabla"
+
+#: Opcodes/gab/vectorial.c:1730
+#, fuzzy
+msgid "vport: invalid table"
+msgstr "vport : tabla inválida"
+
+#: Opcodes/gab/vectorial.c:1735
+msgid "vport: invalid init table length or num of elements"
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:1738
+#, fuzzy
+msgid "vport: invalid init table"
+msgstr "vport : tabla inválida"
+
+#: Opcodes/gab/vectorial.c:1875
 #, c-format
 msgid "vrandh: Seeding from current time %lu\n"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1968
+#: Opcodes/gab/vectorial.c:1888
+#, fuzzy
+msgid "vrandh: Invalid table."
+msgstr "vrandh: tabla inválida"
+
+#: Opcodes/gab/vectorial.c:1891
+msgid "vrandh: idstoffset is greater than table length."
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:1896
+msgid "randh: Table length exceeded, last elements discarded."
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:1975
 #, c-format
 msgid "vrandi: Seeding from current time %lu\n"
 msgstr ""
 
-#: Opcodes/grain4.c:57
+#: Opcodes/gab/vectorial.c:1987
+#, fuzzy
+msgid "vrandi: Invalid table."
+msgstr "vrandi : tabla inválida"
+
+#: Opcodes/gab/vectorial.c:1990
+msgid "vrandi: idstoffset is greater thantable length."
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:1995
+msgid "vrandi: Table length exceeded, last elements discarded."
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:2077 Opcodes/gab/vectorial.c:2084
+#: Opcodes/gab/vectorial.c:2091
+#, fuzzy
+msgid "vecdelay: invalid num of elements"
+msgstr "vecdelay : número inválido de argumentos"
+
+#: Opcodes/gab/vectorial.c:2079
+#, fuzzy
+msgid "vecdly: invalid output table"
+msgstr "vecdly : tabla de modulador inválida"
+
+#: Opcodes/gab/vectorial.c:2086
+#, fuzzy
+msgid "vecdly: invalid input table"
+msgstr "vecdly : tabla de ventana inválida"
+
+#: Opcodes/gab/vectorial.c:2093
+#, fuzzy
+msgid "vecdly: invalid delay table"
+msgstr "vecdly : tabla de modulador inválida"
+
+#: Opcodes/gab/vectorial.c:2138
+#, fuzzy
+msgid "vecdly: not initialised"
+msgstr "vecdly : no ha sido inicializado"
+
+#: Opcodes/gab/vectorial.c:2181
+msgid "vlinseg/vexpseg: invalid num. of elements"
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:2223 Opcodes/vpvoc.c:118
+msgid "tableseg: not initialised"
+msgstr "tableseg: no ha sido inicializado"
+
+#: Opcodes/gab/vectorial.c:2253 Opcodes/vpvoc.c:146
+msgid "tablexseg: not initialised"
+msgstr "tablexseg: no ha sido inicializado"
+
+#: Opcodes/gab/vectorial.c:2406
+#, fuzzy
+msgid "vdelayk: not initialised"
+msgstr "vdelayk: no ha sido inicializado"
+
+#: Opcodes/gab/vectorial.c:2439 Opcodes/gab/vectorial.c:2445
+#, fuzzy
+msgid "cella: invalid num of elements"
+msgstr "cella: número inválido de argumentos"
+
+#: Opcodes/gab/vectorial.c:2441
+#, fuzzy
+msgid "cella: invalid output table"
+msgstr "cella: tabla de modulador inválida"
+
+#: Opcodes/gab/vectorial.c:2448
+#, fuzzy
+msgid "cella: invalid initial state table"
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:2452
+#, fuzzy
+msgid "cella: invalid rule table"
+msgstr "cella: tabla de modulador inválida"
+
+#: Opcodes/grain4.c:59
 msgid "granule_set: Unable to find function table"
 msgstr ""
 
-#: Opcodes/grain4.c:67
+#: Opcodes/grain4.c:69
 msgid "granule_set: Unable to find function table for envelope"
 msgstr ""
 
-#: Opcodes/grain4.c:73
+#: Opcodes/grain4.c:75
 msgid "granule_set: Too many voices"
 msgstr ""
 
-#: Opcodes/grain4.c:76
+#: Opcodes/grain4.c:78
 msgid "granule_set: iratio must be greater then 0"
 msgstr ""
 
-#: Opcodes/grain4.c:80
+#: Opcodes/grain4.c:82
 msgid "granule_set: imode must be -1, 0 or +1"
 msgstr ""
 
-#: Opcodes/grain4.c:84
+#: Opcodes/grain4.c:86
 msgid "granule_set: Illegal ithd, must be greater than zero"
 msgstr ""
 
-#: Opcodes/grain4.c:89
+#: Opcodes/grain4.c:91
 msgid "granule_set: ipshift must be integer between 0 and 4"
 msgstr ""
 
-#: Opcodes/grain4.c:94
+#: Opcodes/grain4.c:96
 msgid "granule_set: Not enough voices for the number of pitches"
 msgstr ""
 
-#: Opcodes/grain4.c:101
+#: Opcodes/grain4.c:103
 msgid "granule_set: ipitch1 must be greater then zero"
 msgstr ""
 
-#: Opcodes/grain4.c:106
+#: Opcodes/grain4.c:108
 msgid "granule_set: ipitch2 must be greater then zero"
 msgstr ""
 
-#: Opcodes/grain4.c:111
+#: Opcodes/grain4.c:113
 msgid "granule_set: ipitch3 must be greater then zero"
 msgstr ""
 
-#: Opcodes/grain4.c:116
+#: Opcodes/grain4.c:118
 msgid "granule_set: ipitch4 must be greater then zero"
 msgstr ""
 
-#: Opcodes/grain4.c:121
+#: Opcodes/grain4.c:123
 msgid "granule_set: must be positive and less than function table length"
 msgstr ""
 
-#: Opcodes/grain4.c:125
+#: Opcodes/grain4.c:127
 msgid "granule_set: igskip_os must be greater then 0"
 msgstr ""
 
-#: Opcodes/grain4.c:134
+#: Opcodes/grain4.c:136
 msgid "granule_set: kgap must be greater then 0"
 msgstr ""
 
-#: Opcodes/grain4.c:138
+#: Opcodes/grain4.c:140
 #, c-format
 msgid "granule_set: igap_os must be 0%% to 100%%"
 msgstr ""
 
-#: Opcodes/grain4.c:142
+#: Opcodes/grain4.c:144
 msgid "granule_set: kgsize must be greater then 0"
 msgstr ""
 
-#: Opcodes/grain4.c:146
+#: Opcodes/grain4.c:148
 #, c-format
 msgid "granule_set: igsize_os must be 0%% to 100%%"
 msgstr ""
 
-#: Opcodes/grain4.c:152
+#: Opcodes/grain4.c:154
 msgid "granule_set: Illegal value of iatt and/or idec"
 msgstr ""
 
-#: Opcodes/grain4.c:236
+#: Opcodes/grain4.c:238
 msgid "granule_set: Illegal combination of igskip and ilength"
 msgstr ""
 
-#: Opcodes/grain4.c:243
+#: Opcodes/grain4.c:245
 #, c-format
 msgid ""
 "granule_set: WARNING * ilength may be too short * \n"
@@ -6709,7 +6605,7 @@ msgid ""
 "ilength is %f Sec, kgsize is %f Sec\n"
 msgstr ""
 
-#: Opcodes/grain4.c:418
+#: Opcodes/grain4.c:419
 msgid "grain4: not initialised"
 msgstr "grain4: no ha sido inicializado"
 
@@ -6721,92 +6617,88 @@ msgstr ""
 msgid "grain: not initialised"
 msgstr "grain: no ha sido inicializado"
 
-#: Opcodes/harmon.c:224
+#: Opcodes/harmon.c:226
 msgid "harm signal has positive lead\n"
 msgstr ""
 
-#: Opcodes/harmon.c:231
+#: Opcodes/harmon.c:233
 msgid "harm signal has negative lead\n"
 msgstr ""
 
-#: Opcodes/harmon.c:361
+#: Opcodes/harmon.c:363
 msgid "harmon234: out of range\n"
 msgstr ""
 
-#: Opcodes/hrtferX.c:79
+#: Opcodes/hrtferX.c:81
 #, c-format
 msgid ""
 "Orchestra sampling rate is not compatible with HRTF.\n"
 "Should be %d...exiting."
 msgstr ""
 
-#: Opcodes/hrtferX.c:87
+#: Opcodes/hrtferX.c:89
 msgid ""
 "\n"
 "Last argument must be the string 'HRTFcompact' ...correcting.\n"
 msgstr ""
 
-#: Opcodes/hrtferX.c:489
+#: Opcodes/hrtferX.c:494
 msgid "hrtfer: not initialised"
 msgstr "hrtfer: no ha sido inicializado"
 
-#: Opcodes/hrtfopcodes.c:232
+#: Opcodes/hrtfopcodes.c:260 Opcodes/hrtfopcodes.c:1434
+#: Opcodes/hrtfearly.c:300 Opcodes/hrtfreverb.c:257
 #, c-format
 msgid ""
 "\n"
-"Orchestra sampling rate is not compatible with HRTF data files\n"
-"Should be %.0f, see Csound help for object\n"
+"\n"
+"WARNING!!:\n"
+"Orchestra SR not compatible with HRTF processing SR of: %.0f\n"
 "\n"
 msgstr ""
 
-#: Opcodes/hrtfopcodes.c:251 Opcodes/hrtfopcodes.c:275
-#: Opcodes/hrtfopcodes.c:298 Opcodes/hrtfopcodes.c:1257
-#: Opcodes/hrtfopcodes.c:1280 Opcodes/hrtfopcodes.c:1303
-#: Opcodes/hrtfopcodes.c:1854 Opcodes/hrtfopcodes.c:1876
-#: Opcodes/hrtfopcodes.c:1898
+#: Opcodes/hrtfopcodes.c:287 Opcodes/hrtfopcodes.c:1461
+#: Opcodes/hrtfopcodes.c:2071 Opcodes/hrtfearly.c:327 Opcodes/hrtfreverb.c:300
 msgid ""
 "\n"
 "\n"
 "\n"
-"cannot load left data file, exiting\n"
+"Cannot load left data file, exiting\n"
 "\n"
 msgstr ""
 
-#: Opcodes/hrtfopcodes.c:259 Opcodes/hrtfopcodes.c:283
-#: Opcodes/hrtfopcodes.c:306 Opcodes/hrtfopcodes.c:1265
-#: Opcodes/hrtfopcodes.c:1288 Opcodes/hrtfopcodes.c:1311
-#: Opcodes/hrtfopcodes.c:1862 Opcodes/hrtfopcodes.c:1884
-#: Opcodes/hrtfopcodes.c:1906
+#: Opcodes/hrtfopcodes.c:294 Opcodes/hrtfopcodes.c:1468
+#: Opcodes/hrtfopcodes.c:2078 Opcodes/hrtfearly.c:334 Opcodes/hrtfreverb.c:306
 msgid ""
 "\n"
 "\n"
 "\n"
-"cannot load right data file, exiting\n"
+"Cannot load right data file, exiting\n"
 "\n"
 msgstr ""
 
-#: Opcodes/hrtfopcodes.c:313 Opcodes/hrtfopcodes.c:1912
+#: Opcodes/hrtfopcodes.c:690 Opcodes/hrtfearly.c:1241
 msgid ""
 "\n"
-"\n"
-"\n"
-" Sampling rate not supported, exiting\n"
+"WARNING: fades are overlapping: this could lead to noise: reduce fade size "
+"or change trajectory\n"
 "\n"
 msgstr ""
 
-#: Opcodes/hrtfopcodes.c:600
+#: Opcodes/hrtfopcodes.c:2052
+#, c-format
 msgid ""
-"fades are overlapping: this could lead to noise: reduce fade size or change "
-"trajectory\n"
+"\n"
+"\n"
+"WARNING!!:\n"
+"Orchestra SR not compatiblewith HRTF processing SR of: %.0f\n"
 "\n"
 msgstr ""
 
-#: Opcodes/hrtfopcodes.c:1239 Opcodes/hrtfopcodes.c:1837
-#, c-format
+#: Opcodes/hrtfreverb.c:832
 msgid ""
-"Orchestra sampling rate is not compatible with HRTF data files\n"
-"Should be %.0f, see Csound help for object\n"
 "\n"
+"warning, approaching instability, fixed with a flat late reverb!"
 msgstr ""
 
 #: Opcodes/ifd.c:74
@@ -6832,10 +6724,9 @@ msgid "imageload: file %s is not in PNG format.\n"
 msgstr ""
 
 #: Opcodes/imageOpcodes.c:119 Opcodes/imageOpcodes.c:126
-#: Opcodes/imageOpcodes.c:134 Opcodes/imageOpcodes.c:165
-#: Opcodes/imageOpcodes.c:174 Opcodes/imageOpcodes.c:188
-#: Opcodes/imageOpcodes.c:291 Opcodes/imageOpcodes.c:298
-#: Opcodes/imageOpcodes.c:311
+#: Opcodes/imageOpcodes.c:165 Opcodes/imageOpcodes.c:174
+#: Opcodes/imageOpcodes.c:188 Opcodes/imageOpcodes.c:291
+#: Opcodes/imageOpcodes.c:298 Opcodes/imageOpcodes.c:311
 msgid "imageload: out of memory.\n"
 msgstr ""
 
@@ -6855,62 +6746,62 @@ msgid ""
 "Status: %d\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:543
+#: Opcodes/jacko.cpp:545
 #, c-format
 msgid "Created Jack client \"%s\" for Jack server \"%s\".\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:548
+#: Opcodes/jacko.cpp:551
 #, c-format
 msgid "Jack buffer size %d != Csound ksmps %d, exiting...\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:556
+#: Opcodes/jacko.cpp:559
 #, c-format
 msgid "Jack sampling rate %d != Csound sr %d, exiting...\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:567
+#: Opcodes/jacko.cpp:570
 #, c-format
 msgid "Activated Jack client \"%s\".\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:571
+#: Opcodes/jacko.cpp:574
 #, c-format
 msgid "Failed to activate Jack client \"%s\": status %d.\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:586
+#: Opcodes/jacko.cpp:589
 msgid "BEGAN JackoState::close()...\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:622
+#: Opcodes/jacko.cpp:629
 msgid "ENDED JackoState::close().\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:876
+#: Opcodes/jacko.cpp:892
 #, c-format
 msgid "Failed to set Jack freewheeling mode to \"%s\": error %d.\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:878
+#: Opcodes/jacko.cpp:895
 #, c-format
 msgid "Set Jack freewheeling mode to \"%s\".\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:893
+#: Opcodes/jacko.cpp:911
 #, c-format
 msgid "Turned Jack connections \"%s\".\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:934 Opcodes/jacko.cpp:1034 Opcodes/jacko.cpp:1134
-#: Opcodes/jacko.cpp:1200
+#: Opcodes/jacko.cpp:955 Opcodes/jacko.cpp:1062 Opcodes/jacko.cpp:1169
+#: Opcodes/jacko.cpp:1241
 #, c-format
 msgid "Could not create Jack port \"%s\".\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:946 Opcodes/jacko.cpp:1046 Opcodes/jacko.cpp:1146
-#: Opcodes/jacko.cpp:1212
+#: Opcodes/jacko.cpp:969 Opcodes/jacko.cpp:1077 Opcodes/jacko.cpp:1184
+#: Opcodes/jacko.cpp:1255
 #, c-format
 msgid "Could not create Jack connection from \"%s\" to \"%s\": status %d.\n"
 msgstr ""
@@ -6949,27 +6840,27 @@ msgstr ""
 msgid "lorisread cannot load %s"
 msgstr ""
 
-#: Opcodes/loscilx.c:74 Opcodes/loscilx.c:178
+#: Opcodes/loscilx.c:76 Opcodes/loscilx.c:180
 #, c-format
 msgid "could not load '%s'"
 msgstr ""
 
-#: Opcodes/loscilx.c:88 Opcodes/loscilx.c:258
+#: Opcodes/loscilx.c:90 Opcodes/loscilx.c:260
 #, c-format
 msgid "invalid loop mode: %d"
 msgstr ""
 
-#: Opcodes/loscilx.c:170
+#: Opcodes/loscilx.c:172
 msgid "loscilx: invalid number of output arguments"
 msgstr ""
 
-#: Opcodes/loscilx.c:190 Opcodes/loscilx.c:219 Opcodes/pvlock.c:94
-#: Opcodes/pvlock.c:296 Opcodes/pvsbasic.c:460
+#: Opcodes/loscilx.c:192 Opcodes/loscilx.c:221 Opcodes/pvlock.c:118
+#: Opcodes/pvlock.c:320 Opcodes/pvsbasic.c:460
 msgid ""
 "number of output arguments inconsistent with number of sound file channels"
 msgstr ""
 
-#: Opcodes/loscilx.c:665
+#: Opcodes/loscilx.c:667
 msgid "loscilx: not initialised"
 msgstr "loscilx: no ha sido inicializado"
 
@@ -6977,11 +6868,11 @@ msgstr "loscilx: no ha sido inicializado"
 msgid "illegal order num. (min 1, max 10)"
 msgstr ""
 
-#: Opcodes/mandolin.c:80
+#: Opcodes/mandolin.c:81
 msgid "No table for Mandolin"
 msgstr ""
 
-#: Opcodes/mandolin.c:90
+#: Opcodes/mandolin.c:91
 msgid "No base frequency for mandolin"
 msgstr ""
 
@@ -7012,27 +6903,27 @@ msgstr ""
 msgid "illegal lsb control number at position n.%d"
 msgstr ""
 
-#: Opcodes/modal4.c:45
+#: Opcodes/modal4.c:46
 msgid "No table for Modal4 case"
 msgstr ""
 
-#: Opcodes/modal4.c:245
+#: Opcodes/modal4.c:246
 msgid "No table for Marimba strike"
 msgstr ""
 
-#: Opcodes/modal4.c:284
+#: Opcodes/modal4.c:285
 msgid "striking three times here!!!\n"
 msgstr ""
 
-#: Opcodes/modal4.c:289
+#: Opcodes/modal4.c:290
 msgid "striking twice here!!\n"
 msgstr ""
 
-#: Opcodes/modal4.c:359
+#: Opcodes/modal4.c:360
 msgid "No table for Vibraphone strike"
 msgstr ""
 
-#: Opcodes/modal4.c:440
+#: Opcodes/modal4.c:441
 msgid "No table for Agogobell strike"
 msgstr ""
 
@@ -7040,12 +6931,12 @@ msgstr ""
 msgid "modmatrix: "
 msgstr ""
 
-#: Opcodes/mp3in.c:92 Opcodes/mp3in.c:230
+#: Opcodes/mp3in.c:93 Opcodes/mp3in.c:231
 #, c-format
 msgid "mp3in: %s: failed to open file"
 msgstr "mp3in: %s: no se puede abrir el archivo"
 
-#: Opcodes/mp3in.c:139
+#: Opcodes/mp3in.c:140
 #, fuzzy, c-format
 msgid "mp3in: file sample rate (%d) != orchestra sr (%d)\n"
 msgstr ""
@@ -7282,7 +7173,7 @@ msgstr ""
 #: Opcodes/OSC.c:240
 #, fuzzy, c-format
 msgid "ftable %.2f does not exist"
-msgstr "la tabla-f (ftable) no existe"
+msgstr "la tabla-f (ftable) %.2f no existe"
 
 #: Opcodes/OSC.c:249
 #, c-format
@@ -7334,7 +7225,7 @@ msgstr ""
 msgid "No open glove"
 msgstr ""
 
-#: Opcodes/pan2.c:43
+#: Opcodes/pan2.c:45
 msgid "Unknown panning type"
 msgstr ""
 
@@ -7350,192 +7241,196 @@ msgstr ""
 msgid "partikkelsync: could not find opcode id"
 msgstr ""
 
-#: Opcodes/physmod.c:121
+#: Opcodes/physmod.c:122
 msgid "No table for Clarinet"
 msgstr ""
 
-#: Opcodes/physmod.c:129
+#: Opcodes/physmod.c:130
 msgid "No base frequency for clarinet -- assuming 50Hz\n"
 msgstr ""
 
-#: Opcodes/physmod.c:283
+#: Opcodes/physmod.c:284
 msgid "No table for Flute"
 msgstr ""
 
-#: Opcodes/physmod.c:291
+#: Opcodes/physmod.c:292
 msgid "No base frequency for flute -- assumed to be 50Hz\n"
 msgstr ""
 
-#: Opcodes/physmod.c:481
+#: Opcodes/physmod.c:482
 msgid "No table for wgbow vibrato"
 msgstr ""
 
-#: Opcodes/physmod.c:689
+#: Opcodes/physmod.c:490
+msgid "unknown lowest frequency for bowed string -- assuming 50Hz\n"
+msgstr ""
+
+#: Opcodes/physmod.c:690
 msgid "DlineA not initialised"
 msgstr "DlineA no ha sido inicializado"
 
-#: Opcodes/physmod.c:756
+#: Opcodes/physmod.c:757
 msgid "No table for Brass"
 msgstr ""
 
-#: Opcodes/physmod.c:765
+#: Opcodes/physmod.c:766
 msgid "No base frequency for brass -- assumed to be 50Hz\n"
 msgstr ""
 
-#: Opcodes/physutil.c:137 Opcodes/physutil.c:312 Opcodes/physutil.c:324
-#: Opcodes/physutil.c:345
+#: Opcodes/physutil.c:138 Opcodes/physutil.c:313 Opcodes/physutil.c:325
+#: Opcodes/physutil.c:346
 msgid "negative rates not allowed!!, correcting\n"
 msgstr ""
 
-#: Opcodes/physutil.c:186
+#: Opcodes/physutil.c:187
 #, c-format
 msgid "Envelope: value=%f target=%f rate=%f state=%d\n"
 msgstr ""
 
-#: Opcodes/physutil.c:335
+#: Opcodes/physutil.c:336
 msgid "Sustain level out of range!!, correcting\n"
 msgstr ""
 
-#: Opcodes/physutil.c:356 Opcodes/physutil.c:366 Opcodes/physutil.c:376
+#: Opcodes/physutil.c:357 Opcodes/physutil.c:367 Opcodes/physutil.c:377
 msgid "negative times not allowed!!, correcting\n"
 msgstr ""
 
-#: Opcodes/pitch0.c:37
+#: Opcodes/pitch0.c:38
 #, c-format
 msgid "Muting new instances of instr %d\n"
 msgstr ""
 
-#: Opcodes/pitch0.c:40
+#: Opcodes/pitch0.c:41
 #, c-format
 msgid "Allowing instrument %d to start\n"
 msgstr ""
 
-#: Opcodes/pitch.c:84 Opcodes/spectra.c:78
+#: Opcodes/pitch.c:85 Opcodes/spectra.c:80
 msgid "illegal iocts"
 msgstr ""
 
-#: Opcodes/pitch.c:86 Opcodes/spectra.c:80
+#: Opcodes/pitch.c:87 Opcodes/spectra.c:82
 msgid "illegal ifrqs"
 msgstr ""
 
-#: Opcodes/pitch.c:180 Opcodes/spectra.c:584
+#: Opcodes/pitch.c:181 Opcodes/spectra.c:586
 msgid "illegal no of partials"
 msgstr ""
 
-#: Opcodes/pitch.c:205
+#: Opcodes/pitch.c:206
 msgid "per octave rolloff too steep"
 msgstr ""
 
-#: Opcodes/pitch.c:219 Opcodes/spectra.c:625
+#: Opcodes/pitch.c:220 Opcodes/spectra.c:627
 msgid "illegal lo-hi values"
 msgstr ""
 
-#: Opcodes/pitch.c:454
+#: Opcodes/pitch.c:455
 msgid "pitch: not initialised"
 msgstr "pitch: no ha sido inicializado"
 
-#: Opcodes/pitch.c:463
+#: Opcodes/pitch.c:464
 msgid "Must have even number of arguments in mac\n"
 msgstr ""
 
-#: Opcodes/pitch.c:552
+#: Opcodes/pitch.c:553
 msgid "clockread: clock still running, call clockoff first"
 msgstr ""
 
-#: Opcodes/pitch.c:578
+#: Opcodes/pitch.c:579
 msgid "adsynt: wavetable not found!"
 msgstr ""
 
-#: Opcodes/pitch.c:591
+#: Opcodes/pitch.c:592
 msgid "adsynt: freqtable not found!"
 msgstr ""
 
-#: Opcodes/pitch.c:596
+#: Opcodes/pitch.c:597
 msgid "adsynt: partial count is greater than freqtable size!"
 msgstr ""
 
-#: Opcodes/pitch.c:604
+#: Opcodes/pitch.c:605
 msgid "adsynt: amptable not found!"
 msgstr ""
 
-#: Opcodes/pitch.c:609
+#: Opcodes/pitch.c:610
 msgid "adsynt: partial count is greater than amptable size!"
 msgstr ""
 
-#: Opcodes/pitch.c:640
+#: Opcodes/pitch.c:641
 msgid "adsynt: not initialised"
 msgstr "adsynt: no ha sido inicializado"
 
-#: Opcodes/pitch.c:716
+#: Opcodes/pitch.c:717
 msgid "hsboscil: not initialised"
 msgstr "hsboscil: no ha sido inicializado"
 
-#: Opcodes/pitch.c:799
+#: Opcodes/pitch.c:800
 msgid "pitchamdf: maxcps must be > mincps !"
 msgstr ""
 
-#: Opcodes/pitch.c:945
+#: Opcodes/pitch.c:946
 msgid "pitchamdf: not initialised"
 msgstr "pitchamdf: no ha sido inicializado"
 
-#: Opcodes/pitch.c:1125 Opcodes/pitch.c:1152
+#: Opcodes/pitch.c:1126 Opcodes/pitch.c:1153
 msgid "phasorbnk: not initialised"
 msgstr "phasorbnk: no ha sido inicializado"
 
-#: Opcodes/pitch.c:1214
+#: Opcodes/pitch.c:1215
 msgid "pinkish: Invalid method code"
 msgstr ""
 
-#: Opcodes/pitch.c:1225
+#: Opcodes/pitch.c:1226
 msgid "pinkish: Filter method requires a-rate (noise) input"
 msgstr ""
 
-#: Opcodes/pitch.c:1348
+#: Opcodes/pitch.c:1349
 #, c-format
 msgid ""
 "pinkish: Gardner method requires 4-%d bands. Default %ld substituted for "
 "%d.\n"
 msgstr ""
 
-#: Opcodes/pitch.c:1731
+#: Opcodes/pitch.c:1733
 msgid "Incorrect argument count in transeg"
 msgstr ""
 
-#: Opcodes/pitch.c:1782
+#: Opcodes/pitch.c:1784
 msgid "Incorrect argument count in transegb"
 msgstr ""
 
-#: Opcodes/pitch.c:1832 Opcodes/pitch.c:1971
+#: Opcodes/pitch.c:1834 Opcodes/pitch.c:1977
 msgid "Error: transeg not initialised (krate)\n"
 msgstr "Error: transeg no ha sido inicializado (krate)\n"
 
-#: Opcodes/pitch.c:1867 Opcodes/pitch.c:2013
+#: Opcodes/pitch.c:1869 Opcodes/pitch.c:2027
 msgid "transeg: not initialised (arate)\n"
 msgstr "transeg: no ha sido inicializado (arate)\n"
 
-#: Opcodes/pitch.c:1921
+#: Opcodes/pitch.c:1924
 msgid "Incorrect argument count in transegr"
 msgstr ""
 
-#: Opcodes/pitch.c:2269
+#: Opcodes/pitch.c:2294
 msgid "median: not initialised (arate)\n"
 msgstr "median: no ha sido inicializado (arate)\n"
 
-#: Opcodes/pitch.c:2273 Opcodes/pitch.c:2321
+#: Opcodes/pitch.c:2298 Opcodes/pitch.c:2345
 #, c-format
 msgid "median: window (%d)larger than maximum(%d); truncated"
 msgstr ""
 
-#: Opcodes/pitch.c:2317
+#: Opcodes/pitch.c:2341
 msgid "median: not initialised (krate)\n"
 msgstr "median no ha sido inicializado (krate)\n"
 
-#: Opcodes/pitchtrack.c:369
+#: Opcodes/pitchtrack.c:370
 #, c-format
 msgid "ptrack: FFT size out of range; using %d\n"
 msgstr ""
 
-#: Opcodes/pitchtrack.c:382
+#: Opcodes/pitchtrack.c:383
 #, c-format
 msgid "ptrack: FFT size not a power of 2; using %d\n"
 msgstr ""
@@ -7553,7 +7448,7 @@ msgstr ""
 msgid "Error: %s, %s"
 msgstr ""
 
-#: Opcodes/ppp.c:20 Opcodes/pvlock.c:454 Opcodes/pvsband.c:46
+#: Opcodes/ppp.c:20 Opcodes/pvlock.c:478 Opcodes/pvsband.c:46
 #: Opcodes/pvsbasic.c:575 Opcodes/pvsbasic.c:880 Opcodes/pvsbasic.c:1080
 #: Opcodes/pvsbasic.c:1180 Opcodes/pvsbasic.c:1395 Opcodes/pvsbasic.c:1593
 #: Opcodes/pvsbasic.c:1756 Opcodes/pvslock.c:20
@@ -7572,62 +7467,62 @@ msgstr ""
 msgid "psynth: function table not found\n"
 msgstr ""
 
-#: Opcodes/psynth.c:569 Opcodes/psynth.c:662
+#: Opcodes/psynth.c:567 Opcodes/psynth.c:660
 msgid "Input not in TRACKS format\n"
 msgstr ""
 
-#: Opcodes/psynth.c:767
+#: Opcodes/psynth.c:765
 msgid "trsplit: input not in TRACKS format\n"
 msgstr ""
 
-#: Opcodes/psynth.c:863 Opcodes/psynth.c:1027
+#: Opcodes/psynth.c:861 Opcodes/psynth.c:1023
 msgid "trmix: first input not in TRACKS format\n"
 msgstr ""
 
-#: Opcodes/psynth.c:868 Opcodes/psynth.c:1032
+#: Opcodes/psynth.c:866 Opcodes/psynth.c:1028
 msgid "trmix: second input not in TRACKS format\n"
 msgstr ""
 
-#: Opcodes/psynth.c:943
+#: Opcodes/psynth.c:939
 msgid "trfil: input not in TRACKS format\n"
 msgstr ""
 
-#: Opcodes/psynth.c:948
+#: Opcodes/psynth.c:944
 msgid "trfil: could not find function table\n"
 msgstr ""
 
-#: Opcodes/psynth.c:1135
+#: Opcodes/psynth.c:1131
 msgid "binit: first input not in TRACKS format\n"
 msgstr ""
 
-#: Opcodes/pvadd.c:153
+#: Opcodes/pvadd.c:150
 msgid "PVADD ktimpnt truncated to last frame"
 msgstr ""
 
-#: Opcodes/pvadd.c:191
+#: Opcodes/pvadd.c:188
 msgid "pvadd: not initialised"
 msgstr "pvadd: no ha sido inicializado"
 
-#: Opcodes/pvadd.c:193
+#: Opcodes/pvadd.c:190
 msgid "PVADD timpnt < 0"
 msgstr ""
 
-#: Opcodes/pvadd.c:201
+#: Opcodes/pvadd.c:198
 #, c-format
 msgid "PVADD cannot load %s"
 msgstr ""
 
-#: Opcodes/pvadd.c:205 Opcodes/ugens8.c:223
+#: Opcodes/pvadd.c:202 Opcodes/ugens8.c:223
 #, c-format
 msgid "pvoc-ex file %s: FFT size %d too large for Csound"
 msgstr ""
 
-#: Opcodes/pvadd.c:210
+#: Opcodes/pvadd.c:207
 #, c-format
 msgid "PV frame %ld seems too small in %s"
 msgstr ""
 
-#: Opcodes/pvadd.c:215 Opcodes/pvread.c:115 Opcodes/ugens8.c:229
+#: Opcodes/pvadd.c:212 Opcodes/pvread.c:115 Opcodes/ugens8.c:229
 #, c-format
 msgid "pvoc-ex file %s is not mono"
 msgstr ""
@@ -7637,98 +7532,98 @@ msgstr ""
 msgid "PVBUFREAD cannot load %s"
 msgstr ""
 
-#: Opcodes/pvinterp.c:76 Opcodes/vpvoc.c:206
+#: Opcodes/pvinterp.c:76 Opcodes/vpvoc.c:207
 #, c-format
 msgid "PVOC frame %ld bigger than %ld in %s"
 msgstr ""
 
-#: Opcodes/pvinterp.c:81 Opcodes/vpvoc.c:211
+#: Opcodes/pvinterp.c:81 Opcodes/vpvoc.c:212
 #, c-format
 msgid "PVOC frame %ld seems too small in %s"
 msgstr ""
 
-#: Opcodes/pvinterp.c:85 Opcodes/pvinterp.c:184 Opcodes/pvinterp.c:356
-#: Opcodes/vpvoc.c:215
+#: Opcodes/pvinterp.c:85 Opcodes/pvinterp.c:183 Opcodes/pvinterp.c:354
+#: Opcodes/vpvoc.c:216
 #, c-format
 msgid "%d chans (not 1) in PVOC file %s"
 msgstr ""
 
-#: Opcodes/pvinterp.c:101 Opcodes/pvinterp.c:212 Opcodes/pvinterp.c:382
+#: Opcodes/pvinterp.c:100 Opcodes/pvinterp.c:210 Opcodes/pvinterp.c:379
 #: Opcodes/ugens8.c:95 Opcodes/vpvoc.c:244
 #, c-format
 msgid "ksmps of %d needs wdw of %d, max is %d for pv %s"
 msgstr ""
 
-#: Opcodes/pvinterp.c:122 Opcodes/pvinterp.c:256 Opcodes/pvinterp.c:431
+#: Opcodes/pvinterp.c:121 Opcodes/pvinterp.c:254 Opcodes/pvinterp.c:428
 #: Opcodes/pvread.c:95 Opcodes/ugens8.c:156 Opcodes/vpvoc.c:297
 msgid "PVOC ktimpnt truncated to last frame"
 msgstr ""
 
-#: Opcodes/pvinterp.c:130
+#: Opcodes/pvinterp.c:129
 msgid "pvbufread: not initialised"
 msgstr "pvbufread: no ha sido inicializado"
 
-#: Opcodes/pvinterp.c:132 Opcodes/pvinterp.c:306 Opcodes/pvinterp.c:492
+#: Opcodes/pvinterp.c:131 Opcodes/pvinterp.c:304 Opcodes/pvinterp.c:489
 #: Opcodes/pvread.c:103 Opcodes/ugens8.c:206 Opcodes/vpvoc.c:361
 msgid "PVOC timpnt < 0"
 msgstr ""
 
-#: Opcodes/pvinterp.c:149
+#: Opcodes/pvinterp.c:148
 msgid "pvinterp: associated pvbufread not found"
 msgstr ""
 
-#: Opcodes/pvinterp.c:166
+#: Opcodes/pvinterp.c:165
 #, c-format
 msgid "PVINTERP cannot load %s"
 msgstr ""
 
-#: Opcodes/pvinterp.c:179
+#: Opcodes/pvinterp.c:178
 #, c-format
 msgid "pvinterp: %s: frame size %d does not match pvbufread frame size %d\n"
 msgstr ""
 
-#: Opcodes/pvinterp.c:300
+#: Opcodes/pvinterp.c:298
 msgid "pvinterp: not initialised"
 msgstr "pvinterp: no ha sido inicializado"
 
-#: Opcodes/pvinterp.c:302 Opcodes/pvinterp.c:488 Opcodes/ugens8.c:202
+#: Opcodes/pvinterp.c:300 Opcodes/pvinterp.c:485 Opcodes/ugens8.c:202
 #: Opcodes/vpvoc.c:357
 msgid "PVOC transpose too low"
 msgstr ""
 
-#: Opcodes/pvinterp.c:304 Opcodes/pvinterp.c:490 Opcodes/ugens8.c:204
+#: Opcodes/pvinterp.c:302 Opcodes/pvinterp.c:487 Opcodes/ugens8.c:204
 #: Opcodes/vpvoc.c:359
 msgid "PVOC transpose too high"
 msgstr ""
 
-#: Opcodes/pvinterp.c:323
+#: Opcodes/pvinterp.c:321
 msgid "pvcross: associated pvbufread not found"
 msgstr ""
 
-#: Opcodes/pvinterp.c:339
+#: Opcodes/pvinterp.c:337
 #, c-format
 msgid "PVCROSS cannot load %s"
 msgstr ""
 
-#: Opcodes/pvinterp.c:351
+#: Opcodes/pvinterp.c:349
 #, c-format
 msgid "pvcross: %s: frame size %d does not match pvbufread frame size %d\n"
 msgstr ""
 
-#: Opcodes/pvinterp.c:454 Opcodes/vpvoc.c:322
+#: Opcodes/pvinterp.c:451 Opcodes/vpvoc.c:322
 msgid "PVOC debug: one frame gets through\n"
 msgstr ""
 
-#: Opcodes/pvinterp.c:486
+#: Opcodes/pvinterp.c:483
 msgid "pvcross: not initialised"
 msgstr "pvcross: no ha sido inicializado"
 
-#: Opcodes/pvlock.c:35 Opcodes/pvsbasic.c:380
+#: Opcodes/pvlock.c:59 Opcodes/pvsbasic.c:380
 #, fuzzy
 msgid "invalid number of output arguments"
 msgstr "número inválido de argumentos"
 
-#: Opcodes/pvlock.c:466
+#: Opcodes/pvlock.c:490
 msgid "pvsfreeze: signal format must be amp-freq."
 msgstr ""
 
@@ -7748,7 +7643,7 @@ msgstr "pvsband: no ha sido inicializado"
 #: Opcodes/pvsbasic.c:69
 #, fuzzy
 msgid "pvsgain: signal format must be amp-phase or amp-freq."
-msgstr "formato de muestra inválido: debe ser -s, -l, or -f"
+msgstr ""
 
 #: Opcodes/pvsbasic.c:181 Opcodes/pvsbasic.c:248
 msgid "SDFT Not implemented in this case yet"
@@ -7835,31 +7730,36 @@ msgstr "pvstencil: no ha sido inicializado"
 #: Opcodes/pvsbasic.c:2148
 #, fuzzy
 msgid "pvs2tab: signal format must be amp-phase or amp-freq."
-msgstr "formato de muestra inválido: debe ser -s, -l, or -f"
+msgstr ""
 
-#: Opcodes/pvsbasic.c:2151 Opcodes/pvsbasic.c:2190 Opcodes/tabvars.c:53
-#: Opcodes/tabvars.c:89 Opcodes/tabvars.c:131 Opcodes/tabvars.c:176
-#: Opcodes/tabvars.c:178
+#: Opcodes/pvsbasic.c:2151 Opcodes/pvsbasic.c:2189 Opcodes/tabvars.c:56
+#: Opcodes/tabvars.c:92 Opcodes/tabvars.c:134 Opcodes/tabvars.c:179
+#: Opcodes/tabvars.c:181
 #, fuzzy
 msgid "t-variable not initialised"
-msgstr "table: no ha sido inicializado"
+msgstr "t-variable no ha sido inicializado"
 
-#: Opcodes/pvsbuffer.c:53 Opcodes/pvscent.c:164 Opcodes/pvsdemix.c:49
+#: Opcodes/pvsbuffer.c:56 Opcodes/pvscent.c:164 Opcodes/pvsdemix.c:49
 msgid "SDFT case not implemented yet"
 msgstr ""
 
-#: Opcodes/pvsbuffer.c:85
+#: Opcodes/pvsbuffer.c:89
 msgid "error... could not create global var for handle\n"
 msgstr ""
 
-#: Opcodes/pvsbuffer.c:143 Opcodes/pvsbuffer.c:190 Opcodes/pvsbuffer.c:258
+#: Opcodes/pvsbuffer.c:148 Opcodes/pvsbuffer.c:197 Opcodes/pvsbuffer.c:266
 msgid "error... could not read handle from global variable\n"
 msgstr ""
 
-#: Opcodes/pvsbuffer.c:238 Opcodes/pvsbuffer.c:306
+#: Opcodes/pvsbuffer.c:246 Opcodes/pvsbuffer.c:316
 msgid "Invalid buffer handle"
 msgstr ""
 
+#: Opcodes/pvsbuffer.c:285 Opcodes/pvsbuffer.c:291
+#, c-format
+msgid "table length too small: needed %d, got %d\n"
+msgstr ""
+
 #: Opcodes/pvscent.c:42
 msgid "pvscent: format must be amp-phase or amp-freq.\n"
 msgstr ""
@@ -8048,48 +7948,48 @@ msgstr ""
 msgid "seqtim: incorrect table number"
 msgstr ""
 
-#: Opcodes/sfont.c:118
+#: Opcodes/sfont.c:121
 #, c-format
 msgid "sfload: cannot open SoundFont file \"%s\" (error %s)"
 msgstr ""
 
-#: Opcodes/sfont.c:123
+#: Opcodes/sfont.c:126
 msgid "Sfload: cannot use globals"
 msgstr ""
 
-#: Opcodes/sfont.c:153
+#: Opcodes/sfont.c:156
 msgid "sfload: could not open globals\n"
 msgstr ""
 
-#: Opcodes/sfont.c:170
+#: Opcodes/sfont.c:173
 msgid "Extending soundfonts"
 msgstr ""
 
-#: Opcodes/sfont.c:201
+#: Opcodes/sfont.c:204
 #, c-format
 msgid ""
 "\n"
 "Preset list of \"%s\"\n"
 msgstr ""
 
-#: Opcodes/sfont.c:204
+#: Opcodes/sfont.c:207
 #, c-format
 msgid "%3d) %-20s\tprog:%-3d bank:%d\n"
 msgstr ""
 
-#: Opcodes/sfont.c:226
+#: Opcodes/sfont.c:229
 #, c-format
 msgid ""
 "\n"
 "Assigning all Presets of \"%s\" starting from %d (preset handle number)\n"
 msgstr ""
 
-#: Opcodes/sfont.c:231
+#: Opcodes/sfont.c:234
 #, c-format
 msgid "%3d<--%-20s\t(prog:%-3d bank:%d)\n"
 msgstr ""
 
-#: Opcodes/sfont.c:238
+#: Opcodes/sfont.c:241
 #, c-format
 msgid ""
 "\n"
@@ -8097,38 +7997,38 @@ msgid ""
 "\n"
 msgstr ""
 
-#: Opcodes/sfont.c:251
+#: Opcodes/sfont.c:254
 #, c-format
 msgid ""
 "\n"
 "Instrument list of \"%s\"\n"
 msgstr ""
 
-#: Opcodes/sfont.c:268
+#: Opcodes/sfont.c:271
 #, c-format
 msgid "sfpreset: preset handle too big (%d), max: %d"
 msgstr ""
 
-#: Opcodes/sfont.c:284
+#: Opcodes/sfont.c:287
 #, c-format
 msgid ""
 "sfpreset: cannot find any preset having prog number %d and bank number %d in "
 "SoundFont file \"%s\""
 msgstr ""
 
-#: Opcodes/sfont.c:306 Opcodes/sfont.c:2189
+#: Opcodes/sfont.c:309 Opcodes/sfont.c:2192
 msgid "sfplay: invalid or out-of-range preset number"
 msgstr ""
 
-#: Opcodes/sfont.c:633
+#: Opcodes/sfont.c:636
 msgid "sfplaym: invalid or out-of-range preset number"
 msgstr ""
 
-#: Opcodes/sfont.c:888 Opcodes/sfont.c:1150
+#: Opcodes/sfont.c:891 Opcodes/sfont.c:1153
 msgid "sfinstr: instrument out of range"
 msgstr ""
 
-#: Opcodes/sfont.c:1598 Opcodes/sfont.c:1835
+#: Opcodes/sfont.c:1601 Opcodes/sfont.c:1838
 #, c-format
 msgid ""
 "SoundFont file \"%s\" contains ROM samples !\n"
@@ -8136,19 +8036,19 @@ msgid ""
 "Session aborted !"
 msgstr ""
 
-#: Opcodes/sfont.c:1987 Opcodes/sfont.c:1993
+#: Opcodes/sfont.c:1990 Opcodes/sfont.c:1996
 msgid "Sfont: cannot use globals/"
 msgstr ""
 
-#: Opcodes/sfont.c:1996
+#: Opcodes/sfont.c:1999
 msgid "Sfont format not compatible"
 msgstr ""
 
-#: Opcodes/sfont.c:2534
+#: Opcodes/sfont.c:2537
 msgid "error... could not create sfont globals\n"
 msgstr ""
 
-#: Opcodes/shape.c:49
+#: Opcodes/shape.c:51
 msgid "powershape: ifullscale must be strictly positive"
 msgstr ""
 
@@ -8160,25 +8060,25 @@ msgstr ""
 msgid "ftgenonce error"
 msgstr ""
 
-#: Opcodes/singwave.c:85
+#: Opcodes/singwave.c:86
 msgid "No table for Modulatr"
 msgstr ""
 
-#: Opcodes/singwave.c:127
+#: Opcodes/singwave.c:128
 msgid "No table for Singwave"
 msgstr ""
 
-#: Opcodes/singwave.c:207
+#: Opcodes/singwave.c:208
 #, c-format
 msgid "SingWave: rate=%f sweepRate=%f mytime=%f\n"
 msgstr ""
 
-#: Opcodes/singwave.c:273
+#: Opcodes/singwave.c:280
 #, c-format
 msgid "Found Formant: %s (number %i)\n"
 msgstr ""
 
-#: Opcodes/singwave.c:395
+#: Opcodes/singwave.c:397
 #, c-format
 msgid "Setting Phoneme: %d %f\n"
 msgstr ""
@@ -8211,15 +8111,15 @@ msgstr ""
 msgid "pvsarp: not initialised\n"
 msgstr "pvsarp: no ha sido inicializado\n"
 
-#: Opcodes/sndloop.c:995 Opcodes/sndloop.c:1092
+#: Opcodes/sndloop.c:995 Opcodes/sndloop.c:1091
 msgid "signal format must be amp-phase or amp-freq.\n"
 msgstr ""
 
-#: Opcodes/sndloop.c:1072
+#: Opcodes/sndloop.c:1071
 msgid "pvsvoc: not initialised\n"
 msgstr "pvsvoc: no ha sido inicializado\n"
 
-#: Opcodes/sndloop.c:1123
+#: Opcodes/sndloop.c:1122
 msgid "pvsmorph: not initialised\n"
 msgstr "pvsmorph: no ha sido inicializado\n"
 
@@ -8239,25 +8139,27 @@ msgstr ""
 msgid "sndwarpst: not initialised"
 msgstr "sndwarpst: no ha sido inicializado"
 
-#: Opcodes/sockrecv.c:123 Opcodes/sockrecv.c:213 Opcodes/sockrecv.c:300
-#: Opcodes/socksend.c:75 Opcodes/socksend.c:133 Opcodes/socksend.c:190
-msgid "creating socket"
+#: Opcodes/sockrecv.c:117 Opcodes/sockrecv.c:215 Opcodes/sockrecv.c:314
+#: Opcodes/socksend.c:73 Opcodes/socksend.c:157 Opcodes/socksend.c:252
+#, c-format
+msgid "Winsock2 failed to start: %d"
 msgstr ""
 
-#: Opcodes/sockrecv.c:322
-msgid "connect failed"
+#: Opcodes/sockrecv.c:131 Opcodes/sockrecv.c:227 Opcodes/sockrecv.c:320
+#: Opcodes/socksend.c:86 Opcodes/socksend.c:171 Opcodes/socksend.c:259
+msgid "creating socket"
 msgstr ""
 
-#: Opcodes/sockrecv.c:335
-msgid "read from socket failed"
+#: Opcodes/sockrecv.c:347
+#, c-format
+msgid "connect failed (%d)"
 msgstr ""
 
-#: Opcodes/socksend.c:67 Opcodes/socksend.c:125
-#, c-format
-msgid "The buffersize must be <= %d samples to fit in a udp-packet."
+#: Opcodes/sockrecv.c:360
+msgid "read from socket failed"
 msgstr ""
 
-#: Opcodes/socksend.c:107 Opcodes/socksend.c:169
+#: Opcodes/socksend.c:126 Opcodes/socksend.c:215
 msgid "sendto failed"
 msgstr ""
 
@@ -8277,199 +8179,199 @@ msgstr "spat3d: no ha sido inicializado"
 msgid "spat3di: not initialised"
 msgstr "spat3di: no ha sido inicializado"
 
-#: Opcodes/spectra.c:82
+#: Opcodes/spectra.c:84
 msgid "illegal Q value"
 msgstr ""
 
-#: Opcodes/spectra.c:84
+#: Opcodes/spectra.c:86
 msgid "unknown dbout code"
 msgstr ""
 
-#: Opcodes/spectra.c:104
+#: Opcodes/spectra.c:106
 #, c-format
 msgid "spectrum: %s window, %s out, making tables ...\n"
 msgstr ""
 
-#: Opcodes/spectra.c:123
+#: Opcodes/spectra.c:125
 #, c-format
 msgid ""
 "\thigh cps %7.1f\n"
 "\t low cps %7.1f\n"
 msgstr ""
 
-#: Opcodes/spectra.c:138
+#: Opcodes/spectra.c:140
 #, c-format
 msgid "\tQ %4.1f uses a %d sample window each octdown\n"
 msgstr ""
 
-#: Opcodes/spectra.c:169
+#: Opcodes/spectra.c:171
 msgid "spectrum windowed sines:"
 msgstr ""
 
-#: Opcodes/spectra.c:187
+#: Opcodes/spectra.c:189
 #, c-format
 msgid "\t%d oct analysis window delay = %ld samples (%d msecs)\n"
 msgstr ""
 
-#: Opcodes/spectra.c:195
+#: Opcodes/spectra.c:197
 msgid "octdown buffers:"
 msgstr ""
 
-#: Opcodes/spectra.c:513 Opcodes/spectra.c:553
+#: Opcodes/spectra.c:515 Opcodes/spectra.c:555
 msgid "specdisp: not initialised"
 msgstr "specdisp: no ha sido inicializado"
 
-#: Opcodes/spectra.c:523
+#: Opcodes/spectra.c:525
 #, c-format
 msgid "instr %d %s, dft (%s), %ld octaves (%d - %d Hz):"
 msgstr ""
 
-#: Opcodes/spectra.c:530
+#: Opcodes/spectra.c:532
 #, c-format
 msgid "instr %d %s, dft (%s), %ld octaves (%3.1f - %3.1f Hz):"
 msgstr ""
 
-#: Opcodes/spectra.c:611
+#: Opcodes/spectra.c:613
 msgid "per oct rolloff too steep"
 msgstr ""
 
-#: Opcodes/spectra.c:632
+#: Opcodes/spectra.c:634
 #, c-format
 msgid "specptrk: %d freqs, %d%s ptls at "
 msgstr ""
 
-#: Opcodes/spectra.c:633
+#: Opcodes/spectra.c:635
 msgid " odd"
 msgstr ""
 
-#: Opcodes/spectra.c:637
+#: Opcodes/spectra.c:639
 msgid ""
 "\n"
 "\t\trolloff vals:"
 msgstr ""
 
-#: Opcodes/spectra.c:660
+#: Opcodes/spectra.c:662
 #, c-format
 msgid ""
 "\n"
 "\tdbthresh %4.1f: X-corr %s threshon %4.1f, threshoff %4.1f\n"
 msgstr ""
 
-#: Opcodes/spectra.c:817
+#: Opcodes/spectra.c:819
 msgid "specptrk: not initialised"
 msgstr "specptrk: no ha sido inicializado"
 
-#: Opcodes/spectra.c:849
+#: Opcodes/spectra.c:851
 msgid "specsum: not initialised"
 msgstr "specsum: no ha sido inicializado"
 
-#: Opcodes/spectra.c:860
+#: Opcodes/spectra.c:862
 msgid "inputs have different sizes"
 msgstr ""
 
-#: Opcodes/spectra.c:863
+#: Opcodes/spectra.c:865
 msgid "inputs have diff. time periods"
 msgstr ""
 
-#: Opcodes/spectra.c:867
+#: Opcodes/spectra.c:869
 msgid "inputs have different freq resolution"
 msgstr ""
 
-#: Opcodes/spectra.c:870
+#: Opcodes/spectra.c:872
 msgid "inputs have different amptypes"
 msgstr ""
 
-#: Opcodes/spectra.c:902
+#: Opcodes/spectra.c:904
 msgid "specaddm: not initialised"
 msgstr "specaddm: no ha sido inicializado"
 
-#: Opcodes/spectra.c:926
+#: Opcodes/spectra.c:928
 msgid "specdiff: local buffers not initialised"
 msgstr ""
 
-#: Opcodes/spectra.c:964
+#: Opcodes/spectra.c:966
 msgid "specdiff: not initialised"
 msgstr "specdiff: no ha sido inicializado"
 
-#: Opcodes/spectra.c:986
+#: Opcodes/spectra.c:988
 msgid "specscal: local buffer not initialised"
 msgstr ""
 
-#: Opcodes/spectra.c:991
+#: Opcodes/spectra.c:993
 msgid "missing fscale table"
 msgstr ""
 
-#: Opcodes/spectra.c:1057
+#: Opcodes/spectra.c:1059
 msgid "specscal: not initialised"
 msgstr "specscal: no ha sido inicializado"
 
-#: Opcodes/spectra.c:1081
+#: Opcodes/spectra.c:1083
 msgid "spechist: local buffers not intiialised"
 msgstr ""
 
-#: Opcodes/spectra.c:1113
+#: Opcodes/spectra.c:1115
 msgid "spechist: not initialised"
 msgstr "spechist: no ha sido inicializado"
 
-#: Opcodes/spectra.c:1134
+#: Opcodes/spectra.c:1136
 msgid "specfilt: local buffers not initialised"
 msgstr ""
 
-#: Opcodes/spectra.c:1142
+#: Opcodes/spectra.c:1144
 msgid "missing htim ftable"
 msgstr ""
 
-#: Opcodes/spectra.c:1165
+#: Opcodes/spectra.c:1167
 msgid "htim ftable must be all-positive"
 msgstr ""
 
-#: Opcodes/spectra.c:1169
+#: Opcodes/spectra.c:1171
 #, c-format
 msgid "coef range: %6.3f - %6.3f\n"
 msgstr ""
 
-#: Opcodes/spectra.c:1201
+#: Opcodes/spectra.c:1203
 msgid "specfilt: not initialised"
 msgstr "specfilt: no ha sido inicializado"
 
-#: Opcodes/stackops.c:80
+#: Opcodes/stackops.c:81
 msgid "fsig = : source signal is not initialised"
 msgstr ""
 
-#: Opcodes/stackops.c:126
+#: Opcodes/stackops.c:125
 msgid "stack overflow"
 msgstr ""
 
-#: Opcodes/stackops.c:134
+#: Opcodes/stackops.c:131
 msgid "cannot pop from empty stack"
 msgstr ""
 
-#: Opcodes/stackops.c:142
+#: Opcodes/stackops.c:137
 msgid "argument number or type mismatch"
 msgstr ""
 
-#: Opcodes/stackops.c:150
+#: Opcodes/stackops.c:143
 msgid "string argument is too long"
 msgstr ""
 
-#: Opcodes/stackops.c:167
+#: Opcodes/stackops.c:160
 msgid "Error allocating argument stack"
 msgstr ""
 
-#: Opcodes/stackops.c:207 Top/argdecode.c:1212 util/envext.c:99
+#: Opcodes/stackops.c:200 Top/argdecode.c:1212 util/envext.c:99
 #: util/scale.c:248
 msgid "too many arguments"
 msgstr ""
 
-#: Opcodes/stackops.c:286
+#: Opcodes/stackops.c:279
 msgid "the stack is already allocated"
 msgstr ""
 
-#: Opcodes/stackops.c:637
+#: Opcodes/stackops.c:630
 msgid "number of arguments != nchnls"
 msgstr ""
 
-#: Opcodes/stdopcod.c:36
+#: Opcodes/stdopcod.c:37
 msgid "stdopcod.c: error: globals already allocated"
 msgstr ""
 
@@ -8484,35 +8386,44 @@ msgstr ""
 msgid "RAWWAVE_PATH: %s\n"
 msgstr ""
 
-#: Opcodes/syncgrain.c:175 Opcodes/syncgrain.c:338 Opcodes/syncgrain.c:683
+#: Opcodes/syncgrain.c:176 Opcodes/syncgrain.c:339 Opcodes/syncgrain.c:684
 msgid "grain size smaller than 1 sample\n"
 msgstr ""
 
-#: Opcodes/syncgrain.c:387
+#: Opcodes/syncgrain.c:388
 msgid "diskgrain: invalid number of channels"
 msgstr ""
 
-#: Opcodes/syncgrain.c:419
+#: Opcodes/syncgrain.c:420
 msgid "diskgrain: could not open file\n"
 msgstr ""
 
-#: Opcodes/syncgrain.c:423
+#: Opcodes/syncgrain.c:424
 msgid ""
 "diskgrain: soundfile channel numbers do not match the number of outputs \n"
 msgstr ""
 
-#: Opcodes/syncgrain.c:435
+#: Opcodes/syncgrain.c:436
 msgid "diskgrain: could not read file \n"
 msgstr ""
 
-#: Opcodes/tabsum.c:39
+#: Opcodes/tabsum.c:40
 msgid "tabsum: No table"
 msgstr ""
 
-#: Opcodes/tabsum.c:54
+#: Opcodes/tabsum.c:55
 msgid "tabsum: Not initialised"
 msgstr "tabsum: no ha sido inicializado"
 
+#: Opcodes/tabvars.c:201 Opcodes/tabvars.c:218
+#, fuzzy
+msgid "t-var not initialised"
+msgstr "t-var no ha sido inicializado"
+
+#: Opcodes/tabvars.c:203 Opcodes/tabvars.c:220
+msgid "No table for copy2ftab"
+msgstr ""
+
 #: Opcodes/ugens7.c:46 Opcodes/ugensa.c:49
 msgid "illegal value for iolaps"
 msgstr ""
@@ -8658,17 +8569,17 @@ msgstr ""
 msgid "table in iftfn for ftmorf does not exist"
 msgstr ""
 
-#: Opcodes/ugnorman.c:120
+#: Opcodes/ugnorman.c:121
 #, c-format
 msgid "%s: Ats file %s not read (does it exist?)"
 msgstr ""
 
-#: Opcodes/ugnorman.c:131
+#: Opcodes/ugnorman.c:132
 #, c-format
 msgid "%s: either %s is not an ATS file or the byte endianness is wrong"
 msgstr ""
 
-#: Opcodes/ugnorman.c:139
+#: Opcodes/ugnorman.c:140
 #, c-format
 msgid ""
 "%s: %s is byte-swapped\n"
@@ -8676,125 +8587,125 @@ msgid ""
 "\twill not result in different audio, but they may slow down processing."
 msgstr ""
 
-#: Opcodes/ugnorman.c:175
+#: Opcodes/ugnorman.c:176
 msgid ""
 "ATSINFO: location is out of bounds: 0-8 are the only possible selections"
 msgstr ""
 
-#: Opcodes/ugnorman.c:265
+#: Opcodes/ugnorman.c:266
 #, c-format
 msgid "ATSREAD: partial %i out of range, max allowed is %i"
 msgstr ""
 
-#: Opcodes/ugnorman.c:291
+#: Opcodes/ugnorman.c:292
 msgid "Type not implemented"
 msgstr ""
 
-#: Opcodes/ugnorman.c:310
+#: Opcodes/ugnorman.c:311
 msgid "ATSREAD: only positive time pointer values allowed, setting to zero\n"
 msgstr ""
 
-#: Opcodes/ugnorman.c:319
+#: Opcodes/ugnorman.c:320
 msgid "ATSREAD: timepointer out of range, truncated to last frame\n"
 msgstr ""
 
-#: Opcodes/ugnorman.c:332
+#: Opcodes/ugnorman.c:333
 msgid "ATSREAD: not initialised"
 msgstr "ATSREAD: no ha sido inicializado"
 
-#: Opcodes/ugnorman.c:394
+#: Opcodes/ugnorman.c:395
 #, c-format
 msgid "ATSREADNZ: band %i out of range, 1-25 are the valid band values"
 msgstr ""
 
-#: Opcodes/ugnorman.c:412
+#: Opcodes/ugnorman.c:413
 msgid "ATSREADNZ: Type either not implemented or does not contain noise"
 msgstr ""
 
-#: Opcodes/ugnorman.c:431
+#: Opcodes/ugnorman.c:432
 msgid "ATSREADNZ: only positive time pointer values allowed, setting to zero\n"
 msgstr ""
 
-#: Opcodes/ugnorman.c:440
+#: Opcodes/ugnorman.c:441
 msgid "ATSREADNZ: timepointer out of range, truncated to last frame\n"
 msgstr ""
 
-#: Opcodes/ugnorman.c:449
+#: Opcodes/ugnorman.c:450
 msgid "ATSREADNZ: not initialised"
 msgstr "ATSREADNZ: no ha sido inicializado"
 
-#: Opcodes/ugnorman.c:467
+#: Opcodes/ugnorman.c:468
 msgid "ATSADD: Function table number for synthesis waveform not valid"
 msgstr ""
 
-#: Opcodes/ugnorman.c:475
+#: Opcodes/ugnorman.c:476
 msgid "ATSADD: Gate Function table number not valid"
 msgstr ""
 
-#: Opcodes/ugnorman.c:521
+#: Opcodes/ugnorman.c:522
 #, c-format
 msgid "ATSADD: Partial(s) out of range, max partial allowed is %i"
 msgstr ""
 
-#: Opcodes/ugnorman.c:555
+#: Opcodes/ugnorman.c:556
 msgid "ATSADD: Type not implemented"
 msgstr ""
 
-#: Opcodes/ugnorman.c:585
+#: Opcodes/ugnorman.c:586
 msgid ""
 "ATSADD: only positive time pointer values are allowed, setting to zero\n"
 msgstr ""
 
-#: Opcodes/ugnorman.c:594
+#: Opcodes/ugnorman.c:595
 msgid "ATSADD: time pointer out of range, truncating to last frame\n"
 msgstr ""
 
-#: Opcodes/ugnorman.c:638
+#: Opcodes/ugnorman.c:639
 msgid "ATSADD: not initialised"
 msgstr "ATSADD: no ha sido inicializado"
 
-#: Opcodes/ugnorman.c:842
+#: Opcodes/ugnorman.c:845
 msgid "ATSADDNZ: This file type contains no noise"
 msgstr ""
 
-#: Opcodes/ugnorman.c:846
+#: Opcodes/ugnorman.c:849
 msgid "ATSADDNZ: This file type has not been implemented in this code yet."
 msgstr ""
 
-#: Opcodes/ugnorman.c:869
+#: Opcodes/ugnorman.c:872
 msgid "ATSADDNZ: Band(s) out of range, max band allowed is 25"
 msgstr ""
 
-#: Opcodes/ugnorman.c:886
+#: Opcodes/ugnorman.c:889
 msgid ""
 "ATSADDNZ: Type either has no noise or is not implemented (only type 3 and 4 "
 "work now)"
 msgstr ""
 
-#: Opcodes/ugnorman.c:1002
+#: Opcodes/ugnorman.c:1005
 msgid ""
 "ATSADDNZ: only positive time pointer values are allowed, setting to zero\n"
 msgstr ""
 
-#: Opcodes/ugnorman.c:1011
+#: Opcodes/ugnorman.c:1014
 msgid "ATSADDNZ: time pointer out of range, truncating to last frame\n"
 msgstr ""
 
-#: Opcodes/ugnorman.c:1165
+#: Opcodes/ugnorman.c:1168
 #, c-format
 msgid "ATSSINNOI: Partial(s) out of range, max partial allowed is %i"
 msgstr ""
 
-#: Opcodes/ugnorman.c:1202
+#: Opcodes/ugnorman.c:1205
 msgid "ATSSINNOI: Type not implemented"
 msgstr ""
 
-#: Opcodes/ugnorman.c:1315
+#: Opcodes/ugnorman.c:1316
 msgid ""
 "ATSSINNOI: only positive time pointer values are allowed, setting to zero\n"
 msgstr ""
 
-#: Opcodes/ugnorman.c:1324
+#: Opcodes/ugnorman.c:1325
 msgid "ATSSINNOI: time pointer out of range, truncating to last frame\n"
 msgstr ""
 
@@ -8867,44 +8778,44 @@ msgstr ""
 msgid "ATSCROSS: you must have an atsbufread before an atsinterpread"
 msgstr ""
 
-#: Opcodes/ugsc.c:394
+#: Opcodes/ugsc.c:390
 msgid "Phaser mode must be either 1 or 2"
 msgstr ""
 
-#: Opcodes/vbap.c:57
+#: Opcodes/vbap.c:59
 msgid "vbap: error allocating loudspeaker table"
 msgstr ""
 
-#: Opcodes/vbap.c:264
+#: Opcodes/vbap.c:266
 msgid ""
 "Number of loudspeakers is zero\n"
 "Exiting"
 msgstr ""
 
-#: Opcodes/vbap.c:573
+#: Opcodes/vbap.c:575
 msgid "Error in loudspeaker dimension."
 msgstr ""
 
-#: Opcodes/vbap.c:596
+#: Opcodes/vbap.c:598
 msgid "Too few loudspeakers"
 msgstr ""
 
-#: Opcodes/vbap.c:622
+#: Opcodes/vbap.c:624
 msgid "Not valid 3-D configuration"
 msgstr ""
 
-#: Opcodes/vbap.c:668 Opcodes/vbap.c:767
+#: Opcodes/vbap.c:670 Opcodes/vbap.c:769
 msgid ""
 "\n"
 "Configured loudspeakers\n"
 msgstr ""
 
-#: Opcodes/vbap.c:670
+#: Opcodes/vbap.c:672
 #, c-format
 msgid "Triplet %d Loudspeakers: "
 msgstr ""
 
-#: Opcodes/vbap.c:769
+#: Opcodes/vbap.c:771
 #, c-format
 msgid "Pair %d Loudspeakers: "
 msgstr ""
@@ -8986,41 +8897,33 @@ msgstr ""
 msgid "Have to have at least %d directions in vbapzmove"
 msgstr ""
 
-#: Opcodes/Vosim.c:49
+#: Opcodes/Vosim.c:51
 msgid "vosim: pulse table not found"
 msgstr ""
 
-#: Opcodes/Vosim.c:72
+#: Opcodes/Vosim.c:74
 msgid "vosim: zero kfund. 'Infinite' length event generated."
 msgstr ""
 
-#: Opcodes/Vosim.c:80
+#: Opcodes/Vosim.c:82
 #, c-format
 msgid "vosim: kfund (%f) > sr. Generating ksmps silence."
 msgstr ""
 
-#: Opcodes/Vosim.c:158
+#: Opcodes/Vosim.c:160
 msgid "vosim: not initialised"
 msgstr "vosim: no ha sido inicializado"
 
-#: Opcodes/vpvoc.c:118
-msgid "tableseg: not initialised"
-msgstr "tableseg: no ha sido inicializado"
-
-#: Opcodes/vpvoc.c:146
-msgid "tablexseg: not initialised"
-msgstr "tablexseg: no ha sido inicializado"
-
-#: Opcodes/vpvoc.c:172
+#: Opcodes/vpvoc.c:173
 #, c-format
 msgid "vpvoc: Could not find ifnmagctrl table %f"
 msgstr ""
 
-#: Opcodes/vpvoc.c:178
+#: Opcodes/vpvoc.c:179
 msgid "vpvoc: associated tableseg not found"
 msgstr ""
 
-#: Opcodes/vpvoc.c:194
+#: Opcodes/vpvoc.c:195
 #, c-format
 msgid "VPVOC cannot load %s"
 msgstr ""
@@ -9137,47 +9040,47 @@ msgstr ""
 msgid "-B N\tsamples per hardware sound I/O buffer"
 msgstr ""
 
-#: Top/argdecode.c:75 util/mixer.c:95 util/scale.c:46 util/srconv.c:739
+#: Top/argdecode.c:75 util/mixer.c:95 util/scale.c:46 util/srconv.c:738
 msgid "-A\tcreate an AIFF format output soundfile"
 msgstr ""
 
-#: Top/argdecode.c:76 util/mixer.c:96 util/scale.c:47 util/srconv.c:741
+#: Top/argdecode.c:76 util/mixer.c:96 util/scale.c:47 util/srconv.c:740
 msgid "-W\tcreate a WAV format output soundfile"
 msgstr ""
 
-#: Top/argdecode.c:77 util/srconv.c:740
+#: Top/argdecode.c:77 util/srconv.c:739
 msgid "-J\tcreate an IRCAM format output soundfile"
 msgstr ""
 
-#: Top/argdecode.c:78 util/mixer.c:97 util/scale.c:48 util/srconv.c:742
+#: Top/argdecode.c:78 util/mixer.c:97 util/scale.c:48 util/srconv.c:741
 msgid "-h\tno header on output soundfile"
 msgstr ""
 
-#: Top/argdecode.c:79 util/mixer.c:99 util/scale.c:49 util/srconv.c:743
+#: Top/argdecode.c:79 util/mixer.c:99 util/scale.c:49 util/srconv.c:742
 msgid "-c\t8-bit signed_char sound samples"
 msgstr ""
 
-#: Top/argdecode.c:81 util/mixer.c:101 util/scale.c:50 util/srconv.c:744
+#: Top/argdecode.c:81 util/mixer.c:101 util/scale.c:50 util/srconv.c:743
 msgid "-a\talaw sound samples"
 msgstr ""
 
-#: Top/argdecode.c:83 util/mixer.c:98 util/mixer.c:100 util/srconv.c:745
+#: Top/argdecode.c:83 util/mixer.c:98 util/mixer.c:100 util/srconv.c:744
 msgid "-8\t8-bit unsigned_char sound samples"
 msgstr ""
 
-#: Top/argdecode.c:84 util/mixer.c:102 util/scale.c:51 util/srconv.c:746
+#: Top/argdecode.c:84 util/mixer.c:102 util/scale.c:51 util/srconv.c:745
 msgid "-u\tulaw sound samples"
 msgstr ""
 
-#: Top/argdecode.c:85 util/mixer.c:103 util/scale.c:52 util/srconv.c:747
+#: Top/argdecode.c:85 util/mixer.c:103 util/scale.c:52 util/srconv.c:746
 msgid "-s\tshort_int sound samples"
 msgstr ""
 
-#: Top/argdecode.c:86 util/mixer.c:104 util/scale.c:53 util/srconv.c:748
+#: Top/argdecode.c:86 util/mixer.c:104 util/scale.c:53 util/srconv.c:747
 msgid "-l\tlong_int sound samples"
 msgstr ""
 
-#: Top/argdecode.c:87 util/mixer.c:105 util/scale.c:54 util/srconv.c:749
+#: Top/argdecode.c:87 util/mixer.c:105 util/scale.c:54 util/srconv.c:748
 msgid "-f\tfloat sound samples"
 msgstr ""
 
@@ -9185,7 +9088,7 @@ msgstr ""
 msgid "-3\t24bit sound samples"
 msgstr ""
 
-#: Top/argdecode.c:89 util/srconv.c:750
+#: Top/argdecode.c:89 util/srconv.c:749
 msgid "-r N\torchestra srate override"
 msgstr ""
 
@@ -9193,7 +9096,7 @@ msgstr ""
 msgid "-k N\torchestra krate override"
 msgstr ""
 
-#: Top/argdecode.c:91 util/srconv.c:751
+#: Top/argdecode.c:91 util/srconv.c:750
 msgid "-K\tDo not generate PEAK chunks"
 msgstr ""
 
@@ -9253,7 +9156,7 @@ msgstr ""
 msgid "-F fnam\tread MIDIfile event stream from file 'fnam'"
 msgstr ""
 
-#: Top/argdecode.c:107 util/mixer.c:106 util/scale.c:59 util/srconv.c:752
+#: Top/argdecode.c:107 util/mixer.c:106 util/scale.c:59 util/srconv.c:751
 msgid "-R\tcontinually rewrite header while writing soundfile (WAV/AIFF)"
 msgstr ""
 
@@ -9261,7 +9164,7 @@ msgstr ""
 msgid "-H#\tprint heartbeat style 1, 2 or 3 at each soundfile write"
 msgstr ""
 
-#: Top/argdecode.c:109 util/mixer.c:108 util/scale.c:61 util/srconv.c:754
+#: Top/argdecode.c:109 util/mixer.c:108 util/scale.c:61 util/srconv.c:753
 msgid "-N\tnotify (ring the bell) when score or miditrack is done"
 msgstr ""
 
@@ -9747,16 +9650,16 @@ msgid "-M: stdin not supported on this platform"
 msgstr ""
 
 #: Top/argdecode.c:668 Top/argdecode.c:959 util/envext.c:84 util/mixer.c:205
-#: util/scale.c:173 util/srconv.c:248 util/xtrct.c:116
+#: util/scale.c:173 util/srconv.c:247 util/xtrct.c:116
 msgid "no outfilename"
 msgstr ""
 
-#: Top/argdecode.c:671 Top/argdecode.c:963 util/scale.c:177 util/srconv.c:252
+#: Top/argdecode.c:671 Top/argdecode.c:963 util/scale.c:177 util/srconv.c:251
 #: util/xtrct.c:120
 msgid "-o cannot be stdin"
 msgstr ""
 
-#: Top/argdecode.c:675 Top/argdecode.c:967 util/scale.c:180 util/srconv.c:257
+#: Top/argdecode.c:675 Top/argdecode.c:967 util/scale.c:180 util/srconv.c:256
 #: util/xtrct.c:123
 msgid "stdout audio not supported"
 msgstr ""
@@ -9875,164 +9778,164 @@ msgstr ""
 msgid "cscoreFileGetCurrent: no fp current"
 msgstr ""
 
-#: Top/csmodule.c:192
+#: Top/csmodule.c:199
 #, c-format
 msgid "not loading '%s' (uses incompatible floating point type)"
 msgstr ""
 
-#: Top/csmodule.c:201
+#: Top/csmodule.c:209
 #, c-format
 msgid ""
 "not loading '%s' (incompatible with this version of Csound (%d.%d/%d.%d)"
 msgstr ""
 
-#: Top/csmodule.c:244
+#: Top/csmodule.c:252
 #, c-format
 msgid "could not open library '%s' (%s)"
 msgstr ""
 
-#: Top/csmodule.c:247
+#: Top/csmodule.c:255
 #, c-format
 msgid "could not open library '%s' (%d)"
 msgstr ""
 
-#: Top/csmodule.c:303
+#: Top/csmodule.c:311
 #, c-format
 msgid "'%s' is not a Csound plugin library"
 msgstr ""
 
-#: Top/csmodule.c:314
+#: Top/csmodule.c:322
 msgid "csoundLoadExternal(): memory allocation failure"
 msgstr ""
 
-#: Top/csmodule.c:328 Top/csmodule.c:336
+#: Top/csmodule.c:336 Top/csmodule.c:344
 #, c-format
 msgid "Error in pre-initialisation function of module '%s'"
 msgstr ""
 
-#: Top/csmodule.c:599 Top/csmodule.c:605 Top/csmodule.c:616 Top/csmodule.c:623
-#: Top/csmodule.c:629 Top/csmodule.c:637
+#: Top/csmodule.c:608 Top/csmodule.c:614 Top/csmodule.c:625 Top/csmodule.c:632
+#: Top/csmodule.c:638 Top/csmodule.c:646
 msgid "Error opening plugin directory\n"
 msgstr ""
 
-#: Top/csmodule.c:687
+#: Top/csmodule.c:696
 #, c-format
 msgid "Error opening plugin directory '%s': %s"
 msgstr ""
 
-#: Top/csmodule.c:722
+#: Top/csmodule.c:731
 #, c-format
 msgid "path name too long, skipping '%s'"
 msgstr ""
 
-#: Top/csmodule.c:728
+#: Top/csmodule.c:737
 #, c-format
 msgid "Library %s omitted\n"
 msgstr ""
 
-#: Top/csmodule.c:764
+#: Top/csmodule.c:773
 msgid "Loading command-line libraries:\n"
 msgstr ""
 
-#: Top/csmodule.c:787
+#: Top/csmodule.c:796
 #, c-format
 msgid " *** error loading '%s'"
 msgstr ""
 
-#: Top/csmodule.c:810
+#: Top/csmodule.c:819
 #, c-format
 msgid "Error starting module '%s'"
 msgstr ""
 
-#: Top/csmodule.c:907
+#: Top/csmodule.c:918
 #, c-format
 msgid "Error de-initialising module '%s'"
 msgstr ""
 
-#: Top/csound.c:1606 Top/csound.c:1626
+#: Top/csound.c:1636 Top/csound.c:1656
 msgid "Early return from csoundPerformKsmps().\n"
 msgstr ""
 
-#: Top/csound.c:1612
+#: Top/csound.c:1642
 msgid "Score finished in csoundPerformKsmps().\n"
 msgstr ""
 
-#: Top/csound.c:1645
+#: Top/csound.c:1675
 msgid "Early return from csoundPerformBuffer().\n"
 msgstr ""
 
-#: Top/csound.c:1670
+#: Top/csound.c:1700
 msgid "Early return from csoundPerform().\n"
 msgstr ""
 
-#: Top/csound.c:1677
+#: Top/csound.c:1707
 msgid "Score finished in csoundPerform().\n"
 msgstr ""
 
-#: Top/csound.c:1697
+#: Top/csound.c:1727
 msgid "csoundPerform(): stopped.\n"
 msgstr ""
 
-#: Top/csound.c:1968
+#: Top/csound.c:1998
 msgid "WARNING: "
 msgstr "ATENCION: "
 
-#: Top/csound.c:2089
+#: Top/csound.c:2119
 msgid "rtdummy: failed to allocate globals"
 msgstr ""
 
-#: Top/csound.c:2090
+#: Top/csound.c:2120
 msgid "rtaudio: dummy module enabled\n"
 msgstr ""
 
-#: Top/csound.c:2119 Top/csound.c:2155
+#: Top/csound.c:2149 Top/csound.c:2185
 msgid " *** error: rtaudio module set to empty string"
 msgstr ""
 
-#: Top/csound.c:2123 Top/csound.c:2159
+#: Top/csound.c:2153 Top/csound.c:2189
 #, c-format
 msgid " *** error: unknown rtaudio module: '%s'"
 msgstr ""
 
-#: Top/csound.c:2241
+#: Top/csound.c:2271
 msgid "WARNING: real time midi input disabled, using dummy functions\n"
 msgstr ""
 
-#: Top/csound.c:2246 Top/csound.c:2280
+#: Top/csound.c:2276 Top/csound.c:2310
 msgid "error: -+rtmidi set to empty string"
 msgstr ""
 
-#: Top/csound.c:2249 Top/csound.c:2283
+#: Top/csound.c:2279 Top/csound.c:2313
 #, c-format
 msgid "error: -+rtmidi='%s': unknown module"
 msgstr ""
 
-#: Top/csound.c:2275
+#: Top/csound.c:2305
 msgid "WARNING: real time midi output disabled, using dummy functions\n"
 msgstr ""
 
-#: Top/csound.c:2297
+#: Top/csound.c:2327
 msgid "Unknown MIDI error"
 msgstr ""
 
-#: Top/csound.c:2415
+#: Top/csound.c:2445
 msgid "xyin not supported. use invalue opcode instead."
 msgstr ""
 
-#: Top/csound.c:2522
+#: Top/csound.c:2552
 msgid "Failed to allocate new opcode entry."
 msgstr ""
 
-#: Top/csound.c:2545
+#: Top/csound.c:2575
 #, c-format
 msgid "Failed to allocate opcode entry for %s."
 msgstr ""
 
-#: Top/csound.c:2876
+#: Top/csound.c:2906
 msgid "Cannot open /proc/cpuinfo. Support for RDTSC is not available.\n"
 msgstr ""
 
-#: Top/csound.c:2927
+#: Top/csound.c:2957
 msgid "No valid CPU frequency entry was found in /proc/cpuinfo.\n"
 msgstr ""
 
@@ -10040,25 +9943,25 @@ msgstr ""
 msgid "Error allocating opcode list"
 msgstr ""
 
-#: Top/main.c:161
+#: Top/main.c:160
 #, c-format
 msgid "WARNING: cannot open csoundrc file %s\n"
 msgstr "ATENCION: no se puede abrir el archivo csoundrc %s\n"
 
-#: Top/main.c:164
+#: Top/main.c:163
 #, c-format
 msgid "Reading options from $CSOUNDRC: %s \n"
 msgstr ""
 
-#: Top/main.c:173
+#: Top/main.c:172
 msgid "Reading options from $HOME/.csoundrc\n"
 msgstr ""
 
-#: Top/main.c:200
+#: Top/main.c:199
 msgid "no orchestra name"
 msgstr ""
 
-#: Top/main.c:225
+#: Top/main.c:224
 msgid "Reading CSD failed ... stopping"
 msgstr "Falla de lectura del archivo csd... deteniendo"
 
@@ -10070,7 +9973,7 @@ msgstr ""
 msgid "error: multiple uses of stdout"
 msgstr ""
 
-#: Top/main.c:260 util/dnoise.c:268
+#: Top/main.c:260 util/dnoise.c:264
 #, c-format
 msgid "%s not a recognised SFOUTYP env setting"
 msgstr ""
@@ -10083,58 +9986,62 @@ msgstr ""
 msgid "realtime performance using dummy numeric scorefile\n"
 msgstr ""
 
-#: Top/main.c:319
+#: Top/main.c:314
 #, c-format
 msgid "orchname:  %s\n"
 msgstr "nombre de la orquesta:  %s\n"
 
-#: Top/main.c:321
-#, c-format
-msgid "scorename: %s\n"
-msgstr "nombre del score: %s\n"
+#: Top/main.c:334
+msgid "Stopping on parser failure\n"
+msgstr ""
 
-#: Top/main.c:353
+#: Top/main.c:352
 msgid "end of orchestra compile"
 msgstr "fin de compilación de la orquesta"
 
-#: Top/main.c:360
+#: Top/main.c:359
 #, c-format
 msgid "using previous %s\n"
 msgstr ""
 
-#: Top/main.c:373
+#: Top/main.c:369
 #, c-format
 msgid "cannot open scorefile %s"
 msgstr "no es posible abrir el archivo de score %s"
 
-#: Top/main.c:378 Top/main.c:399
-#, c-format
-msgid "cannot open %s for writing"
-msgstr "no es posible abrir para escritura el archivo %s"
-
-#: Top/main.c:381
+#: Top/main.c:371
 msgid "sorting score ...\n"
 msgstr ""
 
-#: Top/main.c:388
+#: Top/main.c:381
 #, c-format
 msgid "cannot extract %s, name conflict"
 msgstr ""
 
-#: Top/main.c:391
+#: Top/main.c:384
 #, c-format
 msgid "cannot open extract file %s"
 msgstr ""
 
-#: Top/main.c:401
+#: Top/main.c:388
+#, c-format
+msgid "cannot reopen %s"
+msgstr "No fue posible reabrir %s"
+
+#: Top/main.c:392
+#, c-format
+msgid "cannot open %s for writing"
+msgstr "no es posible abrir para escritura el archivo %s"
+
+#: Top/main.c:394
 msgid "  ... extracting ...\n"
 msgstr "  ... extrayendo ...\n"
 
-#: Top/main.c:414
+#: Top/main.c:405
 msgid "end of score sort"
 msgstr ""
 
-#: Top/main.c:416
+#: Top/main.c:407
 msgid "Syntax check completed.\n"
 msgstr "Revisión de sintaxis completa.\n"
 
@@ -10199,163 +10106,158 @@ msgstr ""
 msgid " *** error setting option '%s' to '%s': %s\n"
 msgstr ""
 
-#: Top/one_file.c:105 Top/one_file.c:113
+#: Top/one_file.c:110 Top/one_file.c:118
 msgid " *** cannot create temporary file"
 msgstr " *** no es posible crear el archivo temporal"
 
-#: Top/one_file.c:198
+#: Top/one_file.c:203
 #, c-format
 msgid "Removing temporary file %s ...\n"
 msgstr "Reitrando el archivo temporal %s ...\n"
 
-#: Top/one_file.c:202
+#: Top/one_file.c:207
 #, c-format
 msgid "WARNING: could not remove %s\n"
 msgstr "ATENCION: no fue posible retirar %s\n"
 
-#: Top/one_file.c:268 Top/one_file.c:296
+#: Top/one_file.c:274 Top/one_file.c:302
 #, c-format
 msgid "More than %d arguments in <CsOptions>"
 msgstr ""
 
-#: Top/one_file.c:313
+#: Top/one_file.c:319
 #, c-format
 msgid "Invalid arguments in <CsOptions>: %s"
 msgstr ""
 
-#: Top/one_file.c:316
+#: Top/one_file.c:322
 #, c-format
 msgid "Invalid arguments in .csoundrc or -@ file: %s"
 msgstr ""
 
-#: Top/one_file.c:322 Top/one_file.c:790
+#: Top/one_file.c:328 Top/one_file.c:744
 msgid "Missing end tag </CsOptions>"
 msgstr ""
 
-#: Top/one_file.c:340 Top/one_file.c:372 Top/one_file.c:420
-#, c-format
-msgid "Creating %s (%p)\n"
-msgstr "Creando %s (%p)\n"
-
-#: Top/one_file.c:343
-#, c-format
-msgid "Failed to create %s"
-msgstr "No fue posible crear %s"
-
-#: Top/one_file.c:356
+#: Top/one_file.c:354
 msgid "Missing end tag </CsInstruments>"
 msgstr ""
 
-#: Top/one_file.c:389 Top/one_file.c:442
+#: Top/one_file.c:376 Top/one_file.c:430
 msgid "Missing end tag </CsScore>"
 msgstr ""
 
-#: Top/one_file.c:403 Top/one_file.c:408
+#: Top/one_file.c:391 Top/one_file.c:396
 msgid "Missing program in tag <CsScore>"
 msgstr ""
 
-#: Top/one_file.c:433
+#: Top/one_file.c:408
+#, c-format
+msgid "Creating %s (%p)\n"
+msgstr "Creando %s (%p)\n"
+
+#: Top/one_file.c:421
 msgid "External generation failed"
 msgstr ""
 
-#: Top/one_file.c:520
+#: Top/one_file.c:468
 #, c-format
 msgid "Non base64 character %c(%2x)"
 msgstr ""
 
-#: Top/one_file.c:539
+#: Top/one_file.c:487
 msgid "Truncated byte at end of base64 stream"
 msgstr ""
 
-#: Top/one_file.c:554
+#: Top/one_file.c:503
 #, c-format
 msgid "Cannot open temporary file (%s) for MIDI subfile"
 msgstr ""
 
-#: Top/one_file.c:571
+#: Top/one_file.c:520
 msgid "Missing end tag </CsMidifileB>"
 msgstr ""
 
-#: Top/one_file.c:586 Top/one_file.c:633
+#: Top/one_file.c:536 Top/one_file.c:584
 #, c-format
 msgid "File %s already exists"
 msgstr "El archivo %s ya existe"
 
-#: Top/one_file.c:591
+#: Top/one_file.c:541
 #, c-format
 msgid "Cannot open sample file (%s) subfile"
 msgstr ""
 
-#: Top/one_file.c:605
+#: Top/one_file.c:555
 msgid "Missing end tag </CsSampleB>"
 msgstr ""
 
-#: Top/one_file.c:638
+#: Top/one_file.c:589
 #, c-format
 msgid "Cannot open file (%s) subfile"
 msgstr ""
 
-#: Top/one_file.c:653
+#: Top/one_file.c:604
 msgid "Missing end tag </CsFileB>"
 msgstr ""
 
-#: Top/one_file.c:672
+#: Top/one_file.c:624
 #, c-format
 msgid "This CSD file requires a version of Csound before %d.%02d"
 msgstr ""
 
-#: Top/one_file.c:680 Top/one_file.c:687
+#: Top/one_file.c:632 Top/one_file.c:639
 #, c-format
 msgid "This CSD file requires a version of Csound after %d.%02d"
 msgstr ""
 
-#: Top/one_file.c:693
+#: Top/one_file.c:645
 msgid "Missing end tag </CsVersion>"
 msgstr ""
 
-#: Top/one_file.c:702
+#: Top/one_file.c:655
 msgid "**** Licence Information ****\n"
 msgstr "**** Información de licencia ****\n"
 
-#: Top/one_file.c:708
+#: Top/one_file.c:661
 msgid "**** End of Licence Information ****\n"
 msgstr "**** Fin de información de licencia ****\n"
 
-#: Top/one_file.c:719
+#: Top/one_file.c:672
 msgid "Missing end tag </CsLicence>"
 msgstr ""
 
-#: Top/one_file.c:749
+#: Top/one_file.c:703
 #, c-format
 msgid "Failed to open csd file: %s"
 msgstr "No fue posible abrir el archivo csd: %s"
 
-#: Top/one_file.c:764
+#: Top/one_file.c:718
 msgid "STARTING FILE\n"
 msgstr "INCIANDO ARCHIVO\n"
 
-#: Top/one_file.c:780
+#: Top/one_file.c:734
 msgid "Creating options\n"
 msgstr "Creando opciones\n"
 
-#: Top/one_file.c:786
+#: Top/one_file.c:740
 msgid "Skipping <CsOptions>\n"
 msgstr "Saltando <CsOptions>\n"
 
-#: Top/one_file.c:800
+#: Top/one_file.c:754
 msgid "Creating orchestra\n"
 msgstr "Creando orquesta\n"
 
-#: Top/one_file.c:805
+#: Top/one_file.c:759
 msgid "Creating score\n"
 msgstr "Creando score\n"
 
-#: Top/one_file.c:839
+#: Top/one_file.c:793
 #, c-format
 msgid "unknown CSD tag: %s\n"
 msgstr "Etiqueta CSD desconocida: %s\n"
 
-#: Top/one_file.c:844
+#: Top/one_file.c:798
 msgid "Could not find <CsoundSynthesizer> tag in CSD file.\n"
 msgstr "No se encontró la etiqueta <CsoundSynthesizer> en el archivo CSD.\n"
 
@@ -10526,10 +10428,10 @@ msgid "scot: %d errors.\n"
 msgstr ""
 
 #: util/atsa.c:537
-#, c-format
+#, fuzzy, c-format
 msgid ""
 "\n"
-" Could not open %s for writing, bye...\n"
+"Could not open %s for writing, bye...\n"
 msgstr ""
 "\n"
 " No es posible abrir %s para escritura. Adiós...\n"
@@ -10538,8 +10440,8 @@ msgstr ""
 msgid "saving ATS data..."
 msgstr "salvando datos ATS..."
 
-#: util/atsa.c:546 util/atsa.c:2344 util/atsa.c:2358 util/atsa.c:2368
-#: util/atsa.c:2548 util/atsa.c:2611 util/atsa.c:2699
+#: util/atsa.c:546 util/atsa.c:2354 util/atsa.c:2368 util/atsa.c:2387
+#: util/atsa.c:2567 util/atsa.c:2630 util/atsa.c:2718
 msgid "done!\n"
 msgstr "listo!\n"
 
@@ -10647,17 +10549,17 @@ msgid ""
 "\n"
 msgstr ""
 
-#: util/atsa.c:1482
+#: util/atsa.c:1492
 #, c-format
 msgid "atsa: error opening residual file '%s'"
 msgstr "atsa: error abriendo archivo de residuo '%s'"
 
-#: util/atsa.c:1486
+#: util/atsa.c:1496
 #, c-format
 msgid "atsa: residual file has %d channels, must be stereo !"
 msgstr ""
 
-#: util/atsa.c:1813
+#: util/atsa.c:1823
 #, c-format
 msgid ""
 "\n"
@@ -10666,164 +10568,164 @@ msgstr ""
 "\n"
 "ERROR: no es posible abrir %s para escritura\n"
 
-#: util/atsa.c:1908
+#: util/atsa.c:1918
 msgid "Error: sound not optimised !"
 msgstr "Error: sonido no optimizado !"
 
-#: util/atsa.c:2003
+#: util/atsa.c:2013
 #, c-format
 msgid "atsa: cannot open input file '%s'"
 msgstr "atsa: no es posible abrir el archivo '%s'"
 
-#: util/atsa.c:2010
+#: util/atsa.c:2020
 #, c-format
 msgid "atsa: file has %d channels, must be mono !"
 msgstr "atsa: el archivo tiene %d canales pero debe ser mono !"
 
-#: util/atsa.c:2015
+#: util/atsa.c:2025
 msgid "tracking...\n"
 msgstr ""
 
-#: util/atsa.c:2024
+#: util/atsa.c:2034
 #, c-format
 msgid "start %f out of bounds, corrected to 0.0"
 msgstr ""
 
-#: util/atsa.c:2034
+#: util/atsa.c:2044
 #, c-format
 msgid "duration %f out of bounds, limited to file duration"
 msgstr ""
 
-#: util/atsa.c:2040
+#: util/atsa.c:2050
 #, c-format
 msgid "start: %f duration: %f file dur: %f\n"
 msgstr ""
 
-#: util/atsa.c:2047
+#: util/atsa.c:2057
 #, c-format
 msgid "lowest freq. %f out of bounds, forced to default: %f"
 msgstr ""
 
-#: util/atsa.c:2057
+#: util/atsa.c:2067
 #, c-format
 msgid "highest freq. %f out of bounds, forced to default: %f"
 msgstr ""
 
-#: util/atsa.c:2064
+#: util/atsa.c:2074
 #, c-format
 msgid ""
 "freq. dev. %f out of bounds, should be > 0.0 and <= 1.0, forced to default: "
 "%f"
 msgstr ""
 
-#: util/atsa.c:2072
+#: util/atsa.c:2082
 #, c-format
 msgid ""
 "windows cycles %d out of bounds, should be between 1 and 8, forced to "
 "default: %d"
 msgstr ""
 
-#: util/atsa.c:2080
+#: util/atsa.c:2090
 #, c-format
 msgid ""
 "window type %d out of bounds, should be between 0 and 3, forced to default: "
 "%d"
 msgstr ""
 
-#: util/atsa.c:2088
+#: util/atsa.c:2098
 #, c-format
 msgid ""
 "hop size %f out of bounds, should be > 0.0 and <= 1.0, forced to default: %f"
 msgstr ""
 
-#: util/atsa.c:2096
+#: util/atsa.c:2106
 #, c-format
 msgid ""
 "lowest magnitude %f out of bounds, should be >= 0.0 and <= 1.0, forced to "
 "default: %f"
 msgstr ""
 
-#: util/atsa.c:2120
+#: util/atsa.c:2130
 #, c-format
 msgid "atsa: %d frames are not enough for analysis, need at least %d"
 msgstr ""
 
-#: util/atsa.c:2129
+#: util/atsa.c:2139
 #, c-format
 msgid "track length %d out of bounds, forced to: %d"
 msgstr ""
 
-#: util/atsa.c:2138
+#: util/atsa.c:2148
 #, c-format
 msgid "min. segment length %d out of bounds, forced to: %d"
 msgstr ""
 
-#: util/atsa.c:2147
+#: util/atsa.c:2157
 #, c-format
 msgid "min. gap length %d out of bounds, forced to: %d"
 msgstr ""
 
-#: util/atsa.c:2153
+#: util/atsa.c:2163
 #, c-format
 msgid ""
 "SMR threshold %f out of bounds, should be >= 0.0 and < %f dB SPL, forced to "
 "default: %f"
 msgstr ""
 
-#: util/atsa.c:2164
+#: util/atsa.c:2174
 #, c-format
 msgid ""
 "min. seg. SMR %f out of bounds, should be >= %f and < %f dB SPL, forced to "
 "default: %f"
 msgstr ""
 
-#: util/atsa.c:2172
+#: util/atsa.c:2182
 #, c-format
 msgid ""
 "last peak contribution %f out of bounds, should be >= 0.0 and <= 1.0, forced "
 "to default: %f"
 msgstr ""
 
-#: util/atsa.c:2180
+#: util/atsa.c:2190
 #, c-format
 msgid ""
 "SMR contribution %f out of bounds, should be >= 0.0 and <= 1.0, forced to "
 "default: %f"
 msgstr ""
 
-#: util/atsa.c:2325
+#: util/atsa.c:2335
 msgid "Initializing ATS data..."
 msgstr ""
 
-#: util/atsa.c:2355
+#: util/atsa.c:2365
 msgid "Computing residual..."
 msgstr ""
 
-#: util/atsa.c:2366
+#: util/atsa.c:2381 util/atsa.c:2384
 msgid "Analysing residual..."
 msgstr ""
 
-#: util/atsa.c:2370
+#: util/atsa.c:2389
 msgid "tracking completed.\n"
 msgstr ""
 
-#: util/atsa.c:2478
+#: util/atsa.c:2497
 msgid "Filling sound gaps..."
 msgstr ""
 
-#: util/atsa.c:2566
+#: util/atsa.c:2585
 msgid "Trimming short partials..."
 msgstr ""
 
-#: util/atsa.c:2662
+#: util/atsa.c:2681
 msgid "Computing averages..."
 msgstr ""
 
-#: util/atsa.c:2713
+#: util/atsa.c:2732
 msgid "No partials to track -- stopping\n"
 msgstr ""
 
-#: util/atsa.c:2813
+#: util/atsa.c:2832
 msgid "Soundfile analysis for ATS opcodes"
 msgstr ""
 
@@ -10855,8 +10757,8 @@ msgstr ""
 msgid "illegal number of filenames"
 msgstr ""
 
-#: util/cvanal.c:113 util/dnoise.c:456 util/lpanal.c:518 util/pvanal.c:258
-#: util/srconv.c:351
+#: util/cvanal.c:113 util/dnoise.c:445 util/lpanal.c:518 util/pvanal.c:258
+#: util/srconv.c:350
 #, c-format
 msgid "error while opening %s"
 msgstr ""
@@ -10896,256 +10798,256 @@ msgstr ""
 msgid "Soundfile analysis for convolve"
 msgstr ""
 
-#: util/dnoise.c:285
+#: util/dnoise.c:281
 msgid "-o cannot be stdin\n"
 msgstr ""
 
-#: util/dnoise.c:297
+#: util/dnoise.c:293
 msgid "-A overriding local default WAV out"
 msgstr ""
 
-#: util/dnoise.c:302
+#: util/dnoise.c:298
 msgid "-J overriding local default AIFF/WAV out"
 msgstr ""
 
-#: util/dnoise.c:309
+#: util/dnoise.c:305
 msgid "-W overriding local default AIFF out"
 msgstr ""
 
-#: util/dnoise.c:356
+#: util/dnoise.c:345
 msgid "no t argument"
 msgstr ""
 
-#: util/dnoise.c:379
+#: util/dnoise.c:368
 msgid "no n argument"
 msgstr ""
 
-#: util/dnoise.c:384
+#: util/dnoise.c:373
 msgid "no b argument"
 msgstr ""
 
-#: util/dnoise.c:392
+#: util/dnoise.c:381
 msgid "no B argument"
 msgstr ""
 
-#: util/dnoise.c:404
+#: util/dnoise.c:393
 msgid "no E argument"
 msgstr ""
 
-#: util/dnoise.c:408
+#: util/dnoise.c:397
 msgid "no N argument"
 msgstr ""
 
-#: util/dnoise.c:412
+#: util/dnoise.c:401
 msgid "no M argument"
 msgstr ""
 
-#: util/dnoise.c:416
+#: util/dnoise.c:405
 msgid "no L argument"
 msgstr ""
 
-#: util/dnoise.c:420
+#: util/dnoise.c:409
 msgid "no w argument"
 msgstr ""
 
-#: util/dnoise.c:424
+#: util/dnoise.c:413
 msgid "no D argument"
 msgstr ""
 
-#: util/dnoise.c:431 util/srconv.c:328
+#: util/dnoise.c:420 util/srconv.c:327
 #, c-format
 msgid "Looking at %c\n"
 msgstr ""
 
-#: util/dnoise.c:438 util/srconv.c:336
+#: util/dnoise.c:427 util/srconv.c:335
 #, c-format
 msgid "Infile set to %s\n"
 msgstr ""
 
-#: util/dnoise.c:441 util/srconv.c:339
+#: util/dnoise.c:430 util/srconv.c:338
 #, c-format
 msgid "End with %s\n"
 msgstr ""
 
-#: util/dnoise.c:447
+#: util/dnoise.c:436
 msgid "dnoise: no input file\n"
 msgstr ""
 
-#: util/dnoise.c:451
+#: util/dnoise.c:440
 msgid "Must have an example noise file (-i name)\n"
 msgstr ""
 
-#: util/dnoise.c:479
+#: util/dnoise.c:468
 #, c-format
 msgid "cannot open %s.\n"
 msgstr ""
 
-#: util/dnoise.c:491 util/srconv.c:461 util/srconv.c:473
+#: util/dnoise.c:480 util/srconv.c:460 util/srconv.c:472
 #, c-format
 msgid "cannot open %s."
 msgstr "No es posible abrir %s."
 
-#: util/dnoise.c:510
+#: util/dnoise.c:499
 msgid "dnoise: input MUST be mono or stereo\n"
 msgstr ""
 
-#: util/dnoise.c:518
+#: util/dnoise.c:507
 msgid "dnoise: cannot open noise reference file\n"
 msgstr ""
 
-#: util/dnoise.c:523
+#: util/dnoise.c:512
 msgid "Incompatible sample rates\n"
 msgstr ""
 
-#: util/dnoise.c:542
+#: util/dnoise.c:531
 #, c-format
 msgid "dnoise: warning - N not a valid power of two; revised N = %d\n"
 msgstr ""
 
-#: util/dnoise.c:552
+#: util/dnoise.c:541
 msgid "dnoise: warning - do not specify both M and W\n"
 msgstr ""
 
-#: util/dnoise.c:562
+#: util/dnoise.c:551
 msgid "dnoise: warning - invalid W ignored\n"
 msgstr ""
 
-#: util/dnoise.c:576
+#: util/dnoise.c:565
 msgid "dnoise: warning - M is too small\n"
 msgstr ""
 
-#: util/dnoise.c:586
+#: util/dnoise.c:575
 msgid "dnoise: M too large\n"
 msgstr ""
 
-#: util/dnoise.c:592
+#: util/dnoise.c:581
 msgid "dnoise: L too large\n"
 msgstr ""
 
-#: util/dnoise.c:602
+#: util/dnoise.c:591
 #, c-format
 msgid "writing %u-byte blks of %s to %s"
 msgstr ""
 
-#: util/dnoise.c:627 util/dnoise.c:666 util/dnoise.c:721 util/dnoise.c:732
-#: util/dnoise.c:736 util/dnoise.c:743 util/dnoise.c:753 util/dnoise.c:758
-#: util/dnoise.c:762 util/dnoise.c:766 util/dnoise.c:770
+#: util/dnoise.c:616 util/dnoise.c:655 util/dnoise.c:710 util/dnoise.c:721
+#: util/dnoise.c:725 util/dnoise.c:732 util/dnoise.c:742 util/dnoise.c:747
+#: util/dnoise.c:751 util/dnoise.c:755 util/dnoise.c:759
 msgid "dnoise: insufficient memory\n"
 msgstr ""
 
-#: util/dnoise.c:779 util/dnoise.c:788
+#: util/dnoise.c:768 util/dnoise.c:777
 msgid "dnoise: begin time is greater than EOF of noise file!"
 msgstr ""
 
-#: util/dnoise.c:820
+#: util/dnoise.c:809
 msgid "dnoise: not enough samples of noise reference\n"
 msgstr ""
 
-#: util/dnoise.c:1118
+#: util/dnoise.c:1103
 #, c-format
 msgid "%5.1f seconds of input complete\n"
 msgstr ""
 
-#: util/dnoise.c:1137
+#: util/dnoise.c:1122
 msgid "processing complete\n"
 msgstr ""
 
-#: util/dnoise.c:1147
+#: util/dnoise.c:1132
 msgid "usage: dnoise [flags] input_file"
 msgstr ""
 
-#: util/dnoise.c:1149
+#: util/dnoise.c:1134
 msgid "flags:"
 msgstr ""
 
-#: util/dnoise.c:1150
+#: util/dnoise.c:1135
 msgid "i = noise reference soundfile"
 msgstr ""
 
-#: util/dnoise.c:1151
+#: util/dnoise.c:1136
 msgid "o = output file"
 msgstr ""
 
-#: util/dnoise.c:1152
+#: util/dnoise.c:1137
 msgid "N = # of bandpass filters (1024)"
 msgstr ""
 
-#: util/dnoise.c:1153
+#: util/dnoise.c:1138
 msgid "w = filter overlap factor: {0,1,(2),3} DON'T USE -w AND -M"
 msgstr ""
 
-#: util/dnoise.c:1154
+#: util/dnoise.c:1139
 msgid "M = analysis window length (N-1 unless -w is specified)"
 msgstr ""
 
-#: util/dnoise.c:1155
+#: util/dnoise.c:1140
 msgid "L = synthesis window length (M)"
 msgstr ""
 
-#: util/dnoise.c:1156
+#: util/dnoise.c:1141
 msgid "D = decimation factor (M/8)"
 msgstr ""
 
-#: util/dnoise.c:1157
+#: util/dnoise.c:1142
 msgid "b = begin time in noise reference soundfile (0)"
 msgstr ""
 
-#: util/dnoise.c:1158
+#: util/dnoise.c:1143
 msgid "B = starting sample in noise reference soundfile (0)"
 msgstr ""
 
-#: util/dnoise.c:1159
+#: util/dnoise.c:1144
 msgid "e = end time in noise reference soundfile (end)"
 msgstr ""
 
-#: util/dnoise.c:1160
+#: util/dnoise.c:1145
 msgid "E = final sample in noise reference soundfile (end)"
 msgstr ""
 
-#: util/dnoise.c:1161
+#: util/dnoise.c:1146
 msgid "t = threshold above noise reference in dB (30)"
 msgstr ""
 
-#: util/dnoise.c:1162
+#: util/dnoise.c:1147
 msgid "S = sharpness of noise-gate turnoff (1) (1 to 5)"
 msgstr ""
 
-#: util/dnoise.c:1163
+#: util/dnoise.c:1148
 msgid "n = number of FFT frames to average over (5)"
 msgstr ""
 
-#: util/dnoise.c:1164
+#: util/dnoise.c:1149
 msgid "m = minimum gain of noise-gate when off in dB (-40)"
 msgstr ""
 
-#: util/dnoise.c:1165
+#: util/dnoise.c:1150
 msgid "V : verbose - print status info"
 msgstr ""
 
-#: util/dnoise.c:1166
+#: util/dnoise.c:1151
 msgid "A : AIFF format output"
 msgstr ""
 
-#: util/dnoise.c:1167
+#: util/dnoise.c:1152
 msgid "W : WAV format output"
 msgstr ""
 
-#: util/dnoise.c:1168
+#: util/dnoise.c:1153
 msgid "J : IRCAM format output"
 msgstr ""
 
-#: util/dnoise.c:1187
+#: util/dnoise.c:1172
 #, c-format
 msgid "soundfile write returned sample count of %d, not %d\n"
 msgstr ""
 
-#: util/dnoise.c:1189
+#: util/dnoise.c:1174
 msgid ""
 "(disk may be full...\n"
 " closing the file ...)\n"
 msgstr ""
 
-#: util/dnoise.c:1257
+#: util/dnoise.c:1242
 msgid "Removes noise from a sound file"
 msgstr ""
 
@@ -11153,7 +11055,7 @@ msgstr ""
 msgid "Usage:\tenvext [-flags] soundfile\n"
 msgstr ""
 
-#: util/envext.c:54 util/srconv.c:738
+#: util/envext.c:54 util/srconv.c:737
 msgid "-o fnam\tsound output filename\n"
 msgstr ""
 
@@ -11187,7 +11089,7 @@ msgstr ""
 msgid "enveloping %ld sample frames (%3.1f secs)\n"
 msgstr ""
 
-#: util/envext.c:179
+#: util/envext.c:177
 msgid "Create a text file of envelope"
 msgstr ""
 
@@ -11601,7 +11503,7 @@ msgstr ""
 msgid "Legal flags are:"
 msgstr ""
 
-#: util/mixer.c:107 util/scale.c:60 util/srconv.c:753
+#: util/mixer.c:107 util/scale.c:60 util/srconv.c:752
 msgid "-H#\tprint a heartbeat style 1, 2 or 3 at each soundfile write"
 msgstr ""
 
@@ -11641,7 +11543,7 @@ msgstr ""
 msgid "mixer: error: "
 msgstr ""
 
-#: util/mixer.c:188 util/scale.c:161 util/srconv.c:232
+#: util/mixer.c:188 util/scale.c:161 util/srconv.c:231
 #, c-format
 msgid "%s not a recognized SFOUTYP env setting"
 msgstr ""
@@ -11870,17 +11772,17 @@ msgstr ""
 msgid "Soundfile analysis for pvoc"
 msgstr ""
 
-#: util/pvanal.c:469
+#: util/pvanal.c:467
 #, c-format
 msgid "pvxanal: unable to create analysis file: %s"
 msgstr ""
 
-#: util/pvanal.c:500 util/pvanal.c:532
+#: util/pvanal.c:498 util/pvanal.c:530
 #, c-format
 msgid "pvxanal: error writing analysis frames: %s\n"
 msgstr ""
 
-#: util/pvanal.c:542
+#: util/pvanal.c:540
 #, c-format
 msgid ""
 "\n"
@@ -11970,7 +11872,7 @@ msgstr ""
 msgid "-P fpnum\tscale file to given percentage of full"
 msgstr ""
 
-#: util/scale.c:62 util/srconv.c:755
+#: util/scale.c:62 util/srconv.c:754
 msgid "-- fnam\tlog output to file"
 msgstr ""
 
@@ -12121,75 +12023,75 @@ msgstr ""
 msgid "Sound format -%c has been overruled by -%c"
 msgstr ""
 
-#: util/srconv.c:299
+#: util/srconv.c:298
 msgid "No Q argument"
 msgstr ""
 
-#: util/srconv.c:304
+#: util/srconv.c:303
 msgid "No P argument"
 msgstr ""
 
-#: util/srconv.c:313
+#: util/srconv.c:312
 msgid "No r argument"
 msgstr ""
 
-#: util/srconv.c:322
+#: util/srconv.c:321
 msgid "No break file"
 msgstr ""
 
-#: util/srconv.c:345
+#: util/srconv.c:344
 msgid "No input given\n"
 msgstr ""
 
-#: util/srconv.c:362
+#: util/srconv.c:361
 msgid "srconv: cannot specify both -r and -P"
 msgstr ""
 
-#: util/srconv.c:373
+#: util/srconv.c:372
 msgid "srconv: cannot open time-vary function file"
 msgstr ""
 
-#: util/srconv.c:389
+#: util/srconv.c:388
 msgid "srconv: too few x-y pairs in time-vary function file"
 msgstr ""
 
-#: util/srconv.c:403
+#: util/srconv.c:402
 msgid "srconv: first x value in time-vary function must be 0"
 msgstr ""
 
-#: util/srconv.c:408
+#: util/srconv.c:407
 msgid "srconv: invalid initial y value in time-vary function"
 msgstr ""
 
-#: util/srconv.c:413 util/srconv.c:705
+#: util/srconv.c:412 util/srconv.c:704
 msgid "srconv: invalid x values in time-vary function"
 msgstr ""
 
-#: util/srconv.c:732
+#: util/srconv.c:731
 msgid ""
 "usage: srconv [flags] infile\n"
 "\n"
 "flags:"
 msgstr ""
 
-#: util/srconv.c:733
+#: util/srconv.c:732
 msgid ""
 "-P num\tpitch transposition ratio (srate/r) [do not specify both P and r]"
 msgstr ""
 
-#: util/srconv.c:735
+#: util/srconv.c:734
 msgid "-Q num\tquality factor (1 to 8: default = 2)"
 msgstr ""
 
-#: util/srconv.c:736
+#: util/srconv.c:735
 msgid "-i filnam\tbreak file"
 msgstr ""
 
-#: util/srconv.c:737
+#: util/srconv.c:736
 msgid "-r num\toutput sample rate (must be specified)"
 msgstr ""
 
-#: util/srconv.c:821
+#: util/srconv.c:820
 msgid "Sample rate conversion"
 msgstr ""
 
@@ -12339,6 +12241,58 @@ msgstr ""
 msgid "Extract part of a sound file"
 msgstr ""
 
+#, fuzzy
+#~ msgid "tableseg: not initialized"
+#~ msgstr "tableseg: no ha sido inicializado"
+
+#, fuzzy
+#~ msgid "tablexseg: not initialized"
+#~ msgstr "tablexseg: no ha sido inicializado"
+
+#, fuzzy
+#~ msgid "vdelayk: not initialized"
+#~ msgstr "delayk: no ha sido inicializado"
+
+#, fuzzy
+#~ msgid " line %d: %s"
+#~ msgstr ", línea %d:\n"
+
+#~ msgid "cannot find end of file %s"
+#~ msgstr "No se puede encontrar el final del archivo %s"
+
+#~ msgid "ftell error on %s"
+#~ msgstr "ftell error en %s"
+
+#~ msgid "  included from line %d of file input %s%s"
+#~ msgstr "en la línea %d del archivo de entrada %s"
+
+#~ msgid "  called from line %d of file input %s%s"
+#~ msgstr "en la línea %d del archivo de entrada %s"
+
+#~ msgid "  in line %d of file input %s%s"
+#~ msgstr "en la línea %d del archivo de entrada %s"
+
+#~ msgid "Ignoring name %s not in file\n"
+#~ msgstr "Ignorando nombre %s, no está en el archivo\n"
+
+#~ msgid "cannot open input file %s"
+#~ msgstr "No es posible abrir el archivo de entrada %s"
+
+#~ msgid "FLsetsnap: invalid table"
+#~ msgstr "FLsetsnap: tabla inválida"
+
+#~ msgid "Yes"
+#~ msgstr "Si"
+
+#~ msgid "end of widget thread\n"
+#~ msgstr "fin del hilo de widgets\n"
+
+#~ msgid "scorename: %s\n"
+#~ msgstr "nombre del score: %s\n"
+
+#~ msgid "Failed to create %s"
+#~ msgstr "No fue posible crear %s"
+
 #~ msgid "Size = %d"
 #~ msgstr "Tamaño = %d"
 
diff --git a/po/french.po b/po/french.po
index 082247e..d609868 100644
--- a/po/french.po
+++ b/po/french.po
@@ -10,7 +10,7 @@ msgstr ""
 "Project-Id-Version: CSOUND 5.xx\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2008-07-26 19:39+0100\n"
-"PO-Revision-Date: 2010-12-29 12:07+0000\n"
+"PO-Revision-Date: 2011-12-20 22:46+0000\n"
 "Last-Translator: François Pinot <fggpinot at gmail.com>\n"
 "Language-Team: French\n"
 "Language: \n"
@@ -33,22 +33,22 @@ msgstr "auxlist pour l'instr %s [%d] (%p) :\n"
 msgid "auxlist for instr %d (%p):\n"
 msgstr "auxlist pour l'instr %d (%p) :\n"
 
-#: Engine/auxfd.c:153
+#: Engine/auxfd.c:154
 #, c-format
 msgid "\tauxch at %p: size %ld, auxp %p, endp %p\n"
 msgstr "\tauxch à %p : taille %ld, auxp %p, endp %p\n"
 
-#: Engine/auxfd.c:165
+#: Engine/auxfd.c:166
 #, c-format
 msgid "fdlist for instr %s [%d] (%p):"
 msgstr "fdlist pour l'instr %s [%d] (%p) :"
 
-#: Engine/auxfd.c:168
+#: Engine/auxfd.c:169
 #, c-format
 msgid "fdlist for instr %d (%p):"
 msgstr "fdlist pour l'instr %d (%p) :"
 
-#: Engine/auxfd.c:171
+#: Engine/auxfd.c:172
 #, c-format
 msgid "  fd %p in %p"
 msgstr "  fd %p dans %p"
@@ -101,375 +101,329 @@ msgstr "la chaîne dépasse la longueur maximale autorisée"
 msgid "(unknown error)"
 msgstr "(erreur inconnue)"
 
-#: Engine/csound_orc_compile.c:214 Engine/rdorch.c:1832
+#: Engine/csound_orc_compile.c:138
+#, c-format
+msgid ""
+"input arg %d '%s' of type %s not allowed when expecting %c (for opcode %s), "
+"line %d\n"
+msgstr ""
+"l'argument numero %d d'entrée '%s' de type %s est interdit lorsque l'on "
+"attend %c (pour opcode %s) ligne %d\n"
+
+#: Engine/csound_orc_compile.c:265 Engine/rdorch.c:1862
 msgid "missing or extra arg"
 msgstr "argument manquant ou en trop"
 
-#: Engine/csound_orc_compile.c:218
-#, fuzzy
+#: Engine/csound_orc_compile.c:269
 msgid "too many input args\n"
-msgstr "trop d'arguments en entrée"
+msgstr "trop d'arguments en entrée\n"
+
+#: Engine/csound_orc_compile.c:304
+#, c-format
+msgid "input arg '%s' used before defined (in opcode %s), line %d\n"
+msgstr ""
+"l'argument en entrée '%s' a été utilisé avant d'être défini (pour opcode %s) "
+"ligne %d\n"
+
+#: Engine/csound_orc_compile.c:380
+#, c-format
+msgid ""
+"output name previously used, type '%c' must be uniquely defined, line %d"
+msgstr ""
+"nom de sortie déjà utilisé, le type '%c' doit avoir une définition unique, "
+"ligne %d"
 
-#: Engine/csound_orc_compile.c:475
-#, fuzzy, c-format
+#: Engine/csound_orc_compile.c:386
+#, c-format
+msgid "output arg '%s' illegal type (for opcode %s), line %d\n"
+msgstr ""
+"l'argument de sortie '%s' est de type illégal (pour opcode %s) ligne %d\n"
+
+#: Engine/csound_orc_compile.c:541
+#, c-format
 msgid "create_opcode: No rule to handle statement of type %d\n"
 msgstr "create_opcode : aucune règle pour traiter une instruction de type %d\n"
 
-#: Engine/csound_orc_compile.c:671
+#: Engine/csound_orc_compile.c:738
 #, c-format
 msgid "create_instrument: instr num %ld\n"
 msgstr "create_instrument : numéro d'instrument %ld\n"
 
-#: Engine/csound_orc_compile.c:681
+#: Engine/csound_orc_compile.c:748
 #, c-format
 msgid "create_instrument: instr name %s\n"
 msgstr "create_instrument : nom de l'instrument %s\n"
 
-#: Engine/csound_orc_compile.c:688 Engine/otran.c:351
+#: Engine/csound_orc_compile.c:755 Engine/otran.c:364
 msgid "invalid name for instrument"
 msgstr "nom d'instrument non valide"
 
-#: Engine/csound_orc_compile.c:692 Engine/otran.c:356
+#: Engine/csound_orc_compile.c:759 Engine/otran.c:370
 #, c-format
 msgid "instr %s redefined"
 msgstr "instr %s redéfini"
 
-#: Engine/csound_orc_compile.c:833 Engine/otran.c:145 Engine/symbtab.c:394
-#, c-format
-msgid "invalid input type for opcode %s"
-msgstr "type d'entrée non valide pour l'opcode %s"
-
-#: Engine/csound_orc_compile.c:838 Engine/otran.c:150 Engine/symbtab.c:399
-#, c-format
-msgid "too many input args for opcode %s"
-msgstr "trop d'arguments en entrée pour l'opcode %s"
-
-#: Engine/csound_orc_compile.c:853 Engine/otran.c:165 Engine/symbtab.c:414
-#, c-format
-msgid "too many output args for opcode %s"
-msgstr "trop d'arguments en sortie pour l'opcode %s"
-
-#: Engine/csound_orc_compile.c:869 Engine/otran.c:187 Engine/symbtab.c:433
-#, c-format
-msgid "invalid output type for opcode %s"
-msgstr "type de sortie non valide pour l'opcode %s"
-
-#: Engine/csound_orc_compile.c:954 Engine/otran.c:339
+#: Engine/csound_orc_compile.c:903 Engine/otran.c:352
 #, c-format
 msgid "instr %ld redefined"
 msgstr "instr %ld redéfini"
 
-#: Engine/csound_orc_compile.c:964
+#: Engine/csound_orc_compile.c:914
 msgid "!!! csound->opcodeInfo is NULL !!!\n"
 msgstr "!!! csound->opcodeInfo est NULL !!!\n"
 
-#: Engine/csound_orc_compile.c:1111
+#: Engine/csound_orc_compile.c:1083
 #, c-format
 msgid "Unknown TREE node of type %d found in root.\n"
 msgstr "Noeud inconnu de type %d trouvé à la racine.\n"
 
-#: Engine/csound_orc_compile.c:1168 Engine/otran.c:565 Engine/otran.c:1414
+#: Engine/csound_orc_compile.c:1140 Engine/otran.c:579 Engine/otran.c:1433
 #, c-format
 msgid "%s invalid sample rate"
 msgstr "%s taux d'échantillonnage non valide"
 
-#: Engine/csound_orc_compile.c:1170 Engine/otran.c:567 Engine/otran.c:1416
+#: Engine/csound_orc_compile.c:1142 Engine/otran.c:581 Engine/otran.c:1435
 #, c-format
 msgid "%s invalid control rate"
 msgstr "%s taux de contrôle non valide"
 
-#: Engine/csound_orc_compile.c:1173 Engine/otran.c:570 Engine/otran.c:1412
+#: Engine/csound_orc_compile.c:1146 Engine/otran.c:584 Engine/otran.c:1431
 #, c-format
 msgid "%s invalid ksmps value"
 msgstr "%s valeur de ksmps non valide"
 
-#: Engine/csound_orc_compile.c:1176 Engine/otran.c:572 Engine/otran.c:1418
+#: Engine/csound_orc_compile.c:1149 Engine/otran.c:587 Engine/otran.c:1437
 #, c-format
 msgid "%s inconsistent sr, kr, ksmps"
 msgstr "%s sr, kr, ksmps contradictoires"
 
-#: Engine/csound_orc_compile.c:1190
+#: Engine/csound_orc_compile.c:1165
 msgid "perf-pass statements illegal in header blk\n"
 msgstr "les instructions d'exécution sont interdites dans le bloc d'en-tête\n"
 
-#: Engine/csound_orc_compile.c:1195
+#: Engine/csound_orc_compile.c:1170
 #, c-format
 msgid "%d syntax errors in orchestra.  compilation invalid\n"
 msgstr "%d erreurs de syntaxe dans l'orchestre. Compilation non valide\n"
 
-#: Engine/csound_orc_compile.c:1255 Engine/otran.c:656
+#: Engine/csound_orc_compile.c:1230 Engine/otran.c:671
 msgid "inconsistent argoff sumcount"
 msgstr "nombre d'arguments incohérent"
 
-#: Engine/csound_orc_compile.c:1327 Engine/otran.c:725
+#: Engine/csound_orc_compile.c:1302 Engine/otran.c:740
 #, c-format
 msgid "LABELS list is full...extending to %d\n"
 msgstr "la liste des ETIQUETTES est pleine... extension à %d\n"
 
-#: Engine/csound_orc_compile.c:1365 Engine/otran.c:763
+#: Engine/csound_orc_compile.c:1340 Engine/otran.c:778
 #, c-format
 msgid "GOTOS list is full..extending to %d\n"
 msgstr "la liste des GOTOS est pleine... extension à %d\n"
 
-#: Engine/csound_orc_compile.c:1398 Engine/otran.c:796
+#: Engine/csound_orc_compile.c:1373 Engine/otran.c:811
 #, c-format
 msgid "target label '%s' not found"
 msgstr "étiquette cible '%s' non trouvée"
 
-#: Engine/csound_orc_compile.c:1463 Engine/otran.c:851
+#: Engine/csound_orc_compile.c:1451 Engine/otran.c:866
 #, c-format
 msgid "string syntax '%s'"
 msgstr "syntaxe de chaîne '%s'"
 
-#: Engine/csound_orc_compile.c:1513 Engine/otran.c:901
+#: Engine/csound_orc_compile.c:1501 Engine/otran.c:916
 #, c-format
 msgid "numeric syntax '%s'"
 msgstr "syntaxe numérique '%s'"
 
-#: Engine/csound_orc_compile.c:1539 Engine/otran.c:927
+#: Engine/csound_orc_compile.c:1527 Engine/otran.c:942
 #, c-format
 msgid "extending Floating pool to %d\n"
 msgstr "agrandissement du réservoir de valeurs flottantes à %d\n"
 
-#: Engine/csound_orc_compile.c:1578 Engine/otran.c:999
+#: Engine/csound_orc_compile.c:1566 Engine/otran.c:1018
 msgid "gblnamset(): memory allocation failure"
 msgstr "gblnamset() : échec de l'allocation de mémoire"
 
-#: Engine/csound_orc_compile.c:1606 Engine/otran.c:1027
+#: Engine/csound_orc_compile.c:1594 Engine/otran.c:1046
 msgid "lclnamset(): memory allocation failure"
 msgstr "lclnamset() : échec de l'allocation de mémoire"
 
-#: Engine/csound_orc_compile.c:1632 Engine/otran.c:1052
+#: Engine/csound_orc_compile.c:1620 Engine/otran.c:1071
 msgid "unexpected global name"
 msgstr "nom global inattendu"
 
-#: Engine/csound_orc_compile.c:1655 Engine/otran.c:1074
+#: Engine/csound_orc_compile.c:1643 Engine/otran.c:1093
 msgid "unknown nametype"
 msgstr "type nommé inconnu"
 
-#: Engine/csound_orc.l:239
+#: Engine/csound_orc_expressions.c:459
 #, c-format
-msgid "unterminated string found on line %d >>%s<<\n"
-msgstr ""
+msgid "error: function %s with arg type %c not found, line %d \n"
+msgstr "erreur : fonction %s avec le type d'arg %c introuvable, ligne %d\n"
 
-#: Engine/csound_orc.l:259 Engine/csound_orc.l:286 Engine/csound_orc.l:314
-#: Engine/csound_orc.l:367 Engine/rdorch.c:901 Engine/sread.c:396
+#: Engine/csound_orc_expressions.c:862
 #, c-format
-msgid "Undefined macro: '%s'"
-msgstr "Macro non définie : '%s'"
+msgid "error: non-existent statement in conditional, line %d \n"
+msgstr "erreur : instruction inexistante dans la conditionnelle, ligne %d\n"
 
-#: Engine/csound_orc.l:265 Engine/csound_orc.l:292
-msgid "Includes nested too deeply"
-msgstr "Imbrication des boucles trop profonde"
-
-#: Engine/csound_orc.l:335 Engine/csound_orc.l:388 Engine/rdorch.c:940
+#: Engine/csound_orc_semantics.c:157
 #, c-format
 msgid ""
-"Missing argument terminator\n"
-"%.98s"
+"\n"
+"error: %s  (token \"%s\")"
 msgstr ""
-"Le terminateur d'argument est manquant\n"
-"%.98s"
-
-#: Engine/csound_orc.l:484
-#, c-format
-msgid "Line %d: Unknown character: '%c'(%2x)\n"
-msgstr "Ligne %d : Caractère inconnu : '%c'(%2x)\n"
-
-#: Engine/csound_orc.l:527
-#, c-format
-msgid "Cannot open file \"%s\"\n"
-msgstr "Impossible d'ouvrir le fichier \"%s\"\n"
-
-#: Engine/csound_orc.l:573 Engine/rdorch.c:689 Engine/sread.c:1595
-msgid "macro error\n"
-msgstr "erreur de macro\n"
+"\n"
+"erreur : %s (symbole %s)"
 
-#: Engine/csound_orc.l:631 Engine/rdorch.c:845 Engine/sread.c:1686
+#: Engine/csound_orc_semantics.c:159
 #, c-format
-msgid "macro %s undefined\n"
-msgstr "la macro %s n'est pas définie\n"
-
-#: Engine/csound_orc.l:645 Engine/rdorch.c:859 Engine/sread.c:294
-msgid "Undefining undefined macro"
-msgstr "Libération de la macro non définie"
+msgid ""
+" line %d:\n"
+">>>"
+msgstr ""
+" ligne %d :\n"
+">>>"
 
-#: Engine/csound_orc.l:786 Engine/rdorch.c:413 Engine/sread.c:741
+#: Engine/csound_orc_semantics.c:732
 #, c-format
-msgid "Macro definition for %*s\n"
-msgstr "Définition de macro pour %*s\n"
+msgid "insufficient required arguments for opcode %s on line %d\n"
+msgstr "arguments requis manquants pour opcode %s ligne %d\n"
 
-#: Engine/csound_orc.l:789 Engine/rdorch.c:416
-msgid "Invalid macro name for --omacro"
-msgstr "Nom de macro non valide pour --omacro"
-
-#: Engine/csound_orc.y:270
-msgid "No number following instr\n"
-msgstr "Aucun numéro ne suit instr\n"
-
-#: Engine/csound_orc_semantics.c:127
-#, fuzzy, c-format
-msgid "error: %s (token \"%s\")"
-msgstr "%s : erreur : %s (%s)\n"
-
-#: Engine/csound_orc_semantics.c:129
-#, fuzzy, c-format
-msgid " line %d: %s"
-msgstr ", ligne %d :\n"
-
-#: Engine/csound_orc_semantics.c:702 Engine/rdorch.c:1863
-msgid "insufficient required arguments"
-msgstr "arguments requis manquants"
-
-#: Engine/csound_orc_semantics.c:768 Engine/rdorch.c:1617 Engine/rdorch.c:1635
-#: Engine/rdorch.c:1676 Engine/rdorch.c:1811 Engine/rdorch.c:1980
+#: Engine/csound_orc_semantics.c:797 Engine/rdorch.c:1644 Engine/rdorch.c:1662
+#: Engine/rdorch.c:1703 Engine/rdorch.c:1841 Engine/rdorch.c:2011
 #, c-format
 msgid "modified opcod: %s"
 msgstr "opcode modifié : %s"
 
-#: Engine/cs_par_dispatch.c:113 Engine/cs_par_dispatch.c:125
+#: Engine/cs_par_dispatch.c:115 Engine/cs_par_dispatch.c:128
 #, c-format
 msgid "Poorly specified global lock index: %i [max: %i]\n"
-msgstr ""
+msgstr "Index de verrou global faiblement spécifié : %i [max : %i]\n"
 
-#: Engine/cs_par_dispatch.c:138 Engine/cs_par_dispatch.c:157
+#: Engine/cs_par_dispatch.c:142 Engine/cs_par_dispatch.c:162
 msgid "Invalid NULL parameter name for a global variable\n"
-msgstr ""
+msgstr "Nom de paramètre NULL non valide pour une variable globale\n"
 
-#: Engine/cs_par_dispatch.c:505 Engine/cs_par_dispatch.c:528
-#: Engine/cs_par_dispatch.c:2463 Engine/cs_par_dispatch.c:2507
-#: Engine/cs_par_dispatch.c:2509 Engine/cs_par_dispatch.c:2570
-#, fuzzy
+#: Engine/cs_par_dispatch.c:526 Engine/cs_par_dispatch.c:553
+#: Engine/cs_par_dispatch.c:2543 Engine/cs_par_dispatch.c:2588
+#: Engine/cs_par_dispatch.c:2590 Engine/cs_par_dispatch.c:2654
 msgid "Invalid NULL Parameter entry"
-msgstr "paramètre de mode non valide"
+msgstr "Paramètre entry NULL non valide"
 
-#: Engine/cs_par_dispatch.c:507 Engine/cs_par_dispatch.c:541
-#: Engine/cs_par_dispatch.c:566 Engine/cs_par_dispatch.c:605
-#, fuzzy
+#: Engine/cs_par_dispatch.c:528 Engine/cs_par_dispatch.c:567
+#: Engine/cs_par_dispatch.c:594 Engine/cs_par_dispatch.c:635
 msgid "Invalid NULL Parameter name"
-msgstr "nom de variable non valide"
+msgstr "Paramètre name NULL non valide"
 
-#: Engine/cs_par_dispatch.c:512
-#, fuzzy
+#: Engine/cs_par_dispatch.c:535
 msgid "Failed to allocate Opcode Weight cache entry"
-msgstr "Echec de l'allocation d'une nouvelle entrée d'opcode."
+msgstr "Echec de l'allocation de l'entrée du cache de poids d'opcode."
 
-#: Engine/cs_par_dispatch.c:632 Engine/cs_par_dispatch.c:718
+#: Engine/cs_par_dispatch.c:664 Engine/cs_par_dispatch.c:755
 msgid "No Weights to Dump (Using Defaults)\n"
-msgstr ""
+msgstr "Aucun poids à sortir (valeurs par défaut)\n"
 
-#: Engine/cs_par_dispatch.c:670 Engine/cs_par_dispatch.c:794
+#: Engine/cs_par_dispatch.c:705 Engine/cs_par_dispatch.c:835
 #, c-format
 msgid "Opcode Weight Spec File not found at: %s"
-msgstr ""
+msgstr "Fichier de spéc de poids d'opcode non trouvé à : %s"
 
-#: Engine/cs_par_dispatch.c:722
+#: Engine/cs_par_dispatch.c:759
 msgid "Weights Dump\n"
-msgstr ""
+msgstr "Dump des poids\n"
 
-#: Engine/cs_par_dispatch.c:866
+#: Engine/cs_par_dispatch.c:907
 #, c-format
 msgid "Parallel Spec File not found at: %s"
-msgstr ""
+msgstr "Fichier de spéc parallèle non trouvé à : %s"
 
-#: Engine/cs_par_dispatch.c:872
+#: Engine/cs_par_dispatch.c:913
 msgid "Parallel Spec File invalid format expected weight_min parameter"
-msgstr ""
+msgstr "Format du fichier de spéc parallèle non valide, paramètre weight_min attendu"
 
-#: Engine/cs_par_dispatch.c:877
+#: Engine/cs_par_dispatch.c:918
 msgid "Parallel Spec File invalid format expected weight_max parameter"
-msgstr ""
+msgstr "Format du fichier de spéc parallèle non valide, paramètre weight_max attendu"
 
-#: Engine/cs_par_dispatch.c:881
+#: Engine/cs_par_dispatch.c:922
 msgid "Parallel Spec File invalid format expected roots_avail_min parameter"
-msgstr ""
+msgstr "Format du fichier de spéc parallèle non valide, paramètre roots_avail_min attendu"
 
-#: Engine/cs_par_dispatch.c:885
+#: Engine/cs_par_dispatch.c:926
 msgid "Parallel Spec File invalid format expected roots_avail_max parameter"
-msgstr ""
-
-#: Engine/cs_par_dispatch.c:961 Engine/cs_par_dispatch.c:985
-#: Engine/cs_par_dispatch.c:1109 Engine/cs_par_dispatch.c:1195
-#: Engine/cs_par_dispatch.c:1332 Engine/cs_par_dispatch.c:1366
-#: Engine/cs_par_dispatch.c:1383 Engine/cs_par_dispatch.c:1405
-#: Engine/cs_par_dispatch.c:1432 Engine/cs_par_dispatch.c:1452
-#: Engine/cs_par_dispatch.c:1476 Engine/cs_par_dispatch.c:1566
-#: Engine/cs_par_dispatch.c:1621 Engine/cs_par_dispatch.c:1714
-#: Engine/cs_par_dispatch.c:1769 Engine/cs_par_dispatch.c:2597
-#, fuzzy
+msgstr "Format du fichier de spéc parallèle non valide, paramètre roots_avail_max attendu"
+
+#: Engine/cs_par_dispatch.c:1003 Engine/cs_par_dispatch.c:1027
+#: Engine/cs_par_dispatch.c:1155 Engine/cs_par_dispatch.c:1251
+#: Engine/cs_par_dispatch.c:1405 Engine/cs_par_dispatch.c:1439
+#: Engine/cs_par_dispatch.c:1456 Engine/cs_par_dispatch.c:1478
+#: Engine/cs_par_dispatch.c:1506 Engine/cs_par_dispatch.c:1528
+#: Engine/cs_par_dispatch.c:1552 Engine/cs_par_dispatch.c:1644
+#: Engine/cs_par_dispatch.c:1699 Engine/cs_par_dispatch.c:1792
+#: Engine/cs_par_dispatch.c:1847 Engine/cs_par_dispatch.c:2681
 msgid "Invalid NULL Parameter dag"
-msgstr "paramètre de mode non valide : %d"
+msgstr "Paramètre dag NULL non valide"
 
-#: Engine/cs_par_dispatch.c:966
-#, fuzzy
+#: Engine/cs_par_dispatch.c:1008
 msgid "Failed to allocate dag"
-msgstr "La création de %s a échoué"
+msgstr "L'allocation de dag a échoué"
 
-#: Engine/cs_par_dispatch.c:1017 Engine/cs_par_dispatch.c:1040
-#: Engine/cs_par_dispatch.c:1062 Engine/cs_par_dispatch.c:1064
-#, fuzzy
+#: Engine/cs_par_dispatch.c:1060 Engine/cs_par_dispatch.c:1083
+#: Engine/cs_par_dispatch.c:1105 Engine/cs_par_dispatch.c:1107
 msgid "Invalid NULL Parameter dag_node"
-msgstr "paramètre de mode non valide : %d"
+msgstr "Paramètre dag_node NULL non valide"
 
-#: Engine/cs_par_dispatch.c:1019
-#, fuzzy
+#: Engine/cs_par_dispatch.c:1062
 msgid "Invalid NULL Parameter instr"
-msgstr "paramètre de mode non valide"
+msgstr "Paramètre instr NULL non valide"
 
-#: Engine/cs_par_dispatch.c:1021
-#, fuzzy
+#: Engine/cs_par_dispatch.c:1064
 msgid "Invalid NULL Parameter insds"
-msgstr "paramètre de mode non valide : %d"
+msgstr "Paramètre insds NULL non valide"
 
-#: Engine/cs_par_dispatch.c:1026 Engine/cs_par_dispatch.c:1048
-#, fuzzy
+#: Engine/cs_par_dispatch.c:1069 Engine/cs_par_dispatch.c:1091
 msgid "Failed to allocate dag_node"
-msgstr "Echec de l'allocation d'une nouvelle entrée d'opcode."
+msgstr "L'allocation de dag_node a échoué"
 
-#: Engine/cs_par_dispatch.c:1043
-#, fuzzy
+#: Engine/cs_par_dispatch.c:1086
 msgid "Invalid Parameter count must be greater than 0"
-msgstr "granule_set : iratio doit être supérieur à 0"
+msgstr "Nombre des paramètres non valide, doit être supérieur à 0"
 
-#: Engine/cs_par_dispatch.c:1175 Engine/cs_par_dispatch.c:1433
-#: Engine/cs_par_dispatch.c:2465 Engine/cs_par_dispatch.c:2571
-#: Engine/cs_par_dispatch.c:2598
-#, fuzzy
+#: Engine/cs_par_dispatch.c:1229 Engine/cs_par_dispatch.c:1508
+#: Engine/cs_par_dispatch.c:2545 Engine/cs_par_dispatch.c:2655
+#: Engine/cs_par_dispatch.c:2682
 msgid "Invalid NULL Parameter chain"
-msgstr "paramètre de mode non valide"
+msgstr "Paramètre chain NULL non valide"
 
-#: Engine/cs_par_dispatch.c:1183
+#: Engine/cs_par_dispatch.c:1237
 #, c-format
 msgid "Failed to find semantic information for instrument '%i'"
-msgstr ""
+msgstr "Impossible de trouver l'information sémantique pour l'instrument '%i'"
 
-#: Engine/cs_par_dispatch.c:1478
-#, fuzzy
+#: Engine/cs_par_dispatch.c:1554
 msgid "Invalid NULL Parameter node"
-msgstr "paramètre de mode non valide : %d"
+msgstr "Paramètre node NULL non valide"
 
-#: Engine/cs_par_dispatch.c:1480
-#, fuzzy
+#: Engine/cs_par_dispatch.c:1556
 msgid "Invalid NULL Parameter update_hdl"
-msgstr "paramètre de mode non valide : %d"
+msgstr "Paramètre update_hdl NULL non valide"
 
-#: Engine/cs_par_dispatch.c:1569
+#: Engine/cs_par_dispatch.c:1647
 msgid "Invalid Parameter update_hdl is outside the DAG range"
-msgstr ""
+msgstr "Paramètre update_hdl non valide, hors limites de DAG"
 
-#: Engine/cs_par_dispatch.c:2417
-#, fuzzy, c-format
+#: Engine/cs_par_dispatch.c:2497
+#, c-format
 msgid "Parallel Dump File not found at: %s for writing"
-msgstr "impossible d'ouvrir %s en écriture"
+msgstr "Fichier de dump parallèle non trouvé à : %s pour écriture"
 
-#: Engine/cs_par_dispatch.c:2477
-#, fuzzy
+#: Engine/cs_par_dispatch.c:2557
 msgid "Failed to allocate Dag2 cache entry"
-msgstr "Echec de l'allocation d'une nouvelle entrée d'opcode."
+msgstr "L'allocation du cache d'entrée de Dag2 a échoué"
 
-#: Engine/cs_par_dispatch.c:2527
+#: Engine/cs_par_dispatch.c:2610
 msgid "Cache Update\n"
-msgstr ""
+msgstr "Mise à jour du cache\n"
 
 #: Engine/envvar.c:265
 #, c-format
@@ -481,12 +435,12 @@ msgstr "La variable d'environnement '%s' a été fixée à "
 msgid "Creating search path cache for '%s':"
 msgstr "Création du cache de chemin de recherche pour '%s' :"
 
-#: Engine/envvar.c:1082
+#: Engine/envvar.c:1083
 #, c-format
 msgid "internal error: csoundFileOpen(): invalid type: %d"
 msgstr "erreur interne : csoundFileOpen() : type non valide : %d"
 
-#: Engine/envvar.c:1264
+#: Engine/envvar.c:1266
 #, c-format
 msgid "internal error: csoundCreateFileHandle(): invalid type: %d"
 msgstr "erreur interne : csoundCreateFileHandle() : type non valide : %d"
@@ -546,48 +500,48 @@ msgstr "compte des termes"
 msgid "expression syntax"
 msgstr "syntaxe de l'expression"
 
-#: Engine/fgens.c:95
+#: Engine/fgens.c:91
 msgid "unknown GEN number"
 msgstr "numéro de GEN inconnu"
 
-#: Engine/fgens.c:137
+#: Engine/fgens.c:133
 msgid "ftable does not exist"
 msgstr "la ftable n'existe pas"
 
-#: Engine/fgens.c:142
+#: Engine/fgens.c:138
 #, c-format
 msgid "ftable %d now deleted\n"
 msgstr "la ftable %d est maintenant supprimée\n"
 
-#: Engine/fgens.c:157 Engine/fgens.c:1597 Engine/fgens.c:1683
-#: Engine/fgens.c:1762 Engine/fgens.c:1878 Engine/fgens.c:1959
-#: Engine/fgens.c:2867
+#: Engine/fgens.c:153 Engine/fgens.c:1593 Engine/fgens.c:1679
+#: Engine/fgens.c:1758 Engine/fgens.c:1874 Engine/fgens.c:1955
+#: Engine/fgens.c:2909
 msgid "insufficient gen arguments"
 msgstr "nombre d'arguments de GEN insuffisant"
 
-#: Engine/fgens.c:183 Opcodes/ftgen.c:116
+#: Engine/fgens.c:179 Opcodes/ftgen.c:116
 #, c-format
 msgid "Named gen \"%s\" not defined"
 msgstr "Le GEN nommé \"%s\" n'est pas défini"
 
-#: Engine/fgens.c:190
+#: Engine/fgens.c:186
 msgid "illegal gen number"
 msgstr "numéro de GEN interdit"
 
-#: Engine/fgens.c:198
-msgid "deferred size for GENs 1, 23 or 28 only"
-msgstr "taille différée seulement pour GEN1, GEN23 et GEN28"
+#: Engine/fgens.c:194
+msgid "deferred size for GENs 1, 23, 28 or 49 only"
+msgstr "taille différée seulement pour GEN1, GEN23, GEN28 et GEN49"
 
-#: Engine/fgens.c:201 Engine/fgens.c:249
+#: Engine/fgens.c:197 Engine/fgens.c:245
 #, c-format
 msgid "ftable %d:\n"
 msgstr "ftable %d :\n"
 
-#: Engine/fgens.c:226 Engine/fgens.c:233
+#: Engine/fgens.c:222 Engine/fgens.c:229
 msgid "illegal table length"
 msgstr "longueur de table illégale"
 
-#: Engine/fgens.c:292 Engine/fgens.c:2219
+#: Engine/fgens.c:288 Engine/fgens.c:2215
 #, c-format
 msgid ""
 "ftable %d relocating due to size change\n"
@@ -596,299 +550,300 @@ msgstr ""
 "ftable %d réallouée à cause du changement de taille.\n"
 "          les instruments actifs peuvent en être perturbés"
 
-#: Engine/fgens.c:350 Engine/fgens.c:471 Engine/fgens.c:555 Engine/fgens.c:636
-#: Engine/fgens.c:711 Engine/fgens.c:760 Engine/fgens.c:881 Engine/fgens.c:958
-#: Engine/fgens.c:1053 Engine/fgens.c:1097 Engine/fgens.c:1144
-#: Engine/fgens.c:1397 Engine/fgens.c:1459 Engine/fgens.c:1681
-#: Engine/fgens.c:1759 Engine/fgens.c:2114 Engine/fgens.c:2821
-#: Engine/fgens.c:2864
+#: Engine/fgens.c:346 Engine/fgens.c:467 Engine/fgens.c:551 Engine/fgens.c:632
+#: Engine/fgens.c:707 Engine/fgens.c:756 Engine/fgens.c:877 Engine/fgens.c:954
+#: Engine/fgens.c:1049 Engine/fgens.c:1093 Engine/fgens.c:1140
+#: Engine/fgens.c:1393 Engine/fgens.c:1455 Engine/fgens.c:1677
+#: Engine/fgens.c:1755 Engine/fgens.c:2110 Engine/fgens.c:2863
+#: Engine/fgens.c:2906
 msgid "using extended arguments\n"
 msgstr "utilisation d'arguments étendus\n"
 
-#: Engine/fgens.c:374
+#: Engine/fgens.c:370
 msgid "no coefs present"
 msgstr "aucun coefficient n'est présent"
 
-#: Engine/fgens.c:379 Engine/fgens.c:645 Engine/fgens.c:653
+#: Engine/fgens.c:375 Engine/fgens.c:641 Engine/fgens.c:649
 msgid "illegal x interval"
 msgstr "intervalle x interdit"
 
-#: Engine/fgens.c:408 Engine/fgens.c:557 Engine/fgens.c:638 Engine/fgens.c:883
-#: Engine/fgens.c:1354 Engine/fgens.c:2378 Engine/fgens.c:2694 Top/main.c:142
-#: util/cvanal.c:66 util/lpanal.c:398 util/pvanal.c:170
+#: Engine/fgens.c:404 Engine/fgens.c:553 Engine/fgens.c:634 Engine/fgens.c:879
+#: Engine/fgens.c:1350 Engine/fgens.c:2375 Engine/fgens.c:2690
+#: Engine/fgens.c:2810 Top/main.c:141 util/cvanal.c:66 util/lpanal.c:398
+#: util/pvanal.c:170
 msgid "insufficient arguments"
 msgstr "pas assez d'arguments"
 
-#: Engine/fgens.c:412 Engine/fgens.c:1359
+#: Engine/fgens.c:408 Engine/fgens.c:1355
 msgid "unknown srctable number"
 msgstr "numéro de srctable inconnu"
 
-#: Engine/fgens.c:425
+#: Engine/fgens.c:421
 msgid "table size too large"
 msgstr "taille de table trop grande"
 
-#: Engine/fgens.c:510 Engine/fgens.c:543
+#: Engine/fgens.c:506 Engine/fgens.c:539
 msgid "gen call has negative segment size:"
 msgstr "l'appel de GEN a une taille de segment négative :"
 
-#: Engine/fgens.c:512
+#: Engine/fgens.c:508
 msgid "illegal input vals for gen call, beginning:"
 msgstr "appel de GEN avec des valeurs illégales en entrée, début :"
 
-#: Engine/fgens.c:578
+#: Engine/fgens.c:574
 msgid "negative segsiz"
 msgstr "segsiz négatif"
 
-#: Engine/fgens.c:787
+#: Engine/fgens.c:783
 msgid "nh partials < 1"
 msgstr "nombre d'harmoniques nh < 1"
 
-#: Engine/fgens.c:886
+#: Engine/fgens.c:882
 msgid "illegal xint value"
 msgstr "valeur xint illégale"
 
-#: Engine/fgens.c:889
+#: Engine/fgens.c:885
 msgid "illegal xamp value"
 msgstr "valeur xamp illégale"
 
-#: Engine/fgens.c:961
+#: Engine/fgens.c:957
 msgid "uneven number of args"
 msgstr "nombre impair d'arguments"
 
-#: Engine/fgens.c:1081
+#: Engine/fgens.c:1077
 msgid "gen call has illegal x-ordinate values:"
 msgstr "l'appel gen a des valeurs d'abscisse x illégales"
 
-#: Engine/fgens.c:1099
+#: Engine/fgens.c:1095
 msgid "wrong number of args"
 msgstr "nombre d'arguments incorrect"
 
-#: Engine/fgens.c:1113
+#: Engine/fgens.c:1109
 msgid "a range given exceeds table length"
 msgstr "un intervalle donné excède la longueur de la table"
 
-#: Engine/fgens.c:1120
+#: Engine/fgens.c:1116
 msgid "an input function does not exist"
 msgstr "une fonction d'entrée n'existe pas"
 
-#: Engine/fgens.c:1253
+#: Engine/fgens.c:1249
 msgid "No such window!"
 msgstr "Pas de fenêtre de cette sorte !"
 
-#: Engine/fgens.c:1271
+#: Engine/fgens.c:1267
 msgid "Wrong number of input arguments"
 msgstr "Nombre incorrect d'arguments en entrée"
 
-#: Engine/fgens.c:1272
+#: Engine/fgens.c:1268
 msgid "unknown distribution"
 msgstr "distribution inconnue"
 
-#: Engine/fgens.c:1321
+#: Engine/fgens.c:1317
 msgid "error opening ASCII file"
 msgstr "erreur à l'ouverture du fichier ASCII"
 
-#: Engine/fgens.c:1327
+#: Engine/fgens.c:1323
 #, c-format
 msgid "%ld elements in %s\n"
 msgstr "%ld éléments dans %s\n"
 
-#: Engine/fgens.c:1338
+#: Engine/fgens.c:1334
 msgid "Numbers after table full in GEN23"
 msgstr "Encore des nombres à lire alors que la table est pleine dans GEN23"
 
-#: Engine/fgens.c:1367
+#: Engine/fgens.c:1363
 msgid "table size must be the same of source table"
 msgstr "la taille de la table doit être la même que celle de la table source"
 
-#: Engine/fgens.c:1439 Engine/fgens.c:1499
+#: Engine/fgens.c:1435 Engine/fgens.c:1495
 msgid "x coordinates must all be in increasing order:"
 msgstr "les coordonnées x doivent être toutes en ordre croissant"
 
-#: Engine/fgens.c:1442 Engine/fgens.c:1501
+#: Engine/fgens.c:1438 Engine/fgens.c:1497
 msgid "x coordinate greater than function size:"
 msgstr "coordonnée x supérieure à la taille de la fonction"
 
-#: Engine/fgens.c:1446
+#: Engine/fgens.c:1442
 msgid "illegal input val (y <= 0) for gen call, beginning:"
 msgstr "valeur d'entrée interdite (y <= 0) dans l'appel GEN, début :"
 
-#: Engine/fgens.c:1519
+#: Engine/fgens.c:1515
 msgid "GEN28 requires zero table length"
 msgstr "GEN28 nécessite une longueur de table nulle"
 
-#: Engine/fgens.c:1581
+#: Engine/fgens.c:1577
 msgid "could not open space file"
 msgstr "impossible d'ouvrir le fichier de spatialisation"
 
-#: Engine/fgens.c:1583
+#: Engine/fgens.c:1579
 msgid "Time values must be in increasing order"
 msgstr "Les valeurs de temps doivent être en ordre croissant"
 
-#: Engine/fgens.c:1604
+#: Engine/fgens.c:1600
 msgid "GEN30: source ftable not found"
 msgstr "GEN30 : la ftable source n'a pas été trouvée"
 
-#: Engine/fgens.c:1687
+#: Engine/fgens.c:1683
 msgid "GEN31: source ftable not found"
 msgstr "GEN31 : la ftable source n'a pas été trouvée"
 
-#: Engine/fgens.c:1795
+#: Engine/fgens.c:1791
 #, c-format
 msgid "GEN32: source ftable %d not found"
 msgstr "GEN32 : la ftable source %d n'a pas été trouvée"
 
-#: Engine/fgens.c:1889
+#: Engine/fgens.c:1885
 msgid "GEN33: source ftable not found"
 msgstr "GEN33 : la ftable source n'a pas été trouvée"
 
-#: Engine/fgens.c:2057
+#: Engine/fgens.c:2053
 msgid "unknown source table number"
 msgstr "numéro de table source inconnu"
 
-#: Engine/fgens.c:2089
+#: Engine/fgens.c:2085
 msgid "Gen41: negative probability not allowed"
 msgstr "Gen41 : probabilité négative interdite"
 
-#: Engine/fgens.c:2155 Opcodes/fareygen.c:70
+#: Engine/fgens.c:2151 Opcodes/fareygen.c:70
 #, c-format
 msgid "ftable %d: "
 msgstr "ftable %d : "
 
-#: Engine/fgens.c:2199
+#: Engine/fgens.c:2195
 #, c-format
 msgid "ftable %d:"
 msgstr "ftable %d :"
 
-#: Engine/fgens.c:2214
+#: Engine/fgens.c:2210
 #, c-format
 msgid "replacing previous ftable %d"
 msgstr "remplacement de la ftable précédente %d"
 
-#: Engine/fgens.c:2250 Engine/fgens.c:2337 Engine/fgens.c:2361
-#: Opcodes/gab/gab.c:578 Opcodes/gab/gab.c:632 Opcodes/midiops2.c:218
+#: Engine/fgens.c:2246 Engine/fgens.c:2334 Engine/fgens.c:2358
+#: Opcodes/gab/gab.c:580 Opcodes/gab/gab.c:634 Opcodes/midiops2.c:218
 #: Opcodes/midiops2.c:370 Opcodes/midiops2.c:452 Opcodes/uggab.c:1317
 #: Opcodes/uggab.c:1344 Opcodes/uggab.c:1364 Opcodes/uggab.c:1407
 #, c-format
 msgid "Invalid ftable no. %f"
 msgstr "Numéro de ftable non valide. %f"
 
-#: Engine/fgens.c:2255
+#: Engine/fgens.c:2251
 #, c-format
 msgid "deferred-size ftable %f illegal here"
 msgstr "taille différée de la ftable %f interdite ici"
 
-#: Engine/fgens.c:2281
+#: Engine/fgens.c:2278 Engine/fgens.c:2848
 #, c-format
 msgid "Deferred load of '%s' failed"
 msgstr "Le chargement différé de '%s' a échoué"
 
-#: Engine/fgens.c:2343
+#: Engine/fgens.c:2340
 #, c-format
 msgid "Deferred-size ftable %f load not available at perf time."
 msgstr ""
 "La taille différée au chargement de la ftable %f n'est pas disponible à "
 "l'exécution."
 
-#: Engine/fgens.c:2402
+#: Engine/fgens.c:2399
 #, c-format
 msgid "non-deferred ftable %d needs size %d\n"
 msgstr "la table non différée %d nécessite une taille %d\n"
 
-#: Engine/fgens.c:2449 Opcodes/loscilx.c:62
+#: Engine/fgens.c:2446 Opcodes/loscilx.c:64
 #, c-format
 msgid "invalid sample format: %d"
 msgstr "format d'échantillon non valide : %d"
 
-#: Engine/fgens.c:2457 Engine/fgens.c:2718
+#: Engine/fgens.c:2454 Engine/fgens.c:2714
 #, c-format
 msgid "channel %d illegal"
 msgstr "le canal %d est illégal"
 
-#: Engine/fgens.c:2463
+#: Engine/fgens.c:2460
 msgid "deferred alloc\n"
 msgstr "allocation différée\n"
 
-#: Engine/fgens.c:2471
+#: Engine/fgens.c:2468
 msgid "deferred size, but filesize unknown"
 msgstr "taille différée, mais taille de fichier inconnu"
 
-#: Engine/fgens.c:2474
+#: Engine/fgens.c:2471
 #, c-format
 msgid "  defer length %d\n"
 msgstr "  longueur différée %d\n"
 
-#: Engine/fgens.c:2543
+#: Engine/fgens.c:2540
 msgid "GEN1: input file truncated by ftable size"
 msgstr "GEN1 : le fichier en entrée a été tronqué à la taille de la ftable"
 
-#: Engine/fgens.c:2547
+#: Engine/fgens.c:2544
 #, c-format
 msgid "\tlooping endpoint %d exceeds ftsize %d\n"
 msgstr "\tla fin de boucle (%d) dépasse la taille de la table (%d)\n"
 
-#: Engine/fgens.c:2569
+#: Engine/fgens.c:2566
 msgid "GEN1 read error"
 msgstr "GEN1 erreur de lecture"
 
-#: Engine/fgens.c:2574
+#: Engine/fgens.c:2571
 msgid "GEN1: aiff file truncated by ftable size"
 msgstr "GEN1 : le fichier aiff a été tronqué à la taille de la table"
 
-#: Engine/fgens.c:2575
+#: Engine/fgens.c:2572
 #, c-format
 msgid "\taudio samps %d exceeds ftsize %d"
 msgstr "\tles échantillons audio %d dépassent la taille de la table (%d)"
 
-#: Engine/fgens.c:2619
+#: Engine/fgens.c:2616
 msgid "wrong number of ftable arguments"
 msgstr "nombre d'arguments incorrect pour la ftable"
 
-#: Engine/fgens.c:2629 OOps/pstream.c:326
+#: Engine/fgens.c:2626 OOps/pstream.c:326
 msgid "Failed to load PVOC-EX file"
 msgstr "Le chargement du fichier PVOC-EX a échoué"
 
-#: Engine/fgens.c:2640 InOut/midirecv.c:416 OOps/midiops.c:377
+#: Engine/fgens.c:2637 InOut/midirecv.c:416 OOps/midiops.c:377
 #: OOps/midiops.c:419 OOps/midiops.c:431
 msgid "illegal channel number"
 msgstr "numéro de canal illégal"
 
-#: Engine/fgens.c:2658
+#: Engine/fgens.c:2655
 msgid "ftable size too small"
 msgstr "taille de ftable trop petite"
 
-#: Engine/fgens.c:2734 Opcodes/mp3in.c:79 Opcodes/mp3in.c:218
+#: Engine/fgens.c:2730 Opcodes/mp3in.c:80 Opcodes/mp3in.c:219
 msgid "Not enough memory\n"
 msgstr "Pas assez de mémoire\n"
 
-#: Engine/fgens.c:2831
+#: Engine/fgens.c:2873
 msgid "gen51: invalid number of p-fields (too few grades)"
 msgstr "gen51 : nombre de p-champs non valide (pas assez de degrés)"
 
-#: Engine/fgens.c:2871
+#: Engine/fgens.c:2913
 msgid "number of channels inconsistent with number of args"
 msgstr "nombre de canaux en contradiction avec le nombre d'arguments"
 
-#: Engine/fgens.c:3030
+#: Engine/fgens.c:3072
 msgid "GEN53: invalid number of gen arguments"
 msgstr "GEN53 : nombre d'arguments de GEN non valide"
 
-#: Engine/fgens.c:3040
+#: Engine/fgens.c:3082
 msgid "GEN53: invalid table length"
 msgstr "GEN53 : longueur de table non valide"
 
-#: Engine/fgens.c:3044
+#: Engine/fgens.c:3086
 msgid "GEN53: invalid source table number"
 msgstr "GEN53 : numéro de la table source non valide"
 
-#: Engine/fgens.c:3047
+#: Engine/fgens.c:3089
 msgid "GEN53: mode must be in the range 0 to 15"
 msgstr "GEN53 : le mode doit être compris entre 0 et 15"
 
-#: Engine/fgens.c:3051
+#: Engine/fgens.c:3093
 msgid "GEN53: invalid source table length"
 msgstr "GEN53 : longueur de la table source non valide"
 
-#: Engine/fgens.c:3056
+#: Engine/fgens.c:3098
 msgid "GEN53: invalid window table"
 msgstr "GEN53 : table de fenêtre non valide"
 
@@ -912,35 +867,35 @@ msgstr "Instrument %s muet\n"
 msgid "Instrument %d muted\n"
 msgstr "Instrument %d muet\n"
 
-#: Engine/insert.c:103 Engine/insert.c:1249
+#: Engine/insert.c:103 Engine/insert.c:1301
 #, c-format
 msgid "instr %s expects midi event data, cannot run from score\n"
 msgstr "l'instr %s attend des évènements midi, et pas une partition\n"
 
-#: Engine/insert.c:106 Engine/insert.c:1252
+#: Engine/insert.c:106 Engine/insert.c:1304
 #, c-format
 msgid "instr %d expects midi event data, cannot run from score\n"
 msgstr "l'instr %d attend des évènements midi, et pas une partition\n"
 
-#: Engine/insert.c:115 Engine/insert.c:279 Engine/insert.c:1234
+#: Engine/insert.c:115 Engine/insert.c:279 Engine/insert.c:1286
 #, c-format
 msgid "cannot allocate last note because it exceeds 100%% of cpu time"
 msgstr ""
 "impossible d'allouer la dernière note car il n'y a plus de temps cpu "
 "disponible"
 
-#: Engine/insert.c:121 Engine/insert.c:285 Engine/insert.c:1239
+#: Engine/insert.c:121 Engine/insert.c:285 Engine/insert.c:1291
 msgid "cannot allocate last note because it exceeds instr maxalloc"
 msgstr ""
 "impossible d'allouer la dernière note car le nombre maximum d'allocations "
 "d'instr est atteint"
 
-#: Engine/insert.c:137 Engine/insert.c:305 Engine/insert.c:1270
+#: Engine/insert.c:137 Engine/insert.c:305 Engine/insert.c:1322
 #, c-format
 msgid "new alloc for instr %s:\n"
 msgstr "nouvelle allocation de l'instr %s :\n"
 
-#: Engine/insert.c:139 Engine/insert.c:307 Engine/insert.c:1272
+#: Engine/insert.c:139 Engine/insert.c:307 Engine/insert.c:1324
 #, c-format
 msgid "new alloc for instr %d:\n"
 msgstr "nouvelle allocation de l'instr %d :\n"
@@ -955,12 +910,12 @@ msgstr "l'instr %s utilise %d p-champs alors qu'il n'en a reçu que %d"
 msgid "instr %d uses %d p-fields but is given %d"
 msgstr "l'instr %d utilise %d p-champs alors qu'il n'en a reçu que %d"
 
-#: Engine/insert.c:251 Engine/insert.c:463
+#: Engine/insert.c:251 Engine/insert.c:482
 #, c-format
 msgid "instr %s now active:\n"
 msgstr "instr %s activé : \n"
 
-#: Engine/insert.c:253 Engine/insert.c:465
+#: Engine/insert.c:253 Engine/insert.c:484
 #, c-format
 msgid "instr %d now active:\n"
 msgstr "instr %d activé : \n"
@@ -980,26 +935,26 @@ msgstr "activation de l'instrument %d\n"
 msgid "MIDI note overlaps with key %d on same channel"
 msgstr "la note MIDI chevauche la touche %d sur le même canal"
 
-#: Engine/insert.c:566
+#: Engine/insert.c:585
 #, c-format
 msgid "removed instance of instr %s\n"
 msgstr "une instance de l'instrument %s a été enlevée\n"
 
-#: Engine/insert.c:568
+#: Engine/insert.c:587
 #, c-format
 msgid "removed instance of instr %d\n"
 msgstr "une instance de l'instrument %d a été enlevée\n"
 
-#: Engine/insert.c:691
+#: Engine/insert.c:710
 msgid "inactive allocs returned to freespace\n"
 msgstr "les allocation inactives ont été rendues à l'espace libre\n"
 
-#: Engine/insert.c:716
+#: Engine/insert.c:735
 #, c-format
 msgid "could not find playing instr %f\n"
 msgstr "impossible de trouver l'instr actif %f\n"
 
-#: Engine/insert.c:729
+#: Engine/insert.c:748
 msgid ""
 "\n"
 "INIT ERROR: "
@@ -1007,22 +962,22 @@ msgstr ""
 "\n"
 "ERREUR D'INITIALISATION : "
 
-#: Engine/insert.c:742
+#: Engine/insert.c:761
 #, c-format
 msgid "INIT ERROR in instr %d (opcode %s): "
 msgstr "ERREUR D'INITIALISATION dans l'instr %d (opcode %s) : "
 
-#: Engine/insert.c:745
+#: Engine/insert.c:764
 #, c-format
 msgid "INIT ERROR in instr %d (subinstr %d): "
 msgstr "ERREUR D'INITIALISATION dans l'instr %d (subinstr %d) : "
 
-#: Engine/insert.c:749
+#: Engine/insert.c:768
 #, c-format
 msgid "INIT ERROR in instr %d: "
 msgstr "ERREUR D'INITIALISATION dans l'instr %d : "
 
-#: Engine/insert.c:767
+#: Engine/insert.c:786
 msgid ""
 "\n"
 "PERF ERROR: "
@@ -1030,78 +985,78 @@ msgstr ""
 "\n"
 "ERREUR D'EXECUTION : "
 
-#: Engine/insert.c:780
+#: Engine/insert.c:799
 #, c-format
 msgid "PERF ERROR in instr %d (opcode %s): "
 msgstr "ERREUR D'EXECUTION dans l'instr %d (opcode %s) : "
 
-#: Engine/insert.c:783
+#: Engine/insert.c:802
 #, c-format
 msgid "PERF ERROR in instr %d (subinstr %d): "
 msgstr "ERREUR D'EXECUTION dans l'instr %d (subinstr %d) : "
 
-#: Engine/insert.c:787
+#: Engine/insert.c:806
 #, c-format
 msgid "PERF ERROR in instr %d: "
 msgstr "ERREUR D'EXECUTION dans l'instr %d :"
 
-#: Engine/insert.c:792
+#: Engine/insert.c:811
 msgid "   note aborted\n"
 msgstr "    note interrompue\n"
 
-#: Engine/insert.c:820
+#: Engine/insert.c:839
 msgid "subinstr: number of output args greater than nchnls"
 msgstr "subinstr : nombre d'arguments de sortie supérieur à nchnls"
 
-#: Engine/insert.c:861
+#: Engine/insert.c:880
 msgid "subinstr: too many p-fields"
 msgstr "subinstr : trop de p-champs"
 
-#: Engine/insert.c:920
+#: Engine/insert.c:939
 #, c-format
 msgid "%s: invalid local ksmps value: %d"
 msgstr "%s : valeur locale de ksmps non valide : %d"
 
-#: Engine/insert.c:1040 OOps/bus.c:835 Opcodes/stackops.c:293
+#: Engine/insert.c:1062 OOps/bus.c:835 Opcodes/stackops.c:286
 #, c-format
 msgid "%s: not initialised"
 msgstr "%s : non initialisé"
 
-#: Engine/insert.c:1169
+#: Engine/insert.c:1221
 #, c-format
 msgid "setksmps: invalid ksmps value: %d"
 msgstr "setksmps : valeur de ksmps non valide : %d"
 
-#: Engine/insert.c:1225
+#: Engine/insert.c:1277
 #, c-format
 msgid "schedule event ignored. instr %d undefined\n"
 msgstr "évènement programmé ignoré. L'instr %d n'est pas défini\n"
 
-#: Engine/insert.c:1303
+#: Engine/insert.c:1355
 #, c-format
 msgid "instr %s pmax = %d, note pcnt = %d"
 msgstr "instr %s pmax = %d, pcnt de note = %d"
 
-#: Engine/insert.c:1306
+#: Engine/insert.c:1358
 #, c-format
 msgid "instr %d pmax = %d, note pcnt = %d"
 msgstr "instr %d pmax = %d, pcnt de note = %d"
 
-#: Engine/insert.c:1314
+#: Engine/insert.c:1366
 #, c-format
 msgid "psave beg at %p\n"
 msgstr "psave début à %p\n"
 
-#: Engine/insert.c:1322
+#: Engine/insert.c:1374
 #, c-format
 msgid "   ending at %p\n"
 msgstr "   fin à %p\n"
 
-#: Engine/insert.c:1466
+#: Engine/insert.c:1518
 msgid "subinstr: not initialised"
 msgstr "subinstr : non initialisé"
 
-#: Engine/insert.c:1723
+#: Engine/insert.c:1855
 #, c-format
 msgid ""
 "instr %d allocated at %p\n"
@@ -1110,29 +1065,29 @@ msgstr ""
 "instr %d alloué à %p\n"
 "\tlclbas %p, opds %p\n"
 
-#: Engine/insert.c:1740
+#: Engine/insert.c:1872
 #, c-format
 msgid "op %d (%s) allocated at %p\n"
 msgstr "op %d (%s) alloué à %p\n"
 
-#: Engine/insert.c:1766
+#: Engine/insert.c:1898
 msgid "null iopadr"
 msgstr "iopadr null"
 
-#: Engine/insert.c:1777
+#: Engine/insert.c:1909
 msgid "null opadr"
 msgstr "opadr null"
 
-#: Engine/insert.c:1834
+#: Engine/insert.c:1966
 msgid "inconsistent opds total"
 msgstr "total d'opds non cohérent"
 
-#: Engine/insert.c:1879
+#: Engine/insert.c:2011
 #, c-format
 msgid "Instrument %s is still active"
 msgstr "L'instrument %s est toujours actif"
 
-#: Engine/insert.c:1882
+#: Engine/insert.c:2014
 #, c-format
 msgid "Instrument %d is still active"
 msgstr "L'instrument %d est toujours actif"
@@ -1166,7 +1121,7 @@ msgstr "opcode %c inconnu"
 msgid "multiple string p-fields"
 msgstr "plusieurs p-champs chaînes de caractères"
 
-#: Engine/linevent.c:273 Engine/rdorch.c:1157
+#: Engine/linevent.c:273 Engine/rdorch.c:1184
 msgid "unmatched quotes"
 msgstr "guillemets non appariés"
 
@@ -1230,27 +1185,27 @@ msgstr "event_i: erreur en créant l'évènement '%c'"
 msgid "memory allocate failure for %lu"
 msgstr "échec de l'allocation de mémoire pour %lu"
 
-#: Engine/memfiles.c:112
+#: Engine/memfiles.c:113
 #, c-format
 msgid "cannot load %s\n"
 msgstr "impossible de charger %s\n"
 
-#: Engine/memfiles.c:118
+#: Engine/memfiles.c:119
 #, c-format
 msgid "cannot load %s, or SADIR undefined\n"
 msgstr "impossible de charger %s, ou SADIR n'est pas défini\n"
 
-#: Engine/memfiles.c:130
+#: Engine/memfiles.c:131
 #, c-format
 msgid "error processing file %s\n"
 msgstr "erreur en traitant le fichier %s\n"
 
-#: Engine/memfiles.c:136 Engine/memfiles.c:319
+#: Engine/memfiles.c:137 Engine/memfiles.c:320
 #, c-format
 msgid "file %s (%ld bytes) loaded into memory\n"
 msgstr "le fichier %s (%ld octets) a été chargé en mémoire\n"
 
-#: Engine/memfiles.c:199
+#: Engine/memfiles.c:200
 msgid ""
 "PVOCEX_LoadFile(): error:\n"
 "    "
@@ -1258,57 +1213,57 @@ msgstr ""
 "PVOCEX_LoadFile() : erreur :\n"
 "    "
 
-#: Engine/memfiles.c:216
+#: Engine/memfiles.c:217
 msgid "Empty or NULL file name"
 msgstr "Nom de fichier vide ou NULL"
 
-#: Engine/memfiles.c:234
+#: Engine/memfiles.c:235
 #, c-format
 msgid "unable to open pvocex file %s: %s"
 msgstr "impossible d'ouvrir le fichier pvocex %s : %s"
 
-#: Engine/memfiles.c:240
+#: Engine/memfiles.c:241
 #, c-format
 msgid "pvoc-ex file %s is not 32bit floats"
 msgstr "le fichier pvoc-ex %s n'est pas au format floats sur 32 bit"
 
-#: Engine/memfiles.c:246
+#: Engine/memfiles.c:247
 #, c-format
 msgid "pvoc-ex file %s not in AMP_FREQ format"
 msgstr "le fichier pvoc-ex %s n'est pas au format AMP_FREQ"
 
-#: Engine/memfiles.c:252
+#: Engine/memfiles.c:253
 #, c-format
 msgid "pvoc-ex file %s is empty!"
 msgstr "le fichier pvoc-ex %s est vide !"
 
-#: Engine/memfiles.c:282
+#: Engine/memfiles.c:283
 #, c-format
 msgid "error reading pvoc-ex file %s"
 msgstr "erreur de lecture sur le fichier pvoc-ex %s"
 
-#: Engine/memfiles.c:286
+#: Engine/memfiles.c:287
 #, c-format
 msgid "error reading pvoc-ex file %s after %d frames"
 msgstr "erreur de lecture sur le fichier pvoc-ex %s après %d trames"
 
-#: Engine/memfiles.c:291 Opcodes/pvinterp.c:71 Opcodes/pvinterp.c:174
-#: Opcodes/pvinterp.c:346 Opcodes/ugens9.c:97 Opcodes/vpvoc.c:201
+#: Engine/memfiles.c:292 Opcodes/pvinterp.c:71 Opcodes/pvinterp.c:173
+#: Opcodes/pvinterp.c:344 Opcodes/ugens9.c:97 Opcodes/vpvoc.c:202
 #, c-format
 msgid "%s's srate = %8.0f, orch's srate = %8.0f"
 msgstr "srate de %s = %8.0f, srate de l'orchestre = %8.0f"
 
-#: Engine/memfiles.c:389
+#: Engine/memfiles.c:390
 #, c-format
 msgid "csoundLoadSoundFile(): failed to open '%s'"
 msgstr "csoundLoadSoundFile() : l'ouverture de '%s' a échoué"
 
-#: Engine/memfiles.c:444
+#: Engine/memfiles.c:445
 #, c-format
 msgid "csoundLoadSoundFile(): error reading '%s'"
 msgstr "csoundLoadSoundFile() : erreur de lecture sur '%s'"
 
-#: Engine/memfiles.c:450
+#: Engine/memfiles.c:451
 #, c-format
 msgid ""
 "File '%s' (sr = %d Hz, %d channel(s), %lu sample frames) loaded into memory\n"
@@ -1316,96 +1271,91 @@ msgstr ""
 "Le fichier '%s' (sr = %d Hz, %d voix, %lu trames d'échantillons) a été "
 "chargé en mémoire\n"
 
-#: Engine/musmon.c:79
+#: Engine/musmon.c:81
 #, c-format
 msgid "Elapsed time at %s: real: %.3fs, CPU: %.3fs\n"
 msgstr "Temps écoulé à %s : valeur réelle : %.3fs, CPU : %.3fs\n"
 
-#: Engine/musmon.c:106
+#: Engine/musmon.c:108
 msgid "illegal istartempo value"
 msgstr "valeur illégale du tempo de départ"
 
-#: Engine/musmon.c:109
+#: Engine/musmon.c:111
 msgid "Beat mode not in force"
 msgstr "Le mode beat n'est pas en vigueur"
 
-#: Engine/musmon.c:182 Top/main.c:122
+#: Engine/musmon.c:184 Top/main.c:121
 #, c-format
 msgid "Csound version %s beta (double samples) %s\n"
 msgstr "Csound version %s beta (échantillons en format double) %s\n"
 
-#: Engine/musmon.c:185 Top/main.c:125
+#: Engine/musmon.c:187 Top/main.c:124
 #, c-format
 msgid "Csound version %s (double samples) %s\n"
 msgstr "Csound version %s (échantillons en format double) %s\n"
 
-#: Engine/musmon.c:190 Top/main.c:114
+#: Engine/musmon.c:192 Top/main.c:113
 #, c-format
 msgid "Csound version %s beta (float samples) %s\n"
 msgstr "Csound version %s beta (échantillons en format float) %s\n"
 
-#: Engine/musmon.c:193 Top/main.c:117
+#: Engine/musmon.c:195 Top/main.c:116
 #, c-format
 msgid "Csound version %s (float samples) %s\n"
 msgstr "Csound version %s (échantillons en format float) %s\n"
 
-#: Engine/musmon.c:218
+#: Engine/musmon.c:220
 msgid "orch now loaded\n"
 msgstr "l'orchestre est maintenant chargé\n"
 
-#: Engine/musmon.c:243
+#: Engine/musmon.c:245
 msgid "k-period aligned audio buffering\n"
 msgstr "mise en tampon audio alignée sur la période k\n"
 
-#: Engine/musmon.c:259
+#: Engine/musmon.c:261
 #, c-format
 msgid "audio buffered in %d sample-frame blocks\n"
 msgstr "mise en tampon audio par blocs de %d trames d'échantillons\n"
 
-#: Engine/musmon.c:276 Top/main.c:395
-#, c-format
-msgid "cannot reopen %s"
-msgstr "impossible de réouvrir %s"
-
-#: Engine/musmon.c:287
+#: Engine/musmon.c:283
 msgid "using Cscore processing\n"
 msgstr "utilisation du traitement Cscore\n"
 
-#: Engine/musmon.c:290
+#: Engine/musmon.c:286
 msgid "cannot create cscore.out"
 msgstr "impossible de créer cscore.out"
 
-#: Engine/musmon.c:303
+#: Engine/musmon.c:299
 msgid "cannot reopen cscore.out"
 msgstr "impossible de réouvrir cscore.out"
 
-#: Engine/musmon.c:307 Engine/musmon.c:315
+#: Engine/musmon.c:303
 msgid "cannot reopen cscore.srt"
 msgstr "impossible de réouvrir cscore.srt"
 
-#: Engine/musmon.c:309
+#: Engine/musmon.c:305
 msgid "sorting cscore.out ..\n"
 msgstr "tri de cscore.out ..\n"
 
-#: Engine/musmon.c:313 Top/main.c:409
+#: Engine/musmon.c:311 Top/main.c:401
 msgid "\t... done\n"
 msgstr "\t... fait\n"
 
-#: Engine/musmon.c:317
+#: Engine/musmon.c:312
 msgid "playing from cscore.srt\n"
 msgstr "exécution à partir de cscore.srt\n"
 
-#: Engine/musmon.c:321 Engine/musmon.c:453 Engine/musmon.c:1021
-#: Engine/musmon.c:1225
+#: Engine/musmon.c:316 Engine/musmon.c:446 Engine/musmon.c:1015
+#: Engine/musmon.c:1216
 #, c-format
 msgid "SECTION %d:\n"
 msgstr "SECTION %d :\n"
 
-#: Engine/musmon.c:397
+#: Engine/musmon.c:390
 msgid "end of score.\t\t   overall amps:"
 msgstr "fin de la partition.\t\t   amplitudes maximales :"
 
-#: Engine/musmon.c:408
+#: Engine/musmon.c:401
 msgid ""
 "\n"
 "\t   overall samples out of range:"
@@ -1413,7 +1363,7 @@ msgstr ""
 "\n"
 "\t   Nombre d'échantillons hors limites :"
 
-#: Engine/musmon.c:412
+#: Engine/musmon.c:405
 #, c-format
 msgid ""
 "\n"
@@ -1422,113 +1372,113 @@ msgstr ""
 "\n"
 "%d erreurs dans l'exécution\n"
 
-#: Engine/musmon.c:414
+#: Engine/musmon.c:407
 msgid "end of performance"
 msgstr "fin de l'exécution"
 
-#: Engine/musmon.c:428
+#: Engine/musmon.c:421
 msgid "no sound written to disk\n"
 msgstr "aucun son n'a été écrit sur le disque\n"
 
-#: Engine/musmon.c:443
+#: Engine/musmon.c:436
 #, c-format
 msgid "%c\tbeep!\n"
 msgstr "%c\tsignal sonore !\n"
 
-#: Engine/musmon.c:509 Engine/musmon.c:555
+#: Engine/musmon.c:502 Engine/musmon.c:548
 msgid "\t number of samples out of range:"
 msgstr "\t nombre d'échantillons hors limites :"
 
-#: Engine/musmon.c:548
+#: Engine/musmon.c:541
 #, c-format
 msgid "end of section %d\t sect peak amps:"
 msgstr "fin de la section %d\tamplitudes maximales de la section :"
 
-#: Engine/musmon.c:550
+#: Engine/musmon.c:543
 msgid "end of lplay event list\t      peak amps:"
 msgstr "fin de la liste d'évènements lplay\t      amplitudes maximales :"
 
-#: Engine/musmon.c:614 Engine/musmon.c:639
+#: Engine/musmon.c:607 Engine/musmon.c:632
 #, c-format
 msgid " - note deleted. instr %s undefined"
 msgstr " - note effacée. instr %s non défini"
 
-#: Engine/musmon.c:618
+#: Engine/musmon.c:611
 #, c-format
 msgid "Setting instrument %s %s\n"
 msgstr "Lancement de l'instrument  %s %s\n"
 
-#: Engine/musmon.c:619 Engine/musmon.c:632
+#: Engine/musmon.c:612 Engine/musmon.c:625
 #: Opcodes/fluidOpcodes/fluidOpcodes.c:207
 #: Opcodes/fluidOpcodes/fluidOpcodes.c:208
 msgid "off"
 msgstr "arrêt"
 
-#: Engine/musmon.c:619 Engine/musmon.c:632
+#: Engine/musmon.c:612 Engine/musmon.c:625
 #: Opcodes/fluidOpcodes/fluidOpcodes.c:207
 #: Opcodes/fluidOpcodes/fluidOpcodes.c:208
 msgid "on"
 msgstr "marche"
 
-#: Engine/musmon.c:627 Engine/musmon.c:666
+#: Engine/musmon.c:620 Engine/musmon.c:659
 #, c-format
 msgid " - note deleted. instr %d(%d) undefined"
 msgstr " - note effacée. instr %d(%d) non défini"
 
-#: Engine/musmon.c:631
+#: Engine/musmon.c:624
 #, c-format
 msgid "Setting instrument %d %s\n"
 msgstr "Lancement de l'instrument %d %s\n"
 
-#: Engine/musmon.c:657
+#: Engine/musmon.c:650
 #, c-format
 msgid " - note deleted.  i%d (%s) had %d init errors"
 msgstr " - note effacée.  i%d (%s) a eu %d erreurs d'initialisation"
 
-#: Engine/musmon.c:687
+#: Engine/musmon.c:680
 #, c-format
 msgid " - note deleted.  i%d had %d init errors"
 msgstr " - note effacée.  i%d a eu %d erreurs d'initialisation"
 
-#: Engine/musmon.c:708
+#: Engine/musmon.c:701
 #, c-format
 msgid "time advanced %5.3f beats by score request\n"
 msgstr "le temps a avancé de %5.3f pulsations à la demande de la partition\n"
 
-#: Engine/musmon.c:725
+#: Engine/musmon.c:719
 #, c-format
 msgid "\t\t   T%7.3f - note deleted. "
 msgstr "\t\t   T%7.3f - note effacée. "
 
-#: Engine/musmon.c:729
+#: Engine/musmon.c:723
 #, c-format
 msgid "instr %s had %d init errors\n"
 msgstr "l'instr %s a eu %d erreurs d'initialisation\n"
 
-#: Engine/musmon.c:731
+#: Engine/musmon.c:725
 #, c-format
 msgid "instr %d had %d init errors\n"
 msgstr "l'instr %d a eu %d erreurs d'initialisation\n"
 
-#: Engine/musmon.c:822
+#: Engine/musmon.c:816
 msgid "terminating.\n"
 msgstr "terminaison.\n"
 
-#: Engine/musmon.c:908
+#: Engine/musmon.c:902
 #, c-format
 msgid "error in score.  illegal opcode %c (ASCII %d)\n"
 msgstr "erreur dans la partition.  L'opcode %c (ASCII %d) est illégal\n"
 
-#: Engine/musmon.c:1135
+#: Engine/musmon.c:1129
 msgid "insert_score_event(): invalid instrument number or name\n"
 msgstr "insert_score_event() : numéro ou nom d'instrument non valide\n"
 
-#: Engine/musmon.c:1155
+#: Engine/musmon.c:1149
 #, c-format
 msgid "insert_score_event(): unknown opcode: %c\n"
 msgstr "insert_score_event() : opcode inconnu : %c\n"
 
-#: Engine/musmon.c:1178
+#: Engine/musmon.c:1172
 msgid "insert_score_event(): insufficient p-fields\n"
 msgstr "insert_score_event() : pas assez de p-champs\n"
 
@@ -1551,28 +1501,47 @@ msgstr "Impossible de trouver l'instrument %d"
 msgid "cannot find the specified instrument or opcode"
 msgstr "impossible de trouver l'instrument ou l'opcode spécifié"
 
-#: Engine/new_orc_parser.c:74 Engine/rdorch.c:488
+#: Engine/new_orc_parser.c:91
+msgid "Unmatched #ifdef\n"
+msgstr "#ifdef non apparié\n"
+
+#: Engine/otran.c:149 Engine/symbtab.c:413
 #, c-format
-msgid "cannot open orch file %s"
-msgstr "impossible d'ouvrir le fichier d'orchestre %s"
+msgid "invalid input type for opcode %s"
+msgstr "type d'entrée non valide pour l'opcode %s"
+
+#: Engine/otran.c:154 Engine/symbtab.c:418
+#, c-format
+msgid "too many input args for opcode %s"
+msgstr "trop d'arguments en entrée pour l'opcode %s"
 
-#: Engine/otran.c:312 Engine/otran.c:319
+#: Engine/otran.c:169 Engine/symbtab.c:433
+#, c-format
+msgid "too many output args for opcode %s"
+msgstr "trop d'arguments en sortie pour l'opcode %s"
+
+#: Engine/otran.c:194 Engine/symbtab.c:458
+#, c-format
+msgid "invalid output type for opcode %s"
+msgstr "type de sortie non valide pour l'opcode %s"
+
+#: Engine/otran.c:325 Engine/otran.c:332
 msgid "missing instrument number or name"
 msgstr "il manque un numéro ou un nom d'instrument"
 
-#: Engine/otran.c:324
+#: Engine/otran.c:337
 msgid "illegal instr number"
 msgstr "numéro d'instrument illégal"
 
-#: Engine/otran.c:374
+#: Engine/otran.c:388
 msgid "No opcode name"
 msgstr "Aucun nom d'opcode"
 
-#: Engine/otran.c:379 Engine/symbtab.c:501
+#: Engine/otran.c:393 Engine/symbtab.c:538
 msgid "invalid name for opcode"
 msgstr "nom d'opcode non valide"
 
-#: Engine/otran.c:383
+#: Engine/otran.c:397
 #, c-format
 msgid ""
 "opcode declaration error (usage: opcode name, outtypes, intypes) -- opcode %s"
@@ -1580,56 +1549,56 @@ msgstr ""
 "erreur de déclaration d'opcode (utilisation : nom d'opcode, types en sortie, "
 "types en entrée) -- opcode %s"
 
-#: Engine/otran.c:394 Engine/symbtab.c:511
+#: Engine/otran.c:408 Engine/symbtab.c:548
 #, c-format
 msgid "cannot redefine %s"
 msgstr "impossible de redéfinir %s"
 
-#: Engine/otran.c:398 Engine/symbtab.c:516
+#: Engine/otran.c:412 Engine/symbtab.c:553
 #, c-format
 msgid "WARNING: redefined opcode: %s\n"
 msgstr "AVERTISSEMENT : opcode redéfini : %s\n"
 
-#: Engine/otran.c:489
+#: Engine/otran.c:503
 msgid "string constant used as output"
 msgstr "constante chaîne de caractères utilisée comme sortie"
 
-#: Engine/otran.c:520
+#: Engine/otran.c:534
 msgid "Missing endin"
 msgstr "Il manque endin"
 
-#: Engine/otran.c:584
+#: Engine/otran.c:599
 msgid "perf-pass statements illegal in header blk"
 msgstr "les instructions d'exécution sont interdites dans le bloc d'en-tête"
 
-#: Engine/otran.c:588
+#: Engine/otran.c:603
 #, c-format
 msgid "%d syntax errors in orchestra.  compilation invalid"
 msgstr "%d erreurs de syntaxe dans l'orchestre.  Compilation non valide"
 
-#: Engine/otran.c:1238
+#: Engine/otran.c:1257
 msgid "bad value for 0dbfs: must be positive."
 msgstr "mauvaise valeur pour 0dbfs : elle doit être positive"
 
-#: Engine/otran.c:1248
+#: Engine/otran.c:1267
 #, c-format
 msgid "sample rate overrides: esr = %7.4f, ekr = %7.4f, ksmps = %d\n"
 msgstr ""
 "redéfinition des taux d'échantillonnage : esr = %7.4f, ekr = %7.4f, ksmps = "
 "%d\n"
 
-#: Engine/otran.c:1320
+#: Engine/otran.c:1339
 msgid "internal error: string constant outarg"
 msgstr ""
 "erreur interne : constante chaîne de caractères utilisée comme argument en "
 "sortie"
 
-#: Engine/otran.c:1346
+#: Engine/otran.c:1365
 #, c-format
 msgid "i%d pset args != pmax"
 msgstr "i%d pset args != pmax"
 
-#: Engine/otran.c:1409
+#: Engine/otran.c:1428
 #, c-format
 msgid ""
 "sr = %.7g, kr = %.7g, ksmps = %.7g\n"
@@ -1638,273 +1607,308 @@ msgstr ""
 "sr = %.7g, kr = %.7g, ksmps = %.7g\n"
 "Erreur :"
 
-#: Engine/otran.c:1442
+#: Engine/otran.c:1461
 msgid "header init errors"
 msgstr "Erreurs dans l'initialisation de l'en-tête"
 
-#: Engine/rdorch.c:166
+#: Engine/rdorch.c:169
 msgid "ungetorchar(): buffer overflow"
 msgstr "ungetorchar(): dépassement de tampon"
 
-#: Engine/rdorch.c:330
+#: Engine/rdorch.c:348
 msgid "Unexpected end of orchestra file"
 msgstr "Fin inattendue du fichier de l'orchestre"
 
-#: Engine/rdorch.c:484
+#: Engine/rdorch.c:431 Engine/sread.c:758
+#, c-format
+msgid "Macro definition for %*s\n"
+msgstr "Définition de macro pour %*s\n"
+
+#: Engine/rdorch.c:434
+msgid "Invalid macro name for --omacro"
+msgstr "Nom de macro non valide pour --omacro"
+
+#: Engine/rdorch.c:502
 msgid "orch compiler:\n"
 msgstr "compilateur de l'orchestre :\n"
 
-#: Engine/rdorch.c:490
-#, c-format
-msgid "cannot find end of file %s"
-msgstr "impossible de trouver la fin du fichier %s"
-
-#: Engine/rdorch.c:492
+#: Engine/rdorch.c:520
 #, c-format
-msgid "ftell error on %s"
-msgstr "erreur ftell sur %s"
+msgid "cannot open orch file %s"
+msgstr "impossible d'ouvrir le fichier d'orchestre %s"
 
-#: Engine/rdorch.c:657 Engine/sread.c:1572
+#: Engine/rdorch.c:684 Engine/sread.c:1584
 #, c-format
 msgid "Macro definition for %s\n"
 msgstr "Définition de macro pour %s\n"
 
-#: Engine/rdorch.c:748
+#: Engine/rdorch.c:716 Engine/sread.c:1607
+msgid "macro error\n"
+msgstr "erreur de macro\n"
+
+#: Engine/rdorch.c:775
 #, c-format
 msgid "Cannot open #include'd file %s\n"
 msgstr "Impossible d'ouvrir le fichier inclus (#include) %s\n"
 
-#: Engine/rdorch.c:797
+#: Engine/rdorch.c:824
 msgid "unmatched #ifdef"
 msgstr "#ifdef non apparié"
 
-#: Engine/rdorch.c:808
+#: Engine/rdorch.c:835
 msgid "Unmatched #else"
 msgstr "#else non apparié"
 
-#: Engine/rdorch.c:822
+#: Engine/rdorch.c:849
 msgid "Unmatched #endif"
 msgstr "#endif non apparié"
 
-#: Engine/rdorch.c:875
+#: Engine/rdorch.c:872 Engine/sread.c:1694
+#, c-format
+msgid "macro %s undefined\n"
+msgstr "la macro %s n'est pas définie\n"
+
+#: Engine/rdorch.c:886 Engine/sread.c:286
+msgid "Undefining undefined macro"
+msgstr "Libération de la macro non définie"
+
+#: Engine/rdorch.c:902
 msgid "Unexpected # character"
 msgstr "Caractère # non attendu"
 
-#: Engine/rdorch.c:877
+#: Engine/rdorch.c:904
 #, c-format
 msgid "Unknown # option: '%s'"
 msgstr "Option # inconnue : '%s'"
 
-#: Engine/rdorch.c:903 Engine/sread.c:394
+#: Engine/rdorch.c:928 Engine/sread.c:380
+#, c-format
+msgid "Undefined macro: '%s'"
+msgstr "Macro non définie : '%s'"
+
+#: Engine/rdorch.c:930 Engine/sread.c:378
 msgid "Macro expansion symbol ($) without macro name"
 msgstr "Symbole de déroulement de macro ($) sans nom de macro"
 
-#: Engine/rdorch.c:908 Engine/sread.c:400
+#: Engine/rdorch.c:935 Engine/sread.c:384
 #, c-format
 msgid "$%s matches macro name $%s"
 msgstr "$%s correspond au nom de macro $%s"
 
-#: Engine/rdorch.c:925 Engine/sread.c:417
+#: Engine/rdorch.c:952 Engine/sread.c:401
 msgid "Syntax error in macro call"
 msgstr "Erreur de syntaxe dans l'appel de macro"
 
-#: Engine/rdorch.c:975
+#: Engine/rdorch.c:967
+#, c-format
+msgid ""
+"Missing argument terminator\n"
+"%.98s"
+msgstr ""
+"Le terminateur d'argument est manquant\n"
+"%.98s"
+
+#: Engine/rdorch.c:1002
 msgid "Unmatched #ifdef"
 msgstr "#ifdef non apparié"
 
-#: Engine/rdorch.c:977
+#: Engine/rdorch.c:1004
 msgid "file too large for ortext space"
 msgstr "Fichier trop grand pour l'espace ortext"
 
-#: Engine/rdorch.c:984
+#: Engine/rdorch.c:1011
 #, c-format
 msgid "%d (%d) lines read\n"
 msgstr "%d (%d) lignes lues\n"
 
-#: Engine/rdorch.c:1052
+#: Engine/rdorch.c:1079
 #, c-format
 msgid "LINE %d:"
 msgstr "LIGNE %d :"
 
-#: Engine/rdorch.c:1071
+#: Engine/rdorch.c:1098
 msgid "invalid 'elseif' statement.  must have a corresponding 'if'"
 msgstr "instruction 'elseif' non valide.  Doit correspondre à un 'if'"
 
-#: Engine/rdorch.c:1078
+#: Engine/rdorch.c:1105
 msgid "'elseif' statement cannot occur after an 'else'"
 msgstr "une instruction 'elseif' ne peut pas survenir après un 'else'"
 
-#: Engine/rdorch.c:1134
+#: Engine/rdorch.c:1161
 msgid "Unmatched comment"
 msgstr "Commentaire non apparié"
 
-#: Engine/rdorch.c:1198
+#: Engine/rdorch.c:1225
 msgid "misplaced comma"
 msgstr "virgule mal placée"
 
-#: Engine/rdorch.c:1200 Engine/rdorch.c:1342 Engine/rdorch.c:1440
+#: Engine/rdorch.c:1227 Engine/rdorch.c:1369 Engine/rdorch.c:1467
 msgid "unbalanced parens"
 msgstr "parenthèse non balancée"
 
-#: Engine/rdorch.c:1364
+#: Engine/rdorch.c:1391
 #, c-format
 msgid "illegal character %c"
 msgstr "caractère illégal %c"
 
-#: Engine/rdorch.c:1377
+#: Engine/rdorch.c:1404
 msgid "invalid 'else' statement.  must have a corresponding 'if'"
 msgstr "instruction 'else' non valide.  Doit correspondre à un 'if'"
 
-#: Engine/rdorch.c:1384
+#: Engine/rdorch.c:1411
 msgid "duplicate 'else' statement"
 msgstr "instruction 'else' dupliquée"
 
-#: Engine/rdorch.c:1413
+#: Engine/rdorch.c:1440
 msgid "invalid 'endif' statement.  must have a corresponding 'if'"
 msgstr "instruction 'endif' non valide.  Doit correspondre à un 'if'"
 
-#: Engine/rdorch.c:1442
+#: Engine/rdorch.c:1469
 msgid "no legal opcode"
 msgstr "pas d'opcode légal"
 
-#: Engine/rdorch.c:1573
+#: Engine/rdorch.c:1600
 msgid "illegal opcod from expr anal"
 msgstr "opcode illégal dans l'expression analysée"
 
-#: Engine/rdorch.c:1606 Engine/rdorch.c:1628
+#: Engine/rdorch.c:1633 Engine/rdorch.c:1655
 #, c-format
 msgid "failed to find %s, output arg '%s' illegal type"
 msgstr "impossible de trouver %s, l'argument de sortie %s est de type illégal"
 
-#: Engine/rdorch.c:1670
+#: Engine/rdorch.c:1697
 #, c-format
 msgid "failed to find %s, input arg illegal type"
 msgstr "impossible de trouver %s, l'argument d'entrée est de type illégal"
 
-#: Engine/rdorch.c:1684
+#: Engine/rdorch.c:1711
 msgid "setksmps is allowed only in user defined opcodes"
 msgstr "setksmps n'est autorisé que dans les opcodes définis par l'utilisateur"
 
-#: Engine/rdorch.c:1687
+#: Engine/rdorch.c:1714
 msgid "multiple uses of setksmps in the same opcode definition"
 msgstr "utilisations multiples de setksmps dans la même définition d'opcode"
 
-#: Engine/rdorch.c:1710
+#: Engine/rdorch.c:1739
 #, c-format
 msgid "%s inconsistent with global nchnls (%d); replaced with %s\n"
 msgstr "%s en contradiction avec le nchnls global (%d) ; remplacé par %s\n"
 
-#: Engine/rdorch.c:1740
+#: Engine/rdorch.c:1770
 msgid "opcode blks cannot be nested (missing 'endop'?)"
 msgstr "les blocs d'opcode ne peuvent pas être imbriqués ('endop' manquant ?)"
 
-#: Engine/rdorch.c:1742
+#: Engine/rdorch.c:1772
 msgid "opcode not allowed in instr block"
 msgstr "opcode interdit dans un bloc d'instr"
 
-#: Engine/rdorch.c:1751
+#: Engine/rdorch.c:1781
 msgid "unmatched endop"
 msgstr "endop non apparié"
 
-#: Engine/rdorch.c:1753
+#: Engine/rdorch.c:1783
 msgid "endop not allowed in instr block"
 msgstr "endop interdit dans un bloc d'instr"
 
-#: Engine/rdorch.c:1758
+#: Engine/rdorch.c:1788
 msgid "instr not allowed in opcode block"
 msgstr "instr interdit dans un bloc d'opcode"
 
-#: Engine/rdorch.c:1761
+#: Engine/rdorch.c:1791
 msgid "instr blocks cannot be nested (missing 'endin'?)"
 msgstr "les blocs d'instr ne peuvent pas être imbriqués ('endin' manquant ?)"
 
-#: Engine/rdorch.c:1769
+#: Engine/rdorch.c:1799
 msgid "endin not allowed in opcode blk"
 msgstr "endin interdit dans un bloc d'opcode"
 
-#: Engine/rdorch.c:1771
+#: Engine/rdorch.c:1801
 msgid "unmatched endin"
 msgstr "endin non apparié"
 
-#: Engine/rdorch.c:1781
+#: Engine/rdorch.c:1811
 msgid "misplaced opcode"
 msgstr "opcode mal placé"
 
-#: Engine/rdorch.c:1787
+#: Engine/rdorch.c:1817
 msgid "xout is allowed only in user defined opcodes"
 msgstr "xout n'est autorisé que dans les opcodes définis par l'utilisateur"
 
-#: Engine/rdorch.c:1790
+#: Engine/rdorch.c:1820
 msgid "multiple uses of xout in the same opcode definition"
 msgstr "utilisations multiples de xout dans la même définition d'opcode"
 
-#: Engine/rdorch.c:1837
+#: Engine/rdorch.c:1867
 msgid "too many input args"
 msgstr "trop d'arguments en entrée"
 
-#: Engine/rdorch.c:1909
+#: Engine/rdorch.c:1893
+msgid "insufficient required arguments"
+msgstr "arguments requis manquants"
+
+#: Engine/rdorch.c:1940
 #, c-format
-msgid "input arg '%s' used before defined"
-msgstr "l'argument en entrée '%s' a été utilisé avant d'être défini"
+msgid "input arg '%s' used before defined \n"
+msgstr "l'argument en entrée '%s' a été utilisé avant d'être défini\n"
 
-#: Engine/rdorch.c:1956
+#: Engine/rdorch.c:1987
 msgid "xin is allowed only in user defined opcodes"
 msgstr "xin n'est autorisé que dans les opcodes définis par l'utilisateur"
 
-#: Engine/rdorch.c:1959
+#: Engine/rdorch.c:1990
 msgid "multiple uses of xin in the same opcode definition"
 msgstr "utilisations multiples de xin dans la même définition d'opcode"
 
-#: Engine/rdorch.c:2004
+#: Engine/rdorch.c:2035
 msgid "illegal no of output args"
 msgstr "nombre illégal d'arguments en sortie"
 
-#: Engine/rdorch.c:2023
+#: Engine/rdorch.c:2054
 #, c-format
 msgid "output name previously used, type '%c' must be uniquely defined"
 msgstr ""
 "nom de sortie déjà utilisé, le type '%c' doit avoir une définition unique"
 
-#: Engine/rdorch.c:2028
+#: Engine/rdorch.c:2059
 #, c-format
 msgid "output arg '%s' illegal type"
 msgstr "l'argument de sortie '%s' est de type illégal"
 
-#: Engine/rdorch.c:2069
+#: Engine/rdorch.c:2100
 #, c-format
 msgid "input arg '%s' of type %s not allowed when expecting %c"
 msgstr ""
 "l'argument d'entrée '%s' de type %s est interdit lorsque l'on attend %c"
 
-#: Engine/rdorch.c:2155
+#: Engine/rdorch.c:2187
 msgid "duplicate label"
 msgstr "étiquette dupliquée"
 
-#: Engine/rdorch.c:2177
+#: Engine/rdorch.c:2209
 #, c-format
 msgid "error line %d.  unknown label:\n"
 msgstr "erreur ligne %d.  Etiquette inconnue :\n"
 
-#: Engine/rdorch.c:2192 Engine/rdorch.c:2239
+#: Engine/rdorch.c:2222 Engine/rdorch.c:2271
 msgid "error:  "
 msgstr "erreur :  "
 
-#: Engine/rdorch.c:2208
+#: Engine/rdorch.c:2239
 #, c-format
 msgid ", line %d:\n"
 msgstr ", ligne %d :\n"
 
-#: Engine/rdorch.c:2246
+#: Engine/rdorch.c:2278
 #, c-format
 msgid "called from line %d of macro %s"
 msgstr "appelé depuis la ligne %d de la macro %s"
 
-#: Engine/rdorch.c:2250
+#: Engine/rdorch.c:2282
 #, c-format
 msgid "in line %d of file input %s"
 msgstr "dans la ligne %d du fichier d'entrée %s"
 
-#: Engine/rdscor.c:79
+#: Engine/rdscor.c:80
 #, c-format
 msgid "ERROR: illegal character %c(%.2x) in scoreline: "
 msgstr "ERREUR : caractère illégal %c(%.2x) dans la ligne de partition :"
@@ -1917,7 +1921,7 @@ msgstr ""
 "\n"
 "\tle reste de la ligne a été ignoré\n"
 
-#: Engine/rdscor.c:144
+#: Engine/rdscor.c:146
 msgid "ERROR: too many pfields: "
 msgstr "ERREUR : trop de p-champs"
 
@@ -1943,314 +1947,278 @@ msgstr "erreur de partition :  "
 msgid "  section %d:  at position %d%s"
 msgstr "  section %d : position %d%s"
 
-#: Engine/sread.c:217
+#: Engine/sread.c:216
 msgid "Internal error in print_input_backtrace()"
 msgstr "Erreur interne dans print_input_backtrace()"
 
-#: Engine/sread.c:219
+#: Engine/sread.c:218
 #, c-format
 msgid "  included from line %d of macro %s%s"
 msgstr "  inclus depuis la ligne %d de la macro %s%s"
 
-#: Engine/sread.c:220
+#: Engine/sread.c:219
 #, c-format
 msgid "  called from line %d of macro %s%s"
 msgstr "  appelé depuis la ligne %d de la macro %s%s"
 
-#: Engine/sread.c:222
+#: Engine/sread.c:221
 #, c-format
 msgid "  in line %d of macro %s%s"
 msgstr "  dans la ligne %d de la macro %s%s"
 
-#: Engine/sread.c:229
-#, c-format
-msgid "  included from line %d of file input %s%s"
-msgstr "  inclus depuis la ligne %d du fichier en entrée %s%s"
-
-#: Engine/sread.c:230
-#, c-format
-msgid "  called from line %d of file input %s%s"
-msgstr "  appelé depuis la ligne %d du fichier en entrée %s%s"
-
-#: Engine/sread.c:232
-#, c-format
-msgid "  in line %d of file input %s%s"
-msgstr "  dans la ligne %d du fichier en entrée %s%s"
-
-#: Engine/sread.c:268
+#: Engine/sread.c:256
 #, c-format
 msgid "Internal error op=%c"
 msgstr "Erreur interne op=%c"
 
-#: Engine/sread.c:322
-msgid "ungetscochar(): buffer overflow"
-msgstr "ungetscochar(): dépassement de tampon"
-
-#: Engine/sread.c:479
+#: Engine/sread.c:464
 msgid "illegal placement of number in [] expression"
 msgstr "placement illégal d'un nombre dans l'expression []"
 
-#: Engine/sread.c:506
+#: Engine/sread.c:491
 msgid "illegal placement of operator ~ in [] expression"
 msgstr "placement illégal de l'opérateur ~ dans l'expression []"
 
-#: Engine/sread.c:516
+#: Engine/sread.c:501
 msgid "illegal placement of operator @ or @@ in [] expression"
 msgstr "placement illégal des opérateurs @ ou @@ dans l'expression []"
 
-#: Engine/sread.c:548 Engine/sread.c:562
+#: Engine/sread.c:533 Engine/sread.c:547
 #, c-format
 msgid "illegal placement of operator %c in [] expression"
 msgstr "placement illégal de l'opérateur %c dans l'expression []"
 
-#: Engine/sread.c:574
+#: Engine/sread.c:559
 msgid "illegal placement of '(' in [] expression"
 msgstr "placement illégal de '(' dans l'expression []"
 
-#: Engine/sread.c:580
+#: Engine/sread.c:565
 msgid "missing operand before ')' in [] expression"
 msgstr "il manque un opérande avant ')' dans l'expression []"
 
-#: Engine/sread.c:594
+#: Engine/sread.c:579
 msgid "missing operand before closing bracket in []"
 msgstr "il manque un opérande avant le crochet fermant dans []"
 
-#: Engine/sread.c:609
+#: Engine/sread.c:594
 #, c-format
 msgid "illegal character %c(%.2x) in [] expression"
 msgstr "caractère %c(%.2x) illégal dans l'expression []"
 
-#: Engine/sread.c:658
+#: Engine/sread.c:646
 #, c-format
 msgid "%s Nested LOOP terminated, level:%d\n"
 msgstr "%s BOUCLE imbriquée terminée, niveau : %d\n"
 
-#: Engine/sread.c:664
+#: Engine/sread.c:652
 #, c-format
 msgid "External LOOP terminated, level:%d\n"
 msgstr "BOUCLE externe terminée, niveau : %d\n"
 
-#: Engine/sread.c:684
+#: Engine/sread.c:696
 #, c-format
 msgid "%s  Nested LOOP section (%d) Level:%d\n"
 msgstr "%s BOUCLE imbriquée section (%d) Niveau : %d\n"
 
-#: Engine/sread.c:689
+#: Engine/sread.c:701
 #, c-format
 msgid " External LOOP section (%d) Level:%d\n"
 msgstr " BOUCLE externe section (%d) Niveau : %d\n"
 
-#: Engine/sread.c:703
+#: Engine/sread.c:715
 msgid "Loop terminated\n"
 msgstr "Boucle terminée\n"
 
-#: Engine/sread.c:716
+#: Engine/sread.c:733
 #, c-format
 msgid "Repeat section (%d)\n"
 msgstr "Section répétée (%d)\n"
 
-#: Engine/sread.c:719
+#: Engine/sread.c:736
 msgid "Repeat section\n"
 msgstr "Section répétée\n"
 
-#: Engine/sread.c:744
+#: Engine/sread.c:761
 msgid "Invalid macro name for --smacro"
 msgstr "Nom de macro non valide pour --smacro"
 
-#: Engine/sread.c:831
+#: Engine/sread.c:865
 #, c-format
 msgid "Clockbase = %f\n"
 msgstr "Base de l'horloge = %f\n"
 
-#: Engine/sread.c:898
+#: Engine/sread.c:934
 msgid "Loops are nested too deeply"
 msgstr "Imbrication des boucles trop profonde"
 
-#: Engine/sread.c:901
-msgid "Loop cannot start inside of a macro"
-msgstr "Une boucle ne peut pas commencer à l'intérieure d'une macro"
-
-#: Engine/sread.c:920
+#: Engine/sread.c:948
 msgid "{: invalid repeat count"
 msgstr "{: nombre de répétitions non valide"
 
-#: Engine/sread.c:929
+#: Engine/sread.c:957
 #, c-format
 msgid "%s Nested LOOP=%d Level:%d\n"
 msgstr "%s BOUCLE imbriquée=%d, Niveau : %d\n"
 
-#: Engine/sread.c:935
+#: Engine/sread.c:963
 #, c-format
 msgid "External LOOP=%d Level:%d\n"
 msgstr "BOUCLE externe=%d, Niveau : %d\n"
 
-#: Engine/sread.c:1004
-msgid "Repeat cannot start inside of a macro (ignored)"
-msgstr ""
-"Une répétition ne peut pas commencer à l'intérieur d'une macro (ignorée)"
-
-#: Engine/sread.c:1019
+#: Engine/sread.c:1047
 msgid "r: invalid repeat count"
 msgstr "r : nombre de répétitions non valide"
 
-#: Engine/sread.c:1021
+#: Engine/sread.c:1049
 #, c-format
 msgid "Repeats=%d\n"
 msgstr "Répétitions=%d\n"
 
-#: Engine/sread.c:1063
+#: Engine/sread.c:1093
 #, c-format
 msgid "Named section >>>%s<<<\n"
 msgstr "Section nommée >>>%s<<<\n"
 
-#: Engine/sread.c:1079
+#: Engine/sread.c:1108
 #, c-format
 msgid "%d: File %s position %ld\n"
 msgstr "%d : Fichier %s position %ld\n"
 
-#: Engine/sread.c:1085
-#, c-format
-msgid "Ignoring name %s not in file\n"
-msgstr "Nom %s ignoré, pas dans le fichier\n"
-
-#: Engine/sread.c:1110
+#: Engine/sread.c:1133
 #, c-format
 msgid "Name %s not found"
 msgstr "Nom %s non trouvé"
 
-#: Engine/sread.c:1112
+#: Engine/sread.c:1135
 #, c-format
 msgid "Duplicate %d: %s (%s,%ld)\n"
 msgstr "Dupliquer %d : %s (%s,%ld)\n"
 
-#: Engine/sread.c:1129
-#, c-format
-msgid "cannot open input file %s"
-msgstr "impossible d'ouvrir le fichier en entrée %s"
-
-#: Engine/sread.c:1149
+#: Engine/sread.c:1164
 #, c-format
 msgid "Warp_factor = %f\n"
 msgstr "Facteur de déformation = %f\n"
 
-#: Engine/sread.c:1174
+#: Engine/sread.c:1189
 msgid "sread is confused on legal opcodes\n"
 msgstr "sread hésite sur des opcodes légaux\n"
 
-#: Engine/sread.c:1236
+#: Engine/sread.c:1251
 msgid "No previous event for ^"
 msgstr "Pas d'évènement précédent pour ^"
 
-#: Engine/sread.c:1241
+#: Engine/sread.c:1256
 #, c-format
 msgid "illegal space following %s, zero substituted"
 msgstr "espace illégal après %s, remplacé par zéro"
 
-#: Engine/sread.c:1271
+#: Engine/sread.c:1286
 #, c-format
 msgid "ignoring '%s' in '%c' event"
 msgstr "'%s' a été ignoré dans l'évènement '%c'"
 
-#: Engine/sread.c:1274
+#: Engine/sread.c:1289
 msgid "! invalid in p1, p2, or p3"
 msgstr "! non valide dans p1, p2 ou p3"
 
-#: Engine/sread.c:1275 Engine/sread.c:1280 Engine/sread.c:1730
-#: Engine/sread.c:1753 Engine/sread.c:1767
+#: Engine/sread.c:1290 Engine/sread.c:1295 Engine/sread.c:1738
+#: Engine/sread.c:1761 Engine/sread.c:1775
 msgid "      remainder of line flushed\n"
 msgstr "      le reste de la ligne a été ignoré\n"
 
-#: Engine/sread.c:1279
+#: Engine/sread.c:1294
 #, c-format
 msgid "illegal character after !: '%c'"
 msgstr "caractère illégal après !: '%c'"
 
-#: Engine/sread.c:1358
+#: Engine/sread.c:1373
 #, c-format
 msgid "WARNING: instr %s not found, assuming insno = -1\n"
 msgstr "AVERTISSEMENT : instr %s non trouvé, on suppose que insno = -1\n"
 
-#: Engine/sread.c:1378
+#: Engine/sread.c:1393
 msgid "sread: illegal use of carry,   0 substituted\n"
 msgstr "sread : utilisation illégale du report,   remplacé par 0\n"
 
-#: Engine/sread.c:1526
+#: Engine/sread.c:1539
 msgid "Improper \\"
 msgstr "\\ mal employé"
 
-#: Engine/sread.c:1558
+#: Engine/sread.c:1570
 msgid "Not #define"
 msgstr "Pas #define"
 
-#: Engine/sread.c:1620
+#: Engine/sread.c:1630
 #, c-format
 msgid "Macro %s with %d arguments defined\n"
 msgstr "Macro %s avec %d arguments définie\n"
 
-#: Engine/sread.c:1631
+#: Engine/sread.c:1642
 msgid "Not #include"
 msgstr "Pas #include"
 
-#: Engine/sread.c:1662
+#: Engine/sread.c:1671
 #, c-format
 msgid "Cannot open #include'd file %s"
 msgstr "Impossible d'ouvrir le fichier inclus (#include) %s"
 
-#: Engine/sread.c:1673
+#: Engine/sread.c:1681
 msgid "Not #undef"
 msgstr "Pas #undef"
 
-#: Engine/sread.c:1692
+#: Engine/sread.c:1700
 msgid "unknown # option"
 msgstr "option # inconnue"
 
-#: Engine/sread.c:1729
+#: Engine/sread.c:1737
 #, c-format
 msgid "illegal opcode %c"
 msgstr "opcode %c illégal"
 
-#: Engine/sread.c:1752
+#: Engine/sread.c:1760
 #, c-format
 msgid "unexpected char %c"
 msgstr "caractère %c inattendu"
 
-#: Engine/sread.c:1766
+#: Engine/sread.c:1774
 msgid "illegally placed string"
 msgstr "sread : chaîne placée illégalement"
 
-#: Engine/sread.c:1773
+#: Engine/sread.c:1781
 msgid "unmatched quote"
 msgstr "guillemet non apparié"
 
-#: Engine/sread.c:1817
+#: Engine/sread.c:1825
 msgid "sread: illegal number format:  "
 msgstr "sread : format de nombre illégal :"
 
-#: Engine/sread.c:1823
+#: Engine/sread.c:1831
 msgid "   zero substituted.\n"
 msgstr "   remplacé par zéro.\n"
 
-#: Engine/swrite.c:123
+#: Engine/swrite.c:123 Engine/swritestr.c:134
 #, c-format
 msgid "swrite: unexpected opcode, section %d line %d\n"
 msgstr "swrite : opcode inattendu, sect %d ligne %d\n"
 
-#: Engine/swrite.c:209 Engine/swrite.c:249
+#: Engine/swrite.c:209 Engine/swrite.c:249 Engine/swritestr.c:220
+#: Engine/swritestr.c:260
 #, c-format
 msgid "swrite: output, sect%d line%d p%d makes illegal reference to "
 msgstr ""
 "swrite : la sortie, sect %d ligne %d p%d fait illégalement référence à "
 
-#: Engine/swrite.c:216 Engine/swrite.c:255
+#: Engine/swrite.c:216 Engine/swrite.c:255 Engine/swritestr.c:227
+#: Engine/swritestr.c:266
 msgid "   Zero substituted\n"
 msgstr "   Remplacé par zéro\n"
 
-#: Engine/swrite.c:313
+#: Engine/swrite.c:313 Engine/swritestr.c:324
 #, c-format
 msgid "swrite: output, sect%d line%d p%d has illegal ramp symbol\n"
 msgstr "swrite : sortie, sect %d ligne %d p%d a un symbole de rampe illégal\n"
 
-#: Engine/swrite.c:317
+#: Engine/swrite.c:317 Engine/swritestr.c:328
 #, c-format
 msgid ""
 "swrite: output, sect%d line%d p%d ramp has illegal forward or backward ref\n"
@@ -2258,14 +2226,16 @@ msgstr ""
 "swrite : sortie, sect %d ligne %d p%d, la rampe a une réf avant ou arrière "
 "illégale\n"
 
-#: Engine/swrite.c:380 Engine/swrite.c:445
+#: Engine/swrite.c:380 Engine/swrite.c:445 Engine/swritestr.c:391
+#: Engine/swritestr.c:456
 #, c-format
 msgid "swrite: output, sect%d line%d p%d has illegal expramp symbol\n"
 msgstr ""
 "swrite : sortie, sect %d ligne %d p%d a un symbole de rampe exponentielle "
 "illégal\n"
 
-#: Engine/swrite.c:385 Engine/swrite.c:450
+#: Engine/swrite.c:385 Engine/swrite.c:450 Engine/swritestr.c:396
+#: Engine/swritestr.c:461
 #, c-format
 msgid ""
 "swrite: output, sect%d line%d p%d expramp has illegal forward or backward "
@@ -2274,27 +2244,27 @@ msgstr ""
 "swrite : sortie, sect %d ligne %d p%d, la rampe exponentielle a une réf "
 "avant ou arrière illégale\n"
 
-#: Engine/swrite.c:466
+#: Engine/swrite.c:466 Engine/swritestr.c:477
 #, c-format
 msgid "swrite: output, sect%d line%d p%d has illegally terminated string   "
 msgstr ""
 "swrite : sortie, sect %d ligne %d p%d a une chaîne terminée illégalement   "
 
-#: Engine/swrite.c:514
+#: Engine/swrite.c:514 Engine/swritestr.c:529
 #, c-format
 msgid "swrite: output, sect%d line%d p%d has illegal number  "
 msgstr "swrite : sortie, sect %d ligne %d p%d a un numéro illégal  "
 
-#: Engine/swrite.c:521
+#: Engine/swrite.c:521 Engine/swritestr.c:536
 msgid "    String truncated\n"
 msgstr "    Chaîne tronquée\n"
 
-#: Engine/symbtab.c:202
+#: Engine/symbtab.c:208
 #, c-format
 msgid "Type confusion for %s (%d,%d), replacing\n"
 msgstr "Confusion de type pour %s (%d,%d), remplacement\n"
 
-#: Engine/symbtab.c:333
+#: Engine/symbtab.c:345
 #, c-format
 msgid "Unknown word type for %s on line %d\n"
 msgstr "Type de mot inconnu pour %s à la ligne %d\n"
@@ -2315,6 +2285,14 @@ msgstr "twarp : t a un tempo non positif\n"
 msgid "twarp: t segments exceed twarp array\n"
 msgstr "twarp : les segments t dépassent la capacité du tableau twarp\n"
 
+#: InOut/cmidi.c:233
+msgid "CoreMIDI real time MIDI plugin for Csound\n"
+msgstr "Module audio en temps réel CoreMIDI pour Csound\n"
+
+#: InOut/cmidi.c:247
+msgid "rtmidi: CoreMIDI module enabled\n"
+msgstr "rtmidi : module CoreMIDI activé\n"
+
 #: InOut/libsnd.c:486
 msgid "error: no input file name"
 msgstr "erreur : pas de nom de fichier d'entrée"
@@ -2338,46 +2316,61 @@ msgstr "l'entrée audio %s a sr = %d, l'orchestre a sr = %d"
 msgid "audio_in %s has %d chnls, orch %d chnls_i"
 msgstr "l'entrée audio_in %s a %d voix, l'orchestre a %d voix"
 
-#: InOut/libsnd.c:573
+#: InOut/libsnd.c:574
+#, c-format
+msgid "reading %d sample blks of %d-bit floats from %s \n"
+msgstr "lecture de %d blocs d'échantillons de flottants sur %d bit depuis %s\n"
+
+#: InOut/libsnd.c:578
 #, c-format
 msgid "reading %d-byte blks of %s from %s (%s)\n"
-msgstr "lecture de blocs de %2$s de %1$d octets à partir de %3$s (%4$s)\n"
+msgstr "lecture de blocs de %d octets de %s à partir de %s (%s)\n"
 
-#: InOut/libsnd.c:608
+#: InOut/libsnd.c:614
 msgid "Output file type changed to IRCAM for use in pipe\n"
 msgstr ""
 "Type du fichier de sortie changé en IRCAM pour utilisation dans un pipe\n"
 
-#: InOut/libsnd.c:628
+#: InOut/libsnd.c:634
 msgid "Failed to initialise real time audio output"
 msgstr "L'initialisation de la sortie audio en temps réel a échoué"
 
-#: InOut/libsnd.c:669 InOut/libsnd.c:673
+#: InOut/libsnd.c:675 InOut/libsnd.c:679
 #, c-format
 msgid "sfinit: cannot open %s"
 msgstr "sfinit : impossible d'ouvrir %s"
 
-#: InOut/libsnd.c:733 util/srconv.c:485
+#: InOut/libsnd.c:741
+#, c-format
+msgid "writing %d sample blks of %d-bit floats to %s \n"
+msgstr "écriture de %d blocs d'échantillons de flottants sur %d bit vers %s\n"
+
+#: InOut/libsnd.c:744 util/srconv.c:484
 #, c-format
 msgid "writing %d-byte blks of %s to %s"
 msgstr "écriture de blocs de %2$s de %1$d octets vers %3$s"
 
-#: InOut/libsnd.c:740 InOut/libsnd.c:810
+#: InOut/libsnd.c:749 InOut/libsnd.c:824
 msgid " (raw)\n"
 msgstr " (raw)\n"
 
-#: InOut/libsnd.c:803
+#: InOut/libsnd.c:815
 #, c-format
-msgid "%ld %d-byte soundblks of %s written to %s"
-msgstr "%1$ld blocs de %3$s de %2$d octets écrits vers %4$s"
+msgid "%ld %d sample blks of %d-bit floats written to %s\n"
+msgstr "%ld %d blocs d'échantillons de flottants sur %d bit écrits vers %s\n"
 
-#: InOut/libsnd.c:822
+#: InOut/libsnd.c:820
+#, c-format
+msgid "%ld %d sample blks of %s written to %s"
+msgstr "%ld %d blocs d'échantillons de %s écrits vers %s"
+
+#: InOut/libsnd.c:837
 #, c-format
 msgid "soundfile write returned bytecount of %d, not %d"
 msgstr ""
 "l'écriture du fichier son a retourné un compte de %d octets au lieu de %d"
 
-#: InOut/libsnd.c:825
+#: InOut/libsnd.c:840
 msgid ""
 "(disk may be full...\n"
 " closing the file ...)"
@@ -2385,11 +2378,11 @@ msgstr ""
 "(disque peut-être plein...\n"
 " fermeture du fichier ...)"
 
-#: InOut/libsnd.c:828 util/dnoise.c:1192
+#: InOut/libsnd.c:843 util/dnoise.c:1177
 msgid "\t... closed\n"
 msgstr "\t... fermé\n"
 
-#: InOut/libsnd.c:834
+#: InOut/libsnd.c:849
 msgid "not writing to sound disk\n"
 msgstr "pas d'écriture vers un sound disk\n"
 
@@ -2792,20 +2785,20 @@ msgstr "Erreur en fermant le périphérique d'entrée MIDI : %d (%s)"
 msgid "Error closing MIDI out device: %d (%s)"
 msgstr "Erreur en fermant le périphérique de sortie MIDI : %d (%s)"
 
-#: InOut/midisend.c:171
+#: InOut/midisend.c:170
 msgid " *** no callback for opening MIDI output"
 msgstr " *** pas de fonction de rappel pour ouvrir la sortie MIDI"
 
-#: InOut/midisend.c:173
+#: InOut/midisend.c:172
 msgid " *** no callback for writing MIDI data"
 msgstr " *** pas de fonction de rappel pour écrire des données MIDI"
 
-#: InOut/midisend.c:179
+#: InOut/midisend.c:178
 #, c-format
 msgid " *** error opening MIDI out device: %d (%s)"
 msgstr " *** erreur en ouvrant le périphérique de sortie MIDI : %d (%s)"
 
-#: InOut/midisend.c:190
+#: InOut/midisend.c:189
 #, c-format
 msgid " *** error opening MIDI out file '%s'"
 msgstr " *** erreur en ouvrant le fichier de sortie MIDI '%s'"
@@ -3065,7 +3058,7 @@ msgstr "Erreur en ouvrant le fichier '%s' comme destination de la sortie MIDI"
 msgid "Opened MIDI output device file '%s'\n"
 msgstr "Le fichier '%s' est ouvert comme destination de la sortie MIDI\n"
 
-#: InOut/rtalsa.c:1101 InOut/rtcoreaudio.c:64 InOut/rtcoreaudio.c:74
+#: InOut/rtalsa.c:1101 InOut/rtcoreaudio.c:71 InOut/rtcoreaudio.c:81
 msgid "warning... could not create global var\n"
 msgstr "avertissement... impossible de créer une variable globale\n"
 
@@ -3090,7 +3083,25 @@ msgstr "rtmiDi : module ALSA activé\n"
 msgid "rtmidi: devfile module enabled\n"
 msgstr "rtmidi : module devfile activé\n"
 
-#: InOut/rtcoreaudio.c:83
+#: InOut/rtauhal.c:163
+#, c-format
+msgid "selected input device: %s \n"
+msgstr "périphérique d'entrée sélectionné : %s\n"
+
+#: InOut/rtauhal.c:166
+#, c-format
+msgid "selected output device: %s \n"
+msgstr "périphérique de sortie sélectionné : %s\n"
+
+#: InOut/rtauhal.c:524
+msgid "AuHAL module: device closed\n"
+msgstr "Module AuHAL : périphérique fermé\n"
+
+#: InOut/rtauhal.c:541
+msgid "rtaudio: coreaaudio-AuHAL module enabled\n"
+msgstr "rtaudio : module AuHAL activé\n"
+
+#: InOut/rtcoreaudio.c:90
 msgid ""
 "CoreAudio real-time audio module for Csound\n"
 "by Victor Lazzarini\n"
@@ -3098,32 +3109,32 @@ msgstr ""
 "Module audio temps-réel CoreAudio pour Csound\n"
 "par Victor Lazzarini\n"
 
-#: InOut/rtcoreaudio.c:105
+#: InOut/rtcoreaudio.c:112
 msgid "rtaudio: CoreAudio module enabled\n"
 msgstr "rtaudio : module CoreAudio activé\n"
 
-#: InOut/rtcoreaudio.c:254
+#: InOut/rtcoreaudio.c:261
 #, c-format
 msgid "selected device: %u \n"
 msgstr "périphérique sélectionné %u\n"
 
-#: InOut/rtcoreaudio.c:263
+#: InOut/rtcoreaudio.c:270
 #, c-format
 msgid "CoreAudio module: opening %s \n"
 msgstr "module CoreAudio : erreur en ouvrant %s\n"
 
-#: InOut/rtcoreaudio.c:297
+#: InOut/rtcoreaudio.c:304
 msgid " *** CoreAudio: open: could not set buffer size\n"
 msgstr " *** CoreAudio : open : impossible de fixer la taille du tampon\n"
 
-#: InOut/rtcoreaudio.c:342
+#: InOut/rtcoreaudio.c:349
 #, c-format
 msgid " *** CoreAudio: open: could not set device parameter sr: %d \n"
 msgstr ""
 " *** CoreAudio : open : impossible de fixer le paramètre de périphérique "
 "sr : %d\n"
 
-#: InOut/rtcoreaudio.c:344
+#: InOut/rtcoreaudio.c:351
 #, c-format
 msgid ""
 " *** CoreAudio: current device sampling rate is:%d \n"
@@ -3132,17 +3143,17 @@ msgstr ""
 " *** CoreAudio : le taux d'échantillonnage du périphérique actuel est : %d\n"
 "     essayez de mettre la valeur ci-dessus dans votre orchestre csound\n"
 
-#: InOut/rtcoreaudio.c:353
+#: InOut/rtcoreaudio.c:360
 #, c-format
 msgid "CoreAudio module: sr set to %d with %d audio channels \n"
 msgstr "Module CoreAudio : sr réglé à %d avec %d canaux audio\n"
 
-#: InOut/rtcoreaudio.c:374 InOut/rtcoreaudio.c:387 InOut/rtcoreaudio.c:432
-#: InOut/rtcoreaudio.c:452
+#: InOut/rtcoreaudio.c:381 InOut/rtcoreaudio.c:394 InOut/rtcoreaudio.c:439
+#: InOut/rtcoreaudio.c:459
 msgid " *** CoreAudio: open: memory allocation failure\n"
 msgstr " *** CoreAudio : ouvert : échec de l'allocation mémoire\n"
 
-#: InOut/rtcoreaudio.c:414
+#: InOut/rtcoreaudio.c:421
 #, c-format
 msgid ""
 "CoreAudio module: device open with %d buffers of %d frames\n"
@@ -3151,11 +3162,11 @@ msgstr ""
 "Module CoreAudio : périphérique ouvert avec %d tampons de %d trames\n"
 "===================================================================\n"
 
-#: InOut/rtcoreaudio.c:552
+#: InOut/rtcoreaudio.c:559
 msgid "coreaudio module: closing device...\n"
 msgstr "Module CoreAudio : fermeture du périphérique...\n"
 
-#: InOut/rtcoreaudio.c:566
+#: InOut/rtcoreaudio.c:573
 msgid "coreaudio module: device closed\n"
 msgstr "Module CoreAudio : périphérique fermé\n"
 
@@ -3559,319 +3570,12 @@ msgstr "impossible d'allouer la structure globale"
 msgid "rtaudio: WinMM module enabled\n"
 msgstr "rtaudio : module WinMM activé\n"
 
-#: InOut/virtual_keyboard/virtual_keyboard.cpp:435
-msgid "virtual_keyboard.cpp: error allocating FLTK flags"
-msgstr "virtual_keyboard.cpp : erreur lors de l'allocation des options FLTK"
-
-#: InOut/virtual_keyboard/virtual_keyboard.cpp:443 InOut/winFLTK.c:125
-#: InOut/winFLTK.c:139
-#, c-format
-msgid "Error registering opcode '%s'"
-msgstr "Erreur en enregistrant l'opcode '%s'"
-
-#: InOut/widgets.cpp:1081
-msgid ""
-"Invalid snapshot. Perhaps you modified orchestra widget code after you saved "
-"the snapshot bank."
-msgstr ""
-"Instantané non valide. Peut-être avez-vous modifié le code d'un widget de "
-"l'orchestre après avoir sauvegardé la banque d'instantanés."
-
-#: InOut/widgets.cpp:1226
-msgid "No name for FLbutbank"
-msgstr "Pas de nom pour FLbutbank"
-
-#: InOut/widgets.cpp:1466
-msgid "FLsetsnap: invalid table"
-msgstr "FLsetsnap : table non valide"
-
-#: InOut/widgets.cpp:1504
-msgid ""
-"Saving could overwrite the old file.\n"
-"Are you sure to save ?"
-msgstr ""
-"La sauvegarde écrasera l'ancien fichier.\n"
-" Etes-vous sûr ?"
-
-#: InOut/widgets.cpp:1516
-msgid ""
-"Saving could overwrite the old file.\n"
-"Are you sure you want to save ?"
-msgstr ""
-"La sauvegarde écrasera l'ancien fichier\n"
-"Etes-vous certain de vouloir sauvegarder ?"
-
-#: InOut/widgets.cpp:1518
-msgid "No"
-msgstr "Non"
-
-#: InOut/widgets.cpp:1518
-msgid "Yes"
-msgstr "Oui"
-
-#: InOut/widgets.cpp:1527
-msgid "FLsavesnap: cannot open file"
-msgstr "FLsavesnap : impossible d'ouvrir le fichier"
-
-#: InOut/widgets.cpp:1580
-msgid "FLloadsnap: cannot open file"
-msgstr "FLloadsnap : impossible d'ouvrir le fichier"
-
-#: InOut/widgets.cpp:1625
-msgid ""
-"unmatched widget, probably due to a modified orchestra. Modifying an "
-"orchestra makes it incompatible with old snapshot files"
-msgstr ""
-"widget non apparié, probablement à cause d'une modification de l'orchestre."
-"La modification d'un orchestre le rend incompatible avec les anciens "
-"fichiers d'instantanés"
-
-#: InOut/widgets.cpp:1994
-msgid "end of widget thread\n"
-msgstr "fin du thread de widget\n"
-
-#: InOut/widgets.cpp:2020
-msgid "FLrun was already called"
-msgstr "FLrun a déjà été appelé"
-
-#: InOut/widgets.cpp:2023
-msgid "FL_run: memory allocation failure"
-msgstr "FL_run : échec de l'allocation mémoire"
-
-#: InOut/widgets.cpp:2125 InOut/widgets.cpp:2145
-msgid "Error: Unable to fork process\n"
-msgstr "Erreur : Impossible de lancer le processus\n"
-
-#: InOut/widgets.cpp:2545
-msgid "FLpanel_end: invalid stack pointer: verify its placement"
-msgstr "FLpanel_end : pointeur de pile non valide : vérifier sa position"
-
-#: InOut/widgets.cpp:2548
-msgid ""
-"FLpanel_end: invalid stack count: verify FLpanel/FLpanel_end count and "
-"placement"
-msgstr ""
-"FLpanel_end : compte de la pile non valide : vérifier le nombre de FLpanel/"
-"FLpanel_end et leurs positions"
-
-#: InOut/widgets.cpp:2573 InOut/widgets.cpp:2604
-msgid "FLscroll_end: invalid stack pointer: verify its placement"
-msgstr "FLscroll_end : pointeur de pile non valide : vérifier sa position"
-
-#: InOut/widgets.cpp:2576
-msgid ""
-"FLscroll_end: invalid stack count: verify FLscroll/FLscroll_end count and "
-"placement"
-msgstr ""
-"FLscroll_end : compte de la pile non valide : vérifier le nombre de FLscroll/"
-"FLscroll_end et leurs positions"
-
-#: InOut/widgets.cpp:2607
-msgid ""
-"FLtabs_end: invalid stack count: verify FLtabs/FLtabs_end count and placement"
-msgstr ""
-"FLtabs_end : pointeur de pile non valide : vérifier le nombre de FLtabs/"
-"FLtabs_end et leurs positions"
-
-#: InOut/widgets.cpp:2651
-msgid "FLgroup_end: invalid stack pointer: verify its placement"
-msgstr "FLgroup_end : pointeur de pile non valide : vérifier sa position"
-
-#: InOut/widgets.cpp:2654
-msgid ""
-"FLgroup_end: invalid stack count: verify FLgroup/FLgroup_end count and "
-"placement"
-msgstr ""
-"FLgroup_end : compte de la pile non valide : verifier le nombre de FLgroup/"
-"FLgroup_end et leurs positions"
-
-#: InOut/widgets.cpp:2684
-msgid "FLpack_end: invalid stack pointer: verify its placement"
-msgstr "FLpack_end : pointeur de pile non valide : vérifier sa position"
-
-#: InOut/widgets.cpp:2687
-msgid ""
-"FLpack_end: invalid stack count: verify FLpack/FLpack_end count and placement"
-msgstr ""
-"FLpack_end : compte de la pile non valide : vérifier le nombre de FLpack/"
-"FLpack_end et leurs positions"
-
-#: InOut/widgets.cpp:2840
-msgid "FLvalue cannot be set by FLsetVal.\n"
-msgstr "FLvalue ne peut pas être rempli par FLsetVal.\n"
-
-#: InOut/widgets.cpp:2857
-#, c-format
-msgid "(fl_setWidgetValuei): not fully implemented yet; exp=%d"
-msgstr "(fl_setWidgetValuei) : pas encore totalement implémenté ; exp=%d"
-
-#: InOut/widgets.cpp:2876
-msgid "FLvalue cannot be set by FLsetVal\n"
-msgstr "FLvalue ne peut pas être rempli par FLsetVal\n"
-
-#: InOut/widgets.cpp:2893
-#, c-format
-msgid "(fl_setWidgetValue_set): not fully implemented yet; exp=%d"
-msgstr "(fl_setWidgetValue_set) : pas encore totalement implémenté ; exp=%d"
-
-#: InOut/widgets.cpp:3242 InOut/widgets.cpp:4648
-msgid "FLslider exponential, using non-labeled slider"
-msgstr "FLslider exponentiel, utilisation d'une réglette sans étiquette"
-
-#: InOut/widgets.cpp:3264
-msgid "FLslider: invalid slider type"
-msgstr "FLslider : type de réglette non valide"
-
-#: InOut/widgets.cpp:3276 InOut/widgets.cpp:4072
-msgid "FLslider: zero is illegal in exponential operations"
-msgstr "FLslider : zéro est interdit dans les opérations exponentielles"
-
-#: InOut/widgets.cpp:3337 InOut/widgets.cpp:4399 InOut/widgets.cpp:4610
-#: InOut/widgets.cpp:4787
-msgid "invalid ZAK space allocation"
-msgstr "espace d'allocation ZAK non valide"
-
-#: InOut/widgets.cpp:3451
-msgid "FLslidBnk: zero is illegal in exponential operations"
-msgstr "FLslidBnk : zéro est interdit dans les opérations exponentielles"
-
-#: InOut/widgets.cpp:3548 InOut/widgets.cpp:3581
-msgid "FLjoy X axe: zero is illegal in exponential operations"
-msgstr "FLjoy axe X : zéro est interdit dans les opérations exponentielles"
-
-#: InOut/widgets.cpp:3675
-msgid "FLknob: invalid knob type"
-msgstr "FLknob : type de bouton rotatif non valide"
-
-#: InOut/widgets.cpp:3690
-msgid "FLknob: zero is illegal in exponential operations"
-msgstr "FLknob : zéro est interdit dans les opérations exponentielles"
-
-#: InOut/widgets.cpp:3790 InOut/widgets.cpp:3912
-#, c-format
-msgid "FLbutton \"%s\" ignoring snapshot capture retrieve"
-msgstr "FLbutton \"%s\" ignore les instantanés de capture et de restitution"
-
-#: InOut/widgets.cpp:3831
-msgid "FLbutton: invalid button type"
-msgstr "FLbutton : type de bouton non valide"
-
-#: InOut/widgets.cpp:3863
-msgid "FLcloseButton: invalid stack pointer: verify its placement"
-msgstr "FLcloseButton : pointeur de pile non valide : vérifier sa position"
-
-#: InOut/widgets.cpp:3882
-#, c-format
-msgid "Command Found: %s\n"
-msgstr "Commande trouvée : %s\n"
-
-#: InOut/widgets.cpp:3954
-msgid "FLbuttonBank: invalid button type"
-msgstr "FLbuttonBank : type de bouton non valide"
-
-#: InOut/widgets.cpp:3992
-#, c-format
-msgid "FLcount \"%s\" ignoring snapshot capture retrieve"
-msgstr "FLcount \"%s\" ignore les instantanés de capture et de restitution"
-
-#: InOut/widgets.cpp:4059
-msgid "FLroller: invalid roller type"
-msgstr "FLroller : type de molette non valide"
-
-#: InOut/widgets.cpp:4254
-msgid "FLhvsBox: a square area must be delimited by 2 lines at least"
-msgstr ""
-"FLhvsBox : une surface carrée doit être délimitée par au moins 2 lignes"
-
-#: InOut/widgets.cpp:4302
-msgid "FLkeyIn: invalid table number"
-msgstr "FLkeyIn : numéro de table non valide"
-
-#: InOut/widgets.cpp:4305
-msgid "FLkeyIn: table too short!"
-msgstr "FLkeyIn : table trop courte !"
-
-#: InOut/widgets.cpp:4522
-msgid "FLvslidBnk: zero is illegal in exponential operations"
-msgstr "FLvslidBnk : zéro est illégal dans les opérations exponentielles"
-
-#: InOut/widgets.cpp:4698 InOut/widgets.cpp:4875
-msgid "FLsliderBank: zero is illegal in exponential operations"
-msgstr "FLsliderBank : zéro est illégal dans les opérations exponentielles"
-
-#: InOut/widgets.cpp:4825
-msgid "FLslidBnk2: FLslider exponential, using non-labeled slider"
-msgstr ""
-"FLslidBnk2 : FLslider exponentiel, utilisant une réglette sans étiquette"
-
-#: InOut/widgets.cpp:4955 InOut/widgets.cpp:5018
-msgid "FLsldBnkSet: invalid table number"
-msgstr "FLsldBnkSet : numéro de table non valide"
-
-#: InOut/widgets.cpp:4959 InOut/widgets.cpp:5022
-msgid "FLslidBnkSet: table too short!"
-msgstr "FLslidBnkSet : table trop courte !"
-
-#: InOut/widgets.cpp:4967 InOut/widgets.cpp:5031
-msgid "FLsldBnkSet: invalid outable number"
-msgstr "FLsldBnkSet : numéro de outable non valide"
-
-#: InOut/widgets.cpp:4972 InOut/widgets.cpp:5037
-msgid "FLslidBnkSet: too many sliders to reset!"
-msgstr "FLslidBnkSet : trop de réglettes à réinitialiser !"
-
-#: InOut/widgets.cpp:4995
-msgid "FLslidBnkSet: function mapping not available"
-msgstr "FLslidBnkSet : type de fonction (lin. ou exp.) non disponible"
-
-#: InOut/widgets.cpp:5064 InOut/widgets.cpp:5149 InOut/widgets.cpp:5236
-msgid ""
-"FLslidBnk2Setk: value out of range: function mapping requires a 0 to 1 range "
-"for input"
-msgstr ""
-"FLslidBnk2Setk : valeur hors limites : le mappage de fonction nécessite en "
-"entrée l'intervalle de 0 à 1"
-
-#: InOut/widgets.cpp:5093
-msgid "FLsldBnkSetk: invalid table number"
-msgstr "FLslidBnkSetk : numéro de table non valide"
-
-#: InOut/widgets.cpp:5097 InOut/widgets.cpp:5183
-msgid "FLslidBnkSetk: table too short!"
-msgstr "FLslidBnkSetk : table trop courte !"
-
-#: InOut/widgets.cpp:5105
-msgid "FLsldBnkSetk: invalid outable number"
-msgstr "FLslidBnkSetk : numéro de outable non valide"
-
-#: InOut/widgets.cpp:5111 InOut/widgets.cpp:5197
-msgid "FLslidBnkSetk: too many sliders to reset!"
-msgstr "FLslidBnkSetk : trop de réglettes à réinitialiser !"
-
-#: InOut/widgets.cpp:5179
-msgid "FLslidBnkSetk: invalid table number"
-msgstr "FLslidBnkSetk : numéro de table non valide"
-
-#: InOut/widgets.cpp:5191
-msgid "FLslidBnkSetk: invalid outable number"
-msgstr "FLslidBnkSetk : numéro de outable non valide"
-
-#: InOut/widgets.cpp:5268
-msgid "FLxyin: none of X limits can be zero in exponential mode!"
-msgstr ""
-"FLxyin : aucune des limites de X ne peut être zéro en mode exponentiel !"
-
-#: InOut/widgets.cpp:5294
-msgid "FLxyin: none of Y limits can be zero in exponential mode!"
-msgstr ""
-"FLxyin : aucune des limites de Y ne peut être zéro en mode exponentiel !"
-
 #: InOut/winascii.c:75
 #, c-format
 msgid "%s\t%ld points, scalemax %5.3f\n"
 msgstr "%s\t%ld points, échelle max %5.3f\n"
 
-#: InOut/windin.c:46 Opcodes/pitch.c:82 Opcodes/spectra.c:76
+#: InOut/windin.c:46 Opcodes/pitch.c:83 Opcodes/spectra.c:78
 msgid "illegal iprd"
 msgstr "iprd illégal"
 
@@ -3917,47 +3621,60 @@ msgstr "%s : les opcodes de widget ont été désactivés par l'application hôt
 msgid "widgets.cpp: error allocating FLTK flags"
 msgstr "widgets.cpp : erreur lors de l'allocation des options de FLTK"
 
-#: OOps/aops.c:95 OOps/aops.c:119
+#: InOut/winFLTK.c:124 InOut/winFLTK.c:137
+#: InOut/virtual_keyboard/virtual_keyboard.cpp:443
+#, c-format
+msgid "Error registering opcode '%s'"
+msgstr "Erreur en enregistrant l'opcode '%s'"
+
+#: InOut/virtual_keyboard/virtual_keyboard.cpp:435
+msgid "virtual_keyboard.cpp: error allocating FLTK flags"
+msgstr "virtual_keyboard.cpp : erreur lors de l'allocation des options FLTK"
+
+#: OOps/aops.c:120 OOps/aops.c:144
 #, c-format
 msgid "Cannot be more In arguments than Out in init (%d,%d)"
 msgstr "Il ne peut y avoir plus d'arguments In que Out dans init (%d,%d)"
 
-#: OOps/aops.c:175 OOps/aops.c:194
-#, fuzzy, c-format
+#: OOps/aops.c:200 OOps/aops.c:219
+#, c-format
 msgid "Index %d out of range [0,%d] in t[]\n"
-msgstr "sorte de filtre, %d, dans clfilt, hors limites"
+msgstr "Index %d hors-limites [0,%d] dans t[]\n"
 
-#: OOps/aops.c:184
-#, fuzzy
-msgid "Vector notinitialised\n"
-msgstr "vco : non initialisé"
+#: OOps/aops.c:209
+msgid "Vector not initialised\n"
+msgstr "Vector : non initialisé\n"
 
-#: OOps/aops.c:686
+#: OOps/aops.c:711
 msgid "non-looping sample"
 msgstr "son échantillonné sans boucle"
 
-#: OOps/aops.c:828 OOps/aops.c:856
+#: OOps/aops.c:853 OOps/aops.c:881
 #, c-format
 msgid "No tuning table %d"
 msgstr "Pas de table d'accordage %d"
 
-#: OOps/aops.c:901 OOps/aops.c:939
+#: OOps/aops.c:926 OOps/aops.c:964
 msgid "cpstun: invalid table"
 msgstr "cpstun : table non valide"
 
-#: OOps/aops.c:1189
+#: OOps/aops.c:1214
 msgid "Input and output argument count differs in inch"
 msgstr "Les nombres d'arguments d'entrée et de sortie diffèrent dans inch"
 
-#: OOps/aops.c:1193
+#: OOps/aops.c:1218
 #, c-format
 msgid "Input channel %d too large; ignored"
 msgstr "Canal d'entrée %d trop grand ; ignoré"
 
-#: OOps/aops.c:1667
+#: OOps/aops.c:1698
 msgid "k-rate invalue ChannelName cannot start with $"
 msgstr "Un nom de canal d'entrée au taux-k ne peut pas commencer par un $"
 
+#: OOps/aops.c:1835
+msgid "Unknown functuon called"
+msgstr "Appel de fonction inconnue"
+
 #: OOps/bus.c:313 OOps/bus.c:345
 msgid "chani: invalid index"
 msgstr "chani : index non valide"
@@ -4207,9 +3924,8 @@ msgid "display"
 msgstr "affichage"
 
 #: OOps/disprep.c:96
-#, fuzzy
 msgid "illegal iprd in display"
-msgstr "iprd illégal"
+msgstr "iprd illégal dans l'affichage"
 
 #: OOps/disprep.c:120
 #, c-format
@@ -4233,9 +3949,8 @@ msgid "window size must be power of two"
 msgstr "la taille de la fenêtre doit être une puissance de deux"
 
 #: OOps/disprep.c:252
-#, fuzzy
 msgid "illegal iprd in ffy display"
-msgstr "iperiod illégal"
+msgstr "iprd illégal dans l'affichage de ffy"
 
 #: OOps/disprep.c:277
 #, c-format
@@ -4258,7 +3973,7 @@ msgstr "tfr"
 msgid "dispfft: not initialised"
 msgstr "dispfft : non initialisé"
 
-#: OOps/disprep.c:435 Opcodes/spectra.c:516
+#: OOps/disprep.c:435 Opcodes/spectra.c:518
 msgid "illegal iperiod"
 msgstr "iperiod illégal"
 
@@ -4322,15 +4037,15 @@ msgstr "format kdump inconnu"
 msgid " *** fftlib.c: internal error: invalid FFT size: %d"
 msgstr " *** fftlib.x : erreur interne : taille de TFR non valide : %d"
 
-#: OOps/goto_ops.c:92
+#: OOps/goto_ops.c:93
 msgid "negative time period"
 msgstr "durée négative"
 
-#: OOps/goto_ops.c:182
+#: OOps/goto_ops.c:186
 msgid "turnoff2: invalid instrument number"
 msgstr "turnoff2 : numéro d'instrument non valide"
 
-#: OOps/goto_ops.c:187
+#: OOps/goto_ops.c:191
 msgid "turnoff2: invalid mode parameter"
 msgstr "turnoff2 : paramètre de mode non valide"
 
@@ -4347,7 +4062,7 @@ msgid "cpstabm: invalid modulator table"
 msgstr "cpstabm : table de modulateur non valide"
 
 #: OOps/midiops.c:304 OOps/midiops.c:314 OOps/midiops.c:334 OOps/midiops.c:344
-#: OOps/midiops.c:421 OOps/midiops.c:435 Opcodes/gab/sliderTable.c:563
+#: OOps/midiops.c:421 OOps/midiops.c:435 Opcodes/gab/sliderTable.c:567
 #: Opcodes/midiops2.c:56 Opcodes/midiops2.c:73 Opcodes/midiops2.c:111
 #: Opcodes/midiops2.c:145 Opcodes/midiops2.c:206 Opcodes/midiops2.c:237
 #: Opcodes/midiops2.c:298 Opcodes/midiops2.c:317 Opcodes/midiops2.c:357
@@ -4363,7 +4078,7 @@ msgstr "pgmassign : numéro de programme non valide"
 msgid "illegal mrtmsg argument"
 msgstr "argument de mrtmsg illégal"
 
-#: OOps/midiout.c:383
+#: OOps/midiout.c:389
 #, c-format
 msgid "out contr14 msb:%x lsb:%x\n"
 msgstr "out contr14 msb :%x lsb :%x\n"
@@ -4916,148 +4631,148 @@ msgstr "pvsanal : non initialisé.\n"
 msgid "Unknown window type; replaced by rectangular\n"
 msgstr "Type de fenêtre inconnu ; remplacé par rectangulaire\n"
 
-#: OOps/pvsanal.c:1025
+#: OOps/pvsanal.c:1027
 msgid "pvsynth: Not Initialised.\n"
 msgstr "pvsynth : non initialisé.\n"
 
-#: OOps/remote.c:100
+#: OOps/remote.c:103
 msgid "insufficient memory to initialise remote globals."
 msgstr "mémoire insuffisante pour initialiser les variables globales distantes"
 
-#: OOps/remote.c:109
+#: OOps/remote.c:112
 msgid "insufficient memory to initialise outgoing socket table."
 msgstr "mémoire insuffisante pour initialiser la table de socket sortant"
 
-#: OOps/remote.c:116
+#: OOps/remote.c:119
 msgid "insufficient memory to initialise incoming socket table."
 msgstr "mémoire insuffisante pour initialiser la table de socket entrant"
 
-#: OOps/remote.c:124
+#: OOps/remote.c:127
 msgid "insufficient memory to initialise insrfd_list."
 msgstr "mémoire insuffisante pour initialiser insrfd_list."
 
-#: OOps/remote.c:132
+#: OOps/remote.c:135
 msgid "insufficient memory to initialise chnrfd_list."
 msgstr "mémoire insuffisante pour initialiser chnrfd_list."
 
-#: OOps/remote.c:139
+#: OOps/remote.c:142
 msgid "insufficient memory to initialise insrfd table."
 msgstr "mémoire insuffisante pour initialiser la table insrfd."
 
-#: OOps/remote.c:146
+#: OOps/remote.c:149
 msgid "insufficient memory to initialise chnrfd table."
 msgstr "mémoire insuffisante pour initialiser la table chnrfd."
 
-#: OOps/remote.c:153
+#: OOps/remote.c:156
 msgid "insufficient memory to initialise local ip address."
 msgstr "mémoire insuffisante pour initialiser l'adresse IP locale."
 
-#: OOps/remote.c:161
+#: OOps/remote.c:164
 msgid "unable to get local ip address."
 msgstr "impossible d'obtenir une adresse IP locale."
 
-#: OOps/remote.c:222
+#: OOps/remote.c:225
 msgid "could not open remote port"
 msgstr "impossible d'ouvrir le port distant"
 
-#: OOps/remote.c:237
+#: OOps/remote.c:240
 msgid "---> Could not connect \n"
 msgstr "---> Connexion impossible \n"
 
-#: OOps/remote.c:241
+#: OOps/remote.c:244
 msgid "---> Failed all attempts to connect. \n"
 msgstr "---> Toutes les tentatives de connexion ont échoué. \n"
 
-#: OOps/remote.c:244
+#: OOps/remote.c:247
 msgid "--->  Connected. \n"
 msgstr "---> Connecté. \n"
 
-#: OOps/remote.c:258 Opcodes/socksend.c:232
+#: OOps/remote.c:261 Opcodes/socksend.c:305
 msgid "write to socket failed"
 msgstr "l'écriture sur le socket a échoué"
 
-#: OOps/remote.c:278
+#: OOps/remote.c:281
 msgid "creating socket\n"
 msgstr "création du socket\n"
 
-#: OOps/remote.c:280
+#: OOps/remote.c:283
 msgid "created socket \n"
 msgstr "socket créé \n"
 
-#: OOps/remote.c:292
+#: OOps/remote.c:295
 msgid "setting socket option to reuse the addresse \n"
 msgstr "réglage de l'option du socket pour réutiliser l'adresse \n"
 
-#: OOps/remote.c:309 Opcodes/sockrecv.c:133 Opcodes/sockrecv.c:223
-#: Opcodes/socksend.c:211
+#: OOps/remote.c:312 Opcodes/sockrecv.c:141 Opcodes/sockrecv.c:237
+#: Opcodes/socksend.c:284
 msgid "bind failed"
 msgstr "la liaison a échoué"
 
-#: OOps/remote.c:313 Opcodes/socksend.c:216
+#: OOps/remote.c:316 Opcodes/socksend.c:289
 msgid "listen failed"
 msgstr "l'écoute a échoué"
 
-#: OOps/remote.c:318 Opcodes/socksend.c:222
+#: OOps/remote.c:321 Opcodes/socksend.c:295
 msgid "accept failed"
 msgstr "l'acceptation a échoué"
 
-#: OOps/remote.c:321
+#: OOps/remote.c:324
 #, c-format
 msgid "accepted, conn=%d \n"
 msgstr "accepté, cnx=%d \n"
 
-#: OOps/remote.c:353 OOps/remote.c:374 OOps/remote.c:417 OOps/remote.c:449
-#: OOps/remote.c:489
+#: OOps/remote.c:356 OOps/remote.c:377 OOps/remote.c:420 OOps/remote.c:452
+#: OOps/remote.c:492
 msgid "failed to initialise remote globals."
 msgstr "l'initialisation des variables globales distantes a échoué."
 
-#: OOps/remote.c:378 OOps/remote.c:421
+#: OOps/remote.c:381 OOps/remote.c:424
 msgid "missing instr nos"
 msgstr "il manque les numéros d'instr"
 
-#: OOps/remote.c:390 OOps/remote.c:430
+#: OOps/remote.c:393 OOps/remote.c:433
 msgid "illegal instr no"
 msgstr "numéro d'instr illégal"
 
-#: OOps/remote.c:393
+#: OOps/remote.c:396
 msgid "insno already remote"
 msgstr "insno est déjà distant"
 
-#: OOps/remote.c:403 OOps/remote.c:474
+#: OOps/remote.c:406 OOps/remote.c:477
 msgid "Failed to open port to listen"
 msgstr "L'ouverture d'un port d'écoute a échoué"
 
-#: OOps/remote.c:423
+#: OOps/remote.c:426
 #, c-format
 msgid "*** str1: %s own:%s\n"
 msgstr "*** strl : %s own : %s\n"
 
-#: OOps/remote.c:433
+#: OOps/remote.c:436
 msgid "insno already specific remote"
 msgstr "insno est déjà distant spécifique"
 
-#: OOps/remote.c:453 OOps/remote.c:493
+#: OOps/remote.c:456 OOps/remote.c:496
 msgid "missing channel nos"
 msgstr "il manque les numéros de canal"
 
-#: OOps/remote.c:463 OOps/remote.c:502
+#: OOps/remote.c:466 OOps/remote.c:505
 msgid "illegal channel no"
 msgstr "numéro de canal illégal"
 
-#: OOps/remote.c:466
+#: OOps/remote.c:469
 msgid "channel already remote"
 msgstr "canal déjà distant"
 
-#: OOps/remote.c:505
+#: OOps/remote.c:508
 msgid "channel already specific remote"
 msgstr "canal déjà distant spécifique"
 
-#: OOps/remote.c:531 OOps/remote.c:555 OOps/remote.c:579
+#: OOps/remote.c:534 OOps/remote.c:558 OOps/remote.c:582
 msgid "CLsend failed"
 msgstr "CLsend a échoué"
 
-#: OOps/remote.c:645 OOps/remote.c:653 OOps/remote.c:661 OOps/remote.c:669
-#: OOps/remote.c:677
+#: OOps/remote.c:648 OOps/remote.c:656 OOps/remote.c:664 OOps/remote.c:672
+#: OOps/remote.c:680
 msgid ""
 "*** This version of Csound was not compiled with remote event support ***\n"
 msgstr ""
@@ -5162,7 +4877,7 @@ msgstr "signes différents"
 #: OOps/ugens1.c:156
 #, c-format
 msgid "Breakpoint %d not valid"
-msgstr ""
+msgstr "Point charnière %d non valide"
 
 #: OOps/ugens1.c:198
 msgid "linseg not initialised (krate)\n"
@@ -5172,53 +4887,53 @@ msgstr "linseg non initialisé (taux-k)\n"
 msgid "linseg: not initialised (arate)\n"
 msgstr "linseg : non initialisé (taux-a)\n"
 
-#: OOps/ugens1.c:463 OOps/ugens1.c:465 OOps/ugens1.c:512 OOps/ugens1.c:514
-#: OOps/ugens1.c:564 OOps/ugens1.c:566 OOps/ugens1.c:610 OOps/ugens1.c:612
-#: OOps/ugens1.c:774 OOps/ugens1.c:776
+#: OOps/ugens1.c:464 OOps/ugens1.c:466 OOps/ugens1.c:513 OOps/ugens1.c:515
+#: OOps/ugens1.c:565 OOps/ugens1.c:567 OOps/ugens1.c:611 OOps/ugens1.c:613
+#: OOps/ugens1.c:775 OOps/ugens1.c:777
 #, c-format
 msgid "ival%d is zero"
 msgstr "ival%d vaut zéro"
 
-#: OOps/ugens1.c:466 OOps/ugens1.c:515 OOps/ugens1.c:567 OOps/ugens1.c:613
-#: OOps/ugens1.c:777
+#: OOps/ugens1.c:467 OOps/ugens1.c:516 OOps/ugens1.c:568 OOps/ugens1.c:614
+#: OOps/ugens1.c:778
 #, c-format
 msgid "ival%d sign conflict"
 msgstr "ival%d conflit de signe"
 
-#: OOps/ugens1.c:495 OOps/ugens1.c:544
+#: OOps/ugens1.c:496 OOps/ugens1.c:545
 #, c-format
 msgid "Breakpoint time %f not valid"
-msgstr ""
+msgstr "Date %f du point charnière non valide"
 
-#: OOps/ugens1.c:706
+#: OOps/ugens1.c:707
 msgid "expseg (krate): not initialised"
 msgstr "expseg (taux-k) : non initialisé"
 
-#: OOps/ugens1.c:732
+#: OOps/ugens1.c:733
 msgid "expseg (arate): not initialised"
 msgstr "expseg (taux-a) : non initialisé"
 
-#: OOps/ugens1.c:1013 OOps/ugens1.c:1149 OOps/ugens1.c:1311
+#: OOps/ugens1.c:1014 OOps/ugens1.c:1150 OOps/ugens1.c:1312
 msgid "non-positive iatdec"
 msgstr "iatdec non positif"
 
-#: OOps/ugens1.c:1106 OOps/ugens1.c:1273
+#: OOps/ugens1.c:1107 OOps/ugens1.c:1274
 msgid "ixmod out of range."
 msgstr "ixmod hors limites"
 
-#: OOps/ugens1.c:1134 OOps/ugens1.c:1301
+#: OOps/ugens1.c:1135 OOps/ugens1.c:1302
 msgid "rise func ends with zero"
 msgstr "la fonction d'attaque se termine par zéro"
 
-#: OOps/ugens1.c:1178 OOps/ugens1.c:1257
+#: OOps/ugens1.c:1179 OOps/ugens1.c:1258
 msgid "envlpx rise func ends with zero"
 msgstr "la fonction d'attaque de envlpx se termine zéro"
 
-#: OOps/ugens1.c:1199 OOps/ugens1.c:1254
+#: OOps/ugens1.c:1200 OOps/ugens1.c:1255
 msgid "envlpx(krate): not initialised"
 msgstr "envlpx(taux-k) : non initialisé"
 
-#: OOps/ugens2.c:48 OOps/ugens2.c:61 Opcodes/shape.c:377
+#: OOps/ugens2.c:48 OOps/ugens2.c:61 Opcodes/shape.c:379
 msgid "init phase truncation\n"
 msgstr "la phase initiale est tronquée\n"
 
@@ -5282,8 +4997,8 @@ msgid "oscil(krate): not initialised"
 msgstr "oscil(taux-k) : non initialisé"
 
 #: OOps/ugens2.c:1139 OOps/ugens2.c:1167 OOps/ugens2.c:1192 OOps/ugens2.c:1219
-#: Opcodes/pitch.c:1579 Opcodes/pitch.c:1606 Opcodes/pitch.c:1633
-#: Opcodes/pitch.c:1662
+#: Opcodes/pitch.c:1580 Opcodes/pitch.c:1607 Opcodes/pitch.c:1634
+#: Opcodes/pitch.c:1663
 msgid "oscil: not initialised"
 msgstr "oscil : non initialisé"
 
@@ -5399,7 +5114,7 @@ msgstr "pluck : kcps supérieur au taux d'échantillonnage"
 msgid "Seeding from current time %lu\n"
 msgstr "Graine à partir de l'horloge %lu\n"
 
-#: OOps/ugens5.c:198 OOps/ugens5.c:260 Opcodes/gab/gab.c:45 Opcodes/ugsc.c:188
+#: OOps/ugens5.c:198 OOps/ugens5.c:260 Opcodes/gab/gab.c:47 Opcodes/ugsc.c:186
 #, c-format
 msgid "illegal reson iscl value, %f"
 msgstr "valeur illégale de iscl dans reson, %f"
@@ -5632,8 +5347,8 @@ msgstr "Numéro de table < 1 dft=%.2f  s1ft=%.2f  s2ft=%.2f"
 msgid "Table no. < 1 dft=%.2f  sft=%.2f"
 msgstr "Numéro de table < 1 dft=%.2f  sft=%.2f"
 
-#: OOps/ugrw1.c:1781 OOps/ugrw1.c:1822 Opcodes/fareyseq.c:455
-#: Opcodes/fareyseq.c:477
+#: OOps/ugrw1.c:1781 OOps/ugrw1.c:1822 Opcodes/fareyseq.c:453
+#: Opcodes/fareyseq.c:475
 #, c-format
 msgid "Source sft table %.2f not found."
 msgstr "La table %.2f de la source sft n'a pas été trouvée"
@@ -5867,19 +5582,19 @@ msgstr "Durée de réverbération non positive\n"
 msgid "reverbx: not initialised"
 msgstr "reverbx : non initialisé"
 
-#: Opcodes/ambicode1.c:80
+#: Opcodes/ambicode1.c:82
 msgid "The numbers of input and output arguments are not valid."
 msgstr "Nombre incorrect d'arguments en entrée et en sortie."
 
-#: Opcodes/ambicode1.c:163
+#: Opcodes/ambicode1.c:165
 msgid "The number of input arguments is not valid."
 msgstr "Nombre incorrect d'arguments en entrée"
 
-#: Opcodes/ambicode1.c:167
+#: Opcodes/ambicode1.c:169
 msgid "The isetup value should be between 1 and 5."
 msgstr "La valeur de isetup doit être comprise entre 1 et 5."
 
-#: Opcodes/ambicode1.c:193
+#: Opcodes/ambicode1.c:195
 msgid "The output channel count does not match the isetup value."
 msgstr "Le nombre de canaux de sortie ne correspond pas à la valeur de isetup."
 
@@ -5919,17 +5634,17 @@ msgstr "Nombre incorrect de cellules de sortie ! Il en faut 8."
 msgid "Not supported setup number!"
 msgstr "Valeur de setup non supportée !"
 
-#: Opcodes/babo.c:740
+#: Opcodes/babo.c:742
 #, c-format
 msgid "Babo: resonator dimensions are incorrect (%.1f, %.1f, %.1f)"
 msgstr ""
 "Babo : les dimensions du résonateur sont incorrectes (%.1f, %.1f, %.1f)"
 
-#: Opcodes/bilbar.c:82
+#: Opcodes/bilbar.c:83
 msgid "No data to continue"
 msgstr "Pas de données pour continuer"
 
-#: Opcodes/bilbar.c:108
+#: Opcodes/bilbar.c:109
 msgid "Ends must be clamped(1), pivoting(2) or free(3)"
 msgstr "Se termine mais peut être fixé(1), pivotant(2) ou libre(3)"
 
@@ -5944,8 +5659,8 @@ msgstr ""
 "DLineN : longueur de délai trop grande ... réglée à la longueur maximale de "
 "%ld.\n"
 
-#: Opcodes/bowedbar.c:98 Opcodes/physmod.c:489
-msgid "unknown lowest frequency for bowed string -- assuming 50Hz\n"
+#: Opcodes/bowedbar.c:98
+msgid "unknown lowest frequency for bowed bar -- assuming 50Hz\n"
 msgstr ""
 "La fréquence la plus basse pour la corde frottée est inconnue -- on suppose "
 "qu'elle vaut 50 Hz\n"
@@ -6029,17 +5744,17 @@ msgstr "Réglette %d fixé à %s\n"
 msgid "Unknown control %d"
 msgstr "Contrôle %d inconnu"
 
-#: Opcodes/cpumeter.c:73
-#, fuzzy, c-format
+#: Opcodes/cpumeter.c:77
+#, c-format
 msgid "Failed to open /proc/stat: %s"
-msgstr "L'ouverture du fichier csd a échoué : %s"
+msgstr "Echec de l'ouverture de /proc/stat : %s"
 
-#: Opcodes/cpumeter.c:75 Opcodes/cpumeter.c:80 Opcodes/cpumeter.c:107
-#: Opcodes/cpumeter.c:147
+#: Opcodes/cpumeter.c:79 Opcodes/cpumeter.c:84 Opcodes/cpumeter.c:111
+#: Opcodes/cpumeter.c:151
 msgid "failed /proc/stat read"
-msgstr ""
+msgstr "La lecture de /proc/stat a échoué"
 
-#: Opcodes/crossfm.c:33
+#: Opcodes/crossfm.c:34
 msgid "crossfm: ftable not found"
 msgstr "crossfm : table non trouvée"
 
@@ -6088,31 +5803,31 @@ msgstr ""
 msgid "insufficient arguments for fareytable"
 msgstr "arguments insuffisants pour une table de Farey"
 
-#: Opcodes/fareyseq.c:250 Opcodes/fareyseq.c:300
+#: Opcodes/fareyseq.c:251 Opcodes/fareyseq.c:301
 #, c-format
 msgid "Farey: Table no. < 1 dft=%.2f  sft=%.2f"
 msgstr "Farey : No de table < 1 dft=%.2f  sft=%.2f"
 
-#: Opcodes/fareyseq.c:255
+#: Opcodes/fareyseq.c:256
 #, c-format
 msgid "Farey: Filter type < 1 dft=%.2f  sft=%.2f"
 msgstr "Farey : Type de filtre < 1 dft=%.2f  sft=%.2f"
 
-#: Opcodes/fareyseq.c:270 Opcodes/fareyseq.c:318
+#: Opcodes/fareyseq.c:271 Opcodes/fareyseq.c:319
 #, c-format
 msgid "Farey: Destination dft table %.2f not found."
 msgstr "Farey : Table dft de destination %.2f introuvable"
 
-#: Opcodes/fareyseq.c:281 Opcodes/fareyseq.c:329
+#: Opcodes/fareyseq.c:282 Opcodes/fareyseq.c:330
 #, c-format
 msgid "Farey: Source sft table %.2f not found."
 msgstr "Farey : Table sft source %.2f introuvable"
 
-#: Opcodes/fareyseq.c:305
+#: Opcodes/fareyseq.c:306
 msgid "Farey: Filter type < 1"
 msgstr "Farey : Type de filtre < 1"
 
-#: Opcodes/fareyseq.c:447 Opcodes/fareyseq.c:468
+#: Opcodes/fareyseq.c:445 Opcodes/fareyseq.c:466
 #, c-format
 msgid "Table no. < 1 sft=%.2f"
 msgstr "Numéro de table < 1 sft=%.2f"
@@ -6228,48 +5943,48 @@ msgstr "Pas de table pour FM40p"
 msgid "follow - zero length!"
 msgstr "follow - longueur nulle !"
 
-#: Opcodes/fout.c:59
+#: Opcodes/fout.c:60
 #, c-format
 msgid "Closing file '%s'...\n"
 msgstr "Fermeture du fichier '%s'...\n"
 
-#: Opcodes/fout.c:101
+#: Opcodes/fout.c:102
 msgid "invalid file handle"
 msgstr "descripteur de fichier non valide"
 
-#: Opcodes/fout.c:108 Opcodes/fout.c:420
+#: Opcodes/fout.c:109 Opcodes/fout.c:421
 msgid "invalid file name"
 msgstr "nom de fichier non valide"
 
-#: Opcodes/fout.c:165
+#: Opcodes/fout.c:166
 #, c-format
 msgid "error opening file '%s'"
 msgstr "erreur en ouvrant le fichier '%s'"
 
-#: Opcodes/fout.c:192
+#: Opcodes/fout.c:193
 #, c-format
 msgid "error opening sound file '%s'"
 msgstr "erreur en ouvrant le fichier son '%s'"
 
-#: Opcodes/fout.c:429
+#: Opcodes/fout.c:430
 #, c-format
 msgid "cannot close '%s': not found in list of open files"
 msgstr ""
 "impossible de fermet '%s' : il n'a pas été trouvé dans la liste des fichiers "
 "ouverts"
 
-#: Opcodes/fout.c:440
+#: Opcodes/fout.c:441
 #, c-format
 msgid "cannot close file #%d: not a valid handle"
 msgstr ""
 "impossible de fermer le fichier #%d : ce n'est pas un descripteur valide"
 
-#: Opcodes/fout.c:447
+#: Opcodes/fout.c:448
 #, c-format
 msgid "file #%d (%s) is in use, will be closed when released"
 msgstr "le fichier #%d (%s) est utilisé, il sera fermé à sa libération"
 
-#: Opcodes/fout.c:476 Opcodes/fout.c:479 Opcodes/fout.c:550 Opcodes/fout.c:553
+#: Opcodes/fout.c:477 Opcodes/fout.c:480 Opcodes/fout.c:551 Opcodes/fout.c:554
 msgid "fouti: invalid file handle"
 msgstr "fouti : descripteur de fichier non valide"
 
@@ -6353,138 +6068,180 @@ msgstr "ftsave : impossible d'ouvrir le fichier"
 msgid "ftsave: failed to write file"
 msgstr "ftsave : impossible d'ouvrir le fichier"
 
-#: Opcodes/gab/gab.c:109
+#: Opcodes/gab/gab.c:111
 msgid "fastab: incorrect table number"
 msgstr "fastab : numéro de table incorrect"
 
-#: Opcodes/gab/gab.c:132 Opcodes/gab/gab.c:141 Opcodes/gab/gab.c:171
+#: Opcodes/gab/gab.c:134 Opcodes/gab/gab.c:143 Opcodes/gab/gab.c:173
 msgid "tabw off end"
 msgstr "tabw hors-limite"
 
-#: Opcodes/gab/gab.c:157 Opcodes/gab/gab.c:225 Opcodes/gab/gab.c:234
+#: Opcodes/gab/gab.c:159 Opcodes/gab/gab.c:227 Opcodes/gab/gab.c:236
 msgid "tab off end"
 msgstr "tab hors-limite"
 
-#: Opcodes/gab/gab.c:183
+#: Opcodes/gab/gab.c:185
 msgid "tab_i: incorrect table number"
 msgstr "tab_i : numéro de table incorrect"
 
-#: Opcodes/gab/gab.c:190
-msgid "tab_i off end"
-msgstr "tab_i hors-limite"
+#: Opcodes/gab/gab.c:192
+#, c-format
+msgid "tab_i off end: table number: %d\n"
+msgstr "tab_i hors-limite : numéro de table : %d\n"
 
-#: Opcodes/gab/gab.c:202
+#: Opcodes/gab/gab.c:204
 msgid "tabw_i: incorrect table number"
 msgstr "tabw_i : numéro de table incorrect"
 
-#: Opcodes/gab/gab.c:209
+#: Opcodes/gab/gab.c:211
 msgid "tabw_i off end"
 msgstr "tabw_i hors-limite"
 
-#: Opcodes/gab/gab.c:247
+#: Opcodes/gab/gab.c:249
 msgid "tab_init: incorrect table number"
 msgstr "tab_init : numéro de table incorrect"
 
-#: Opcodes/gab/gab.c:316
+#: Opcodes/gab/gab.c:318
 msgid "printi parameter was not a \"quoted string\""
 msgstr "printi : le paramètre n'était pas une \"chaîne entre guillemets\""
 
-#: Opcodes/gab/gab.c:423
+#: Opcodes/gab/gab.c:425
 msgid "adsynt2: wavetable not found!"
 msgstr "adsynt2 : la table d'onde n'a pas été trouvée !"
 
-#: Opcodes/gab/gab.c:435
+#: Opcodes/gab/gab.c:437
 msgid "adsynt2: freqtable not found!"
 msgstr "adsynt2 : la table de fréq n'a pas été trouvée !"
 
-#: Opcodes/gab/gab.c:440
+#: Opcodes/gab/gab.c:442
 msgid "adsynt2: partial count is greater than freqtable size!"
 msgstr ""
 "adsynt2 : le nombre de partiels est supérieur à la taille de la table de "
 "fréq !"
 
-#: Opcodes/gab/gab.c:449
+#: Opcodes/gab/gab.c:451
 msgid "adsynt2: amptable not found!"
 msgstr "adsynt2 : la table d'amp n'a pas été trouvée !"
 
-#: Opcodes/gab/gab.c:454
+#: Opcodes/gab/gab.c:456
 msgid "adsynt2: partial count is greater than amptable size!"
 msgstr ""
 "adsynt2 : le nombre de partiels est supérieur à la taille de la table d'amp !"
 
-#: Opcodes/gab/gab.c:499
+#: Opcodes/gab/gab.c:501
 msgid "adsynt2: not initialised"
 msgstr "adsynt2 : non initialisé"
 
-#: Opcodes/gab/gab.c:741
+#: Opcodes/gab/gab.c:743
 msgid "max_k: invalid imaxflag value"
 msgstr "max_k : valeur de imaxflag non valide"
 
-#: Opcodes/gab/hvs.c:68
+#: Opcodes/gab/hvs.c:70
 msgid "hvs1: a line segment must be delimited by 2 points at least"
 msgstr "hvs1 : un segment de droite doit être délimité par 2 points au moins"
 
-#: Opcodes/gab/hvs.c:150
+#: Opcodes/gab/hvs.c:152
 msgid "hvs2: a square area must be delimited by 2 lines at least"
 msgstr "hvs2 : une surface carrée doit être délimitée par 2 droites au moins"
 
-#: Opcodes/gab/hvs.c:246
+#: Opcodes/gab/hvs.c:248
 msgid "hvs3: a square area must be delimited by 2 lines at least"
 msgstr "hvs3 : une surface carrée doit être délimitée par 2 droites au moins"
 
-#: Opcodes/gab/hvs.c:389
+#: Opcodes/gab/hvs.c:390
 msgid "vphaseseg: the first function is invalid or missing"
 msgstr "vphaseseg : la première fonction est non valide ou manquante"
 
-#: Opcodes/gab/hvs.c:396
+#: Opcodes/gab/hvs.c:398 Opcodes/gab/vectorial.c:2301
 msgid "vphaseseg: invalid num. of elements"
 msgstr "vphaseseg : nombre d'éléments non valide"
 
-#: Opcodes/gab/hvs.c:414
+#: Opcodes/gab/hvs.c:416
 msgid "vphaseseg: function invalid or missing"
 msgstr "vphaseseg : fonction non valide ou manquante"
 
-#: Opcodes/gab/newgabopc.c:39 Opcodes/gab/newgabopc.c:54
+#: Opcodes/gab/newgabopc.c:40 Opcodes/gab/newgabopc.c:55
 msgid "vtable1: incorrect table number"
 msgstr "vtable1 : numéro de table incorrect"
 
-#: Opcodes/gab/newgabopc.c:359
+#: Opcodes/gab/newgabopc.c:241 Opcodes/gab/newgabopc.c:296
+msgid "copyTabElems: incorrect destination table number"
+msgstr "copyTabElems : numéro de table incorrect"
+
+#: Opcodes/gab/newgabopc.c:246 Opcodes/gab/newgabopc.c:301
+msgid ""
+"copyTabElems: destination table too short or number of elements to copy too "
+"big"
+msgstr ""
+"copyTabElems : table de destination trop courte ou nombre d'éléments à copier "
+"trop grand"
+
+#: Opcodes/gab/newgabopc.c:252 Opcodes/gab/newgabopc.c:306
+msgid "copyTabElems: incorrect source table number"
+msgstr "copyTabElems : numéro de table source incorrect"
+
+#: Opcodes/gab/newgabopc.c:257 Opcodes/gab/newgabopc.c:310
+msgid ""
+"copyTabElems: source table size less than the number of elements to copy"
+msgstr ""
+"copyTabElems : taille de la table source inférieure au nombre d'éléments "
+"à copier"
+
+#: Opcodes/gab/newgabopc.c:273 Opcodes/gab/newgabopc.c:318
+msgid "copyTabElems: source table too short"
+msgstr "copyTabElems : table source trop courte"
+
+#: Opcodes/gab/newgabopc.c:276 Opcodes/gab/newgabopc.c:321
+msgid "copyTabElems: destination table too short"
+msgstr "copyTabElems : table de destination trop courte"
+
+#: Opcodes/gab/newgabopc.c:347
+msgid "inrg: audio input is not enabled"
+msgstr "inrg : entrée audio désactivée"
+
+#: Opcodes/gab/newgabopc.c:362
 msgid "inrg: channel number cannot be < 1 (1 is the first channel)"
 msgstr ""
 "inrg : le numéro de canal ne peut pas être < 1 (1 est le premier canal)"
 
-#: Opcodes/gab/newgabopc.c:400
+#: Opcodes/gab/newgabopc.c:403
 msgid "outrg: channel number cannot be < 1 (1 is the first channel)"
 msgstr ""
 "outrg : le numéro de canal ne peut pas être < 1 (1 est le premier canal)"
 
-#: Opcodes/gab/newgabopc.c:439 Opcodes/gab/newgabopc.c:671
+#: Opcodes/gab/newgabopc.c:440 Opcodes/gab/newgabopc.c:574
+#: Opcodes/gab/newgabopc.c:672
 msgid "invalid function"
 msgstr "fonction non valide"
 
-#: Opcodes/gab/newgabopc.c:442
+#: Opcodes/gab/newgabopc.c:443
 msgid "lposc: no sample rate stored in function; assuming=sr\n"
 msgstr ""
 "lposc : pas de taux d'échantillonnage dans la fonction ; on suppose = sr\n"
 
-#: Opcodes/gab/newgabopc.c:673
+#: Opcodes/gab/newgabopc.c:577
+msgid "lposcil: no sample rate stored in function assuming=sr\n"
+msgstr ""
+"lposcil : pas de taux d'échantillonnage dans la fonction ; on suppose = sr\n"
+
+#: Opcodes/gab/newgabopc.c:674
 msgid "lposcil: no sample rate stored in function; assuming=sr\n"
 msgstr ""
 "lposcil : pas de taux d'échantillonnage dans la fonction ; on suppose = sr\n"
 
-#: Opcodes/gab/sliderTable.c:45 Opcodes/gab/sliderTable.c:254
+#: Opcodes/gab/sliderTable.c:47 Opcodes/gab/sliderTable.c:256
 #: Opcodes/midiops3.c:44 Opcodes/midiops3.c:146 Opcodes/midiops3.c:259
 #: Opcodes/midiops3.c:317 Opcodes/midiops3.c:413
 msgid "illegal channel"
 msgstr "canal illégal"
 
-#: Opcodes/gab/sliderTable.c:65 Opcodes/gab/sliderTable.c:277
+#: Opcodes/gab/sliderTable.c:67 Opcodes/gab/sliderTable.c:280
 #: Opcodes/midiops3.c:58 Opcodes/midiops3.c:162 Opcodes/midiops3.c:273
 #, c-format
 msgid "illegal control number at position n.%d"
 msgstr "numéro de contrôle illégal à la position n.%d"
 
-#: Opcodes/gab/sliderTable.c:74
+#: Opcodes/gab/sliderTable.c:76
 #, c-format
 msgid ""
 "sliderXtable: illegal initvalue at position %d.  When using table indexing, "
@@ -6494,18 +6251,18 @@ msgstr ""
 "l'on utilise une indexation de table, l'intervalle d'initialisation va de 0 "
 "à 1"
 
-#: Opcodes/gab/sliderTable.c:84 Opcodes/gab/sliderTable.c:284
-#: Opcodes/gab/sliderTable.c:509 Opcodes/midiops3.c:64 Opcodes/midiops3.c:168
+#: Opcodes/gab/sliderTable.c:86 Opcodes/gab/sliderTable.c:287
+#: Opcodes/gab/sliderTable.c:513 Opcodes/midiops3.c:64 Opcodes/midiops3.c:168
 #: Opcodes/midiops3.c:347
 #, c-format
 msgid "illegal initvalue at position n.%d"
 msgstr "valeur d'initialisation illégale à la position n.%d"
 
-#: Opcodes/gab/sliderTable.c:96 Opcodes/gab/sliderTable.c:296
+#: Opcodes/gab/sliderTable.c:98 Opcodes/gab/sliderTable.c:299
 msgid "sliderXtable: zero is illegal in exponential operations"
 msgstr "sliderXtable : zéro est illégal dans les opérations exponentielles"
 
-#: Opcodes/gab/sliderTable.c:312
+#: Opcodes/gab/sliderTable.c:315
 #, c-format
 msgid ""
 "sliderXtable: illegal initvalue at position %d. When using table indexing, "
@@ -6515,408 +6272,505 @@ msgstr ""
 "l'on utilise une indexation de table, l'intervalle d'initialisation va de 0 "
 "à 1"
 
-#: Opcodes/gab/sliderTable.c:565 Opcodes/midiops2.c:321 Opcodes/midiops2.c:359
+#: Opcodes/gab/sliderTable.c:569 Opcodes/midiops2.c:321 Opcodes/midiops2.c:359
 #: Opcodes/midiops2.c:391 Opcodes/midiops2.c:440 Opcodes/midiops2.c:475
 #: Opcodes/midiops2.c:517 Opcodes/midiops2.c:532 Opcodes/midiops2.c:551
 msgid "illegal midi channel"
 msgstr "canal midi illégal"
 
-#: Opcodes/gab/tabmorph.c:42
+#: Opcodes/gab/tabmorph.c:43
 msgid "tabmorph: invalid table number"
 msgstr "tabmorph : numéro de table non valide"
 
-#: Opcodes/gab/tabmorph.c:46
+#: Opcodes/gab/tabmorph.c:47
 msgid "tabmorph: all tables must have the same length!"
 msgstr "tabmorph : toutes les tables doivent avoir la même longueur !"
 
-#: Opcodes/gab/vectorial.c:33
+#: Opcodes/gab/vectorial.c:35
 msgid "mtablei: incorrect table number"
 msgstr "mtablei : numéro de table incorrect"
 
-#: Opcodes/gab/vectorial.c:63 Opcodes/gab/vectorial.c:83
-#: Opcodes/gab/vectorial.c:133 Opcodes/gab/vectorial.c:200
+#: Opcodes/gab/vectorial.c:65 Opcodes/gab/vectorial.c:85
+#: Opcodes/gab/vectorial.c:135 Opcodes/gab/vectorial.c:202
 msgid "mtable: incorrect table number"
 msgstr "mtable : numéro de table incorrect"
 
-#: Opcodes/gab/vectorial.c:185
+#: Opcodes/gab/vectorial.c:187
 msgid "mtabi: incorrect table number"
 msgstr "mtabi : numéro de table incorrect"
 
-#: Opcodes/gab/vectorial.c:252
+#: Opcodes/gab/vectorial.c:254
 msgid "mtablewi: incorrect table number"
 msgstr "mtablewi : numéro de table incorrect"
 
-#: Opcodes/gab/vectorial.c:268 Opcodes/gab/vectorial.c:288
-#: Opcodes/gab/vectorial.c:317 Opcodes/gab/vectorial.c:362
-#: Opcodes/gab/vectorial.c:406
+#: Opcodes/gab/vectorial.c:270 Opcodes/gab/vectorial.c:290
+#: Opcodes/gab/vectorial.c:319 Opcodes/gab/vectorial.c:364
+#: Opcodes/gab/vectorial.c:408
 msgid "mtabw: incorrect table number"
 msgstr "mtabw : numéro de table incorrect"
 
-#: Opcodes/gab/vectorial.c:348
+#: Opcodes/gab/vectorial.c:350
 msgid "mtabwi: incorrect table number"
 msgstr "mtabwi : numéro de table incorrect"
 
-#: Opcodes/gab/vectorial.c:380
+#: Opcodes/gab/vectorial.c:382
 msgid "mtablew: incorrect table number"
 msgstr "mtablew : numéro de table incorrect"
 
-#: Opcodes/gab/vectorial.c:454 Opcodes/gab/vectorial.c:513
+#: Opcodes/gab/vectorial.c:457 Opcodes/gab/vectorial.c:516
 #, c-format
 msgid "vadd_i: invalid table number %i"
 msgstr "vadd_i : numéro de table %i non valide"
 
-#: Opcodes/gab/vectorial.c:470
+#: Opcodes/gab/vectorial.c:473
 msgid "vadd_i: ifn length exceeded"
 msgstr "vadd_i : la longueur de ifn a été dépassée"
 
-#: Opcodes/gab/vectorial.c:497
+#: Opcodes/gab/vectorial.c:500
 msgid "vadd: ifn1 length exceeded"
 msgstr "vadd : la longueur de ifn1 a été dépassée"
 
-#: Opcodes/gab/vectorial.c:529
+#: Opcodes/gab/vectorial.c:532
 msgid "vmult_i: ifn length exceeded"
 msgstr "vmult_i : la longueur de ifn a été dépassée"
 
-#: Opcodes/gab/vectorial.c:556
+#: Opcodes/gab/vectorial.c:559
 msgid "vmult: ifn1 length exceeded"
 msgstr "vmult : la longueur de ifn1 a été dépassée"
 
-#: Opcodes/gab/vectorial.c:572
+#: Opcodes/gab/vectorial.c:575
 #, c-format
 msgid "vpow_i: invalid table number %i"
 msgstr "vpow_i : numéro de table %i non valide"
 
-#: Opcodes/gab/vectorial.c:589
+#: Opcodes/gab/vectorial.c:592
 msgid "vpow_i: ifn length exceeded"
 msgstr "vpow_i : la longueur de ifn a été dépassée"
 
-#: Opcodes/gab/vectorial.c:617
+#: Opcodes/gab/vectorial.c:620
 msgid "vpow: ifn1 length exceeded"
 msgstr "vpow : la longueur de ifn1 a été dépassée"
 
-#: Opcodes/gab/vectorial.c:633
+#: Opcodes/gab/vectorial.c:636
 #, c-format
 msgid "vexp_i: invalid table number %i"
 msgstr "vexp_i : numéro de table %i non valide"
 
-#: Opcodes/gab/vectorial.c:649
+#: Opcodes/gab/vectorial.c:652
 msgid "vexp_i: ifn length exceeded"
 msgstr "vexp_i : la longueur de ifn a été dépassée"
 
-#: Opcodes/gab/vectorial.c:676
+#: Opcodes/gab/vectorial.c:679
 msgid "vexp: ifn1 length exceeded"
 msgstr "vexp : la longueur de ifn1 a été dépassée"
 
-#: Opcodes/gab/vectorial.c:694
+#: Opcodes/gab/vectorial.c:697
 #, c-format
 msgid "vectorsop: ifn1 invalid table number %i"
 msgstr "vectorsop : ifn1 numéro de table %i non valide"
 
-#: Opcodes/gab/vectorial.c:699
+#: Opcodes/gab/vectorial.c:702
 #, c-format
 msgid "vectorsop: ifn2 invalid table number %i"
 msgstr "vectorsop : ifn2 numéro de table %i non valide"
 
-#: Opcodes/gab/vectorial.c:738
+#: Opcodes/gab/vectorial.c:742
 msgid "vcopy: ifn1 length exceeded"
 msgstr "vcopy : la longueur de ifn1 a été dépassée"
 
-#: Opcodes/gab/vectorial.c:756
+#: Opcodes/gab/vectorial.c:760
 msgid "vcopy: ifn2 length exceeded"
 msgstr "vcopy : la longueur de ifn2 a été dépassée"
 
-#: Opcodes/gab/vectorial.c:783
+#: Opcodes/gab/vectorial.c:787
 #, c-format
 msgid "vcopy_i: ifn1 invalid table number %i"
 msgstr "vcopy_i : ifn1 numéro de table %i non valide"
 
-#: Opcodes/gab/vectorial.c:788
+#: Opcodes/gab/vectorial.c:792
 #, c-format
 msgid "vcopy_i: ifn2 invalid table number %i"
 msgstr "vcopy_i : ifn2 numéro de table %i non valide"
 
-#: Opcodes/gab/vectorial.c:810
+#: Opcodes/gab/vectorial.c:814
 msgid "vcopy_i: ifn1 length exceeded"
 msgstr "vcopy_i : la longueur de ifn1 a été dépassée"
 
-#: Opcodes/gab/vectorial.c:827
+#: Opcodes/gab/vectorial.c:831
 msgid "vcopy_i: ifn2 length exceeded"
 msgstr "vcopy_i : la longueur de ifn2 a été dépassée"
 
-#: Opcodes/gab/vectorial.c:866
+#: Opcodes/gab/vectorial.c:870
 msgid "vaddv: ifn1 length exceeded"
 msgstr "vaddv : la longueur de ifn1 a été dépassée"
 
-#: Opcodes/gab/vectorial.c:885
+#: Opcodes/gab/vectorial.c:889
 msgid "vaddv: ifn2 length exceeded"
 msgstr "vaddv : la longueur de ifn2 a été dépassée"
 
-#: Opcodes/gab/vectorial.c:911
+#: Opcodes/gab/vectorial.c:915
 #, c-format
 msgid "vaddv_i: ifn1 invalid table number %i"
 msgstr "vaddv_i : ifn1 numéro de table %i non valide"
 
-#: Opcodes/gab/vectorial.c:916
+#: Opcodes/gab/vectorial.c:920
 #, c-format
 msgid "vaddv_i: ifn2 invalid table number %i"
 msgstr "vaddv_i : ifn2 numéro de table %i non valide"
 
-#: Opcodes/gab/vectorial.c:938
+#: Opcodes/gab/vectorial.c:942
 msgid "vaddv_i: ifn1 length exceeded"
 msgstr "vaddv_i : la longueur de ifn1 a été dépassée"
 
-#: Opcodes/gab/vectorial.c:956
+#: Opcodes/gab/vectorial.c:960
 msgid "vaddv_i: ifn2 length exceeded"
 msgstr "vaddv_i : la longueur de ifn2 a été dépassée"
 
-#: Opcodes/gab/vectorial.c:987
+#: Opcodes/gab/vectorial.c:991
 msgid "vsubv: ifn1 length exceeded"
 msgstr "vsubv :  la longueur de ifn1 a été dépassée"
 
-#: Opcodes/gab/vectorial.c:1006
+#: Opcodes/gab/vectorial.c:1010
 msgid "vsubv: ifn2 length exceeded"
 msgstr "vsubv : la longueur de ifn2 a été dépassée"
 
-#: Opcodes/gab/vectorial.c:1033
+#: Opcodes/gab/vectorial.c:1037
 #, c-format
 msgid "vsubv_i: ifn1 invalid table number %i"
 msgstr "vsubv_i : ifn1 numéro de table %i non valide"
 
-#: Opcodes/gab/vectorial.c:1038
+#: Opcodes/gab/vectorial.c:1042
 #, c-format
 msgid "vsubv_i: ifn2 invalid table number %i"
 msgstr "vsubv_i : ifn2 numéro de table %i non valide"
 
-#: Opcodes/gab/vectorial.c:1060
+#: Opcodes/gab/vectorial.c:1064
 msgid "vsubv_i: ifn1 length exceeded"
 msgstr "vsubv_i : la longueur de ifn1 a été dépassée"
 
-#: Opcodes/gab/vectorial.c:1078
+#: Opcodes/gab/vectorial.c:1082
 msgid "vsubv_i: ifn2 length exceeded"
 msgstr "vsubv_i : la longueur de ifn2 a été dépassée"
 
-#: Opcodes/gab/vectorial.c:1115
+#: Opcodes/gab/vectorial.c:1119
 msgid "vmultv: ifn1 length exceeded"
 msgstr "vmultv : la longueur de ifn1 a été dépassée"
 
-#: Opcodes/gab/vectorial.c:1134
+#: Opcodes/gab/vectorial.c:1138
 msgid "vmultv: ifn2 length exceeded"
 msgstr "vmultv : la longueur de ifn2 a été dépassée"
 
-#: Opcodes/gab/vectorial.c:1161
+#: Opcodes/gab/vectorial.c:1165
 #, c-format
 msgid "vmultv_i: ifn1 invalid table number %i"
 msgstr "vmultv_i : ifn1 numéro de table %i non valide"
 
-#: Opcodes/gab/vectorial.c:1166
+#: Opcodes/gab/vectorial.c:1170
 #, c-format
 msgid "vmultv_i: ifn2 invalid table number %i"
 msgstr "vmultv_i : ifn2 numéro de table %i non valide"
 
-#: Opcodes/gab/vectorial.c:1188
+#: Opcodes/gab/vectorial.c:1192
 msgid "vmultv_i: ifn1 length exceeded"
 msgstr "vmultv_i : la longueur de ifn1 a été dépassée"
 
-#: Opcodes/gab/vectorial.c:1205
+#: Opcodes/gab/vectorial.c:1209
 msgid "vmultv_i: ifn2 length exceeded"
 msgstr "vmultv_i : la longueur de ifn2 a été dépassée"
 
-#: Opcodes/gab/vectorial.c:1242
+#: Opcodes/gab/vectorial.c:1246
 msgid "vdivv: ifn1 length exceeded"
 msgstr "vdivv : la longueur de ifn1 a été dépassée"
 
-#: Opcodes/gab/vectorial.c:1261
+#: Opcodes/gab/vectorial.c:1265
 msgid "vdivv: ifn2 length exceeded"
 msgstr "vdivv : la longueur de ifn2 a été dépassée"
 
-#: Opcodes/gab/vectorial.c:1288
+#: Opcodes/gab/vectorial.c:1292
 #, c-format
 msgid "vdivv_i: ifn1 invalid table number %i"
 msgstr "vdivv_i : ifn1 numéro de table %i non valide"
 
-#: Opcodes/gab/vectorial.c:1293
+#: Opcodes/gab/vectorial.c:1297
 #, c-format
 msgid "vdivv_i: ifn2 invalid table number %i"
 msgstr "vdivv_i : ifn2 numéro de table %i non valide"
 
-#: Opcodes/gab/vectorial.c:1315
+#: Opcodes/gab/vectorial.c:1319
 msgid "vdivv_i: ifn1 length exceeded"
 msgstr "vdivv_i : la longueur de ifn1 a été dépassée"
 
-#: Opcodes/gab/vectorial.c:1333
+#: Opcodes/gab/vectorial.c:1337
 msgid "vdivv_i: ifn2 length exceeded"
 msgstr "vdivv_i : la longueur de ifn2 a été dépassée"
 
-#: Opcodes/gab/vectorial.c:1370
+#: Opcodes/gab/vectorial.c:1374
 msgid "vpowv: ifn1 length exceeded"
 msgstr "vpowv : la longueur de ifn1 a été dépassée"
 
-#: Opcodes/gab/vectorial.c:1389
+#: Opcodes/gab/vectorial.c:1393
 msgid "vpowv: ifn2 length exceeded"
 msgstr "vpowv : la longueur de ifn2 a été dépassée"
 
-#: Opcodes/gab/vectorial.c:1416
+#: Opcodes/gab/vectorial.c:1420
 #, c-format
 msgid "vpowv_i: ifn1 invalid table number %i"
 msgstr "vpowv_i : ifn1 numéro de table %i non valide"
 
-#: Opcodes/gab/vectorial.c:1421
+#: Opcodes/gab/vectorial.c:1425
 #, c-format
 msgid "vpowv_i: ifn2 invalid table number %i"
 msgstr "vpowv_i : ifn2 numéro de table %i non valide"
 
-#: Opcodes/gab/vectorial.c:1443
+#: Opcodes/gab/vectorial.c:1447
 msgid "vpowv_i: ifn1 length exceeded"
 msgstr "vpowv_i : la longueur de ifn1 a été dépassée"
 
-#: Opcodes/gab/vectorial.c:1460
+#: Opcodes/gab/vectorial.c:1464
 msgid "vpowv_i: ifn2 length exceeded"
 msgstr "vpowv_i : la longueur de ifn2 a été dépassée"
 
-#: Opcodes/gab/vectorial.c:1497
+#: Opcodes/gab/vectorial.c:1501
 msgid "vexpv: ifn1 length exceeded"
 msgstr "vexpv : la longueur de ifn1 a été dépassée"
 
-#: Opcodes/gab/vectorial.c:1516
+#: Opcodes/gab/vectorial.c:1520
 msgid "vexpv: ifn2 length exceeded"
 msgstr "vexpv : la longueur de ifn2 a été dépassée"
 
-#: Opcodes/gab/vectorial.c:1543
+#: Opcodes/gab/vectorial.c:1547
 #, c-format
 msgid "vexpv_i: ifn1 invalid table number %i"
 msgstr "vexpv_i : ifn1 numéro de table %i non valide"
 
-#: Opcodes/gab/vectorial.c:1548
+#: Opcodes/gab/vectorial.c:1552
 #, c-format
 msgid "vexpv_i: ifn2 invalid table number %i"
 msgstr "vexpv_i : ifn2 numéro de table %i non valide"
 
-#: Opcodes/gab/vectorial.c:1570
+#: Opcodes/gab/vectorial.c:1574
 msgid "vexpv_i: ifn1 length exceeded"
 msgstr "vexpv_i : la longueur de ifn1 a été dépassée"
 
-#: Opcodes/gab/vectorial.c:1588
+#: Opcodes/gab/vectorial.c:1592
 msgid "vexpv_i: ifn2 length exceeded"
 msgstr "vexpv_i : la longueur de ifn2 a été dépassée"
 
-#: Opcodes/gab/vectorial.c:1625
+#: Opcodes/gab/vectorial.c:1629
 msgid "vmap: Error: ifn1 and ifn2 can not be the same"
 msgstr "vmap : Erreur : ifn1 et ifn2 ne peuvent pas être les mêmes"
 
-#: Opcodes/gab/vectorial.c:1630
-#, c-format
-msgid "vmap: ifn1 invalid table number %i"
-msgstr "vmap : ifn1 numéro de table %i non valide"
+#: Opcodes/gab/vectorial.c:1634
+#, c-format
+msgid "vmap: ifn1 invalid table number %i"
+msgstr "vmap : ifn1 numéro de table %i non valide"
+
+#: Opcodes/gab/vectorial.c:1639
+#, c-format
+msgid "vmap: ifn2 invalid table number %i"
+msgstr "vmap : ifn2 numéro de table %i non valide"
+
+#: Opcodes/gab/vectorial.c:1661
+msgid "vmap: ifn1 length exceeded"
+msgstr "vmap : la longueur de ifn1 a été dépassée"
+
+#: Opcodes/gab/vectorial.c:1678
+msgid "vmap: ifn2 length exceeded"
+msgstr "vmap : la longueur de ifn2 a été dépassée"
+
+#: Opcodes/gab/vectorial.c:1698
+msgid "vectorop: invalid num of elements"
+msgstr "vectorop : nombre d'éléments non valide"
+
+#: Opcodes/gab/vectorial.c:1727
+msgid "vport: invalid table length or num of elements"
+msgstr "vport : longueur de table ou nombre d'éléments non valides"
+
+#: Opcodes/gab/vectorial.c:1730
+msgid "vport: invalid table"
+msgstr "vport : table non valide"
+
+#: Opcodes/gab/vectorial.c:1735
+msgid "vport: invalid init table length or num of elements"
+msgstr "vport : longueur de table init ou nombre d'éléments non valides"
+
+#: Opcodes/gab/vectorial.c:1738
+msgid "vport: invalid init table"
+msgstr "vport : table non valide"
+
+#: Opcodes/gab/vectorial.c:1875
+#, c-format
+msgid "vrandh: Seeding from current time %lu\n"
+msgstr "vrandh : graine à partir de l'horloge %lu\n"
+
+#: Opcodes/gab/vectorial.c:1888
+msgid "vrandh: Invalid table."
+msgstr "vrandh : table non valide."
+
+#: Opcodes/gab/vectorial.c:1891
+msgid "vrandh: idstoffset is greater than table length."
+msgstr "vrandh : idstoffset est supérieur à la longueur de la table."
+
+#: Opcodes/gab/vectorial.c:1896
+msgid "randh: Table length exceeded, last elements discarded."
+msgstr "randh : longeur de la table dépassée, derniers éléments ignoré."
+
+#: Opcodes/gab/vectorial.c:1975
+#, c-format
+msgid "vrandi: Seeding from current time %lu\n"
+msgstr "vrandi : graine à partir de l'horloge %lu\n"
+
+#: Opcodes/gab/vectorial.c:1987
+msgid "vrandi: Invalid table."
+msgstr "vrandi : table non valide."
+
+#: Opcodes/gab/vectorial.c:1990
+msgid "vrandi: idstoffset is greater thantable length."
+msgstr "vrandi : idstoffset est supérieur à la longueur de la table."
+
+#: Opcodes/gab/vectorial.c:1995
+msgid "vrandi: Table length exceeded, last elements discarded."
+msgstr "vrandi : longueur de la table dépassée, derniers éléments ignorés."
+
+#: Opcodes/gab/vectorial.c:2077 Opcodes/gab/vectorial.c:2084
+#: Opcodes/gab/vectorial.c:2091
+msgid "vecdelay: invalid num of elements"
+msgstr "vecdelay : nombre d'éléments non valide"
+
+#: Opcodes/gab/vectorial.c:2079
+msgid "vecdly: invalid output table"
+msgstr "vecdly : table de sortie non valide"
+
+#: Opcodes/gab/vectorial.c:2086
+msgid "vecdly: invalid input table"
+msgstr "vecdly : table d'entrée non valide"
+
+#: Opcodes/gab/vectorial.c:2093
+msgid "vecdly: invalid delay table"
+msgstr "vecdly : table de délai non valide"
+
+#: Opcodes/gab/vectorial.c:2138
+msgid "vecdly: not initialised"
+msgstr "vecdly : non initialisé"
+
+#: Opcodes/gab/vectorial.c:2181
+msgid "vlinseg/vexpseg: invalid num. of elements"
+msgstr "vlinseg/vexpseg : nombre d'éléments non valide"
+
+#: Opcodes/gab/vectorial.c:2223 Opcodes/vpvoc.c:118
+msgid "tableseg: not initialised"
+msgstr "tableseg : non initialisé"
+
+#: Opcodes/gab/vectorial.c:2253 Opcodes/vpvoc.c:146
+msgid "tablexseg: not initialised"
+msgstr "tablexseg : non initialisé"
 
-#: Opcodes/gab/vectorial.c:1635
-#, c-format
-msgid "vmap: ifn2 invalid table number %i"
-msgstr "vmap : ifn2 numéro de table %i non valide"
+#: Opcodes/gab/vectorial.c:2406
+msgid "vdelayk: not initialised"
+msgstr "vdelayk : non initialisé"
 
-#: Opcodes/gab/vectorial.c:1657
-msgid "vmap: ifn1 length exceeded"
-msgstr "vmap : la longueur de ifn1 a été dépassée"
+#: Opcodes/gab/vectorial.c:2439 Opcodes/gab/vectorial.c:2445
+msgid "cella: invalid num of elements"
+msgstr "cella : nombre d'éléments non valide"
 
-#: Opcodes/gab/vectorial.c:1674
-msgid "vmap: ifn2 length exceeded"
-msgstr "vmap : la longueur de ifn2 a été dépassée"
+#: Opcodes/gab/vectorial.c:2441
+msgid "cella: invalid output table"
+msgstr "cella : table de sortie non valide"
 
-#: Opcodes/gab/vectorial.c:1870
-#, c-format
-msgid "vrandh: Seeding from current time %lu\n"
-msgstr "vrandh : graine à partir de l'horloge %lu\n"
+#: Opcodes/gab/vectorial.c:2448
+msgid "cella: invalid initial state table"
+msgstr "cella : table d'état initial non valide"
 
-#: Opcodes/gab/vectorial.c:1968
-#, c-format
-msgid "vrandi: Seeding from current time %lu\n"
-msgstr "vrandi : graine à partir de l'horloge %lu\n"
+#: Opcodes/gab/vectorial.c:2452
+msgid "cella: invalid rule table"
+msgstr "cella : table de règle non valide"
 
-#: Opcodes/grain4.c:57
+#: Opcodes/grain4.c:59
 msgid "granule_set: Unable to find function table"
 msgstr "granule_set : impossible de trouver la table de fonction"
 
-#: Opcodes/grain4.c:67
+#: Opcodes/grain4.c:69
 msgid "granule_set: Unable to find function table for envelope"
 msgstr ""
 "granule_set : impossible de trouver la table de fonction pour l'enveloppe"
 
-#: Opcodes/grain4.c:73
+#: Opcodes/grain4.c:75
 msgid "granule_set: Too many voices"
 msgstr "granule_set : trop de voix"
 
-#: Opcodes/grain4.c:76
+#: Opcodes/grain4.c:78
 msgid "granule_set: iratio must be greater then 0"
 msgstr "granule_set : iratio doit être supérieur à 0"
 
-#: Opcodes/grain4.c:80
+#: Opcodes/grain4.c:82
 msgid "granule_set: imode must be -1, 0 or +1"
 msgstr "granule_set : imode doit valoir -1, 0 ou +1"
 
-#: Opcodes/grain4.c:84
+#: Opcodes/grain4.c:86
 msgid "granule_set: Illegal ithd, must be greater than zero"
 msgstr "granule_set : ithd illégal, doit être supérieur à zéro"
 
-#: Opcodes/grain4.c:89
+#: Opcodes/grain4.c:91
 msgid "granule_set: ipshift must be integer between 0 and 4"
 msgstr "granule_set : ipshift doit être un entier entre 0 et 4"
 
-#: Opcodes/grain4.c:94
+#: Opcodes/grain4.c:96
 msgid "granule_set: Not enough voices for the number of pitches"
 msgstr "granule_set : pas assez de voix pour le nombre de hauteurs"
 
-#: Opcodes/grain4.c:101
+#: Opcodes/grain4.c:103
 msgid "granule_set: ipitch1 must be greater then zero"
 msgstr "granule_set : ipitch1 doit être supérieur à zéro"
 
-#: Opcodes/grain4.c:106
+#: Opcodes/grain4.c:108
 msgid "granule_set: ipitch2 must be greater then zero"
 msgstr "granule_set : ipitch2 doit être supérieur à zéro"
 
-#: Opcodes/grain4.c:111
+#: Opcodes/grain4.c:113
 msgid "granule_set: ipitch3 must be greater then zero"
 msgstr "granule_set : ipitch3 doit être supérieur à zéro"
 
-#: Opcodes/grain4.c:116
+#: Opcodes/grain4.c:118
 msgid "granule_set: ipitch4 must be greater then zero"
 msgstr "granule_set : ipitch4 doit être supérieur à zéro"
 
-#: Opcodes/grain4.c:121
+#: Opcodes/grain4.c:123
 msgid "granule_set: must be positive and less than function table length"
 msgstr ""
 "granule_set : doit être positif et inférieur à la longueur de la table de "
 "fonction"
 
-#: Opcodes/grain4.c:125
+#: Opcodes/grain4.c:127
 msgid "granule_set: igskip_os must be greater then 0"
 msgstr "granule_set : igskip_os doit être supérieur à 0"
 
-#: Opcodes/grain4.c:134
+#: Opcodes/grain4.c:136
 msgid "granule_set: kgap must be greater then 0"
 msgstr "granule_set : kgap doit être supérieur à 0"
 
-#: Opcodes/grain4.c:138
+#: Opcodes/grain4.c:140
 #, c-format
 msgid "granule_set: igap_os must be 0%% to 100%%"
 msgstr "granule_set : igap_os doit être entre 0%% et 100%%"
 
-#: Opcodes/grain4.c:142
+#: Opcodes/grain4.c:144
 msgid "granule_set: kgsize must be greater then 0"
 msgstr "granule_set : kgsize doit être supérieur à 0"
 
-#: Opcodes/grain4.c:146
+#: Opcodes/grain4.c:148
 #, c-format
 msgid "granule_set: igsize_os must be 0%% to 100%%"
 msgstr "granule_set : igsize_os doit être entre 0%% et 100%%"
 
-#: Opcodes/grain4.c:152
+#: Opcodes/grain4.c:154
 msgid "granule_set: Illegal value of iatt and/or idec"
 msgstr "granule_set : valeur illégale de iatt et/ou de idec"
 
-#: Opcodes/grain4.c:236
+#: Opcodes/grain4.c:238
 msgid "granule_set: Illegal combination of igskip and ilength"
 msgstr "granule_set : combinaison illégale de igskip et de ilength"
 
-#: Opcodes/grain4.c:243
+#: Opcodes/grain4.c:245
 #, c-format
 msgid ""
 "granule_set: WARNING * ilength may be too short * \n"
@@ -6931,7 +6785,7 @@ msgstr ""
 "              prendre en considération igsize_os et igskip_os.\n"
 "ilength vaut %f sec, kgsize vaut %f sec\n"
 
-#: Opcodes/grain4.c:418
+#: Opcodes/grain4.c:419
 msgid "grain4: not initialised"
 msgstr "grain4 : non initialisé"
 
@@ -6943,19 +6797,19 @@ msgstr "grain : densité de grain non valide"
 msgid "grain: not initialised"
 msgstr "grain : non initialisé"
 
-#: Opcodes/harmon.c:224
+#: Opcodes/harmon.c:226
 msgid "harm signal has positive lead\n"
 msgstr "le signal de l'harmonizer a une conduite positive\n"
 
-#: Opcodes/harmon.c:231
+#: Opcodes/harmon.c:233
 msgid "harm signal has negative lead\n"
 msgstr "le signal de l'harmonizer a une conduite négative\n"
 
-#: Opcodes/harmon.c:361
+#: Opcodes/harmon.c:363
 msgid "harmon234: out of range\n"
 msgstr "harmon234 : hors limites\n"
 
-#: Opcodes/hrtferX.c:79
+#: Opcodes/hrtferX.c:81
 #, c-format
 msgid ""
 "Orchestra sampling rate is not compatible with HRTF.\n"
@@ -6964,7 +6818,7 @@ msgstr ""
 "Le taux d'évhantillonnage de l'orchestre n'est pas compatible avec HRTF.\n"
 "Il devrait valoir %d... fin du traitement."
 
-#: Opcodes/hrtferX.c:87
+#: Opcodes/hrtferX.c:89
 msgid ""
 "\n"
 "Last argument must be the string 'HRTFcompact' ...correcting.\n"
@@ -6972,34 +6826,33 @@ msgstr ""
 "\n"
 "Le dernier argument doit être la chaîne 'HRTFcompact' ... correction.\n"
 
-#: Opcodes/hrtferX.c:489
+#: Opcodes/hrtferX.c:494
 msgid "hrtfer: not initialised"
 msgstr "hrtfer : non initialisé"
 
-#: Opcodes/hrtfopcodes.c:232
+#: Opcodes/hrtfopcodes.c:260 Opcodes/hrtfopcodes.c:1434
+#: Opcodes/hrtfearly.c:300 Opcodes/hrtfreverb.c:257
 #, c-format
 msgid ""
 "\n"
-"Orchestra sampling rate is not compatible with HRTF data files\n"
-"Should be %.0f, see Csound help for object\n"
+"\n"
+"WARNING!!:\n"
+"Orchestra SR not compatible with HRTF processing SR of: %.0f\n"
 "\n"
 msgstr ""
 "\n"
-"Le taux d'évhantillonnage de l'orchestre n'est pas compatible avec les "
-"fichiers de données HRTF.\n"
-"Il devrait valoir %.0f, voir l'aide de Csound à ce sujet\n"
+"\n"
+"AVERTISSEMENT !! :\n"
+"SR de l'orchestre incompatible avec le SR du traitement HRTF de : %.0f\n"
 "\n"
 
-#: Opcodes/hrtfopcodes.c:251 Opcodes/hrtfopcodes.c:275
-#: Opcodes/hrtfopcodes.c:298 Opcodes/hrtfopcodes.c:1257
-#: Opcodes/hrtfopcodes.c:1280 Opcodes/hrtfopcodes.c:1303
-#: Opcodes/hrtfopcodes.c:1854 Opcodes/hrtfopcodes.c:1876
-#: Opcodes/hrtfopcodes.c:1898
+#: Opcodes/hrtfopcodes.c:287 Opcodes/hrtfopcodes.c:1461
+#: Opcodes/hrtfopcodes.c:2071 Opcodes/hrtfearly.c:327 Opcodes/hrtfreverb.c:300
 msgid ""
 "\n"
 "\n"
 "\n"
-"cannot load left data file, exiting\n"
+"Cannot load left data file, exiting\n"
 "\n"
 msgstr ""
 "\n"
@@ -7008,16 +6861,13 @@ msgstr ""
 "impossible de charger le fichier des données de gauche, abandon\n"
 "\n"
 
-#: Opcodes/hrtfopcodes.c:259 Opcodes/hrtfopcodes.c:283
-#: Opcodes/hrtfopcodes.c:306 Opcodes/hrtfopcodes.c:1265
-#: Opcodes/hrtfopcodes.c:1288 Opcodes/hrtfopcodes.c:1311
-#: Opcodes/hrtfopcodes.c:1862 Opcodes/hrtfopcodes.c:1884
-#: Opcodes/hrtfopcodes.c:1906
+#: Opcodes/hrtfopcodes.c:294 Opcodes/hrtfopcodes.c:1468
+#: Opcodes/hrtfopcodes.c:2078 Opcodes/hrtfearly.c:334 Opcodes/hrtfreverb.c:306
 msgid ""
 "\n"
 "\n"
 "\n"
-"cannot load right data file, exiting\n"
+"Cannot load right data file, exiting\n"
 "\n"
 msgstr ""
 "\n"
@@ -7026,41 +6876,40 @@ msgstr ""
 "impossible de charger le fichier des données de droite, abandon\n"
 "\n"
 
-#: Opcodes/hrtfopcodes.c:313 Opcodes/hrtfopcodes.c:1912
+#: Opcodes/hrtfopcodes.c:690 Opcodes/hrtfearly.c:1241
 msgid ""
 "\n"
-"\n"
-"\n"
-" Sampling rate not supported, exiting\n"
+"WARNING: fades are overlapping: this could lead to noise: reduce fade size "
+"or change trajectory\n"
 "\n"
 msgstr ""
 "\n"
-"\n"
-"\n"
-" Taux d'échantillonnage non supporté, abandon\n"
+"AVERTISSEMENT : les fondus se chevauchent : ceci peut provoquer du bruit : "
+"réduisez la taille des fondus ou changez la trajectoire\n"
 "\n"
 
-#: Opcodes/hrtfopcodes.c:600
+#: Opcodes/hrtfopcodes.c:2052
+#, c-format
 msgid ""
-"fades are overlapping: this could lead to noise: reduce fade size or change "
-"trajectory\n"
+"\n"
+"\n"
+"WARNING!!:\n"
+"Orchestra SR not compatiblewith HRTF processing SR of: %.0f\n"
 "\n"
 msgstr ""
-"les fondus se chevauchent : ceci peut provoquer du bruit : réduisez la "
-"taille des fondus ou changez la trajectoire\n"
+"\n"
+"\n"
+"AVERTISSEMENT !! :\n"
+"SR de l'orchestre incompatible avec le SR du traitement HRTF de : %.0f\n"
 "\n"
 
-#: Opcodes/hrtfopcodes.c:1239 Opcodes/hrtfopcodes.c:1837
-#, c-format
+#: Opcodes/hrtfreverb.c:832
 msgid ""
-"Orchestra sampling rate is not compatible with HRTF data files\n"
-"Should be %.0f, see Csound help for object\n"
 "\n"
+"warning, approaching instability, fixed with a flat late reverb!"
 msgstr ""
-"Le taux d'échantillonnage de l'orchestre n'est pas compatible avec les "
-"fichiers de données HRTF.\n"
-"Il devrait valoir %.0f, voir l'aide de Csound à ce sujet\n"
 "\n"
+"avertissement, proche de l'instabilité, résolu avec une réverbération tardive plate !"
 
 #: Opcodes/ifd.c:74
 msgid "pvsifd: fftsize should be an integral multiple of hopsize"
@@ -7085,10 +6934,9 @@ msgid "imageload: file %s is not in PNG format.\n"
 msgstr "imageload : le fichier %s n'est pas au format PNG.\n"
 
 #: Opcodes/imageOpcodes.c:119 Opcodes/imageOpcodes.c:126
-#: Opcodes/imageOpcodes.c:134 Opcodes/imageOpcodes.c:165
-#: Opcodes/imageOpcodes.c:174 Opcodes/imageOpcodes.c:188
-#: Opcodes/imageOpcodes.c:291 Opcodes/imageOpcodes.c:298
-#: Opcodes/imageOpcodes.c:311
+#: Opcodes/imageOpcodes.c:165 Opcodes/imageOpcodes.c:174
+#: Opcodes/imageOpcodes.c:188 Opcodes/imageOpcodes.c:291
+#: Opcodes/imageOpcodes.c:298 Opcodes/imageOpcodes.c:311
 msgid "imageload: out of memory.\n"
 msgstr "imageload : dépassement mémoire.\n"
 
@@ -7110,62 +6958,62 @@ msgstr ""
 "Impossible de créer le client Jack \"%s\" -- le serveur Jack \"%s\" est-il "
 "actif ? Etat : %d\n"
 
-#: Opcodes/jacko.cpp:543
+#: Opcodes/jacko.cpp:545
 #, c-format
 msgid "Created Jack client \"%s\" for Jack server \"%s\".\n"
 msgstr "Client Jack \"%s\" créé pour le serveur Jack \"%s\".\n"
 
-#: Opcodes/jacko.cpp:548
+#: Opcodes/jacko.cpp:551
 #, c-format
 msgid "Jack buffer size %d != Csound ksmps %d, exiting...\n"
 msgstr "Taille du tampon Jack %d != Csound ksmps %d, sortie...\n"
 
-#: Opcodes/jacko.cpp:556
+#: Opcodes/jacko.cpp:559
 #, c-format
 msgid "Jack sampling rate %d != Csound sr %d, exiting...\n"
 msgstr "Taux d'échantillonnage de Jack %d != Csound sr %d, sortie...\n"
 
-#: Opcodes/jacko.cpp:567
+#: Opcodes/jacko.cpp:570
 #, c-format
 msgid "Activated Jack client \"%s\".\n"
 msgstr "Client Jack activé \"%s\".\n"
 
-#: Opcodes/jacko.cpp:571
+#: Opcodes/jacko.cpp:574
 #, c-format
 msgid "Failed to activate Jack client \"%s\": status %d.\n"
 msgstr "L'activation du client Jack \"%s\" a échoué : état %d.\n"
 
-#: Opcodes/jacko.cpp:586
+#: Opcodes/jacko.cpp:589
 msgid "BEGAN JackoState::close()...\n"
 msgstr "DEBUT de JackoState::close()...\n"
 
-#: Opcodes/jacko.cpp:622
+#: Opcodes/jacko.cpp:629
 msgid "ENDED JackoState::close().\n"
 msgstr "FIN de JackoState::close().\n"
 
-#: Opcodes/jacko.cpp:876
+#: Opcodes/jacko.cpp:892
 #, c-format
 msgid "Failed to set Jack freewheeling mode to \"%s\": error %d.\n"
 msgstr "La mise de Jack en mode roue libre \"%s\" a échoué : erreur %d.\n"
 
-#: Opcodes/jacko.cpp:878
+#: Opcodes/jacko.cpp:895
 #, c-format
 msgid "Set Jack freewheeling mode to \"%s\".\n"
 msgstr "Jack mis en mode roue libre \"%s\".\n"
 
-#: Opcodes/jacko.cpp:893
+#: Opcodes/jacko.cpp:911
 #, c-format
 msgid "Turned Jack connections \"%s\".\n"
 msgstr "Connexions Jack \"%s\".\n"
 
-#: Opcodes/jacko.cpp:934 Opcodes/jacko.cpp:1034 Opcodes/jacko.cpp:1134
-#: Opcodes/jacko.cpp:1200
+#: Opcodes/jacko.cpp:955 Opcodes/jacko.cpp:1062 Opcodes/jacko.cpp:1169
+#: Opcodes/jacko.cpp:1241
 #, c-format
 msgid "Could not create Jack port \"%s\".\n"
 msgstr "Impossible de créer le port de Jack \"%s\".\n"
 
-#: Opcodes/jacko.cpp:946 Opcodes/jacko.cpp:1046 Opcodes/jacko.cpp:1146
-#: Opcodes/jacko.cpp:1212
+#: Opcodes/jacko.cpp:969 Opcodes/jacko.cpp:1077 Opcodes/jacko.cpp:1184
+#: Opcodes/jacko.cpp:1255
 #, c-format
 msgid "Could not create Jack connection from \"%s\" to \"%s\": status %d.\n"
 msgstr "Impossible de créer la connexion Jack de \"%s\" à \"%s\" : état %d.\n"
@@ -7205,29 +7053,29 @@ msgstr "Le nombre de sorties doit être le même que celui du locsig précédent
 msgid "lorisread cannot load %s"
 msgstr "lorisread ne peut pas charger %s"
 
-#: Opcodes/loscilx.c:74 Opcodes/loscilx.c:178
+#: Opcodes/loscilx.c:76 Opcodes/loscilx.c:180
 #, c-format
 msgid "could not load '%s'"
 msgstr "impossible de charger '%s'"
 
-#: Opcodes/loscilx.c:88 Opcodes/loscilx.c:258
+#: Opcodes/loscilx.c:90 Opcodes/loscilx.c:260
 #, c-format
 msgid "invalid loop mode: %d"
 msgstr "mode de boucle non valide : %d"
 
-#: Opcodes/loscilx.c:170
+#: Opcodes/loscilx.c:172
 msgid "loscilx: invalid number of output arguments"
 msgstr "loscilx : nombre d'arguments de sortie non valide"
 
-#: Opcodes/loscilx.c:190 Opcodes/loscilx.c:219 Opcodes/pvlock.c:94
-#: Opcodes/pvlock.c:296 Opcodes/pvsbasic.c:460
+#: Opcodes/loscilx.c:192 Opcodes/loscilx.c:221 Opcodes/pvlock.c:118
+#: Opcodes/pvlock.c:320 Opcodes/pvsbasic.c:460
 msgid ""
 "number of output arguments inconsistent with number of sound file channels"
 msgstr ""
 "nombre d'arguments de sortie en contradiction avec le nombre de canaux du "
 "fichier son"
 
-#: Opcodes/loscilx.c:665
+#: Opcodes/loscilx.c:667
 msgid "loscilx: not initialised"
 msgstr "loscilx : non initialisé"
 
@@ -7235,11 +7083,11 @@ msgstr "loscilx : non initialisé"
 msgid "illegal order num. (min 1, max 10)"
 msgstr "numéro d'ordre illégal (min 1, max 10)"
 
-#: Opcodes/mandolin.c:80
+#: Opcodes/mandolin.c:81
 msgid "No table for Mandolin"
 msgstr "Aucune table pour la mandoline"
 
-#: Opcodes/mandolin.c:90
+#: Opcodes/mandolin.c:91
 msgid "No base frequency for mandolin"
 msgstr "Pas de fréquence de base pour la mandoline"
 
@@ -7270,40 +7118,40 @@ msgstr "msb du numéro de contrôleur illégal à la position n.%d"
 msgid "illegal lsb control number at position n.%d"
 msgstr "lsb du numéro de contrôleur illégal à la position n.%d"
 
-#: Opcodes/modal4.c:45
+#: Opcodes/modal4.c:46
 msgid "No table for Modal4 case"
 msgstr "Pas de table pour le cas de Modal4 "
 
-#: Opcodes/modal4.c:245
+#: Opcodes/modal4.c:246
 msgid "No table for Marimba strike"
 msgstr "Pas de table pour l'excitation du Marimba"
 
-#: Opcodes/modal4.c:284
+#: Opcodes/modal4.c:285
 msgid "striking three times here!!!\n"
 msgstr "trois frappes ici !!!\n"
 
-#: Opcodes/modal4.c:289
+#: Opcodes/modal4.c:290
 msgid "striking twice here!!\n"
 msgstr "deux frappes ici !!\n"
 
-#: Opcodes/modal4.c:359
+#: Opcodes/modal4.c:360
 msgid "No table for Vibraphone strike"
 msgstr "Pas de table pour l'excitation du Vibraphone"
 
-#: Opcodes/modal4.c:440
+#: Opcodes/modal4.c:441
 msgid "No table for Agogobell strike"
 msgstr "Pas de table pour l'excitation d'Agogobell"
 
 #: Opcodes/modmatrix.c:22
 msgid "modmatrix: "
-msgstr ""
+msgstr "modmatrix : "
 
-#: Opcodes/mp3in.c:92 Opcodes/mp3in.c:230
+#: Opcodes/mp3in.c:93 Opcodes/mp3in.c:231
 #, c-format
 msgid "mp3in: %s: failed to open file"
 msgstr "mp3in : %s : l'ouverture du fichier a échoué"
 
-#: Opcodes/mp3in.c:139
+#: Opcodes/mp3in.c:140
 #, c-format
 msgid "mp3in: file sample rate (%d) != orchestra sr (%d)\n"
 msgstr ""
@@ -7546,9 +7394,9 @@ msgid "Time stamp is two values"
 msgstr "Le timestamp comprend deux valeurs"
 
 #: Opcodes/OSC.c:240
-#, fuzzy, c-format
+#, c-format
 msgid "ftable %.2f does not exist"
-msgstr "la ftable n'existe pas"
+msgstr "la ftable %.2f n'existe pas"
 
 #: Opcodes/OSC.c:249
 #, c-format
@@ -7600,7 +7448,7 @@ msgstr "impossible d'ouvrir p5glove\n"
 msgid "No open glove"
 msgstr "Pas de gant ouvert"
 
-#: Opcodes/pan2.c:43
+#: Opcodes/pan2.c:45
 msgid "Unknown panning type"
 msgstr "Type de panoramique inconnu"
 
@@ -7616,154 +7464,160 @@ msgstr "partikkelsync : l'id de l'opcode doit être un entier non nul"
 msgid "partikkelsync: could not find opcode id"
 msgstr "partikkelsync : impossible de trouver l'id de l'opcode"
 
-#: Opcodes/physmod.c:121
+#: Opcodes/physmod.c:122
 msgid "No table for Clarinet"
 msgstr "Aucune table pour la clarinette"
 
-#: Opcodes/physmod.c:129
+#: Opcodes/physmod.c:130
 msgid "No base frequency for clarinet -- assuming 50Hz\n"
 msgstr ""
 "Pas de fréquence de base pour la clarinette -- on suppose qu'elle vaut 50 "
 "Hz\n"
 
-#: Opcodes/physmod.c:283
+#: Opcodes/physmod.c:284
 msgid "No table for Flute"
 msgstr "Aucune table pour la flûte"
 
-#: Opcodes/physmod.c:291
+#: Opcodes/physmod.c:292
 msgid "No base frequency for flute -- assumed to be 50Hz\n"
 msgstr ""
 "Pas de fréquence de base pour la flûte -- on suppose qu'elle vaut 50 Hz\n"
 
-#: Opcodes/physmod.c:481
+#: Opcodes/physmod.c:482
 msgid "No table for wgbow vibrato"
 msgstr "Pas de table pour le vibrato de wgbow"
 
-#: Opcodes/physmod.c:689
+#: Opcodes/physmod.c:490
+msgid "unknown lowest frequency for bowed string -- assuming 50Hz\n"
+msgstr ""
+"La fréquence la plus basse pour la corde frottée est inconnue -- on suppose "
+"qu'elle vaut 50 Hz\n"
+
+#: Opcodes/physmod.c:690
 msgid "DlineA not initialised"
 msgstr "DlineA non initialisé"
 
-#: Opcodes/physmod.c:756
+#: Opcodes/physmod.c:757
 msgid "No table for Brass"
 msgstr "Pas de table pour Brass"
 
-#: Opcodes/physmod.c:765
+#: Opcodes/physmod.c:766
 msgid "No base frequency for brass -- assumed to be 50Hz\n"
 msgstr "Pas de fréquence de base pour brass -- on suppose qu'elle vaut 50 Hz\n"
 
-#: Opcodes/physutil.c:137 Opcodes/physutil.c:312 Opcodes/physutil.c:324
-#: Opcodes/physutil.c:345
+#: Opcodes/physutil.c:138 Opcodes/physutil.c:313 Opcodes/physutil.c:325
+#: Opcodes/physutil.c:346
 msgid "negative rates not allowed!!, correcting\n"
 msgstr "les vitesses négatives sont interdites !!, correction\n"
 
-#: Opcodes/physutil.c:186
+#: Opcodes/physutil.c:187
 #, c-format
 msgid "Envelope: value=%f target=%f rate=%f state=%d\n"
 msgstr "Enveloppe : valeur=%f cible=%f vitesse=%f état=%d\n"
 
-#: Opcodes/physutil.c:335
+#: Opcodes/physutil.c:336
 msgid "Sustain level out of range!!, correcting\n"
 msgstr "Niveau d'entretien hors limites !!, correction\n"
 
-#: Opcodes/physutil.c:356 Opcodes/physutil.c:366 Opcodes/physutil.c:376
+#: Opcodes/physutil.c:357 Opcodes/physutil.c:367 Opcodes/physutil.c:377
 msgid "negative times not allowed!!, correcting\n"
 msgstr "les valeurs de temps négatives sont interdites !!, correction\n"
 
-#: Opcodes/pitch0.c:37
+#: Opcodes/pitch0.c:38
 #, c-format
 msgid "Muting new instances of instr %d\n"
 msgstr "Muting des nouvelles instances de l'instr %d\n"
 
-#: Opcodes/pitch0.c:40
+#: Opcodes/pitch0.c:41
 #, c-format
 msgid "Allowing instrument %d to start\n"
 msgstr "L'instrument %d est autorisé à démarrer\n"
 
-#: Opcodes/pitch.c:84 Opcodes/spectra.c:78
+#: Opcodes/pitch.c:85 Opcodes/spectra.c:80
 msgid "illegal iocts"
 msgstr "iocts illégal"
 
-#: Opcodes/pitch.c:86 Opcodes/spectra.c:80
+#: Opcodes/pitch.c:87 Opcodes/spectra.c:82
 msgid "illegal ifrqs"
 msgstr "ifrqs illégal"
 
-#: Opcodes/pitch.c:180 Opcodes/spectra.c:584
+#: Opcodes/pitch.c:181 Opcodes/spectra.c:586
 msgid "illegal no of partials"
 msgstr "nombre de partiels illégal"
 
-#: Opcodes/pitch.c:205
+#: Opcodes/pitch.c:206
 msgid "per octave rolloff too steep"
 msgstr "pente par octave trop raide"
 
-#: Opcodes/pitch.c:219 Opcodes/spectra.c:625
+#: Opcodes/pitch.c:220 Opcodes/spectra.c:627
 msgid "illegal lo-hi values"
 msgstr "valeurs lo-hi illégales"
 
-#: Opcodes/pitch.c:454
+#: Opcodes/pitch.c:455
 msgid "pitch: not initialised"
 msgstr "pitch : non initialisé"
 
-#: Opcodes/pitch.c:463
+#: Opcodes/pitch.c:464
 msgid "Must have even number of arguments in mac\n"
 msgstr "Il doit y avoir un nombre pair d'arguments dans mac\n"
 
-#: Opcodes/pitch.c:552
+#: Opcodes/pitch.c:553
 msgid "clockread: clock still running, call clockoff first"
 msgstr "clockread : l'horloge est toujours active, appeler clockoff d'abord"
 
-#: Opcodes/pitch.c:578
+#: Opcodes/pitch.c:579
 msgid "adsynt: wavetable not found!"
 msgstr "adsynt : table d'onde non trouvée !"
 
-#: Opcodes/pitch.c:591
+#: Opcodes/pitch.c:592
 msgid "adsynt: freqtable not found!"
 msgstr "adsynt : table de fréq non trouvée !"
 
-#: Opcodes/pitch.c:596
+#: Opcodes/pitch.c:597
 msgid "adsynt: partial count is greater than freqtable size!"
 msgstr ""
 "adsynt : le nombre de partiels est supérieur à la taille de la table de "
 "fréq !"
 
-#: Opcodes/pitch.c:604
+#: Opcodes/pitch.c:605
 msgid "adsynt: amptable not found!"
 msgstr "adsynt : table d'amp non trouvée !"
 
-#: Opcodes/pitch.c:609
+#: Opcodes/pitch.c:610
 msgid "adsynt: partial count is greater than amptable size!"
 msgstr ""
 "adsynt : le nombre de partiels est supérieur à la taille de la table d'amp !"
 
-#: Opcodes/pitch.c:640
+#: Opcodes/pitch.c:641
 msgid "adsynt: not initialised"
 msgstr "adsynt : non initialisé"
 
-#: Opcodes/pitch.c:716
+#: Opcodes/pitch.c:717
 msgid "hsboscil: not initialised"
 msgstr "hsboscil : non initialisé"
 
-#: Opcodes/pitch.c:799
+#: Opcodes/pitch.c:800
 msgid "pitchamdf: maxcps must be > mincps !"
 msgstr "pitchamdf : maxcps doit être > mincps !"
 
-#: Opcodes/pitch.c:945
+#: Opcodes/pitch.c:946
 msgid "pitchamdf: not initialised"
 msgstr "pitchamdf : non initialisé"
 
-#: Opcodes/pitch.c:1125 Opcodes/pitch.c:1152
+#: Opcodes/pitch.c:1126 Opcodes/pitch.c:1153
 msgid "phasorbnk: not initialised"
 msgstr "phasorbnk : non initialisé"
 
-#: Opcodes/pitch.c:1214
+#: Opcodes/pitch.c:1215
 msgid "pinkish: Invalid method code"
 msgstr "pinkish : code de méthode non valide"
 
-#: Opcodes/pitch.c:1225
+#: Opcodes/pitch.c:1226
 msgid "pinkish: Filter method requires a-rate (noise) input"
 msgstr ""
 "pinkish : la méthode de filtrage nécessite une entrée (bruit) de taux-a"
 
-#: Opcodes/pitch.c:1348
+#: Opcodes/pitch.c:1349
 #, c-format
 msgid ""
 "pinkish: Gardner method requires 4-%d bands. Default %ld substituted for "
@@ -7772,46 +7626,45 @@ msgstr ""
 "pinkish : la méthode de Gardner nécessitre 4-%d bandes. La valeur par défaut "
 "%ld a été substituée à %d.\n"
 
-#: Opcodes/pitch.c:1731
+#: Opcodes/pitch.c:1733
 msgid "Incorrect argument count in transeg"
 msgstr "Nombre d'arguments incorrect dans transeg"
 
-#: Opcodes/pitch.c:1782
-#, fuzzy
+#: Opcodes/pitch.c:1784
 msgid "Incorrect argument count in transegb"
-msgstr "Nombre d'arguments incorrect dans transeg"
+msgstr "Nombre d'arguments incorrect dans transegb"
 
-#: Opcodes/pitch.c:1832 Opcodes/pitch.c:1971
+#: Opcodes/pitch.c:1834 Opcodes/pitch.c:1977
 msgid "Error: transeg not initialised (krate)\n"
 msgstr "Erreur : transeg non initialisé (taux-k)\n"
 
-#: Opcodes/pitch.c:1867 Opcodes/pitch.c:2013
+#: Opcodes/pitch.c:1869 Opcodes/pitch.c:2027
 msgid "transeg: not initialised (arate)\n"
 msgstr "transeg : non initialisé (taux-a)\n"
 
-#: Opcodes/pitch.c:1921
+#: Opcodes/pitch.c:1924
 msgid "Incorrect argument count in transegr"
 msgstr "Nombre d'arguments incorrect dans transegr"
 
-#: Opcodes/pitch.c:2269
+#: Opcodes/pitch.c:2294
 msgid "median: not initialised (arate)\n"
 msgstr "median : non initialisé (taux-a)\n"
 
-#: Opcodes/pitch.c:2273 Opcodes/pitch.c:2321
+#: Opcodes/pitch.c:2298 Opcodes/pitch.c:2345
 #, c-format
 msgid "median: window (%d)larger than maximum(%d); truncated"
 msgstr "median : fenêtre (%d) plus grande que le maximum (%d) ; tronquée"
 
-#: Opcodes/pitch.c:2317
+#: Opcodes/pitch.c:2341
 msgid "median: not initialised (krate)\n"
 msgstr "median non initialisé (taux-k)\n"
 
-#: Opcodes/pitchtrack.c:369
+#: Opcodes/pitchtrack.c:370
 #, c-format
 msgid "ptrack: FFT size out of range; using %d\n"
 msgstr "ptrack : taille de TFR hors limites ; on utilise %d\n"
 
-#: Opcodes/pitchtrack.c:382
+#: Opcodes/pitchtrack.c:383
 #, c-format
 msgid "ptrack: FFT size not a power of 2; using %d\n"
 msgstr ""
@@ -7830,7 +7683,7 @@ msgstr "Mémoire tampon non allouée !"
 msgid "Error: %s, %s"
 msgstr "Erreur : %s, %s"
 
-#: Opcodes/ppp.c:20 Opcodes/pvlock.c:454 Opcodes/pvsband.c:46
+#: Opcodes/ppp.c:20 Opcodes/pvlock.c:478 Opcodes/pvsband.c:46
 #: Opcodes/pvsbasic.c:575 Opcodes/pvsbasic.c:880 Opcodes/pvsbasic.c:1080
 #: Opcodes/pvsbasic.c:1180 Opcodes/pvsbasic.c:1395 Opcodes/pvsbasic.c:1593
 #: Opcodes/pvsbasic.c:1756 Opcodes/pvslock.c:20
@@ -7849,62 +7702,62 @@ msgstr "psynth : la première entrée n'est pas au format TRACKS\n"
 msgid "psynth: function table not found\n"
 msgstr "psynth : table de fonction non trouvée\n"
 
-#: Opcodes/psynth.c:569 Opcodes/psynth.c:662
+#: Opcodes/psynth.c:567 Opcodes/psynth.c:660
 msgid "Input not in TRACKS format\n"
 msgstr "L'entrée n'est pas au format TRACKS\n"
 
-#: Opcodes/psynth.c:767
+#: Opcodes/psynth.c:765
 msgid "trsplit: input not in TRACKS format\n"
 msgstr "trsplit : l'entrée n'est pas au format TRACKS\n"
 
-#: Opcodes/psynth.c:863 Opcodes/psynth.c:1027
+#: Opcodes/psynth.c:861 Opcodes/psynth.c:1023
 msgid "trmix: first input not in TRACKS format\n"
 msgstr "trmix : la première entrée n'est pas au format TRACKS\n"
 
-#: Opcodes/psynth.c:868 Opcodes/psynth.c:1032
+#: Opcodes/psynth.c:866 Opcodes/psynth.c:1028
 msgid "trmix: second input not in TRACKS format\n"
 msgstr "trmix : la seconde entrée n'est pas au format TRACKS\n"
 
-#: Opcodes/psynth.c:943
+#: Opcodes/psynth.c:939
 msgid "trfil: input not in TRACKS format\n"
 msgstr "trfil : l'entrée n'est pas au format TRACKS\n"
 
-#: Opcodes/psynth.c:948
+#: Opcodes/psynth.c:944
 msgid "trfil: could not find function table\n"
 msgstr "trfil : impossible de trouver la table de fonction\n"
 
-#: Opcodes/psynth.c:1135
+#: Opcodes/psynth.c:1131
 msgid "binit: first input not in TRACKS format\n"
 msgstr "binit : la première entrée n'est pas au format TRACKS\n"
 
-#: Opcodes/pvadd.c:153
+#: Opcodes/pvadd.c:150
 msgid "PVADD ktimpnt truncated to last frame"
 msgstr "PVADD ktimpnt a été tronqué à la dernière trame"
 
-#: Opcodes/pvadd.c:191
+#: Opcodes/pvadd.c:188
 msgid "pvadd: not initialised"
 msgstr "pvadd : non initialisé"
 
-#: Opcodes/pvadd.c:193
+#: Opcodes/pvadd.c:190
 msgid "PVADD timpnt < 0"
 msgstr "PVADD timpnt < 0"
 
-#: Opcodes/pvadd.c:201
+#: Opcodes/pvadd.c:198
 #, c-format
 msgid "PVADD cannot load %s"
 msgstr "PVADD ne peut pas charger %s"
 
-#: Opcodes/pvadd.c:205 Opcodes/ugens8.c:223
+#: Opcodes/pvadd.c:202 Opcodes/ugens8.c:223
 #, c-format
 msgid "pvoc-ex file %s: FFT size %d too large for Csound"
 msgstr "pvoc-ex fichier %s : la taille de TFR %d est trop grande pour Csound"
 
-#: Opcodes/pvadd.c:210
+#: Opcodes/pvadd.c:207
 #, c-format
 msgid "PV frame %ld seems too small in %s"
 msgstr "La trame PV %ld semble trop petite dans %s"
 
-#: Opcodes/pvadd.c:215 Opcodes/pvread.c:115 Opcodes/ugens8.c:229
+#: Opcodes/pvadd.c:212 Opcodes/pvread.c:115 Opcodes/ugens8.c:229
 #, c-format
 msgid "pvoc-ex file %s is not mono"
 msgstr "pvoc-ex : le fichier %s n'est pas mono"
@@ -7914,101 +7767,101 @@ msgstr "pvoc-ex : le fichier %s n'est pas mono"
 msgid "PVBUFREAD cannot load %s"
 msgstr "PVBUFREAD ne peut pas charger %s"
 
-#: Opcodes/pvinterp.c:76 Opcodes/vpvoc.c:206
+#: Opcodes/pvinterp.c:76 Opcodes/vpvoc.c:207
 #, c-format
 msgid "PVOC frame %ld bigger than %ld in %s"
 msgstr "La trame PVOC %ld est plus grande que %ld dans %s"
 
-#: Opcodes/pvinterp.c:81 Opcodes/vpvoc.c:211
+#: Opcodes/pvinterp.c:81 Opcodes/vpvoc.c:212
 #, c-format
 msgid "PVOC frame %ld seems too small in %s"
 msgstr "La trame PVOC %ld semble trop petite dans %s"
 
-#: Opcodes/pvinterp.c:85 Opcodes/pvinterp.c:184 Opcodes/pvinterp.c:356
-#: Opcodes/vpvoc.c:215
+#: Opcodes/pvinterp.c:85 Opcodes/pvinterp.c:183 Opcodes/pvinterp.c:354
+#: Opcodes/vpvoc.c:216
 #, c-format
 msgid "%d chans (not 1) in PVOC file %s"
 msgstr "%d canaux (pas 1) dans le fichier PVOC %s"
 
-#: Opcodes/pvinterp.c:101 Opcodes/pvinterp.c:212 Opcodes/pvinterp.c:382
+#: Opcodes/pvinterp.c:100 Opcodes/pvinterp.c:210 Opcodes/pvinterp.c:379
 #: Opcodes/ugens8.c:95 Opcodes/vpvoc.c:244
 #, c-format
 msgid "ksmps of %d needs wdw of %d, max is %d for pv %s"
 msgstr "Un ksmps de %d necécessite une fenêtre de %d, max vaut %d pour pv %s"
 
-#: Opcodes/pvinterp.c:122 Opcodes/pvinterp.c:256 Opcodes/pvinterp.c:431
+#: Opcodes/pvinterp.c:121 Opcodes/pvinterp.c:254 Opcodes/pvinterp.c:428
 #: Opcodes/pvread.c:95 Opcodes/ugens8.c:156 Opcodes/vpvoc.c:297
 msgid "PVOC ktimpnt truncated to last frame"
 msgstr "PVOC ktimpnt a été tronqué à la dernière trame"
 
-#: Opcodes/pvinterp.c:130
+#: Opcodes/pvinterp.c:129
 msgid "pvbufread: not initialised"
 msgstr "pvbufread : non initialisé"
 
-#: Opcodes/pvinterp.c:132 Opcodes/pvinterp.c:306 Opcodes/pvinterp.c:492
+#: Opcodes/pvinterp.c:131 Opcodes/pvinterp.c:304 Opcodes/pvinterp.c:489
 #: Opcodes/pvread.c:103 Opcodes/ugens8.c:206 Opcodes/vpvoc.c:361
 msgid "PVOC timpnt < 0"
 msgstr "PVOC timpnt < 0"
 
-#: Opcodes/pvinterp.c:149
+#: Opcodes/pvinterp.c:148
 msgid "pvinterp: associated pvbufread not found"
 msgstr "pvinterp : pas de pvbufread associé"
 
-#: Opcodes/pvinterp.c:166
+#: Opcodes/pvinterp.c:165
 #, c-format
 msgid "PVINTERP cannot load %s"
 msgstr "PVINTERP ne peut pas charger %s"
 
-#: Opcodes/pvinterp.c:179
+#: Opcodes/pvinterp.c:178
 #, c-format
 msgid "pvinterp: %s: frame size %d does not match pvbufread frame size %d\n"
 msgstr ""
 "pvinterp : %s : la taille de trame %d ne correspond pas à la taille de trame "
 "%d de pvbufread\n"
 
-#: Opcodes/pvinterp.c:300
+#: Opcodes/pvinterp.c:298
 msgid "pvinterp: not initialised"
 msgstr "pvinterp : non initialisé"
 
-#: Opcodes/pvinterp.c:302 Opcodes/pvinterp.c:488 Opcodes/ugens8.c:202
+#: Opcodes/pvinterp.c:300 Opcodes/pvinterp.c:485 Opcodes/ugens8.c:202
 #: Opcodes/vpvoc.c:357
 msgid "PVOC transpose too low"
 msgstr "PVOC transpose trop bas"
 
-#: Opcodes/pvinterp.c:304 Opcodes/pvinterp.c:490 Opcodes/ugens8.c:204
+#: Opcodes/pvinterp.c:302 Opcodes/pvinterp.c:487 Opcodes/ugens8.c:204
 #: Opcodes/vpvoc.c:359
 msgid "PVOC transpose too high"
 msgstr "PVOC transpose trop haut"
 
-#: Opcodes/pvinterp.c:323
+#: Opcodes/pvinterp.c:321
 msgid "pvcross: associated pvbufread not found"
 msgstr "pvcross : pas de pvbufread associé"
 
-#: Opcodes/pvinterp.c:339
+#: Opcodes/pvinterp.c:337
 #, c-format
 msgid "PVCROSS cannot load %s"
 msgstr "PVCROSS ne peut pas charger %s"
 
-#: Opcodes/pvinterp.c:351
+#: Opcodes/pvinterp.c:349
 #, c-format
 msgid "pvcross: %s: frame size %d does not match pvbufread frame size %d\n"
 msgstr ""
 "pvcross : %s : la taille de trame %d ne correspond à la taille de trame %d "
 "de pvbufread\n"
 
-#: Opcodes/pvinterp.c:454 Opcodes/vpvoc.c:322
+#: Opcodes/pvinterp.c:451 Opcodes/vpvoc.c:322
 msgid "PVOC debug: one frame gets through\n"
 msgstr "PVOC debuf : une trame est passée\n"
 
-#: Opcodes/pvinterp.c:486
+#: Opcodes/pvinterp.c:483
 msgid "pvcross: not initialised"
 msgstr "pvcross : non initialisé"
 
-#: Opcodes/pvlock.c:35 Opcodes/pvsbasic.c:380
+#: Opcodes/pvlock.c:59 Opcodes/pvsbasic.c:380
 msgid "invalid number of output arguments"
 msgstr "nombre d'arguments de sortie non valide"
 
-#: Opcodes/pvlock.c:466
+#: Opcodes/pvlock.c:490
 msgid "pvsfreeze: signal format must be amp-freq."
 msgstr "pvsfreeze : le format de signal doit être amp-fréq."
 
@@ -8026,9 +7879,8 @@ msgid "pvsband: not initialised"
 msgstr "pvsband : non initialisé"
 
 #: Opcodes/pvsbasic.c:69
-#, fuzzy
 msgid "pvsgain: signal format must be amp-phase or amp-freq."
-msgstr "pvsmix : le format de signal doit être amp-phase ou amp-fréq."
+msgstr "pvsgain : le format de signal doit être amp-phase ou amp-fréq."
 
 #: Opcodes/pvsbasic.c:181 Opcodes/pvsbasic.c:248
 msgid "SDFT Not implemented in this case yet"
@@ -8113,34 +7965,37 @@ msgid "pvstencil: not initialised"
 msgstr "pvstencil : non initialisé"
 
 #: Opcodes/pvsbasic.c:2148
-#, fuzzy
 msgid "pvs2tab: signal format must be amp-phase or amp-freq."
-msgstr "pvsftw : le format du signal doit être amp-phase ou amp-fréq.\n"
+msgstr "pvs2tab : le format du signal doit être amp-phase ou amp-fréq."
 
-#: Opcodes/pvsbasic.c:2151 Opcodes/pvsbasic.c:2190 Opcodes/tabvars.c:53
-#: Opcodes/tabvars.c:89 Opcodes/tabvars.c:131 Opcodes/tabvars.c:176
-#: Opcodes/tabvars.c:178
-#, fuzzy
+#: Opcodes/pvsbasic.c:2151 Opcodes/pvsbasic.c:2189 Opcodes/tabvars.c:56
+#: Opcodes/tabvars.c:92 Opcodes/tabvars.c:134 Opcodes/tabvars.c:179
+#: Opcodes/tabvars.c:181
 msgid "t-variable not initialised"
-msgstr "table : non initialisé"
+msgstr "t-variable : non initialisé"
 
-#: Opcodes/pvsbuffer.c:53 Opcodes/pvscent.c:164 Opcodes/pvsdemix.c:49
+#: Opcodes/pvsbuffer.c:56 Opcodes/pvscent.c:164 Opcodes/pvsdemix.c:49
 msgid "SDFT case not implemented yet"
 msgstr "SDFT pas encore implémentée"
 
-#: Opcodes/pvsbuffer.c:85
+#: Opcodes/pvsbuffer.c:89
 msgid "error... could not create global var for handle\n"
 msgstr "erreur... impossible de créer une var globale pour le descripteur\n"
 
-#: Opcodes/pvsbuffer.c:143 Opcodes/pvsbuffer.c:190 Opcodes/pvsbuffer.c:258
+#: Opcodes/pvsbuffer.c:148 Opcodes/pvsbuffer.c:197 Opcodes/pvsbuffer.c:266
 msgid "error... could not read handle from global variable\n"
 msgstr ""
 "erreur... impossible de lire le descripteur dans les variables globales\n"
 
-#: Opcodes/pvsbuffer.c:238 Opcodes/pvsbuffer.c:306
+#: Opcodes/pvsbuffer.c:246 Opcodes/pvsbuffer.c:316
 msgid "Invalid buffer handle"
 msgstr "Descripteur de tampon non valide"
 
+#: Opcodes/pvsbuffer.c:285 Opcodes/pvsbuffer.c:291
+#, c-format
+msgid "table length too small: needed %d, got %d\n"
+msgstr "longueur de table trop petite : %d attendu, %d obtenu\n"
+
 #: Opcodes/pvscent.c:42
 msgid "pvscent: format must be amp-phase or amp-freq.\n"
 msgstr "pvscent : le format doit être amp-phase ou amp-fréq.\n"
@@ -8330,24 +8185,24 @@ msgstr "seqtime : numéro de table incorrect"
 msgid "seqtim: incorrect table number"
 msgstr "seqtim : numéro de table incorrect"
 
-#: Opcodes/sfont.c:118
+#: Opcodes/sfont.c:121
 #, c-format
 msgid "sfload: cannot open SoundFont file \"%s\" (error %s)"
 msgstr "sfload : impossible d'ouvrir le fichier SoundFont \"%s\" (erreur %s)"
 
-#: Opcodes/sfont.c:123
+#: Opcodes/sfont.c:126
 msgid "Sfload: cannot use globals"
 msgstr "sfload : impossible d'utiliser des variables globales"
 
-#: Opcodes/sfont.c:153
+#: Opcodes/sfont.c:156
 msgid "sfload: could not open globals\n"
 msgstr "sfload : impossible d'utiliser des variables globales\n"
 
-#: Opcodes/sfont.c:170
+#: Opcodes/sfont.c:173
 msgid "Extending soundfonts"
 msgstr "Extension de soundfonts"
 
-#: Opcodes/sfont.c:201
+#: Opcodes/sfont.c:204
 #, c-format
 msgid ""
 "\n"
@@ -8356,12 +8211,12 @@ msgstr ""
 "\n"
 "List de Preset de \"%s\"\n"
 
-#: Opcodes/sfont.c:204
+#: Opcodes/sfont.c:207
 #, c-format
 msgid "%3d) %-20s\tprog:%-3d bank:%d\n"
 msgstr "%3d) %-20s\tprog : %-3d bank : %d\n"
 
-#: Opcodes/sfont.c:226
+#: Opcodes/sfont.c:229
 #, c-format
 msgid ""
 "\n"
@@ -8371,12 +8226,12 @@ msgstr ""
 "Assignation de tous les Presets de \"%s\" à partir de %d (numéro du "
 "descripteur de preset)\n"
 
-#: Opcodes/sfont.c:231
+#: Opcodes/sfont.c:234
 #, c-format
 msgid "%3d<--%-20s\t(prog:%-3d bank:%d)\n"
 msgstr "%3d<--%-20s\t(prog : %-3d bank : %d)\n"
 
-#: Opcodes/sfont.c:238
+#: Opcodes/sfont.c:241
 #, c-format
 msgid ""
 "\n"
@@ -8388,7 +8243,7 @@ msgstr ""
 "%d \n"
 "\n"
 
-#: Opcodes/sfont.c:251
+#: Opcodes/sfont.c:254
 #, c-format
 msgid ""
 "\n"
@@ -8397,12 +8252,12 @@ msgstr ""
 "\n"
 "Liste d'instruments de \"%s\"\n"
 
-#: Opcodes/sfont.c:268
+#: Opcodes/sfont.c:271
 #, c-format
 msgid "sfpreset: preset handle too big (%d), max: %d"
 msgstr "sfpreset : descripteur de preset trop grand (%d), max : %d"
 
-#: Opcodes/sfont.c:284
+#: Opcodes/sfont.c:287
 #, c-format
 msgid ""
 "sfpreset: cannot find any preset having prog number %d and bank number %d in "
@@ -8411,19 +8266,19 @@ msgstr ""
 "sfpreset : impossible de trouver un preset ayant le numéro de prog %d et le "
 "numéro de banque %d dans le fichier SoundFont \"%s\""
 
-#: Opcodes/sfont.c:306 Opcodes/sfont.c:2189
+#: Opcodes/sfont.c:309 Opcodes/sfont.c:2192
 msgid "sfplay: invalid or out-of-range preset number"
 msgstr "sfplay : numéro de preset non valide ou hors limites"
 
-#: Opcodes/sfont.c:633
+#: Opcodes/sfont.c:636
 msgid "sfplaym: invalid or out-of-range preset number"
 msgstr "sfplaym : numéro de preset non valide ou hors limites"
 
-#: Opcodes/sfont.c:888 Opcodes/sfont.c:1150
+#: Opcodes/sfont.c:891 Opcodes/sfont.c:1153
 msgid "sfinstr: instrument out of range"
 msgstr "sfinstr : instrument hors limites"
 
-#: Opcodes/sfont.c:1598 Opcodes/sfont.c:1835
+#: Opcodes/sfont.c:1601 Opcodes/sfont.c:1838
 #, c-format
 msgid ""
 "SoundFont file \"%s\" contains ROM samples !\n"
@@ -8434,19 +8289,19 @@ msgstr ""
 "Actuellement sfload n'autorise que les échantillons en RAM.\n"
 "Session annulée !"
 
-#: Opcodes/sfont.c:1987 Opcodes/sfont.c:1993
+#: Opcodes/sfont.c:1990 Opcodes/sfont.c:1996
 msgid "Sfont: cannot use globals/"
 msgstr "Sfont : impossible d'utiliser des variables globales/"
 
-#: Opcodes/sfont.c:1996
+#: Opcodes/sfont.c:1999
 msgid "Sfont format not compatible"
 msgstr "Sfont : format non compatible"
 
-#: Opcodes/sfont.c:2534
+#: Opcodes/sfont.c:2537
 msgid "error... could not create sfont globals\n"
 msgstr "erreur... impossible de créer les globales de sfont\n"
 
-#: Opcodes/shape.c:49
+#: Opcodes/shape.c:51
 msgid "powershape: ifullscale must be strictly positive"
 msgstr "powershape : la ftable ifullscale doit être entièrement positive"
 
@@ -8458,25 +8313,25 @@ msgstr "inletf : le format de signal doit être amp-phase ou amp-fréq."
 msgid "ftgenonce error"
 msgstr "erreur ftgenonce"
 
-#: Opcodes/singwave.c:85
+#: Opcodes/singwave.c:86
 msgid "No table for Modulatr"
 msgstr "Aucune table pour Modulatr"
 
-#: Opcodes/singwave.c:127
+#: Opcodes/singwave.c:128
 msgid "No table for Singwave"
 msgstr "Aucune table pour Singwave"
 
-#: Opcodes/singwave.c:207
+#: Opcodes/singwave.c:208
 #, c-format
 msgid "SingWave: rate=%f sweepRate=%f mytime=%f\n"
 msgstr "SingWave : rate=%f sweepRate=%f mytime=%f\n"
 
-#: Opcodes/singwave.c:273
+#: Opcodes/singwave.c:280
 #, c-format
 msgid "Found Formant: %s (number %i)\n"
 msgstr "Le formant %s (numéro %i) a été trouvé\n"
 
-#: Opcodes/singwave.c:395
+#: Opcodes/singwave.c:397
 #, c-format
 msgid "Setting Phoneme: %d %f\n"
 msgstr "Fixation du phonème : %d %f\n"
@@ -8509,15 +8364,15 @@ msgstr "pvsarp : le format du signal doit être amp-phase ou amp-fréq.\n"
 msgid "pvsarp: not initialised\n"
 msgstr "pvsarp : non initialisé\n"
 
-#: Opcodes/sndloop.c:995 Opcodes/sndloop.c:1092
+#: Opcodes/sndloop.c:995 Opcodes/sndloop.c:1091
 msgid "signal format must be amp-phase or amp-freq.\n"
 msgstr "le format du signal doit être amp-phase ou amp-fréq.\n"
 
-#: Opcodes/sndloop.c:1072
+#: Opcodes/sndloop.c:1071
 msgid "pvsvoc: not initialised\n"
 msgstr "pvsvoc : non initialisé\n"
 
-#: Opcodes/sndloop.c:1123
+#: Opcodes/sndloop.c:1122
 msgid "pvsmorph: not initialised\n"
 msgstr "pvsmorph : non initialisé\n"
 
@@ -8537,27 +8392,27 @@ msgstr "Nombre de sorties incorrect dans sndwarpst ; doit valoir 2 ou 4"
 msgid "sndwarpst: not initialised"
 msgstr "sndwarpst : non initialisé"
 
-#: Opcodes/sockrecv.c:123 Opcodes/sockrecv.c:213 Opcodes/sockrecv.c:300
-#: Opcodes/socksend.c:75 Opcodes/socksend.c:133 Opcodes/socksend.c:190
+#: Opcodes/sockrecv.c:117 Opcodes/sockrecv.c:215 Opcodes/sockrecv.c:314
+#: Opcodes/socksend.c:73 Opcodes/socksend.c:157 Opcodes/socksend.c:252
+#, c-format
+msgid "Winsock2 failed to start: %d"
+msgstr "Le démarrage de winsock2 a échoué : %d"
+
+#: Opcodes/sockrecv.c:131 Opcodes/sockrecv.c:227 Opcodes/sockrecv.c:320
+#: Opcodes/socksend.c:86 Opcodes/socksend.c:171 Opcodes/socksend.c:259
 msgid "creating socket"
 msgstr "création du socket"
 
-#: Opcodes/sockrecv.c:322
-msgid "connect failed"
-msgstr "la connexion a échoué"
+#: Opcodes/sockrecv.c:347
+#, c-format
+msgid "connect failed (%d)"
+msgstr "la connexion a échoué (%d)"
 
-#: Opcodes/sockrecv.c:335
+#: Opcodes/sockrecv.c:360
 msgid "read from socket failed"
 msgstr "la lecture depuis le socket a échoué"
 
-#: Opcodes/socksend.c:67 Opcodes/socksend.c:125
-#, c-format
-msgid "The buffersize must be <= %d samples to fit in a udp-packet."
-msgstr ""
-"La taille du tampon doit être <= %d échantillons pour entrer dans un paquet "
-"udp."
-
-#: Opcodes/socksend.c:107 Opcodes/socksend.c:169
+#: Opcodes/socksend.c:126 Opcodes/socksend.c:215
 msgid "sendto failed"
 msgstr "sendto a échoué"
 
@@ -8577,20 +8432,20 @@ msgstr "spat3d : non initialisé"
 msgid "spat3di: not initialised"
 msgstr "spat3di : non initialisé"
 
-#: Opcodes/spectra.c:82
+#: Opcodes/spectra.c:84
 msgid "illegal Q value"
 msgstr "valeur de Q illégale"
 
-#: Opcodes/spectra.c:84
+#: Opcodes/spectra.c:86
 msgid "unknown dbout code"
 msgstr "code de dbout inconnu"
 
-#: Opcodes/spectra.c:104
+#: Opcodes/spectra.c:106
 #, c-format
 msgid "spectrum: %s window, %s out, making tables ...\n"
 msgstr "spectrum : fenêtre %s, sortie %s, fabrication des tables ...\n"
 
-#: Opcodes/spectra.c:123
+#: Opcodes/spectra.c:125
 #, c-format
 msgid ""
 "\thigh cps %7.1f\n"
@@ -8599,56 +8454,56 @@ msgstr ""
 "\tcps haut %7.1f\n"
 "\t cps bas  %7.1f\n"
 
-#: Opcodes/spectra.c:138
+#: Opcodes/spectra.c:140
 #, c-format
 msgid "\tQ %4.1f uses a %d sample window each octdown\n"
 msgstr ""
 "\tQ %4.1f utilise une fenêtre de %d échantillons à chaque octave "
 "descendante\n"
 
-#: Opcodes/spectra.c:169
+#: Opcodes/spectra.c:171
 msgid "spectrum windowed sines:"
 msgstr "spectrum : sinus fenêtrées : "
 
-#: Opcodes/spectra.c:187
+#: Opcodes/spectra.c:189
 #, c-format
 msgid "\t%d oct analysis window delay = %ld samples (%d msecs)\n"
 msgstr ""
 "\tle délai de la fenêtre d'analyse de l'oct %d est égal à %ld échantillons "
 "(%d ms)\n"
 
-#: Opcodes/spectra.c:195
+#: Opcodes/spectra.c:197
 msgid "octdown buffers:"
 msgstr "tampons d'octaves descendantes :"
 
-#: Opcodes/spectra.c:513 Opcodes/spectra.c:553
+#: Opcodes/spectra.c:515 Opcodes/spectra.c:555
 msgid "specdisp: not initialised"
 msgstr "specdisp : non initialisé"
 
-#: Opcodes/spectra.c:523
+#: Opcodes/spectra.c:525
 #, c-format
 msgid "instr %d %s, dft (%s), %ld octaves (%d - %d Hz):"
 msgstr "instr %d %s, tfd (%s), %ld octaves (%d - %d Hz) :"
 
-#: Opcodes/spectra.c:530
+#: Opcodes/spectra.c:532
 #, c-format
 msgid "instr %d %s, dft (%s), %ld octaves (%3.1f - %3.1f Hz):"
 msgstr "instr %d %s, tfd (%s), %ld octaves (%3.1f - %3.1f Hz) :"
 
-#: Opcodes/spectra.c:611
+#: Opcodes/spectra.c:613
 msgid "per oct rolloff too steep"
 msgstr "pente par octave trop raide"
 
-#: Opcodes/spectra.c:632
+#: Opcodes/spectra.c:634
 #, c-format
 msgid "specptrk: %d freqs, %d%s ptls at "
 msgstr "specptrk : %d fréqs, %d%s partiels à "
 
-#: Opcodes/spectra.c:633
+#: Opcodes/spectra.c:635
 msgid " odd"
 msgstr " impair"
 
-#: Opcodes/spectra.c:637
+#: Opcodes/spectra.c:639
 msgid ""
 "\n"
 "\t\trolloff vals:"
@@ -8656,7 +8511,7 @@ msgstr ""
 "\n"
 "\t\tvaleurs de rolloff :"
 
-#: Opcodes/spectra.c:660
+#: Opcodes/spectra.c:662
 #, c-format
 msgid ""
 "\n"
@@ -8665,121 +8520,121 @@ msgstr ""
 "\n"
 "\tdbthresh %4.1f : X-corr %s threshon %4.1f, threshoff %4.1f\n"
 
-#: Opcodes/spectra.c:817
+#: Opcodes/spectra.c:819
 msgid "specptrk: not initialised"
 msgstr "specptrk : non initialisé"
 
-#: Opcodes/spectra.c:849
+#: Opcodes/spectra.c:851
 msgid "specsum: not initialised"
 msgstr "specsum : non initialisé"
 
-#: Opcodes/spectra.c:860
+#: Opcodes/spectra.c:862
 msgid "inputs have different sizes"
 msgstr "les entrées ont des tailles différentes"
 
-#: Opcodes/spectra.c:863
+#: Opcodes/spectra.c:865
 msgid "inputs have diff. time periods"
 msgstr "les entrées ont des périodes temporelles différentes"
 
-#: Opcodes/spectra.c:867
+#: Opcodes/spectra.c:869
 msgid "inputs have different freq resolution"
 msgstr "les entrées ont des résolutions en fréquence différentes"
 
-#: Opcodes/spectra.c:870
+#: Opcodes/spectra.c:872
 msgid "inputs have different amptypes"
 msgstr "les entrées ont des types d'amplitude différents"
 
-#: Opcodes/spectra.c:902
+#: Opcodes/spectra.c:904
 msgid "specaddm: not initialised"
 msgstr "specaddm : non initialisé"
 
-#: Opcodes/spectra.c:926
+#: Opcodes/spectra.c:928
 msgid "specdiff: local buffers not initialised"
 msgstr "specdiff: tampons locaux non initialisés"
 
-#: Opcodes/spectra.c:964
+#: Opcodes/spectra.c:966
 msgid "specdiff: not initialised"
 msgstr "specdiff : non initialisé"
 
-#: Opcodes/spectra.c:986
+#: Opcodes/spectra.c:988
 msgid "specscal: local buffer not initialised"
 msgstr "specscal: tampon local non initialisé"
 
-#: Opcodes/spectra.c:991
+#: Opcodes/spectra.c:993
 msgid "missing fscale table"
 msgstr "la table de fscale est manquante"
 
-#: Opcodes/spectra.c:1057
+#: Opcodes/spectra.c:1059
 msgid "specscal: not initialised"
 msgstr "specscal : non initialisé"
 
-#: Opcodes/spectra.c:1081
+#: Opcodes/spectra.c:1083
 msgid "spechist: local buffers not intiialised"
 msgstr "spechist : tampons locaux non initialisés"
 
-#: Opcodes/spectra.c:1113
+#: Opcodes/spectra.c:1115
 msgid "spechist: not initialised"
 msgstr "spechist : non initialisé"
 
-#: Opcodes/spectra.c:1134
+#: Opcodes/spectra.c:1136
 msgid "specfilt: local buffers not initialised"
 msgstr "specfilt: tampons locaux non initialisés"
 
-#: Opcodes/spectra.c:1142
+#: Opcodes/spectra.c:1144
 msgid "missing htim ftable"
 msgstr "la ftable htim est manquante"
 
-#: Opcodes/spectra.c:1165
+#: Opcodes/spectra.c:1167
 msgid "htim ftable must be all-positive"
 msgstr "la ftable htim doit être entièrement positive"
 
-#: Opcodes/spectra.c:1169
+#: Opcodes/spectra.c:1171
 #, c-format
 msgid "coef range: %6.3f - %6.3f\n"
 msgstr "intervalle de coef : %6.3f - %6.3f\n"
 
-#: Opcodes/spectra.c:1201
+#: Opcodes/spectra.c:1203
 msgid "specfilt: not initialised"
 msgstr "specfilt : non initialisé"
 
-#: Opcodes/stackops.c:80
+#: Opcodes/stackops.c:81
 msgid "fsig = : source signal is not initialised"
 msgstr "fsig = : le signal source n'est pas initialisé"
 
-#: Opcodes/stackops.c:126
+#: Opcodes/stackops.c:125
 msgid "stack overflow"
 msgstr "dépassement de pile"
 
-#: Opcodes/stackops.c:134
+#: Opcodes/stackops.c:131
 msgid "cannot pop from empty stack"
 msgstr "impossible de lire à partir d'une pile vide"
 
-#: Opcodes/stackops.c:142
+#: Opcodes/stackops.c:137
 msgid "argument number or type mismatch"
 msgstr "numéro ou type d'argument inadéquat"
 
-#: Opcodes/stackops.c:150
+#: Opcodes/stackops.c:143
 msgid "string argument is too long"
 msgstr "l'argument chaîne est trop long"
 
-#: Opcodes/stackops.c:167
+#: Opcodes/stackops.c:160
 msgid "Error allocating argument stack"
 msgstr "Erreur lors de l'allocation de la pile d'arguments"
 
-#: Opcodes/stackops.c:207 Top/argdecode.c:1212 util/envext.c:99
+#: Opcodes/stackops.c:200 Top/argdecode.c:1212 util/envext.c:99
 #: util/scale.c:248
 msgid "too many arguments"
 msgstr "trop d'arguments"
 
-#: Opcodes/stackops.c:286
+#: Opcodes/stackops.c:279
 msgid "the stack is already allocated"
 msgstr "la pile est déjà allouée"
 
-#: Opcodes/stackops.c:637
+#: Opcodes/stackops.c:630
 msgid "number of arguments != nchnls"
 msgstr "nombre d'arguments != nchnls"
 
-#: Opcodes/stdopcod.c:36
+#: Opcodes/stdopcod.c:37
 msgid "stdopcod.c: error: globals already allocated"
 msgstr "stdopcod.c : erreur : les variables globales sont déjà allouées"
 
@@ -8796,37 +8651,45 @@ msgstr ""
 msgid "RAWWAVE_PATH: %s\n"
 msgstr "RAWWAVE_PATH : %s\n"
 
-#: Opcodes/syncgrain.c:175 Opcodes/syncgrain.c:338 Opcodes/syncgrain.c:683
+#: Opcodes/syncgrain.c:176 Opcodes/syncgrain.c:339 Opcodes/syncgrain.c:684
 msgid "grain size smaller than 1 sample\n"
 msgstr "la taille de grain est inférieure à 1 échantillon\n"
 
-#: Opcodes/syncgrain.c:387
+#: Opcodes/syncgrain.c:388
 msgid "diskgrain: invalid number of channels"
 msgstr "diskgrain : nombre de canaux non valide"
 
-#: Opcodes/syncgrain.c:419
+#: Opcodes/syncgrain.c:420
 msgid "diskgrain: could not open file\n"
 msgstr "diskgrain : impossible d'ouvrir le fichier\n"
 
-#: Opcodes/syncgrain.c:423
+#: Opcodes/syncgrain.c:424
 msgid ""
 "diskgrain: soundfile channel numbers do not match the number of outputs \n"
 msgstr ""
 "diskgrain : le nombre de canaux du fichier son ne correspond pas au nombre "
 "de sorties\n"
 
-#: Opcodes/syncgrain.c:435
+#: Opcodes/syncgrain.c:436
 msgid "diskgrain: could not read file \n"
 msgstr "diskgrain : impossible de lire le fichier\n"
 
-#: Opcodes/tabsum.c:39
+#: Opcodes/tabsum.c:40
 msgid "tabsum: No table"
 msgstr "tabsum : pas de table"
 
-#: Opcodes/tabsum.c:54
+#: Opcodes/tabsum.c:55
 msgid "tabsum: Not initialised"
 msgstr "tabsum : non initialisé"
 
+#: Opcodes/tabvars.c:201 Opcodes/tabvars.c:218
+msgid "t-var not initialised"
+msgstr "t-variable : non initialisé"
+
+#: Opcodes/tabvars.c:203 Opcodes/tabvars.c:220
+msgid "No table for copy2ftab"
+msgstr "Pas de table pour copy2ftab"
+
 #: Opcodes/ugens7.c:46 Opcodes/ugensa.c:49
 msgid "illegal value for iolaps"
 msgstr "valeur de iolaps illégale"
@@ -8978,17 +8841,17 @@ msgstr "ftmorf : la table iftfn n'a pas la bonne taille"
 msgid "table in iftfn for ftmorf does not exist"
 msgstr "ftmorf : la table iftfn n'existe pas"
 
-#: Opcodes/ugnorman.c:120
+#: Opcodes/ugnorman.c:121
 #, c-format
 msgid "%s: Ats file %s not read (does it exist?)"
 msgstr "%s : le fichier ATS %s n'a pas été lu (existe-t-il ?)"
 
-#: Opcodes/ugnorman.c:131
+#: Opcodes/ugnorman.c:132
 #, c-format
 msgid "%s: either %s is not an ATS file or the byte endianness is wrong"
 msgstr "%s : soit %s n'est pas un fichier ATS soit l'endianness est incorrect"
 
-#: Opcodes/ugnorman.c:139
+#: Opcodes/ugnorman.c:140
 #, c-format
 msgid ""
 "%s: %s is byte-swapped\n"
@@ -9000,112 +8863,112 @@ msgstr ""
 "\tles fichiers en octets inversés ne produiront pas de résultat audio\n"
 "\tdifférent, mais leur traitement pourra être plus lent."
 
-#: Opcodes/ugnorman.c:175
+#: Opcodes/ugnorman.c:176
 msgid ""
 "ATSINFO: location is out of bounds: 0-8 are the only possible selections"
 msgstr ""
 "ATSINFO : emplacement hors limites : les seules sélections possibles sont 0-8"
 
-#: Opcodes/ugnorman.c:265
+#: Opcodes/ugnorman.c:266
 #, c-format
 msgid "ATSREAD: partial %i out of range, max allowed is %i"
 msgstr ""
 "ATSREAD : le partiel %i est hors limites, la valeur max autorisée est %i"
 
-#: Opcodes/ugnorman.c:291
+#: Opcodes/ugnorman.c:292
 msgid "Type not implemented"
 msgstr "Type non implémenté"
 
-#: Opcodes/ugnorman.c:310
+#: Opcodes/ugnorman.c:311
 msgid "ATSREAD: only positive time pointer values allowed, setting to zero\n"
 msgstr ""
 "ATSREAD : seules les valeurs de pointeur temporel positives sont admises, "
 "fixée à zéro\n"
 
-#: Opcodes/ugnorman.c:319
+#: Opcodes/ugnorman.c:320
 msgid "ATSREAD: timepointer out of range, truncated to last frame\n"
 msgstr ""
 "ATSREAD : pointeur temporel hors limites, tronqué à la dernière trame\n"
 
-#: Opcodes/ugnorman.c:332
+#: Opcodes/ugnorman.c:333
 msgid "ATSREAD: not initialised"
 msgstr "ATSREAD : non initialisé"
 
-#: Opcodes/ugnorman.c:394
+#: Opcodes/ugnorman.c:395
 #, c-format
 msgid "ATSREADNZ: band %i out of range, 1-25 are the valid band values"
 msgstr ""
 "ATSREADNZ : bande %i hors limite, les valeurs de bande valides sont 1-25"
 
-#: Opcodes/ugnorman.c:412
+#: Opcodes/ugnorman.c:413
 msgid "ATSREADNZ: Type either not implemented or does not contain noise"
 msgstr ""
 "ATSREADNZ : soit le type n'est pas implémenté soit il ne contient pas de "
 "bruit"
 
-#: Opcodes/ugnorman.c:431
+#: Opcodes/ugnorman.c:432
 msgid "ATSREADNZ: only positive time pointer values allowed, setting to zero\n"
 msgstr ""
 "ATSREADNZ : seules les valeurs de pointeur temporel positives sont admises, "
 "fixée à zéro\n"
 
-#: Opcodes/ugnorman.c:440
+#: Opcodes/ugnorman.c:441
 msgid "ATSREADNZ: timepointer out of range, truncated to last frame\n"
 msgstr ""
 "ATSREADNZ : pointeur temporel hors limites, tronqué à la dernière trame\n"
 
-#: Opcodes/ugnorman.c:449
+#: Opcodes/ugnorman.c:450
 msgid "ATSREADNZ: not initialised"
 msgstr "ATSREADNZ : non initialisé"
 
-#: Opcodes/ugnorman.c:467
+#: Opcodes/ugnorman.c:468
 msgid "ATSADD: Function table number for synthesis waveform not valid"
 msgstr ""
 "ATSADD : le numéro de la table de fonction pour la forme d'onde de synthèse "
 "n'est pas valide"
 
-#: Opcodes/ugnorman.c:475
+#: Opcodes/ugnorman.c:476
 msgid "ATSADD: Gate Function table number not valid"
 msgstr "ATSADD : le numéro de la table de fonction gate n'est pas valide"
 
-#: Opcodes/ugnorman.c:521
+#: Opcodes/ugnorman.c:522
 #, c-format
 msgid "ATSADD: Partial(s) out of range, max partial allowed is %i"
 msgstr "ATSADD : partiel(s) hors limites, le partiel max autorisé est %i"
 
-#: Opcodes/ugnorman.c:555
+#: Opcodes/ugnorman.c:556
 msgid "ATSADD: Type not implemented"
 msgstr "ATSADD : type non implémenté"
 
-#: Opcodes/ugnorman.c:585
+#: Opcodes/ugnorman.c:586
 msgid ""
 "ATSADD: only positive time pointer values are allowed, setting to zero\n"
 msgstr ""
 "ATSADD : seules les valeurs de pointeur temporel positives sont admises, "
 "fixée à zéro\n"
 
-#: Opcodes/ugnorman.c:594
+#: Opcodes/ugnorman.c:595
 msgid "ATSADD: time pointer out of range, truncating to last frame\n"
 msgstr "ATSADD : pointeur temporel hors limites, tronqué à la dernière trame\n"
 
-#: Opcodes/ugnorman.c:638
+#: Opcodes/ugnorman.c:639
 msgid "ATSADD: not initialised"
 msgstr "ATSADD : non initialisé"
 
-#: Opcodes/ugnorman.c:842
+#: Opcodes/ugnorman.c:845
 msgid "ATSADDNZ: This file type contains no noise"
 msgstr "ATSADDNZ : ce type de fichier ne contient pas de bruit"
 
-#: Opcodes/ugnorman.c:846
+#: Opcodes/ugnorman.c:849
 msgid "ATSADDNZ: This file type has not been implemented in this code yet."
 msgstr ""
 "ATSADDNZ : ce type de fichier n'a pas encore été implémenté dans ce code."
 
-#: Opcodes/ugnorman.c:869
+#: Opcodes/ugnorman.c:872
 msgid "ATSADDNZ: Band(s) out of range, max band allowed is 25"
 msgstr "ATSADDNZ : bande(s) hors limites, la bande maximale autorisée est 25"
 
-#: Opcodes/ugnorman.c:886
+#: Opcodes/ugnorman.c:889
 msgid ""
 "ATSADDNZ: Type either has no noise or is not implemented (only type 3 and 4 "
 "work now)"
@@ -9113,35 +8976,35 @@ msgstr ""
 "ATSADDNZ : soit le type n'a pas de bruit soit il n'est pas implémenté (seuls "
 "les types 3 et 4 fonctionnent actuellement)"
 
-#: Opcodes/ugnorman.c:1002
+#: Opcodes/ugnorman.c:1005
 msgid ""
 "ATSADDNZ: only positive time pointer values are allowed, setting to zero\n"
 msgstr ""
 "ATSADDNZ : seules les valeurs de pointeur temporel positives sont admises, "
 "fixée à zéro\n"
 
-#: Opcodes/ugnorman.c:1011
+#: Opcodes/ugnorman.c:1014
 msgid "ATSADDNZ: time pointer out of range, truncating to last frame\n"
 msgstr ""
 "ATSADDNZ : pointeur temporel hors limites, tronqué à la dernière trame\n"
 
-#: Opcodes/ugnorman.c:1165
+#: Opcodes/ugnorman.c:1168
 #, c-format
 msgid "ATSSINNOI: Partial(s) out of range, max partial allowed is %i"
 msgstr "ATSSINNOI : partiel(s) hors limites, le partiel max autorisé est %i"
 
-#: Opcodes/ugnorman.c:1202
+#: Opcodes/ugnorman.c:1205
 msgid "ATSSINNOI: Type not implemented"
 msgstr "ATSSINNOI : type non implémenté"
 
-#: Opcodes/ugnorman.c:1315
+#: Opcodes/ugnorman.c:1316
 msgid ""
 "ATSSINNOI: only positive time pointer values are allowed, setting to zero\n"
 msgstr ""
 "ATSSINNOI : seules les valeurs de pointeur temporel positives sont admises, "
 "fixée à zéro\n"
 
-#: Opcodes/ugnorman.c:1324
+#: Opcodes/ugnorman.c:1325
 msgid "ATSSINNOI: time pointer out of range, truncating to last frame\n"
 msgstr ""
 "ATSSINNOI : pointeur temporel hors limites, tronqué à la dernière trame\n"
@@ -9225,15 +9088,15 @@ msgstr ""
 msgid "ATSCROSS: you must have an atsbufread before an atsinterpread"
 msgstr "ATSCROSS : il faut avoir un atsbufread avant un atsinterpread"
 
-#: Opcodes/ugsc.c:394
+#: Opcodes/ugsc.c:390
 msgid "Phaser mode must be either 1 or 2"
 msgstr "Le mode du phaser doit valoir 1 ou 2"
 
-#: Opcodes/vbap.c:57
+#: Opcodes/vbap.c:59
 msgid "vbap: error allocating loudspeaker table"
 msgstr "vbap : erreur lors de l'allocation de la table de haut-parleurs"
 
-#: Opcodes/vbap.c:264
+#: Opcodes/vbap.c:266
 msgid ""
 "Number of loudspeakers is zero\n"
 "Exiting"
@@ -9241,19 +9104,19 @@ msgstr ""
 "Le nombre de haut-parleurs est zéro\n"
 "Fin du traitement"
 
-#: Opcodes/vbap.c:573
+#: Opcodes/vbap.c:575
 msgid "Error in loudspeaker dimension."
 msgstr "Erreur dans la dimension de haut-parleur."
 
-#: Opcodes/vbap.c:596
+#: Opcodes/vbap.c:598
 msgid "Too few loudspeakers"
 msgstr "Trop peu de haut-parleurs"
 
-#: Opcodes/vbap.c:622
+#: Opcodes/vbap.c:624
 msgid "Not valid 3-D configuration"
 msgstr "Non valide en configuration 3-D"
 
-#: Opcodes/vbap.c:668 Opcodes/vbap.c:767
+#: Opcodes/vbap.c:670 Opcodes/vbap.c:769
 msgid ""
 "\n"
 "Configured loudspeakers\n"
@@ -9261,12 +9124,12 @@ msgstr ""
 "\n"
 "Haut-parleurs configurés\n"
 
-#: Opcodes/vbap.c:670
+#: Opcodes/vbap.c:672
 #, c-format
 msgid "Triplet %d Loudspeakers: "
 msgstr "Haut-parleurs Triplet %d : "
 
-#: Opcodes/vbap.c:769
+#: Opcodes/vbap.c:771
 #, c-format
 msgid "Pair %d Loudspeakers: "
 msgstr "Haut-parleurs Paire %d : "
@@ -9302,7 +9165,6 @@ msgid "Wrong dimension\n"
 msgstr "Dimension incorrecte\n"
 
 #: Opcodes/vbap_eight.c:489 Opcodes/vbap_sixteen.c:486
-#, fuzzy
 msgid ""
 "vbap system NOT configured.\n"
 "Missing vbaplsinit opcode in orchestra?"
@@ -9321,7 +9183,6 @@ msgid "Wrong dimension"
 msgstr "Dimension incorrecte"
 
 #: Opcodes/vbap_four.c:203 Opcodes/vbap_four.c:487 Opcodes/vbap_sixteen.c:203
-#, fuzzy
 msgid ""
 "vbap system NOT configured. \n"
 "Missing vbaplsinit opcode in orchestra?"
@@ -9356,41 +9217,33 @@ msgstr "Il manque des champs dans vbapzmove\n"
 msgid "Have to have at least %d directions in vbapzmove"
 msgstr "Il faut au moins %d directions dans vbapzmove"
 
-#: Opcodes/Vosim.c:49
+#: Opcodes/Vosim.c:51
 msgid "vosim: pulse table not found"
 msgstr "vosim : table d'impulsion non trouvée !"
 
-#: Opcodes/Vosim.c:72
+#: Opcodes/Vosim.c:74
 msgid "vosim: zero kfund. 'Infinite' length event generated."
 msgstr "vosim: kfund à zéro. Evènement de longueur 'infinie' généré."
 
-#: Opcodes/Vosim.c:80
+#: Opcodes/Vosim.c:82
 #, c-format
 msgid "vosim: kfund (%f) > sr. Generating ksmps silence."
 msgstr "vosim: kfund (%f) > sr. Génération d'un silence de ksmps."
 
-#: Opcodes/Vosim.c:158
+#: Opcodes/Vosim.c:160
 msgid "vosim: not initialised"
 msgstr "vosim : non initialisé"
 
-#: Opcodes/vpvoc.c:118
-msgid "tableseg: not initialised"
-msgstr "tableseg : non initialisé"
-
-#: Opcodes/vpvoc.c:146
-msgid "tablexseg: not initialised"
-msgstr "tablexseg : non initialisé"
-
-#: Opcodes/vpvoc.c:172
+#: Opcodes/vpvoc.c:173
 #, c-format
 msgid "vpvoc: Could not find ifnmagctrl table %f"
 msgstr "vpvoc : la table ifnmagctrl %f n'a pas été trouvée"
 
-#: Opcodes/vpvoc.c:178
+#: Opcodes/vpvoc.c:179
 msgid "vpvoc: associated tableseg not found"
 msgstr "vpvoc : tableseg associé non trouvé"
 
-#: Opcodes/vpvoc.c:194
+#: Opcodes/vpvoc.c:195
 #, c-format
 msgid "VPVOC cannot load %s"
 msgstr "VPVOC ne peut pas charger %s"
@@ -9483,7 +9336,7 @@ msgstr "-C\tutilisation du traitement de partition Cscore"
 
 #: Top/argdecode.c:67
 msgid "-j N\tuse N processes"
-msgstr ""
+msgstr "-j N\tutilise N processus"
 
 #: Top/argdecode.c:69
 msgid "-I\tI-time only orch run"
@@ -9511,47 +9364,47 @@ msgstr ""
 msgid "-B N\tsamples per hardware sound I/O buffer"
 msgstr "-B N\tnombre d'échantillons par tampon physique d'E/S"
 
-#: Top/argdecode.c:75 util/mixer.c:95 util/scale.c:46 util/srconv.c:739
+#: Top/argdecode.c:75 util/mixer.c:95 util/scale.c:46 util/srconv.c:738
 msgid "-A\tcreate an AIFF format output soundfile"
 msgstr "-A\tcréation d'un fichier de sortie au format AIFF"
 
-#: Top/argdecode.c:76 util/mixer.c:96 util/scale.c:47 util/srconv.c:741
+#: Top/argdecode.c:76 util/mixer.c:96 util/scale.c:47 util/srconv.c:740
 msgid "-W\tcreate a WAV format output soundfile"
 msgstr "-W\tcréation d'un fichier de sortie au format WAV"
 
-#: Top/argdecode.c:77 util/srconv.c:740
+#: Top/argdecode.c:77 util/srconv.c:739
 msgid "-J\tcreate an IRCAM format output soundfile"
 msgstr "-J\tcréation d'un fichier de sortie au format IRCAM"
 
-#: Top/argdecode.c:78 util/mixer.c:97 util/scale.c:48 util/srconv.c:742
+#: Top/argdecode.c:78 util/mixer.c:97 util/scale.c:48 util/srconv.c:741
 msgid "-h\tno header on output soundfile"
 msgstr "-h\tpas d'en-tête dans le fichier de sortie"
 
-#: Top/argdecode.c:79 util/mixer.c:99 util/scale.c:49 util/srconv.c:743
+#: Top/argdecode.c:79 util/mixer.c:99 util/scale.c:49 util/srconv.c:742
 msgid "-c\t8-bit signed_char sound samples"
 msgstr "-c\téchantillons en caractères signés sur 8 bit"
 
-#: Top/argdecode.c:81 util/mixer.c:101 util/scale.c:50 util/srconv.c:744
+#: Top/argdecode.c:81 util/mixer.c:101 util/scale.c:50 util/srconv.c:743
 msgid "-a\talaw sound samples"
 msgstr "-a\téchantillons alaw"
 
-#: Top/argdecode.c:83 util/mixer.c:98 util/mixer.c:100 util/srconv.c:745
+#: Top/argdecode.c:83 util/mixer.c:98 util/mixer.c:100 util/srconv.c:744
 msgid "-8\t8-bit unsigned_char sound samples"
 msgstr "-8\téchantillons en caractères non signés sur 8 bit"
 
-#: Top/argdecode.c:84 util/mixer.c:102 util/scale.c:51 util/srconv.c:746
+#: Top/argdecode.c:84 util/mixer.c:102 util/scale.c:51 util/srconv.c:745
 msgid "-u\tulaw sound samples"
 msgstr "-u\téchantillons ulaw"
 
-#: Top/argdecode.c:85 util/mixer.c:103 util/scale.c:52 util/srconv.c:747
+#: Top/argdecode.c:85 util/mixer.c:103 util/scale.c:52 util/srconv.c:746
 msgid "-s\tshort_int sound samples"
 msgstr "-s\téchantillons en entiers courts"
 
-#: Top/argdecode.c:86 util/mixer.c:104 util/scale.c:53 util/srconv.c:748
+#: Top/argdecode.c:86 util/mixer.c:104 util/scale.c:53 util/srconv.c:747
 msgid "-l\tlong_int sound samples"
 msgstr "-l\téchantillons en entiers longs"
 
-#: Top/argdecode.c:87 util/mixer.c:105 util/scale.c:54 util/srconv.c:749
+#: Top/argdecode.c:87 util/mixer.c:105 util/scale.c:54 util/srconv.c:748
 msgid "-f\tfloat sound samples"
 msgstr "-f\téchantillons en nombres flottants"
 
@@ -9559,7 +9412,7 @@ msgstr "-f\téchantillons en nombres flottants"
 msgid "-3\t24bit sound samples"
 msgstr "-3\téchantillons sur 24 bit"
 
-#: Top/argdecode.c:89 util/srconv.c:750
+#: Top/argdecode.c:89 util/srconv.c:749
 msgid "-r N\torchestra srate override"
 msgstr "-r N\tredéfinition du srate de l'orchestre"
 
@@ -9567,7 +9420,7 @@ msgstr "-r N\tredéfinition du srate de l'orchestre"
 msgid "-k N\torchestra krate override"
 msgstr "-k N\tredéfinition du krate de l'orchestre"
 
-#: Top/argdecode.c:91 util/srconv.c:751
+#: Top/argdecode.c:91 util/srconv.c:750
 msgid "-K\tDo not generate PEAK chunks"
 msgstr "-K\tNe générer aucun bloc PEAK"
 
@@ -9635,7 +9488,7 @@ msgstr ""
 msgid "-F fnam\tread MIDIfile event stream from file 'fnam'"
 msgstr "-F nomfic\tlire un flux d'évènements MIDI à partir du fichier 'nomfic'"
 
-#: Top/argdecode.c:107 util/mixer.c:106 util/scale.c:59 util/srconv.c:752
+#: Top/argdecode.c:107 util/mixer.c:106 util/scale.c:59 util/srconv.c:751
 msgid "-R\tcontinually rewrite header while writing soundfile (WAV/AIFF)"
 msgstr ""
 "-R\tréécrire l'en-tête continuellement lors de l'écriture d'un fichier son "
@@ -9647,7 +9500,7 @@ msgstr ""
 "-H#\taffiche une pulsation de style 1, 2 ou 3 à chaque écriture dans le "
 "fichier son"
 
-#: Top/argdecode.c:109 util/mixer.c:108 util/scale.c:61 util/srconv.c:754
+#: Top/argdecode.c:109 util/mixer.c:108 util/scale.c:61 util/srconv.c:753
 msgid "-N\tnotify (ring the bell) when score or miditrack is done"
 msgstr ""
 "-N\tavertir (par un beep) quand la partition ou la piste MIDI est terminée"
@@ -10170,16 +10023,16 @@ msgid "-M: stdin not supported on this platform"
 msgstr "-M : stdin n'est pas supporté sur cette plateforme"
 
 #: Top/argdecode.c:668 Top/argdecode.c:959 util/envext.c:84 util/mixer.c:205
-#: util/scale.c:173 util/srconv.c:248 util/xtrct.c:116
+#: util/scale.c:173 util/srconv.c:247 util/xtrct.c:116
 msgid "no outfilename"
 msgstr "pas de nom de fichier de sortie"
 
-#: Top/argdecode.c:671 Top/argdecode.c:963 util/scale.c:177 util/srconv.c:252
+#: Top/argdecode.c:671 Top/argdecode.c:963 util/scale.c:177 util/srconv.c:251
 #: util/xtrct.c:120
 msgid "-o cannot be stdin"
 msgstr "-o ne peut pas être stdin"
 
-#: Top/argdecode.c:675 Top/argdecode.c:967 util/scale.c:180 util/srconv.c:257
+#: Top/argdecode.c:675 Top/argdecode.c:967 util/scale.c:180 util/srconv.c:256
 #: util/xtrct.c:123
 msgid "stdout audio not supported"
 msgstr "audio sur stdout non supporté"
@@ -10198,15 +10051,15 @@ msgstr "pas de nom de fichier d'extraction de partition"
 
 #: Top/argdecode.c:865
 msgid "no weight-info"
-msgstr ""
+msgstr "pas d'info de poids"
 
 #: Top/argdecode.c:871
 msgid "no weight-dump"
-msgstr ""
+msgstr "pas de dump de poids"
 
 #: Top/argdecode.c:877
 msgid "no weights"
-msgstr ""
+msgstr "pas de poids"
 
 #: Top/argdecode.c:892
 #, c-format
@@ -10301,13 +10154,13 @@ msgstr "cscoreFileClose : pointeur de fichier non enregistré\n"
 msgid "cscoreFileGetCurrent: no fp current"
 msgstr "cscoreFileGetCurrent : pas de pointeur de fichier courant"
 
-#: Top/csmodule.c:192
+#: Top/csmodule.c:199
 #, c-format
 msgid "not loading '%s' (uses incompatible floating point type)"
 msgstr ""
 "'%s' n'est pas chargé (utilisation de type virgule flottante incompatible)"
 
-#: Top/csmodule.c:201
+#: Top/csmodule.c:209
 #, c-format
 msgid ""
 "not loading '%s' (incompatible with this version of Csound (%d.%d/%d.%d)"
@@ -10315,157 +10168,157 @@ msgstr ""
 "'%s' n'est pas chargé (incompatible avec cette version de Csound (%d.%d/%d."
 "%d)"
 
-#: Top/csmodule.c:244
+#: Top/csmodule.c:252
 #, c-format
 msgid "could not open library '%s' (%s)"
 msgstr "la bibliothèque '%s' (%s) n'a pas pu être ouverte"
 
-#: Top/csmodule.c:247
+#: Top/csmodule.c:255
 #, c-format
 msgid "could not open library '%s' (%d)"
 msgstr "la bibliothèque '%s' (%d) n'a pas pu être ouverte"
 
-#: Top/csmodule.c:303
+#: Top/csmodule.c:311
 #, c-format
 msgid "'%s' is not a Csound plugin library"
 msgstr "'%s' n'est pas une bibliothèque de plugin de Csound"
 
-#: Top/csmodule.c:314
+#: Top/csmodule.c:322
 msgid "csoundLoadExternal(): memory allocation failure"
 msgstr "csoundLoadExternal() : échec de l'allocation mémoire"
 
-#: Top/csmodule.c:328 Top/csmodule.c:336
+#: Top/csmodule.c:336 Top/csmodule.c:344
 #, c-format
 msgid "Error in pre-initialisation function of module '%s'"
 msgstr "Erreur dans le fonction de pré-initialisation du module '%s'"
 
-#: Top/csmodule.c:599 Top/csmodule.c:605 Top/csmodule.c:616 Top/csmodule.c:623
-#: Top/csmodule.c:629 Top/csmodule.c:637
+#: Top/csmodule.c:608 Top/csmodule.c:614 Top/csmodule.c:625 Top/csmodule.c:632
+#: Top/csmodule.c:638 Top/csmodule.c:646
 msgid "Error opening plugin directory\n"
 msgstr "Erreur en ouvrant le répertoire de plugin\n"
 
-#: Top/csmodule.c:687
+#: Top/csmodule.c:696
 #, c-format
 msgid "Error opening plugin directory '%s': %s"
 msgstr "Erreur en ouvrant le répertoire de plugin '%s' : %s"
 
-#: Top/csmodule.c:722
+#: Top/csmodule.c:731
 #, c-format
 msgid "path name too long, skipping '%s'"
 msgstr "nom de chemin trop long, on se passe de '%s'"
 
-#: Top/csmodule.c:728
+#: Top/csmodule.c:737
 #, c-format
 msgid "Library %s omitted\n"
 msgstr "Bibliothèque %s omise\n"
 
-#: Top/csmodule.c:764
+#: Top/csmodule.c:773
 msgid "Loading command-line libraries:\n"
 msgstr "Chargement des bibliothèques de ligne de commande :\n"
 
-#: Top/csmodule.c:787
+#: Top/csmodule.c:796
 #, c-format
 msgid " *** error loading '%s'"
 msgstr " *** erreur en chargeant '%s'"
 
-#: Top/csmodule.c:810
+#: Top/csmodule.c:819
 #, c-format
 msgid "Error starting module '%s'"
 msgstr "Erreur au démarrage du module '%s'"
 
-#: Top/csmodule.c:907
+#: Top/csmodule.c:918
 #, c-format
 msgid "Error de-initialising module '%s'"
 msgstr "Erreur de dé-initialisation du module '%s'"
 
-#: Top/csound.c:1606 Top/csound.c:1626
+#: Top/csound.c:1636 Top/csound.c:1656
 msgid "Early return from csoundPerformKsmps().\n"
 msgstr "Retour prématuré de csoundPerformKsmps().\n"
 
-#: Top/csound.c:1612
+#: Top/csound.c:1642
 msgid "Score finished in csoundPerformKsmps().\n"
 msgstr "La partition est finie dans csoundPerformKsmps().\n"
 
-#: Top/csound.c:1645
+#: Top/csound.c:1675
 msgid "Early return from csoundPerformBuffer().\n"
 msgstr "Retour prématuré de csoundPerformBuffer().\n"
 
-#: Top/csound.c:1670
+#: Top/csound.c:1700
 msgid "Early return from csoundPerform().\n"
 msgstr "Retour prématuré de csoundPerform().\n"
 
-#: Top/csound.c:1677
+#: Top/csound.c:1707
 msgid "Score finished in csoundPerform().\n"
 msgstr "La partition est finie dans csoundPerform().\n"
 
-#: Top/csound.c:1697
+#: Top/csound.c:1727
 msgid "csoundPerform(): stopped.\n"
 msgstr "csoundPerform() : arrêté.\n"
 
-#: Top/csound.c:1968
+#: Top/csound.c:1998
 msgid "WARNING: "
 msgstr "AVERTISSEMENT : "
 
-#: Top/csound.c:2089
+#: Top/csound.c:2119
 msgid "rtdummy: failed to allocate globals"
 msgstr "rtdummy : l'allocation des variables globales a échoué"
 
-#: Top/csound.c:2090
+#: Top/csound.c:2120
 msgid "rtaudio: dummy module enabled\n"
 msgstr "rtaudio : module factice activé\n"
 
-#: Top/csound.c:2119 Top/csound.c:2155
+#: Top/csound.c:2149 Top/csound.c:2185
 msgid " *** error: rtaudio module set to empty string"
 msgstr " *** erreur : le module rtaudio est fixé par une chaîne vide"
 
-#: Top/csound.c:2123 Top/csound.c:2159
+#: Top/csound.c:2153 Top/csound.c:2189
 #, c-format
 msgid " *** error: unknown rtaudio module: '%s'"
 msgstr " *** erreur : module rtaudio inconnu : '%s'"
 
-#: Top/csound.c:2241
+#: Top/csound.c:2271
 msgid "WARNING: real time midi input disabled, using dummy functions\n"
 msgstr ""
 "AVERTISSEMENT : l'entrée midi en temps réel est désactivée, utilisation de "
 "fonctions factices\n"
 
-#: Top/csound.c:2246 Top/csound.c:2280
+#: Top/csound.c:2276 Top/csound.c:2310
 msgid "error: -+rtmidi set to empty string"
 msgstr "erreur : -+rtmidi contient une chaîne vide"
 
-#: Top/csound.c:2249 Top/csound.c:2283
+#: Top/csound.c:2279 Top/csound.c:2313
 #, c-format
 msgid "error: -+rtmidi='%s': unknown module"
 msgstr "erreur : -+rtmidi='%s' : module inconnu"
 
-#: Top/csound.c:2275
+#: Top/csound.c:2305
 msgid "WARNING: real time midi output disabled, using dummy functions\n"
 msgstr ""
 "AVERTISSEMENT : la sortie midi en temps réel est désactivée, utilisation de "
 "fonctions factices\n"
 
-#: Top/csound.c:2297
+#: Top/csound.c:2327
 msgid "Unknown MIDI error"
 msgstr "Erreur MIDI inconnue"
 
-#: Top/csound.c:2415
+#: Top/csound.c:2445
 msgid "xyin not supported. use invalue opcode instead."
 msgstr "xyin n'est pas supporté. Utiliser plutôt l'opcode invalue."
 
-#: Top/csound.c:2522
+#: Top/csound.c:2552
 msgid "Failed to allocate new opcode entry."
 msgstr "Echec de l'allocation d'une nouvelle entrée d'opcode."
 
-#: Top/csound.c:2545
+#: Top/csound.c:2575
 #, c-format
 msgid "Failed to allocate opcode entry for %s."
 msgstr "Echec de l'allocation d'une entrée d'opcode pour %s."
 
-#: Top/csound.c:2876
+#: Top/csound.c:2906
 msgid "Cannot open /proc/cpuinfo. Support for RDTSC is not available.\n"
 msgstr "Impossible d'ouvrir /proc/cpuinfo. RDTSC n'est pas supporté.\n"
 
-#: Top/csound.c:2927
+#: Top/csound.c:2957
 msgid "No valid CPU frequency entry was found in /proc/cpuinfo.\n"
 msgstr "Aucune entrée de fréq CPU valide n'a été trouvée dans /proc/cpuinfo.\n"
 
@@ -10473,25 +10326,25 @@ msgstr "Aucune entrée de fréq CPU valide n'a été trouvée dans /proc/cpuinfo
 msgid "Error allocating opcode list"
 msgstr "Erreur lors de l'allocation de la liste d'opcodes"
 
-#: Top/main.c:161
+#: Top/main.c:160
 #, c-format
 msgid "WARNING: cannot open csoundrc file %s\n"
 msgstr "AVERTISSEMENT : impossible d'ouvrir le fichier csoundrc %s\n"
 
-#: Top/main.c:164
+#: Top/main.c:163
 #, c-format
 msgid "Reading options from $CSOUNDRC: %s \n"
 msgstr "Lecture des options depuis $CSOUNDRC : %s \n"
 
-#: Top/main.c:173
+#: Top/main.c:172
 msgid "Reading options from $HOME/.csoundrc\n"
 msgstr "Lecture des options depuis $HOME/.csoundrc\n"
 
-#: Top/main.c:200
+#: Top/main.c:199
 msgid "no orchestra name"
 msgstr "aucun nom d'orchestre"
 
-#: Top/main.c:225
+#: Top/main.c:224
 msgid "Reading CSD failed ... stopping"
 msgstr "La lecture du CSD a échoué ... arrêt"
 
@@ -10503,7 +10356,7 @@ msgstr "erreur : utilisations multiples de stdin"
 msgid "error: multiple uses of stdout"
 msgstr "erreur : utilisations multiples de stdout"
 
-#: Top/main.c:260 util/dnoise.c:268
+#: Top/main.c:260 util/dnoise.c:264
 #, c-format
 msgid "%s not a recognised SFOUTYP env setting"
 msgstr "%s n'est pas un réglage d'env SFOUTYP reconnu"
@@ -10520,58 +10373,62 @@ msgstr ""
 "exécution en temps réel en utilisant un fichier de partition numérique "
 "factice\n"
 
-#: Top/main.c:319
+#: Top/main.c:314
 #, c-format
 msgid "orchname:  %s\n"
 msgstr "nom de l'orchestre :   %s\n"
 
-#: Top/main.c:321
-#, c-format
-msgid "scorename: %s\n"
-msgstr "nom de la partition :  %s\n"
+#: Top/main.c:334
+msgid "Stopping on parser failure\n"
+msgstr "Arrêt sur échec du parseur\n"
 
-#: Top/main.c:353
+#: Top/main.c:352
 msgid "end of orchestra compile"
 msgstr "fin de la compilation de l'orchestre"
 
-#: Top/main.c:360
+#: Top/main.c:359
 #, c-format
 msgid "using previous %s\n"
 msgstr "utilisation du %s précédent\n"
 
-#: Top/main.c:373
+#: Top/main.c:369
 #, c-format
 msgid "cannot open scorefile %s"
 msgstr "impossible d'ouvrir le fichier de partition %s"
 
-#: Top/main.c:378 Top/main.c:399
-#, c-format
-msgid "cannot open %s for writing"
-msgstr "impossible d'ouvrir %s en écriture"
-
-#: Top/main.c:381
+#: Top/main.c:371
 msgid "sorting score ...\n"
 msgstr "tri de la partition ...\n"
 
-#: Top/main.c:388
+#: Top/main.c:381
 #, c-format
 msgid "cannot extract %s, name conflict"
 msgstr "impossible d'extraire %s, conflit de noms"
 
-#: Top/main.c:391
+#: Top/main.c:384
 #, c-format
 msgid "cannot open extract file %s"
 msgstr "impossible d'ouvrir le fichier d'extraction %s"
 
-#: Top/main.c:401
+#: Top/main.c:388
+#, c-format
+msgid "cannot reopen %s"
+msgstr "impossible de réouvrir %s"
+
+#: Top/main.c:392
+#, c-format
+msgid "cannot open %s for writing"
+msgstr "impossible d'ouvrir %s en écriture"
+
+#: Top/main.c:394
 msgid "  ... extracting ...\n"
 msgstr "  ... extraction ...\n"
 
-#: Top/main.c:414
+#: Top/main.c:405
 msgid "end of score sort"
 msgstr "fin du tri de la partition"
 
-#: Top/main.c:416
+#: Top/main.c:407
 msgid "Syntax check completed.\n"
 msgstr "Vérification de la syntaxe accomplie.\n"
 
@@ -10638,163 +10495,158 @@ msgstr " *** échec de l'allocation mémoire\n"
 msgid " *** error setting option '%s' to '%s': %s\n"
 msgstr " *** erreur en mettant l'option '%s' à '%s' : %s\n"
 
-#: Top/one_file.c:105 Top/one_file.c:113
+#: Top/one_file.c:110 Top/one_file.c:118
 msgid " *** cannot create temporary file"
 msgstr " *** impossible de créer un fichier temporaire"
 
-#: Top/one_file.c:198
+#: Top/one_file.c:203
 #, c-format
 msgid "Removing temporary file %s ...\n"
 msgstr "Suppression du fichier temporaire %s ...\n"
 
-#: Top/one_file.c:202
+#: Top/one_file.c:207
 #, c-format
 msgid "WARNING: could not remove %s\n"
 msgstr "AVERTISSEMENT : impossible de supprimer %s\n"
 
-#: Top/one_file.c:268 Top/one_file.c:296
+#: Top/one_file.c:274 Top/one_file.c:302
 #, c-format
 msgid "More than %d arguments in <CsOptions>"
 msgstr "Plus de %d arguments dans <CsOptions>"
 
-#: Top/one_file.c:313
+#: Top/one_file.c:319
 #, c-format
 msgid "Invalid arguments in <CsOptions>: %s"
 msgstr "Arguments non valides dans <CsOptions> : %s"
 
-#: Top/one_file.c:316
+#: Top/one_file.c:322
 #, c-format
 msgid "Invalid arguments in .csoundrc or -@ file: %s"
 msgstr "Arguments non valides dans .csoundrc ou dans le fichier -@ : %s"
 
-#: Top/one_file.c:322 Top/one_file.c:790
+#: Top/one_file.c:328 Top/one_file.c:744
 msgid "Missing end tag </CsOptions>"
 msgstr "La balise fermante </CsOptions> est absente"
 
-#: Top/one_file.c:340 Top/one_file.c:372 Top/one_file.c:420
-#, c-format
-msgid "Creating %s (%p)\n"
-msgstr "Création de %s (%p)\n"
-
-#: Top/one_file.c:343
-#, c-format
-msgid "Failed to create %s"
-msgstr "La création de %s a échoué"
-
-#: Top/one_file.c:356
+#: Top/one_file.c:354
 msgid "Missing end tag </CsInstruments>"
 msgstr "La balise fermante </CsInstruments> est absente"
 
-#: Top/one_file.c:389 Top/one_file.c:442
+#: Top/one_file.c:376 Top/one_file.c:430
 msgid "Missing end tag </CsScore>"
 msgstr "La balise fermante </CsScore> est absente"
 
-#: Top/one_file.c:403 Top/one_file.c:408
+#: Top/one_file.c:391 Top/one_file.c:396
 msgid "Missing program in tag <CsScore>"
 msgstr "La balise fermante </CsScore> est absente"
 
-#: Top/one_file.c:433
+#: Top/one_file.c:408
+#, c-format
+msgid "Creating %s (%p)\n"
+msgstr "Création de %s (%p)\n"
+
+#: Top/one_file.c:421
 msgid "External generation failed"
 msgstr "La génération externe a échoué"
 
-#: Top/one_file.c:520
+#: Top/one_file.c:468
 #, c-format
 msgid "Non base64 character %c(%2x)"
 msgstr "Le caractère %c(%2x) n'est pas en base64"
 
-#: Top/one_file.c:539
+#: Top/one_file.c:487
 msgid "Truncated byte at end of base64 stream"
 msgstr "Octet tronqué à la fin du flux base64"
 
-#: Top/one_file.c:554
+#: Top/one_file.c:503
 #, c-format
 msgid "Cannot open temporary file (%s) for MIDI subfile"
 msgstr "Impossible d'ouvrir le fichier temporaire (%s) comme sous-fichier MIDI"
 
-#: Top/one_file.c:571
+#: Top/one_file.c:520
 msgid "Missing end tag </CsMidifileB>"
 msgstr "La balise fermante </CsMidifileB> est absente"
 
-#: Top/one_file.c:586 Top/one_file.c:633
+#: Top/one_file.c:536 Top/one_file.c:584
 #, c-format
 msgid "File %s already exists"
 msgstr "Le fichier %s existe déjà"
 
-#: Top/one_file.c:591
+#: Top/one_file.c:541
 #, c-format
 msgid "Cannot open sample file (%s) subfile"
 msgstr "Impossible d'ouvrir le sous-fichier du fichier d'échantillons (%s)"
 
-#: Top/one_file.c:605
+#: Top/one_file.c:555
 msgid "Missing end tag </CsSampleB>"
 msgstr "La balise fermante </CsSampleB> est absente"
 
-#: Top/one_file.c:638
+#: Top/one_file.c:589
 #, c-format
 msgid "Cannot open file (%s) subfile"
 msgstr "Impossible d'ouvrir le sous-fichier du fichier (%s)"
 
-#: Top/one_file.c:653
+#: Top/one_file.c:604
 msgid "Missing end tag </CsFileB>"
 msgstr "La balise fermante </CsFileB> est absente"
 
-#: Top/one_file.c:672
+#: Top/one_file.c:624
 #, c-format
 msgid "This CSD file requires a version of Csound before %d.%02d"
 msgstr "Ce fichier CSD nécessite une version de Csound antérieure à la %d.%02d"
 
-#: Top/one_file.c:680 Top/one_file.c:687
+#: Top/one_file.c:632 Top/one_file.c:639
 #, c-format
 msgid "This CSD file requires a version of Csound after %d.%02d"
 msgstr "Ce fichier CSD nécessite une version de Csound ultérieure à la %d.%02d"
 
-#: Top/one_file.c:693
+#: Top/one_file.c:645
 msgid "Missing end tag </CsVersion>"
 msgstr "La balise fermante </CsVersion> est absente"
 
-#: Top/one_file.c:702
+#: Top/one_file.c:655
 msgid "**** Licence Information ****\n"
 msgstr "**** Information de Licence ****\n"
 
-#: Top/one_file.c:708
+#: Top/one_file.c:661
 msgid "**** End of Licence Information ****\n"
 msgstr "**** Fin de l'Information de Licence ****\n"
 
-#: Top/one_file.c:719
+#: Top/one_file.c:672
 msgid "Missing end tag </CsLicence>"
 msgstr "La balise fermante </CsLicence> est absente"
 
-#: Top/one_file.c:749
+#: Top/one_file.c:703
 #, c-format
 msgid "Failed to open csd file: %s"
 msgstr "L'ouverture du fichier csd a échoué : %s"
 
-#: Top/one_file.c:764
+#: Top/one_file.c:718
 msgid "STARTING FILE\n"
 msgstr "DEBUT DU FICHIER\n"
 
-#: Top/one_file.c:780
+#: Top/one_file.c:734
 msgid "Creating options\n"
 msgstr "Création des options\n"
 
-#: Top/one_file.c:786
+#: Top/one_file.c:740
 msgid "Skipping <CsOptions>\n"
 msgstr "On ignore <CsOptions>\n"
 
-#: Top/one_file.c:800
+#: Top/one_file.c:754
 msgid "Creating orchestra\n"
 msgstr "Création de l'orchestre\n"
 
-#: Top/one_file.c:805
+#: Top/one_file.c:759
 msgid "Creating score\n"
 msgstr "Création de la partition\n"
 
-#: Top/one_file.c:839
+#: Top/one_file.c:793
 #, c-format
 msgid "unknown CSD tag: %s\n"
 msgstr "balise CSD inconnue : %s\n"
 
-#: Top/one_file.c:844
+#: Top/one_file.c:798
 msgid "Could not find <CsoundSynthesizer> tag in CSD file.\n"
 msgstr ""
 "La balise <CsoundSynthesizer> n'a pas été trouvée dans le fichier CSD.\n"
@@ -10969,7 +10821,7 @@ msgstr "scot : %d erreurs.\n"
 #, c-format
 msgid ""
 "\n"
-" Could not open %s for writing, bye...\n"
+"Could not open %s for writing, bye...\n"
 msgstr ""
 "\n"
 " Impossible d'ouvrir %s en écriture, au revoir...\n"
@@ -10978,8 +10830,8 @@ msgstr ""
 msgid "saving ATS data..."
 msgstr "sauvegarde des données ATS..."
 
-#: util/atsa.c:546 util/atsa.c:2344 util/atsa.c:2358 util/atsa.c:2368
-#: util/atsa.c:2548 util/atsa.c:2611 util/atsa.c:2699
+#: util/atsa.c:546 util/atsa.c:2354 util/atsa.c:2368 util/atsa.c:2387
+#: util/atsa.c:2567 util/atsa.c:2630 util/atsa.c:2718
 msgid "done!\n"
 msgstr "fini !\n"
 
@@ -11090,17 +10942,17 @@ msgstr ""
 "fréq. et résiduel, 4=amp., fréq., phase, et résiduel)\n"
 "\n"
 
-#: util/atsa.c:1482
+#: util/atsa.c:1492
 #, c-format
 msgid "atsa: error opening residual file '%s'"
 msgstr "atsa : erreur en ouvrant le fichier de résiduels '%s'"
 
-#: util/atsa.c:1486
+#: util/atsa.c:1496
 #, c-format
 msgid "atsa: residual file has %d channels, must be stereo !"
 msgstr "atsa : le fichier de résiduels a %d voix, doit être stéréo !"
 
-#: util/atsa.c:1813
+#: util/atsa.c:1823
 #, c-format
 msgid ""
 "\n"
@@ -11109,52 +10961,52 @@ msgstr ""
 "\n"
 "ERREUR : impossible d'ouvrir le fichier %s en écriture\n"
 
-#: util/atsa.c:1908
+#: util/atsa.c:1918
 msgid "Error: sound not optimised !"
 msgstr "Erreur : le son n'est pas optimisé !"
 
-#: util/atsa.c:2003
+#: util/atsa.c:2013
 #, c-format
 msgid "atsa: cannot open input file '%s'"
 msgstr "atsa : impossible d'ouvrir le fichier '%s' en entrée"
 
-#: util/atsa.c:2010
+#: util/atsa.c:2020
 #, c-format
 msgid "atsa: file has %d channels, must be mono !"
 msgstr "atsa : le fichier a %d voix, doit être mono !"
 
-#: util/atsa.c:2015
+#: util/atsa.c:2025
 msgid "tracking...\n"
 msgstr "pistage...\n"
 
-#: util/atsa.c:2024
+#: util/atsa.c:2034
 #, c-format
 msgid "start %f out of bounds, corrected to 0.0"
 msgstr "le début %f est hors limites, corrigé à 0.0"
 
-#: util/atsa.c:2034
+#: util/atsa.c:2044
 #, c-format
 msgid "duration %f out of bounds, limited to file duration"
 msgstr "la durée %f est hors limites, limitée à la durée du fichier"
 
-#: util/atsa.c:2040
+#: util/atsa.c:2050
 #, c-format
 msgid "start: %f duration: %f file dur: %f\n"
 msgstr "début : %f, durée : %f, durée du fichier : %f\n"
 
-#: util/atsa.c:2047
+#: util/atsa.c:2057
 #, c-format
 msgid "lowest freq. %f out of bounds, forced to default: %f"
 msgstr ""
 "fréq. la plus basse %f hors limites, forcée à la valeur par défaut : %f"
 
-#: util/atsa.c:2057
+#: util/atsa.c:2067
 #, c-format
 msgid "highest freq. %f out of bounds, forced to default: %f"
 msgstr ""
 "fréq. la plus haute %f hors limites, forcée à la valeur par défaut : %f"
 
-#: util/atsa.c:2064
+#: util/atsa.c:2074
 #, c-format
 msgid ""
 "freq. dev. %f out of bounds, should be > 0.0 and <= 1.0, forced to default: "
@@ -11163,7 +11015,7 @@ msgstr ""
 "dév. de fréq. %f hors limites, doit être > 0.0 et <= 1.0, forcée à la valeur "
 "par défaut : %f"
 
-#: util/atsa.c:2072
+#: util/atsa.c:2082
 #, c-format
 msgid ""
 "windows cycles %d out of bounds, should be between 1 and 8, forced to "
@@ -11172,7 +11024,7 @@ msgstr ""
 "cycles par fenêtre %d hors limites, doivent être entre 1 et 8, forcés à la "
 "valeur par défaut : %d"
 
-#: util/atsa.c:2080
+#: util/atsa.c:2090
 #, c-format
 msgid ""
 "window type %d out of bounds, should be between 0 and 3, forced to default: "
@@ -11181,7 +11033,7 @@ msgstr ""
 "type de fenêtre %d hors limites, doit être entre 0 et 3, forcé à la valeur "
 "par défaut : %d"
 
-#: util/atsa.c:2088
+#: util/atsa.c:2098
 #, c-format
 msgid ""
 "hop size %f out of bounds, should be > 0.0 and <= 1.0, forced to default: %f"
@@ -11189,7 +11041,7 @@ msgstr ""
 "taille de saut %f hors limites, doit être > 0.0 et <= 1.0, forcée à la "
 "valeur par défaut : %f"
 
-#: util/atsa.c:2096
+#: util/atsa.c:2106
 #, c-format
 msgid ""
 "lowest magnitude %f out of bounds, should be >= 0.0 and <= 1.0, forced to "
@@ -11198,28 +11050,28 @@ msgstr ""
 "magnitude la plus faible %f hors limites, doit être >= 0.0 et <= 1.0, forcée "
 "à la valeur par défaut : %f"
 
-#: util/atsa.c:2120
+#: util/atsa.c:2130
 #, c-format
 msgid "atsa: %d frames are not enough for analysis, need at least %d"
 msgstr ""
 "atsa : %d trames ne suffisent pas pour l'analyse, il en faut au moins %d"
 
-#: util/atsa.c:2129
+#: util/atsa.c:2139
 #, c-format
 msgid "track length %d out of bounds, forced to: %d"
 msgstr "longueur de trajectoire %d hors limites, forcée à : %d"
 
-#: util/atsa.c:2138
+#: util/atsa.c:2148
 #, c-format
 msgid "min. segment length %d out of bounds, forced to: %d"
 msgstr "longueur min. de segment %d hors limites, forcée à : %d"
 
-#: util/atsa.c:2147
+#: util/atsa.c:2157
 #, c-format
 msgid "min. gap length %d out of bounds, forced to: %d"
 msgstr "longueur de blanc min. %d hors limites, forcée à : %d"
 
-#: util/atsa.c:2153
+#: util/atsa.c:2163
 #, c-format
 msgid ""
 "SMR threshold %f out of bounds, should be >= 0.0 and < %f dB SPL, forced to "
@@ -11228,7 +11080,7 @@ msgstr ""
 "seuil de SMR %f hors limites, doit être >= 0.0 et < %f dB SPL, forcé à la "
 "valeur par défaut : %f"
 
-#: util/atsa.c:2164
+#: util/atsa.c:2174
 #, c-format
 msgid ""
 "min. seg. SMR %f out of bounds, should be >= %f and < %f dB SPL, forced to "
@@ -11237,7 +11089,7 @@ msgstr ""
 "SMR min. de seg. %f hors limites, doit être >= %f et < %f dB SPL, forcé à la "
 "valeur par défaut : %f"
 
-#: util/atsa.c:2172
+#: util/atsa.c:2182
 #, c-format
 msgid ""
 "last peak contribution %f out of bounds, should be >= 0.0 and <= 1.0, forced "
@@ -11246,7 +11098,7 @@ msgstr ""
 "contribution du dernier pic %f hors limites, doit être >= 0.0 et <= 1.0, "
 "forcé à la valeur par défaut : %f"
 
-#: util/atsa.c:2180
+#: util/atsa.c:2190
 #, c-format
 msgid ""
 "SMR contribution %f out of bounds, should be >= 0.0 and <= 1.0, forced to "
@@ -11255,39 +11107,39 @@ msgstr ""
 "contribution du SMR %f hors limites, doit être >= 0.0 et <= 1.0, forcé à la "
 "valeur par défaut : %f"
 
-#: util/atsa.c:2325
+#: util/atsa.c:2335
 msgid "Initializing ATS data..."
 msgstr "Initialisation des données ATS..."
 
-#: util/atsa.c:2355
+#: util/atsa.c:2365
 msgid "Computing residual..."
 msgstr "Calcul des résiduels..."
 
-#: util/atsa.c:2366
+#: util/atsa.c:2381 util/atsa.c:2384
 msgid "Analysing residual..."
 msgstr "Analyse des résiduels..."
 
-#: util/atsa.c:2370
+#: util/atsa.c:2389
 msgid "tracking completed.\n"
 msgstr "pistage complet.\n"
 
-#: util/atsa.c:2478
+#: util/atsa.c:2497
 msgid "Filling sound gaps..."
 msgstr "Remplissage des blancs..."
 
-#: util/atsa.c:2566
+#: util/atsa.c:2585
 msgid "Trimming short partials..."
 msgstr "Elimination des partiels courts..."
 
-#: util/atsa.c:2662
+#: util/atsa.c:2681
 msgid "Computing averages..."
 msgstr "Calcul des moyennes..."
 
-#: util/atsa.c:2713
+#: util/atsa.c:2732
 msgid "No partials to track -- stopping\n"
 msgstr "Aucun partiel à pister -- arrêt\n"
 
-#: util/atsa.c:2813
+#: util/atsa.c:2832
 msgid "Soundfile analysis for ATS opcodes"
 msgstr "Analyse du fichier son pour les opcodes ATS"
 
@@ -11319,8 +11171,8 @@ msgstr "option non reconnue"
 msgid "illegal number of filenames"
 msgstr "nombre illégal de fichiers"
 
-#: util/cvanal.c:113 util/dnoise.c:456 util/lpanal.c:518 util/pvanal.c:258
-#: util/srconv.c:351
+#: util/cvanal.c:113 util/dnoise.c:445 util/lpanal.c:518 util/pvanal.c:258
+#: util/srconv.c:350
 #, c-format
 msgid "error while opening %s"
 msgstr "erreur en ouvrant %s"
@@ -11362,258 +11214,258 @@ msgstr "moins de son que ce qui était attendu !\n"
 msgid "Soundfile analysis for convolve"
 msgstr "Analyse du fichier son pour convolve"
 
-#: util/dnoise.c:285
+#: util/dnoise.c:281
 msgid "-o cannot be stdin\n"
 msgstr "-o ne peut pas être stdin\n"
 
-#: util/dnoise.c:297
+#: util/dnoise.c:293
 msgid "-A overriding local default WAV out"
 msgstr "-A prend le pas sur la sortie WAV par défaut"
 
-#: util/dnoise.c:302
+#: util/dnoise.c:298
 msgid "-J overriding local default AIFF/WAV out"
 msgstr "-J prend le pas sur la sortie AIFF/WAV par défaut"
 
-#: util/dnoise.c:309
+#: util/dnoise.c:305
 msgid "-W overriding local default AIFF out"
 msgstr "-W prend le pas sur la sortie AIFF par défaut"
 
-#: util/dnoise.c:356
+#: util/dnoise.c:345
 msgid "no t argument"
 msgstr "pas d'argument t"
 
-#: util/dnoise.c:379
+#: util/dnoise.c:368
 msgid "no n argument"
 msgstr "pas d'argument n"
 
-#: util/dnoise.c:384
+#: util/dnoise.c:373
 msgid "no b argument"
 msgstr "pas d'argument b"
 
-#: util/dnoise.c:392
+#: util/dnoise.c:381
 msgid "no B argument"
 msgstr "pas d'argument B"
 
-#: util/dnoise.c:404
+#: util/dnoise.c:393
 msgid "no E argument"
 msgstr "pas d'argument E"
 
-#: util/dnoise.c:408
+#: util/dnoise.c:397
 msgid "no N argument"
 msgstr "pas d'argument N"
 
-#: util/dnoise.c:412
+#: util/dnoise.c:401
 msgid "no M argument"
 msgstr "pas d'argument M"
 
-#: util/dnoise.c:416
+#: util/dnoise.c:405
 msgid "no L argument"
 msgstr "pas d'argument L"
 
-#: util/dnoise.c:420
+#: util/dnoise.c:409
 msgid "no w argument"
 msgstr "pas d'argument w"
 
-#: util/dnoise.c:424
+#: util/dnoise.c:413
 msgid "no D argument"
 msgstr "pas d'argument D"
 
-#: util/dnoise.c:431 util/srconv.c:328
+#: util/dnoise.c:420 util/srconv.c:327
 #, c-format
 msgid "Looking at %c\n"
 msgstr "Examen de %c\n"
 
-#: util/dnoise.c:438 util/srconv.c:336
+#: util/dnoise.c:427 util/srconv.c:335
 #, c-format
 msgid "Infile set to %s\n"
 msgstr "Infile fixé à %s\n"
 
-#: util/dnoise.c:441 util/srconv.c:339
+#: util/dnoise.c:430 util/srconv.c:338
 #, c-format
 msgid "End with %s\n"
 msgstr "Se termine par %s\n"
 
-#: util/dnoise.c:447
+#: util/dnoise.c:436
 msgid "dnoise: no input file\n"
 msgstr "dnoise : pas de nom de fichier d'entrée\n"
 
-#: util/dnoise.c:451
+#: util/dnoise.c:440
 msgid "Must have an example noise file (-i name)\n"
 msgstr "Il faut un fichier d'exemple de bruit (-i name)\n"
 
-#: util/dnoise.c:479
+#: util/dnoise.c:468
 #, c-format
 msgid "cannot open %s.\n"
 msgstr "impossible d'ouvrir %s.\n"
 
-#: util/dnoise.c:491 util/srconv.c:461 util/srconv.c:473
+#: util/dnoise.c:480 util/srconv.c:460 util/srconv.c:472
 #, c-format
 msgid "cannot open %s."
 msgstr "impossible d'ouvrir %s"
 
-#: util/dnoise.c:510
+#: util/dnoise.c:499
 msgid "dnoise: input MUST be mono or stereo\n"
 msgstr "dnoise : l'entrée DOIT être mono ou stéréo\n"
 
-#: util/dnoise.c:518
+#: util/dnoise.c:507
 msgid "dnoise: cannot open noise reference file\n"
 msgstr "dnoise : impossible d'ouvrir le fichier de référence du bruit\n"
 
-#: util/dnoise.c:523
+#: util/dnoise.c:512
 msgid "Incompatible sample rates\n"
 msgstr "Taux d'échantillonnage incompatibles\n"
 
-#: util/dnoise.c:542
+#: util/dnoise.c:531
 #, c-format
 msgid "dnoise: warning - N not a valid power of two; revised N = %d\n"
 msgstr ""
 "dnoise : avertissement - N n'est pas une puissance de deux ; valeur corrigée "
 "N = %d\n"
 
-#: util/dnoise.c:552
+#: util/dnoise.c:541
 msgid "dnoise: warning - do not specify both M and W\n"
 msgstr "dnoise : avertissement - ne pas spécifier à la fois M et W\n"
 
-#: util/dnoise.c:562
+#: util/dnoise.c:551
 msgid "dnoise: warning - invalid W ignored\n"
 msgstr "dnoise : avertissement - W invalide, ignoré\n"
 
-#: util/dnoise.c:576
+#: util/dnoise.c:565
 msgid "dnoise: warning - M is too small\n"
 msgstr "dnoise : avertissement - M est trop petit\n"
 
-#: util/dnoise.c:586
+#: util/dnoise.c:575
 msgid "dnoise: M too large\n"
 msgstr "dnoise : M trop grand\n"
 
-#: util/dnoise.c:592
+#: util/dnoise.c:581
 msgid "dnoise: L too large\n"
 msgstr "dnoise : L trop grand\n"
 
-#: util/dnoise.c:602
+#: util/dnoise.c:591
 #, c-format
 msgid "writing %u-byte blks of %s to %s"
 msgstr "écriture de blocs de %2$s de %1$u octets vers %3$s"
 
-#: util/dnoise.c:627 util/dnoise.c:666 util/dnoise.c:721 util/dnoise.c:732
-#: util/dnoise.c:736 util/dnoise.c:743 util/dnoise.c:753 util/dnoise.c:758
-#: util/dnoise.c:762 util/dnoise.c:766 util/dnoise.c:770
+#: util/dnoise.c:616 util/dnoise.c:655 util/dnoise.c:710 util/dnoise.c:721
+#: util/dnoise.c:725 util/dnoise.c:732 util/dnoise.c:742 util/dnoise.c:747
+#: util/dnoise.c:751 util/dnoise.c:755 util/dnoise.c:759
 msgid "dnoise: insufficient memory\n"
 msgstr "dnoise : mémoire insuffisante\n"
 
-#: util/dnoise.c:779 util/dnoise.c:788
+#: util/dnoise.c:768 util/dnoise.c:777
 msgid "dnoise: begin time is greater than EOF of noise file!"
 msgstr "dnoise : la date de début est supérieure au EOF du fichier de bruit !"
 
-#: util/dnoise.c:820
+#: util/dnoise.c:809
 msgid "dnoise: not enough samples of noise reference\n"
 msgstr "dnoise : pas assez d'échantillons de bruit de référence\n"
 
-#: util/dnoise.c:1118
+#: util/dnoise.c:1103
 #, c-format
 msgid "%5.1f seconds of input complete\n"
 msgstr "%5.1f secondes en entrée\n"
 
-#: util/dnoise.c:1137
+#: util/dnoise.c:1122
 msgid "processing complete\n"
 msgstr "traitement achevé\n"
 
-#: util/dnoise.c:1147
+#: util/dnoise.c:1132
 msgid "usage: dnoise [flags] input_file"
 msgstr "utilisation : dnoise [options] fichier d'entrée"
 
-#: util/dnoise.c:1149
+#: util/dnoise.c:1134
 msgid "flags:"
 msgstr "options :"
 
-#: util/dnoise.c:1150
+#: util/dnoise.c:1135
 msgid "i = noise reference soundfile"
 msgstr "i = fichier son du bruit de référence"
 
-#: util/dnoise.c:1151
+#: util/dnoise.c:1136
 msgid "o = output file"
 msgstr "o = fichier de sortie"
 
-#: util/dnoise.c:1152
+#: util/dnoise.c:1137
 msgid "N = # of bandpass filters (1024)"
 msgstr "N = nombre de filtres passe-bande (1024)"
 
-#: util/dnoise.c:1153
+#: util/dnoise.c:1138
 msgid "w = filter overlap factor: {0,1,(2),3} DON'T USE -w AND -M"
 msgstr ""
 "w = facteur de chevauchement de filtre : {0, 1, (2), 3} NE PAS UTILISER -w "
 "ET -M"
 
-#: util/dnoise.c:1154
+#: util/dnoise.c:1139
 msgid "M = analysis window length (N-1 unless -w is specified)"
 msgstr ""
 "M = longueur de la fenêtre d'analyse (N-1 à moins que -w ne soit spécifié)"
 
-#: util/dnoise.c:1155
+#: util/dnoise.c:1140
 msgid "L = synthesis window length (M)"
 msgstr "L = longueur de la fenêtre de synthèse (M)"
 
-#: util/dnoise.c:1156
+#: util/dnoise.c:1141
 msgid "D = decimation factor (M/8)"
 msgstr "D = facteur de décimation (M/8)"
 
-#: util/dnoise.c:1157
+#: util/dnoise.c:1142
 msgid "b = begin time in noise reference soundfile (0)"
 msgstr "b = date de début dans le fichier son du bruit de référence (0)"
 
-#: util/dnoise.c:1158
+#: util/dnoise.c:1143
 msgid "B = starting sample in noise reference soundfile (0)"
 msgstr ""
 "B = échantillon de départ dans le fichier son du bruit de référence (0)"
 
-#: util/dnoise.c:1159
+#: util/dnoise.c:1144
 msgid "e = end time in noise reference soundfile (end)"
 msgstr "e = date de fin dans le fichier son du bruit de référence (fin)"
 
-#: util/dnoise.c:1160
+#: util/dnoise.c:1145
 msgid "E = final sample in noise reference soundfile (end)"
 msgstr "E = échantillon de fin dans le fichier son du bruit de référence (fin)"
 
-#: util/dnoise.c:1161
+#: util/dnoise.c:1146
 msgid "t = threshold above noise reference in dB (30)"
 msgstr "t = seuil au-dessus du bruit de référence en dB (30)"
 
-#: util/dnoise.c:1162
+#: util/dnoise.c:1147
 msgid "S = sharpness of noise-gate turnoff (1) (1 to 5)"
 msgstr "S = raideur de la coupure du noise-gate (1) (1 à 5)"
 
-#: util/dnoise.c:1163
+#: util/dnoise.c:1148
 msgid "n = number of FFT frames to average over (5)"
 msgstr "n = nombre de trames de TFR à moyenner (5)"
 
-#: util/dnoise.c:1164
+#: util/dnoise.c:1149
 msgid "m = minimum gain of noise-gate when off in dB (-40)"
 msgstr "m = gain minimum du noise-gate pour la fermeture, en dB (-40)"
 
-#: util/dnoise.c:1165
+#: util/dnoise.c:1150
 msgid "V : verbose - print status info"
 msgstr "V : commenté - affichage de l'info d'état"
 
-#: util/dnoise.c:1166
+#: util/dnoise.c:1151
 msgid "A : AIFF format output"
 msgstr "A : format de sortie AIFF"
 
-#: util/dnoise.c:1167
+#: util/dnoise.c:1152
 msgid "W : WAV format output"
 msgstr "W : format de sortie WAV"
 
-#: util/dnoise.c:1168
+#: util/dnoise.c:1153
 msgid "J : IRCAM format output"
 msgstr "J : format de sortie IRCAM"
 
-#: util/dnoise.c:1187
+#: util/dnoise.c:1172
 #, c-format
 msgid "soundfile write returned sample count of %d, not %d\n"
 msgstr ""
 "l'écriture du fichier son a retourné un nombre d'échantillons de %d, au lieu "
 "de %d\n"
 
-#: util/dnoise.c:1189
+#: util/dnoise.c:1174
 msgid ""
 "(disk may be full...\n"
 " closing the file ...)\n"
@@ -11621,7 +11473,7 @@ msgstr ""
 "(le disque est peut-être plein...\n"
 " fermeture du fichier ...)\n"
 
-#: util/dnoise.c:1257
+#: util/dnoise.c:1242
 msgid "Removes noise from a sound file"
 msgstr "Nettoie le bruit d'un fichier son"
 
@@ -11629,7 +11481,7 @@ msgstr "Nettoie le bruit d'un fichier son"
 msgid "Usage:\tenvext [-flags] soundfile\n"
 msgstr "Utilisation : \tenvext [-options] fichierson\n"
 
-#: util/envext.c:54 util/srconv.c:738
+#: util/envext.c:54 util/srconv.c:737
 msgid "-o fnam\tsound output filename\n"
 msgstr "-o nomfic\tnom du fichier son de sortie\n"
 
@@ -11663,7 +11515,7 @@ msgstr "%s : erreur en ouvrant %s"
 msgid "enveloping %ld sample frames (%3.1f secs)\n"
 msgstr "mise en enveloppe de %ld trames d'échantillon (%3.1f secs)\n"
 
-#: util/envext.c:179
+#: util/envext.c:177
 msgid "Create a text file of envelope"
 msgstr "Création d'un fichier texte d'une enveloppe"
 
@@ -12098,7 +11950,7 @@ msgstr "Utilisation :\tmixer [-options] fichierson [-options] fichierson ..."
 msgid "Legal flags are:"
 msgstr "Les options légales sont :"
 
-#: util/mixer.c:107 util/scale.c:60 util/srconv.c:753
+#: util/mixer.c:107 util/scale.c:60 util/srconv.c:752
 msgid "-H#\tprint a heartbeat style 1, 2 or 3 at each soundfile write"
 msgstr ""
 "-H#\taffiche une pulsation de style 1, 2 ou 3 à chaque écriture dans le "
@@ -12141,7 +11993,7 @@ msgstr "options par défaut : mixer -s -otest -F 1.0 -S 0"
 msgid "mixer: error: "
 msgstr "mixer : erreur : "
 
-#: util/mixer.c:188 util/scale.c:161 util/srconv.c:232
+#: util/mixer.c:188 util/scale.c:161 util/srconv.c:231
 #, c-format
 msgid "%s not a recognized SFOUTYP env setting"
 msgstr "%s n'est pas un réglage d'env SFOUTYP reconnu"
@@ -12286,7 +12138,7 @@ msgid "pvanal cannot have both -w and -h"
 msgstr "pvanal ne peut pas avoir en même temps -w et -h"
 
 #: util/pvanal.c:279
-#, fuzzy, c-format
+#, c-format
 msgid "WARNING: pvanal: %d might be a bad window overlap index\n"
 msgstr "pvanal : %d est un mauvais index de chevauchement de fenêtres\n"
 
@@ -12373,17 +12225,17 @@ msgstr "pvanal erreur : %s\n"
 msgid "Soundfile analysis for pvoc"
 msgstr "Analyse du fichier son pour pvoc"
 
-#: util/pvanal.c:469
+#: util/pvanal.c:467
 #, c-format
 msgid "pvxanal: unable to create analysis file: %s"
 msgstr "pvxanal : impossible de créer le fichier d'analyse : %s"
 
-#: util/pvanal.c:500 util/pvanal.c:532
+#: util/pvanal.c:498 util/pvanal.c:530
 #, c-format
 msgid "pvxanal: error writing analysis frames: %s\n"
 msgstr "pvxanal : erreur en écrivant les trames d'analyse : %s\n"
 
-#: util/pvanal.c:542
+#: util/pvanal.c:540
 #, c-format
 msgid ""
 "\n"
@@ -12483,7 +12335,7 @@ msgid "-P fpnum\tscale file to given percentage of full"
 msgstr ""
 "-P fpnum\tpondère le fichier au pourcentage de la valeur maximale donné"
 
-#: util/scale.c:62 util/srconv.c:755
+#: util/scale.c:62 util/srconv.c:754
 msgid "-- fnam\tlog output to file"
 msgstr "-- nomfic\tcompte-rendu en sortie dans le fichier"
 
@@ -12636,60 +12488,60 @@ msgstr "Affichage de l'information sur des fichiers son"
 msgid "Sound format -%c has been overruled by -%c"
 msgstr "Le format son -%c a été remplacé par -%c"
 
-#: util/srconv.c:299
+#: util/srconv.c:298
 msgid "No Q argument"
 msgstr "Pas d'argument Q"
 
-#: util/srconv.c:304
+#: util/srconv.c:303
 msgid "No P argument"
 msgstr "Pas d'argument P"
 
-#: util/srconv.c:313
+#: util/srconv.c:312
 msgid "No r argument"
 msgstr "Pas d'argument r"
 
-#: util/srconv.c:322
+#: util/srconv.c:321
 msgid "No break file"
 msgstr "Pas de fichier de segments"
 
-#: util/srconv.c:345
+#: util/srconv.c:344
 msgid "No input given\n"
 msgstr "Aucune entrée n'a été fournie\n"
 
-#: util/srconv.c:362
+#: util/srconv.c:361
 msgid "srconv: cannot specify both -r and -P"
 msgstr "srconv : impossible de spécifier -r et -P en même temps"
 
-#: util/srconv.c:373
+#: util/srconv.c:372
 msgid "srconv: cannot open time-vary function file"
 msgstr ""
 "srconv : impossible d'ouvrir le fichier de la fonction de variation "
 "temporelle"
 
-#: util/srconv.c:389
+#: util/srconv.c:388
 msgid "srconv: too few x-y pairs in time-vary function file"
 msgstr ""
 "srconv : trop peu de paires x-y dans le fichier de la fonction de variation "
 "temporelle"
 
-#: util/srconv.c:403
+#: util/srconv.c:402
 msgid "srconv: first x value in time-vary function must be 0"
 msgstr ""
 "srconv : la première valeur de x dans la fonction de variation temporelle "
 "doit être 0"
 
-#: util/srconv.c:408
+#: util/srconv.c:407
 msgid "srconv: invalid initial y value in time-vary function"
 msgstr ""
 "srconv : valeur initiale de y non valide dans la fonction de variation "
 "temporelle"
 
-#: util/srconv.c:413 util/srconv.c:705
+#: util/srconv.c:412 util/srconv.c:704
 msgid "srconv: invalid x values in time-vary function"
 msgstr ""
 "srconv : valeurs de x non valides dans la fonction de variation temporelle"
 
-#: util/srconv.c:732
+#: util/srconv.c:731
 msgid ""
 "usage: srconv [flags] infile\n"
 "\n"
@@ -12699,26 +12551,26 @@ msgstr ""
 "\n"
 "options : "
 
-#: util/srconv.c:733
+#: util/srconv.c:732
 msgid ""
 "-P num\tpitch transposition ratio (srate/r) [do not specify both P and r]"
 msgstr ""
 "-P num\trapport de transposition de hauteur (srate/r) [ne pas spécifier à la "
 "fois P et r]"
 
-#: util/srconv.c:735
+#: util/srconv.c:734
 msgid "-Q num\tquality factor (1 to 8: default = 2)"
 msgstr "-Q num\tfacteur de qualité (1 à 8 : par défaut = 2)"
 
-#: util/srconv.c:736
+#: util/srconv.c:735
 msgid "-i filnam\tbreak file"
 msgstr "-i nomfic\tfichier de segments"
 
-#: util/srconv.c:737
+#: util/srconv.c:736
 msgid "-r num\toutput sample rate (must be specified)"
 msgstr "r num\ttaux d'échantillonnage en sortie (doit être spécifié)"
 
-#: util/srconv.c:821
+#: util/srconv.c:820
 msgid "Sample rate conversion"
 msgstr "Conversion du taux d'échantillonnage"
 
@@ -12870,6 +12722,344 @@ msgstr "extraction depuis la trame d'échantillon %ld (%3.1f secs)\n"
 msgid "Extract part of a sound file"
 msgstr "Extraction d'une partie d'un fichier son"
 
+#~ msgid "tableseg: not initialized"
+#~ msgstr "tableseg : non initialisé"
+
+#~ msgid "tablexseg: not initialized"
+#~ msgstr "tablexseg : non initialisé"
+
+#~ msgid "vdelayk: not initialized"
+#~ msgstr "vdelayk : non initialisé"
+
+#~ msgid "tab_i off end"
+#~ msgstr "tab_i hors-limite"
+
+#~ msgid " line %d: %s"
+#~ msgstr " ligne %d : %s"
+
+#~ msgid "Includes nested too deeply"
+#~ msgstr "Imbrication des boucles trop profonde"
+
+#~ msgid "Line %d: Unknown character: '%c'(%2x)\n"
+#~ msgstr "Ligne %d : Caractère inconnu : '%c'(%2x)\n"
+
+#~ msgid "Cannot open file \"%s\"\n"
+#~ msgstr "Impossible d'ouvrir le fichier \"%s\"\n"
+
+#~ msgid "No number following instr\n"
+#~ msgstr "Aucun numéro ne suit instr\n"
+
+#~ msgid "cannot find end of file %s"
+#~ msgstr "impossible de trouver la fin du fichier %s"
+
+#~ msgid "ftell error on %s"
+#~ msgstr "erreur ftell sur %s"
+
+#~ msgid "  included from line %d of file input %s%s"
+#~ msgstr "  inclus depuis la ligne %d du fichier en entrée %s%s"
+
+#~ msgid "  called from line %d of file input %s%s"
+#~ msgstr "  appelé depuis la ligne %d du fichier en entrée %s%s"
+
+#~ msgid "  in line %d of file input %s%s"
+#~ msgstr "  dans la ligne %d du fichier en entrée %s%s"
+
+#~ msgid "ungetscochar(): buffer overflow"
+#~ msgstr "ungetscochar(): dépassement de tampon"
+
+#~ msgid "Loop cannot start inside of a macro"
+#~ msgstr "Une boucle ne peut pas commencer à l'intérieure d'une macro"
+
+#~ msgid "Repeat cannot start inside of a macro (ignored)"
+#~ msgstr ""
+#~ "Une répétition ne peut pas commencer à l'intérieur d'une macro (ignorée)"
+
+#~ msgid "Ignoring name %s not in file\n"
+#~ msgstr "Nom %s ignoré, pas dans le fichier\n"
+
+#~ msgid "cannot open input file %s"
+#~ msgstr "impossible d'ouvrir le fichier en entrée %s"
+
+#~ msgid "rtaudio: AuHAL module enabled\n"
+#~ msgstr "rtaudio : module AuHAL activé\n"
+
+#~ msgid ""
+#~ "Invalid snapshot. Perhaps you modified orchestra widget code after you "
+#~ "saved the snapshot bank."
+#~ msgstr ""
+#~ "Instantané non valide. Peut-être avez-vous modifié le code d'un widget de "
+#~ "l'orchestre après avoir sauvegardé la banque d'instantanés."
+
+#~ msgid "No name for FLbutbank"
+#~ msgstr "Pas de nom pour FLbutbank"
+
+#~ msgid "FLsetsnap: invalid table"
+#~ msgstr "FLsetsnap : table non valide"
+
+#~ msgid ""
+#~ "Saving could overwrite the old file.\n"
+#~ "Are you sure to save ?"
+#~ msgstr ""
+#~ "La sauvegarde écrasera l'ancien fichier.\n"
+#~ " Etes-vous sûr ?"
+
+#~ msgid ""
+#~ "Saving could overwrite the old file.\n"
+#~ "Are you sure you want to save ?"
+#~ msgstr ""
+#~ "La sauvegarde écrasera l'ancien fichier\n"
+#~ "Etes-vous certain de vouloir sauvegarder ?"
+
+#~ msgid "No"
+#~ msgstr "Non"
+
+#~ msgid "Yes"
+#~ msgstr "Oui"
+
+#~ msgid "FLsavesnap: cannot open file"
+#~ msgstr "FLsavesnap : impossible d'ouvrir le fichier"
+
+#~ msgid "FLloadsnap: cannot open file"
+#~ msgstr "FLloadsnap : impossible d'ouvrir le fichier"
+
+#~ msgid ""
+#~ "unmatched widget, probably due to a modified orchestra. Modifying an "
+#~ "orchestra makes it incompatible with old snapshot files"
+#~ msgstr ""
+#~ "widget non apparié, probablement à cause d'une modification de "
+#~ "l'orchestre.La modification d'un orchestre le rend incompatible avec les "
+#~ "anciens fichiers d'instantanés"
+
+#~ msgid "end of widget thread\n"
+#~ msgstr "fin du thread de widget\n"
+
+#~ msgid "FLrun was already called"
+#~ msgstr "FLrun a déjà été appelé"
+
+#~ msgid "FL_run: memory allocation failure"
+#~ msgstr "FL_run : échec de l'allocation mémoire"
+
+#~ msgid "Error: Unable to fork process\n"
+#~ msgstr "Erreur : Impossible de lancer le processus\n"
+
+#~ msgid "FLpanel_end: invalid stack pointer: verify its placement"
+#~ msgstr "FLpanel_end : pointeur de pile non valide : vérifier sa position"
+
+#~ msgid ""
+#~ "FLpanel_end: invalid stack count: verify FLpanel/FLpanel_end count and "
+#~ "placement"
+#~ msgstr ""
+#~ "FLpanel_end : compte de la pile non valide : vérifier le nombre de "
+#~ "FLpanel/FLpanel_end et leurs positions"
+
+#~ msgid "FLscroll_end: invalid stack pointer: verify its placement"
+#~ msgstr "FLscroll_end : pointeur de pile non valide : vérifier sa position"
+
+#~ msgid ""
+#~ "FLscroll_end: invalid stack count: verify FLscroll/FLscroll_end count and "
+#~ "placement"
+#~ msgstr ""
+#~ "FLscroll_end : compte de la pile non valide : vérifier le nombre de "
+#~ "FLscroll/FLscroll_end et leurs positions"
+
+#~ msgid ""
+#~ "FLtabs_end: invalid stack count: verify FLtabs/FLtabs_end count and "
+#~ "placement"
+#~ msgstr ""
+#~ "FLtabs_end : pointeur de pile non valide : vérifier le nombre de FLtabs/"
+#~ "FLtabs_end et leurs positions"
+
+#~ msgid "FLgroup_end: invalid stack pointer: verify its placement"
+#~ msgstr "FLgroup_end : pointeur de pile non valide : vérifier sa position"
+
+#~ msgid ""
+#~ "FLgroup_end: invalid stack count: verify FLgroup/FLgroup_end count and "
+#~ "placement"
+#~ msgstr ""
+#~ "FLgroup_end : compte de la pile non valide : verifier le nombre de "
+#~ "FLgroup/FLgroup_end et leurs positions"
+
+#~ msgid "FLpack_end: invalid stack pointer: verify its placement"
+#~ msgstr "FLpack_end : pointeur de pile non valide : vérifier sa position"
+
+#~ msgid ""
+#~ "FLpack_end: invalid stack count: verify FLpack/FLpack_end count and "
+#~ "placement"
+#~ msgstr ""
+#~ "FLpack_end : compte de la pile non valide : vérifier le nombre de FLpack/"
+#~ "FLpack_end et leurs positions"
+
+#~ msgid "FLvalue cannot be set by FLsetVal.\n"
+#~ msgstr "FLvalue ne peut pas être rempli par FLsetVal.\n"
+
+#~ msgid "(fl_setWidgetValuei): not fully implemented yet; exp=%d"
+#~ msgstr "(fl_setWidgetValuei) : pas encore totalement implémenté ; exp=%d"
+
+#~ msgid "FLvalue cannot be set by FLsetVal\n"
+#~ msgstr "FLvalue ne peut pas être rempli par FLsetVal\n"
+
+#~ msgid "(fl_setWidgetValue_set): not fully implemented yet; exp=%d"
+#~ msgstr "(fl_setWidgetValue_set) : pas encore totalement implémenté ; exp=%d"
+
+#~ msgid "FLslider exponential, using non-labeled slider"
+#~ msgstr "FLslider exponentiel, utilisation d'une réglette sans étiquette"
+
+#~ msgid "FLslider: invalid slider type"
+#~ msgstr "FLslider : type de réglette non valide"
+
+#~ msgid "FLslider: zero is illegal in exponential operations"
+#~ msgstr "FLslider : zéro est interdit dans les opérations exponentielles"
+
+#~ msgid "invalid ZAK space allocation"
+#~ msgstr "espace d'allocation ZAK non valide"
+
+#~ msgid "FLslidBnk: zero is illegal in exponential operations"
+#~ msgstr "FLslidBnk : zéro est interdit dans les opérations exponentielles"
+
+#~ msgid "FLjoy X axe: zero is illegal in exponential operations"
+#~ msgstr "FLjoy axe X : zéro est interdit dans les opérations exponentielles"
+
+#~ msgid "FLknob: invalid knob type"
+#~ msgstr "FLknob : type de bouton rotatif non valide"
+
+#~ msgid "FLknob: zero is illegal in exponential operations"
+#~ msgstr "FLknob : zéro est interdit dans les opérations exponentielles"
+
+#~ msgid "FLbutton \"%s\" ignoring snapshot capture retrieve"
+#~ msgstr "FLbutton \"%s\" ignore les instantanés de capture et de restitution"
+
+#~ msgid "FLbutton: invalid button type"
+#~ msgstr "FLbutton : type de bouton non valide"
+
+#~ msgid "FLcloseButton: invalid stack pointer: verify its placement"
+#~ msgstr "FLcloseButton : pointeur de pile non valide : vérifier sa position"
+
+#~ msgid "Command Found: %s\n"
+#~ msgstr "Commande trouvée : %s\n"
+
+#~ msgid "FLbuttonBank: invalid button type"
+#~ msgstr "FLbuttonBank : type de bouton non valide"
+
+#~ msgid "FLcount \"%s\" ignoring snapshot capture retrieve"
+#~ msgstr "FLcount \"%s\" ignore les instantanés de capture et de restitution"
+
+#~ msgid "FLroller: invalid roller type"
+#~ msgstr "FLroller : type de molette non valide"
+
+#~ msgid "FLhvsBox: a square area must be delimited by 2 lines at least"
+#~ msgstr ""
+#~ "FLhvsBox : une surface carrée doit être délimitée par au moins 2 lignes"
+
+#~ msgid "FLkeyIn: invalid table number"
+#~ msgstr "FLkeyIn : numéro de table non valide"
+
+#~ msgid "FLkeyIn: table too short!"
+#~ msgstr "FLkeyIn : table trop courte !"
+
+#~ msgid "FLvslidBnk: zero is illegal in exponential operations"
+#~ msgstr "FLvslidBnk : zéro est illégal dans les opérations exponentielles"
+
+#~ msgid "FLsliderBank: zero is illegal in exponential operations"
+#~ msgstr "FLsliderBank : zéro est illégal dans les opérations exponentielles"
+
+#~ msgid "FLslidBnk2: FLslider exponential, using non-labeled slider"
+#~ msgstr ""
+#~ "FLslidBnk2 : FLslider exponentiel, utilisant une réglette sans étiquette"
+
+#~ msgid "FLsldBnkSet: invalid table number"
+#~ msgstr "FLsldBnkSet : numéro de table non valide"
+
+#~ msgid "FLslidBnkSet: table too short!"
+#~ msgstr "FLslidBnkSet : table trop courte !"
+
+#~ msgid "FLsldBnkSet: invalid outable number"
+#~ msgstr "FLsldBnkSet : numéro de outable non valide"
+
+#~ msgid "FLslidBnkSet: too many sliders to reset!"
+#~ msgstr "FLslidBnkSet : trop de réglettes à réinitialiser !"
+
+#~ msgid "FLslidBnkSet: function mapping not available"
+#~ msgstr "FLslidBnkSet : type de fonction (lin. ou exp.) non disponible"
+
+#~ msgid ""
+#~ "FLslidBnk2Setk: value out of range: function mapping requires a 0 to 1 "
+#~ "range for input"
+#~ msgstr ""
+#~ "FLslidBnk2Setk : valeur hors limites : le mappage de fonction nécessite "
+#~ "en entrée l'intervalle de 0 à 1"
+
+#~ msgid "FLsldBnkSetk: invalid table number"
+#~ msgstr "FLslidBnkSetk : numéro de table non valide"
+
+#~ msgid "FLslidBnkSetk: table too short!"
+#~ msgstr "FLslidBnkSetk : table trop courte !"
+
+#~ msgid "FLsldBnkSetk: invalid outable number"
+#~ msgstr "FLslidBnkSetk : numéro de outable non valide"
+
+#~ msgid "FLslidBnkSetk: too many sliders to reset!"
+#~ msgstr "FLslidBnkSetk : trop de réglettes à réinitialiser !"
+
+#~ msgid "FLslidBnkSetk: invalid table number"
+#~ msgstr "FLslidBnkSetk : numéro de table non valide"
+
+#~ msgid "FLslidBnkSetk: invalid outable number"
+#~ msgstr "FLslidBnkSetk : numéro de outable non valide"
+
+#~ msgid "FLxyin: none of X limits can be zero in exponential mode!"
+#~ msgstr ""
+#~ "FLxyin : aucune des limites de X ne peut être zéro en mode exponentiel !"
+
+#~ msgid "FLxyin: none of Y limits can be zero in exponential mode!"
+#~ msgstr ""
+#~ "FLxyin : aucune des limites de Y ne peut être zéro en mode exponentiel !"
+
+#~ msgid ""
+#~ "\n"
+#~ "Orchestra sampling rate is not compatible with HRTF data files\n"
+#~ "Should be %.0f, see Csound help for object\n"
+#~ "\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Le taux d'évhantillonnage de l'orchestre n'est pas compatible avec les "
+#~ "fichiers de données HRTF.\n"
+#~ "Il devrait valoir %.0f, voir l'aide de Csound à ce sujet\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "\n"
+#~ "\n"
+#~ " Sampling rate not supported, exiting\n"
+#~ "\n"
+#~ msgstr ""
+#~ "\n"
+#~ "\n"
+#~ "\n"
+#~ " Taux d'échantillonnage non supporté, abandon\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Orchestra sampling rate is not compatible with HRTF data files\n"
+#~ "Should be %.0f, see Csound help for object\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Le taux d'échantillonnage de l'orchestre n'est pas compatible avec les "
+#~ "fichiers de données HRTF.\n"
+#~ "Il devrait valoir %.0f, voir l'aide de Csound à ce sujet\n"
+#~ "\n"
+
+#~ msgid "scorename: %s\n"
+#~ msgstr "nom de la partition :  %s\n"
+
+#~ msgid "Failed to create %s"
+#~ msgstr "La création de %s a échoué"
+
+#~ msgid "The buffersize must be <= %d samples to fit in a udp-packet."
+#~ msgstr ""
+#~ "La taille du tampon doit être <= %d échantillons pour entrer dans un "
+#~ "paquet udp."
+
 #~ msgid "csound_orcerror on line %d: %s\n"
 #~ msgstr "csound_orcerror ligne %d : %s\n"
 
diff --git a/po/german.po b/po/german.po
index 191da50..ba4ea95 100644
--- a/po/german.po
+++ b/po/german.po
@@ -8,7 +8,7 @@ msgstr ""
 "Project-Id-Version: CSOUND 5.xx\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2008-07-26 19:39+0100\n"
-"PO-Revision-Date: 2008-09-07 15:24+0100\n"
+"PO-Revision-Date: 2011-12-20 23:56+0000\n"
 "Last-Translator: JPff\n"
 "Language-Team: German\n"
 "Language: \n"
@@ -31,22 +31,22 @@ msgstr ""
 msgid "auxlist for instr %d (%p):\n"
 msgstr ""
 
-#: Engine/auxfd.c:153
+#: Engine/auxfd.c:154
 #, c-format
 msgid "\tauxch at %p: size %ld, auxp %p, endp %p\n"
 msgstr ""
 
-#: Engine/auxfd.c:165
+#: Engine/auxfd.c:166
 #, c-format
 msgid "fdlist for instr %s [%d] (%p):"
 msgstr ""
 
-#: Engine/auxfd.c:168
+#: Engine/auxfd.c:169
 #, c-format
 msgid "fdlist for instr %d (%p):"
 msgstr ""
 
-#: Engine/auxfd.c:171
+#: Engine/auxfd.c:172
 #, c-format
 msgid "  fd %p in %p"
 msgstr ""
@@ -99,359 +99,319 @@ msgstr ""
 msgid "(unknown error)"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:214 Engine/rdorch.c:1832
+#: Engine/csound_orc_compile.c:138
+#, c-format
+msgid ""
+"input arg %d '%s' of type %s not allowed when expecting %c (for opcode %s), "
+"line %d\n"
+msgstr ""
+
+#: Engine/csound_orc_compile.c:265 Engine/rdorch.c:1862
 msgid "missing or extra arg"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:218
+#: Engine/csound_orc_compile.c:269
 #, fuzzy
 msgid "too many input args\n"
-msgstr "zu viele Argumente"
+msgstr "zu viele Argumente\n"
 
-#: Engine/csound_orc_compile.c:475
+#: Engine/csound_orc_compile.c:304
 #, c-format
-msgid "create_opcode: No rule to handle statement of type %d\n"
+msgid "input arg '%s' used before defined (in opcode %s), line %d\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:671
+#: Engine/csound_orc_compile.c:380
 #, c-format
-msgid "create_instrument: instr num %ld\n"
+msgid ""
+"output name previously used, type '%c' must be uniquely defined, line %d"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:681
+#: Engine/csound_orc_compile.c:386
 #, c-format
-msgid "create_instrument: instr name %s\n"
+msgid "output arg '%s' illegal type (for opcode %s), line %d\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:688 Engine/otran.c:351
-msgid "invalid name for instrument"
-msgstr "unzulässiger Name für Instrument"
-
-#: Engine/csound_orc_compile.c:692 Engine/otran.c:356
+#: Engine/csound_orc_compile.c:541
 #, c-format
-msgid "instr %s redefined"
+msgid "create_opcode: No rule to handle statement of type %d\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:833 Engine/otran.c:145 Engine/symbtab.c:394
+#: Engine/csound_orc_compile.c:738
 #, c-format
-msgid "invalid input type for opcode %s"
+msgid "create_instrument: instr num %ld\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:838 Engine/otran.c:150 Engine/symbtab.c:399
+#: Engine/csound_orc_compile.c:748
 #, c-format
-msgid "too many input args for opcode %s"
+msgid "create_instrument: instr name %s\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:853 Engine/otran.c:165 Engine/symbtab.c:414
-#, c-format
-msgid "too many output args for opcode %s"
-msgstr ""
+#: Engine/csound_orc_compile.c:755 Engine/otran.c:364
+msgid "invalid name for instrument"
+msgstr "unzulässiger Name für Instrument"
 
-#: Engine/csound_orc_compile.c:869 Engine/otran.c:187 Engine/symbtab.c:433
+#: Engine/csound_orc_compile.c:759 Engine/otran.c:370
 #, c-format
-msgid "invalid output type for opcode %s"
+msgid "instr %s redefined"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:954 Engine/otran.c:339
+#: Engine/csound_orc_compile.c:903 Engine/otran.c:352
 #, c-format
 msgid "instr %ld redefined"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:964
+#: Engine/csound_orc_compile.c:914
 msgid "!!! csound->opcodeInfo is NULL !!!\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1111
+#: Engine/csound_orc_compile.c:1083
 #, c-format
 msgid "Unknown TREE node of type %d found in root.\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1168 Engine/otran.c:565 Engine/otran.c:1414
+#: Engine/csound_orc_compile.c:1140 Engine/otran.c:579 Engine/otran.c:1433
 #, c-format
 msgid "%s invalid sample rate"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1170 Engine/otran.c:567 Engine/otran.c:1416
+#: Engine/csound_orc_compile.c:1142 Engine/otran.c:581 Engine/otran.c:1435
 #, c-format
 msgid "%s invalid control rate"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1173 Engine/otran.c:570 Engine/otran.c:1412
+#: Engine/csound_orc_compile.c:1146 Engine/otran.c:584 Engine/otran.c:1431
 #, c-format
 msgid "%s invalid ksmps value"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1176 Engine/otran.c:572 Engine/otran.c:1418
+#: Engine/csound_orc_compile.c:1149 Engine/otran.c:587 Engine/otran.c:1437
 #, c-format
 msgid "%s inconsistent sr, kr, ksmps"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1190
+#: Engine/csound_orc_compile.c:1165
 msgid "perf-pass statements illegal in header blk\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1195
+#: Engine/csound_orc_compile.c:1170
 #, c-format
 msgid "%d syntax errors in orchestra.  compilation invalid\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1255 Engine/otran.c:656
+#: Engine/csound_orc_compile.c:1230 Engine/otran.c:671
 msgid "inconsistent argoff sumcount"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1327 Engine/otran.c:725
+#: Engine/csound_orc_compile.c:1302 Engine/otran.c:740
 #, c-format
 msgid "LABELS list is full...extending to %d\n"
 msgstr "LABELS Liste ist volles... Verlängern bis %d\n"
 
-#: Engine/csound_orc_compile.c:1365 Engine/otran.c:763
+#: Engine/csound_orc_compile.c:1340 Engine/otran.c:778
 #, c-format
 msgid "GOTOS list is full..extending to %d\n"
 msgstr "GOTOS Liste ist volles...Verlängern bis %d\n"
 
-#: Engine/csound_orc_compile.c:1398 Engine/otran.c:796
+#: Engine/csound_orc_compile.c:1373 Engine/otran.c:811
 #, c-format
 msgid "target label '%s' not found"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1463 Engine/otran.c:851
+#: Engine/csound_orc_compile.c:1451 Engine/otran.c:866
 #, c-format
 msgid "string syntax '%s'"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1513 Engine/otran.c:901
+#: Engine/csound_orc_compile.c:1501 Engine/otran.c:916
 #, c-format
 msgid "numeric syntax '%s'"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1539 Engine/otran.c:927
+#: Engine/csound_orc_compile.c:1527 Engine/otran.c:942
 #, c-format
 msgid "extending Floating pool to %d\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1578 Engine/otran.c:999
+#: Engine/csound_orc_compile.c:1566 Engine/otran.c:1018
 msgid "gblnamset(): memory allocation failure"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1606 Engine/otran.c:1027
+#: Engine/csound_orc_compile.c:1594 Engine/otran.c:1046
 msgid "lclnamset(): memory allocation failure"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1632 Engine/otran.c:1052
+#: Engine/csound_orc_compile.c:1620 Engine/otran.c:1071
 msgid "unexpected global name"
 msgstr "unerwarteter globaler Name"
 
-#: Engine/csound_orc_compile.c:1655 Engine/otran.c:1074
+#: Engine/csound_orc_compile.c:1643 Engine/otran.c:1093
 msgid "unknown nametype"
 msgstr ""
 
-#: Engine/csound_orc.l:239
+#: Engine/csound_orc_expressions.c:459
 #, c-format
-msgid "unterminated string found on line %d >>%s<<\n"
+msgid "error: function %s with arg type %c not found, line %d \n"
 msgstr ""
 
-#: Engine/csound_orc.l:259 Engine/csound_orc.l:286 Engine/csound_orc.l:314
-#: Engine/csound_orc.l:367 Engine/rdorch.c:901 Engine/sread.c:396
+#: Engine/csound_orc_expressions.c:862
 #, c-format
-msgid "Undefined macro: '%s'"
-msgstr ""
-
-#: Engine/csound_orc.l:265 Engine/csound_orc.l:292
-msgid "Includes nested too deeply"
+msgid "error: non-existent statement in conditional, line %d \n"
 msgstr ""
 
-#: Engine/csound_orc.l:335 Engine/csound_orc.l:388 Engine/rdorch.c:940
-#, c-format
+#: Engine/csound_orc_semantics.c:157
+#, fuzzy, c-format
 msgid ""
-"Missing argument terminator\n"
-"%.98s"
-msgstr ""
-
-#: Engine/csound_orc.l:484
-#, c-format
-msgid "Line %d: Unknown character: '%c'(%2x)\n"
-msgstr ""
-
-#: Engine/csound_orc.l:527
-#, c-format
-msgid "Cannot open file \"%s\"\n"
-msgstr ""
-
-#: Engine/csound_orc.l:573 Engine/rdorch.c:689 Engine/sread.c:1595
-msgid "macro error\n"
-msgstr ""
-
-#: Engine/csound_orc.l:631 Engine/rdorch.c:845 Engine/sread.c:1686
-#, c-format
-msgid "macro %s undefined\n"
-msgstr ""
-
-#: Engine/csound_orc.l:645 Engine/rdorch.c:859 Engine/sread.c:294
-msgid "Undefining undefined macro"
+"\n"
+"error: %s  (token \"%s\")"
 msgstr ""
 
-#: Engine/csound_orc.l:786 Engine/rdorch.c:413 Engine/sread.c:741
+#: Engine/csound_orc_semantics.c:159
 #, c-format
-msgid "Macro definition for %*s\n"
-msgstr ""
-
-#: Engine/csound_orc.l:789 Engine/rdorch.c:416
-msgid "Invalid macro name for --omacro"
-msgstr ""
-
-#: Engine/csound_orc.y:270
-msgid "No number following instr\n"
+msgid ""
+" line %d:\n"
+">>>"
 msgstr ""
 
-#: Engine/csound_orc_semantics.c:127
+#: Engine/csound_orc_semantics.c:732
 #, fuzzy, c-format
-msgid "error: %s (token \"%s\")"
-msgstr "%s: Störung: %s (%s)\n"
-
-#: Engine/csound_orc_semantics.c:129
-#, c-format
-msgid " line %d: %s"
-msgstr ""
-
-#: Engine/csound_orc_semantics.c:702 Engine/rdorch.c:1863
-msgid "insufficient required arguments"
+msgid "insufficient required arguments for opcode %s on line %d\n"
 msgstr ""
 
-#: Engine/csound_orc_semantics.c:768 Engine/rdorch.c:1617 Engine/rdorch.c:1635
-#: Engine/rdorch.c:1676 Engine/rdorch.c:1811 Engine/rdorch.c:1980
+#: Engine/csound_orc_semantics.c:797 Engine/rdorch.c:1644 Engine/rdorch.c:1662
+#: Engine/rdorch.c:1703 Engine/rdorch.c:1841 Engine/rdorch.c:2011
 #, c-format
 msgid "modified opcod: %s"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:113 Engine/cs_par_dispatch.c:125
+#: Engine/cs_par_dispatch.c:115 Engine/cs_par_dispatch.c:128
 #, c-format
 msgid "Poorly specified global lock index: %i [max: %i]\n"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:138 Engine/cs_par_dispatch.c:157
+#: Engine/cs_par_dispatch.c:142 Engine/cs_par_dispatch.c:162
 msgid "Invalid NULL parameter name for a global variable\n"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:505 Engine/cs_par_dispatch.c:528
-#: Engine/cs_par_dispatch.c:2463 Engine/cs_par_dispatch.c:2507
-#: Engine/cs_par_dispatch.c:2509 Engine/cs_par_dispatch.c:2570
+#: Engine/cs_par_dispatch.c:526 Engine/cs_par_dispatch.c:553
+#: Engine/cs_par_dispatch.c:2543 Engine/cs_par_dispatch.c:2588
+#: Engine/cs_par_dispatch.c:2590 Engine/cs_par_dispatch.c:2654
 msgid "Invalid NULL Parameter entry"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:507 Engine/cs_par_dispatch.c:541
-#: Engine/cs_par_dispatch.c:566 Engine/cs_par_dispatch.c:605
+#: Engine/cs_par_dispatch.c:528 Engine/cs_par_dispatch.c:567
+#: Engine/cs_par_dispatch.c:594 Engine/cs_par_dispatch.c:635
 msgid "Invalid NULL Parameter name"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:512
+#: Engine/cs_par_dispatch.c:535
 msgid "Failed to allocate Opcode Weight cache entry"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:632 Engine/cs_par_dispatch.c:718
+#: Engine/cs_par_dispatch.c:664 Engine/cs_par_dispatch.c:755
 msgid "No Weights to Dump (Using Defaults)\n"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:670 Engine/cs_par_dispatch.c:794
+#: Engine/cs_par_dispatch.c:705 Engine/cs_par_dispatch.c:835
 #, c-format
 msgid "Opcode Weight Spec File not found at: %s"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:722
+#: Engine/cs_par_dispatch.c:759
 msgid "Weights Dump\n"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:866
+#: Engine/cs_par_dispatch.c:907
 #, c-format
 msgid "Parallel Spec File not found at: %s"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:872
+#: Engine/cs_par_dispatch.c:913
 msgid "Parallel Spec File invalid format expected weight_min parameter"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:877
+#: Engine/cs_par_dispatch.c:918
 msgid "Parallel Spec File invalid format expected weight_max parameter"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:881
+#: Engine/cs_par_dispatch.c:922
 msgid "Parallel Spec File invalid format expected roots_avail_min parameter"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:885
+#: Engine/cs_par_dispatch.c:926
 msgid "Parallel Spec File invalid format expected roots_avail_max parameter"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:961 Engine/cs_par_dispatch.c:985
-#: Engine/cs_par_dispatch.c:1109 Engine/cs_par_dispatch.c:1195
-#: Engine/cs_par_dispatch.c:1332 Engine/cs_par_dispatch.c:1366
-#: Engine/cs_par_dispatch.c:1383 Engine/cs_par_dispatch.c:1405
-#: Engine/cs_par_dispatch.c:1432 Engine/cs_par_dispatch.c:1452
-#: Engine/cs_par_dispatch.c:1476 Engine/cs_par_dispatch.c:1566
-#: Engine/cs_par_dispatch.c:1621 Engine/cs_par_dispatch.c:1714
-#: Engine/cs_par_dispatch.c:1769 Engine/cs_par_dispatch.c:2597
+#: Engine/cs_par_dispatch.c:1003 Engine/cs_par_dispatch.c:1027
+#: Engine/cs_par_dispatch.c:1155 Engine/cs_par_dispatch.c:1251
+#: Engine/cs_par_dispatch.c:1405 Engine/cs_par_dispatch.c:1439
+#: Engine/cs_par_dispatch.c:1456 Engine/cs_par_dispatch.c:1478
+#: Engine/cs_par_dispatch.c:1506 Engine/cs_par_dispatch.c:1528
+#: Engine/cs_par_dispatch.c:1552 Engine/cs_par_dispatch.c:1644
+#: Engine/cs_par_dispatch.c:1699 Engine/cs_par_dispatch.c:1792
+#: Engine/cs_par_dispatch.c:1847 Engine/cs_par_dispatch.c:2681
 msgid "Invalid NULL Parameter dag"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:966
+#: Engine/cs_par_dispatch.c:1008
 msgid "Failed to allocate dag"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1017 Engine/cs_par_dispatch.c:1040
-#: Engine/cs_par_dispatch.c:1062 Engine/cs_par_dispatch.c:1064
+#: Engine/cs_par_dispatch.c:1060 Engine/cs_par_dispatch.c:1083
+#: Engine/cs_par_dispatch.c:1105 Engine/cs_par_dispatch.c:1107
 msgid "Invalid NULL Parameter dag_node"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1019
+#: Engine/cs_par_dispatch.c:1062
 #, fuzzy
 msgid "Invalid NULL Parameter instr"
 msgstr "unzulässiger Name für Instrument"
 
-#: Engine/cs_par_dispatch.c:1021
+#: Engine/cs_par_dispatch.c:1064
 msgid "Invalid NULL Parameter insds"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1026 Engine/cs_par_dispatch.c:1048
+#: Engine/cs_par_dispatch.c:1069 Engine/cs_par_dispatch.c:1091
 msgid "Failed to allocate dag_node"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1043
+#: Engine/cs_par_dispatch.c:1086
 #, fuzzy
 msgid "Invalid Parameter count must be greater than 0"
-msgstr "granule_set: iratio müssen grösseres dann 0 sein"
+msgstr ""
 
-#: Engine/cs_par_dispatch.c:1175 Engine/cs_par_dispatch.c:1433
-#: Engine/cs_par_dispatch.c:2465 Engine/cs_par_dispatch.c:2571
-#: Engine/cs_par_dispatch.c:2598
+#: Engine/cs_par_dispatch.c:1229 Engine/cs_par_dispatch.c:1508
+#: Engine/cs_par_dispatch.c:2545 Engine/cs_par_dispatch.c:2655
+#: Engine/cs_par_dispatch.c:2682
 msgid "Invalid NULL Parameter chain"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1183
+#: Engine/cs_par_dispatch.c:1237
 #, c-format
 msgid "Failed to find semantic information for instrument '%i'"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1478
+#: Engine/cs_par_dispatch.c:1554
 msgid "Invalid NULL Parameter node"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1480
+#: Engine/cs_par_dispatch.c:1556
 msgid "Invalid NULL Parameter update_hdl"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1569
+#: Engine/cs_par_dispatch.c:1647
 msgid "Invalid Parameter update_hdl is outside the DAG range"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:2417
+#: Engine/cs_par_dispatch.c:2497
 #, c-format
 msgid "Parallel Dump File not found at: %s for writing"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:2477
+#: Engine/cs_par_dispatch.c:2557
 msgid "Failed to allocate Dag2 cache entry"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:2527
+#: Engine/cs_par_dispatch.c:2610
 msgid "Cache Update\n"
 msgstr ""
 
@@ -465,12 +425,12 @@ msgstr ""
 msgid "Creating search path cache for '%s':"
 msgstr ""
 
-#: Engine/envvar.c:1082
+#: Engine/envvar.c:1083
 #, c-format
 msgid "internal error: csoundFileOpen(): invalid type: %d"
 msgstr ""
 
-#: Engine/envvar.c:1264
+#: Engine/envvar.c:1266
 #, c-format
 msgid "internal error: csoundCreateFileHandle(): invalid type: %d"
 msgstr ""
@@ -528,345 +488,346 @@ msgstr ""
 msgid "expression syntax"
 msgstr ""
 
-#: Engine/fgens.c:95
+#: Engine/fgens.c:91
 msgid "unknown GEN number"
 msgstr ""
 
-#: Engine/fgens.c:137
+#: Engine/fgens.c:133
 msgid "ftable does not exist"
 msgstr ""
 
-#: Engine/fgens.c:142
+#: Engine/fgens.c:138
 #, c-format
 msgid "ftable %d now deleted\n"
 msgstr ""
 
-#: Engine/fgens.c:157 Engine/fgens.c:1597 Engine/fgens.c:1683
-#: Engine/fgens.c:1762 Engine/fgens.c:1878 Engine/fgens.c:1959
-#: Engine/fgens.c:2867
+#: Engine/fgens.c:153 Engine/fgens.c:1593 Engine/fgens.c:1679
+#: Engine/fgens.c:1758 Engine/fgens.c:1874 Engine/fgens.c:1955
+#: Engine/fgens.c:2909
 msgid "insufficient gen arguments"
 msgstr ""
 
-#: Engine/fgens.c:183 Opcodes/ftgen.c:116
+#: Engine/fgens.c:179 Opcodes/ftgen.c:116
 #, c-format
 msgid "Named gen \"%s\" not defined"
 msgstr ""
 
-#: Engine/fgens.c:190
+#: Engine/fgens.c:186
 msgid "illegal gen number"
 msgstr ""
 
-#: Engine/fgens.c:198
-msgid "deferred size for GENs 1, 23 or 28 only"
+#: Engine/fgens.c:194
+msgid "deferred size for GENs 1, 23, 28 or 49 only"
 msgstr ""
 
-#: Engine/fgens.c:201 Engine/fgens.c:249
+#: Engine/fgens.c:197 Engine/fgens.c:245
 #, c-format
 msgid "ftable %d:\n"
 msgstr ""
 
-#: Engine/fgens.c:226 Engine/fgens.c:233
+#: Engine/fgens.c:222 Engine/fgens.c:229
 msgid "illegal table length"
 msgstr "ungültige Tabelle Länge"
 
-#: Engine/fgens.c:292 Engine/fgens.c:2219
+#: Engine/fgens.c:288 Engine/fgens.c:2215
 #, c-format
 msgid ""
 "ftable %d relocating due to size change\n"
 "         currently active instruments may find this disturbing"
 msgstr ""
 
-#: Engine/fgens.c:350 Engine/fgens.c:471 Engine/fgens.c:555 Engine/fgens.c:636
-#: Engine/fgens.c:711 Engine/fgens.c:760 Engine/fgens.c:881 Engine/fgens.c:958
-#: Engine/fgens.c:1053 Engine/fgens.c:1097 Engine/fgens.c:1144
-#: Engine/fgens.c:1397 Engine/fgens.c:1459 Engine/fgens.c:1681
-#: Engine/fgens.c:1759 Engine/fgens.c:2114 Engine/fgens.c:2821
-#: Engine/fgens.c:2864
+#: Engine/fgens.c:346 Engine/fgens.c:467 Engine/fgens.c:551 Engine/fgens.c:632
+#: Engine/fgens.c:707 Engine/fgens.c:756 Engine/fgens.c:877 Engine/fgens.c:954
+#: Engine/fgens.c:1049 Engine/fgens.c:1093 Engine/fgens.c:1140
+#: Engine/fgens.c:1393 Engine/fgens.c:1455 Engine/fgens.c:1677
+#: Engine/fgens.c:1755 Engine/fgens.c:2110 Engine/fgens.c:2863
+#: Engine/fgens.c:2906
 msgid "using extended arguments\n"
 msgstr ""
 
-#: Engine/fgens.c:374
+#: Engine/fgens.c:370
 msgid "no coefs present"
 msgstr ""
 
-#: Engine/fgens.c:379 Engine/fgens.c:645 Engine/fgens.c:653
+#: Engine/fgens.c:375 Engine/fgens.c:641 Engine/fgens.c:649
 msgid "illegal x interval"
 msgstr ""
 
-#: Engine/fgens.c:408 Engine/fgens.c:557 Engine/fgens.c:638 Engine/fgens.c:883
-#: Engine/fgens.c:1354 Engine/fgens.c:2378 Engine/fgens.c:2694 Top/main.c:142
-#: util/cvanal.c:66 util/lpanal.c:398 util/pvanal.c:170
+#: Engine/fgens.c:404 Engine/fgens.c:553 Engine/fgens.c:634 Engine/fgens.c:879
+#: Engine/fgens.c:1350 Engine/fgens.c:2375 Engine/fgens.c:2690
+#: Engine/fgens.c:2810 Top/main.c:141 util/cvanal.c:66 util/lpanal.c:398
+#: util/pvanal.c:170
 msgid "insufficient arguments"
 msgstr "unzulängliche Argumente"
 
-#: Engine/fgens.c:412 Engine/fgens.c:1359
+#: Engine/fgens.c:408 Engine/fgens.c:1355
 msgid "unknown srctable number"
 msgstr ""
 
-#: Engine/fgens.c:425
+#: Engine/fgens.c:421
 msgid "table size too large"
 msgstr ""
 
-#: Engine/fgens.c:510 Engine/fgens.c:543
+#: Engine/fgens.c:506 Engine/fgens.c:539
 msgid "gen call has negative segment size:"
 msgstr ""
 
-#: Engine/fgens.c:512
+#: Engine/fgens.c:508
 msgid "illegal input vals for gen call, beginning:"
 msgstr ""
 
-#: Engine/fgens.c:578
+#: Engine/fgens.c:574
 msgid "negative segsiz"
 msgstr ""
 
-#: Engine/fgens.c:787
+#: Engine/fgens.c:783
 msgid "nh partials < 1"
 msgstr ""
 
-#: Engine/fgens.c:886
+#: Engine/fgens.c:882
 msgid "illegal xint value"
 msgstr ""
 
-#: Engine/fgens.c:889
+#: Engine/fgens.c:885
 msgid "illegal xamp value"
 msgstr ""
 
-#: Engine/fgens.c:961
+#: Engine/fgens.c:957
 msgid "uneven number of args"
 msgstr ""
 
-#: Engine/fgens.c:1081
+#: Engine/fgens.c:1077
 msgid "gen call has illegal x-ordinate values:"
 msgstr ""
 
-#: Engine/fgens.c:1099
+#: Engine/fgens.c:1095
 msgid "wrong number of args"
 msgstr ""
 
-#: Engine/fgens.c:1113
+#: Engine/fgens.c:1109
 msgid "a range given exceeds table length"
 msgstr ""
 
-#: Engine/fgens.c:1120
+#: Engine/fgens.c:1116
 msgid "an input function does not exist"
 msgstr ""
 
-#: Engine/fgens.c:1253
+#: Engine/fgens.c:1249
 msgid "No such window!"
 msgstr ""
 
-#: Engine/fgens.c:1271
+#: Engine/fgens.c:1267
 msgid "Wrong number of input arguments"
 msgstr "Falsche Zahl der Eingang Argumente"
 
-#: Engine/fgens.c:1272
+#: Engine/fgens.c:1268
 msgid "unknown distribution"
 msgstr "unbekannte Verteilung"
 
-#: Engine/fgens.c:1321
+#: Engine/fgens.c:1317
 msgid "error opening ASCII file"
 msgstr "Störung Öffnung ASCII Akte"
 
-#: Engine/fgens.c:1327
+#: Engine/fgens.c:1323
 #, c-format
 msgid "%ld elements in %s\n"
 msgstr ""
 
-#: Engine/fgens.c:1338
+#: Engine/fgens.c:1334
 msgid "Numbers after table full in GEN23"
 msgstr ""
 
-#: Engine/fgens.c:1367
+#: Engine/fgens.c:1363
 msgid "table size must be the same of source table"
 msgstr ""
 
-#: Engine/fgens.c:1439 Engine/fgens.c:1499
+#: Engine/fgens.c:1435 Engine/fgens.c:1495
 msgid "x coordinates must all be in increasing order:"
 msgstr "alle Koordinaten x müssen in zunehmendem Auftrag sein"
 
-#: Engine/fgens.c:1442 Engine/fgens.c:1501
+#: Engine/fgens.c:1438 Engine/fgens.c:1497
 msgid "x coordinate greater than function size:"
 msgstr ""
 
-#: Engine/fgens.c:1446
+#: Engine/fgens.c:1442
 msgid "illegal input val (y <= 0) for gen call, beginning:"
 msgstr ""
 
-#: Engine/fgens.c:1519
+#: Engine/fgens.c:1515
 msgid "GEN28 requires zero table length"
 msgstr ""
 
-#: Engine/fgens.c:1581
+#: Engine/fgens.c:1577
 msgid "could not open space file"
 msgstr ""
 
-#: Engine/fgens.c:1583
+#: Engine/fgens.c:1579
 msgid "Time values must be in increasing order"
 msgstr "Zeitwerte müssen in zunehmendem Auftrag sein"
 
-#: Engine/fgens.c:1604
+#: Engine/fgens.c:1600
 msgid "GEN30: source ftable not found"
 msgstr ""
 
-#: Engine/fgens.c:1687
+#: Engine/fgens.c:1683
 msgid "GEN31: source ftable not found"
 msgstr ""
 
-#: Engine/fgens.c:1795
+#: Engine/fgens.c:1791
 #, c-format
 msgid "GEN32: source ftable %d not found"
 msgstr ""
 
-#: Engine/fgens.c:1889
+#: Engine/fgens.c:1885
 msgid "GEN33: source ftable not found"
 msgstr ""
 
-#: Engine/fgens.c:2057
+#: Engine/fgens.c:2053
 msgid "unknown source table number"
 msgstr "unbekannte Quelltabelle Zahl"
 
-#: Engine/fgens.c:2089
+#: Engine/fgens.c:2085
 msgid "Gen41: negative probability not allowed"
 msgstr ""
 
-#: Engine/fgens.c:2155 Opcodes/fareygen.c:70
+#: Engine/fgens.c:2151 Opcodes/fareygen.c:70
 #, c-format
 msgid "ftable %d: "
 msgstr ""
 
-#: Engine/fgens.c:2199
+#: Engine/fgens.c:2195
 #, c-format
 msgid "ftable %d:"
 msgstr ""
 
-#: Engine/fgens.c:2214
+#: Engine/fgens.c:2210
 #, c-format
 msgid "replacing previous ftable %d"
 msgstr "Ersetzen vorhergehendes ftable %d"
 
-#: Engine/fgens.c:2250 Engine/fgens.c:2337 Engine/fgens.c:2361
-#: Opcodes/gab/gab.c:578 Opcodes/gab/gab.c:632 Opcodes/midiops2.c:218
+#: Engine/fgens.c:2246 Engine/fgens.c:2334 Engine/fgens.c:2358
+#: Opcodes/gab/gab.c:580 Opcodes/gab/gab.c:634 Opcodes/midiops2.c:218
 #: Opcodes/midiops2.c:370 Opcodes/midiops2.c:452 Opcodes/uggab.c:1317
 #: Opcodes/uggab.c:1344 Opcodes/uggab.c:1364 Opcodes/uggab.c:1407
 #, c-format
 msgid "Invalid ftable no. %f"
 msgstr ""
 
-#: Engine/fgens.c:2255
+#: Engine/fgens.c:2251
 #, c-format
 msgid "deferred-size ftable %f illegal here"
 msgstr ""
 
-#: Engine/fgens.c:2281
+#: Engine/fgens.c:2278 Engine/fgens.c:2848
 #, c-format
 msgid "Deferred load of '%s' failed"
 msgstr ""
 
-#: Engine/fgens.c:2343
+#: Engine/fgens.c:2340
 #, c-format
 msgid "Deferred-size ftable %f load not available at perf time."
 msgstr ""
 
-#: Engine/fgens.c:2402
+#: Engine/fgens.c:2399
 #, c-format
 msgid "non-deferred ftable %d needs size %d\n"
 msgstr ""
 
-#: Engine/fgens.c:2449 Opcodes/loscilx.c:62
+#: Engine/fgens.c:2446 Opcodes/loscilx.c:64
 #, c-format
 msgid "invalid sample format: %d"
 msgstr ""
 
-#: Engine/fgens.c:2457 Engine/fgens.c:2718
+#: Engine/fgens.c:2454 Engine/fgens.c:2714
 #, c-format
 msgid "channel %d illegal"
 msgstr "Führung %d ungültig"
 
-#: Engine/fgens.c:2463
+#: Engine/fgens.c:2460
 msgid "deferred alloc\n"
 msgstr "aufgeschobene Verteilung\n"
 
-#: Engine/fgens.c:2471
+#: Engine/fgens.c:2468
 msgid "deferred size, but filesize unknown"
 msgstr "aufgeschobene Größe, aber Akte Größe Unbekanntes"
 
-#: Engine/fgens.c:2474
+#: Engine/fgens.c:2471
 #, c-format
 msgid "  defer length %d\n"
 msgstr ""
 
-#: Engine/fgens.c:2543
+#: Engine/fgens.c:2540
 msgid "GEN1: input file truncated by ftable size"
 msgstr ""
 
-#: Engine/fgens.c:2547
+#: Engine/fgens.c:2544
 #, c-format
 msgid "\tlooping endpoint %d exceeds ftsize %d\n"
 msgstr ""
 
-#: Engine/fgens.c:2569
+#: Engine/fgens.c:2566
 msgid "GEN1 read error"
 msgstr "GEN1 Lesefehler"
 
-#: Engine/fgens.c:2574
+#: Engine/fgens.c:2571
 msgid "GEN1: aiff file truncated by ftable size"
 msgstr ""
 
-#: Engine/fgens.c:2575
+#: Engine/fgens.c:2572
 #, c-format
 msgid "\taudio samps %d exceeds ftsize %d"
 msgstr ""
 
-#: Engine/fgens.c:2619
+#: Engine/fgens.c:2616
 msgid "wrong number of ftable arguments"
 msgstr "falsche Zahl von ftable Argumenten"
 
-#: Engine/fgens.c:2629 OOps/pstream.c:326
+#: Engine/fgens.c:2626 OOps/pstream.c:326
 msgid "Failed to load PVOC-EX file"
 msgstr ""
 
-#: Engine/fgens.c:2640 InOut/midirecv.c:416 OOps/midiops.c:377
+#: Engine/fgens.c:2637 InOut/midirecv.c:416 OOps/midiops.c:377
 #: OOps/midiops.c:419 OOps/midiops.c:431
 msgid "illegal channel number"
 msgstr ""
 
-#: Engine/fgens.c:2658
+#: Engine/fgens.c:2655
 msgid "ftable size too small"
 msgstr ""
 
-#: Engine/fgens.c:2734 Opcodes/mp3in.c:79 Opcodes/mp3in.c:218
+#: Engine/fgens.c:2730 Opcodes/mp3in.c:80 Opcodes/mp3in.c:219
 msgid "Not enough memory\n"
 msgstr ""
 
-#: Engine/fgens.c:2831
+#: Engine/fgens.c:2873
 msgid "gen51: invalid number of p-fields (too few grades)"
 msgstr ""
 
-#: Engine/fgens.c:2871
+#: Engine/fgens.c:2913
 msgid "number of channels inconsistent with number of args"
 msgstr ""
 
-#: Engine/fgens.c:3030
+#: Engine/fgens.c:3072
 msgid "GEN53: invalid number of gen arguments"
 msgstr ""
 
-#: Engine/fgens.c:3040
+#: Engine/fgens.c:3082
 msgid "GEN53: invalid table length"
 msgstr ""
 
-#: Engine/fgens.c:3044
+#: Engine/fgens.c:3086
 msgid "GEN53: invalid source table number"
 msgstr ""
 
-#: Engine/fgens.c:3047
+#: Engine/fgens.c:3089
 msgid "GEN53: mode must be in the range 0 to 15"
 msgstr ""
 
-#: Engine/fgens.c:3051
+#: Engine/fgens.c:3093
 msgid "GEN53: invalid source table length"
 msgstr ""
 
-#: Engine/fgens.c:3056
+#: Engine/fgens.c:3098
 msgid "GEN53: invalid window table"
 msgstr ""
 
@@ -890,31 +851,31 @@ msgstr ""
 msgid "Instrument %d muted\n"
 msgstr ""
 
-#: Engine/insert.c:103 Engine/insert.c:1249
+#: Engine/insert.c:103 Engine/insert.c:1301
 #, c-format
 msgid "instr %s expects midi event data, cannot run from score\n"
 msgstr ""
 
-#: Engine/insert.c:106 Engine/insert.c:1252
+#: Engine/insert.c:106 Engine/insert.c:1304
 #, c-format
 msgid "instr %d expects midi event data, cannot run from score\n"
 msgstr ""
 
-#: Engine/insert.c:115 Engine/insert.c:279 Engine/insert.c:1234
+#: Engine/insert.c:115 Engine/insert.c:279 Engine/insert.c:1286
 #, c-format
 msgid "cannot allocate last note because it exceeds 100%% of cpu time"
 msgstr ""
 
-#: Engine/insert.c:121 Engine/insert.c:285 Engine/insert.c:1239
+#: Engine/insert.c:121 Engine/insert.c:285 Engine/insert.c:1291
 msgid "cannot allocate last note because it exceeds instr maxalloc"
 msgstr ""
 
-#: Engine/insert.c:137 Engine/insert.c:305 Engine/insert.c:1270
+#: Engine/insert.c:137 Engine/insert.c:305 Engine/insert.c:1322
 #, c-format
 msgid "new alloc for instr %s:\n"
 msgstr ""
 
-#: Engine/insert.c:139 Engine/insert.c:307 Engine/insert.c:1272
+#: Engine/insert.c:139 Engine/insert.c:307 Engine/insert.c:1324
 #, c-format
 msgid "new alloc for instr %d:\n"
 msgstr ""
@@ -929,12 +890,12 @@ msgstr ""
 msgid "instr %d uses %d p-fields but is given %d"
 msgstr ""
 
-#: Engine/insert.c:251 Engine/insert.c:463
+#: Engine/insert.c:251 Engine/insert.c:482
 #, c-format
 msgid "instr %s now active:\n"
 msgstr ""
 
-#: Engine/insert.c:253 Engine/insert.c:465
+#: Engine/insert.c:253 Engine/insert.c:484
 #, c-format
 msgid "instr %d now active:\n"
 msgstr ""
@@ -954,26 +915,26 @@ msgstr ""
 msgid "MIDI note overlaps with key %d on same channel"
 msgstr ""
 
-#: Engine/insert.c:566
+#: Engine/insert.c:585
 #, c-format
 msgid "removed instance of instr %s\n"
 msgstr ""
 
-#: Engine/insert.c:568
+#: Engine/insert.c:587
 #, c-format
 msgid "removed instance of instr %d\n"
 msgstr ""
 
-#: Engine/insert.c:691
+#: Engine/insert.c:710
 msgid "inactive allocs returned to freespace\n"
 msgstr ""
 
-#: Engine/insert.c:716
+#: Engine/insert.c:735
 #, c-format
 msgid "could not find playing instr %f\n"
 msgstr ""
 
-#: Engine/insert.c:729
+#: Engine/insert.c:748
 msgid ""
 "\n"
 "INIT ERROR: "
@@ -981,128 +942,128 @@ msgstr ""
 "\n"
 "INIT STÖRUNG: "
 
-#: Engine/insert.c:742
+#: Engine/insert.c:761
 #, c-format
 msgid "INIT ERROR in instr %d (opcode %s): "
 msgstr ""
 
-#: Engine/insert.c:745
+#: Engine/insert.c:764
 #, c-format
 msgid "INIT ERROR in instr %d (subinstr %d): "
 msgstr ""
 
-#: Engine/insert.c:749
+#: Engine/insert.c:768
 #, c-format
 msgid "INIT ERROR in instr %d: "
 msgstr ""
 
-#: Engine/insert.c:767
+#: Engine/insert.c:786
 msgid ""
 "\n"
 "PERF ERROR: "
 msgstr ""
 
-#: Engine/insert.c:780
+#: Engine/insert.c:799
 #, c-format
 msgid "PERF ERROR in instr %d (opcode %s): "
 msgstr ""
 
-#: Engine/insert.c:783
+#: Engine/insert.c:802
 #, c-format
 msgid "PERF ERROR in instr %d (subinstr %d): "
 msgstr ""
 
-#: Engine/insert.c:787
+#: Engine/insert.c:806
 #, c-format
 msgid "PERF ERROR in instr %d: "
 msgstr ""
 
-#: Engine/insert.c:792
+#: Engine/insert.c:811
 msgid "   note aborted\n"
 msgstr ""
 
-#: Engine/insert.c:820
+#: Engine/insert.c:839
 msgid "subinstr: number of output args greater than nchnls"
 msgstr ""
 
-#: Engine/insert.c:861
+#: Engine/insert.c:880
 msgid "subinstr: too many p-fields"
 msgstr ""
 
-#: Engine/insert.c:920
+#: Engine/insert.c:939
 #, c-format
 msgid "%s: invalid local ksmps value: %d"
 msgstr ""
 
-#: Engine/insert.c:1040 OOps/bus.c:835 Opcodes/stackops.c:293
+#: Engine/insert.c:1062 OOps/bus.c:835 Opcodes/stackops.c:286
 #, c-format
 msgid "%s: not initialised"
 msgstr "%s: nicht initialisiert"
 
-#: Engine/insert.c:1169
+#: Engine/insert.c:1221
 #, c-format
 msgid "setksmps: invalid ksmps value: %d"
 msgstr ""
 
-#: Engine/insert.c:1225
+#: Engine/insert.c:1277
 #, c-format
 msgid "schedule event ignored. instr %d undefined\n"
 msgstr ""
 
-#: Engine/insert.c:1303
+#: Engine/insert.c:1355
 #, c-format
 msgid "instr %s pmax = %d, note pcnt = %d"
 msgstr ""
 
-#: Engine/insert.c:1306
+#: Engine/insert.c:1358
 #, c-format
 msgid "instr %d pmax = %d, note pcnt = %d"
 msgstr ""
 
-#: Engine/insert.c:1314
+#: Engine/insert.c:1366
 #, c-format
 msgid "psave beg at %p\n"
 msgstr ""
 
-#: Engine/insert.c:1322
+#: Engine/insert.c:1374
 #, c-format
 msgid "   ending at %p\n"
 msgstr ""
 
-#: Engine/insert.c:1466
+#: Engine/insert.c:1518
 msgid "subinstr: not initialised"
 msgstr "subinstr: nicht initialisiert"
 
-#: Engine/insert.c:1723
+#: Engine/insert.c:1855
 #, c-format
 msgid ""
 "instr %d allocated at %p\n"
 "\tlclbas %p, opds %p\n"
 msgstr ""
 
-#: Engine/insert.c:1740
+#: Engine/insert.c:1872
 #, c-format
 msgid "op %d (%s) allocated at %p\n"
 msgstr ""
 
-#: Engine/insert.c:1766
+#: Engine/insert.c:1898
 msgid "null iopadr"
 msgstr ""
 
-#: Engine/insert.c:1777
+#: Engine/insert.c:1909
 msgid "null opadr"
 msgstr ""
 
-#: Engine/insert.c:1834
+#: Engine/insert.c:1966
 msgid "inconsistent opds total"
 msgstr ""
 
-#: Engine/insert.c:1879
+#: Engine/insert.c:2011
 #, c-format
 msgid "Instrument %s is still active"
 msgstr ""
 
-#: Engine/insert.c:1882
+#: Engine/insert.c:2014
 #, c-format
 msgid "Instrument %d is still active"
 msgstr ""
@@ -1136,7 +1097,7 @@ msgstr ""
 msgid "multiple string p-fields"
 msgstr ""
 
-#: Engine/linevent.c:273 Engine/rdorch.c:1157
+#: Engine/linevent.c:273 Engine/rdorch.c:1184
 msgid "unmatched quotes"
 msgstr ""
 
@@ -1195,27 +1156,27 @@ msgstr ""
 msgid "memory allocate failure for %lu"
 msgstr ""
 
-#: Engine/memfiles.c:112
+#: Engine/memfiles.c:113
 #, c-format
 msgid "cannot load %s\n"
 msgstr ""
 
-#: Engine/memfiles.c:118
+#: Engine/memfiles.c:119
 #, c-format
 msgid "cannot load %s, or SADIR undefined\n"
 msgstr ""
 
-#: Engine/memfiles.c:130
+#: Engine/memfiles.c:131
 #, fuzzy, c-format
 msgid "error processing file %s\n"
-msgstr "Störung Öffnung ASCII Akte"
+msgstr ""
 
-#: Engine/memfiles.c:136 Engine/memfiles.c:319
+#: Engine/memfiles.c:137 Engine/memfiles.c:320
 #, c-format
 msgid "file %s (%ld bytes) loaded into memory\n"
 msgstr ""
 
-#: Engine/memfiles.c:199
+#: Engine/memfiles.c:200
 msgid ""
 "PVOCEX_LoadFile(): error:\n"
 "    "
@@ -1223,271 +1184,266 @@ msgstr ""
 "PVOCEX_LoadFile(): Störung:\n"
 "    "
 
-#: Engine/memfiles.c:216
+#: Engine/memfiles.c:217
 msgid "Empty or NULL file name"
 msgstr ""
 
-#: Engine/memfiles.c:234
+#: Engine/memfiles.c:235
 #, c-format
 msgid "unable to open pvocex file %s: %s"
 msgstr ""
 
-#: Engine/memfiles.c:240
+#: Engine/memfiles.c:241
 #, c-format
 msgid "pvoc-ex file %s is not 32bit floats"
 msgstr ""
 
-#: Engine/memfiles.c:246
+#: Engine/memfiles.c:247
 #, c-format
 msgid "pvoc-ex file %s not in AMP_FREQ format"
 msgstr ""
 
-#: Engine/memfiles.c:252
+#: Engine/memfiles.c:253
 #, c-format
 msgid "pvoc-ex file %s is empty!"
 msgstr ""
 
-#: Engine/memfiles.c:282
+#: Engine/memfiles.c:283
 #, c-format
 msgid "error reading pvoc-ex file %s"
 msgstr ""
 
-#: Engine/memfiles.c:286
+#: Engine/memfiles.c:287
 #, c-format
 msgid "error reading pvoc-ex file %s after %d frames"
 msgstr ""
 
-#: Engine/memfiles.c:291 Opcodes/pvinterp.c:71 Opcodes/pvinterp.c:174
-#: Opcodes/pvinterp.c:346 Opcodes/ugens9.c:97 Opcodes/vpvoc.c:201
+#: Engine/memfiles.c:292 Opcodes/pvinterp.c:71 Opcodes/pvinterp.c:173
+#: Opcodes/pvinterp.c:344 Opcodes/ugens9.c:97 Opcodes/vpvoc.c:202
 #, c-format
 msgid "%s's srate = %8.0f, orch's srate = %8.0f"
 msgstr ""
 
-#: Engine/memfiles.c:389
+#: Engine/memfiles.c:390
 #, c-format
 msgid "csoundLoadSoundFile(): failed to open '%s'"
 msgstr ""
 
-#: Engine/memfiles.c:444
+#: Engine/memfiles.c:445
 #, c-format
 msgid "csoundLoadSoundFile(): error reading '%s'"
 msgstr ""
 
-#: Engine/memfiles.c:450
+#: Engine/memfiles.c:451
 #, c-format
 msgid ""
 "File '%s' (sr = %d Hz, %d channel(s), %lu sample frames) loaded into memory\n"
 msgstr ""
 
-#: Engine/musmon.c:79
+#: Engine/musmon.c:81
 #, c-format
 msgid "Elapsed time at %s: real: %.3fs, CPU: %.3fs\n"
 msgstr ""
 
-#: Engine/musmon.c:106
+#: Engine/musmon.c:108
 msgid "illegal istartempo value"
 msgstr ""
 
-#: Engine/musmon.c:109
+#: Engine/musmon.c:111
 msgid "Beat mode not in force"
 msgstr ""
 
-#: Engine/musmon.c:182 Top/main.c:122
+#: Engine/musmon.c:184 Top/main.c:121
 #, c-format
 msgid "Csound version %s beta (double samples) %s\n"
 msgstr ""
 
-#: Engine/musmon.c:185 Top/main.c:125
+#: Engine/musmon.c:187 Top/main.c:124
 #, c-format
 msgid "Csound version %s (double samples) %s\n"
 msgstr ""
 
-#: Engine/musmon.c:190 Top/main.c:114
+#: Engine/musmon.c:192 Top/main.c:113
 #, c-format
 msgid "Csound version %s beta (float samples) %s\n"
 msgstr ""
 
-#: Engine/musmon.c:193 Top/main.c:117
+#: Engine/musmon.c:195 Top/main.c:116
 #, c-format
 msgid "Csound version %s (float samples) %s\n"
 msgstr ""
 
-#: Engine/musmon.c:218
+#: Engine/musmon.c:220
 msgid "orch now loaded\n"
 msgstr ""
 
-#: Engine/musmon.c:243
+#: Engine/musmon.c:245
 msgid "k-period aligned audio buffering\n"
 msgstr ""
 
-#: Engine/musmon.c:259
+#: Engine/musmon.c:261
 #, c-format
 msgid "audio buffered in %d sample-frame blocks\n"
 msgstr ""
 
-#: Engine/musmon.c:276 Top/main.c:395
-#, c-format
-msgid "cannot reopen %s"
-msgstr ""
-
-#: Engine/musmon.c:287
+#: Engine/musmon.c:283
 msgid "using Cscore processing\n"
 msgstr ""
 
-#: Engine/musmon.c:290
+#: Engine/musmon.c:286
 msgid "cannot create cscore.out"
 msgstr ""
 
-#: Engine/musmon.c:303
+#: Engine/musmon.c:299
 msgid "cannot reopen cscore.out"
 msgstr ""
 
-#: Engine/musmon.c:307 Engine/musmon.c:315
+#: Engine/musmon.c:303
 msgid "cannot reopen cscore.srt"
 msgstr ""
 
-#: Engine/musmon.c:309
+#: Engine/musmon.c:305
 msgid "sorting cscore.out ..\n"
 msgstr ""
 
-#: Engine/musmon.c:313 Top/main.c:409
+#: Engine/musmon.c:311 Top/main.c:401
 msgid "\t... done\n"
 msgstr "\t... getan\n"
 
-#: Engine/musmon.c:317
+#: Engine/musmon.c:312
 msgid "playing from cscore.srt\n"
 msgstr ""
 
-#: Engine/musmon.c:321 Engine/musmon.c:453 Engine/musmon.c:1021
-#: Engine/musmon.c:1225
+#: Engine/musmon.c:316 Engine/musmon.c:446 Engine/musmon.c:1015
+#: Engine/musmon.c:1216
 #, c-format
 msgid "SECTION %d:\n"
 msgstr ""
 
-#: Engine/musmon.c:397
+#: Engine/musmon.c:390
 msgid "end of score.\t\t   overall amps:"
 msgstr ""
 
-#: Engine/musmon.c:408
+#: Engine/musmon.c:401
 msgid ""
 "\n"
 "\t   overall samples out of range:"
 msgstr ""
 
-#: Engine/musmon.c:412
+#: Engine/musmon.c:405
 #, c-format
 msgid ""
 "\n"
 "%d errors in performance\n"
 msgstr ""
 
-#: Engine/musmon.c:414
+#: Engine/musmon.c:407
 msgid "end of performance"
 msgstr ""
 
-#: Engine/musmon.c:428
+#: Engine/musmon.c:421
 msgid "no sound written to disk\n"
 msgstr ""
 
-#: Engine/musmon.c:443
+#: Engine/musmon.c:436
 #, c-format
 msgid "%c\tbeep!\n"
 msgstr ""
 
-#: Engine/musmon.c:509 Engine/musmon.c:555
+#: Engine/musmon.c:502 Engine/musmon.c:548
 msgid "\t number of samples out of range:"
 msgstr ""
 
-#: Engine/musmon.c:548
+#: Engine/musmon.c:541
 #, c-format
 msgid "end of section %d\t sect peak amps:"
 msgstr ""
 
-#: Engine/musmon.c:550
+#: Engine/musmon.c:543
 msgid "end of lplay event list\t      peak amps:"
 msgstr ""
 
-#: Engine/musmon.c:614 Engine/musmon.c:639
+#: Engine/musmon.c:607 Engine/musmon.c:632
 #, c-format
 msgid " - note deleted. instr %s undefined"
 msgstr ""
 
-#: Engine/musmon.c:618
+#: Engine/musmon.c:611
 #, c-format
 msgid "Setting instrument %s %s\n"
 msgstr ""
 
-#: Engine/musmon.c:619 Engine/musmon.c:632
+#: Engine/musmon.c:612 Engine/musmon.c:625
 #: Opcodes/fluidOpcodes/fluidOpcodes.c:207
 #: Opcodes/fluidOpcodes/fluidOpcodes.c:208
 msgid "off"
 msgstr ""
 
-#: Engine/musmon.c:619 Engine/musmon.c:632
+#: Engine/musmon.c:612 Engine/musmon.c:625
 #: Opcodes/fluidOpcodes/fluidOpcodes.c:207
 #: Opcodes/fluidOpcodes/fluidOpcodes.c:208
 msgid "on"
 msgstr ""
 
-#: Engine/musmon.c:627 Engine/musmon.c:666
+#: Engine/musmon.c:620 Engine/musmon.c:659
 #, c-format
 msgid " - note deleted. instr %d(%d) undefined"
 msgstr ""
 
-#: Engine/musmon.c:631
+#: Engine/musmon.c:624
 #, c-format
 msgid "Setting instrument %d %s\n"
 msgstr ""
 
-#: Engine/musmon.c:657
+#: Engine/musmon.c:650
 #, c-format
 msgid " - note deleted.  i%d (%s) had %d init errors"
 msgstr ""
 
-#: Engine/musmon.c:687
+#: Engine/musmon.c:680
 #, c-format
 msgid " - note deleted.  i%d had %d init errors"
 msgstr ""
 
-#: Engine/musmon.c:708
+#: Engine/musmon.c:701
 #, c-format
 msgid "time advanced %5.3f beats by score request\n"
 msgstr ""
 
-#: Engine/musmon.c:725
+#: Engine/musmon.c:719
 #, c-format
 msgid "\t\t   T%7.3f - note deleted. "
 msgstr ""
 
-#: Engine/musmon.c:729
+#: Engine/musmon.c:723
 #, c-format
 msgid "instr %s had %d init errors\n"
 msgstr ""
 
-#: Engine/musmon.c:731
+#: Engine/musmon.c:725
 #, c-format
 msgid "instr %d had %d init errors\n"
 msgstr ""
 
-#: Engine/musmon.c:822
+#: Engine/musmon.c:816
 msgid "terminating.\n"
 msgstr ""
 
-#: Engine/musmon.c:908
+#: Engine/musmon.c:902
 #, c-format
 msgid "error in score.  illegal opcode %c (ASCII %d)\n"
 msgstr ""
 
-#: Engine/musmon.c:1135
+#: Engine/musmon.c:1129
 msgid "insert_score_event(): invalid instrument number or name\n"
 msgstr ""
 
-#: Engine/musmon.c:1155
+#: Engine/musmon.c:1149
 #, c-format
 msgid "insert_score_event(): unknown opcode: %c\n"
 msgstr ""
 
-#: Engine/musmon.c:1178
+#: Engine/musmon.c:1172
 msgid "insert_score_event(): insufficient p-fields\n"
 msgstr ""
 
@@ -1510,79 +1466,98 @@ msgstr ""
 msgid "cannot find the specified instrument or opcode"
 msgstr ""
 
-#: Engine/new_orc_parser.c:74 Engine/rdorch.c:488
+#: Engine/new_orc_parser.c:91
+msgid "Unmatched #ifdef\n"
+msgstr ""
+
+#: Engine/otran.c:149 Engine/symbtab.c:413
 #, c-format
-msgid "cannot open orch file %s"
+msgid "invalid input type for opcode %s"
+msgstr ""
+
+#: Engine/otran.c:154 Engine/symbtab.c:418
+#, c-format
+msgid "too many input args for opcode %s"
+msgstr ""
+
+#: Engine/otran.c:169 Engine/symbtab.c:433
+#, c-format
+msgid "too many output args for opcode %s"
+msgstr ""
+
+#: Engine/otran.c:194 Engine/symbtab.c:458
+#, c-format
+msgid "invalid output type for opcode %s"
 msgstr ""
 
-#: Engine/otran.c:312 Engine/otran.c:319
+#: Engine/otran.c:325 Engine/otran.c:332
 msgid "missing instrument number or name"
 msgstr ""
 
-#: Engine/otran.c:324
+#: Engine/otran.c:337
 msgid "illegal instr number"
 msgstr ""
 
-#: Engine/otran.c:374
+#: Engine/otran.c:388
 msgid "No opcode name"
 msgstr ""
 
-#: Engine/otran.c:379 Engine/symbtab.c:501
+#: Engine/otran.c:393 Engine/symbtab.c:538
 msgid "invalid name for opcode"
 msgstr ""
 
-#: Engine/otran.c:383
+#: Engine/otran.c:397
 #, c-format
 msgid ""
 "opcode declaration error (usage: opcode name, outtypes, intypes) -- opcode %s"
 msgstr ""
 
-#: Engine/otran.c:394 Engine/symbtab.c:511
+#: Engine/otran.c:408 Engine/symbtab.c:548
 #, c-format
 msgid "cannot redefine %s"
 msgstr ""
 
-#: Engine/otran.c:398 Engine/symbtab.c:516
+#: Engine/otran.c:412 Engine/symbtab.c:553
 #, c-format
 msgid "WARNING: redefined opcode: %s\n"
 msgstr ""
 
-#: Engine/otran.c:489
+#: Engine/otran.c:503
 msgid "string constant used as output"
 msgstr ""
 
-#: Engine/otran.c:520
+#: Engine/otran.c:534
 msgid "Missing endin"
 msgstr ""
 
-#: Engine/otran.c:584
+#: Engine/otran.c:599
 msgid "perf-pass statements illegal in header blk"
 msgstr ""
 
-#: Engine/otran.c:588
+#: Engine/otran.c:603
 #, c-format
 msgid "%d syntax errors in orchestra.  compilation invalid"
 msgstr ""
 
-#: Engine/otran.c:1238
+#: Engine/otran.c:1257
 msgid "bad value for 0dbfs: must be positive."
 msgstr ""
 
-#: Engine/otran.c:1248
+#: Engine/otran.c:1267
 #, c-format
 msgid "sample rate overrides: esr = %7.4f, ekr = %7.4f, ksmps = %d\n"
 msgstr ""
 
-#: Engine/otran.c:1320
+#: Engine/otran.c:1339
 msgid "internal error: string constant outarg"
 msgstr ""
 
-#: Engine/otran.c:1346
+#: Engine/otran.c:1365
 #, c-format
 msgid "i%d pset args != pmax"
 msgstr ""
 
-#: Engine/otran.c:1409
+#: Engine/otran.c:1428
 #, c-format
 msgid ""
 "sr = %.7g, kr = %.7g, ksmps = %.7g\n"
@@ -1591,271 +1566,304 @@ msgstr ""
 "sr = %.7g, kr = %.7g, ksmps = %.7g\n"
 "Störung:"
 
-#: Engine/otran.c:1442
+#: Engine/otran.c:1461
 msgid "header init errors"
 msgstr ""
 
-#: Engine/rdorch.c:166
+#: Engine/rdorch.c:169
 msgid "ungetorchar(): buffer overflow"
 msgstr ""
 
-#: Engine/rdorch.c:330
+#: Engine/rdorch.c:348
 msgid "Unexpected end of orchestra file"
 msgstr ""
 
-#: Engine/rdorch.c:484
-msgid "orch compiler:\n"
+#: Engine/rdorch.c:431 Engine/sread.c:758
+#, c-format
+msgid "Macro definition for %*s\n"
 msgstr ""
 
-#: Engine/rdorch.c:490
-#, c-format
-msgid "cannot find end of file %s"
+#: Engine/rdorch.c:434
+msgid "Invalid macro name for --omacro"
 msgstr ""
 
-#: Engine/rdorch.c:492
+#: Engine/rdorch.c:502
+msgid "orch compiler:\n"
+msgstr ""
+
+#: Engine/rdorch.c:520
 #, c-format
-msgid "ftell error on %s"
+msgid "cannot open orch file %s"
 msgstr ""
 
-#: Engine/rdorch.c:657 Engine/sread.c:1572
+#: Engine/rdorch.c:684 Engine/sread.c:1584
 #, c-format
 msgid "Macro definition for %s\n"
 msgstr ""
 
-#: Engine/rdorch.c:748
+#: Engine/rdorch.c:716 Engine/sread.c:1607
+msgid "macro error\n"
+msgstr ""
+
+#: Engine/rdorch.c:775
 #, c-format
 msgid "Cannot open #include'd file %s\n"
 msgstr ""
 
-#: Engine/rdorch.c:797
+#: Engine/rdorch.c:824
 msgid "unmatched #ifdef"
 msgstr ""
 
-#: Engine/rdorch.c:808
+#: Engine/rdorch.c:835
 msgid "Unmatched #else"
 msgstr ""
 
-#: Engine/rdorch.c:822
+#: Engine/rdorch.c:849
 msgid "Unmatched #endif"
 msgstr ""
 
-#: Engine/rdorch.c:875
+#: Engine/rdorch.c:872 Engine/sread.c:1694
+#, c-format
+msgid "macro %s undefined\n"
+msgstr ""
+
+#: Engine/rdorch.c:886 Engine/sread.c:286
+msgid "Undefining undefined macro"
+msgstr ""
+
+#: Engine/rdorch.c:902
 msgid "Unexpected # character"
 msgstr ""
 
-#: Engine/rdorch.c:877
+#: Engine/rdorch.c:904
 #, c-format
 msgid "Unknown # option: '%s'"
 msgstr ""
 
-#: Engine/rdorch.c:903 Engine/sread.c:394
+#: Engine/rdorch.c:928 Engine/sread.c:380
+#, c-format
+msgid "Undefined macro: '%s'"
+msgstr ""
+
+#: Engine/rdorch.c:930 Engine/sread.c:378
 msgid "Macro expansion symbol ($) without macro name"
 msgstr ""
 
-#: Engine/rdorch.c:908 Engine/sread.c:400
+#: Engine/rdorch.c:935 Engine/sread.c:384
 #, c-format
 msgid "$%s matches macro name $%s"
 msgstr ""
 
-#: Engine/rdorch.c:925 Engine/sread.c:417
+#: Engine/rdorch.c:952 Engine/sread.c:401
 msgid "Syntax error in macro call"
 msgstr ""
 
-#: Engine/rdorch.c:975
+#: Engine/rdorch.c:967
+#, c-format
+msgid ""
+"Missing argument terminator\n"
+"%.98s"
+msgstr ""
+
+#: Engine/rdorch.c:1002
 msgid "Unmatched #ifdef"
 msgstr ""
 
-#: Engine/rdorch.c:977
+#: Engine/rdorch.c:1004
 msgid "file too large for ortext space"
 msgstr ""
 
-#: Engine/rdorch.c:984
+#: Engine/rdorch.c:1011
 #, c-format
 msgid "%d (%d) lines read\n"
 msgstr ""
 
-#: Engine/rdorch.c:1052
+#: Engine/rdorch.c:1079
 #, c-format
 msgid "LINE %d:"
 msgstr ""
 
-#: Engine/rdorch.c:1071
+#: Engine/rdorch.c:1098
 msgid "invalid 'elseif' statement.  must have a corresponding 'if'"
 msgstr ""
 
-#: Engine/rdorch.c:1078
+#: Engine/rdorch.c:1105
 msgid "'elseif' statement cannot occur after an 'else'"
 msgstr ""
 
-#: Engine/rdorch.c:1134
+#: Engine/rdorch.c:1161
 msgid "Unmatched comment"
 msgstr ""
 
-#: Engine/rdorch.c:1198
+#: Engine/rdorch.c:1225
 msgid "misplaced comma"
 msgstr ""
 
-#: Engine/rdorch.c:1200 Engine/rdorch.c:1342 Engine/rdorch.c:1440
+#: Engine/rdorch.c:1227 Engine/rdorch.c:1369 Engine/rdorch.c:1467
 msgid "unbalanced parens"
 msgstr ""
 
-#: Engine/rdorch.c:1364
+#: Engine/rdorch.c:1391
 #, c-format
 msgid "illegal character %c"
 msgstr ""
 
-#: Engine/rdorch.c:1377
+#: Engine/rdorch.c:1404
 msgid "invalid 'else' statement.  must have a corresponding 'if'"
 msgstr ""
 
-#: Engine/rdorch.c:1384
+#: Engine/rdorch.c:1411
 msgid "duplicate 'else' statement"
 msgstr ""
 
-#: Engine/rdorch.c:1413
+#: Engine/rdorch.c:1440
 msgid "invalid 'endif' statement.  must have a corresponding 'if'"
 msgstr ""
 
-#: Engine/rdorch.c:1442
+#: Engine/rdorch.c:1469
 msgid "no legal opcode"
 msgstr ""
 
-#: Engine/rdorch.c:1573
+#: Engine/rdorch.c:1600
 msgid "illegal opcod from expr anal"
 msgstr ""
 
-#: Engine/rdorch.c:1606 Engine/rdorch.c:1628
+#: Engine/rdorch.c:1633 Engine/rdorch.c:1655
 #, c-format
 msgid "failed to find %s, output arg '%s' illegal type"
 msgstr ""
 
-#: Engine/rdorch.c:1670
+#: Engine/rdorch.c:1697
 #, c-format
 msgid "failed to find %s, input arg illegal type"
 msgstr ""
 
-#: Engine/rdorch.c:1684
+#: Engine/rdorch.c:1711
 msgid "setksmps is allowed only in user defined opcodes"
 msgstr ""
 
-#: Engine/rdorch.c:1687
+#: Engine/rdorch.c:1714
 msgid "multiple uses of setksmps in the same opcode definition"
 msgstr ""
 
-#: Engine/rdorch.c:1710
+#: Engine/rdorch.c:1739
 #, c-format
 msgid "%s inconsistent with global nchnls (%d); replaced with %s\n"
 msgstr ""
 
-#: Engine/rdorch.c:1740
+#: Engine/rdorch.c:1770
 msgid "opcode blks cannot be nested (missing 'endop'?)"
 msgstr ""
 
-#: Engine/rdorch.c:1742
+#: Engine/rdorch.c:1772
 msgid "opcode not allowed in instr block"
 msgstr ""
 
-#: Engine/rdorch.c:1751
+#: Engine/rdorch.c:1781
 msgid "unmatched endop"
 msgstr ""
 
-#: Engine/rdorch.c:1753
+#: Engine/rdorch.c:1783
 msgid "endop not allowed in instr block"
 msgstr ""
 
-#: Engine/rdorch.c:1758
+#: Engine/rdorch.c:1788
 msgid "instr not allowed in opcode block"
 msgstr ""
 
-#: Engine/rdorch.c:1761
+#: Engine/rdorch.c:1791
 msgid "instr blocks cannot be nested (missing 'endin'?)"
 msgstr ""
 
-#: Engine/rdorch.c:1769
+#: Engine/rdorch.c:1799
 msgid "endin not allowed in opcode blk"
 msgstr ""
 
-#: Engine/rdorch.c:1771
+#: Engine/rdorch.c:1801
 msgid "unmatched endin"
 msgstr ""
 
-#: Engine/rdorch.c:1781
+#: Engine/rdorch.c:1811
 msgid "misplaced opcode"
 msgstr ""
 
-#: Engine/rdorch.c:1787
+#: Engine/rdorch.c:1817
 msgid "xout is allowed only in user defined opcodes"
 msgstr ""
 
-#: Engine/rdorch.c:1790
+#: Engine/rdorch.c:1820
 msgid "multiple uses of xout in the same opcode definition"
 msgstr ""
 
-#: Engine/rdorch.c:1837
+#: Engine/rdorch.c:1867
 msgid "too many input args"
 msgstr ""
 
-#: Engine/rdorch.c:1909
+#: Engine/rdorch.c:1893
+msgid "insufficient required arguments"
+msgstr ""
+
+#: Engine/rdorch.c:1940
 #, c-format
-msgid "input arg '%s' used before defined"
+msgid "input arg '%s' used before defined \n"
 msgstr ""
 
-#: Engine/rdorch.c:1956
+#: Engine/rdorch.c:1987
 msgid "xin is allowed only in user defined opcodes"
 msgstr ""
 
-#: Engine/rdorch.c:1959
+#: Engine/rdorch.c:1990
 msgid "multiple uses of xin in the same opcode definition"
 msgstr ""
 
-#: Engine/rdorch.c:2004
+#: Engine/rdorch.c:2035
 msgid "illegal no of output args"
 msgstr ""
 
-#: Engine/rdorch.c:2023
+#: Engine/rdorch.c:2054
 #, c-format
 msgid "output name previously used, type '%c' must be uniquely defined"
 msgstr ""
 
-#: Engine/rdorch.c:2028
+#: Engine/rdorch.c:2059
 #, c-format
 msgid "output arg '%s' illegal type"
 msgstr ""
 
-#: Engine/rdorch.c:2069
+#: Engine/rdorch.c:2100
 #, c-format
 msgid "input arg '%s' of type %s not allowed when expecting %c"
 msgstr ""
 
-#: Engine/rdorch.c:2155
+#: Engine/rdorch.c:2187
 msgid "duplicate label"
 msgstr ""
 
-#: Engine/rdorch.c:2177
+#: Engine/rdorch.c:2209
 #, c-format
 msgid "error line %d.  unknown label:\n"
 msgstr ""
 
-#: Engine/rdorch.c:2192 Engine/rdorch.c:2239
+#: Engine/rdorch.c:2222 Engine/rdorch.c:2271
 msgid "error:  "
 msgstr "Störung:  "
 
-#: Engine/rdorch.c:2208
+#: Engine/rdorch.c:2239
 #, c-format
 msgid ", line %d:\n"
 msgstr ""
 
-#: Engine/rdorch.c:2246
+#: Engine/rdorch.c:2278
 #, c-format
 msgid "called from line %d of macro %s"
 msgstr ""
 
-#: Engine/rdorch.c:2250
+#: Engine/rdorch.c:2282
 #, c-format
 msgid "in line %d of file input %s"
 msgstr ""
 
-#: Engine/rdscor.c:79
+#: Engine/rdscor.c:80
 #, c-format
 msgid "ERROR: illegal character %c(%.2x) in scoreline: "
 msgstr ""
@@ -1866,7 +1874,7 @@ msgid ""
 "\tremainder of line flushed\n"
 msgstr ""
 
-#: Engine/rdscor.c:144
+#: Engine/rdscor.c:146
 msgid "ERROR: too many pfields: "
 msgstr ""
 
@@ -1892,349 +1900,316 @@ msgstr ""
 msgid "  section %d:  at position %d%s"
 msgstr ""
 
-#: Engine/sread.c:217
+#: Engine/sread.c:216
 msgid "Internal error in print_input_backtrace()"
 msgstr ""
 
-#: Engine/sread.c:219
+#: Engine/sread.c:218
 #, c-format
 msgid "  included from line %d of macro %s%s"
 msgstr ""
 
-#: Engine/sread.c:220
+#: Engine/sread.c:219
 #, c-format
 msgid "  called from line %d of macro %s%s"
 msgstr ""
 
-#: Engine/sread.c:222
+#: Engine/sread.c:221
 #, c-format
 msgid "  in line %d of macro %s%s"
 msgstr ""
 
-#: Engine/sread.c:229
-#, c-format
-msgid "  included from line %d of file input %s%s"
-msgstr ""
-
-#: Engine/sread.c:230
-#, c-format
-msgid "  called from line %d of file input %s%s"
-msgstr ""
-
-#: Engine/sread.c:232
-#, c-format
-msgid "  in line %d of file input %s%s"
-msgstr ""
-
-#: Engine/sread.c:268
+#: Engine/sread.c:256
 #, c-format
 msgid "Internal error op=%c"
 msgstr ""
 
-#: Engine/sread.c:322
-msgid "ungetscochar(): buffer overflow"
-msgstr ""
-
-#: Engine/sread.c:479
+#: Engine/sread.c:464
 msgid "illegal placement of number in [] expression"
 msgstr ""
 
-#: Engine/sread.c:506
+#: Engine/sread.c:491
 msgid "illegal placement of operator ~ in [] expression"
 msgstr ""
 
-#: Engine/sread.c:516
+#: Engine/sread.c:501
 msgid "illegal placement of operator @ or @@ in [] expression"
 msgstr ""
 
-#: Engine/sread.c:548 Engine/sread.c:562
+#: Engine/sread.c:533 Engine/sread.c:547
 #, c-format
 msgid "illegal placement of operator %c in [] expression"
 msgstr ""
 
-#: Engine/sread.c:574
+#: Engine/sread.c:559
 msgid "illegal placement of '(' in [] expression"
 msgstr ""
 
-#: Engine/sread.c:580
+#: Engine/sread.c:565
 msgid "missing operand before ')' in [] expression"
 msgstr ""
 
-#: Engine/sread.c:594
+#: Engine/sread.c:579
 msgid "missing operand before closing bracket in []"
 msgstr ""
 
-#: Engine/sread.c:609
+#: Engine/sread.c:594
 #, c-format
 msgid "illegal character %c(%.2x) in [] expression"
 msgstr ""
 
-#: Engine/sread.c:658
+#: Engine/sread.c:646
 #, c-format
 msgid "%s Nested LOOP terminated, level:%d\n"
 msgstr ""
 
-#: Engine/sread.c:664
+#: Engine/sread.c:652
 #, c-format
 msgid "External LOOP terminated, level:%d\n"
 msgstr ""
 
-#: Engine/sread.c:684
+#: Engine/sread.c:696
 #, c-format
 msgid "%s  Nested LOOP section (%d) Level:%d\n"
 msgstr ""
 
-#: Engine/sread.c:689
+#: Engine/sread.c:701
 #, c-format
 msgid " External LOOP section (%d) Level:%d\n"
 msgstr ""
 
-#: Engine/sread.c:703
+#: Engine/sread.c:715
 msgid "Loop terminated\n"
 msgstr ""
 
-#: Engine/sread.c:716
+#: Engine/sread.c:733
 #, c-format
 msgid "Repeat section (%d)\n"
 msgstr ""
 
-#: Engine/sread.c:719
+#: Engine/sread.c:736
 msgid "Repeat section\n"
 msgstr ""
 
-#: Engine/sread.c:744
+#: Engine/sread.c:761
 msgid "Invalid macro name for --smacro"
 msgstr ""
 
-#: Engine/sread.c:831
+#: Engine/sread.c:865
 #, c-format
 msgid "Clockbase = %f\n"
 msgstr ""
 
-#: Engine/sread.c:898
+#: Engine/sread.c:934
 msgid "Loops are nested too deeply"
 msgstr ""
 
-#: Engine/sread.c:901
-msgid "Loop cannot start inside of a macro"
-msgstr ""
-
-#: Engine/sread.c:920
+#: Engine/sread.c:948
 msgid "{: invalid repeat count"
 msgstr ""
 
-#: Engine/sread.c:929
+#: Engine/sread.c:957
 #, c-format
 msgid "%s Nested LOOP=%d Level:%d\n"
 msgstr ""
 
-#: Engine/sread.c:935
+#: Engine/sread.c:963
 #, c-format
 msgid "External LOOP=%d Level:%d\n"
 msgstr ""
 
-#: Engine/sread.c:1004
-msgid "Repeat cannot start inside of a macro (ignored)"
-msgstr ""
-
-#: Engine/sread.c:1019
+#: Engine/sread.c:1047
 msgid "r: invalid repeat count"
 msgstr ""
 
-#: Engine/sread.c:1021
+#: Engine/sread.c:1049
 #, c-format
 msgid "Repeats=%d\n"
 msgstr ""
 
-#: Engine/sread.c:1063
+#: Engine/sread.c:1093
 #, c-format
 msgid "Named section >>>%s<<<\n"
 msgstr ""
 
-#: Engine/sread.c:1079
+#: Engine/sread.c:1108
 #, c-format
 msgid "%d: File %s position %ld\n"
 msgstr ""
 
-#: Engine/sread.c:1085
-#, c-format
-msgid "Ignoring name %s not in file\n"
-msgstr ""
-
-#: Engine/sread.c:1110
+#: Engine/sread.c:1133
 #, c-format
 msgid "Name %s not found"
 msgstr ""
 
-#: Engine/sread.c:1112
+#: Engine/sread.c:1135
 #, c-format
 msgid "Duplicate %d: %s (%s,%ld)\n"
 msgstr ""
 
-#: Engine/sread.c:1129
-#, c-format
-msgid "cannot open input file %s"
-msgstr ""
-
-#: Engine/sread.c:1149
+#: Engine/sread.c:1164
 #, c-format
 msgid "Warp_factor = %f\n"
 msgstr ""
 
-#: Engine/sread.c:1174
+#: Engine/sread.c:1189
 msgid "sread is confused on legal opcodes\n"
 msgstr ""
 
-#: Engine/sread.c:1236
+#: Engine/sread.c:1251
 msgid "No previous event for ^"
 msgstr ""
 
-#: Engine/sread.c:1241
+#: Engine/sread.c:1256
 #, c-format
 msgid "illegal space following %s, zero substituted"
 msgstr ""
 
-#: Engine/sread.c:1271
+#: Engine/sread.c:1286
 #, c-format
 msgid "ignoring '%s' in '%c' event"
 msgstr ""
 
-#: Engine/sread.c:1274
+#: Engine/sread.c:1289
 msgid "! invalid in p1, p2, or p3"
 msgstr ""
 
-#: Engine/sread.c:1275 Engine/sread.c:1280 Engine/sread.c:1730
-#: Engine/sread.c:1753 Engine/sread.c:1767
+#: Engine/sread.c:1290 Engine/sread.c:1295 Engine/sread.c:1738
+#: Engine/sread.c:1761 Engine/sread.c:1775
 msgid "      remainder of line flushed\n"
 msgstr ""
 
-#: Engine/sread.c:1279
+#: Engine/sread.c:1294
 #, c-format
 msgid "illegal character after !: '%c'"
 msgstr ""
 
-#: Engine/sread.c:1358
+#: Engine/sread.c:1373
 #, c-format
 msgid "WARNING: instr %s not found, assuming insno = -1\n"
 msgstr ""
 
-#: Engine/sread.c:1378
+#: Engine/sread.c:1393
 msgid "sread: illegal use of carry,   0 substituted\n"
 msgstr ""
 
-#: Engine/sread.c:1526
+#: Engine/sread.c:1539
 msgid "Improper \\"
 msgstr ""
 
-#: Engine/sread.c:1558
+#: Engine/sread.c:1570
 msgid "Not #define"
 msgstr ""
 
-#: Engine/sread.c:1620
+#: Engine/sread.c:1630
 #, c-format
 msgid "Macro %s with %d arguments defined\n"
 msgstr ""
 
-#: Engine/sread.c:1631
+#: Engine/sread.c:1642
 msgid "Not #include"
 msgstr ""
 
-#: Engine/sread.c:1662
+#: Engine/sread.c:1671
 #, c-format
 msgid "Cannot open #include'd file %s"
 msgstr ""
 
-#: Engine/sread.c:1673
+#: Engine/sread.c:1681
 msgid "Not #undef"
 msgstr ""
 
-#: Engine/sread.c:1692
+#: Engine/sread.c:1700
 msgid "unknown # option"
 msgstr ""
 
-#: Engine/sread.c:1729
+#: Engine/sread.c:1737
 #, c-format
 msgid "illegal opcode %c"
 msgstr ""
 
-#: Engine/sread.c:1752
+#: Engine/sread.c:1760
 #, c-format
 msgid "unexpected char %c"
 msgstr ""
 
-#: Engine/sread.c:1766
+#: Engine/sread.c:1774
 msgid "illegally placed string"
 msgstr ""
 
-#: Engine/sread.c:1773
+#: Engine/sread.c:1781
 msgid "unmatched quote"
 msgstr ""
 
-#: Engine/sread.c:1817
+#: Engine/sread.c:1825
 msgid "sread: illegal number format:  "
 msgstr ""
 
-#: Engine/sread.c:1823
+#: Engine/sread.c:1831
 msgid "   zero substituted.\n"
 msgstr ""
 
-#: Engine/swrite.c:123
+#: Engine/swrite.c:123 Engine/swritestr.c:134
 #, c-format
 msgid "swrite: unexpected opcode, section %d line %d\n"
 msgstr ""
 
-#: Engine/swrite.c:209 Engine/swrite.c:249
+#: Engine/swrite.c:209 Engine/swrite.c:249 Engine/swritestr.c:220
+#: Engine/swritestr.c:260
 #, c-format
 msgid "swrite: output, sect%d line%d p%d makes illegal reference to "
 msgstr ""
 
-#: Engine/swrite.c:216 Engine/swrite.c:255
+#: Engine/swrite.c:216 Engine/swrite.c:255 Engine/swritestr.c:227
+#: Engine/swritestr.c:266
 msgid "   Zero substituted\n"
 msgstr ""
 
-#: Engine/swrite.c:313
+#: Engine/swrite.c:313 Engine/swritestr.c:324
 #, c-format
 msgid "swrite: output, sect%d line%d p%d has illegal ramp symbol\n"
 msgstr ""
 
-#: Engine/swrite.c:317
+#: Engine/swrite.c:317 Engine/swritestr.c:328
 #, c-format
 msgid ""
 "swrite: output, sect%d line%d p%d ramp has illegal forward or backward ref\n"
 msgstr ""
 
-#: Engine/swrite.c:380 Engine/swrite.c:445
+#: Engine/swrite.c:380 Engine/swrite.c:445 Engine/swritestr.c:391
+#: Engine/swritestr.c:456
 #, c-format
 msgid "swrite: output, sect%d line%d p%d has illegal expramp symbol\n"
 msgstr ""
 
-#: Engine/swrite.c:385 Engine/swrite.c:450
+#: Engine/swrite.c:385 Engine/swrite.c:450 Engine/swritestr.c:396
+#: Engine/swritestr.c:461
 #, c-format
 msgid ""
 "swrite: output, sect%d line%d p%d expramp has illegal forward or backward "
 "ref\n"
 msgstr ""
 
-#: Engine/swrite.c:466
+#: Engine/swrite.c:466 Engine/swritestr.c:477
 #, c-format
 msgid "swrite: output, sect%d line%d p%d has illegally terminated string   "
 msgstr ""
 
-#: Engine/swrite.c:514
+#: Engine/swrite.c:514 Engine/swritestr.c:529
 #, c-format
 msgid "swrite: output, sect%d line%d p%d has illegal number  "
 msgstr ""
 
-#: Engine/swrite.c:521
+#: Engine/swrite.c:521 Engine/swritestr.c:536
 msgid "    String truncated\n"
 msgstr ""
 
-#: Engine/symbtab.c:202
+#: Engine/symbtab.c:208
 #, c-format
 msgid "Type confusion for %s (%d,%d), replacing\n"
 msgstr ""
 
-#: Engine/symbtab.c:333
+#: Engine/symbtab.c:345
 #, c-format
 msgid "Unknown word type for %s on line %d\n"
 msgstr ""
@@ -2255,6 +2230,14 @@ msgstr ""
 msgid "twarp: t segments exceed twarp array\n"
 msgstr ""
 
+#: InOut/cmidi.c:233
+msgid "CoreMIDI real time MIDI plugin for Csound\n"
+msgstr ""
+
+#: InOut/cmidi.c:247
+msgid "rtmidi: CoreMIDI module enabled\n"
+msgstr ""
+
 #: InOut/libsnd.c:486
 msgid "error: no input file name"
 msgstr ""
@@ -2278,54 +2261,69 @@ msgstr ""
 msgid "audio_in %s has %d chnls, orch %d chnls_i"
 msgstr ""
 
-#: InOut/libsnd.c:573
+#: InOut/libsnd.c:574
+#, c-format
+msgid "reading %d sample blks of %d-bit floats from %s \n"
+msgstr ""
+
+#: InOut/libsnd.c:578
 #, c-format
 msgid "reading %d-byte blks of %s from %s (%s)\n"
 msgstr ""
 
-#: InOut/libsnd.c:608
+#: InOut/libsnd.c:614
 msgid "Output file type changed to IRCAM for use in pipe\n"
 msgstr ""
 
-#: InOut/libsnd.c:628
+#: InOut/libsnd.c:634
 msgid "Failed to initialise real time audio output"
 msgstr ""
 
-#: InOut/libsnd.c:669 InOut/libsnd.c:673
+#: InOut/libsnd.c:675 InOut/libsnd.c:679
 #, c-format
 msgid "sfinit: cannot open %s"
 msgstr ""
 
-#: InOut/libsnd.c:733 util/srconv.c:485
+#: InOut/libsnd.c:741
+#, c-format
+msgid "writing %d sample blks of %d-bit floats to %s \n"
+msgstr ""
+
+#: InOut/libsnd.c:744 util/srconv.c:484
 #, c-format
 msgid "writing %d-byte blks of %s to %s"
 msgstr ""
 
-#: InOut/libsnd.c:740 InOut/libsnd.c:810
+#: InOut/libsnd.c:749 InOut/libsnd.c:824
 msgid " (raw)\n"
 msgstr ""
 
-#: InOut/libsnd.c:803
+#: InOut/libsnd.c:815
+#, c-format
+msgid "%ld %d sample blks of %d-bit floats written to %s\n"
+msgstr ""
+
+#: InOut/libsnd.c:820
 #, c-format
-msgid "%ld %d-byte soundblks of %s written to %s"
+msgid "%ld %d sample blks of %s written to %s"
 msgstr ""
 
-#: InOut/libsnd.c:822
+#: InOut/libsnd.c:837
 #, c-format
 msgid "soundfile write returned bytecount of %d, not %d"
 msgstr ""
 
-#: InOut/libsnd.c:825
+#: InOut/libsnd.c:840
 msgid ""
 "(disk may be full...\n"
 " closing the file ...)"
 msgstr ""
 
-#: InOut/libsnd.c:828 util/dnoise.c:1192
+#: InOut/libsnd.c:843 util/dnoise.c:1177
 msgid "\t... closed\n"
 msgstr ""
 
-#: InOut/libsnd.c:834
+#: InOut/libsnd.c:849
 msgid "not writing to sound disk\n"
 msgstr ""
 
@@ -2725,20 +2723,20 @@ msgstr ""
 msgid "Error closing MIDI out device: %d (%s)"
 msgstr ""
 
-#: InOut/midisend.c:171
+#: InOut/midisend.c:170
 msgid " *** no callback for opening MIDI output"
 msgstr ""
 
-#: InOut/midisend.c:173
+#: InOut/midisend.c:172
 msgid " *** no callback for writing MIDI data"
 msgstr ""
 
-#: InOut/midisend.c:179
+#: InOut/midisend.c:178
 #, c-format
 msgid " *** error opening MIDI out device: %d (%s)"
 msgstr ""
 
-#: InOut/midisend.c:190
+#: InOut/midisend.c:189
 #, c-format
 msgid " *** error opening MIDI out file '%s'"
 msgstr ""
@@ -2992,7 +2990,7 @@ msgstr ""
 msgid "Opened MIDI output device file '%s'\n"
 msgstr ""
 
-#: InOut/rtalsa.c:1101 InOut/rtcoreaudio.c:64 InOut/rtcoreaudio.c:74
+#: InOut/rtalsa.c:1101 InOut/rtcoreaudio.c:71 InOut/rtcoreaudio.c:81
 msgid "warning... could not create global var\n"
 msgstr ""
 
@@ -3016,64 +3014,82 @@ msgstr ""
 msgid "rtmidi: devfile module enabled\n"
 msgstr ""
 
-#: InOut/rtcoreaudio.c:83
+#: InOut/rtauhal.c:163
+#, c-format
+msgid "selected input device: %s \n"
+msgstr ""
+
+#: InOut/rtauhal.c:166
+#, c-format
+msgid "selected output device: %s \n"
+msgstr ""
+
+#: InOut/rtauhal.c:524
+msgid "AuHAL module: device closed\n"
+msgstr ""
+
+#: InOut/rtauhal.c:541
+msgid "rtaudio: coreaaudio-AuHAL module enabled\n"
+msgstr ""
+
+#: InOut/rtcoreaudio.c:90
 msgid ""
 "CoreAudio real-time audio module for Csound\n"
 "by Victor Lazzarini\n"
 msgstr ""
 
-#: InOut/rtcoreaudio.c:105
+#: InOut/rtcoreaudio.c:112
 msgid "rtaudio: CoreAudio module enabled\n"
 msgstr ""
 
-#: InOut/rtcoreaudio.c:254
+#: InOut/rtcoreaudio.c:261
 #, c-format
 msgid "selected device: %u \n"
 msgstr ""
 
-#: InOut/rtcoreaudio.c:263
+#: InOut/rtcoreaudio.c:270
 #, c-format
 msgid "CoreAudio module: opening %s \n"
 msgstr ""
 
-#: InOut/rtcoreaudio.c:297
+#: InOut/rtcoreaudio.c:304
 msgid " *** CoreAudio: open: could not set buffer size\n"
 msgstr ""
 
-#: InOut/rtcoreaudio.c:342
+#: InOut/rtcoreaudio.c:349
 #, c-format
 msgid " *** CoreAudio: open: could not set device parameter sr: %d \n"
 msgstr ""
 
-#: InOut/rtcoreaudio.c:344
+#: InOut/rtcoreaudio.c:351
 #, c-format
 msgid ""
 " *** CoreAudio: current device sampling rate is:%d \n"
 "     try setting the above value in your csound orchestra \n"
 msgstr ""
 
-#: InOut/rtcoreaudio.c:353
+#: InOut/rtcoreaudio.c:360
 #, c-format
 msgid "CoreAudio module: sr set to %d with %d audio channels \n"
 msgstr ""
 
-#: InOut/rtcoreaudio.c:374 InOut/rtcoreaudio.c:387 InOut/rtcoreaudio.c:432
-#: InOut/rtcoreaudio.c:452
+#: InOut/rtcoreaudio.c:381 InOut/rtcoreaudio.c:394 InOut/rtcoreaudio.c:439
+#: InOut/rtcoreaudio.c:459
 msgid " *** CoreAudio: open: memory allocation failure\n"
 msgstr ""
 
-#: InOut/rtcoreaudio.c:414
+#: InOut/rtcoreaudio.c:421
 #, c-format
 msgid ""
 "CoreAudio module: device open with %d buffers of %d frames\n"
 "==========================================================\n"
 msgstr ""
 
-#: InOut/rtcoreaudio.c:552
+#: InOut/rtcoreaudio.c:559
 msgid "coreaudio module: closing device...\n"
 msgstr ""
 
-#: InOut/rtcoreaudio.c:566
+#: InOut/rtcoreaudio.c:573
 msgid "coreaudio module: device closed\n"
 msgstr ""
 
@@ -3473,294 +3489,12 @@ msgstr ""
 msgid "rtaudio: WinMM module enabled\n"
 msgstr ""
 
-#: InOut/virtual_keyboard/virtual_keyboard.cpp:435
-msgid "virtual_keyboard.cpp: error allocating FLTK flags"
-msgstr ""
-
-#: InOut/virtual_keyboard/virtual_keyboard.cpp:443 InOut/winFLTK.c:125
-#: InOut/winFLTK.c:139
-#, c-format
-msgid "Error registering opcode '%s'"
-msgstr ""
-
-#: InOut/widgets.cpp:1081
-msgid ""
-"Invalid snapshot. Perhaps you modified orchestra widget code after you saved "
-"the snapshot bank."
-msgstr ""
-
-#: InOut/widgets.cpp:1226
-msgid "No name for FLbutbank"
-msgstr ""
-
-#: InOut/widgets.cpp:1466
-msgid "FLsetsnap: invalid table"
-msgstr ""
-
-#: InOut/widgets.cpp:1504
-msgid ""
-"Saving could overwrite the old file.\n"
-"Are you sure to save ?"
-msgstr ""
-
-#: InOut/widgets.cpp:1516
-msgid ""
-"Saving could overwrite the old file.\n"
-"Are you sure you want to save ?"
-msgstr ""
-
-#: InOut/widgets.cpp:1518
-msgid "No"
-msgstr ""
-
-#: InOut/widgets.cpp:1518
-msgid "Yes"
-msgstr ""
-
-#: InOut/widgets.cpp:1527
-msgid "FLsavesnap: cannot open file"
-msgstr ""
-
-#: InOut/widgets.cpp:1580
-msgid "FLloadsnap: cannot open file"
-msgstr ""
-
-#: InOut/widgets.cpp:1625
-msgid ""
-"unmatched widget, probably due to a modified orchestra. Modifying an "
-"orchestra makes it incompatible with old snapshot files"
-msgstr ""
-
-#: InOut/widgets.cpp:1994
-msgid "end of widget thread\n"
-msgstr ""
-
-#: InOut/widgets.cpp:2020
-msgid "FLrun was already called"
-msgstr ""
-
-#: InOut/widgets.cpp:2023
-msgid "FL_run: memory allocation failure"
-msgstr ""
-
-#: InOut/widgets.cpp:2125 InOut/widgets.cpp:2145
-msgid "Error: Unable to fork process\n"
-msgstr ""
-
-#: InOut/widgets.cpp:2545
-msgid "FLpanel_end: invalid stack pointer: verify its placement"
-msgstr ""
-
-#: InOut/widgets.cpp:2548
-msgid ""
-"FLpanel_end: invalid stack count: verify FLpanel/FLpanel_end count and "
-"placement"
-msgstr ""
-
-#: InOut/widgets.cpp:2573 InOut/widgets.cpp:2604
-msgid "FLscroll_end: invalid stack pointer: verify its placement"
-msgstr ""
-
-#: InOut/widgets.cpp:2576
-msgid ""
-"FLscroll_end: invalid stack count: verify FLscroll/FLscroll_end count and "
-"placement"
-msgstr ""
-
-#: InOut/widgets.cpp:2607
-msgid ""
-"FLtabs_end: invalid stack count: verify FLtabs/FLtabs_end count and placement"
-msgstr ""
-
-#: InOut/widgets.cpp:2651
-msgid "FLgroup_end: invalid stack pointer: verify its placement"
-msgstr ""
-
-#: InOut/widgets.cpp:2654
-msgid ""
-"FLgroup_end: invalid stack count: verify FLgroup/FLgroup_end count and "
-"placement"
-msgstr ""
-
-#: InOut/widgets.cpp:2684
-msgid "FLpack_end: invalid stack pointer: verify its placement"
-msgstr ""
-
-#: InOut/widgets.cpp:2687
-msgid ""
-"FLpack_end: invalid stack count: verify FLpack/FLpack_end count and placement"
-msgstr ""
-
-#: InOut/widgets.cpp:2840
-msgid "FLvalue cannot be set by FLsetVal.\n"
-msgstr ""
-
-#: InOut/widgets.cpp:2857
-#, c-format
-msgid "(fl_setWidgetValuei): not fully implemented yet; exp=%d"
-msgstr ""
-
-#: InOut/widgets.cpp:2876
-msgid "FLvalue cannot be set by FLsetVal\n"
-msgstr ""
-
-#: InOut/widgets.cpp:2893
-#, c-format
-msgid "(fl_setWidgetValue_set): not fully implemented yet; exp=%d"
-msgstr ""
-
-#: InOut/widgets.cpp:3242 InOut/widgets.cpp:4648
-msgid "FLslider exponential, using non-labeled slider"
-msgstr ""
-
-#: InOut/widgets.cpp:3264
-msgid "FLslider: invalid slider type"
-msgstr ""
-
-#: InOut/widgets.cpp:3276 InOut/widgets.cpp:4072
-msgid "FLslider: zero is illegal in exponential operations"
-msgstr ""
-
-#: InOut/widgets.cpp:3337 InOut/widgets.cpp:4399 InOut/widgets.cpp:4610
-#: InOut/widgets.cpp:4787
-msgid "invalid ZAK space allocation"
-msgstr ""
-
-#: InOut/widgets.cpp:3451
-msgid "FLslidBnk: zero is illegal in exponential operations"
-msgstr ""
-
-#: InOut/widgets.cpp:3548 InOut/widgets.cpp:3581
-msgid "FLjoy X axe: zero is illegal in exponential operations"
-msgstr ""
-
-#: InOut/widgets.cpp:3675
-msgid "FLknob: invalid knob type"
-msgstr ""
-
-#: InOut/widgets.cpp:3690
-msgid "FLknob: zero is illegal in exponential operations"
-msgstr ""
-
-#: InOut/widgets.cpp:3790 InOut/widgets.cpp:3912
-#, c-format
-msgid "FLbutton \"%s\" ignoring snapshot capture retrieve"
-msgstr ""
-
-#: InOut/widgets.cpp:3831
-msgid "FLbutton: invalid button type"
-msgstr ""
-
-#: InOut/widgets.cpp:3863
-msgid "FLcloseButton: invalid stack pointer: verify its placement"
-msgstr ""
-
-#: InOut/widgets.cpp:3882
-#, c-format
-msgid "Command Found: %s\n"
-msgstr ""
-
-#: InOut/widgets.cpp:3954
-msgid "FLbuttonBank: invalid button type"
-msgstr ""
-
-#: InOut/widgets.cpp:3992
-#, c-format
-msgid "FLcount \"%s\" ignoring snapshot capture retrieve"
-msgstr ""
-
-#: InOut/widgets.cpp:4059
-msgid "FLroller: invalid roller type"
-msgstr ""
-
-#: InOut/widgets.cpp:4254
-msgid "FLhvsBox: a square area must be delimited by 2 lines at least"
-msgstr ""
-
-#: InOut/widgets.cpp:4302
-msgid "FLkeyIn: invalid table number"
-msgstr ""
-
-#: InOut/widgets.cpp:4305
-msgid "FLkeyIn: table too short!"
-msgstr ""
-
-#: InOut/widgets.cpp:4522
-msgid "FLvslidBnk: zero is illegal in exponential operations"
-msgstr ""
-
-#: InOut/widgets.cpp:4698 InOut/widgets.cpp:4875
-msgid "FLsliderBank: zero is illegal in exponential operations"
-msgstr ""
-
-#: InOut/widgets.cpp:4825
-msgid "FLslidBnk2: FLslider exponential, using non-labeled slider"
-msgstr ""
-
-#: InOut/widgets.cpp:4955 InOut/widgets.cpp:5018
-msgid "FLsldBnkSet: invalid table number"
-msgstr ""
-
-#: InOut/widgets.cpp:4959 InOut/widgets.cpp:5022
-msgid "FLslidBnkSet: table too short!"
-msgstr ""
-
-#: InOut/widgets.cpp:4967 InOut/widgets.cpp:5031
-msgid "FLsldBnkSet: invalid outable number"
-msgstr ""
-
-#: InOut/widgets.cpp:4972 InOut/widgets.cpp:5037
-msgid "FLslidBnkSet: too many sliders to reset!"
-msgstr ""
-
-#: InOut/widgets.cpp:4995
-msgid "FLslidBnkSet: function mapping not available"
-msgstr ""
-
-#: InOut/widgets.cpp:5064 InOut/widgets.cpp:5149 InOut/widgets.cpp:5236
-msgid ""
-"FLslidBnk2Setk: value out of range: function mapping requires a 0 to 1 range "
-"for input"
-msgstr ""
-
-#: InOut/widgets.cpp:5093
-msgid "FLsldBnkSetk: invalid table number"
-msgstr ""
-
-#: InOut/widgets.cpp:5097 InOut/widgets.cpp:5183
-msgid "FLslidBnkSetk: table too short!"
-msgstr ""
-
-#: InOut/widgets.cpp:5105
-msgid "FLsldBnkSetk: invalid outable number"
-msgstr ""
-
-#: InOut/widgets.cpp:5111 InOut/widgets.cpp:5197
-msgid "FLslidBnkSetk: too many sliders to reset!"
-msgstr ""
-
-#: InOut/widgets.cpp:5179
-msgid "FLslidBnkSetk: invalid table number"
-msgstr ""
-
-#: InOut/widgets.cpp:5191
-msgid "FLslidBnkSetk: invalid outable number"
-msgstr ""
-
-#: InOut/widgets.cpp:5268
-msgid "FLxyin: none of X limits can be zero in exponential mode!"
-msgstr ""
-
-#: InOut/widgets.cpp:5294
-msgid "FLxyin: none of Y limits can be zero in exponential mode!"
-msgstr ""
-
 #: InOut/winascii.c:75
 #, c-format
 msgid "%s\t%ld points, scalemax %5.3f\n"
 msgstr ""
 
-#: InOut/windin.c:46 Opcodes/pitch.c:82 Opcodes/spectra.c:76
+#: InOut/windin.c:46 Opcodes/pitch.c:83 Opcodes/spectra.c:78
 msgid "illegal iprd"
 msgstr ""
 
@@ -3803,47 +3537,61 @@ msgstr ""
 msgid "widgets.cpp: error allocating FLTK flags"
 msgstr ""
 
-#: OOps/aops.c:95 OOps/aops.c:119
+#: InOut/winFLTK.c:124 InOut/winFLTK.c:137
+#: InOut/virtual_keyboard/virtual_keyboard.cpp:443
+#, c-format
+msgid "Error registering opcode '%s'"
+msgstr ""
+
+#: InOut/virtual_keyboard/virtual_keyboard.cpp:435
+msgid "virtual_keyboard.cpp: error allocating FLTK flags"
+msgstr ""
+
+#: OOps/aops.c:120 OOps/aops.c:144
 #, c-format
 msgid "Cannot be more In arguments than Out in init (%d,%d)"
 msgstr ""
 
-#: OOps/aops.c:175 OOps/aops.c:194
+#: OOps/aops.c:200 OOps/aops.c:219
 #, c-format
 msgid "Index %d out of range [0,%d] in t[]\n"
 msgstr ""
 
-#: OOps/aops.c:184
+#: OOps/aops.c:209
 #, fuzzy
-msgid "Vector notinitialised\n"
-msgstr "vco: nicht initialisiert"
+msgid "Vector not initialised\n"
+msgstr "Vector: nicht initialisiert"
 
-#: OOps/aops.c:686
+#: OOps/aops.c:711
 msgid "non-looping sample"
 msgstr ""
 
-#: OOps/aops.c:828 OOps/aops.c:856
+#: OOps/aops.c:853 OOps/aops.c:881
 #, c-format
 msgid "No tuning table %d"
 msgstr ""
 
-#: OOps/aops.c:901 OOps/aops.c:939
+#: OOps/aops.c:926 OOps/aops.c:964
 msgid "cpstun: invalid table"
 msgstr ""
 
-#: OOps/aops.c:1189
+#: OOps/aops.c:1214
 msgid "Input and output argument count differs in inch"
 msgstr ""
 
-#: OOps/aops.c:1193
+#: OOps/aops.c:1218
 #, c-format
 msgid "Input channel %d too large; ignored"
 msgstr ""
 
-#: OOps/aops.c:1667
+#: OOps/aops.c:1698
 msgid "k-rate invalue ChannelName cannot start with $"
 msgstr ""
 
+#: OOps/aops.c:1835
+msgid "Unknown functuon called"
+msgstr ""
+
 #: OOps/bus.c:313 OOps/bus.c:345
 msgid "chani: invalid index"
 msgstr ""
@@ -4128,7 +3876,7 @@ msgstr ""
 msgid "dispfft: not initialised"
 msgstr "dispfft: nicht initialisiert"
 
-#: OOps/disprep.c:435 Opcodes/spectra.c:516
+#: OOps/disprep.c:435 Opcodes/spectra.c:518
 msgid "illegal iperiod"
 msgstr ""
 
@@ -4192,15 +3940,15 @@ msgstr ""
 msgid " *** fftlib.c: internal error: invalid FFT size: %d"
 msgstr ""
 
-#: OOps/goto_ops.c:92
+#: OOps/goto_ops.c:93
 msgid "negative time period"
 msgstr "negativer Zeitabschnitt"
 
-#: OOps/goto_ops.c:182
+#: OOps/goto_ops.c:186
 msgid "turnoff2: invalid instrument number"
 msgstr ""
 
-#: OOps/goto_ops.c:187
+#: OOps/goto_ops.c:191
 msgid "turnoff2: invalid mode parameter"
 msgstr ""
 
@@ -4217,7 +3965,7 @@ msgid "cpstabm: invalid modulator table"
 msgstr ""
 
 #: OOps/midiops.c:304 OOps/midiops.c:314 OOps/midiops.c:334 OOps/midiops.c:344
-#: OOps/midiops.c:421 OOps/midiops.c:435 Opcodes/gab/sliderTable.c:563
+#: OOps/midiops.c:421 OOps/midiops.c:435 Opcodes/gab/sliderTable.c:567
 #: Opcodes/midiops2.c:56 Opcodes/midiops2.c:73 Opcodes/midiops2.c:111
 #: Opcodes/midiops2.c:145 Opcodes/midiops2.c:206 Opcodes/midiops2.c:237
 #: Opcodes/midiops2.c:298 Opcodes/midiops2.c:317 Opcodes/midiops2.c:357
@@ -4233,7 +3981,7 @@ msgstr ""
 msgid "illegal mrtmsg argument"
 msgstr ""
 
-#: OOps/midiout.c:383
+#: OOps/midiout.c:389
 #, c-format
 msgid "out contr14 msb:%x lsb:%x\n"
 msgstr ""
@@ -4695,148 +4443,148 @@ msgstr "pvsanal: Nicht Initialisiert.\n"
 msgid "Unknown window type; replaced by rectangular\n"
 msgstr ""
 
-#: OOps/pvsanal.c:1025
+#: OOps/pvsanal.c:1027
 msgid "pvsynth: Not Initialised.\n"
 msgstr "pvsynth: Nicht Initialisiert.\n"
 
-#: OOps/remote.c:100
+#: OOps/remote.c:103
 msgid "insufficient memory to initialise remote globals."
 msgstr ""
 
-#: OOps/remote.c:109
+#: OOps/remote.c:112
 msgid "insufficient memory to initialise outgoing socket table."
 msgstr ""
 
-#: OOps/remote.c:116
+#: OOps/remote.c:119
 msgid "insufficient memory to initialise incoming socket table."
 msgstr ""
 
-#: OOps/remote.c:124
+#: OOps/remote.c:127
 msgid "insufficient memory to initialise insrfd_list."
 msgstr ""
 
-#: OOps/remote.c:132
+#: OOps/remote.c:135
 msgid "insufficient memory to initialise chnrfd_list."
 msgstr ""
 
-#: OOps/remote.c:139
+#: OOps/remote.c:142
 msgid "insufficient memory to initialise insrfd table."
 msgstr ""
 
-#: OOps/remote.c:146
+#: OOps/remote.c:149
 msgid "insufficient memory to initialise chnrfd table."
 msgstr ""
 
-#: OOps/remote.c:153
+#: OOps/remote.c:156
 msgid "insufficient memory to initialise local ip address."
 msgstr ""
 
-#: OOps/remote.c:161
+#: OOps/remote.c:164
 msgid "unable to get local ip address."
 msgstr ""
 
-#: OOps/remote.c:222
+#: OOps/remote.c:225
 msgid "could not open remote port"
 msgstr ""
 
-#: OOps/remote.c:237
+#: OOps/remote.c:240
 msgid "---> Could not connect \n"
 msgstr "---> Konnte nicht anschließen\n"
 
-#: OOps/remote.c:241
+#: OOps/remote.c:244
 msgid "---> Failed all attempts to connect. \n"
 msgstr ""
 
-#: OOps/remote.c:244
+#: OOps/remote.c:247
 msgid "--->  Connected. \n"
 msgstr ""
 
-#: OOps/remote.c:258 Opcodes/socksend.c:232
+#: OOps/remote.c:261 Opcodes/socksend.c:305
 msgid "write to socket failed"
 msgstr ""
 
-#: OOps/remote.c:278
+#: OOps/remote.c:281
 msgid "creating socket\n"
 msgstr ""
 
-#: OOps/remote.c:280
+#: OOps/remote.c:283
 msgid "created socket \n"
 msgstr ""
 
-#: OOps/remote.c:292
+#: OOps/remote.c:295
 msgid "setting socket option to reuse the addresse \n"
 msgstr ""
 
-#: OOps/remote.c:309 Opcodes/sockrecv.c:133 Opcodes/sockrecv.c:223
-#: Opcodes/socksend.c:211
+#: OOps/remote.c:312 Opcodes/sockrecv.c:141 Opcodes/sockrecv.c:237
+#: Opcodes/socksend.c:284
 msgid "bind failed"
 msgstr ""
 
-#: OOps/remote.c:313 Opcodes/socksend.c:216
+#: OOps/remote.c:316 Opcodes/socksend.c:289
 msgid "listen failed"
 msgstr ""
 
-#: OOps/remote.c:318 Opcodes/socksend.c:222
+#: OOps/remote.c:321 Opcodes/socksend.c:295
 msgid "accept failed"
 msgstr ""
 
-#: OOps/remote.c:321
+#: OOps/remote.c:324
 #, c-format
 msgid "accepted, conn=%d \n"
 msgstr ""
 
-#: OOps/remote.c:353 OOps/remote.c:374 OOps/remote.c:417 OOps/remote.c:449
-#: OOps/remote.c:489
+#: OOps/remote.c:356 OOps/remote.c:377 OOps/remote.c:420 OOps/remote.c:452
+#: OOps/remote.c:492
 msgid "failed to initialise remote globals."
 msgstr ""
 
-#: OOps/remote.c:378 OOps/remote.c:421
+#: OOps/remote.c:381 OOps/remote.c:424
 msgid "missing instr nos"
 msgstr ""
 
-#: OOps/remote.c:390 OOps/remote.c:430
+#: OOps/remote.c:393 OOps/remote.c:433
 msgid "illegal instr no"
 msgstr ""
 
-#: OOps/remote.c:393
+#: OOps/remote.c:396
 msgid "insno already remote"
 msgstr ""
 
-#: OOps/remote.c:403 OOps/remote.c:474
+#: OOps/remote.c:406 OOps/remote.c:477
 msgid "Failed to open port to listen"
 msgstr ""
 
-#: OOps/remote.c:423
+#: OOps/remote.c:426
 #, c-format
 msgid "*** str1: %s own:%s\n"
 msgstr ""
 
-#: OOps/remote.c:433
+#: OOps/remote.c:436
 msgid "insno already specific remote"
 msgstr ""
 
-#: OOps/remote.c:453 OOps/remote.c:493
+#: OOps/remote.c:456 OOps/remote.c:496
 msgid "missing channel nos"
 msgstr ""
 
-#: OOps/remote.c:463 OOps/remote.c:502
+#: OOps/remote.c:466 OOps/remote.c:505
 msgid "illegal channel no"
 msgstr ""
 
-#: OOps/remote.c:466
+#: OOps/remote.c:469
 msgid "channel already remote"
 msgstr ""
 
-#: OOps/remote.c:505
+#: OOps/remote.c:508
 msgid "channel already specific remote"
 msgstr ""
 
-#: OOps/remote.c:531 OOps/remote.c:555 OOps/remote.c:579
+#: OOps/remote.c:534 OOps/remote.c:558 OOps/remote.c:582
 msgid "CLsend failed"
 msgstr ""
 
-#: OOps/remote.c:645 OOps/remote.c:653 OOps/remote.c:661 OOps/remote.c:669
-#: OOps/remote.c:677
+#: OOps/remote.c:648 OOps/remote.c:656 OOps/remote.c:664 OOps/remote.c:672
+#: OOps/remote.c:680
 msgid ""
 "*** This version of Csound was not compiled with remote event support ***\n"
 msgstr ""
@@ -4945,53 +4693,53 @@ msgstr "linseg nicht initialisiert (krate)\n"
 msgid "linseg: not initialised (arate)\n"
 msgstr "linseg: nicht initialisiert (arate)\n"
 
-#: OOps/ugens1.c:463 OOps/ugens1.c:465 OOps/ugens1.c:512 OOps/ugens1.c:514
-#: OOps/ugens1.c:564 OOps/ugens1.c:566 OOps/ugens1.c:610 OOps/ugens1.c:612
-#: OOps/ugens1.c:774 OOps/ugens1.c:776
+#: OOps/ugens1.c:464 OOps/ugens1.c:466 OOps/ugens1.c:513 OOps/ugens1.c:515
+#: OOps/ugens1.c:565 OOps/ugens1.c:567 OOps/ugens1.c:611 OOps/ugens1.c:613
+#: OOps/ugens1.c:775 OOps/ugens1.c:777
 #, c-format
 msgid "ival%d is zero"
 msgstr ""
 
-#: OOps/ugens1.c:466 OOps/ugens1.c:515 OOps/ugens1.c:567 OOps/ugens1.c:613
-#: OOps/ugens1.c:777
+#: OOps/ugens1.c:467 OOps/ugens1.c:516 OOps/ugens1.c:568 OOps/ugens1.c:614
+#: OOps/ugens1.c:778
 #, c-format
 msgid "ival%d sign conflict"
 msgstr ""
 
-#: OOps/ugens1.c:495 OOps/ugens1.c:544
+#: OOps/ugens1.c:496 OOps/ugens1.c:545
 #, c-format
 msgid "Breakpoint time %f not valid"
 msgstr ""
 
-#: OOps/ugens1.c:706
+#: OOps/ugens1.c:707
 msgid "expseg (krate): not initialised"
 msgstr "expseg (krate): nicht initialisiert"
 
-#: OOps/ugens1.c:732
+#: OOps/ugens1.c:733
 msgid "expseg (arate): not initialised"
 msgstr "expseg (arate): nicht initialisiert"
 
-#: OOps/ugens1.c:1013 OOps/ugens1.c:1149 OOps/ugens1.c:1311
+#: OOps/ugens1.c:1014 OOps/ugens1.c:1150 OOps/ugens1.c:1312
 msgid "non-positive iatdec"
 msgstr ""
 
-#: OOps/ugens1.c:1106 OOps/ugens1.c:1273
+#: OOps/ugens1.c:1107 OOps/ugens1.c:1274
 msgid "ixmod out of range."
 msgstr ""
 
-#: OOps/ugens1.c:1134 OOps/ugens1.c:1301
+#: OOps/ugens1.c:1135 OOps/ugens1.c:1302
 msgid "rise func ends with zero"
 msgstr ""
 
-#: OOps/ugens1.c:1178 OOps/ugens1.c:1257
+#: OOps/ugens1.c:1179 OOps/ugens1.c:1258
 msgid "envlpx rise func ends with zero"
 msgstr ""
 
-#: OOps/ugens1.c:1199 OOps/ugens1.c:1254
+#: OOps/ugens1.c:1200 OOps/ugens1.c:1255
 msgid "envlpx(krate): not initialised"
 msgstr "envlpx(krate): nicht initialisiert"
 
-#: OOps/ugens2.c:48 OOps/ugens2.c:61 Opcodes/shape.c:377
+#: OOps/ugens2.c:48 OOps/ugens2.c:61 Opcodes/shape.c:379
 msgid "init phase truncation\n"
 msgstr ""
 
@@ -5055,8 +4803,8 @@ msgid "oscil(krate): not initialised"
 msgstr "oscil(krate): nicht initialisiert"
 
 #: OOps/ugens2.c:1139 OOps/ugens2.c:1167 OOps/ugens2.c:1192 OOps/ugens2.c:1219
-#: Opcodes/pitch.c:1579 Opcodes/pitch.c:1606 Opcodes/pitch.c:1633
-#: Opcodes/pitch.c:1662
+#: Opcodes/pitch.c:1580 Opcodes/pitch.c:1607 Opcodes/pitch.c:1634
+#: Opcodes/pitch.c:1663
 msgid "oscil: not initialised"
 msgstr "oscil: nicht initialisiert"
 
@@ -5172,7 +4920,7 @@ msgstr ""
 msgid "Seeding from current time %lu\n"
 msgstr ""
 
-#: OOps/ugens5.c:198 OOps/ugens5.c:260 Opcodes/gab/gab.c:45 Opcodes/ugsc.c:188
+#: OOps/ugens5.c:198 OOps/ugens5.c:260 Opcodes/gab/gab.c:47 Opcodes/ugsc.c:186
 #, c-format
 msgid "illegal reson iscl value, %f"
 msgstr ""
@@ -5404,8 +5152,8 @@ msgstr ""
 msgid "Table no. < 1 dft=%.2f  sft=%.2f"
 msgstr ""
 
-#: OOps/ugrw1.c:1781 OOps/ugrw1.c:1822 Opcodes/fareyseq.c:455
-#: Opcodes/fareyseq.c:477
+#: OOps/ugrw1.c:1781 OOps/ugrw1.c:1822 Opcodes/fareyseq.c:453
+#: Opcodes/fareyseq.c:475
 #, c-format
 msgid "Source sft table %.2f not found."
 msgstr ""
@@ -5635,20 +5383,20 @@ msgstr ""
 msgid "reverbx: not initialised"
 msgstr "reverbx: nicht initialisiert"
 
-#: Opcodes/ambicode1.c:80
+#: Opcodes/ambicode1.c:82
 msgid "The numbers of input and output arguments are not valid."
 msgstr ""
 
-#: Opcodes/ambicode1.c:163
+#: Opcodes/ambicode1.c:165
 #, fuzzy
 msgid "The number of input arguments is not valid."
 msgstr "Falsche Zahl der Eingang Argumente"
 
-#: Opcodes/ambicode1.c:167
+#: Opcodes/ambicode1.c:169
 msgid "The isetup value should be between 1 and 5."
 msgstr ""
 
-#: Opcodes/ambicode1.c:193
+#: Opcodes/ambicode1.c:195
 msgid "The output channel count does not match the isetup value."
 msgstr ""
 
@@ -5688,16 +5436,16 @@ msgstr ""
 msgid "Not supported setup number!"
 msgstr ""
 
-#: Opcodes/babo.c:740
+#: Opcodes/babo.c:742
 #, c-format
 msgid "Babo: resonator dimensions are incorrect (%.1f, %.1f, %.1f)"
 msgstr ""
 
-#: Opcodes/bilbar.c:82
+#: Opcodes/bilbar.c:83
 msgid "No data to continue"
 msgstr ""
 
-#: Opcodes/bilbar.c:108
+#: Opcodes/bilbar.c:109
 msgid "Ends must be clamped(1), pivoting(2) or free(3)"
 msgstr ""
 
@@ -5710,8 +5458,8 @@ msgstr "vco: nicht initialisiert"
 msgid "DLineN: Delay length too big ... setting to maximum length of %ld.\n"
 msgstr ""
 
-#: Opcodes/bowedbar.c:98 Opcodes/physmod.c:489
-msgid "unknown lowest frequency for bowed string -- assuming 50Hz\n"
+#: Opcodes/bowedbar.c:98
+msgid "unknown lowest frequency for bowed bar -- assuming 50Hz\n"
 msgstr ""
 
 #: Opcodes/clfilt.c:53
@@ -5789,17 +5537,17 @@ msgstr ""
 msgid "Unknown control %d"
 msgstr ""
 
-#: Opcodes/cpumeter.c:73
+#: Opcodes/cpumeter.c:77
 #, c-format
 msgid "Failed to open /proc/stat: %s"
 msgstr ""
 
-#: Opcodes/cpumeter.c:75 Opcodes/cpumeter.c:80 Opcodes/cpumeter.c:107
-#: Opcodes/cpumeter.c:147
+#: Opcodes/cpumeter.c:79 Opcodes/cpumeter.c:84 Opcodes/cpumeter.c:111
+#: Opcodes/cpumeter.c:151
 msgid "failed /proc/stat read"
 msgstr ""
 
-#: Opcodes/crossfm.c:33
+#: Opcodes/crossfm.c:34
 msgid "crossfm: ftable not found"
 msgstr ""
 
@@ -5841,31 +5589,31 @@ msgstr ""
 msgid "insufficient arguments for fareytable"
 msgstr "unzulängliche Argumente"
 
-#: Opcodes/fareyseq.c:250 Opcodes/fareyseq.c:300
+#: Opcodes/fareyseq.c:251 Opcodes/fareyseq.c:301
 #, c-format
 msgid "Farey: Table no. < 1 dft=%.2f  sft=%.2f"
 msgstr ""
 
-#: Opcodes/fareyseq.c:255
+#: Opcodes/fareyseq.c:256
 #, c-format
 msgid "Farey: Filter type < 1 dft=%.2f  sft=%.2f"
 msgstr ""
 
-#: Opcodes/fareyseq.c:270 Opcodes/fareyseq.c:318
+#: Opcodes/fareyseq.c:271 Opcodes/fareyseq.c:319
 #, c-format
 msgid "Farey: Destination dft table %.2f not found."
 msgstr ""
 
-#: Opcodes/fareyseq.c:281 Opcodes/fareyseq.c:329
+#: Opcodes/fareyseq.c:282 Opcodes/fareyseq.c:330
 #, c-format
 msgid "Farey: Source sft table %.2f not found."
 msgstr ""
 
-#: Opcodes/fareyseq.c:305
+#: Opcodes/fareyseq.c:306
 msgid "Farey: Filter type < 1"
 msgstr ""
 
-#: Opcodes/fareyseq.c:447 Opcodes/fareyseq.c:468
+#: Opcodes/fareyseq.c:445 Opcodes/fareyseq.c:466
 #, c-format
 msgid "Table no. < 1 sft=%.2f"
 msgstr ""
@@ -5973,45 +5721,45 @@ msgstr "Keine Tabelle für FM4Op"
 msgid "follow - zero length!"
 msgstr ""
 
-#: Opcodes/fout.c:59
+#: Opcodes/fout.c:60
 #, c-format
 msgid "Closing file '%s'...\n"
 msgstr ""
 
-#: Opcodes/fout.c:101
+#: Opcodes/fout.c:102
 msgid "invalid file handle"
 msgstr ""
 
-#: Opcodes/fout.c:108 Opcodes/fout.c:420
+#: Opcodes/fout.c:109 Opcodes/fout.c:421
 msgid "invalid file name"
 msgstr ""
 
-#: Opcodes/fout.c:165
+#: Opcodes/fout.c:166
 #, c-format
 msgid "error opening file '%s'"
 msgstr ""
 
-#: Opcodes/fout.c:192
+#: Opcodes/fout.c:193
 #, c-format
 msgid "error opening sound file '%s'"
 msgstr ""
 
-#: Opcodes/fout.c:429
+#: Opcodes/fout.c:430
 #, c-format
 msgid "cannot close '%s': not found in list of open files"
 msgstr ""
 
-#: Opcodes/fout.c:440
+#: Opcodes/fout.c:441
 #, c-format
 msgid "cannot close file #%d: not a valid handle"
 msgstr ""
 
-#: Opcodes/fout.c:447
+#: Opcodes/fout.c:448
 #, c-format
 msgid "file #%d (%s) is in use, will be closed when released"
 msgstr ""
 
-#: Opcodes/fout.c:476 Opcodes/fout.c:479 Opcodes/fout.c:550 Opcodes/fout.c:553
+#: Opcodes/fout.c:477 Opcodes/fout.c:480 Opcodes/fout.c:551 Opcodes/fout.c:554
 msgid "fouti: invalid file handle"
 msgstr ""
 
@@ -6089,554 +5837,694 @@ msgstr ""
 msgid "ftsave: failed to write file"
 msgstr ""
 
-#: Opcodes/gab/gab.c:109
+#: Opcodes/gab/gab.c:111
 msgid "fastab: incorrect table number"
 msgstr ""
 
-#: Opcodes/gab/gab.c:132 Opcodes/gab/gab.c:141 Opcodes/gab/gab.c:171
+#: Opcodes/gab/gab.c:134 Opcodes/gab/gab.c:143 Opcodes/gab/gab.c:173
 msgid "tabw off end"
 msgstr ""
 
-#: Opcodes/gab/gab.c:157 Opcodes/gab/gab.c:225 Opcodes/gab/gab.c:234
+#: Opcodes/gab/gab.c:159 Opcodes/gab/gab.c:227 Opcodes/gab/gab.c:236
 msgid "tab off end"
 msgstr ""
 
-#: Opcodes/gab/gab.c:183
+#: Opcodes/gab/gab.c:185
 msgid "tab_i: incorrect table number"
 msgstr ""
 
-#: Opcodes/gab/gab.c:190
-msgid "tab_i off end"
+#: Opcodes/gab/gab.c:192
+#, c-format
+msgid "tab_i off end: table number: %d\n"
 msgstr ""
 
-#: Opcodes/gab/gab.c:202
+#: Opcodes/gab/gab.c:204
 msgid "tabw_i: incorrect table number"
 msgstr ""
 
-#: Opcodes/gab/gab.c:209
+#: Opcodes/gab/gab.c:211
 msgid "tabw_i off end"
 msgstr ""
 
-#: Opcodes/gab/gab.c:247
+#: Opcodes/gab/gab.c:249
 msgid "tab_init: incorrect table number"
 msgstr ""
 
-#: Opcodes/gab/gab.c:316
+#: Opcodes/gab/gab.c:318
 msgid "printi parameter was not a \"quoted string\""
 msgstr ""
 
-#: Opcodes/gab/gab.c:423
+#: Opcodes/gab/gab.c:425
 msgid "adsynt2: wavetable not found!"
 msgstr ""
 
-#: Opcodes/gab/gab.c:435
+#: Opcodes/gab/gab.c:437
 msgid "adsynt2: freqtable not found!"
 msgstr ""
 
-#: Opcodes/gab/gab.c:440
+#: Opcodes/gab/gab.c:442
 msgid "adsynt2: partial count is greater than freqtable size!"
 msgstr ""
 
-#: Opcodes/gab/gab.c:449
+#: Opcodes/gab/gab.c:451
 msgid "adsynt2: amptable not found!"
 msgstr ""
 
-#: Opcodes/gab/gab.c:454
+#: Opcodes/gab/gab.c:456
 msgid "adsynt2: partial count is greater than amptable size!"
 msgstr ""
 
-#: Opcodes/gab/gab.c:499
+#: Opcodes/gab/gab.c:501
 msgid "adsynt2: not initialised"
 msgstr ""
 
-#: Opcodes/gab/gab.c:741
+#: Opcodes/gab/gab.c:743
 msgid "max_k: invalid imaxflag value"
 msgstr ""
 
-#: Opcodes/gab/hvs.c:68
+#: Opcodes/gab/hvs.c:70
 msgid "hvs1: a line segment must be delimited by 2 points at least"
 msgstr ""
 
-#: Opcodes/gab/hvs.c:150
+#: Opcodes/gab/hvs.c:152
 msgid "hvs2: a square area must be delimited by 2 lines at least"
 msgstr ""
 
-#: Opcodes/gab/hvs.c:246
+#: Opcodes/gab/hvs.c:248
 msgid "hvs3: a square area must be delimited by 2 lines at least"
 msgstr ""
 
-#: Opcodes/gab/hvs.c:389
+#: Opcodes/gab/hvs.c:390
 msgid "vphaseseg: the first function is invalid or missing"
 msgstr ""
 
-#: Opcodes/gab/hvs.c:396
+#: Opcodes/gab/hvs.c:398 Opcodes/gab/vectorial.c:2301
 msgid "vphaseseg: invalid num. of elements"
 msgstr ""
 
-#: Opcodes/gab/hvs.c:414
+#: Opcodes/gab/hvs.c:416
 msgid "vphaseseg: function invalid or missing"
 msgstr ""
 
-#: Opcodes/gab/newgabopc.c:39 Opcodes/gab/newgabopc.c:54
+#: Opcodes/gab/newgabopc.c:40 Opcodes/gab/newgabopc.c:55
 msgid "vtable1: incorrect table number"
 msgstr ""
 
-#: Opcodes/gab/newgabopc.c:359
+#: Opcodes/gab/newgabopc.c:241 Opcodes/gab/newgabopc.c:296
+msgid "copyTabElems: incorrect destination table number"
+msgstr ""
+
+#: Opcodes/gab/newgabopc.c:246 Opcodes/gab/newgabopc.c:301
+msgid ""
+"copyTabElems: destination table too short or number of elements to copy too "
+"big"
+msgstr ""
+
+#: Opcodes/gab/newgabopc.c:252 Opcodes/gab/newgabopc.c:306
+#, fuzzy
+msgid "copyTabElems: incorrect source table number"
+msgstr "unbekannte Quelltabelle Zahl"
+
+#: Opcodes/gab/newgabopc.c:257 Opcodes/gab/newgabopc.c:310
+msgid ""
+"copyTabElems: source table size less than the number of elements to copy"
+msgstr ""
+
+#: Opcodes/gab/newgabopc.c:273 Opcodes/gab/newgabopc.c:318
+msgid "copyTabElems: source table too short"
+msgstr ""
+
+#: Opcodes/gab/newgabopc.c:276 Opcodes/gab/newgabopc.c:321
+msgid "copyTabElems: destination table too short"
+msgstr ""
+
+#: Opcodes/gab/newgabopc.c:347
+msgid "inrg: audio input is not enabled"
+msgstr ""
+
+#: Opcodes/gab/newgabopc.c:362
 msgid "inrg: channel number cannot be < 1 (1 is the first channel)"
 msgstr ""
 
-#: Opcodes/gab/newgabopc.c:400
+#: Opcodes/gab/newgabopc.c:403
 msgid "outrg: channel number cannot be < 1 (1 is the first channel)"
 msgstr ""
 
-#: Opcodes/gab/newgabopc.c:439 Opcodes/gab/newgabopc.c:671
+#: Opcodes/gab/newgabopc.c:440 Opcodes/gab/newgabopc.c:574
+#: Opcodes/gab/newgabopc.c:672
 msgid "invalid function"
 msgstr ""
 
-#: Opcodes/gab/newgabopc.c:442
+#: Opcodes/gab/newgabopc.c:443
 msgid "lposc: no sample rate stored in function; assuming=sr\n"
 msgstr ""
 
-#: Opcodes/gab/newgabopc.c:673
+#: Opcodes/gab/newgabopc.c:577
+msgid "lposcil: no sample rate stored in function assuming=sr\n"
+msgstr ""
+
+#: Opcodes/gab/newgabopc.c:674
 msgid "lposcil: no sample rate stored in function; assuming=sr\n"
 msgstr ""
 
-#: Opcodes/gab/sliderTable.c:45 Opcodes/gab/sliderTable.c:254
+#: Opcodes/gab/sliderTable.c:47 Opcodes/gab/sliderTable.c:256
 #: Opcodes/midiops3.c:44 Opcodes/midiops3.c:146 Opcodes/midiops3.c:259
 #: Opcodes/midiops3.c:317 Opcodes/midiops3.c:413
 msgid "illegal channel"
 msgstr ""
 
-#: Opcodes/gab/sliderTable.c:65 Opcodes/gab/sliderTable.c:277
+#: Opcodes/gab/sliderTable.c:67 Opcodes/gab/sliderTable.c:280
 #: Opcodes/midiops3.c:58 Opcodes/midiops3.c:162 Opcodes/midiops3.c:273
 #, c-format
 msgid "illegal control number at position n.%d"
 msgstr ""
 
-#: Opcodes/gab/sliderTable.c:74
+#: Opcodes/gab/sliderTable.c:76
 #, c-format
 msgid ""
 "sliderXtable: illegal initvalue at position %d.  When using table indexing, "
 "the init range is 0 to 1"
 msgstr ""
 
-#: Opcodes/gab/sliderTable.c:84 Opcodes/gab/sliderTable.c:284
-#: Opcodes/gab/sliderTable.c:509 Opcodes/midiops3.c:64 Opcodes/midiops3.c:168
+#: Opcodes/gab/sliderTable.c:86 Opcodes/gab/sliderTable.c:287
+#: Opcodes/gab/sliderTable.c:513 Opcodes/midiops3.c:64 Opcodes/midiops3.c:168
 #: Opcodes/midiops3.c:347
 #, c-format
 msgid "illegal initvalue at position n.%d"
 msgstr ""
 
-#: Opcodes/gab/sliderTable.c:96 Opcodes/gab/sliderTable.c:296
+#: Opcodes/gab/sliderTable.c:98 Opcodes/gab/sliderTable.c:299
 msgid "sliderXtable: zero is illegal in exponential operations"
 msgstr ""
 
-#: Opcodes/gab/sliderTable.c:312
+#: Opcodes/gab/sliderTable.c:315
 #, c-format
 msgid ""
 "sliderXtable: illegal initvalue at position %d. When using table indexing, "
 "the init range is 0 to 1"
 msgstr ""
 
-#: Opcodes/gab/sliderTable.c:565 Opcodes/midiops2.c:321 Opcodes/midiops2.c:359
+#: Opcodes/gab/sliderTable.c:569 Opcodes/midiops2.c:321 Opcodes/midiops2.c:359
 #: Opcodes/midiops2.c:391 Opcodes/midiops2.c:440 Opcodes/midiops2.c:475
 #: Opcodes/midiops2.c:517 Opcodes/midiops2.c:532 Opcodes/midiops2.c:551
 msgid "illegal midi channel"
 msgstr ""
 
-#: Opcodes/gab/tabmorph.c:42
+#: Opcodes/gab/tabmorph.c:43
 msgid "tabmorph: invalid table number"
 msgstr ""
 
-#: Opcodes/gab/tabmorph.c:46
+#: Opcodes/gab/tabmorph.c:47
 msgid "tabmorph: all tables must have the same length!"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:33
+#: Opcodes/gab/vectorial.c:35
 msgid "mtablei: incorrect table number"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:63 Opcodes/gab/vectorial.c:83
-#: Opcodes/gab/vectorial.c:133 Opcodes/gab/vectorial.c:200
+#: Opcodes/gab/vectorial.c:65 Opcodes/gab/vectorial.c:85
+#: Opcodes/gab/vectorial.c:135 Opcodes/gab/vectorial.c:202
 msgid "mtable: incorrect table number"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:185
+#: Opcodes/gab/vectorial.c:187
 msgid "mtabi: incorrect table number"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:252
+#: Opcodes/gab/vectorial.c:254
 msgid "mtablewi: incorrect table number"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:268 Opcodes/gab/vectorial.c:288
-#: Opcodes/gab/vectorial.c:317 Opcodes/gab/vectorial.c:362
-#: Opcodes/gab/vectorial.c:406
+#: Opcodes/gab/vectorial.c:270 Opcodes/gab/vectorial.c:290
+#: Opcodes/gab/vectorial.c:319 Opcodes/gab/vectorial.c:364
+#: Opcodes/gab/vectorial.c:408
 msgid "mtabw: incorrect table number"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:348
+#: Opcodes/gab/vectorial.c:350
 msgid "mtabwi: incorrect table number"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:380
+#: Opcodes/gab/vectorial.c:382
 msgid "mtablew: incorrect table number"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:454 Opcodes/gab/vectorial.c:513
+#: Opcodes/gab/vectorial.c:457 Opcodes/gab/vectorial.c:516
 #, c-format
 msgid "vadd_i: invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:470
+#: Opcodes/gab/vectorial.c:473
 msgid "vadd_i: ifn length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:497
+#: Opcodes/gab/vectorial.c:500
 msgid "vadd: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:529
+#: Opcodes/gab/vectorial.c:532
 msgid "vmult_i: ifn length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:556
+#: Opcodes/gab/vectorial.c:559
 msgid "vmult: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:572
+#: Opcodes/gab/vectorial.c:575
 #, c-format
 msgid "vpow_i: invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:589
+#: Opcodes/gab/vectorial.c:592
 msgid "vpow_i: ifn length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:617
+#: Opcodes/gab/vectorial.c:620
 msgid "vpow: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:633
+#: Opcodes/gab/vectorial.c:636
 #, c-format
 msgid "vexp_i: invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:649
+#: Opcodes/gab/vectorial.c:652
 msgid "vexp_i: ifn length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:676
+#: Opcodes/gab/vectorial.c:679
 msgid "vexp: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:694
+#: Opcodes/gab/vectorial.c:697
 #, c-format
 msgid "vectorsop: ifn1 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:699
+#: Opcodes/gab/vectorial.c:702
 #, c-format
 msgid "vectorsop: ifn2 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:738
+#: Opcodes/gab/vectorial.c:742
 msgid "vcopy: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:756
+#: Opcodes/gab/vectorial.c:760
 msgid "vcopy: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:783
+#: Opcodes/gab/vectorial.c:787
 #, c-format
 msgid "vcopy_i: ifn1 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:788
+#: Opcodes/gab/vectorial.c:792
 #, c-format
 msgid "vcopy_i: ifn2 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:810
+#: Opcodes/gab/vectorial.c:814
 msgid "vcopy_i: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:827
+#: Opcodes/gab/vectorial.c:831
 msgid "vcopy_i: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:866
+#: Opcodes/gab/vectorial.c:870
 msgid "vaddv: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:885
+#: Opcodes/gab/vectorial.c:889
 msgid "vaddv: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:911
+#: Opcodes/gab/vectorial.c:915
 #, c-format
 msgid "vaddv_i: ifn1 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:916
+#: Opcodes/gab/vectorial.c:920
 #, c-format
 msgid "vaddv_i: ifn2 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:938
+#: Opcodes/gab/vectorial.c:942
 msgid "vaddv_i: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:956
+#: Opcodes/gab/vectorial.c:960
 msgid "vaddv_i: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:987
+#: Opcodes/gab/vectorial.c:991
 msgid "vsubv: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1006
+#: Opcodes/gab/vectorial.c:1010
 msgid "vsubv: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1033
+#: Opcodes/gab/vectorial.c:1037
 #, c-format
 msgid "vsubv_i: ifn1 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1038
+#: Opcodes/gab/vectorial.c:1042
 #, c-format
 msgid "vsubv_i: ifn2 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1060
+#: Opcodes/gab/vectorial.c:1064
 msgid "vsubv_i: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1078
+#: Opcodes/gab/vectorial.c:1082
 msgid "vsubv_i: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1115
+#: Opcodes/gab/vectorial.c:1119
 msgid "vmultv: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1134
+#: Opcodes/gab/vectorial.c:1138
 msgid "vmultv: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1161
+#: Opcodes/gab/vectorial.c:1165
 #, c-format
 msgid "vmultv_i: ifn1 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1166
+#: Opcodes/gab/vectorial.c:1170
 #, c-format
 msgid "vmultv_i: ifn2 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1188
+#: Opcodes/gab/vectorial.c:1192
 msgid "vmultv_i: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1205
+#: Opcodes/gab/vectorial.c:1209
 msgid "vmultv_i: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1242
+#: Opcodes/gab/vectorial.c:1246
 msgid "vdivv: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1261
+#: Opcodes/gab/vectorial.c:1265
 msgid "vdivv: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1288
+#: Opcodes/gab/vectorial.c:1292
 #, c-format
 msgid "vdivv_i: ifn1 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1293
+#: Opcodes/gab/vectorial.c:1297
 #, c-format
 msgid "vdivv_i: ifn2 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1315
+#: Opcodes/gab/vectorial.c:1319
 msgid "vdivv_i: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1333
+#: Opcodes/gab/vectorial.c:1337
 msgid "vdivv_i: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1370
+#: Opcodes/gab/vectorial.c:1374
 msgid "vpowv: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1389
+#: Opcodes/gab/vectorial.c:1393
 msgid "vpowv: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1416
+#: Opcodes/gab/vectorial.c:1420
 #, c-format
 msgid "vpowv_i: ifn1 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1421
+#: Opcodes/gab/vectorial.c:1425
 #, c-format
 msgid "vpowv_i: ifn2 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1443
+#: Opcodes/gab/vectorial.c:1447
 msgid "vpowv_i: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1460
+#: Opcodes/gab/vectorial.c:1464
 msgid "vpowv_i: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1497
+#: Opcodes/gab/vectorial.c:1501
 msgid "vexpv: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1516
+#: Opcodes/gab/vectorial.c:1520
 msgid "vexpv: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1543
+#: Opcodes/gab/vectorial.c:1547
 #, c-format
 msgid "vexpv_i: ifn1 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1548
+#: Opcodes/gab/vectorial.c:1552
 #, c-format
 msgid "vexpv_i: ifn2 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1570
+#: Opcodes/gab/vectorial.c:1574
 msgid "vexpv_i: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1588
+#: Opcodes/gab/vectorial.c:1592
 msgid "vexpv_i: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1625
+#: Opcodes/gab/vectorial.c:1629
 msgid "vmap: Error: ifn1 and ifn2 can not be the same"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1630
+#: Opcodes/gab/vectorial.c:1634
 #, c-format
 msgid "vmap: ifn1 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1635
+#: Opcodes/gab/vectorial.c:1639
 #, c-format
 msgid "vmap: ifn2 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1657
+#: Opcodes/gab/vectorial.c:1661
 msgid "vmap: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1674
+#: Opcodes/gab/vectorial.c:1678
 msgid "vmap: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1870
+#: Opcodes/gab/vectorial.c:1698
+#, fuzzy
+msgid "vectorop: invalid num of elements"
+msgstr "unzulässiger Name für Instrument"
+
+#: Opcodes/gab/vectorial.c:1727
+msgid "vport: invalid table length or num of elements"
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:1730
+msgid "vport: invalid table"
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:1735
+msgid "vport: invalid init table length or num of elements"
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:1738
+msgid "vport: invalid init table"
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:1875
 #, c-format
 msgid "vrandh: Seeding from current time %lu\n"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1968
+#: Opcodes/gab/vectorial.c:1888
+msgid "vrandh: Invalid table."
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:1891
+msgid "vrandh: idstoffset is greater than table length."
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:1896
+msgid "randh: Table length exceeded, last elements discarded."
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:1975
 #, c-format
 msgid "vrandi: Seeding from current time %lu\n"
 msgstr ""
 
-#: Opcodes/grain4.c:57
+#: Opcodes/gab/vectorial.c:1987
+msgid "vrandi: Invalid table."
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:1990
+msgid "vrandi: idstoffset is greater thantable length."
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:1995
+msgid "vrandi: Table length exceeded, last elements discarded."
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:2077 Opcodes/gab/vectorial.c:2084
+#: Opcodes/gab/vectorial.c:2091
+#, fuzzy
+msgid "vecdelay: invalid num of elements"
+msgstr "unzulässiger Name für Instrument"
+
+#: Opcodes/gab/vectorial.c:2079
+msgid "vecdly: invalid output table"
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:2086
+msgid "vecdly: invalid input table"
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:2093
+msgid "vecdly: invalid delay table"
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:2138
+#, fuzzy
+msgid "vecdly: not initialised"
+msgstr "vdelay: nicht initialisiert"
+
+#: Opcodes/gab/vectorial.c:2181
+msgid "vlinseg/vexpseg: invalid num. of elements"
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:2223 Opcodes/vpvoc.c:118
+msgid "tableseg: not initialised"
+msgstr "tableseg: nicht initialisiert"
+
+#: Opcodes/gab/vectorial.c:2253 Opcodes/vpvoc.c:146
+msgid "tablexseg: not initialised"
+msgstr "tablexseg: nicht initialisiert"
+
+#: Opcodes/gab/vectorial.c:2406
+#, fuzzy
+msgid "vdelayk: not initialised"
+msgstr "delayk: nicht initialisiert"
+
+#: Opcodes/gab/vectorial.c:2439 Opcodes/gab/vectorial.c:2445
+#, fuzzy
+msgid "cella: invalid num of elements"
+msgstr "unzulässiger Name für Instrument"
+
+#: Opcodes/gab/vectorial.c:2441
+msgid "cella: invalid output table"
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:2448
+msgid "cella: invalid initial state table"
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:2452
+msgid "cella: invalid rule table"
+msgstr ""
+
+#: Opcodes/grain4.c:59
 msgid "granule_set: Unable to find function table"
 msgstr ""
 
-#: Opcodes/grain4.c:67
+#: Opcodes/grain4.c:69
 msgid "granule_set: Unable to find function table for envelope"
 msgstr ""
 
-#: Opcodes/grain4.c:73
+#: Opcodes/grain4.c:75
 msgid "granule_set: Too many voices"
 msgstr ""
 
-#: Opcodes/grain4.c:76
+#: Opcodes/grain4.c:78
 msgid "granule_set: iratio must be greater then 0"
 msgstr "granule_set: iratio müssen grösseres dann 0 sein"
 
-#: Opcodes/grain4.c:80
+#: Opcodes/grain4.c:82
 msgid "granule_set: imode must be -1, 0 or +1"
 msgstr ""
 
-#: Opcodes/grain4.c:84
+#: Opcodes/grain4.c:86
 msgid "granule_set: Illegal ithd, must be greater than zero"
 msgstr ""
 
-#: Opcodes/grain4.c:89
+#: Opcodes/grain4.c:91
 msgid "granule_set: ipshift must be integer between 0 and 4"
 msgstr ""
 
-#: Opcodes/grain4.c:94
+#: Opcodes/grain4.c:96
 msgid "granule_set: Not enough voices for the number of pitches"
 msgstr ""
 
-#: Opcodes/grain4.c:101
+#: Opcodes/grain4.c:103
 msgid "granule_set: ipitch1 must be greater then zero"
 msgstr "granule_set: ipitch1 müssen grösseres dann null sein"
 
-#: Opcodes/grain4.c:106
+#: Opcodes/grain4.c:108
 msgid "granule_set: ipitch2 must be greater then zero"
 msgstr "granule_set: ipitch2 müssen grösseres dann null sein"
 
-#: Opcodes/grain4.c:111
+#: Opcodes/grain4.c:113
 msgid "granule_set: ipitch3 must be greater then zero"
 msgstr "granule_set: ipitch3 müssen grösseres dann null sein"
 
-#: Opcodes/grain4.c:116
+#: Opcodes/grain4.c:118
 msgid "granule_set: ipitch4 must be greater then zero"
 msgstr "granule_set: ipitch4 müssen grösseres dann null sein"
 
-#: Opcodes/grain4.c:121
+#: Opcodes/grain4.c:123
 msgid "granule_set: must be positive and less than function table length"
 msgstr ""
 
-#: Opcodes/grain4.c:125
+#: Opcodes/grain4.c:127
 msgid "granule_set: igskip_os must be greater then 0"
 msgstr "granule_set: igskip_os müssen grösseres dann 0 sein"
 
-#: Opcodes/grain4.c:134
+#: Opcodes/grain4.c:136
 msgid "granule_set: kgap must be greater then 0"
 msgstr "granule_set: kgap müssen grösseres dann 0 sein"
 
-#: Opcodes/grain4.c:138
+#: Opcodes/grain4.c:140
 #, c-format
 msgid "granule_set: igap_os must be 0%% to 100%%"
 msgstr ""
 
-#: Opcodes/grain4.c:142
+#: Opcodes/grain4.c:144
 msgid "granule_set: kgsize must be greater then 0"
 msgstr "granule_set: kgsize müssen grösseres dann 0 sein"
 
-#: Opcodes/grain4.c:146
+#: Opcodes/grain4.c:148
 #, c-format
 msgid "granule_set: igsize_os must be 0%% to 100%%"
 msgstr ""
 
-#: Opcodes/grain4.c:152
+#: Opcodes/grain4.c:154
 msgid "granule_set: Illegal value of iatt and/or idec"
 msgstr ""
 
-#: Opcodes/grain4.c:236
+#: Opcodes/grain4.c:238
 msgid "granule_set: Illegal combination of igskip and ilength"
 msgstr ""
 
-#: Opcodes/grain4.c:243
+#: Opcodes/grain4.c:245
 #, c-format
 msgid ""
 "granule_set: WARNING * ilength may be too short * \n"
@@ -6646,7 +6534,7 @@ msgid ""
 "ilength is %f Sec, kgsize is %f Sec\n"
 msgstr ""
 
-#: Opcodes/grain4.c:418
+#: Opcodes/grain4.c:419
 msgid "grain4: not initialised"
 msgstr "grain4: nicht initialisiert"
 
@@ -6658,92 +6546,88 @@ msgstr ""
 msgid "grain: not initialised"
 msgstr "grain: nicht initialisiert"
 
-#: Opcodes/harmon.c:224
+#: Opcodes/harmon.c:226
 msgid "harm signal has positive lead\n"
 msgstr ""
 
-#: Opcodes/harmon.c:231
+#: Opcodes/harmon.c:233
 msgid "harm signal has negative lead\n"
 msgstr ""
 
-#: Opcodes/harmon.c:361
+#: Opcodes/harmon.c:363
 msgid "harmon234: out of range\n"
 msgstr ""
 
-#: Opcodes/hrtferX.c:79
+#: Opcodes/hrtferX.c:81
 #, c-format
 msgid ""
 "Orchestra sampling rate is not compatible with HRTF.\n"
 "Should be %d...exiting."
 msgstr ""
 
-#: Opcodes/hrtferX.c:87
+#: Opcodes/hrtferX.c:89
 msgid ""
 "\n"
 "Last argument must be the string 'HRTFcompact' ...correcting.\n"
 msgstr ""
 
-#: Opcodes/hrtferX.c:489
+#: Opcodes/hrtferX.c:494
 msgid "hrtfer: not initialised"
 msgstr "hrtfer: nicht initialisiert"
 
-#: Opcodes/hrtfopcodes.c:232
+#: Opcodes/hrtfopcodes.c:260 Opcodes/hrtfopcodes.c:1434
+#: Opcodes/hrtfearly.c:300 Opcodes/hrtfreverb.c:257
 #, c-format
 msgid ""
 "\n"
-"Orchestra sampling rate is not compatible with HRTF data files\n"
-"Should be %.0f, see Csound help for object\n"
+"\n"
+"WARNING!!:\n"
+"Orchestra SR not compatible with HRTF processing SR of: %.0f\n"
 "\n"
 msgstr ""
 
-#: Opcodes/hrtfopcodes.c:251 Opcodes/hrtfopcodes.c:275
-#: Opcodes/hrtfopcodes.c:298 Opcodes/hrtfopcodes.c:1257
-#: Opcodes/hrtfopcodes.c:1280 Opcodes/hrtfopcodes.c:1303
-#: Opcodes/hrtfopcodes.c:1854 Opcodes/hrtfopcodes.c:1876
-#: Opcodes/hrtfopcodes.c:1898
+#: Opcodes/hrtfopcodes.c:287 Opcodes/hrtfopcodes.c:1461
+#: Opcodes/hrtfopcodes.c:2071 Opcodes/hrtfearly.c:327 Opcodes/hrtfreverb.c:300
 msgid ""
 "\n"
 "\n"
 "\n"
-"cannot load left data file, exiting\n"
+"Cannot load left data file, exiting\n"
 "\n"
 msgstr ""
 
-#: Opcodes/hrtfopcodes.c:259 Opcodes/hrtfopcodes.c:283
-#: Opcodes/hrtfopcodes.c:306 Opcodes/hrtfopcodes.c:1265
-#: Opcodes/hrtfopcodes.c:1288 Opcodes/hrtfopcodes.c:1311
-#: Opcodes/hrtfopcodes.c:1862 Opcodes/hrtfopcodes.c:1884
-#: Opcodes/hrtfopcodes.c:1906
+#: Opcodes/hrtfopcodes.c:294 Opcodes/hrtfopcodes.c:1468
+#: Opcodes/hrtfopcodes.c:2078 Opcodes/hrtfearly.c:334 Opcodes/hrtfreverb.c:306
 msgid ""
 "\n"
 "\n"
 "\n"
-"cannot load right data file, exiting\n"
+"Cannot load right data file, exiting\n"
 "\n"
 msgstr ""
 
-#: Opcodes/hrtfopcodes.c:313 Opcodes/hrtfopcodes.c:1912
+#: Opcodes/hrtfopcodes.c:690 Opcodes/hrtfearly.c:1241
 msgid ""
 "\n"
-"\n"
-"\n"
-" Sampling rate not supported, exiting\n"
+"WARNING: fades are overlapping: this could lead to noise: reduce fade size "
+"or change trajectory\n"
 "\n"
 msgstr ""
 
-#: Opcodes/hrtfopcodes.c:600
+#: Opcodes/hrtfopcodes.c:2052
+#, c-format
 msgid ""
-"fades are overlapping: this could lead to noise: reduce fade size or change "
-"trajectory\n"
+"\n"
+"\n"
+"WARNING!!:\n"
+"Orchestra SR not compatiblewith HRTF processing SR of: %.0f\n"
 "\n"
 msgstr ""
 
-#: Opcodes/hrtfopcodes.c:1239 Opcodes/hrtfopcodes.c:1837
-#, c-format
+#: Opcodes/hrtfreverb.c:832
 msgid ""
-"Orchestra sampling rate is not compatible with HRTF data files\n"
-"Should be %.0f, see Csound help for object\n"
 "\n"
+"warning, approaching instability, fixed with a flat late reverb!"
 msgstr ""
 
 #: Opcodes/ifd.c:74
@@ -6769,10 +6653,9 @@ msgid "imageload: file %s is not in PNG format.\n"
 msgstr ""
 
 #: Opcodes/imageOpcodes.c:119 Opcodes/imageOpcodes.c:126
-#: Opcodes/imageOpcodes.c:134 Opcodes/imageOpcodes.c:165
-#: Opcodes/imageOpcodes.c:174 Opcodes/imageOpcodes.c:188
-#: Opcodes/imageOpcodes.c:291 Opcodes/imageOpcodes.c:298
-#: Opcodes/imageOpcodes.c:311
+#: Opcodes/imageOpcodes.c:165 Opcodes/imageOpcodes.c:174
+#: Opcodes/imageOpcodes.c:188 Opcodes/imageOpcodes.c:291
+#: Opcodes/imageOpcodes.c:298 Opcodes/imageOpcodes.c:311
 msgid "imageload: out of memory.\n"
 msgstr ""
 
@@ -6792,62 +6675,62 @@ msgid ""
 "Status: %d\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:543
+#: Opcodes/jacko.cpp:545
 #, c-format
 msgid "Created Jack client \"%s\" for Jack server \"%s\".\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:548
+#: Opcodes/jacko.cpp:551
 #, c-format
 msgid "Jack buffer size %d != Csound ksmps %d, exiting...\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:556
+#: Opcodes/jacko.cpp:559
 #, c-format
 msgid "Jack sampling rate %d != Csound sr %d, exiting...\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:567
+#: Opcodes/jacko.cpp:570
 #, c-format
 msgid "Activated Jack client \"%s\".\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:571
+#: Opcodes/jacko.cpp:574
 #, c-format
 msgid "Failed to activate Jack client \"%s\": status %d.\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:586
+#: Opcodes/jacko.cpp:589
 msgid "BEGAN JackoState::close()...\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:622
+#: Opcodes/jacko.cpp:629
 msgid "ENDED JackoState::close().\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:876
+#: Opcodes/jacko.cpp:892
 #, c-format
 msgid "Failed to set Jack freewheeling mode to \"%s\": error %d.\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:878
+#: Opcodes/jacko.cpp:895
 #, c-format
 msgid "Set Jack freewheeling mode to \"%s\".\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:893
+#: Opcodes/jacko.cpp:911
 #, c-format
 msgid "Turned Jack connections \"%s\".\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:934 Opcodes/jacko.cpp:1034 Opcodes/jacko.cpp:1134
-#: Opcodes/jacko.cpp:1200
+#: Opcodes/jacko.cpp:955 Opcodes/jacko.cpp:1062 Opcodes/jacko.cpp:1169
+#: Opcodes/jacko.cpp:1241
 #, c-format
 msgid "Could not create Jack port \"%s\".\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:946 Opcodes/jacko.cpp:1046 Opcodes/jacko.cpp:1146
-#: Opcodes/jacko.cpp:1212
+#: Opcodes/jacko.cpp:969 Opcodes/jacko.cpp:1077 Opcodes/jacko.cpp:1184
+#: Opcodes/jacko.cpp:1255
 #, c-format
 msgid "Could not create Jack connection from \"%s\" to \"%s\": status %d.\n"
 msgstr ""
@@ -6886,27 +6769,27 @@ msgstr ""
 msgid "lorisread cannot load %s"
 msgstr ""
 
-#: Opcodes/loscilx.c:74 Opcodes/loscilx.c:178
+#: Opcodes/loscilx.c:76 Opcodes/loscilx.c:180
 #, c-format
 msgid "could not load '%s'"
 msgstr ""
 
-#: Opcodes/loscilx.c:88 Opcodes/loscilx.c:258
+#: Opcodes/loscilx.c:90 Opcodes/loscilx.c:260
 #, c-format
 msgid "invalid loop mode: %d"
 msgstr ""
 
-#: Opcodes/loscilx.c:170
+#: Opcodes/loscilx.c:172
 msgid "loscilx: invalid number of output arguments"
 msgstr ""
 
-#: Opcodes/loscilx.c:190 Opcodes/loscilx.c:219 Opcodes/pvlock.c:94
-#: Opcodes/pvlock.c:296 Opcodes/pvsbasic.c:460
+#: Opcodes/loscilx.c:192 Opcodes/loscilx.c:221 Opcodes/pvlock.c:118
+#: Opcodes/pvlock.c:320 Opcodes/pvsbasic.c:460
 msgid ""
 "number of output arguments inconsistent with number of sound file channels"
 msgstr ""
 
-#: Opcodes/loscilx.c:665
+#: Opcodes/loscilx.c:667
 msgid "loscilx: not initialised"
 msgstr "loscilx: nicht initialisiert"
 
@@ -6914,11 +6797,11 @@ msgstr "loscilx: nicht initialisiert"
 msgid "illegal order num. (min 1, max 10)"
 msgstr ""
 
-#: Opcodes/mandolin.c:80
+#: Opcodes/mandolin.c:81
 msgid "No table for Mandolin"
 msgstr "Keine Tabelle für Mandolin"
 
-#: Opcodes/mandolin.c:90
+#: Opcodes/mandolin.c:91
 msgid "No base frequency for mandolin"
 msgstr ""
 
@@ -6949,27 +6832,27 @@ msgstr ""
 msgid "illegal lsb control number at position n.%d"
 msgstr ""
 
-#: Opcodes/modal4.c:45
+#: Opcodes/modal4.c:46
 msgid "No table for Modal4 case"
 msgstr ""
 
-#: Opcodes/modal4.c:245
+#: Opcodes/modal4.c:246
 msgid "No table for Marimba strike"
 msgstr ""
 
-#: Opcodes/modal4.c:284
+#: Opcodes/modal4.c:285
 msgid "striking three times here!!!\n"
 msgstr ""
 
-#: Opcodes/modal4.c:289
+#: Opcodes/modal4.c:290
 msgid "striking twice here!!\n"
 msgstr ""
 
-#: Opcodes/modal4.c:359
+#: Opcodes/modal4.c:360
 msgid "No table for Vibraphone strike"
 msgstr ""
 
-#: Opcodes/modal4.c:440
+#: Opcodes/modal4.c:441
 msgid "No table for Agogobell strike"
 msgstr ""
 
@@ -6977,12 +6860,12 @@ msgstr ""
 msgid "modmatrix: "
 msgstr ""
 
-#: Opcodes/mp3in.c:92 Opcodes/mp3in.c:230
+#: Opcodes/mp3in.c:93 Opcodes/mp3in.c:231
 #, c-format
 msgid "mp3in: %s: failed to open file"
 msgstr ""
 
-#: Opcodes/mp3in.c:139
+#: Opcodes/mp3in.c:140
 #, c-format
 msgid "mp3in: file sample rate (%d) != orchestra sr (%d)\n"
 msgstr ""
@@ -7271,7 +7154,7 @@ msgstr ""
 msgid "No open glove"
 msgstr ""
 
-#: Opcodes/pan2.c:43
+#: Opcodes/pan2.c:45
 msgid "Unknown panning type"
 msgstr ""
 
@@ -7287,197 +7170,201 @@ msgstr ""
 msgid "partikkelsync: could not find opcode id"
 msgstr ""
 
-#: Opcodes/physmod.c:121
+#: Opcodes/physmod.c:122
 msgid "No table for Clarinet"
 msgstr "Keine Tabelle für Clarinet"
 
-#: Opcodes/physmod.c:129
+#: Opcodes/physmod.c:130
 msgid "No base frequency for clarinet -- assuming 50Hz\n"
 msgstr ""
 
-#: Opcodes/physmod.c:283
+#: Opcodes/physmod.c:284
 msgid "No table for Flute"
 msgstr "Keine Tabelle für Flute"
 
-#: Opcodes/physmod.c:291
+#: Opcodes/physmod.c:292
 msgid "No base frequency for flute -- assumed to be 50Hz\n"
 msgstr ""
 
-#: Opcodes/physmod.c:481
+#: Opcodes/physmod.c:482
 msgid "No table for wgbow vibrato"
 msgstr ""
 
-#: Opcodes/physmod.c:689
+#: Opcodes/physmod.c:490
+msgid "unknown lowest frequency for bowed string -- assuming 50Hz\n"
+msgstr ""
+
+#: Opcodes/physmod.c:690
 msgid "DlineA not initialised"
 msgstr "DlineA nicht initialisiert"
 
-#: Opcodes/physmod.c:756
+#: Opcodes/physmod.c:757
 msgid "No table for Brass"
 msgstr "Keine Tabelle für Brass"
 
-#: Opcodes/physmod.c:765
+#: Opcodes/physmod.c:766
 msgid "No base frequency for brass -- assumed to be 50Hz\n"
 msgstr ""
 
-#: Opcodes/physutil.c:137 Opcodes/physutil.c:312 Opcodes/physutil.c:324
-#: Opcodes/physutil.c:345
+#: Opcodes/physutil.c:138 Opcodes/physutil.c:313 Opcodes/physutil.c:325
+#: Opcodes/physutil.c:346
 msgid "negative rates not allowed!!, correcting\n"
 msgstr ""
 
-#: Opcodes/physutil.c:186
+#: Opcodes/physutil.c:187
 #, c-format
 msgid "Envelope: value=%f target=%f rate=%f state=%d\n"
 msgstr ""
 
-#: Opcodes/physutil.c:335
+#: Opcodes/physutil.c:336
 msgid "Sustain level out of range!!, correcting\n"
 msgstr ""
 
-#: Opcodes/physutil.c:356 Opcodes/physutil.c:366 Opcodes/physutil.c:376
+#: Opcodes/physutil.c:357 Opcodes/physutil.c:367 Opcodes/physutil.c:377
 msgid "negative times not allowed!!, correcting\n"
 msgstr ""
 
-#: Opcodes/pitch0.c:37
+#: Opcodes/pitch0.c:38
 #, c-format
 msgid "Muting new instances of instr %d\n"
 msgstr ""
 
-#: Opcodes/pitch0.c:40
+#: Opcodes/pitch0.c:41
 #, c-format
 msgid "Allowing instrument %d to start\n"
 msgstr ""
 
-#: Opcodes/pitch.c:84 Opcodes/spectra.c:78
+#: Opcodes/pitch.c:85 Opcodes/spectra.c:80
 msgid "illegal iocts"
 msgstr ""
 
-#: Opcodes/pitch.c:86 Opcodes/spectra.c:80
+#: Opcodes/pitch.c:87 Opcodes/spectra.c:82
 msgid "illegal ifrqs"
 msgstr ""
 
-#: Opcodes/pitch.c:180 Opcodes/spectra.c:584
+#: Opcodes/pitch.c:181 Opcodes/spectra.c:586
 msgid "illegal no of partials"
 msgstr ""
 
-#: Opcodes/pitch.c:205
+#: Opcodes/pitch.c:206
 msgid "per octave rolloff too steep"
 msgstr ""
 
-#: Opcodes/pitch.c:219 Opcodes/spectra.c:625
+#: Opcodes/pitch.c:220 Opcodes/spectra.c:627
 msgid "illegal lo-hi values"
 msgstr ""
 
-#: Opcodes/pitch.c:454
+#: Opcodes/pitch.c:455
 msgid "pitch: not initialised"
 msgstr "pitch: nicht initialisiert"
 
-#: Opcodes/pitch.c:463
+#: Opcodes/pitch.c:464
 msgid "Must have even number of arguments in mac\n"
 msgstr ""
 
-#: Opcodes/pitch.c:552
+#: Opcodes/pitch.c:553
 msgid "clockread: clock still running, call clockoff first"
 msgstr ""
 
-#: Opcodes/pitch.c:578
+#: Opcodes/pitch.c:579
 msgid "adsynt: wavetable not found!"
 msgstr ""
 
-#: Opcodes/pitch.c:591
+#: Opcodes/pitch.c:592
 msgid "adsynt: freqtable not found!"
 msgstr ""
 
-#: Opcodes/pitch.c:596
+#: Opcodes/pitch.c:597
 msgid "adsynt: partial count is greater than freqtable size!"
 msgstr ""
 
-#: Opcodes/pitch.c:604
+#: Opcodes/pitch.c:605
 msgid "adsynt: amptable not found!"
 msgstr ""
 
-#: Opcodes/pitch.c:609
+#: Opcodes/pitch.c:610
 msgid "adsynt: partial count is greater than amptable size!"
 msgstr ""
 
-#: Opcodes/pitch.c:640
+#: Opcodes/pitch.c:641
 msgid "adsynt: not initialised"
 msgstr "adsynt: nicht initialisiert"
 
-#: Opcodes/pitch.c:716
+#: Opcodes/pitch.c:717
 msgid "hsboscil: not initialised"
 msgstr "hsboscil: nicht initialisiert"
 
-#: Opcodes/pitch.c:799
+#: Opcodes/pitch.c:800
 msgid "pitchamdf: maxcps must be > mincps !"
 msgstr ""
 
-#: Opcodes/pitch.c:945
+#: Opcodes/pitch.c:946
 msgid "pitchamdf: not initialised"
 msgstr "pitchamdf: nicht initialisiert"
 
-#: Opcodes/pitch.c:1125 Opcodes/pitch.c:1152
+#: Opcodes/pitch.c:1126 Opcodes/pitch.c:1153
 msgid "phasorbnk: not initialised"
 msgstr "phasorbnk: nicht initialisiert"
 
-#: Opcodes/pitch.c:1214
+#: Opcodes/pitch.c:1215
 msgid "pinkish: Invalid method code"
 msgstr ""
 
-#: Opcodes/pitch.c:1225
+#: Opcodes/pitch.c:1226
 msgid "pinkish: Filter method requires a-rate (noise) input"
 msgstr ""
 
-#: Opcodes/pitch.c:1348
+#: Opcodes/pitch.c:1349
 #, c-format
 msgid ""
 "pinkish: Gardner method requires 4-%d bands. Default %ld substituted for "
 "%d.\n"
 msgstr ""
 
-#: Opcodes/pitch.c:1731
+#: Opcodes/pitch.c:1733
 msgid "Incorrect argument count in transeg"
 msgstr ""
 
-#: Opcodes/pitch.c:1782
+#: Opcodes/pitch.c:1784
 msgid "Incorrect argument count in transegb"
 msgstr ""
 
-#: Opcodes/pitch.c:1832 Opcodes/pitch.c:1971
+#: Opcodes/pitch.c:1834 Opcodes/pitch.c:1977
 #, fuzzy
 msgid "Error: transeg not initialised (krate)\n"
 msgstr ""
 "\n"
 "Störung: transeg nicht initialisiert (krate)"
 
-#: Opcodes/pitch.c:1867 Opcodes/pitch.c:2013
+#: Opcodes/pitch.c:1869 Opcodes/pitch.c:2027
 msgid "transeg: not initialised (arate)\n"
 msgstr "transeg: nicht initialisiert (arate)\n"
 
-#: Opcodes/pitch.c:1921
+#: Opcodes/pitch.c:1924
 msgid "Incorrect argument count in transegr"
 msgstr ""
 
-#: Opcodes/pitch.c:2269
+#: Opcodes/pitch.c:2294
 #, fuzzy
 msgid "median: not initialised (arate)\n"
 msgstr "linseg: nicht initialisiert (arate)\n"
 
-#: Opcodes/pitch.c:2273 Opcodes/pitch.c:2321
+#: Opcodes/pitch.c:2298 Opcodes/pitch.c:2345
 #, c-format
 msgid "median: window (%d)larger than maximum(%d); truncated"
 msgstr ""
 
-#: Opcodes/pitch.c:2317
+#: Opcodes/pitch.c:2341
 #, fuzzy
 msgid "median: not initialised (krate)\n"
 msgstr "linseg nicht initialisiert (krate)\n"
 
-#: Opcodes/pitchtrack.c:369
+#: Opcodes/pitchtrack.c:370
 #, c-format
 msgid "ptrack: FFT size out of range; using %d\n"
 msgstr ""
 
-#: Opcodes/pitchtrack.c:382
+#: Opcodes/pitchtrack.c:383
 #, c-format
 msgid "ptrack: FFT size not a power of 2; using %d\n"
 msgstr ""
@@ -7495,7 +7382,7 @@ msgstr ""
 msgid "Error: %s, %s"
 msgstr "Störung: %s, %s"
 
-#: Opcodes/ppp.c:20 Opcodes/pvlock.c:454 Opcodes/pvsband.c:46
+#: Opcodes/ppp.c:20 Opcodes/pvlock.c:478 Opcodes/pvsband.c:46
 #: Opcodes/pvsbasic.c:575 Opcodes/pvsbasic.c:880 Opcodes/pvsbasic.c:1080
 #: Opcodes/pvsbasic.c:1180 Opcodes/pvsbasic.c:1395 Opcodes/pvsbasic.c:1593
 #: Opcodes/pvsbasic.c:1756 Opcodes/pvslock.c:20
@@ -7514,62 +7401,62 @@ msgstr ""
 msgid "psynth: function table not found\n"
 msgstr ""
 
-#: Opcodes/psynth.c:569 Opcodes/psynth.c:662
+#: Opcodes/psynth.c:567 Opcodes/psynth.c:660
 msgid "Input not in TRACKS format\n"
 msgstr ""
 
-#: Opcodes/psynth.c:767
+#: Opcodes/psynth.c:765
 msgid "trsplit: input not in TRACKS format\n"
 msgstr ""
 
-#: Opcodes/psynth.c:863 Opcodes/psynth.c:1027
+#: Opcodes/psynth.c:861 Opcodes/psynth.c:1023
 msgid "trmix: first input not in TRACKS format\n"
 msgstr ""
 
-#: Opcodes/psynth.c:868 Opcodes/psynth.c:1032
+#: Opcodes/psynth.c:866 Opcodes/psynth.c:1028
 msgid "trmix: second input not in TRACKS format\n"
 msgstr ""
 
-#: Opcodes/psynth.c:943
+#: Opcodes/psynth.c:939
 msgid "trfil: input not in TRACKS format\n"
 msgstr ""
 
-#: Opcodes/psynth.c:948
+#: Opcodes/psynth.c:944
 msgid "trfil: could not find function table\n"
 msgstr ""
 
-#: Opcodes/psynth.c:1135
+#: Opcodes/psynth.c:1131
 msgid "binit: first input not in TRACKS format\n"
 msgstr ""
 
-#: Opcodes/pvadd.c:153
+#: Opcodes/pvadd.c:150
 msgid "PVADD ktimpnt truncated to last frame"
 msgstr ""
 
-#: Opcodes/pvadd.c:191
+#: Opcodes/pvadd.c:188
 msgid "pvadd: not initialised"
 msgstr "pvadd: nicht initialisiert"
 
-#: Opcodes/pvadd.c:193
+#: Opcodes/pvadd.c:190
 msgid "PVADD timpnt < 0"
 msgstr ""
 
-#: Opcodes/pvadd.c:201
+#: Opcodes/pvadd.c:198
 #, c-format
 msgid "PVADD cannot load %s"
 msgstr ""
 
-#: Opcodes/pvadd.c:205 Opcodes/ugens8.c:223
+#: Opcodes/pvadd.c:202 Opcodes/ugens8.c:223
 #, c-format
 msgid "pvoc-ex file %s: FFT size %d too large for Csound"
 msgstr ""
 
-#: Opcodes/pvadd.c:210
+#: Opcodes/pvadd.c:207
 #, c-format
 msgid "PV frame %ld seems too small in %s"
 msgstr ""
 
-#: Opcodes/pvadd.c:215 Opcodes/pvread.c:115 Opcodes/ugens8.c:229
+#: Opcodes/pvadd.c:212 Opcodes/pvread.c:115 Opcodes/ugens8.c:229
 #, c-format
 msgid "pvoc-ex file %s is not mono"
 msgstr ""
@@ -7579,98 +7466,98 @@ msgstr ""
 msgid "PVBUFREAD cannot load %s"
 msgstr ""
 
-#: Opcodes/pvinterp.c:76 Opcodes/vpvoc.c:206
+#: Opcodes/pvinterp.c:76 Opcodes/vpvoc.c:207
 #, c-format
 msgid "PVOC frame %ld bigger than %ld in %s"
 msgstr ""
 
-#: Opcodes/pvinterp.c:81 Opcodes/vpvoc.c:211
+#: Opcodes/pvinterp.c:81 Opcodes/vpvoc.c:212
 #, c-format
 msgid "PVOC frame %ld seems too small in %s"
 msgstr ""
 
-#: Opcodes/pvinterp.c:85 Opcodes/pvinterp.c:184 Opcodes/pvinterp.c:356
-#: Opcodes/vpvoc.c:215
+#: Opcodes/pvinterp.c:85 Opcodes/pvinterp.c:183 Opcodes/pvinterp.c:354
+#: Opcodes/vpvoc.c:216
 #, c-format
 msgid "%d chans (not 1) in PVOC file %s"
 msgstr ""
 
-#: Opcodes/pvinterp.c:101 Opcodes/pvinterp.c:212 Opcodes/pvinterp.c:382
+#: Opcodes/pvinterp.c:100 Opcodes/pvinterp.c:210 Opcodes/pvinterp.c:379
 #: Opcodes/ugens8.c:95 Opcodes/vpvoc.c:244
 #, c-format
 msgid "ksmps of %d needs wdw of %d, max is %d for pv %s"
 msgstr ""
 
-#: Opcodes/pvinterp.c:122 Opcodes/pvinterp.c:256 Opcodes/pvinterp.c:431
+#: Opcodes/pvinterp.c:121 Opcodes/pvinterp.c:254 Opcodes/pvinterp.c:428
 #: Opcodes/pvread.c:95 Opcodes/ugens8.c:156 Opcodes/vpvoc.c:297
 msgid "PVOC ktimpnt truncated to last frame"
 msgstr ""
 
-#: Opcodes/pvinterp.c:130
+#: Opcodes/pvinterp.c:129
 msgid "pvbufread: not initialised"
 msgstr "pvbufread: nicht initialisiert"
 
-#: Opcodes/pvinterp.c:132 Opcodes/pvinterp.c:306 Opcodes/pvinterp.c:492
+#: Opcodes/pvinterp.c:131 Opcodes/pvinterp.c:304 Opcodes/pvinterp.c:489
 #: Opcodes/pvread.c:103 Opcodes/ugens8.c:206 Opcodes/vpvoc.c:361
 msgid "PVOC timpnt < 0"
 msgstr ""
 
-#: Opcodes/pvinterp.c:149
+#: Opcodes/pvinterp.c:148
 msgid "pvinterp: associated pvbufread not found"
 msgstr ""
 
-#: Opcodes/pvinterp.c:166
+#: Opcodes/pvinterp.c:165
 #, c-format
 msgid "PVINTERP cannot load %s"
 msgstr ""
 
-#: Opcodes/pvinterp.c:179
+#: Opcodes/pvinterp.c:178
 #, c-format
 msgid "pvinterp: %s: frame size %d does not match pvbufread frame size %d\n"
 msgstr ""
 
-#: Opcodes/pvinterp.c:300
+#: Opcodes/pvinterp.c:298
 msgid "pvinterp: not initialised"
 msgstr "pvinterp: nicht initialisiert"
 
-#: Opcodes/pvinterp.c:302 Opcodes/pvinterp.c:488 Opcodes/ugens8.c:202
+#: Opcodes/pvinterp.c:300 Opcodes/pvinterp.c:485 Opcodes/ugens8.c:202
 #: Opcodes/vpvoc.c:357
 msgid "PVOC transpose too low"
 msgstr ""
 
-#: Opcodes/pvinterp.c:304 Opcodes/pvinterp.c:490 Opcodes/ugens8.c:204
+#: Opcodes/pvinterp.c:302 Opcodes/pvinterp.c:487 Opcodes/ugens8.c:204
 #: Opcodes/vpvoc.c:359
 msgid "PVOC transpose too high"
 msgstr ""
 
-#: Opcodes/pvinterp.c:323
+#: Opcodes/pvinterp.c:321
 msgid "pvcross: associated pvbufread not found"
 msgstr ""
 
-#: Opcodes/pvinterp.c:339
+#: Opcodes/pvinterp.c:337
 #, c-format
 msgid "PVCROSS cannot load %s"
 msgstr ""
 
-#: Opcodes/pvinterp.c:351
+#: Opcodes/pvinterp.c:349
 #, c-format
 msgid "pvcross: %s: frame size %d does not match pvbufread frame size %d\n"
 msgstr ""
 
-#: Opcodes/pvinterp.c:454 Opcodes/vpvoc.c:322
+#: Opcodes/pvinterp.c:451 Opcodes/vpvoc.c:322
 msgid "PVOC debug: one frame gets through\n"
 msgstr ""
 
-#: Opcodes/pvinterp.c:486
+#: Opcodes/pvinterp.c:483
 msgid "pvcross: not initialised"
 msgstr "pvcross: nicht initialisiert"
 
-#: Opcodes/pvlock.c:35 Opcodes/pvsbasic.c:380
+#: Opcodes/pvlock.c:59 Opcodes/pvsbasic.c:380
 #, fuzzy
 msgid "invalid number of output arguments"
 msgstr "unzulässiger Name für Instrument"
 
-#: Opcodes/pvlock.c:466
+#: Opcodes/pvlock.c:490
 msgid "pvsfreeze: signal format must be amp-freq."
 msgstr ""
 
@@ -7778,29 +7665,34 @@ msgstr "pvstencil: nicht initialisiert"
 msgid "pvs2tab: signal format must be amp-phase or amp-freq."
 msgstr ""
 
-#: Opcodes/pvsbasic.c:2151 Opcodes/pvsbasic.c:2190 Opcodes/tabvars.c:53
-#: Opcodes/tabvars.c:89 Opcodes/tabvars.c:131 Opcodes/tabvars.c:176
-#: Opcodes/tabvars.c:178
+#: Opcodes/pvsbasic.c:2151 Opcodes/pvsbasic.c:2189 Opcodes/tabvars.c:56
+#: Opcodes/tabvars.c:92 Opcodes/tabvars.c:134 Opcodes/tabvars.c:179
+#: Opcodes/tabvars.c:181
 #, fuzzy
 msgid "t-variable not initialised"
 msgstr "table: nicht initialisiert"
 
-#: Opcodes/pvsbuffer.c:53 Opcodes/pvscent.c:164 Opcodes/pvsdemix.c:49
+#: Opcodes/pvsbuffer.c:56 Opcodes/pvscent.c:164 Opcodes/pvsdemix.c:49
 msgid "SDFT case not implemented yet"
 msgstr ""
 
-#: Opcodes/pvsbuffer.c:85
+#: Opcodes/pvsbuffer.c:89
 msgid "error... could not create global var for handle\n"
 msgstr ""
 
-#: Opcodes/pvsbuffer.c:143 Opcodes/pvsbuffer.c:190 Opcodes/pvsbuffer.c:258
+#: Opcodes/pvsbuffer.c:148 Opcodes/pvsbuffer.c:197 Opcodes/pvsbuffer.c:266
 msgid "error... could not read handle from global variable\n"
 msgstr ""
 
-#: Opcodes/pvsbuffer.c:238 Opcodes/pvsbuffer.c:306
+#: Opcodes/pvsbuffer.c:246 Opcodes/pvsbuffer.c:316
 msgid "Invalid buffer handle"
 msgstr ""
 
+#: Opcodes/pvsbuffer.c:285 Opcodes/pvsbuffer.c:291
+#, c-format
+msgid "table length too small: needed %d, got %d\n"
+msgstr ""
+
 #: Opcodes/pvscent.c:42
 msgid "pvscent: format must be amp-phase or amp-freq.\n"
 msgstr ""
@@ -7991,49 +7883,49 @@ msgstr ""
 msgid "seqtim: incorrect table number"
 msgstr ""
 
-#: Opcodes/sfont.c:118
+#: Opcodes/sfont.c:121
 #, c-format
 msgid "sfload: cannot open SoundFont file \"%s\" (error %s)"
 msgstr ""
 
-#: Opcodes/sfont.c:123
+#: Opcodes/sfont.c:126
 msgid "Sfload: cannot use globals"
 msgstr ""
 
-#: Opcodes/sfont.c:153
+#: Opcodes/sfont.c:156
 msgid "sfload: could not open globals\n"
 msgstr ""
 
-#: Opcodes/sfont.c:170
+#: Opcodes/sfont.c:173
 #, fuzzy
 msgid "Extending soundfonts"
 msgstr "zu viele Argumente"
 
-#: Opcodes/sfont.c:201
+#: Opcodes/sfont.c:204
 #, c-format
 msgid ""
 "\n"
 "Preset list of \"%s\"\n"
 msgstr ""
 
-#: Opcodes/sfont.c:204
+#: Opcodes/sfont.c:207
 #, c-format
 msgid "%3d) %-20s\tprog:%-3d bank:%d\n"
 msgstr ""
 
-#: Opcodes/sfont.c:226
+#: Opcodes/sfont.c:229
 #, c-format
 msgid ""
 "\n"
 "Assigning all Presets of \"%s\" starting from %d (preset handle number)\n"
 msgstr ""
 
-#: Opcodes/sfont.c:231
+#: Opcodes/sfont.c:234
 #, c-format
 msgid "%3d<--%-20s\t(prog:%-3d bank:%d)\n"
 msgstr ""
 
-#: Opcodes/sfont.c:238
+#: Opcodes/sfont.c:241
 #, c-format
 msgid ""
 "\n"
@@ -8041,38 +7933,38 @@ msgid ""
 "\n"
 msgstr ""
 
-#: Opcodes/sfont.c:251
+#: Opcodes/sfont.c:254
 #, c-format
 msgid ""
 "\n"
 "Instrument list of \"%s\"\n"
 msgstr ""
 
-#: Opcodes/sfont.c:268
+#: Opcodes/sfont.c:271
 #, c-format
 msgid "sfpreset: preset handle too big (%d), max: %d"
 msgstr ""
 
-#: Opcodes/sfont.c:284
+#: Opcodes/sfont.c:287
 #, c-format
 msgid ""
 "sfpreset: cannot find any preset having prog number %d and bank number %d in "
 "SoundFont file \"%s\""
 msgstr ""
 
-#: Opcodes/sfont.c:306 Opcodes/sfont.c:2189
+#: Opcodes/sfont.c:309 Opcodes/sfont.c:2192
 msgid "sfplay: invalid or out-of-range preset number"
 msgstr ""
 
-#: Opcodes/sfont.c:633
+#: Opcodes/sfont.c:636
 msgid "sfplaym: invalid or out-of-range preset number"
 msgstr ""
 
-#: Opcodes/sfont.c:888 Opcodes/sfont.c:1150
+#: Opcodes/sfont.c:891 Opcodes/sfont.c:1153
 msgid "sfinstr: instrument out of range"
 msgstr ""
 
-#: Opcodes/sfont.c:1598 Opcodes/sfont.c:1835
+#: Opcodes/sfont.c:1601 Opcodes/sfont.c:1838
 #, c-format
 msgid ""
 "SoundFont file \"%s\" contains ROM samples !\n"
@@ -8080,19 +7972,19 @@ msgid ""
 "Session aborted !"
 msgstr ""
 
-#: Opcodes/sfont.c:1987 Opcodes/sfont.c:1993
+#: Opcodes/sfont.c:1990 Opcodes/sfont.c:1996
 msgid "Sfont: cannot use globals/"
 msgstr ""
 
-#: Opcodes/sfont.c:1996
+#: Opcodes/sfont.c:1999
 msgid "Sfont format not compatible"
 msgstr ""
 
-#: Opcodes/sfont.c:2534
+#: Opcodes/sfont.c:2537
 msgid "error... could not create sfont globals\n"
 msgstr ""
 
-#: Opcodes/shape.c:49
+#: Opcodes/shape.c:51
 msgid "powershape: ifullscale must be strictly positive"
 msgstr ""
 
@@ -8105,25 +7997,25 @@ msgstr ""
 msgid "ftgenonce error"
 msgstr "Schreibfehler"
 
-#: Opcodes/singwave.c:85
+#: Opcodes/singwave.c:86
 msgid "No table for Modulatr"
 msgstr "Keine Tabelle für Modulatr"
 
-#: Opcodes/singwave.c:127
+#: Opcodes/singwave.c:128
 msgid "No table for Singwave"
 msgstr "Keine Tabelle für Singwave"
 
-#: Opcodes/singwave.c:207
+#: Opcodes/singwave.c:208
 #, c-format
 msgid "SingWave: rate=%f sweepRate=%f mytime=%f\n"
 msgstr ""
 
-#: Opcodes/singwave.c:273
+#: Opcodes/singwave.c:280
 #, c-format
 msgid "Found Formant: %s (number %i)\n"
 msgstr ""
 
-#: Opcodes/singwave.c:395
+#: Opcodes/singwave.c:397
 #, c-format
 msgid "Setting Phoneme: %d %f\n"
 msgstr ""
@@ -8156,15 +8048,15 @@ msgstr ""
 msgid "pvsarp: not initialised\n"
 msgstr "pvsarp: nicht initialisiert\n"
 
-#: Opcodes/sndloop.c:995 Opcodes/sndloop.c:1092
+#: Opcodes/sndloop.c:995 Opcodes/sndloop.c:1091
 msgid "signal format must be amp-phase or amp-freq.\n"
 msgstr ""
 
-#: Opcodes/sndloop.c:1072
+#: Opcodes/sndloop.c:1071
 msgid "pvsvoc: not initialised\n"
 msgstr "pvsvoc: nicht initialisiert\n"
 
-#: Opcodes/sndloop.c:1123
+#: Opcodes/sndloop.c:1122
 msgid "pvsmorph: not initialised\n"
 msgstr "pvsmorph: nicht initialisiert\n"
 
@@ -8184,26 +8076,28 @@ msgstr ""
 msgid "sndwarpst: not initialised"
 msgstr "sndwarpst: nicht initialisiert"
 
-#: Opcodes/sockrecv.c:123 Opcodes/sockrecv.c:213 Opcodes/sockrecv.c:300
-#: Opcodes/socksend.c:75 Opcodes/socksend.c:133 Opcodes/socksend.c:190
+#: Opcodes/sockrecv.c:117 Opcodes/sockrecv.c:215 Opcodes/sockrecv.c:314
+#: Opcodes/socksend.c:73 Opcodes/socksend.c:157 Opcodes/socksend.c:252
+#, c-format
+msgid "Winsock2 failed to start: %d"
+msgstr ""
+
+#: Opcodes/sockrecv.c:131 Opcodes/sockrecv.c:227 Opcodes/sockrecv.c:320
+#: Opcodes/socksend.c:86 Opcodes/socksend.c:171 Opcodes/socksend.c:259
 #, fuzzy
 msgid "creating socket"
 msgstr "Herstellen des Orchesters\n"
 
-#: Opcodes/sockrecv.c:322
-msgid "connect failed"
+#: Opcodes/sockrecv.c:347
+#, c-format
+msgid "connect failed (%d)"
 msgstr ""
 
-#: Opcodes/sockrecv.c:335
+#: Opcodes/sockrecv.c:360
 msgid "read from socket failed"
 msgstr ""
 
-#: Opcodes/socksend.c:67 Opcodes/socksend.c:125
-#, c-format
-msgid "The buffersize must be <= %d samples to fit in a udp-packet."
-msgstr ""
-
-#: Opcodes/socksend.c:107 Opcodes/socksend.c:169
+#: Opcodes/socksend.c:126 Opcodes/socksend.c:215
 msgid "sendto failed"
 msgstr ""
 
@@ -8223,199 +8117,199 @@ msgstr "spat3d: nicht initialisiert"
 msgid "spat3di: not initialised"
 msgstr "spat3di: nicht initialisiert"
 
-#: Opcodes/spectra.c:82
+#: Opcodes/spectra.c:84
 msgid "illegal Q value"
 msgstr ""
 
-#: Opcodes/spectra.c:84
+#: Opcodes/spectra.c:86
 msgid "unknown dbout code"
 msgstr ""
 
-#: Opcodes/spectra.c:104
+#: Opcodes/spectra.c:106
 #, c-format
 msgid "spectrum: %s window, %s out, making tables ...\n"
 msgstr ""
 
-#: Opcodes/spectra.c:123
+#: Opcodes/spectra.c:125
 #, c-format
 msgid ""
 "\thigh cps %7.1f\n"
 "\t low cps %7.1f\n"
 msgstr ""
 
-#: Opcodes/spectra.c:138
+#: Opcodes/spectra.c:140
 #, c-format
 msgid "\tQ %4.1f uses a %d sample window each octdown\n"
 msgstr ""
 
-#: Opcodes/spectra.c:169
+#: Opcodes/spectra.c:171
 msgid "spectrum windowed sines:"
 msgstr ""
 
-#: Opcodes/spectra.c:187
+#: Opcodes/spectra.c:189
 #, c-format
 msgid "\t%d oct analysis window delay = %ld samples (%d msecs)\n"
 msgstr ""
 
-#: Opcodes/spectra.c:195
+#: Opcodes/spectra.c:197
 msgid "octdown buffers:"
 msgstr ""
 
-#: Opcodes/spectra.c:513 Opcodes/spectra.c:553
+#: Opcodes/spectra.c:515 Opcodes/spectra.c:555
 msgid "specdisp: not initialised"
 msgstr "specdisp: nicht initialisiert"
 
-#: Opcodes/spectra.c:523
+#: Opcodes/spectra.c:525
 #, c-format
 msgid "instr %d %s, dft (%s), %ld octaves (%d - %d Hz):"
 msgstr ""
 
-#: Opcodes/spectra.c:530
+#: Opcodes/spectra.c:532
 #, c-format
 msgid "instr %d %s, dft (%s), %ld octaves (%3.1f - %3.1f Hz):"
 msgstr ""
 
-#: Opcodes/spectra.c:611
+#: Opcodes/spectra.c:613
 msgid "per oct rolloff too steep"
 msgstr ""
 
-#: Opcodes/spectra.c:632
+#: Opcodes/spectra.c:634
 #, c-format
 msgid "specptrk: %d freqs, %d%s ptls at "
 msgstr ""
 
-#: Opcodes/spectra.c:633
+#: Opcodes/spectra.c:635
 msgid " odd"
 msgstr ""
 
-#: Opcodes/spectra.c:637
+#: Opcodes/spectra.c:639
 msgid ""
 "\n"
 "\t\trolloff vals:"
 msgstr ""
 
-#: Opcodes/spectra.c:660
+#: Opcodes/spectra.c:662
 #, c-format
 msgid ""
 "\n"
 "\tdbthresh %4.1f: X-corr %s threshon %4.1f, threshoff %4.1f\n"
 msgstr ""
 
-#: Opcodes/spectra.c:817
+#: Opcodes/spectra.c:819
 msgid "specptrk: not initialised"
 msgstr "specptrk: nicht initialisiert"
 
-#: Opcodes/spectra.c:849
+#: Opcodes/spectra.c:851
 msgid "specsum: not initialised"
 msgstr "specsum: nicht initialisiert"
 
-#: Opcodes/spectra.c:860
+#: Opcodes/spectra.c:862
 msgid "inputs have different sizes"
 msgstr ""
 
-#: Opcodes/spectra.c:863
+#: Opcodes/spectra.c:865
 msgid "inputs have diff. time periods"
 msgstr ""
 
-#: Opcodes/spectra.c:867
+#: Opcodes/spectra.c:869
 msgid "inputs have different freq resolution"
 msgstr ""
 
-#: Opcodes/spectra.c:870
+#: Opcodes/spectra.c:872
 msgid "inputs have different amptypes"
 msgstr ""
 
-#: Opcodes/spectra.c:902
+#: Opcodes/spectra.c:904
 msgid "specaddm: not initialised"
 msgstr "specaddm: nicht initialisiert"
 
-#: Opcodes/spectra.c:926
+#: Opcodes/spectra.c:928
 msgid "specdiff: local buffers not initialised"
 msgstr "specdiff: local buffers nicht initialisiert"
 
-#: Opcodes/spectra.c:964
+#: Opcodes/spectra.c:966
 msgid "specdiff: not initialised"
 msgstr "specdiff: nicht initialisiert"
 
-#: Opcodes/spectra.c:986
+#: Opcodes/spectra.c:988
 msgid "specscal: local buffer not initialised"
 msgstr "specscal: local buffer nicht initialisiert"
 
-#: Opcodes/spectra.c:991
+#: Opcodes/spectra.c:993
 msgid "missing fscale table"
 msgstr ""
 
-#: Opcodes/spectra.c:1057
+#: Opcodes/spectra.c:1059
 msgid "specscal: not initialised"
 msgstr "specscal: nicht initialisiert"
 
-#: Opcodes/spectra.c:1081
+#: Opcodes/spectra.c:1083
 msgid "spechist: local buffers not intiialised"
 msgstr ""
 
-#: Opcodes/spectra.c:1113
+#: Opcodes/spectra.c:1115
 msgid "spechist: not initialised"
 msgstr "spechist: nicht initialisiert"
 
-#: Opcodes/spectra.c:1134
+#: Opcodes/spectra.c:1136
 msgid "specfilt: local buffers not initialised"
 msgstr "specfilt: local buffers nicht initialisiert"
 
-#: Opcodes/spectra.c:1142
+#: Opcodes/spectra.c:1144
 msgid "missing htim ftable"
 msgstr ""
 
-#: Opcodes/spectra.c:1165
+#: Opcodes/spectra.c:1167
 msgid "htim ftable must be all-positive"
 msgstr ""
 
-#: Opcodes/spectra.c:1169
+#: Opcodes/spectra.c:1171
 #, c-format
 msgid "coef range: %6.3f - %6.3f\n"
 msgstr ""
 
-#: Opcodes/spectra.c:1201
+#: Opcodes/spectra.c:1203
 msgid "specfilt: not initialised"
 msgstr "specfilt: nicht initialisiert"
 
-#: Opcodes/stackops.c:80
+#: Opcodes/stackops.c:81
 msgid "fsig = : source signal is not initialised"
 msgstr "fsig = : source signal is nicht initialisiert"
 
-#: Opcodes/stackops.c:126
+#: Opcodes/stackops.c:125
 msgid "stack overflow"
 msgstr ""
 
-#: Opcodes/stackops.c:134
+#: Opcodes/stackops.c:131
 msgid "cannot pop from empty stack"
 msgstr ""
 
-#: Opcodes/stackops.c:142
+#: Opcodes/stackops.c:137
 msgid "argument number or type mismatch"
 msgstr ""
 
-#: Opcodes/stackops.c:150
+#: Opcodes/stackops.c:143
 msgid "string argument is too long"
 msgstr ""
 
-#: Opcodes/stackops.c:167
+#: Opcodes/stackops.c:160
 msgid "Error allocating argument stack"
 msgstr ""
 
-#: Opcodes/stackops.c:207 Top/argdecode.c:1212 util/envext.c:99
+#: Opcodes/stackops.c:200 Top/argdecode.c:1212 util/envext.c:99
 #: util/scale.c:248
 msgid "too many arguments"
 msgstr "zu viele Argumente"
 
-#: Opcodes/stackops.c:286
+#: Opcodes/stackops.c:279
 msgid "the stack is already allocated"
 msgstr ""
 
-#: Opcodes/stackops.c:637
+#: Opcodes/stackops.c:630
 msgid "number of arguments != nchnls"
 msgstr ""
 
-#: Opcodes/stdopcod.c:36
+#: Opcodes/stdopcod.c:37
 msgid "stdopcod.c: error: globals already allocated"
 msgstr ""
 
@@ -8430,36 +8324,46 @@ msgstr ""
 msgid "RAWWAVE_PATH: %s\n"
 msgstr ""
 
-#: Opcodes/syncgrain.c:175 Opcodes/syncgrain.c:338 Opcodes/syncgrain.c:683
+#: Opcodes/syncgrain.c:176 Opcodes/syncgrain.c:339 Opcodes/syncgrain.c:684
 msgid "grain size smaller than 1 sample\n"
 msgstr ""
 
-#: Opcodes/syncgrain.c:387
+#: Opcodes/syncgrain.c:388
 msgid "diskgrain: invalid number of channels"
 msgstr ""
 
-#: Opcodes/syncgrain.c:419
+#: Opcodes/syncgrain.c:420
 msgid "diskgrain: could not open file\n"
 msgstr ""
 
-#: Opcodes/syncgrain.c:423
+#: Opcodes/syncgrain.c:424
 msgid ""
 "diskgrain: soundfile channel numbers do not match the number of outputs \n"
 msgstr ""
 
-#: Opcodes/syncgrain.c:435
+#: Opcodes/syncgrain.c:436
 msgid "diskgrain: could not read file \n"
 msgstr ""
 
-#: Opcodes/tabsum.c:39
+#: Opcodes/tabsum.c:40
 msgid "tabsum: No table"
 msgstr ""
 
-#: Opcodes/tabsum.c:54
+#: Opcodes/tabsum.c:55
 #, fuzzy
 msgid "tabsum: Not initialised"
 msgstr "table: nicht initialisiert"
 
+#: Opcodes/tabvars.c:201 Opcodes/tabvars.c:218
+#, fuzzy
+msgid "t-var not initialised"
+msgstr "table: nicht initialisiert"
+
+#: Opcodes/tabvars.c:203 Opcodes/tabvars.c:220
+#, fuzzy
+msgid "No table for copy2ftab"
+msgstr "Keine Tabelle für dconv"
+
 #: Opcodes/ugens7.c:46 Opcodes/ugensa.c:49
 msgid "illegal value for iolaps"
 msgstr ""
@@ -8605,17 +8509,17 @@ msgstr ""
 msgid "table in iftfn for ftmorf does not exist"
 msgstr ""
 
-#: Opcodes/ugnorman.c:120
+#: Opcodes/ugnorman.c:121
 #, c-format
 msgid "%s: Ats file %s not read (does it exist?)"
 msgstr ""
 
-#: Opcodes/ugnorman.c:131
+#: Opcodes/ugnorman.c:132
 #, c-format
 msgid "%s: either %s is not an ATS file or the byte endianness is wrong"
 msgstr ""
 
-#: Opcodes/ugnorman.c:139
+#: Opcodes/ugnorman.c:140
 #, c-format
 msgid ""
 "%s: %s is byte-swapped\n"
@@ -8623,125 +8527,125 @@ msgid ""
 "\twill not result in different audio, but they may slow down processing."
 msgstr ""
 
-#: Opcodes/ugnorman.c:175
+#: Opcodes/ugnorman.c:176
 msgid ""
 "ATSINFO: location is out of bounds: 0-8 are the only possible selections"
 msgstr ""
 
-#: Opcodes/ugnorman.c:265
+#: Opcodes/ugnorman.c:266
 #, c-format
 msgid "ATSREAD: partial %i out of range, max allowed is %i"
 msgstr ""
 
-#: Opcodes/ugnorman.c:291
+#: Opcodes/ugnorman.c:292
 msgid "Type not implemented"
 msgstr ""
 
-#: Opcodes/ugnorman.c:310
+#: Opcodes/ugnorman.c:311
 msgid "ATSREAD: only positive time pointer values allowed, setting to zero\n"
 msgstr ""
 
-#: Opcodes/ugnorman.c:319
+#: Opcodes/ugnorman.c:320
 msgid "ATSREAD: timepointer out of range, truncated to last frame\n"
 msgstr ""
 
-#: Opcodes/ugnorman.c:332
+#: Opcodes/ugnorman.c:333
 msgid "ATSREAD: not initialised"
 msgstr "ATSREAD: nicht initialisiert"
 
-#: Opcodes/ugnorman.c:394
+#: Opcodes/ugnorman.c:395
 #, c-format
 msgid "ATSREADNZ: band %i out of range, 1-25 are the valid band values"
 msgstr ""
 
-#: Opcodes/ugnorman.c:412
+#: Opcodes/ugnorman.c:413
 msgid "ATSREADNZ: Type either not implemented or does not contain noise"
 msgstr ""
 
-#: Opcodes/ugnorman.c:431
+#: Opcodes/ugnorman.c:432
 msgid "ATSREADNZ: only positive time pointer values allowed, setting to zero\n"
 msgstr ""
 
-#: Opcodes/ugnorman.c:440
+#: Opcodes/ugnorman.c:441
 msgid "ATSREADNZ: timepointer out of range, truncated to last frame\n"
 msgstr ""
 
-#: Opcodes/ugnorman.c:449
+#: Opcodes/ugnorman.c:450
 msgid "ATSREADNZ: not initialised"
 msgstr "ATSREADNZ: nicht initialisiert"
 
-#: Opcodes/ugnorman.c:467
+#: Opcodes/ugnorman.c:468
 msgid "ATSADD: Function table number for synthesis waveform not valid"
 msgstr ""
 
-#: Opcodes/ugnorman.c:475
+#: Opcodes/ugnorman.c:476
 msgid "ATSADD: Gate Function table number not valid"
 msgstr ""
 
-#: Opcodes/ugnorman.c:521
+#: Opcodes/ugnorman.c:522
 #, c-format
 msgid "ATSADD: Partial(s) out of range, max partial allowed is %i"
 msgstr ""
 
-#: Opcodes/ugnorman.c:555
+#: Opcodes/ugnorman.c:556
 msgid "ATSADD: Type not implemented"
 msgstr ""
 
-#: Opcodes/ugnorman.c:585
+#: Opcodes/ugnorman.c:586
 msgid ""
 "ATSADD: only positive time pointer values are allowed, setting to zero\n"
 msgstr ""
 
-#: Opcodes/ugnorman.c:594
+#: Opcodes/ugnorman.c:595
 msgid "ATSADD: time pointer out of range, truncating to last frame\n"
 msgstr ""
 
-#: Opcodes/ugnorman.c:638
+#: Opcodes/ugnorman.c:639
 msgid "ATSADD: not initialised"
 msgstr "ATSADD: nicht initialisiert"
 
-#: Opcodes/ugnorman.c:842
+#: Opcodes/ugnorman.c:845
 msgid "ATSADDNZ: This file type contains no noise"
 msgstr ""
 
-#: Opcodes/ugnorman.c:846
+#: Opcodes/ugnorman.c:849
 msgid "ATSADDNZ: This file type has not been implemented in this code yet."
 msgstr ""
 
-#: Opcodes/ugnorman.c:869
+#: Opcodes/ugnorman.c:872
 msgid "ATSADDNZ: Band(s) out of range, max band allowed is 25"
 msgstr ""
 
-#: Opcodes/ugnorman.c:886
+#: Opcodes/ugnorman.c:889
 msgid ""
 "ATSADDNZ: Type either has no noise or is not implemented (only type 3 and 4 "
 "work now)"
 msgstr ""
 
-#: Opcodes/ugnorman.c:1002
+#: Opcodes/ugnorman.c:1005
 msgid ""
 "ATSADDNZ: only positive time pointer values are allowed, setting to zero\n"
 msgstr ""
 
-#: Opcodes/ugnorman.c:1011
+#: Opcodes/ugnorman.c:1014
 msgid "ATSADDNZ: time pointer out of range, truncating to last frame\n"
 msgstr ""
 
-#: Opcodes/ugnorman.c:1165
+#: Opcodes/ugnorman.c:1168
 #, c-format
 msgid "ATSSINNOI: Partial(s) out of range, max partial allowed is %i"
 msgstr ""
 
-#: Opcodes/ugnorman.c:1202
+#: Opcodes/ugnorman.c:1205
 msgid "ATSSINNOI: Type not implemented"
 msgstr ""
 
-#: Opcodes/ugnorman.c:1315
+#: Opcodes/ugnorman.c:1316
 msgid ""
 "ATSSINNOI: only positive time pointer values are allowed, setting to zero\n"
 msgstr ""
 
-#: Opcodes/ugnorman.c:1324
+#: Opcodes/ugnorman.c:1325
 msgid "ATSSINNOI: time pointer out of range, truncating to last frame\n"
 msgstr ""
 
@@ -8814,44 +8718,44 @@ msgstr ""
 msgid "ATSCROSS: you must have an atsbufread before an atsinterpread"
 msgstr ""
 
-#: Opcodes/ugsc.c:394
+#: Opcodes/ugsc.c:390
 msgid "Phaser mode must be either 1 or 2"
 msgstr ""
 
-#: Opcodes/vbap.c:57
+#: Opcodes/vbap.c:59
 msgid "vbap: error allocating loudspeaker table"
 msgstr ""
 
-#: Opcodes/vbap.c:264
+#: Opcodes/vbap.c:266
 msgid ""
 "Number of loudspeakers is zero\n"
 "Exiting"
 msgstr ""
 
-#: Opcodes/vbap.c:573
+#: Opcodes/vbap.c:575
 msgid "Error in loudspeaker dimension."
 msgstr ""
 
-#: Opcodes/vbap.c:596
+#: Opcodes/vbap.c:598
 msgid "Too few loudspeakers"
 msgstr ""
 
-#: Opcodes/vbap.c:622
+#: Opcodes/vbap.c:624
 msgid "Not valid 3-D configuration"
 msgstr ""
 
-#: Opcodes/vbap.c:668 Opcodes/vbap.c:767
+#: Opcodes/vbap.c:670 Opcodes/vbap.c:769
 msgid ""
 "\n"
 "Configured loudspeakers\n"
 msgstr ""
 
-#: Opcodes/vbap.c:670
+#: Opcodes/vbap.c:672
 #, c-format
 msgid "Triplet %d Loudspeakers: "
 msgstr ""
 
-#: Opcodes/vbap.c:769
+#: Opcodes/vbap.c:771
 #, c-format
 msgid "Pair %d Loudspeakers: "
 msgstr ""
@@ -8933,41 +8837,33 @@ msgstr ""
 msgid "Have to have at least %d directions in vbapzmove"
 msgstr ""
 
-#: Opcodes/Vosim.c:49
+#: Opcodes/Vosim.c:51
 msgid "vosim: pulse table not found"
 msgstr ""
 
-#: Opcodes/Vosim.c:72
+#: Opcodes/Vosim.c:74
 msgid "vosim: zero kfund. 'Infinite' length event generated."
 msgstr ""
 
-#: Opcodes/Vosim.c:80
+#: Opcodes/Vosim.c:82
 #, c-format
 msgid "vosim: kfund (%f) > sr. Generating ksmps silence."
 msgstr ""
 
-#: Opcodes/Vosim.c:158
+#: Opcodes/Vosim.c:160
 msgid "vosim: not initialised"
 msgstr "vosim: nicht initialisiert"
 
-#: Opcodes/vpvoc.c:118
-msgid "tableseg: not initialised"
-msgstr "tableseg: nicht initialisiert"
-
-#: Opcodes/vpvoc.c:146
-msgid "tablexseg: not initialised"
-msgstr "tablexseg: nicht initialisiert"
-
-#: Opcodes/vpvoc.c:172
+#: Opcodes/vpvoc.c:173
 #, c-format
 msgid "vpvoc: Could not find ifnmagctrl table %f"
 msgstr ""
 
-#: Opcodes/vpvoc.c:178
+#: Opcodes/vpvoc.c:179
 msgid "vpvoc: associated tableseg not found"
 msgstr ""
 
-#: Opcodes/vpvoc.c:194
+#: Opcodes/vpvoc.c:195
 #, c-format
 msgid "VPVOC cannot load %s"
 msgstr ""
@@ -9084,47 +8980,47 @@ msgstr ""
 msgid "-B N\tsamples per hardware sound I/O buffer"
 msgstr ""
 
-#: Top/argdecode.c:75 util/mixer.c:95 util/scale.c:46 util/srconv.c:739
+#: Top/argdecode.c:75 util/mixer.c:95 util/scale.c:46 util/srconv.c:738
 msgid "-A\tcreate an AIFF format output soundfile"
 msgstr ""
 
-#: Top/argdecode.c:76 util/mixer.c:96 util/scale.c:47 util/srconv.c:741
+#: Top/argdecode.c:76 util/mixer.c:96 util/scale.c:47 util/srconv.c:740
 msgid "-W\tcreate a WAV format output soundfile"
 msgstr ""
 
-#: Top/argdecode.c:77 util/srconv.c:740
+#: Top/argdecode.c:77 util/srconv.c:739
 msgid "-J\tcreate an IRCAM format output soundfile"
 msgstr ""
 
-#: Top/argdecode.c:78 util/mixer.c:97 util/scale.c:48 util/srconv.c:742
+#: Top/argdecode.c:78 util/mixer.c:97 util/scale.c:48 util/srconv.c:741
 msgid "-h\tno header on output soundfile"
 msgstr ""
 
-#: Top/argdecode.c:79 util/mixer.c:99 util/scale.c:49 util/srconv.c:743
+#: Top/argdecode.c:79 util/mixer.c:99 util/scale.c:49 util/srconv.c:742
 msgid "-c\t8-bit signed_char sound samples"
 msgstr ""
 
-#: Top/argdecode.c:81 util/mixer.c:101 util/scale.c:50 util/srconv.c:744
+#: Top/argdecode.c:81 util/mixer.c:101 util/scale.c:50 util/srconv.c:743
 msgid "-a\talaw sound samples"
 msgstr ""
 
-#: Top/argdecode.c:83 util/mixer.c:98 util/mixer.c:100 util/srconv.c:745
+#: Top/argdecode.c:83 util/mixer.c:98 util/mixer.c:100 util/srconv.c:744
 msgid "-8\t8-bit unsigned_char sound samples"
 msgstr ""
 
-#: Top/argdecode.c:84 util/mixer.c:102 util/scale.c:51 util/srconv.c:746
+#: Top/argdecode.c:84 util/mixer.c:102 util/scale.c:51 util/srconv.c:745
 msgid "-u\tulaw sound samples"
 msgstr ""
 
-#: Top/argdecode.c:85 util/mixer.c:103 util/scale.c:52 util/srconv.c:747
+#: Top/argdecode.c:85 util/mixer.c:103 util/scale.c:52 util/srconv.c:746
 msgid "-s\tshort_int sound samples"
 msgstr ""
 
-#: Top/argdecode.c:86 util/mixer.c:104 util/scale.c:53 util/srconv.c:748
+#: Top/argdecode.c:86 util/mixer.c:104 util/scale.c:53 util/srconv.c:747
 msgid "-l\tlong_int sound samples"
 msgstr ""
 
-#: Top/argdecode.c:87 util/mixer.c:105 util/scale.c:54 util/srconv.c:749
+#: Top/argdecode.c:87 util/mixer.c:105 util/scale.c:54 util/srconv.c:748
 msgid "-f\tfloat sound samples"
 msgstr ""
 
@@ -9132,7 +9028,7 @@ msgstr ""
 msgid "-3\t24bit sound samples"
 msgstr ""
 
-#: Top/argdecode.c:89 util/srconv.c:750
+#: Top/argdecode.c:89 util/srconv.c:749
 msgid "-r N\torchestra srate override"
 msgstr ""
 
@@ -9140,7 +9036,7 @@ msgstr ""
 msgid "-k N\torchestra krate override"
 msgstr ""
 
-#: Top/argdecode.c:91 util/srconv.c:751
+#: Top/argdecode.c:91 util/srconv.c:750
 msgid "-K\tDo not generate PEAK chunks"
 msgstr ""
 
@@ -9200,7 +9096,7 @@ msgstr ""
 msgid "-F fnam\tread MIDIfile event stream from file 'fnam'"
 msgstr ""
 
-#: Top/argdecode.c:107 util/mixer.c:106 util/scale.c:59 util/srconv.c:752
+#: Top/argdecode.c:107 util/mixer.c:106 util/scale.c:59 util/srconv.c:751
 msgid "-R\tcontinually rewrite header while writing soundfile (WAV/AIFF)"
 msgstr ""
 
@@ -9208,7 +9104,7 @@ msgstr ""
 msgid "-H#\tprint heartbeat style 1, 2 or 3 at each soundfile write"
 msgstr ""
 
-#: Top/argdecode.c:109 util/mixer.c:108 util/scale.c:61 util/srconv.c:754
+#: Top/argdecode.c:109 util/mixer.c:108 util/scale.c:61 util/srconv.c:753
 msgid "-N\tnotify (ring the bell) when score or miditrack is done"
 msgstr ""
 
@@ -9694,16 +9590,16 @@ msgid "-M: stdin not supported on this platform"
 msgstr ""
 
 #: Top/argdecode.c:668 Top/argdecode.c:959 util/envext.c:84 util/mixer.c:205
-#: util/scale.c:173 util/srconv.c:248 util/xtrct.c:116
+#: util/scale.c:173 util/srconv.c:247 util/xtrct.c:116
 msgid "no outfilename"
 msgstr ""
 
-#: Top/argdecode.c:671 Top/argdecode.c:963 util/scale.c:177 util/srconv.c:252
+#: Top/argdecode.c:671 Top/argdecode.c:963 util/scale.c:177 util/srconv.c:251
 #: util/xtrct.c:120
 msgid "-o cannot be stdin"
 msgstr ""
 
-#: Top/argdecode.c:675 Top/argdecode.c:967 util/scale.c:180 util/srconv.c:257
+#: Top/argdecode.c:675 Top/argdecode.c:967 util/scale.c:180 util/srconv.c:256
 #: util/xtrct.c:123
 msgid "stdout audio not supported"
 msgstr ""
@@ -9823,164 +9719,164 @@ msgstr ""
 msgid "cscoreFileGetCurrent: no fp current"
 msgstr ""
 
-#: Top/csmodule.c:192
+#: Top/csmodule.c:199
 #, c-format
 msgid "not loading '%s' (uses incompatible floating point type)"
 msgstr ""
 
-#: Top/csmodule.c:201
+#: Top/csmodule.c:209
 #, c-format
 msgid ""
 "not loading '%s' (incompatible with this version of Csound (%d.%d/%d.%d)"
 msgstr ""
 
-#: Top/csmodule.c:244
+#: Top/csmodule.c:252
 #, c-format
 msgid "could not open library '%s' (%s)"
 msgstr ""
 
-#: Top/csmodule.c:247
+#: Top/csmodule.c:255
 #, c-format
 msgid "could not open library '%s' (%d)"
 msgstr ""
 
-#: Top/csmodule.c:303
+#: Top/csmodule.c:311
 #, c-format
 msgid "'%s' is not a Csound plugin library"
 msgstr ""
 
-#: Top/csmodule.c:314
+#: Top/csmodule.c:322
 msgid "csoundLoadExternal(): memory allocation failure"
 msgstr ""
 
-#: Top/csmodule.c:328 Top/csmodule.c:336
+#: Top/csmodule.c:336 Top/csmodule.c:344
 #, c-format
 msgid "Error in pre-initialisation function of module '%s'"
 msgstr ""
 
-#: Top/csmodule.c:599 Top/csmodule.c:605 Top/csmodule.c:616 Top/csmodule.c:623
-#: Top/csmodule.c:629 Top/csmodule.c:637
+#: Top/csmodule.c:608 Top/csmodule.c:614 Top/csmodule.c:625 Top/csmodule.c:632
+#: Top/csmodule.c:638 Top/csmodule.c:646
 msgid "Error opening plugin directory\n"
 msgstr ""
 
-#: Top/csmodule.c:687
+#: Top/csmodule.c:696
 #, c-format
 msgid "Error opening plugin directory '%s': %s"
 msgstr ""
 
-#: Top/csmodule.c:722
+#: Top/csmodule.c:731
 #, c-format
 msgid "path name too long, skipping '%s'"
 msgstr ""
 
-#: Top/csmodule.c:728
+#: Top/csmodule.c:737
 #, c-format
 msgid "Library %s omitted\n"
 msgstr ""
 
-#: Top/csmodule.c:764
+#: Top/csmodule.c:773
 msgid "Loading command-line libraries:\n"
 msgstr ""
 
-#: Top/csmodule.c:787
+#: Top/csmodule.c:796
 #, c-format
 msgid " *** error loading '%s'"
 msgstr ""
 
-#: Top/csmodule.c:810
+#: Top/csmodule.c:819
 #, c-format
 msgid "Error starting module '%s'"
 msgstr ""
 
-#: Top/csmodule.c:907
+#: Top/csmodule.c:918
 #, c-format
 msgid "Error de-initialising module '%s'"
 msgstr ""
 
-#: Top/csound.c:1606 Top/csound.c:1626
+#: Top/csound.c:1636 Top/csound.c:1656
 msgid "Early return from csoundPerformKsmps().\n"
 msgstr ""
 
-#: Top/csound.c:1612
+#: Top/csound.c:1642
 msgid "Score finished in csoundPerformKsmps().\n"
 msgstr ""
 
-#: Top/csound.c:1645
+#: Top/csound.c:1675
 msgid "Early return from csoundPerformBuffer().\n"
 msgstr ""
 
-#: Top/csound.c:1670
+#: Top/csound.c:1700
 msgid "Early return from csoundPerform().\n"
 msgstr ""
 
-#: Top/csound.c:1677
+#: Top/csound.c:1707
 msgid "Score finished in csoundPerform().\n"
 msgstr ""
 
-#: Top/csound.c:1697
+#: Top/csound.c:1727
 msgid "csoundPerform(): stopped.\n"
 msgstr ""
 
-#: Top/csound.c:1968
+#: Top/csound.c:1998
 msgid "WARNING: "
 msgstr "ACHTUNG: "
 
-#: Top/csound.c:2089
+#: Top/csound.c:2119
 msgid "rtdummy: failed to allocate globals"
 msgstr ""
 
-#: Top/csound.c:2090
+#: Top/csound.c:2120
 msgid "rtaudio: dummy module enabled\n"
 msgstr ""
 
-#: Top/csound.c:2119 Top/csound.c:2155
+#: Top/csound.c:2149 Top/csound.c:2185
 msgid " *** error: rtaudio module set to empty string"
 msgstr ""
 
-#: Top/csound.c:2123 Top/csound.c:2159
+#: Top/csound.c:2153 Top/csound.c:2189
 #, c-format
 msgid " *** error: unknown rtaudio module: '%s'"
 msgstr ""
 
-#: Top/csound.c:2241
+#: Top/csound.c:2271
 msgid "WARNING: real time midi input disabled, using dummy functions\n"
 msgstr ""
 
-#: Top/csound.c:2246 Top/csound.c:2280
+#: Top/csound.c:2276 Top/csound.c:2310
 msgid "error: -+rtmidi set to empty string"
 msgstr ""
 
-#: Top/csound.c:2249 Top/csound.c:2283
+#: Top/csound.c:2279 Top/csound.c:2313
 #, c-format
 msgid "error: -+rtmidi='%s': unknown module"
 msgstr ""
 
-#: Top/csound.c:2275
+#: Top/csound.c:2305
 msgid "WARNING: real time midi output disabled, using dummy functions\n"
 msgstr ""
 
-#: Top/csound.c:2297
+#: Top/csound.c:2327
 msgid "Unknown MIDI error"
 msgstr ""
 
-#: Top/csound.c:2415
+#: Top/csound.c:2445
 msgid "xyin not supported. use invalue opcode instead."
 msgstr ""
 
-#: Top/csound.c:2522
+#: Top/csound.c:2552
 msgid "Failed to allocate new opcode entry."
 msgstr ""
 
-#: Top/csound.c:2545
+#: Top/csound.c:2575
 #, c-format
 msgid "Failed to allocate opcode entry for %s."
 msgstr ""
 
-#: Top/csound.c:2876
+#: Top/csound.c:2906
 msgid "Cannot open /proc/cpuinfo. Support for RDTSC is not available.\n"
 msgstr ""
 
-#: Top/csound.c:2927
+#: Top/csound.c:2957
 msgid "No valid CPU frequency entry was found in /proc/cpuinfo.\n"
 msgstr ""
 
@@ -9988,25 +9884,25 @@ msgstr ""
 msgid "Error allocating opcode list"
 msgstr ""
 
-#: Top/main.c:161
+#: Top/main.c:160
 #, c-format
 msgid "WARNING: cannot open csoundrc file %s\n"
 msgstr ""
 
-#: Top/main.c:164
+#: Top/main.c:163
 #, c-format
 msgid "Reading options from $CSOUNDRC: %s \n"
 msgstr ""
 
-#: Top/main.c:173
+#: Top/main.c:172
 msgid "Reading options from $HOME/.csoundrc\n"
 msgstr ""
 
-#: Top/main.c:200
+#: Top/main.c:199
 msgid "no orchestra name"
 msgstr ""
 
-#: Top/main.c:225
+#: Top/main.c:224
 msgid "Reading CSD failed ... stopping"
 msgstr ""
 
@@ -10018,7 +9914,7 @@ msgstr ""
 msgid "error: multiple uses of stdout"
 msgstr ""
 
-#: Top/main.c:260 util/dnoise.c:268
+#: Top/main.c:260 util/dnoise.c:264
 #, c-format
 msgid "%s not a recognised SFOUTYP env setting"
 msgstr ""
@@ -10031,58 +9927,62 @@ msgstr ""
 msgid "realtime performance using dummy numeric scorefile\n"
 msgstr ""
 
-#: Top/main.c:319
+#: Top/main.c:314
 #, c-format
 msgid "orchname:  %s\n"
 msgstr ""
 
-#: Top/main.c:321
-#, c-format
-msgid "scorename: %s\n"
+#: Top/main.c:334
+msgid "Stopping on parser failure\n"
 msgstr ""
 
-#: Top/main.c:353
+#: Top/main.c:352
 msgid "end of orchestra compile"
 msgstr ""
 
-#: Top/main.c:360
+#: Top/main.c:359
 #, c-format
 msgid "using previous %s\n"
 msgstr ""
 
-#: Top/main.c:373
+#: Top/main.c:369
 #, c-format
 msgid "cannot open scorefile %s"
 msgstr ""
 
-#: Top/main.c:378 Top/main.c:399
-#, c-format
-msgid "cannot open %s for writing"
+#: Top/main.c:371
+msgid "sorting score ...\n"
 msgstr ""
 
 #: Top/main.c:381
-msgid "sorting score ...\n"
+#, c-format
+msgid "cannot extract %s, name conflict"
+msgstr ""
+
+#: Top/main.c:384
+#, c-format
+msgid "cannot open extract file %s"
 msgstr ""
 
 #: Top/main.c:388
 #, c-format
-msgid "cannot extract %s, name conflict"
+msgid "cannot reopen %s"
 msgstr ""
 
-#: Top/main.c:391
+#: Top/main.c:392
 #, c-format
-msgid "cannot open extract file %s"
+msgid "cannot open %s for writing"
 msgstr ""
 
-#: Top/main.c:401
+#: Top/main.c:394
 msgid "  ... extracting ...\n"
 msgstr ""
 
-#: Top/main.c:414
+#: Top/main.c:405
 msgid "end of score sort"
 msgstr ""
 
-#: Top/main.c:416
+#: Top/main.c:407
 msgid "Syntax check completed.\n"
 msgstr "Syntaxprüfung durchgeführt.\n"
 
@@ -10147,163 +10047,158 @@ msgstr "*** Speicherallozierungausfall\n"
 msgid " *** error setting option '%s' to '%s': %s\n"
 msgstr ""
 
-#: Top/one_file.c:105 Top/one_file.c:113
+#: Top/one_file.c:110 Top/one_file.c:118
 msgid " *** cannot create temporary file"
 msgstr ""
 
-#: Top/one_file.c:198
+#: Top/one_file.c:203
 #, c-format
 msgid "Removing temporary file %s ...\n"
 msgstr ""
 
-#: Top/one_file.c:202
+#: Top/one_file.c:207
 #, c-format
 msgid "WARNING: could not remove %s\n"
 msgstr "ACHTUNG: konnte nicht %s entfernen\n"
 
-#: Top/one_file.c:268 Top/one_file.c:296
+#: Top/one_file.c:274 Top/one_file.c:302
 #, c-format
 msgid "More than %d arguments in <CsOptions>"
 msgstr ""
 
-#: Top/one_file.c:313
+#: Top/one_file.c:319
 #, c-format
 msgid "Invalid arguments in <CsOptions>: %s"
 msgstr ""
 
-#: Top/one_file.c:316
+#: Top/one_file.c:322
 #, c-format
 msgid "Invalid arguments in .csoundrc or -@ file: %s"
 msgstr ""
 
-#: Top/one_file.c:322 Top/one_file.c:790
+#: Top/one_file.c:328 Top/one_file.c:744
 msgid "Missing end tag </CsOptions>"
 msgstr ""
 
-#: Top/one_file.c:340 Top/one_file.c:372 Top/one_file.c:420
-#, c-format
-msgid "Creating %s (%p)\n"
-msgstr ""
-
-#: Top/one_file.c:343
-#, c-format
-msgid "Failed to create %s"
-msgstr ""
-
-#: Top/one_file.c:356
+#: Top/one_file.c:354
 msgid "Missing end tag </CsInstruments>"
 msgstr ""
 
-#: Top/one_file.c:389 Top/one_file.c:442
+#: Top/one_file.c:376 Top/one_file.c:430
 msgid "Missing end tag </CsScore>"
 msgstr ""
 
-#: Top/one_file.c:403 Top/one_file.c:408
+#: Top/one_file.c:391 Top/one_file.c:396
 msgid "Missing program in tag <CsScore>"
 msgstr ""
 
-#: Top/one_file.c:433
+#: Top/one_file.c:408
+#, c-format
+msgid "Creating %s (%p)\n"
+msgstr ""
+
+#: Top/one_file.c:421
 msgid "External generation failed"
 msgstr ""
 
-#: Top/one_file.c:520
+#: Top/one_file.c:468
 #, c-format
 msgid "Non base64 character %c(%2x)"
 msgstr ""
 
-#: Top/one_file.c:539
+#: Top/one_file.c:487
 msgid "Truncated byte at end of base64 stream"
 msgstr ""
 
-#: Top/one_file.c:554
+#: Top/one_file.c:503
 #, c-format
 msgid "Cannot open temporary file (%s) for MIDI subfile"
 msgstr ""
 
-#: Top/one_file.c:571
+#: Top/one_file.c:520
 msgid "Missing end tag </CsMidifileB>"
 msgstr ""
 
-#: Top/one_file.c:586 Top/one_file.c:633
+#: Top/one_file.c:536 Top/one_file.c:584
 #, c-format
 msgid "File %s already exists"
 msgstr ""
 
-#: Top/one_file.c:591
+#: Top/one_file.c:541
 #, c-format
 msgid "Cannot open sample file (%s) subfile"
 msgstr ""
 
-#: Top/one_file.c:605
+#: Top/one_file.c:555
 msgid "Missing end tag </CsSampleB>"
 msgstr ""
 
-#: Top/one_file.c:638
+#: Top/one_file.c:589
 #, c-format
 msgid "Cannot open file (%s) subfile"
 msgstr ""
 
-#: Top/one_file.c:653
+#: Top/one_file.c:604
 msgid "Missing end tag </CsFileB>"
 msgstr ""
 
-#: Top/one_file.c:672
+#: Top/one_file.c:624
 #, c-format
 msgid "This CSD file requires a version of Csound before %d.%02d"
 msgstr ""
 
-#: Top/one_file.c:680 Top/one_file.c:687
+#: Top/one_file.c:632 Top/one_file.c:639
 #, c-format
 msgid "This CSD file requires a version of Csound after %d.%02d"
 msgstr ""
 
-#: Top/one_file.c:693
+#: Top/one_file.c:645
 msgid "Missing end tag </CsVersion>"
 msgstr ""
 
-#: Top/one_file.c:702
+#: Top/one_file.c:655
 msgid "**** Licence Information ****\n"
 msgstr ""
 
-#: Top/one_file.c:708
+#: Top/one_file.c:661
 msgid "**** End of Licence Information ****\n"
 msgstr ""
 
-#: Top/one_file.c:719
+#: Top/one_file.c:672
 msgid "Missing end tag </CsLicence>"
 msgstr ""
 
-#: Top/one_file.c:749
+#: Top/one_file.c:703
 #, c-format
 msgid "Failed to open csd file: %s"
 msgstr ""
 
-#: Top/one_file.c:764
+#: Top/one_file.c:718
 msgid "STARTING FILE\n"
 msgstr ""
 
-#: Top/one_file.c:780
+#: Top/one_file.c:734
 msgid "Creating options\n"
 msgstr ""
 
-#: Top/one_file.c:786
+#: Top/one_file.c:740
 msgid "Skipping <CsOptions>\n"
 msgstr ""
 
-#: Top/one_file.c:800
+#: Top/one_file.c:754
 msgid "Creating orchestra\n"
 msgstr "Herstellen des Orchesters\n"
 
-#: Top/one_file.c:805
+#: Top/one_file.c:759
 msgid "Creating score\n"
 msgstr ""
 
-#: Top/one_file.c:839
+#: Top/one_file.c:793
 #, c-format
 msgid "unknown CSD tag: %s\n"
 msgstr ""
 
-#: Top/one_file.c:844
+#: Top/one_file.c:798
 msgid "Could not find <CsoundSynthesizer> tag in CSD file.\n"
 msgstr ""
 
@@ -10477,15 +10372,15 @@ msgstr "scot: %d Störungen.\n"
 #, c-format
 msgid ""
 "\n"
-" Could not open %s for writing, bye...\n"
+"Could not open %s for writing, bye...\n"
 msgstr ""
 
 #: util/atsa.c:544
 msgid "saving ATS data..."
 msgstr ""
 
-#: util/atsa.c:546 util/atsa.c:2344 util/atsa.c:2358 util/atsa.c:2368
-#: util/atsa.c:2548 util/atsa.c:2611 util/atsa.c:2699
+#: util/atsa.c:546 util/atsa.c:2354 util/atsa.c:2368 util/atsa.c:2387
+#: util/atsa.c:2567 util/atsa.c:2630 util/atsa.c:2718
 msgid "done!\n"
 msgstr "getan!\n"
 
@@ -10593,181 +10488,181 @@ msgid ""
 "\n"
 msgstr ""
 
-#: util/atsa.c:1482
+#: util/atsa.c:1492
 #, c-format
 msgid "atsa: error opening residual file '%s'"
 msgstr ""
 
-#: util/atsa.c:1486
+#: util/atsa.c:1496
 #, c-format
 msgid "atsa: residual file has %d channels, must be stereo !"
 msgstr ""
 
-#: util/atsa.c:1813
+#: util/atsa.c:1823
 #, c-format
 msgid ""
 "\n"
 "ERROR: cannot open file %s for writing\n"
 msgstr ""
 
-#: util/atsa.c:1908
+#: util/atsa.c:1918
 msgid "Error: sound not optimised !"
 msgstr ""
 
-#: util/atsa.c:2003
+#: util/atsa.c:2013
 #, c-format
 msgid "atsa: cannot open input file '%s'"
 msgstr ""
 
-#: util/atsa.c:2010
+#: util/atsa.c:2020
 #, c-format
 msgid "atsa: file has %d channels, must be mono !"
 msgstr ""
 
-#: util/atsa.c:2015
+#: util/atsa.c:2025
 msgid "tracking...\n"
 msgstr ""
 
-#: util/atsa.c:2024
+#: util/atsa.c:2034
 #, c-format
 msgid "start %f out of bounds, corrected to 0.0"
 msgstr ""
 
-#: util/atsa.c:2034
+#: util/atsa.c:2044
 #, c-format
 msgid "duration %f out of bounds, limited to file duration"
 msgstr ""
 
-#: util/atsa.c:2040
+#: util/atsa.c:2050
 #, c-format
 msgid "start: %f duration: %f file dur: %f\n"
 msgstr ""
 
-#: util/atsa.c:2047
+#: util/atsa.c:2057
 #, c-format
 msgid "lowest freq. %f out of bounds, forced to default: %f"
 msgstr ""
 
-#: util/atsa.c:2057
+#: util/atsa.c:2067
 #, c-format
 msgid "highest freq. %f out of bounds, forced to default: %f"
 msgstr ""
 
-#: util/atsa.c:2064
+#: util/atsa.c:2074
 #, c-format
 msgid ""
 "freq. dev. %f out of bounds, should be > 0.0 and <= 1.0, forced to default: "
 "%f"
 msgstr ""
 
-#: util/atsa.c:2072
+#: util/atsa.c:2082
 #, c-format
 msgid ""
 "windows cycles %d out of bounds, should be between 1 and 8, forced to "
 "default: %d"
 msgstr ""
 
-#: util/atsa.c:2080
+#: util/atsa.c:2090
 #, c-format
 msgid ""
 "window type %d out of bounds, should be between 0 and 3, forced to default: "
 "%d"
 msgstr ""
 
-#: util/atsa.c:2088
+#: util/atsa.c:2098
 #, c-format
 msgid ""
 "hop size %f out of bounds, should be > 0.0 and <= 1.0, forced to default: %f"
 msgstr ""
 
-#: util/atsa.c:2096
+#: util/atsa.c:2106
 #, c-format
 msgid ""
 "lowest magnitude %f out of bounds, should be >= 0.0 and <= 1.0, forced to "
 "default: %f"
 msgstr ""
 
-#: util/atsa.c:2120
+#: util/atsa.c:2130
 #, c-format
 msgid "atsa: %d frames are not enough for analysis, need at least %d"
 msgstr ""
 
-#: util/atsa.c:2129
+#: util/atsa.c:2139
 #, c-format
 msgid "track length %d out of bounds, forced to: %d"
 msgstr ""
 
-#: util/atsa.c:2138
+#: util/atsa.c:2148
 #, c-format
 msgid "min. segment length %d out of bounds, forced to: %d"
 msgstr ""
 
-#: util/atsa.c:2147
+#: util/atsa.c:2157
 #, c-format
 msgid "min. gap length %d out of bounds, forced to: %d"
 msgstr ""
 
-#: util/atsa.c:2153
+#: util/atsa.c:2163
 #, c-format
 msgid ""
 "SMR threshold %f out of bounds, should be >= 0.0 and < %f dB SPL, forced to "
 "default: %f"
 msgstr ""
 
-#: util/atsa.c:2164
+#: util/atsa.c:2174
 #, c-format
 msgid ""
 "min. seg. SMR %f out of bounds, should be >= %f and < %f dB SPL, forced to "
 "default: %f"
 msgstr ""
 
-#: util/atsa.c:2172
+#: util/atsa.c:2182
 #, c-format
 msgid ""
 "last peak contribution %f out of bounds, should be >= 0.0 and <= 1.0, forced "
 "to default: %f"
 msgstr ""
 
-#: util/atsa.c:2180
+#: util/atsa.c:2190
 #, c-format
 msgid ""
 "SMR contribution %f out of bounds, should be >= 0.0 and <= 1.0, forced to "
 "default: %f"
 msgstr ""
 
-#: util/atsa.c:2325
+#: util/atsa.c:2335
 msgid "Initializing ATS data..."
 msgstr ""
 
-#: util/atsa.c:2355
+#: util/atsa.c:2365
 msgid "Computing residual..."
 msgstr ""
 
-#: util/atsa.c:2366
+#: util/atsa.c:2381 util/atsa.c:2384
 msgid "Analysing residual..."
 msgstr ""
 
-#: util/atsa.c:2370
+#: util/atsa.c:2389
 msgid "tracking completed.\n"
 msgstr ""
 
-#: util/atsa.c:2478
+#: util/atsa.c:2497
 msgid "Filling sound gaps..."
 msgstr ""
 
-#: util/atsa.c:2566
+#: util/atsa.c:2585
 msgid "Trimming short partials..."
 msgstr ""
 
-#: util/atsa.c:2662
+#: util/atsa.c:2681
 msgid "Computing averages..."
 msgstr ""
 
-#: util/atsa.c:2713
+#: util/atsa.c:2732
 msgid "No partials to track -- stopping\n"
 msgstr ""
 
-#: util/atsa.c:2813
+#: util/atsa.c:2832
 msgid "Soundfile analysis for ATS opcodes"
 msgstr ""
 
@@ -10799,8 +10694,8 @@ msgstr ""
 msgid "illegal number of filenames"
 msgstr ""
 
-#: util/cvanal.c:113 util/dnoise.c:456 util/lpanal.c:518 util/pvanal.c:258
-#: util/srconv.c:351
+#: util/cvanal.c:113 util/dnoise.c:445 util/lpanal.c:518 util/pvanal.c:258
+#: util/srconv.c:350
 #, c-format
 msgid "error while opening %s"
 msgstr ""
@@ -10840,256 +10735,256 @@ msgstr ""
 msgid "Soundfile analysis for convolve"
 msgstr ""
 
-#: util/dnoise.c:285
+#: util/dnoise.c:281
 msgid "-o cannot be stdin\n"
 msgstr ""
 
-#: util/dnoise.c:297
+#: util/dnoise.c:293
 msgid "-A overriding local default WAV out"
 msgstr ""
 
-#: util/dnoise.c:302
+#: util/dnoise.c:298
 msgid "-J overriding local default AIFF/WAV out"
 msgstr ""
 
-#: util/dnoise.c:309
+#: util/dnoise.c:305
 msgid "-W overriding local default AIFF out"
 msgstr ""
 
-#: util/dnoise.c:356
+#: util/dnoise.c:345
 msgid "no t argument"
 msgstr ""
 
-#: util/dnoise.c:379
+#: util/dnoise.c:368
 msgid "no n argument"
 msgstr ""
 
-#: util/dnoise.c:384
+#: util/dnoise.c:373
 msgid "no b argument"
 msgstr ""
 
-#: util/dnoise.c:392
+#: util/dnoise.c:381
 msgid "no B argument"
 msgstr ""
 
-#: util/dnoise.c:404
+#: util/dnoise.c:393
 msgid "no E argument"
 msgstr ""
 
-#: util/dnoise.c:408
+#: util/dnoise.c:397
 msgid "no N argument"
 msgstr ""
 
-#: util/dnoise.c:412
+#: util/dnoise.c:401
 msgid "no M argument"
 msgstr ""
 
-#: util/dnoise.c:416
+#: util/dnoise.c:405
 msgid "no L argument"
 msgstr ""
 
-#: util/dnoise.c:420
+#: util/dnoise.c:409
 msgid "no w argument"
 msgstr ""
 
-#: util/dnoise.c:424
+#: util/dnoise.c:413
 msgid "no D argument"
 msgstr ""
 
-#: util/dnoise.c:431 util/srconv.c:328
+#: util/dnoise.c:420 util/srconv.c:327
 #, c-format
 msgid "Looking at %c\n"
 msgstr ""
 
-#: util/dnoise.c:438 util/srconv.c:336
+#: util/dnoise.c:427 util/srconv.c:335
 #, c-format
 msgid "Infile set to %s\n"
 msgstr ""
 
-#: util/dnoise.c:441 util/srconv.c:339
+#: util/dnoise.c:430 util/srconv.c:338
 #, c-format
 msgid "End with %s\n"
 msgstr ""
 
-#: util/dnoise.c:447
+#: util/dnoise.c:436
 msgid "dnoise: no input file\n"
 msgstr ""
 
-#: util/dnoise.c:451
+#: util/dnoise.c:440
 msgid "Must have an example noise file (-i name)\n"
 msgstr ""
 
-#: util/dnoise.c:479
+#: util/dnoise.c:468
 #, c-format
 msgid "cannot open %s.\n"
 msgstr ""
 
-#: util/dnoise.c:491 util/srconv.c:461 util/srconv.c:473
+#: util/dnoise.c:480 util/srconv.c:460 util/srconv.c:472
 #, c-format
 msgid "cannot open %s."
 msgstr ""
 
-#: util/dnoise.c:510
+#: util/dnoise.c:499
 msgid "dnoise: input MUST be mono or stereo\n"
 msgstr ""
 
-#: util/dnoise.c:518
+#: util/dnoise.c:507
 msgid "dnoise: cannot open noise reference file\n"
 msgstr ""
 
-#: util/dnoise.c:523
+#: util/dnoise.c:512
 msgid "Incompatible sample rates\n"
 msgstr ""
 
-#: util/dnoise.c:542
+#: util/dnoise.c:531
 #, c-format
 msgid "dnoise: warning - N not a valid power of two; revised N = %d\n"
 msgstr ""
 
-#: util/dnoise.c:552
+#: util/dnoise.c:541
 msgid "dnoise: warning - do not specify both M and W\n"
 msgstr ""
 
-#: util/dnoise.c:562
+#: util/dnoise.c:551
 msgid "dnoise: warning - invalid W ignored\n"
 msgstr ""
 
-#: util/dnoise.c:576
+#: util/dnoise.c:565
 msgid "dnoise: warning - M is too small\n"
 msgstr ""
 
-#: util/dnoise.c:586
+#: util/dnoise.c:575
 msgid "dnoise: M too large\n"
 msgstr ""
 
-#: util/dnoise.c:592
+#: util/dnoise.c:581
 msgid "dnoise: L too large\n"
 msgstr ""
 
-#: util/dnoise.c:602
+#: util/dnoise.c:591
 #, c-format
 msgid "writing %u-byte blks of %s to %s"
 msgstr ""
 
-#: util/dnoise.c:627 util/dnoise.c:666 util/dnoise.c:721 util/dnoise.c:732
-#: util/dnoise.c:736 util/dnoise.c:743 util/dnoise.c:753 util/dnoise.c:758
-#: util/dnoise.c:762 util/dnoise.c:766 util/dnoise.c:770
+#: util/dnoise.c:616 util/dnoise.c:655 util/dnoise.c:710 util/dnoise.c:721
+#: util/dnoise.c:725 util/dnoise.c:732 util/dnoise.c:742 util/dnoise.c:747
+#: util/dnoise.c:751 util/dnoise.c:755 util/dnoise.c:759
 msgid "dnoise: insufficient memory\n"
 msgstr ""
 
-#: util/dnoise.c:779 util/dnoise.c:788
+#: util/dnoise.c:768 util/dnoise.c:777
 msgid "dnoise: begin time is greater than EOF of noise file!"
 msgstr ""
 
-#: util/dnoise.c:820
+#: util/dnoise.c:809
 msgid "dnoise: not enough samples of noise reference\n"
 msgstr ""
 
-#: util/dnoise.c:1118
+#: util/dnoise.c:1103
 #, c-format
 msgid "%5.1f seconds of input complete\n"
 msgstr ""
 
-#: util/dnoise.c:1137
+#: util/dnoise.c:1122
 msgid "processing complete\n"
 msgstr ""
 
-#: util/dnoise.c:1147
+#: util/dnoise.c:1132
 msgid "usage: dnoise [flags] input_file"
 msgstr ""
 
-#: util/dnoise.c:1149
+#: util/dnoise.c:1134
 msgid "flags:"
 msgstr ""
 
-#: util/dnoise.c:1150
+#: util/dnoise.c:1135
 msgid "i = noise reference soundfile"
 msgstr ""
 
-#: util/dnoise.c:1151
+#: util/dnoise.c:1136
 msgid "o = output file"
 msgstr ""
 
-#: util/dnoise.c:1152
+#: util/dnoise.c:1137
 msgid "N = # of bandpass filters (1024)"
 msgstr ""
 
-#: util/dnoise.c:1153
+#: util/dnoise.c:1138
 msgid "w = filter overlap factor: {0,1,(2),3} DON'T USE -w AND -M"
 msgstr ""
 
-#: util/dnoise.c:1154
+#: util/dnoise.c:1139
 msgid "M = analysis window length (N-1 unless -w is specified)"
 msgstr ""
 
-#: util/dnoise.c:1155
+#: util/dnoise.c:1140
 msgid "L = synthesis window length (M)"
 msgstr ""
 
-#: util/dnoise.c:1156
+#: util/dnoise.c:1141
 msgid "D = decimation factor (M/8)"
 msgstr ""
 
-#: util/dnoise.c:1157
+#: util/dnoise.c:1142
 msgid "b = begin time in noise reference soundfile (0)"
 msgstr ""
 
-#: util/dnoise.c:1158
+#: util/dnoise.c:1143
 msgid "B = starting sample in noise reference soundfile (0)"
 msgstr ""
 
-#: util/dnoise.c:1159
+#: util/dnoise.c:1144
 msgid "e = end time in noise reference soundfile (end)"
 msgstr ""
 
-#: util/dnoise.c:1160
+#: util/dnoise.c:1145
 msgid "E = final sample in noise reference soundfile (end)"
 msgstr ""
 
-#: util/dnoise.c:1161
+#: util/dnoise.c:1146
 msgid "t = threshold above noise reference in dB (30)"
 msgstr ""
 
-#: util/dnoise.c:1162
+#: util/dnoise.c:1147
 msgid "S = sharpness of noise-gate turnoff (1) (1 to 5)"
 msgstr ""
 
-#: util/dnoise.c:1163
+#: util/dnoise.c:1148
 msgid "n = number of FFT frames to average over (5)"
 msgstr ""
 
-#: util/dnoise.c:1164
+#: util/dnoise.c:1149
 msgid "m = minimum gain of noise-gate when off in dB (-40)"
 msgstr ""
 
-#: util/dnoise.c:1165
+#: util/dnoise.c:1150
 msgid "V : verbose - print status info"
 msgstr ""
 
-#: util/dnoise.c:1166
+#: util/dnoise.c:1151
 msgid "A : AIFF format output"
 msgstr ""
 
-#: util/dnoise.c:1167
+#: util/dnoise.c:1152
 msgid "W : WAV format output"
 msgstr ""
 
-#: util/dnoise.c:1168
+#: util/dnoise.c:1153
 msgid "J : IRCAM format output"
 msgstr ""
 
-#: util/dnoise.c:1187
+#: util/dnoise.c:1172
 #, c-format
 msgid "soundfile write returned sample count of %d, not %d\n"
 msgstr ""
 
-#: util/dnoise.c:1189
+#: util/dnoise.c:1174
 msgid ""
 "(disk may be full...\n"
 " closing the file ...)\n"
 msgstr ""
 
-#: util/dnoise.c:1257
+#: util/dnoise.c:1242
 msgid "Removes noise from a sound file"
 msgstr ""
 
@@ -11097,7 +10992,7 @@ msgstr ""
 msgid "Usage:\tenvext [-flags] soundfile\n"
 msgstr ""
 
-#: util/envext.c:54 util/srconv.c:738
+#: util/envext.c:54 util/srconv.c:737
 msgid "-o fnam\tsound output filename\n"
 msgstr ""
 
@@ -11131,7 +11026,7 @@ msgstr ""
 msgid "enveloping %ld sample frames (%3.1f secs)\n"
 msgstr ""
 
-#: util/envext.c:179
+#: util/envext.c:177
 msgid "Create a text file of envelope"
 msgstr ""
 
@@ -11545,7 +11440,7 @@ msgstr ""
 msgid "Legal flags are:"
 msgstr ""
 
-#: util/mixer.c:107 util/scale.c:60 util/srconv.c:753
+#: util/mixer.c:107 util/scale.c:60 util/srconv.c:752
 msgid "-H#\tprint a heartbeat style 1, 2 or 3 at each soundfile write"
 msgstr ""
 
@@ -11585,7 +11480,7 @@ msgstr ""
 msgid "mixer: error: "
 msgstr "mixer: Störung: "
 
-#: util/mixer.c:188 util/scale.c:161 util/srconv.c:232
+#: util/mixer.c:188 util/scale.c:161 util/srconv.c:231
 #, c-format
 msgid "%s not a recognized SFOUTYP env setting"
 msgstr ""
@@ -11814,17 +11709,17 @@ msgstr "pvanal Störung: %s\n"
 msgid "Soundfile analysis for pvoc"
 msgstr ""
 
-#: util/pvanal.c:469
+#: util/pvanal.c:467
 #, c-format
 msgid "pvxanal: unable to create analysis file: %s"
 msgstr ""
 
-#: util/pvanal.c:500 util/pvanal.c:532
+#: util/pvanal.c:498 util/pvanal.c:530
 #, c-format
 msgid "pvxanal: error writing analysis frames: %s\n"
 msgstr ""
 
-#: util/pvanal.c:542
+#: util/pvanal.c:540
 #, c-format
 msgid ""
 "\n"
@@ -11914,7 +11809,7 @@ msgstr ""
 msgid "-P fpnum\tscale file to given percentage of full"
 msgstr ""
 
-#: util/scale.c:62 util/srconv.c:755
+#: util/scale.c:62 util/srconv.c:754
 msgid "-- fnam\tlog output to file"
 msgstr ""
 
@@ -12065,75 +11960,75 @@ msgstr ""
 msgid "Sound format -%c has been overruled by -%c"
 msgstr ""
 
-#: util/srconv.c:299
+#: util/srconv.c:298
 msgid "No Q argument"
 msgstr ""
 
-#: util/srconv.c:304
+#: util/srconv.c:303
 msgid "No P argument"
 msgstr ""
 
-#: util/srconv.c:313
+#: util/srconv.c:312
 msgid "No r argument"
 msgstr ""
 
-#: util/srconv.c:322
+#: util/srconv.c:321
 msgid "No break file"
 msgstr ""
 
-#: util/srconv.c:345
+#: util/srconv.c:344
 msgid "No input given\n"
 msgstr ""
 
-#: util/srconv.c:362
+#: util/srconv.c:361
 msgid "srconv: cannot specify both -r and -P"
 msgstr ""
 
-#: util/srconv.c:373
+#: util/srconv.c:372
 msgid "srconv: cannot open time-vary function file"
 msgstr ""
 
-#: util/srconv.c:389
+#: util/srconv.c:388
 msgid "srconv: too few x-y pairs in time-vary function file"
 msgstr ""
 
-#: util/srconv.c:403
+#: util/srconv.c:402
 msgid "srconv: first x value in time-vary function must be 0"
 msgstr ""
 
-#: util/srconv.c:408
+#: util/srconv.c:407
 msgid "srconv: invalid initial y value in time-vary function"
 msgstr ""
 
-#: util/srconv.c:413 util/srconv.c:705
+#: util/srconv.c:412 util/srconv.c:704
 msgid "srconv: invalid x values in time-vary function"
 msgstr ""
 
-#: util/srconv.c:732
+#: util/srconv.c:731
 msgid ""
 "usage: srconv [flags] infile\n"
 "\n"
 "flags:"
 msgstr ""
 
-#: util/srconv.c:733
+#: util/srconv.c:732
 msgid ""
 "-P num\tpitch transposition ratio (srate/r) [do not specify both P and r]"
 msgstr ""
 
-#: util/srconv.c:735
+#: util/srconv.c:734
 msgid "-Q num\tquality factor (1 to 8: default = 2)"
 msgstr ""
 
-#: util/srconv.c:736
+#: util/srconv.c:735
 msgid "-i filnam\tbreak file"
 msgstr ""
 
-#: util/srconv.c:737
+#: util/srconv.c:736
 msgid "-r num\toutput sample rate (must be specified)"
 msgstr ""
 
-#: util/srconv.c:821
+#: util/srconv.c:820
 msgid "Sample rate conversion"
 msgstr ""
 
@@ -12284,6 +12179,18 @@ msgid "Extract part of a sound file"
 msgstr ""
 
 #, fuzzy
+#~ msgid "tableseg: not initialized"
+#~ msgstr "tableseg: nicht initialisiert"
+
+#, fuzzy
+#~ msgid "tablexseg: not initialized"
+#~ msgstr "tablexseg: nicht initialisiert"
+
+#, fuzzy
+#~ msgid "vdelayk: not initialized"
+#~ msgstr "delayk: nicht initialisiert"
+
+#, fuzzy
 #~ msgid "csound_orcerror on line %d: %s\n"
 #~ msgstr "cvanal Störung: %s\n"
 
diff --git a/po/italian.po b/po/italian.po
index 5c5dcad..f6d7ba5 100644
--- a/po/italian.po
+++ b/po/italian.po
@@ -33,22 +33,22 @@ msgstr "auxlist per strumento %d (%p):\n"
 msgid "auxlist for instr %d (%p):\n"
 msgstr "auxlist per strumento %d (%p):\n"
 
-#: Engine/auxfd.c:153
+#: Engine/auxfd.c:154
 #, c-format
 msgid "\tauxch at %p: size %ld, auxp %p, endp %p\n"
 msgstr "\tauxch a %p: dimensione %ld, auxp %p, endp %p\n"
 
-#: Engine/auxfd.c:165
+#: Engine/auxfd.c:166
 #, fuzzy, c-format
 msgid "fdlist for instr %s [%d] (%p):"
 msgstr "fdlist per strumento %d (%p):"
 
-#: Engine/auxfd.c:168
+#: Engine/auxfd.c:169
 #, c-format
 msgid "fdlist for instr %d (%p):"
 msgstr "fdlist per strumento %d (%p):"
 
-#: Engine/auxfd.c:171
+#: Engine/auxfd.c:172
 #, c-format
 msgid "  fd %p in %p"
 msgstr "  fd %p in %p"
@@ -101,366 +101,322 @@ msgstr "la lunghezza della stringa supera il valore permesso"
 msgid "(unknown error)"
 msgstr "(errore sconosciuto)"
 
-#: Engine/csound_orc_compile.c:214 Engine/rdorch.c:1832
+#: Engine/csound_orc_compile.c:138
+#, fuzzy, c-format
+msgid ""
+"input arg %d '%s' of type %s not allowed when expecting %c (for opcode %s), "
+"line %d\n"
+msgstr "argomento in input '%s' di tipo %s non permesso aspettando invece %c"
+
+#: Engine/csound_orc_compile.c:265 Engine/rdorch.c:1862
 msgid "missing or extra arg"
 msgstr "argomento mancante o in più"
 
-#: Engine/csound_orc_compile.c:218
+#: Engine/csound_orc_compile.c:269
 #, fuzzy
 msgid "too many input args\n"
 msgstr "troppi argomenti in input"
 
-#: Engine/csound_orc_compile.c:475
+#: Engine/csound_orc_compile.c:304
+#, fuzzy, c-format
+msgid "input arg '%s' used before defined (in opcode %s), line %d\n"
+msgstr "argomento in input '%s' usato prima di essere definito"
+
+#: Engine/csound_orc_compile.c:380
+#, fuzzy, c-format
+msgid ""
+"output name previously used, type '%c' must be uniquely defined, line %d"
+msgstr "nome di output già usato, il tipo '%c' deve essere definito unicamente"
+
+#: Engine/csound_orc_compile.c:386
+#, fuzzy, c-format
+msgid "output arg '%s' illegal type (for opcode %s), line %d\n"
+msgstr "argomento di output '%s' di tipo illegale"
+
+#: Engine/csound_orc_compile.c:541
 #, fuzzy, c-format
 msgid "create_opcode: No rule to handle statement of type %d\n"
 msgstr "create_opcode: Non c'è regola d'uso per dichiarazione di tipo %d\n"
 
-#: Engine/csound_orc_compile.c:671
+#: Engine/csound_orc_compile.c:738
 #, c-format
 msgid "create_instrument: instr num %ld\n"
 msgstr "create_instrument: strumento num %ld\n"
 
-#: Engine/csound_orc_compile.c:681
+#: Engine/csound_orc_compile.c:748
 #, c-format
 msgid "create_instrument: instr name %s\n"
 msgstr "create_instrument: nome dello strumento %s\n"
 
-#: Engine/csound_orc_compile.c:688 Engine/otran.c:351
+#: Engine/csound_orc_compile.c:755 Engine/otran.c:364
 msgid "invalid name for instrument"
 msgstr "nome dello strumento non valido"
 
-#: Engine/csound_orc_compile.c:692 Engine/otran.c:356
+#: Engine/csound_orc_compile.c:759 Engine/otran.c:370
 #, c-format
 msgid "instr %s redefined"
 msgstr "strumento %s ridefinito"
 
-#: Engine/csound_orc_compile.c:833 Engine/otran.c:145 Engine/symbtab.c:394
-#, c-format
-msgid "invalid input type for opcode %s"
-msgstr "tipo di input non valido per l'opcode %s"
-
-#: Engine/csound_orc_compile.c:838 Engine/otran.c:150 Engine/symbtab.c:399
-#, c-format
-msgid "too many input args for opcode %s"
-msgstr "troppi argomenti in input per l'opcode %s"
-
-#: Engine/csound_orc_compile.c:853 Engine/otran.c:165 Engine/symbtab.c:414
-#, c-format
-msgid "too many output args for opcode %s"
-msgstr "troppi argomenti in output per l'opcode %s"
-
-#: Engine/csound_orc_compile.c:869 Engine/otran.c:187 Engine/symbtab.c:433
-#, c-format
-msgid "invalid output type for opcode %s"
-msgstr "tipo di output non valido per l'opcode %s"
-
-#: Engine/csound_orc_compile.c:954 Engine/otran.c:339
+#: Engine/csound_orc_compile.c:903 Engine/otran.c:352
 #, c-format
 msgid "instr %ld redefined"
 msgstr "strumento %ld ridefinito"
 
-#: Engine/csound_orc_compile.c:964
+#: Engine/csound_orc_compile.c:914
 msgid "!!! csound->opcodeInfo is NULL !!!\n"
 msgstr "!!! csound->opcodeInfo e' NULL !!!\n"
 
-#: Engine/csound_orc_compile.c:1111
+#: Engine/csound_orc_compile.c:1083
 #, c-format
 msgid "Unknown TREE node of type %d found in root.\n"
 msgstr "Nodo sconosciuto di tipo %d trovato in root.\n"
 
-#: Engine/csound_orc_compile.c:1168 Engine/otran.c:565 Engine/otran.c:1414
+#: Engine/csound_orc_compile.c:1140 Engine/otran.c:579 Engine/otran.c:1433
 #, c-format
 msgid "%s invalid sample rate"
 msgstr "%s frequenza di campionamento (sr) non valida"
 
-#: Engine/csound_orc_compile.c:1170 Engine/otran.c:567 Engine/otran.c:1416
+#: Engine/csound_orc_compile.c:1142 Engine/otran.c:581 Engine/otran.c:1435
 #, c-format
 msgid "%s invalid control rate"
 msgstr "%s frequenza dei segnali di controllo (kr) non valida"
 
-#: Engine/csound_orc_compile.c:1173 Engine/otran.c:570 Engine/otran.c:1412
+#: Engine/csound_orc_compile.c:1146 Engine/otran.c:584 Engine/otran.c:1431
 #, c-format
 msgid "%s invalid ksmps value"
 msgstr "%s valore di ksmps non valido"
 
-#: Engine/csound_orc_compile.c:1176 Engine/otran.c:572 Engine/otran.c:1418
+#: Engine/csound_orc_compile.c:1149 Engine/otran.c:587 Engine/otran.c:1437
 #, c-format
 msgid "%s inconsistent sr, kr, ksmps"
 msgstr "%s sr, kr e ksmps sono incongruenti"
 
-#: Engine/csound_orc_compile.c:1190
+#: Engine/csound_orc_compile.c:1165
 msgid "perf-pass statements illegal in header blk\n"
 msgstr "dichiarazione d'esecuzione non valida nel blocco header\n"
 
-#: Engine/csound_orc_compile.c:1195
+#: Engine/csound_orc_compile.c:1170
 #, c-format
 msgid "%d syntax errors in orchestra.  compilation invalid\n"
 msgstr "%d errore\\i di sintassi nell'orchestra.  Compilazione non valida\n"
 
-#: Engine/csound_orc_compile.c:1255 Engine/otran.c:656
+#: Engine/csound_orc_compile.c:1230 Engine/otran.c:671
 msgid "inconsistent argoff sumcount"
 msgstr "argoff sumcount incoerente"
 
-#: Engine/csound_orc_compile.c:1327 Engine/otran.c:725
+#: Engine/csound_orc_compile.c:1302 Engine/otran.c:740
 #, c-format
 msgid "LABELS list is full...extending to %d\n"
 msgstr "Lista delle etichette piena...estesa a %d\n"
 
-#: Engine/csound_orc_compile.c:1365 Engine/otran.c:763
+#: Engine/csound_orc_compile.c:1340 Engine/otran.c:778
 #, c-format
 msgid "GOTOS list is full..extending to %d\n"
 msgstr "Lista dei GOTOS piena...estesa a %d\n"
 
-#: Engine/csound_orc_compile.c:1398 Engine/otran.c:796
+#: Engine/csound_orc_compile.c:1373 Engine/otran.c:811
 #, c-format
 msgid "target label '%s' not found"
 msgstr "obiettivo dell'etichetta '%s' non trovato"
 
-#: Engine/csound_orc_compile.c:1463 Engine/otran.c:851
+#: Engine/csound_orc_compile.c:1451 Engine/otran.c:866
 #, c-format
 msgid "string syntax '%s'"
 msgstr "sintassi della stringa '%s'"
 
-#: Engine/csound_orc_compile.c:1513 Engine/otran.c:901
+#: Engine/csound_orc_compile.c:1501 Engine/otran.c:916
 #, c-format
 msgid "numeric syntax '%s'"
 msgstr "sintassi numerica '%s'"
 
-#: Engine/csound_orc_compile.c:1539 Engine/otran.c:927
+#: Engine/csound_orc_compile.c:1527 Engine/otran.c:942
 #, c-format
 msgid "extending Floating pool to %d\n"
 msgstr "insieme dei Floating esteso a %d\n"
 
-#: Engine/csound_orc_compile.c:1578 Engine/otran.c:999
+#: Engine/csound_orc_compile.c:1566 Engine/otran.c:1018
 msgid "gblnamset(): memory allocation failure"
 msgstr "gblnamset(): allocazione di memoria fallita"
 
-#: Engine/csound_orc_compile.c:1606 Engine/otran.c:1027
+#: Engine/csound_orc_compile.c:1594 Engine/otran.c:1046
 msgid "lclnamset(): memory allocation failure"
 msgstr "lclcnamset: allocazione di memoria fallita"
 
-#: Engine/csound_orc_compile.c:1632 Engine/otran.c:1052
+#: Engine/csound_orc_compile.c:1620 Engine/otran.c:1071
 #, fuzzy
 msgid "unexpected global name"
 msgstr "nome globale inaspettato"
 
-#: Engine/csound_orc_compile.c:1655 Engine/otran.c:1074
+#: Engine/csound_orc_compile.c:1643 Engine/otran.c:1093
 msgid "unknown nametype"
 msgstr "tipo di nome sconosciuto"
 
-#: Engine/csound_orc.l:239
+#: Engine/csound_orc_expressions.c:459
 #, c-format
-msgid "unterminated string found on line %d >>%s<<\n"
+msgid "error: function %s with arg type %c not found, line %d \n"
 msgstr ""
 
-#: Engine/csound_orc.l:259 Engine/csound_orc.l:286 Engine/csound_orc.l:314
-#: Engine/csound_orc.l:367 Engine/rdorch.c:901 Engine/sread.c:396
-#, c-format
-msgid "Undefined macro: '%s'"
-msgstr "macro non definita: '%s'"
-
-#: Engine/csound_orc.l:265 Engine/csound_orc.l:292
-#, fuzzy
-msgid "Includes nested too deeply"
-msgstr "inclusioni innestate troppo in profondità"
-
-#: Engine/csound_orc.l:335 Engine/csound_orc.l:388 Engine/rdorch.c:940
+#: Engine/csound_orc_expressions.c:862
 #, c-format
-msgid ""
-"Missing argument terminator\n"
-"%.98s"
+msgid "error: non-existent statement in conditional, line %d \n"
 msgstr ""
-"Manca argomento conclusivo\n"
-"%.98s"
-
-#: Engine/csound_orc.l:484
-#, fuzzy, c-format
-msgid "Line %d: Unknown character: '%c'(%2x)\n"
-msgstr "Linea %d: carattere sconosciuto: '%s'\n"
-
-#: Engine/csound_orc.l:527
-#, c-format
-msgid "Cannot open file \"%s\"\n"
-msgstr "Non è possibile aprire il file: \"%s\"\n"
 
-#: Engine/csound_orc.l:573 Engine/rdorch.c:689 Engine/sread.c:1595
-msgid "macro error\n"
-msgstr "errore macro\n"
-
-#: Engine/csound_orc.l:631 Engine/rdorch.c:845 Engine/sread.c:1686
-#, c-format
-msgid "macro %s undefined\n"
-msgstr "macro %s non definita\n"
-
-#: Engine/csound_orc.l:645 Engine/rdorch.c:859 Engine/sread.c:294
-msgid "Undefining undefined macro"
-msgstr "Libero la macro non definita"
-
-#: Engine/csound_orc.l:786 Engine/rdorch.c:413 Engine/sread.c:741
-#, c-format
-msgid "Macro definition for %*s\n"
-msgstr "Definizione di macro per %*s\n"
-
-#: Engine/csound_orc.l:789 Engine/rdorch.c:416
-msgid "Invalid macro name for --omacro"
-msgstr "Nome di macro non valido per --omacro"
-
-#: Engine/csound_orc.y:270
-msgid "No number following instr\n"
-msgstr "instr non è seguito da nessun numero\n"
-
-#: Engine/csound_orc_semantics.c:127
+#: Engine/csound_orc_semantics.c:157
 #, fuzzy, c-format
-msgid "error: %s (token \"%s\")"
+msgid ""
+"\n"
+"error: %s  (token \"%s\")"
 msgstr "%s: errore: %s (%s)\n"
 
-#: Engine/csound_orc_semantics.c:129
+#: Engine/csound_orc_semantics.c:159
 #, fuzzy, c-format
-msgid " line %d: %s"
+msgid ""
+" line %d:\n"
+">>>"
 msgstr ", linea %d:\n"
 
-#: Engine/csound_orc_semantics.c:702 Engine/rdorch.c:1863
-#, fuzzy
-msgid "insufficient required arguments"
+#: Engine/csound_orc_semantics.c:732
+#, fuzzy, c-format
+msgid "insufficient required arguments for opcode %s on line %d\n"
 msgstr "gli argomenti richiesti sono insufficienti"
 
-#: Engine/csound_orc_semantics.c:768 Engine/rdorch.c:1617 Engine/rdorch.c:1635
-#: Engine/rdorch.c:1676 Engine/rdorch.c:1811 Engine/rdorch.c:1980
+#: Engine/csound_orc_semantics.c:797 Engine/rdorch.c:1644 Engine/rdorch.c:1662
+#: Engine/rdorch.c:1703 Engine/rdorch.c:1841 Engine/rdorch.c:2011
 #, c-format
 msgid "modified opcod: %s"
 msgstr "modificato l'opcode: %s"
 
-#: Engine/cs_par_dispatch.c:113 Engine/cs_par_dispatch.c:125
+#: Engine/cs_par_dispatch.c:115 Engine/cs_par_dispatch.c:128
 #, c-format
 msgid "Poorly specified global lock index: %i [max: %i]\n"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:138 Engine/cs_par_dispatch.c:157
+#: Engine/cs_par_dispatch.c:142 Engine/cs_par_dispatch.c:162
 msgid "Invalid NULL parameter name for a global variable\n"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:505 Engine/cs_par_dispatch.c:528
-#: Engine/cs_par_dispatch.c:2463 Engine/cs_par_dispatch.c:2507
-#: Engine/cs_par_dispatch.c:2509 Engine/cs_par_dispatch.c:2570
+#: Engine/cs_par_dispatch.c:526 Engine/cs_par_dispatch.c:553
+#: Engine/cs_par_dispatch.c:2543 Engine/cs_par_dispatch.c:2588
+#: Engine/cs_par_dispatch.c:2590 Engine/cs_par_dispatch.c:2654
 msgid "Invalid NULL Parameter entry"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:507 Engine/cs_par_dispatch.c:541
-#: Engine/cs_par_dispatch.c:566 Engine/cs_par_dispatch.c:605
+#: Engine/cs_par_dispatch.c:528 Engine/cs_par_dispatch.c:567
+#: Engine/cs_par_dispatch.c:594 Engine/cs_par_dispatch.c:635
 #, fuzzy
 msgid "Invalid NULL Parameter name"
 msgstr "nome di variabile non valido"
 
-#: Engine/cs_par_dispatch.c:512
+#: Engine/cs_par_dispatch.c:535
 msgid "Failed to allocate Opcode Weight cache entry"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:632 Engine/cs_par_dispatch.c:718
+#: Engine/cs_par_dispatch.c:664 Engine/cs_par_dispatch.c:755
 msgid "No Weights to Dump (Using Defaults)\n"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:670 Engine/cs_par_dispatch.c:794
+#: Engine/cs_par_dispatch.c:705 Engine/cs_par_dispatch.c:835
 #, c-format
 msgid "Opcode Weight Spec File not found at: %s"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:722
+#: Engine/cs_par_dispatch.c:759
 msgid "Weights Dump\n"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:866
+#: Engine/cs_par_dispatch.c:907
 #, c-format
 msgid "Parallel Spec File not found at: %s"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:872
+#: Engine/cs_par_dispatch.c:913
 msgid "Parallel Spec File invalid format expected weight_min parameter"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:877
+#: Engine/cs_par_dispatch.c:918
 msgid "Parallel Spec File invalid format expected weight_max parameter"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:881
+#: Engine/cs_par_dispatch.c:922
 msgid "Parallel Spec File invalid format expected roots_avail_min parameter"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:885
+#: Engine/cs_par_dispatch.c:926
 msgid "Parallel Spec File invalid format expected roots_avail_max parameter"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:961 Engine/cs_par_dispatch.c:985
-#: Engine/cs_par_dispatch.c:1109 Engine/cs_par_dispatch.c:1195
-#: Engine/cs_par_dispatch.c:1332 Engine/cs_par_dispatch.c:1366
-#: Engine/cs_par_dispatch.c:1383 Engine/cs_par_dispatch.c:1405
-#: Engine/cs_par_dispatch.c:1432 Engine/cs_par_dispatch.c:1452
-#: Engine/cs_par_dispatch.c:1476 Engine/cs_par_dispatch.c:1566
-#: Engine/cs_par_dispatch.c:1621 Engine/cs_par_dispatch.c:1714
-#: Engine/cs_par_dispatch.c:1769 Engine/cs_par_dispatch.c:2597
+#: Engine/cs_par_dispatch.c:1003 Engine/cs_par_dispatch.c:1027
+#: Engine/cs_par_dispatch.c:1155 Engine/cs_par_dispatch.c:1251
+#: Engine/cs_par_dispatch.c:1405 Engine/cs_par_dispatch.c:1439
+#: Engine/cs_par_dispatch.c:1456 Engine/cs_par_dispatch.c:1478
+#: Engine/cs_par_dispatch.c:1506 Engine/cs_par_dispatch.c:1528
+#: Engine/cs_par_dispatch.c:1552 Engine/cs_par_dispatch.c:1644
+#: Engine/cs_par_dispatch.c:1699 Engine/cs_par_dispatch.c:1792
+#: Engine/cs_par_dispatch.c:1847 Engine/cs_par_dispatch.c:2681
 msgid "Invalid NULL Parameter dag"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:966
+#: Engine/cs_par_dispatch.c:1008
 #, fuzzy
 msgid "Failed to allocate dag"
 msgstr "fallita apertura del dispositivo"
 
-#: Engine/cs_par_dispatch.c:1017 Engine/cs_par_dispatch.c:1040
-#: Engine/cs_par_dispatch.c:1062 Engine/cs_par_dispatch.c:1064
+#: Engine/cs_par_dispatch.c:1060 Engine/cs_par_dispatch.c:1083
+#: Engine/cs_par_dispatch.c:1105 Engine/cs_par_dispatch.c:1107
 msgid "Invalid NULL Parameter dag_node"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1019
+#: Engine/cs_par_dispatch.c:1062
 #, fuzzy
 msgid "Invalid NULL Parameter instr"
 msgstr "nome dello strumento non valido"
 
-#: Engine/cs_par_dispatch.c:1021
+#: Engine/cs_par_dispatch.c:1064
 msgid "Invalid NULL Parameter insds"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1026 Engine/cs_par_dispatch.c:1048
+#: Engine/cs_par_dispatch.c:1069 Engine/cs_par_dispatch.c:1091
 msgid "Failed to allocate dag_node"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1043
+#: Engine/cs_par_dispatch.c:1086
 msgid "Invalid Parameter count must be greater than 0"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1175 Engine/cs_par_dispatch.c:1433
-#: Engine/cs_par_dispatch.c:2465 Engine/cs_par_dispatch.c:2571
-#: Engine/cs_par_dispatch.c:2598
+#: Engine/cs_par_dispatch.c:1229 Engine/cs_par_dispatch.c:1508
+#: Engine/cs_par_dispatch.c:2545 Engine/cs_par_dispatch.c:2655
+#: Engine/cs_par_dispatch.c:2682
 msgid "Invalid NULL Parameter chain"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1183
+#: Engine/cs_par_dispatch.c:1237
 #, c-format
 msgid "Failed to find semantic information for instrument '%i'"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1478
+#: Engine/cs_par_dispatch.c:1554
 #, fuzzy
 msgid "Invalid NULL Parameter node"
 msgstr "nome dell'opcode non valido"
 
-#: Engine/cs_par_dispatch.c:1480
+#: Engine/cs_par_dispatch.c:1556
 msgid "Invalid NULL Parameter update_hdl"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1569
+#: Engine/cs_par_dispatch.c:1647
 msgid "Invalid Parameter update_hdl is outside the DAG range"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:2417
+#: Engine/cs_par_dispatch.c:2497
 #, c-format
 msgid "Parallel Dump File not found at: %s for writing"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:2477
+#: Engine/cs_par_dispatch.c:2557
 msgid "Failed to allocate Dag2 cache entry"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:2527
+#: Engine/cs_par_dispatch.c:2610
 msgid "Cache Update\n"
 msgstr ""
 
@@ -474,12 +430,12 @@ msgstr "La variabile d'ambiente '%s' è stata fissata a"
 msgid "Creating search path cache for '%s':"
 msgstr "Creata cache del percorso di ricerca per '%s':"
 
-#: Engine/envvar.c:1082
+#: Engine/envvar.c:1083
 #, c-format
 msgid "internal error: csoundFileOpen(): invalid type: %d"
 msgstr "errore interno: csoundFileOpen(): tipo non valido: %d"
 
-#: Engine/envvar.c:1264
+#: Engine/envvar.c:1266
 #, c-format
 msgid "internal error: csoundCreateFileHandle(): invalid type: %d"
 msgstr "errore interno: csoundCreateFileHandle(): tipo non valido: %d"
@@ -540,48 +496,48 @@ msgstr "conteggio dei termini"
 msgid "expression syntax"
 msgstr "sintassi d'espressione"
 
-#: Engine/fgens.c:95
+#: Engine/fgens.c:91
 msgid "unknown GEN number"
 msgstr "numero di GEN sconosciuto"
 
-#: Engine/fgens.c:137
+#: Engine/fgens.c:133
 msgid "ftable does not exist"
 msgstr "ftable non esiste"
 
-#: Engine/fgens.c:142
+#: Engine/fgens.c:138
 #, c-format
 msgid "ftable %d now deleted\n"
 msgstr "la ftable %d viene cancellata\n"
 
-#: Engine/fgens.c:157 Engine/fgens.c:1597 Engine/fgens.c:1683
-#: Engine/fgens.c:1762 Engine/fgens.c:1878 Engine/fgens.c:1959
-#: Engine/fgens.c:2867
+#: Engine/fgens.c:153 Engine/fgens.c:1593 Engine/fgens.c:1679
+#: Engine/fgens.c:1758 Engine/fgens.c:1874 Engine/fgens.c:1955
+#: Engine/fgens.c:2909
 msgid "insufficient gen arguments"
 msgstr "gli argomenti della gen sono insufficienti"
 
-#: Engine/fgens.c:183 Opcodes/ftgen.c:116
+#: Engine/fgens.c:179 Opcodes/ftgen.c:116
 #, c-format
 msgid "Named gen \"%s\" not defined"
 msgstr "gen chiamata \"%s\" non definita"
 
-#: Engine/fgens.c:190
+#: Engine/fgens.c:186
 msgid "illegal gen number"
 msgstr "numero di gen non consentito"
 
-#: Engine/fgens.c:198
-msgid "deferred size for GENs 1, 23 or 28 only"
-msgstr "dimensione differita solo per GENs 1, 23 o 28"
+#: Engine/fgens.c:194
+msgid "deferred size for GENs 1, 23, 28 or 49 only"
+msgstr "dimensione differita solo per GENs 1, 23, 28 o 49"
 
-#: Engine/fgens.c:201 Engine/fgens.c:249
+#: Engine/fgens.c:197 Engine/fgens.c:245
 #, c-format
 msgid "ftable %d:\n"
 msgstr "ftable %d:\n"
 
-#: Engine/fgens.c:226 Engine/fgens.c:233
+#: Engine/fgens.c:222 Engine/fgens.c:229
 msgid "illegal table length"
 msgstr "lunghezza della tavola illegale"
 
-#: Engine/fgens.c:292 Engine/fgens.c:2219
+#: Engine/fgens.c:288 Engine/fgens.c:2215
 #, c-format
 msgid ""
 "ftable %d relocating due to size change\n"
@@ -590,308 +546,309 @@ msgstr ""
 "ftable %d ricollocata per cambiamento di dimensioni\n"
 "         gli strumenti attivi potrebbero esserne disturbati"
 
-#: Engine/fgens.c:350 Engine/fgens.c:471 Engine/fgens.c:555 Engine/fgens.c:636
-#: Engine/fgens.c:711 Engine/fgens.c:760 Engine/fgens.c:881 Engine/fgens.c:958
-#: Engine/fgens.c:1053 Engine/fgens.c:1097 Engine/fgens.c:1144
-#: Engine/fgens.c:1397 Engine/fgens.c:1459 Engine/fgens.c:1681
-#: Engine/fgens.c:1759 Engine/fgens.c:2114 Engine/fgens.c:2821
-#: Engine/fgens.c:2864
+#: Engine/fgens.c:346 Engine/fgens.c:467 Engine/fgens.c:551 Engine/fgens.c:632
+#: Engine/fgens.c:707 Engine/fgens.c:756 Engine/fgens.c:877 Engine/fgens.c:954
+#: Engine/fgens.c:1049 Engine/fgens.c:1093 Engine/fgens.c:1140
+#: Engine/fgens.c:1393 Engine/fgens.c:1455 Engine/fgens.c:1677
+#: Engine/fgens.c:1755 Engine/fgens.c:2110 Engine/fgens.c:2863
+#: Engine/fgens.c:2906
 msgid "using extended arguments\n"
 msgstr "uso di argomenti estesi\n"
 
-#: Engine/fgens.c:374
+#: Engine/fgens.c:370
 msgid "no coefs present"
 msgstr "non ci sono coefficienti"
 
-#: Engine/fgens.c:379 Engine/fgens.c:645 Engine/fgens.c:653
+#: Engine/fgens.c:375 Engine/fgens.c:641 Engine/fgens.c:649
 msgid "illegal x interval"
 msgstr "intervallo di x non consentito"
 
-#: Engine/fgens.c:408 Engine/fgens.c:557 Engine/fgens.c:638 Engine/fgens.c:883
-#: Engine/fgens.c:1354 Engine/fgens.c:2378 Engine/fgens.c:2694 Top/main.c:142
-#: util/cvanal.c:66 util/lpanal.c:398 util/pvanal.c:170
+#: Engine/fgens.c:404 Engine/fgens.c:553 Engine/fgens.c:634 Engine/fgens.c:879
+#: Engine/fgens.c:1350 Engine/fgens.c:2375 Engine/fgens.c:2690
+#: Engine/fgens.c:2810 Top/main.c:141 util/cvanal.c:66 util/lpanal.c:398
+#: util/pvanal.c:170
 msgid "insufficient arguments"
 msgstr "argomenti insufficienti"
 
-#: Engine/fgens.c:412 Engine/fgens.c:1359
+#: Engine/fgens.c:408 Engine/fgens.c:1355
 msgid "unknown srctable number"
 msgstr "numero di srctable sconosciuto"
 
-#: Engine/fgens.c:425
+#: Engine/fgens.c:421
 msgid "table size too large"
 msgstr "dimensione della tavola troppo grande"
 
-#: Engine/fgens.c:510 Engine/fgens.c:543
+#: Engine/fgens.c:506 Engine/fgens.c:539
 msgid "gen call has negative segment size:"
 msgstr "la gen chiamata ha dimensione del segmento negativa"
 
-#: Engine/fgens.c:512
+#: Engine/fgens.c:508
 #, fuzzy
 msgid "illegal input vals for gen call, beginning:"
 msgstr "La gen chiamata ha valori in input non consentiti, inizio:"
 
-#: Engine/fgens.c:578
+#: Engine/fgens.c:574
 msgid "negative segsiz"
 msgstr "segsize negativo"
 
-#: Engine/fgens.c:787
+#: Engine/fgens.c:783
 msgid "nh partials < 1"
 msgstr "parziale nh < 1"
 
-#: Engine/fgens.c:886
+#: Engine/fgens.c:882
 msgid "illegal xint value"
 msgstr "valore di xint non consentito"
 
-#: Engine/fgens.c:889
+#: Engine/fgens.c:885
 msgid "illegal xamp value"
 msgstr "valore di xamp non consentito"
 
-#: Engine/fgens.c:961
+#: Engine/fgens.c:957
 msgid "uneven number of args"
 msgstr "numero di argomenti irregolare"
 
-#: Engine/fgens.c:1081
+#: Engine/fgens.c:1077
 msgid "gen call has illegal x-ordinate values:"
 msgstr "la gen chiamata ha valori di ordinata x non consentiti"
 
-#: Engine/fgens.c:1099
+#: Engine/fgens.c:1095
 msgid "wrong number of args"
 msgstr "numero di argomenti sbagliato"
 
-#: Engine/fgens.c:1113
+#: Engine/fgens.c:1109
 msgid "a range given exceeds table length"
 msgstr "un intervallo dato supera la lunghezza della tavola"
 
-#: Engine/fgens.c:1120
+#: Engine/fgens.c:1116
 msgid "an input function does not exist"
 msgstr "una funzione in input non esiste"
 
-#: Engine/fgens.c:1253
+#: Engine/fgens.c:1249
 msgid "No such window!"
 msgstr "Non c'è una tale finestra!"
 
-#: Engine/fgens.c:1271
+#: Engine/fgens.c:1267
 msgid "Wrong number of input arguments"
 msgstr "Numero di argomenti in input sbagliato"
 
-#: Engine/fgens.c:1272
+#: Engine/fgens.c:1268
 msgid "unknown distribution"
 msgstr "distrbuzione sconosciuta"
 
-#: Engine/fgens.c:1321
+#: Engine/fgens.c:1317
 msgid "error opening ASCII file"
 msgstr "errore in apertura del file ASCII"
 
-#: Engine/fgens.c:1327
+#: Engine/fgens.c:1323
 #, c-format
 msgid "%ld elements in %s\n"
 msgstr "%ld elementi in %s\n"
 
-#: Engine/fgens.c:1338
+#: Engine/fgens.c:1334
 msgid "Numbers after table full in GEN23"
 msgstr "Numeri in eccesso dopo aver riempito la GEN23"
 
-#: Engine/fgens.c:1367
+#: Engine/fgens.c:1363
 msgid "table size must be the same of source table"
 msgstr ""
 "il formato della tavola deve essere la stessa della tavola di derivazione "
 "(source)"
 
-#: Engine/fgens.c:1439 Engine/fgens.c:1499
+#: Engine/fgens.c:1435 Engine/fgens.c:1495
 msgid "x coordinates must all be in increasing order:"
 msgstr "le coordinate x devono essere tutte in ordine crescente"
 
-#: Engine/fgens.c:1442 Engine/fgens.c:1501
+#: Engine/fgens.c:1438 Engine/fgens.c:1497
 msgid "x coordinate greater than function size:"
 msgstr "coordinata x maggiore della dimensione della tavola"
 
-#: Engine/fgens.c:1446
+#: Engine/fgens.c:1442
 msgid "illegal input val (y <= 0) for gen call, beginning:"
 msgstr "valore di input non valido (y <= 0) per la gen chiamata, inizio:"
 
-#: Engine/fgens.c:1519
+#: Engine/fgens.c:1515
 msgid "GEN28 requires zero table length"
 msgstr "GEN28 richiede lunghezza della tavola zero"
 
-#: Engine/fgens.c:1581
+#: Engine/fgens.c:1577
 msgid "could not open space file"
 msgstr "Impossibile aprire il file spazializzazione"
 
-#: Engine/fgens.c:1583
+#: Engine/fgens.c:1579
 msgid "Time values must be in increasing order"
 msgstr "I valori di tempo devono essere in ordine crescente"
 
-#: Engine/fgens.c:1604
+#: Engine/fgens.c:1600
 #, fuzzy
 msgid "GEN30: source ftable not found"
 msgstr "GEN30: source ftable non trovata"
 
-#: Engine/fgens.c:1687
+#: Engine/fgens.c:1683
 #, fuzzy
 msgid "GEN31: source ftable not found"
 msgstr "GEN31: source ftable non trovata"
 
-#: Engine/fgens.c:1795
+#: Engine/fgens.c:1791
 #, c-format
 msgid "GEN32: source ftable %d not found"
 msgstr "GEN32: source ftable %d non trovata"
 
-#: Engine/fgens.c:1889
+#: Engine/fgens.c:1885
 #, fuzzy
 msgid "GEN33: source ftable not found"
 msgstr "GEN33: source ftable non trovata"
 
-#: Engine/fgens.c:2057
+#: Engine/fgens.c:2053
 #, fuzzy
 msgid "unknown source table number"
 msgstr "numero di tavola source sconosciuto"
 
-#: Engine/fgens.c:2089
+#: Engine/fgens.c:2085
 msgid "Gen41: negative probability not allowed"
 msgstr ""
 
-#: Engine/fgens.c:2155 Opcodes/fareygen.c:70
+#: Engine/fgens.c:2151 Opcodes/fareygen.c:70
 #, c-format
 msgid "ftable %d: "
 msgstr "ftable %d: "
 
-#: Engine/fgens.c:2199
+#: Engine/fgens.c:2195
 #, c-format
 msgid "ftable %d:"
 msgstr "ftable %d:"
 
-#: Engine/fgens.c:2214
+#: Engine/fgens.c:2210
 #, c-format
 msgid "replacing previous ftable %d"
 msgstr "sostituisco la precedente ftable %d"
 
-#: Engine/fgens.c:2250 Engine/fgens.c:2337 Engine/fgens.c:2361
-#: Opcodes/gab/gab.c:578 Opcodes/gab/gab.c:632 Opcodes/midiops2.c:218
+#: Engine/fgens.c:2246 Engine/fgens.c:2334 Engine/fgens.c:2358
+#: Opcodes/gab/gab.c:580 Opcodes/gab/gab.c:634 Opcodes/midiops2.c:218
 #: Opcodes/midiops2.c:370 Opcodes/midiops2.c:452 Opcodes/uggab.c:1317
 #: Opcodes/uggab.c:1344 Opcodes/uggab.c:1364 Opcodes/uggab.c:1407
 #, c-format
 msgid "Invalid ftable no. %f"
 msgstr "ftable num. %f non valida"
 
-#: Engine/fgens.c:2255
+#: Engine/fgens.c:2251
 #, c-format
 msgid "deferred-size ftable %f illegal here"
 msgstr "la dimensione differita della ftable %f non è valida qui"
 
-#: Engine/fgens.c:2281
+#: Engine/fgens.c:2278 Engine/fgens.c:2848
 #, c-format
 msgid "Deferred load of '%s' failed"
 msgstr "fallito caricamento differito di '%s'"
 
-#: Engine/fgens.c:2343
+#: Engine/fgens.c:2340
 #, c-format
 msgid "Deferred-size ftable %f load not available at perf time."
 msgstr ""
 "Caricamento della ftable %f a dimensione differita non disponibile al "
 "momento d'esecuzione"
 
-#: Engine/fgens.c:2402
+#: Engine/fgens.c:2399
 #, c-format
 msgid "non-deferred ftable %d needs size %d\n"
 msgstr "ftable %d con dimensione non differita necessita di dimensione %d\n"
 
-#: Engine/fgens.c:2449 Opcodes/loscilx.c:62
+#: Engine/fgens.c:2446 Opcodes/loscilx.c:64
 #, c-format
 msgid "invalid sample format: %d"
 msgstr "formato campione non valido: %d"
 
-#: Engine/fgens.c:2457 Engine/fgens.c:2718
+#: Engine/fgens.c:2454 Engine/fgens.c:2714
 #, c-format
 msgid "channel %d illegal"
 msgstr "canale %d non consentito"
 
-#: Engine/fgens.c:2463
+#: Engine/fgens.c:2460
 msgid "deferred alloc\n"
 msgstr "allocazione differita\n"
 
-#: Engine/fgens.c:2471
+#: Engine/fgens.c:2468
 msgid "deferred size, but filesize unknown"
 msgstr "dimensione differita, ma dimensione del file sconosciuta"
 
-#: Engine/fgens.c:2474
+#: Engine/fgens.c:2471
 #, c-format
 msgid "  defer length %d\n"
 msgstr "lunghezza differita %d\n"
 
-#: Engine/fgens.c:2543
+#: Engine/fgens.c:2540
 msgid "GEN1: input file truncated by ftable size"
 msgstr "GEN1: file di input troncato dalla dimensione della ftable"
 
-#: Engine/fgens.c:2547
+#: Engine/fgens.c:2544
 #, c-format
 msgid "\tlooping endpoint %d exceeds ftsize %d\n"
 msgstr "\til punto finale del loop %d supera ftsize %d\n"
 
-#: Engine/fgens.c:2569
+#: Engine/fgens.c:2566
 msgid "GEN1 read error"
 msgstr "GEN1 errore in lettura"
 
-#: Engine/fgens.c:2574
+#: Engine/fgens.c:2571
 msgid "GEN1: aiff file truncated by ftable size"
 msgstr "GEN1: file aiff troncato dalla dimensione della ftable"
 
-#: Engine/fgens.c:2575
+#: Engine/fgens.c:2572
 #, c-format
 msgid "\taudio samps %d exceeds ftsize %d"
 msgstr "\tcampioni audio %d superano ftsize %d"
 
-#: Engine/fgens.c:2619
+#: Engine/fgens.c:2616
 msgid "wrong number of ftable arguments"
 msgstr "numero sbagliato di argomenti della ftable"
 
-#: Engine/fgens.c:2629 OOps/pstream.c:326
+#: Engine/fgens.c:2626 OOps/pstream.c:326
 msgid "Failed to load PVOC-EX file"
 msgstr "Caricamento del file PVOC-EX fallito"
 
-#: Engine/fgens.c:2640 InOut/midirecv.c:416 OOps/midiops.c:377
+#: Engine/fgens.c:2637 InOut/midirecv.c:416 OOps/midiops.c:377
 #: OOps/midiops.c:419 OOps/midiops.c:431
 #, fuzzy
 msgid "illegal channel number"
 msgstr "numero di canale non consentito"
 
-#: Engine/fgens.c:2658
+#: Engine/fgens.c:2655
 msgid "ftable size too small"
 msgstr "dimensione della ftable troppo piccola"
 
-#: Engine/fgens.c:2734 Opcodes/mp3in.c:79 Opcodes/mp3in.c:218
+#: Engine/fgens.c:2730 Opcodes/mp3in.c:80 Opcodes/mp3in.c:219
 msgid "Not enough memory\n"
 msgstr "emoria insufficiente\n"
 
-#: Engine/fgens.c:2831
+#: Engine/fgens.c:2873
 #, fuzzy
 msgid "gen51: invalid number of p-fields (too few grades)"
 msgstr "gen51: numero di p-fields non valido (troppi pochi gradi)"
 
-#: Engine/fgens.c:2871
+#: Engine/fgens.c:2913
 msgid "number of channels inconsistent with number of args"
 msgstr "numero di canali incongruente con il numero di argomenti"
 
-#: Engine/fgens.c:3030
+#: Engine/fgens.c:3072
 msgid "GEN53: invalid number of gen arguments"
 msgstr "GEN53: numero di argomenti della gen non valido"
 
-#: Engine/fgens.c:3040
+#: Engine/fgens.c:3082
 msgid "GEN53: invalid table length"
 msgstr "GEN53: lunghezza della tavola non valida"
 
-#: Engine/fgens.c:3044
+#: Engine/fgens.c:3086
 msgid "GEN53: invalid source table number"
 msgstr "GEN53: numero di source table non valido"
 
-#: Engine/fgens.c:3047
+#: Engine/fgens.c:3089
 msgid "GEN53: mode must be in the range 0 to 15"
 msgstr "GEN53: mode dev'essere nell'intervallo tra 0 e 15"
 
-#: Engine/fgens.c:3051
+#: Engine/fgens.c:3093
 msgid "GEN53: invalid source table length"
 msgstr "GEN53: numero di source table non valido"
 
-#: Engine/fgens.c:3056
+#: Engine/fgens.c:3098
 msgid "GEN53: invalid window table"
 msgstr "GEN53: window table non valida"
 
@@ -915,33 +872,33 @@ msgstr "Strumento %s silenziato\n"
 msgid "Instrument %d muted\n"
 msgstr "Strumento %d silenziato\n"
 
-#: Engine/insert.c:103 Engine/insert.c:1249
+#: Engine/insert.c:103 Engine/insert.c:1301
 #, fuzzy, c-format
 msgid "instr %s expects midi event data, cannot run from score\n"
 msgstr "lo strumento %s aspetta eventi midi, non può suonare dalla score\n"
 
-#: Engine/insert.c:106 Engine/insert.c:1252
+#: Engine/insert.c:106 Engine/insert.c:1304
 #, c-format
 msgid "instr %d expects midi event data, cannot run from score\n"
 msgstr "lo strumento %d aspetta eventi midi, non può suonare dalla score\n"
 
-#: Engine/insert.c:115 Engine/insert.c:279 Engine/insert.c:1234
+#: Engine/insert.c:115 Engine/insert.c:279 Engine/insert.c:1286
 #, c-format
 msgid "cannot allocate last note because it exceeds 100%% of cpu time"
 msgstr ""
 "impossibile allocare l'ultima nota perché supera il 100%% di tempo di cpu"
 
-#: Engine/insert.c:121 Engine/insert.c:285 Engine/insert.c:1239
+#: Engine/insert.c:121 Engine/insert.c:285 Engine/insert.c:1291
 msgid "cannot allocate last note because it exceeds instr maxalloc"
 msgstr ""
 "impossibile allocare l'ultima nota perché supera maxalloc dello strumento"
 
-#: Engine/insert.c:137 Engine/insert.c:305 Engine/insert.c:1270
+#: Engine/insert.c:137 Engine/insert.c:305 Engine/insert.c:1322
 #, fuzzy, c-format
 msgid "new alloc for instr %s:\n"
 msgstr "nuova allocazione per lo strumento %d:\n"
 
-#: Engine/insert.c:139 Engine/insert.c:307 Engine/insert.c:1272
+#: Engine/insert.c:139 Engine/insert.c:307 Engine/insert.c:1324
 #, c-format
 msgid "new alloc for instr %d:\n"
 msgstr "nuova allocazione per lo strumento %d:\n"
@@ -956,12 +913,12 @@ msgstr "lo strumento %d usa %d p-fields ma gliene sono stati dati %d"
 msgid "instr %d uses %d p-fields but is given %d"
 msgstr "lo strumento %d usa %d p-fields ma gliene sono stati dati %d"
 
-#: Engine/insert.c:251 Engine/insert.c:463
+#: Engine/insert.c:251 Engine/insert.c:482
 #, fuzzy, c-format
 msgid "instr %s now active:\n"
 msgstr "strumento %d ora attivo:\n"
 
-#: Engine/insert.c:253 Engine/insert.c:465
+#: Engine/insert.c:253 Engine/insert.c:484
 #, c-format
 msgid "instr %d now active:\n"
 msgstr "strumento %d ora attivo:\n"
@@ -981,26 +938,26 @@ msgstr "attivo lo strumento %d\n"
 msgid "MIDI note overlaps with key %d on same channel"
 msgstr "La nota MIDI si sovrappone alla key %d sullo stesso canale"
 
-#: Engine/insert.c:566
+#: Engine/insert.c:585
 #, fuzzy, c-format
 msgid "removed instance of instr %s\n"
 msgstr "rimossa l'istanza dello strumento %d\n"
 
-#: Engine/insert.c:568
+#: Engine/insert.c:587
 #, c-format
 msgid "removed instance of instr %d\n"
 msgstr "rimossa l'istanza dello strumento %d\n"
 
-#: Engine/insert.c:691
+#: Engine/insert.c:710
 msgid "inactive allocs returned to freespace\n"
 msgstr "liberate le allocazioni inattive\n"
 
-#: Engine/insert.c:716
+#: Engine/insert.c:735
 #, fuzzy, c-format
 msgid "could not find playing instr %f\n"
 msgstr "non posso trovare lo strumento %f che suona indefinitamente\n"
 
-#: Engine/insert.c:729
+#: Engine/insert.c:748
 msgid ""
 "\n"
 "INIT ERROR: "
@@ -1008,22 +965,22 @@ msgstr ""
 "\n"
 "ERRORE di INIZIALIZZAZIONE: "
 
-#: Engine/insert.c:742
+#: Engine/insert.c:761
 #, c-format
 msgid "INIT ERROR in instr %d (opcode %s): "
 msgstr "ERRORE di INIZIALIZZAZIONE dello strumento %d (opcode %s): "
 
-#: Engine/insert.c:745
+#: Engine/insert.c:764
 #, c-format
 msgid "INIT ERROR in instr %d (subinstr %d): "
 msgstr "ERRORE di INIZIALIZZAZIONE nello strumento %d (subinstr %d): "
 
-#: Engine/insert.c:749
+#: Engine/insert.c:768
 #, c-format
 msgid "INIT ERROR in instr %d: "
 msgstr "ERRORE di INIZIALIZZAZIONE nello strumento %d: "
 
-#: Engine/insert.c:767
+#: Engine/insert.c:786
 msgid ""
 "\n"
 "PERF ERROR: "
@@ -1031,79 +988,79 @@ msgstr ""
 "\n"
 "ERRORE in ESECUZIONE: "
 
-#: Engine/insert.c:780
+#: Engine/insert.c:799
 #, c-format
 msgid "PERF ERROR in instr %d (opcode %s): "
 msgstr "ERRORE in ESECUZIONE nello strumento %d (opcode %s): "
 
-#: Engine/insert.c:783
+#: Engine/insert.c:802
 #, c-format
 msgid "PERF ERROR in instr %d (subinstr %d): "
 msgstr "ERRORE in ESECUZIONE nello strumento %d (subinstr %d): "
 
-#: Engine/insert.c:787
+#: Engine/insert.c:806
 #, c-format
 msgid "PERF ERROR in instr %d: "
 msgstr "ERRORE in ESECUZIONE nello strumento %d: "
 
-#: Engine/insert.c:792
+#: Engine/insert.c:811
 msgid "   note aborted\n"
 msgstr "   nota cancellata\n"
 
-#: Engine/insert.c:820
+#: Engine/insert.c:839
 msgid "subinstr: number of output args greater than nchnls"
 msgstr ""
 "subinstr: numero di argomenti dell'output maggiore del numero dei canali"
 
-#: Engine/insert.c:861
+#: Engine/insert.c:880
 msgid "subinstr: too many p-fields"
 msgstr "subinstr: troppi p-fields"
 
-#: Engine/insert.c:920
+#: Engine/insert.c:939
 #, c-format
 msgid "%s: invalid local ksmps value: %d"
 msgstr "%s: valore locale di ksmps non valido: %d"
 
-#: Engine/insert.c:1040 OOps/bus.c:835 Opcodes/stackops.c:293
+#: Engine/insert.c:1062 OOps/bus.c:835 Opcodes/stackops.c:286
 #, c-format
 msgid "%s: not initialised"
 msgstr "%s: non inizializzato"
 
-#: Engine/insert.c:1169
+#: Engine/insert.c:1221
 #, c-format
 msgid "setksmps: invalid ksmps value: %d"
 msgstr "setksmps: valore do ksmps non valido: %d"
 
-#: Engine/insert.c:1225
+#: Engine/insert.c:1277
 #, c-format
 msgid "schedule event ignored. instr %d undefined\n"
 msgstr "evento programmato ignorato. Lo strumento %d non è definito\n"
 
-#: Engine/insert.c:1303
+#: Engine/insert.c:1355
 #, fuzzy, c-format
 msgid "instr %s pmax = %d, note pcnt = %d"
 msgstr "strumento %d pmax = %d, note pcnt = %d"
 
-#: Engine/insert.c:1306
+#: Engine/insert.c:1358
 #, c-format
 msgid "instr %d pmax = %d, note pcnt = %d"
 msgstr "strumento %d pmax = %d, note pcnt = %d"
 
-#: Engine/insert.c:1314
+#: Engine/insert.c:1366
 #, c-format
 msgid "psave beg at %p\n"
 msgstr "psave inizia a %p\n"
 
-#: Engine/insert.c:1322
+#: Engine/insert.c:1374
 #, c-format
 msgid "   ending at %p\n"
 msgstr "   finisce a %p\n"
 
-#: Engine/insert.c:1466
+#: Engine/insert.c:1518
 msgid "subinstr: not initialised"
 msgstr "subinstr: non inizializzato"
 
-#: Engine/insert.c:1723
+#: Engine/insert.c:1855
 #, c-format
 msgid ""
 "instr %d allocated at %p\n"
@@ -1112,30 +1069,30 @@ msgstr ""
 "strumento %d allocato a %p\n"
 "\tlclbas %p, opds %p\n"
 
-#: Engine/insert.c:1740
+#: Engine/insert.c:1872
 #, c-format
 msgid "op %d (%s) allocated at %p\n"
 msgstr "op %d (%s) allocato a %p\n"
 
-#: Engine/insert.c:1766
+#: Engine/insert.c:1898
 msgid "null iopadr"
 msgstr "null iopadr"
 
-#: Engine/insert.c:1777
+#: Engine/insert.c:1909
 msgid "null opadr"
 msgstr "null iopadr"
 
-#: Engine/insert.c:1834
+#: Engine/insert.c:1966
 #, fuzzy
 msgid "inconsistent opds total"
 msgstr "totale opds inconsistente"
 
-#: Engine/insert.c:1879
+#: Engine/insert.c:2011
 #, fuzzy, c-format
 msgid "Instrument %s is still active"
 msgstr "Strumento %s ancora attivo"
 
-#: Engine/insert.c:1882
+#: Engine/insert.c:2014
 #, fuzzy, c-format
 msgid "Instrument %d is still active"
 msgstr "Strumento %d ancora attivo"
@@ -1169,7 +1126,7 @@ msgstr "opcode sconosciuto %c"
 msgid "multiple string p-fields"
 msgstr "multiple stringhe p-fields"
 
-#: Engine/linevent.c:273 Engine/rdorch.c:1157
+#: Engine/linevent.c:273 Engine/rdorch.c:1184
 #, fuzzy
 msgid "unmatched quotes"
 msgstr "virgolette senza corrispondenza"
@@ -1234,27 +1191,27 @@ msgstr "event_i: errore nella creazione dell'evento '%c'"
 msgid "memory allocate failure for %lu"
 msgstr "allocazione di memoria fallita per %lu"
 
-#: Engine/memfiles.c:112
+#: Engine/memfiles.c:113
 #, c-format
 msgid "cannot load %s\n"
 msgstr "impossibile caricare %s\n"
 
-#: Engine/memfiles.c:118
+#: Engine/memfiles.c:119
 #, c-format
 msgid "cannot load %s, or SADIR undefined\n"
 msgstr "impossibile caricare %s, oppure SADIR non definita\n"
 
-#: Engine/memfiles.c:130
+#: Engine/memfiles.c:131
 #, c-format
 msgid "error processing file %s\n"
 msgstr "errore nel processamento del file %s\n"
 
-#: Engine/memfiles.c:136 Engine/memfiles.c:319
+#: Engine/memfiles.c:137 Engine/memfiles.c:320
 #, c-format
 msgid "file %s (%ld bytes) loaded into memory\n"
 msgstr "file %s (%ld bytes) caricato in memoria\n"
 
-#: Engine/memfiles.c:199
+#: Engine/memfiles.c:200
 msgid ""
 "PVOCEX_LoadFile(): error:\n"
 "    "
@@ -1262,57 +1219,57 @@ msgstr ""
 "PVOCEX_LoadFile(): errore:\n"
 "    "
 
-#: Engine/memfiles.c:216
+#: Engine/memfiles.c:217
 msgid "Empty or NULL file name"
 msgstr "nome di file vuoto o NULL"
 
-#: Engine/memfiles.c:234
+#: Engine/memfiles.c:235
 #, c-format
 msgid "unable to open pvocex file %s: %s"
 msgstr "non riesco ad aprire il file pvocex %s: %s"
 
-#: Engine/memfiles.c:240
+#: Engine/memfiles.c:241
 #, c-format
 msgid "pvoc-ex file %s is not 32bit floats"
 msgstr "il file pvoc-ex %s non è 32bit floats"
 
-#: Engine/memfiles.c:246
+#: Engine/memfiles.c:247
 #, c-format
 msgid "pvoc-ex file %s not in AMP_FREQ format"
 msgstr "il file pvoc-ex %s non è nel formato AMP_FREQ"
 
-#: Engine/memfiles.c:252
+#: Engine/memfiles.c:253
 #, c-format
 msgid "pvoc-ex file %s is empty!"
 msgstr "il file pvoc-ex %s è vuoto!"
 
-#: Engine/memfiles.c:282
+#: Engine/memfiles.c:283
 #, c-format
 msgid "error reading pvoc-ex file %s"
 msgstr "errore in lettura del file pvoc-ex %s"
 
-#: Engine/memfiles.c:286
+#: Engine/memfiles.c:287
 #, c-format
 msgid "error reading pvoc-ex file %s after %d frames"
 msgstr "errore in lettura del file pvoc-ex %s dopo %d frames"
 
-#: Engine/memfiles.c:291 Opcodes/pvinterp.c:71 Opcodes/pvinterp.c:174
-#: Opcodes/pvinterp.c:346 Opcodes/ugens9.c:97 Opcodes/vpvoc.c:201
+#: Engine/memfiles.c:292 Opcodes/pvinterp.c:71 Opcodes/pvinterp.c:173
+#: Opcodes/pvinterp.c:344 Opcodes/ugens9.c:97 Opcodes/vpvoc.c:202
 #, c-format
 msgid "%s's srate = %8.0f, orch's srate = %8.0f"
 msgstr "%s's srate = %8.0f, orch's srate = %8.0f"
 
-#: Engine/memfiles.c:389
+#: Engine/memfiles.c:390
 #, c-format
 msgid "csoundLoadSoundFile(): failed to open '%s'"
 msgstr "csoundLoadSoundFile(): fallita l'apertura di '%s'"
 
-#: Engine/memfiles.c:444
+#: Engine/memfiles.c:445
 #, c-format
 msgid "csoundLoadSoundFile(): error reading '%s'"
 msgstr "csoundLoadSoundFile(): errore in lettura di '%s'"
 
-#: Engine/memfiles.c:450
+#: Engine/memfiles.c:451
 #, c-format
 msgid ""
 "File '%s' (sr = %d Hz, %d channel(s), %lu sample frames) loaded into memory\n"
@@ -1320,98 +1277,93 @@ msgstr ""
 "File '%s' (sr = %d Hz, %d canale\\\\i, %lu sample frames) caricati in "
 "memoria\n"
 
-#: Engine/musmon.c:79
+#: Engine/musmon.c:81
 #, c-format
 msgid "Elapsed time at %s: real: %.3fs, CPU: %.3fs\n"
 msgstr "Tempo impiegato %s: reale: %.3fs, CPU: %.3fs\n"
 
-#: Engine/musmon.c:106
+#: Engine/musmon.c:108
 msgid "illegal istartempo value"
 msgstr "valore di istartempo non consentito"
 
-#: Engine/musmon.c:109
+#: Engine/musmon.c:111
 msgid "Beat mode not in force"
 msgstr "Modo beat non attivato"
 
-#: Engine/musmon.c:182 Top/main.c:122
+#: Engine/musmon.c:184 Top/main.c:121
 #, c-format
 msgid "Csound version %s beta (double samples) %s\n"
 msgstr "Csound versione %s beta (double samples) %s\n"
 
-#: Engine/musmon.c:185 Top/main.c:125
+#: Engine/musmon.c:187 Top/main.c:124
 #, c-format
 msgid "Csound version %s (double samples) %s\n"
 msgstr "Csound versione %s (double samples) %s\n"
 
-#: Engine/musmon.c:190 Top/main.c:114
+#: Engine/musmon.c:192 Top/main.c:113
 #, c-format
 msgid "Csound version %s beta (float samples) %s\n"
 msgstr "Csound versione %s beta (float samples) %s\n"
 
-#: Engine/musmon.c:193 Top/main.c:117
+#: Engine/musmon.c:195 Top/main.c:116
 #, c-format
 msgid "Csound version %s (float samples) %s\n"
 msgstr "Csound versione %s (float samples) %s\n"
 
-#: Engine/musmon.c:218
+#: Engine/musmon.c:220
 msgid "orch now loaded\n"
 msgstr "orchestra ora caricata\n"
 
-#: Engine/musmon.c:243
+#: Engine/musmon.c:245
 #, fuzzy
 msgid "k-period aligned audio buffering\n"
 msgstr "k-period allineato all'audio buffering\n"
 
-#: Engine/musmon.c:259
+#: Engine/musmon.c:261
 #, c-format
 msgid "audio buffered in %d sample-frame blocks\n"
 msgstr "audio bufferizzato in blocchi di %d sample-frame\n"
 
-#: Engine/musmon.c:276 Top/main.c:395
-#, c-format
-msgid "cannot reopen %s"
-msgstr "Impossibile riaprire %s"
-
-#: Engine/musmon.c:287
+#: Engine/musmon.c:283
 msgid "using Cscore processing\n"
 msgstr "uso il processamento di Cscore\n"
 
-#: Engine/musmon.c:290
+#: Engine/musmon.c:286
 msgid "cannot create cscore.out"
 msgstr "impossibile creare cscore.out"
 
-#: Engine/musmon.c:303
+#: Engine/musmon.c:299
 msgid "cannot reopen cscore.out"
 msgstr "impossibile raprire cscore.out"
 
-#: Engine/musmon.c:307 Engine/musmon.c:315
+#: Engine/musmon.c:303
 msgid "cannot reopen cscore.srt"
 msgstr "impossibile raprire cscore.srt"
 
-#: Engine/musmon.c:309
+#: Engine/musmon.c:305
 #, fuzzy
 msgid "sorting cscore.out ..\n"
 msgstr "sistemo cscore.out ..\n"
 
-#: Engine/musmon.c:313 Top/main.c:409
+#: Engine/musmon.c:311 Top/main.c:401
 msgid "\t... done\n"
 msgstr "\t... fatto\n"
 
-#: Engine/musmon.c:317
+#: Engine/musmon.c:312
 msgid "playing from cscore.srt\n"
 msgstr "suono da cscore.srt\n"
 
-#: Engine/musmon.c:321 Engine/musmon.c:453 Engine/musmon.c:1021
-#: Engine/musmon.c:1225
+#: Engine/musmon.c:316 Engine/musmon.c:446 Engine/musmon.c:1015
+#: Engine/musmon.c:1216
 #, c-format
 msgid "SECTION %d:\n"
 msgstr "SEZIONE %d:\n"
 
-#: Engine/musmon.c:397
+#: Engine/musmon.c:390
 msgid "end of score.\t\t   overall amps:"
 msgstr "fine della score.\t\t   ampiezza totale:"
 
-#: Engine/musmon.c:408
+#: Engine/musmon.c:401
 msgid ""
 "\n"
 "\t   overall samples out of range:"
@@ -1419,7 +1371,7 @@ msgstr ""
 "\n"
 "\t   numero di campioni fuori dall'intervallo (range):"
 
-#: Engine/musmon.c:412
+#: Engine/musmon.c:405
 #, c-format
 msgid ""
 "\n"
@@ -1428,113 +1380,113 @@ msgstr ""
 "\n"
 "%d errori nell'esecuzione\n"
 
-#: Engine/musmon.c:414
+#: Engine/musmon.c:407
 msgid "end of performance"
 msgstr "fine dell'esecuzione"
 
-#: Engine/musmon.c:428
+#: Engine/musmon.c:421
 msgid "no sound written to disk\n"
 msgstr "nessun suono scritto sul disco\n"
 
-#: Engine/musmon.c:443
+#: Engine/musmon.c:436
 #, c-format
 msgid "%c\tbeep!\n"
 msgstr "%c\tbeep!\n"
 
-#: Engine/musmon.c:509 Engine/musmon.c:555
+#: Engine/musmon.c:502 Engine/musmon.c:548
 msgid "\t number of samples out of range:"
 msgstr "\t numero di campioni fuori dall'intervallo:"
 
-#: Engine/musmon.c:548
+#: Engine/musmon.c:541
 #, c-format
 msgid "end of section %d\t sect peak amps:"
 msgstr "fine della sezione %d\t picchi d'ampiezza della sezione:"
 
-#: Engine/musmon.c:550
+#: Engine/musmon.c:543
 msgid "end of lplay event list\t      peak amps:"
 msgstr "fine lista eventi di lplay\t      picco d'ampiezza:"
 
-#: Engine/musmon.c:614 Engine/musmon.c:639
+#: Engine/musmon.c:607 Engine/musmon.c:632
 #, c-format
 msgid " - note deleted. instr %s undefined"
 msgstr " - nota cancellata. strumento %s non definito"
 
-#: Engine/musmon.c:618
+#: Engine/musmon.c:611
 #, c-format
 msgid "Setting instrument %s %s\n"
 msgstr "Fisso lo strumento %s %s\n"
 
-#: Engine/musmon.c:619 Engine/musmon.c:632
+#: Engine/musmon.c:612 Engine/musmon.c:625
 #: Opcodes/fluidOpcodes/fluidOpcodes.c:207
 #: Opcodes/fluidOpcodes/fluidOpcodes.c:208
 msgid "off"
 msgstr "off"
 
-#: Engine/musmon.c:619 Engine/musmon.c:632
+#: Engine/musmon.c:612 Engine/musmon.c:625
 #: Opcodes/fluidOpcodes/fluidOpcodes.c:207
 #: Opcodes/fluidOpcodes/fluidOpcodes.c:208
 msgid "on"
 msgstr "on"
 
-#: Engine/musmon.c:627 Engine/musmon.c:666
+#: Engine/musmon.c:620 Engine/musmon.c:659
 #, c-format
 msgid " - note deleted. instr %d(%d) undefined"
 msgstr " - nota cancellata. strumento %d(%d) non definito"
 
-#: Engine/musmon.c:631
+#: Engine/musmon.c:624
 #, c-format
 msgid "Setting instrument %d %s\n"
 msgstr "Fisso lo strumento %d %s\n"
 
-#: Engine/musmon.c:657
+#: Engine/musmon.c:650
 #, c-format
 msgid " - note deleted.  i%d (%s) had %d init errors"
 msgstr " - nota cancellata.  i%d (%s) ha %d errori di inizializzazione"
 
-#: Engine/musmon.c:687
+#: Engine/musmon.c:680
 #, c-format
 msgid " - note deleted.  i%d had %d init errors"
 msgstr " - nota cancellata.  i%d ha %d errori di inizializzazione"
 
-#: Engine/musmon.c:708
+#: Engine/musmon.c:701
 #, c-format
 msgid "time advanced %5.3f beats by score request\n"
 msgstr "avanzamento del tempo di %5.3f beats su richiesta della score\n"
 
-#: Engine/musmon.c:725
+#: Engine/musmon.c:719
 #, c-format
 msgid "\t\t   T%7.3f - note deleted. "
 msgstr "\t\t   T%7.3f - nota cancellata. "
 
-#: Engine/musmon.c:729
+#: Engine/musmon.c:723
 #, fuzzy, c-format
 msgid "instr %s had %d init errors\n"
 msgstr "lo strumento %d ha %d errori di inizializzazione\n"
 
-#: Engine/musmon.c:731
+#: Engine/musmon.c:725
 #, c-format
 msgid "instr %d had %d init errors\n"
 msgstr "lo strumento %d ha %d errori di inizializzazione\n"
 
-#: Engine/musmon.c:822
+#: Engine/musmon.c:816
 msgid "terminating.\n"
 msgstr "finito.\n"
 
-#: Engine/musmon.c:908
+#: Engine/musmon.c:902
 #, c-format
 msgid "error in score.  illegal opcode %c (ASCII %d)\n"
 msgstr "errore nella score.  opcode illecito %c (ASCII %d)\n"
 
-#: Engine/musmon.c:1135
+#: Engine/musmon.c:1129
 msgid "insert_score_event(): invalid instrument number or name\n"
 msgstr "insert_score_event(): numero o nome dello strumento non valido\n"
 
-#: Engine/musmon.c:1155
+#: Engine/musmon.c:1149
 #, c-format
 msgid "insert_score_event(): unknown opcode: %c\n"
 msgstr "insert_score_event(): opcode sconosciuto: %c\n"
 
-#: Engine/musmon.c:1178
+#: Engine/musmon.c:1172
 msgid "insert_score_event(): insufficient p-fields\n"
 msgstr "insert_score_event(): p-fields insufficienti\n"
 
@@ -1557,28 +1509,48 @@ msgstr "Impossibile trovare lo strumento %d"
 msgid "cannot find the specified instrument or opcode"
 msgstr "impossibile trovare lo strumento o l'opcode specificato"
 
-#: Engine/new_orc_parser.c:74 Engine/rdorch.c:488
+#: Engine/new_orc_parser.c:91
+#, fuzzy
+msgid "Unmatched #ifdef\n"
+msgstr "#idef senza corrispondenza"
+
+#: Engine/otran.c:149 Engine/symbtab.c:413
 #, c-format
-msgid "cannot open orch file %s"
-msgstr "impossibile aprire l'orchestra file %s"
+msgid "invalid input type for opcode %s"
+msgstr "tipo di input non valido per l'opcode %s"
+
+#: Engine/otran.c:154 Engine/symbtab.c:418
+#, c-format
+msgid "too many input args for opcode %s"
+msgstr "troppi argomenti in input per l'opcode %s"
 
-#: Engine/otran.c:312 Engine/otran.c:319
+#: Engine/otran.c:169 Engine/symbtab.c:433
+#, c-format
+msgid "too many output args for opcode %s"
+msgstr "troppi argomenti in output per l'opcode %s"
+
+#: Engine/otran.c:194 Engine/symbtab.c:458
+#, c-format
+msgid "invalid output type for opcode %s"
+msgstr "tipo di output non valido per l'opcode %s"
+
+#: Engine/otran.c:325 Engine/otran.c:332
 msgid "missing instrument number or name"
 msgstr "manca il numero o il nome dello strumento"
 
-#: Engine/otran.c:324
+#: Engine/otran.c:337
 msgid "illegal instr number"
 msgstr "numero di strumento illecito"
 
-#: Engine/otran.c:374
+#: Engine/otran.c:388
 msgid "No opcode name"
 msgstr "Non c'è il nome dell'opcode"
 
-#: Engine/otran.c:379 Engine/symbtab.c:501
+#: Engine/otran.c:393 Engine/symbtab.c:538
 msgid "invalid name for opcode"
 msgstr "nome dell'opcode non valido"
 
-#: Engine/otran.c:383
+#: Engine/otran.c:397
 #, c-format
 msgid ""
 "opcode declaration error (usage: opcode name, outtypes, intypes) -- opcode %s"
@@ -1586,54 +1558,54 @@ msgstr ""
 "errore dichiarazione opcode (uso: nome opcode, tipi di out, tipi di input) "
 "-- opcode %s"
 
-#: Engine/otran.c:394 Engine/symbtab.c:511
+#: Engine/otran.c:408 Engine/symbtab.c:548
 #, c-format
 msgid "cannot redefine %s"
 msgstr "Impossibile ridefinire %s"
 
-#: Engine/otran.c:398 Engine/symbtab.c:516
+#: Engine/otran.c:412 Engine/symbtab.c:553
 #, c-format
 msgid "WARNING: redefined opcode: %s\n"
 msgstr "ATTENZIONE: opcode ridefinito: %s\n"
 
-#: Engine/otran.c:489
+#: Engine/otran.c:503
 msgid "string constant used as output"
 msgstr "stringa costante usata come output"
 
-#: Engine/otran.c:520
+#: Engine/otran.c:534
 msgid "Missing endin"
 msgstr "Manca endin"
 
-#: Engine/otran.c:584
+#: Engine/otran.c:599
 msgid "perf-pass statements illegal in header blk"
 msgstr "dichiarazione d'esecuzione non valida nel blocco header"
 
-#: Engine/otran.c:588
+#: Engine/otran.c:603
 #, c-format
 msgid "%d syntax errors in orchestra.  compilation invalid"
 msgstr "%d errore\\i di sintassi nell'orchestra.  Compilazione non valida"
 
-#: Engine/otran.c:1238
+#: Engine/otran.c:1257
 msgid "bad value for 0dbfs: must be positive."
 msgstr "pessimo valore per 0dbfs: deve essere positivo."
 
-#: Engine/otran.c:1248
+#: Engine/otran.c:1267
 #, c-format
 msgid "sample rate overrides: esr = %7.4f, ekr = %7.4f, ksmps = %d\n"
 msgstr ""
 "frequenza di campionamento (sr) soprascritta: esr = %7.4f, ekr = %7.4f, "
 "ksmps = %d\n"
 
-#: Engine/otran.c:1320
+#: Engine/otran.c:1339
 msgid "internal error: string constant outarg"
 msgstr "errore interno: stringa costante outarg"
 
-#: Engine/otran.c:1346
+#: Engine/otran.c:1365
 #, c-format
 msgid "i%d pset args != pmax"
 msgstr "i%d pset args != pmax"
 
-#: Engine/otran.c:1409
+#: Engine/otran.c:1428
 #, c-format
 msgid ""
 "sr = %.7g, kr = %.7g, ksmps = %.7g\n"
@@ -1642,278 +1614,314 @@ msgstr ""
 "sr = %.7g, kr = %.7g, ksmps = %.7g\n"
 "errore:"
 
-#: Engine/otran.c:1442
+#: Engine/otran.c:1461
 msgid "header init errors"
 msgstr "l'header ha errori in inizializzazione"
 
-#: Engine/rdorch.c:166
+#: Engine/rdorch.c:169
 msgid "ungetorchar(): buffer overflow"
 msgstr "ungetorchar(): buffer overflow"
 
-#: Engine/rdorch.c:330
+#: Engine/rdorch.c:348
 msgid "Unexpected end of orchestra file"
 msgstr "Fine inattesa del file orchestra"
 
-#: Engine/rdorch.c:484
+#: Engine/rdorch.c:431 Engine/sread.c:758
+#, c-format
+msgid "Macro definition for %*s\n"
+msgstr "Definizione di macro per %*s\n"
+
+#: Engine/rdorch.c:434
+msgid "Invalid macro name for --omacro"
+msgstr "Nome di macro non valido per --omacro"
+
+#: Engine/rdorch.c:502
 msgid "orch compiler:\n"
 msgstr "compilatore dell'orchestra:\n"
 
-#: Engine/rdorch.c:490
+#: Engine/rdorch.c:520
 #, c-format
-msgid "cannot find end of file %s"
-msgstr "impossibile trovare la fine del file %s"
-
-#: Engine/rdorch.c:492
-#, c-format
-msgid "ftell error on %s"
-msgstr "errore ftell in %s"
+msgid "cannot open orch file %s"
+msgstr "impossibile aprire l'orchestra file %s"
 
-#: Engine/rdorch.c:657 Engine/sread.c:1572
+#: Engine/rdorch.c:684 Engine/sread.c:1584
 #, c-format
 msgid "Macro definition for %s\n"
 msgstr "Definizione di macro per %s\n"
 
-#: Engine/rdorch.c:748
+#: Engine/rdorch.c:716 Engine/sread.c:1607
+msgid "macro error\n"
+msgstr "errore macro\n"
+
+#: Engine/rdorch.c:775
 #, c-format
 msgid "Cannot open #include'd file %s\n"
 msgstr "Impossibile aprire il file #include %s\n"
 
-#: Engine/rdorch.c:797
+#: Engine/rdorch.c:824
 #, fuzzy
 msgid "unmatched #ifdef"
 msgstr "#ifdef senza corrispondenza"
 
-#: Engine/rdorch.c:808
+#: Engine/rdorch.c:835
 #, fuzzy
 msgid "Unmatched #else"
 msgstr "#else senza corrispondenza"
 
-#: Engine/rdorch.c:822
+#: Engine/rdorch.c:849
 #, fuzzy
 msgid "Unmatched #endif"
 msgstr "#endif senza corrispondenza"
 
-#: Engine/rdorch.c:875
+#: Engine/rdorch.c:872 Engine/sread.c:1694
+#, c-format
+msgid "macro %s undefined\n"
+msgstr "macro %s non definita\n"
+
+#: Engine/rdorch.c:886 Engine/sread.c:286
+msgid "Undefining undefined macro"
+msgstr "Libero la macro non definita"
+
+#: Engine/rdorch.c:902
 msgid "Unexpected # character"
 msgstr "Carattere # inatteso"
 
-#: Engine/rdorch.c:877
+#: Engine/rdorch.c:904
 #, c-format
 msgid "Unknown # option: '%s'"
 msgstr "Opzione # sconosciuta: '%s'"
 
-#: Engine/rdorch.c:903 Engine/sread.c:394
+#: Engine/rdorch.c:928 Engine/sread.c:380
+#, c-format
+msgid "Undefined macro: '%s'"
+msgstr "macro non definita: '%s'"
+
+#: Engine/rdorch.c:930 Engine/sread.c:378
 msgid "Macro expansion symbol ($) without macro name"
 msgstr "Simbolo di espansione macro ($) senza il nome della macro"
 
-#: Engine/rdorch.c:908 Engine/sread.c:400
+#: Engine/rdorch.c:935 Engine/sread.c:384
 #, c-format
 msgid "$%s matches macro name $%s"
 msgstr "$%s corrisponde al nome di macro $%s"
 
-#: Engine/rdorch.c:925 Engine/sread.c:417
+#: Engine/rdorch.c:952 Engine/sread.c:401
 msgid "Syntax error in macro call"
 msgstr "Errore di sintassi nella macro chiamata"
 
-#: Engine/rdorch.c:975
+#: Engine/rdorch.c:967
+#, c-format
+msgid ""
+"Missing argument terminator\n"
+"%.98s"
+msgstr ""
+"Manca argomento conclusivo\n"
+"%.98s"
+
+#: Engine/rdorch.c:1002
 msgid "Unmatched #ifdef"
 msgstr "#idef senza corrispondenza"
 
-#: Engine/rdorch.c:977
+#: Engine/rdorch.c:1004
 msgid "file too large for ortext space"
 msgstr "file troppo grande per lo spazio ortext"
 
-#: Engine/rdorch.c:984
+#: Engine/rdorch.c:1011
 #, fuzzy, c-format
 msgid "%d (%d) lines read\n"
 msgstr "%d linee lette\n"
 
-#: Engine/rdorch.c:1052
+#: Engine/rdorch.c:1079
 #, c-format
 msgid "LINE %d:"
 msgstr "LINEA %d:"
 
-#: Engine/rdorch.c:1071
+#: Engine/rdorch.c:1098
 msgid "invalid 'elseif' statement.  must have a corresponding 'if'"
 msgstr "dichiarazione 'elseif' non valida.  Deve aver un corrispondente 'if'"
 
-#: Engine/rdorch.c:1078
+#: Engine/rdorch.c:1105
 msgid "'elseif' statement cannot occur after an 'else'"
 msgstr "una dichiarazione 'elseif' non può venire dopo un 'else'"
 
-#: Engine/rdorch.c:1134
+#: Engine/rdorch.c:1161
 #, fuzzy
 msgid "Unmatched comment"
 msgstr "commento senza corrispondenza"
 
-#: Engine/rdorch.c:1198
+#: Engine/rdorch.c:1225
 msgid "misplaced comma"
 msgstr "virgola messa male"
 
-#: Engine/rdorch.c:1200 Engine/rdorch.c:1342 Engine/rdorch.c:1440
+#: Engine/rdorch.c:1227 Engine/rdorch.c:1369 Engine/rdorch.c:1467
 msgid "unbalanced parens"
 msgstr "parentesi non bilanciate"
 
-#: Engine/rdorch.c:1364
+#: Engine/rdorch.c:1391
 #, c-format
 msgid "illegal character %c"
 msgstr "carattere illegale %c"
 
-#: Engine/rdorch.c:1377
+#: Engine/rdorch.c:1404
 msgid "invalid 'else' statement.  must have a corresponding 'if'"
 msgstr "dichiarazione 'else' non valida.  Deve aver un corrispondente 'if'"
 
-#: Engine/rdorch.c:1384
+#: Engine/rdorch.c:1411
 msgid "duplicate 'else' statement"
 msgstr "doppia dichiarazione 'else'"
 
-#: Engine/rdorch.c:1413
+#: Engine/rdorch.c:1440
 msgid "invalid 'endif' statement.  must have a corresponding 'if'"
 msgstr "dichiarazione 'endif' non valida.  Deve aver un corrispondente 'if'"
 
-#: Engine/rdorch.c:1442
+#: Engine/rdorch.c:1469
 msgid "no legal opcode"
 msgstr "opcode illecito"
 
-#: Engine/rdorch.c:1573
+#: Engine/rdorch.c:1600
 msgid "illegal opcod from expr anal"
 msgstr "opcode illecito da expr anal"
 
-#: Engine/rdorch.c:1606 Engine/rdorch.c:1628
+#: Engine/rdorch.c:1633 Engine/rdorch.c:1655
 #, c-format
 msgid "failed to find %s, output arg '%s' illegal type"
 msgstr "faillita la ricerca di %s, argomento di output '%s' di tipo illecito"
 
-#: Engine/rdorch.c:1670
+#: Engine/rdorch.c:1697
 #, c-format
 msgid "failed to find %s, input arg illegal type"
 msgstr "faillita la ricerca di %s, argomento di input di tipo illecito"
 
-#: Engine/rdorch.c:1684
+#: Engine/rdorch.c:1711
 msgid "setksmps is allowed only in user defined opcodes"
 msgstr ""
 "setksmps è permesso solo in user defined opcodes (opcode definito "
 "dall'utente)"
 
-#: Engine/rdorch.c:1687
+#: Engine/rdorch.c:1714
 msgid "multiple uses of setksmps in the same opcode definition"
 msgstr "uso di multipli setkmps nella stessa definizione di opcode"
 
-#: Engine/rdorch.c:1710
+#: Engine/rdorch.c:1739
 #, c-format
 msgid "%s inconsistent with global nchnls (%d); replaced with %s\n"
 msgstr "%s incompatibile con canali globali (%d); sostituito con %s\n"
 
-#: Engine/rdorch.c:1740
+#: Engine/rdorch.c:1770
 msgid "opcode blks cannot be nested (missing 'endop'?)"
 msgstr "il blocco opcode non può essere innestato (manca 'endop'?)"
 
-#: Engine/rdorch.c:1742
+#: Engine/rdorch.c:1772
 msgid "opcode not allowed in instr block"
 msgstr "opcode non permesso nel blocco strumento"
 
-#: Engine/rdorch.c:1751
+#: Engine/rdorch.c:1781
 #, fuzzy
 msgid "unmatched endop"
 msgstr "endop senza corrispondenza"
 
-#: Engine/rdorch.c:1753
+#: Engine/rdorch.c:1783
 msgid "endop not allowed in instr block"
 msgstr "endop non permesso nel blocco strumento"
 
-#: Engine/rdorch.c:1758
+#: Engine/rdorch.c:1788
 msgid "instr not allowed in opcode block"
 msgstr "instr non permesso nel blocco opcode"
 
-#: Engine/rdorch.c:1761
+#: Engine/rdorch.c:1791
 msgid "instr blocks cannot be nested (missing 'endin'?)"
 msgstr "il blocco strumento non può essere innestato (manca 'endin'?)"
 
-#: Engine/rdorch.c:1769
+#: Engine/rdorch.c:1799
 msgid "endin not allowed in opcode blk"
 msgstr "endin non permesso nel blocco opcode"
 
-#: Engine/rdorch.c:1771
+#: Engine/rdorch.c:1801
 msgid "unmatched endin"
 msgstr "endin senza corrispondenza"
 
-#: Engine/rdorch.c:1781
+#: Engine/rdorch.c:1811
 msgid "misplaced opcode"
 msgstr "opcode messo male"
 
-#: Engine/rdorch.c:1787
+#: Engine/rdorch.c:1817
 msgid "xout is allowed only in user defined opcodes"
 msgstr "xout è permesso solo in udo (opcode definito dall'utente)"
 
-#: Engine/rdorch.c:1790
+#: Engine/rdorch.c:1820
 msgid "multiple uses of xout in the same opcode definition"
 msgstr "uso di multipli xout nella stessa definizione di opcode"
 
-#: Engine/rdorch.c:1837
+#: Engine/rdorch.c:1867
 msgid "too many input args"
 msgstr "troppi argomenti in input"
 
-#: Engine/rdorch.c:1909
-#, c-format
-msgid "input arg '%s' used before defined"
+#: Engine/rdorch.c:1893
+#, fuzzy
+msgid "insufficient required arguments"
+msgstr "gli argomenti richiesti sono insufficienti"
+
+#: Engine/rdorch.c:1940
+#, fuzzy, c-format
+msgid "input arg '%s' used before defined \n"
 msgstr "argomento in input '%s' usato prima di essere definito"
 
-#: Engine/rdorch.c:1956
+#: Engine/rdorch.c:1987
 msgid "xin is allowed only in user defined opcodes"
 msgstr "xin è permesso solo in udo (opcode definito dall'utente)"
 
-#: Engine/rdorch.c:1959
+#: Engine/rdorch.c:1990
 msgid "multiple uses of xin in the same opcode definition"
 msgstr "uso di multipli xin nella stessa definizione di opcode"
 
-#: Engine/rdorch.c:2004
+#: Engine/rdorch.c:2035
 msgid "illegal no of output args"
 msgstr "numero di argomenti in output illecito"
 
-#: Engine/rdorch.c:2023
+#: Engine/rdorch.c:2054
 #, c-format
 msgid "output name previously used, type '%c' must be uniquely defined"
 msgstr "nome di output già usato, il tipo '%c' deve essere definito unicamente"
 
-#: Engine/rdorch.c:2028
+#: Engine/rdorch.c:2059
 #, c-format
 msgid "output arg '%s' illegal type"
 msgstr "argomento di output '%s' di tipo illegale"
 
-#: Engine/rdorch.c:2069
+#: Engine/rdorch.c:2100
 #, c-format
 msgid "input arg '%s' of type %s not allowed when expecting %c"
 msgstr "argomento in input '%s' di tipo %s non permesso aspettando invece %c"
 
-#: Engine/rdorch.c:2155
+#: Engine/rdorch.c:2187
 msgid "duplicate label"
 msgstr "Etichetta doppia"
 
-#: Engine/rdorch.c:2177
+#: Engine/rdorch.c:2209
 #, c-format
 msgid "error line %d.  unknown label:\n"
 msgstr "errore alla linea %d.  etichetta sconosciuta:\n"
 
-#: Engine/rdorch.c:2192 Engine/rdorch.c:2239
+#: Engine/rdorch.c:2222 Engine/rdorch.c:2271
 msgid "error:  "
 msgstr "errore:"
 
-#: Engine/rdorch.c:2208
+#: Engine/rdorch.c:2239
 #, c-format
 msgid ", line %d:\n"
 msgstr ", linea %d:\n"
 
-#: Engine/rdorch.c:2246
+#: Engine/rdorch.c:2278
 #, c-format
 msgid "called from line %d of macro %s"
 msgstr "chiamata dalla linea %d della macro %s"
 
-#: Engine/rdorch.c:2250
+#: Engine/rdorch.c:2282
 #, c-format
 msgid "in line %d of file input %s"
 msgstr "alla linea %d del file di input %s"
 
-#: Engine/rdscor.c:79
+#: Engine/rdscor.c:80
 #, c-format
 msgid "ERROR: illegal character %c(%.2x) in scoreline: "
 msgstr "ERRORE: carattere illecito %c(%.2x) alla linea di score: "
@@ -1927,7 +1935,7 @@ msgstr ""
 "\n"
 "\tresto della linea ignorato\n"
 
-#: Engine/rdscor.c:144
+#: Engine/rdscor.c:146
 msgid "ERROR: too many pfields: "
 msgstr "ERRORE: troppi pfields: "
 
@@ -1954,314 +1962,279 @@ msgstr "errore nella score:  "
 msgid "  section %d:  at position %d%s"
 msgstr "  sezione %d:  alla posizione %d%s"
 
-#: Engine/sread.c:217
+#: Engine/sread.c:216
 msgid "Internal error in print_input_backtrace()"
 msgstr "Errore interno in print_input_backtrace()"
 
-#: Engine/sread.c:219
+#: Engine/sread.c:218
 #, c-format
 msgid "  included from line %d of macro %s%s"
 msgstr "  incluso dalla linea %d della macro %s%s"
 
-#: Engine/sread.c:220
+#: Engine/sread.c:219
 #, c-format
 msgid "  called from line %d of macro %s%s"
 msgstr "  chiamata dalla linea %d della macro %s%s"
 
-#: Engine/sread.c:222
+#: Engine/sread.c:221
 #, c-format
 msgid "  in line %d of macro %s%s"
 msgstr "  alla linea %d della macro %s%s"
 
-#: Engine/sread.c:229
-#, c-format
-msgid "  included from line %d of file input %s%s"
-msgstr "  incluso dalla linea %d del file di input %s%s"
-
-#: Engine/sread.c:230
-#, c-format
-msgid "  called from line %d of file input %s%s"
-msgstr "  chiamata dalla linea %d del file di input %s%s"
-
-#: Engine/sread.c:232
-#, c-format
-msgid "  in line %d of file input %s%s"
-msgstr "  alla linea %d del file di input %s%s"
-
-#: Engine/sread.c:268
+#: Engine/sread.c:256
 #, c-format
 msgid "Internal error op=%c"
 msgstr "Errore interno op=%c"
 
-#: Engine/sread.c:322
-msgid "ungetscochar(): buffer overflow"
-msgstr "ungetscochar(): buffer overflow"
-
-#: Engine/sread.c:479
+#: Engine/sread.c:464
 msgid "illegal placement of number in [] expression"
 msgstr "piazzamento illecito di numero in espressione []"
 
-#: Engine/sread.c:506
+#: Engine/sread.c:491
 msgid "illegal placement of operator ~ in [] expression"
 msgstr "piazzamento illecito dell'operatore ~ in espressione []"
 
-#: Engine/sread.c:516
+#: Engine/sread.c:501
 msgid "illegal placement of operator @ or @@ in [] expression"
 msgstr "piazzamento illecito dell'operatore @ o @@ in espressione []"
 
-#: Engine/sread.c:548 Engine/sread.c:562
+#: Engine/sread.c:533 Engine/sread.c:547
 #, c-format
 msgid "illegal placement of operator %c in [] expression"
 msgstr "piazzamento illecito dell'operatore %c in espressione []"
 
-#: Engine/sread.c:574
+#: Engine/sread.c:559
 msgid "illegal placement of '(' in [] expression"
 msgstr "piazzamento illecito di '(' in espressione []"
 
-#: Engine/sread.c:580
+#: Engine/sread.c:565
 msgid "missing operand before ')' in [] expression"
 msgstr "manca l'operando dopo ')' in espressione []"
 
-#: Engine/sread.c:594
+#: Engine/sread.c:579
 msgid "missing operand before closing bracket in []"
 msgstr "manca l'operando dopo la chiusura della parentesi in []"
 
-#: Engine/sread.c:609
+#: Engine/sread.c:594
 #, c-format
 msgid "illegal character %c(%.2x) in [] expression"
 msgstr "carattere illecito %c(%.2x) in espressione []"
 
-#: Engine/sread.c:658
+#: Engine/sread.c:646
 #, c-format
 msgid "%s Nested LOOP terminated, level:%d\n"
 msgstr "%s LOOP innestato erminato, livellp: %d\n"
 
-#: Engine/sread.c:664
+#: Engine/sread.c:652
 #, c-format
 msgid "External LOOP terminated, level:%d\n"
 msgstr "LOOP esterno terminato, livello: %d\n"
 
-#: Engine/sread.c:684
+#: Engine/sread.c:696
 #, c-format
 msgid "%s  Nested LOOP section (%d) Level:%d\n"
 msgstr "%s  LOOP innestato sezione (%d) Livello:%d\n"
 
-#: Engine/sread.c:689
+#: Engine/sread.c:701
 #, c-format
 msgid " External LOOP section (%d) Level:%d\n"
 msgstr " LOOP esterno sezione (%d) Livello:%d\n"
 
-#: Engine/sread.c:703
+#: Engine/sread.c:715
 msgid "Loop terminated\n"
 msgstr "Loop terminato\n"
 
-#: Engine/sread.c:716
+#: Engine/sread.c:733
 #, c-format
 msgid "Repeat section (%d)\n"
 msgstr "Ripetizione della sezione (%d)\n"
 
-#: Engine/sread.c:719
+#: Engine/sread.c:736
 msgid "Repeat section\n"
 msgstr "Ripetizione della sezione\n"
 
-#: Engine/sread.c:744
+#: Engine/sread.c:761
 msgid "Invalid macro name for --smacro"
 msgstr "Nome di macro non valido per --smacro"
 
-#: Engine/sread.c:831
+#: Engine/sread.c:865
 #, c-format
 msgid "Clockbase = %f\n"
 msgstr "Clockbase = %f\n"
 
-#: Engine/sread.c:898
+#: Engine/sread.c:934
 msgid "Loops are nested too deeply"
 msgstr "Loops eccessivamente innestati"
 
-#: Engine/sread.c:901
-msgid "Loop cannot start inside of a macro"
-msgstr "Il loop non può partire da dentro una macro"
-
-#: Engine/sread.c:920
+#: Engine/sread.c:948
 #, fuzzy
 msgid "{: invalid repeat count"
 msgstr "{: conteggio delle ripetizioni non valido"
 
-#: Engine/sread.c:929
+#: Engine/sread.c:957
 #, c-format
 msgid "%s Nested LOOP=%d Level:%d\n"
 msgstr "%s LOOP innestato=%d Livello:%d\n"
 
-#: Engine/sread.c:935
+#: Engine/sread.c:963
 #, c-format
 msgid "External LOOP=%d Level:%d\n"
 msgstr "LOOP esterno=%d Livello:%d\n"
 
-#: Engine/sread.c:1004
-msgid "Repeat cannot start inside of a macro (ignored)"
-msgstr "Repeat non può partire da dentro una macro (ignorato)"
-
-#: Engine/sread.c:1019
+#: Engine/sread.c:1047
 msgid "r: invalid repeat count"
 msgstr "r: conteggio delle ripetizioni non valido"
 
-#: Engine/sread.c:1021
+#: Engine/sread.c:1049
 #, c-format
 msgid "Repeats=%d\n"
 msgstr "Ripetizioni=%d\n"
 
-#: Engine/sread.c:1063
+#: Engine/sread.c:1093
 #, c-format
 msgid "Named section >>>%s<<<\n"
 msgstr "Sezione Nominata >>>%s<<<\n"
 
-#: Engine/sread.c:1079
+#: Engine/sread.c:1108
 #, c-format
 msgid "%d: File %s position %ld\n"
 msgstr "%d: File %s posizione %ld\n"
 
-#: Engine/sread.c:1085
-#, c-format
-msgid "Ignoring name %s not in file\n"
-msgstr "Ignorato il nome %s non è nel file\n"
-
-#: Engine/sread.c:1110
+#: Engine/sread.c:1133
 #, c-format
 msgid "Name %s not found"
 msgstr "Nome %s non trovato"
 
-#: Engine/sread.c:1112
+#: Engine/sread.c:1135
 #, c-format
 msgid "Duplicate %d: %s (%s,%ld)\n"
 msgstr "Duplicazione %d: %s (%s,%ld)\n"
 
-#: Engine/sread.c:1129
-#, c-format
-msgid "cannot open input file %s"
-msgstr "Non è possibile aprire il file di input %s"
-
-#: Engine/sread.c:1149
+#: Engine/sread.c:1164
 #, c-format
 msgid "Warp_factor = %f\n"
 msgstr "Warp_factor = %f\n"
 
-#: Engine/sread.c:1174
+#: Engine/sread.c:1189
 msgid "sread is confused on legal opcodes\n"
 msgstr "sread è confuso sugli opcodes leciti\n"
 
-#: Engine/sread.c:1236
+#: Engine/sread.c:1251
 msgid "No previous event for ^"
 msgstr "Non c'è l'evento precedente per ^"
 
-#: Engine/sread.c:1241
+#: Engine/sread.c:1256
 #, c-format
 msgid "illegal space following %s, zero substituted"
 msgstr "spazio illecito seguente %s, sostituito con zero"
 
-#: Engine/sread.c:1271
+#: Engine/sread.c:1286
 #, c-format
 msgid "ignoring '%s' in '%c' event"
 msgstr "ignorato '%s' nell'evento '%c'"
 
-#: Engine/sread.c:1274
+#: Engine/sread.c:1289
 msgid "! invalid in p1, p2, or p3"
 msgstr "! non valido in p1, p2, or p3"
 
-#: Engine/sread.c:1275 Engine/sread.c:1280 Engine/sread.c:1730
-#: Engine/sread.c:1753 Engine/sread.c:1767
+#: Engine/sread.c:1290 Engine/sread.c:1295 Engine/sread.c:1738
+#: Engine/sread.c:1761 Engine/sread.c:1775
 msgid "      remainder of line flushed\n"
 msgstr "      resto della linea ignorato\n"
 
-#: Engine/sread.c:1279
+#: Engine/sread.c:1294
 #, c-format
 msgid "illegal character after !: '%c'"
 msgstr "carattere illecito dopo !: '%c'"
 
-#: Engine/sread.c:1358
+#: Engine/sread.c:1373
 #, c-format
 msgid "WARNING: instr %s not found, assuming insno = -1\n"
 msgstr "ATTENZIONE: strumento %s non trovato, insno = -1\n"
 
-#: Engine/sread.c:1378
+#: Engine/sread.c:1393
 msgid "sread: illegal use of carry,   0 substituted\n"
 msgstr "sread: uso illecito del riporto,   sostituito 0\n"
 
-#: Engine/sread.c:1526
+#: Engine/sread.c:1539
 #, fuzzy
 msgid "Improper \\"
 msgstr "Improprio \\"
 
-#: Engine/sread.c:1558
+#: Engine/sread.c:1570
 msgid "Not #define"
 msgstr "Non #define"
 
-#: Engine/sread.c:1620
+#: Engine/sread.c:1630
 #, c-format
 msgid "Macro %s with %d arguments defined\n"
 msgstr "Macro %s con %d argomenti definiti\n"
 
-#: Engine/sread.c:1631
+#: Engine/sread.c:1642
 msgid "Not #include"
 msgstr "Non #include"
 
-#: Engine/sread.c:1662
+#: Engine/sread.c:1671
 #, c-format
 msgid "Cannot open #include'd file %s"
 msgstr "Impossibile aprire il file #include %s"
 
-#: Engine/sread.c:1673
+#: Engine/sread.c:1681
 msgid "Not #undef"
 msgstr "Non #undef"
 
-#: Engine/sread.c:1692
+#: Engine/sread.c:1700
 msgid "unknown # option"
 msgstr "opzione # sconosciuta"
 
-#: Engine/sread.c:1729
+#: Engine/sread.c:1737
 #, c-format
 msgid "illegal opcode %c"
 msgstr "opcode illecito %c"
 
-#: Engine/sread.c:1752
+#: Engine/sread.c:1760
 #, c-format
 msgid "unexpected char %c"
 msgstr "carattere inatteso %c"
 
-#: Engine/sread.c:1766
+#: Engine/sread.c:1774
 msgid "illegally placed string"
 msgstr "stringa piazzata illecitamente"
 
-#: Engine/sread.c:1773
+#: Engine/sread.c:1781
 msgid "unmatched quote"
 msgstr "virgolette senza corrispondenza"
 
-#: Engine/sread.c:1817
+#: Engine/sread.c:1825
 msgid "sread: illegal number format:  "
 msgstr "sread: formato numerico illecito:  "
 
-#: Engine/sread.c:1823
+#: Engine/sread.c:1831
 msgid "   zero substituted.\n"
 msgstr "   sostituito zero.\n"
 
-#: Engine/swrite.c:123
+#: Engine/swrite.c:123 Engine/swritestr.c:134
 #, c-format
 msgid "swrite: unexpected opcode, section %d line %d\n"
 msgstr "swrite: opcode inatteso, sezione %d linea %d\n"
 
-#: Engine/swrite.c:209 Engine/swrite.c:249
+#: Engine/swrite.c:209 Engine/swrite.c:249 Engine/swritestr.c:220
+#: Engine/swritestr.c:260
 #, c-format
 msgid "swrite: output, sect%d line%d p%d makes illegal reference to "
 msgstr "swrite: output, sez%d linea%d p%d fa illecito riferimento a "
 
-#: Engine/swrite.c:216 Engine/swrite.c:255
+#: Engine/swrite.c:216 Engine/swrite.c:255 Engine/swritestr.c:227
+#: Engine/swritestr.c:266
 msgid "   Zero substituted\n"
 msgstr "   sostituito zero\n"
 
-#: Engine/swrite.c:313
+#: Engine/swrite.c:313 Engine/swritestr.c:324
 #, c-format
 msgid "swrite: output, sect%d line%d p%d has illegal ramp symbol\n"
 msgstr "swrite: output, sez%d linea%d p%d ha illecito simbolo ramp\n"
 
-#: Engine/swrite.c:317
+#: Engine/swrite.c:317 Engine/swritestr.c:328
 #, c-format
 msgid ""
 "swrite: output, sect%d line%d p%d ramp has illegal forward or backward ref\n"
@@ -2269,12 +2242,14 @@ msgstr ""
 "swrite: output, sez%d linea%d p%d ramp fa riferimento a precedente o "
 "successivo illecito\n"
 
-#: Engine/swrite.c:380 Engine/swrite.c:445
+#: Engine/swrite.c:380 Engine/swrite.c:445 Engine/swritestr.c:391
+#: Engine/swritestr.c:456
 #, c-format
 msgid "swrite: output, sect%d line%d p%d has illegal expramp symbol\n"
 msgstr "swrite: output, sez%d linea%d p%d ha simbolo expramp illecito\n"
 
-#: Engine/swrite.c:385 Engine/swrite.c:450
+#: Engine/swrite.c:385 Engine/swrite.c:450 Engine/swritestr.c:396
+#: Engine/swritestr.c:461
 #, c-format
 msgid ""
 "swrite: output, sect%d line%d p%d expramp has illegal forward or backward "
@@ -2283,27 +2258,27 @@ msgstr ""
 "swrite: output, sez%d linea%d p%d expramp fa riferimento illecito a "
 "precedente o sucessivo\n"
 
-#: Engine/swrite.c:466
+#: Engine/swrite.c:466 Engine/swritestr.c:477
 #, c-format
 msgid "swrite: output, sect%d line%d p%d has illegally terminated string   "
 msgstr ""
 "swrite: output, sez%d linea%d p%d ha stringa terminante illecitamente   "
 
-#: Engine/swrite.c:514
+#: Engine/swrite.c:514 Engine/swritestr.c:529
 #, c-format
 msgid "swrite: output, sect%d line%d p%d has illegal number  "
 msgstr "swrite: output, sez%d linea%d p%d ha numero illecito  "
 
-#: Engine/swrite.c:521
+#: Engine/swrite.c:521 Engine/swritestr.c:536
 msgid "    String truncated\n"
 msgstr "    Stringa troncata\n"
 
-#: Engine/symbtab.c:202
+#: Engine/symbtab.c:208
 #, c-format
 msgid "Type confusion for %s (%d,%d), replacing\n"
 msgstr ""
 
-#: Engine/symbtab.c:333
+#: Engine/symbtab.c:345
 #, c-format
 msgid "Unknown word type for %s on line %d\n"
 msgstr "Tipo di parola sconosciuta per %s alla linea %d\n"
@@ -2325,6 +2300,16 @@ msgstr "twarp: t ha tempo non positivo\n"
 msgid "twarp: t segments exceed twarp array\n"
 msgstr "twarp: segmenti di t superano l'array twarp\n"
 
+#: InOut/cmidi.c:233
+#, fuzzy
+msgid "CoreMIDI real time MIDI plugin for Csound\n"
+msgstr "PortMIDI real time MIDI plugin per Csound\n"
+
+#: InOut/cmidi.c:247
+#, fuzzy
+msgid "rtmidi: CoreMIDI module enabled\n"
+msgstr "rtmidi: PortMIDI modulo abilitato\n"
+
 #: InOut/libsnd.c:486
 msgid "error: no input file name"
 msgstr "errore: manca il nome del file di input"
@@ -2348,45 +2333,60 @@ msgstr "audio_in %s ha sr = %d, orch sr = %d"
 msgid "audio_in %s has %d chnls, orch %d chnls_i"
 msgstr "audio_in %s ha %d canali, orch %d canali"
 
-#: InOut/libsnd.c:573
+#: InOut/libsnd.c:574
+#, fuzzy, c-format
+msgid "reading %d sample blks of %d-bit floats from %s \n"
+msgstr "lettura blocchi di %d-byte di %s da %s (%s)\n"
+
+#: InOut/libsnd.c:578
 #, c-format
 msgid "reading %d-byte blks of %s from %s (%s)\n"
 msgstr "lettura blocchi di %d-byte di %s da %s (%s)\n"
 
-#: InOut/libsnd.c:608
+#: InOut/libsnd.c:614
 #, fuzzy
 msgid "Output file type changed to IRCAM for use in pipe\n"
 msgstr "Tipo di file output cambiato in IRCAM per uso in pipe\n"
 
-#: InOut/libsnd.c:628
+#: InOut/libsnd.c:634
 msgid "Failed to initialise real time audio output"
 msgstr "Fallita inizializzazione dell'output audio in tempo reale"
 
-#: InOut/libsnd.c:669 InOut/libsnd.c:673
+#: InOut/libsnd.c:675 InOut/libsnd.c:679
 #, c-format
 msgid "sfinit: cannot open %s"
 msgstr "sfinit: impossibile aprire %s"
 
-#: InOut/libsnd.c:733 util/srconv.c:485
+#: InOut/libsnd.c:741
+#, fuzzy, c-format
+msgid "writing %d sample blks of %d-bit floats to %s \n"
+msgstr "scrittura blocchi di %d-byte di %s su %s"
+
+#: InOut/libsnd.c:744 util/srconv.c:484
 #, c-format
 msgid "writing %d-byte blks of %s to %s"
 msgstr "scrittura blocchi di %d-byte di %s su %s"
 
-#: InOut/libsnd.c:740 InOut/libsnd.c:810
+#: InOut/libsnd.c:749 InOut/libsnd.c:824
 msgid " (raw)\n"
 msgstr " (raw)\n"
 
-#: InOut/libsnd.c:803
-#, c-format
-msgid "%ld %d-byte soundblks of %s written to %s"
+#: InOut/libsnd.c:815
+#, fuzzy, c-format
+msgid "%ld %d sample blks of %d-bit floats written to %s\n"
+msgstr "%ld blocchi di %d-byte di %s scritti su %s"
+
+#: InOut/libsnd.c:820
+#, fuzzy, c-format
+msgid "%ld %d sample blks of %s written to %s"
 msgstr "%ld blocchi di %d-byte di %s scritti su %s"
 
-#: InOut/libsnd.c:822
+#: InOut/libsnd.c:837
 #, c-format
 msgid "soundfile write returned bytecount of %d, not %d"
 msgstr "il file audio scritto ha conteggio byte di %d, non %d"
 
-#: InOut/libsnd.c:825
+#: InOut/libsnd.c:840
 msgid ""
 "(disk may be full...\n"
 " closing the file ...)"
@@ -2394,11 +2394,11 @@ msgstr ""
 "(forse disco pieno...\n"
 " chiusura file ...)"
 
-#: InOut/libsnd.c:828 util/dnoise.c:1192
+#: InOut/libsnd.c:843 util/dnoise.c:1177
 msgid "\t... closed\n"
 msgstr "\t... chiuso\n"
 
-#: InOut/libsnd.c:834
+#: InOut/libsnd.c:849
 #, fuzzy
 msgid "not writing to sound disk\n"
 msgstr "nessuna scrittura su sound disk\n"
@@ -2803,20 +2803,20 @@ msgstr "Errore in chiusura del dispositivo MIDI in: %d (%s)"
 msgid "Error closing MIDI out device: %d (%s)"
 msgstr "Errore in chiusura del dispositivo MIDI out: %d (%s)"
 
-#: InOut/midisend.c:171
+#: InOut/midisend.c:170
 msgid " *** no callback for opening MIDI output"
 msgstr ""
 
-#: InOut/midisend.c:173
+#: InOut/midisend.c:172
 msgid " *** no callback for writing MIDI data"
 msgstr ""
 
-#: InOut/midisend.c:179
+#: InOut/midisend.c:178
 #, c-format
 msgid " *** error opening MIDI out device: %d (%s)"
 msgstr " *** errore in apertura del dispositivo MIDI out: %d (%s)"
 
-#: InOut/midisend.c:190
+#: InOut/midisend.c:189
 #, c-format
 msgid " *** error opening MIDI out file '%s'"
 msgstr " *** errore in apertura del file MIDI out '%s'"
@@ -3076,7 +3076,7 @@ msgstr "Errore in apertura del file del dispositivo di output MIDI '%s'"
 msgid "Opened MIDI output device file '%s'\n"
 msgstr "Apertura del file del dispositivo di output MIDI '%s'\n"
 
-#: InOut/rtalsa.c:1101 InOut/rtcoreaudio.c:64 InOut/rtcoreaudio.c:74
+#: InOut/rtalsa.c:1101 InOut/rtcoreaudio.c:71 InOut/rtcoreaudio.c:81
 msgid "warning... could not create global var\n"
 msgstr "attenzione... impossibile creare global var\n"
 
@@ -3101,40 +3101,60 @@ msgstr "rtmidi: modulo ALSA abilitato\n"
 msgid "rtmidi: devfile module enabled\n"
 msgstr "rtmidi: modulo devfile abilitato\n"
 
-#: InOut/rtcoreaudio.c:83
+#: InOut/rtauhal.c:163
+#, fuzzy, c-format
+msgid "selected input device: %s \n"
+msgstr "dispositivo selezionato: %u \n"
+
+#: InOut/rtauhal.c:166
+#, fuzzy, c-format
+msgid "selected output device: %s \n"
+msgstr "dispositivo selezionato: %u \n"
+
+#: InOut/rtauhal.c:524
+#, fuzzy
+msgid "AuHAL module: device closed\n"
+msgstr "modulo coreaudio: dispositivo chiuso\n"
+
+#: InOut/rtauhal.c:541
+#, fuzzy
+msgid "rtaudio: coreaaudio-AuHAL module enabled\n"
+msgstr "rtaudio: CoreAudio modulo abilitato\n"
+
+#: InOut/rtcoreaudio.c:90
 #, fuzzy
 msgid ""
 "CoreAudio real-time audio module for Csound\n"
 "by Victor Lazzarini\n"
 msgstr "CoreAudio modulo audio real-time per Csound\n"
 
-#: InOut/rtcoreaudio.c:105
+#: InOut/rtcoreaudio.c:112
 msgid "rtaudio: CoreAudio module enabled\n"
 msgstr "rtaudio: CoreAudio modulo abilitato\n"
 
-#: InOut/rtcoreaudio.c:254
+#: InOut/rtcoreaudio.c:261
 #, c-format
 msgid "selected device: %u \n"
 msgstr "dispositivo selezionato: %u \n"
 
-#: InOut/rtcoreaudio.c:263
+#: InOut/rtcoreaudio.c:270
 #, c-format
 msgid "CoreAudio module: opening %s \n"
 msgstr "modulo CoreAudio: apertura %s \n"
 
-#: InOut/rtcoreaudio.c:297
+#: InOut/rtcoreaudio.c:304
 msgid " *** CoreAudio: open: could not set buffer size\n"
 msgstr ""
 " *** CoreAudio: apertura: impossibile impostare dimensione del buffer\n"
 
-#: InOut/rtcoreaudio.c:342
+#: InOut/rtcoreaudio.c:349
 #, c-format
 msgid " *** CoreAudio: open: could not set device parameter sr: %d \n"
 msgstr ""
 " *** CoreAudio: apertura: impossibile impostare parametro del dispositivo "
 "sr: %d \n"
 
-#: InOut/rtcoreaudio.c:344
+#: InOut/rtcoreaudio.c:351
 #, c-format
 msgid ""
 " *** CoreAudio: current device sampling rate is:%d \n"
@@ -3143,17 +3163,17 @@ msgstr ""
 " *** CoreAudio: frequenza di campionamento del dispositivo:%d \n"
 "     provare ad impostare questo valore nell'orchestra di csound \n"
 
-#: InOut/rtcoreaudio.c:353
+#: InOut/rtcoreaudio.c:360
 #, c-format
 msgid "CoreAudio module: sr set to %d with %d audio channels \n"
 msgstr "modulo CoreAudio: sr impostata a %d con %d canali audio \n"
 
-#: InOut/rtcoreaudio.c:374 InOut/rtcoreaudio.c:387 InOut/rtcoreaudio.c:432
-#: InOut/rtcoreaudio.c:452
+#: InOut/rtcoreaudio.c:381 InOut/rtcoreaudio.c:394 InOut/rtcoreaudio.c:439
+#: InOut/rtcoreaudio.c:459
 msgid " *** CoreAudio: open: memory allocation failure\n"
 msgstr " *** CoreAudio: apertura: allocazione di memoria fallita\n"
 
-#: InOut/rtcoreaudio.c:414
+#: InOut/rtcoreaudio.c:421
 #, c-format
 msgid ""
 "CoreAudio module: device open with %d buffers of %d frames\n"
@@ -3162,11 +3182,11 @@ msgstr ""
 "modulo CoreAudio: dispositivo aperto con %d buffers di %d frames\n"
 "==========================================================\n"
 
-#: InOut/rtcoreaudio.c:552
+#: InOut/rtcoreaudio.c:559
 msgid "coreaudio module: closing device...\n"
 msgstr "modulo coreaudio: chiusura dispositivo...\n"
 
-#: InOut/rtcoreaudio.c:566
+#: InOut/rtcoreaudio.c:573
 msgid "coreaudio module: device closed\n"
 msgstr "modulo coreaudio: dispositivo chiuso\n"
 
@@ -3518,343 +3538,61 @@ msgstr "rtmidi: nessun dispositivo di input disponibile"
 
 #: InOut/rtwinmm.c:541 InOut/rtwinmm.c:645
 msgid "rtmidi: must specify a device number, not a name"
-msgstr "rtmidi: si deve specificare un numero di dispositivo, non un nome"
-
-#: InOut/rtwinmm.c:547
-msgid "The available MIDI input devices are:\n"
-msgstr "I dispositivi di input MIDI disponibili sono:\n"
-
-#: InOut/rtwinmm.c:554
-msgid "rtmidi: input device number is out of range"
-msgstr "rtmidi: numero del dispositivo di input fuori range"
-
-#: InOut/rtwinmm.c:559
-msgid "rtmidi: memory allocation failure"
-msgstr "rtmidi: allocazione di memoria fallita"
-
-#: InOut/rtwinmm.c:565
-#, c-format
-msgid "Opening MIDI input device %d (%s)\n"
-msgstr "Apertura del dispositivo di input MIDI %d (%s)\n"
-
-#: InOut/rtwinmm.c:571
-msgid "rtmidi: could not open input device"
-msgstr ""
-
-#: InOut/rtwinmm.c:639
-msgid "rtmidi: no output devices are available"
-msgstr ""
-
-#: InOut/rtwinmm.c:651
-msgid "The available MIDI output devices are:\n"
-msgstr ""
-
-#: InOut/rtwinmm.c:658
-msgid "rtmidi: output device number is out of range"
-msgstr ""
-
-#: InOut/rtwinmm.c:662
-#, c-format
-msgid "Opening MIDI output device %d (%s)\n"
-msgstr ""
-
-#: InOut/rtwinmm.c:667
-msgid "rtmidi: could not open output device"
-msgstr ""
-
-#: InOut/rtwinmm.c:725
-msgid ""
-"Windows MME real time audio and MIDI module for Csound by Istvan Varga\n"
-msgstr ""
-
-#: InOut/rtwinmm.c:730
-msgid "could not allocate global structure"
-msgstr ""
-
-#: InOut/rtwinmm.c:762
-msgid "rtaudio: WinMM module enabled\n"
-msgstr ""
-
-#: InOut/virtual_keyboard/virtual_keyboard.cpp:435
-msgid "virtual_keyboard.cpp: error allocating FLTK flags"
-msgstr ""
-
-#: InOut/virtual_keyboard/virtual_keyboard.cpp:443 InOut/winFLTK.c:125
-#: InOut/winFLTK.c:139
-#, c-format
-msgid "Error registering opcode '%s'"
-msgstr ""
-
-#: InOut/widgets.cpp:1081
-msgid ""
-"Invalid snapshot. Perhaps you modified orchestra widget code after you saved "
-"the snapshot bank."
-msgstr ""
-
-#: InOut/widgets.cpp:1226
-msgid "No name for FLbutbank"
-msgstr ""
-
-#: InOut/widgets.cpp:1466
-msgid "FLsetsnap: invalid table"
-msgstr ""
-
-#: InOut/widgets.cpp:1504
-msgid ""
-"Saving could overwrite the old file.\n"
-"Are you sure to save ?"
-msgstr ""
-
-#: InOut/widgets.cpp:1516
-msgid ""
-"Saving could overwrite the old file.\n"
-"Are you sure you want to save ?"
-msgstr ""
-
-#: InOut/widgets.cpp:1518
-msgid "No"
-msgstr "No"
-
-#: InOut/widgets.cpp:1518
-msgid "Yes"
-msgstr "Si"
-
-#: InOut/widgets.cpp:1527
-msgid "FLsavesnap: cannot open file"
-msgstr ""
-
-#: InOut/widgets.cpp:1580
-msgid "FLloadsnap: cannot open file"
-msgstr ""
-
-#: InOut/widgets.cpp:1625
-msgid ""
-"unmatched widget, probably due to a modified orchestra. Modifying an "
-"orchestra makes it incompatible with old snapshot files"
-msgstr ""
-
-#: InOut/widgets.cpp:1994
-msgid "end of widget thread\n"
-msgstr ""
-
-#: InOut/widgets.cpp:2020
-msgid "FLrun was already called"
-msgstr ""
-
-#: InOut/widgets.cpp:2023
-msgid "FL_run: memory allocation failure"
-msgstr ""
-
-#: InOut/widgets.cpp:2125 InOut/widgets.cpp:2145
-msgid "Error: Unable to fork process\n"
-msgstr ""
-
-#: InOut/widgets.cpp:2545
-msgid "FLpanel_end: invalid stack pointer: verify its placement"
-msgstr ""
-
-#: InOut/widgets.cpp:2548
-msgid ""
-"FLpanel_end: invalid stack count: verify FLpanel/FLpanel_end count and "
-"placement"
-msgstr ""
-
-#: InOut/widgets.cpp:2573 InOut/widgets.cpp:2604
-msgid "FLscroll_end: invalid stack pointer: verify its placement"
-msgstr ""
-
-#: InOut/widgets.cpp:2576
-msgid ""
-"FLscroll_end: invalid stack count: verify FLscroll/FLscroll_end count and "
-"placement"
-msgstr ""
-
-#: InOut/widgets.cpp:2607
-msgid ""
-"FLtabs_end: invalid stack count: verify FLtabs/FLtabs_end count and placement"
-msgstr ""
-
-#: InOut/widgets.cpp:2651
-msgid "FLgroup_end: invalid stack pointer: verify its placement"
-msgstr ""
-
-#: InOut/widgets.cpp:2654
-msgid ""
-"FLgroup_end: invalid stack count: verify FLgroup/FLgroup_end count and "
-"placement"
-msgstr ""
-
-#: InOut/widgets.cpp:2684
-msgid "FLpack_end: invalid stack pointer: verify its placement"
-msgstr ""
-
-#: InOut/widgets.cpp:2687
-msgid ""
-"FLpack_end: invalid stack count: verify FLpack/FLpack_end count and placement"
-msgstr ""
-
-#: InOut/widgets.cpp:2840
-msgid "FLvalue cannot be set by FLsetVal.\n"
-msgstr ""
-
-#: InOut/widgets.cpp:2857
-#, c-format
-msgid "(fl_setWidgetValuei): not fully implemented yet; exp=%d"
-msgstr ""
-
-#: InOut/widgets.cpp:2876
-msgid "FLvalue cannot be set by FLsetVal\n"
-msgstr ""
-
-#: InOut/widgets.cpp:2893
-#, c-format
-msgid "(fl_setWidgetValue_set): not fully implemented yet; exp=%d"
-msgstr ""
-
-#: InOut/widgets.cpp:3242 InOut/widgets.cpp:4648
-msgid "FLslider exponential, using non-labeled slider"
-msgstr ""
-
-#: InOut/widgets.cpp:3264
-msgid "FLslider: invalid slider type"
-msgstr ""
-
-#: InOut/widgets.cpp:3276 InOut/widgets.cpp:4072
-msgid "FLslider: zero is illegal in exponential operations"
-msgstr ""
-
-#: InOut/widgets.cpp:3337 InOut/widgets.cpp:4399 InOut/widgets.cpp:4610
-#: InOut/widgets.cpp:4787
-msgid "invalid ZAK space allocation"
-msgstr ""
-
-#: InOut/widgets.cpp:3451
-msgid "FLslidBnk: zero is illegal in exponential operations"
-msgstr ""
-
-#: InOut/widgets.cpp:3548 InOut/widgets.cpp:3581
-msgid "FLjoy X axe: zero is illegal in exponential operations"
-msgstr ""
-
-#: InOut/widgets.cpp:3675
-msgid "FLknob: invalid knob type"
-msgstr ""
-
-#: InOut/widgets.cpp:3690
-msgid "FLknob: zero is illegal in exponential operations"
-msgstr ""
-
-#: InOut/widgets.cpp:3790 InOut/widgets.cpp:3912
-#, c-format
-msgid "FLbutton \"%s\" ignoring snapshot capture retrieve"
-msgstr ""
-
-#: InOut/widgets.cpp:3831
-msgid "FLbutton: invalid button type"
-msgstr ""
-
-#: InOut/widgets.cpp:3863
-msgid "FLcloseButton: invalid stack pointer: verify its placement"
-msgstr ""
-
-#: InOut/widgets.cpp:3882
-#, c-format
-msgid "Command Found: %s\n"
-msgstr ""
-
-#: InOut/widgets.cpp:3954
-msgid "FLbuttonBank: invalid button type"
-msgstr ""
-
-#: InOut/widgets.cpp:3992
-#, c-format
-msgid "FLcount \"%s\" ignoring snapshot capture retrieve"
-msgstr ""
-
-#: InOut/widgets.cpp:4059
-msgid "FLroller: invalid roller type"
-msgstr ""
-
-#: InOut/widgets.cpp:4254
-msgid "FLhvsBox: a square area must be delimited by 2 lines at least"
-msgstr ""
-
-#: InOut/widgets.cpp:4302
-msgid "FLkeyIn: invalid table number"
-msgstr ""
-
-#: InOut/widgets.cpp:4305
-msgid "FLkeyIn: table too short!"
-msgstr ""
-
-#: InOut/widgets.cpp:4522
-msgid "FLvslidBnk: zero is illegal in exponential operations"
-msgstr ""
-
-#: InOut/widgets.cpp:4698 InOut/widgets.cpp:4875
-msgid "FLsliderBank: zero is illegal in exponential operations"
-msgstr ""
-
-#: InOut/widgets.cpp:4825
-msgid "FLslidBnk2: FLslider exponential, using non-labeled slider"
-msgstr ""
-
-#: InOut/widgets.cpp:4955 InOut/widgets.cpp:5018
-msgid "FLsldBnkSet: invalid table number"
-msgstr ""
+msgstr "rtmidi: si deve specificare un numero di dispositivo, non un nome"
 
-#: InOut/widgets.cpp:4959 InOut/widgets.cpp:5022
-msgid "FLslidBnkSet: table too short!"
-msgstr ""
+#: InOut/rtwinmm.c:547
+msgid "The available MIDI input devices are:\n"
+msgstr "I dispositivi di input MIDI disponibili sono:\n"
 
-#: InOut/widgets.cpp:4967 InOut/widgets.cpp:5031
-msgid "FLsldBnkSet: invalid outable number"
-msgstr ""
+#: InOut/rtwinmm.c:554
+msgid "rtmidi: input device number is out of range"
+msgstr "rtmidi: numero del dispositivo di input fuori range"
 
-#: InOut/widgets.cpp:4972 InOut/widgets.cpp:5037
-msgid "FLslidBnkSet: too many sliders to reset!"
-msgstr ""
+#: InOut/rtwinmm.c:559
+msgid "rtmidi: memory allocation failure"
+msgstr "rtmidi: allocazione di memoria fallita"
 
-#: InOut/widgets.cpp:4995
-msgid "FLslidBnkSet: function mapping not available"
-msgstr ""
+#: InOut/rtwinmm.c:565
+#, c-format
+msgid "Opening MIDI input device %d (%s)\n"
+msgstr "Apertura del dispositivo di input MIDI %d (%s)\n"
 
-#: InOut/widgets.cpp:5064 InOut/widgets.cpp:5149 InOut/widgets.cpp:5236
-msgid ""
-"FLslidBnk2Setk: value out of range: function mapping requires a 0 to 1 range "
-"for input"
+#: InOut/rtwinmm.c:571
+msgid "rtmidi: could not open input device"
 msgstr ""
 
-#: InOut/widgets.cpp:5093
-msgid "FLsldBnkSetk: invalid table number"
+#: InOut/rtwinmm.c:639
+msgid "rtmidi: no output devices are available"
 msgstr ""
 
-#: InOut/widgets.cpp:5097 InOut/widgets.cpp:5183
-msgid "FLslidBnkSetk: table too short!"
+#: InOut/rtwinmm.c:651
+msgid "The available MIDI output devices are:\n"
 msgstr ""
 
-#: InOut/widgets.cpp:5105
-msgid "FLsldBnkSetk: invalid outable number"
+#: InOut/rtwinmm.c:658
+msgid "rtmidi: output device number is out of range"
 msgstr ""
 
-#: InOut/widgets.cpp:5111 InOut/widgets.cpp:5197
-msgid "FLslidBnkSetk: too many sliders to reset!"
+#: InOut/rtwinmm.c:662
+#, c-format
+msgid "Opening MIDI output device %d (%s)\n"
 msgstr ""
 
-#: InOut/widgets.cpp:5179
-msgid "FLslidBnkSetk: invalid table number"
+#: InOut/rtwinmm.c:667
+msgid "rtmidi: could not open output device"
 msgstr ""
 
-#: InOut/widgets.cpp:5191
-msgid "FLslidBnkSetk: invalid outable number"
+#: InOut/rtwinmm.c:725
+msgid ""
+"Windows MME real time audio and MIDI module for Csound by Istvan Varga\n"
 msgstr ""
 
-#: InOut/widgets.cpp:5268
-msgid "FLxyin: none of X limits can be zero in exponential mode!"
+#: InOut/rtwinmm.c:730
+msgid "could not allocate global structure"
 msgstr ""
 
-#: InOut/widgets.cpp:5294
-msgid "FLxyin: none of Y limits can be zero in exponential mode!"
+#: InOut/rtwinmm.c:762
+msgid "rtaudio: WinMM module enabled\n"
 msgstr ""
 
 #: InOut/winascii.c:75
@@ -3862,7 +3600,7 @@ msgstr ""
 msgid "%s\t%ld points, scalemax %5.3f\n"
 msgstr ""
 
-#: InOut/windin.c:46 Opcodes/pitch.c:82 Opcodes/spectra.c:76
+#: InOut/windin.c:46 Opcodes/pitch.c:83 Opcodes/spectra.c:78
 msgid "illegal iprd"
 msgstr ""
 
@@ -3905,48 +3643,62 @@ msgstr ""
 msgid "widgets.cpp: error allocating FLTK flags"
 msgstr ""
 
-#: OOps/aops.c:95 OOps/aops.c:119
+#: InOut/winFLTK.c:124 InOut/winFLTK.c:137
+#: InOut/virtual_keyboard/virtual_keyboard.cpp:443
+#, c-format
+msgid "Error registering opcode '%s'"
+msgstr ""
+
+#: InOut/virtual_keyboard/virtual_keyboard.cpp:435
+msgid "virtual_keyboard.cpp: error allocating FLTK flags"
+msgstr ""
+
+#: OOps/aops.c:120 OOps/aops.c:144
 #, c-format
 msgid "Cannot be more In arguments than Out in init (%d,%d)"
 msgstr ""
 
-#: OOps/aops.c:175 OOps/aops.c:194
+#: OOps/aops.c:200 OOps/aops.c:219
 #, c-format
 msgid "Index %d out of range [0,%d] in t[]\n"
 msgstr ""
 
-#: OOps/aops.c:184
+#: OOps/aops.c:209
 #, fuzzy
-msgid "Vector notinitialised\n"
+msgid "Vector not initialised\n"
 msgstr "vco: non inizializzato"
 
-#: OOps/aops.c:686
+#: OOps/aops.c:711
 msgid "non-looping sample"
 msgstr ""
 
-#: OOps/aops.c:828 OOps/aops.c:856
+#: OOps/aops.c:853 OOps/aops.c:881
 #, c-format
 msgid "No tuning table %d"
 msgstr ""
 
-#: OOps/aops.c:901 OOps/aops.c:939
+#: OOps/aops.c:926 OOps/aops.c:964
 msgid "cpstun: invalid table"
 msgstr ""
 
-#: OOps/aops.c:1189
+#: OOps/aops.c:1214
 #, fuzzy
 msgid "Input and output argument count differs in inch"
 msgstr "parametri di input e di output incompatibili"
 
-#: OOps/aops.c:1193
+#: OOps/aops.c:1218
 #, c-format
 msgid "Input channel %d too large; ignored"
 msgstr ""
 
-#: OOps/aops.c:1667
+#: OOps/aops.c:1698
 msgid "k-rate invalue ChannelName cannot start with $"
 msgstr ""
 
+#: OOps/aops.c:1835
+msgid "Unknown functuon called"
+msgstr ""
+
 #: OOps/bus.c:313 OOps/bus.c:345
 msgid "chani: invalid index"
 msgstr ""
@@ -4240,7 +3992,7 @@ msgstr "fft"
 msgid "dispfft: not initialised"
 msgstr "dispfft: non inizializzato"
 
-#: OOps/disprep.c:435 Opcodes/spectra.c:516
+#: OOps/disprep.c:435 Opcodes/spectra.c:518
 msgid "illegal iperiod"
 msgstr ""
 
@@ -4305,15 +4057,15 @@ msgstr ""
 msgid " *** fftlib.c: internal error: invalid FFT size: %d"
 msgstr ""
 
-#: OOps/goto_ops.c:92
+#: OOps/goto_ops.c:93
 msgid "negative time period"
 msgstr ""
 
-#: OOps/goto_ops.c:182
+#: OOps/goto_ops.c:186
 msgid "turnoff2: invalid instrument number"
 msgstr ""
 
-#: OOps/goto_ops.c:187
+#: OOps/goto_ops.c:191
 msgid "turnoff2: invalid mode parameter"
 msgstr ""
 
@@ -4330,7 +4082,7 @@ msgid "cpstabm: invalid modulator table"
 msgstr ""
 
 #: OOps/midiops.c:304 OOps/midiops.c:314 OOps/midiops.c:334 OOps/midiops.c:344
-#: OOps/midiops.c:421 OOps/midiops.c:435 Opcodes/gab/sliderTable.c:563
+#: OOps/midiops.c:421 OOps/midiops.c:435 Opcodes/gab/sliderTable.c:567
 #: Opcodes/midiops2.c:56 Opcodes/midiops2.c:73 Opcodes/midiops2.c:111
 #: Opcodes/midiops2.c:145 Opcodes/midiops2.c:206 Opcodes/midiops2.c:237
 #: Opcodes/midiops2.c:298 Opcodes/midiops2.c:317 Opcodes/midiops2.c:357
@@ -4346,7 +4098,7 @@ msgstr ""
 msgid "illegal mrtmsg argument"
 msgstr ""
 
-#: OOps/midiout.c:383
+#: OOps/midiout.c:389
 #, c-format
 msgid "out contr14 msb:%x lsb:%x\n"
 msgstr ""
@@ -4808,148 +4560,148 @@ msgstr "pvsanal: Non Inizializzato.\n"
 msgid "Unknown window type; replaced by rectangular\n"
 msgstr ""
 
-#: OOps/pvsanal.c:1025
+#: OOps/pvsanal.c:1027
 msgid "pvsynth: Not Initialised.\n"
 msgstr "pvsynth: Non Inizializzato.\n"
 
-#: OOps/remote.c:100
+#: OOps/remote.c:103
 msgid "insufficient memory to initialise remote globals."
 msgstr ""
 
-#: OOps/remote.c:109
+#: OOps/remote.c:112
 msgid "insufficient memory to initialise outgoing socket table."
 msgstr ""
 
-#: OOps/remote.c:116
+#: OOps/remote.c:119
 msgid "insufficient memory to initialise incoming socket table."
 msgstr ""
 
-#: OOps/remote.c:124
+#: OOps/remote.c:127
 msgid "insufficient memory to initialise insrfd_list."
 msgstr ""
 
-#: OOps/remote.c:132
+#: OOps/remote.c:135
 msgid "insufficient memory to initialise chnrfd_list."
 msgstr ""
 
-#: OOps/remote.c:139
+#: OOps/remote.c:142
 msgid "insufficient memory to initialise insrfd table."
 msgstr ""
 
-#: OOps/remote.c:146
+#: OOps/remote.c:149
 msgid "insufficient memory to initialise chnrfd table."
 msgstr ""
 
-#: OOps/remote.c:153
+#: OOps/remote.c:156
 msgid "insufficient memory to initialise local ip address."
 msgstr ""
 
-#: OOps/remote.c:161
+#: OOps/remote.c:164
 msgid "unable to get local ip address."
 msgstr ""
 
-#: OOps/remote.c:222
+#: OOps/remote.c:225
 msgid "could not open remote port"
 msgstr ""
 
-#: OOps/remote.c:237
+#: OOps/remote.c:240
 msgid "---> Could not connect \n"
 msgstr ""
 
-#: OOps/remote.c:241
+#: OOps/remote.c:244
 msgid "---> Failed all attempts to connect. \n"
 msgstr ""
 
-#: OOps/remote.c:244
+#: OOps/remote.c:247
 msgid "--->  Connected. \n"
 msgstr ""
 
-#: OOps/remote.c:258 Opcodes/socksend.c:232
+#: OOps/remote.c:261 Opcodes/socksend.c:305
 msgid "write to socket failed"
 msgstr ""
 
-#: OOps/remote.c:278
+#: OOps/remote.c:281
 msgid "creating socket\n"
 msgstr ""
 
-#: OOps/remote.c:280
+#: OOps/remote.c:283
 msgid "created socket \n"
 msgstr ""
 
-#: OOps/remote.c:292
+#: OOps/remote.c:295
 msgid "setting socket option to reuse the addresse \n"
 msgstr ""
 
-#: OOps/remote.c:309 Opcodes/sockrecv.c:133 Opcodes/sockrecv.c:223
-#: Opcodes/socksend.c:211
+#: OOps/remote.c:312 Opcodes/sockrecv.c:141 Opcodes/sockrecv.c:237
+#: Opcodes/socksend.c:284
 msgid "bind failed"
 msgstr ""
 
-#: OOps/remote.c:313 Opcodes/socksend.c:216
+#: OOps/remote.c:316 Opcodes/socksend.c:289
 msgid "listen failed"
 msgstr ""
 
-#: OOps/remote.c:318 Opcodes/socksend.c:222
+#: OOps/remote.c:321 Opcodes/socksend.c:295
 msgid "accept failed"
 msgstr ""
 
-#: OOps/remote.c:321
+#: OOps/remote.c:324
 #, c-format
 msgid "accepted, conn=%d \n"
 msgstr ""
 
-#: OOps/remote.c:353 OOps/remote.c:374 OOps/remote.c:417 OOps/remote.c:449
-#: OOps/remote.c:489
+#: OOps/remote.c:356 OOps/remote.c:377 OOps/remote.c:420 OOps/remote.c:452
+#: OOps/remote.c:492
 msgid "failed to initialise remote globals."
 msgstr ""
 
-#: OOps/remote.c:378 OOps/remote.c:421
+#: OOps/remote.c:381 OOps/remote.c:424
 msgid "missing instr nos"
 msgstr ""
 
-#: OOps/remote.c:390 OOps/remote.c:430
+#: OOps/remote.c:393 OOps/remote.c:433
 msgid "illegal instr no"
 msgstr ""
 
-#: OOps/remote.c:393
+#: OOps/remote.c:396
 msgid "insno already remote"
 msgstr ""
 
-#: OOps/remote.c:403 OOps/remote.c:474
+#: OOps/remote.c:406 OOps/remote.c:477
 msgid "Failed to open port to listen"
 msgstr ""
 
-#: OOps/remote.c:423
+#: OOps/remote.c:426
 #, c-format
 msgid "*** str1: %s own:%s\n"
 msgstr ""
 
-#: OOps/remote.c:433
+#: OOps/remote.c:436
 msgid "insno already specific remote"
 msgstr ""
 
-#: OOps/remote.c:453 OOps/remote.c:493
+#: OOps/remote.c:456 OOps/remote.c:496
 msgid "missing channel nos"
 msgstr ""
 
-#: OOps/remote.c:463 OOps/remote.c:502
+#: OOps/remote.c:466 OOps/remote.c:505
 msgid "illegal channel no"
 msgstr ""
 
-#: OOps/remote.c:466
+#: OOps/remote.c:469
 msgid "channel already remote"
 msgstr ""
 
-#: OOps/remote.c:505
+#: OOps/remote.c:508
 msgid "channel already specific remote"
 msgstr ""
 
-#: OOps/remote.c:531 OOps/remote.c:555 OOps/remote.c:579
+#: OOps/remote.c:534 OOps/remote.c:558 OOps/remote.c:582
 msgid "CLsend failed"
 msgstr ""
 
-#: OOps/remote.c:645 OOps/remote.c:653 OOps/remote.c:661 OOps/remote.c:669
-#: OOps/remote.c:677
+#: OOps/remote.c:648 OOps/remote.c:656 OOps/remote.c:664 OOps/remote.c:672
+#: OOps/remote.c:680
 msgid ""
 "*** This version of Csound was not compiled with remote event support ***\n"
 msgstr ""
@@ -5058,53 +4810,53 @@ msgstr "linseg non inizializzato (krate)\n"
 msgid "linseg: not initialised (arate)\n"
 msgstr "linseg: non inizializzato (arate)\n"
 
-#: OOps/ugens1.c:463 OOps/ugens1.c:465 OOps/ugens1.c:512 OOps/ugens1.c:514
-#: OOps/ugens1.c:564 OOps/ugens1.c:566 OOps/ugens1.c:610 OOps/ugens1.c:612
-#: OOps/ugens1.c:774 OOps/ugens1.c:776
+#: OOps/ugens1.c:464 OOps/ugens1.c:466 OOps/ugens1.c:513 OOps/ugens1.c:515
+#: OOps/ugens1.c:565 OOps/ugens1.c:567 OOps/ugens1.c:611 OOps/ugens1.c:613
+#: OOps/ugens1.c:775 OOps/ugens1.c:777
 #, c-format
 msgid "ival%d is zero"
 msgstr ""
 
-#: OOps/ugens1.c:466 OOps/ugens1.c:515 OOps/ugens1.c:567 OOps/ugens1.c:613
-#: OOps/ugens1.c:777
+#: OOps/ugens1.c:467 OOps/ugens1.c:516 OOps/ugens1.c:568 OOps/ugens1.c:614
+#: OOps/ugens1.c:778
 #, c-format
 msgid "ival%d sign conflict"
 msgstr ""
 
-#: OOps/ugens1.c:495 OOps/ugens1.c:544
+#: OOps/ugens1.c:496 OOps/ugens1.c:545
 #, c-format
 msgid "Breakpoint time %f not valid"
 msgstr ""
 
-#: OOps/ugens1.c:706
+#: OOps/ugens1.c:707
 msgid "expseg (krate): not initialised"
 msgstr "expseg (krate): non inizializzato"
 
-#: OOps/ugens1.c:732
+#: OOps/ugens1.c:733
 msgid "expseg (arate): not initialised"
 msgstr "expseg (arate): non inizializzato"
 
-#: OOps/ugens1.c:1013 OOps/ugens1.c:1149 OOps/ugens1.c:1311
+#: OOps/ugens1.c:1014 OOps/ugens1.c:1150 OOps/ugens1.c:1312
 msgid "non-positive iatdec"
 msgstr ""
 
-#: OOps/ugens1.c:1106 OOps/ugens1.c:1273
+#: OOps/ugens1.c:1107 OOps/ugens1.c:1274
 msgid "ixmod out of range."
 msgstr ""
 
-#: OOps/ugens1.c:1134 OOps/ugens1.c:1301
+#: OOps/ugens1.c:1135 OOps/ugens1.c:1302
 msgid "rise func ends with zero"
 msgstr ""
 
-#: OOps/ugens1.c:1178 OOps/ugens1.c:1257
+#: OOps/ugens1.c:1179 OOps/ugens1.c:1258
 msgid "envlpx rise func ends with zero"
 msgstr ""
 
-#: OOps/ugens1.c:1199 OOps/ugens1.c:1254
+#: OOps/ugens1.c:1200 OOps/ugens1.c:1255
 msgid "envlpx(krate): not initialised"
 msgstr "envlpx(krate): non inizializzato"
 
-#: OOps/ugens2.c:48 OOps/ugens2.c:61 Opcodes/shape.c:377
+#: OOps/ugens2.c:48 OOps/ugens2.c:61 Opcodes/shape.c:379
 msgid "init phase truncation\n"
 msgstr ""
 
@@ -5168,8 +4920,8 @@ msgid "oscil(krate): not initialised"
 msgstr "oscil(krate): non inizializzato"
 
 #: OOps/ugens2.c:1139 OOps/ugens2.c:1167 OOps/ugens2.c:1192 OOps/ugens2.c:1219
-#: Opcodes/pitch.c:1579 Opcodes/pitch.c:1606 Opcodes/pitch.c:1633
-#: Opcodes/pitch.c:1662
+#: Opcodes/pitch.c:1580 Opcodes/pitch.c:1607 Opcodes/pitch.c:1634
+#: Opcodes/pitch.c:1663
 msgid "oscil: not initialised"
 msgstr "oscil: non inizializzato"
 
@@ -5285,7 +5037,7 @@ msgstr ""
 msgid "Seeding from current time %lu\n"
 msgstr ""
 
-#: OOps/ugens5.c:198 OOps/ugens5.c:260 Opcodes/gab/gab.c:45 Opcodes/ugsc.c:188
+#: OOps/ugens5.c:198 OOps/ugens5.c:260 Opcodes/gab/gab.c:47 Opcodes/ugsc.c:186
 #, c-format
 msgid "illegal reson iscl value, %f"
 msgstr ""
@@ -5517,8 +5269,8 @@ msgstr ""
 msgid "Table no. < 1 dft=%.2f  sft=%.2f"
 msgstr ""
 
-#: OOps/ugrw1.c:1781 OOps/ugrw1.c:1822 Opcodes/fareyseq.c:455
-#: Opcodes/fareyseq.c:477
+#: OOps/ugrw1.c:1781 OOps/ugrw1.c:1822 Opcodes/fareyseq.c:453
+#: Opcodes/fareyseq.c:475
 #, c-format
 msgid "Source sft table %.2f not found."
 msgstr ""
@@ -5748,19 +5500,19 @@ msgstr ""
 msgid "reverbx: not initialised"
 msgstr "reverbx: non inizializzato"
 
-#: Opcodes/ambicode1.c:80
+#: Opcodes/ambicode1.c:82
 msgid "The numbers of input and output arguments are not valid."
 msgstr ""
 
-#: Opcodes/ambicode1.c:163
+#: Opcodes/ambicode1.c:165
 msgid "The number of input arguments is not valid."
 msgstr ""
 
-#: Opcodes/ambicode1.c:167
+#: Opcodes/ambicode1.c:169
 msgid "The isetup value should be between 1 and 5."
 msgstr ""
 
-#: Opcodes/ambicode1.c:193
+#: Opcodes/ambicode1.c:195
 msgid "The output channel count does not match the isetup value."
 msgstr ""
 
@@ -5800,16 +5552,16 @@ msgstr ""
 msgid "Not supported setup number!"
 msgstr ""
 
-#: Opcodes/babo.c:740
+#: Opcodes/babo.c:742
 #, c-format
 msgid "Babo: resonator dimensions are incorrect (%.1f, %.1f, %.1f)"
 msgstr ""
 
-#: Opcodes/bilbar.c:82
+#: Opcodes/bilbar.c:83
 msgid "No data to continue"
 msgstr ""
 
-#: Opcodes/bilbar.c:108
+#: Opcodes/bilbar.c:109
 msgid "Ends must be clamped(1), pivoting(2) or free(3)"
 msgstr ""
 
@@ -5822,8 +5574,8 @@ msgstr "vco: non inizializzato"
 msgid "DLineN: Delay length too big ... setting to maximum length of %ld.\n"
 msgstr ""
 
-#: Opcodes/bowedbar.c:98 Opcodes/physmod.c:489
-msgid "unknown lowest frequency for bowed string -- assuming 50Hz\n"
+#: Opcodes/bowedbar.c:98
+msgid "unknown lowest frequency for bowed bar -- assuming 50Hz\n"
 msgstr ""
 
 #: Opcodes/clfilt.c:53
@@ -5901,17 +5653,17 @@ msgstr ""
 msgid "Unknown control %d"
 msgstr ""
 
-#: Opcodes/cpumeter.c:73
+#: Opcodes/cpumeter.c:77
 #, fuzzy, c-format
 msgid "Failed to open /proc/stat: %s"
 msgstr "non riesco ad aprire il file pvocex %s: %s"
 
-#: Opcodes/cpumeter.c:75 Opcodes/cpumeter.c:80 Opcodes/cpumeter.c:107
-#: Opcodes/cpumeter.c:147
+#: Opcodes/cpumeter.c:79 Opcodes/cpumeter.c:84 Opcodes/cpumeter.c:111
+#: Opcodes/cpumeter.c:151
 msgid "failed /proc/stat read"
 msgstr ""
 
-#: Opcodes/crossfm.c:33
+#: Opcodes/crossfm.c:34
 #, fuzzy
 msgid "crossfm: ftable not found"
 msgstr "GEN30: source ftable non trovata"
@@ -5954,31 +5706,31 @@ msgstr ""
 msgid "insufficient arguments for fareytable"
 msgstr "argomenti insufficienti"
 
-#: Opcodes/fareyseq.c:250 Opcodes/fareyseq.c:300
+#: Opcodes/fareyseq.c:251 Opcodes/fareyseq.c:301
 #, c-format
 msgid "Farey: Table no. < 1 dft=%.2f  sft=%.2f"
 msgstr ""
 
-#: Opcodes/fareyseq.c:255
+#: Opcodes/fareyseq.c:256
 #, c-format
 msgid "Farey: Filter type < 1 dft=%.2f  sft=%.2f"
 msgstr ""
 
-#: Opcodes/fareyseq.c:270 Opcodes/fareyseq.c:318
+#: Opcodes/fareyseq.c:271 Opcodes/fareyseq.c:319
 #, c-format
 msgid "Farey: Destination dft table %.2f not found."
 msgstr ""
 
-#: Opcodes/fareyseq.c:281 Opcodes/fareyseq.c:329
+#: Opcodes/fareyseq.c:282 Opcodes/fareyseq.c:330
 #, fuzzy, c-format
 msgid "Farey: Source sft table %.2f not found."
 msgstr "GEN32: source ftable %d non trovata"
 
-#: Opcodes/fareyseq.c:305
+#: Opcodes/fareyseq.c:306
 msgid "Farey: Filter type < 1"
 msgstr ""
 
-#: Opcodes/fareyseq.c:447 Opcodes/fareyseq.c:468
+#: Opcodes/fareyseq.c:445 Opcodes/fareyseq.c:466
 #, c-format
 msgid "Table no. < 1 sft=%.2f"
 msgstr ""
@@ -6086,45 +5838,45 @@ msgstr ""
 msgid "follow - zero length!"
 msgstr ""
 
-#: Opcodes/fout.c:59
+#: Opcodes/fout.c:60
 #, c-format
 msgid "Closing file '%s'...\n"
 msgstr ""
 
-#: Opcodes/fout.c:101
+#: Opcodes/fout.c:102
 msgid "invalid file handle"
 msgstr ""
 
-#: Opcodes/fout.c:108 Opcodes/fout.c:420
+#: Opcodes/fout.c:109 Opcodes/fout.c:421
 msgid "invalid file name"
 msgstr ""
 
-#: Opcodes/fout.c:165
+#: Opcodes/fout.c:166
 #, c-format
 msgid "error opening file '%s'"
 msgstr ""
 
-#: Opcodes/fout.c:192
+#: Opcodes/fout.c:193
 #, c-format
 msgid "error opening sound file '%s'"
 msgstr ""
 
-#: Opcodes/fout.c:429
+#: Opcodes/fout.c:430
 #, c-format
 msgid "cannot close '%s': not found in list of open files"
 msgstr ""
 
-#: Opcodes/fout.c:440
+#: Opcodes/fout.c:441
 #, c-format
 msgid "cannot close file #%d: not a valid handle"
 msgstr ""
 
-#: Opcodes/fout.c:447
+#: Opcodes/fout.c:448
 #, c-format
 msgid "file #%d (%s) is in use, will be closed when released"
 msgstr ""
 
-#: Opcodes/fout.c:476 Opcodes/fout.c:479 Opcodes/fout.c:550 Opcodes/fout.c:553
+#: Opcodes/fout.c:477 Opcodes/fout.c:480 Opcodes/fout.c:551 Opcodes/fout.c:554
 msgid "fouti: invalid file handle"
 msgstr ""
 
@@ -6202,555 +5954,705 @@ msgstr ""
 msgid "ftsave: failed to write file"
 msgstr ""
 
-#: Opcodes/gab/gab.c:109
+#: Opcodes/gab/gab.c:111
 msgid "fastab: incorrect table number"
 msgstr ""
 
-#: Opcodes/gab/gab.c:132 Opcodes/gab/gab.c:141 Opcodes/gab/gab.c:171
+#: Opcodes/gab/gab.c:134 Opcodes/gab/gab.c:143 Opcodes/gab/gab.c:173
 msgid "tabw off end"
 msgstr ""
 
-#: Opcodes/gab/gab.c:157 Opcodes/gab/gab.c:225 Opcodes/gab/gab.c:234
+#: Opcodes/gab/gab.c:159 Opcodes/gab/gab.c:227 Opcodes/gab/gab.c:236
 msgid "tab off end"
 msgstr ""
 
-#: Opcodes/gab/gab.c:183
+#: Opcodes/gab/gab.c:185
 msgid "tab_i: incorrect table number"
 msgstr ""
 
-#: Opcodes/gab/gab.c:190
-msgid "tab_i off end"
+#: Opcodes/gab/gab.c:192
+#, c-format
+msgid "tab_i off end: table number: %d\n"
 msgstr ""
 
-#: Opcodes/gab/gab.c:202
+#: Opcodes/gab/gab.c:204
 msgid "tabw_i: incorrect table number"
 msgstr ""
 
-#: Opcodes/gab/gab.c:209
+#: Opcodes/gab/gab.c:211
 msgid "tabw_i off end"
 msgstr ""
 
-#: Opcodes/gab/gab.c:247
+#: Opcodes/gab/gab.c:249
 msgid "tab_init: incorrect table number"
 msgstr ""
 
-#: Opcodes/gab/gab.c:316
+#: Opcodes/gab/gab.c:318
 msgid "printi parameter was not a \"quoted string\""
 msgstr ""
 
-#: Opcodes/gab/gab.c:423
+#: Opcodes/gab/gab.c:425
 msgid "adsynt2: wavetable not found!"
 msgstr ""
 
-#: Opcodes/gab/gab.c:435
+#: Opcodes/gab/gab.c:437
 msgid "adsynt2: freqtable not found!"
 msgstr ""
 
-#: Opcodes/gab/gab.c:440
+#: Opcodes/gab/gab.c:442
 msgid "adsynt2: partial count is greater than freqtable size!"
 msgstr ""
 
-#: Opcodes/gab/gab.c:449
+#: Opcodes/gab/gab.c:451
 msgid "adsynt2: amptable not found!"
 msgstr ""
 
-#: Opcodes/gab/gab.c:454
+#: Opcodes/gab/gab.c:456
 msgid "adsynt2: partial count is greater than amptable size!"
 msgstr ""
 
-#: Opcodes/gab/gab.c:499
+#: Opcodes/gab/gab.c:501
 #, fuzzy
 msgid "adsynt2: not initialised"
 msgstr "adsynt: non inizializzato"
 
-#: Opcodes/gab/gab.c:741
+#: Opcodes/gab/gab.c:743
 msgid "max_k: invalid imaxflag value"
 msgstr ""
 
-#: Opcodes/gab/hvs.c:68
+#: Opcodes/gab/hvs.c:70
 msgid "hvs1: a line segment must be delimited by 2 points at least"
 msgstr ""
 
-#: Opcodes/gab/hvs.c:150
+#: Opcodes/gab/hvs.c:152
 msgid "hvs2: a square area must be delimited by 2 lines at least"
 msgstr ""
 
-#: Opcodes/gab/hvs.c:246
+#: Opcodes/gab/hvs.c:248
 msgid "hvs3: a square area must be delimited by 2 lines at least"
 msgstr ""
 
-#: Opcodes/gab/hvs.c:389
+#: Opcodes/gab/hvs.c:390
 msgid "vphaseseg: the first function is invalid or missing"
 msgstr ""
 
-#: Opcodes/gab/hvs.c:396
+#: Opcodes/gab/hvs.c:398 Opcodes/gab/vectorial.c:2301
 msgid "vphaseseg: invalid num. of elements"
 msgstr ""
 
-#: Opcodes/gab/hvs.c:414
+#: Opcodes/gab/hvs.c:416
 msgid "vphaseseg: function invalid or missing"
 msgstr ""
 
-#: Opcodes/gab/newgabopc.c:39 Opcodes/gab/newgabopc.c:54
+#: Opcodes/gab/newgabopc.c:40 Opcodes/gab/newgabopc.c:55
 msgid "vtable1: incorrect table number"
 msgstr ""
 
-#: Opcodes/gab/newgabopc.c:359
+#: Opcodes/gab/newgabopc.c:241 Opcodes/gab/newgabopc.c:296
+msgid "copyTabElems: incorrect destination table number"
+msgstr ""
+
+#: Opcodes/gab/newgabopc.c:246 Opcodes/gab/newgabopc.c:301
+msgid ""
+"copyTabElems: destination table too short or number of elements to copy too "
+"big"
+msgstr ""
+
+#: Opcodes/gab/newgabopc.c:252 Opcodes/gab/newgabopc.c:306
+#, fuzzy
+msgid "copyTabElems: incorrect source table number"
+msgstr "GEN53: numero di source table non valido"
+
+#: Opcodes/gab/newgabopc.c:257 Opcodes/gab/newgabopc.c:310
+msgid ""
+"copyTabElems: source table size less than the number of elements to copy"
+msgstr ""
+
+#: Opcodes/gab/newgabopc.c:273 Opcodes/gab/newgabopc.c:318
+msgid "copyTabElems: source table too short"
+msgstr ""
+
+#: Opcodes/gab/newgabopc.c:276 Opcodes/gab/newgabopc.c:321
+msgid "copyTabElems: destination table too short"
+msgstr ""
+
+#: Opcodes/gab/newgabopc.c:347
+msgid "inrg: audio input is not enabled"
+msgstr ""
+
+#: Opcodes/gab/newgabopc.c:362
 msgid "inrg: channel number cannot be < 1 (1 is the first channel)"
 msgstr ""
 
-#: Opcodes/gab/newgabopc.c:400
+#: Opcodes/gab/newgabopc.c:403
 msgid "outrg: channel number cannot be < 1 (1 is the first channel)"
 msgstr ""
 
-#: Opcodes/gab/newgabopc.c:439 Opcodes/gab/newgabopc.c:671
+#: Opcodes/gab/newgabopc.c:440 Opcodes/gab/newgabopc.c:574
+#: Opcodes/gab/newgabopc.c:672
 msgid "invalid function"
 msgstr ""
 
-#: Opcodes/gab/newgabopc.c:442
+#: Opcodes/gab/newgabopc.c:443
 msgid "lposc: no sample rate stored in function; assuming=sr\n"
 msgstr ""
 
-#: Opcodes/gab/newgabopc.c:673
+#: Opcodes/gab/newgabopc.c:577
+msgid "lposcil: no sample rate stored in function assuming=sr\n"
+msgstr ""
+
+#: Opcodes/gab/newgabopc.c:674
 msgid "lposcil: no sample rate stored in function; assuming=sr\n"
 msgstr ""
 
-#: Opcodes/gab/sliderTable.c:45 Opcodes/gab/sliderTable.c:254
+#: Opcodes/gab/sliderTable.c:47 Opcodes/gab/sliderTable.c:256
 #: Opcodes/midiops3.c:44 Opcodes/midiops3.c:146 Opcodes/midiops3.c:259
 #: Opcodes/midiops3.c:317 Opcodes/midiops3.c:413
 msgid "illegal channel"
 msgstr ""
 
-#: Opcodes/gab/sliderTable.c:65 Opcodes/gab/sliderTable.c:277
+#: Opcodes/gab/sliderTable.c:67 Opcodes/gab/sliderTable.c:280
 #: Opcodes/midiops3.c:58 Opcodes/midiops3.c:162 Opcodes/midiops3.c:273
 #, c-format
 msgid "illegal control number at position n.%d"
 msgstr ""
 
-#: Opcodes/gab/sliderTable.c:74
+#: Opcodes/gab/sliderTable.c:76
 #, c-format
 msgid ""
 "sliderXtable: illegal initvalue at position %d.  When using table indexing, "
 "the init range is 0 to 1"
 msgstr ""
 
-#: Opcodes/gab/sliderTable.c:84 Opcodes/gab/sliderTable.c:284
-#: Opcodes/gab/sliderTable.c:509 Opcodes/midiops3.c:64 Opcodes/midiops3.c:168
+#: Opcodes/gab/sliderTable.c:86 Opcodes/gab/sliderTable.c:287
+#: Opcodes/gab/sliderTable.c:513 Opcodes/midiops3.c:64 Opcodes/midiops3.c:168
 #: Opcodes/midiops3.c:347
 #, c-format
 msgid "illegal initvalue at position n.%d"
 msgstr ""
 
-#: Opcodes/gab/sliderTable.c:96 Opcodes/gab/sliderTable.c:296
+#: Opcodes/gab/sliderTable.c:98 Opcodes/gab/sliderTable.c:299
 msgid "sliderXtable: zero is illegal in exponential operations"
 msgstr ""
 
-#: Opcodes/gab/sliderTable.c:312
+#: Opcodes/gab/sliderTable.c:315
 #, c-format
 msgid ""
 "sliderXtable: illegal initvalue at position %d. When using table indexing, "
 "the init range is 0 to 1"
 msgstr ""
 
-#: Opcodes/gab/sliderTable.c:565 Opcodes/midiops2.c:321 Opcodes/midiops2.c:359
+#: Opcodes/gab/sliderTable.c:569 Opcodes/midiops2.c:321 Opcodes/midiops2.c:359
 #: Opcodes/midiops2.c:391 Opcodes/midiops2.c:440 Opcodes/midiops2.c:475
 #: Opcodes/midiops2.c:517 Opcodes/midiops2.c:532 Opcodes/midiops2.c:551
 msgid "illegal midi channel"
 msgstr ""
 
-#: Opcodes/gab/tabmorph.c:42
+#: Opcodes/gab/tabmorph.c:43
 msgid "tabmorph: invalid table number"
 msgstr ""
 
-#: Opcodes/gab/tabmorph.c:46
+#: Opcodes/gab/tabmorph.c:47
 msgid "tabmorph: all tables must have the same length!"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:33
+#: Opcodes/gab/vectorial.c:35
 msgid "mtablei: incorrect table number"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:63 Opcodes/gab/vectorial.c:83
-#: Opcodes/gab/vectorial.c:133 Opcodes/gab/vectorial.c:200
+#: Opcodes/gab/vectorial.c:65 Opcodes/gab/vectorial.c:85
+#: Opcodes/gab/vectorial.c:135 Opcodes/gab/vectorial.c:202
 msgid "mtable: incorrect table number"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:185
+#: Opcodes/gab/vectorial.c:187
 msgid "mtabi: incorrect table number"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:252
+#: Opcodes/gab/vectorial.c:254
 msgid "mtablewi: incorrect table number"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:268 Opcodes/gab/vectorial.c:288
-#: Opcodes/gab/vectorial.c:317 Opcodes/gab/vectorial.c:362
-#: Opcodes/gab/vectorial.c:406
+#: Opcodes/gab/vectorial.c:270 Opcodes/gab/vectorial.c:290
+#: Opcodes/gab/vectorial.c:319 Opcodes/gab/vectorial.c:364
+#: Opcodes/gab/vectorial.c:408
 msgid "mtabw: incorrect table number"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:348
+#: Opcodes/gab/vectorial.c:350
 msgid "mtabwi: incorrect table number"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:380
+#: Opcodes/gab/vectorial.c:382
 msgid "mtablew: incorrect table number"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:454 Opcodes/gab/vectorial.c:513
+#: Opcodes/gab/vectorial.c:457 Opcodes/gab/vectorial.c:516
 #, c-format
 msgid "vadd_i: invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:470
+#: Opcodes/gab/vectorial.c:473
 msgid "vadd_i: ifn length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:497
+#: Opcodes/gab/vectorial.c:500
 msgid "vadd: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:529
+#: Opcodes/gab/vectorial.c:532
 msgid "vmult_i: ifn length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:556
+#: Opcodes/gab/vectorial.c:559
 msgid "vmult: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:572
+#: Opcodes/gab/vectorial.c:575
 #, c-format
 msgid "vpow_i: invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:589
+#: Opcodes/gab/vectorial.c:592
 msgid "vpow_i: ifn length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:617
+#: Opcodes/gab/vectorial.c:620
 msgid "vpow: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:633
+#: Opcodes/gab/vectorial.c:636
 #, c-format
 msgid "vexp_i: invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:649
+#: Opcodes/gab/vectorial.c:652
 msgid "vexp_i: ifn length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:676
+#: Opcodes/gab/vectorial.c:679
 msgid "vexp: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:694
+#: Opcodes/gab/vectorial.c:697
 #, c-format
 msgid "vectorsop: ifn1 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:699
+#: Opcodes/gab/vectorial.c:702
 #, c-format
 msgid "vectorsop: ifn2 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:738
+#: Opcodes/gab/vectorial.c:742
 msgid "vcopy: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:756
+#: Opcodes/gab/vectorial.c:760
 msgid "vcopy: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:783
+#: Opcodes/gab/vectorial.c:787
 #, c-format
 msgid "vcopy_i: ifn1 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:788
+#: Opcodes/gab/vectorial.c:792
 #, c-format
 msgid "vcopy_i: ifn2 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:810
+#: Opcodes/gab/vectorial.c:814
 msgid "vcopy_i: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:827
+#: Opcodes/gab/vectorial.c:831
 msgid "vcopy_i: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:866
+#: Opcodes/gab/vectorial.c:870
 msgid "vaddv: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:885
+#: Opcodes/gab/vectorial.c:889
 msgid "vaddv: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:911
+#: Opcodes/gab/vectorial.c:915
 #, c-format
 msgid "vaddv_i: ifn1 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:916
+#: Opcodes/gab/vectorial.c:920
 #, c-format
 msgid "vaddv_i: ifn2 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:938
+#: Opcodes/gab/vectorial.c:942
 msgid "vaddv_i: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:956
+#: Opcodes/gab/vectorial.c:960
 msgid "vaddv_i: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:987
+#: Opcodes/gab/vectorial.c:991
 msgid "vsubv: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1006
+#: Opcodes/gab/vectorial.c:1010
 msgid "vsubv: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1033
+#: Opcodes/gab/vectorial.c:1037
 #, c-format
 msgid "vsubv_i: ifn1 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1038
+#: Opcodes/gab/vectorial.c:1042
 #, c-format
 msgid "vsubv_i: ifn2 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1060
+#: Opcodes/gab/vectorial.c:1064
 msgid "vsubv_i: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1078
+#: Opcodes/gab/vectorial.c:1082
 msgid "vsubv_i: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1115
+#: Opcodes/gab/vectorial.c:1119
 msgid "vmultv: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1134
+#: Opcodes/gab/vectorial.c:1138
 msgid "vmultv: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1161
+#: Opcodes/gab/vectorial.c:1165
 #, c-format
 msgid "vmultv_i: ifn1 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1166
+#: Opcodes/gab/vectorial.c:1170
 #, c-format
 msgid "vmultv_i: ifn2 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1188
+#: Opcodes/gab/vectorial.c:1192
 msgid "vmultv_i: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1205
+#: Opcodes/gab/vectorial.c:1209
 msgid "vmultv_i: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1242
+#: Opcodes/gab/vectorial.c:1246
 msgid "vdivv: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1261
+#: Opcodes/gab/vectorial.c:1265
 msgid "vdivv: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1288
+#: Opcodes/gab/vectorial.c:1292
 #, c-format
 msgid "vdivv_i: ifn1 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1293
+#: Opcodes/gab/vectorial.c:1297
 #, c-format
 msgid "vdivv_i: ifn2 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1315
+#: Opcodes/gab/vectorial.c:1319
 msgid "vdivv_i: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1333
+#: Opcodes/gab/vectorial.c:1337
 msgid "vdivv_i: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1370
+#: Opcodes/gab/vectorial.c:1374
 msgid "vpowv: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1389
+#: Opcodes/gab/vectorial.c:1393
 msgid "vpowv: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1416
+#: Opcodes/gab/vectorial.c:1420
 #, c-format
 msgid "vpowv_i: ifn1 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1421
+#: Opcodes/gab/vectorial.c:1425
 #, c-format
 msgid "vpowv_i: ifn2 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1443
+#: Opcodes/gab/vectorial.c:1447
 msgid "vpowv_i: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1460
+#: Opcodes/gab/vectorial.c:1464
 msgid "vpowv_i: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1497
+#: Opcodes/gab/vectorial.c:1501
 msgid "vexpv: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1516
+#: Opcodes/gab/vectorial.c:1520
 msgid "vexpv: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1543
+#: Opcodes/gab/vectorial.c:1547
 #, c-format
 msgid "vexpv_i: ifn1 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1548
+#: Opcodes/gab/vectorial.c:1552
 #, c-format
 msgid "vexpv_i: ifn2 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1570
+#: Opcodes/gab/vectorial.c:1574
 msgid "vexpv_i: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1588
+#: Opcodes/gab/vectorial.c:1592
 msgid "vexpv_i: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1625
+#: Opcodes/gab/vectorial.c:1629
 msgid "vmap: Error: ifn1 and ifn2 can not be the same"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1630
+#: Opcodes/gab/vectorial.c:1634
 #, c-format
 msgid "vmap: ifn1 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1635
+#: Opcodes/gab/vectorial.c:1639
 #, c-format
 msgid "vmap: ifn2 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1657
+#: Opcodes/gab/vectorial.c:1661
 msgid "vmap: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1674
+#: Opcodes/gab/vectorial.c:1678
 msgid "vmap: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1870
+#: Opcodes/gab/vectorial.c:1698
+#, fuzzy
+msgid "vectorop: invalid num of elements"
+msgstr "numero errato di discussioni ftable"
+
+#: Opcodes/gab/vectorial.c:1727
+#, fuzzy
+msgid "vport: invalid table length or num of elements"
+msgstr "GEN53: lunghezza della tavola non valida"
+
+#: Opcodes/gab/vectorial.c:1730
+#, fuzzy
+msgid "vport: invalid table"
+msgstr "soundin: skip time non valido"
+
+#: Opcodes/gab/vectorial.c:1735
+msgid "vport: invalid init table length or num of elements"
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:1738
+#, fuzzy
+msgid "vport: invalid init table"
+msgstr "soundin: skip time non valido"
+
+#: Opcodes/gab/vectorial.c:1875
 #, c-format
 msgid "vrandh: Seeding from current time %lu\n"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1968
+#: Opcodes/gab/vectorial.c:1888
+#, fuzzy
+msgid "vrandh: Invalid table."
+msgstr "ftable num. %f non valida"
+
+#: Opcodes/gab/vectorial.c:1891
+msgid "vrandh: idstoffset is greater than table length."
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:1896
+msgid "randh: Table length exceeded, last elements discarded."
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:1975
 #, c-format
 msgid "vrandi: Seeding from current time %lu\n"
 msgstr ""
 
-#: Opcodes/grain4.c:57
+#: Opcodes/gab/vectorial.c:1987
+#, fuzzy
+msgid "vrandi: Invalid table."
+msgstr "ftable num. %f non valida"
+
+#: Opcodes/gab/vectorial.c:1990
+msgid "vrandi: idstoffset is greater thantable length."
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:1995
+msgid "vrandi: Table length exceeded, last elements discarded."
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:2077 Opcodes/gab/vectorial.c:2084
+#: Opcodes/gab/vectorial.c:2091
+#, fuzzy
+msgid "vecdelay: invalid num of elements"
+msgstr "numero errato di discussioni ftable"
+
+#: Opcodes/gab/vectorial.c:2079
+#, fuzzy
+msgid "vecdly: invalid output table"
+msgstr "GEN53: window table non valida"
+
+#: Opcodes/gab/vectorial.c:2086
+#, fuzzy
+msgid "vecdly: invalid input table"
+msgstr "GEN53: window table non valida"
+
+#: Opcodes/gab/vectorial.c:2093
+#, fuzzy
+msgid "vecdly: invalid delay table"
+msgstr "GEN53: window table non valida"
+
+#: Opcodes/gab/vectorial.c:2138
+#, fuzzy
+msgid "vecdly: not initialised"
+msgstr "vdelay: non inizializzato"
+
+#: Opcodes/gab/vectorial.c:2181
+msgid "vlinseg/vexpseg: invalid num. of elements"
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:2223 Opcodes/vpvoc.c:118
+msgid "tableseg: not initialised"
+msgstr "tableseg: non inizializzato"
+
+#: Opcodes/gab/vectorial.c:2253 Opcodes/vpvoc.c:146
+msgid "tablexseg: not initialised"
+msgstr "tablexseg: non inizializzato"
+
+#: Opcodes/gab/vectorial.c:2406
+#, fuzzy
+msgid "vdelayk: not initialised"
+msgstr "delayk: non inizializzato"
+
+#: Opcodes/gab/vectorial.c:2439 Opcodes/gab/vectorial.c:2445
+#, fuzzy
+msgid "cella: invalid num of elements"
+msgstr "numero errato di discussioni ftable"
+
+#: Opcodes/gab/vectorial.c:2441
+#, fuzzy
+msgid "cella: invalid output table"
+msgstr "GEN53: window table non valida"
+
+#: Opcodes/gab/vectorial.c:2448
+msgid "cella: invalid initial state table"
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:2452
+#, fuzzy
+msgid "cella: invalid rule table"
+msgstr "GEN53: window table non valida"
+
+#: Opcodes/grain4.c:59
 msgid "granule_set: Unable to find function table"
 msgstr ""
 
-#: Opcodes/grain4.c:67
+#: Opcodes/grain4.c:69
 msgid "granule_set: Unable to find function table for envelope"
 msgstr ""
 
-#: Opcodes/grain4.c:73
+#: Opcodes/grain4.c:75
 msgid "granule_set: Too many voices"
 msgstr ""
 
-#: Opcodes/grain4.c:76
+#: Opcodes/grain4.c:78
 msgid "granule_set: iratio must be greater then 0"
 msgstr ""
 
-#: Opcodes/grain4.c:80
+#: Opcodes/grain4.c:82
 msgid "granule_set: imode must be -1, 0 or +1"
 msgstr ""
 
-#: Opcodes/grain4.c:84
+#: Opcodes/grain4.c:86
 msgid "granule_set: Illegal ithd, must be greater than zero"
 msgstr ""
 
-#: Opcodes/grain4.c:89
+#: Opcodes/grain4.c:91
 msgid "granule_set: ipshift must be integer between 0 and 4"
 msgstr ""
 
-#: Opcodes/grain4.c:94
+#: Opcodes/grain4.c:96
 msgid "granule_set: Not enough voices for the number of pitches"
 msgstr ""
 
-#: Opcodes/grain4.c:101
+#: Opcodes/grain4.c:103
 msgid "granule_set: ipitch1 must be greater then zero"
 msgstr ""
 
-#: Opcodes/grain4.c:106
+#: Opcodes/grain4.c:108
 msgid "granule_set: ipitch2 must be greater then zero"
 msgstr ""
 
-#: Opcodes/grain4.c:111
+#: Opcodes/grain4.c:113
 msgid "granule_set: ipitch3 must be greater then zero"
 msgstr ""
 
-#: Opcodes/grain4.c:116
+#: Opcodes/grain4.c:118
 msgid "granule_set: ipitch4 must be greater then zero"
 msgstr ""
 
-#: Opcodes/grain4.c:121
+#: Opcodes/grain4.c:123
 msgid "granule_set: must be positive and less than function table length"
 msgstr ""
 
-#: Opcodes/grain4.c:125
+#: Opcodes/grain4.c:127
 msgid "granule_set: igskip_os must be greater then 0"
 msgstr ""
 
-#: Opcodes/grain4.c:134
+#: Opcodes/grain4.c:136
 msgid "granule_set: kgap must be greater then 0"
 msgstr ""
 
-#: Opcodes/grain4.c:138
+#: Opcodes/grain4.c:140
 #, c-format
 msgid "granule_set: igap_os must be 0%% to 100%%"
 msgstr ""
 
-#: Opcodes/grain4.c:142
+#: Opcodes/grain4.c:144
 msgid "granule_set: kgsize must be greater then 0"
 msgstr ""
 
-#: Opcodes/grain4.c:146
+#: Opcodes/grain4.c:148
 #, c-format
 msgid "granule_set: igsize_os must be 0%% to 100%%"
 msgstr ""
 
-#: Opcodes/grain4.c:152
+#: Opcodes/grain4.c:154
 msgid "granule_set: Illegal value of iatt and/or idec"
 msgstr ""
 
-#: Opcodes/grain4.c:236
+#: Opcodes/grain4.c:238
 msgid "granule_set: Illegal combination of igskip and ilength"
 msgstr ""
 
-#: Opcodes/grain4.c:243
+#: Opcodes/grain4.c:245
 #, c-format
 msgid ""
 "granule_set: WARNING * ilength may be too short * \n"
@@ -6760,7 +6662,7 @@ msgid ""
 "ilength is %f Sec, kgsize is %f Sec\n"
 msgstr ""
 
-#: Opcodes/grain4.c:418
+#: Opcodes/grain4.c:419
 msgid "grain4: not initialised"
 msgstr "grain4: non inizializzato"
 
@@ -6772,92 +6674,88 @@ msgstr ""
 msgid "grain: not initialised"
 msgstr "grain: non inizializzato"
 
-#: Opcodes/harmon.c:224
+#: Opcodes/harmon.c:226
 msgid "harm signal has positive lead\n"
 msgstr ""
 
-#: Opcodes/harmon.c:231
+#: Opcodes/harmon.c:233
 msgid "harm signal has negative lead\n"
 msgstr ""
 
-#: Opcodes/harmon.c:361
+#: Opcodes/harmon.c:363
 msgid "harmon234: out of range\n"
 msgstr ""
 
-#: Opcodes/hrtferX.c:79
+#: Opcodes/hrtferX.c:81
 #, c-format
 msgid ""
 "Orchestra sampling rate is not compatible with HRTF.\n"
 "Should be %d...exiting."
 msgstr ""
 
-#: Opcodes/hrtferX.c:87
+#: Opcodes/hrtferX.c:89
 msgid ""
 "\n"
 "Last argument must be the string 'HRTFcompact' ...correcting.\n"
 msgstr ""
 
-#: Opcodes/hrtferX.c:489
+#: Opcodes/hrtferX.c:494
 msgid "hrtfer: not initialised"
 msgstr "hrtfer: non inizializzato"
 
-#: Opcodes/hrtfopcodes.c:232
+#: Opcodes/hrtfopcodes.c:260 Opcodes/hrtfopcodes.c:1434
+#: Opcodes/hrtfearly.c:300 Opcodes/hrtfreverb.c:257
 #, c-format
 msgid ""
 "\n"
-"Orchestra sampling rate is not compatible with HRTF data files\n"
-"Should be %.0f, see Csound help for object\n"
+"\n"
+"WARNING!!:\n"
+"Orchestra SR not compatible with HRTF processing SR of: %.0f\n"
 "\n"
 msgstr ""
 
-#: Opcodes/hrtfopcodes.c:251 Opcodes/hrtfopcodes.c:275
-#: Opcodes/hrtfopcodes.c:298 Opcodes/hrtfopcodes.c:1257
-#: Opcodes/hrtfopcodes.c:1280 Opcodes/hrtfopcodes.c:1303
-#: Opcodes/hrtfopcodes.c:1854 Opcodes/hrtfopcodes.c:1876
-#: Opcodes/hrtfopcodes.c:1898
+#: Opcodes/hrtfopcodes.c:287 Opcodes/hrtfopcodes.c:1461
+#: Opcodes/hrtfopcodes.c:2071 Opcodes/hrtfearly.c:327 Opcodes/hrtfreverb.c:300
 msgid ""
 "\n"
 "\n"
 "\n"
-"cannot load left data file, exiting\n"
+"Cannot load left data file, exiting\n"
 "\n"
 msgstr ""
 
-#: Opcodes/hrtfopcodes.c:259 Opcodes/hrtfopcodes.c:283
-#: Opcodes/hrtfopcodes.c:306 Opcodes/hrtfopcodes.c:1265
-#: Opcodes/hrtfopcodes.c:1288 Opcodes/hrtfopcodes.c:1311
-#: Opcodes/hrtfopcodes.c:1862 Opcodes/hrtfopcodes.c:1884
-#: Opcodes/hrtfopcodes.c:1906
+#: Opcodes/hrtfopcodes.c:294 Opcodes/hrtfopcodes.c:1468
+#: Opcodes/hrtfopcodes.c:2078 Opcodes/hrtfearly.c:334 Opcodes/hrtfreverb.c:306
 msgid ""
 "\n"
 "\n"
 "\n"
-"cannot load right data file, exiting\n"
+"Cannot load right data file, exiting\n"
 "\n"
 msgstr ""
 
-#: Opcodes/hrtfopcodes.c:313 Opcodes/hrtfopcodes.c:1912
+#: Opcodes/hrtfopcodes.c:690 Opcodes/hrtfearly.c:1241
 msgid ""
 "\n"
-"\n"
-"\n"
-" Sampling rate not supported, exiting\n"
+"WARNING: fades are overlapping: this could lead to noise: reduce fade size "
+"or change trajectory\n"
 "\n"
 msgstr ""
 
-#: Opcodes/hrtfopcodes.c:600
+#: Opcodes/hrtfopcodes.c:2052
+#, c-format
 msgid ""
-"fades are overlapping: this could lead to noise: reduce fade size or change "
-"trajectory\n"
+"\n"
+"\n"
+"WARNING!!:\n"
+"Orchestra SR not compatiblewith HRTF processing SR of: %.0f\n"
 "\n"
 msgstr ""
 
-#: Opcodes/hrtfopcodes.c:1239 Opcodes/hrtfopcodes.c:1837
-#, c-format
+#: Opcodes/hrtfreverb.c:832
 msgid ""
-"Orchestra sampling rate is not compatible with HRTF data files\n"
-"Should be %.0f, see Csound help for object\n"
 "\n"
+"warning, approaching instability, fixed with a flat late reverb!"
 msgstr ""
 
 #: Opcodes/ifd.c:74
@@ -6883,10 +6781,9 @@ msgid "imageload: file %s is not in PNG format.\n"
 msgstr ""
 
 #: Opcodes/imageOpcodes.c:119 Opcodes/imageOpcodes.c:126
-#: Opcodes/imageOpcodes.c:134 Opcodes/imageOpcodes.c:165
-#: Opcodes/imageOpcodes.c:174 Opcodes/imageOpcodes.c:188
-#: Opcodes/imageOpcodes.c:291 Opcodes/imageOpcodes.c:298
-#: Opcodes/imageOpcodes.c:311
+#: Opcodes/imageOpcodes.c:165 Opcodes/imageOpcodes.c:174
+#: Opcodes/imageOpcodes.c:188 Opcodes/imageOpcodes.c:291
+#: Opcodes/imageOpcodes.c:298 Opcodes/imageOpcodes.c:311
 msgid "imageload: out of memory.\n"
 msgstr ""
 
@@ -6906,62 +6803,62 @@ msgid ""
 "Status: %d\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:543
+#: Opcodes/jacko.cpp:545
 #, c-format
 msgid "Created Jack client \"%s\" for Jack server \"%s\".\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:548
+#: Opcodes/jacko.cpp:551
 #, c-format
 msgid "Jack buffer size %d != Csound ksmps %d, exiting...\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:556
+#: Opcodes/jacko.cpp:559
 #, c-format
 msgid "Jack sampling rate %d != Csound sr %d, exiting...\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:567
+#: Opcodes/jacko.cpp:570
 #, c-format
 msgid "Activated Jack client \"%s\".\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:571
+#: Opcodes/jacko.cpp:574
 #, c-format
 msgid "Failed to activate Jack client \"%s\": status %d.\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:586
+#: Opcodes/jacko.cpp:589
 msgid "BEGAN JackoState::close()...\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:622
+#: Opcodes/jacko.cpp:629
 msgid "ENDED JackoState::close().\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:876
+#: Opcodes/jacko.cpp:892
 #, c-format
 msgid "Failed to set Jack freewheeling mode to \"%s\": error %d.\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:878
+#: Opcodes/jacko.cpp:895
 #, c-format
 msgid "Set Jack freewheeling mode to \"%s\".\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:893
+#: Opcodes/jacko.cpp:911
 #, c-format
 msgid "Turned Jack connections \"%s\".\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:934 Opcodes/jacko.cpp:1034 Opcodes/jacko.cpp:1134
-#: Opcodes/jacko.cpp:1200
+#: Opcodes/jacko.cpp:955 Opcodes/jacko.cpp:1062 Opcodes/jacko.cpp:1169
+#: Opcodes/jacko.cpp:1241
 #, c-format
 msgid "Could not create Jack port \"%s\".\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:946 Opcodes/jacko.cpp:1046 Opcodes/jacko.cpp:1146
-#: Opcodes/jacko.cpp:1212
+#: Opcodes/jacko.cpp:969 Opcodes/jacko.cpp:1077 Opcodes/jacko.cpp:1184
+#: Opcodes/jacko.cpp:1255
 #, c-format
 msgid "Could not create Jack connection from \"%s\" to \"%s\": status %d.\n"
 msgstr ""
@@ -7000,27 +6897,27 @@ msgstr ""
 msgid "lorisread cannot load %s"
 msgstr ""
 
-#: Opcodes/loscilx.c:74 Opcodes/loscilx.c:178
+#: Opcodes/loscilx.c:76 Opcodes/loscilx.c:180
 #, c-format
 msgid "could not load '%s'"
 msgstr ""
 
-#: Opcodes/loscilx.c:88 Opcodes/loscilx.c:258
+#: Opcodes/loscilx.c:90 Opcodes/loscilx.c:260
 #, c-format
 msgid "invalid loop mode: %d"
 msgstr ""
 
-#: Opcodes/loscilx.c:170
+#: Opcodes/loscilx.c:172
 msgid "loscilx: invalid number of output arguments"
 msgstr ""
 
-#: Opcodes/loscilx.c:190 Opcodes/loscilx.c:219 Opcodes/pvlock.c:94
-#: Opcodes/pvlock.c:296 Opcodes/pvsbasic.c:460
+#: Opcodes/loscilx.c:192 Opcodes/loscilx.c:221 Opcodes/pvlock.c:118
+#: Opcodes/pvlock.c:320 Opcodes/pvsbasic.c:460
 msgid ""
 "number of output arguments inconsistent with number of sound file channels"
 msgstr ""
 
-#: Opcodes/loscilx.c:665
+#: Opcodes/loscilx.c:667
 msgid "loscilx: not initialised"
 msgstr "loscilx: non inizializzato"
 
@@ -7028,11 +6925,11 @@ msgstr "loscilx: non inizializzato"
 msgid "illegal order num. (min 1, max 10)"
 msgstr ""
 
-#: Opcodes/mandolin.c:80
+#: Opcodes/mandolin.c:81
 msgid "No table for Mandolin"
 msgstr ""
 
-#: Opcodes/mandolin.c:90
+#: Opcodes/mandolin.c:91
 msgid "No base frequency for mandolin"
 msgstr ""
 
@@ -7063,27 +6960,27 @@ msgstr ""
 msgid "illegal lsb control number at position n.%d"
 msgstr ""
 
-#: Opcodes/modal4.c:45
+#: Opcodes/modal4.c:46
 msgid "No table for Modal4 case"
 msgstr ""
 
-#: Opcodes/modal4.c:245
+#: Opcodes/modal4.c:246
 msgid "No table for Marimba strike"
 msgstr ""
 
-#: Opcodes/modal4.c:284
+#: Opcodes/modal4.c:285
 msgid "striking three times here!!!\n"
 msgstr ""
 
-#: Opcodes/modal4.c:289
+#: Opcodes/modal4.c:290
 msgid "striking twice here!!\n"
 msgstr ""
 
-#: Opcodes/modal4.c:359
+#: Opcodes/modal4.c:360
 msgid "No table for Vibraphone strike"
 msgstr ""
 
-#: Opcodes/modal4.c:440
+#: Opcodes/modal4.c:441
 msgid "No table for Agogobell strike"
 msgstr ""
 
@@ -7091,12 +6988,12 @@ msgstr ""
 msgid "modmatrix: "
 msgstr ""
 
-#: Opcodes/mp3in.c:92 Opcodes/mp3in.c:230
+#: Opcodes/mp3in.c:93 Opcodes/mp3in.c:231
 #, c-format
 msgid "mp3in: %s: failed to open file"
 msgstr ""
 
-#: Opcodes/mp3in.c:139
+#: Opcodes/mp3in.c:140
 #, c-format
 msgid "mp3in: file sample rate (%d) != orchestra sr (%d)\n"
 msgstr ""
@@ -7387,7 +7284,7 @@ msgstr ""
 msgid "No open glove"
 msgstr ""
 
-#: Opcodes/pan2.c:43
+#: Opcodes/pan2.c:45
 msgid "Unknown panning type"
 msgstr ""
 
@@ -7403,197 +7300,201 @@ msgstr ""
 msgid "partikkelsync: could not find opcode id"
 msgstr ""
 
-#: Opcodes/physmod.c:121
+#: Opcodes/physmod.c:122
 msgid "No table for Clarinet"
 msgstr ""
 
-#: Opcodes/physmod.c:129
+#: Opcodes/physmod.c:130
 msgid "No base frequency for clarinet -- assuming 50Hz\n"
 msgstr ""
 
-#: Opcodes/physmod.c:283
+#: Opcodes/physmod.c:284
 msgid "No table for Flute"
 msgstr ""
 
-#: Opcodes/physmod.c:291
+#: Opcodes/physmod.c:292
 msgid "No base frequency for flute -- assumed to be 50Hz\n"
 msgstr ""
 
-#: Opcodes/physmod.c:481
+#: Opcodes/physmod.c:482
 msgid "No table for wgbow vibrato"
 msgstr ""
 
-#: Opcodes/physmod.c:689
+#: Opcodes/physmod.c:490
+msgid "unknown lowest frequency for bowed string -- assuming 50Hz\n"
+msgstr ""
+
+#: Opcodes/physmod.c:690
 msgid "DlineA not initialised"
 msgstr "DlineA non inizializzato"
 
-#: Opcodes/physmod.c:756
+#: Opcodes/physmod.c:757
 msgid "No table for Brass"
 msgstr ""
 
-#: Opcodes/physmod.c:765
+#: Opcodes/physmod.c:766
 msgid "No base frequency for brass -- assumed to be 50Hz\n"
 msgstr ""
 
-#: Opcodes/physutil.c:137 Opcodes/physutil.c:312 Opcodes/physutil.c:324
-#: Opcodes/physutil.c:345
+#: Opcodes/physutil.c:138 Opcodes/physutil.c:313 Opcodes/physutil.c:325
+#: Opcodes/physutil.c:346
 msgid "negative rates not allowed!!, correcting\n"
 msgstr ""
 
-#: Opcodes/physutil.c:186
+#: Opcodes/physutil.c:187
 #, c-format
 msgid "Envelope: value=%f target=%f rate=%f state=%d\n"
 msgstr ""
 
-#: Opcodes/physutil.c:335
+#: Opcodes/physutil.c:336
 msgid "Sustain level out of range!!, correcting\n"
 msgstr ""
 
-#: Opcodes/physutil.c:356 Opcodes/physutil.c:366 Opcodes/physutil.c:376
+#: Opcodes/physutil.c:357 Opcodes/physutil.c:367 Opcodes/physutil.c:377
 msgid "negative times not allowed!!, correcting\n"
 msgstr ""
 
-#: Opcodes/pitch0.c:37
+#: Opcodes/pitch0.c:38
 #, c-format
 msgid "Muting new instances of instr %d\n"
 msgstr ""
 
-#: Opcodes/pitch0.c:40
+#: Opcodes/pitch0.c:41
 #, c-format
 msgid "Allowing instrument %d to start\n"
 msgstr ""
 
-#: Opcodes/pitch.c:84 Opcodes/spectra.c:78
+#: Opcodes/pitch.c:85 Opcodes/spectra.c:80
 msgid "illegal iocts"
 msgstr ""
 
-#: Opcodes/pitch.c:86 Opcodes/spectra.c:80
+#: Opcodes/pitch.c:87 Opcodes/spectra.c:82
 msgid "illegal ifrqs"
 msgstr ""
 
-#: Opcodes/pitch.c:180 Opcodes/spectra.c:584
+#: Opcodes/pitch.c:181 Opcodes/spectra.c:586
 msgid "illegal no of partials"
 msgstr ""
 
-#: Opcodes/pitch.c:205
+#: Opcodes/pitch.c:206
 msgid "per octave rolloff too steep"
 msgstr ""
 
-#: Opcodes/pitch.c:219 Opcodes/spectra.c:625
+#: Opcodes/pitch.c:220 Opcodes/spectra.c:627
 msgid "illegal lo-hi values"
 msgstr ""
 
-#: Opcodes/pitch.c:454
+#: Opcodes/pitch.c:455
 msgid "pitch: not initialised"
 msgstr "pitch: non inizializzato"
 
-#: Opcodes/pitch.c:463
+#: Opcodes/pitch.c:464
 msgid "Must have even number of arguments in mac\n"
 msgstr ""
 
-#: Opcodes/pitch.c:552
+#: Opcodes/pitch.c:553
 msgid "clockread: clock still running, call clockoff first"
 msgstr ""
 
-#: Opcodes/pitch.c:578
+#: Opcodes/pitch.c:579
 msgid "adsynt: wavetable not found!"
 msgstr ""
 
-#: Opcodes/pitch.c:591
+#: Opcodes/pitch.c:592
 msgid "adsynt: freqtable not found!"
 msgstr ""
 
-#: Opcodes/pitch.c:596
+#: Opcodes/pitch.c:597
 msgid "adsynt: partial count is greater than freqtable size!"
 msgstr ""
 
-#: Opcodes/pitch.c:604
+#: Opcodes/pitch.c:605
 msgid "adsynt: amptable not found!"
 msgstr ""
 
-#: Opcodes/pitch.c:609
+#: Opcodes/pitch.c:610
 msgid "adsynt: partial count is greater than amptable size!"
 msgstr ""
 
-#: Opcodes/pitch.c:640
+#: Opcodes/pitch.c:641
 msgid "adsynt: not initialised"
 msgstr "adsynt: non inizializzato"
 
-#: Opcodes/pitch.c:716
+#: Opcodes/pitch.c:717
 msgid "hsboscil: not initialised"
 msgstr "hsboscil: non inizializzato"
 
-#: Opcodes/pitch.c:799
+#: Opcodes/pitch.c:800
 msgid "pitchamdf: maxcps must be > mincps !"
 msgstr ""
 
-#: Opcodes/pitch.c:945
+#: Opcodes/pitch.c:946
 msgid "pitchamdf: not initialised"
 msgstr "pitchamdf: non inizializzato"
 
-#: Opcodes/pitch.c:1125 Opcodes/pitch.c:1152
+#: Opcodes/pitch.c:1126 Opcodes/pitch.c:1153
 msgid "phasorbnk: not initialised"
 msgstr "phasorbnk: non inizializzato"
 
-#: Opcodes/pitch.c:1214
+#: Opcodes/pitch.c:1215
 msgid "pinkish: Invalid method code"
 msgstr ""
 
-#: Opcodes/pitch.c:1225
+#: Opcodes/pitch.c:1226
 msgid "pinkish: Filter method requires a-rate (noise) input"
 msgstr ""
 
-#: Opcodes/pitch.c:1348
+#: Opcodes/pitch.c:1349
 #, c-format
 msgid ""
 "pinkish: Gardner method requires 4-%d bands. Default %ld substituted for "
 "%d.\n"
 msgstr ""
 
-#: Opcodes/pitch.c:1731
+#: Opcodes/pitch.c:1733
 msgid "Incorrect argument count in transeg"
 msgstr ""
 
-#: Opcodes/pitch.c:1782
+#: Opcodes/pitch.c:1784
 msgid "Incorrect argument count in transegb"
 msgstr ""
 
-#: Opcodes/pitch.c:1832 Opcodes/pitch.c:1971
+#: Opcodes/pitch.c:1834 Opcodes/pitch.c:1977
 #, fuzzy
 msgid "Error: transeg not initialised (krate)\n"
 msgstr ""
 "\n"
 "Error: transeg non inizializzato (krate)"
 
-#: Opcodes/pitch.c:1867 Opcodes/pitch.c:2013
+#: Opcodes/pitch.c:1869 Opcodes/pitch.c:2027
 msgid "transeg: not initialised (arate)\n"
 msgstr "transeg: non inizializzato (arate)\n"
 
-#: Opcodes/pitch.c:1921
+#: Opcodes/pitch.c:1924
 msgid "Incorrect argument count in transegr"
 msgstr ""
 
-#: Opcodes/pitch.c:2269
+#: Opcodes/pitch.c:2294
 #, fuzzy
 msgid "median: not initialised (arate)\n"
 msgstr "linseg: non inizializzato (arate)\n"
 
-#: Opcodes/pitch.c:2273 Opcodes/pitch.c:2321
+#: Opcodes/pitch.c:2298 Opcodes/pitch.c:2345
 #, c-format
 msgid "median: window (%d)larger than maximum(%d); truncated"
 msgstr ""
 
-#: Opcodes/pitch.c:2317
+#: Opcodes/pitch.c:2341
 #, fuzzy
 msgid "median: not initialised (krate)\n"
 msgstr "linseg non inizializzato (krate)\n"
 
-#: Opcodes/pitchtrack.c:369
+#: Opcodes/pitchtrack.c:370
 #, c-format
 msgid "ptrack: FFT size out of range; using %d\n"
 msgstr ""
 
-#: Opcodes/pitchtrack.c:382
+#: Opcodes/pitchtrack.c:383
 #, c-format
 msgid "ptrack: FFT size not a power of 2; using %d\n"
 msgstr ""
@@ -7611,7 +7512,7 @@ msgstr ""
 msgid "Error: %s, %s"
 msgstr "Errore: %s, %s"
 
-#: Opcodes/ppp.c:20 Opcodes/pvlock.c:454 Opcodes/pvsband.c:46
+#: Opcodes/ppp.c:20 Opcodes/pvlock.c:478 Opcodes/pvsband.c:46
 #: Opcodes/pvsbasic.c:575 Opcodes/pvsbasic.c:880 Opcodes/pvsbasic.c:1080
 #: Opcodes/pvsbasic.c:1180 Opcodes/pvsbasic.c:1395 Opcodes/pvsbasic.c:1593
 #: Opcodes/pvsbasic.c:1756 Opcodes/pvslock.c:20
@@ -7631,62 +7532,62 @@ msgstr ""
 msgid "psynth: function table not found\n"
 msgstr ""
 
-#: Opcodes/psynth.c:569 Opcodes/psynth.c:662
+#: Opcodes/psynth.c:567 Opcodes/psynth.c:660
 msgid "Input not in TRACKS format\n"
 msgstr ""
 
-#: Opcodes/psynth.c:767
+#: Opcodes/psynth.c:765
 msgid "trsplit: input not in TRACKS format\n"
 msgstr ""
 
-#: Opcodes/psynth.c:863 Opcodes/psynth.c:1027
+#: Opcodes/psynth.c:861 Opcodes/psynth.c:1023
 msgid "trmix: first input not in TRACKS format\n"
 msgstr ""
 
-#: Opcodes/psynth.c:868 Opcodes/psynth.c:1032
+#: Opcodes/psynth.c:866 Opcodes/psynth.c:1028
 msgid "trmix: second input not in TRACKS format\n"
 msgstr ""
 
-#: Opcodes/psynth.c:943
+#: Opcodes/psynth.c:939
 msgid "trfil: input not in TRACKS format\n"
 msgstr ""
 
-#: Opcodes/psynth.c:948
+#: Opcodes/psynth.c:944
 msgid "trfil: could not find function table\n"
 msgstr ""
 
-#: Opcodes/psynth.c:1135
+#: Opcodes/psynth.c:1131
 msgid "binit: first input not in TRACKS format\n"
 msgstr ""
 
-#: Opcodes/pvadd.c:153
+#: Opcodes/pvadd.c:150
 msgid "PVADD ktimpnt truncated to last frame"
 msgstr ""
 
-#: Opcodes/pvadd.c:191
+#: Opcodes/pvadd.c:188
 msgid "pvadd: not initialised"
 msgstr "pvadd: non inizializzato"
 
-#: Opcodes/pvadd.c:193
+#: Opcodes/pvadd.c:190
 msgid "PVADD timpnt < 0"
 msgstr ""
 
-#: Opcodes/pvadd.c:201
+#: Opcodes/pvadd.c:198
 #, c-format
 msgid "PVADD cannot load %s"
 msgstr ""
 
-#: Opcodes/pvadd.c:205 Opcodes/ugens8.c:223
+#: Opcodes/pvadd.c:202 Opcodes/ugens8.c:223
 #, c-format
 msgid "pvoc-ex file %s: FFT size %d too large for Csound"
 msgstr ""
 
-#: Opcodes/pvadd.c:210
+#: Opcodes/pvadd.c:207
 #, c-format
 msgid "PV frame %ld seems too small in %s"
 msgstr ""
 
-#: Opcodes/pvadd.c:215 Opcodes/pvread.c:115 Opcodes/ugens8.c:229
+#: Opcodes/pvadd.c:212 Opcodes/pvread.c:115 Opcodes/ugens8.c:229
 #, c-format
 msgid "pvoc-ex file %s is not mono"
 msgstr ""
@@ -7696,98 +7597,98 @@ msgstr ""
 msgid "PVBUFREAD cannot load %s"
 msgstr ""
 
-#: Opcodes/pvinterp.c:76 Opcodes/vpvoc.c:206
+#: Opcodes/pvinterp.c:76 Opcodes/vpvoc.c:207
 #, c-format
 msgid "PVOC frame %ld bigger than %ld in %s"
 msgstr ""
 
-#: Opcodes/pvinterp.c:81 Opcodes/vpvoc.c:211
+#: Opcodes/pvinterp.c:81 Opcodes/vpvoc.c:212
 #, c-format
 msgid "PVOC frame %ld seems too small in %s"
 msgstr ""
 
-#: Opcodes/pvinterp.c:85 Opcodes/pvinterp.c:184 Opcodes/pvinterp.c:356
-#: Opcodes/vpvoc.c:215
+#: Opcodes/pvinterp.c:85 Opcodes/pvinterp.c:183 Opcodes/pvinterp.c:354
+#: Opcodes/vpvoc.c:216
 #, c-format
 msgid "%d chans (not 1) in PVOC file %s"
 msgstr ""
 
-#: Opcodes/pvinterp.c:101 Opcodes/pvinterp.c:212 Opcodes/pvinterp.c:382
+#: Opcodes/pvinterp.c:100 Opcodes/pvinterp.c:210 Opcodes/pvinterp.c:379
 #: Opcodes/ugens8.c:95 Opcodes/vpvoc.c:244
 #, c-format
 msgid "ksmps of %d needs wdw of %d, max is %d for pv %s"
 msgstr ""
 
-#: Opcodes/pvinterp.c:122 Opcodes/pvinterp.c:256 Opcodes/pvinterp.c:431
+#: Opcodes/pvinterp.c:121 Opcodes/pvinterp.c:254 Opcodes/pvinterp.c:428
 #: Opcodes/pvread.c:95 Opcodes/ugens8.c:156 Opcodes/vpvoc.c:297
 msgid "PVOC ktimpnt truncated to last frame"
 msgstr ""
 
-#: Opcodes/pvinterp.c:130
+#: Opcodes/pvinterp.c:129
 msgid "pvbufread: not initialised"
 msgstr "pvbufread: non inizializzato"
 
-#: Opcodes/pvinterp.c:132 Opcodes/pvinterp.c:306 Opcodes/pvinterp.c:492
+#: Opcodes/pvinterp.c:131 Opcodes/pvinterp.c:304 Opcodes/pvinterp.c:489
 #: Opcodes/pvread.c:103 Opcodes/ugens8.c:206 Opcodes/vpvoc.c:361
 msgid "PVOC timpnt < 0"
 msgstr ""
 
-#: Opcodes/pvinterp.c:149
+#: Opcodes/pvinterp.c:148
 msgid "pvinterp: associated pvbufread not found"
 msgstr ""
 
-#: Opcodes/pvinterp.c:166
+#: Opcodes/pvinterp.c:165
 #, c-format
 msgid "PVINTERP cannot load %s"
 msgstr ""
 
-#: Opcodes/pvinterp.c:179
+#: Opcodes/pvinterp.c:178
 #, c-format
 msgid "pvinterp: %s: frame size %d does not match pvbufread frame size %d\n"
 msgstr ""
 
-#: Opcodes/pvinterp.c:300
+#: Opcodes/pvinterp.c:298
 msgid "pvinterp: not initialised"
 msgstr "pvinterp: non inizializzato"
 
-#: Opcodes/pvinterp.c:302 Opcodes/pvinterp.c:488 Opcodes/ugens8.c:202
+#: Opcodes/pvinterp.c:300 Opcodes/pvinterp.c:485 Opcodes/ugens8.c:202
 #: Opcodes/vpvoc.c:357
 msgid "PVOC transpose too low"
 msgstr ""
 
-#: Opcodes/pvinterp.c:304 Opcodes/pvinterp.c:490 Opcodes/ugens8.c:204
+#: Opcodes/pvinterp.c:302 Opcodes/pvinterp.c:487 Opcodes/ugens8.c:204
 #: Opcodes/vpvoc.c:359
 msgid "PVOC transpose too high"
 msgstr ""
 
-#: Opcodes/pvinterp.c:323
+#: Opcodes/pvinterp.c:321
 msgid "pvcross: associated pvbufread not found"
 msgstr ""
 
-#: Opcodes/pvinterp.c:339
+#: Opcodes/pvinterp.c:337
 #, c-format
 msgid "PVCROSS cannot load %s"
 msgstr ""
 
-#: Opcodes/pvinterp.c:351
+#: Opcodes/pvinterp.c:349
 #, c-format
 msgid "pvcross: %s: frame size %d does not match pvbufread frame size %d\n"
 msgstr ""
 
-#: Opcodes/pvinterp.c:454 Opcodes/vpvoc.c:322
+#: Opcodes/pvinterp.c:451 Opcodes/vpvoc.c:322
 msgid "PVOC debug: one frame gets through\n"
 msgstr ""
 
-#: Opcodes/pvinterp.c:486
+#: Opcodes/pvinterp.c:483
 msgid "pvcross: not initialised"
 msgstr "pvcross: non inizializzato"
 
-#: Opcodes/pvlock.c:35 Opcodes/pvsbasic.c:380
+#: Opcodes/pvlock.c:59 Opcodes/pvsbasic.c:380
 #, fuzzy
 msgid "invalid number of output arguments"
 msgstr "numero errato di discussioni ftable"
 
-#: Opcodes/pvlock.c:466
+#: Opcodes/pvlock.c:490
 #, fuzzy
 msgid "pvsfreeze: signal format must be amp-freq."
 msgstr "formato campione non valido: deve essere -s, -l, o -f"
@@ -7898,31 +7799,36 @@ msgstr "pvstencil: non inizializzato"
 msgid "pvs2tab: signal format must be amp-phase or amp-freq."
 msgstr "formato campione non valido: deve essere -s, -l, o -f"
 
-#: Opcodes/pvsbasic.c:2151 Opcodes/pvsbasic.c:2190 Opcodes/tabvars.c:53
-#: Opcodes/tabvars.c:89 Opcodes/tabvars.c:131 Opcodes/tabvars.c:176
-#: Opcodes/tabvars.c:178
+#: Opcodes/pvsbasic.c:2151 Opcodes/pvsbasic.c:2189 Opcodes/tabvars.c:56
+#: Opcodes/tabvars.c:92 Opcodes/tabvars.c:134 Opcodes/tabvars.c:179
+#: Opcodes/tabvars.c:181
 #, fuzzy
 msgid "t-variable not initialised"
 msgstr "table: non inizializzato"
 
-#: Opcodes/pvsbuffer.c:53 Opcodes/pvscent.c:164 Opcodes/pvsdemix.c:49
+#: Opcodes/pvsbuffer.c:56 Opcodes/pvscent.c:164 Opcodes/pvsdemix.c:49
 msgid "SDFT case not implemented yet"
 msgstr ""
 
-#: Opcodes/pvsbuffer.c:85
+#: Opcodes/pvsbuffer.c:89
 #, fuzzy
 msgid "error... could not create global var for handle\n"
 msgstr "attenzione... impossibile creare global var\n"
 
-#: Opcodes/pvsbuffer.c:143 Opcodes/pvsbuffer.c:190 Opcodes/pvsbuffer.c:258
+#: Opcodes/pvsbuffer.c:148 Opcodes/pvsbuffer.c:197 Opcodes/pvsbuffer.c:266
 #, fuzzy
 msgid "error... could not read handle from global variable\n"
 msgstr "attenzione... impossibile creare global var\n"
 
-#: Opcodes/pvsbuffer.c:238 Opcodes/pvsbuffer.c:306
+#: Opcodes/pvsbuffer.c:246 Opcodes/pvsbuffer.c:316
 msgid "Invalid buffer handle"
 msgstr ""
 
+#: Opcodes/pvsbuffer.c:285 Opcodes/pvsbuffer.c:291
+#, c-format
+msgid "table length too small: needed %d, got %d\n"
+msgstr ""
+
 #: Opcodes/pvscent.c:42
 msgid "pvscent: format must be amp-phase or amp-freq.\n"
 msgstr ""
@@ -8113,49 +8019,49 @@ msgstr ""
 msgid "seqtim: incorrect table number"
 msgstr ""
 
-#: Opcodes/sfont.c:118
+#: Opcodes/sfont.c:121
 #, c-format
 msgid "sfload: cannot open SoundFont file \"%s\" (error %s)"
 msgstr ""
 
-#: Opcodes/sfont.c:123
+#: Opcodes/sfont.c:126
 msgid "Sfload: cannot use globals"
 msgstr ""
 
-#: Opcodes/sfont.c:153
+#: Opcodes/sfont.c:156
 msgid "sfload: could not open globals\n"
 msgstr ""
 
-#: Opcodes/sfont.c:170
+#: Opcodes/sfont.c:173
 #, fuzzy
 msgid "Extending soundfonts"
 msgstr "troppi buffers"
 
-#: Opcodes/sfont.c:201
+#: Opcodes/sfont.c:204
 #, c-format
 msgid ""
 "\n"
 "Preset list of \"%s\"\n"
 msgstr ""
 
-#: Opcodes/sfont.c:204
+#: Opcodes/sfont.c:207
 #, c-format
 msgid "%3d) %-20s\tprog:%-3d bank:%d\n"
 msgstr ""
 
-#: Opcodes/sfont.c:226
+#: Opcodes/sfont.c:229
 #, c-format
 msgid ""
 "\n"
 "Assigning all Presets of \"%s\" starting from %d (preset handle number)\n"
 msgstr ""
 
-#: Opcodes/sfont.c:231
+#: Opcodes/sfont.c:234
 #, c-format
 msgid "%3d<--%-20s\t(prog:%-3d bank:%d)\n"
 msgstr ""
 
-#: Opcodes/sfont.c:238
+#: Opcodes/sfont.c:241
 #, c-format
 msgid ""
 "\n"
@@ -8163,38 +8069,38 @@ msgid ""
 "\n"
 msgstr ""
 
-#: Opcodes/sfont.c:251
+#: Opcodes/sfont.c:254
 #, c-format
 msgid ""
 "\n"
 "Instrument list of \"%s\"\n"
 msgstr ""
 
-#: Opcodes/sfont.c:268
+#: Opcodes/sfont.c:271
 #, c-format
 msgid "sfpreset: preset handle too big (%d), max: %d"
 msgstr ""
 
-#: Opcodes/sfont.c:284
+#: Opcodes/sfont.c:287
 #, c-format
 msgid ""
 "sfpreset: cannot find any preset having prog number %d and bank number %d in "
 "SoundFont file \"%s\""
 msgstr ""
 
-#: Opcodes/sfont.c:306 Opcodes/sfont.c:2189
+#: Opcodes/sfont.c:309 Opcodes/sfont.c:2192
 msgid "sfplay: invalid or out-of-range preset number"
 msgstr ""
 
-#: Opcodes/sfont.c:633
+#: Opcodes/sfont.c:636
 msgid "sfplaym: invalid or out-of-range preset number"
 msgstr ""
 
-#: Opcodes/sfont.c:888 Opcodes/sfont.c:1150
+#: Opcodes/sfont.c:891 Opcodes/sfont.c:1153
 msgid "sfinstr: instrument out of range"
 msgstr ""
 
-#: Opcodes/sfont.c:1598 Opcodes/sfont.c:1835
+#: Opcodes/sfont.c:1601 Opcodes/sfont.c:1838
 #, c-format
 msgid ""
 "SoundFont file \"%s\" contains ROM samples !\n"
@@ -8202,19 +8108,19 @@ msgid ""
 "Session aborted !"
 msgstr ""
 
-#: Opcodes/sfont.c:1987 Opcodes/sfont.c:1993
+#: Opcodes/sfont.c:1990 Opcodes/sfont.c:1996
 msgid "Sfont: cannot use globals/"
 msgstr ""
 
-#: Opcodes/sfont.c:1996
+#: Opcodes/sfont.c:1999
 msgid "Sfont format not compatible"
 msgstr ""
 
-#: Opcodes/sfont.c:2534
+#: Opcodes/sfont.c:2537
 msgid "error... could not create sfont globals\n"
 msgstr ""
 
-#: Opcodes/shape.c:49
+#: Opcodes/shape.c:51
 msgid "powershape: ifullscale must be strictly positive"
 msgstr ""
 
@@ -8228,25 +8134,25 @@ msgstr "formato campione non valido: deve essere -s, -l, o -f"
 msgid "ftgenonce error"
 msgstr "(nessun errore)"
 
-#: Opcodes/singwave.c:85
+#: Opcodes/singwave.c:86
 msgid "No table for Modulatr"
 msgstr ""
 
-#: Opcodes/singwave.c:127
+#: Opcodes/singwave.c:128
 msgid "No table for Singwave"
 msgstr ""
 
-#: Opcodes/singwave.c:207
+#: Opcodes/singwave.c:208
 #, c-format
 msgid "SingWave: rate=%f sweepRate=%f mytime=%f\n"
 msgstr ""
 
-#: Opcodes/singwave.c:273
+#: Opcodes/singwave.c:280
 #, c-format
 msgid "Found Formant: %s (number %i)\n"
 msgstr ""
 
-#: Opcodes/singwave.c:395
+#: Opcodes/singwave.c:397
 #, c-format
 msgid "Setting Phoneme: %d %f\n"
 msgstr ""
@@ -8279,15 +8185,15 @@ msgstr ""
 msgid "pvsarp: not initialised\n"
 msgstr "pvsarp: non inizializzato\n"
 
-#: Opcodes/sndloop.c:995 Opcodes/sndloop.c:1092
+#: Opcodes/sndloop.c:995 Opcodes/sndloop.c:1091
 msgid "signal format must be amp-phase or amp-freq.\n"
 msgstr ""
 
-#: Opcodes/sndloop.c:1072
+#: Opcodes/sndloop.c:1071
 msgid "pvsvoc: not initialised\n"
 msgstr "pvsvoc: non inizializzato\n"
 
-#: Opcodes/sndloop.c:1123
+#: Opcodes/sndloop.c:1122
 msgid "pvsmorph: not initialised\n"
 msgstr "pvsmorph: non inizializzato\n"
 
@@ -8307,25 +8213,27 @@ msgstr ""
 msgid "sndwarpst: not initialised"
 msgstr "sndwarpst: non inizializzato"
 
-#: Opcodes/sockrecv.c:123 Opcodes/sockrecv.c:213 Opcodes/sockrecv.c:300
-#: Opcodes/socksend.c:75 Opcodes/socksend.c:133 Opcodes/socksend.c:190
-msgid "creating socket"
+#: Opcodes/sockrecv.c:117 Opcodes/sockrecv.c:215 Opcodes/sockrecv.c:314
+#: Opcodes/socksend.c:73 Opcodes/socksend.c:157 Opcodes/socksend.c:252
+#, c-format
+msgid "Winsock2 failed to start: %d"
 msgstr ""
 
-#: Opcodes/sockrecv.c:322
-msgid "connect failed"
+#: Opcodes/sockrecv.c:131 Opcodes/sockrecv.c:227 Opcodes/sockrecv.c:320
+#: Opcodes/socksend.c:86 Opcodes/socksend.c:171 Opcodes/socksend.c:259
+msgid "creating socket"
 msgstr ""
 
-#: Opcodes/sockrecv.c:335
-msgid "read from socket failed"
+#: Opcodes/sockrecv.c:347
+#, c-format
+msgid "connect failed (%d)"
 msgstr ""
 
-#: Opcodes/socksend.c:67 Opcodes/socksend.c:125
-#, c-format
-msgid "The buffersize must be <= %d samples to fit in a udp-packet."
+#: Opcodes/sockrecv.c:360
+msgid "read from socket failed"
 msgstr ""
 
-#: Opcodes/socksend.c:107 Opcodes/socksend.c:169
+#: Opcodes/socksend.c:126 Opcodes/socksend.c:215
 msgid "sendto failed"
 msgstr ""
 
@@ -8345,199 +8253,199 @@ msgstr "spat3d: non inizializzato"
 msgid "spat3di: not initialised"
 msgstr "spat3di: non inizializzato"
 
-#: Opcodes/spectra.c:82
+#: Opcodes/spectra.c:84
 msgid "illegal Q value"
 msgstr ""
 
-#: Opcodes/spectra.c:84
+#: Opcodes/spectra.c:86
 msgid "unknown dbout code"
 msgstr ""
 
-#: Opcodes/spectra.c:104
+#: Opcodes/spectra.c:106
 #, c-format
 msgid "spectrum: %s window, %s out, making tables ...\n"
 msgstr ""
 
-#: Opcodes/spectra.c:123
+#: Opcodes/spectra.c:125
 #, c-format
 msgid ""
 "\thigh cps %7.1f\n"
 "\t low cps %7.1f\n"
 msgstr ""
 
-#: Opcodes/spectra.c:138
+#: Opcodes/spectra.c:140
 #, c-format
 msgid "\tQ %4.1f uses a %d sample window each octdown\n"
 msgstr ""
 
-#: Opcodes/spectra.c:169
+#: Opcodes/spectra.c:171
 msgid "spectrum windowed sines:"
 msgstr ""
 
-#: Opcodes/spectra.c:187
+#: Opcodes/spectra.c:189
 #, c-format
 msgid "\t%d oct analysis window delay = %ld samples (%d msecs)\n"
 msgstr ""
 
-#: Opcodes/spectra.c:195
+#: Opcodes/spectra.c:197
 msgid "octdown buffers:"
 msgstr ""
 
-#: Opcodes/spectra.c:513 Opcodes/spectra.c:553
+#: Opcodes/spectra.c:515 Opcodes/spectra.c:555
 msgid "specdisp: not initialised"
 msgstr "specdisp: non inizializzato"
 
-#: Opcodes/spectra.c:523
+#: Opcodes/spectra.c:525
 #, c-format
 msgid "instr %d %s, dft (%s), %ld octaves (%d - %d Hz):"
 msgstr ""
 
-#: Opcodes/spectra.c:530
+#: Opcodes/spectra.c:532
 #, c-format
 msgid "instr %d %s, dft (%s), %ld octaves (%3.1f - %3.1f Hz):"
 msgstr ""
 
-#: Opcodes/spectra.c:611
+#: Opcodes/spectra.c:613
 msgid "per oct rolloff too steep"
 msgstr ""
 
-#: Opcodes/spectra.c:632
+#: Opcodes/spectra.c:634
 #, c-format
 msgid "specptrk: %d freqs, %d%s ptls at "
 msgstr ""
 
-#: Opcodes/spectra.c:633
+#: Opcodes/spectra.c:635
 msgid " odd"
 msgstr ""
 
-#: Opcodes/spectra.c:637
+#: Opcodes/spectra.c:639
 msgid ""
 "\n"
 "\t\trolloff vals:"
 msgstr ""
 
-#: Opcodes/spectra.c:660
+#: Opcodes/spectra.c:662
 #, c-format
 msgid ""
 "\n"
 "\tdbthresh %4.1f: X-corr %s threshon %4.1f, threshoff %4.1f\n"
 msgstr ""
 
-#: Opcodes/spectra.c:817
+#: Opcodes/spectra.c:819
 msgid "specptrk: not initialised"
 msgstr "specptrk: non inizializzato"
 
-#: Opcodes/spectra.c:849
+#: Opcodes/spectra.c:851
 msgid "specsum: not initialised"
 msgstr "specsum: non inizializzato"
 
-#: Opcodes/spectra.c:860
+#: Opcodes/spectra.c:862
 msgid "inputs have different sizes"
 msgstr ""
 
-#: Opcodes/spectra.c:863
+#: Opcodes/spectra.c:865
 msgid "inputs have diff. time periods"
 msgstr ""
 
-#: Opcodes/spectra.c:867
+#: Opcodes/spectra.c:869
 msgid "inputs have different freq resolution"
 msgstr ""
 
-#: Opcodes/spectra.c:870
+#: Opcodes/spectra.c:872
 msgid "inputs have different amptypes"
 msgstr ""
 
-#: Opcodes/spectra.c:902
+#: Opcodes/spectra.c:904
 msgid "specaddm: not initialised"
 msgstr "specaddm: non inizializzato"
 
-#: Opcodes/spectra.c:926
+#: Opcodes/spectra.c:928
 msgid "specdiff: local buffers not initialised"
 msgstr "specdiff: local buffers non inizializzato"
 
-#: Opcodes/spectra.c:964
+#: Opcodes/spectra.c:966
 msgid "specdiff: not initialised"
 msgstr "specdiff: non inizializzato"
 
-#: Opcodes/spectra.c:986
+#: Opcodes/spectra.c:988
 msgid "specscal: local buffer not initialised"
 msgstr "specscal: local buffer non inizializzato"
 
-#: Opcodes/spectra.c:991
+#: Opcodes/spectra.c:993
 msgid "missing fscale table"
 msgstr ""
 
-#: Opcodes/spectra.c:1057
+#: Opcodes/spectra.c:1059
 msgid "specscal: not initialised"
 msgstr "specscal: non inizializzato"
 
-#: Opcodes/spectra.c:1081
+#: Opcodes/spectra.c:1083
 msgid "spechist: local buffers not intiialised"
 msgstr ""
 
-#: Opcodes/spectra.c:1113
+#: Opcodes/spectra.c:1115
 msgid "spechist: not initialised"
 msgstr "spechist: non inizializzato"
 
-#: Opcodes/spectra.c:1134
+#: Opcodes/spectra.c:1136
 msgid "specfilt: local buffers not initialised"
 msgstr "specfilt: local buffers non inizializzato"
 
-#: Opcodes/spectra.c:1142
+#: Opcodes/spectra.c:1144
 msgid "missing htim ftable"
 msgstr ""
 
-#: Opcodes/spectra.c:1165
+#: Opcodes/spectra.c:1167
 msgid "htim ftable must be all-positive"
 msgstr ""
 
-#: Opcodes/spectra.c:1169
+#: Opcodes/spectra.c:1171
 #, c-format
 msgid "coef range: %6.3f - %6.3f\n"
 msgstr ""
 
-#: Opcodes/spectra.c:1201
+#: Opcodes/spectra.c:1203
 msgid "specfilt: not initialised"
 msgstr "specfilt: non inizializzato"
 
-#: Opcodes/stackops.c:80
+#: Opcodes/stackops.c:81
 msgid "fsig = : source signal is not initialised"
 msgstr "fsig = : source signal is non inizializzato"
 
-#: Opcodes/stackops.c:126
+#: Opcodes/stackops.c:125
 msgid "stack overflow"
 msgstr ""
 
-#: Opcodes/stackops.c:134
+#: Opcodes/stackops.c:131
 msgid "cannot pop from empty stack"
 msgstr ""
 
-#: Opcodes/stackops.c:142
+#: Opcodes/stackops.c:137
 msgid "argument number or type mismatch"
 msgstr ""
 
-#: Opcodes/stackops.c:150
+#: Opcodes/stackops.c:143
 msgid "string argument is too long"
 msgstr ""
 
-#: Opcodes/stackops.c:167
+#: Opcodes/stackops.c:160
 msgid "Error allocating argument stack"
 msgstr ""
 
-#: Opcodes/stackops.c:207 Top/argdecode.c:1212 util/envext.c:99
+#: Opcodes/stackops.c:200 Top/argdecode.c:1212 util/envext.c:99
 #: util/scale.c:248
 msgid "too many arguments"
 msgstr ""
 
-#: Opcodes/stackops.c:286
+#: Opcodes/stackops.c:279
 msgid "the stack is already allocated"
 msgstr ""
 
-#: Opcodes/stackops.c:637
+#: Opcodes/stackops.c:630
 msgid "number of arguments != nchnls"
 msgstr ""
 
-#: Opcodes/stdopcod.c:36
+#: Opcodes/stdopcod.c:37
 msgid "stdopcod.c: error: globals already allocated"
 msgstr ""
 
@@ -8552,36 +8460,45 @@ msgstr ""
 msgid "RAWWAVE_PATH: %s\n"
 msgstr ""
 
-#: Opcodes/syncgrain.c:175 Opcodes/syncgrain.c:338 Opcodes/syncgrain.c:683
+#: Opcodes/syncgrain.c:176 Opcodes/syncgrain.c:339 Opcodes/syncgrain.c:684
 msgid "grain size smaller than 1 sample\n"
 msgstr ""
 
-#: Opcodes/syncgrain.c:387
+#: Opcodes/syncgrain.c:388
 msgid "diskgrain: invalid number of channels"
 msgstr ""
 
-#: Opcodes/syncgrain.c:419
+#: Opcodes/syncgrain.c:420
 msgid "diskgrain: could not open file\n"
 msgstr ""
 
-#: Opcodes/syncgrain.c:423
+#: Opcodes/syncgrain.c:424
 msgid ""
 "diskgrain: soundfile channel numbers do not match the number of outputs \n"
 msgstr ""
 
-#: Opcodes/syncgrain.c:435
+#: Opcodes/syncgrain.c:436
 msgid "diskgrain: could not read file \n"
 msgstr ""
 
-#: Opcodes/tabsum.c:39
+#: Opcodes/tabsum.c:40
 msgid "tabsum: No table"
 msgstr ""
 
-#: Opcodes/tabsum.c:54
+#: Opcodes/tabsum.c:55
 #, fuzzy
 msgid "tabsum: Not initialised"
 msgstr "table: non inizializzato"
 
+#: Opcodes/tabvars.c:201 Opcodes/tabvars.c:218
+#, fuzzy
+msgid "t-var not initialised"
+msgstr "table: non inizializzato"
+
+#: Opcodes/tabvars.c:203 Opcodes/tabvars.c:220
+msgid "No table for copy2ftab"
+msgstr ""
+
 #: Opcodes/ugens7.c:46 Opcodes/ugensa.c:49
 msgid "illegal value for iolaps"
 msgstr ""
@@ -8727,17 +8644,17 @@ msgstr ""
 msgid "table in iftfn for ftmorf does not exist"
 msgstr ""
 
-#: Opcodes/ugnorman.c:120
+#: Opcodes/ugnorman.c:121
 #, c-format
 msgid "%s: Ats file %s not read (does it exist?)"
 msgstr ""
 
-#: Opcodes/ugnorman.c:131
+#: Opcodes/ugnorman.c:132
 #, c-format
 msgid "%s: either %s is not an ATS file or the byte endianness is wrong"
 msgstr ""
 
-#: Opcodes/ugnorman.c:139
+#: Opcodes/ugnorman.c:140
 #, c-format
 msgid ""
 "%s: %s is byte-swapped\n"
@@ -8745,125 +8662,125 @@ msgid ""
 "\twill not result in different audio, but they may slow down processing."
 msgstr ""
 
-#: Opcodes/ugnorman.c:175
+#: Opcodes/ugnorman.c:176
 msgid ""
 "ATSINFO: location is out of bounds: 0-8 are the only possible selections"
 msgstr ""
 
-#: Opcodes/ugnorman.c:265
+#: Opcodes/ugnorman.c:266
 #, c-format
 msgid "ATSREAD: partial %i out of range, max allowed is %i"
 msgstr ""
 
-#: Opcodes/ugnorman.c:291
+#: Opcodes/ugnorman.c:292
 msgid "Type not implemented"
 msgstr ""
 
-#: Opcodes/ugnorman.c:310
+#: Opcodes/ugnorman.c:311
 msgid "ATSREAD: only positive time pointer values allowed, setting to zero\n"
 msgstr ""
 
-#: Opcodes/ugnorman.c:319
+#: Opcodes/ugnorman.c:320
 msgid "ATSREAD: timepointer out of range, truncated to last frame\n"
 msgstr ""
 
-#: Opcodes/ugnorman.c:332
+#: Opcodes/ugnorman.c:333
 msgid "ATSREAD: not initialised"
 msgstr "ATSREAD: non inizializzato"
 
-#: Opcodes/ugnorman.c:394
+#: Opcodes/ugnorman.c:395
 #, c-format
 msgid "ATSREADNZ: band %i out of range, 1-25 are the valid band values"
 msgstr ""
 
-#: Opcodes/ugnorman.c:412
+#: Opcodes/ugnorman.c:413
 msgid "ATSREADNZ: Type either not implemented or does not contain noise"
 msgstr ""
 
-#: Opcodes/ugnorman.c:431
+#: Opcodes/ugnorman.c:432
 msgid "ATSREADNZ: only positive time pointer values allowed, setting to zero\n"
 msgstr ""
 
-#: Opcodes/ugnorman.c:440
+#: Opcodes/ugnorman.c:441
 msgid "ATSREADNZ: timepointer out of range, truncated to last frame\n"
 msgstr ""
 
-#: Opcodes/ugnorman.c:449
+#: Opcodes/ugnorman.c:450
 msgid "ATSREADNZ: not initialised"
 msgstr "ATSREADNZ: non inizializzato"
 
-#: Opcodes/ugnorman.c:467
+#: Opcodes/ugnorman.c:468
 msgid "ATSADD: Function table number for synthesis waveform not valid"
 msgstr ""
 
-#: Opcodes/ugnorman.c:475
+#: Opcodes/ugnorman.c:476
 msgid "ATSADD: Gate Function table number not valid"
 msgstr ""
 
-#: Opcodes/ugnorman.c:521
+#: Opcodes/ugnorman.c:522
 #, c-format
 msgid "ATSADD: Partial(s) out of range, max partial allowed is %i"
 msgstr ""
 
-#: Opcodes/ugnorman.c:555
+#: Opcodes/ugnorman.c:556
 msgid "ATSADD: Type not implemented"
 msgstr ""
 
-#: Opcodes/ugnorman.c:585
+#: Opcodes/ugnorman.c:586
 msgid ""
 "ATSADD: only positive time pointer values are allowed, setting to zero\n"
 msgstr ""
 
-#: Opcodes/ugnorman.c:594
+#: Opcodes/ugnorman.c:595
 msgid "ATSADD: time pointer out of range, truncating to last frame\n"
 msgstr ""
 
-#: Opcodes/ugnorman.c:638
+#: Opcodes/ugnorman.c:639
 msgid "ATSADD: not initialised"
 msgstr "ATSADD: non inizializzato"
 
-#: Opcodes/ugnorman.c:842
+#: Opcodes/ugnorman.c:845
 msgid "ATSADDNZ: This file type contains no noise"
 msgstr ""
 
-#: Opcodes/ugnorman.c:846
+#: Opcodes/ugnorman.c:849
 msgid "ATSADDNZ: This file type has not been implemented in this code yet."
 msgstr ""
 
-#: Opcodes/ugnorman.c:869
+#: Opcodes/ugnorman.c:872
 msgid "ATSADDNZ: Band(s) out of range, max band allowed is 25"
 msgstr ""
 
-#: Opcodes/ugnorman.c:886
+#: Opcodes/ugnorman.c:889
 msgid ""
 "ATSADDNZ: Type either has no noise or is not implemented (only type 3 and 4 "
 "work now)"
 msgstr ""
 
-#: Opcodes/ugnorman.c:1002
+#: Opcodes/ugnorman.c:1005
 msgid ""
 "ATSADDNZ: only positive time pointer values are allowed, setting to zero\n"
 msgstr ""
 
-#: Opcodes/ugnorman.c:1011
+#: Opcodes/ugnorman.c:1014
 msgid "ATSADDNZ: time pointer out of range, truncating to last frame\n"
 msgstr ""
 
-#: Opcodes/ugnorman.c:1165
+#: Opcodes/ugnorman.c:1168
 #, c-format
 msgid "ATSSINNOI: Partial(s) out of range, max partial allowed is %i"
 msgstr ""
 
-#: Opcodes/ugnorman.c:1202
+#: Opcodes/ugnorman.c:1205
 msgid "ATSSINNOI: Type not implemented"
 msgstr ""
 
-#: Opcodes/ugnorman.c:1315
+#: Opcodes/ugnorman.c:1316
 msgid ""
 "ATSSINNOI: only positive time pointer values are allowed, setting to zero\n"
 msgstr ""
 
-#: Opcodes/ugnorman.c:1324
+#: Opcodes/ugnorman.c:1325
 msgid "ATSSINNOI: time pointer out of range, truncating to last frame\n"
 msgstr ""
 
@@ -8936,44 +8853,44 @@ msgstr ""
 msgid "ATSCROSS: you must have an atsbufread before an atsinterpread"
 msgstr ""
 
-#: Opcodes/ugsc.c:394
+#: Opcodes/ugsc.c:390
 msgid "Phaser mode must be either 1 or 2"
 msgstr ""
 
-#: Opcodes/vbap.c:57
+#: Opcodes/vbap.c:59
 msgid "vbap: error allocating loudspeaker table"
 msgstr ""
 
-#: Opcodes/vbap.c:264
+#: Opcodes/vbap.c:266
 msgid ""
 "Number of loudspeakers is zero\n"
 "Exiting"
 msgstr ""
 
-#: Opcodes/vbap.c:573
+#: Opcodes/vbap.c:575
 msgid "Error in loudspeaker dimension."
 msgstr ""
 
-#: Opcodes/vbap.c:596
+#: Opcodes/vbap.c:598
 msgid "Too few loudspeakers"
 msgstr ""
 
-#: Opcodes/vbap.c:622
+#: Opcodes/vbap.c:624
 msgid "Not valid 3-D configuration"
 msgstr ""
 
-#: Opcodes/vbap.c:668 Opcodes/vbap.c:767
+#: Opcodes/vbap.c:670 Opcodes/vbap.c:769
 msgid ""
 "\n"
 "Configured loudspeakers\n"
 msgstr ""
 
-#: Opcodes/vbap.c:670
+#: Opcodes/vbap.c:672
 #, c-format
 msgid "Triplet %d Loudspeakers: "
 msgstr ""
 
-#: Opcodes/vbap.c:769
+#: Opcodes/vbap.c:771
 #, c-format
 msgid "Pair %d Loudspeakers: "
 msgstr ""
@@ -9055,41 +8972,33 @@ msgstr ""
 msgid "Have to have at least %d directions in vbapzmove"
 msgstr ""
 
-#: Opcodes/Vosim.c:49
+#: Opcodes/Vosim.c:51
 msgid "vosim: pulse table not found"
 msgstr ""
 
-#: Opcodes/Vosim.c:72
+#: Opcodes/Vosim.c:74
 msgid "vosim: zero kfund. 'Infinite' length event generated."
 msgstr ""
 
-#: Opcodes/Vosim.c:80
+#: Opcodes/Vosim.c:82
 #, c-format
 msgid "vosim: kfund (%f) > sr. Generating ksmps silence."
 msgstr ""
 
-#: Opcodes/Vosim.c:158
+#: Opcodes/Vosim.c:160
 msgid "vosim: not initialised"
 msgstr "vosim: non inizializzato"
 
-#: Opcodes/vpvoc.c:118
-msgid "tableseg: not initialised"
-msgstr "tableseg: non inizializzato"
-
-#: Opcodes/vpvoc.c:146
-msgid "tablexseg: not initialised"
-msgstr "tablexseg: non inizializzato"
-
-#: Opcodes/vpvoc.c:172
+#: Opcodes/vpvoc.c:173
 #, c-format
 msgid "vpvoc: Could not find ifnmagctrl table %f"
 msgstr ""
 
-#: Opcodes/vpvoc.c:178
+#: Opcodes/vpvoc.c:179
 msgid "vpvoc: associated tableseg not found"
 msgstr ""
 
-#: Opcodes/vpvoc.c:194
+#: Opcodes/vpvoc.c:195
 #, c-format
 msgid "VPVOC cannot load %s"
 msgstr ""
@@ -9207,47 +9116,47 @@ msgstr ""
 msgid "-B N\tsamples per hardware sound I/O buffer"
 msgstr ""
 
-#: Top/argdecode.c:75 util/mixer.c:95 util/scale.c:46 util/srconv.c:739
+#: Top/argdecode.c:75 util/mixer.c:95 util/scale.c:46 util/srconv.c:738
 msgid "-A\tcreate an AIFF format output soundfile"
 msgstr ""
 
-#: Top/argdecode.c:76 util/mixer.c:96 util/scale.c:47 util/srconv.c:741
+#: Top/argdecode.c:76 util/mixer.c:96 util/scale.c:47 util/srconv.c:740
 msgid "-W\tcreate a WAV format output soundfile"
 msgstr ""
 
-#: Top/argdecode.c:77 util/srconv.c:740
+#: Top/argdecode.c:77 util/srconv.c:739
 msgid "-J\tcreate an IRCAM format output soundfile"
 msgstr ""
 
-#: Top/argdecode.c:78 util/mixer.c:97 util/scale.c:48 util/srconv.c:742
+#: Top/argdecode.c:78 util/mixer.c:97 util/scale.c:48 util/srconv.c:741
 msgid "-h\tno header on output soundfile"
 msgstr ""
 
-#: Top/argdecode.c:79 util/mixer.c:99 util/scale.c:49 util/srconv.c:743
+#: Top/argdecode.c:79 util/mixer.c:99 util/scale.c:49 util/srconv.c:742
 msgid "-c\t8-bit signed_char sound samples"
 msgstr ""
 
-#: Top/argdecode.c:81 util/mixer.c:101 util/scale.c:50 util/srconv.c:744
+#: Top/argdecode.c:81 util/mixer.c:101 util/scale.c:50 util/srconv.c:743
 msgid "-a\talaw sound samples"
 msgstr ""
 
-#: Top/argdecode.c:83 util/mixer.c:98 util/mixer.c:100 util/srconv.c:745
+#: Top/argdecode.c:83 util/mixer.c:98 util/mixer.c:100 util/srconv.c:744
 msgid "-8\t8-bit unsigned_char sound samples"
 msgstr ""
 
-#: Top/argdecode.c:84 util/mixer.c:102 util/scale.c:51 util/srconv.c:746
+#: Top/argdecode.c:84 util/mixer.c:102 util/scale.c:51 util/srconv.c:745
 msgid "-u\tulaw sound samples"
 msgstr ""
 
-#: Top/argdecode.c:85 util/mixer.c:103 util/scale.c:52 util/srconv.c:747
+#: Top/argdecode.c:85 util/mixer.c:103 util/scale.c:52 util/srconv.c:746
 msgid "-s\tshort_int sound samples"
 msgstr ""
 
-#: Top/argdecode.c:86 util/mixer.c:104 util/scale.c:53 util/srconv.c:748
+#: Top/argdecode.c:86 util/mixer.c:104 util/scale.c:53 util/srconv.c:747
 msgid "-l\tlong_int sound samples"
 msgstr ""
 
-#: Top/argdecode.c:87 util/mixer.c:105 util/scale.c:54 util/srconv.c:749
+#: Top/argdecode.c:87 util/mixer.c:105 util/scale.c:54 util/srconv.c:748
 msgid "-f\tfloat sound samples"
 msgstr ""
 
@@ -9255,7 +9164,7 @@ msgstr ""
 msgid "-3\t24bit sound samples"
 msgstr ""
 
-#: Top/argdecode.c:89 util/srconv.c:750
+#: Top/argdecode.c:89 util/srconv.c:749
 msgid "-r N\torchestra srate override"
 msgstr ""
 
@@ -9263,7 +9172,7 @@ msgstr ""
 msgid "-k N\torchestra krate override"
 msgstr ""
 
-#: Top/argdecode.c:91 util/srconv.c:751
+#: Top/argdecode.c:91 util/srconv.c:750
 msgid "-K\tDo not generate PEAK chunks"
 msgstr ""
 
@@ -9323,7 +9232,7 @@ msgstr ""
 msgid "-F fnam\tread MIDIfile event stream from file 'fnam'"
 msgstr ""
 
-#: Top/argdecode.c:107 util/mixer.c:106 util/scale.c:59 util/srconv.c:752
+#: Top/argdecode.c:107 util/mixer.c:106 util/scale.c:59 util/srconv.c:751
 msgid "-R\tcontinually rewrite header while writing soundfile (WAV/AIFF)"
 msgstr ""
 
@@ -9331,7 +9240,7 @@ msgstr ""
 msgid "-H#\tprint heartbeat style 1, 2 or 3 at each soundfile write"
 msgstr ""
 
-#: Top/argdecode.c:109 util/mixer.c:108 util/scale.c:61 util/srconv.c:754
+#: Top/argdecode.c:109 util/mixer.c:108 util/scale.c:61 util/srconv.c:753
 msgid "-N\tnotify (ring the bell) when score or miditrack is done"
 msgstr ""
 
@@ -9817,16 +9726,16 @@ msgid "-M: stdin not supported on this platform"
 msgstr ""
 
 #: Top/argdecode.c:668 Top/argdecode.c:959 util/envext.c:84 util/mixer.c:205
-#: util/scale.c:173 util/srconv.c:248 util/xtrct.c:116
+#: util/scale.c:173 util/srconv.c:247 util/xtrct.c:116
 msgid "no outfilename"
 msgstr ""
 
-#: Top/argdecode.c:671 Top/argdecode.c:963 util/scale.c:177 util/srconv.c:252
+#: Top/argdecode.c:671 Top/argdecode.c:963 util/scale.c:177 util/srconv.c:251
 #: util/xtrct.c:120
 msgid "-o cannot be stdin"
 msgstr ""
 
-#: Top/argdecode.c:675 Top/argdecode.c:967 util/scale.c:180 util/srconv.c:257
+#: Top/argdecode.c:675 Top/argdecode.c:967 util/scale.c:180 util/srconv.c:256
 #: util/xtrct.c:123
 msgid "stdout audio not supported"
 msgstr ""
@@ -9946,164 +9855,164 @@ msgstr ""
 msgid "cscoreFileGetCurrent: no fp current"
 msgstr ""
 
-#: Top/csmodule.c:192
+#: Top/csmodule.c:199
 #, c-format
 msgid "not loading '%s' (uses incompatible floating point type)"
 msgstr ""
 
-#: Top/csmodule.c:201
+#: Top/csmodule.c:209
 #, c-format
 msgid ""
 "not loading '%s' (incompatible with this version of Csound (%d.%d/%d.%d)"
 msgstr ""
 
-#: Top/csmodule.c:244
+#: Top/csmodule.c:252
 #, c-format
 msgid "could not open library '%s' (%s)"
 msgstr ""
 
-#: Top/csmodule.c:247
+#: Top/csmodule.c:255
 #, c-format
 msgid "could not open library '%s' (%d)"
 msgstr ""
 
-#: Top/csmodule.c:303
+#: Top/csmodule.c:311
 #, c-format
 msgid "'%s' is not a Csound plugin library"
 msgstr ""
 
-#: Top/csmodule.c:314
+#: Top/csmodule.c:322
 msgid "csoundLoadExternal(): memory allocation failure"
 msgstr ""
 
-#: Top/csmodule.c:328 Top/csmodule.c:336
+#: Top/csmodule.c:336 Top/csmodule.c:344
 #, c-format
 msgid "Error in pre-initialisation function of module '%s'"
 msgstr ""
 
-#: Top/csmodule.c:599 Top/csmodule.c:605 Top/csmodule.c:616 Top/csmodule.c:623
-#: Top/csmodule.c:629 Top/csmodule.c:637
+#: Top/csmodule.c:608 Top/csmodule.c:614 Top/csmodule.c:625 Top/csmodule.c:632
+#: Top/csmodule.c:638 Top/csmodule.c:646
 msgid "Error opening plugin directory\n"
 msgstr ""
 
-#: Top/csmodule.c:687
+#: Top/csmodule.c:696
 #, c-format
 msgid "Error opening plugin directory '%s': %s"
 msgstr ""
 
-#: Top/csmodule.c:722
+#: Top/csmodule.c:731
 #, c-format
 msgid "path name too long, skipping '%s'"
 msgstr ""
 
-#: Top/csmodule.c:728
+#: Top/csmodule.c:737
 #, c-format
 msgid "Library %s omitted\n"
 msgstr ""
 
-#: Top/csmodule.c:764
+#: Top/csmodule.c:773
 msgid "Loading command-line libraries:\n"
 msgstr ""
 
-#: Top/csmodule.c:787
+#: Top/csmodule.c:796
 #, c-format
 msgid " *** error loading '%s'"
 msgstr ""
 
-#: Top/csmodule.c:810
+#: Top/csmodule.c:819
 #, c-format
 msgid "Error starting module '%s'"
 msgstr ""
 
-#: Top/csmodule.c:907
+#: Top/csmodule.c:918
 #, c-format
 msgid "Error de-initialising module '%s'"
 msgstr ""
 
-#: Top/csound.c:1606 Top/csound.c:1626
+#: Top/csound.c:1636 Top/csound.c:1656
 msgid "Early return from csoundPerformKsmps().\n"
 msgstr ""
 
-#: Top/csound.c:1612
+#: Top/csound.c:1642
 msgid "Score finished in csoundPerformKsmps().\n"
 msgstr ""
 
-#: Top/csound.c:1645
+#: Top/csound.c:1675
 msgid "Early return from csoundPerformBuffer().\n"
 msgstr ""
 
-#: Top/csound.c:1670
+#: Top/csound.c:1700
 msgid "Early return from csoundPerform().\n"
 msgstr ""
 
-#: Top/csound.c:1677
+#: Top/csound.c:1707
 msgid "Score finished in csoundPerform().\n"
 msgstr ""
 
-#: Top/csound.c:1697
+#: Top/csound.c:1727
 msgid "csoundPerform(): stopped.\n"
 msgstr ""
 
-#: Top/csound.c:1968
+#: Top/csound.c:1998
 msgid "WARNING: "
 msgstr "ATTENZIONE: "
 
-#: Top/csound.c:2089
+#: Top/csound.c:2119
 msgid "rtdummy: failed to allocate globals"
 msgstr ""
 
-#: Top/csound.c:2090
+#: Top/csound.c:2120
 msgid "rtaudio: dummy module enabled\n"
 msgstr ""
 
-#: Top/csound.c:2119 Top/csound.c:2155
+#: Top/csound.c:2149 Top/csound.c:2185
 msgid " *** error: rtaudio module set to empty string"
 msgstr ""
 
-#: Top/csound.c:2123 Top/csound.c:2159
+#: Top/csound.c:2153 Top/csound.c:2189
 #, c-format
 msgid " *** error: unknown rtaudio module: '%s'"
 msgstr ""
 
-#: Top/csound.c:2241
+#: Top/csound.c:2271
 msgid "WARNING: real time midi input disabled, using dummy functions\n"
 msgstr ""
 
-#: Top/csound.c:2246 Top/csound.c:2280
+#: Top/csound.c:2276 Top/csound.c:2310
 msgid "error: -+rtmidi set to empty string"
 msgstr ""
 
-#: Top/csound.c:2249 Top/csound.c:2283
+#: Top/csound.c:2279 Top/csound.c:2313
 #, c-format
 msgid "error: -+rtmidi='%s': unknown module"
 msgstr ""
 
-#: Top/csound.c:2275
+#: Top/csound.c:2305
 msgid "WARNING: real time midi output disabled, using dummy functions\n"
 msgstr ""
 
-#: Top/csound.c:2297
+#: Top/csound.c:2327
 msgid "Unknown MIDI error"
 msgstr ""
 
-#: Top/csound.c:2415
+#: Top/csound.c:2445
 msgid "xyin not supported. use invalue opcode instead."
 msgstr ""
 
-#: Top/csound.c:2522
+#: Top/csound.c:2552
 msgid "Failed to allocate new opcode entry."
 msgstr ""
 
-#: Top/csound.c:2545
+#: Top/csound.c:2575
 #, c-format
 msgid "Failed to allocate opcode entry for %s."
 msgstr ""
 
-#: Top/csound.c:2876
+#: Top/csound.c:2906
 msgid "Cannot open /proc/cpuinfo. Support for RDTSC is not available.\n"
 msgstr ""
 
-#: Top/csound.c:2927
+#: Top/csound.c:2957
 msgid "No valid CPU frequency entry was found in /proc/cpuinfo.\n"
 msgstr ""
 
@@ -10111,25 +10020,25 @@ msgstr ""
 msgid "Error allocating opcode list"
 msgstr ""
 
-#: Top/main.c:161
+#: Top/main.c:160
 #, c-format
 msgid "WARNING: cannot open csoundrc file %s\n"
 msgstr ""
 
-#: Top/main.c:164
+#: Top/main.c:163
 #, c-format
 msgid "Reading options from $CSOUNDRC: %s \n"
 msgstr ""
 
-#: Top/main.c:173
+#: Top/main.c:172
 msgid "Reading options from $HOME/.csoundrc\n"
 msgstr ""
 
-#: Top/main.c:200
+#: Top/main.c:199
 msgid "no orchestra name"
 msgstr ""
 
-#: Top/main.c:225
+#: Top/main.c:224
 msgid "Reading CSD failed ... stopping"
 msgstr ""
 
@@ -10141,7 +10050,7 @@ msgstr ""
 msgid "error: multiple uses of stdout"
 msgstr ""
 
-#: Top/main.c:260 util/dnoise.c:268
+#: Top/main.c:260 util/dnoise.c:264
 #, c-format
 msgid "%s not a recognised SFOUTYP env setting"
 msgstr ""
@@ -10154,58 +10063,62 @@ msgstr ""
 msgid "realtime performance using dummy numeric scorefile\n"
 msgstr ""
 
-#: Top/main.c:319
+#: Top/main.c:314
 #, c-format
 msgid "orchname:  %s\n"
 msgstr ""
 
-#: Top/main.c:321
-#, c-format
-msgid "scorename: %s\n"
+#: Top/main.c:334
+msgid "Stopping on parser failure\n"
 msgstr ""
 
-#: Top/main.c:353
+#: Top/main.c:352
 msgid "end of orchestra compile"
 msgstr ""
 
-#: Top/main.c:360
+#: Top/main.c:359
 #, c-format
 msgid "using previous %s\n"
 msgstr ""
 
-#: Top/main.c:373
+#: Top/main.c:369
 #, c-format
 msgid "cannot open scorefile %s"
 msgstr ""
 
-#: Top/main.c:378 Top/main.c:399
-#, c-format
-msgid "cannot open %s for writing"
-msgstr ""
-
-#: Top/main.c:381
+#: Top/main.c:371
 msgid "sorting score ...\n"
 msgstr ""
 
-#: Top/main.c:388
+#: Top/main.c:381
 #, c-format
 msgid "cannot extract %s, name conflict"
 msgstr ""
 
-#: Top/main.c:391
+#: Top/main.c:384
 #, c-format
 msgid "cannot open extract file %s"
 msgstr ""
 
-#: Top/main.c:401
+#: Top/main.c:388
+#, c-format
+msgid "cannot reopen %s"
+msgstr "Impossibile riaprire %s"
+
+#: Top/main.c:392
+#, c-format
+msgid "cannot open %s for writing"
+msgstr ""
+
+#: Top/main.c:394
 msgid "  ... extracting ...\n"
 msgstr ""
 
-#: Top/main.c:414
+#: Top/main.c:405
 msgid "end of score sort"
 msgstr ""
 
-#: Top/main.c:416
+#: Top/main.c:407
 msgid "Syntax check completed.\n"
 msgstr ""
 
@@ -10270,163 +10183,158 @@ msgstr ""
 msgid " *** error setting option '%s' to '%s': %s\n"
 msgstr ""
 
-#: Top/one_file.c:105 Top/one_file.c:113
+#: Top/one_file.c:110 Top/one_file.c:118
 msgid " *** cannot create temporary file"
 msgstr ""
 
-#: Top/one_file.c:198
+#: Top/one_file.c:203
 #, c-format
 msgid "Removing temporary file %s ...\n"
 msgstr ""
 
-#: Top/one_file.c:202
+#: Top/one_file.c:207
 #, c-format
 msgid "WARNING: could not remove %s\n"
 msgstr ""
 
-#: Top/one_file.c:268 Top/one_file.c:296
+#: Top/one_file.c:274 Top/one_file.c:302
 #, c-format
 msgid "More than %d arguments in <CsOptions>"
 msgstr ""
 
-#: Top/one_file.c:313
+#: Top/one_file.c:319
 #, c-format
 msgid "Invalid arguments in <CsOptions>: %s"
 msgstr ""
 
-#: Top/one_file.c:316
+#: Top/one_file.c:322
 #, c-format
 msgid "Invalid arguments in .csoundrc or -@ file: %s"
 msgstr ""
 
-#: Top/one_file.c:322 Top/one_file.c:790
+#: Top/one_file.c:328 Top/one_file.c:744
 msgid "Missing end tag </CsOptions>"
 msgstr ""
 
-#: Top/one_file.c:340 Top/one_file.c:372 Top/one_file.c:420
-#, c-format
-msgid "Creating %s (%p)\n"
-msgstr ""
-
-#: Top/one_file.c:343
-#, c-format
-msgid "Failed to create %s"
-msgstr ""
-
-#: Top/one_file.c:356
+#: Top/one_file.c:354
 msgid "Missing end tag </CsInstruments>"
 msgstr ""
 
-#: Top/one_file.c:389 Top/one_file.c:442
+#: Top/one_file.c:376 Top/one_file.c:430
 msgid "Missing end tag </CsScore>"
 msgstr ""
 
-#: Top/one_file.c:403 Top/one_file.c:408
+#: Top/one_file.c:391 Top/one_file.c:396
 msgid "Missing program in tag <CsScore>"
 msgstr ""
 
-#: Top/one_file.c:433
+#: Top/one_file.c:408
+#, c-format
+msgid "Creating %s (%p)\n"
+msgstr ""
+
+#: Top/one_file.c:421
 msgid "External generation failed"
 msgstr ""
 
-#: Top/one_file.c:520
+#: Top/one_file.c:468
 #, c-format
 msgid "Non base64 character %c(%2x)"
 msgstr ""
 
-#: Top/one_file.c:539
+#: Top/one_file.c:487
 msgid "Truncated byte at end of base64 stream"
 msgstr ""
 
-#: Top/one_file.c:554
+#: Top/one_file.c:503
 #, c-format
 msgid "Cannot open temporary file (%s) for MIDI subfile"
 msgstr ""
 
-#: Top/one_file.c:571
+#: Top/one_file.c:520
 msgid "Missing end tag </CsMidifileB>"
 msgstr ""
 
-#: Top/one_file.c:586 Top/one_file.c:633
+#: Top/one_file.c:536 Top/one_file.c:584
 #, c-format
 msgid "File %s already exists"
 msgstr ""
 
-#: Top/one_file.c:591
+#: Top/one_file.c:541
 #, c-format
 msgid "Cannot open sample file (%s) subfile"
 msgstr ""
 
-#: Top/one_file.c:605
+#: Top/one_file.c:555
 msgid "Missing end tag </CsSampleB>"
 msgstr ""
 
-#: Top/one_file.c:638
+#: Top/one_file.c:589
 #, c-format
 msgid "Cannot open file (%s) subfile"
 msgstr ""
 
-#: Top/one_file.c:653
+#: Top/one_file.c:604
 msgid "Missing end tag </CsFileB>"
 msgstr ""
 
-#: Top/one_file.c:672
+#: Top/one_file.c:624
 #, c-format
 msgid "This CSD file requires a version of Csound before %d.%02d"
 msgstr ""
 
-#: Top/one_file.c:680 Top/one_file.c:687
+#: Top/one_file.c:632 Top/one_file.c:639
 #, c-format
 msgid "This CSD file requires a version of Csound after %d.%02d"
 msgstr ""
 
-#: Top/one_file.c:693
+#: Top/one_file.c:645
 msgid "Missing end tag </CsVersion>"
 msgstr ""
 
-#: Top/one_file.c:702
+#: Top/one_file.c:655
 msgid "**** Licence Information ****\n"
 msgstr ""
 
-#: Top/one_file.c:708
+#: Top/one_file.c:661
 msgid "**** End of Licence Information ****\n"
 msgstr ""
 
-#: Top/one_file.c:719
+#: Top/one_file.c:672
 msgid "Missing end tag </CsLicence>"
 msgstr ""
 
-#: Top/one_file.c:749
+#: Top/one_file.c:703
 #, c-format
 msgid "Failed to open csd file: %s"
 msgstr ""
 
-#: Top/one_file.c:764
+#: Top/one_file.c:718
 msgid "STARTING FILE\n"
 msgstr ""
 
-#: Top/one_file.c:780
+#: Top/one_file.c:734
 msgid "Creating options\n"
 msgstr ""
 
-#: Top/one_file.c:786
+#: Top/one_file.c:740
 msgid "Skipping <CsOptions>\n"
 msgstr ""
 
-#: Top/one_file.c:800
+#: Top/one_file.c:754
 msgid "Creating orchestra\n"
 msgstr ""
 
-#: Top/one_file.c:805
+#: Top/one_file.c:759
 msgid "Creating score\n"
 msgstr ""
 
-#: Top/one_file.c:839
+#: Top/one_file.c:793
 #, c-format
 msgid "unknown CSD tag: %s\n"
 msgstr ""
 
-#: Top/one_file.c:844
+#: Top/one_file.c:798
 msgid "Could not find <CsoundSynthesizer> tag in CSD file.\n"
 msgstr ""
 
@@ -10600,15 +10508,15 @@ msgstr "scot: %d errori.\n"
 #, c-format
 msgid ""
 "\n"
-" Could not open %s for writing, bye...\n"
+"Could not open %s for writing, bye...\n"
 msgstr ""
 
 #: util/atsa.c:544
 msgid "saving ATS data..."
 msgstr ""
 
-#: util/atsa.c:546 util/atsa.c:2344 util/atsa.c:2358 util/atsa.c:2368
-#: util/atsa.c:2548 util/atsa.c:2611 util/atsa.c:2699
+#: util/atsa.c:546 util/atsa.c:2354 util/atsa.c:2368 util/atsa.c:2387
+#: util/atsa.c:2567 util/atsa.c:2630 util/atsa.c:2718
 msgid "done!\n"
 msgstr ""
 
@@ -10716,181 +10624,181 @@ msgid ""
 "\n"
 msgstr ""
 
-#: util/atsa.c:1482
+#: util/atsa.c:1492
 #, c-format
 msgid "atsa: error opening residual file '%s'"
 msgstr ""
 
-#: util/atsa.c:1486
+#: util/atsa.c:1496
 #, c-format
 msgid "atsa: residual file has %d channels, must be stereo !"
 msgstr ""
 
-#: util/atsa.c:1813
+#: util/atsa.c:1823
 #, c-format
 msgid ""
 "\n"
 "ERROR: cannot open file %s for writing\n"
 msgstr ""
 
-#: util/atsa.c:1908
+#: util/atsa.c:1918
 msgid "Error: sound not optimised !"
 msgstr ""
 
-#: util/atsa.c:2003
+#: util/atsa.c:2013
 #, c-format
 msgid "atsa: cannot open input file '%s'"
 msgstr ""
 
-#: util/atsa.c:2010
+#: util/atsa.c:2020
 #, c-format
 msgid "atsa: file has %d channels, must be mono !"
 msgstr ""
 
-#: util/atsa.c:2015
+#: util/atsa.c:2025
 msgid "tracking...\n"
 msgstr ""
 
-#: util/atsa.c:2024
+#: util/atsa.c:2034
 #, c-format
 msgid "start %f out of bounds, corrected to 0.0"
 msgstr ""
 
-#: util/atsa.c:2034
+#: util/atsa.c:2044
 #, c-format
 msgid "duration %f out of bounds, limited to file duration"
 msgstr ""
 
-#: util/atsa.c:2040
+#: util/atsa.c:2050
 #, c-format
 msgid "start: %f duration: %f file dur: %f\n"
 msgstr ""
 
-#: util/atsa.c:2047
+#: util/atsa.c:2057
 #, c-format
 msgid "lowest freq. %f out of bounds, forced to default: %f"
 msgstr ""
 
-#: util/atsa.c:2057
+#: util/atsa.c:2067
 #, c-format
 msgid "highest freq. %f out of bounds, forced to default: %f"
 msgstr ""
 
-#: util/atsa.c:2064
+#: util/atsa.c:2074
 #, c-format
 msgid ""
 "freq. dev. %f out of bounds, should be > 0.0 and <= 1.0, forced to default: "
 "%f"
 msgstr ""
 
-#: util/atsa.c:2072
+#: util/atsa.c:2082
 #, c-format
 msgid ""
 "windows cycles %d out of bounds, should be between 1 and 8, forced to "
 "default: %d"
 msgstr ""
 
-#: util/atsa.c:2080
+#: util/atsa.c:2090
 #, c-format
 msgid ""
 "window type %d out of bounds, should be between 0 and 3, forced to default: "
 "%d"
 msgstr ""
 
-#: util/atsa.c:2088
+#: util/atsa.c:2098
 #, c-format
 msgid ""
 "hop size %f out of bounds, should be > 0.0 and <= 1.0, forced to default: %f"
 msgstr ""
 
-#: util/atsa.c:2096
+#: util/atsa.c:2106
 #, c-format
 msgid ""
 "lowest magnitude %f out of bounds, should be >= 0.0 and <= 1.0, forced to "
 "default: %f"
 msgstr ""
 
-#: util/atsa.c:2120
+#: util/atsa.c:2130
 #, c-format
 msgid "atsa: %d frames are not enough for analysis, need at least %d"
 msgstr ""
 
-#: util/atsa.c:2129
+#: util/atsa.c:2139
 #, c-format
 msgid "track length %d out of bounds, forced to: %d"
 msgstr ""
 
-#: util/atsa.c:2138
+#: util/atsa.c:2148
 #, c-format
 msgid "min. segment length %d out of bounds, forced to: %d"
 msgstr ""
 
-#: util/atsa.c:2147
+#: util/atsa.c:2157
 #, c-format
 msgid "min. gap length %d out of bounds, forced to: %d"
 msgstr ""
 
-#: util/atsa.c:2153
+#: util/atsa.c:2163
 #, c-format
 msgid ""
 "SMR threshold %f out of bounds, should be >= 0.0 and < %f dB SPL, forced to "
 "default: %f"
 msgstr ""
 
-#: util/atsa.c:2164
+#: util/atsa.c:2174
 #, c-format
 msgid ""
 "min. seg. SMR %f out of bounds, should be >= %f and < %f dB SPL, forced to "
 "default: %f"
 msgstr ""
 
-#: util/atsa.c:2172
+#: util/atsa.c:2182
 #, c-format
 msgid ""
 "last peak contribution %f out of bounds, should be >= 0.0 and <= 1.0, forced "
 "to default: %f"
 msgstr ""
 
-#: util/atsa.c:2180
+#: util/atsa.c:2190
 #, c-format
 msgid ""
 "SMR contribution %f out of bounds, should be >= 0.0 and <= 1.0, forced to "
 "default: %f"
 msgstr ""
 
-#: util/atsa.c:2325
+#: util/atsa.c:2335
 msgid "Initializing ATS data..."
 msgstr ""
 
-#: util/atsa.c:2355
+#: util/atsa.c:2365
 msgid "Computing residual..."
 msgstr ""
 
-#: util/atsa.c:2366
+#: util/atsa.c:2381 util/atsa.c:2384
 msgid "Analysing residual..."
 msgstr ""
 
-#: util/atsa.c:2370
+#: util/atsa.c:2389
 msgid "tracking completed.\n"
 msgstr ""
 
-#: util/atsa.c:2478
+#: util/atsa.c:2497
 msgid "Filling sound gaps..."
 msgstr ""
 
-#: util/atsa.c:2566
+#: util/atsa.c:2585
 msgid "Trimming short partials..."
 msgstr ""
 
-#: util/atsa.c:2662
+#: util/atsa.c:2681
 msgid "Computing averages..."
 msgstr ""
 
-#: util/atsa.c:2713
+#: util/atsa.c:2732
 msgid "No partials to track -- stopping\n"
 msgstr ""
 
-#: util/atsa.c:2813
+#: util/atsa.c:2832
 msgid "Soundfile analysis for ATS opcodes"
 msgstr ""
 
@@ -10922,8 +10830,8 @@ msgstr ""
 msgid "illegal number of filenames"
 msgstr ""
 
-#: util/cvanal.c:113 util/dnoise.c:456 util/lpanal.c:518 util/pvanal.c:258
-#: util/srconv.c:351
+#: util/cvanal.c:113 util/dnoise.c:445 util/lpanal.c:518 util/pvanal.c:258
+#: util/srconv.c:350
 #, c-format
 msgid "error while opening %s"
 msgstr ""
@@ -10963,256 +10871,256 @@ msgstr ""
 msgid "Soundfile analysis for convolve"
 msgstr ""
 
-#: util/dnoise.c:285
+#: util/dnoise.c:281
 msgid "-o cannot be stdin\n"
 msgstr ""
 
-#: util/dnoise.c:297
+#: util/dnoise.c:293
 msgid "-A overriding local default WAV out"
 msgstr ""
 
-#: util/dnoise.c:302
+#: util/dnoise.c:298
 msgid "-J overriding local default AIFF/WAV out"
 msgstr ""
 
-#: util/dnoise.c:309
+#: util/dnoise.c:305
 msgid "-W overriding local default AIFF out"
 msgstr ""
 
-#: util/dnoise.c:356
+#: util/dnoise.c:345
 msgid "no t argument"
 msgstr ""
 
-#: util/dnoise.c:379
+#: util/dnoise.c:368
 msgid "no n argument"
 msgstr ""
 
-#: util/dnoise.c:384
+#: util/dnoise.c:373
 msgid "no b argument"
 msgstr ""
 
-#: util/dnoise.c:392
+#: util/dnoise.c:381
 msgid "no B argument"
 msgstr ""
 
-#: util/dnoise.c:404
+#: util/dnoise.c:393
 msgid "no E argument"
 msgstr ""
 
-#: util/dnoise.c:408
+#: util/dnoise.c:397
 msgid "no N argument"
 msgstr ""
 
-#: util/dnoise.c:412
+#: util/dnoise.c:401
 msgid "no M argument"
 msgstr ""
 
-#: util/dnoise.c:416
+#: util/dnoise.c:405
 msgid "no L argument"
 msgstr ""
 
-#: util/dnoise.c:420
+#: util/dnoise.c:409
 msgid "no w argument"
 msgstr ""
 
-#: util/dnoise.c:424
+#: util/dnoise.c:413
 msgid "no D argument"
 msgstr ""
 
-#: util/dnoise.c:431 util/srconv.c:328
+#: util/dnoise.c:420 util/srconv.c:327
 #, c-format
 msgid "Looking at %c\n"
 msgstr ""
 
-#: util/dnoise.c:438 util/srconv.c:336
+#: util/dnoise.c:427 util/srconv.c:335
 #, c-format
 msgid "Infile set to %s\n"
 msgstr ""
 
-#: util/dnoise.c:441 util/srconv.c:339
+#: util/dnoise.c:430 util/srconv.c:338
 #, c-format
 msgid "End with %s\n"
 msgstr ""
 
-#: util/dnoise.c:447
+#: util/dnoise.c:436
 msgid "dnoise: no input file\n"
 msgstr ""
 
-#: util/dnoise.c:451
+#: util/dnoise.c:440
 msgid "Must have an example noise file (-i name)\n"
 msgstr ""
 
-#: util/dnoise.c:479
+#: util/dnoise.c:468
 #, c-format
 msgid "cannot open %s.\n"
 msgstr ""
 
-#: util/dnoise.c:491 util/srconv.c:461 util/srconv.c:473
+#: util/dnoise.c:480 util/srconv.c:460 util/srconv.c:472
 #, c-format
 msgid "cannot open %s."
 msgstr "Impossibile aprire %s."
 
-#: util/dnoise.c:510
+#: util/dnoise.c:499
 msgid "dnoise: input MUST be mono or stereo\n"
 msgstr ""
 
-#: util/dnoise.c:518
+#: util/dnoise.c:507
 msgid "dnoise: cannot open noise reference file\n"
 msgstr ""
 
-#: util/dnoise.c:523
+#: util/dnoise.c:512
 msgid "Incompatible sample rates\n"
 msgstr ""
 
-#: util/dnoise.c:542
+#: util/dnoise.c:531
 #, c-format
 msgid "dnoise: warning - N not a valid power of two; revised N = %d\n"
 msgstr ""
 
-#: util/dnoise.c:552
+#: util/dnoise.c:541
 msgid "dnoise: warning - do not specify both M and W\n"
 msgstr ""
 
-#: util/dnoise.c:562
+#: util/dnoise.c:551
 msgid "dnoise: warning - invalid W ignored\n"
 msgstr ""
 
-#: util/dnoise.c:576
+#: util/dnoise.c:565
 msgid "dnoise: warning - M is too small\n"
 msgstr ""
 
-#: util/dnoise.c:586
+#: util/dnoise.c:575
 msgid "dnoise: M too large\n"
 msgstr ""
 
-#: util/dnoise.c:592
+#: util/dnoise.c:581
 msgid "dnoise: L too large\n"
 msgstr ""
 
-#: util/dnoise.c:602
+#: util/dnoise.c:591
 #, c-format
 msgid "writing %u-byte blks of %s to %s"
 msgstr ""
 
-#: util/dnoise.c:627 util/dnoise.c:666 util/dnoise.c:721 util/dnoise.c:732
-#: util/dnoise.c:736 util/dnoise.c:743 util/dnoise.c:753 util/dnoise.c:758
-#: util/dnoise.c:762 util/dnoise.c:766 util/dnoise.c:770
+#: util/dnoise.c:616 util/dnoise.c:655 util/dnoise.c:710 util/dnoise.c:721
+#: util/dnoise.c:725 util/dnoise.c:732 util/dnoise.c:742 util/dnoise.c:747
+#: util/dnoise.c:751 util/dnoise.c:755 util/dnoise.c:759
 msgid "dnoise: insufficient memory\n"
 msgstr ""
 
-#: util/dnoise.c:779 util/dnoise.c:788
+#: util/dnoise.c:768 util/dnoise.c:777
 msgid "dnoise: begin time is greater than EOF of noise file!"
 msgstr ""
 
-#: util/dnoise.c:820
+#: util/dnoise.c:809
 msgid "dnoise: not enough samples of noise reference\n"
 msgstr ""
 
-#: util/dnoise.c:1118
+#: util/dnoise.c:1103
 #, c-format
 msgid "%5.1f seconds of input complete\n"
 msgstr ""
 
-#: util/dnoise.c:1137
+#: util/dnoise.c:1122
 msgid "processing complete\n"
 msgstr ""
 
-#: util/dnoise.c:1147
+#: util/dnoise.c:1132
 msgid "usage: dnoise [flags] input_file"
 msgstr ""
 
-#: util/dnoise.c:1149
+#: util/dnoise.c:1134
 msgid "flags:"
 msgstr "flags:"
 
-#: util/dnoise.c:1150
+#: util/dnoise.c:1135
 msgid "i = noise reference soundfile"
 msgstr ""
 
-#: util/dnoise.c:1151
+#: util/dnoise.c:1136
 msgid "o = output file"
 msgstr ""
 
-#: util/dnoise.c:1152
+#: util/dnoise.c:1137
 msgid "N = # of bandpass filters (1024)"
 msgstr ""
 
-#: util/dnoise.c:1153
+#: util/dnoise.c:1138
 msgid "w = filter overlap factor: {0,1,(2),3} DON'T USE -w AND -M"
 msgstr ""
 
-#: util/dnoise.c:1154
+#: util/dnoise.c:1139
 msgid "M = analysis window length (N-1 unless -w is specified)"
 msgstr ""
 
-#: util/dnoise.c:1155
+#: util/dnoise.c:1140
 msgid "L = synthesis window length (M)"
 msgstr ""
 
-#: util/dnoise.c:1156
+#: util/dnoise.c:1141
 msgid "D = decimation factor (M/8)"
 msgstr ""
 
-#: util/dnoise.c:1157
+#: util/dnoise.c:1142
 msgid "b = begin time in noise reference soundfile (0)"
 msgstr ""
 
-#: util/dnoise.c:1158
+#: util/dnoise.c:1143
 msgid "B = starting sample in noise reference soundfile (0)"
 msgstr ""
 
-#: util/dnoise.c:1159
+#: util/dnoise.c:1144
 msgid "e = end time in noise reference soundfile (end)"
 msgstr ""
 
-#: util/dnoise.c:1160
+#: util/dnoise.c:1145
 msgid "E = final sample in noise reference soundfile (end)"
 msgstr ""
 
-#: util/dnoise.c:1161
+#: util/dnoise.c:1146
 msgid "t = threshold above noise reference in dB (30)"
 msgstr ""
 
-#: util/dnoise.c:1162
+#: util/dnoise.c:1147
 msgid "S = sharpness of noise-gate turnoff (1) (1 to 5)"
 msgstr ""
 
-#: util/dnoise.c:1163
+#: util/dnoise.c:1148
 msgid "n = number of FFT frames to average over (5)"
 msgstr ""
 
-#: util/dnoise.c:1164
+#: util/dnoise.c:1149
 msgid "m = minimum gain of noise-gate when off in dB (-40)"
 msgstr ""
 
-#: util/dnoise.c:1165
+#: util/dnoise.c:1150
 msgid "V : verbose - print status info"
 msgstr ""
 
-#: util/dnoise.c:1166
+#: util/dnoise.c:1151
 msgid "A : AIFF format output"
 msgstr ""
 
-#: util/dnoise.c:1167
+#: util/dnoise.c:1152
 msgid "W : WAV format output"
 msgstr ""
 
-#: util/dnoise.c:1168
+#: util/dnoise.c:1153
 msgid "J : IRCAM format output"
 msgstr ""
 
-#: util/dnoise.c:1187
+#: util/dnoise.c:1172
 #, c-format
 msgid "soundfile write returned sample count of %d, not %d\n"
 msgstr ""
 
-#: util/dnoise.c:1189
+#: util/dnoise.c:1174
 msgid ""
 "(disk may be full...\n"
 " closing the file ...)\n"
 msgstr ""
 
-#: util/dnoise.c:1257
+#: util/dnoise.c:1242
 msgid "Removes noise from a sound file"
 msgstr ""
 
@@ -11220,7 +11128,7 @@ msgstr ""
 msgid "Usage:\tenvext [-flags] soundfile\n"
 msgstr ""
 
-#: util/envext.c:54 util/srconv.c:738
+#: util/envext.c:54 util/srconv.c:737
 msgid "-o fnam\tsound output filename\n"
 msgstr ""
 
@@ -11254,7 +11162,7 @@ msgstr ""
 msgid "enveloping %ld sample frames (%3.1f secs)\n"
 msgstr ""
 
-#: util/envext.c:179
+#: util/envext.c:177
 msgid "Create a text file of envelope"
 msgstr ""
 
@@ -11668,7 +11576,7 @@ msgstr ""
 msgid "Legal flags are:"
 msgstr ""
 
-#: util/mixer.c:107 util/scale.c:60 util/srconv.c:753
+#: util/mixer.c:107 util/scale.c:60 util/srconv.c:752
 msgid "-H#\tprint a heartbeat style 1, 2 or 3 at each soundfile write"
 msgstr ""
 
@@ -11708,7 +11616,7 @@ msgstr ""
 msgid "mixer: error: "
 msgstr "mixer: errore: "
 
-#: util/mixer.c:188 util/scale.c:161 util/srconv.c:232
+#: util/mixer.c:188 util/scale.c:161 util/srconv.c:231
 #, c-format
 msgid "%s not a recognized SFOUTYP env setting"
 msgstr ""
@@ -11937,17 +11845,17 @@ msgstr ""
 msgid "Soundfile analysis for pvoc"
 msgstr ""
 
-#: util/pvanal.c:469
+#: util/pvanal.c:467
 #, c-format
 msgid "pvxanal: unable to create analysis file: %s"
 msgstr ""
 
-#: util/pvanal.c:500 util/pvanal.c:532
+#: util/pvanal.c:498 util/pvanal.c:530
 #, c-format
 msgid "pvxanal: error writing analysis frames: %s\n"
 msgstr ""
 
-#: util/pvanal.c:542
+#: util/pvanal.c:540
 #, c-format
 msgid ""
 "\n"
@@ -12037,7 +11945,7 @@ msgstr ""
 msgid "-P fpnum\tscale file to given percentage of full"
 msgstr ""
 
-#: util/scale.c:62 util/srconv.c:755
+#: util/scale.c:62 util/srconv.c:754
 msgid "-- fnam\tlog output to file"
 msgstr ""
 
@@ -12188,75 +12096,75 @@ msgstr ""
 msgid "Sound format -%c has been overruled by -%c"
 msgstr ""
 
-#: util/srconv.c:299
+#: util/srconv.c:298
 msgid "No Q argument"
 msgstr ""
 
-#: util/srconv.c:304
+#: util/srconv.c:303
 msgid "No P argument"
 msgstr ""
 
-#: util/srconv.c:313
+#: util/srconv.c:312
 msgid "No r argument"
 msgstr ""
 
-#: util/srconv.c:322
+#: util/srconv.c:321
 msgid "No break file"
 msgstr ""
 
-#: util/srconv.c:345
+#: util/srconv.c:344
 msgid "No input given\n"
 msgstr ""
 
-#: util/srconv.c:362
+#: util/srconv.c:361
 msgid "srconv: cannot specify both -r and -P"
 msgstr ""
 
-#: util/srconv.c:373
+#: util/srconv.c:372
 msgid "srconv: cannot open time-vary function file"
 msgstr ""
 
-#: util/srconv.c:389
+#: util/srconv.c:388
 msgid "srconv: too few x-y pairs in time-vary function file"
 msgstr ""
 
-#: util/srconv.c:403
+#: util/srconv.c:402
 msgid "srconv: first x value in time-vary function must be 0"
 msgstr ""
 
-#: util/srconv.c:408
+#: util/srconv.c:407
 msgid "srconv: invalid initial y value in time-vary function"
 msgstr ""
 
-#: util/srconv.c:413 util/srconv.c:705
+#: util/srconv.c:412 util/srconv.c:704
 msgid "srconv: invalid x values in time-vary function"
 msgstr ""
 
-#: util/srconv.c:732
+#: util/srconv.c:731
 msgid ""
 "usage: srconv [flags] infile\n"
 "\n"
 "flags:"
 msgstr ""
 
-#: util/srconv.c:733
+#: util/srconv.c:732
 msgid ""
 "-P num\tpitch transposition ratio (srate/r) [do not specify both P and r]"
 msgstr ""
 
-#: util/srconv.c:735
+#: util/srconv.c:734
 msgid "-Q num\tquality factor (1 to 8: default = 2)"
 msgstr ""
 
-#: util/srconv.c:736
+#: util/srconv.c:735
 msgid "-i filnam\tbreak file"
 msgstr ""
 
-#: util/srconv.c:737
+#: util/srconv.c:736
 msgid "-r num\toutput sample rate (must be specified)"
 msgstr ""
 
-#: util/srconv.c:821
+#: util/srconv.c:820
 msgid "Sample rate conversion"
 msgstr ""
 
@@ -12408,6 +12316,76 @@ msgid "Extract part of a sound file"
 msgstr ""
 
 #, fuzzy
+#~ msgid "tableseg: not initialized"
+#~ msgstr "tableseg: non inizializzato"
+
+#, fuzzy
+#~ msgid "tablexseg: not initialized"
+#~ msgstr "tablexseg: non inizializzato"
+
+#, fuzzy
+#~ msgid "vdelayk: not initialized"
+#~ msgstr "delayk: non inizializzato"
+
+#, fuzzy
+#~ msgid " line %d: %s"
+#~ msgstr ", linea %d:\n"
+
+#, fuzzy
+#~ msgid "Includes nested too deeply"
+#~ msgstr "inclusioni innestate troppo in profondità"
+
+#, fuzzy
+#~ msgid "Line %d: Unknown character: '%c'(%2x)\n"
+#~ msgstr "Linea %d: carattere sconosciuto: '%s'\n"
+
+#~ msgid "Cannot open file \"%s\"\n"
+#~ msgstr "Non è possibile aprire il file: \"%s\"\n"
+
+#~ msgid "No number following instr\n"
+#~ msgstr "instr non è seguito da nessun numero\n"
+
+#~ msgid "cannot find end of file %s"
+#~ msgstr "impossibile trovare la fine del file %s"
+
+#~ msgid "ftell error on %s"
+#~ msgstr "errore ftell in %s"
+
+#~ msgid "  included from line %d of file input %s%s"
+#~ msgstr "  incluso dalla linea %d del file di input %s%s"
+
+#~ msgid "  called from line %d of file input %s%s"
+#~ msgstr "  chiamata dalla linea %d del file di input %s%s"
+
+#~ msgid "  in line %d of file input %s%s"
+#~ msgstr "  alla linea %d del file di input %s%s"
+
+#~ msgid "ungetscochar(): buffer overflow"
+#~ msgstr "ungetscochar(): buffer overflow"
+
+#~ msgid "Loop cannot start inside of a macro"
+#~ msgstr "Il loop non può partire da dentro una macro"
+
+#~ msgid "Repeat cannot start inside of a macro (ignored)"
+#~ msgstr "Repeat non può partire da dentro una macro (ignorato)"
+
+#~ msgid "Ignoring name %s not in file\n"
+#~ msgstr "Ignorato il nome %s non è nel file\n"
+
+#~ msgid "cannot open input file %s"
+#~ msgstr "Non è possibile aprire il file di input %s"
+
+#, fuzzy
+#~ msgid "rtaudio: AuHAL module enabled\n"
+#~ msgstr "rtaudio: modulo ALSA abilitato\n"
+
+#~ msgid "No"
+#~ msgstr "No"
+
+#~ msgid "Yes"
+#~ msgstr "Si"
+
+#, fuzzy
 #~ msgid "csound_orcerror on line %d: %s\n"
 #~ msgstr "%s: errore: %s\n"
 
diff --git a/po/romanian.po b/po/romanian.po
index 4d249f5..a2186d2 100644
--- a/po/romanian.po
+++ b/po/romanian.po
@@ -32,22 +32,22 @@ msgstr ""
 msgid "auxlist for instr %d (%p):\n"
 msgstr ""
 
-#: Engine/auxfd.c:153
+#: Engine/auxfd.c:154
 #, c-format
 msgid "\tauxch at %p: size %ld, auxp %p, endp %p\n"
 msgstr ""
 
-#: Engine/auxfd.c:165
+#: Engine/auxfd.c:166
 #, c-format
 msgid "fdlist for instr %s [%d] (%p):"
 msgstr ""
 
-#: Engine/auxfd.c:168
+#: Engine/auxfd.c:169
 #, c-format
 msgid "fdlist for instr %d (%p):"
 msgstr ""
 
-#: Engine/auxfd.c:171
+#: Engine/auxfd.c:172
 #, c-format
 msgid "  fd %p in %p"
 msgstr ""
@@ -100,356 +100,316 @@ msgstr ""
 msgid "(unknown error)"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:214 Engine/rdorch.c:1832
+#: Engine/csound_orc_compile.c:138
+#, c-format
+msgid ""
+"input arg %d '%s' of type %s not allowed when expecting %c (for opcode %s), "
+"line %d\n"
+msgstr ""
+
+#: Engine/csound_orc_compile.c:265 Engine/rdorch.c:1862
 msgid "missing or extra arg"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:218
+#: Engine/csound_orc_compile.c:269
 msgid "too many input args\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:475
+#: Engine/csound_orc_compile.c:304
 #, c-format
-msgid "create_opcode: No rule to handle statement of type %d\n"
+msgid "input arg '%s' used before defined (in opcode %s), line %d\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:671
+#: Engine/csound_orc_compile.c:380
 #, c-format
-msgid "create_instrument: instr num %ld\n"
+msgid ""
+"output name previously used, type '%c' must be uniquely defined, line %d"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:681
+#: Engine/csound_orc_compile.c:386
 #, c-format
-msgid "create_instrument: instr name %s\n"
+msgid "output arg '%s' illegal type (for opcode %s), line %d\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:688 Engine/otran.c:351
-msgid "invalid name for instrument"
-msgstr ""
-
-#: Engine/csound_orc_compile.c:692 Engine/otran.c:356
+#: Engine/csound_orc_compile.c:541
 #, c-format
-msgid "instr %s redefined"
+msgid "create_opcode: No rule to handle statement of type %d\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:833 Engine/otran.c:145 Engine/symbtab.c:394
+#: Engine/csound_orc_compile.c:738
 #, c-format
-msgid "invalid input type for opcode %s"
+msgid "create_instrument: instr num %ld\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:838 Engine/otran.c:150 Engine/symbtab.c:399
+#: Engine/csound_orc_compile.c:748
 #, c-format
-msgid "too many input args for opcode %s"
+msgid "create_instrument: instr name %s\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:853 Engine/otran.c:165 Engine/symbtab.c:414
-#, c-format
-msgid "too many output args for opcode %s"
+#: Engine/csound_orc_compile.c:755 Engine/otran.c:364
+msgid "invalid name for instrument"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:869 Engine/otran.c:187 Engine/symbtab.c:433
+#: Engine/csound_orc_compile.c:759 Engine/otran.c:370
 #, c-format
-msgid "invalid output type for opcode %s"
+msgid "instr %s redefined"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:954 Engine/otran.c:339
+#: Engine/csound_orc_compile.c:903 Engine/otran.c:352
 #, c-format
 msgid "instr %ld redefined"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:964
+#: Engine/csound_orc_compile.c:914
 msgid "!!! csound->opcodeInfo is NULL !!!\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1111
+#: Engine/csound_orc_compile.c:1083
 #, c-format
 msgid "Unknown TREE node of type %d found in root.\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1168 Engine/otran.c:565 Engine/otran.c:1414
+#: Engine/csound_orc_compile.c:1140 Engine/otran.c:579 Engine/otran.c:1433
 #, c-format
 msgid "%s invalid sample rate"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1170 Engine/otran.c:567 Engine/otran.c:1416
+#: Engine/csound_orc_compile.c:1142 Engine/otran.c:581 Engine/otran.c:1435
 #, c-format
 msgid "%s invalid control rate"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1173 Engine/otran.c:570 Engine/otran.c:1412
+#: Engine/csound_orc_compile.c:1146 Engine/otran.c:584 Engine/otran.c:1431
 #, c-format
 msgid "%s invalid ksmps value"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1176 Engine/otran.c:572 Engine/otran.c:1418
+#: Engine/csound_orc_compile.c:1149 Engine/otran.c:587 Engine/otran.c:1437
 #, c-format
 msgid "%s inconsistent sr, kr, ksmps"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1190
+#: Engine/csound_orc_compile.c:1165
 msgid "perf-pass statements illegal in header blk\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1195
+#: Engine/csound_orc_compile.c:1170
 #, c-format
 msgid "%d syntax errors in orchestra.  compilation invalid\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1255 Engine/otran.c:656
+#: Engine/csound_orc_compile.c:1230 Engine/otran.c:671
 msgid "inconsistent argoff sumcount"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1327 Engine/otran.c:725
+#: Engine/csound_orc_compile.c:1302 Engine/otran.c:740
 #, c-format
 msgid "LABELS list is full...extending to %d\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1365 Engine/otran.c:763
+#: Engine/csound_orc_compile.c:1340 Engine/otran.c:778
 #, c-format
 msgid "GOTOS list is full..extending to %d\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1398 Engine/otran.c:796
+#: Engine/csound_orc_compile.c:1373 Engine/otran.c:811
 #, c-format
 msgid "target label '%s' not found"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1463 Engine/otran.c:851
+#: Engine/csound_orc_compile.c:1451 Engine/otran.c:866
 #, c-format
 msgid "string syntax '%s'"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1513 Engine/otran.c:901
+#: Engine/csound_orc_compile.c:1501 Engine/otran.c:916
 #, c-format
 msgid "numeric syntax '%s'"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1539 Engine/otran.c:927
+#: Engine/csound_orc_compile.c:1527 Engine/otran.c:942
 #, c-format
 msgid "extending Floating pool to %d\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1578 Engine/otran.c:999
+#: Engine/csound_orc_compile.c:1566 Engine/otran.c:1018
 msgid "gblnamset(): memory allocation failure"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1606 Engine/otran.c:1027
+#: Engine/csound_orc_compile.c:1594 Engine/otran.c:1046
 msgid "lclnamset(): memory allocation failure"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1632 Engine/otran.c:1052
+#: Engine/csound_orc_compile.c:1620 Engine/otran.c:1071
 msgid "unexpected global name"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1655 Engine/otran.c:1074
+#: Engine/csound_orc_compile.c:1643 Engine/otran.c:1093
 msgid "unknown nametype"
 msgstr ""
 
-#: Engine/csound_orc.l:239
+#: Engine/csound_orc_expressions.c:459
 #, c-format
-msgid "unterminated string found on line %d >>%s<<\n"
+msgid "error: function %s with arg type %c not found, line %d \n"
 msgstr ""
 
-#: Engine/csound_orc.l:259 Engine/csound_orc.l:286 Engine/csound_orc.l:314
-#: Engine/csound_orc.l:367 Engine/rdorch.c:901 Engine/sread.c:396
+#: Engine/csound_orc_expressions.c:862
 #, c-format
-msgid "Undefined macro: '%s'"
+msgid "error: non-existent statement in conditional, line %d \n"
 msgstr ""
 
-#: Engine/csound_orc.l:265 Engine/csound_orc.l:292
-msgid "Includes nested too deeply"
-msgstr ""
-
-#: Engine/csound_orc.l:335 Engine/csound_orc.l:388 Engine/rdorch.c:940
+#: Engine/csound_orc_semantics.c:157
 #, c-format
 msgid ""
-"Missing argument terminator\n"
-"%.98s"
-msgstr ""
-
-#: Engine/csound_orc.l:484
-#, c-format
-msgid "Line %d: Unknown character: '%c'(%2x)\n"
-msgstr ""
-
-#: Engine/csound_orc.l:527
-#, c-format
-msgid "Cannot open file \"%s\"\n"
-msgstr ""
-
-#: Engine/csound_orc.l:573 Engine/rdorch.c:689 Engine/sread.c:1595
-msgid "macro error\n"
-msgstr ""
-
-#: Engine/csound_orc.l:631 Engine/rdorch.c:845 Engine/sread.c:1686
-#, c-format
-msgid "macro %s undefined\n"
-msgstr ""
-
-#: Engine/csound_orc.l:645 Engine/rdorch.c:859 Engine/sread.c:294
-msgid "Undefining undefined macro"
-msgstr ""
-
-#: Engine/csound_orc.l:786 Engine/rdorch.c:413 Engine/sread.c:741
-#, c-format
-msgid "Macro definition for %*s\n"
-msgstr ""
-
-#: Engine/csound_orc.l:789 Engine/rdorch.c:416
-msgid "Invalid macro name for --omacro"
-msgstr ""
-
-#: Engine/csound_orc.y:270
-msgid "No number following instr\n"
+"\n"
+"error: %s  (token \"%s\")"
 msgstr ""
 
-#: Engine/csound_orc_semantics.c:127
+#: Engine/csound_orc_semantics.c:159
 #, c-format
-msgid "error: %s (token \"%s\")"
+msgid ""
+" line %d:\n"
+">>>"
 msgstr ""
 
-#: Engine/csound_orc_semantics.c:129
+#: Engine/csound_orc_semantics.c:732
 #, c-format
-msgid " line %d: %s"
+msgid "insufficient required arguments for opcode %s on line %d\n"
 msgstr ""
 
-#: Engine/csound_orc_semantics.c:702 Engine/rdorch.c:1863
-msgid "insufficient required arguments"
-msgstr ""
-
-#: Engine/csound_orc_semantics.c:768 Engine/rdorch.c:1617 Engine/rdorch.c:1635
-#: Engine/rdorch.c:1676 Engine/rdorch.c:1811 Engine/rdorch.c:1980
+#: Engine/csound_orc_semantics.c:797 Engine/rdorch.c:1644 Engine/rdorch.c:1662
+#: Engine/rdorch.c:1703 Engine/rdorch.c:1841 Engine/rdorch.c:2011
 #, c-format
 msgid "modified opcod: %s"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:113 Engine/cs_par_dispatch.c:125
+#: Engine/cs_par_dispatch.c:115 Engine/cs_par_dispatch.c:128
 #, c-format
 msgid "Poorly specified global lock index: %i [max: %i]\n"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:138 Engine/cs_par_dispatch.c:157
+#: Engine/cs_par_dispatch.c:142 Engine/cs_par_dispatch.c:162
 msgid "Invalid NULL parameter name for a global variable\n"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:505 Engine/cs_par_dispatch.c:528
-#: Engine/cs_par_dispatch.c:2463 Engine/cs_par_dispatch.c:2507
-#: Engine/cs_par_dispatch.c:2509 Engine/cs_par_dispatch.c:2570
+#: Engine/cs_par_dispatch.c:526 Engine/cs_par_dispatch.c:553
+#: Engine/cs_par_dispatch.c:2543 Engine/cs_par_dispatch.c:2588
+#: Engine/cs_par_dispatch.c:2590 Engine/cs_par_dispatch.c:2654
 msgid "Invalid NULL Parameter entry"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:507 Engine/cs_par_dispatch.c:541
-#: Engine/cs_par_dispatch.c:566 Engine/cs_par_dispatch.c:605
+#: Engine/cs_par_dispatch.c:528 Engine/cs_par_dispatch.c:567
+#: Engine/cs_par_dispatch.c:594 Engine/cs_par_dispatch.c:635
 msgid "Invalid NULL Parameter name"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:512
+#: Engine/cs_par_dispatch.c:535
 msgid "Failed to allocate Opcode Weight cache entry"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:632 Engine/cs_par_dispatch.c:718
+#: Engine/cs_par_dispatch.c:664 Engine/cs_par_dispatch.c:755
 msgid "No Weights to Dump (Using Defaults)\n"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:670 Engine/cs_par_dispatch.c:794
+#: Engine/cs_par_dispatch.c:705 Engine/cs_par_dispatch.c:835
 #, c-format
 msgid "Opcode Weight Spec File not found at: %s"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:722
+#: Engine/cs_par_dispatch.c:759
 msgid "Weights Dump\n"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:866
+#: Engine/cs_par_dispatch.c:907
 #, c-format
 msgid "Parallel Spec File not found at: %s"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:872
+#: Engine/cs_par_dispatch.c:913
 msgid "Parallel Spec File invalid format expected weight_min parameter"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:877
+#: Engine/cs_par_dispatch.c:918
 msgid "Parallel Spec File invalid format expected weight_max parameter"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:881
+#: Engine/cs_par_dispatch.c:922
 msgid "Parallel Spec File invalid format expected roots_avail_min parameter"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:885
+#: Engine/cs_par_dispatch.c:926
 msgid "Parallel Spec File invalid format expected roots_avail_max parameter"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:961 Engine/cs_par_dispatch.c:985
-#: Engine/cs_par_dispatch.c:1109 Engine/cs_par_dispatch.c:1195
-#: Engine/cs_par_dispatch.c:1332 Engine/cs_par_dispatch.c:1366
-#: Engine/cs_par_dispatch.c:1383 Engine/cs_par_dispatch.c:1405
-#: Engine/cs_par_dispatch.c:1432 Engine/cs_par_dispatch.c:1452
-#: Engine/cs_par_dispatch.c:1476 Engine/cs_par_dispatch.c:1566
-#: Engine/cs_par_dispatch.c:1621 Engine/cs_par_dispatch.c:1714
-#: Engine/cs_par_dispatch.c:1769 Engine/cs_par_dispatch.c:2597
+#: Engine/cs_par_dispatch.c:1003 Engine/cs_par_dispatch.c:1027
+#: Engine/cs_par_dispatch.c:1155 Engine/cs_par_dispatch.c:1251
+#: Engine/cs_par_dispatch.c:1405 Engine/cs_par_dispatch.c:1439
+#: Engine/cs_par_dispatch.c:1456 Engine/cs_par_dispatch.c:1478
+#: Engine/cs_par_dispatch.c:1506 Engine/cs_par_dispatch.c:1528
+#: Engine/cs_par_dispatch.c:1552 Engine/cs_par_dispatch.c:1644
+#: Engine/cs_par_dispatch.c:1699 Engine/cs_par_dispatch.c:1792
+#: Engine/cs_par_dispatch.c:1847 Engine/cs_par_dispatch.c:2681
 msgid "Invalid NULL Parameter dag"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:966
+#: Engine/cs_par_dispatch.c:1008
 msgid "Failed to allocate dag"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1017 Engine/cs_par_dispatch.c:1040
-#: Engine/cs_par_dispatch.c:1062 Engine/cs_par_dispatch.c:1064
+#: Engine/cs_par_dispatch.c:1060 Engine/cs_par_dispatch.c:1083
+#: Engine/cs_par_dispatch.c:1105 Engine/cs_par_dispatch.c:1107
 msgid "Invalid NULL Parameter dag_node"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1019
+#: Engine/cs_par_dispatch.c:1062
 msgid "Invalid NULL Parameter instr"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1021
+#: Engine/cs_par_dispatch.c:1064
 msgid "Invalid NULL Parameter insds"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1026 Engine/cs_par_dispatch.c:1048
+#: Engine/cs_par_dispatch.c:1069 Engine/cs_par_dispatch.c:1091
 msgid "Failed to allocate dag_node"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1043
+#: Engine/cs_par_dispatch.c:1086
 msgid "Invalid Parameter count must be greater than 0"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1175 Engine/cs_par_dispatch.c:1433
-#: Engine/cs_par_dispatch.c:2465 Engine/cs_par_dispatch.c:2571
-#: Engine/cs_par_dispatch.c:2598
+#: Engine/cs_par_dispatch.c:1229 Engine/cs_par_dispatch.c:1508
+#: Engine/cs_par_dispatch.c:2545 Engine/cs_par_dispatch.c:2655
+#: Engine/cs_par_dispatch.c:2682
 msgid "Invalid NULL Parameter chain"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1183
+#: Engine/cs_par_dispatch.c:1237
 #, c-format
 msgid "Failed to find semantic information for instrument '%i'"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1478
+#: Engine/cs_par_dispatch.c:1554
 msgid "Invalid NULL Parameter node"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1480
+#: Engine/cs_par_dispatch.c:1556
 msgid "Invalid NULL Parameter update_hdl"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1569
+#: Engine/cs_par_dispatch.c:1647
 msgid "Invalid Parameter update_hdl is outside the DAG range"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:2417
+#: Engine/cs_par_dispatch.c:2497
 #, c-format
 msgid "Parallel Dump File not found at: %s for writing"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:2477
+#: Engine/cs_par_dispatch.c:2557
 msgid "Failed to allocate Dag2 cache entry"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:2527
+#: Engine/cs_par_dispatch.c:2610
 msgid "Cache Update\n"
 msgstr ""
 
@@ -463,12 +423,12 @@ msgstr ""
 msgid "Creating search path cache for '%s':"
 msgstr ""
 
-#: Engine/envvar.c:1082
+#: Engine/envvar.c:1083
 #, c-format
 msgid "internal error: csoundFileOpen(): invalid type: %d"
 msgstr ""
 
-#: Engine/envvar.c:1264
+#: Engine/envvar.c:1266
 #, c-format
 msgid "internal error: csoundCreateFileHandle(): invalid type: %d"
 msgstr ""
@@ -526,345 +486,346 @@ msgstr ""
 msgid "expression syntax"
 msgstr ""
 
-#: Engine/fgens.c:95
+#: Engine/fgens.c:91
 msgid "unknown GEN number"
 msgstr ""
 
-#: Engine/fgens.c:137
+#: Engine/fgens.c:133
 msgid "ftable does not exist"
 msgstr ""
 
-#: Engine/fgens.c:142
+#: Engine/fgens.c:138
 #, c-format
 msgid "ftable %d now deleted\n"
 msgstr ""
 
-#: Engine/fgens.c:157 Engine/fgens.c:1597 Engine/fgens.c:1683
-#: Engine/fgens.c:1762 Engine/fgens.c:1878 Engine/fgens.c:1959
-#: Engine/fgens.c:2867
+#: Engine/fgens.c:153 Engine/fgens.c:1593 Engine/fgens.c:1679
+#: Engine/fgens.c:1758 Engine/fgens.c:1874 Engine/fgens.c:1955
+#: Engine/fgens.c:2909
 msgid "insufficient gen arguments"
 msgstr ""
 
-#: Engine/fgens.c:183 Opcodes/ftgen.c:116
+#: Engine/fgens.c:179 Opcodes/ftgen.c:116
 #, c-format
 msgid "Named gen \"%s\" not defined"
 msgstr ""
 
-#: Engine/fgens.c:190
+#: Engine/fgens.c:186
 msgid "illegal gen number"
 msgstr ""
 
-#: Engine/fgens.c:198
-msgid "deferred size for GENs 1, 23 or 28 only"
+#: Engine/fgens.c:194
+msgid "deferred size for GENs 1, 23, 28 or 49 only"
 msgstr ""
 
-#: Engine/fgens.c:201 Engine/fgens.c:249
+#: Engine/fgens.c:197 Engine/fgens.c:245
 #, c-format
 msgid "ftable %d:\n"
 msgstr ""
 
-#: Engine/fgens.c:226 Engine/fgens.c:233
+#: Engine/fgens.c:222 Engine/fgens.c:229
 msgid "illegal table length"
 msgstr ""
 
-#: Engine/fgens.c:292 Engine/fgens.c:2219
+#: Engine/fgens.c:288 Engine/fgens.c:2215
 #, c-format
 msgid ""
 "ftable %d relocating due to size change\n"
 "         currently active instruments may find this disturbing"
 msgstr ""
 
-#: Engine/fgens.c:350 Engine/fgens.c:471 Engine/fgens.c:555 Engine/fgens.c:636
-#: Engine/fgens.c:711 Engine/fgens.c:760 Engine/fgens.c:881 Engine/fgens.c:958
-#: Engine/fgens.c:1053 Engine/fgens.c:1097 Engine/fgens.c:1144
-#: Engine/fgens.c:1397 Engine/fgens.c:1459 Engine/fgens.c:1681
-#: Engine/fgens.c:1759 Engine/fgens.c:2114 Engine/fgens.c:2821
-#: Engine/fgens.c:2864
+#: Engine/fgens.c:346 Engine/fgens.c:467 Engine/fgens.c:551 Engine/fgens.c:632
+#: Engine/fgens.c:707 Engine/fgens.c:756 Engine/fgens.c:877 Engine/fgens.c:954
+#: Engine/fgens.c:1049 Engine/fgens.c:1093 Engine/fgens.c:1140
+#: Engine/fgens.c:1393 Engine/fgens.c:1455 Engine/fgens.c:1677
+#: Engine/fgens.c:1755 Engine/fgens.c:2110 Engine/fgens.c:2863
+#: Engine/fgens.c:2906
 msgid "using extended arguments\n"
 msgstr ""
 
-#: Engine/fgens.c:374
+#: Engine/fgens.c:370
 msgid "no coefs present"
 msgstr ""
 
-#: Engine/fgens.c:379 Engine/fgens.c:645 Engine/fgens.c:653
+#: Engine/fgens.c:375 Engine/fgens.c:641 Engine/fgens.c:649
 msgid "illegal x interval"
 msgstr ""
 
-#: Engine/fgens.c:408 Engine/fgens.c:557 Engine/fgens.c:638 Engine/fgens.c:883
-#: Engine/fgens.c:1354 Engine/fgens.c:2378 Engine/fgens.c:2694 Top/main.c:142
-#: util/cvanal.c:66 util/lpanal.c:398 util/pvanal.c:170
+#: Engine/fgens.c:404 Engine/fgens.c:553 Engine/fgens.c:634 Engine/fgens.c:879
+#: Engine/fgens.c:1350 Engine/fgens.c:2375 Engine/fgens.c:2690
+#: Engine/fgens.c:2810 Top/main.c:141 util/cvanal.c:66 util/lpanal.c:398
+#: util/pvanal.c:170
 msgid "insufficient arguments"
 msgstr ""
 
-#: Engine/fgens.c:412 Engine/fgens.c:1359
+#: Engine/fgens.c:408 Engine/fgens.c:1355
 msgid "unknown srctable number"
 msgstr ""
 
-#: Engine/fgens.c:425
+#: Engine/fgens.c:421
 msgid "table size too large"
 msgstr ""
 
-#: Engine/fgens.c:510 Engine/fgens.c:543
+#: Engine/fgens.c:506 Engine/fgens.c:539
 msgid "gen call has negative segment size:"
 msgstr ""
 
-#: Engine/fgens.c:512
+#: Engine/fgens.c:508
 msgid "illegal input vals for gen call, beginning:"
 msgstr ""
 
-#: Engine/fgens.c:578
+#: Engine/fgens.c:574
 msgid "negative segsiz"
 msgstr ""
 
-#: Engine/fgens.c:787
+#: Engine/fgens.c:783
 msgid "nh partials < 1"
 msgstr ""
 
-#: Engine/fgens.c:886
+#: Engine/fgens.c:882
 msgid "illegal xint value"
 msgstr ""
 
-#: Engine/fgens.c:889
+#: Engine/fgens.c:885
 msgid "illegal xamp value"
 msgstr ""
 
-#: Engine/fgens.c:961
+#: Engine/fgens.c:957
 msgid "uneven number of args"
 msgstr ""
 
-#: Engine/fgens.c:1081
+#: Engine/fgens.c:1077
 msgid "gen call has illegal x-ordinate values:"
 msgstr ""
 
-#: Engine/fgens.c:1099
+#: Engine/fgens.c:1095
 msgid "wrong number of args"
 msgstr ""
 
-#: Engine/fgens.c:1113
+#: Engine/fgens.c:1109
 msgid "a range given exceeds table length"
 msgstr ""
 
-#: Engine/fgens.c:1120
+#: Engine/fgens.c:1116
 msgid "an input function does not exist"
 msgstr ""
 
-#: Engine/fgens.c:1253
+#: Engine/fgens.c:1249
 msgid "No such window!"
 msgstr ""
 
-#: Engine/fgens.c:1271
+#: Engine/fgens.c:1267
 msgid "Wrong number of input arguments"
 msgstr ""
 
-#: Engine/fgens.c:1272
+#: Engine/fgens.c:1268
 msgid "unknown distribution"
 msgstr ""
 
-#: Engine/fgens.c:1321
+#: Engine/fgens.c:1317
 msgid "error opening ASCII file"
 msgstr ""
 
-#: Engine/fgens.c:1327
+#: Engine/fgens.c:1323
 #, c-format
 msgid "%ld elements in %s\n"
 msgstr ""
 
-#: Engine/fgens.c:1338
+#: Engine/fgens.c:1334
 msgid "Numbers after table full in GEN23"
 msgstr ""
 
-#: Engine/fgens.c:1367
+#: Engine/fgens.c:1363
 msgid "table size must be the same of source table"
 msgstr ""
 
-#: Engine/fgens.c:1439 Engine/fgens.c:1499
+#: Engine/fgens.c:1435 Engine/fgens.c:1495
 msgid "x coordinates must all be in increasing order:"
 msgstr ""
 
-#: Engine/fgens.c:1442 Engine/fgens.c:1501
+#: Engine/fgens.c:1438 Engine/fgens.c:1497
 msgid "x coordinate greater than function size:"
 msgstr ""
 
-#: Engine/fgens.c:1446
+#: Engine/fgens.c:1442
 msgid "illegal input val (y <= 0) for gen call, beginning:"
 msgstr ""
 
-#: Engine/fgens.c:1519
+#: Engine/fgens.c:1515
 msgid "GEN28 requires zero table length"
 msgstr ""
 
-#: Engine/fgens.c:1581
+#: Engine/fgens.c:1577
 msgid "could not open space file"
 msgstr ""
 
-#: Engine/fgens.c:1583
+#: Engine/fgens.c:1579
 msgid "Time values must be in increasing order"
 msgstr ""
 
-#: Engine/fgens.c:1604
+#: Engine/fgens.c:1600
 msgid "GEN30: source ftable not found"
 msgstr ""
 
-#: Engine/fgens.c:1687
+#: Engine/fgens.c:1683
 msgid "GEN31: source ftable not found"
 msgstr ""
 
-#: Engine/fgens.c:1795
+#: Engine/fgens.c:1791
 #, c-format
 msgid "GEN32: source ftable %d not found"
 msgstr ""
 
-#: Engine/fgens.c:1889
+#: Engine/fgens.c:1885
 msgid "GEN33: source ftable not found"
 msgstr ""
 
-#: Engine/fgens.c:2057
+#: Engine/fgens.c:2053
 msgid "unknown source table number"
 msgstr ""
 
-#: Engine/fgens.c:2089
+#: Engine/fgens.c:2085
 msgid "Gen41: negative probability not allowed"
 msgstr ""
 
-#: Engine/fgens.c:2155 Opcodes/fareygen.c:70
+#: Engine/fgens.c:2151 Opcodes/fareygen.c:70
 #, c-format
 msgid "ftable %d: "
 msgstr ""
 
-#: Engine/fgens.c:2199
+#: Engine/fgens.c:2195
 #, c-format
 msgid "ftable %d:"
 msgstr ""
 
-#: Engine/fgens.c:2214
+#: Engine/fgens.c:2210
 #, c-format
 msgid "replacing previous ftable %d"
 msgstr ""
 
-#: Engine/fgens.c:2250 Engine/fgens.c:2337 Engine/fgens.c:2361
-#: Opcodes/gab/gab.c:578 Opcodes/gab/gab.c:632 Opcodes/midiops2.c:218
+#: Engine/fgens.c:2246 Engine/fgens.c:2334 Engine/fgens.c:2358
+#: Opcodes/gab/gab.c:580 Opcodes/gab/gab.c:634 Opcodes/midiops2.c:218
 #: Opcodes/midiops2.c:370 Opcodes/midiops2.c:452 Opcodes/uggab.c:1317
 #: Opcodes/uggab.c:1344 Opcodes/uggab.c:1364 Opcodes/uggab.c:1407
 #, c-format
 msgid "Invalid ftable no. %f"
 msgstr ""
 
-#: Engine/fgens.c:2255
+#: Engine/fgens.c:2251
 #, c-format
 msgid "deferred-size ftable %f illegal here"
 msgstr ""
 
-#: Engine/fgens.c:2281
+#: Engine/fgens.c:2278 Engine/fgens.c:2848
 #, c-format
 msgid "Deferred load of '%s' failed"
 msgstr ""
 
-#: Engine/fgens.c:2343
+#: Engine/fgens.c:2340
 #, c-format
 msgid "Deferred-size ftable %f load not available at perf time."
 msgstr ""
 
-#: Engine/fgens.c:2402
+#: Engine/fgens.c:2399
 #, c-format
 msgid "non-deferred ftable %d needs size %d\n"
 msgstr ""
 
-#: Engine/fgens.c:2449 Opcodes/loscilx.c:62
+#: Engine/fgens.c:2446 Opcodes/loscilx.c:64
 #, c-format
 msgid "invalid sample format: %d"
 msgstr ""
 
-#: Engine/fgens.c:2457 Engine/fgens.c:2718
+#: Engine/fgens.c:2454 Engine/fgens.c:2714
 #, c-format
 msgid "channel %d illegal"
 msgstr ""
 
-#: Engine/fgens.c:2463
+#: Engine/fgens.c:2460
 msgid "deferred alloc\n"
 msgstr ""
 
-#: Engine/fgens.c:2471
+#: Engine/fgens.c:2468
 msgid "deferred size, but filesize unknown"
 msgstr ""
 
-#: Engine/fgens.c:2474
+#: Engine/fgens.c:2471
 #, c-format
 msgid "  defer length %d\n"
 msgstr ""
 
-#: Engine/fgens.c:2543
+#: Engine/fgens.c:2540
 msgid "GEN1: input file truncated by ftable size"
 msgstr ""
 
-#: Engine/fgens.c:2547
+#: Engine/fgens.c:2544
 #, c-format
 msgid "\tlooping endpoint %d exceeds ftsize %d\n"
 msgstr ""
 
-#: Engine/fgens.c:2569
+#: Engine/fgens.c:2566
 msgid "GEN1 read error"
 msgstr ""
 
-#: Engine/fgens.c:2574
+#: Engine/fgens.c:2571
 msgid "GEN1: aiff file truncated by ftable size"
 msgstr ""
 
-#: Engine/fgens.c:2575
+#: Engine/fgens.c:2572
 #, c-format
 msgid "\taudio samps %d exceeds ftsize %d"
 msgstr ""
 
-#: Engine/fgens.c:2619
+#: Engine/fgens.c:2616
 msgid "wrong number of ftable arguments"
 msgstr ""
 
-#: Engine/fgens.c:2629 OOps/pstream.c:326
+#: Engine/fgens.c:2626 OOps/pstream.c:326
 msgid "Failed to load PVOC-EX file"
 msgstr ""
 
-#: Engine/fgens.c:2640 InOut/midirecv.c:416 OOps/midiops.c:377
+#: Engine/fgens.c:2637 InOut/midirecv.c:416 OOps/midiops.c:377
 #: OOps/midiops.c:419 OOps/midiops.c:431
 msgid "illegal channel number"
 msgstr ""
 
-#: Engine/fgens.c:2658
+#: Engine/fgens.c:2655
 msgid "ftable size too small"
 msgstr ""
 
-#: Engine/fgens.c:2734 Opcodes/mp3in.c:79 Opcodes/mp3in.c:218
+#: Engine/fgens.c:2730 Opcodes/mp3in.c:80 Opcodes/mp3in.c:219
 msgid "Not enough memory\n"
 msgstr ""
 
-#: Engine/fgens.c:2831
+#: Engine/fgens.c:2873
 msgid "gen51: invalid number of p-fields (too few grades)"
 msgstr ""
 
-#: Engine/fgens.c:2871
+#: Engine/fgens.c:2913
 msgid "number of channels inconsistent with number of args"
 msgstr ""
 
-#: Engine/fgens.c:3030
+#: Engine/fgens.c:3072
 msgid "GEN53: invalid number of gen arguments"
 msgstr ""
 
-#: Engine/fgens.c:3040
+#: Engine/fgens.c:3082
 msgid "GEN53: invalid table length"
 msgstr ""
 
-#: Engine/fgens.c:3044
+#: Engine/fgens.c:3086
 msgid "GEN53: invalid source table number"
 msgstr ""
 
-#: Engine/fgens.c:3047
+#: Engine/fgens.c:3089
 msgid "GEN53: mode must be in the range 0 to 15"
 msgstr ""
 
-#: Engine/fgens.c:3051
+#: Engine/fgens.c:3093
 msgid "GEN53: invalid source table length"
 msgstr ""
 
-#: Engine/fgens.c:3056
+#: Engine/fgens.c:3098
 msgid "GEN53: invalid window table"
 msgstr ""
 
@@ -888,31 +849,31 @@ msgstr ""
 msgid "Instrument %d muted\n"
 msgstr ""
 
-#: Engine/insert.c:103 Engine/insert.c:1249
+#: Engine/insert.c:103 Engine/insert.c:1301
 #, c-format
 msgid "instr %s expects midi event data, cannot run from score\n"
 msgstr ""
 
-#: Engine/insert.c:106 Engine/insert.c:1252
+#: Engine/insert.c:106 Engine/insert.c:1304
 #, c-format
 msgid "instr %d expects midi event data, cannot run from score\n"
 msgstr ""
 
-#: Engine/insert.c:115 Engine/insert.c:279 Engine/insert.c:1234
+#: Engine/insert.c:115 Engine/insert.c:279 Engine/insert.c:1286
 #, c-format
 msgid "cannot allocate last note because it exceeds 100%% of cpu time"
 msgstr ""
 
-#: Engine/insert.c:121 Engine/insert.c:285 Engine/insert.c:1239
+#: Engine/insert.c:121 Engine/insert.c:285 Engine/insert.c:1291
 msgid "cannot allocate last note because it exceeds instr maxalloc"
 msgstr ""
 
-#: Engine/insert.c:137 Engine/insert.c:305 Engine/insert.c:1270
+#: Engine/insert.c:137 Engine/insert.c:305 Engine/insert.c:1322
 #, c-format
 msgid "new alloc for instr %s:\n"
 msgstr ""
 
-#: Engine/insert.c:139 Engine/insert.c:307 Engine/insert.c:1272
+#: Engine/insert.c:139 Engine/insert.c:307 Engine/insert.c:1324
 #, c-format
 msgid "new alloc for instr %d:\n"
 msgstr ""
@@ -927,12 +888,12 @@ msgstr ""
 msgid "instr %d uses %d p-fields but is given %d"
 msgstr ""
 
-#: Engine/insert.c:251 Engine/insert.c:463
+#: Engine/insert.c:251 Engine/insert.c:482
 #, c-format
 msgid "instr %s now active:\n"
 msgstr ""
 
-#: Engine/insert.c:253 Engine/insert.c:465
+#: Engine/insert.c:253 Engine/insert.c:484
 #, c-format
 msgid "instr %d now active:\n"
 msgstr ""
@@ -952,153 +913,153 @@ msgstr ""
 msgid "MIDI note overlaps with key %d on same channel"
 msgstr ""
 
-#: Engine/insert.c:566
+#: Engine/insert.c:585
 #, c-format
 msgid "removed instance of instr %s\n"
 msgstr ""
 
-#: Engine/insert.c:568
+#: Engine/insert.c:587
 #, c-format
 msgid "removed instance of instr %d\n"
 msgstr ""
 
-#: Engine/insert.c:691
+#: Engine/insert.c:710
 msgid "inactive allocs returned to freespace\n"
 msgstr ""
 
-#: Engine/insert.c:716
+#: Engine/insert.c:735
 #, c-format
 msgid "could not find playing instr %f\n"
 msgstr ""
 
-#: Engine/insert.c:729
+#: Engine/insert.c:748
 msgid ""
 "\n"
 "INIT ERROR: "
 msgstr ""
 
-#: Engine/insert.c:742
+#: Engine/insert.c:761
 #, c-format
 msgid "INIT ERROR in instr %d (opcode %s): "
 msgstr ""
 
-#: Engine/insert.c:745
+#: Engine/insert.c:764
 #, c-format
 msgid "INIT ERROR in instr %d (subinstr %d): "
 msgstr ""
 
-#: Engine/insert.c:749
+#: Engine/insert.c:768
 #, c-format
 msgid "INIT ERROR in instr %d: "
 msgstr ""
 
-#: Engine/insert.c:767
+#: Engine/insert.c:786
 msgid ""
 "\n"
 "PERF ERROR: "
 msgstr ""
 
-#: Engine/insert.c:780
+#: Engine/insert.c:799
 #, c-format
 msgid "PERF ERROR in instr %d (opcode %s): "
 msgstr ""
 
-#: Engine/insert.c:783
+#: Engine/insert.c:802
 #, c-format
 msgid "PERF ERROR in instr %d (subinstr %d): "
 msgstr ""
 
-#: Engine/insert.c:787
+#: Engine/insert.c:806
 #, c-format
 msgid "PERF ERROR in instr %d: "
 msgstr ""
 
-#: Engine/insert.c:792
+#: Engine/insert.c:811
 msgid "   note aborted\n"
 msgstr ""
 
-#: Engine/insert.c:820
+#: Engine/insert.c:839
 msgid "subinstr: number of output args greater than nchnls"
 msgstr ""
 
-#: Engine/insert.c:861
+#: Engine/insert.c:880
 msgid "subinstr: too many p-fields"
 msgstr ""
 
-#: Engine/insert.c:920
+#: Engine/insert.c:939
 #, c-format
 msgid "%s: invalid local ksmps value: %d"
 msgstr ""
 
-#: Engine/insert.c:1040 OOps/bus.c:835 Opcodes/stackops.c:293
+#: Engine/insert.c:1062 OOps/bus.c:835 Opcodes/stackops.c:286
 #, c-format
 msgid "%s: not initialised"
 msgstr ""
 
-#: Engine/insert.c:1169
+#: Engine/insert.c:1221
 #, c-format
 msgid "setksmps: invalid ksmps value: %d"
 msgstr ""
 
-#: Engine/insert.c:1225
+#: Engine/insert.c:1277
 #, c-format
 msgid "schedule event ignored. instr %d undefined\n"
 msgstr ""
 
-#: Engine/insert.c:1303
+#: Engine/insert.c:1355
 #, c-format
 msgid "instr %s pmax = %d, note pcnt = %d"
 msgstr ""
 
-#: Engine/insert.c:1306
+#: Engine/insert.c:1358
 #, c-format
 msgid "instr %d pmax = %d, note pcnt = %d"
 msgstr ""
 
-#: Engine/insert.c:1314
+#: Engine/insert.c:1366
 #, c-format
 msgid "psave beg at %p\n"
 msgstr ""
 
-#: Engine/insert.c:1322
+#: Engine/insert.c:1374
 #, c-format
 msgid "   ending at %p\n"
 msgstr ""
 
-#: Engine/insert.c:1466
+#: Engine/insert.c:1518
 msgid "subinstr: not initialised"
 msgstr ""
 
-#: Engine/insert.c:1723
+#: Engine/insert.c:1855
 #, c-format
 msgid ""
 "instr %d allocated at %p\n"
 "\tlclbas %p, opds %p\n"
 msgstr ""
 
-#: Engine/insert.c:1740
+#: Engine/insert.c:1872
 #, c-format
 msgid "op %d (%s) allocated at %p\n"
 msgstr ""
 
-#: Engine/insert.c:1766
+#: Engine/insert.c:1898
 msgid "null iopadr"
 msgstr ""
 
-#: Engine/insert.c:1777
+#: Engine/insert.c:1909
 msgid "null opadr"
 msgstr ""
 
-#: Engine/insert.c:1834
+#: Engine/insert.c:1966
 msgid "inconsistent opds total"
 msgstr ""
 
-#: Engine/insert.c:1879
+#: Engine/insert.c:2011
 #, c-format
 msgid "Instrument %s is still active"
 msgstr ""
 
-#: Engine/insert.c:1882
+#: Engine/insert.c:2014
 #, c-format
 msgid "Instrument %d is still active"
 msgstr ""
@@ -1132,7 +1093,7 @@ msgstr ""
 msgid "multiple string p-fields"
 msgstr ""
 
-#: Engine/linevent.c:273 Engine/rdorch.c:1157
+#: Engine/linevent.c:273 Engine/rdorch.c:1184
 msgid "unmatched quotes"
 msgstr ""
 
@@ -1191,297 +1152,292 @@ msgstr ""
 msgid "memory allocate failure for %lu"
 msgstr ""
 
-#: Engine/memfiles.c:112
+#: Engine/memfiles.c:113
 #, c-format
 msgid "cannot load %s\n"
 msgstr ""
 
-#: Engine/memfiles.c:118
+#: Engine/memfiles.c:119
 #, c-format
 msgid "cannot load %s, or SADIR undefined\n"
 msgstr ""
 
-#: Engine/memfiles.c:130
+#: Engine/memfiles.c:131
 #, c-format
 msgid "error processing file %s\n"
 msgstr ""
 
-#: Engine/memfiles.c:136 Engine/memfiles.c:319
+#: Engine/memfiles.c:137 Engine/memfiles.c:320
 #, c-format
 msgid "file %s (%ld bytes) loaded into memory\n"
 msgstr ""
 
-#: Engine/memfiles.c:199
+#: Engine/memfiles.c:200
 msgid ""
 "PVOCEX_LoadFile(): error:\n"
 "    "
 msgstr ""
 
-#: Engine/memfiles.c:216
+#: Engine/memfiles.c:217
 msgid "Empty or NULL file name"
 msgstr ""
 
-#: Engine/memfiles.c:234
+#: Engine/memfiles.c:235
 #, c-format
 msgid "unable to open pvocex file %s: %s"
 msgstr ""
 
-#: Engine/memfiles.c:240
+#: Engine/memfiles.c:241
 #, c-format
 msgid "pvoc-ex file %s is not 32bit floats"
 msgstr ""
 
-#: Engine/memfiles.c:246
+#: Engine/memfiles.c:247
 #, c-format
 msgid "pvoc-ex file %s not in AMP_FREQ format"
 msgstr ""
 
-#: Engine/memfiles.c:252
+#: Engine/memfiles.c:253
 #, c-format
 msgid "pvoc-ex file %s is empty!"
 msgstr ""
 
-#: Engine/memfiles.c:282
+#: Engine/memfiles.c:283
 #, c-format
 msgid "error reading pvoc-ex file %s"
 msgstr ""
 
-#: Engine/memfiles.c:286
+#: Engine/memfiles.c:287
 #, c-format
 msgid "error reading pvoc-ex file %s after %d frames"
 msgstr ""
 
-#: Engine/memfiles.c:291 Opcodes/pvinterp.c:71 Opcodes/pvinterp.c:174
-#: Opcodes/pvinterp.c:346 Opcodes/ugens9.c:97 Opcodes/vpvoc.c:201
+#: Engine/memfiles.c:292 Opcodes/pvinterp.c:71 Opcodes/pvinterp.c:173
+#: Opcodes/pvinterp.c:344 Opcodes/ugens9.c:97 Opcodes/vpvoc.c:202
 #, c-format
 msgid "%s's srate = %8.0f, orch's srate = %8.0f"
 msgstr ""
 
-#: Engine/memfiles.c:389
+#: Engine/memfiles.c:390
 #, c-format
 msgid "csoundLoadSoundFile(): failed to open '%s'"
 msgstr ""
 
-#: Engine/memfiles.c:444
+#: Engine/memfiles.c:445
 #, c-format
 msgid "csoundLoadSoundFile(): error reading '%s'"
 msgstr ""
 
-#: Engine/memfiles.c:450
+#: Engine/memfiles.c:451
 #, c-format
 msgid ""
 "File '%s' (sr = %d Hz, %d channel(s), %lu sample frames) loaded into memory\n"
 msgstr ""
 
-#: Engine/musmon.c:79
+#: Engine/musmon.c:81
 #, c-format
 msgid "Elapsed time at %s: real: %.3fs, CPU: %.3fs\n"
 msgstr ""
 
-#: Engine/musmon.c:106
+#: Engine/musmon.c:108
 msgid "illegal istartempo value"
 msgstr ""
 
-#: Engine/musmon.c:109
+#: Engine/musmon.c:111
 msgid "Beat mode not in force"
 msgstr ""
 
-#: Engine/musmon.c:182 Top/main.c:122
+#: Engine/musmon.c:184 Top/main.c:121
 #, c-format
 msgid "Csound version %s beta (double samples) %s\n"
 msgstr ""
 
-#: Engine/musmon.c:185 Top/main.c:125
+#: Engine/musmon.c:187 Top/main.c:124
 #, c-format
 msgid "Csound version %s (double samples) %s\n"
 msgstr ""
 
-#: Engine/musmon.c:190 Top/main.c:114
+#: Engine/musmon.c:192 Top/main.c:113
 #, c-format
 msgid "Csound version %s beta (float samples) %s\n"
 msgstr ""
 
-#: Engine/musmon.c:193 Top/main.c:117
+#: Engine/musmon.c:195 Top/main.c:116
 #, c-format
 msgid "Csound version %s (float samples) %s\n"
 msgstr ""
 
-#: Engine/musmon.c:218
+#: Engine/musmon.c:220
 msgid "orch now loaded\n"
 msgstr ""
 
-#: Engine/musmon.c:243
+#: Engine/musmon.c:245
 msgid "k-period aligned audio buffering\n"
 msgstr ""
 
-#: Engine/musmon.c:259
+#: Engine/musmon.c:261
 #, c-format
 msgid "audio buffered in %d sample-frame blocks\n"
 msgstr ""
 
-#: Engine/musmon.c:276 Top/main.c:395
-#, c-format
-msgid "cannot reopen %s"
-msgstr ""
-
-#: Engine/musmon.c:287
+#: Engine/musmon.c:283
 msgid "using Cscore processing\n"
 msgstr ""
 
-#: Engine/musmon.c:290
+#: Engine/musmon.c:286
 msgid "cannot create cscore.out"
 msgstr ""
 
-#: Engine/musmon.c:303
+#: Engine/musmon.c:299
 msgid "cannot reopen cscore.out"
 msgstr ""
 
-#: Engine/musmon.c:307 Engine/musmon.c:315
+#: Engine/musmon.c:303
 msgid "cannot reopen cscore.srt"
 msgstr ""
 
-#: Engine/musmon.c:309
+#: Engine/musmon.c:305
 msgid "sorting cscore.out ..\n"
 msgstr ""
 
-#: Engine/musmon.c:313 Top/main.c:409
+#: Engine/musmon.c:311 Top/main.c:401
 msgid "\t... done\n"
 msgstr ""
 
-#: Engine/musmon.c:317
+#: Engine/musmon.c:312
 msgid "playing from cscore.srt\n"
 msgstr ""
 
-#: Engine/musmon.c:321 Engine/musmon.c:453 Engine/musmon.c:1021
-#: Engine/musmon.c:1225
+#: Engine/musmon.c:316 Engine/musmon.c:446 Engine/musmon.c:1015
+#: Engine/musmon.c:1216
 #, c-format
 msgid "SECTION %d:\n"
 msgstr ""
 
-#: Engine/musmon.c:397
+#: Engine/musmon.c:390
 msgid "end of score.\t\t   overall amps:"
 msgstr ""
 
-#: Engine/musmon.c:408
+#: Engine/musmon.c:401
 msgid ""
 "\n"
 "\t   overall samples out of range:"
 msgstr ""
 
-#: Engine/musmon.c:412
+#: Engine/musmon.c:405
 #, c-format
 msgid ""
 "\n"
 "%d errors in performance\n"
 msgstr ""
 
-#: Engine/musmon.c:414
+#: Engine/musmon.c:407
 msgid "end of performance"
 msgstr ""
 
-#: Engine/musmon.c:428
+#: Engine/musmon.c:421
 msgid "no sound written to disk\n"
 msgstr ""
 
-#: Engine/musmon.c:443
+#: Engine/musmon.c:436
 #, c-format
 msgid "%c\tbeep!\n"
 msgstr ""
 
-#: Engine/musmon.c:509 Engine/musmon.c:555
+#: Engine/musmon.c:502 Engine/musmon.c:548
 msgid "\t number of samples out of range:"
 msgstr ""
 
-#: Engine/musmon.c:548
+#: Engine/musmon.c:541
 #, c-format
 msgid "end of section %d\t sect peak amps:"
 msgstr ""
 
-#: Engine/musmon.c:550
+#: Engine/musmon.c:543
 msgid "end of lplay event list\t      peak amps:"
 msgstr ""
 
-#: Engine/musmon.c:614 Engine/musmon.c:639
+#: Engine/musmon.c:607 Engine/musmon.c:632
 #, c-format
 msgid " - note deleted. instr %s undefined"
 msgstr ""
 
-#: Engine/musmon.c:618
+#: Engine/musmon.c:611
 #, c-format
 msgid "Setting instrument %s %s\n"
 msgstr ""
 
-#: Engine/musmon.c:619 Engine/musmon.c:632
+#: Engine/musmon.c:612 Engine/musmon.c:625
 #: Opcodes/fluidOpcodes/fluidOpcodes.c:207
 #: Opcodes/fluidOpcodes/fluidOpcodes.c:208
 msgid "off"
 msgstr ""
 
-#: Engine/musmon.c:619 Engine/musmon.c:632
+#: Engine/musmon.c:612 Engine/musmon.c:625
 #: Opcodes/fluidOpcodes/fluidOpcodes.c:207
 #: Opcodes/fluidOpcodes/fluidOpcodes.c:208
 msgid "on"
 msgstr ""
 
-#: Engine/musmon.c:627 Engine/musmon.c:666
+#: Engine/musmon.c:620 Engine/musmon.c:659
 #, c-format
 msgid " - note deleted. instr %d(%d) undefined"
 msgstr ""
 
-#: Engine/musmon.c:631
+#: Engine/musmon.c:624
 #, c-format
 msgid "Setting instrument %d %s\n"
 msgstr ""
 
-#: Engine/musmon.c:657
+#: Engine/musmon.c:650
 #, c-format
 msgid " - note deleted.  i%d (%s) had %d init errors"
 msgstr ""
 
-#: Engine/musmon.c:687
+#: Engine/musmon.c:680
 #, c-format
 msgid " - note deleted.  i%d had %d init errors"
 msgstr ""
 
-#: Engine/musmon.c:708
+#: Engine/musmon.c:701
 #, c-format
 msgid "time advanced %5.3f beats by score request\n"
 msgstr ""
 
-#: Engine/musmon.c:725
+#: Engine/musmon.c:719
 #, c-format
 msgid "\t\t   T%7.3f - note deleted. "
 msgstr ""
 
-#: Engine/musmon.c:729
+#: Engine/musmon.c:723
 #, c-format
 msgid "instr %s had %d init errors\n"
 msgstr ""
 
-#: Engine/musmon.c:731
+#: Engine/musmon.c:725
 #, c-format
 msgid "instr %d had %d init errors\n"
 msgstr ""
 
-#: Engine/musmon.c:822
+#: Engine/musmon.c:816
 msgid "terminating.\n"
 msgstr ""
 
-#: Engine/musmon.c:908
+#: Engine/musmon.c:902
 #, c-format
 msgid "error in score.  illegal opcode %c (ASCII %d)\n"
 msgstr ""
 
-#: Engine/musmon.c:1135
+#: Engine/musmon.c:1129
 msgid "insert_score_event(): invalid instrument number or name\n"
 msgstr ""
 
-#: Engine/musmon.c:1155
+#: Engine/musmon.c:1149
 #, c-format
 msgid "insert_score_event(): unknown opcode: %c\n"
 msgstr ""
 
-#: Engine/musmon.c:1178
+#: Engine/musmon.c:1172
 msgid "insert_score_event(): insufficient p-fields\n"
 msgstr ""
 
@@ -1504,350 +1460,402 @@ msgstr ""
 msgid "cannot find the specified instrument or opcode"
 msgstr ""
 
-#: Engine/new_orc_parser.c:74 Engine/rdorch.c:488
+#: Engine/new_orc_parser.c:91
+msgid "Unmatched #ifdef\n"
+msgstr ""
+
+#: Engine/otran.c:149 Engine/symbtab.c:413
 #, c-format
-msgid "cannot open orch file %s"
+msgid "invalid input type for opcode %s"
+msgstr ""
+
+#: Engine/otran.c:154 Engine/symbtab.c:418
+#, c-format
+msgid "too many input args for opcode %s"
+msgstr ""
+
+#: Engine/otran.c:169 Engine/symbtab.c:433
+#, c-format
+msgid "too many output args for opcode %s"
+msgstr ""
+
+#: Engine/otran.c:194 Engine/symbtab.c:458
+#, c-format
+msgid "invalid output type for opcode %s"
 msgstr ""
 
-#: Engine/otran.c:312 Engine/otran.c:319
+#: Engine/otran.c:325 Engine/otran.c:332
 msgid "missing instrument number or name"
 msgstr ""
 
-#: Engine/otran.c:324
+#: Engine/otran.c:337
 msgid "illegal instr number"
 msgstr ""
 
-#: Engine/otran.c:374
+#: Engine/otran.c:388
 msgid "No opcode name"
 msgstr ""
 
-#: Engine/otran.c:379 Engine/symbtab.c:501
+#: Engine/otran.c:393 Engine/symbtab.c:538
 msgid "invalid name for opcode"
 msgstr ""
 
-#: Engine/otran.c:383
+#: Engine/otran.c:397
 #, c-format
 msgid ""
 "opcode declaration error (usage: opcode name, outtypes, intypes) -- opcode %s"
 msgstr ""
 
-#: Engine/otran.c:394 Engine/symbtab.c:511
+#: Engine/otran.c:408 Engine/symbtab.c:548
 #, c-format
 msgid "cannot redefine %s"
 msgstr ""
 
-#: Engine/otran.c:398 Engine/symbtab.c:516
+#: Engine/otran.c:412 Engine/symbtab.c:553
 #, c-format
 msgid "WARNING: redefined opcode: %s\n"
 msgstr ""
 
-#: Engine/otran.c:489
+#: Engine/otran.c:503
 msgid "string constant used as output"
 msgstr ""
 
-#: Engine/otran.c:520
+#: Engine/otran.c:534
 msgid "Missing endin"
 msgstr ""
 
-#: Engine/otran.c:584
+#: Engine/otran.c:599
 msgid "perf-pass statements illegal in header blk"
 msgstr ""
 
-#: Engine/otran.c:588
+#: Engine/otran.c:603
 #, c-format
 msgid "%d syntax errors in orchestra.  compilation invalid"
 msgstr ""
 
-#: Engine/otran.c:1238
+#: Engine/otran.c:1257
 msgid "bad value for 0dbfs: must be positive."
 msgstr ""
 
-#: Engine/otran.c:1248
+#: Engine/otran.c:1267
 #, c-format
 msgid "sample rate overrides: esr = %7.4f, ekr = %7.4f, ksmps = %d\n"
 msgstr ""
 
-#: Engine/otran.c:1320
+#: Engine/otran.c:1339
 msgid "internal error: string constant outarg"
 msgstr ""
 
-#: Engine/otran.c:1346
+#: Engine/otran.c:1365
 #, c-format
 msgid "i%d pset args != pmax"
 msgstr ""
 
-#: Engine/otran.c:1409
+#: Engine/otran.c:1428
 #, c-format
 msgid ""
 "sr = %.7g, kr = %.7g, ksmps = %.7g\n"
 "error:"
 msgstr ""
 
-#: Engine/otran.c:1442
+#: Engine/otran.c:1461
 msgid "header init errors"
 msgstr ""
 
-#: Engine/rdorch.c:166
+#: Engine/rdorch.c:169
 msgid "ungetorchar(): buffer overflow"
 msgstr ""
 
-#: Engine/rdorch.c:330
+#: Engine/rdorch.c:348
 msgid "Unexpected end of orchestra file"
 msgstr ""
 
-#: Engine/rdorch.c:484
-msgid "orch compiler:\n"
+#: Engine/rdorch.c:431 Engine/sread.c:758
+#, c-format
+msgid "Macro definition for %*s\n"
 msgstr ""
 
-#: Engine/rdorch.c:490
-#, c-format
-msgid "cannot find end of file %s"
+#: Engine/rdorch.c:434
+msgid "Invalid macro name for --omacro"
+msgstr ""
+
+#: Engine/rdorch.c:502
+msgid "orch compiler:\n"
 msgstr ""
 
-#: Engine/rdorch.c:492
+#: Engine/rdorch.c:520
 #, c-format
-msgid "ftell error on %s"
+msgid "cannot open orch file %s"
 msgstr ""
 
-#: Engine/rdorch.c:657 Engine/sread.c:1572
+#: Engine/rdorch.c:684 Engine/sread.c:1584
 #, c-format
 msgid "Macro definition for %s\n"
 msgstr ""
 
-#: Engine/rdorch.c:748
+#: Engine/rdorch.c:716 Engine/sread.c:1607
+msgid "macro error\n"
+msgstr ""
+
+#: Engine/rdorch.c:775
 #, c-format
 msgid "Cannot open #include'd file %s\n"
 msgstr ""
 
-#: Engine/rdorch.c:797
+#: Engine/rdorch.c:824
 msgid "unmatched #ifdef"
 msgstr ""
 
-#: Engine/rdorch.c:808
+#: Engine/rdorch.c:835
 msgid "Unmatched #else"
 msgstr ""
 
-#: Engine/rdorch.c:822
+#: Engine/rdorch.c:849
 msgid "Unmatched #endif"
 msgstr ""
 
-#: Engine/rdorch.c:875
+#: Engine/rdorch.c:872 Engine/sread.c:1694
+#, c-format
+msgid "macro %s undefined\n"
+msgstr ""
+
+#: Engine/rdorch.c:886 Engine/sread.c:286
+msgid "Undefining undefined macro"
+msgstr ""
+
+#: Engine/rdorch.c:902
 msgid "Unexpected # character"
 msgstr ""
 
-#: Engine/rdorch.c:877
+#: Engine/rdorch.c:904
 #, c-format
 msgid "Unknown # option: '%s'"
 msgstr ""
 
-#: Engine/rdorch.c:903 Engine/sread.c:394
+#: Engine/rdorch.c:928 Engine/sread.c:380
+#, c-format
+msgid "Undefined macro: '%s'"
+msgstr ""
+
+#: Engine/rdorch.c:930 Engine/sread.c:378
 msgid "Macro expansion symbol ($) without macro name"
 msgstr ""
 
-#: Engine/rdorch.c:908 Engine/sread.c:400
+#: Engine/rdorch.c:935 Engine/sread.c:384
 #, c-format
 msgid "$%s matches macro name $%s"
 msgstr ""
 
-#: Engine/rdorch.c:925 Engine/sread.c:417
+#: Engine/rdorch.c:952 Engine/sread.c:401
 msgid "Syntax error in macro call"
 msgstr ""
 
-#: Engine/rdorch.c:975
+#: Engine/rdorch.c:967
+#, c-format
+msgid ""
+"Missing argument terminator\n"
+"%.98s"
+msgstr ""
+
+#: Engine/rdorch.c:1002
 msgid "Unmatched #ifdef"
 msgstr ""
 
-#: Engine/rdorch.c:977
+#: Engine/rdorch.c:1004
 msgid "file too large for ortext space"
 msgstr ""
 
-#: Engine/rdorch.c:984
+#: Engine/rdorch.c:1011
 #, c-format
 msgid "%d (%d) lines read\n"
 msgstr ""
 
-#: Engine/rdorch.c:1052
+#: Engine/rdorch.c:1079
 #, c-format
 msgid "LINE %d:"
 msgstr ""
 
-#: Engine/rdorch.c:1071
+#: Engine/rdorch.c:1098
 msgid "invalid 'elseif' statement.  must have a corresponding 'if'"
 msgstr ""
 
-#: Engine/rdorch.c:1078
+#: Engine/rdorch.c:1105
 msgid "'elseif' statement cannot occur after an 'else'"
 msgstr ""
 
-#: Engine/rdorch.c:1134
+#: Engine/rdorch.c:1161
 msgid "Unmatched comment"
 msgstr ""
 
-#: Engine/rdorch.c:1198
+#: Engine/rdorch.c:1225
 msgid "misplaced comma"
 msgstr ""
 
-#: Engine/rdorch.c:1200 Engine/rdorch.c:1342 Engine/rdorch.c:1440
+#: Engine/rdorch.c:1227 Engine/rdorch.c:1369 Engine/rdorch.c:1467
 msgid "unbalanced parens"
 msgstr ""
 
-#: Engine/rdorch.c:1364
+#: Engine/rdorch.c:1391
 #, c-format
 msgid "illegal character %c"
 msgstr ""
 
-#: Engine/rdorch.c:1377
+#: Engine/rdorch.c:1404
 msgid "invalid 'else' statement.  must have a corresponding 'if'"
 msgstr ""
 
-#: Engine/rdorch.c:1384
+#: Engine/rdorch.c:1411
 msgid "duplicate 'else' statement"
 msgstr ""
 
-#: Engine/rdorch.c:1413
+#: Engine/rdorch.c:1440
 msgid "invalid 'endif' statement.  must have a corresponding 'if'"
 msgstr ""
 
-#: Engine/rdorch.c:1442
+#: Engine/rdorch.c:1469
 msgid "no legal opcode"
 msgstr ""
 
-#: Engine/rdorch.c:1573
+#: Engine/rdorch.c:1600
 msgid "illegal opcod from expr anal"
 msgstr ""
 
-#: Engine/rdorch.c:1606 Engine/rdorch.c:1628
+#: Engine/rdorch.c:1633 Engine/rdorch.c:1655
 #, c-format
 msgid "failed to find %s, output arg '%s' illegal type"
 msgstr ""
 
-#: Engine/rdorch.c:1670
+#: Engine/rdorch.c:1697
 #, c-format
 msgid "failed to find %s, input arg illegal type"
 msgstr ""
 
-#: Engine/rdorch.c:1684
+#: Engine/rdorch.c:1711
 msgid "setksmps is allowed only in user defined opcodes"
 msgstr ""
 
-#: Engine/rdorch.c:1687
+#: Engine/rdorch.c:1714
 msgid "multiple uses of setksmps in the same opcode definition"
 msgstr ""
 
-#: Engine/rdorch.c:1710
+#: Engine/rdorch.c:1739
 #, c-format
 msgid "%s inconsistent with global nchnls (%d); replaced with %s\n"
 msgstr ""
 
-#: Engine/rdorch.c:1740
+#: Engine/rdorch.c:1770
 msgid "opcode blks cannot be nested (missing 'endop'?)"
 msgstr ""
 
-#: Engine/rdorch.c:1742
+#: Engine/rdorch.c:1772
 msgid "opcode not allowed in instr block"
 msgstr ""
 
-#: Engine/rdorch.c:1751
+#: Engine/rdorch.c:1781
 msgid "unmatched endop"
 msgstr ""
 
-#: Engine/rdorch.c:1753
+#: Engine/rdorch.c:1783
 msgid "endop not allowed in instr block"
 msgstr ""
 
-#: Engine/rdorch.c:1758
+#: Engine/rdorch.c:1788
 msgid "instr not allowed in opcode block"
 msgstr ""
 
-#: Engine/rdorch.c:1761
+#: Engine/rdorch.c:1791
 msgid "instr blocks cannot be nested (missing 'endin'?)"
 msgstr ""
 
-#: Engine/rdorch.c:1769
+#: Engine/rdorch.c:1799
 msgid "endin not allowed in opcode blk"
 msgstr ""
 
-#: Engine/rdorch.c:1771
+#: Engine/rdorch.c:1801
 msgid "unmatched endin"
 msgstr ""
 
-#: Engine/rdorch.c:1781
+#: Engine/rdorch.c:1811
 msgid "misplaced opcode"
 msgstr ""
 
-#: Engine/rdorch.c:1787
+#: Engine/rdorch.c:1817
 msgid "xout is allowed only in user defined opcodes"
 msgstr ""
 
-#: Engine/rdorch.c:1790
+#: Engine/rdorch.c:1820
 msgid "multiple uses of xout in the same opcode definition"
 msgstr ""
 
-#: Engine/rdorch.c:1837
+#: Engine/rdorch.c:1867
 msgid "too many input args"
 msgstr ""
 
-#: Engine/rdorch.c:1909
+#: Engine/rdorch.c:1893
+msgid "insufficient required arguments"
+msgstr ""
+
+#: Engine/rdorch.c:1940
 #, c-format
-msgid "input arg '%s' used before defined"
+msgid "input arg '%s' used before defined \n"
 msgstr ""
 
-#: Engine/rdorch.c:1956
+#: Engine/rdorch.c:1987
 msgid "xin is allowed only in user defined opcodes"
 msgstr ""
 
-#: Engine/rdorch.c:1959
+#: Engine/rdorch.c:1990
 msgid "multiple uses of xin in the same opcode definition"
 msgstr ""
 
-#: Engine/rdorch.c:2004
+#: Engine/rdorch.c:2035
 msgid "illegal no of output args"
 msgstr ""
 
-#: Engine/rdorch.c:2023
+#: Engine/rdorch.c:2054
 #, c-format
 msgid "output name previously used, type '%c' must be uniquely defined"
 msgstr ""
 
-#: Engine/rdorch.c:2028
+#: Engine/rdorch.c:2059
 #, c-format
 msgid "output arg '%s' illegal type"
 msgstr ""
 
-#: Engine/rdorch.c:2069
+#: Engine/rdorch.c:2100
 #, c-format
 msgid "input arg '%s' of type %s not allowed when expecting %c"
 msgstr ""
 
-#: Engine/rdorch.c:2155
+#: Engine/rdorch.c:2187
 msgid "duplicate label"
 msgstr ""
 
-#: Engine/rdorch.c:2177
+#: Engine/rdorch.c:2209
 #, c-format
 msgid "error line %d.  unknown label:\n"
 msgstr ""
 
-#: Engine/rdorch.c:2192 Engine/rdorch.c:2239
+#: Engine/rdorch.c:2222 Engine/rdorch.c:2271
 msgid "error:  "
 msgstr ""
 
-#: Engine/rdorch.c:2208
+#: Engine/rdorch.c:2239
 #, c-format
 msgid ", line %d:\n"
 msgstr ""
 
-#: Engine/rdorch.c:2246
+#: Engine/rdorch.c:2278
 #, c-format
 msgid "called from line %d of macro %s"
 msgstr ""
 
-#: Engine/rdorch.c:2250
+#: Engine/rdorch.c:2282
 #, c-format
 msgid "in line %d of file input %s"
 msgstr ""
 
-#: Engine/rdscor.c:79
+#: Engine/rdscor.c:80
 #, c-format
 msgid "ERROR: illegal character %c(%.2x) in scoreline: "
 msgstr ""
@@ -1858,7 +1866,7 @@ msgid ""
 "\tremainder of line flushed\n"
 msgstr ""
 
-#: Engine/rdscor.c:144
+#: Engine/rdscor.c:146
 msgid "ERROR: too many pfields: "
 msgstr ""
 
@@ -1884,349 +1892,316 @@ msgstr ""
 msgid "  section %d:  at position %d%s"
 msgstr ""
 
-#: Engine/sread.c:217
+#: Engine/sread.c:216
 msgid "Internal error in print_input_backtrace()"
 msgstr ""
 
-#: Engine/sread.c:219
+#: Engine/sread.c:218
 #, c-format
 msgid "  included from line %d of macro %s%s"
 msgstr ""
 
-#: Engine/sread.c:220
+#: Engine/sread.c:219
 #, c-format
 msgid "  called from line %d of macro %s%s"
 msgstr ""
 
-#: Engine/sread.c:222
+#: Engine/sread.c:221
 #, c-format
 msgid "  in line %d of macro %s%s"
 msgstr ""
 
-#: Engine/sread.c:229
-#, c-format
-msgid "  included from line %d of file input %s%s"
-msgstr ""
-
-#: Engine/sread.c:230
-#, c-format
-msgid "  called from line %d of file input %s%s"
-msgstr ""
-
-#: Engine/sread.c:232
-#, c-format
-msgid "  in line %d of file input %s%s"
-msgstr ""
-
-#: Engine/sread.c:268
+#: Engine/sread.c:256
 #, c-format
 msgid "Internal error op=%c"
 msgstr ""
 
-#: Engine/sread.c:322
-msgid "ungetscochar(): buffer overflow"
-msgstr ""
-
-#: Engine/sread.c:479
+#: Engine/sread.c:464
 msgid "illegal placement of number in [] expression"
 msgstr ""
 
-#: Engine/sread.c:506
+#: Engine/sread.c:491
 msgid "illegal placement of operator ~ in [] expression"
 msgstr ""
 
-#: Engine/sread.c:516
+#: Engine/sread.c:501
 msgid "illegal placement of operator @ or @@ in [] expression"
 msgstr ""
 
-#: Engine/sread.c:548 Engine/sread.c:562
+#: Engine/sread.c:533 Engine/sread.c:547
 #, c-format
 msgid "illegal placement of operator %c in [] expression"
 msgstr ""
 
-#: Engine/sread.c:574
+#: Engine/sread.c:559
 msgid "illegal placement of '(' in [] expression"
 msgstr ""
 
-#: Engine/sread.c:580
+#: Engine/sread.c:565
 msgid "missing operand before ')' in [] expression"
 msgstr ""
 
-#: Engine/sread.c:594
+#: Engine/sread.c:579
 msgid "missing operand before closing bracket in []"
 msgstr ""
 
-#: Engine/sread.c:609
+#: Engine/sread.c:594
 #, c-format
 msgid "illegal character %c(%.2x) in [] expression"
 msgstr ""
 
-#: Engine/sread.c:658
+#: Engine/sread.c:646
 #, c-format
 msgid "%s Nested LOOP terminated, level:%d\n"
 msgstr ""
 
-#: Engine/sread.c:664
+#: Engine/sread.c:652
 #, c-format
 msgid "External LOOP terminated, level:%d\n"
 msgstr ""
 
-#: Engine/sread.c:684
+#: Engine/sread.c:696
 #, c-format
 msgid "%s  Nested LOOP section (%d) Level:%d\n"
 msgstr ""
 
-#: Engine/sread.c:689
+#: Engine/sread.c:701
 #, c-format
 msgid " External LOOP section (%d) Level:%d\n"
 msgstr ""
 
-#: Engine/sread.c:703
+#: Engine/sread.c:715
 msgid "Loop terminated\n"
 msgstr ""
 
-#: Engine/sread.c:716
+#: Engine/sread.c:733
 #, c-format
 msgid "Repeat section (%d)\n"
 msgstr ""
 
-#: Engine/sread.c:719
+#: Engine/sread.c:736
 msgid "Repeat section\n"
 msgstr ""
 
-#: Engine/sread.c:744
+#: Engine/sread.c:761
 msgid "Invalid macro name for --smacro"
 msgstr ""
 
-#: Engine/sread.c:831
+#: Engine/sread.c:865
 #, c-format
 msgid "Clockbase = %f\n"
 msgstr ""
 
-#: Engine/sread.c:898
+#: Engine/sread.c:934
 msgid "Loops are nested too deeply"
 msgstr ""
 
-#: Engine/sread.c:901
-msgid "Loop cannot start inside of a macro"
-msgstr ""
-
-#: Engine/sread.c:920
+#: Engine/sread.c:948
 msgid "{: invalid repeat count"
 msgstr ""
 
-#: Engine/sread.c:929
+#: Engine/sread.c:957
 #, c-format
 msgid "%s Nested LOOP=%d Level:%d\n"
 msgstr ""
 
-#: Engine/sread.c:935
+#: Engine/sread.c:963
 #, c-format
 msgid "External LOOP=%d Level:%d\n"
 msgstr ""
 
-#: Engine/sread.c:1004
-msgid "Repeat cannot start inside of a macro (ignored)"
-msgstr ""
-
-#: Engine/sread.c:1019
+#: Engine/sread.c:1047
 msgid "r: invalid repeat count"
 msgstr ""
 
-#: Engine/sread.c:1021
+#: Engine/sread.c:1049
 #, c-format
 msgid "Repeats=%d\n"
 msgstr ""
 
-#: Engine/sread.c:1063
+#: Engine/sread.c:1093
 #, c-format
 msgid "Named section >>>%s<<<\n"
 msgstr ""
 
-#: Engine/sread.c:1079
+#: Engine/sread.c:1108
 #, c-format
 msgid "%d: File %s position %ld\n"
 msgstr ""
 
-#: Engine/sread.c:1085
-#, c-format
-msgid "Ignoring name %s not in file\n"
-msgstr ""
-
-#: Engine/sread.c:1110
+#: Engine/sread.c:1133
 #, c-format
 msgid "Name %s not found"
 msgstr ""
 
-#: Engine/sread.c:1112
+#: Engine/sread.c:1135
 #, c-format
 msgid "Duplicate %d: %s (%s,%ld)\n"
 msgstr ""
 
-#: Engine/sread.c:1129
-#, c-format
-msgid "cannot open input file %s"
-msgstr ""
-
-#: Engine/sread.c:1149
+#: Engine/sread.c:1164
 #, c-format
 msgid "Warp_factor = %f\n"
 msgstr ""
 
-#: Engine/sread.c:1174
+#: Engine/sread.c:1189
 msgid "sread is confused on legal opcodes\n"
 msgstr ""
 
-#: Engine/sread.c:1236
+#: Engine/sread.c:1251
 msgid "No previous event for ^"
 msgstr ""
 
-#: Engine/sread.c:1241
+#: Engine/sread.c:1256
 #, c-format
 msgid "illegal space following %s, zero substituted"
 msgstr ""
 
-#: Engine/sread.c:1271
+#: Engine/sread.c:1286
 #, c-format
 msgid "ignoring '%s' in '%c' event"
 msgstr ""
 
-#: Engine/sread.c:1274
+#: Engine/sread.c:1289
 msgid "! invalid in p1, p2, or p3"
 msgstr ""
 
-#: Engine/sread.c:1275 Engine/sread.c:1280 Engine/sread.c:1730
-#: Engine/sread.c:1753 Engine/sread.c:1767
+#: Engine/sread.c:1290 Engine/sread.c:1295 Engine/sread.c:1738
+#: Engine/sread.c:1761 Engine/sread.c:1775
 msgid "      remainder of line flushed\n"
 msgstr ""
 
-#: Engine/sread.c:1279
+#: Engine/sread.c:1294
 #, c-format
 msgid "illegal character after !: '%c'"
 msgstr ""
 
-#: Engine/sread.c:1358
+#: Engine/sread.c:1373
 #, c-format
 msgid "WARNING: instr %s not found, assuming insno = -1\n"
 msgstr ""
 
-#: Engine/sread.c:1378
+#: Engine/sread.c:1393
 msgid "sread: illegal use of carry,   0 substituted\n"
 msgstr ""
 
-#: Engine/sread.c:1526
+#: Engine/sread.c:1539
 msgid "Improper \\"
 msgstr ""
 
-#: Engine/sread.c:1558
+#: Engine/sread.c:1570
 msgid "Not #define"
 msgstr ""
 
-#: Engine/sread.c:1620
+#: Engine/sread.c:1630
 #, c-format
 msgid "Macro %s with %d arguments defined\n"
 msgstr ""
 
-#: Engine/sread.c:1631
+#: Engine/sread.c:1642
 msgid "Not #include"
 msgstr ""
 
-#: Engine/sread.c:1662
+#: Engine/sread.c:1671
 #, c-format
 msgid "Cannot open #include'd file %s"
 msgstr ""
 
-#: Engine/sread.c:1673
+#: Engine/sread.c:1681
 msgid "Not #undef"
 msgstr ""
 
-#: Engine/sread.c:1692
+#: Engine/sread.c:1700
 msgid "unknown # option"
 msgstr ""
 
-#: Engine/sread.c:1729
+#: Engine/sread.c:1737
 #, c-format
 msgid "illegal opcode %c"
 msgstr ""
 
-#: Engine/sread.c:1752
+#: Engine/sread.c:1760
 #, c-format
 msgid "unexpected char %c"
 msgstr ""
 
-#: Engine/sread.c:1766
+#: Engine/sread.c:1774
 msgid "illegally placed string"
 msgstr ""
 
-#: Engine/sread.c:1773
+#: Engine/sread.c:1781
 msgid "unmatched quote"
 msgstr ""
 
-#: Engine/sread.c:1817
+#: Engine/sread.c:1825
 msgid "sread: illegal number format:  "
 msgstr ""
 
-#: Engine/sread.c:1823
+#: Engine/sread.c:1831
 msgid "   zero substituted.\n"
 msgstr ""
 
-#: Engine/swrite.c:123
+#: Engine/swrite.c:123 Engine/swritestr.c:134
 #, c-format
 msgid "swrite: unexpected opcode, section %d line %d\n"
 msgstr ""
 
-#: Engine/swrite.c:209 Engine/swrite.c:249
+#: Engine/swrite.c:209 Engine/swrite.c:249 Engine/swritestr.c:220
+#: Engine/swritestr.c:260
 #, c-format
 msgid "swrite: output, sect%d line%d p%d makes illegal reference to "
 msgstr ""
 
-#: Engine/swrite.c:216 Engine/swrite.c:255
+#: Engine/swrite.c:216 Engine/swrite.c:255 Engine/swritestr.c:227
+#: Engine/swritestr.c:266
 msgid "   Zero substituted\n"
 msgstr ""
 
-#: Engine/swrite.c:313
+#: Engine/swrite.c:313 Engine/swritestr.c:324
 #, c-format
 msgid "swrite: output, sect%d line%d p%d has illegal ramp symbol\n"
 msgstr ""
 
-#: Engine/swrite.c:317
+#: Engine/swrite.c:317 Engine/swritestr.c:328
 #, c-format
 msgid ""
 "swrite: output, sect%d line%d p%d ramp has illegal forward or backward ref\n"
 msgstr ""
 
-#: Engine/swrite.c:380 Engine/swrite.c:445
+#: Engine/swrite.c:380 Engine/swrite.c:445 Engine/swritestr.c:391
+#: Engine/swritestr.c:456
 #, c-format
 msgid "swrite: output, sect%d line%d p%d has illegal expramp symbol\n"
 msgstr ""
 
-#: Engine/swrite.c:385 Engine/swrite.c:450
+#: Engine/swrite.c:385 Engine/swrite.c:450 Engine/swritestr.c:396
+#: Engine/swritestr.c:461
 #, c-format
 msgid ""
 "swrite: output, sect%d line%d p%d expramp has illegal forward or backward "
 "ref\n"
 msgstr ""
 
-#: Engine/swrite.c:466
+#: Engine/swrite.c:466 Engine/swritestr.c:477
 #, c-format
 msgid "swrite: output, sect%d line%d p%d has illegally terminated string   "
 msgstr ""
 
-#: Engine/swrite.c:514
+#: Engine/swrite.c:514 Engine/swritestr.c:529
 #, c-format
 msgid "swrite: output, sect%d line%d p%d has illegal number  "
 msgstr ""
 
-#: Engine/swrite.c:521
+#: Engine/swrite.c:521 Engine/swritestr.c:536
 msgid "    String truncated\n"
 msgstr ""
 
-#: Engine/symbtab.c:202
+#: Engine/symbtab.c:208
 #, c-format
 msgid "Type confusion for %s (%d,%d), replacing\n"
 msgstr ""
 
-#: Engine/symbtab.c:333
+#: Engine/symbtab.c:345
 #, c-format
 msgid "Unknown word type for %s on line %d\n"
 msgstr ""
@@ -2247,6 +2222,14 @@ msgstr ""
 msgid "twarp: t segments exceed twarp array\n"
 msgstr ""
 
+#: InOut/cmidi.c:233
+msgid "CoreMIDI real time MIDI plugin for Csound\n"
+msgstr ""
+
+#: InOut/cmidi.c:247
+msgid "rtmidi: CoreMIDI module enabled\n"
+msgstr ""
+
 #: InOut/libsnd.c:486
 msgid "error: no input file name"
 msgstr ""
@@ -2270,54 +2253,69 @@ msgstr ""
 msgid "audio_in %s has %d chnls, orch %d chnls_i"
 msgstr ""
 
-#: InOut/libsnd.c:573
+#: InOut/libsnd.c:574
+#, c-format
+msgid "reading %d sample blks of %d-bit floats from %s \n"
+msgstr ""
+
+#: InOut/libsnd.c:578
 #, c-format
 msgid "reading %d-byte blks of %s from %s (%s)\n"
 msgstr ""
 
-#: InOut/libsnd.c:608
+#: InOut/libsnd.c:614
 msgid "Output file type changed to IRCAM for use in pipe\n"
 msgstr ""
 
-#: InOut/libsnd.c:628
+#: InOut/libsnd.c:634
 msgid "Failed to initialise real time audio output"
 msgstr ""
 
-#: InOut/libsnd.c:669 InOut/libsnd.c:673
+#: InOut/libsnd.c:675 InOut/libsnd.c:679
 #, c-format
 msgid "sfinit: cannot open %s"
 msgstr ""
 
-#: InOut/libsnd.c:733 util/srconv.c:485
+#: InOut/libsnd.c:741
+#, c-format
+msgid "writing %d sample blks of %d-bit floats to %s \n"
+msgstr ""
+
+#: InOut/libsnd.c:744 util/srconv.c:484
 #, c-format
 msgid "writing %d-byte blks of %s to %s"
 msgstr ""
 
-#: InOut/libsnd.c:740 InOut/libsnd.c:810
+#: InOut/libsnd.c:749 InOut/libsnd.c:824
 msgid " (raw)\n"
 msgstr ""
 
-#: InOut/libsnd.c:803
+#: InOut/libsnd.c:815
+#, c-format
+msgid "%ld %d sample blks of %d-bit floats written to %s\n"
+msgstr ""
+
+#: InOut/libsnd.c:820
 #, c-format
-msgid "%ld %d-byte soundblks of %s written to %s"
+msgid "%ld %d sample blks of %s written to %s"
 msgstr ""
 
-#: InOut/libsnd.c:822
+#: InOut/libsnd.c:837
 #, c-format
 msgid "soundfile write returned bytecount of %d, not %d"
 msgstr ""
 
-#: InOut/libsnd.c:825
+#: InOut/libsnd.c:840
 msgid ""
 "(disk may be full...\n"
 " closing the file ...)"
 msgstr ""
 
-#: InOut/libsnd.c:828 util/dnoise.c:1192
+#: InOut/libsnd.c:843 util/dnoise.c:1177
 msgid "\t... closed\n"
 msgstr ""
 
-#: InOut/libsnd.c:834
+#: InOut/libsnd.c:849
 msgid "not writing to sound disk\n"
 msgstr ""
 
@@ -2717,20 +2715,20 @@ msgstr ""
 msgid "Error closing MIDI out device: %d (%s)"
 msgstr ""
 
-#: InOut/midisend.c:171
+#: InOut/midisend.c:170
 msgid " *** no callback for opening MIDI output"
 msgstr ""
 
-#: InOut/midisend.c:173
+#: InOut/midisend.c:172
 msgid " *** no callback for writing MIDI data"
 msgstr ""
 
-#: InOut/midisend.c:179
+#: InOut/midisend.c:178
 #, c-format
 msgid " *** error opening MIDI out device: %d (%s)"
 msgstr ""
 
-#: InOut/midisend.c:190
+#: InOut/midisend.c:189
 #, c-format
 msgid " *** error opening MIDI out file '%s'"
 msgstr ""
@@ -2984,7 +2982,7 @@ msgstr ""
 msgid "Opened MIDI output device file '%s'\n"
 msgstr ""
 
-#: InOut/rtalsa.c:1101 InOut/rtcoreaudio.c:64 InOut/rtcoreaudio.c:74
+#: InOut/rtalsa.c:1101 InOut/rtcoreaudio.c:71 InOut/rtcoreaudio.c:81
 msgid "warning... could not create global var\n"
 msgstr ""
 
@@ -3008,64 +3006,82 @@ msgstr ""
 msgid "rtmidi: devfile module enabled\n"
 msgstr ""
 
-#: InOut/rtcoreaudio.c:83
+#: InOut/rtauhal.c:163
+#, c-format
+msgid "selected input device: %s \n"
+msgstr ""
+
+#: InOut/rtauhal.c:166
+#, c-format
+msgid "selected output device: %s \n"
+msgstr ""
+
+#: InOut/rtauhal.c:524
+msgid "AuHAL module: device closed\n"
+msgstr ""
+
+#: InOut/rtauhal.c:541
+msgid "rtaudio: coreaaudio-AuHAL module enabled\n"
+msgstr ""
+
+#: InOut/rtcoreaudio.c:90
 msgid ""
 "CoreAudio real-time audio module for Csound\n"
 "by Victor Lazzarini\n"
 msgstr ""
 
-#: InOut/rtcoreaudio.c:105
+#: InOut/rtcoreaudio.c:112
 msgid "rtaudio: CoreAudio module enabled\n"
 msgstr ""
 
-#: InOut/rtcoreaudio.c:254
+#: InOut/rtcoreaudio.c:261
 #, c-format
 msgid "selected device: %u \n"
 msgstr ""
 
-#: InOut/rtcoreaudio.c:263
+#: InOut/rtcoreaudio.c:270
 #, c-format
 msgid "CoreAudio module: opening %s \n"
 msgstr ""
 
-#: InOut/rtcoreaudio.c:297
+#: InOut/rtcoreaudio.c:304
 msgid " *** CoreAudio: open: could not set buffer size\n"
 msgstr ""
 
-#: InOut/rtcoreaudio.c:342
+#: InOut/rtcoreaudio.c:349
 #, c-format
 msgid " *** CoreAudio: open: could not set device parameter sr: %d \n"
 msgstr ""
 
-#: InOut/rtcoreaudio.c:344
+#: InOut/rtcoreaudio.c:351
 #, c-format
 msgid ""
 " *** CoreAudio: current device sampling rate is:%d \n"
 "     try setting the above value in your csound orchestra \n"
 msgstr ""
 
-#: InOut/rtcoreaudio.c:353
+#: InOut/rtcoreaudio.c:360
 #, c-format
 msgid "CoreAudio module: sr set to %d with %d audio channels \n"
 msgstr ""
 
-#: InOut/rtcoreaudio.c:374 InOut/rtcoreaudio.c:387 InOut/rtcoreaudio.c:432
-#: InOut/rtcoreaudio.c:452
+#: InOut/rtcoreaudio.c:381 InOut/rtcoreaudio.c:394 InOut/rtcoreaudio.c:439
+#: InOut/rtcoreaudio.c:459
 msgid " *** CoreAudio: open: memory allocation failure\n"
 msgstr ""
 
-#: InOut/rtcoreaudio.c:414
+#: InOut/rtcoreaudio.c:421
 #, c-format
 msgid ""
 "CoreAudio module: device open with %d buffers of %d frames\n"
 "==========================================================\n"
 msgstr ""
 
-#: InOut/rtcoreaudio.c:552
+#: InOut/rtcoreaudio.c:559
 msgid "coreaudio module: closing device...\n"
 msgstr ""
 
-#: InOut/rtcoreaudio.c:566
+#: InOut/rtcoreaudio.c:573
 msgid "coreaudio module: device closed\n"
 msgstr ""
 
@@ -3465,294 +3481,12 @@ msgstr ""
 msgid "rtaudio: WinMM module enabled\n"
 msgstr ""
 
-#: InOut/virtual_keyboard/virtual_keyboard.cpp:435
-msgid "virtual_keyboard.cpp: error allocating FLTK flags"
-msgstr ""
-
-#: InOut/virtual_keyboard/virtual_keyboard.cpp:443 InOut/winFLTK.c:125
-#: InOut/winFLTK.c:139
-#, c-format
-msgid "Error registering opcode '%s'"
-msgstr ""
-
-#: InOut/widgets.cpp:1081
-msgid ""
-"Invalid snapshot. Perhaps you modified orchestra widget code after you saved "
-"the snapshot bank."
-msgstr ""
-
-#: InOut/widgets.cpp:1226
-msgid "No name for FLbutbank"
-msgstr ""
-
-#: InOut/widgets.cpp:1466
-msgid "FLsetsnap: invalid table"
-msgstr ""
-
-#: InOut/widgets.cpp:1504
-msgid ""
-"Saving could overwrite the old file.\n"
-"Are you sure to save ?"
-msgstr ""
-
-#: InOut/widgets.cpp:1516
-msgid ""
-"Saving could overwrite the old file.\n"
-"Are you sure you want to save ?"
-msgstr ""
-
-#: InOut/widgets.cpp:1518
-msgid "No"
-msgstr ""
-
-#: InOut/widgets.cpp:1518
-msgid "Yes"
-msgstr ""
-
-#: InOut/widgets.cpp:1527
-msgid "FLsavesnap: cannot open file"
-msgstr ""
-
-#: InOut/widgets.cpp:1580
-msgid "FLloadsnap: cannot open file"
-msgstr ""
-
-#: InOut/widgets.cpp:1625
-msgid ""
-"unmatched widget, probably due to a modified orchestra. Modifying an "
-"orchestra makes it incompatible with old snapshot files"
-msgstr ""
-
-#: InOut/widgets.cpp:1994
-msgid "end of widget thread\n"
-msgstr ""
-
-#: InOut/widgets.cpp:2020
-msgid "FLrun was already called"
-msgstr ""
-
-#: InOut/widgets.cpp:2023
-msgid "FL_run: memory allocation failure"
-msgstr ""
-
-#: InOut/widgets.cpp:2125 InOut/widgets.cpp:2145
-msgid "Error: Unable to fork process\n"
-msgstr ""
-
-#: InOut/widgets.cpp:2545
-msgid "FLpanel_end: invalid stack pointer: verify its placement"
-msgstr ""
-
-#: InOut/widgets.cpp:2548
-msgid ""
-"FLpanel_end: invalid stack count: verify FLpanel/FLpanel_end count and "
-"placement"
-msgstr ""
-
-#: InOut/widgets.cpp:2573 InOut/widgets.cpp:2604
-msgid "FLscroll_end: invalid stack pointer: verify its placement"
-msgstr ""
-
-#: InOut/widgets.cpp:2576
-msgid ""
-"FLscroll_end: invalid stack count: verify FLscroll/FLscroll_end count and "
-"placement"
-msgstr ""
-
-#: InOut/widgets.cpp:2607
-msgid ""
-"FLtabs_end: invalid stack count: verify FLtabs/FLtabs_end count and placement"
-msgstr ""
-
-#: InOut/widgets.cpp:2651
-msgid "FLgroup_end: invalid stack pointer: verify its placement"
-msgstr ""
-
-#: InOut/widgets.cpp:2654
-msgid ""
-"FLgroup_end: invalid stack count: verify FLgroup/FLgroup_end count and "
-"placement"
-msgstr ""
-
-#: InOut/widgets.cpp:2684
-msgid "FLpack_end: invalid stack pointer: verify its placement"
-msgstr ""
-
-#: InOut/widgets.cpp:2687
-msgid ""
-"FLpack_end: invalid stack count: verify FLpack/FLpack_end count and placement"
-msgstr ""
-
-#: InOut/widgets.cpp:2840
-msgid "FLvalue cannot be set by FLsetVal.\n"
-msgstr ""
-
-#: InOut/widgets.cpp:2857
-#, c-format
-msgid "(fl_setWidgetValuei): not fully implemented yet; exp=%d"
-msgstr ""
-
-#: InOut/widgets.cpp:2876
-msgid "FLvalue cannot be set by FLsetVal\n"
-msgstr ""
-
-#: InOut/widgets.cpp:2893
-#, c-format
-msgid "(fl_setWidgetValue_set): not fully implemented yet; exp=%d"
-msgstr ""
-
-#: InOut/widgets.cpp:3242 InOut/widgets.cpp:4648
-msgid "FLslider exponential, using non-labeled slider"
-msgstr ""
-
-#: InOut/widgets.cpp:3264
-msgid "FLslider: invalid slider type"
-msgstr ""
-
-#: InOut/widgets.cpp:3276 InOut/widgets.cpp:4072
-msgid "FLslider: zero is illegal in exponential operations"
-msgstr ""
-
-#: InOut/widgets.cpp:3337 InOut/widgets.cpp:4399 InOut/widgets.cpp:4610
-#: InOut/widgets.cpp:4787
-msgid "invalid ZAK space allocation"
-msgstr ""
-
-#: InOut/widgets.cpp:3451
-msgid "FLslidBnk: zero is illegal in exponential operations"
-msgstr ""
-
-#: InOut/widgets.cpp:3548 InOut/widgets.cpp:3581
-msgid "FLjoy X axe: zero is illegal in exponential operations"
-msgstr ""
-
-#: InOut/widgets.cpp:3675
-msgid "FLknob: invalid knob type"
-msgstr ""
-
-#: InOut/widgets.cpp:3690
-msgid "FLknob: zero is illegal in exponential operations"
-msgstr ""
-
-#: InOut/widgets.cpp:3790 InOut/widgets.cpp:3912
-#, c-format
-msgid "FLbutton \"%s\" ignoring snapshot capture retrieve"
-msgstr ""
-
-#: InOut/widgets.cpp:3831
-msgid "FLbutton: invalid button type"
-msgstr ""
-
-#: InOut/widgets.cpp:3863
-msgid "FLcloseButton: invalid stack pointer: verify its placement"
-msgstr ""
-
-#: InOut/widgets.cpp:3882
-#, c-format
-msgid "Command Found: %s\n"
-msgstr ""
-
-#: InOut/widgets.cpp:3954
-msgid "FLbuttonBank: invalid button type"
-msgstr ""
-
-#: InOut/widgets.cpp:3992
-#, c-format
-msgid "FLcount \"%s\" ignoring snapshot capture retrieve"
-msgstr ""
-
-#: InOut/widgets.cpp:4059
-msgid "FLroller: invalid roller type"
-msgstr ""
-
-#: InOut/widgets.cpp:4254
-msgid "FLhvsBox: a square area must be delimited by 2 lines at least"
-msgstr ""
-
-#: InOut/widgets.cpp:4302
-msgid "FLkeyIn: invalid table number"
-msgstr ""
-
-#: InOut/widgets.cpp:4305
-msgid "FLkeyIn: table too short!"
-msgstr ""
-
-#: InOut/widgets.cpp:4522
-msgid "FLvslidBnk: zero is illegal in exponential operations"
-msgstr ""
-
-#: InOut/widgets.cpp:4698 InOut/widgets.cpp:4875
-msgid "FLsliderBank: zero is illegal in exponential operations"
-msgstr ""
-
-#: InOut/widgets.cpp:4825
-msgid "FLslidBnk2: FLslider exponential, using non-labeled slider"
-msgstr ""
-
-#: InOut/widgets.cpp:4955 InOut/widgets.cpp:5018
-msgid "FLsldBnkSet: invalid table number"
-msgstr ""
-
-#: InOut/widgets.cpp:4959 InOut/widgets.cpp:5022
-msgid "FLslidBnkSet: table too short!"
-msgstr ""
-
-#: InOut/widgets.cpp:4967 InOut/widgets.cpp:5031
-msgid "FLsldBnkSet: invalid outable number"
-msgstr ""
-
-#: InOut/widgets.cpp:4972 InOut/widgets.cpp:5037
-msgid "FLslidBnkSet: too many sliders to reset!"
-msgstr ""
-
-#: InOut/widgets.cpp:4995
-msgid "FLslidBnkSet: function mapping not available"
-msgstr ""
-
-#: InOut/widgets.cpp:5064 InOut/widgets.cpp:5149 InOut/widgets.cpp:5236
-msgid ""
-"FLslidBnk2Setk: value out of range: function mapping requires a 0 to 1 range "
-"for input"
-msgstr ""
-
-#: InOut/widgets.cpp:5093
-msgid "FLsldBnkSetk: invalid table number"
-msgstr ""
-
-#: InOut/widgets.cpp:5097 InOut/widgets.cpp:5183
-msgid "FLslidBnkSetk: table too short!"
-msgstr ""
-
-#: InOut/widgets.cpp:5105
-msgid "FLsldBnkSetk: invalid outable number"
-msgstr ""
-
-#: InOut/widgets.cpp:5111 InOut/widgets.cpp:5197
-msgid "FLslidBnkSetk: too many sliders to reset!"
-msgstr ""
-
-#: InOut/widgets.cpp:5179
-msgid "FLslidBnkSetk: invalid table number"
-msgstr ""
-
-#: InOut/widgets.cpp:5191
-msgid "FLslidBnkSetk: invalid outable number"
-msgstr ""
-
-#: InOut/widgets.cpp:5268
-msgid "FLxyin: none of X limits can be zero in exponential mode!"
-msgstr ""
-
-#: InOut/widgets.cpp:5294
-msgid "FLxyin: none of Y limits can be zero in exponential mode!"
-msgstr ""
-
 #: InOut/winascii.c:75
 #, c-format
 msgid "%s\t%ld points, scalemax %5.3f\n"
 msgstr ""
 
-#: InOut/windin.c:46 Opcodes/pitch.c:82 Opcodes/spectra.c:76
+#: InOut/windin.c:46 Opcodes/pitch.c:83 Opcodes/spectra.c:78
 msgid "illegal iprd"
 msgstr ""
 
@@ -3795,46 +3529,60 @@ msgstr ""
 msgid "widgets.cpp: error allocating FLTK flags"
 msgstr ""
 
-#: OOps/aops.c:95 OOps/aops.c:119
+#: InOut/winFLTK.c:124 InOut/winFLTK.c:137
+#: InOut/virtual_keyboard/virtual_keyboard.cpp:443
+#, c-format
+msgid "Error registering opcode '%s'"
+msgstr ""
+
+#: InOut/virtual_keyboard/virtual_keyboard.cpp:435
+msgid "virtual_keyboard.cpp: error allocating FLTK flags"
+msgstr ""
+
+#: OOps/aops.c:120 OOps/aops.c:144
 #, c-format
 msgid "Cannot be more In arguments than Out in init (%d,%d)"
 msgstr ""
 
-#: OOps/aops.c:175 OOps/aops.c:194
+#: OOps/aops.c:200 OOps/aops.c:219
 #, c-format
 msgid "Index %d out of range [0,%d] in t[]\n"
 msgstr ""
 
-#: OOps/aops.c:184
-msgid "Vector notinitialised\n"
+#: OOps/aops.c:209
+msgid "Vector not initialised\n"
 msgstr ""
 
-#: OOps/aops.c:686
+#: OOps/aops.c:711
 msgid "non-looping sample"
 msgstr ""
 
-#: OOps/aops.c:828 OOps/aops.c:856
+#: OOps/aops.c:853 OOps/aops.c:881
 #, c-format
 msgid "No tuning table %d"
 msgstr ""
 
-#: OOps/aops.c:901 OOps/aops.c:939
+#: OOps/aops.c:926 OOps/aops.c:964
 msgid "cpstun: invalid table"
 msgstr ""
 
-#: OOps/aops.c:1189
+#: OOps/aops.c:1214
 msgid "Input and output argument count differs in inch"
 msgstr ""
 
-#: OOps/aops.c:1193
+#: OOps/aops.c:1218
 #, c-format
 msgid "Input channel %d too large; ignored"
 msgstr ""
 
-#: OOps/aops.c:1667
+#: OOps/aops.c:1698
 msgid "k-rate invalue ChannelName cannot start with $"
 msgstr ""
 
+#: OOps/aops.c:1835
+msgid "Unknown functuon called"
+msgstr ""
+
 #: OOps/bus.c:313 OOps/bus.c:345
 msgid "chani: invalid index"
 msgstr ""
@@ -4117,7 +3865,7 @@ msgstr ""
 msgid "dispfft: not initialised"
 msgstr ""
 
-#: OOps/disprep.c:435 Opcodes/spectra.c:516
+#: OOps/disprep.c:435 Opcodes/spectra.c:518
 msgid "illegal iperiod"
 msgstr ""
 
@@ -4181,15 +3929,15 @@ msgstr ""
 msgid " *** fftlib.c: internal error: invalid FFT size: %d"
 msgstr ""
 
-#: OOps/goto_ops.c:92
+#: OOps/goto_ops.c:93
 msgid "negative time period"
 msgstr ""
 
-#: OOps/goto_ops.c:182
+#: OOps/goto_ops.c:186
 msgid "turnoff2: invalid instrument number"
 msgstr ""
 
-#: OOps/goto_ops.c:187
+#: OOps/goto_ops.c:191
 msgid "turnoff2: invalid mode parameter"
 msgstr ""
 
@@ -4206,7 +3954,7 @@ msgid "cpstabm: invalid modulator table"
 msgstr ""
 
 #: OOps/midiops.c:304 OOps/midiops.c:314 OOps/midiops.c:334 OOps/midiops.c:344
-#: OOps/midiops.c:421 OOps/midiops.c:435 Opcodes/gab/sliderTable.c:563
+#: OOps/midiops.c:421 OOps/midiops.c:435 Opcodes/gab/sliderTable.c:567
 #: Opcodes/midiops2.c:56 Opcodes/midiops2.c:73 Opcodes/midiops2.c:111
 #: Opcodes/midiops2.c:145 Opcodes/midiops2.c:206 Opcodes/midiops2.c:237
 #: Opcodes/midiops2.c:298 Opcodes/midiops2.c:317 Opcodes/midiops2.c:357
@@ -4222,7 +3970,7 @@ msgstr ""
 msgid "illegal mrtmsg argument"
 msgstr ""
 
-#: OOps/midiout.c:383
+#: OOps/midiout.c:389
 #, c-format
 msgid "out contr14 msb:%x lsb:%x\n"
 msgstr ""
@@ -4684,148 +4432,148 @@ msgstr ""
 msgid "Unknown window type; replaced by rectangular\n"
 msgstr ""
 
-#: OOps/pvsanal.c:1025
+#: OOps/pvsanal.c:1027
 msgid "pvsynth: Not Initialised.\n"
 msgstr ""
 
-#: OOps/remote.c:100
+#: OOps/remote.c:103
 msgid "insufficient memory to initialise remote globals."
 msgstr ""
 
-#: OOps/remote.c:109
+#: OOps/remote.c:112
 msgid "insufficient memory to initialise outgoing socket table."
 msgstr ""
 
-#: OOps/remote.c:116
+#: OOps/remote.c:119
 msgid "insufficient memory to initialise incoming socket table."
 msgstr ""
 
-#: OOps/remote.c:124
+#: OOps/remote.c:127
 msgid "insufficient memory to initialise insrfd_list."
 msgstr ""
 
-#: OOps/remote.c:132
+#: OOps/remote.c:135
 msgid "insufficient memory to initialise chnrfd_list."
 msgstr ""
 
-#: OOps/remote.c:139
+#: OOps/remote.c:142
 msgid "insufficient memory to initialise insrfd table."
 msgstr ""
 
-#: OOps/remote.c:146
+#: OOps/remote.c:149
 msgid "insufficient memory to initialise chnrfd table."
 msgstr ""
 
-#: OOps/remote.c:153
+#: OOps/remote.c:156
 msgid "insufficient memory to initialise local ip address."
 msgstr ""
 
-#: OOps/remote.c:161
+#: OOps/remote.c:164
 msgid "unable to get local ip address."
 msgstr ""
 
-#: OOps/remote.c:222
+#: OOps/remote.c:225
 msgid "could not open remote port"
 msgstr ""
 
-#: OOps/remote.c:237
+#: OOps/remote.c:240
 msgid "---> Could not connect \n"
 msgstr ""
 
-#: OOps/remote.c:241
+#: OOps/remote.c:244
 msgid "---> Failed all attempts to connect. \n"
 msgstr ""
 
-#: OOps/remote.c:244
+#: OOps/remote.c:247
 msgid "--->  Connected. \n"
 msgstr ""
 
-#: OOps/remote.c:258 Opcodes/socksend.c:232
+#: OOps/remote.c:261 Opcodes/socksend.c:305
 msgid "write to socket failed"
 msgstr ""
 
-#: OOps/remote.c:278
+#: OOps/remote.c:281
 msgid "creating socket\n"
 msgstr ""
 
-#: OOps/remote.c:280
+#: OOps/remote.c:283
 msgid "created socket \n"
 msgstr ""
 
-#: OOps/remote.c:292
+#: OOps/remote.c:295
 msgid "setting socket option to reuse the addresse \n"
 msgstr ""
 
-#: OOps/remote.c:309 Opcodes/sockrecv.c:133 Opcodes/sockrecv.c:223
-#: Opcodes/socksend.c:211
+#: OOps/remote.c:312 Opcodes/sockrecv.c:141 Opcodes/sockrecv.c:237
+#: Opcodes/socksend.c:284
 msgid "bind failed"
 msgstr ""
 
-#: OOps/remote.c:313 Opcodes/socksend.c:216
+#: OOps/remote.c:316 Opcodes/socksend.c:289
 msgid "listen failed"
 msgstr ""
 
-#: OOps/remote.c:318 Opcodes/socksend.c:222
+#: OOps/remote.c:321 Opcodes/socksend.c:295
 msgid "accept failed"
 msgstr ""
 
-#: OOps/remote.c:321
+#: OOps/remote.c:324
 #, c-format
 msgid "accepted, conn=%d \n"
 msgstr ""
 
-#: OOps/remote.c:353 OOps/remote.c:374 OOps/remote.c:417 OOps/remote.c:449
-#: OOps/remote.c:489
+#: OOps/remote.c:356 OOps/remote.c:377 OOps/remote.c:420 OOps/remote.c:452
+#: OOps/remote.c:492
 msgid "failed to initialise remote globals."
 msgstr ""
 
-#: OOps/remote.c:378 OOps/remote.c:421
+#: OOps/remote.c:381 OOps/remote.c:424
 msgid "missing instr nos"
 msgstr ""
 
-#: OOps/remote.c:390 OOps/remote.c:430
+#: OOps/remote.c:393 OOps/remote.c:433
 msgid "illegal instr no"
 msgstr ""
 
-#: OOps/remote.c:393
+#: OOps/remote.c:396
 msgid "insno already remote"
 msgstr ""
 
-#: OOps/remote.c:403 OOps/remote.c:474
+#: OOps/remote.c:406 OOps/remote.c:477
 msgid "Failed to open port to listen"
 msgstr ""
 
-#: OOps/remote.c:423
+#: OOps/remote.c:426
 #, c-format
 msgid "*** str1: %s own:%s\n"
 msgstr ""
 
-#: OOps/remote.c:433
+#: OOps/remote.c:436
 msgid "insno already specific remote"
 msgstr ""
 
-#: OOps/remote.c:453 OOps/remote.c:493
+#: OOps/remote.c:456 OOps/remote.c:496
 msgid "missing channel nos"
 msgstr ""
 
-#: OOps/remote.c:463 OOps/remote.c:502
+#: OOps/remote.c:466 OOps/remote.c:505
 msgid "illegal channel no"
 msgstr ""
 
-#: OOps/remote.c:466
+#: OOps/remote.c:469
 msgid "channel already remote"
 msgstr ""
 
-#: OOps/remote.c:505
+#: OOps/remote.c:508
 msgid "channel already specific remote"
 msgstr ""
 
-#: OOps/remote.c:531 OOps/remote.c:555 OOps/remote.c:579
+#: OOps/remote.c:534 OOps/remote.c:558 OOps/remote.c:582
 msgid "CLsend failed"
 msgstr ""
 
-#: OOps/remote.c:645 OOps/remote.c:653 OOps/remote.c:661 OOps/remote.c:669
-#: OOps/remote.c:677
+#: OOps/remote.c:648 OOps/remote.c:656 OOps/remote.c:664 OOps/remote.c:672
+#: OOps/remote.c:680
 msgid ""
 "*** This version of Csound was not compiled with remote event support ***\n"
 msgstr ""
@@ -4934,53 +4682,53 @@ msgstr ""
 msgid "linseg: not initialised (arate)\n"
 msgstr ""
 
-#: OOps/ugens1.c:463 OOps/ugens1.c:465 OOps/ugens1.c:512 OOps/ugens1.c:514
-#: OOps/ugens1.c:564 OOps/ugens1.c:566 OOps/ugens1.c:610 OOps/ugens1.c:612
-#: OOps/ugens1.c:774 OOps/ugens1.c:776
+#: OOps/ugens1.c:464 OOps/ugens1.c:466 OOps/ugens1.c:513 OOps/ugens1.c:515
+#: OOps/ugens1.c:565 OOps/ugens1.c:567 OOps/ugens1.c:611 OOps/ugens1.c:613
+#: OOps/ugens1.c:775 OOps/ugens1.c:777
 #, c-format
 msgid "ival%d is zero"
 msgstr ""
 
-#: OOps/ugens1.c:466 OOps/ugens1.c:515 OOps/ugens1.c:567 OOps/ugens1.c:613
-#: OOps/ugens1.c:777
+#: OOps/ugens1.c:467 OOps/ugens1.c:516 OOps/ugens1.c:568 OOps/ugens1.c:614
+#: OOps/ugens1.c:778
 #, c-format
 msgid "ival%d sign conflict"
 msgstr ""
 
-#: OOps/ugens1.c:495 OOps/ugens1.c:544
+#: OOps/ugens1.c:496 OOps/ugens1.c:545
 #, c-format
 msgid "Breakpoint time %f not valid"
 msgstr ""
 
-#: OOps/ugens1.c:706
+#: OOps/ugens1.c:707
 msgid "expseg (krate): not initialised"
 msgstr ""
 
-#: OOps/ugens1.c:732
+#: OOps/ugens1.c:733
 msgid "expseg (arate): not initialised"
 msgstr ""
 
-#: OOps/ugens1.c:1013 OOps/ugens1.c:1149 OOps/ugens1.c:1311
+#: OOps/ugens1.c:1014 OOps/ugens1.c:1150 OOps/ugens1.c:1312
 msgid "non-positive iatdec"
 msgstr ""
 
-#: OOps/ugens1.c:1106 OOps/ugens1.c:1273
+#: OOps/ugens1.c:1107 OOps/ugens1.c:1274
 msgid "ixmod out of range."
 msgstr ""
 
-#: OOps/ugens1.c:1134 OOps/ugens1.c:1301
+#: OOps/ugens1.c:1135 OOps/ugens1.c:1302
 msgid "rise func ends with zero"
 msgstr ""
 
-#: OOps/ugens1.c:1178 OOps/ugens1.c:1257
+#: OOps/ugens1.c:1179 OOps/ugens1.c:1258
 msgid "envlpx rise func ends with zero"
 msgstr ""
 
-#: OOps/ugens1.c:1199 OOps/ugens1.c:1254
+#: OOps/ugens1.c:1200 OOps/ugens1.c:1255
 msgid "envlpx(krate): not initialised"
 msgstr ""
 
-#: OOps/ugens2.c:48 OOps/ugens2.c:61 Opcodes/shape.c:377
+#: OOps/ugens2.c:48 OOps/ugens2.c:61 Opcodes/shape.c:379
 msgid "init phase truncation\n"
 msgstr ""
 
@@ -5044,8 +4792,8 @@ msgid "oscil(krate): not initialised"
 msgstr ""
 
 #: OOps/ugens2.c:1139 OOps/ugens2.c:1167 OOps/ugens2.c:1192 OOps/ugens2.c:1219
-#: Opcodes/pitch.c:1579 Opcodes/pitch.c:1606 Opcodes/pitch.c:1633
-#: Opcodes/pitch.c:1662
+#: Opcodes/pitch.c:1580 Opcodes/pitch.c:1607 Opcodes/pitch.c:1634
+#: Opcodes/pitch.c:1663
 msgid "oscil: not initialised"
 msgstr ""
 
@@ -5161,7 +4909,7 @@ msgstr ""
 msgid "Seeding from current time %lu\n"
 msgstr ""
 
-#: OOps/ugens5.c:198 OOps/ugens5.c:260 Opcodes/gab/gab.c:45 Opcodes/ugsc.c:188
+#: OOps/ugens5.c:198 OOps/ugens5.c:260 Opcodes/gab/gab.c:47 Opcodes/ugsc.c:186
 #, c-format
 msgid "illegal reson iscl value, %f"
 msgstr ""
@@ -5393,8 +5141,8 @@ msgstr ""
 msgid "Table no. < 1 dft=%.2f  sft=%.2f"
 msgstr ""
 
-#: OOps/ugrw1.c:1781 OOps/ugrw1.c:1822 Opcodes/fareyseq.c:455
-#: Opcodes/fareyseq.c:477
+#: OOps/ugrw1.c:1781 OOps/ugrw1.c:1822 Opcodes/fareyseq.c:453
+#: Opcodes/fareyseq.c:475
 #, c-format
 msgid "Source sft table %.2f not found."
 msgstr ""
@@ -5624,19 +5372,19 @@ msgstr ""
 msgid "reverbx: not initialised"
 msgstr ""
 
-#: Opcodes/ambicode1.c:80
+#: Opcodes/ambicode1.c:82
 msgid "The numbers of input and output arguments are not valid."
 msgstr ""
 
-#: Opcodes/ambicode1.c:163
+#: Opcodes/ambicode1.c:165
 msgid "The number of input arguments is not valid."
 msgstr ""
 
-#: Opcodes/ambicode1.c:167
+#: Opcodes/ambicode1.c:169
 msgid "The isetup value should be between 1 and 5."
 msgstr ""
 
-#: Opcodes/ambicode1.c:193
+#: Opcodes/ambicode1.c:195
 msgid "The output channel count does not match the isetup value."
 msgstr ""
 
@@ -5676,16 +5424,16 @@ msgstr ""
 msgid "Not supported setup number!"
 msgstr ""
 
-#: Opcodes/babo.c:740
+#: Opcodes/babo.c:742
 #, c-format
 msgid "Babo: resonator dimensions are incorrect (%.1f, %.1f, %.1f)"
 msgstr ""
 
-#: Opcodes/bilbar.c:82
+#: Opcodes/bilbar.c:83
 msgid "No data to continue"
 msgstr ""
 
-#: Opcodes/bilbar.c:108
+#: Opcodes/bilbar.c:109
 msgid "Ends must be clamped(1), pivoting(2) or free(3)"
 msgstr ""
 
@@ -5698,8 +5446,8 @@ msgstr ""
 msgid "DLineN: Delay length too big ... setting to maximum length of %ld.\n"
 msgstr ""
 
-#: Opcodes/bowedbar.c:98 Opcodes/physmod.c:489
-msgid "unknown lowest frequency for bowed string -- assuming 50Hz\n"
+#: Opcodes/bowedbar.c:98
+msgid "unknown lowest frequency for bowed bar -- assuming 50Hz\n"
 msgstr ""
 
 #: Opcodes/clfilt.c:53
@@ -5777,17 +5525,17 @@ msgstr ""
 msgid "Unknown control %d"
 msgstr ""
 
-#: Opcodes/cpumeter.c:73
+#: Opcodes/cpumeter.c:77
 #, c-format
 msgid "Failed to open /proc/stat: %s"
 msgstr ""
 
-#: Opcodes/cpumeter.c:75 Opcodes/cpumeter.c:80 Opcodes/cpumeter.c:107
-#: Opcodes/cpumeter.c:147
+#: Opcodes/cpumeter.c:79 Opcodes/cpumeter.c:84 Opcodes/cpumeter.c:111
+#: Opcodes/cpumeter.c:151
 msgid "failed /proc/stat read"
 msgstr ""
 
-#: Opcodes/crossfm.c:33
+#: Opcodes/crossfm.c:34
 msgid "crossfm: ftable not found"
 msgstr ""
 
@@ -5828,31 +5576,31 @@ msgstr ""
 msgid "insufficient arguments for fareytable"
 msgstr ""
 
-#: Opcodes/fareyseq.c:250 Opcodes/fareyseq.c:300
+#: Opcodes/fareyseq.c:251 Opcodes/fareyseq.c:301
 #, c-format
 msgid "Farey: Table no. < 1 dft=%.2f  sft=%.2f"
 msgstr ""
 
-#: Opcodes/fareyseq.c:255
+#: Opcodes/fareyseq.c:256
 #, c-format
 msgid "Farey: Filter type < 1 dft=%.2f  sft=%.2f"
 msgstr ""
 
-#: Opcodes/fareyseq.c:270 Opcodes/fareyseq.c:318
+#: Opcodes/fareyseq.c:271 Opcodes/fareyseq.c:319
 #, c-format
 msgid "Farey: Destination dft table %.2f not found."
 msgstr ""
 
-#: Opcodes/fareyseq.c:281 Opcodes/fareyseq.c:329
+#: Opcodes/fareyseq.c:282 Opcodes/fareyseq.c:330
 #, c-format
 msgid "Farey: Source sft table %.2f not found."
 msgstr ""
 
-#: Opcodes/fareyseq.c:305
+#: Opcodes/fareyseq.c:306
 msgid "Farey: Filter type < 1"
 msgstr ""
 
-#: Opcodes/fareyseq.c:447 Opcodes/fareyseq.c:468
+#: Opcodes/fareyseq.c:445 Opcodes/fareyseq.c:466
 #, c-format
 msgid "Table no. < 1 sft=%.2f"
 msgstr ""
@@ -5960,45 +5708,45 @@ msgstr ""
 msgid "follow - zero length!"
 msgstr ""
 
-#: Opcodes/fout.c:59
+#: Opcodes/fout.c:60
 #, c-format
 msgid "Closing file '%s'...\n"
 msgstr ""
 
-#: Opcodes/fout.c:101
+#: Opcodes/fout.c:102
 msgid "invalid file handle"
 msgstr ""
 
-#: Opcodes/fout.c:108 Opcodes/fout.c:420
+#: Opcodes/fout.c:109 Opcodes/fout.c:421
 msgid "invalid file name"
 msgstr ""
 
-#: Opcodes/fout.c:165
+#: Opcodes/fout.c:166
 #, c-format
 msgid "error opening file '%s'"
 msgstr ""
 
-#: Opcodes/fout.c:192
+#: Opcodes/fout.c:193
 #, c-format
 msgid "error opening sound file '%s'"
 msgstr ""
 
-#: Opcodes/fout.c:429
+#: Opcodes/fout.c:430
 #, c-format
 msgid "cannot close '%s': not found in list of open files"
 msgstr ""
 
-#: Opcodes/fout.c:440
+#: Opcodes/fout.c:441
 #, c-format
 msgid "cannot close file #%d: not a valid handle"
 msgstr ""
 
-#: Opcodes/fout.c:447
+#: Opcodes/fout.c:448
 #, c-format
 msgid "file #%d (%s) is in use, will be closed when released"
 msgstr ""
 
-#: Opcodes/fout.c:476 Opcodes/fout.c:479 Opcodes/fout.c:550 Opcodes/fout.c:553
+#: Opcodes/fout.c:477 Opcodes/fout.c:480 Opcodes/fout.c:551 Opcodes/fout.c:554
 msgid "fouti: invalid file handle"
 msgstr ""
 
@@ -6076,554 +5824,688 @@ msgstr ""
 msgid "ftsave: failed to write file"
 msgstr ""
 
-#: Opcodes/gab/gab.c:109
+#: Opcodes/gab/gab.c:111
 msgid "fastab: incorrect table number"
 msgstr ""
 
-#: Opcodes/gab/gab.c:132 Opcodes/gab/gab.c:141 Opcodes/gab/gab.c:171
+#: Opcodes/gab/gab.c:134 Opcodes/gab/gab.c:143 Opcodes/gab/gab.c:173
 msgid "tabw off end"
 msgstr ""
 
-#: Opcodes/gab/gab.c:157 Opcodes/gab/gab.c:225 Opcodes/gab/gab.c:234
+#: Opcodes/gab/gab.c:159 Opcodes/gab/gab.c:227 Opcodes/gab/gab.c:236
 msgid "tab off end"
 msgstr ""
 
-#: Opcodes/gab/gab.c:183
+#: Opcodes/gab/gab.c:185
 msgid "tab_i: incorrect table number"
 msgstr ""
 
-#: Opcodes/gab/gab.c:190
-msgid "tab_i off end"
+#: Opcodes/gab/gab.c:192
+#, c-format
+msgid "tab_i off end: table number: %d\n"
 msgstr ""
 
-#: Opcodes/gab/gab.c:202
+#: Opcodes/gab/gab.c:204
 msgid "tabw_i: incorrect table number"
 msgstr ""
 
-#: Opcodes/gab/gab.c:209
+#: Opcodes/gab/gab.c:211
 msgid "tabw_i off end"
 msgstr ""
 
-#: Opcodes/gab/gab.c:247
+#: Opcodes/gab/gab.c:249
 msgid "tab_init: incorrect table number"
 msgstr ""
 
-#: Opcodes/gab/gab.c:316
+#: Opcodes/gab/gab.c:318
 msgid "printi parameter was not a \"quoted string\""
 msgstr ""
 
-#: Opcodes/gab/gab.c:423
+#: Opcodes/gab/gab.c:425
 msgid "adsynt2: wavetable not found!"
 msgstr ""
 
-#: Opcodes/gab/gab.c:435
+#: Opcodes/gab/gab.c:437
 msgid "adsynt2: freqtable not found!"
 msgstr ""
 
-#: Opcodes/gab/gab.c:440
+#: Opcodes/gab/gab.c:442
 msgid "adsynt2: partial count is greater than freqtable size!"
 msgstr ""
 
-#: Opcodes/gab/gab.c:449
+#: Opcodes/gab/gab.c:451
 msgid "adsynt2: amptable not found!"
 msgstr ""
 
-#: Opcodes/gab/gab.c:454
+#: Opcodes/gab/gab.c:456
 msgid "adsynt2: partial count is greater than amptable size!"
 msgstr ""
 
-#: Opcodes/gab/gab.c:499
+#: Opcodes/gab/gab.c:501
 msgid "adsynt2: not initialised"
 msgstr ""
 
-#: Opcodes/gab/gab.c:741
+#: Opcodes/gab/gab.c:743
 msgid "max_k: invalid imaxflag value"
 msgstr ""
 
-#: Opcodes/gab/hvs.c:68
+#: Opcodes/gab/hvs.c:70
 msgid "hvs1: a line segment must be delimited by 2 points at least"
 msgstr ""
 
-#: Opcodes/gab/hvs.c:150
+#: Opcodes/gab/hvs.c:152
 msgid "hvs2: a square area must be delimited by 2 lines at least"
 msgstr ""
 
-#: Opcodes/gab/hvs.c:246
+#: Opcodes/gab/hvs.c:248
 msgid "hvs3: a square area must be delimited by 2 lines at least"
 msgstr ""
 
-#: Opcodes/gab/hvs.c:389
+#: Opcodes/gab/hvs.c:390
 msgid "vphaseseg: the first function is invalid or missing"
 msgstr ""
 
-#: Opcodes/gab/hvs.c:396
+#: Opcodes/gab/hvs.c:398 Opcodes/gab/vectorial.c:2301
 msgid "vphaseseg: invalid num. of elements"
 msgstr ""
 
-#: Opcodes/gab/hvs.c:414
+#: Opcodes/gab/hvs.c:416
 msgid "vphaseseg: function invalid or missing"
 msgstr ""
 
-#: Opcodes/gab/newgabopc.c:39 Opcodes/gab/newgabopc.c:54
+#: Opcodes/gab/newgabopc.c:40 Opcodes/gab/newgabopc.c:55
 msgid "vtable1: incorrect table number"
 msgstr ""
 
-#: Opcodes/gab/newgabopc.c:359
+#: Opcodes/gab/newgabopc.c:241 Opcodes/gab/newgabopc.c:296
+msgid "copyTabElems: incorrect destination table number"
+msgstr ""
+
+#: Opcodes/gab/newgabopc.c:246 Opcodes/gab/newgabopc.c:301
+msgid ""
+"copyTabElems: destination table too short or number of elements to copy too "
+"big"
+msgstr ""
+
+#: Opcodes/gab/newgabopc.c:252 Opcodes/gab/newgabopc.c:306
+msgid "copyTabElems: incorrect source table number"
+msgstr ""
+
+#: Opcodes/gab/newgabopc.c:257 Opcodes/gab/newgabopc.c:310
+msgid ""
+"copyTabElems: source table size less than the number of elements to copy"
+msgstr ""
+
+#: Opcodes/gab/newgabopc.c:273 Opcodes/gab/newgabopc.c:318
+msgid "copyTabElems: source table too short"
+msgstr ""
+
+#: Opcodes/gab/newgabopc.c:276 Opcodes/gab/newgabopc.c:321
+msgid "copyTabElems: destination table too short"
+msgstr ""
+
+#: Opcodes/gab/newgabopc.c:347
+msgid "inrg: audio input is not enabled"
+msgstr ""
+
+#: Opcodes/gab/newgabopc.c:362
 msgid "inrg: channel number cannot be < 1 (1 is the first channel)"
 msgstr ""
 
-#: Opcodes/gab/newgabopc.c:400
+#: Opcodes/gab/newgabopc.c:403
 msgid "outrg: channel number cannot be < 1 (1 is the first channel)"
 msgstr ""
 
-#: Opcodes/gab/newgabopc.c:439 Opcodes/gab/newgabopc.c:671
+#: Opcodes/gab/newgabopc.c:440 Opcodes/gab/newgabopc.c:574
+#: Opcodes/gab/newgabopc.c:672
 msgid "invalid function"
 msgstr ""
 
-#: Opcodes/gab/newgabopc.c:442
+#: Opcodes/gab/newgabopc.c:443
 msgid "lposc: no sample rate stored in function; assuming=sr\n"
 msgstr ""
 
-#: Opcodes/gab/newgabopc.c:673
+#: Opcodes/gab/newgabopc.c:577
+msgid "lposcil: no sample rate stored in function assuming=sr\n"
+msgstr ""
+
+#: Opcodes/gab/newgabopc.c:674
 msgid "lposcil: no sample rate stored in function; assuming=sr\n"
 msgstr ""
 
-#: Opcodes/gab/sliderTable.c:45 Opcodes/gab/sliderTable.c:254
+#: Opcodes/gab/sliderTable.c:47 Opcodes/gab/sliderTable.c:256
 #: Opcodes/midiops3.c:44 Opcodes/midiops3.c:146 Opcodes/midiops3.c:259
 #: Opcodes/midiops3.c:317 Opcodes/midiops3.c:413
 msgid "illegal channel"
 msgstr ""
 
-#: Opcodes/gab/sliderTable.c:65 Opcodes/gab/sliderTable.c:277
+#: Opcodes/gab/sliderTable.c:67 Opcodes/gab/sliderTable.c:280
 #: Opcodes/midiops3.c:58 Opcodes/midiops3.c:162 Opcodes/midiops3.c:273
 #, c-format
 msgid "illegal control number at position n.%d"
 msgstr ""
 
-#: Opcodes/gab/sliderTable.c:74
+#: Opcodes/gab/sliderTable.c:76
 #, c-format
 msgid ""
 "sliderXtable: illegal initvalue at position %d.  When using table indexing, "
 "the init range is 0 to 1"
 msgstr ""
 
-#: Opcodes/gab/sliderTable.c:84 Opcodes/gab/sliderTable.c:284
-#: Opcodes/gab/sliderTable.c:509 Opcodes/midiops3.c:64 Opcodes/midiops3.c:168
+#: Opcodes/gab/sliderTable.c:86 Opcodes/gab/sliderTable.c:287
+#: Opcodes/gab/sliderTable.c:513 Opcodes/midiops3.c:64 Opcodes/midiops3.c:168
 #: Opcodes/midiops3.c:347
 #, c-format
 msgid "illegal initvalue at position n.%d"
 msgstr ""
 
-#: Opcodes/gab/sliderTable.c:96 Opcodes/gab/sliderTable.c:296
+#: Opcodes/gab/sliderTable.c:98 Opcodes/gab/sliderTable.c:299
 msgid "sliderXtable: zero is illegal in exponential operations"
 msgstr ""
 
-#: Opcodes/gab/sliderTable.c:312
+#: Opcodes/gab/sliderTable.c:315
 #, c-format
 msgid ""
 "sliderXtable: illegal initvalue at position %d. When using table indexing, "
 "the init range is 0 to 1"
 msgstr ""
 
-#: Opcodes/gab/sliderTable.c:565 Opcodes/midiops2.c:321 Opcodes/midiops2.c:359
+#: Opcodes/gab/sliderTable.c:569 Opcodes/midiops2.c:321 Opcodes/midiops2.c:359
 #: Opcodes/midiops2.c:391 Opcodes/midiops2.c:440 Opcodes/midiops2.c:475
 #: Opcodes/midiops2.c:517 Opcodes/midiops2.c:532 Opcodes/midiops2.c:551
 msgid "illegal midi channel"
 msgstr ""
 
-#: Opcodes/gab/tabmorph.c:42
+#: Opcodes/gab/tabmorph.c:43
 msgid "tabmorph: invalid table number"
 msgstr ""
 
-#: Opcodes/gab/tabmorph.c:46
+#: Opcodes/gab/tabmorph.c:47
 msgid "tabmorph: all tables must have the same length!"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:33
+#: Opcodes/gab/vectorial.c:35
 msgid "mtablei: incorrect table number"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:63 Opcodes/gab/vectorial.c:83
-#: Opcodes/gab/vectorial.c:133 Opcodes/gab/vectorial.c:200
+#: Opcodes/gab/vectorial.c:65 Opcodes/gab/vectorial.c:85
+#: Opcodes/gab/vectorial.c:135 Opcodes/gab/vectorial.c:202
 msgid "mtable: incorrect table number"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:185
+#: Opcodes/gab/vectorial.c:187
 msgid "mtabi: incorrect table number"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:252
+#: Opcodes/gab/vectorial.c:254
 msgid "mtablewi: incorrect table number"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:268 Opcodes/gab/vectorial.c:288
-#: Opcodes/gab/vectorial.c:317 Opcodes/gab/vectorial.c:362
-#: Opcodes/gab/vectorial.c:406
+#: Opcodes/gab/vectorial.c:270 Opcodes/gab/vectorial.c:290
+#: Opcodes/gab/vectorial.c:319 Opcodes/gab/vectorial.c:364
+#: Opcodes/gab/vectorial.c:408
 msgid "mtabw: incorrect table number"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:348
+#: Opcodes/gab/vectorial.c:350
 msgid "mtabwi: incorrect table number"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:380
+#: Opcodes/gab/vectorial.c:382
 msgid "mtablew: incorrect table number"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:454 Opcodes/gab/vectorial.c:513
+#: Opcodes/gab/vectorial.c:457 Opcodes/gab/vectorial.c:516
 #, c-format
 msgid "vadd_i: invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:470
+#: Opcodes/gab/vectorial.c:473
 msgid "vadd_i: ifn length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:497
+#: Opcodes/gab/vectorial.c:500
 msgid "vadd: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:529
+#: Opcodes/gab/vectorial.c:532
 msgid "vmult_i: ifn length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:556
+#: Opcodes/gab/vectorial.c:559
 msgid "vmult: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:572
+#: Opcodes/gab/vectorial.c:575
 #, c-format
 msgid "vpow_i: invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:589
+#: Opcodes/gab/vectorial.c:592
 msgid "vpow_i: ifn length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:617
+#: Opcodes/gab/vectorial.c:620
 msgid "vpow: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:633
+#: Opcodes/gab/vectorial.c:636
 #, c-format
 msgid "vexp_i: invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:649
+#: Opcodes/gab/vectorial.c:652
 msgid "vexp_i: ifn length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:676
+#: Opcodes/gab/vectorial.c:679
 msgid "vexp: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:694
+#: Opcodes/gab/vectorial.c:697
 #, c-format
 msgid "vectorsop: ifn1 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:699
+#: Opcodes/gab/vectorial.c:702
 #, c-format
 msgid "vectorsop: ifn2 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:738
+#: Opcodes/gab/vectorial.c:742
 msgid "vcopy: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:756
+#: Opcodes/gab/vectorial.c:760
 msgid "vcopy: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:783
+#: Opcodes/gab/vectorial.c:787
 #, c-format
 msgid "vcopy_i: ifn1 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:788
+#: Opcodes/gab/vectorial.c:792
 #, c-format
 msgid "vcopy_i: ifn2 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:810
+#: Opcodes/gab/vectorial.c:814
 msgid "vcopy_i: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:827
+#: Opcodes/gab/vectorial.c:831
 msgid "vcopy_i: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:866
+#: Opcodes/gab/vectorial.c:870
 msgid "vaddv: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:885
+#: Opcodes/gab/vectorial.c:889
 msgid "vaddv: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:911
+#: Opcodes/gab/vectorial.c:915
 #, c-format
 msgid "vaddv_i: ifn1 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:916
+#: Opcodes/gab/vectorial.c:920
 #, c-format
 msgid "vaddv_i: ifn2 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:938
+#: Opcodes/gab/vectorial.c:942
 msgid "vaddv_i: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:956
+#: Opcodes/gab/vectorial.c:960
 msgid "vaddv_i: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:987
+#: Opcodes/gab/vectorial.c:991
 msgid "vsubv: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1006
+#: Opcodes/gab/vectorial.c:1010
 msgid "vsubv: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1033
+#: Opcodes/gab/vectorial.c:1037
 #, c-format
 msgid "vsubv_i: ifn1 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1038
+#: Opcodes/gab/vectorial.c:1042
 #, c-format
 msgid "vsubv_i: ifn2 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1060
+#: Opcodes/gab/vectorial.c:1064
 msgid "vsubv_i: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1078
+#: Opcodes/gab/vectorial.c:1082
 msgid "vsubv_i: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1115
+#: Opcodes/gab/vectorial.c:1119
 msgid "vmultv: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1134
+#: Opcodes/gab/vectorial.c:1138
 msgid "vmultv: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1161
+#: Opcodes/gab/vectorial.c:1165
 #, c-format
 msgid "vmultv_i: ifn1 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1166
+#: Opcodes/gab/vectorial.c:1170
 #, c-format
 msgid "vmultv_i: ifn2 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1188
+#: Opcodes/gab/vectorial.c:1192
 msgid "vmultv_i: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1205
+#: Opcodes/gab/vectorial.c:1209
 msgid "vmultv_i: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1242
+#: Opcodes/gab/vectorial.c:1246
 msgid "vdivv: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1261
+#: Opcodes/gab/vectorial.c:1265
 msgid "vdivv: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1288
+#: Opcodes/gab/vectorial.c:1292
 #, c-format
 msgid "vdivv_i: ifn1 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1293
+#: Opcodes/gab/vectorial.c:1297
 #, c-format
 msgid "vdivv_i: ifn2 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1315
+#: Opcodes/gab/vectorial.c:1319
 msgid "vdivv_i: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1333
+#: Opcodes/gab/vectorial.c:1337
 msgid "vdivv_i: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1370
+#: Opcodes/gab/vectorial.c:1374
 msgid "vpowv: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1389
+#: Opcodes/gab/vectorial.c:1393
 msgid "vpowv: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1416
+#: Opcodes/gab/vectorial.c:1420
 #, c-format
 msgid "vpowv_i: ifn1 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1421
+#: Opcodes/gab/vectorial.c:1425
 #, c-format
 msgid "vpowv_i: ifn2 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1443
+#: Opcodes/gab/vectorial.c:1447
 msgid "vpowv_i: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1460
+#: Opcodes/gab/vectorial.c:1464
 msgid "vpowv_i: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1497
+#: Opcodes/gab/vectorial.c:1501
 msgid "vexpv: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1516
+#: Opcodes/gab/vectorial.c:1520
 msgid "vexpv: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1543
+#: Opcodes/gab/vectorial.c:1547
 #, c-format
 msgid "vexpv_i: ifn1 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1548
+#: Opcodes/gab/vectorial.c:1552
 #, c-format
 msgid "vexpv_i: ifn2 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1570
+#: Opcodes/gab/vectorial.c:1574
 msgid "vexpv_i: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1588
+#: Opcodes/gab/vectorial.c:1592
 msgid "vexpv_i: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1625
+#: Opcodes/gab/vectorial.c:1629
 msgid "vmap: Error: ifn1 and ifn2 can not be the same"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1630
+#: Opcodes/gab/vectorial.c:1634
 #, c-format
 msgid "vmap: ifn1 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1635
+#: Opcodes/gab/vectorial.c:1639
 #, c-format
 msgid "vmap: ifn2 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1657
+#: Opcodes/gab/vectorial.c:1661
 msgid "vmap: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1674
+#: Opcodes/gab/vectorial.c:1678
 msgid "vmap: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1870
+#: Opcodes/gab/vectorial.c:1698
+msgid "vectorop: invalid num of elements"
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:1727
+msgid "vport: invalid table length or num of elements"
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:1730
+msgid "vport: invalid table"
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:1735
+msgid "vport: invalid init table length or num of elements"
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:1738
+msgid "vport: invalid init table"
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:1875
 #, c-format
 msgid "vrandh: Seeding from current time %lu\n"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1968
+#: Opcodes/gab/vectorial.c:1888
+msgid "vrandh: Invalid table."
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:1891
+msgid "vrandh: idstoffset is greater than table length."
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:1896
+msgid "randh: Table length exceeded, last elements discarded."
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:1975
 #, c-format
 msgid "vrandi: Seeding from current time %lu\n"
 msgstr ""
 
-#: Opcodes/grain4.c:57
+#: Opcodes/gab/vectorial.c:1987
+msgid "vrandi: Invalid table."
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:1990
+msgid "vrandi: idstoffset is greater thantable length."
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:1995
+msgid "vrandi: Table length exceeded, last elements discarded."
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:2077 Opcodes/gab/vectorial.c:2084
+#: Opcodes/gab/vectorial.c:2091
+msgid "vecdelay: invalid num of elements"
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:2079
+msgid "vecdly: invalid output table"
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:2086
+msgid "vecdly: invalid input table"
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:2093
+msgid "vecdly: invalid delay table"
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:2138
+msgid "vecdly: not initialised"
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:2181
+msgid "vlinseg/vexpseg: invalid num. of elements"
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:2223 Opcodes/vpvoc.c:118
+msgid "tableseg: not initialised"
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:2253 Opcodes/vpvoc.c:146
+msgid "tablexseg: not initialised"
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:2406
+msgid "vdelayk: not initialised"
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:2439 Opcodes/gab/vectorial.c:2445
+msgid "cella: invalid num of elements"
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:2441
+msgid "cella: invalid output table"
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:2448
+msgid "cella: invalid initial state table"
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:2452
+msgid "cella: invalid rule table"
+msgstr ""
+
+#: Opcodes/grain4.c:59
 msgid "granule_set: Unable to find function table"
 msgstr ""
 
-#: Opcodes/grain4.c:67
+#: Opcodes/grain4.c:69
 msgid "granule_set: Unable to find function table for envelope"
 msgstr ""
 
-#: Opcodes/grain4.c:73
+#: Opcodes/grain4.c:75
 msgid "granule_set: Too many voices"
 msgstr ""
 
-#: Opcodes/grain4.c:76
+#: Opcodes/grain4.c:78
 msgid "granule_set: iratio must be greater then 0"
 msgstr ""
 
-#: Opcodes/grain4.c:80
+#: Opcodes/grain4.c:82
 msgid "granule_set: imode must be -1, 0 or +1"
 msgstr ""
 
-#: Opcodes/grain4.c:84
+#: Opcodes/grain4.c:86
 msgid "granule_set: Illegal ithd, must be greater than zero"
 msgstr ""
 
-#: Opcodes/grain4.c:89
+#: Opcodes/grain4.c:91
 msgid "granule_set: ipshift must be integer between 0 and 4"
 msgstr ""
 
-#: Opcodes/grain4.c:94
+#: Opcodes/grain4.c:96
 msgid "granule_set: Not enough voices for the number of pitches"
 msgstr ""
 
-#: Opcodes/grain4.c:101
+#: Opcodes/grain4.c:103
 msgid "granule_set: ipitch1 must be greater then zero"
 msgstr ""
 
-#: Opcodes/grain4.c:106
+#: Opcodes/grain4.c:108
 msgid "granule_set: ipitch2 must be greater then zero"
 msgstr ""
 
-#: Opcodes/grain4.c:111
+#: Opcodes/grain4.c:113
 msgid "granule_set: ipitch3 must be greater then zero"
 msgstr ""
 
-#: Opcodes/grain4.c:116
+#: Opcodes/grain4.c:118
 msgid "granule_set: ipitch4 must be greater then zero"
 msgstr ""
 
-#: Opcodes/grain4.c:121
+#: Opcodes/grain4.c:123
 msgid "granule_set: must be positive and less than function table length"
 msgstr ""
 
-#: Opcodes/grain4.c:125
+#: Opcodes/grain4.c:127
 msgid "granule_set: igskip_os must be greater then 0"
 msgstr ""
 
-#: Opcodes/grain4.c:134
+#: Opcodes/grain4.c:136
 msgid "granule_set: kgap must be greater then 0"
 msgstr ""
 
-#: Opcodes/grain4.c:138
+#: Opcodes/grain4.c:140
 #, c-format
 msgid "granule_set: igap_os must be 0%% to 100%%"
 msgstr ""
 
-#: Opcodes/grain4.c:142
+#: Opcodes/grain4.c:144
 msgid "granule_set: kgsize must be greater then 0"
 msgstr ""
 
-#: Opcodes/grain4.c:146
+#: Opcodes/grain4.c:148
 #, c-format
 msgid "granule_set: igsize_os must be 0%% to 100%%"
 msgstr ""
 
-#: Opcodes/grain4.c:152
+#: Opcodes/grain4.c:154
 msgid "granule_set: Illegal value of iatt and/or idec"
 msgstr ""
 
-#: Opcodes/grain4.c:236
+#: Opcodes/grain4.c:238
 msgid "granule_set: Illegal combination of igskip and ilength"
 msgstr ""
 
-#: Opcodes/grain4.c:243
+#: Opcodes/grain4.c:245
 #, c-format
 msgid ""
 "granule_set: WARNING * ilength may be too short * \n"
@@ -6633,7 +6515,7 @@ msgid ""
 "ilength is %f Sec, kgsize is %f Sec\n"
 msgstr ""
 
-#: Opcodes/grain4.c:418
+#: Opcodes/grain4.c:419
 msgid "grain4: not initialised"
 msgstr ""
 
@@ -6645,92 +6527,88 @@ msgstr ""
 msgid "grain: not initialised"
 msgstr ""
 
-#: Opcodes/harmon.c:224
+#: Opcodes/harmon.c:226
 msgid "harm signal has positive lead\n"
 msgstr ""
 
-#: Opcodes/harmon.c:231
+#: Opcodes/harmon.c:233
 msgid "harm signal has negative lead\n"
 msgstr ""
 
-#: Opcodes/harmon.c:361
+#: Opcodes/harmon.c:363
 msgid "harmon234: out of range\n"
 msgstr ""
 
-#: Opcodes/hrtferX.c:79
+#: Opcodes/hrtferX.c:81
 #, c-format
 msgid ""
 "Orchestra sampling rate is not compatible with HRTF.\n"
 "Should be %d...exiting."
 msgstr ""
 
-#: Opcodes/hrtferX.c:87
+#: Opcodes/hrtferX.c:89
 msgid ""
 "\n"
 "Last argument must be the string 'HRTFcompact' ...correcting.\n"
 msgstr ""
 
-#: Opcodes/hrtferX.c:489
+#: Opcodes/hrtferX.c:494
 msgid "hrtfer: not initialised"
 msgstr ""
 
-#: Opcodes/hrtfopcodes.c:232
+#: Opcodes/hrtfopcodes.c:260 Opcodes/hrtfopcodes.c:1434
+#: Opcodes/hrtfearly.c:300 Opcodes/hrtfreverb.c:257
 #, c-format
 msgid ""
 "\n"
-"Orchestra sampling rate is not compatible with HRTF data files\n"
-"Should be %.0f, see Csound help for object\n"
+"\n"
+"WARNING!!:\n"
+"Orchestra SR not compatible with HRTF processing SR of: %.0f\n"
 "\n"
 msgstr ""
 
-#: Opcodes/hrtfopcodes.c:251 Opcodes/hrtfopcodes.c:275
-#: Opcodes/hrtfopcodes.c:298 Opcodes/hrtfopcodes.c:1257
-#: Opcodes/hrtfopcodes.c:1280 Opcodes/hrtfopcodes.c:1303
-#: Opcodes/hrtfopcodes.c:1854 Opcodes/hrtfopcodes.c:1876
-#: Opcodes/hrtfopcodes.c:1898
+#: Opcodes/hrtfopcodes.c:287 Opcodes/hrtfopcodes.c:1461
+#: Opcodes/hrtfopcodes.c:2071 Opcodes/hrtfearly.c:327 Opcodes/hrtfreverb.c:300
 msgid ""
 "\n"
 "\n"
 "\n"
-"cannot load left data file, exiting\n"
+"Cannot load left data file, exiting\n"
 "\n"
 msgstr ""
 
-#: Opcodes/hrtfopcodes.c:259 Opcodes/hrtfopcodes.c:283
-#: Opcodes/hrtfopcodes.c:306 Opcodes/hrtfopcodes.c:1265
-#: Opcodes/hrtfopcodes.c:1288 Opcodes/hrtfopcodes.c:1311
-#: Opcodes/hrtfopcodes.c:1862 Opcodes/hrtfopcodes.c:1884
-#: Opcodes/hrtfopcodes.c:1906
+#: Opcodes/hrtfopcodes.c:294 Opcodes/hrtfopcodes.c:1468
+#: Opcodes/hrtfopcodes.c:2078 Opcodes/hrtfearly.c:334 Opcodes/hrtfreverb.c:306
 msgid ""
 "\n"
 "\n"
 "\n"
-"cannot load right data file, exiting\n"
+"Cannot load right data file, exiting\n"
 "\n"
 msgstr ""
 
-#: Opcodes/hrtfopcodes.c:313 Opcodes/hrtfopcodes.c:1912
+#: Opcodes/hrtfopcodes.c:690 Opcodes/hrtfearly.c:1241
 msgid ""
 "\n"
-"\n"
-"\n"
-" Sampling rate not supported, exiting\n"
+"WARNING: fades are overlapping: this could lead to noise: reduce fade size "
+"or change trajectory\n"
 "\n"
 msgstr ""
 
-#: Opcodes/hrtfopcodes.c:600
+#: Opcodes/hrtfopcodes.c:2052
+#, c-format
 msgid ""
-"fades are overlapping: this could lead to noise: reduce fade size or change "
-"trajectory\n"
+"\n"
+"\n"
+"WARNING!!:\n"
+"Orchestra SR not compatiblewith HRTF processing SR of: %.0f\n"
 "\n"
 msgstr ""
 
-#: Opcodes/hrtfopcodes.c:1239 Opcodes/hrtfopcodes.c:1837
-#, c-format
+#: Opcodes/hrtfreverb.c:832
 msgid ""
-"Orchestra sampling rate is not compatible with HRTF data files\n"
-"Should be %.0f, see Csound help for object\n"
 "\n"
+"warning, approaching instability, fixed with a flat late reverb!"
 msgstr ""
 
 #: Opcodes/ifd.c:74
@@ -6756,10 +6634,9 @@ msgid "imageload: file %s is not in PNG format.\n"
 msgstr ""
 
 #: Opcodes/imageOpcodes.c:119 Opcodes/imageOpcodes.c:126
-#: Opcodes/imageOpcodes.c:134 Opcodes/imageOpcodes.c:165
-#: Opcodes/imageOpcodes.c:174 Opcodes/imageOpcodes.c:188
-#: Opcodes/imageOpcodes.c:291 Opcodes/imageOpcodes.c:298
-#: Opcodes/imageOpcodes.c:311
+#: Opcodes/imageOpcodes.c:165 Opcodes/imageOpcodes.c:174
+#: Opcodes/imageOpcodes.c:188 Opcodes/imageOpcodes.c:291
+#: Opcodes/imageOpcodes.c:298 Opcodes/imageOpcodes.c:311
 msgid "imageload: out of memory.\n"
 msgstr ""
 
@@ -6779,62 +6656,62 @@ msgid ""
 "Status: %d\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:543
+#: Opcodes/jacko.cpp:545
 #, c-format
 msgid "Created Jack client \"%s\" for Jack server \"%s\".\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:548
+#: Opcodes/jacko.cpp:551
 #, c-format
 msgid "Jack buffer size %d != Csound ksmps %d, exiting...\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:556
+#: Opcodes/jacko.cpp:559
 #, c-format
 msgid "Jack sampling rate %d != Csound sr %d, exiting...\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:567
+#: Opcodes/jacko.cpp:570
 #, c-format
 msgid "Activated Jack client \"%s\".\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:571
+#: Opcodes/jacko.cpp:574
 #, c-format
 msgid "Failed to activate Jack client \"%s\": status %d.\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:586
+#: Opcodes/jacko.cpp:589
 msgid "BEGAN JackoState::close()...\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:622
+#: Opcodes/jacko.cpp:629
 msgid "ENDED JackoState::close().\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:876
+#: Opcodes/jacko.cpp:892
 #, c-format
 msgid "Failed to set Jack freewheeling mode to \"%s\": error %d.\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:878
+#: Opcodes/jacko.cpp:895
 #, c-format
 msgid "Set Jack freewheeling mode to \"%s\".\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:893
+#: Opcodes/jacko.cpp:911
 #, c-format
 msgid "Turned Jack connections \"%s\".\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:934 Opcodes/jacko.cpp:1034 Opcodes/jacko.cpp:1134
-#: Opcodes/jacko.cpp:1200
+#: Opcodes/jacko.cpp:955 Opcodes/jacko.cpp:1062 Opcodes/jacko.cpp:1169
+#: Opcodes/jacko.cpp:1241
 #, c-format
 msgid "Could not create Jack port \"%s\".\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:946 Opcodes/jacko.cpp:1046 Opcodes/jacko.cpp:1146
-#: Opcodes/jacko.cpp:1212
+#: Opcodes/jacko.cpp:969 Opcodes/jacko.cpp:1077 Opcodes/jacko.cpp:1184
+#: Opcodes/jacko.cpp:1255
 #, c-format
 msgid "Could not create Jack connection from \"%s\" to \"%s\": status %d.\n"
 msgstr ""
@@ -6873,27 +6750,27 @@ msgstr ""
 msgid "lorisread cannot load %s"
 msgstr ""
 
-#: Opcodes/loscilx.c:74 Opcodes/loscilx.c:178
+#: Opcodes/loscilx.c:76 Opcodes/loscilx.c:180
 #, c-format
 msgid "could not load '%s'"
 msgstr ""
 
-#: Opcodes/loscilx.c:88 Opcodes/loscilx.c:258
+#: Opcodes/loscilx.c:90 Opcodes/loscilx.c:260
 #, c-format
 msgid "invalid loop mode: %d"
 msgstr ""
 
-#: Opcodes/loscilx.c:170
+#: Opcodes/loscilx.c:172
 msgid "loscilx: invalid number of output arguments"
 msgstr ""
 
-#: Opcodes/loscilx.c:190 Opcodes/loscilx.c:219 Opcodes/pvlock.c:94
-#: Opcodes/pvlock.c:296 Opcodes/pvsbasic.c:460
+#: Opcodes/loscilx.c:192 Opcodes/loscilx.c:221 Opcodes/pvlock.c:118
+#: Opcodes/pvlock.c:320 Opcodes/pvsbasic.c:460
 msgid ""
 "number of output arguments inconsistent with number of sound file channels"
 msgstr ""
 
-#: Opcodes/loscilx.c:665
+#: Opcodes/loscilx.c:667
 msgid "loscilx: not initialised"
 msgstr ""
 
@@ -6901,11 +6778,11 @@ msgstr ""
 msgid "illegal order num. (min 1, max 10)"
 msgstr ""
 
-#: Opcodes/mandolin.c:80
+#: Opcodes/mandolin.c:81
 msgid "No table for Mandolin"
 msgstr ""
 
-#: Opcodes/mandolin.c:90
+#: Opcodes/mandolin.c:91
 msgid "No base frequency for mandolin"
 msgstr ""
 
@@ -6936,27 +6813,27 @@ msgstr ""
 msgid "illegal lsb control number at position n.%d"
 msgstr ""
 
-#: Opcodes/modal4.c:45
+#: Opcodes/modal4.c:46
 msgid "No table for Modal4 case"
 msgstr ""
 
-#: Opcodes/modal4.c:245
+#: Opcodes/modal4.c:246
 msgid "No table for Marimba strike"
 msgstr ""
 
-#: Opcodes/modal4.c:284
+#: Opcodes/modal4.c:285
 msgid "striking three times here!!!\n"
 msgstr ""
 
-#: Opcodes/modal4.c:289
+#: Opcodes/modal4.c:290
 msgid "striking twice here!!\n"
 msgstr ""
 
-#: Opcodes/modal4.c:359
+#: Opcodes/modal4.c:360
 msgid "No table for Vibraphone strike"
 msgstr ""
 
-#: Opcodes/modal4.c:440
+#: Opcodes/modal4.c:441
 msgid "No table for Agogobell strike"
 msgstr ""
 
@@ -6964,12 +6841,12 @@ msgstr ""
 msgid "modmatrix: "
 msgstr ""
 
-#: Opcodes/mp3in.c:92 Opcodes/mp3in.c:230
+#: Opcodes/mp3in.c:93 Opcodes/mp3in.c:231
 #, c-format
 msgid "mp3in: %s: failed to open file"
 msgstr ""
 
-#: Opcodes/mp3in.c:139
+#: Opcodes/mp3in.c:140
 #, c-format
 msgid "mp3in: file sample rate (%d) != orchestra sr (%d)\n"
 msgstr ""
@@ -7256,7 +7133,7 @@ msgstr ""
 msgid "No open glove"
 msgstr ""
 
-#: Opcodes/pan2.c:43
+#: Opcodes/pan2.c:45
 msgid "Unknown panning type"
 msgstr ""
 
@@ -7272,192 +7149,196 @@ msgstr ""
 msgid "partikkelsync: could not find opcode id"
 msgstr ""
 
-#: Opcodes/physmod.c:121
+#: Opcodes/physmod.c:122
 msgid "No table for Clarinet"
 msgstr ""
 
-#: Opcodes/physmod.c:129
+#: Opcodes/physmod.c:130
 msgid "No base frequency for clarinet -- assuming 50Hz\n"
 msgstr ""
 
-#: Opcodes/physmod.c:283
+#: Opcodes/physmod.c:284
 msgid "No table for Flute"
 msgstr ""
 
-#: Opcodes/physmod.c:291
+#: Opcodes/physmod.c:292
 msgid "No base frequency for flute -- assumed to be 50Hz\n"
 msgstr ""
 
-#: Opcodes/physmod.c:481
+#: Opcodes/physmod.c:482
 msgid "No table for wgbow vibrato"
 msgstr ""
 
-#: Opcodes/physmod.c:689
+#: Opcodes/physmod.c:490
+msgid "unknown lowest frequency for bowed string -- assuming 50Hz\n"
+msgstr ""
+
+#: Opcodes/physmod.c:690
 msgid "DlineA not initialised"
 msgstr ""
 
-#: Opcodes/physmod.c:756
+#: Opcodes/physmod.c:757
 msgid "No table for Brass"
 msgstr ""
 
-#: Opcodes/physmod.c:765
+#: Opcodes/physmod.c:766
 msgid "No base frequency for brass -- assumed to be 50Hz\n"
 msgstr ""
 
-#: Opcodes/physutil.c:137 Opcodes/physutil.c:312 Opcodes/physutil.c:324
-#: Opcodes/physutil.c:345
+#: Opcodes/physutil.c:138 Opcodes/physutil.c:313 Opcodes/physutil.c:325
+#: Opcodes/physutil.c:346
 msgid "negative rates not allowed!!, correcting\n"
 msgstr ""
 
-#: Opcodes/physutil.c:186
+#: Opcodes/physutil.c:187
 #, c-format
 msgid "Envelope: value=%f target=%f rate=%f state=%d\n"
 msgstr ""
 
-#: Opcodes/physutil.c:335
+#: Opcodes/physutil.c:336
 msgid "Sustain level out of range!!, correcting\n"
 msgstr ""
 
-#: Opcodes/physutil.c:356 Opcodes/physutil.c:366 Opcodes/physutil.c:376
+#: Opcodes/physutil.c:357 Opcodes/physutil.c:367 Opcodes/physutil.c:377
 msgid "negative times not allowed!!, correcting\n"
 msgstr ""
 
-#: Opcodes/pitch0.c:37
+#: Opcodes/pitch0.c:38
 #, c-format
 msgid "Muting new instances of instr %d\n"
 msgstr ""
 
-#: Opcodes/pitch0.c:40
+#: Opcodes/pitch0.c:41
 #, c-format
 msgid "Allowing instrument %d to start\n"
 msgstr ""
 
-#: Opcodes/pitch.c:84 Opcodes/spectra.c:78
+#: Opcodes/pitch.c:85 Opcodes/spectra.c:80
 msgid "illegal iocts"
 msgstr ""
 
-#: Opcodes/pitch.c:86 Opcodes/spectra.c:80
+#: Opcodes/pitch.c:87 Opcodes/spectra.c:82
 msgid "illegal ifrqs"
 msgstr ""
 
-#: Opcodes/pitch.c:180 Opcodes/spectra.c:584
+#: Opcodes/pitch.c:181 Opcodes/spectra.c:586
 msgid "illegal no of partials"
 msgstr ""
 
-#: Opcodes/pitch.c:205
+#: Opcodes/pitch.c:206
 msgid "per octave rolloff too steep"
 msgstr ""
 
-#: Opcodes/pitch.c:219 Opcodes/spectra.c:625
+#: Opcodes/pitch.c:220 Opcodes/spectra.c:627
 msgid "illegal lo-hi values"
 msgstr ""
 
-#: Opcodes/pitch.c:454
+#: Opcodes/pitch.c:455
 msgid "pitch: not initialised"
 msgstr ""
 
-#: Opcodes/pitch.c:463
+#: Opcodes/pitch.c:464
 msgid "Must have even number of arguments in mac\n"
 msgstr ""
 
-#: Opcodes/pitch.c:552
+#: Opcodes/pitch.c:553
 msgid "clockread: clock still running, call clockoff first"
 msgstr ""
 
-#: Opcodes/pitch.c:578
+#: Opcodes/pitch.c:579
 msgid "adsynt: wavetable not found!"
 msgstr ""
 
-#: Opcodes/pitch.c:591
+#: Opcodes/pitch.c:592
 msgid "adsynt: freqtable not found!"
 msgstr ""
 
-#: Opcodes/pitch.c:596
+#: Opcodes/pitch.c:597
 msgid "adsynt: partial count is greater than freqtable size!"
 msgstr ""
 
-#: Opcodes/pitch.c:604
+#: Opcodes/pitch.c:605
 msgid "adsynt: amptable not found!"
 msgstr ""
 
-#: Opcodes/pitch.c:609
+#: Opcodes/pitch.c:610
 msgid "adsynt: partial count is greater than amptable size!"
 msgstr ""
 
-#: Opcodes/pitch.c:640
+#: Opcodes/pitch.c:641
 msgid "adsynt: not initialised"
 msgstr ""
 
-#: Opcodes/pitch.c:716
+#: Opcodes/pitch.c:717
 msgid "hsboscil: not initialised"
 msgstr ""
 
-#: Opcodes/pitch.c:799
+#: Opcodes/pitch.c:800
 msgid "pitchamdf: maxcps must be > mincps !"
 msgstr ""
 
-#: Opcodes/pitch.c:945
+#: Opcodes/pitch.c:946
 msgid "pitchamdf: not initialised"
 msgstr ""
 
-#: Opcodes/pitch.c:1125 Opcodes/pitch.c:1152
+#: Opcodes/pitch.c:1126 Opcodes/pitch.c:1153
 msgid "phasorbnk: not initialised"
 msgstr ""
 
-#: Opcodes/pitch.c:1214
+#: Opcodes/pitch.c:1215
 msgid "pinkish: Invalid method code"
 msgstr ""
 
-#: Opcodes/pitch.c:1225
+#: Opcodes/pitch.c:1226
 msgid "pinkish: Filter method requires a-rate (noise) input"
 msgstr ""
 
-#: Opcodes/pitch.c:1348
+#: Opcodes/pitch.c:1349
 #, c-format
 msgid ""
 "pinkish: Gardner method requires 4-%d bands. Default %ld substituted for "
 "%d.\n"
 msgstr ""
 
-#: Opcodes/pitch.c:1731
+#: Opcodes/pitch.c:1733
 msgid "Incorrect argument count in transeg"
 msgstr ""
 
-#: Opcodes/pitch.c:1782
+#: Opcodes/pitch.c:1784
 msgid "Incorrect argument count in transegb"
 msgstr ""
 
-#: Opcodes/pitch.c:1832 Opcodes/pitch.c:1971
+#: Opcodes/pitch.c:1834 Opcodes/pitch.c:1977
 msgid "Error: transeg not initialised (krate)\n"
 msgstr ""
 
-#: Opcodes/pitch.c:1867 Opcodes/pitch.c:2013
+#: Opcodes/pitch.c:1869 Opcodes/pitch.c:2027
 msgid "transeg: not initialised (arate)\n"
 msgstr ""
 
-#: Opcodes/pitch.c:1921
+#: Opcodes/pitch.c:1924
 msgid "Incorrect argument count in transegr"
 msgstr ""
 
-#: Opcodes/pitch.c:2269
+#: Opcodes/pitch.c:2294
 msgid "median: not initialised (arate)\n"
 msgstr ""
 
-#: Opcodes/pitch.c:2273 Opcodes/pitch.c:2321
+#: Opcodes/pitch.c:2298 Opcodes/pitch.c:2345
 #, c-format
 msgid "median: window (%d)larger than maximum(%d); truncated"
 msgstr ""
 
-#: Opcodes/pitch.c:2317
+#: Opcodes/pitch.c:2341
 msgid "median: not initialised (krate)\n"
 msgstr ""
 
-#: Opcodes/pitchtrack.c:369
+#: Opcodes/pitchtrack.c:370
 #, c-format
 msgid "ptrack: FFT size out of range; using %d\n"
 msgstr ""
 
-#: Opcodes/pitchtrack.c:382
+#: Opcodes/pitchtrack.c:383
 #, c-format
 msgid "ptrack: FFT size not a power of 2; using %d\n"
 msgstr ""
@@ -7475,7 +7356,7 @@ msgstr ""
 msgid "Error: %s, %s"
 msgstr ""
 
-#: Opcodes/ppp.c:20 Opcodes/pvlock.c:454 Opcodes/pvsband.c:46
+#: Opcodes/ppp.c:20 Opcodes/pvlock.c:478 Opcodes/pvsband.c:46
 #: Opcodes/pvsbasic.c:575 Opcodes/pvsbasic.c:880 Opcodes/pvsbasic.c:1080
 #: Opcodes/pvsbasic.c:1180 Opcodes/pvsbasic.c:1395 Opcodes/pvsbasic.c:1593
 #: Opcodes/pvsbasic.c:1756 Opcodes/pvslock.c:20
@@ -7494,62 +7375,62 @@ msgstr ""
 msgid "psynth: function table not found\n"
 msgstr ""
 
-#: Opcodes/psynth.c:569 Opcodes/psynth.c:662
+#: Opcodes/psynth.c:567 Opcodes/psynth.c:660
 msgid "Input not in TRACKS format\n"
 msgstr ""
 
-#: Opcodes/psynth.c:767
+#: Opcodes/psynth.c:765
 msgid "trsplit: input not in TRACKS format\n"
 msgstr ""
 
-#: Opcodes/psynth.c:863 Opcodes/psynth.c:1027
+#: Opcodes/psynth.c:861 Opcodes/psynth.c:1023
 msgid "trmix: first input not in TRACKS format\n"
 msgstr ""
 
-#: Opcodes/psynth.c:868 Opcodes/psynth.c:1032
+#: Opcodes/psynth.c:866 Opcodes/psynth.c:1028
 msgid "trmix: second input not in TRACKS format\n"
 msgstr ""
 
-#: Opcodes/psynth.c:943
+#: Opcodes/psynth.c:939
 msgid "trfil: input not in TRACKS format\n"
 msgstr ""
 
-#: Opcodes/psynth.c:948
+#: Opcodes/psynth.c:944
 msgid "trfil: could not find function table\n"
 msgstr ""
 
-#: Opcodes/psynth.c:1135
+#: Opcodes/psynth.c:1131
 msgid "binit: first input not in TRACKS format\n"
 msgstr ""
 
-#: Opcodes/pvadd.c:153
+#: Opcodes/pvadd.c:150
 msgid "PVADD ktimpnt truncated to last frame"
 msgstr ""
 
-#: Opcodes/pvadd.c:191
+#: Opcodes/pvadd.c:188
 msgid "pvadd: not initialised"
 msgstr ""
 
-#: Opcodes/pvadd.c:193
+#: Opcodes/pvadd.c:190
 msgid "PVADD timpnt < 0"
 msgstr ""
 
-#: Opcodes/pvadd.c:201
+#: Opcodes/pvadd.c:198
 #, c-format
 msgid "PVADD cannot load %s"
 msgstr ""
 
-#: Opcodes/pvadd.c:205 Opcodes/ugens8.c:223
+#: Opcodes/pvadd.c:202 Opcodes/ugens8.c:223
 #, c-format
 msgid "pvoc-ex file %s: FFT size %d too large for Csound"
 msgstr ""
 
-#: Opcodes/pvadd.c:210
+#: Opcodes/pvadd.c:207
 #, c-format
 msgid "PV frame %ld seems too small in %s"
 msgstr ""
 
-#: Opcodes/pvadd.c:215 Opcodes/pvread.c:115 Opcodes/ugens8.c:229
+#: Opcodes/pvadd.c:212 Opcodes/pvread.c:115 Opcodes/ugens8.c:229
 #, c-format
 msgid "pvoc-ex file %s is not mono"
 msgstr ""
@@ -7559,97 +7440,97 @@ msgstr ""
 msgid "PVBUFREAD cannot load %s"
 msgstr ""
 
-#: Opcodes/pvinterp.c:76 Opcodes/vpvoc.c:206
+#: Opcodes/pvinterp.c:76 Opcodes/vpvoc.c:207
 #, c-format
 msgid "PVOC frame %ld bigger than %ld in %s"
 msgstr ""
 
-#: Opcodes/pvinterp.c:81 Opcodes/vpvoc.c:211
+#: Opcodes/pvinterp.c:81 Opcodes/vpvoc.c:212
 #, c-format
 msgid "PVOC frame %ld seems too small in %s"
 msgstr ""
 
-#: Opcodes/pvinterp.c:85 Opcodes/pvinterp.c:184 Opcodes/pvinterp.c:356
-#: Opcodes/vpvoc.c:215
+#: Opcodes/pvinterp.c:85 Opcodes/pvinterp.c:183 Opcodes/pvinterp.c:354
+#: Opcodes/vpvoc.c:216
 #, c-format
 msgid "%d chans (not 1) in PVOC file %s"
 msgstr ""
 
-#: Opcodes/pvinterp.c:101 Opcodes/pvinterp.c:212 Opcodes/pvinterp.c:382
+#: Opcodes/pvinterp.c:100 Opcodes/pvinterp.c:210 Opcodes/pvinterp.c:379
 #: Opcodes/ugens8.c:95 Opcodes/vpvoc.c:244
 #, c-format
 msgid "ksmps of %d needs wdw of %d, max is %d for pv %s"
 msgstr ""
 
-#: Opcodes/pvinterp.c:122 Opcodes/pvinterp.c:256 Opcodes/pvinterp.c:431
+#: Opcodes/pvinterp.c:121 Opcodes/pvinterp.c:254 Opcodes/pvinterp.c:428
 #: Opcodes/pvread.c:95 Opcodes/ugens8.c:156 Opcodes/vpvoc.c:297
 msgid "PVOC ktimpnt truncated to last frame"
 msgstr ""
 
-#: Opcodes/pvinterp.c:130
+#: Opcodes/pvinterp.c:129
 msgid "pvbufread: not initialised"
 msgstr ""
 
-#: Opcodes/pvinterp.c:132 Opcodes/pvinterp.c:306 Opcodes/pvinterp.c:492
+#: Opcodes/pvinterp.c:131 Opcodes/pvinterp.c:304 Opcodes/pvinterp.c:489
 #: Opcodes/pvread.c:103 Opcodes/ugens8.c:206 Opcodes/vpvoc.c:361
 msgid "PVOC timpnt < 0"
 msgstr ""
 
-#: Opcodes/pvinterp.c:149
+#: Opcodes/pvinterp.c:148
 msgid "pvinterp: associated pvbufread not found"
 msgstr ""
 
-#: Opcodes/pvinterp.c:166
+#: Opcodes/pvinterp.c:165
 #, c-format
 msgid "PVINTERP cannot load %s"
 msgstr ""
 
-#: Opcodes/pvinterp.c:179
+#: Opcodes/pvinterp.c:178
 #, c-format
 msgid "pvinterp: %s: frame size %d does not match pvbufread frame size %d\n"
 msgstr ""
 
-#: Opcodes/pvinterp.c:300
+#: Opcodes/pvinterp.c:298
 msgid "pvinterp: not initialised"
 msgstr ""
 
-#: Opcodes/pvinterp.c:302 Opcodes/pvinterp.c:488 Opcodes/ugens8.c:202
+#: Opcodes/pvinterp.c:300 Opcodes/pvinterp.c:485 Opcodes/ugens8.c:202
 #: Opcodes/vpvoc.c:357
 msgid "PVOC transpose too low"
 msgstr ""
 
-#: Opcodes/pvinterp.c:304 Opcodes/pvinterp.c:490 Opcodes/ugens8.c:204
+#: Opcodes/pvinterp.c:302 Opcodes/pvinterp.c:487 Opcodes/ugens8.c:204
 #: Opcodes/vpvoc.c:359
 msgid "PVOC transpose too high"
 msgstr ""
 
-#: Opcodes/pvinterp.c:323
+#: Opcodes/pvinterp.c:321
 msgid "pvcross: associated pvbufread not found"
 msgstr ""
 
-#: Opcodes/pvinterp.c:339
+#: Opcodes/pvinterp.c:337
 #, c-format
 msgid "PVCROSS cannot load %s"
 msgstr ""
 
-#: Opcodes/pvinterp.c:351
+#: Opcodes/pvinterp.c:349
 #, c-format
 msgid "pvcross: %s: frame size %d does not match pvbufread frame size %d\n"
 msgstr ""
 
-#: Opcodes/pvinterp.c:454 Opcodes/vpvoc.c:322
+#: Opcodes/pvinterp.c:451 Opcodes/vpvoc.c:322
 msgid "PVOC debug: one frame gets through\n"
 msgstr ""
 
-#: Opcodes/pvinterp.c:486
+#: Opcodes/pvinterp.c:483
 msgid "pvcross: not initialised"
 msgstr ""
 
-#: Opcodes/pvlock.c:35 Opcodes/pvsbasic.c:380
+#: Opcodes/pvlock.c:59 Opcodes/pvsbasic.c:380
 msgid "invalid number of output arguments"
 msgstr ""
 
-#: Opcodes/pvlock.c:466
+#: Opcodes/pvlock.c:490
 msgid "pvsfreeze: signal format must be amp-freq."
 msgstr ""
 
@@ -7756,28 +7637,33 @@ msgstr ""
 msgid "pvs2tab: signal format must be amp-phase or amp-freq."
 msgstr ""
 
-#: Opcodes/pvsbasic.c:2151 Opcodes/pvsbasic.c:2190 Opcodes/tabvars.c:53
-#: Opcodes/tabvars.c:89 Opcodes/tabvars.c:131 Opcodes/tabvars.c:176
-#: Opcodes/tabvars.c:178
+#: Opcodes/pvsbasic.c:2151 Opcodes/pvsbasic.c:2189 Opcodes/tabvars.c:56
+#: Opcodes/tabvars.c:92 Opcodes/tabvars.c:134 Opcodes/tabvars.c:179
+#: Opcodes/tabvars.c:181
 msgid "t-variable not initialised"
 msgstr ""
 
-#: Opcodes/pvsbuffer.c:53 Opcodes/pvscent.c:164 Opcodes/pvsdemix.c:49
+#: Opcodes/pvsbuffer.c:56 Opcodes/pvscent.c:164 Opcodes/pvsdemix.c:49
 msgid "SDFT case not implemented yet"
 msgstr ""
 
-#: Opcodes/pvsbuffer.c:85
+#: Opcodes/pvsbuffer.c:89
 msgid "error... could not create global var for handle\n"
 msgstr ""
 
-#: Opcodes/pvsbuffer.c:143 Opcodes/pvsbuffer.c:190 Opcodes/pvsbuffer.c:258
+#: Opcodes/pvsbuffer.c:148 Opcodes/pvsbuffer.c:197 Opcodes/pvsbuffer.c:266
 msgid "error... could not read handle from global variable\n"
 msgstr ""
 
-#: Opcodes/pvsbuffer.c:238 Opcodes/pvsbuffer.c:306
+#: Opcodes/pvsbuffer.c:246 Opcodes/pvsbuffer.c:316
 msgid "Invalid buffer handle"
 msgstr ""
 
+#: Opcodes/pvsbuffer.c:285 Opcodes/pvsbuffer.c:291
+#, c-format
+msgid "table length too small: needed %d, got %d\n"
+msgstr ""
+
 #: Opcodes/pvscent.c:42
 msgid "pvscent: format must be amp-phase or amp-freq.\n"
 msgstr ""
@@ -7966,48 +7852,48 @@ msgstr ""
 msgid "seqtim: incorrect table number"
 msgstr ""
 
-#: Opcodes/sfont.c:118
+#: Opcodes/sfont.c:121
 #, c-format
 msgid "sfload: cannot open SoundFont file \"%s\" (error %s)"
 msgstr ""
 
-#: Opcodes/sfont.c:123
+#: Opcodes/sfont.c:126
 msgid "Sfload: cannot use globals"
 msgstr ""
 
-#: Opcodes/sfont.c:153
+#: Opcodes/sfont.c:156
 msgid "sfload: could not open globals\n"
 msgstr ""
 
-#: Opcodes/sfont.c:170
+#: Opcodes/sfont.c:173
 msgid "Extending soundfonts"
 msgstr ""
 
-#: Opcodes/sfont.c:201
+#: Opcodes/sfont.c:204
 #, c-format
 msgid ""
 "\n"
 "Preset list of \"%s\"\n"
 msgstr ""
 
-#: Opcodes/sfont.c:204
+#: Opcodes/sfont.c:207
 #, c-format
 msgid "%3d) %-20s\tprog:%-3d bank:%d\n"
 msgstr ""
 
-#: Opcodes/sfont.c:226
+#: Opcodes/sfont.c:229
 #, c-format
 msgid ""
 "\n"
 "Assigning all Presets of \"%s\" starting from %d (preset handle number)\n"
 msgstr ""
 
-#: Opcodes/sfont.c:231
+#: Opcodes/sfont.c:234
 #, c-format
 msgid "%3d<--%-20s\t(prog:%-3d bank:%d)\n"
 msgstr ""
 
-#: Opcodes/sfont.c:238
+#: Opcodes/sfont.c:241
 #, c-format
 msgid ""
 "\n"
@@ -8015,38 +7901,38 @@ msgid ""
 "\n"
 msgstr ""
 
-#: Opcodes/sfont.c:251
+#: Opcodes/sfont.c:254
 #, c-format
 msgid ""
 "\n"
 "Instrument list of \"%s\"\n"
 msgstr ""
 
-#: Opcodes/sfont.c:268
+#: Opcodes/sfont.c:271
 #, c-format
 msgid "sfpreset: preset handle too big (%d), max: %d"
 msgstr ""
 
-#: Opcodes/sfont.c:284
+#: Opcodes/sfont.c:287
 #, c-format
 msgid ""
 "sfpreset: cannot find any preset having prog number %d and bank number %d in "
 "SoundFont file \"%s\""
 msgstr ""
 
-#: Opcodes/sfont.c:306 Opcodes/sfont.c:2189
+#: Opcodes/sfont.c:309 Opcodes/sfont.c:2192
 msgid "sfplay: invalid or out-of-range preset number"
 msgstr ""
 
-#: Opcodes/sfont.c:633
+#: Opcodes/sfont.c:636
 msgid "sfplaym: invalid or out-of-range preset number"
 msgstr ""
 
-#: Opcodes/sfont.c:888 Opcodes/sfont.c:1150
+#: Opcodes/sfont.c:891 Opcodes/sfont.c:1153
 msgid "sfinstr: instrument out of range"
 msgstr ""
 
-#: Opcodes/sfont.c:1598 Opcodes/sfont.c:1835
+#: Opcodes/sfont.c:1601 Opcodes/sfont.c:1838
 #, c-format
 msgid ""
 "SoundFont file \"%s\" contains ROM samples !\n"
@@ -8054,19 +7940,19 @@ msgid ""
 "Session aborted !"
 msgstr ""
 
-#: Opcodes/sfont.c:1987 Opcodes/sfont.c:1993
+#: Opcodes/sfont.c:1990 Opcodes/sfont.c:1996
 msgid "Sfont: cannot use globals/"
 msgstr ""
 
-#: Opcodes/sfont.c:1996
+#: Opcodes/sfont.c:1999
 msgid "Sfont format not compatible"
 msgstr ""
 
-#: Opcodes/sfont.c:2534
+#: Opcodes/sfont.c:2537
 msgid "error... could not create sfont globals\n"
 msgstr ""
 
-#: Opcodes/shape.c:49
+#: Opcodes/shape.c:51
 msgid "powershape: ifullscale must be strictly positive"
 msgstr ""
 
@@ -8078,25 +7964,25 @@ msgstr ""
 msgid "ftgenonce error"
 msgstr ""
 
-#: Opcodes/singwave.c:85
+#: Opcodes/singwave.c:86
 msgid "No table for Modulatr"
 msgstr ""
 
-#: Opcodes/singwave.c:127
+#: Opcodes/singwave.c:128
 msgid "No table for Singwave"
 msgstr ""
 
-#: Opcodes/singwave.c:207
+#: Opcodes/singwave.c:208
 #, c-format
 msgid "SingWave: rate=%f sweepRate=%f mytime=%f\n"
 msgstr ""
 
-#: Opcodes/singwave.c:273
+#: Opcodes/singwave.c:280
 #, c-format
 msgid "Found Formant: %s (number %i)\n"
 msgstr ""
 
-#: Opcodes/singwave.c:395
+#: Opcodes/singwave.c:397
 #, c-format
 msgid "Setting Phoneme: %d %f\n"
 msgstr ""
@@ -8129,15 +8015,15 @@ msgstr ""
 msgid "pvsarp: not initialised\n"
 msgstr ""
 
-#: Opcodes/sndloop.c:995 Opcodes/sndloop.c:1092
+#: Opcodes/sndloop.c:995 Opcodes/sndloop.c:1091
 msgid "signal format must be amp-phase or amp-freq.\n"
 msgstr ""
 
-#: Opcodes/sndloop.c:1072
+#: Opcodes/sndloop.c:1071
 msgid "pvsvoc: not initialised\n"
 msgstr ""
 
-#: Opcodes/sndloop.c:1123
+#: Opcodes/sndloop.c:1122
 msgid "pvsmorph: not initialised\n"
 msgstr ""
 
@@ -8157,25 +8043,27 @@ msgstr ""
 msgid "sndwarpst: not initialised"
 msgstr ""
 
-#: Opcodes/sockrecv.c:123 Opcodes/sockrecv.c:213 Opcodes/sockrecv.c:300
-#: Opcodes/socksend.c:75 Opcodes/socksend.c:133 Opcodes/socksend.c:190
-msgid "creating socket"
+#: Opcodes/sockrecv.c:117 Opcodes/sockrecv.c:215 Opcodes/sockrecv.c:314
+#: Opcodes/socksend.c:73 Opcodes/socksend.c:157 Opcodes/socksend.c:252
+#, c-format
+msgid "Winsock2 failed to start: %d"
 msgstr ""
 
-#: Opcodes/sockrecv.c:322
-msgid "connect failed"
+#: Opcodes/sockrecv.c:131 Opcodes/sockrecv.c:227 Opcodes/sockrecv.c:320
+#: Opcodes/socksend.c:86 Opcodes/socksend.c:171 Opcodes/socksend.c:259
+msgid "creating socket"
 msgstr ""
 
-#: Opcodes/sockrecv.c:335
-msgid "read from socket failed"
+#: Opcodes/sockrecv.c:347
+#, c-format
+msgid "connect failed (%d)"
 msgstr ""
 
-#: Opcodes/socksend.c:67 Opcodes/socksend.c:125
-#, c-format
-msgid "The buffersize must be <= %d samples to fit in a udp-packet."
+#: Opcodes/sockrecv.c:360
+msgid "read from socket failed"
 msgstr ""
 
-#: Opcodes/socksend.c:107 Opcodes/socksend.c:169
+#: Opcodes/socksend.c:126 Opcodes/socksend.c:215
 msgid "sendto failed"
 msgstr ""
 
@@ -8195,199 +8083,199 @@ msgstr ""
 msgid "spat3di: not initialised"
 msgstr ""
 
-#: Opcodes/spectra.c:82
+#: Opcodes/spectra.c:84
 msgid "illegal Q value"
 msgstr ""
 
-#: Opcodes/spectra.c:84
+#: Opcodes/spectra.c:86
 msgid "unknown dbout code"
 msgstr ""
 
-#: Opcodes/spectra.c:104
+#: Opcodes/spectra.c:106
 #, c-format
 msgid "spectrum: %s window, %s out, making tables ...\n"
 msgstr ""
 
-#: Opcodes/spectra.c:123
+#: Opcodes/spectra.c:125
 #, c-format
 msgid ""
 "\thigh cps %7.1f\n"
 "\t low cps %7.1f\n"
 msgstr ""
 
-#: Opcodes/spectra.c:138
+#: Opcodes/spectra.c:140
 #, c-format
 msgid "\tQ %4.1f uses a %d sample window each octdown\n"
 msgstr ""
 
-#: Opcodes/spectra.c:169
+#: Opcodes/spectra.c:171
 msgid "spectrum windowed sines:"
 msgstr ""
 
-#: Opcodes/spectra.c:187
+#: Opcodes/spectra.c:189
 #, c-format
 msgid "\t%d oct analysis window delay = %ld samples (%d msecs)\n"
 msgstr ""
 
-#: Opcodes/spectra.c:195
+#: Opcodes/spectra.c:197
 msgid "octdown buffers:"
 msgstr ""
 
-#: Opcodes/spectra.c:513 Opcodes/spectra.c:553
+#: Opcodes/spectra.c:515 Opcodes/spectra.c:555
 msgid "specdisp: not initialised"
 msgstr ""
 
-#: Opcodes/spectra.c:523
+#: Opcodes/spectra.c:525
 #, c-format
 msgid "instr %d %s, dft (%s), %ld octaves (%d - %d Hz):"
 msgstr ""
 
-#: Opcodes/spectra.c:530
+#: Opcodes/spectra.c:532
 #, c-format
 msgid "instr %d %s, dft (%s), %ld octaves (%3.1f - %3.1f Hz):"
 msgstr ""
 
-#: Opcodes/spectra.c:611
+#: Opcodes/spectra.c:613
 msgid "per oct rolloff too steep"
 msgstr ""
 
-#: Opcodes/spectra.c:632
+#: Opcodes/spectra.c:634
 #, c-format
 msgid "specptrk: %d freqs, %d%s ptls at "
 msgstr ""
 
-#: Opcodes/spectra.c:633
+#: Opcodes/spectra.c:635
 msgid " odd"
 msgstr ""
 
-#: Opcodes/spectra.c:637
+#: Opcodes/spectra.c:639
 msgid ""
 "\n"
 "\t\trolloff vals:"
 msgstr ""
 
-#: Opcodes/spectra.c:660
+#: Opcodes/spectra.c:662
 #, c-format
 msgid ""
 "\n"
 "\tdbthresh %4.1f: X-corr %s threshon %4.1f, threshoff %4.1f\n"
 msgstr ""
 
-#: Opcodes/spectra.c:817
+#: Opcodes/spectra.c:819
 msgid "specptrk: not initialised"
 msgstr ""
 
-#: Opcodes/spectra.c:849
+#: Opcodes/spectra.c:851
 msgid "specsum: not initialised"
 msgstr ""
 
-#: Opcodes/spectra.c:860
+#: Opcodes/spectra.c:862
 msgid "inputs have different sizes"
 msgstr ""
 
-#: Opcodes/spectra.c:863
+#: Opcodes/spectra.c:865
 msgid "inputs have diff. time periods"
 msgstr ""
 
-#: Opcodes/spectra.c:867
+#: Opcodes/spectra.c:869
 msgid "inputs have different freq resolution"
 msgstr ""
 
-#: Opcodes/spectra.c:870
+#: Opcodes/spectra.c:872
 msgid "inputs have different amptypes"
 msgstr ""
 
-#: Opcodes/spectra.c:902
+#: Opcodes/spectra.c:904
 msgid "specaddm: not initialised"
 msgstr ""
 
-#: Opcodes/spectra.c:926
+#: Opcodes/spectra.c:928
 msgid "specdiff: local buffers not initialised"
 msgstr ""
 
-#: Opcodes/spectra.c:964
+#: Opcodes/spectra.c:966
 msgid "specdiff: not initialised"
 msgstr ""
 
-#: Opcodes/spectra.c:986
+#: Opcodes/spectra.c:988
 msgid "specscal: local buffer not initialised"
 msgstr ""
 
-#: Opcodes/spectra.c:991
+#: Opcodes/spectra.c:993
 msgid "missing fscale table"
 msgstr ""
 
-#: Opcodes/spectra.c:1057
+#: Opcodes/spectra.c:1059
 msgid "specscal: not initialised"
 msgstr ""
 
-#: Opcodes/spectra.c:1081
+#: Opcodes/spectra.c:1083
 msgid "spechist: local buffers not intiialised"
 msgstr ""
 
-#: Opcodes/spectra.c:1113
+#: Opcodes/spectra.c:1115
 msgid "spechist: not initialised"
 msgstr ""
 
-#: Opcodes/spectra.c:1134
+#: Opcodes/spectra.c:1136
 msgid "specfilt: local buffers not initialised"
 msgstr ""
 
-#: Opcodes/spectra.c:1142
+#: Opcodes/spectra.c:1144
 msgid "missing htim ftable"
 msgstr ""
 
-#: Opcodes/spectra.c:1165
+#: Opcodes/spectra.c:1167
 msgid "htim ftable must be all-positive"
 msgstr ""
 
-#: Opcodes/spectra.c:1169
+#: Opcodes/spectra.c:1171
 #, c-format
 msgid "coef range: %6.3f - %6.3f\n"
 msgstr ""
 
-#: Opcodes/spectra.c:1201
+#: Opcodes/spectra.c:1203
 msgid "specfilt: not initialised"
 msgstr ""
 
-#: Opcodes/stackops.c:80
+#: Opcodes/stackops.c:81
 msgid "fsig = : source signal is not initialised"
 msgstr ""
 
-#: Opcodes/stackops.c:126
+#: Opcodes/stackops.c:125
 msgid "stack overflow"
 msgstr ""
 
-#: Opcodes/stackops.c:134
+#: Opcodes/stackops.c:131
 msgid "cannot pop from empty stack"
 msgstr ""
 
-#: Opcodes/stackops.c:142
+#: Opcodes/stackops.c:137
 msgid "argument number or type mismatch"
 msgstr ""
 
-#: Opcodes/stackops.c:150
+#: Opcodes/stackops.c:143
 msgid "string argument is too long"
 msgstr ""
 
-#: Opcodes/stackops.c:167
+#: Opcodes/stackops.c:160
 msgid "Error allocating argument stack"
 msgstr ""
 
-#: Opcodes/stackops.c:207 Top/argdecode.c:1212 util/envext.c:99
+#: Opcodes/stackops.c:200 Top/argdecode.c:1212 util/envext.c:99
 #: util/scale.c:248
 msgid "too many arguments"
 msgstr ""
 
-#: Opcodes/stackops.c:286
+#: Opcodes/stackops.c:279
 msgid "the stack is already allocated"
 msgstr ""
 
-#: Opcodes/stackops.c:637
+#: Opcodes/stackops.c:630
 msgid "number of arguments != nchnls"
 msgstr ""
 
-#: Opcodes/stdopcod.c:36
+#: Opcodes/stdopcod.c:37
 msgid "stdopcod.c: error: globals already allocated"
 msgstr ""
 
@@ -8402,35 +8290,43 @@ msgstr ""
 msgid "RAWWAVE_PATH: %s\n"
 msgstr ""
 
-#: Opcodes/syncgrain.c:175 Opcodes/syncgrain.c:338 Opcodes/syncgrain.c:683
+#: Opcodes/syncgrain.c:176 Opcodes/syncgrain.c:339 Opcodes/syncgrain.c:684
 msgid "grain size smaller than 1 sample\n"
 msgstr ""
 
-#: Opcodes/syncgrain.c:387
+#: Opcodes/syncgrain.c:388
 msgid "diskgrain: invalid number of channels"
 msgstr ""
 
-#: Opcodes/syncgrain.c:419
+#: Opcodes/syncgrain.c:420
 msgid "diskgrain: could not open file\n"
 msgstr ""
 
-#: Opcodes/syncgrain.c:423
+#: Opcodes/syncgrain.c:424
 msgid ""
 "diskgrain: soundfile channel numbers do not match the number of outputs \n"
 msgstr ""
 
-#: Opcodes/syncgrain.c:435
+#: Opcodes/syncgrain.c:436
 msgid "diskgrain: could not read file \n"
 msgstr ""
 
-#: Opcodes/tabsum.c:39
+#: Opcodes/tabsum.c:40
 msgid "tabsum: No table"
 msgstr ""
 
-#: Opcodes/tabsum.c:54
+#: Opcodes/tabsum.c:55
 msgid "tabsum: Not initialised"
 msgstr ""
 
+#: Opcodes/tabvars.c:201 Opcodes/tabvars.c:218
+msgid "t-var not initialised"
+msgstr ""
+
+#: Opcodes/tabvars.c:203 Opcodes/tabvars.c:220
+msgid "No table for copy2ftab"
+msgstr ""
+
 #: Opcodes/ugens7.c:46 Opcodes/ugensa.c:49
 msgid "illegal value for iolaps"
 msgstr ""
@@ -8576,17 +8472,17 @@ msgstr ""
 msgid "table in iftfn for ftmorf does not exist"
 msgstr ""
 
-#: Opcodes/ugnorman.c:120
+#: Opcodes/ugnorman.c:121
 #, c-format
 msgid "%s: Ats file %s not read (does it exist?)"
 msgstr ""
 
-#: Opcodes/ugnorman.c:131
+#: Opcodes/ugnorman.c:132
 #, c-format
 msgid "%s: either %s is not an ATS file or the byte endianness is wrong"
 msgstr ""
 
-#: Opcodes/ugnorman.c:139
+#: Opcodes/ugnorman.c:140
 #, c-format
 msgid ""
 "%s: %s is byte-swapped\n"
@@ -8594,125 +8490,125 @@ msgid ""
 "\twill not result in different audio, but they may slow down processing."
 msgstr ""
 
-#: Opcodes/ugnorman.c:175
+#: Opcodes/ugnorman.c:176
 msgid ""
 "ATSINFO: location is out of bounds: 0-8 are the only possible selections"
 msgstr ""
 
-#: Opcodes/ugnorman.c:265
+#: Opcodes/ugnorman.c:266
 #, c-format
 msgid "ATSREAD: partial %i out of range, max allowed is %i"
 msgstr ""
 
-#: Opcodes/ugnorman.c:291
+#: Opcodes/ugnorman.c:292
 msgid "Type not implemented"
 msgstr ""
 
-#: Opcodes/ugnorman.c:310
+#: Opcodes/ugnorman.c:311
 msgid "ATSREAD: only positive time pointer values allowed, setting to zero\n"
 msgstr ""
 
-#: Opcodes/ugnorman.c:319
+#: Opcodes/ugnorman.c:320
 msgid "ATSREAD: timepointer out of range, truncated to last frame\n"
 msgstr ""
 
-#: Opcodes/ugnorman.c:332
+#: Opcodes/ugnorman.c:333
 msgid "ATSREAD: not initialised"
 msgstr ""
 
-#: Opcodes/ugnorman.c:394
+#: Opcodes/ugnorman.c:395
 #, c-format
 msgid "ATSREADNZ: band %i out of range, 1-25 are the valid band values"
 msgstr ""
 
-#: Opcodes/ugnorman.c:412
+#: Opcodes/ugnorman.c:413
 msgid "ATSREADNZ: Type either not implemented or does not contain noise"
 msgstr ""
 
-#: Opcodes/ugnorman.c:431
+#: Opcodes/ugnorman.c:432
 msgid "ATSREADNZ: only positive time pointer values allowed, setting to zero\n"
 msgstr ""
 
-#: Opcodes/ugnorman.c:440
+#: Opcodes/ugnorman.c:441
 msgid "ATSREADNZ: timepointer out of range, truncated to last frame\n"
 msgstr ""
 
-#: Opcodes/ugnorman.c:449
+#: Opcodes/ugnorman.c:450
 msgid "ATSREADNZ: not initialised"
 msgstr ""
 
-#: Opcodes/ugnorman.c:467
+#: Opcodes/ugnorman.c:468
 msgid "ATSADD: Function table number for synthesis waveform not valid"
 msgstr ""
 
-#: Opcodes/ugnorman.c:475
+#: Opcodes/ugnorman.c:476
 msgid "ATSADD: Gate Function table number not valid"
 msgstr ""
 
-#: Opcodes/ugnorman.c:521
+#: Opcodes/ugnorman.c:522
 #, c-format
 msgid "ATSADD: Partial(s) out of range, max partial allowed is %i"
 msgstr ""
 
-#: Opcodes/ugnorman.c:555
+#: Opcodes/ugnorman.c:556
 msgid "ATSADD: Type not implemented"
 msgstr ""
 
-#: Opcodes/ugnorman.c:585
+#: Opcodes/ugnorman.c:586
 msgid ""
 "ATSADD: only positive time pointer values are allowed, setting to zero\n"
 msgstr ""
 
-#: Opcodes/ugnorman.c:594
+#: Opcodes/ugnorman.c:595
 msgid "ATSADD: time pointer out of range, truncating to last frame\n"
 msgstr ""
 
-#: Opcodes/ugnorman.c:638
+#: Opcodes/ugnorman.c:639
 msgid "ATSADD: not initialised"
 msgstr ""
 
-#: Opcodes/ugnorman.c:842
+#: Opcodes/ugnorman.c:845
 msgid "ATSADDNZ: This file type contains no noise"
 msgstr ""
 
-#: Opcodes/ugnorman.c:846
+#: Opcodes/ugnorman.c:849
 msgid "ATSADDNZ: This file type has not been implemented in this code yet."
 msgstr ""
 
-#: Opcodes/ugnorman.c:869
+#: Opcodes/ugnorman.c:872
 msgid "ATSADDNZ: Band(s) out of range, max band allowed is 25"
 msgstr ""
 
-#: Opcodes/ugnorman.c:886
+#: Opcodes/ugnorman.c:889
 msgid ""
 "ATSADDNZ: Type either has no noise or is not implemented (only type 3 and 4 "
 "work now)"
 msgstr ""
 
-#: Opcodes/ugnorman.c:1002
+#: Opcodes/ugnorman.c:1005
 msgid ""
 "ATSADDNZ: only positive time pointer values are allowed, setting to zero\n"
 msgstr ""
 
-#: Opcodes/ugnorman.c:1011
+#: Opcodes/ugnorman.c:1014
 msgid "ATSADDNZ: time pointer out of range, truncating to last frame\n"
 msgstr ""
 
-#: Opcodes/ugnorman.c:1165
+#: Opcodes/ugnorman.c:1168
 #, c-format
 msgid "ATSSINNOI: Partial(s) out of range, max partial allowed is %i"
 msgstr ""
 
-#: Opcodes/ugnorman.c:1202
+#: Opcodes/ugnorman.c:1205
 msgid "ATSSINNOI: Type not implemented"
 msgstr ""
 
-#: Opcodes/ugnorman.c:1315
+#: Opcodes/ugnorman.c:1316
 msgid ""
 "ATSSINNOI: only positive time pointer values are allowed, setting to zero\n"
 msgstr ""
 
-#: Opcodes/ugnorman.c:1324
+#: Opcodes/ugnorman.c:1325
 msgid "ATSSINNOI: time pointer out of range, truncating to last frame\n"
 msgstr ""
 
@@ -8785,44 +8681,44 @@ msgstr ""
 msgid "ATSCROSS: you must have an atsbufread before an atsinterpread"
 msgstr ""
 
-#: Opcodes/ugsc.c:394
+#: Opcodes/ugsc.c:390
 msgid "Phaser mode must be either 1 or 2"
 msgstr ""
 
-#: Opcodes/vbap.c:57
+#: Opcodes/vbap.c:59
 msgid "vbap: error allocating loudspeaker table"
 msgstr ""
 
-#: Opcodes/vbap.c:264
+#: Opcodes/vbap.c:266
 msgid ""
 "Number of loudspeakers is zero\n"
 "Exiting"
 msgstr ""
 
-#: Opcodes/vbap.c:573
+#: Opcodes/vbap.c:575
 msgid "Error in loudspeaker dimension."
 msgstr ""
 
-#: Opcodes/vbap.c:596
+#: Opcodes/vbap.c:598
 msgid "Too few loudspeakers"
 msgstr ""
 
-#: Opcodes/vbap.c:622
+#: Opcodes/vbap.c:624
 msgid "Not valid 3-D configuration"
 msgstr ""
 
-#: Opcodes/vbap.c:668 Opcodes/vbap.c:767
+#: Opcodes/vbap.c:670 Opcodes/vbap.c:769
 msgid ""
 "\n"
 "Configured loudspeakers\n"
 msgstr ""
 
-#: Opcodes/vbap.c:670
+#: Opcodes/vbap.c:672
 #, c-format
 msgid "Triplet %d Loudspeakers: "
 msgstr ""
 
-#: Opcodes/vbap.c:769
+#: Opcodes/vbap.c:771
 #, c-format
 msgid "Pair %d Loudspeakers: "
 msgstr ""
@@ -8904,41 +8800,33 @@ msgstr ""
 msgid "Have to have at least %d directions in vbapzmove"
 msgstr ""
 
-#: Opcodes/Vosim.c:49
+#: Opcodes/Vosim.c:51
 msgid "vosim: pulse table not found"
 msgstr ""
 
-#: Opcodes/Vosim.c:72
+#: Opcodes/Vosim.c:74
 msgid "vosim: zero kfund. 'Infinite' length event generated."
 msgstr ""
 
-#: Opcodes/Vosim.c:80
+#: Opcodes/Vosim.c:82
 #, c-format
 msgid "vosim: kfund (%f) > sr. Generating ksmps silence."
 msgstr ""
 
-#: Opcodes/Vosim.c:158
+#: Opcodes/Vosim.c:160
 msgid "vosim: not initialised"
 msgstr ""
 
-#: Opcodes/vpvoc.c:118
-msgid "tableseg: not initialised"
-msgstr ""
-
-#: Opcodes/vpvoc.c:146
-msgid "tablexseg: not initialised"
-msgstr ""
-
-#: Opcodes/vpvoc.c:172
+#: Opcodes/vpvoc.c:173
 #, c-format
 msgid "vpvoc: Could not find ifnmagctrl table %f"
 msgstr ""
 
-#: Opcodes/vpvoc.c:178
+#: Opcodes/vpvoc.c:179
 msgid "vpvoc: associated tableseg not found"
 msgstr ""
 
-#: Opcodes/vpvoc.c:194
+#: Opcodes/vpvoc.c:195
 #, c-format
 msgid "VPVOC cannot load %s"
 msgstr ""
@@ -9055,47 +8943,47 @@ msgstr ""
 msgid "-B N\tsamples per hardware sound I/O buffer"
 msgstr ""
 
-#: Top/argdecode.c:75 util/mixer.c:95 util/scale.c:46 util/srconv.c:739
+#: Top/argdecode.c:75 util/mixer.c:95 util/scale.c:46 util/srconv.c:738
 msgid "-A\tcreate an AIFF format output soundfile"
 msgstr ""
 
-#: Top/argdecode.c:76 util/mixer.c:96 util/scale.c:47 util/srconv.c:741
+#: Top/argdecode.c:76 util/mixer.c:96 util/scale.c:47 util/srconv.c:740
 msgid "-W\tcreate a WAV format output soundfile"
 msgstr ""
 
-#: Top/argdecode.c:77 util/srconv.c:740
+#: Top/argdecode.c:77 util/srconv.c:739
 msgid "-J\tcreate an IRCAM format output soundfile"
 msgstr ""
 
-#: Top/argdecode.c:78 util/mixer.c:97 util/scale.c:48 util/srconv.c:742
+#: Top/argdecode.c:78 util/mixer.c:97 util/scale.c:48 util/srconv.c:741
 msgid "-h\tno header on output soundfile"
 msgstr ""
 
-#: Top/argdecode.c:79 util/mixer.c:99 util/scale.c:49 util/srconv.c:743
+#: Top/argdecode.c:79 util/mixer.c:99 util/scale.c:49 util/srconv.c:742
 msgid "-c\t8-bit signed_char sound samples"
 msgstr ""
 
-#: Top/argdecode.c:81 util/mixer.c:101 util/scale.c:50 util/srconv.c:744
+#: Top/argdecode.c:81 util/mixer.c:101 util/scale.c:50 util/srconv.c:743
 msgid "-a\talaw sound samples"
 msgstr ""
 
-#: Top/argdecode.c:83 util/mixer.c:98 util/mixer.c:100 util/srconv.c:745
+#: Top/argdecode.c:83 util/mixer.c:98 util/mixer.c:100 util/srconv.c:744
 msgid "-8\t8-bit unsigned_char sound samples"
 msgstr ""
 
-#: Top/argdecode.c:84 util/mixer.c:102 util/scale.c:51 util/srconv.c:746
+#: Top/argdecode.c:84 util/mixer.c:102 util/scale.c:51 util/srconv.c:745
 msgid "-u\tulaw sound samples"
 msgstr ""
 
-#: Top/argdecode.c:85 util/mixer.c:103 util/scale.c:52 util/srconv.c:747
+#: Top/argdecode.c:85 util/mixer.c:103 util/scale.c:52 util/srconv.c:746
 msgid "-s\tshort_int sound samples"
 msgstr ""
 
-#: Top/argdecode.c:86 util/mixer.c:104 util/scale.c:53 util/srconv.c:748
+#: Top/argdecode.c:86 util/mixer.c:104 util/scale.c:53 util/srconv.c:747
 msgid "-l\tlong_int sound samples"
 msgstr ""
 
-#: Top/argdecode.c:87 util/mixer.c:105 util/scale.c:54 util/srconv.c:749
+#: Top/argdecode.c:87 util/mixer.c:105 util/scale.c:54 util/srconv.c:748
 msgid "-f\tfloat sound samples"
 msgstr ""
 
@@ -9103,7 +8991,7 @@ msgstr ""
 msgid "-3\t24bit sound samples"
 msgstr ""
 
-#: Top/argdecode.c:89 util/srconv.c:750
+#: Top/argdecode.c:89 util/srconv.c:749
 msgid "-r N\torchestra srate override"
 msgstr ""
 
@@ -9111,7 +8999,7 @@ msgstr ""
 msgid "-k N\torchestra krate override"
 msgstr ""
 
-#: Top/argdecode.c:91 util/srconv.c:751
+#: Top/argdecode.c:91 util/srconv.c:750
 msgid "-K\tDo not generate PEAK chunks"
 msgstr ""
 
@@ -9171,7 +9059,7 @@ msgstr ""
 msgid "-F fnam\tread MIDIfile event stream from file 'fnam'"
 msgstr ""
 
-#: Top/argdecode.c:107 util/mixer.c:106 util/scale.c:59 util/srconv.c:752
+#: Top/argdecode.c:107 util/mixer.c:106 util/scale.c:59 util/srconv.c:751
 msgid "-R\tcontinually rewrite header while writing soundfile (WAV/AIFF)"
 msgstr ""
 
@@ -9179,7 +9067,7 @@ msgstr ""
 msgid "-H#\tprint heartbeat style 1, 2 or 3 at each soundfile write"
 msgstr ""
 
-#: Top/argdecode.c:109 util/mixer.c:108 util/scale.c:61 util/srconv.c:754
+#: Top/argdecode.c:109 util/mixer.c:108 util/scale.c:61 util/srconv.c:753
 msgid "-N\tnotify (ring the bell) when score or miditrack is done"
 msgstr ""
 
@@ -9665,16 +9553,16 @@ msgid "-M: stdin not supported on this platform"
 msgstr ""
 
 #: Top/argdecode.c:668 Top/argdecode.c:959 util/envext.c:84 util/mixer.c:205
-#: util/scale.c:173 util/srconv.c:248 util/xtrct.c:116
+#: util/scale.c:173 util/srconv.c:247 util/xtrct.c:116
 msgid "no outfilename"
 msgstr ""
 
-#: Top/argdecode.c:671 Top/argdecode.c:963 util/scale.c:177 util/srconv.c:252
+#: Top/argdecode.c:671 Top/argdecode.c:963 util/scale.c:177 util/srconv.c:251
 #: util/xtrct.c:120
 msgid "-o cannot be stdin"
 msgstr ""
 
-#: Top/argdecode.c:675 Top/argdecode.c:967 util/scale.c:180 util/srconv.c:257
+#: Top/argdecode.c:675 Top/argdecode.c:967 util/scale.c:180 util/srconv.c:256
 #: util/xtrct.c:123
 msgid "stdout audio not supported"
 msgstr ""
@@ -9793,164 +9681,164 @@ msgstr ""
 msgid "cscoreFileGetCurrent: no fp current"
 msgstr ""
 
-#: Top/csmodule.c:192
+#: Top/csmodule.c:199
 #, c-format
 msgid "not loading '%s' (uses incompatible floating point type)"
 msgstr ""
 
-#: Top/csmodule.c:201
+#: Top/csmodule.c:209
 #, c-format
 msgid ""
 "not loading '%s' (incompatible with this version of Csound (%d.%d/%d.%d)"
 msgstr ""
 
-#: Top/csmodule.c:244
+#: Top/csmodule.c:252
 #, c-format
 msgid "could not open library '%s' (%s)"
 msgstr ""
 
-#: Top/csmodule.c:247
+#: Top/csmodule.c:255
 #, c-format
 msgid "could not open library '%s' (%d)"
 msgstr ""
 
-#: Top/csmodule.c:303
+#: Top/csmodule.c:311
 #, c-format
 msgid "'%s' is not a Csound plugin library"
 msgstr ""
 
-#: Top/csmodule.c:314
+#: Top/csmodule.c:322
 msgid "csoundLoadExternal(): memory allocation failure"
 msgstr ""
 
-#: Top/csmodule.c:328 Top/csmodule.c:336
+#: Top/csmodule.c:336 Top/csmodule.c:344
 #, c-format
 msgid "Error in pre-initialisation function of module '%s'"
 msgstr ""
 
-#: Top/csmodule.c:599 Top/csmodule.c:605 Top/csmodule.c:616 Top/csmodule.c:623
-#: Top/csmodule.c:629 Top/csmodule.c:637
+#: Top/csmodule.c:608 Top/csmodule.c:614 Top/csmodule.c:625 Top/csmodule.c:632
+#: Top/csmodule.c:638 Top/csmodule.c:646
 msgid "Error opening plugin directory\n"
 msgstr ""
 
-#: Top/csmodule.c:687
+#: Top/csmodule.c:696
 #, c-format
 msgid "Error opening plugin directory '%s': %s"
 msgstr ""
 
-#: Top/csmodule.c:722
+#: Top/csmodule.c:731
 #, c-format
 msgid "path name too long, skipping '%s'"
 msgstr ""
 
-#: Top/csmodule.c:728
+#: Top/csmodule.c:737
 #, c-format
 msgid "Library %s omitted\n"
 msgstr ""
 
-#: Top/csmodule.c:764
+#: Top/csmodule.c:773
 msgid "Loading command-line libraries:\n"
 msgstr ""
 
-#: Top/csmodule.c:787
+#: Top/csmodule.c:796
 #, c-format
 msgid " *** error loading '%s'"
 msgstr ""
 
-#: Top/csmodule.c:810
+#: Top/csmodule.c:819
 #, c-format
 msgid "Error starting module '%s'"
 msgstr ""
 
-#: Top/csmodule.c:907
+#: Top/csmodule.c:918
 #, c-format
 msgid "Error de-initialising module '%s'"
 msgstr ""
 
-#: Top/csound.c:1606 Top/csound.c:1626
+#: Top/csound.c:1636 Top/csound.c:1656
 msgid "Early return from csoundPerformKsmps().\n"
 msgstr ""
 
-#: Top/csound.c:1612
+#: Top/csound.c:1642
 msgid "Score finished in csoundPerformKsmps().\n"
 msgstr ""
 
-#: Top/csound.c:1645
+#: Top/csound.c:1675
 msgid "Early return from csoundPerformBuffer().\n"
 msgstr ""
 
-#: Top/csound.c:1670
+#: Top/csound.c:1700
 msgid "Early return from csoundPerform().\n"
 msgstr ""
 
-#: Top/csound.c:1677
+#: Top/csound.c:1707
 msgid "Score finished in csoundPerform().\n"
 msgstr ""
 
-#: Top/csound.c:1697
+#: Top/csound.c:1727
 msgid "csoundPerform(): stopped.\n"
 msgstr ""
 
-#: Top/csound.c:1968
+#: Top/csound.c:1998
 msgid "WARNING: "
 msgstr ""
 
-#: Top/csound.c:2089
+#: Top/csound.c:2119
 msgid "rtdummy: failed to allocate globals"
 msgstr ""
 
-#: Top/csound.c:2090
+#: Top/csound.c:2120
 msgid "rtaudio: dummy module enabled\n"
 msgstr ""
 
-#: Top/csound.c:2119 Top/csound.c:2155
+#: Top/csound.c:2149 Top/csound.c:2185
 msgid " *** error: rtaudio module set to empty string"
 msgstr ""
 
-#: Top/csound.c:2123 Top/csound.c:2159
+#: Top/csound.c:2153 Top/csound.c:2189
 #, c-format
 msgid " *** error: unknown rtaudio module: '%s'"
 msgstr ""
 
-#: Top/csound.c:2241
+#: Top/csound.c:2271
 msgid "WARNING: real time midi input disabled, using dummy functions\n"
 msgstr ""
 
-#: Top/csound.c:2246 Top/csound.c:2280
+#: Top/csound.c:2276 Top/csound.c:2310
 msgid "error: -+rtmidi set to empty string"
 msgstr ""
 
-#: Top/csound.c:2249 Top/csound.c:2283
+#: Top/csound.c:2279 Top/csound.c:2313
 #, c-format
 msgid "error: -+rtmidi='%s': unknown module"
 msgstr ""
 
-#: Top/csound.c:2275
+#: Top/csound.c:2305
 msgid "WARNING: real time midi output disabled, using dummy functions\n"
 msgstr ""
 
-#: Top/csound.c:2297
+#: Top/csound.c:2327
 msgid "Unknown MIDI error"
 msgstr ""
 
-#: Top/csound.c:2415
+#: Top/csound.c:2445
 msgid "xyin not supported. use invalue opcode instead."
 msgstr ""
 
-#: Top/csound.c:2522
+#: Top/csound.c:2552
 msgid "Failed to allocate new opcode entry."
 msgstr ""
 
-#: Top/csound.c:2545
+#: Top/csound.c:2575
 #, c-format
 msgid "Failed to allocate opcode entry for %s."
 msgstr ""
 
-#: Top/csound.c:2876
+#: Top/csound.c:2906
 msgid "Cannot open /proc/cpuinfo. Support for RDTSC is not available.\n"
 msgstr ""
 
-#: Top/csound.c:2927
+#: Top/csound.c:2957
 msgid "No valid CPU frequency entry was found in /proc/cpuinfo.\n"
 msgstr ""
 
@@ -9958,25 +9846,25 @@ msgstr ""
 msgid "Error allocating opcode list"
 msgstr ""
 
-#: Top/main.c:161
+#: Top/main.c:160
 #, c-format
 msgid "WARNING: cannot open csoundrc file %s\n"
 msgstr ""
 
-#: Top/main.c:164
+#: Top/main.c:163
 #, c-format
 msgid "Reading options from $CSOUNDRC: %s \n"
 msgstr ""
 
-#: Top/main.c:173
+#: Top/main.c:172
 msgid "Reading options from $HOME/.csoundrc\n"
 msgstr ""
 
-#: Top/main.c:200
+#: Top/main.c:199
 msgid "no orchestra name"
 msgstr ""
 
-#: Top/main.c:225
+#: Top/main.c:224
 msgid "Reading CSD failed ... stopping"
 msgstr ""
 
@@ -9988,7 +9876,7 @@ msgstr ""
 msgid "error: multiple uses of stdout"
 msgstr ""
 
-#: Top/main.c:260 util/dnoise.c:268
+#: Top/main.c:260 util/dnoise.c:264
 #, c-format
 msgid "%s not a recognised SFOUTYP env setting"
 msgstr ""
@@ -10001,58 +9889,62 @@ msgstr ""
 msgid "realtime performance using dummy numeric scorefile\n"
 msgstr ""
 
-#: Top/main.c:319
+#: Top/main.c:314
 #, c-format
 msgid "orchname:  %s\n"
 msgstr ""
 
-#: Top/main.c:321
-#, c-format
-msgid "scorename: %s\n"
+#: Top/main.c:334
+msgid "Stopping on parser failure\n"
 msgstr ""
 
-#: Top/main.c:353
+#: Top/main.c:352
 msgid "end of orchestra compile"
 msgstr ""
 
-#: Top/main.c:360
+#: Top/main.c:359
 #, c-format
 msgid "using previous %s\n"
 msgstr ""
 
-#: Top/main.c:373
+#: Top/main.c:369
 #, c-format
 msgid "cannot open scorefile %s"
 msgstr ""
 
-#: Top/main.c:378 Top/main.c:399
-#, c-format
-msgid "cannot open %s for writing"
+#: Top/main.c:371
+msgid "sorting score ...\n"
 msgstr ""
 
 #: Top/main.c:381
-msgid "sorting score ...\n"
+#, c-format
+msgid "cannot extract %s, name conflict"
+msgstr ""
+
+#: Top/main.c:384
+#, c-format
+msgid "cannot open extract file %s"
 msgstr ""
 
 #: Top/main.c:388
 #, c-format
-msgid "cannot extract %s, name conflict"
+msgid "cannot reopen %s"
 msgstr ""
 
-#: Top/main.c:391
+#: Top/main.c:392
 #, c-format
-msgid "cannot open extract file %s"
+msgid "cannot open %s for writing"
 msgstr ""
 
-#: Top/main.c:401
+#: Top/main.c:394
 msgid "  ... extracting ...\n"
 msgstr ""
 
-#: Top/main.c:414
+#: Top/main.c:405
 msgid "end of score sort"
 msgstr ""
 
-#: Top/main.c:416
+#: Top/main.c:407
 msgid "Syntax check completed.\n"
 msgstr ""
 
@@ -10117,163 +10009,158 @@ msgstr ""
 msgid " *** error setting option '%s' to '%s': %s\n"
 msgstr ""
 
-#: Top/one_file.c:105 Top/one_file.c:113
+#: Top/one_file.c:110 Top/one_file.c:118
 msgid " *** cannot create temporary file"
 msgstr ""
 
-#: Top/one_file.c:198
+#: Top/one_file.c:203
 #, c-format
 msgid "Removing temporary file %s ...\n"
 msgstr ""
 
-#: Top/one_file.c:202
+#: Top/one_file.c:207
 #, c-format
 msgid "WARNING: could not remove %s\n"
 msgstr ""
 
-#: Top/one_file.c:268 Top/one_file.c:296
+#: Top/one_file.c:274 Top/one_file.c:302
 #, c-format
 msgid "More than %d arguments in <CsOptions>"
 msgstr ""
 
-#: Top/one_file.c:313
+#: Top/one_file.c:319
 #, c-format
 msgid "Invalid arguments in <CsOptions>: %s"
 msgstr ""
 
-#: Top/one_file.c:316
+#: Top/one_file.c:322
 #, c-format
 msgid "Invalid arguments in .csoundrc or -@ file: %s"
 msgstr ""
 
-#: Top/one_file.c:322 Top/one_file.c:790
+#: Top/one_file.c:328 Top/one_file.c:744
 msgid "Missing end tag </CsOptions>"
 msgstr ""
 
-#: Top/one_file.c:340 Top/one_file.c:372 Top/one_file.c:420
-#, c-format
-msgid "Creating %s (%p)\n"
-msgstr ""
-
-#: Top/one_file.c:343
-#, c-format
-msgid "Failed to create %s"
-msgstr ""
-
-#: Top/one_file.c:356
+#: Top/one_file.c:354
 msgid "Missing end tag </CsInstruments>"
 msgstr ""
 
-#: Top/one_file.c:389 Top/one_file.c:442
+#: Top/one_file.c:376 Top/one_file.c:430
 msgid "Missing end tag </CsScore>"
 msgstr ""
 
-#: Top/one_file.c:403 Top/one_file.c:408
+#: Top/one_file.c:391 Top/one_file.c:396
 msgid "Missing program in tag <CsScore>"
 msgstr ""
 
-#: Top/one_file.c:433
+#: Top/one_file.c:408
+#, c-format
+msgid "Creating %s (%p)\n"
+msgstr ""
+
+#: Top/one_file.c:421
 msgid "External generation failed"
 msgstr ""
 
-#: Top/one_file.c:520
+#: Top/one_file.c:468
 #, c-format
 msgid "Non base64 character %c(%2x)"
 msgstr ""
 
-#: Top/one_file.c:539
+#: Top/one_file.c:487
 msgid "Truncated byte at end of base64 stream"
 msgstr ""
 
-#: Top/one_file.c:554
+#: Top/one_file.c:503
 #, c-format
 msgid "Cannot open temporary file (%s) for MIDI subfile"
 msgstr ""
 
-#: Top/one_file.c:571
+#: Top/one_file.c:520
 msgid "Missing end tag </CsMidifileB>"
 msgstr ""
 
-#: Top/one_file.c:586 Top/one_file.c:633
+#: Top/one_file.c:536 Top/one_file.c:584
 #, c-format
 msgid "File %s already exists"
 msgstr ""
 
-#: Top/one_file.c:591
+#: Top/one_file.c:541
 #, c-format
 msgid "Cannot open sample file (%s) subfile"
 msgstr ""
 
-#: Top/one_file.c:605
+#: Top/one_file.c:555
 msgid "Missing end tag </CsSampleB>"
 msgstr ""
 
-#: Top/one_file.c:638
+#: Top/one_file.c:589
 #, c-format
 msgid "Cannot open file (%s) subfile"
 msgstr ""
 
-#: Top/one_file.c:653
+#: Top/one_file.c:604
 msgid "Missing end tag </CsFileB>"
 msgstr ""
 
-#: Top/one_file.c:672
+#: Top/one_file.c:624
 #, c-format
 msgid "This CSD file requires a version of Csound before %d.%02d"
 msgstr ""
 
-#: Top/one_file.c:680 Top/one_file.c:687
+#: Top/one_file.c:632 Top/one_file.c:639
 #, c-format
 msgid "This CSD file requires a version of Csound after %d.%02d"
 msgstr ""
 
-#: Top/one_file.c:693
+#: Top/one_file.c:645
 msgid "Missing end tag </CsVersion>"
 msgstr ""
 
-#: Top/one_file.c:702
+#: Top/one_file.c:655
 msgid "**** Licence Information ****\n"
 msgstr ""
 
-#: Top/one_file.c:708
+#: Top/one_file.c:661
 msgid "**** End of Licence Information ****\n"
 msgstr ""
 
-#: Top/one_file.c:719
+#: Top/one_file.c:672
 msgid "Missing end tag </CsLicence>"
 msgstr ""
 
-#: Top/one_file.c:749
+#: Top/one_file.c:703
 #, c-format
 msgid "Failed to open csd file: %s"
 msgstr ""
 
-#: Top/one_file.c:764
+#: Top/one_file.c:718
 msgid "STARTING FILE\n"
 msgstr ""
 
-#: Top/one_file.c:780
+#: Top/one_file.c:734
 msgid "Creating options\n"
 msgstr ""
 
-#: Top/one_file.c:786
+#: Top/one_file.c:740
 msgid "Skipping <CsOptions>\n"
 msgstr ""
 
-#: Top/one_file.c:800
+#: Top/one_file.c:754
 msgid "Creating orchestra\n"
 msgstr ""
 
-#: Top/one_file.c:805
+#: Top/one_file.c:759
 msgid "Creating score\n"
 msgstr ""
 
-#: Top/one_file.c:839
+#: Top/one_file.c:793
 #, c-format
 msgid "unknown CSD tag: %s\n"
 msgstr ""
 
-#: Top/one_file.c:844
+#: Top/one_file.c:798
 msgid "Could not find <CsoundSynthesizer> tag in CSD file.\n"
 msgstr ""
 
@@ -10447,15 +10334,15 @@ msgstr ""
 #, c-format
 msgid ""
 "\n"
-" Could not open %s for writing, bye...\n"
+"Could not open %s for writing, bye...\n"
 msgstr ""
 
 #: util/atsa.c:544
 msgid "saving ATS data..."
 msgstr ""
 
-#: util/atsa.c:546 util/atsa.c:2344 util/atsa.c:2358 util/atsa.c:2368
-#: util/atsa.c:2548 util/atsa.c:2611 util/atsa.c:2699
+#: util/atsa.c:546 util/atsa.c:2354 util/atsa.c:2368 util/atsa.c:2387
+#: util/atsa.c:2567 util/atsa.c:2630 util/atsa.c:2718
 msgid "done!\n"
 msgstr ""
 
@@ -10563,181 +10450,181 @@ msgid ""
 "\n"
 msgstr ""
 
-#: util/atsa.c:1482
+#: util/atsa.c:1492
 #, c-format
 msgid "atsa: error opening residual file '%s'"
 msgstr ""
 
-#: util/atsa.c:1486
+#: util/atsa.c:1496
 #, c-format
 msgid "atsa: residual file has %d channels, must be stereo !"
 msgstr ""
 
-#: util/atsa.c:1813
+#: util/atsa.c:1823
 #, c-format
 msgid ""
 "\n"
 "ERROR: cannot open file %s for writing\n"
 msgstr ""
 
-#: util/atsa.c:1908
+#: util/atsa.c:1918
 msgid "Error: sound not optimised !"
 msgstr ""
 
-#: util/atsa.c:2003
+#: util/atsa.c:2013
 #, c-format
 msgid "atsa: cannot open input file '%s'"
 msgstr ""
 
-#: util/atsa.c:2010
+#: util/atsa.c:2020
 #, c-format
 msgid "atsa: file has %d channels, must be mono !"
 msgstr ""
 
-#: util/atsa.c:2015
+#: util/atsa.c:2025
 msgid "tracking...\n"
 msgstr ""
 
-#: util/atsa.c:2024
+#: util/atsa.c:2034
 #, c-format
 msgid "start %f out of bounds, corrected to 0.0"
 msgstr ""
 
-#: util/atsa.c:2034
+#: util/atsa.c:2044
 #, c-format
 msgid "duration %f out of bounds, limited to file duration"
 msgstr ""
 
-#: util/atsa.c:2040
+#: util/atsa.c:2050
 #, c-format
 msgid "start: %f duration: %f file dur: %f\n"
 msgstr ""
 
-#: util/atsa.c:2047
+#: util/atsa.c:2057
 #, c-format
 msgid "lowest freq. %f out of bounds, forced to default: %f"
 msgstr ""
 
-#: util/atsa.c:2057
+#: util/atsa.c:2067
 #, c-format
 msgid "highest freq. %f out of bounds, forced to default: %f"
 msgstr ""
 
-#: util/atsa.c:2064
+#: util/atsa.c:2074
 #, c-format
 msgid ""
 "freq. dev. %f out of bounds, should be > 0.0 and <= 1.0, forced to default: "
 "%f"
 msgstr ""
 
-#: util/atsa.c:2072
+#: util/atsa.c:2082
 #, c-format
 msgid ""
 "windows cycles %d out of bounds, should be between 1 and 8, forced to "
 "default: %d"
 msgstr ""
 
-#: util/atsa.c:2080
+#: util/atsa.c:2090
 #, c-format
 msgid ""
 "window type %d out of bounds, should be between 0 and 3, forced to default: "
 "%d"
 msgstr ""
 
-#: util/atsa.c:2088
+#: util/atsa.c:2098
 #, c-format
 msgid ""
 "hop size %f out of bounds, should be > 0.0 and <= 1.0, forced to default: %f"
 msgstr ""
 
-#: util/atsa.c:2096
+#: util/atsa.c:2106
 #, c-format
 msgid ""
 "lowest magnitude %f out of bounds, should be >= 0.0 and <= 1.0, forced to "
 "default: %f"
 msgstr ""
 
-#: util/atsa.c:2120
+#: util/atsa.c:2130
 #, c-format
 msgid "atsa: %d frames are not enough for analysis, need at least %d"
 msgstr ""
 
-#: util/atsa.c:2129
+#: util/atsa.c:2139
 #, c-format
 msgid "track length %d out of bounds, forced to: %d"
 msgstr ""
 
-#: util/atsa.c:2138
+#: util/atsa.c:2148
 #, c-format
 msgid "min. segment length %d out of bounds, forced to: %d"
 msgstr ""
 
-#: util/atsa.c:2147
+#: util/atsa.c:2157
 #, c-format
 msgid "min. gap length %d out of bounds, forced to: %d"
 msgstr ""
 
-#: util/atsa.c:2153
+#: util/atsa.c:2163
 #, c-format
 msgid ""
 "SMR threshold %f out of bounds, should be >= 0.0 and < %f dB SPL, forced to "
 "default: %f"
 msgstr ""
 
-#: util/atsa.c:2164
+#: util/atsa.c:2174
 #, c-format
 msgid ""
 "min. seg. SMR %f out of bounds, should be >= %f and < %f dB SPL, forced to "
 "default: %f"
 msgstr ""
 
-#: util/atsa.c:2172
+#: util/atsa.c:2182
 #, c-format
 msgid ""
 "last peak contribution %f out of bounds, should be >= 0.0 and <= 1.0, forced "
 "to default: %f"
 msgstr ""
 
-#: util/atsa.c:2180
+#: util/atsa.c:2190
 #, c-format
 msgid ""
 "SMR contribution %f out of bounds, should be >= 0.0 and <= 1.0, forced to "
 "default: %f"
 msgstr ""
 
-#: util/atsa.c:2325
+#: util/atsa.c:2335
 msgid "Initializing ATS data..."
 msgstr ""
 
-#: util/atsa.c:2355
+#: util/atsa.c:2365
 msgid "Computing residual..."
 msgstr ""
 
-#: util/atsa.c:2366
+#: util/atsa.c:2381 util/atsa.c:2384
 msgid "Analysing residual..."
 msgstr ""
 
-#: util/atsa.c:2370
+#: util/atsa.c:2389
 msgid "tracking completed.\n"
 msgstr ""
 
-#: util/atsa.c:2478
+#: util/atsa.c:2497
 msgid "Filling sound gaps..."
 msgstr ""
 
-#: util/atsa.c:2566
+#: util/atsa.c:2585
 msgid "Trimming short partials..."
 msgstr ""
 
-#: util/atsa.c:2662
+#: util/atsa.c:2681
 msgid "Computing averages..."
 msgstr ""
 
-#: util/atsa.c:2713
+#: util/atsa.c:2732
 msgid "No partials to track -- stopping\n"
 msgstr ""
 
-#: util/atsa.c:2813
+#: util/atsa.c:2832
 msgid "Soundfile analysis for ATS opcodes"
 msgstr ""
 
@@ -10769,8 +10656,8 @@ msgstr ""
 msgid "illegal number of filenames"
 msgstr ""
 
-#: util/cvanal.c:113 util/dnoise.c:456 util/lpanal.c:518 util/pvanal.c:258
-#: util/srconv.c:351
+#: util/cvanal.c:113 util/dnoise.c:445 util/lpanal.c:518 util/pvanal.c:258
+#: util/srconv.c:350
 #, c-format
 msgid "error while opening %s"
 msgstr ""
@@ -10810,256 +10697,256 @@ msgstr ""
 msgid "Soundfile analysis for convolve"
 msgstr ""
 
-#: util/dnoise.c:285
+#: util/dnoise.c:281
 msgid "-o cannot be stdin\n"
 msgstr ""
 
-#: util/dnoise.c:297
+#: util/dnoise.c:293
 msgid "-A overriding local default WAV out"
 msgstr ""
 
-#: util/dnoise.c:302
+#: util/dnoise.c:298
 msgid "-J overriding local default AIFF/WAV out"
 msgstr ""
 
-#: util/dnoise.c:309
+#: util/dnoise.c:305
 msgid "-W overriding local default AIFF out"
 msgstr ""
 
-#: util/dnoise.c:356
+#: util/dnoise.c:345
 msgid "no t argument"
 msgstr ""
 
-#: util/dnoise.c:379
+#: util/dnoise.c:368
 msgid "no n argument"
 msgstr ""
 
-#: util/dnoise.c:384
+#: util/dnoise.c:373
 msgid "no b argument"
 msgstr ""
 
-#: util/dnoise.c:392
+#: util/dnoise.c:381
 msgid "no B argument"
 msgstr ""
 
-#: util/dnoise.c:404
+#: util/dnoise.c:393
 msgid "no E argument"
 msgstr ""
 
-#: util/dnoise.c:408
+#: util/dnoise.c:397
 msgid "no N argument"
 msgstr ""
 
-#: util/dnoise.c:412
+#: util/dnoise.c:401
 msgid "no M argument"
 msgstr ""
 
-#: util/dnoise.c:416
+#: util/dnoise.c:405
 msgid "no L argument"
 msgstr ""
 
-#: util/dnoise.c:420
+#: util/dnoise.c:409
 msgid "no w argument"
 msgstr ""
 
-#: util/dnoise.c:424
+#: util/dnoise.c:413
 msgid "no D argument"
 msgstr ""
 
-#: util/dnoise.c:431 util/srconv.c:328
+#: util/dnoise.c:420 util/srconv.c:327
 #, c-format
 msgid "Looking at %c\n"
 msgstr ""
 
-#: util/dnoise.c:438 util/srconv.c:336
+#: util/dnoise.c:427 util/srconv.c:335
 #, c-format
 msgid "Infile set to %s\n"
 msgstr ""
 
-#: util/dnoise.c:441 util/srconv.c:339
+#: util/dnoise.c:430 util/srconv.c:338
 #, c-format
 msgid "End with %s\n"
 msgstr ""
 
-#: util/dnoise.c:447
+#: util/dnoise.c:436
 msgid "dnoise: no input file\n"
 msgstr ""
 
-#: util/dnoise.c:451
+#: util/dnoise.c:440
 msgid "Must have an example noise file (-i name)\n"
 msgstr ""
 
-#: util/dnoise.c:479
+#: util/dnoise.c:468
 #, c-format
 msgid "cannot open %s.\n"
 msgstr ""
 
-#: util/dnoise.c:491 util/srconv.c:461 util/srconv.c:473
+#: util/dnoise.c:480 util/srconv.c:460 util/srconv.c:472
 #, c-format
 msgid "cannot open %s."
 msgstr ""
 
-#: util/dnoise.c:510
+#: util/dnoise.c:499
 msgid "dnoise: input MUST be mono or stereo\n"
 msgstr ""
 
-#: util/dnoise.c:518
+#: util/dnoise.c:507
 msgid "dnoise: cannot open noise reference file\n"
 msgstr ""
 
-#: util/dnoise.c:523
+#: util/dnoise.c:512
 msgid "Incompatible sample rates\n"
 msgstr ""
 
-#: util/dnoise.c:542
+#: util/dnoise.c:531
 #, c-format
 msgid "dnoise: warning - N not a valid power of two; revised N = %d\n"
 msgstr ""
 
-#: util/dnoise.c:552
+#: util/dnoise.c:541
 msgid "dnoise: warning - do not specify both M and W\n"
 msgstr ""
 
-#: util/dnoise.c:562
+#: util/dnoise.c:551
 msgid "dnoise: warning - invalid W ignored\n"
 msgstr ""
 
-#: util/dnoise.c:576
+#: util/dnoise.c:565
 msgid "dnoise: warning - M is too small\n"
 msgstr ""
 
-#: util/dnoise.c:586
+#: util/dnoise.c:575
 msgid "dnoise: M too large\n"
 msgstr ""
 
-#: util/dnoise.c:592
+#: util/dnoise.c:581
 msgid "dnoise: L too large\n"
 msgstr ""
 
-#: util/dnoise.c:602
+#: util/dnoise.c:591
 #, c-format
 msgid "writing %u-byte blks of %s to %s"
 msgstr ""
 
-#: util/dnoise.c:627 util/dnoise.c:666 util/dnoise.c:721 util/dnoise.c:732
-#: util/dnoise.c:736 util/dnoise.c:743 util/dnoise.c:753 util/dnoise.c:758
-#: util/dnoise.c:762 util/dnoise.c:766 util/dnoise.c:770
+#: util/dnoise.c:616 util/dnoise.c:655 util/dnoise.c:710 util/dnoise.c:721
+#: util/dnoise.c:725 util/dnoise.c:732 util/dnoise.c:742 util/dnoise.c:747
+#: util/dnoise.c:751 util/dnoise.c:755 util/dnoise.c:759
 msgid "dnoise: insufficient memory\n"
 msgstr ""
 
-#: util/dnoise.c:779 util/dnoise.c:788
+#: util/dnoise.c:768 util/dnoise.c:777
 msgid "dnoise: begin time is greater than EOF of noise file!"
 msgstr ""
 
-#: util/dnoise.c:820
+#: util/dnoise.c:809
 msgid "dnoise: not enough samples of noise reference\n"
 msgstr ""
 
-#: util/dnoise.c:1118
+#: util/dnoise.c:1103
 #, c-format
 msgid "%5.1f seconds of input complete\n"
 msgstr ""
 
-#: util/dnoise.c:1137
+#: util/dnoise.c:1122
 msgid "processing complete\n"
 msgstr ""
 
-#: util/dnoise.c:1147
+#: util/dnoise.c:1132
 msgid "usage: dnoise [flags] input_file"
 msgstr ""
 
-#: util/dnoise.c:1149
+#: util/dnoise.c:1134
 msgid "flags:"
 msgstr ""
 
-#: util/dnoise.c:1150
+#: util/dnoise.c:1135
 msgid "i = noise reference soundfile"
 msgstr ""
 
-#: util/dnoise.c:1151
+#: util/dnoise.c:1136
 msgid "o = output file"
 msgstr ""
 
-#: util/dnoise.c:1152
+#: util/dnoise.c:1137
 msgid "N = # of bandpass filters (1024)"
 msgstr ""
 
-#: util/dnoise.c:1153
+#: util/dnoise.c:1138
 msgid "w = filter overlap factor: {0,1,(2),3} DON'T USE -w AND -M"
 msgstr ""
 
-#: util/dnoise.c:1154
+#: util/dnoise.c:1139
 msgid "M = analysis window length (N-1 unless -w is specified)"
 msgstr ""
 
-#: util/dnoise.c:1155
+#: util/dnoise.c:1140
 msgid "L = synthesis window length (M)"
 msgstr ""
 
-#: util/dnoise.c:1156
+#: util/dnoise.c:1141
 msgid "D = decimation factor (M/8)"
 msgstr ""
 
-#: util/dnoise.c:1157
+#: util/dnoise.c:1142
 msgid "b = begin time in noise reference soundfile (0)"
 msgstr ""
 
-#: util/dnoise.c:1158
+#: util/dnoise.c:1143
 msgid "B = starting sample in noise reference soundfile (0)"
 msgstr ""
 
-#: util/dnoise.c:1159
+#: util/dnoise.c:1144
 msgid "e = end time in noise reference soundfile (end)"
 msgstr ""
 
-#: util/dnoise.c:1160
+#: util/dnoise.c:1145
 msgid "E = final sample in noise reference soundfile (end)"
 msgstr ""
 
-#: util/dnoise.c:1161
+#: util/dnoise.c:1146
 msgid "t = threshold above noise reference in dB (30)"
 msgstr ""
 
-#: util/dnoise.c:1162
+#: util/dnoise.c:1147
 msgid "S = sharpness of noise-gate turnoff (1) (1 to 5)"
 msgstr ""
 
-#: util/dnoise.c:1163
+#: util/dnoise.c:1148
 msgid "n = number of FFT frames to average over (5)"
 msgstr ""
 
-#: util/dnoise.c:1164
+#: util/dnoise.c:1149
 msgid "m = minimum gain of noise-gate when off in dB (-40)"
 msgstr ""
 
-#: util/dnoise.c:1165
+#: util/dnoise.c:1150
 msgid "V : verbose - print status info"
 msgstr ""
 
-#: util/dnoise.c:1166
+#: util/dnoise.c:1151
 msgid "A : AIFF format output"
 msgstr ""
 
-#: util/dnoise.c:1167
+#: util/dnoise.c:1152
 msgid "W : WAV format output"
 msgstr ""
 
-#: util/dnoise.c:1168
+#: util/dnoise.c:1153
 msgid "J : IRCAM format output"
 msgstr ""
 
-#: util/dnoise.c:1187
+#: util/dnoise.c:1172
 #, c-format
 msgid "soundfile write returned sample count of %d, not %d\n"
 msgstr ""
 
-#: util/dnoise.c:1189
+#: util/dnoise.c:1174
 msgid ""
 "(disk may be full...\n"
 " closing the file ...)\n"
 msgstr ""
 
-#: util/dnoise.c:1257
+#: util/dnoise.c:1242
 msgid "Removes noise from a sound file"
 msgstr ""
 
@@ -11067,7 +10954,7 @@ msgstr ""
 msgid "Usage:\tenvext [-flags] soundfile\n"
 msgstr ""
 
-#: util/envext.c:54 util/srconv.c:738
+#: util/envext.c:54 util/srconv.c:737
 msgid "-o fnam\tsound output filename\n"
 msgstr ""
 
@@ -11101,7 +10988,7 @@ msgstr ""
 msgid "enveloping %ld sample frames (%3.1f secs)\n"
 msgstr ""
 
-#: util/envext.c:179
+#: util/envext.c:177
 msgid "Create a text file of envelope"
 msgstr ""
 
@@ -11515,7 +11402,7 @@ msgstr ""
 msgid "Legal flags are:"
 msgstr ""
 
-#: util/mixer.c:107 util/scale.c:60 util/srconv.c:753
+#: util/mixer.c:107 util/scale.c:60 util/srconv.c:752
 msgid "-H#\tprint a heartbeat style 1, 2 or 3 at each soundfile write"
 msgstr ""
 
@@ -11555,7 +11442,7 @@ msgstr ""
 msgid "mixer: error: "
 msgstr ""
 
-#: util/mixer.c:188 util/scale.c:161 util/srconv.c:232
+#: util/mixer.c:188 util/scale.c:161 util/srconv.c:231
 #, c-format
 msgid "%s not a recognized SFOUTYP env setting"
 msgstr ""
@@ -11784,17 +11671,17 @@ msgstr ""
 msgid "Soundfile analysis for pvoc"
 msgstr ""
 
-#: util/pvanal.c:469
+#: util/pvanal.c:467
 #, c-format
 msgid "pvxanal: unable to create analysis file: %s"
 msgstr ""
 
-#: util/pvanal.c:500 util/pvanal.c:532
+#: util/pvanal.c:498 util/pvanal.c:530
 #, c-format
 msgid "pvxanal: error writing analysis frames: %s\n"
 msgstr ""
 
-#: util/pvanal.c:542
+#: util/pvanal.c:540
 #, c-format
 msgid ""
 "\n"
@@ -11884,7 +11771,7 @@ msgstr ""
 msgid "-P fpnum\tscale file to given percentage of full"
 msgstr ""
 
-#: util/scale.c:62 util/srconv.c:755
+#: util/scale.c:62 util/srconv.c:754
 msgid "-- fnam\tlog output to file"
 msgstr ""
 
@@ -12035,75 +11922,75 @@ msgstr ""
 msgid "Sound format -%c has been overruled by -%c"
 msgstr ""
 
-#: util/srconv.c:299
+#: util/srconv.c:298
 msgid "No Q argument"
 msgstr ""
 
-#: util/srconv.c:304
+#: util/srconv.c:303
 msgid "No P argument"
 msgstr ""
 
-#: util/srconv.c:313
+#: util/srconv.c:312
 msgid "No r argument"
 msgstr ""
 
-#: util/srconv.c:322
+#: util/srconv.c:321
 msgid "No break file"
 msgstr ""
 
-#: util/srconv.c:345
+#: util/srconv.c:344
 msgid "No input given\n"
 msgstr ""
 
-#: util/srconv.c:362
+#: util/srconv.c:361
 msgid "srconv: cannot specify both -r and -P"
 msgstr ""
 
-#: util/srconv.c:373
+#: util/srconv.c:372
 msgid "srconv: cannot open time-vary function file"
 msgstr ""
 
-#: util/srconv.c:389
+#: util/srconv.c:388
 msgid "srconv: too few x-y pairs in time-vary function file"
 msgstr ""
 
-#: util/srconv.c:403
+#: util/srconv.c:402
 msgid "srconv: first x value in time-vary function must be 0"
 msgstr ""
 
-#: util/srconv.c:408
+#: util/srconv.c:407
 msgid "srconv: invalid initial y value in time-vary function"
 msgstr ""
 
-#: util/srconv.c:413 util/srconv.c:705
+#: util/srconv.c:412 util/srconv.c:704
 msgid "srconv: invalid x values in time-vary function"
 msgstr ""
 
-#: util/srconv.c:732
+#: util/srconv.c:731
 msgid ""
 "usage: srconv [flags] infile\n"
 "\n"
 "flags:"
 msgstr ""
 
-#: util/srconv.c:733
+#: util/srconv.c:732
 msgid ""
 "-P num\tpitch transposition ratio (srate/r) [do not specify both P and r]"
 msgstr ""
 
-#: util/srconv.c:735
+#: util/srconv.c:734
 msgid "-Q num\tquality factor (1 to 8: default = 2)"
 msgstr ""
 
-#: util/srconv.c:736
+#: util/srconv.c:735
 msgid "-i filnam\tbreak file"
 msgstr ""
 
-#: util/srconv.c:737
+#: util/srconv.c:736
 msgid "-r num\toutput sample rate (must be specified)"
 msgstr ""
 
-#: util/srconv.c:821
+#: util/srconv.c:820
 msgid "Sample rate conversion"
 msgstr ""
 
diff --git a/po/russian.po b/po/russian.po
index 8750949..b221130 100644
--- a/po/russian.po
+++ b/po/russian.po
@@ -31,22 +31,22 @@ msgstr ""
 msgid "auxlist for instr %d (%p):\n"
 msgstr ""
 
-#: Engine/auxfd.c:153
+#: Engine/auxfd.c:154
 #, c-format
 msgid "\tauxch at %p: size %ld, auxp %p, endp %p\n"
 msgstr ""
 
-#: Engine/auxfd.c:165
+#: Engine/auxfd.c:166
 #, c-format
 msgid "fdlist for instr %s [%d] (%p):"
 msgstr ""
 
-#: Engine/auxfd.c:168
+#: Engine/auxfd.c:169
 #, c-format
 msgid "fdlist for instr %d (%p):"
 msgstr ""
 
-#: Engine/auxfd.c:171
+#: Engine/auxfd.c:172
 #, c-format
 msgid "  fd %p in %p"
 msgstr ""
@@ -99,356 +99,316 @@ msgstr "шнур превышает длину позволенную макси
 msgid "(unknown error)"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:214 Engine/rdorch.c:1832
+#: Engine/csound_orc_compile.c:138
+#, c-format
+msgid ""
+"input arg %d '%s' of type %s not allowed when expecting %c (for opcode %s), "
+"line %d\n"
+msgstr ""
+
+#: Engine/csound_orc_compile.c:265 Engine/rdorch.c:1862
 msgid "missing or extra arg"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:218
+#: Engine/csound_orc_compile.c:269
 msgid "too many input args\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:475
+#: Engine/csound_orc_compile.c:304
 #, c-format
-msgid "create_opcode: No rule to handle statement of type %d\n"
+msgid "input arg '%s' used before defined (in opcode %s), line %d\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:671
+#: Engine/csound_orc_compile.c:380
 #, c-format
-msgid "create_instrument: instr num %ld\n"
+msgid ""
+"output name previously used, type '%c' must be uniquely defined, line %d"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:681
+#: Engine/csound_orc_compile.c:386
 #, c-format
-msgid "create_instrument: instr name %s\n"
+msgid "output arg '%s' illegal type (for opcode %s), line %d\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:688 Engine/otran.c:351
-msgid "invalid name for instrument"
-msgstr ""
-
-#: Engine/csound_orc_compile.c:692 Engine/otran.c:356
+#: Engine/csound_orc_compile.c:541
 #, c-format
-msgid "instr %s redefined"
+msgid "create_opcode: No rule to handle statement of type %d\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:833 Engine/otran.c:145 Engine/symbtab.c:394
+#: Engine/csound_orc_compile.c:738
 #, c-format
-msgid "invalid input type for opcode %s"
+msgid "create_instrument: instr num %ld\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:838 Engine/otran.c:150 Engine/symbtab.c:399
+#: Engine/csound_orc_compile.c:748
 #, c-format
-msgid "too many input args for opcode %s"
+msgid "create_instrument: instr name %s\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:853 Engine/otran.c:165 Engine/symbtab.c:414
-#, c-format
-msgid "too many output args for opcode %s"
+#: Engine/csound_orc_compile.c:755 Engine/otran.c:364
+msgid "invalid name for instrument"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:869 Engine/otran.c:187 Engine/symbtab.c:433
+#: Engine/csound_orc_compile.c:759 Engine/otran.c:370
 #, c-format
-msgid "invalid output type for opcode %s"
+msgid "instr %s redefined"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:954 Engine/otran.c:339
+#: Engine/csound_orc_compile.c:903 Engine/otran.c:352
 #, c-format
 msgid "instr %ld redefined"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:964
+#: Engine/csound_orc_compile.c:914
 msgid "!!! csound->opcodeInfo is NULL !!!\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1111
+#: Engine/csound_orc_compile.c:1083
 #, c-format
 msgid "Unknown TREE node of type %d found in root.\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1168 Engine/otran.c:565 Engine/otran.c:1414
+#: Engine/csound_orc_compile.c:1140 Engine/otran.c:579 Engine/otran.c:1433
 #, c-format
 msgid "%s invalid sample rate"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1170 Engine/otran.c:567 Engine/otran.c:1416
+#: Engine/csound_orc_compile.c:1142 Engine/otran.c:581 Engine/otran.c:1435
 #, c-format
 msgid "%s invalid control rate"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1173 Engine/otran.c:570 Engine/otran.c:1412
+#: Engine/csound_orc_compile.c:1146 Engine/otran.c:584 Engine/otran.c:1431
 #, c-format
 msgid "%s invalid ksmps value"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1176 Engine/otran.c:572 Engine/otran.c:1418
+#: Engine/csound_orc_compile.c:1149 Engine/otran.c:587 Engine/otran.c:1437
 #, c-format
 msgid "%s inconsistent sr, kr, ksmps"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1190
+#: Engine/csound_orc_compile.c:1165
 msgid "perf-pass statements illegal in header blk\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1195
+#: Engine/csound_orc_compile.c:1170
 #, c-format
 msgid "%d syntax errors in orchestra.  compilation invalid\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1255 Engine/otran.c:656
+#: Engine/csound_orc_compile.c:1230 Engine/otran.c:671
 msgid "inconsistent argoff sumcount"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1327 Engine/otran.c:725
+#: Engine/csound_orc_compile.c:1302 Engine/otran.c:740
 #, c-format
 msgid "LABELS list is full...extending to %d\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1365 Engine/otran.c:763
+#: Engine/csound_orc_compile.c:1340 Engine/otran.c:778
 #, c-format
 msgid "GOTOS list is full..extending to %d\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1398 Engine/otran.c:796
+#: Engine/csound_orc_compile.c:1373 Engine/otran.c:811
 #, c-format
 msgid "target label '%s' not found"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1463 Engine/otran.c:851
+#: Engine/csound_orc_compile.c:1451 Engine/otran.c:866
 #, c-format
 msgid "string syntax '%s'"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1513 Engine/otran.c:901
+#: Engine/csound_orc_compile.c:1501 Engine/otran.c:916
 #, c-format
 msgid "numeric syntax '%s'"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1539 Engine/otran.c:927
+#: Engine/csound_orc_compile.c:1527 Engine/otran.c:942
 #, c-format
 msgid "extending Floating pool to %d\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1578 Engine/otran.c:999
+#: Engine/csound_orc_compile.c:1566 Engine/otran.c:1018
 msgid "gblnamset(): memory allocation failure"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1606 Engine/otran.c:1027
+#: Engine/csound_orc_compile.c:1594 Engine/otran.c:1046
 msgid "lclnamset(): memory allocation failure"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1632 Engine/otran.c:1052
+#: Engine/csound_orc_compile.c:1620 Engine/otran.c:1071
 msgid "unexpected global name"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1655 Engine/otran.c:1074
+#: Engine/csound_orc_compile.c:1643 Engine/otran.c:1093
 msgid "unknown nametype"
 msgstr ""
 
-#: Engine/csound_orc.l:239
+#: Engine/csound_orc_expressions.c:459
 #, c-format
-msgid "unterminated string found on line %d >>%s<<\n"
+msgid "error: function %s with arg type %c not found, line %d \n"
 msgstr ""
 
-#: Engine/csound_orc.l:259 Engine/csound_orc.l:286 Engine/csound_orc.l:314
-#: Engine/csound_orc.l:367 Engine/rdorch.c:901 Engine/sread.c:396
+#: Engine/csound_orc_expressions.c:862
 #, c-format
-msgid "Undefined macro: '%s'"
-msgstr ""
-
-#: Engine/csound_orc.l:265 Engine/csound_orc.l:292
-msgid "Includes nested too deeply"
+msgid "error: non-existent statement in conditional, line %d \n"
 msgstr ""
 
-#: Engine/csound_orc.l:335 Engine/csound_orc.l:388 Engine/rdorch.c:940
+#: Engine/csound_orc_semantics.c:157
 #, c-format
 msgid ""
-"Missing argument terminator\n"
-"%.98s"
-msgstr ""
-
-#: Engine/csound_orc.l:484
-#, c-format
-msgid "Line %d: Unknown character: '%c'(%2x)\n"
-msgstr ""
-
-#: Engine/csound_orc.l:527
-#, c-format
-msgid "Cannot open file \"%s\"\n"
-msgstr ""
-
-#: Engine/csound_orc.l:573 Engine/rdorch.c:689 Engine/sread.c:1595
-msgid "macro error\n"
-msgstr ""
-
-#: Engine/csound_orc.l:631 Engine/rdorch.c:845 Engine/sread.c:1686
-#, c-format
-msgid "macro %s undefined\n"
-msgstr ""
-
-#: Engine/csound_orc.l:645 Engine/rdorch.c:859 Engine/sread.c:294
-msgid "Undefining undefined macro"
-msgstr ""
-
-#: Engine/csound_orc.l:786 Engine/rdorch.c:413 Engine/sread.c:741
-#, c-format
-msgid "Macro definition for %*s\n"
-msgstr ""
-
-#: Engine/csound_orc.l:789 Engine/rdorch.c:416
-msgid "Invalid macro name for --omacro"
-msgstr ""
-
-#: Engine/csound_orc.y:270
-msgid "No number following instr\n"
-msgstr ""
-
-#: Engine/csound_orc_semantics.c:127
-#, c-format
-msgid "error: %s (token \"%s\")"
+"\n"
+"error: %s  (token \"%s\")"
 msgstr ""
 
-#: Engine/csound_orc_semantics.c:129
+#: Engine/csound_orc_semantics.c:159
 #, c-format
-msgid " line %d: %s"
+msgid ""
+" line %d:\n"
+">>>"
 msgstr ""
 
-#: Engine/csound_orc_semantics.c:702 Engine/rdorch.c:1863
-msgid "insufficient required arguments"
-msgstr ""
+#: Engine/csound_orc_semantics.c:732
+#, fuzzy, c-format
+msgid "insufficient required arguments for opcode %s on line %d\n"
+msgstr "недостаточные аргументы"
 
-#: Engine/csound_orc_semantics.c:768 Engine/rdorch.c:1617 Engine/rdorch.c:1635
-#: Engine/rdorch.c:1676 Engine/rdorch.c:1811 Engine/rdorch.c:1980
+#: Engine/csound_orc_semantics.c:797 Engine/rdorch.c:1644 Engine/rdorch.c:1662
+#: Engine/rdorch.c:1703 Engine/rdorch.c:1841 Engine/rdorch.c:2011
 #, c-format
 msgid "modified opcod: %s"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:113 Engine/cs_par_dispatch.c:125
+#: Engine/cs_par_dispatch.c:115 Engine/cs_par_dispatch.c:128
 #, c-format
 msgid "Poorly specified global lock index: %i [max: %i]\n"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:138 Engine/cs_par_dispatch.c:157
+#: Engine/cs_par_dispatch.c:142 Engine/cs_par_dispatch.c:162
 msgid "Invalid NULL parameter name for a global variable\n"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:505 Engine/cs_par_dispatch.c:528
-#: Engine/cs_par_dispatch.c:2463 Engine/cs_par_dispatch.c:2507
-#: Engine/cs_par_dispatch.c:2509 Engine/cs_par_dispatch.c:2570
+#: Engine/cs_par_dispatch.c:526 Engine/cs_par_dispatch.c:553
+#: Engine/cs_par_dispatch.c:2543 Engine/cs_par_dispatch.c:2588
+#: Engine/cs_par_dispatch.c:2590 Engine/cs_par_dispatch.c:2654
 msgid "Invalid NULL Parameter entry"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:507 Engine/cs_par_dispatch.c:541
-#: Engine/cs_par_dispatch.c:566 Engine/cs_par_dispatch.c:605
+#: Engine/cs_par_dispatch.c:528 Engine/cs_par_dispatch.c:567
+#: Engine/cs_par_dispatch.c:594 Engine/cs_par_dispatch.c:635
 msgid "Invalid NULL Parameter name"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:512
+#: Engine/cs_par_dispatch.c:535
 msgid "Failed to allocate Opcode Weight cache entry"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:632 Engine/cs_par_dispatch.c:718
+#: Engine/cs_par_dispatch.c:664 Engine/cs_par_dispatch.c:755
 msgid "No Weights to Dump (Using Defaults)\n"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:670 Engine/cs_par_dispatch.c:794
+#: Engine/cs_par_dispatch.c:705 Engine/cs_par_dispatch.c:835
 #, c-format
 msgid "Opcode Weight Spec File not found at: %s"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:722
+#: Engine/cs_par_dispatch.c:759
 msgid "Weights Dump\n"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:866
+#: Engine/cs_par_dispatch.c:907
 #, c-format
 msgid "Parallel Spec File not found at: %s"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:872
+#: Engine/cs_par_dispatch.c:913
 msgid "Parallel Spec File invalid format expected weight_min parameter"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:877
+#: Engine/cs_par_dispatch.c:918
 msgid "Parallel Spec File invalid format expected weight_max parameter"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:881
+#: Engine/cs_par_dispatch.c:922
 msgid "Parallel Spec File invalid format expected roots_avail_min parameter"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:885
+#: Engine/cs_par_dispatch.c:926
 msgid "Parallel Spec File invalid format expected roots_avail_max parameter"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:961 Engine/cs_par_dispatch.c:985
-#: Engine/cs_par_dispatch.c:1109 Engine/cs_par_dispatch.c:1195
-#: Engine/cs_par_dispatch.c:1332 Engine/cs_par_dispatch.c:1366
-#: Engine/cs_par_dispatch.c:1383 Engine/cs_par_dispatch.c:1405
-#: Engine/cs_par_dispatch.c:1432 Engine/cs_par_dispatch.c:1452
-#: Engine/cs_par_dispatch.c:1476 Engine/cs_par_dispatch.c:1566
-#: Engine/cs_par_dispatch.c:1621 Engine/cs_par_dispatch.c:1714
-#: Engine/cs_par_dispatch.c:1769 Engine/cs_par_dispatch.c:2597
+#: Engine/cs_par_dispatch.c:1003 Engine/cs_par_dispatch.c:1027
+#: Engine/cs_par_dispatch.c:1155 Engine/cs_par_dispatch.c:1251
+#: Engine/cs_par_dispatch.c:1405 Engine/cs_par_dispatch.c:1439
+#: Engine/cs_par_dispatch.c:1456 Engine/cs_par_dispatch.c:1478
+#: Engine/cs_par_dispatch.c:1506 Engine/cs_par_dispatch.c:1528
+#: Engine/cs_par_dispatch.c:1552 Engine/cs_par_dispatch.c:1644
+#: Engine/cs_par_dispatch.c:1699 Engine/cs_par_dispatch.c:1792
+#: Engine/cs_par_dispatch.c:1847 Engine/cs_par_dispatch.c:2681
 msgid "Invalid NULL Parameter dag"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:966
+#: Engine/cs_par_dispatch.c:1008
 msgid "Failed to allocate dag"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1017 Engine/cs_par_dispatch.c:1040
-#: Engine/cs_par_dispatch.c:1062 Engine/cs_par_dispatch.c:1064
+#: Engine/cs_par_dispatch.c:1060 Engine/cs_par_dispatch.c:1083
+#: Engine/cs_par_dispatch.c:1105 Engine/cs_par_dispatch.c:1107
 msgid "Invalid NULL Parameter dag_node"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1019
+#: Engine/cs_par_dispatch.c:1062
 msgid "Invalid NULL Parameter instr"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1021
+#: Engine/cs_par_dispatch.c:1064
 msgid "Invalid NULL Parameter insds"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1026 Engine/cs_par_dispatch.c:1048
+#: Engine/cs_par_dispatch.c:1069 Engine/cs_par_dispatch.c:1091
 msgid "Failed to allocate dag_node"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1043
+#: Engine/cs_par_dispatch.c:1086
 msgid "Invalid Parameter count must be greater than 0"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1175 Engine/cs_par_dispatch.c:1433
-#: Engine/cs_par_dispatch.c:2465 Engine/cs_par_dispatch.c:2571
-#: Engine/cs_par_dispatch.c:2598
+#: Engine/cs_par_dispatch.c:1229 Engine/cs_par_dispatch.c:1508
+#: Engine/cs_par_dispatch.c:2545 Engine/cs_par_dispatch.c:2655
+#: Engine/cs_par_dispatch.c:2682
 msgid "Invalid NULL Parameter chain"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1183
+#: Engine/cs_par_dispatch.c:1237
 #, c-format
 msgid "Failed to find semantic information for instrument '%i'"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1478
+#: Engine/cs_par_dispatch.c:1554
 msgid "Invalid NULL Parameter node"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1480
+#: Engine/cs_par_dispatch.c:1556
 msgid "Invalid NULL Parameter update_hdl"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1569
+#: Engine/cs_par_dispatch.c:1647
 msgid "Invalid Parameter update_hdl is outside the DAG range"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:2417
+#: Engine/cs_par_dispatch.c:2497
 #, c-format
 msgid "Parallel Dump File not found at: %s for writing"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:2477
+#: Engine/cs_par_dispatch.c:2557
 msgid "Failed to allocate Dag2 cache entry"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:2527
+#: Engine/cs_par_dispatch.c:2610
 msgid "Cache Update\n"
 msgstr ""
 
@@ -462,12 +422,12 @@ msgstr ""
 msgid "Creating search path cache for '%s':"
 msgstr ""
 
-#: Engine/envvar.c:1082
+#: Engine/envvar.c:1083
 #, c-format
 msgid "internal error: csoundFileOpen(): invalid type: %d"
 msgstr ""
 
-#: Engine/envvar.c:1264
+#: Engine/envvar.c:1266
 #, c-format
 msgid "internal error: csoundCreateFileHandle(): invalid type: %d"
 msgstr ""
@@ -525,345 +485,346 @@ msgstr ""
 msgid "expression syntax"
 msgstr ""
 
-#: Engine/fgens.c:95
+#: Engine/fgens.c:91
 msgid "unknown GEN number"
 msgstr ""
 
-#: Engine/fgens.c:137
+#: Engine/fgens.c:133
 msgid "ftable does not exist"
 msgstr ""
 
-#: Engine/fgens.c:142
+#: Engine/fgens.c:138
 #, c-format
 msgid "ftable %d now deleted\n"
 msgstr ""
 
-#: Engine/fgens.c:157 Engine/fgens.c:1597 Engine/fgens.c:1683
-#: Engine/fgens.c:1762 Engine/fgens.c:1878 Engine/fgens.c:1959
-#: Engine/fgens.c:2867
+#: Engine/fgens.c:153 Engine/fgens.c:1593 Engine/fgens.c:1679
+#: Engine/fgens.c:1758 Engine/fgens.c:1874 Engine/fgens.c:1955
+#: Engine/fgens.c:2909
 msgid "insufficient gen arguments"
 msgstr ""
 
-#: Engine/fgens.c:183 Opcodes/ftgen.c:116
+#: Engine/fgens.c:179 Opcodes/ftgen.c:116
 #, c-format
 msgid "Named gen \"%s\" not defined"
 msgstr ""
 
-#: Engine/fgens.c:190
+#: Engine/fgens.c:186
 msgid "illegal gen number"
 msgstr ""
 
-#: Engine/fgens.c:198
-msgid "deferred size for GENs 1, 23 or 28 only"
+#: Engine/fgens.c:194
+msgid "deferred size for GENs 1, 23, 28 or 49 only"
 msgstr ""
 
-#: Engine/fgens.c:201 Engine/fgens.c:249
+#: Engine/fgens.c:197 Engine/fgens.c:245
 #, c-format
 msgid "ftable %d:\n"
 msgstr ""
 
-#: Engine/fgens.c:226 Engine/fgens.c:233
+#: Engine/fgens.c:222 Engine/fgens.c:229
 msgid "illegal table length"
 msgstr ""
 
-#: Engine/fgens.c:292 Engine/fgens.c:2219
+#: Engine/fgens.c:288 Engine/fgens.c:2215
 #, c-format
 msgid ""
 "ftable %d relocating due to size change\n"
 "         currently active instruments may find this disturbing"
 msgstr ""
 
-#: Engine/fgens.c:350 Engine/fgens.c:471 Engine/fgens.c:555 Engine/fgens.c:636
-#: Engine/fgens.c:711 Engine/fgens.c:760 Engine/fgens.c:881 Engine/fgens.c:958
-#: Engine/fgens.c:1053 Engine/fgens.c:1097 Engine/fgens.c:1144
-#: Engine/fgens.c:1397 Engine/fgens.c:1459 Engine/fgens.c:1681
-#: Engine/fgens.c:1759 Engine/fgens.c:2114 Engine/fgens.c:2821
-#: Engine/fgens.c:2864
+#: Engine/fgens.c:346 Engine/fgens.c:467 Engine/fgens.c:551 Engine/fgens.c:632
+#: Engine/fgens.c:707 Engine/fgens.c:756 Engine/fgens.c:877 Engine/fgens.c:954
+#: Engine/fgens.c:1049 Engine/fgens.c:1093 Engine/fgens.c:1140
+#: Engine/fgens.c:1393 Engine/fgens.c:1455 Engine/fgens.c:1677
+#: Engine/fgens.c:1755 Engine/fgens.c:2110 Engine/fgens.c:2863
+#: Engine/fgens.c:2906
 msgid "using extended arguments\n"
 msgstr ""
 
-#: Engine/fgens.c:374
+#: Engine/fgens.c:370
 msgid "no coefs present"
 msgstr ""
 
-#: Engine/fgens.c:379 Engine/fgens.c:645 Engine/fgens.c:653
+#: Engine/fgens.c:375 Engine/fgens.c:641 Engine/fgens.c:649
 msgid "illegal x interval"
 msgstr ""
 
-#: Engine/fgens.c:408 Engine/fgens.c:557 Engine/fgens.c:638 Engine/fgens.c:883
-#: Engine/fgens.c:1354 Engine/fgens.c:2378 Engine/fgens.c:2694 Top/main.c:142
-#: util/cvanal.c:66 util/lpanal.c:398 util/pvanal.c:170
+#: Engine/fgens.c:404 Engine/fgens.c:553 Engine/fgens.c:634 Engine/fgens.c:879
+#: Engine/fgens.c:1350 Engine/fgens.c:2375 Engine/fgens.c:2690
+#: Engine/fgens.c:2810 Top/main.c:141 util/cvanal.c:66 util/lpanal.c:398
+#: util/pvanal.c:170
 msgid "insufficient arguments"
 msgstr "недостаточные аргументы"
 
-#: Engine/fgens.c:412 Engine/fgens.c:1359
+#: Engine/fgens.c:408 Engine/fgens.c:1355
 msgid "unknown srctable number"
 msgstr ""
 
-#: Engine/fgens.c:425
+#: Engine/fgens.c:421
 msgid "table size too large"
 msgstr ""
 
-#: Engine/fgens.c:510 Engine/fgens.c:543
+#: Engine/fgens.c:506 Engine/fgens.c:539
 msgid "gen call has negative segment size:"
 msgstr ""
 
-#: Engine/fgens.c:512
+#: Engine/fgens.c:508
 msgid "illegal input vals for gen call, beginning:"
 msgstr ""
 
-#: Engine/fgens.c:578
+#: Engine/fgens.c:574
 msgid "negative segsiz"
 msgstr ""
 
-#: Engine/fgens.c:787
+#: Engine/fgens.c:783
 msgid "nh partials < 1"
 msgstr ""
 
-#: Engine/fgens.c:886
+#: Engine/fgens.c:882
 msgid "illegal xint value"
 msgstr ""
 
-#: Engine/fgens.c:889
+#: Engine/fgens.c:885
 msgid "illegal xamp value"
 msgstr ""
 
-#: Engine/fgens.c:961
+#: Engine/fgens.c:957
 msgid "uneven number of args"
 msgstr ""
 
-#: Engine/fgens.c:1081
+#: Engine/fgens.c:1077
 msgid "gen call has illegal x-ordinate values:"
 msgstr ""
 
-#: Engine/fgens.c:1099
+#: Engine/fgens.c:1095
 msgid "wrong number of args"
 msgstr "неправильный число аргументов"
 
-#: Engine/fgens.c:1113
+#: Engine/fgens.c:1109
 msgid "a range given exceeds table length"
 msgstr ""
 
-#: Engine/fgens.c:1120
+#: Engine/fgens.c:1116
 msgid "an input function does not exist"
 msgstr ""
 
-#: Engine/fgens.c:1253
+#: Engine/fgens.c:1249
 msgid "No such window!"
 msgstr ""
 
-#: Engine/fgens.c:1271
+#: Engine/fgens.c:1267
 msgid "Wrong number of input arguments"
 msgstr "неправильный число аргументов входного сигнала"
 
-#: Engine/fgens.c:1272
+#: Engine/fgens.c:1268
 msgid "unknown distribution"
 msgstr ""
 
-#: Engine/fgens.c:1321
+#: Engine/fgens.c:1317
 msgid "error opening ASCII file"
 msgstr ""
 
-#: Engine/fgens.c:1327
+#: Engine/fgens.c:1323
 #, c-format
 msgid "%ld elements in %s\n"
 msgstr ""
 
-#: Engine/fgens.c:1338
+#: Engine/fgens.c:1334
 msgid "Numbers after table full in GEN23"
 msgstr ""
 
-#: Engine/fgens.c:1367
+#: Engine/fgens.c:1363
 msgid "table size must be the same of source table"
 msgstr ""
 
-#: Engine/fgens.c:1439 Engine/fgens.c:1499
+#: Engine/fgens.c:1435 Engine/fgens.c:1495
 msgid "x coordinates must all be in increasing order:"
 msgstr ""
 
-#: Engine/fgens.c:1442 Engine/fgens.c:1501
+#: Engine/fgens.c:1438 Engine/fgens.c:1497
 msgid "x coordinate greater than function size:"
 msgstr ""
 
-#: Engine/fgens.c:1446
+#: Engine/fgens.c:1442
 msgid "illegal input val (y <= 0) for gen call, beginning:"
 msgstr ""
 
-#: Engine/fgens.c:1519
+#: Engine/fgens.c:1515
 msgid "GEN28 requires zero table length"
 msgstr ""
 
-#: Engine/fgens.c:1581
+#: Engine/fgens.c:1577
 msgid "could not open space file"
 msgstr ""
 
-#: Engine/fgens.c:1583
+#: Engine/fgens.c:1579
 msgid "Time values must be in increasing order"
 msgstr ""
 
-#: Engine/fgens.c:1604
+#: Engine/fgens.c:1600
 msgid "GEN30: source ftable not found"
 msgstr ""
 
-#: Engine/fgens.c:1687
+#: Engine/fgens.c:1683
 msgid "GEN31: source ftable not found"
 msgstr ""
 
-#: Engine/fgens.c:1795
+#: Engine/fgens.c:1791
 #, c-format
 msgid "GEN32: source ftable %d not found"
 msgstr ""
 
-#: Engine/fgens.c:1889
+#: Engine/fgens.c:1885
 msgid "GEN33: source ftable not found"
 msgstr ""
 
-#: Engine/fgens.c:2057
+#: Engine/fgens.c:2053
 msgid "unknown source table number"
 msgstr ""
 
-#: Engine/fgens.c:2089
+#: Engine/fgens.c:2085
 msgid "Gen41: negative probability not allowed"
 msgstr ""
 
-#: Engine/fgens.c:2155 Opcodes/fareygen.c:70
+#: Engine/fgens.c:2151 Opcodes/fareygen.c:70
 #, c-format
 msgid "ftable %d: "
 msgstr ""
 
-#: Engine/fgens.c:2199
+#: Engine/fgens.c:2195
 #, c-format
 msgid "ftable %d:"
 msgstr ""
 
-#: Engine/fgens.c:2214
+#: Engine/fgens.c:2210
 #, c-format
 msgid "replacing previous ftable %d"
 msgstr ""
 
-#: Engine/fgens.c:2250 Engine/fgens.c:2337 Engine/fgens.c:2361
-#: Opcodes/gab/gab.c:578 Opcodes/gab/gab.c:632 Opcodes/midiops2.c:218
+#: Engine/fgens.c:2246 Engine/fgens.c:2334 Engine/fgens.c:2358
+#: Opcodes/gab/gab.c:580 Opcodes/gab/gab.c:634 Opcodes/midiops2.c:218
 #: Opcodes/midiops2.c:370 Opcodes/midiops2.c:452 Opcodes/uggab.c:1317
 #: Opcodes/uggab.c:1344 Opcodes/uggab.c:1364 Opcodes/uggab.c:1407
 #, c-format
 msgid "Invalid ftable no. %f"
 msgstr ""
 
-#: Engine/fgens.c:2255
+#: Engine/fgens.c:2251
 #, c-format
 msgid "deferred-size ftable %f illegal here"
 msgstr ""
 
-#: Engine/fgens.c:2281
+#: Engine/fgens.c:2278 Engine/fgens.c:2848
 #, c-format
 msgid "Deferred load of '%s' failed"
 msgstr ""
 
-#: Engine/fgens.c:2343
+#: Engine/fgens.c:2340
 #, c-format
 msgid "Deferred-size ftable %f load not available at perf time."
 msgstr ""
 
-#: Engine/fgens.c:2402
+#: Engine/fgens.c:2399
 #, c-format
 msgid "non-deferred ftable %d needs size %d\n"
 msgstr ""
 
-#: Engine/fgens.c:2449 Opcodes/loscilx.c:62
+#: Engine/fgens.c:2446 Opcodes/loscilx.c:64
 #, c-format
 msgid "invalid sample format: %d"
 msgstr ""
 
-#: Engine/fgens.c:2457 Engine/fgens.c:2718
+#: Engine/fgens.c:2454 Engine/fgens.c:2714
 #, c-format
 msgid "channel %d illegal"
 msgstr ""
 
-#: Engine/fgens.c:2463
+#: Engine/fgens.c:2460
 msgid "deferred alloc\n"
 msgstr ""
 
-#: Engine/fgens.c:2471
+#: Engine/fgens.c:2468
 msgid "deferred size, but filesize unknown"
 msgstr ""
 
-#: Engine/fgens.c:2474
+#: Engine/fgens.c:2471
 #, c-format
 msgid "  defer length %d\n"
 msgstr ""
 
-#: Engine/fgens.c:2543
+#: Engine/fgens.c:2540
 msgid "GEN1: input file truncated by ftable size"
 msgstr ""
 
-#: Engine/fgens.c:2547
+#: Engine/fgens.c:2544
 #, c-format
 msgid "\tlooping endpoint %d exceeds ftsize %d\n"
 msgstr ""
 
-#: Engine/fgens.c:2569
+#: Engine/fgens.c:2566
 msgid "GEN1 read error"
 msgstr ""
 
-#: Engine/fgens.c:2574
+#: Engine/fgens.c:2571
 msgid "GEN1: aiff file truncated by ftable size"
 msgstr ""
 
-#: Engine/fgens.c:2575
+#: Engine/fgens.c:2572
 #, c-format
 msgid "\taudio samps %d exceeds ftsize %d"
 msgstr ""
 
-#: Engine/fgens.c:2619
+#: Engine/fgens.c:2616
 msgid "wrong number of ftable arguments"
 msgstr ""
 
-#: Engine/fgens.c:2629 OOps/pstream.c:326
+#: Engine/fgens.c:2626 OOps/pstream.c:326
 msgid "Failed to load PVOC-EX file"
 msgstr ""
 
-#: Engine/fgens.c:2640 InOut/midirecv.c:416 OOps/midiops.c:377
+#: Engine/fgens.c:2637 InOut/midirecv.c:416 OOps/midiops.c:377
 #: OOps/midiops.c:419 OOps/midiops.c:431
 msgid "illegal channel number"
 msgstr ""
 
-#: Engine/fgens.c:2658
+#: Engine/fgens.c:2655
 msgid "ftable size too small"
 msgstr ""
 
-#: Engine/fgens.c:2734 Opcodes/mp3in.c:79 Opcodes/mp3in.c:218
+#: Engine/fgens.c:2730 Opcodes/mp3in.c:80 Opcodes/mp3in.c:219
 msgid "Not enough memory\n"
 msgstr ""
 
-#: Engine/fgens.c:2831
+#: Engine/fgens.c:2873
 msgid "gen51: invalid number of p-fields (too few grades)"
 msgstr ""
 
-#: Engine/fgens.c:2871
+#: Engine/fgens.c:2913
 msgid "number of channels inconsistent with number of args"
 msgstr ""
 
-#: Engine/fgens.c:3030
+#: Engine/fgens.c:3072
 msgid "GEN53: invalid number of gen arguments"
 msgstr ""
 
-#: Engine/fgens.c:3040
+#: Engine/fgens.c:3082
 msgid "GEN53: invalid table length"
 msgstr ""
 
-#: Engine/fgens.c:3044
+#: Engine/fgens.c:3086
 msgid "GEN53: invalid source table number"
 msgstr ""
 
-#: Engine/fgens.c:3047
+#: Engine/fgens.c:3089
 msgid "GEN53: mode must be in the range 0 to 15"
 msgstr ""
 
-#: Engine/fgens.c:3051
+#: Engine/fgens.c:3093
 msgid "GEN53: invalid source table length"
 msgstr ""
 
-#: Engine/fgens.c:3056
+#: Engine/fgens.c:3098
 msgid "GEN53: invalid window table"
 msgstr ""
 
@@ -887,31 +848,31 @@ msgstr ""
 msgid "Instrument %d muted\n"
 msgstr ""
 
-#: Engine/insert.c:103 Engine/insert.c:1249
+#: Engine/insert.c:103 Engine/insert.c:1301
 #, c-format
 msgid "instr %s expects midi event data, cannot run from score\n"
 msgstr ""
 
-#: Engine/insert.c:106 Engine/insert.c:1252
+#: Engine/insert.c:106 Engine/insert.c:1304
 #, c-format
 msgid "instr %d expects midi event data, cannot run from score\n"
 msgstr ""
 
-#: Engine/insert.c:115 Engine/insert.c:279 Engine/insert.c:1234
+#: Engine/insert.c:115 Engine/insert.c:279 Engine/insert.c:1286
 #, c-format
 msgid "cannot allocate last note because it exceeds 100%% of cpu time"
 msgstr ""
 
-#: Engine/insert.c:121 Engine/insert.c:285 Engine/insert.c:1239
+#: Engine/insert.c:121 Engine/insert.c:285 Engine/insert.c:1291
 msgid "cannot allocate last note because it exceeds instr maxalloc"
 msgstr ""
 
-#: Engine/insert.c:137 Engine/insert.c:305 Engine/insert.c:1270
+#: Engine/insert.c:137 Engine/insert.c:305 Engine/insert.c:1322
 #, c-format
 msgid "new alloc for instr %s:\n"
 msgstr ""
 
-#: Engine/insert.c:139 Engine/insert.c:307 Engine/insert.c:1272
+#: Engine/insert.c:139 Engine/insert.c:307 Engine/insert.c:1324
 #, c-format
 msgid "new alloc for instr %d:\n"
 msgstr ""
@@ -926,12 +887,12 @@ msgstr ""
 msgid "instr %d uses %d p-fields but is given %d"
 msgstr ""
 
-#: Engine/insert.c:251 Engine/insert.c:463
+#: Engine/insert.c:251 Engine/insert.c:482
 #, c-format
 msgid "instr %s now active:\n"
 msgstr ""
 
-#: Engine/insert.c:253 Engine/insert.c:465
+#: Engine/insert.c:253 Engine/insert.c:484
 #, c-format
 msgid "instr %d now active:\n"
 msgstr ""
@@ -951,153 +912,153 @@ msgstr ""
 msgid "MIDI note overlaps with key %d on same channel"
 msgstr ""
 
-#: Engine/insert.c:566
+#: Engine/insert.c:585
 #, c-format
 msgid "removed instance of instr %s\n"
 msgstr ""
 
-#: Engine/insert.c:568
+#: Engine/insert.c:587
 #, c-format
 msgid "removed instance of instr %d\n"
 msgstr ""
 
-#: Engine/insert.c:691
+#: Engine/insert.c:710
 msgid "inactive allocs returned to freespace\n"
 msgstr ""
 
-#: Engine/insert.c:716
+#: Engine/insert.c:735
 #, c-format
 msgid "could not find playing instr %f\n"
 msgstr ""
 
-#: Engine/insert.c:729
+#: Engine/insert.c:748
 msgid ""
 "\n"
 "INIT ERROR: "
 msgstr ""
 
-#: Engine/insert.c:742
+#: Engine/insert.c:761
 #, c-format
 msgid "INIT ERROR in instr %d (opcode %s): "
 msgstr ""
 
-#: Engine/insert.c:745
+#: Engine/insert.c:764
 #, c-format
 msgid "INIT ERROR in instr %d (subinstr %d): "
 msgstr ""
 
-#: Engine/insert.c:749
+#: Engine/insert.c:768
 #, c-format
 msgid "INIT ERROR in instr %d: "
 msgstr ""
 
-#: Engine/insert.c:767
+#: Engine/insert.c:786
 msgid ""
 "\n"
 "PERF ERROR: "
 msgstr ""
 
-#: Engine/insert.c:780
+#: Engine/insert.c:799
 #, c-format
 msgid "PERF ERROR in instr %d (opcode %s): "
 msgstr ""
 
-#: Engine/insert.c:783
+#: Engine/insert.c:802
 #, c-format
 msgid "PERF ERROR in instr %d (subinstr %d): "
 msgstr ""
 
-#: Engine/insert.c:787
+#: Engine/insert.c:806
 #, c-format
 msgid "PERF ERROR in instr %d: "
 msgstr ""
 
-#: Engine/insert.c:792
+#: Engine/insert.c:811
 msgid "   note aborted\n"
 msgstr ""
 
-#: Engine/insert.c:820
+#: Engine/insert.c:839
 msgid "subinstr: number of output args greater than nchnls"
 msgstr ""
 
-#: Engine/insert.c:861
+#: Engine/insert.c:880
 msgid "subinstr: too many p-fields"
 msgstr ""
 
-#: Engine/insert.c:920
+#: Engine/insert.c:939
 #, c-format
 msgid "%s: invalid local ksmps value: %d"
 msgstr ""
 
-#: Engine/insert.c:1040 OOps/bus.c:835 Opcodes/stackops.c:293
+#: Engine/insert.c:1062 OOps/bus.c:835 Opcodes/stackops.c:286
 #, c-format
 msgid "%s: not initialised"
 msgstr "%s: не выступлено с иничиативой"
 
-#: Engine/insert.c:1169
+#: Engine/insert.c:1221
 #, c-format
 msgid "setksmps: invalid ksmps value: %d"
 msgstr ""
 
-#: Engine/insert.c:1225
+#: Engine/insert.c:1277
 #, c-format
 msgid "schedule event ignored. instr %d undefined\n"
 msgstr ""
 
-#: Engine/insert.c:1303
+#: Engine/insert.c:1355
 #, c-format
 msgid "instr %s pmax = %d, note pcnt = %d"
 msgstr ""
 
-#: Engine/insert.c:1306
+#: Engine/insert.c:1358
 #, c-format
 msgid "instr %d pmax = %d, note pcnt = %d"
 msgstr ""
 
-#: Engine/insert.c:1314
+#: Engine/insert.c:1366
 #, c-format
 msgid "psave beg at %p\n"
 msgstr ""
 
-#: Engine/insert.c:1322
+#: Engine/insert.c:1374
 #, c-format
 msgid "   ending at %p\n"
 msgstr ""
 
-#: Engine/insert.c:1466
+#: Engine/insert.c:1518
 msgid "subinstr: not initialised"
 msgstr ""
 
-#: Engine/insert.c:1723
+#: Engine/insert.c:1855
 #, c-format
 msgid ""
 "instr %d allocated at %p\n"
 "\tlclbas %p, opds %p\n"
 msgstr ""
 
-#: Engine/insert.c:1740
+#: Engine/insert.c:1872
 #, c-format
 msgid "op %d (%s) allocated at %p\n"
 msgstr ""
 
-#: Engine/insert.c:1766
+#: Engine/insert.c:1898
 msgid "null iopadr"
 msgstr ""
 
-#: Engine/insert.c:1777
+#: Engine/insert.c:1909
 msgid "null opadr"
 msgstr ""
 
-#: Engine/insert.c:1834
+#: Engine/insert.c:1966
 msgid "inconsistent opds total"
 msgstr ""
 
-#: Engine/insert.c:1879
+#: Engine/insert.c:2011
 #, c-format
 msgid "Instrument %s is still active"
 msgstr ""
 
-#: Engine/insert.c:1882
+#: Engine/insert.c:2014
 #, c-format
 msgid "Instrument %d is still active"
 msgstr ""
@@ -1131,7 +1092,7 @@ msgstr ""
 msgid "multiple string p-fields"
 msgstr ""
 
-#: Engine/linevent.c:273 Engine/rdorch.c:1157
+#: Engine/linevent.c:273 Engine/rdorch.c:1184
 msgid "unmatched quotes"
 msgstr ""
 
@@ -1190,297 +1151,292 @@ msgstr ""
 msgid "memory allocate failure for %lu"
 msgstr ""
 
-#: Engine/memfiles.c:112
+#: Engine/memfiles.c:113
 #, c-format
 msgid "cannot load %s\n"
 msgstr ""
 
-#: Engine/memfiles.c:118
+#: Engine/memfiles.c:119
 #, c-format
 msgid "cannot load %s, or SADIR undefined\n"
 msgstr ""
 
-#: Engine/memfiles.c:130
+#: Engine/memfiles.c:131
 #, c-format
 msgid "error processing file %s\n"
 msgstr ""
 
-#: Engine/memfiles.c:136 Engine/memfiles.c:319
+#: Engine/memfiles.c:137 Engine/memfiles.c:320
 #, c-format
 msgid "file %s (%ld bytes) loaded into memory\n"
 msgstr ""
 
-#: Engine/memfiles.c:199
+#: Engine/memfiles.c:200
 msgid ""
 "PVOCEX_LoadFile(): error:\n"
 "    "
 msgstr ""
 
-#: Engine/memfiles.c:216
+#: Engine/memfiles.c:217
 msgid "Empty or NULL file name"
 msgstr ""
 
-#: Engine/memfiles.c:234
+#: Engine/memfiles.c:235
 #, c-format
 msgid "unable to open pvocex file %s: %s"
 msgstr ""
 
-#: Engine/memfiles.c:240
+#: Engine/memfiles.c:241
 #, c-format
 msgid "pvoc-ex file %s is not 32bit floats"
 msgstr ""
 
-#: Engine/memfiles.c:246
+#: Engine/memfiles.c:247
 #, c-format
 msgid "pvoc-ex file %s not in AMP_FREQ format"
 msgstr ""
 
-#: Engine/memfiles.c:252
+#: Engine/memfiles.c:253
 #, c-format
 msgid "pvoc-ex file %s is empty!"
 msgstr ""
 
-#: Engine/memfiles.c:282
+#: Engine/memfiles.c:283
 #, c-format
 msgid "error reading pvoc-ex file %s"
 msgstr ""
 
-#: Engine/memfiles.c:286
+#: Engine/memfiles.c:287
 #, c-format
 msgid "error reading pvoc-ex file %s after %d frames"
 msgstr ""
 
-#: Engine/memfiles.c:291 Opcodes/pvinterp.c:71 Opcodes/pvinterp.c:174
-#: Opcodes/pvinterp.c:346 Opcodes/ugens9.c:97 Opcodes/vpvoc.c:201
+#: Engine/memfiles.c:292 Opcodes/pvinterp.c:71 Opcodes/pvinterp.c:173
+#: Opcodes/pvinterp.c:344 Opcodes/ugens9.c:97 Opcodes/vpvoc.c:202
 #, c-format
 msgid "%s's srate = %8.0f, orch's srate = %8.0f"
 msgstr ""
 
-#: Engine/memfiles.c:389
+#: Engine/memfiles.c:390
 #, c-format
 msgid "csoundLoadSoundFile(): failed to open '%s'"
 msgstr ""
 
-#: Engine/memfiles.c:444
+#: Engine/memfiles.c:445
 #, c-format
 msgid "csoundLoadSoundFile(): error reading '%s'"
 msgstr ""
 
-#: Engine/memfiles.c:450
+#: Engine/memfiles.c:451
 #, c-format
 msgid ""
 "File '%s' (sr = %d Hz, %d channel(s), %lu sample frames) loaded into memory\n"
 msgstr ""
 
-#: Engine/musmon.c:79
+#: Engine/musmon.c:81
 #, c-format
 msgid "Elapsed time at %s: real: %.3fs, CPU: %.3fs\n"
 msgstr ""
 
-#: Engine/musmon.c:106
+#: Engine/musmon.c:108
 msgid "illegal istartempo value"
 msgstr ""
 
-#: Engine/musmon.c:109
+#: Engine/musmon.c:111
 msgid "Beat mode not in force"
 msgstr ""
 
-#: Engine/musmon.c:182 Top/main.c:122
+#: Engine/musmon.c:184 Top/main.c:121
 #, c-format
 msgid "Csound version %s beta (double samples) %s\n"
 msgstr ""
 
-#: Engine/musmon.c:185 Top/main.c:125
+#: Engine/musmon.c:187 Top/main.c:124
 #, c-format
 msgid "Csound version %s (double samples) %s\n"
 msgstr ""
 
-#: Engine/musmon.c:190 Top/main.c:114
+#: Engine/musmon.c:192 Top/main.c:113
 #, c-format
 msgid "Csound version %s beta (float samples) %s\n"
 msgstr ""
 
-#: Engine/musmon.c:193 Top/main.c:117
+#: Engine/musmon.c:195 Top/main.c:116
 #, c-format
 msgid "Csound version %s (float samples) %s\n"
 msgstr ""
 
-#: Engine/musmon.c:218
+#: Engine/musmon.c:220
 msgid "orch now loaded\n"
 msgstr ""
 
-#: Engine/musmon.c:243
+#: Engine/musmon.c:245
 msgid "k-period aligned audio buffering\n"
 msgstr ""
 
-#: Engine/musmon.c:259
+#: Engine/musmon.c:261
 #, c-format
 msgid "audio buffered in %d sample-frame blocks\n"
 msgstr ""
 
-#: Engine/musmon.c:276 Top/main.c:395
-#, c-format
-msgid "cannot reopen %s"
-msgstr ""
-
-#: Engine/musmon.c:287
+#: Engine/musmon.c:283
 msgid "using Cscore processing\n"
 msgstr ""
 
-#: Engine/musmon.c:290
+#: Engine/musmon.c:286
 msgid "cannot create cscore.out"
 msgstr ""
 
-#: Engine/musmon.c:303
+#: Engine/musmon.c:299
 msgid "cannot reopen cscore.out"
 msgstr ""
 
-#: Engine/musmon.c:307 Engine/musmon.c:315
+#: Engine/musmon.c:303
 msgid "cannot reopen cscore.srt"
 msgstr ""
 
-#: Engine/musmon.c:309
+#: Engine/musmon.c:305
 msgid "sorting cscore.out ..\n"
 msgstr ""
 
-#: Engine/musmon.c:313 Top/main.c:409
+#: Engine/musmon.c:311 Top/main.c:401
 msgid "\t... done\n"
 msgstr ""
 
-#: Engine/musmon.c:317
+#: Engine/musmon.c:312
 msgid "playing from cscore.srt\n"
 msgstr ""
 
-#: Engine/musmon.c:321 Engine/musmon.c:453 Engine/musmon.c:1021
-#: Engine/musmon.c:1225
+#: Engine/musmon.c:316 Engine/musmon.c:446 Engine/musmon.c:1015
+#: Engine/musmon.c:1216
 #, c-format
 msgid "SECTION %d:\n"
 msgstr ""
 
-#: Engine/musmon.c:397
+#: Engine/musmon.c:390
 msgid "end of score.\t\t   overall amps:"
 msgstr ""
 
-#: Engine/musmon.c:408
+#: Engine/musmon.c:401
 msgid ""
 "\n"
 "\t   overall samples out of range:"
 msgstr ""
 
-#: Engine/musmon.c:412
+#: Engine/musmon.c:405
 #, c-format
 msgid ""
 "\n"
 "%d errors in performance\n"
 msgstr ""
 
-#: Engine/musmon.c:414
+#: Engine/musmon.c:407
 msgid "end of performance"
 msgstr ""
 
-#: Engine/musmon.c:428
+#: Engine/musmon.c:421
 msgid "no sound written to disk\n"
 msgstr ""
 
-#: Engine/musmon.c:443
+#: Engine/musmon.c:436
 #, c-format
 msgid "%c\tbeep!\n"
 msgstr ""
 
-#: Engine/musmon.c:509 Engine/musmon.c:555
+#: Engine/musmon.c:502 Engine/musmon.c:548
 msgid "\t number of samples out of range:"
 msgstr ""
 
-#: Engine/musmon.c:548
+#: Engine/musmon.c:541
 #, c-format
 msgid "end of section %d\t sect peak amps:"
 msgstr ""
 
-#: Engine/musmon.c:550
+#: Engine/musmon.c:543
 msgid "end of lplay event list\t      peak amps:"
 msgstr ""
 
-#: Engine/musmon.c:614 Engine/musmon.c:639
+#: Engine/musmon.c:607 Engine/musmon.c:632
 #, c-format
 msgid " - note deleted. instr %s undefined"
 msgstr ""
 
-#: Engine/musmon.c:618
+#: Engine/musmon.c:611
 #, c-format
 msgid "Setting instrument %s %s\n"
 msgstr ""
 
-#: Engine/musmon.c:619 Engine/musmon.c:632
+#: Engine/musmon.c:612 Engine/musmon.c:625
 #: Opcodes/fluidOpcodes/fluidOpcodes.c:207
 #: Opcodes/fluidOpcodes/fluidOpcodes.c:208
 msgid "off"
 msgstr ""
 
-#: Engine/musmon.c:619 Engine/musmon.c:632
+#: Engine/musmon.c:612 Engine/musmon.c:625
 #: Opcodes/fluidOpcodes/fluidOpcodes.c:207
 #: Opcodes/fluidOpcodes/fluidOpcodes.c:208
 msgid "on"
 msgstr ""
 
-#: Engine/musmon.c:627 Engine/musmon.c:666
+#: Engine/musmon.c:620 Engine/musmon.c:659
 #, c-format
 msgid " - note deleted. instr %d(%d) undefined"
 msgstr ""
 
-#: Engine/musmon.c:631
+#: Engine/musmon.c:624
 #, c-format
 msgid "Setting instrument %d %s\n"
 msgstr ""
 
-#: Engine/musmon.c:657
+#: Engine/musmon.c:650
 #, c-format
 msgid " - note deleted.  i%d (%s) had %d init errors"
 msgstr ""
 
-#: Engine/musmon.c:687
+#: Engine/musmon.c:680
 #, c-format
 msgid " - note deleted.  i%d had %d init errors"
 msgstr ""
 
-#: Engine/musmon.c:708
+#: Engine/musmon.c:701
 #, c-format
 msgid "time advanced %5.3f beats by score request\n"
 msgstr ""
 
-#: Engine/musmon.c:725
+#: Engine/musmon.c:719
 #, c-format
 msgid "\t\t   T%7.3f - note deleted. "
 msgstr ""
 
-#: Engine/musmon.c:729
+#: Engine/musmon.c:723
 #, c-format
 msgid "instr %s had %d init errors\n"
 msgstr ""
 
-#: Engine/musmon.c:731
+#: Engine/musmon.c:725
 #, c-format
 msgid "instr %d had %d init errors\n"
 msgstr ""
 
-#: Engine/musmon.c:822
+#: Engine/musmon.c:816
 msgid "terminating.\n"
 msgstr ""
 
-#: Engine/musmon.c:908
+#: Engine/musmon.c:902
 #, c-format
 msgid "error in score.  illegal opcode %c (ASCII %d)\n"
 msgstr ""
 
-#: Engine/musmon.c:1135
+#: Engine/musmon.c:1129
 msgid "insert_score_event(): invalid instrument number or name\n"
 msgstr ""
 
-#: Engine/musmon.c:1155
+#: Engine/musmon.c:1149
 #, c-format
 msgid "insert_score_event(): unknown opcode: %c\n"
 msgstr ""
 
-#: Engine/musmon.c:1178
+#: Engine/musmon.c:1172
 msgid "insert_score_event(): insufficient p-fields\n"
 msgstr ""
 
@@ -1503,350 +1459,402 @@ msgstr ""
 msgid "cannot find the specified instrument or opcode"
 msgstr ""
 
-#: Engine/new_orc_parser.c:74 Engine/rdorch.c:488
+#: Engine/new_orc_parser.c:91
+msgid "Unmatched #ifdef\n"
+msgstr ""
+
+#: Engine/otran.c:149 Engine/symbtab.c:413
 #, c-format
-msgid "cannot open orch file %s"
+msgid "invalid input type for opcode %s"
+msgstr ""
+
+#: Engine/otran.c:154 Engine/symbtab.c:418
+#, c-format
+msgid "too many input args for opcode %s"
 msgstr ""
 
-#: Engine/otran.c:312 Engine/otran.c:319
+#: Engine/otran.c:169 Engine/symbtab.c:433
+#, c-format
+msgid "too many output args for opcode %s"
+msgstr ""
+
+#: Engine/otran.c:194 Engine/symbtab.c:458
+#, c-format
+msgid "invalid output type for opcode %s"
+msgstr ""
+
+#: Engine/otran.c:325 Engine/otran.c:332
 msgid "missing instrument number or name"
 msgstr ""
 
-#: Engine/otran.c:324
+#: Engine/otran.c:337
 msgid "illegal instr number"
 msgstr ""
 
-#: Engine/otran.c:374
+#: Engine/otran.c:388
 msgid "No opcode name"
 msgstr ""
 
-#: Engine/otran.c:379 Engine/symbtab.c:501
+#: Engine/otran.c:393 Engine/symbtab.c:538
 msgid "invalid name for opcode"
 msgstr ""
 
-#: Engine/otran.c:383
+#: Engine/otran.c:397
 #, c-format
 msgid ""
 "opcode declaration error (usage: opcode name, outtypes, intypes) -- opcode %s"
 msgstr ""
 
-#: Engine/otran.c:394 Engine/symbtab.c:511
+#: Engine/otran.c:408 Engine/symbtab.c:548
 #, c-format
 msgid "cannot redefine %s"
 msgstr ""
 
-#: Engine/otran.c:398 Engine/symbtab.c:516
+#: Engine/otran.c:412 Engine/symbtab.c:553
 #, c-format
 msgid "WARNING: redefined opcode: %s\n"
 msgstr ""
 
-#: Engine/otran.c:489
+#: Engine/otran.c:503
 msgid "string constant used as output"
 msgstr ""
 
-#: Engine/otran.c:520
+#: Engine/otran.c:534
 msgid "Missing endin"
 msgstr ""
 
-#: Engine/otran.c:584
+#: Engine/otran.c:599
 msgid "perf-pass statements illegal in header blk"
 msgstr ""
 
-#: Engine/otran.c:588
+#: Engine/otran.c:603
 #, c-format
 msgid "%d syntax errors in orchestra.  compilation invalid"
 msgstr ""
 
-#: Engine/otran.c:1238
+#: Engine/otran.c:1257
 msgid "bad value for 0dbfs: must be positive."
 msgstr ""
 
-#: Engine/otran.c:1248
+#: Engine/otran.c:1267
 #, c-format
 msgid "sample rate overrides: esr = %7.4f, ekr = %7.4f, ksmps = %d\n"
 msgstr ""
 
-#: Engine/otran.c:1320
+#: Engine/otran.c:1339
 msgid "internal error: string constant outarg"
 msgstr ""
 
-#: Engine/otran.c:1346
+#: Engine/otran.c:1365
 #, c-format
 msgid "i%d pset args != pmax"
 msgstr ""
 
-#: Engine/otran.c:1409
+#: Engine/otran.c:1428
 #, c-format
 msgid ""
 "sr = %.7g, kr = %.7g, ksmps = %.7g\n"
 "error:"
 msgstr ""
 
-#: Engine/otran.c:1442
+#: Engine/otran.c:1461
 msgid "header init errors"
 msgstr ""
 
-#: Engine/rdorch.c:166
+#: Engine/rdorch.c:169
 msgid "ungetorchar(): buffer overflow"
 msgstr ""
 
-#: Engine/rdorch.c:330
+#: Engine/rdorch.c:348
 msgid "Unexpected end of orchestra file"
 msgstr ""
 
-#: Engine/rdorch.c:484
-msgid "orch compiler:\n"
+#: Engine/rdorch.c:431 Engine/sread.c:758
+#, c-format
+msgid "Macro definition for %*s\n"
 msgstr ""
 
-#: Engine/rdorch.c:490
-#, c-format
-msgid "cannot find end of file %s"
+#: Engine/rdorch.c:434
+msgid "Invalid macro name for --omacro"
+msgstr ""
+
+#: Engine/rdorch.c:502
+msgid "orch compiler:\n"
 msgstr ""
 
-#: Engine/rdorch.c:492
+#: Engine/rdorch.c:520
 #, c-format
-msgid "ftell error on %s"
+msgid "cannot open orch file %s"
 msgstr ""
 
-#: Engine/rdorch.c:657 Engine/sread.c:1572
+#: Engine/rdorch.c:684 Engine/sread.c:1584
 #, c-format
 msgid "Macro definition for %s\n"
 msgstr ""
 
-#: Engine/rdorch.c:748
+#: Engine/rdorch.c:716 Engine/sread.c:1607
+msgid "macro error\n"
+msgstr ""
+
+#: Engine/rdorch.c:775
 #, c-format
 msgid "Cannot open #include'd file %s\n"
 msgstr ""
 
-#: Engine/rdorch.c:797
+#: Engine/rdorch.c:824
 msgid "unmatched #ifdef"
 msgstr ""
 
-#: Engine/rdorch.c:808
+#: Engine/rdorch.c:835
 msgid "Unmatched #else"
 msgstr ""
 
-#: Engine/rdorch.c:822
+#: Engine/rdorch.c:849
 msgid "Unmatched #endif"
 msgstr ""
 
-#: Engine/rdorch.c:875
+#: Engine/rdorch.c:872 Engine/sread.c:1694
+#, c-format
+msgid "macro %s undefined\n"
+msgstr ""
+
+#: Engine/rdorch.c:886 Engine/sread.c:286
+msgid "Undefining undefined macro"
+msgstr ""
+
+#: Engine/rdorch.c:902
 msgid "Unexpected # character"
 msgstr ""
 
-#: Engine/rdorch.c:877
+#: Engine/rdorch.c:904
 #, c-format
 msgid "Unknown # option: '%s'"
 msgstr ""
 
-#: Engine/rdorch.c:903 Engine/sread.c:394
+#: Engine/rdorch.c:928 Engine/sread.c:380
+#, c-format
+msgid "Undefined macro: '%s'"
+msgstr ""
+
+#: Engine/rdorch.c:930 Engine/sread.c:378
 msgid "Macro expansion symbol ($) without macro name"
 msgstr ""
 
-#: Engine/rdorch.c:908 Engine/sread.c:400
+#: Engine/rdorch.c:935 Engine/sread.c:384
 #, c-format
 msgid "$%s matches macro name $%s"
 msgstr ""
 
-#: Engine/rdorch.c:925 Engine/sread.c:417
+#: Engine/rdorch.c:952 Engine/sread.c:401
 msgid "Syntax error in macro call"
 msgstr ""
 
-#: Engine/rdorch.c:975
+#: Engine/rdorch.c:967
+#, c-format
+msgid ""
+"Missing argument terminator\n"
+"%.98s"
+msgstr ""
+
+#: Engine/rdorch.c:1002
 msgid "Unmatched #ifdef"
 msgstr ""
 
-#: Engine/rdorch.c:977
+#: Engine/rdorch.c:1004
 msgid "file too large for ortext space"
 msgstr ""
 
-#: Engine/rdorch.c:984
+#: Engine/rdorch.c:1011
 #, c-format
 msgid "%d (%d) lines read\n"
 msgstr ""
 
-#: Engine/rdorch.c:1052
+#: Engine/rdorch.c:1079
 #, c-format
 msgid "LINE %d:"
 msgstr ""
 
-#: Engine/rdorch.c:1071
+#: Engine/rdorch.c:1098
 msgid "invalid 'elseif' statement.  must have a corresponding 'if'"
 msgstr ""
 
-#: Engine/rdorch.c:1078
+#: Engine/rdorch.c:1105
 msgid "'elseif' statement cannot occur after an 'else'"
 msgstr ""
 
-#: Engine/rdorch.c:1134
+#: Engine/rdorch.c:1161
 msgid "Unmatched comment"
 msgstr ""
 
-#: Engine/rdorch.c:1198
+#: Engine/rdorch.c:1225
 msgid "misplaced comma"
 msgstr ""
 
-#: Engine/rdorch.c:1200 Engine/rdorch.c:1342 Engine/rdorch.c:1440
+#: Engine/rdorch.c:1227 Engine/rdorch.c:1369 Engine/rdorch.c:1467
 msgid "unbalanced parens"
 msgstr ""
 
-#: Engine/rdorch.c:1364
+#: Engine/rdorch.c:1391
 #, c-format
 msgid "illegal character %c"
 msgstr ""
 
-#: Engine/rdorch.c:1377
+#: Engine/rdorch.c:1404
 msgid "invalid 'else' statement.  must have a corresponding 'if'"
 msgstr ""
 
-#: Engine/rdorch.c:1384
+#: Engine/rdorch.c:1411
 msgid "duplicate 'else' statement"
 msgstr ""
 
-#: Engine/rdorch.c:1413
+#: Engine/rdorch.c:1440
 msgid "invalid 'endif' statement.  must have a corresponding 'if'"
 msgstr ""
 
-#: Engine/rdorch.c:1442
+#: Engine/rdorch.c:1469
 msgid "no legal opcode"
 msgstr ""
 
-#: Engine/rdorch.c:1573
+#: Engine/rdorch.c:1600
 msgid "illegal opcod from expr anal"
 msgstr ""
 
-#: Engine/rdorch.c:1606 Engine/rdorch.c:1628
+#: Engine/rdorch.c:1633 Engine/rdorch.c:1655
 #, c-format
 msgid "failed to find %s, output arg '%s' illegal type"
 msgstr ""
 
-#: Engine/rdorch.c:1670
+#: Engine/rdorch.c:1697
 #, c-format
 msgid "failed to find %s, input arg illegal type"
 msgstr ""
 
-#: Engine/rdorch.c:1684
+#: Engine/rdorch.c:1711
 msgid "setksmps is allowed only in user defined opcodes"
 msgstr ""
 
-#: Engine/rdorch.c:1687
+#: Engine/rdorch.c:1714
 msgid "multiple uses of setksmps in the same opcode definition"
 msgstr ""
 
-#: Engine/rdorch.c:1710
+#: Engine/rdorch.c:1739
 #, c-format
 msgid "%s inconsistent with global nchnls (%d); replaced with %s\n"
 msgstr ""
 
-#: Engine/rdorch.c:1740
+#: Engine/rdorch.c:1770
 msgid "opcode blks cannot be nested (missing 'endop'?)"
 msgstr ""
 
-#: Engine/rdorch.c:1742
+#: Engine/rdorch.c:1772
 msgid "opcode not allowed in instr block"
 msgstr ""
 
-#: Engine/rdorch.c:1751
+#: Engine/rdorch.c:1781
 msgid "unmatched endop"
 msgstr ""
 
-#: Engine/rdorch.c:1753
+#: Engine/rdorch.c:1783
 msgid "endop not allowed in instr block"
 msgstr ""
 
-#: Engine/rdorch.c:1758
+#: Engine/rdorch.c:1788
 msgid "instr not allowed in opcode block"
 msgstr ""
 
-#: Engine/rdorch.c:1761
+#: Engine/rdorch.c:1791
 msgid "instr blocks cannot be nested (missing 'endin'?)"
 msgstr ""
 
-#: Engine/rdorch.c:1769
+#: Engine/rdorch.c:1799
 msgid "endin not allowed in opcode blk"
 msgstr ""
 
-#: Engine/rdorch.c:1771
+#: Engine/rdorch.c:1801
 msgid "unmatched endin"
 msgstr ""
 
-#: Engine/rdorch.c:1781
+#: Engine/rdorch.c:1811
 msgid "misplaced opcode"
 msgstr ""
 
-#: Engine/rdorch.c:1787
+#: Engine/rdorch.c:1817
 msgid "xout is allowed only in user defined opcodes"
 msgstr ""
 
-#: Engine/rdorch.c:1790
+#: Engine/rdorch.c:1820
 msgid "multiple uses of xout in the same opcode definition"
 msgstr ""
 
-#: Engine/rdorch.c:1837
+#: Engine/rdorch.c:1867
 msgid "too many input args"
 msgstr ""
 
-#: Engine/rdorch.c:1909
+#: Engine/rdorch.c:1893
+msgid "insufficient required arguments"
+msgstr ""
+
+#: Engine/rdorch.c:1940
 #, c-format
-msgid "input arg '%s' used before defined"
+msgid "input arg '%s' used before defined \n"
 msgstr ""
 
-#: Engine/rdorch.c:1956
+#: Engine/rdorch.c:1987
 msgid "xin is allowed only in user defined opcodes"
 msgstr ""
 
-#: Engine/rdorch.c:1959
+#: Engine/rdorch.c:1990
 msgid "multiple uses of xin in the same opcode definition"
 msgstr ""
 
-#: Engine/rdorch.c:2004
+#: Engine/rdorch.c:2035
 msgid "illegal no of output args"
 msgstr ""
 
-#: Engine/rdorch.c:2023
+#: Engine/rdorch.c:2054
 #, c-format
 msgid "output name previously used, type '%c' must be uniquely defined"
 msgstr ""
 
-#: Engine/rdorch.c:2028
+#: Engine/rdorch.c:2059
 #, c-format
 msgid "output arg '%s' illegal type"
 msgstr ""
 
-#: Engine/rdorch.c:2069
+#: Engine/rdorch.c:2100
 #, c-format
 msgid "input arg '%s' of type %s not allowed when expecting %c"
 msgstr ""
 
-#: Engine/rdorch.c:2155
+#: Engine/rdorch.c:2187
 msgid "duplicate label"
 msgstr ""
 
-#: Engine/rdorch.c:2177
+#: Engine/rdorch.c:2209
 #, c-format
 msgid "error line %d.  unknown label:\n"
 msgstr ""
 
-#: Engine/rdorch.c:2192 Engine/rdorch.c:2239
+#: Engine/rdorch.c:2222 Engine/rdorch.c:2271
 msgid "error:  "
 msgstr ""
 
-#: Engine/rdorch.c:2208
+#: Engine/rdorch.c:2239
 #, c-format
 msgid ", line %d:\n"
 msgstr ""
 
-#: Engine/rdorch.c:2246
+#: Engine/rdorch.c:2278
 #, c-format
 msgid "called from line %d of macro %s"
 msgstr ""
 
-#: Engine/rdorch.c:2250
+#: Engine/rdorch.c:2282
 #, c-format
 msgid "in line %d of file input %s"
 msgstr ""
 
-#: Engine/rdscor.c:79
+#: Engine/rdscor.c:80
 #, c-format
 msgid "ERROR: illegal character %c(%.2x) in scoreline: "
 msgstr ""
@@ -1857,7 +1865,7 @@ msgid ""
 "\tremainder of line flushed\n"
 msgstr ""
 
-#: Engine/rdscor.c:144
+#: Engine/rdscor.c:146
 msgid "ERROR: too many pfields: "
 msgstr ""
 
@@ -1883,349 +1891,316 @@ msgstr ""
 msgid "  section %d:  at position %d%s"
 msgstr ""
 
-#: Engine/sread.c:217
+#: Engine/sread.c:216
 msgid "Internal error in print_input_backtrace()"
 msgstr ""
 
-#: Engine/sread.c:219
+#: Engine/sread.c:218
 #, c-format
 msgid "  included from line %d of macro %s%s"
 msgstr ""
 
-#: Engine/sread.c:220
+#: Engine/sread.c:219
 #, c-format
 msgid "  called from line %d of macro %s%s"
 msgstr ""
 
-#: Engine/sread.c:222
+#: Engine/sread.c:221
 #, c-format
 msgid "  in line %d of macro %s%s"
 msgstr ""
 
-#: Engine/sread.c:229
-#, c-format
-msgid "  included from line %d of file input %s%s"
-msgstr ""
-
-#: Engine/sread.c:230
-#, c-format
-msgid "  called from line %d of file input %s%s"
-msgstr ""
-
-#: Engine/sread.c:232
-#, c-format
-msgid "  in line %d of file input %s%s"
-msgstr ""
-
-#: Engine/sread.c:268
+#: Engine/sread.c:256
 #, c-format
 msgid "Internal error op=%c"
 msgstr ""
 
-#: Engine/sread.c:322
-msgid "ungetscochar(): buffer overflow"
-msgstr ""
-
-#: Engine/sread.c:479
+#: Engine/sread.c:464
 msgid "illegal placement of number in [] expression"
 msgstr ""
 
-#: Engine/sread.c:506
+#: Engine/sread.c:491
 msgid "illegal placement of operator ~ in [] expression"
 msgstr ""
 
-#: Engine/sread.c:516
+#: Engine/sread.c:501
 msgid "illegal placement of operator @ or @@ in [] expression"
 msgstr ""
 
-#: Engine/sread.c:548 Engine/sread.c:562
+#: Engine/sread.c:533 Engine/sread.c:547
 #, c-format
 msgid "illegal placement of operator %c in [] expression"
 msgstr ""
 
-#: Engine/sread.c:574
+#: Engine/sread.c:559
 msgid "illegal placement of '(' in [] expression"
 msgstr ""
 
-#: Engine/sread.c:580
+#: Engine/sread.c:565
 msgid "missing operand before ')' in [] expression"
 msgstr ""
 
-#: Engine/sread.c:594
+#: Engine/sread.c:579
 msgid "missing operand before closing bracket in []"
 msgstr ""
 
-#: Engine/sread.c:609
+#: Engine/sread.c:594
 #, c-format
 msgid "illegal character %c(%.2x) in [] expression"
 msgstr ""
 
-#: Engine/sread.c:658
+#: Engine/sread.c:646
 #, c-format
 msgid "%s Nested LOOP terminated, level:%d\n"
 msgstr ""
 
-#: Engine/sread.c:664
+#: Engine/sread.c:652
 #, c-format
 msgid "External LOOP terminated, level:%d\n"
 msgstr ""
 
-#: Engine/sread.c:684
+#: Engine/sread.c:696
 #, c-format
 msgid "%s  Nested LOOP section (%d) Level:%d\n"
 msgstr ""
 
-#: Engine/sread.c:689
+#: Engine/sread.c:701
 #, c-format
 msgid " External LOOP section (%d) Level:%d\n"
 msgstr ""
 
-#: Engine/sread.c:703
+#: Engine/sread.c:715
 msgid "Loop terminated\n"
 msgstr ""
 
-#: Engine/sread.c:716
+#: Engine/sread.c:733
 #, c-format
 msgid "Repeat section (%d)\n"
 msgstr ""
 
-#: Engine/sread.c:719
+#: Engine/sread.c:736
 msgid "Repeat section\n"
 msgstr ""
 
-#: Engine/sread.c:744
+#: Engine/sread.c:761
 msgid "Invalid macro name for --smacro"
 msgstr ""
 
-#: Engine/sread.c:831
+#: Engine/sread.c:865
 #, c-format
 msgid "Clockbase = %f\n"
 msgstr ""
 
-#: Engine/sread.c:898
+#: Engine/sread.c:934
 msgid "Loops are nested too deeply"
 msgstr ""
 
-#: Engine/sread.c:901
-msgid "Loop cannot start inside of a macro"
-msgstr ""
-
-#: Engine/sread.c:920
+#: Engine/sread.c:948
 msgid "{: invalid repeat count"
 msgstr ""
 
-#: Engine/sread.c:929
+#: Engine/sread.c:957
 #, c-format
 msgid "%s Nested LOOP=%d Level:%d\n"
 msgstr ""
 
-#: Engine/sread.c:935
+#: Engine/sread.c:963
 #, c-format
 msgid "External LOOP=%d Level:%d\n"
 msgstr ""
 
-#: Engine/sread.c:1004
-msgid "Repeat cannot start inside of a macro (ignored)"
-msgstr ""
-
-#: Engine/sread.c:1019
+#: Engine/sread.c:1047
 msgid "r: invalid repeat count"
 msgstr ""
 
-#: Engine/sread.c:1021
+#: Engine/sread.c:1049
 #, c-format
 msgid "Repeats=%d\n"
 msgstr ""
 
-#: Engine/sread.c:1063
+#: Engine/sread.c:1093
 #, c-format
 msgid "Named section >>>%s<<<\n"
 msgstr ""
 
-#: Engine/sread.c:1079
+#: Engine/sread.c:1108
 #, c-format
 msgid "%d: File %s position %ld\n"
 msgstr ""
 
-#: Engine/sread.c:1085
-#, c-format
-msgid "Ignoring name %s not in file\n"
-msgstr ""
-
-#: Engine/sread.c:1110
+#: Engine/sread.c:1133
 #, c-format
 msgid "Name %s not found"
 msgstr ""
 
-#: Engine/sread.c:1112
+#: Engine/sread.c:1135
 #, c-format
 msgid "Duplicate %d: %s (%s,%ld)\n"
 msgstr ""
 
-#: Engine/sread.c:1129
-#, c-format
-msgid "cannot open input file %s"
-msgstr ""
-
-#: Engine/sread.c:1149
+#: Engine/sread.c:1164
 #, c-format
 msgid "Warp_factor = %f\n"
 msgstr ""
 
-#: Engine/sread.c:1174
+#: Engine/sread.c:1189
 msgid "sread is confused on legal opcodes\n"
 msgstr ""
 
-#: Engine/sread.c:1236
+#: Engine/sread.c:1251
 msgid "No previous event for ^"
 msgstr ""
 
-#: Engine/sread.c:1241
+#: Engine/sread.c:1256
 #, c-format
 msgid "illegal space following %s, zero substituted"
 msgstr ""
 
-#: Engine/sread.c:1271
+#: Engine/sread.c:1286
 #, c-format
 msgid "ignoring '%s' in '%c' event"
 msgstr ""
 
-#: Engine/sread.c:1274
+#: Engine/sread.c:1289
 msgid "! invalid in p1, p2, or p3"
 msgstr ""
 
-#: Engine/sread.c:1275 Engine/sread.c:1280 Engine/sread.c:1730
-#: Engine/sread.c:1753 Engine/sread.c:1767
+#: Engine/sread.c:1290 Engine/sread.c:1295 Engine/sread.c:1738
+#: Engine/sread.c:1761 Engine/sread.c:1775
 msgid "      remainder of line flushed\n"
 msgstr ""
 
-#: Engine/sread.c:1279
+#: Engine/sread.c:1294
 #, c-format
 msgid "illegal character after !: '%c'"
 msgstr ""
 
-#: Engine/sread.c:1358
+#: Engine/sread.c:1373
 #, c-format
 msgid "WARNING: instr %s not found, assuming insno = -1\n"
 msgstr ""
 
-#: Engine/sread.c:1378
+#: Engine/sread.c:1393
 msgid "sread: illegal use of carry,   0 substituted\n"
 msgstr ""
 
-#: Engine/sread.c:1526
+#: Engine/sread.c:1539
 msgid "Improper \\"
 msgstr ""
 
-#: Engine/sread.c:1558
+#: Engine/sread.c:1570
 msgid "Not #define"
 msgstr ""
 
-#: Engine/sread.c:1620
+#: Engine/sread.c:1630
 #, c-format
 msgid "Macro %s with %d arguments defined\n"
 msgstr ""
 
-#: Engine/sread.c:1631
+#: Engine/sread.c:1642
 msgid "Not #include"
 msgstr ""
 
-#: Engine/sread.c:1662
+#: Engine/sread.c:1671
 #, c-format
 msgid "Cannot open #include'd file %s"
 msgstr ""
 
-#: Engine/sread.c:1673
+#: Engine/sread.c:1681
 msgid "Not #undef"
 msgstr ""
 
-#: Engine/sread.c:1692
+#: Engine/sread.c:1700
 msgid "unknown # option"
 msgstr ""
 
-#: Engine/sread.c:1729
+#: Engine/sread.c:1737
 #, c-format
 msgid "illegal opcode %c"
 msgstr ""
 
-#: Engine/sread.c:1752
+#: Engine/sread.c:1760
 #, c-format
 msgid "unexpected char %c"
 msgstr ""
 
-#: Engine/sread.c:1766
+#: Engine/sread.c:1774
 msgid "illegally placed string"
 msgstr ""
 
-#: Engine/sread.c:1773
+#: Engine/sread.c:1781
 msgid "unmatched quote"
 msgstr ""
 
-#: Engine/sread.c:1817
+#: Engine/sread.c:1825
 msgid "sread: illegal number format:  "
 msgstr ""
 
-#: Engine/sread.c:1823
+#: Engine/sread.c:1831
 msgid "   zero substituted.\n"
 msgstr ""
 
-#: Engine/swrite.c:123
+#: Engine/swrite.c:123 Engine/swritestr.c:134
 #, c-format
 msgid "swrite: unexpected opcode, section %d line %d\n"
 msgstr ""
 
-#: Engine/swrite.c:209 Engine/swrite.c:249
+#: Engine/swrite.c:209 Engine/swrite.c:249 Engine/swritestr.c:220
+#: Engine/swritestr.c:260
 #, c-format
 msgid "swrite: output, sect%d line%d p%d makes illegal reference to "
 msgstr ""
 
-#: Engine/swrite.c:216 Engine/swrite.c:255
+#: Engine/swrite.c:216 Engine/swrite.c:255 Engine/swritestr.c:227
+#: Engine/swritestr.c:266
 msgid "   Zero substituted\n"
 msgstr ""
 
-#: Engine/swrite.c:313
+#: Engine/swrite.c:313 Engine/swritestr.c:324
 #, c-format
 msgid "swrite: output, sect%d line%d p%d has illegal ramp symbol\n"
 msgstr ""
 
-#: Engine/swrite.c:317
+#: Engine/swrite.c:317 Engine/swritestr.c:328
 #, c-format
 msgid ""
 "swrite: output, sect%d line%d p%d ramp has illegal forward or backward ref\n"
 msgstr ""
 
-#: Engine/swrite.c:380 Engine/swrite.c:445
+#: Engine/swrite.c:380 Engine/swrite.c:445 Engine/swritestr.c:391
+#: Engine/swritestr.c:456
 #, c-format
 msgid "swrite: output, sect%d line%d p%d has illegal expramp symbol\n"
 msgstr ""
 
-#: Engine/swrite.c:385 Engine/swrite.c:450
+#: Engine/swrite.c:385 Engine/swrite.c:450 Engine/swritestr.c:396
+#: Engine/swritestr.c:461
 #, c-format
 msgid ""
 "swrite: output, sect%d line%d p%d expramp has illegal forward or backward "
 "ref\n"
 msgstr ""
 
-#: Engine/swrite.c:466
+#: Engine/swrite.c:466 Engine/swritestr.c:477
 #, c-format
 msgid "swrite: output, sect%d line%d p%d has illegally terminated string   "
 msgstr ""
 
-#: Engine/swrite.c:514
+#: Engine/swrite.c:514 Engine/swritestr.c:529
 #, c-format
 msgid "swrite: output, sect%d line%d p%d has illegal number  "
 msgstr ""
 
-#: Engine/swrite.c:521
+#: Engine/swrite.c:521 Engine/swritestr.c:536
 msgid "    String truncated\n"
 msgstr ""
 
-#: Engine/symbtab.c:202
+#: Engine/symbtab.c:208
 #, c-format
 msgid "Type confusion for %s (%d,%d), replacing\n"
 msgstr ""
 
-#: Engine/symbtab.c:333
+#: Engine/symbtab.c:345
 #, c-format
 msgid "Unknown word type for %s on line %d\n"
 msgstr ""
@@ -2246,6 +2221,14 @@ msgstr ""
 msgid "twarp: t segments exceed twarp array\n"
 msgstr ""
 
+#: InOut/cmidi.c:233
+msgid "CoreMIDI real time MIDI plugin for Csound\n"
+msgstr ""
+
+#: InOut/cmidi.c:247
+msgid "rtmidi: CoreMIDI module enabled\n"
+msgstr ""
+
 #: InOut/libsnd.c:486
 msgid "error: no input file name"
 msgstr ""
@@ -2269,54 +2252,69 @@ msgstr ""
 msgid "audio_in %s has %d chnls, orch %d chnls_i"
 msgstr ""
 
-#: InOut/libsnd.c:573
+#: InOut/libsnd.c:574
+#, c-format
+msgid "reading %d sample blks of %d-bit floats from %s \n"
+msgstr ""
+
+#: InOut/libsnd.c:578
 #, c-format
 msgid "reading %d-byte blks of %s from %s (%s)\n"
 msgstr ""
 
-#: InOut/libsnd.c:608
+#: InOut/libsnd.c:614
 msgid "Output file type changed to IRCAM for use in pipe\n"
 msgstr ""
 
-#: InOut/libsnd.c:628
+#: InOut/libsnd.c:634
 msgid "Failed to initialise real time audio output"
 msgstr ""
 
-#: InOut/libsnd.c:669 InOut/libsnd.c:673
+#: InOut/libsnd.c:675 InOut/libsnd.c:679
 #, c-format
 msgid "sfinit: cannot open %s"
 msgstr ""
 
-#: InOut/libsnd.c:733 util/srconv.c:485
+#: InOut/libsnd.c:741
+#, c-format
+msgid "writing %d sample blks of %d-bit floats to %s \n"
+msgstr ""
+
+#: InOut/libsnd.c:744 util/srconv.c:484
 #, c-format
 msgid "writing %d-byte blks of %s to %s"
 msgstr ""
 
-#: InOut/libsnd.c:740 InOut/libsnd.c:810
+#: InOut/libsnd.c:749 InOut/libsnd.c:824
 msgid " (raw)\n"
 msgstr ""
 
-#: InOut/libsnd.c:803
+#: InOut/libsnd.c:815
+#, c-format
+msgid "%ld %d sample blks of %d-bit floats written to %s\n"
+msgstr ""
+
+#: InOut/libsnd.c:820
 #, c-format
-msgid "%ld %d-byte soundblks of %s written to %s"
+msgid "%ld %d sample blks of %s written to %s"
 msgstr ""
 
-#: InOut/libsnd.c:822
+#: InOut/libsnd.c:837
 #, c-format
 msgid "soundfile write returned bytecount of %d, not %d"
 msgstr ""
 
-#: InOut/libsnd.c:825
+#: InOut/libsnd.c:840
 msgid ""
 "(disk may be full...\n"
 " closing the file ...)"
 msgstr ""
 
-#: InOut/libsnd.c:828 util/dnoise.c:1192
+#: InOut/libsnd.c:843 util/dnoise.c:1177
 msgid "\t... closed\n"
 msgstr ""
 
-#: InOut/libsnd.c:834
+#: InOut/libsnd.c:849
 msgid "not writing to sound disk\n"
 msgstr ""
 
@@ -2716,20 +2714,20 @@ msgstr ""
 msgid "Error closing MIDI out device: %d (%s)"
 msgstr ""
 
-#: InOut/midisend.c:171
+#: InOut/midisend.c:170
 msgid " *** no callback for opening MIDI output"
 msgstr ""
 
-#: InOut/midisend.c:173
+#: InOut/midisend.c:172
 msgid " *** no callback for writing MIDI data"
 msgstr ""
 
-#: InOut/midisend.c:179
+#: InOut/midisend.c:178
 #, c-format
 msgid " *** error opening MIDI out device: %d (%s)"
 msgstr ""
 
-#: InOut/midisend.c:190
+#: InOut/midisend.c:189
 #, c-format
 msgid " *** error opening MIDI out file '%s'"
 msgstr ""
@@ -2983,7 +2981,7 @@ msgstr ""
 msgid "Opened MIDI output device file '%s'\n"
 msgstr ""
 
-#: InOut/rtalsa.c:1101 InOut/rtcoreaudio.c:64 InOut/rtcoreaudio.c:74
+#: InOut/rtalsa.c:1101 InOut/rtcoreaudio.c:71 InOut/rtcoreaudio.c:81
 msgid "warning... could not create global var\n"
 msgstr ""
 
@@ -3007,64 +3005,82 @@ msgstr ""
 msgid "rtmidi: devfile module enabled\n"
 msgstr ""
 
-#: InOut/rtcoreaudio.c:83
+#: InOut/rtauhal.c:163
+#, c-format
+msgid "selected input device: %s \n"
+msgstr ""
+
+#: InOut/rtauhal.c:166
+#, c-format
+msgid "selected output device: %s \n"
+msgstr ""
+
+#: InOut/rtauhal.c:524
+msgid "AuHAL module: device closed\n"
+msgstr ""
+
+#: InOut/rtauhal.c:541
+msgid "rtaudio: coreaaudio-AuHAL module enabled\n"
+msgstr ""
+
+#: InOut/rtcoreaudio.c:90
 msgid ""
 "CoreAudio real-time audio module for Csound\n"
 "by Victor Lazzarini\n"
 msgstr ""
 
-#: InOut/rtcoreaudio.c:105
+#: InOut/rtcoreaudio.c:112
 msgid "rtaudio: CoreAudio module enabled\n"
 msgstr ""
 
-#: InOut/rtcoreaudio.c:254
+#: InOut/rtcoreaudio.c:261
 #, c-format
 msgid "selected device: %u \n"
 msgstr ""
 
-#: InOut/rtcoreaudio.c:263
+#: InOut/rtcoreaudio.c:270
 #, c-format
 msgid "CoreAudio module: opening %s \n"
 msgstr ""
 
-#: InOut/rtcoreaudio.c:297
+#: InOut/rtcoreaudio.c:304
 msgid " *** CoreAudio: open: could not set buffer size\n"
 msgstr ""
 
-#: InOut/rtcoreaudio.c:342
+#: InOut/rtcoreaudio.c:349
 #, c-format
 msgid " *** CoreAudio: open: could not set device parameter sr: %d \n"
 msgstr ""
 
-#: InOut/rtcoreaudio.c:344
+#: InOut/rtcoreaudio.c:351
 #, c-format
 msgid ""
 " *** CoreAudio: current device sampling rate is:%d \n"
 "     try setting the above value in your csound orchestra \n"
 msgstr ""
 
-#: InOut/rtcoreaudio.c:353
+#: InOut/rtcoreaudio.c:360
 #, c-format
 msgid "CoreAudio module: sr set to %d with %d audio channels \n"
 msgstr ""
 
-#: InOut/rtcoreaudio.c:374 InOut/rtcoreaudio.c:387 InOut/rtcoreaudio.c:432
-#: InOut/rtcoreaudio.c:452
+#: InOut/rtcoreaudio.c:381 InOut/rtcoreaudio.c:394 InOut/rtcoreaudio.c:439
+#: InOut/rtcoreaudio.c:459
 msgid " *** CoreAudio: open: memory allocation failure\n"
 msgstr ""
 
-#: InOut/rtcoreaudio.c:414
+#: InOut/rtcoreaudio.c:421
 #, c-format
 msgid ""
 "CoreAudio module: device open with %d buffers of %d frames\n"
 "==========================================================\n"
 msgstr ""
 
-#: InOut/rtcoreaudio.c:552
+#: InOut/rtcoreaudio.c:559
 msgid "coreaudio module: closing device...\n"
 msgstr ""
 
-#: InOut/rtcoreaudio.c:566
+#: InOut/rtcoreaudio.c:573
 msgid "coreaudio module: device closed\n"
 msgstr ""
 
@@ -3466,294 +3482,12 @@ msgstr ""
 msgid "rtaudio: WinMM module enabled\n"
 msgstr ""
 
-#: InOut/virtual_keyboard/virtual_keyboard.cpp:435
-msgid "virtual_keyboard.cpp: error allocating FLTK flags"
-msgstr ""
-
-#: InOut/virtual_keyboard/virtual_keyboard.cpp:443 InOut/winFLTK.c:125
-#: InOut/winFLTK.c:139
-#, c-format
-msgid "Error registering opcode '%s'"
-msgstr ""
-
-#: InOut/widgets.cpp:1081
-msgid ""
-"Invalid snapshot. Perhaps you modified orchestra widget code after you saved "
-"the snapshot bank."
-msgstr ""
-
-#: InOut/widgets.cpp:1226
-msgid "No name for FLbutbank"
-msgstr ""
-
-#: InOut/widgets.cpp:1466
-msgid "FLsetsnap: invalid table"
-msgstr ""
-
-#: InOut/widgets.cpp:1504
-msgid ""
-"Saving could overwrite the old file.\n"
-"Are you sure to save ?"
-msgstr ""
-
-#: InOut/widgets.cpp:1516
-msgid ""
-"Saving could overwrite the old file.\n"
-"Are you sure you want to save ?"
-msgstr ""
-
-#: InOut/widgets.cpp:1518
-msgid "No"
-msgstr ""
-
-#: InOut/widgets.cpp:1518
-msgid "Yes"
-msgstr ""
-
-#: InOut/widgets.cpp:1527
-msgid "FLsavesnap: cannot open file"
-msgstr ""
-
-#: InOut/widgets.cpp:1580
-msgid "FLloadsnap: cannot open file"
-msgstr ""
-
-#: InOut/widgets.cpp:1625
-msgid ""
-"unmatched widget, probably due to a modified orchestra. Modifying an "
-"orchestra makes it incompatible with old snapshot files"
-msgstr ""
-
-#: InOut/widgets.cpp:1994
-msgid "end of widget thread\n"
-msgstr ""
-
-#: InOut/widgets.cpp:2020
-msgid "FLrun was already called"
-msgstr ""
-
-#: InOut/widgets.cpp:2023
-msgid "FL_run: memory allocation failure"
-msgstr ""
-
-#: InOut/widgets.cpp:2125 InOut/widgets.cpp:2145
-msgid "Error: Unable to fork process\n"
-msgstr ""
-
-#: InOut/widgets.cpp:2545
-msgid "FLpanel_end: invalid stack pointer: verify its placement"
-msgstr ""
-
-#: InOut/widgets.cpp:2548
-msgid ""
-"FLpanel_end: invalid stack count: verify FLpanel/FLpanel_end count and "
-"placement"
-msgstr ""
-
-#: InOut/widgets.cpp:2573 InOut/widgets.cpp:2604
-msgid "FLscroll_end: invalid stack pointer: verify its placement"
-msgstr ""
-
-#: InOut/widgets.cpp:2576
-msgid ""
-"FLscroll_end: invalid stack count: verify FLscroll/FLscroll_end count and "
-"placement"
-msgstr ""
-
-#: InOut/widgets.cpp:2607
-msgid ""
-"FLtabs_end: invalid stack count: verify FLtabs/FLtabs_end count and placement"
-msgstr ""
-
-#: InOut/widgets.cpp:2651
-msgid "FLgroup_end: invalid stack pointer: verify its placement"
-msgstr ""
-
-#: InOut/widgets.cpp:2654
-msgid ""
-"FLgroup_end: invalid stack count: verify FLgroup/FLgroup_end count and "
-"placement"
-msgstr ""
-
-#: InOut/widgets.cpp:2684
-msgid "FLpack_end: invalid stack pointer: verify its placement"
-msgstr ""
-
-#: InOut/widgets.cpp:2687
-msgid ""
-"FLpack_end: invalid stack count: verify FLpack/FLpack_end count and placement"
-msgstr ""
-
-#: InOut/widgets.cpp:2840
-msgid "FLvalue cannot be set by FLsetVal.\n"
-msgstr ""
-
-#: InOut/widgets.cpp:2857
-#, c-format
-msgid "(fl_setWidgetValuei): not fully implemented yet; exp=%d"
-msgstr ""
-
-#: InOut/widgets.cpp:2876
-msgid "FLvalue cannot be set by FLsetVal\n"
-msgstr ""
-
-#: InOut/widgets.cpp:2893
-#, c-format
-msgid "(fl_setWidgetValue_set): not fully implemented yet; exp=%d"
-msgstr ""
-
-#: InOut/widgets.cpp:3242 InOut/widgets.cpp:4648
-msgid "FLslider exponential, using non-labeled slider"
-msgstr ""
-
-#: InOut/widgets.cpp:3264
-msgid "FLslider: invalid slider type"
-msgstr ""
-
-#: InOut/widgets.cpp:3276 InOut/widgets.cpp:4072
-msgid "FLslider: zero is illegal in exponential operations"
-msgstr ""
-
-#: InOut/widgets.cpp:3337 InOut/widgets.cpp:4399 InOut/widgets.cpp:4610
-#: InOut/widgets.cpp:4787
-msgid "invalid ZAK space allocation"
-msgstr ""
-
-#: InOut/widgets.cpp:3451
-msgid "FLslidBnk: zero is illegal in exponential operations"
-msgstr ""
-
-#: InOut/widgets.cpp:3548 InOut/widgets.cpp:3581
-msgid "FLjoy X axe: zero is illegal in exponential operations"
-msgstr ""
-
-#: InOut/widgets.cpp:3675
-msgid "FLknob: invalid knob type"
-msgstr ""
-
-#: InOut/widgets.cpp:3690
-msgid "FLknob: zero is illegal in exponential operations"
-msgstr ""
-
-#: InOut/widgets.cpp:3790 InOut/widgets.cpp:3912
-#, c-format
-msgid "FLbutton \"%s\" ignoring snapshot capture retrieve"
-msgstr ""
-
-#: InOut/widgets.cpp:3831
-msgid "FLbutton: invalid button type"
-msgstr ""
-
-#: InOut/widgets.cpp:3863
-msgid "FLcloseButton: invalid stack pointer: verify its placement"
-msgstr ""
-
-#: InOut/widgets.cpp:3882
-#, c-format
-msgid "Command Found: %s\n"
-msgstr ""
-
-#: InOut/widgets.cpp:3954
-msgid "FLbuttonBank: invalid button type"
-msgstr ""
-
-#: InOut/widgets.cpp:3992
-#, c-format
-msgid "FLcount \"%s\" ignoring snapshot capture retrieve"
-msgstr ""
-
-#: InOut/widgets.cpp:4059
-msgid "FLroller: invalid roller type"
-msgstr ""
-
-#: InOut/widgets.cpp:4254
-msgid "FLhvsBox: a square area must be delimited by 2 lines at least"
-msgstr ""
-
-#: InOut/widgets.cpp:4302
-msgid "FLkeyIn: invalid table number"
-msgstr ""
-
-#: InOut/widgets.cpp:4305
-msgid "FLkeyIn: table too short!"
-msgstr ""
-
-#: InOut/widgets.cpp:4522
-msgid "FLvslidBnk: zero is illegal in exponential operations"
-msgstr ""
-
-#: InOut/widgets.cpp:4698 InOut/widgets.cpp:4875
-msgid "FLsliderBank: zero is illegal in exponential operations"
-msgstr ""
-
-#: InOut/widgets.cpp:4825
-msgid "FLslidBnk2: FLslider exponential, using non-labeled slider"
-msgstr ""
-
-#: InOut/widgets.cpp:4955 InOut/widgets.cpp:5018
-msgid "FLsldBnkSet: invalid table number"
-msgstr ""
-
-#: InOut/widgets.cpp:4959 InOut/widgets.cpp:5022
-msgid "FLslidBnkSet: table too short!"
-msgstr ""
-
-#: InOut/widgets.cpp:4967 InOut/widgets.cpp:5031
-msgid "FLsldBnkSet: invalid outable number"
-msgstr ""
-
-#: InOut/widgets.cpp:4972 InOut/widgets.cpp:5037
-msgid "FLslidBnkSet: too many sliders to reset!"
-msgstr ""
-
-#: InOut/widgets.cpp:4995
-msgid "FLslidBnkSet: function mapping not available"
-msgstr ""
-
-#: InOut/widgets.cpp:5064 InOut/widgets.cpp:5149 InOut/widgets.cpp:5236
-msgid ""
-"FLslidBnk2Setk: value out of range: function mapping requires a 0 to 1 range "
-"for input"
-msgstr ""
-
-#: InOut/widgets.cpp:5093
-msgid "FLsldBnkSetk: invalid table number"
-msgstr ""
-
-#: InOut/widgets.cpp:5097 InOut/widgets.cpp:5183
-msgid "FLslidBnkSetk: table too short!"
-msgstr ""
-
-#: InOut/widgets.cpp:5105
-msgid "FLsldBnkSetk: invalid outable number"
-msgstr ""
-
-#: InOut/widgets.cpp:5111 InOut/widgets.cpp:5197
-msgid "FLslidBnkSetk: too many sliders to reset!"
-msgstr ""
-
-#: InOut/widgets.cpp:5179
-msgid "FLslidBnkSetk: invalid table number"
-msgstr ""
-
-#: InOut/widgets.cpp:5191
-msgid "FLslidBnkSetk: invalid outable number"
-msgstr ""
-
-#: InOut/widgets.cpp:5268
-msgid "FLxyin: none of X limits can be zero in exponential mode!"
-msgstr ""
-
-#: InOut/widgets.cpp:5294
-msgid "FLxyin: none of Y limits can be zero in exponential mode!"
-msgstr ""
-
 #: InOut/winascii.c:75
 #, c-format
 msgid "%s\t%ld points, scalemax %5.3f\n"
 msgstr ""
 
-#: InOut/windin.c:46 Opcodes/pitch.c:82 Opcodes/spectra.c:76
+#: InOut/windin.c:46 Opcodes/pitch.c:83 Opcodes/spectra.c:78
 msgid "illegal iprd"
 msgstr ""
 
@@ -3796,47 +3530,61 @@ msgstr ""
 msgid "widgets.cpp: error allocating FLTK flags"
 msgstr ""
 
-#: OOps/aops.c:95 OOps/aops.c:119
+#: InOut/winFLTK.c:124 InOut/winFLTK.c:137
+#: InOut/virtual_keyboard/virtual_keyboard.cpp:443
+#, c-format
+msgid "Error registering opcode '%s'"
+msgstr ""
+
+#: InOut/virtual_keyboard/virtual_keyboard.cpp:435
+msgid "virtual_keyboard.cpp: error allocating FLTK flags"
+msgstr ""
+
+#: OOps/aops.c:120 OOps/aops.c:144
 #, c-format
 msgid "Cannot be more In arguments than Out in init (%d,%d)"
 msgstr ""
 
-#: OOps/aops.c:175 OOps/aops.c:194
+#: OOps/aops.c:200 OOps/aops.c:219
 #, c-format
 msgid "Index %d out of range [0,%d] in t[]\n"
 msgstr ""
 
-#: OOps/aops.c:184
+#: OOps/aops.c:209
 #, fuzzy
-msgid "Vector notinitialised\n"
+msgid "Vector not initialised\n"
 msgstr "%s: не выступлено с иничиативой"
 
-#: OOps/aops.c:686
+#: OOps/aops.c:711
 msgid "non-looping sample"
 msgstr ""
 
-#: OOps/aops.c:828 OOps/aops.c:856
+#: OOps/aops.c:853 OOps/aops.c:881
 #, c-format
 msgid "No tuning table %d"
 msgstr ""
 
-#: OOps/aops.c:901 OOps/aops.c:939
+#: OOps/aops.c:926 OOps/aops.c:964
 msgid "cpstun: invalid table"
 msgstr ""
 
-#: OOps/aops.c:1189
+#: OOps/aops.c:1214
 msgid "Input and output argument count differs in inch"
 msgstr ""
 
-#: OOps/aops.c:1193
+#: OOps/aops.c:1218
 #, c-format
 msgid "Input channel %d too large; ignored"
 msgstr ""
 
-#: OOps/aops.c:1667
+#: OOps/aops.c:1698
 msgid "k-rate invalue ChannelName cannot start with $"
 msgstr ""
 
+#: OOps/aops.c:1835
+msgid "Unknown functuon called"
+msgstr ""
+
 #: OOps/bus.c:313 OOps/bus.c:345
 msgid "chani: invalid index"
 msgstr ""
@@ -4119,7 +3867,7 @@ msgstr ""
 msgid "dispfft: not initialised"
 msgstr ""
 
-#: OOps/disprep.c:435 Opcodes/spectra.c:516
+#: OOps/disprep.c:435 Opcodes/spectra.c:518
 msgid "illegal iperiod"
 msgstr ""
 
@@ -4183,15 +3931,15 @@ msgstr ""
 msgid " *** fftlib.c: internal error: invalid FFT size: %d"
 msgstr ""
 
-#: OOps/goto_ops.c:92
+#: OOps/goto_ops.c:93
 msgid "negative time period"
 msgstr ""
 
-#: OOps/goto_ops.c:182
+#: OOps/goto_ops.c:186
 msgid "turnoff2: invalid instrument number"
 msgstr ""
 
-#: OOps/goto_ops.c:187
+#: OOps/goto_ops.c:191
 msgid "turnoff2: invalid mode parameter"
 msgstr ""
 
@@ -4208,7 +3956,7 @@ msgid "cpstabm: invalid modulator table"
 msgstr ""
 
 #: OOps/midiops.c:304 OOps/midiops.c:314 OOps/midiops.c:334 OOps/midiops.c:344
-#: OOps/midiops.c:421 OOps/midiops.c:435 Opcodes/gab/sliderTable.c:563
+#: OOps/midiops.c:421 OOps/midiops.c:435 Opcodes/gab/sliderTable.c:567
 #: Opcodes/midiops2.c:56 Opcodes/midiops2.c:73 Opcodes/midiops2.c:111
 #: Opcodes/midiops2.c:145 Opcodes/midiops2.c:206 Opcodes/midiops2.c:237
 #: Opcodes/midiops2.c:298 Opcodes/midiops2.c:317 Opcodes/midiops2.c:357
@@ -4224,7 +3972,7 @@ msgstr ""
 msgid "illegal mrtmsg argument"
 msgstr ""
 
-#: OOps/midiout.c:383
+#: OOps/midiout.c:389
 #, c-format
 msgid "out contr14 msb:%x lsb:%x\n"
 msgstr ""
@@ -4686,148 +4434,148 @@ msgstr ""
 msgid "Unknown window type; replaced by rectangular\n"
 msgstr ""
 
-#: OOps/pvsanal.c:1025
+#: OOps/pvsanal.c:1027
 msgid "pvsynth: Not Initialised.\n"
 msgstr ""
 
-#: OOps/remote.c:100
+#: OOps/remote.c:103
 msgid "insufficient memory to initialise remote globals."
 msgstr ""
 
-#: OOps/remote.c:109
+#: OOps/remote.c:112
 msgid "insufficient memory to initialise outgoing socket table."
 msgstr ""
 
-#: OOps/remote.c:116
+#: OOps/remote.c:119
 msgid "insufficient memory to initialise incoming socket table."
 msgstr ""
 
-#: OOps/remote.c:124
+#: OOps/remote.c:127
 msgid "insufficient memory to initialise insrfd_list."
 msgstr ""
 
-#: OOps/remote.c:132
+#: OOps/remote.c:135
 msgid "insufficient memory to initialise chnrfd_list."
 msgstr ""
 
-#: OOps/remote.c:139
+#: OOps/remote.c:142
 msgid "insufficient memory to initialise insrfd table."
 msgstr ""
 
-#: OOps/remote.c:146
+#: OOps/remote.c:149
 msgid "insufficient memory to initialise chnrfd table."
 msgstr ""
 
-#: OOps/remote.c:153
+#: OOps/remote.c:156
 msgid "insufficient memory to initialise local ip address."
 msgstr ""
 
-#: OOps/remote.c:161
+#: OOps/remote.c:164
 msgid "unable to get local ip address."
 msgstr ""
 
-#: OOps/remote.c:222
+#: OOps/remote.c:225
 msgid "could not open remote port"
 msgstr ""
 
-#: OOps/remote.c:237
+#: OOps/remote.c:240
 msgid "---> Could not connect \n"
 msgstr "---> Не смогл соединиться \n"
 
-#: OOps/remote.c:241
+#: OOps/remote.c:244
 msgid "---> Failed all attempts to connect. \n"
 msgstr ""
 
-#: OOps/remote.c:244
+#: OOps/remote.c:247
 msgid "--->  Connected. \n"
 msgstr ""
 
-#: OOps/remote.c:258 Opcodes/socksend.c:232
+#: OOps/remote.c:261 Opcodes/socksend.c:305
 msgid "write to socket failed"
 msgstr ""
 
-#: OOps/remote.c:278
+#: OOps/remote.c:281
 msgid "creating socket\n"
 msgstr ""
 
-#: OOps/remote.c:280
+#: OOps/remote.c:283
 msgid "created socket \n"
 msgstr ""
 
-#: OOps/remote.c:292
+#: OOps/remote.c:295
 msgid "setting socket option to reuse the addresse \n"
 msgstr ""
 
-#: OOps/remote.c:309 Opcodes/sockrecv.c:133 Opcodes/sockrecv.c:223
-#: Opcodes/socksend.c:211
+#: OOps/remote.c:312 Opcodes/sockrecv.c:141 Opcodes/sockrecv.c:237
+#: Opcodes/socksend.c:284
 msgid "bind failed"
 msgstr ""
 
-#: OOps/remote.c:313 Opcodes/socksend.c:216
+#: OOps/remote.c:316 Opcodes/socksend.c:289
 msgid "listen failed"
 msgstr ""
 
-#: OOps/remote.c:318 Opcodes/socksend.c:222
+#: OOps/remote.c:321 Opcodes/socksend.c:295
 msgid "accept failed"
 msgstr ""
 
-#: OOps/remote.c:321
+#: OOps/remote.c:324
 #, c-format
 msgid "accepted, conn=%d \n"
 msgstr ""
 
-#: OOps/remote.c:353 OOps/remote.c:374 OOps/remote.c:417 OOps/remote.c:449
-#: OOps/remote.c:489
+#: OOps/remote.c:356 OOps/remote.c:377 OOps/remote.c:420 OOps/remote.c:452
+#: OOps/remote.c:492
 msgid "failed to initialise remote globals."
 msgstr ""
 
-#: OOps/remote.c:378 OOps/remote.c:421
+#: OOps/remote.c:381 OOps/remote.c:424
 msgid "missing instr nos"
 msgstr ""
 
-#: OOps/remote.c:390 OOps/remote.c:430
+#: OOps/remote.c:393 OOps/remote.c:433
 msgid "illegal instr no"
 msgstr ""
 
-#: OOps/remote.c:393
+#: OOps/remote.c:396
 msgid "insno already remote"
 msgstr ""
 
-#: OOps/remote.c:403 OOps/remote.c:474
+#: OOps/remote.c:406 OOps/remote.c:477
 msgid "Failed to open port to listen"
 msgstr ""
 
-#: OOps/remote.c:423
+#: OOps/remote.c:426
 #, c-format
 msgid "*** str1: %s own:%s\n"
 msgstr ""
 
-#: OOps/remote.c:433
+#: OOps/remote.c:436
 msgid "insno already specific remote"
 msgstr ""
 
-#: OOps/remote.c:453 OOps/remote.c:493
+#: OOps/remote.c:456 OOps/remote.c:496
 msgid "missing channel nos"
 msgstr ""
 
-#: OOps/remote.c:463 OOps/remote.c:502
+#: OOps/remote.c:466 OOps/remote.c:505
 msgid "illegal channel no"
 msgstr ""
 
-#: OOps/remote.c:466
+#: OOps/remote.c:469
 msgid "channel already remote"
 msgstr ""
 
-#: OOps/remote.c:505
+#: OOps/remote.c:508
 msgid "channel already specific remote"
 msgstr ""
 
-#: OOps/remote.c:531 OOps/remote.c:555 OOps/remote.c:579
+#: OOps/remote.c:534 OOps/remote.c:558 OOps/remote.c:582
 msgid "CLsend failed"
 msgstr ""
 
-#: OOps/remote.c:645 OOps/remote.c:653 OOps/remote.c:661 OOps/remote.c:669
-#: OOps/remote.c:677
+#: OOps/remote.c:648 OOps/remote.c:656 OOps/remote.c:664 OOps/remote.c:672
+#: OOps/remote.c:680
 msgid ""
 "*** This version of Csound was not compiled with remote event support ***\n"
 msgstr ""
@@ -4937,53 +4685,53 @@ msgstr "%s: не выступлено с иничиативой"
 msgid "linseg: not initialised (arate)\n"
 msgstr ""
 
-#: OOps/ugens1.c:463 OOps/ugens1.c:465 OOps/ugens1.c:512 OOps/ugens1.c:514
-#: OOps/ugens1.c:564 OOps/ugens1.c:566 OOps/ugens1.c:610 OOps/ugens1.c:612
-#: OOps/ugens1.c:774 OOps/ugens1.c:776
+#: OOps/ugens1.c:464 OOps/ugens1.c:466 OOps/ugens1.c:513 OOps/ugens1.c:515
+#: OOps/ugens1.c:565 OOps/ugens1.c:567 OOps/ugens1.c:611 OOps/ugens1.c:613
+#: OOps/ugens1.c:775 OOps/ugens1.c:777
 #, c-format
 msgid "ival%d is zero"
 msgstr ""
 
-#: OOps/ugens1.c:466 OOps/ugens1.c:515 OOps/ugens1.c:567 OOps/ugens1.c:613
-#: OOps/ugens1.c:777
+#: OOps/ugens1.c:467 OOps/ugens1.c:516 OOps/ugens1.c:568 OOps/ugens1.c:614
+#: OOps/ugens1.c:778
 #, c-format
 msgid "ival%d sign conflict"
 msgstr ""
 
-#: OOps/ugens1.c:495 OOps/ugens1.c:544
+#: OOps/ugens1.c:496 OOps/ugens1.c:545
 #, c-format
 msgid "Breakpoint time %f not valid"
 msgstr ""
 
-#: OOps/ugens1.c:706
+#: OOps/ugens1.c:707
 msgid "expseg (krate): not initialised"
 msgstr ""
 
-#: OOps/ugens1.c:732
+#: OOps/ugens1.c:733
 msgid "expseg (arate): not initialised"
 msgstr ""
 
-#: OOps/ugens1.c:1013 OOps/ugens1.c:1149 OOps/ugens1.c:1311
+#: OOps/ugens1.c:1014 OOps/ugens1.c:1150 OOps/ugens1.c:1312
 msgid "non-positive iatdec"
 msgstr ""
 
-#: OOps/ugens1.c:1106 OOps/ugens1.c:1273
+#: OOps/ugens1.c:1107 OOps/ugens1.c:1274
 msgid "ixmod out of range."
 msgstr ""
 
-#: OOps/ugens1.c:1134 OOps/ugens1.c:1301
+#: OOps/ugens1.c:1135 OOps/ugens1.c:1302
 msgid "rise func ends with zero"
 msgstr ""
 
-#: OOps/ugens1.c:1178 OOps/ugens1.c:1257
+#: OOps/ugens1.c:1179 OOps/ugens1.c:1258
 msgid "envlpx rise func ends with zero"
 msgstr ""
 
-#: OOps/ugens1.c:1199 OOps/ugens1.c:1254
+#: OOps/ugens1.c:1200 OOps/ugens1.c:1255
 msgid "envlpx(krate): not initialised"
 msgstr ""
 
-#: OOps/ugens2.c:48 OOps/ugens2.c:61 Opcodes/shape.c:377
+#: OOps/ugens2.c:48 OOps/ugens2.c:61 Opcodes/shape.c:379
 msgid "init phase truncation\n"
 msgstr ""
 
@@ -5047,8 +4795,8 @@ msgid "oscil(krate): not initialised"
 msgstr ""
 
 #: OOps/ugens2.c:1139 OOps/ugens2.c:1167 OOps/ugens2.c:1192 OOps/ugens2.c:1219
-#: Opcodes/pitch.c:1579 Opcodes/pitch.c:1606 Opcodes/pitch.c:1633
-#: Opcodes/pitch.c:1662
+#: Opcodes/pitch.c:1580 Opcodes/pitch.c:1607 Opcodes/pitch.c:1634
+#: Opcodes/pitch.c:1663
 msgid "oscil: not initialised"
 msgstr ""
 
@@ -5164,7 +4912,7 @@ msgstr ""
 msgid "Seeding from current time %lu\n"
 msgstr ""
 
-#: OOps/ugens5.c:198 OOps/ugens5.c:260 Opcodes/gab/gab.c:45 Opcodes/ugsc.c:188
+#: OOps/ugens5.c:198 OOps/ugens5.c:260 Opcodes/gab/gab.c:47 Opcodes/ugsc.c:186
 #, c-format
 msgid "illegal reson iscl value, %f"
 msgstr ""
@@ -5396,8 +5144,8 @@ msgstr ""
 msgid "Table no. < 1 dft=%.2f  sft=%.2f"
 msgstr ""
 
-#: OOps/ugrw1.c:1781 OOps/ugrw1.c:1822 Opcodes/fareyseq.c:455
-#: Opcodes/fareyseq.c:477
+#: OOps/ugrw1.c:1781 OOps/ugrw1.c:1822 Opcodes/fareyseq.c:453
+#: Opcodes/fareyseq.c:475
 #, c-format
 msgid "Source sft table %.2f not found."
 msgstr ""
@@ -5627,19 +5375,19 @@ msgstr ""
 msgid "reverbx: not initialised"
 msgstr ""
 
-#: Opcodes/ambicode1.c:80
+#: Opcodes/ambicode1.c:82
 msgid "The numbers of input and output arguments are not valid."
 msgstr ""
 
-#: Opcodes/ambicode1.c:163
+#: Opcodes/ambicode1.c:165
 msgid "The number of input arguments is not valid."
 msgstr ""
 
-#: Opcodes/ambicode1.c:167
+#: Opcodes/ambicode1.c:169
 msgid "The isetup value should be between 1 and 5."
 msgstr ""
 
-#: Opcodes/ambicode1.c:193
+#: Opcodes/ambicode1.c:195
 msgid "The output channel count does not match the isetup value."
 msgstr ""
 
@@ -5679,16 +5427,16 @@ msgstr ""
 msgid "Not supported setup number!"
 msgstr ""
 
-#: Opcodes/babo.c:740
+#: Opcodes/babo.c:742
 #, c-format
 msgid "Babo: resonator dimensions are incorrect (%.1f, %.1f, %.1f)"
 msgstr ""
 
-#: Opcodes/bilbar.c:82
+#: Opcodes/bilbar.c:83
 msgid "No data to continue"
 msgstr ""
 
-#: Opcodes/bilbar.c:108
+#: Opcodes/bilbar.c:109
 msgid "Ends must be clamped(1), pivoting(2) or free(3)"
 msgstr ""
 
@@ -5701,8 +5449,8 @@ msgstr ""
 msgid "DLineN: Delay length too big ... setting to maximum length of %ld.\n"
 msgstr ""
 
-#: Opcodes/bowedbar.c:98 Opcodes/physmod.c:489
-msgid "unknown lowest frequency for bowed string -- assuming 50Hz\n"
+#: Opcodes/bowedbar.c:98
+msgid "unknown lowest frequency for bowed bar -- assuming 50Hz\n"
 msgstr ""
 
 #: Opcodes/clfilt.c:53
@@ -5780,17 +5528,17 @@ msgstr ""
 msgid "Unknown control %d"
 msgstr ""
 
-#: Opcodes/cpumeter.c:73
+#: Opcodes/cpumeter.c:77
 #, c-format
 msgid "Failed to open /proc/stat: %s"
 msgstr ""
 
-#: Opcodes/cpumeter.c:75 Opcodes/cpumeter.c:80 Opcodes/cpumeter.c:107
-#: Opcodes/cpumeter.c:147
+#: Opcodes/cpumeter.c:79 Opcodes/cpumeter.c:84 Opcodes/cpumeter.c:111
+#: Opcodes/cpumeter.c:151
 msgid "failed /proc/stat read"
 msgstr ""
 
-#: Opcodes/crossfm.c:33
+#: Opcodes/crossfm.c:34
 msgid "crossfm: ftable not found"
 msgstr ""
 
@@ -5832,31 +5580,31 @@ msgstr ""
 msgid "insufficient arguments for fareytable"
 msgstr "недостаточные аргументы"
 
-#: Opcodes/fareyseq.c:250 Opcodes/fareyseq.c:300
+#: Opcodes/fareyseq.c:251 Opcodes/fareyseq.c:301
 #, c-format
 msgid "Farey: Table no. < 1 dft=%.2f  sft=%.2f"
 msgstr ""
 
-#: Opcodes/fareyseq.c:255
+#: Opcodes/fareyseq.c:256
 #, c-format
 msgid "Farey: Filter type < 1 dft=%.2f  sft=%.2f"
 msgstr ""
 
-#: Opcodes/fareyseq.c:270 Opcodes/fareyseq.c:318
+#: Opcodes/fareyseq.c:271 Opcodes/fareyseq.c:319
 #, c-format
 msgid "Farey: Destination dft table %.2f not found."
 msgstr ""
 
-#: Opcodes/fareyseq.c:281 Opcodes/fareyseq.c:329
+#: Opcodes/fareyseq.c:282 Opcodes/fareyseq.c:330
 #, c-format
 msgid "Farey: Source sft table %.2f not found."
 msgstr ""
 
-#: Opcodes/fareyseq.c:305
+#: Opcodes/fareyseq.c:306
 msgid "Farey: Filter type < 1"
 msgstr ""
 
-#: Opcodes/fareyseq.c:447 Opcodes/fareyseq.c:468
+#: Opcodes/fareyseq.c:445 Opcodes/fareyseq.c:466
 #, c-format
 msgid "Table no. < 1 sft=%.2f"
 msgstr ""
@@ -5964,45 +5712,45 @@ msgstr ""
 msgid "follow - zero length!"
 msgstr ""
 
-#: Opcodes/fout.c:59
+#: Opcodes/fout.c:60
 #, c-format
 msgid "Closing file '%s'...\n"
 msgstr ""
 
-#: Opcodes/fout.c:101
+#: Opcodes/fout.c:102
 msgid "invalid file handle"
 msgstr ""
 
-#: Opcodes/fout.c:108 Opcodes/fout.c:420
+#: Opcodes/fout.c:109 Opcodes/fout.c:421
 msgid "invalid file name"
 msgstr ""
 
-#: Opcodes/fout.c:165
+#: Opcodes/fout.c:166
 #, c-format
 msgid "error opening file '%s'"
 msgstr ""
 
-#: Opcodes/fout.c:192
+#: Opcodes/fout.c:193
 #, c-format
 msgid "error opening sound file '%s'"
 msgstr ""
 
-#: Opcodes/fout.c:429
+#: Opcodes/fout.c:430
 #, c-format
 msgid "cannot close '%s': not found in list of open files"
 msgstr ""
 
-#: Opcodes/fout.c:440
+#: Opcodes/fout.c:441
 #, c-format
 msgid "cannot close file #%d: not a valid handle"
 msgstr ""
 
-#: Opcodes/fout.c:447
+#: Opcodes/fout.c:448
 #, c-format
 msgid "file #%d (%s) is in use, will be closed when released"
 msgstr ""
 
-#: Opcodes/fout.c:476 Opcodes/fout.c:479 Opcodes/fout.c:550 Opcodes/fout.c:553
+#: Opcodes/fout.c:477 Opcodes/fout.c:480 Opcodes/fout.c:551 Opcodes/fout.c:554
 msgid "fouti: invalid file handle"
 msgstr ""
 
@@ -6080,555 +5828,694 @@ msgstr ""
 msgid "ftsave: failed to write file"
 msgstr ""
 
-#: Opcodes/gab/gab.c:109
+#: Opcodes/gab/gab.c:111
 msgid "fastab: incorrect table number"
 msgstr ""
 
-#: Opcodes/gab/gab.c:132 Opcodes/gab/gab.c:141 Opcodes/gab/gab.c:171
+#: Opcodes/gab/gab.c:134 Opcodes/gab/gab.c:143 Opcodes/gab/gab.c:173
 msgid "tabw off end"
 msgstr ""
 
-#: Opcodes/gab/gab.c:157 Opcodes/gab/gab.c:225 Opcodes/gab/gab.c:234
+#: Opcodes/gab/gab.c:159 Opcodes/gab/gab.c:227 Opcodes/gab/gab.c:236
 msgid "tab off end"
 msgstr ""
 
-#: Opcodes/gab/gab.c:183
+#: Opcodes/gab/gab.c:185
 msgid "tab_i: incorrect table number"
 msgstr ""
 
-#: Opcodes/gab/gab.c:190
-msgid "tab_i off end"
+#: Opcodes/gab/gab.c:192
+#, c-format
+msgid "tab_i off end: table number: %d\n"
 msgstr ""
 
-#: Opcodes/gab/gab.c:202
+#: Opcodes/gab/gab.c:204
 msgid "tabw_i: incorrect table number"
 msgstr ""
 
-#: Opcodes/gab/gab.c:209
+#: Opcodes/gab/gab.c:211
 msgid "tabw_i off end"
 msgstr ""
 
-#: Opcodes/gab/gab.c:247
+#: Opcodes/gab/gab.c:249
 msgid "tab_init: incorrect table number"
 msgstr ""
 
-#: Opcodes/gab/gab.c:316
+#: Opcodes/gab/gab.c:318
 msgid "printi parameter was not a \"quoted string\""
 msgstr ""
 
-#: Opcodes/gab/gab.c:423
+#: Opcodes/gab/gab.c:425
 msgid "adsynt2: wavetable not found!"
 msgstr ""
 
-#: Opcodes/gab/gab.c:435
+#: Opcodes/gab/gab.c:437
 msgid "adsynt2: freqtable not found!"
 msgstr ""
 
-#: Opcodes/gab/gab.c:440
+#: Opcodes/gab/gab.c:442
 msgid "adsynt2: partial count is greater than freqtable size!"
 msgstr ""
 
-#: Opcodes/gab/gab.c:449
+#: Opcodes/gab/gab.c:451
 msgid "adsynt2: amptable not found!"
 msgstr ""
 
-#: Opcodes/gab/gab.c:454
+#: Opcodes/gab/gab.c:456
 msgid "adsynt2: partial count is greater than amptable size!"
 msgstr ""
 
-#: Opcodes/gab/gab.c:499
+#: Opcodes/gab/gab.c:501
 #, fuzzy
 msgid "adsynt2: not initialised"
 msgstr "%s: не выступлено с иничиативой"
 
-#: Opcodes/gab/gab.c:741
+#: Opcodes/gab/gab.c:743
 msgid "max_k: invalid imaxflag value"
 msgstr ""
 
-#: Opcodes/gab/hvs.c:68
+#: Opcodes/gab/hvs.c:70
 msgid "hvs1: a line segment must be delimited by 2 points at least"
 msgstr ""
 
-#: Opcodes/gab/hvs.c:150
+#: Opcodes/gab/hvs.c:152
 msgid "hvs2: a square area must be delimited by 2 lines at least"
 msgstr ""
 
-#: Opcodes/gab/hvs.c:246
+#: Opcodes/gab/hvs.c:248
 msgid "hvs3: a square area must be delimited by 2 lines at least"
 msgstr ""
 
-#: Opcodes/gab/hvs.c:389
+#: Opcodes/gab/hvs.c:390
 msgid "vphaseseg: the first function is invalid or missing"
 msgstr ""
 
-#: Opcodes/gab/hvs.c:396
+#: Opcodes/gab/hvs.c:398 Opcodes/gab/vectorial.c:2301
 msgid "vphaseseg: invalid num. of elements"
 msgstr ""
 
-#: Opcodes/gab/hvs.c:414
+#: Opcodes/gab/hvs.c:416
 msgid "vphaseseg: function invalid or missing"
 msgstr ""
 
-#: Opcodes/gab/newgabopc.c:39 Opcodes/gab/newgabopc.c:54
+#: Opcodes/gab/newgabopc.c:40 Opcodes/gab/newgabopc.c:55
 msgid "vtable1: incorrect table number"
 msgstr ""
 
-#: Opcodes/gab/newgabopc.c:359
+#: Opcodes/gab/newgabopc.c:241 Opcodes/gab/newgabopc.c:296
+msgid "copyTabElems: incorrect destination table number"
+msgstr ""
+
+#: Opcodes/gab/newgabopc.c:246 Opcodes/gab/newgabopc.c:301
+msgid ""
+"copyTabElems: destination table too short or number of elements to copy too "
+"big"
+msgstr ""
+
+#: Opcodes/gab/newgabopc.c:252 Opcodes/gab/newgabopc.c:306
+msgid "copyTabElems: incorrect source table number"
+msgstr ""
+
+#: Opcodes/gab/newgabopc.c:257 Opcodes/gab/newgabopc.c:310
+msgid ""
+"copyTabElems: source table size less than the number of elements to copy"
+msgstr ""
+
+#: Opcodes/gab/newgabopc.c:273 Opcodes/gab/newgabopc.c:318
+msgid "copyTabElems: source table too short"
+msgstr ""
+
+#: Opcodes/gab/newgabopc.c:276 Opcodes/gab/newgabopc.c:321
+msgid "copyTabElems: destination table too short"
+msgstr ""
+
+#: Opcodes/gab/newgabopc.c:347
+msgid "inrg: audio input is not enabled"
+msgstr ""
+
+#: Opcodes/gab/newgabopc.c:362
 msgid "inrg: channel number cannot be < 1 (1 is the first channel)"
 msgstr ""
 
-#: Opcodes/gab/newgabopc.c:400
+#: Opcodes/gab/newgabopc.c:403
 msgid "outrg: channel number cannot be < 1 (1 is the first channel)"
 msgstr ""
 
-#: Opcodes/gab/newgabopc.c:439 Opcodes/gab/newgabopc.c:671
+#: Opcodes/gab/newgabopc.c:440 Opcodes/gab/newgabopc.c:574
+#: Opcodes/gab/newgabopc.c:672
 msgid "invalid function"
 msgstr ""
 
-#: Opcodes/gab/newgabopc.c:442
+#: Opcodes/gab/newgabopc.c:443
 msgid "lposc: no sample rate stored in function; assuming=sr\n"
 msgstr ""
 
-#: Opcodes/gab/newgabopc.c:673
+#: Opcodes/gab/newgabopc.c:577
+msgid "lposcil: no sample rate stored in function assuming=sr\n"
+msgstr ""
+
+#: Opcodes/gab/newgabopc.c:674
 msgid "lposcil: no sample rate stored in function; assuming=sr\n"
 msgstr ""
 
-#: Opcodes/gab/sliderTable.c:45 Opcodes/gab/sliderTable.c:254
+#: Opcodes/gab/sliderTable.c:47 Opcodes/gab/sliderTable.c:256
 #: Opcodes/midiops3.c:44 Opcodes/midiops3.c:146 Opcodes/midiops3.c:259
 #: Opcodes/midiops3.c:317 Opcodes/midiops3.c:413
 msgid "illegal channel"
 msgstr ""
 
-#: Opcodes/gab/sliderTable.c:65 Opcodes/gab/sliderTable.c:277
+#: Opcodes/gab/sliderTable.c:67 Opcodes/gab/sliderTable.c:280
 #: Opcodes/midiops3.c:58 Opcodes/midiops3.c:162 Opcodes/midiops3.c:273
 #, c-format
 msgid "illegal control number at position n.%d"
 msgstr ""
 
-#: Opcodes/gab/sliderTable.c:74
+#: Opcodes/gab/sliderTable.c:76
 #, c-format
 msgid ""
 "sliderXtable: illegal initvalue at position %d.  When using table indexing, "
 "the init range is 0 to 1"
 msgstr ""
 
-#: Opcodes/gab/sliderTable.c:84 Opcodes/gab/sliderTable.c:284
-#: Opcodes/gab/sliderTable.c:509 Opcodes/midiops3.c:64 Opcodes/midiops3.c:168
+#: Opcodes/gab/sliderTable.c:86 Opcodes/gab/sliderTable.c:287
+#: Opcodes/gab/sliderTable.c:513 Opcodes/midiops3.c:64 Opcodes/midiops3.c:168
 #: Opcodes/midiops3.c:347
 #, c-format
 msgid "illegal initvalue at position n.%d"
 msgstr ""
 
-#: Opcodes/gab/sliderTable.c:96 Opcodes/gab/sliderTable.c:296
+#: Opcodes/gab/sliderTable.c:98 Opcodes/gab/sliderTable.c:299
 msgid "sliderXtable: zero is illegal in exponential operations"
 msgstr ""
 
-#: Opcodes/gab/sliderTable.c:312
+#: Opcodes/gab/sliderTable.c:315
 #, c-format
 msgid ""
 "sliderXtable: illegal initvalue at position %d. When using table indexing, "
 "the init range is 0 to 1"
 msgstr ""
 
-#: Opcodes/gab/sliderTable.c:565 Opcodes/midiops2.c:321 Opcodes/midiops2.c:359
+#: Opcodes/gab/sliderTable.c:569 Opcodes/midiops2.c:321 Opcodes/midiops2.c:359
 #: Opcodes/midiops2.c:391 Opcodes/midiops2.c:440 Opcodes/midiops2.c:475
 #: Opcodes/midiops2.c:517 Opcodes/midiops2.c:532 Opcodes/midiops2.c:551
 msgid "illegal midi channel"
 msgstr ""
 
-#: Opcodes/gab/tabmorph.c:42
+#: Opcodes/gab/tabmorph.c:43
 msgid "tabmorph: invalid table number"
 msgstr ""
 
-#: Opcodes/gab/tabmorph.c:46
+#: Opcodes/gab/tabmorph.c:47
 msgid "tabmorph: all tables must have the same length!"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:33
+#: Opcodes/gab/vectorial.c:35
 msgid "mtablei: incorrect table number"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:63 Opcodes/gab/vectorial.c:83
-#: Opcodes/gab/vectorial.c:133 Opcodes/gab/vectorial.c:200
+#: Opcodes/gab/vectorial.c:65 Opcodes/gab/vectorial.c:85
+#: Opcodes/gab/vectorial.c:135 Opcodes/gab/vectorial.c:202
 msgid "mtable: incorrect table number"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:185
+#: Opcodes/gab/vectorial.c:187
 msgid "mtabi: incorrect table number"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:252
+#: Opcodes/gab/vectorial.c:254
 msgid "mtablewi: incorrect table number"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:268 Opcodes/gab/vectorial.c:288
-#: Opcodes/gab/vectorial.c:317 Opcodes/gab/vectorial.c:362
-#: Opcodes/gab/vectorial.c:406
+#: Opcodes/gab/vectorial.c:270 Opcodes/gab/vectorial.c:290
+#: Opcodes/gab/vectorial.c:319 Opcodes/gab/vectorial.c:364
+#: Opcodes/gab/vectorial.c:408
 msgid "mtabw: incorrect table number"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:348
+#: Opcodes/gab/vectorial.c:350
 msgid "mtabwi: incorrect table number"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:380
+#: Opcodes/gab/vectorial.c:382
 msgid "mtablew: incorrect table number"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:454 Opcodes/gab/vectorial.c:513
+#: Opcodes/gab/vectorial.c:457 Opcodes/gab/vectorial.c:516
 #, c-format
 msgid "vadd_i: invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:470
+#: Opcodes/gab/vectorial.c:473
 msgid "vadd_i: ifn length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:497
+#: Opcodes/gab/vectorial.c:500
 msgid "vadd: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:529
+#: Opcodes/gab/vectorial.c:532
 msgid "vmult_i: ifn length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:556
+#: Opcodes/gab/vectorial.c:559
 msgid "vmult: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:572
+#: Opcodes/gab/vectorial.c:575
 #, c-format
 msgid "vpow_i: invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:589
+#: Opcodes/gab/vectorial.c:592
 msgid "vpow_i: ifn length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:617
+#: Opcodes/gab/vectorial.c:620
 msgid "vpow: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:633
+#: Opcodes/gab/vectorial.c:636
 #, c-format
 msgid "vexp_i: invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:649
+#: Opcodes/gab/vectorial.c:652
 msgid "vexp_i: ifn length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:676
+#: Opcodes/gab/vectorial.c:679
 msgid "vexp: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:694
+#: Opcodes/gab/vectorial.c:697
 #, c-format
 msgid "vectorsop: ifn1 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:699
+#: Opcodes/gab/vectorial.c:702
 #, c-format
 msgid "vectorsop: ifn2 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:738
+#: Opcodes/gab/vectorial.c:742
 msgid "vcopy: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:756
+#: Opcodes/gab/vectorial.c:760
 msgid "vcopy: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:783
+#: Opcodes/gab/vectorial.c:787
 #, c-format
 msgid "vcopy_i: ifn1 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:788
+#: Opcodes/gab/vectorial.c:792
 #, c-format
 msgid "vcopy_i: ifn2 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:810
+#: Opcodes/gab/vectorial.c:814
 msgid "vcopy_i: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:827
+#: Opcodes/gab/vectorial.c:831
 msgid "vcopy_i: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:866
+#: Opcodes/gab/vectorial.c:870
 msgid "vaddv: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:885
+#: Opcodes/gab/vectorial.c:889
 msgid "vaddv: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:911
+#: Opcodes/gab/vectorial.c:915
 #, c-format
 msgid "vaddv_i: ifn1 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:916
+#: Opcodes/gab/vectorial.c:920
 #, c-format
 msgid "vaddv_i: ifn2 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:938
+#: Opcodes/gab/vectorial.c:942
 msgid "vaddv_i: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:956
+#: Opcodes/gab/vectorial.c:960
 msgid "vaddv_i: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:987
+#: Opcodes/gab/vectorial.c:991
 msgid "vsubv: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1006
+#: Opcodes/gab/vectorial.c:1010
 msgid "vsubv: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1033
+#: Opcodes/gab/vectorial.c:1037
 #, c-format
 msgid "vsubv_i: ifn1 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1038
+#: Opcodes/gab/vectorial.c:1042
 #, c-format
 msgid "vsubv_i: ifn2 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1060
+#: Opcodes/gab/vectorial.c:1064
 msgid "vsubv_i: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1078
+#: Opcodes/gab/vectorial.c:1082
 msgid "vsubv_i: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1115
+#: Opcodes/gab/vectorial.c:1119
 msgid "vmultv: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1134
+#: Opcodes/gab/vectorial.c:1138
 msgid "vmultv: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1161
+#: Opcodes/gab/vectorial.c:1165
 #, c-format
 msgid "vmultv_i: ifn1 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1166
+#: Opcodes/gab/vectorial.c:1170
 #, c-format
 msgid "vmultv_i: ifn2 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1188
+#: Opcodes/gab/vectorial.c:1192
 msgid "vmultv_i: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1205
+#: Opcodes/gab/vectorial.c:1209
 msgid "vmultv_i: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1242
+#: Opcodes/gab/vectorial.c:1246
 msgid "vdivv: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1261
+#: Opcodes/gab/vectorial.c:1265
 msgid "vdivv: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1288
+#: Opcodes/gab/vectorial.c:1292
 #, c-format
 msgid "vdivv_i: ifn1 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1293
+#: Opcodes/gab/vectorial.c:1297
 #, c-format
 msgid "vdivv_i: ifn2 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1315
+#: Opcodes/gab/vectorial.c:1319
 msgid "vdivv_i: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1333
+#: Opcodes/gab/vectorial.c:1337
 msgid "vdivv_i: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1370
+#: Opcodes/gab/vectorial.c:1374
 msgid "vpowv: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1389
+#: Opcodes/gab/vectorial.c:1393
 msgid "vpowv: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1416
+#: Opcodes/gab/vectorial.c:1420
 #, c-format
 msgid "vpowv_i: ifn1 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1421
+#: Opcodes/gab/vectorial.c:1425
 #, c-format
 msgid "vpowv_i: ifn2 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1443
+#: Opcodes/gab/vectorial.c:1447
 msgid "vpowv_i: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1460
+#: Opcodes/gab/vectorial.c:1464
 msgid "vpowv_i: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1497
+#: Opcodes/gab/vectorial.c:1501
 msgid "vexpv: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1516
+#: Opcodes/gab/vectorial.c:1520
 msgid "vexpv: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1543
+#: Opcodes/gab/vectorial.c:1547
 #, c-format
 msgid "vexpv_i: ifn1 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1548
+#: Opcodes/gab/vectorial.c:1552
 #, c-format
 msgid "vexpv_i: ifn2 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1570
+#: Opcodes/gab/vectorial.c:1574
 msgid "vexpv_i: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1588
+#: Opcodes/gab/vectorial.c:1592
 msgid "vexpv_i: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1625
+#: Opcodes/gab/vectorial.c:1629
 msgid "vmap: Error: ifn1 and ifn2 can not be the same"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1630
+#: Opcodes/gab/vectorial.c:1634
 #, c-format
 msgid "vmap: ifn1 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1635
+#: Opcodes/gab/vectorial.c:1639
 #, c-format
 msgid "vmap: ifn2 invalid table number %i"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1657
+#: Opcodes/gab/vectorial.c:1661
 msgid "vmap: ifn1 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1674
+#: Opcodes/gab/vectorial.c:1678
 msgid "vmap: ifn2 length exceeded"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1870
+#: Opcodes/gab/vectorial.c:1698
+#, fuzzy
+msgid "vectorop: invalid num of elements"
+msgstr "неправильный число аргументов"
+
+#: Opcodes/gab/vectorial.c:1727
+msgid "vport: invalid table length or num of elements"
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:1730
+msgid "vport: invalid table"
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:1735
+msgid "vport: invalid init table length or num of elements"
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:1738
+msgid "vport: invalid init table"
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:1875
 #, c-format
 msgid "vrandh: Seeding from current time %lu\n"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1968
+#: Opcodes/gab/vectorial.c:1888
+msgid "vrandh: Invalid table."
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:1891
+msgid "vrandh: idstoffset is greater than table length."
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:1896
+msgid "randh: Table length exceeded, last elements discarded."
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:1975
 #, c-format
 msgid "vrandi: Seeding from current time %lu\n"
 msgstr ""
 
-#: Opcodes/grain4.c:57
+#: Opcodes/gab/vectorial.c:1987
+msgid "vrandi: Invalid table."
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:1990
+msgid "vrandi: idstoffset is greater thantable length."
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:1995
+msgid "vrandi: Table length exceeded, last elements discarded."
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:2077 Opcodes/gab/vectorial.c:2084
+#: Opcodes/gab/vectorial.c:2091
+#, fuzzy
+msgid "vecdelay: invalid num of elements"
+msgstr "неправильный число аргументов"
+
+#: Opcodes/gab/vectorial.c:2079
+msgid "vecdly: invalid output table"
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:2086
+msgid "vecdly: invalid input table"
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:2093
+msgid "vecdly: invalid delay table"
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:2138
+#, fuzzy
+msgid "vecdly: not initialised"
+msgstr "%s: не выступлено с иничиативой"
+
+#: Opcodes/gab/vectorial.c:2181
+msgid "vlinseg/vexpseg: invalid num. of elements"
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:2223 Opcodes/vpvoc.c:118
+msgid "tableseg: not initialised"
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:2253 Opcodes/vpvoc.c:146
+msgid "tablexseg: not initialised"
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:2406
+#, fuzzy
+msgid "vdelayk: not initialised"
+msgstr "%s: не выступлено с иничиативой"
+
+#: Opcodes/gab/vectorial.c:2439 Opcodes/gab/vectorial.c:2445
+#, fuzzy
+msgid "cella: invalid num of elements"
+msgstr "неправильный число аргументов"
+
+#: Opcodes/gab/vectorial.c:2441
+msgid "cella: invalid output table"
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:2448
+msgid "cella: invalid initial state table"
+msgstr ""
+
+#: Opcodes/gab/vectorial.c:2452
+msgid "cella: invalid rule table"
+msgstr ""
+
+#: Opcodes/grain4.c:59
 msgid "granule_set: Unable to find function table"
 msgstr ""
 
-#: Opcodes/grain4.c:67
+#: Opcodes/grain4.c:69
 msgid "granule_set: Unable to find function table for envelope"
 msgstr ""
 
-#: Opcodes/grain4.c:73
+#: Opcodes/grain4.c:75
 msgid "granule_set: Too many voices"
 msgstr ""
 
-#: Opcodes/grain4.c:76
+#: Opcodes/grain4.c:78
 msgid "granule_set: iratio must be greater then 0"
 msgstr ""
 
-#: Opcodes/grain4.c:80
+#: Opcodes/grain4.c:82
 msgid "granule_set: imode must be -1, 0 or +1"
 msgstr ""
 
-#: Opcodes/grain4.c:84
+#: Opcodes/grain4.c:86
 msgid "granule_set: Illegal ithd, must be greater than zero"
 msgstr ""
 
-#: Opcodes/grain4.c:89
+#: Opcodes/grain4.c:91
 msgid "granule_set: ipshift must be integer between 0 and 4"
 msgstr ""
 
-#: Opcodes/grain4.c:94
+#: Opcodes/grain4.c:96
 msgid "granule_set: Not enough voices for the number of pitches"
 msgstr ""
 
-#: Opcodes/grain4.c:101
+#: Opcodes/grain4.c:103
 msgid "granule_set: ipitch1 must be greater then zero"
 msgstr ""
 
-#: Opcodes/grain4.c:106
+#: Opcodes/grain4.c:108
 msgid "granule_set: ipitch2 must be greater then zero"
 msgstr ""
 
-#: Opcodes/grain4.c:111
+#: Opcodes/grain4.c:113
 msgid "granule_set: ipitch3 must be greater then zero"
 msgstr ""
 
-#: Opcodes/grain4.c:116
+#: Opcodes/grain4.c:118
 msgid "granule_set: ipitch4 must be greater then zero"
 msgstr ""
 
-#: Opcodes/grain4.c:121
+#: Opcodes/grain4.c:123
 msgid "granule_set: must be positive and less than function table length"
 msgstr ""
 
-#: Opcodes/grain4.c:125
+#: Opcodes/grain4.c:127
 msgid "granule_set: igskip_os must be greater then 0"
 msgstr ""
 
-#: Opcodes/grain4.c:134
+#: Opcodes/grain4.c:136
 msgid "granule_set: kgap must be greater then 0"
 msgstr ""
 
-#: Opcodes/grain4.c:138
+#: Opcodes/grain4.c:140
 #, c-format
 msgid "granule_set: igap_os must be 0%% to 100%%"
 msgstr ""
 
-#: Opcodes/grain4.c:142
+#: Opcodes/grain4.c:144
 msgid "granule_set: kgsize must be greater then 0"
 msgstr ""
 
-#: Opcodes/grain4.c:146
+#: Opcodes/grain4.c:148
 #, c-format
 msgid "granule_set: igsize_os must be 0%% to 100%%"
 msgstr ""
 
-#: Opcodes/grain4.c:152
+#: Opcodes/grain4.c:154
 msgid "granule_set: Illegal value of iatt and/or idec"
 msgstr ""
 
-#: Opcodes/grain4.c:236
+#: Opcodes/grain4.c:238
 msgid "granule_set: Illegal combination of igskip and ilength"
 msgstr ""
 
-#: Opcodes/grain4.c:243
+#: Opcodes/grain4.c:245
 #, c-format
 msgid ""
 "granule_set: WARNING * ilength may be too short * \n"
@@ -6638,7 +6525,7 @@ msgid ""
 "ilength is %f Sec, kgsize is %f Sec\n"
 msgstr ""
 
-#: Opcodes/grain4.c:418
+#: Opcodes/grain4.c:419
 msgid "grain4: not initialised"
 msgstr ""
 
@@ -6650,92 +6537,88 @@ msgstr ""
 msgid "grain: not initialised"
 msgstr ""
 
-#: Opcodes/harmon.c:224
+#: Opcodes/harmon.c:226
 msgid "harm signal has positive lead\n"
 msgstr ""
 
-#: Opcodes/harmon.c:231
+#: Opcodes/harmon.c:233
 msgid "harm signal has negative lead\n"
 msgstr ""
 
-#: Opcodes/harmon.c:361
+#: Opcodes/harmon.c:363
 msgid "harmon234: out of range\n"
 msgstr ""
 
-#: Opcodes/hrtferX.c:79
+#: Opcodes/hrtferX.c:81
 #, c-format
 msgid ""
 "Orchestra sampling rate is not compatible with HRTF.\n"
 "Should be %d...exiting."
 msgstr ""
 
-#: Opcodes/hrtferX.c:87
+#: Opcodes/hrtferX.c:89
 msgid ""
 "\n"
 "Last argument must be the string 'HRTFcompact' ...correcting.\n"
 msgstr ""
 
-#: Opcodes/hrtferX.c:489
+#: Opcodes/hrtferX.c:494
 msgid "hrtfer: not initialised"
 msgstr ""
 
-#: Opcodes/hrtfopcodes.c:232
+#: Opcodes/hrtfopcodes.c:260 Opcodes/hrtfopcodes.c:1434
+#: Opcodes/hrtfearly.c:300 Opcodes/hrtfreverb.c:257
 #, c-format
 msgid ""
 "\n"
-"Orchestra sampling rate is not compatible with HRTF data files\n"
-"Should be %.0f, see Csound help for object\n"
+"\n"
+"WARNING!!:\n"
+"Orchestra SR not compatible with HRTF processing SR of: %.0f\n"
 "\n"
 msgstr ""
 
-#: Opcodes/hrtfopcodes.c:251 Opcodes/hrtfopcodes.c:275
-#: Opcodes/hrtfopcodes.c:298 Opcodes/hrtfopcodes.c:1257
-#: Opcodes/hrtfopcodes.c:1280 Opcodes/hrtfopcodes.c:1303
-#: Opcodes/hrtfopcodes.c:1854 Opcodes/hrtfopcodes.c:1876
-#: Opcodes/hrtfopcodes.c:1898
+#: Opcodes/hrtfopcodes.c:287 Opcodes/hrtfopcodes.c:1461
+#: Opcodes/hrtfopcodes.c:2071 Opcodes/hrtfearly.c:327 Opcodes/hrtfreverb.c:300
 msgid ""
 "\n"
 "\n"
 "\n"
-"cannot load left data file, exiting\n"
+"Cannot load left data file, exiting\n"
 "\n"
 msgstr ""
 
-#: Opcodes/hrtfopcodes.c:259 Opcodes/hrtfopcodes.c:283
-#: Opcodes/hrtfopcodes.c:306 Opcodes/hrtfopcodes.c:1265
-#: Opcodes/hrtfopcodes.c:1288 Opcodes/hrtfopcodes.c:1311
-#: Opcodes/hrtfopcodes.c:1862 Opcodes/hrtfopcodes.c:1884
-#: Opcodes/hrtfopcodes.c:1906
+#: Opcodes/hrtfopcodes.c:294 Opcodes/hrtfopcodes.c:1468
+#: Opcodes/hrtfopcodes.c:2078 Opcodes/hrtfearly.c:334 Opcodes/hrtfreverb.c:306
 msgid ""
 "\n"
 "\n"
 "\n"
-"cannot load right data file, exiting\n"
+"Cannot load right data file, exiting\n"
 "\n"
 msgstr ""
 
-#: Opcodes/hrtfopcodes.c:313 Opcodes/hrtfopcodes.c:1912
+#: Opcodes/hrtfopcodes.c:690 Opcodes/hrtfearly.c:1241
 msgid ""
 "\n"
-"\n"
-"\n"
-" Sampling rate not supported, exiting\n"
+"WARNING: fades are overlapping: this could lead to noise: reduce fade size "
+"or change trajectory\n"
 "\n"
 msgstr ""
 
-#: Opcodes/hrtfopcodes.c:600
+#: Opcodes/hrtfopcodes.c:2052
+#, c-format
 msgid ""
-"fades are overlapping: this could lead to noise: reduce fade size or change "
-"trajectory\n"
+"\n"
+"\n"
+"WARNING!!:\n"
+"Orchestra SR not compatiblewith HRTF processing SR of: %.0f\n"
 "\n"
 msgstr ""
 
-#: Opcodes/hrtfopcodes.c:1239 Opcodes/hrtfopcodes.c:1837
-#, c-format
+#: Opcodes/hrtfreverb.c:832
 msgid ""
-"Orchestra sampling rate is not compatible with HRTF data files\n"
-"Should be %.0f, see Csound help for object\n"
 "\n"
+"warning, approaching instability, fixed with a flat late reverb!"
 msgstr ""
 
 #: Opcodes/ifd.c:74
@@ -6761,10 +6644,9 @@ msgid "imageload: file %s is not in PNG format.\n"
 msgstr ""
 
 #: Opcodes/imageOpcodes.c:119 Opcodes/imageOpcodes.c:126
-#: Opcodes/imageOpcodes.c:134 Opcodes/imageOpcodes.c:165
-#: Opcodes/imageOpcodes.c:174 Opcodes/imageOpcodes.c:188
-#: Opcodes/imageOpcodes.c:291 Opcodes/imageOpcodes.c:298
-#: Opcodes/imageOpcodes.c:311
+#: Opcodes/imageOpcodes.c:165 Opcodes/imageOpcodes.c:174
+#: Opcodes/imageOpcodes.c:188 Opcodes/imageOpcodes.c:291
+#: Opcodes/imageOpcodes.c:298 Opcodes/imageOpcodes.c:311
 msgid "imageload: out of memory.\n"
 msgstr ""
 
@@ -6784,62 +6666,62 @@ msgid ""
 "Status: %d\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:543
+#: Opcodes/jacko.cpp:545
 #, c-format
 msgid "Created Jack client \"%s\" for Jack server \"%s\".\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:548
+#: Opcodes/jacko.cpp:551
 #, c-format
 msgid "Jack buffer size %d != Csound ksmps %d, exiting...\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:556
+#: Opcodes/jacko.cpp:559
 #, c-format
 msgid "Jack sampling rate %d != Csound sr %d, exiting...\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:567
+#: Opcodes/jacko.cpp:570
 #, c-format
 msgid "Activated Jack client \"%s\".\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:571
+#: Opcodes/jacko.cpp:574
 #, c-format
 msgid "Failed to activate Jack client \"%s\": status %d.\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:586
+#: Opcodes/jacko.cpp:589
 msgid "BEGAN JackoState::close()...\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:622
+#: Opcodes/jacko.cpp:629
 msgid "ENDED JackoState::close().\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:876
+#: Opcodes/jacko.cpp:892
 #, c-format
 msgid "Failed to set Jack freewheeling mode to \"%s\": error %d.\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:878
+#: Opcodes/jacko.cpp:895
 #, c-format
 msgid "Set Jack freewheeling mode to \"%s\".\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:893
+#: Opcodes/jacko.cpp:911
 #, c-format
 msgid "Turned Jack connections \"%s\".\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:934 Opcodes/jacko.cpp:1034 Opcodes/jacko.cpp:1134
-#: Opcodes/jacko.cpp:1200
+#: Opcodes/jacko.cpp:955 Opcodes/jacko.cpp:1062 Opcodes/jacko.cpp:1169
+#: Opcodes/jacko.cpp:1241
 #, c-format
 msgid "Could not create Jack port \"%s\".\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:946 Opcodes/jacko.cpp:1046 Opcodes/jacko.cpp:1146
-#: Opcodes/jacko.cpp:1212
+#: Opcodes/jacko.cpp:969 Opcodes/jacko.cpp:1077 Opcodes/jacko.cpp:1184
+#: Opcodes/jacko.cpp:1255
 #, c-format
 msgid "Could not create Jack connection from \"%s\" to \"%s\": status %d.\n"
 msgstr ""
@@ -6878,27 +6760,27 @@ msgstr ""
 msgid "lorisread cannot load %s"
 msgstr ""
 
-#: Opcodes/loscilx.c:74 Opcodes/loscilx.c:178
+#: Opcodes/loscilx.c:76 Opcodes/loscilx.c:180
 #, c-format
 msgid "could not load '%s'"
 msgstr ""
 
-#: Opcodes/loscilx.c:88 Opcodes/loscilx.c:258
+#: Opcodes/loscilx.c:90 Opcodes/loscilx.c:260
 #, c-format
 msgid "invalid loop mode: %d"
 msgstr ""
 
-#: Opcodes/loscilx.c:170
+#: Opcodes/loscilx.c:172
 msgid "loscilx: invalid number of output arguments"
 msgstr ""
 
-#: Opcodes/loscilx.c:190 Opcodes/loscilx.c:219 Opcodes/pvlock.c:94
-#: Opcodes/pvlock.c:296 Opcodes/pvsbasic.c:460
+#: Opcodes/loscilx.c:192 Opcodes/loscilx.c:221 Opcodes/pvlock.c:118
+#: Opcodes/pvlock.c:320 Opcodes/pvsbasic.c:460
 msgid ""
 "number of output arguments inconsistent with number of sound file channels"
 msgstr ""
 
-#: Opcodes/loscilx.c:665
+#: Opcodes/loscilx.c:667
 msgid "loscilx: not initialised"
 msgstr ""
 
@@ -6906,11 +6788,11 @@ msgstr ""
 msgid "illegal order num. (min 1, max 10)"
 msgstr ""
 
-#: Opcodes/mandolin.c:80
+#: Opcodes/mandolin.c:81
 msgid "No table for Mandolin"
 msgstr ""
 
-#: Opcodes/mandolin.c:90
+#: Opcodes/mandolin.c:91
 msgid "No base frequency for mandolin"
 msgstr ""
 
@@ -6941,27 +6823,27 @@ msgstr ""
 msgid "illegal lsb control number at position n.%d"
 msgstr ""
 
-#: Opcodes/modal4.c:45
+#: Opcodes/modal4.c:46
 msgid "No table for Modal4 case"
 msgstr ""
 
-#: Opcodes/modal4.c:245
+#: Opcodes/modal4.c:246
 msgid "No table for Marimba strike"
 msgstr ""
 
-#: Opcodes/modal4.c:284
+#: Opcodes/modal4.c:285
 msgid "striking three times here!!!\n"
 msgstr ""
 
-#: Opcodes/modal4.c:289
+#: Opcodes/modal4.c:290
 msgid "striking twice here!!\n"
 msgstr ""
 
-#: Opcodes/modal4.c:359
+#: Opcodes/modal4.c:360
 msgid "No table for Vibraphone strike"
 msgstr ""
 
-#: Opcodes/modal4.c:440
+#: Opcodes/modal4.c:441
 msgid "No table for Agogobell strike"
 msgstr ""
 
@@ -6969,12 +6851,12 @@ msgstr ""
 msgid "modmatrix: "
 msgstr ""
 
-#: Opcodes/mp3in.c:92 Opcodes/mp3in.c:230
+#: Opcodes/mp3in.c:93 Opcodes/mp3in.c:231
 #, c-format
 msgid "mp3in: %s: failed to open file"
 msgstr ""
 
-#: Opcodes/mp3in.c:139
+#: Opcodes/mp3in.c:140
 #, c-format
 msgid "mp3in: file sample rate (%d) != orchestra sr (%d)\n"
 msgstr ""
@@ -7262,7 +7144,7 @@ msgstr ""
 msgid "No open glove"
 msgstr ""
 
-#: Opcodes/pan2.c:43
+#: Opcodes/pan2.c:45
 msgid "Unknown panning type"
 msgstr ""
 
@@ -7278,195 +7160,199 @@ msgstr ""
 msgid "partikkelsync: could not find opcode id"
 msgstr ""
 
-#: Opcodes/physmod.c:121
+#: Opcodes/physmod.c:122
 msgid "No table for Clarinet"
 msgstr ""
 
-#: Opcodes/physmod.c:129
+#: Opcodes/physmod.c:130
 msgid "No base frequency for clarinet -- assuming 50Hz\n"
 msgstr ""
 
-#: Opcodes/physmod.c:283
+#: Opcodes/physmod.c:284
 msgid "No table for Flute"
 msgstr ""
 
-#: Opcodes/physmod.c:291
+#: Opcodes/physmod.c:292
 msgid "No base frequency for flute -- assumed to be 50Hz\n"
 msgstr ""
 
-#: Opcodes/physmod.c:481
+#: Opcodes/physmod.c:482
 msgid "No table for wgbow vibrato"
 msgstr ""
 
-#: Opcodes/physmod.c:689
+#: Opcodes/physmod.c:490
+msgid "unknown lowest frequency for bowed string -- assuming 50Hz\n"
+msgstr ""
+
+#: Opcodes/physmod.c:690
 msgid "DlineA not initialised"
 msgstr ""
 
-#: Opcodes/physmod.c:756
+#: Opcodes/physmod.c:757
 msgid "No table for Brass"
 msgstr ""
 
-#: Opcodes/physmod.c:765
+#: Opcodes/physmod.c:766
 msgid "No base frequency for brass -- assumed to be 50Hz\n"
 msgstr ""
 
-#: Opcodes/physutil.c:137 Opcodes/physutil.c:312 Opcodes/physutil.c:324
-#: Opcodes/physutil.c:345
+#: Opcodes/physutil.c:138 Opcodes/physutil.c:313 Opcodes/physutil.c:325
+#: Opcodes/physutil.c:346
 msgid "negative rates not allowed!!, correcting\n"
 msgstr ""
 
-#: Opcodes/physutil.c:186
+#: Opcodes/physutil.c:187
 #, c-format
 msgid "Envelope: value=%f target=%f rate=%f state=%d\n"
 msgstr ""
 
-#: Opcodes/physutil.c:335
+#: Opcodes/physutil.c:336
 msgid "Sustain level out of range!!, correcting\n"
 msgstr ""
 
-#: Opcodes/physutil.c:356 Opcodes/physutil.c:366 Opcodes/physutil.c:376
+#: Opcodes/physutil.c:357 Opcodes/physutil.c:367 Opcodes/physutil.c:377
 msgid "negative times not allowed!!, correcting\n"
 msgstr ""
 
-#: Opcodes/pitch0.c:37
+#: Opcodes/pitch0.c:38
 #, c-format
 msgid "Muting new instances of instr %d\n"
 msgstr ""
 
-#: Opcodes/pitch0.c:40
+#: Opcodes/pitch0.c:41
 #, c-format
 msgid "Allowing instrument %d to start\n"
 msgstr ""
 
-#: Opcodes/pitch.c:84 Opcodes/spectra.c:78
+#: Opcodes/pitch.c:85 Opcodes/spectra.c:80
 msgid "illegal iocts"
 msgstr ""
 
-#: Opcodes/pitch.c:86 Opcodes/spectra.c:80
+#: Opcodes/pitch.c:87 Opcodes/spectra.c:82
 msgid "illegal ifrqs"
 msgstr ""
 
-#: Opcodes/pitch.c:180 Opcodes/spectra.c:584
+#: Opcodes/pitch.c:181 Opcodes/spectra.c:586
 msgid "illegal no of partials"
 msgstr ""
 
-#: Opcodes/pitch.c:205
+#: Opcodes/pitch.c:206
 msgid "per octave rolloff too steep"
 msgstr ""
 
-#: Opcodes/pitch.c:219 Opcodes/spectra.c:625
+#: Opcodes/pitch.c:220 Opcodes/spectra.c:627
 msgid "illegal lo-hi values"
 msgstr ""
 
-#: Opcodes/pitch.c:454
+#: Opcodes/pitch.c:455
 msgid "pitch: not initialised"
 msgstr ""
 
-#: Opcodes/pitch.c:463
+#: Opcodes/pitch.c:464
 msgid "Must have even number of arguments in mac\n"
 msgstr ""
 
-#: Opcodes/pitch.c:552
+#: Opcodes/pitch.c:553
 msgid "clockread: clock still running, call clockoff first"
 msgstr ""
 
-#: Opcodes/pitch.c:578
+#: Opcodes/pitch.c:579
 msgid "adsynt: wavetable not found!"
 msgstr ""
 
-#: Opcodes/pitch.c:591
+#: Opcodes/pitch.c:592
 msgid "adsynt: freqtable not found!"
 msgstr ""
 
-#: Opcodes/pitch.c:596
+#: Opcodes/pitch.c:597
 msgid "adsynt: partial count is greater than freqtable size!"
 msgstr ""
 
-#: Opcodes/pitch.c:604
+#: Opcodes/pitch.c:605
 msgid "adsynt: amptable not found!"
 msgstr ""
 
-#: Opcodes/pitch.c:609
+#: Opcodes/pitch.c:610
 msgid "adsynt: partial count is greater than amptable size!"
 msgstr ""
 
-#: Opcodes/pitch.c:640
+#: Opcodes/pitch.c:641
 msgid "adsynt: not initialised"
 msgstr ""
 
-#: Opcodes/pitch.c:716
+#: Opcodes/pitch.c:717
 msgid "hsboscil: not initialised"
 msgstr ""
 
-#: Opcodes/pitch.c:799
+#: Opcodes/pitch.c:800
 msgid "pitchamdf: maxcps must be > mincps !"
 msgstr ""
 
-#: Opcodes/pitch.c:945
+#: Opcodes/pitch.c:946
 msgid "pitchamdf: not initialised"
 msgstr ""
 
-#: Opcodes/pitch.c:1125 Opcodes/pitch.c:1152
+#: Opcodes/pitch.c:1126 Opcodes/pitch.c:1153
 msgid "phasorbnk: not initialised"
 msgstr ""
 
-#: Opcodes/pitch.c:1214
+#: Opcodes/pitch.c:1215
 msgid "pinkish: Invalid method code"
 msgstr ""
 
-#: Opcodes/pitch.c:1225
+#: Opcodes/pitch.c:1226
 msgid "pinkish: Filter method requires a-rate (noise) input"
 msgstr ""
 
-#: Opcodes/pitch.c:1348
+#: Opcodes/pitch.c:1349
 #, c-format
 msgid ""
 "pinkish: Gardner method requires 4-%d bands. Default %ld substituted for "
 "%d.\n"
 msgstr ""
 
-#: Opcodes/pitch.c:1731
+#: Opcodes/pitch.c:1733
 msgid "Incorrect argument count in transeg"
 msgstr ""
 
-#: Opcodes/pitch.c:1782
+#: Opcodes/pitch.c:1784
 msgid "Incorrect argument count in transegb"
 msgstr ""
 
-#: Opcodes/pitch.c:1832 Opcodes/pitch.c:1971
+#: Opcodes/pitch.c:1834 Opcodes/pitch.c:1977
 #, fuzzy
 msgid "Error: transeg not initialised (krate)\n"
 msgstr "%s: не выступлено с иничиативой"
 
-#: Opcodes/pitch.c:1867 Opcodes/pitch.c:2013
+#: Opcodes/pitch.c:1869 Opcodes/pitch.c:2027
 msgid "transeg: not initialised (arate)\n"
 msgstr ""
 
-#: Opcodes/pitch.c:1921
+#: Opcodes/pitch.c:1924
 msgid "Incorrect argument count in transegr"
 msgstr ""
 
-#: Opcodes/pitch.c:2269
+#: Opcodes/pitch.c:2294
 #, fuzzy
 msgid "median: not initialised (arate)\n"
 msgstr "%s: не выступлено с иничиативой"
 
-#: Opcodes/pitch.c:2273 Opcodes/pitch.c:2321
+#: Opcodes/pitch.c:2298 Opcodes/pitch.c:2345
 #, c-format
 msgid "median: window (%d)larger than maximum(%d); truncated"
 msgstr ""
 
-#: Opcodes/pitch.c:2317
+#: Opcodes/pitch.c:2341
 #, fuzzy
 msgid "median: not initialised (krate)\n"
 msgstr "%s: не выступлено с иничиативой"
 
-#: Opcodes/pitchtrack.c:369
+#: Opcodes/pitchtrack.c:370
 #, c-format
 msgid "ptrack: FFT size out of range; using %d\n"
 msgstr ""
 
-#: Opcodes/pitchtrack.c:382
+#: Opcodes/pitchtrack.c:383
 #, c-format
 msgid "ptrack: FFT size not a power of 2; using %d\n"
 msgstr ""
@@ -7484,7 +7370,7 @@ msgstr ""
 msgid "Error: %s, %s"
 msgstr ""
 
-#: Opcodes/ppp.c:20 Opcodes/pvlock.c:454 Opcodes/pvsband.c:46
+#: Opcodes/ppp.c:20 Opcodes/pvlock.c:478 Opcodes/pvsband.c:46
 #: Opcodes/pvsbasic.c:575 Opcodes/pvsbasic.c:880 Opcodes/pvsbasic.c:1080
 #: Opcodes/pvsbasic.c:1180 Opcodes/pvsbasic.c:1395 Opcodes/pvsbasic.c:1593
 #: Opcodes/pvsbasic.c:1756 Opcodes/pvslock.c:20
@@ -7503,62 +7389,62 @@ msgstr ""
 msgid "psynth: function table not found\n"
 msgstr ""
 
-#: Opcodes/psynth.c:569 Opcodes/psynth.c:662
+#: Opcodes/psynth.c:567 Opcodes/psynth.c:660
 msgid "Input not in TRACKS format\n"
 msgstr ""
 
-#: Opcodes/psynth.c:767
+#: Opcodes/psynth.c:765
 msgid "trsplit: input not in TRACKS format\n"
 msgstr ""
 
-#: Opcodes/psynth.c:863 Opcodes/psynth.c:1027
+#: Opcodes/psynth.c:861 Opcodes/psynth.c:1023
 msgid "trmix: first input not in TRACKS format\n"
 msgstr ""
 
-#: Opcodes/psynth.c:868 Opcodes/psynth.c:1032
+#: Opcodes/psynth.c:866 Opcodes/psynth.c:1028
 msgid "trmix: second input not in TRACKS format\n"
 msgstr ""
 
-#: Opcodes/psynth.c:943
+#: Opcodes/psynth.c:939
 msgid "trfil: input not in TRACKS format\n"
 msgstr ""
 
-#: Opcodes/psynth.c:948
+#: Opcodes/psynth.c:944
 msgid "trfil: could not find function table\n"
 msgstr ""
 
-#: Opcodes/psynth.c:1135
+#: Opcodes/psynth.c:1131
 msgid "binit: first input not in TRACKS format\n"
 msgstr ""
 
-#: Opcodes/pvadd.c:153
+#: Opcodes/pvadd.c:150
 msgid "PVADD ktimpnt truncated to last frame"
 msgstr ""
 
-#: Opcodes/pvadd.c:191
+#: Opcodes/pvadd.c:188
 msgid "pvadd: not initialised"
 msgstr ""
 
-#: Opcodes/pvadd.c:193
+#: Opcodes/pvadd.c:190
 msgid "PVADD timpnt < 0"
 msgstr ""
 
-#: Opcodes/pvadd.c:201
+#: Opcodes/pvadd.c:198
 #, c-format
 msgid "PVADD cannot load %s"
 msgstr ""
 
-#: Opcodes/pvadd.c:205 Opcodes/ugens8.c:223
+#: Opcodes/pvadd.c:202 Opcodes/ugens8.c:223
 #, c-format
 msgid "pvoc-ex file %s: FFT size %d too large for Csound"
 msgstr ""
 
-#: Opcodes/pvadd.c:210
+#: Opcodes/pvadd.c:207
 #, c-format
 msgid "PV frame %ld seems too small in %s"
 msgstr ""
 
-#: Opcodes/pvadd.c:215 Opcodes/pvread.c:115 Opcodes/ugens8.c:229
+#: Opcodes/pvadd.c:212 Opcodes/pvread.c:115 Opcodes/ugens8.c:229
 #, c-format
 msgid "pvoc-ex file %s is not mono"
 msgstr ""
@@ -7568,98 +7454,98 @@ msgstr ""
 msgid "PVBUFREAD cannot load %s"
 msgstr ""
 
-#: Opcodes/pvinterp.c:76 Opcodes/vpvoc.c:206
+#: Opcodes/pvinterp.c:76 Opcodes/vpvoc.c:207
 #, c-format
 msgid "PVOC frame %ld bigger than %ld in %s"
 msgstr ""
 
-#: Opcodes/pvinterp.c:81 Opcodes/vpvoc.c:211
+#: Opcodes/pvinterp.c:81 Opcodes/vpvoc.c:212
 #, c-format
 msgid "PVOC frame %ld seems too small in %s"
 msgstr ""
 
-#: Opcodes/pvinterp.c:85 Opcodes/pvinterp.c:184 Opcodes/pvinterp.c:356
-#: Opcodes/vpvoc.c:215
+#: Opcodes/pvinterp.c:85 Opcodes/pvinterp.c:183 Opcodes/pvinterp.c:354
+#: Opcodes/vpvoc.c:216
 #, c-format
 msgid "%d chans (not 1) in PVOC file %s"
 msgstr ""
 
-#: Opcodes/pvinterp.c:101 Opcodes/pvinterp.c:212 Opcodes/pvinterp.c:382
+#: Opcodes/pvinterp.c:100 Opcodes/pvinterp.c:210 Opcodes/pvinterp.c:379
 #: Opcodes/ugens8.c:95 Opcodes/vpvoc.c:244
 #, c-format
 msgid "ksmps of %d needs wdw of %d, max is %d for pv %s"
 msgstr ""
 
-#: Opcodes/pvinterp.c:122 Opcodes/pvinterp.c:256 Opcodes/pvinterp.c:431
+#: Opcodes/pvinterp.c:121 Opcodes/pvinterp.c:254 Opcodes/pvinterp.c:428
 #: Opcodes/pvread.c:95 Opcodes/ugens8.c:156 Opcodes/vpvoc.c:297
 msgid "PVOC ktimpnt truncated to last frame"
 msgstr ""
 
-#: Opcodes/pvinterp.c:130
+#: Opcodes/pvinterp.c:129
 msgid "pvbufread: not initialised"
 msgstr ""
 
-#: Opcodes/pvinterp.c:132 Opcodes/pvinterp.c:306 Opcodes/pvinterp.c:492
+#: Opcodes/pvinterp.c:131 Opcodes/pvinterp.c:304 Opcodes/pvinterp.c:489
 #: Opcodes/pvread.c:103 Opcodes/ugens8.c:206 Opcodes/vpvoc.c:361
 msgid "PVOC timpnt < 0"
 msgstr ""
 
-#: Opcodes/pvinterp.c:149
+#: Opcodes/pvinterp.c:148
 msgid "pvinterp: associated pvbufread not found"
 msgstr ""
 
-#: Opcodes/pvinterp.c:166
+#: Opcodes/pvinterp.c:165
 #, c-format
 msgid "PVINTERP cannot load %s"
 msgstr ""
 
-#: Opcodes/pvinterp.c:179
+#: Opcodes/pvinterp.c:178
 #, c-format
 msgid "pvinterp: %s: frame size %d does not match pvbufread frame size %d\n"
 msgstr ""
 
-#: Opcodes/pvinterp.c:300
+#: Opcodes/pvinterp.c:298
 msgid "pvinterp: not initialised"
 msgstr ""
 
-#: Opcodes/pvinterp.c:302 Opcodes/pvinterp.c:488 Opcodes/ugens8.c:202
+#: Opcodes/pvinterp.c:300 Opcodes/pvinterp.c:485 Opcodes/ugens8.c:202
 #: Opcodes/vpvoc.c:357
 msgid "PVOC transpose too low"
 msgstr ""
 
-#: Opcodes/pvinterp.c:304 Opcodes/pvinterp.c:490 Opcodes/ugens8.c:204
+#: Opcodes/pvinterp.c:302 Opcodes/pvinterp.c:487 Opcodes/ugens8.c:204
 #: Opcodes/vpvoc.c:359
 msgid "PVOC transpose too high"
 msgstr ""
 
-#: Opcodes/pvinterp.c:323
+#: Opcodes/pvinterp.c:321
 msgid "pvcross: associated pvbufread not found"
 msgstr ""
 
-#: Opcodes/pvinterp.c:339
+#: Opcodes/pvinterp.c:337
 #, c-format
 msgid "PVCROSS cannot load %s"
 msgstr ""
 
-#: Opcodes/pvinterp.c:351
+#: Opcodes/pvinterp.c:349
 #, c-format
 msgid "pvcross: %s: frame size %d does not match pvbufread frame size %d\n"
 msgstr ""
 
-#: Opcodes/pvinterp.c:454 Opcodes/vpvoc.c:322
+#: Opcodes/pvinterp.c:451 Opcodes/vpvoc.c:322
 msgid "PVOC debug: one frame gets through\n"
 msgstr ""
 
-#: Opcodes/pvinterp.c:486
+#: Opcodes/pvinterp.c:483
 msgid "pvcross: not initialised"
 msgstr ""
 
-#: Opcodes/pvlock.c:35 Opcodes/pvsbasic.c:380
+#: Opcodes/pvlock.c:59 Opcodes/pvsbasic.c:380
 #, fuzzy
 msgid "invalid number of output arguments"
 msgstr "неправильный число аргументов"
 
-#: Opcodes/pvlock.c:466
+#: Opcodes/pvlock.c:490
 msgid "pvsfreeze: signal format must be amp-freq."
 msgstr ""
 
@@ -7767,30 +7653,35 @@ msgstr ""
 msgid "pvs2tab: signal format must be amp-phase or amp-freq."
 msgstr ""
 
-#: Opcodes/pvsbasic.c:2151 Opcodes/pvsbasic.c:2190 Opcodes/tabvars.c:53
-#: Opcodes/tabvars.c:89 Opcodes/tabvars.c:131 Opcodes/tabvars.c:176
-#: Opcodes/tabvars.c:178
+#: Opcodes/pvsbasic.c:2151 Opcodes/pvsbasic.c:2189 Opcodes/tabvars.c:56
+#: Opcodes/tabvars.c:92 Opcodes/tabvars.c:134 Opcodes/tabvars.c:179
+#: Opcodes/tabvars.c:181
 #, fuzzy
 msgid "t-variable not initialised"
 msgstr "%s: не выступлено с иничиативой"
 
-#: Opcodes/pvsbuffer.c:53 Opcodes/pvscent.c:164 Opcodes/pvsdemix.c:49
+#: Opcodes/pvsbuffer.c:56 Opcodes/pvscent.c:164 Opcodes/pvsdemix.c:49
 msgid "SDFT case not implemented yet"
 msgstr ""
 
-#: Opcodes/pvsbuffer.c:85
+#: Opcodes/pvsbuffer.c:89
 msgid "error... could not create global var for handle\n"
 msgstr ""
 
-#: Opcodes/pvsbuffer.c:143 Opcodes/pvsbuffer.c:190 Opcodes/pvsbuffer.c:258
+#: Opcodes/pvsbuffer.c:148 Opcodes/pvsbuffer.c:197 Opcodes/pvsbuffer.c:266
 msgid "error... could not read handle from global variable\n"
 msgstr ""
 
-#: Opcodes/pvsbuffer.c:238 Opcodes/pvsbuffer.c:306
+#: Opcodes/pvsbuffer.c:246 Opcodes/pvsbuffer.c:316
 #, fuzzy
 msgid "Invalid buffer handle"
 msgstr "неправильный число аргументов"
 
+#: Opcodes/pvsbuffer.c:285 Opcodes/pvsbuffer.c:291
+#, c-format
+msgid "table length too small: needed %d, got %d\n"
+msgstr ""
+
 #: Opcodes/pvscent.c:42
 msgid "pvscent: format must be amp-phase or amp-freq.\n"
 msgstr ""
@@ -7981,48 +7872,48 @@ msgstr ""
 msgid "seqtim: incorrect table number"
 msgstr ""
 
-#: Opcodes/sfont.c:118
+#: Opcodes/sfont.c:121
 #, c-format
 msgid "sfload: cannot open SoundFont file \"%s\" (error %s)"
 msgstr ""
 
-#: Opcodes/sfont.c:123
+#: Opcodes/sfont.c:126
 msgid "Sfload: cannot use globals"
 msgstr ""
 
-#: Opcodes/sfont.c:153
+#: Opcodes/sfont.c:156
 msgid "sfload: could not open globals\n"
 msgstr ""
 
-#: Opcodes/sfont.c:170
+#: Opcodes/sfont.c:173
 msgid "Extending soundfonts"
 msgstr ""
 
-#: Opcodes/sfont.c:201
+#: Opcodes/sfont.c:204
 #, c-format
 msgid ""
 "\n"
 "Preset list of \"%s\"\n"
 msgstr ""
 
-#: Opcodes/sfont.c:204
+#: Opcodes/sfont.c:207
 #, c-format
 msgid "%3d) %-20s\tprog:%-3d bank:%d\n"
 msgstr ""
 
-#: Opcodes/sfont.c:226
+#: Opcodes/sfont.c:229
 #, c-format
 msgid ""
 "\n"
 "Assigning all Presets of \"%s\" starting from %d (preset handle number)\n"
 msgstr ""
 
-#: Opcodes/sfont.c:231
+#: Opcodes/sfont.c:234
 #, c-format
 msgid "%3d<--%-20s\t(prog:%-3d bank:%d)\n"
 msgstr ""
 
-#: Opcodes/sfont.c:238
+#: Opcodes/sfont.c:241
 #, c-format
 msgid ""
 "\n"
@@ -8030,38 +7921,38 @@ msgid ""
 "\n"
 msgstr ""
 
-#: Opcodes/sfont.c:251
+#: Opcodes/sfont.c:254
 #, c-format
 msgid ""
 "\n"
 "Instrument list of \"%s\"\n"
 msgstr ""
 
-#: Opcodes/sfont.c:268
+#: Opcodes/sfont.c:271
 #, c-format
 msgid "sfpreset: preset handle too big (%d), max: %d"
 msgstr ""
 
-#: Opcodes/sfont.c:284
+#: Opcodes/sfont.c:287
 #, c-format
 msgid ""
 "sfpreset: cannot find any preset having prog number %d and bank number %d in "
 "SoundFont file \"%s\""
 msgstr ""
 
-#: Opcodes/sfont.c:306 Opcodes/sfont.c:2189
+#: Opcodes/sfont.c:309 Opcodes/sfont.c:2192
 msgid "sfplay: invalid or out-of-range preset number"
 msgstr ""
 
-#: Opcodes/sfont.c:633
+#: Opcodes/sfont.c:636
 msgid "sfplaym: invalid or out-of-range preset number"
 msgstr ""
 
-#: Opcodes/sfont.c:888 Opcodes/sfont.c:1150
+#: Opcodes/sfont.c:891 Opcodes/sfont.c:1153
 msgid "sfinstr: instrument out of range"
 msgstr ""
 
-#: Opcodes/sfont.c:1598 Opcodes/sfont.c:1835
+#: Opcodes/sfont.c:1601 Opcodes/sfont.c:1838
 #, c-format
 msgid ""
 "SoundFont file \"%s\" contains ROM samples !\n"
@@ -8069,19 +7960,19 @@ msgid ""
 "Session aborted !"
 msgstr ""
 
-#: Opcodes/sfont.c:1987 Opcodes/sfont.c:1993
+#: Opcodes/sfont.c:1990 Opcodes/sfont.c:1996
 msgid "Sfont: cannot use globals/"
 msgstr ""
 
-#: Opcodes/sfont.c:1996
+#: Opcodes/sfont.c:1999
 msgid "Sfont format not compatible"
 msgstr ""
 
-#: Opcodes/sfont.c:2534
+#: Opcodes/sfont.c:2537
 msgid "error... could not create sfont globals\n"
 msgstr ""
 
-#: Opcodes/shape.c:49
+#: Opcodes/shape.c:51
 msgid "powershape: ifullscale must be strictly positive"
 msgstr ""
 
@@ -8093,25 +7984,25 @@ msgstr ""
 msgid "ftgenonce error"
 msgstr ""
 
-#: Opcodes/singwave.c:85
+#: Opcodes/singwave.c:86
 msgid "No table for Modulatr"
 msgstr ""
 
-#: Opcodes/singwave.c:127
+#: Opcodes/singwave.c:128
 msgid "No table for Singwave"
 msgstr ""
 
-#: Opcodes/singwave.c:207
+#: Opcodes/singwave.c:208
 #, c-format
 msgid "SingWave: rate=%f sweepRate=%f mytime=%f\n"
 msgstr ""
 
-#: Opcodes/singwave.c:273
+#: Opcodes/singwave.c:280
 #, c-format
 msgid "Found Formant: %s (number %i)\n"
 msgstr ""
 
-#: Opcodes/singwave.c:395
+#: Opcodes/singwave.c:397
 #, c-format
 msgid "Setting Phoneme: %d %f\n"
 msgstr ""
@@ -8144,15 +8035,15 @@ msgstr ""
 msgid "pvsarp: not initialised\n"
 msgstr ""
 
-#: Opcodes/sndloop.c:995 Opcodes/sndloop.c:1092
+#: Opcodes/sndloop.c:995 Opcodes/sndloop.c:1091
 msgid "signal format must be amp-phase or amp-freq.\n"
 msgstr ""
 
-#: Opcodes/sndloop.c:1072
+#: Opcodes/sndloop.c:1071
 msgid "pvsvoc: not initialised\n"
 msgstr ""
 
-#: Opcodes/sndloop.c:1123
+#: Opcodes/sndloop.c:1122
 msgid "pvsmorph: not initialised\n"
 msgstr ""
 
@@ -8172,25 +8063,27 @@ msgstr ""
 msgid "sndwarpst: not initialised"
 msgstr ""
 
-#: Opcodes/sockrecv.c:123 Opcodes/sockrecv.c:213 Opcodes/sockrecv.c:300
-#: Opcodes/socksend.c:75 Opcodes/socksend.c:133 Opcodes/socksend.c:190
-msgid "creating socket"
+#: Opcodes/sockrecv.c:117 Opcodes/sockrecv.c:215 Opcodes/sockrecv.c:314
+#: Opcodes/socksend.c:73 Opcodes/socksend.c:157 Opcodes/socksend.c:252
+#, c-format
+msgid "Winsock2 failed to start: %d"
 msgstr ""
 
-#: Opcodes/sockrecv.c:322
-msgid "connect failed"
+#: Opcodes/sockrecv.c:131 Opcodes/sockrecv.c:227 Opcodes/sockrecv.c:320
+#: Opcodes/socksend.c:86 Opcodes/socksend.c:171 Opcodes/socksend.c:259
+msgid "creating socket"
 msgstr ""
 
-#: Opcodes/sockrecv.c:335
-msgid "read from socket failed"
+#: Opcodes/sockrecv.c:347
+#, c-format
+msgid "connect failed (%d)"
 msgstr ""
 
-#: Opcodes/socksend.c:67 Opcodes/socksend.c:125
-#, c-format
-msgid "The buffersize must be <= %d samples to fit in a udp-packet."
+#: Opcodes/sockrecv.c:360
+msgid "read from socket failed"
 msgstr ""
 
-#: Opcodes/socksend.c:107 Opcodes/socksend.c:169
+#: Opcodes/socksend.c:126 Opcodes/socksend.c:215
 msgid "sendto failed"
 msgstr ""
 
@@ -8210,199 +8103,199 @@ msgstr ""
 msgid "spat3di: not initialised"
 msgstr ""
 
-#: Opcodes/spectra.c:82
+#: Opcodes/spectra.c:84
 msgid "illegal Q value"
 msgstr ""
 
-#: Opcodes/spectra.c:84
+#: Opcodes/spectra.c:86
 msgid "unknown dbout code"
 msgstr ""
 
-#: Opcodes/spectra.c:104
+#: Opcodes/spectra.c:106
 #, c-format
 msgid "spectrum: %s window, %s out, making tables ...\n"
 msgstr ""
 
-#: Opcodes/spectra.c:123
+#: Opcodes/spectra.c:125
 #, c-format
 msgid ""
 "\thigh cps %7.1f\n"
 "\t low cps %7.1f\n"
 msgstr ""
 
-#: Opcodes/spectra.c:138
+#: Opcodes/spectra.c:140
 #, c-format
 msgid "\tQ %4.1f uses a %d sample window each octdown\n"
 msgstr ""
 
-#: Opcodes/spectra.c:169
+#: Opcodes/spectra.c:171
 msgid "spectrum windowed sines:"
 msgstr ""
 
-#: Opcodes/spectra.c:187
+#: Opcodes/spectra.c:189
 #, c-format
 msgid "\t%d oct analysis window delay = %ld samples (%d msecs)\n"
 msgstr ""
 
-#: Opcodes/spectra.c:195
+#: Opcodes/spectra.c:197
 msgid "octdown buffers:"
 msgstr ""
 
-#: Opcodes/spectra.c:513 Opcodes/spectra.c:553
+#: Opcodes/spectra.c:515 Opcodes/spectra.c:555
 msgid "specdisp: not initialised"
 msgstr ""
 
-#: Opcodes/spectra.c:523
+#: Opcodes/spectra.c:525
 #, c-format
 msgid "instr %d %s, dft (%s), %ld octaves (%d - %d Hz):"
 msgstr ""
 
-#: Opcodes/spectra.c:530
+#: Opcodes/spectra.c:532
 #, c-format
 msgid "instr %d %s, dft (%s), %ld octaves (%3.1f - %3.1f Hz):"
 msgstr ""
 
-#: Opcodes/spectra.c:611
+#: Opcodes/spectra.c:613
 msgid "per oct rolloff too steep"
 msgstr ""
 
-#: Opcodes/spectra.c:632
+#: Opcodes/spectra.c:634
 #, c-format
 msgid "specptrk: %d freqs, %d%s ptls at "
 msgstr ""
 
-#: Opcodes/spectra.c:633
+#: Opcodes/spectra.c:635
 msgid " odd"
 msgstr ""
 
-#: Opcodes/spectra.c:637
+#: Opcodes/spectra.c:639
 msgid ""
 "\n"
 "\t\trolloff vals:"
 msgstr ""
 
-#: Opcodes/spectra.c:660
+#: Opcodes/spectra.c:662
 #, c-format
 msgid ""
 "\n"
 "\tdbthresh %4.1f: X-corr %s threshon %4.1f, threshoff %4.1f\n"
 msgstr ""
 
-#: Opcodes/spectra.c:817
+#: Opcodes/spectra.c:819
 msgid "specptrk: not initialised"
 msgstr ""
 
-#: Opcodes/spectra.c:849
+#: Opcodes/spectra.c:851
 msgid "specsum: not initialised"
 msgstr ""
 
-#: Opcodes/spectra.c:860
+#: Opcodes/spectra.c:862
 msgid "inputs have different sizes"
 msgstr ""
 
-#: Opcodes/spectra.c:863
+#: Opcodes/spectra.c:865
 msgid "inputs have diff. time periods"
 msgstr ""
 
-#: Opcodes/spectra.c:867
+#: Opcodes/spectra.c:869
 msgid "inputs have different freq resolution"
 msgstr ""
 
-#: Opcodes/spectra.c:870
+#: Opcodes/spectra.c:872
 msgid "inputs have different amptypes"
 msgstr ""
 
-#: Opcodes/spectra.c:902
+#: Opcodes/spectra.c:904
 msgid "specaddm: not initialised"
 msgstr ""
 
-#: Opcodes/spectra.c:926
+#: Opcodes/spectra.c:928
 msgid "specdiff: local buffers not initialised"
 msgstr ""
 
-#: Opcodes/spectra.c:964
+#: Opcodes/spectra.c:966
 msgid "specdiff: not initialised"
 msgstr ""
 
-#: Opcodes/spectra.c:986
+#: Opcodes/spectra.c:988
 msgid "specscal: local buffer not initialised"
 msgstr ""
 
-#: Opcodes/spectra.c:991
+#: Opcodes/spectra.c:993
 msgid "missing fscale table"
 msgstr ""
 
-#: Opcodes/spectra.c:1057
+#: Opcodes/spectra.c:1059
 msgid "specscal: not initialised"
 msgstr ""
 
-#: Opcodes/spectra.c:1081
+#: Opcodes/spectra.c:1083
 msgid "spechist: local buffers not intiialised"
 msgstr ""
 
-#: Opcodes/spectra.c:1113
+#: Opcodes/spectra.c:1115
 msgid "spechist: not initialised"
 msgstr ""
 
-#: Opcodes/spectra.c:1134
+#: Opcodes/spectra.c:1136
 msgid "specfilt: local buffers not initialised"
 msgstr ""
 
-#: Opcodes/spectra.c:1142
+#: Opcodes/spectra.c:1144
 msgid "missing htim ftable"
 msgstr ""
 
-#: Opcodes/spectra.c:1165
+#: Opcodes/spectra.c:1167
 msgid "htim ftable must be all-positive"
 msgstr ""
 
-#: Opcodes/spectra.c:1169
+#: Opcodes/spectra.c:1171
 #, c-format
 msgid "coef range: %6.3f - %6.3f\n"
 msgstr ""
 
-#: Opcodes/spectra.c:1201
+#: Opcodes/spectra.c:1203
 msgid "specfilt: not initialised"
 msgstr ""
 
-#: Opcodes/stackops.c:80
+#: Opcodes/stackops.c:81
 msgid "fsig = : source signal is not initialised"
 msgstr ""
 
-#: Opcodes/stackops.c:126
+#: Opcodes/stackops.c:125
 msgid "stack overflow"
 msgstr ""
 
-#: Opcodes/stackops.c:134
+#: Opcodes/stackops.c:131
 msgid "cannot pop from empty stack"
 msgstr ""
 
-#: Opcodes/stackops.c:142
+#: Opcodes/stackops.c:137
 msgid "argument number or type mismatch"
 msgstr ""
 
-#: Opcodes/stackops.c:150
+#: Opcodes/stackops.c:143
 msgid "string argument is too long"
 msgstr ""
 
-#: Opcodes/stackops.c:167
+#: Opcodes/stackops.c:160
 msgid "Error allocating argument stack"
 msgstr ""
 
-#: Opcodes/stackops.c:207 Top/argdecode.c:1212 util/envext.c:99
+#: Opcodes/stackops.c:200 Top/argdecode.c:1212 util/envext.c:99
 #: util/scale.c:248
 msgid "too many arguments"
 msgstr ""
 
-#: Opcodes/stackops.c:286
+#: Opcodes/stackops.c:279
 msgid "the stack is already allocated"
 msgstr ""
 
-#: Opcodes/stackops.c:637
+#: Opcodes/stackops.c:630
 msgid "number of arguments != nchnls"
 msgstr ""
 
-#: Opcodes/stdopcod.c:36
+#: Opcodes/stdopcod.c:37
 msgid "stdopcod.c: error: globals already allocated"
 msgstr ""
 
@@ -8417,36 +8310,45 @@ msgstr ""
 msgid "RAWWAVE_PATH: %s\n"
 msgstr ""
 
-#: Opcodes/syncgrain.c:175 Opcodes/syncgrain.c:338 Opcodes/syncgrain.c:683
+#: Opcodes/syncgrain.c:176 Opcodes/syncgrain.c:339 Opcodes/syncgrain.c:684
 msgid "grain size smaller than 1 sample\n"
 msgstr ""
 
-#: Opcodes/syncgrain.c:387
+#: Opcodes/syncgrain.c:388
 msgid "diskgrain: invalid number of channels"
 msgstr ""
 
-#: Opcodes/syncgrain.c:419
+#: Opcodes/syncgrain.c:420
 msgid "diskgrain: could not open file\n"
 msgstr ""
 
-#: Opcodes/syncgrain.c:423
+#: Opcodes/syncgrain.c:424
 msgid ""
 "diskgrain: soundfile channel numbers do not match the number of outputs \n"
 msgstr ""
 
-#: Opcodes/syncgrain.c:435
+#: Opcodes/syncgrain.c:436
 msgid "diskgrain: could not read file \n"
 msgstr ""
 
-#: Opcodes/tabsum.c:39
+#: Opcodes/tabsum.c:40
 msgid "tabsum: No table"
 msgstr ""
 
-#: Opcodes/tabsum.c:54
+#: Opcodes/tabsum.c:55
 #, fuzzy
 msgid "tabsum: Not initialised"
 msgstr "%s: не выступлено с иничиативой"
 
+#: Opcodes/tabvars.c:201 Opcodes/tabvars.c:218
+#, fuzzy
+msgid "t-var not initialised"
+msgstr "%s: не выступлено с иничиативой"
+
+#: Opcodes/tabvars.c:203 Opcodes/tabvars.c:220
+msgid "No table for copy2ftab"
+msgstr ""
+
 #: Opcodes/ugens7.c:46 Opcodes/ugensa.c:49
 msgid "illegal value for iolaps"
 msgstr ""
@@ -8592,17 +8494,17 @@ msgstr ""
 msgid "table in iftfn for ftmorf does not exist"
 msgstr ""
 
-#: Opcodes/ugnorman.c:120
+#: Opcodes/ugnorman.c:121
 #, c-format
 msgid "%s: Ats file %s not read (does it exist?)"
 msgstr ""
 
-#: Opcodes/ugnorman.c:131
+#: Opcodes/ugnorman.c:132
 #, c-format
 msgid "%s: either %s is not an ATS file or the byte endianness is wrong"
 msgstr ""
 
-#: Opcodes/ugnorman.c:139
+#: Opcodes/ugnorman.c:140
 #, c-format
 msgid ""
 "%s: %s is byte-swapped\n"
@@ -8610,125 +8512,125 @@ msgid ""
 "\twill not result in different audio, but they may slow down processing."
 msgstr ""
 
-#: Opcodes/ugnorman.c:175
+#: Opcodes/ugnorman.c:176
 msgid ""
 "ATSINFO: location is out of bounds: 0-8 are the only possible selections"
 msgstr ""
 
-#: Opcodes/ugnorman.c:265
+#: Opcodes/ugnorman.c:266
 #, c-format
 msgid "ATSREAD: partial %i out of range, max allowed is %i"
 msgstr ""
 
-#: Opcodes/ugnorman.c:291
+#: Opcodes/ugnorman.c:292
 msgid "Type not implemented"
 msgstr ""
 
-#: Opcodes/ugnorman.c:310
+#: Opcodes/ugnorman.c:311
 msgid "ATSREAD: only positive time pointer values allowed, setting to zero\n"
 msgstr ""
 
-#: Opcodes/ugnorman.c:319
+#: Opcodes/ugnorman.c:320
 msgid "ATSREAD: timepointer out of range, truncated to last frame\n"
 msgstr ""
 
-#: Opcodes/ugnorman.c:332
+#: Opcodes/ugnorman.c:333
 msgid "ATSREAD: not initialised"
 msgstr ""
 
-#: Opcodes/ugnorman.c:394
+#: Opcodes/ugnorman.c:395
 #, c-format
 msgid "ATSREADNZ: band %i out of range, 1-25 are the valid band values"
 msgstr ""
 
-#: Opcodes/ugnorman.c:412
+#: Opcodes/ugnorman.c:413
 msgid "ATSREADNZ: Type either not implemented or does not contain noise"
 msgstr ""
 
-#: Opcodes/ugnorman.c:431
+#: Opcodes/ugnorman.c:432
 msgid "ATSREADNZ: only positive time pointer values allowed, setting to zero\n"
 msgstr ""
 
-#: Opcodes/ugnorman.c:440
+#: Opcodes/ugnorman.c:441
 msgid "ATSREADNZ: timepointer out of range, truncated to last frame\n"
 msgstr ""
 
-#: Opcodes/ugnorman.c:449
+#: Opcodes/ugnorman.c:450
 msgid "ATSREADNZ: not initialised"
 msgstr ""
 
-#: Opcodes/ugnorman.c:467
+#: Opcodes/ugnorman.c:468
 msgid "ATSADD: Function table number for synthesis waveform not valid"
 msgstr ""
 
-#: Opcodes/ugnorman.c:475
+#: Opcodes/ugnorman.c:476
 msgid "ATSADD: Gate Function table number not valid"
 msgstr ""
 
-#: Opcodes/ugnorman.c:521
+#: Opcodes/ugnorman.c:522
 #, c-format
 msgid "ATSADD: Partial(s) out of range, max partial allowed is %i"
 msgstr ""
 
-#: Opcodes/ugnorman.c:555
+#: Opcodes/ugnorman.c:556
 msgid "ATSADD: Type not implemented"
 msgstr ""
 
-#: Opcodes/ugnorman.c:585
+#: Opcodes/ugnorman.c:586
 msgid ""
 "ATSADD: only positive time pointer values are allowed, setting to zero\n"
 msgstr ""
 
-#: Opcodes/ugnorman.c:594
+#: Opcodes/ugnorman.c:595
 msgid "ATSADD: time pointer out of range, truncating to last frame\n"
 msgstr ""
 
-#: Opcodes/ugnorman.c:638
+#: Opcodes/ugnorman.c:639
 msgid "ATSADD: not initialised"
 msgstr ""
 
-#: Opcodes/ugnorman.c:842
+#: Opcodes/ugnorman.c:845
 msgid "ATSADDNZ: This file type contains no noise"
 msgstr ""
 
-#: Opcodes/ugnorman.c:846
+#: Opcodes/ugnorman.c:849
 msgid "ATSADDNZ: This file type has not been implemented in this code yet."
 msgstr ""
 
-#: Opcodes/ugnorman.c:869
+#: Opcodes/ugnorman.c:872
 msgid "ATSADDNZ: Band(s) out of range, max band allowed is 25"
 msgstr ""
 
-#: Opcodes/ugnorman.c:886
+#: Opcodes/ugnorman.c:889
 msgid ""
 "ATSADDNZ: Type either has no noise or is not implemented (only type 3 and 4 "
 "work now)"
 msgstr ""
 
-#: Opcodes/ugnorman.c:1002
+#: Opcodes/ugnorman.c:1005
 msgid ""
 "ATSADDNZ: only positive time pointer values are allowed, setting to zero\n"
 msgstr ""
 
-#: Opcodes/ugnorman.c:1011
+#: Opcodes/ugnorman.c:1014
 msgid "ATSADDNZ: time pointer out of range, truncating to last frame\n"
 msgstr ""
 
-#: Opcodes/ugnorman.c:1165
+#: Opcodes/ugnorman.c:1168
 #, c-format
 msgid "ATSSINNOI: Partial(s) out of range, max partial allowed is %i"
 msgstr ""
 
-#: Opcodes/ugnorman.c:1202
+#: Opcodes/ugnorman.c:1205
 msgid "ATSSINNOI: Type not implemented"
 msgstr ""
 
-#: Opcodes/ugnorman.c:1315
+#: Opcodes/ugnorman.c:1316
 msgid ""
 "ATSSINNOI: only positive time pointer values are allowed, setting to zero\n"
 msgstr ""
 
-#: Opcodes/ugnorman.c:1324
+#: Opcodes/ugnorman.c:1325
 msgid "ATSSINNOI: time pointer out of range, truncating to last frame\n"
 msgstr ""
 
@@ -8801,44 +8703,44 @@ msgstr ""
 msgid "ATSCROSS: you must have an atsbufread before an atsinterpread"
 msgstr ""
 
-#: Opcodes/ugsc.c:394
+#: Opcodes/ugsc.c:390
 msgid "Phaser mode must be either 1 or 2"
 msgstr ""
 
-#: Opcodes/vbap.c:57
+#: Opcodes/vbap.c:59
 msgid "vbap: error allocating loudspeaker table"
 msgstr ""
 
-#: Opcodes/vbap.c:264
+#: Opcodes/vbap.c:266
 msgid ""
 "Number of loudspeakers is zero\n"
 "Exiting"
 msgstr ""
 
-#: Opcodes/vbap.c:573
+#: Opcodes/vbap.c:575
 msgid "Error in loudspeaker dimension."
 msgstr ""
 
-#: Opcodes/vbap.c:596
+#: Opcodes/vbap.c:598
 msgid "Too few loudspeakers"
 msgstr ""
 
-#: Opcodes/vbap.c:622
+#: Opcodes/vbap.c:624
 msgid "Not valid 3-D configuration"
 msgstr ""
 
-#: Opcodes/vbap.c:668 Opcodes/vbap.c:767
+#: Opcodes/vbap.c:670 Opcodes/vbap.c:769
 msgid ""
 "\n"
 "Configured loudspeakers\n"
 msgstr ""
 
-#: Opcodes/vbap.c:670
+#: Opcodes/vbap.c:672
 #, c-format
 msgid "Triplet %d Loudspeakers: "
 msgstr ""
 
-#: Opcodes/vbap.c:769
+#: Opcodes/vbap.c:771
 #, c-format
 msgid "Pair %d Loudspeakers: "
 msgstr ""
@@ -8920,41 +8822,33 @@ msgstr ""
 msgid "Have to have at least %d directions in vbapzmove"
 msgstr ""
 
-#: Opcodes/Vosim.c:49
+#: Opcodes/Vosim.c:51
 msgid "vosim: pulse table not found"
 msgstr ""
 
-#: Opcodes/Vosim.c:72
+#: Opcodes/Vosim.c:74
 msgid "vosim: zero kfund. 'Infinite' length event generated."
 msgstr ""
 
-#: Opcodes/Vosim.c:80
+#: Opcodes/Vosim.c:82
 #, c-format
 msgid "vosim: kfund (%f) > sr. Generating ksmps silence."
 msgstr ""
 
-#: Opcodes/Vosim.c:158
+#: Opcodes/Vosim.c:160
 msgid "vosim: not initialised"
 msgstr ""
 
-#: Opcodes/vpvoc.c:118
-msgid "tableseg: not initialised"
-msgstr ""
-
-#: Opcodes/vpvoc.c:146
-msgid "tablexseg: not initialised"
-msgstr ""
-
-#: Opcodes/vpvoc.c:172
+#: Opcodes/vpvoc.c:173
 #, c-format
 msgid "vpvoc: Could not find ifnmagctrl table %f"
 msgstr ""
 
-#: Opcodes/vpvoc.c:178
+#: Opcodes/vpvoc.c:179
 msgid "vpvoc: associated tableseg not found"
 msgstr ""
 
-#: Opcodes/vpvoc.c:194
+#: Opcodes/vpvoc.c:195
 #, c-format
 msgid "VPVOC cannot load %s"
 msgstr ""
@@ -9071,47 +8965,47 @@ msgstr ""
 msgid "-B N\tsamples per hardware sound I/O buffer"
 msgstr ""
 
-#: Top/argdecode.c:75 util/mixer.c:95 util/scale.c:46 util/srconv.c:739
+#: Top/argdecode.c:75 util/mixer.c:95 util/scale.c:46 util/srconv.c:738
 msgid "-A\tcreate an AIFF format output soundfile"
 msgstr ""
 
-#: Top/argdecode.c:76 util/mixer.c:96 util/scale.c:47 util/srconv.c:741
+#: Top/argdecode.c:76 util/mixer.c:96 util/scale.c:47 util/srconv.c:740
 msgid "-W\tcreate a WAV format output soundfile"
 msgstr ""
 
-#: Top/argdecode.c:77 util/srconv.c:740
+#: Top/argdecode.c:77 util/srconv.c:739
 msgid "-J\tcreate an IRCAM format output soundfile"
 msgstr ""
 
-#: Top/argdecode.c:78 util/mixer.c:97 util/scale.c:48 util/srconv.c:742
+#: Top/argdecode.c:78 util/mixer.c:97 util/scale.c:48 util/srconv.c:741
 msgid "-h\tno header on output soundfile"
 msgstr ""
 
-#: Top/argdecode.c:79 util/mixer.c:99 util/scale.c:49 util/srconv.c:743
+#: Top/argdecode.c:79 util/mixer.c:99 util/scale.c:49 util/srconv.c:742
 msgid "-c\t8-bit signed_char sound samples"
 msgstr ""
 
-#: Top/argdecode.c:81 util/mixer.c:101 util/scale.c:50 util/srconv.c:744
+#: Top/argdecode.c:81 util/mixer.c:101 util/scale.c:50 util/srconv.c:743
 msgid "-a\talaw sound samples"
 msgstr ""
 
-#: Top/argdecode.c:83 util/mixer.c:98 util/mixer.c:100 util/srconv.c:745
+#: Top/argdecode.c:83 util/mixer.c:98 util/mixer.c:100 util/srconv.c:744
 msgid "-8\t8-bit unsigned_char sound samples"
 msgstr ""
 
-#: Top/argdecode.c:84 util/mixer.c:102 util/scale.c:51 util/srconv.c:746
+#: Top/argdecode.c:84 util/mixer.c:102 util/scale.c:51 util/srconv.c:745
 msgid "-u\tulaw sound samples"
 msgstr ""
 
-#: Top/argdecode.c:85 util/mixer.c:103 util/scale.c:52 util/srconv.c:747
+#: Top/argdecode.c:85 util/mixer.c:103 util/scale.c:52 util/srconv.c:746
 msgid "-s\tshort_int sound samples"
 msgstr ""
 
-#: Top/argdecode.c:86 util/mixer.c:104 util/scale.c:53 util/srconv.c:748
+#: Top/argdecode.c:86 util/mixer.c:104 util/scale.c:53 util/srconv.c:747
 msgid "-l\tlong_int sound samples"
 msgstr ""
 
-#: Top/argdecode.c:87 util/mixer.c:105 util/scale.c:54 util/srconv.c:749
+#: Top/argdecode.c:87 util/mixer.c:105 util/scale.c:54 util/srconv.c:748
 msgid "-f\tfloat sound samples"
 msgstr ""
 
@@ -9119,7 +9013,7 @@ msgstr ""
 msgid "-3\t24bit sound samples"
 msgstr ""
 
-#: Top/argdecode.c:89 util/srconv.c:750
+#: Top/argdecode.c:89 util/srconv.c:749
 msgid "-r N\torchestra srate override"
 msgstr ""
 
@@ -9127,7 +9021,7 @@ msgstr ""
 msgid "-k N\torchestra krate override"
 msgstr ""
 
-#: Top/argdecode.c:91 util/srconv.c:751
+#: Top/argdecode.c:91 util/srconv.c:750
 msgid "-K\tDo not generate PEAK chunks"
 msgstr ""
 
@@ -9187,7 +9081,7 @@ msgstr ""
 msgid "-F fnam\tread MIDIfile event stream from file 'fnam'"
 msgstr ""
 
-#: Top/argdecode.c:107 util/mixer.c:106 util/scale.c:59 util/srconv.c:752
+#: Top/argdecode.c:107 util/mixer.c:106 util/scale.c:59 util/srconv.c:751
 msgid "-R\tcontinually rewrite header while writing soundfile (WAV/AIFF)"
 msgstr ""
 
@@ -9195,7 +9089,7 @@ msgstr ""
 msgid "-H#\tprint heartbeat style 1, 2 or 3 at each soundfile write"
 msgstr ""
 
-#: Top/argdecode.c:109 util/mixer.c:108 util/scale.c:61 util/srconv.c:754
+#: Top/argdecode.c:109 util/mixer.c:108 util/scale.c:61 util/srconv.c:753
 msgid "-N\tnotify (ring the bell) when score or miditrack is done"
 msgstr ""
 
@@ -9681,16 +9575,16 @@ msgid "-M: stdin not supported on this platform"
 msgstr ""
 
 #: Top/argdecode.c:668 Top/argdecode.c:959 util/envext.c:84 util/mixer.c:205
-#: util/scale.c:173 util/srconv.c:248 util/xtrct.c:116
+#: util/scale.c:173 util/srconv.c:247 util/xtrct.c:116
 msgid "no outfilename"
 msgstr ""
 
-#: Top/argdecode.c:671 Top/argdecode.c:963 util/scale.c:177 util/srconv.c:252
+#: Top/argdecode.c:671 Top/argdecode.c:963 util/scale.c:177 util/srconv.c:251
 #: util/xtrct.c:120
 msgid "-o cannot be stdin"
 msgstr ""
 
-#: Top/argdecode.c:675 Top/argdecode.c:967 util/scale.c:180 util/srconv.c:257
+#: Top/argdecode.c:675 Top/argdecode.c:967 util/scale.c:180 util/srconv.c:256
 #: util/xtrct.c:123
 msgid "stdout audio not supported"
 msgstr ""
@@ -9810,164 +9704,164 @@ msgstr ""
 msgid "cscoreFileGetCurrent: no fp current"
 msgstr ""
 
-#: Top/csmodule.c:192
+#: Top/csmodule.c:199
 #, c-format
 msgid "not loading '%s' (uses incompatible floating point type)"
 msgstr ""
 
-#: Top/csmodule.c:201
+#: Top/csmodule.c:209
 #, c-format
 msgid ""
 "not loading '%s' (incompatible with this version of Csound (%d.%d/%d.%d)"
 msgstr ""
 
-#: Top/csmodule.c:244
+#: Top/csmodule.c:252
 #, c-format
 msgid "could not open library '%s' (%s)"
 msgstr ""
 
-#: Top/csmodule.c:247
+#: Top/csmodule.c:255
 #, c-format
 msgid "could not open library '%s' (%d)"
 msgstr ""
 
-#: Top/csmodule.c:303
+#: Top/csmodule.c:311
 #, c-format
 msgid "'%s' is not a Csound plugin library"
 msgstr ""
 
-#: Top/csmodule.c:314
+#: Top/csmodule.c:322
 msgid "csoundLoadExternal(): memory allocation failure"
 msgstr ""
 
-#: Top/csmodule.c:328 Top/csmodule.c:336
+#: Top/csmodule.c:336 Top/csmodule.c:344
 #, c-format
 msgid "Error in pre-initialisation function of module '%s'"
 msgstr ""
 
-#: Top/csmodule.c:599 Top/csmodule.c:605 Top/csmodule.c:616 Top/csmodule.c:623
-#: Top/csmodule.c:629 Top/csmodule.c:637
+#: Top/csmodule.c:608 Top/csmodule.c:614 Top/csmodule.c:625 Top/csmodule.c:632
+#: Top/csmodule.c:638 Top/csmodule.c:646
 msgid "Error opening plugin directory\n"
 msgstr ""
 
-#: Top/csmodule.c:687
+#: Top/csmodule.c:696
 #, c-format
 msgid "Error opening plugin directory '%s': %s"
 msgstr ""
 
-#: Top/csmodule.c:722
+#: Top/csmodule.c:731
 #, c-format
 msgid "path name too long, skipping '%s'"
 msgstr ""
 
-#: Top/csmodule.c:728
+#: Top/csmodule.c:737
 #, c-format
 msgid "Library %s omitted\n"
 msgstr ""
 
-#: Top/csmodule.c:764
+#: Top/csmodule.c:773
 msgid "Loading command-line libraries:\n"
 msgstr ""
 
-#: Top/csmodule.c:787
+#: Top/csmodule.c:796
 #, c-format
 msgid " *** error loading '%s'"
 msgstr ""
 
-#: Top/csmodule.c:810
+#: Top/csmodule.c:819
 #, c-format
 msgid "Error starting module '%s'"
 msgstr ""
 
-#: Top/csmodule.c:907
+#: Top/csmodule.c:918
 #, c-format
 msgid "Error de-initialising module '%s'"
 msgstr ""
 
-#: Top/csound.c:1606 Top/csound.c:1626
+#: Top/csound.c:1636 Top/csound.c:1656
 msgid "Early return from csoundPerformKsmps().\n"
 msgstr ""
 
-#: Top/csound.c:1612
+#: Top/csound.c:1642
 msgid "Score finished in csoundPerformKsmps().\n"
 msgstr ""
 
-#: Top/csound.c:1645
+#: Top/csound.c:1675
 msgid "Early return from csoundPerformBuffer().\n"
 msgstr ""
 
-#: Top/csound.c:1670
+#: Top/csound.c:1700
 msgid "Early return from csoundPerform().\n"
 msgstr ""
 
-#: Top/csound.c:1677
+#: Top/csound.c:1707
 msgid "Score finished in csoundPerform().\n"
 msgstr ""
 
-#: Top/csound.c:1697
+#: Top/csound.c:1727
 msgid "csoundPerform(): stopped.\n"
 msgstr ""
 
-#: Top/csound.c:1968
+#: Top/csound.c:1998
 msgid "WARNING: "
 msgstr "ПРЕДУПРЕЖДЕНИЕ:"
 
-#: Top/csound.c:2089
+#: Top/csound.c:2119
 msgid "rtdummy: failed to allocate globals"
 msgstr ""
 
-#: Top/csound.c:2090
+#: Top/csound.c:2120
 msgid "rtaudio: dummy module enabled\n"
 msgstr ""
 
-#: Top/csound.c:2119 Top/csound.c:2155
+#: Top/csound.c:2149 Top/csound.c:2185
 msgid " *** error: rtaudio module set to empty string"
 msgstr ""
 
-#: Top/csound.c:2123 Top/csound.c:2159
+#: Top/csound.c:2153 Top/csound.c:2189
 #, c-format
 msgid " *** error: unknown rtaudio module: '%s'"
 msgstr ""
 
-#: Top/csound.c:2241
+#: Top/csound.c:2271
 msgid "WARNING: real time midi input disabled, using dummy functions\n"
 msgstr ""
 
-#: Top/csound.c:2246 Top/csound.c:2280
+#: Top/csound.c:2276 Top/csound.c:2310
 msgid "error: -+rtmidi set to empty string"
 msgstr ""
 
-#: Top/csound.c:2249 Top/csound.c:2283
+#: Top/csound.c:2279 Top/csound.c:2313
 #, c-format
 msgid "error: -+rtmidi='%s': unknown module"
 msgstr ""
 
-#: Top/csound.c:2275
+#: Top/csound.c:2305
 msgid "WARNING: real time midi output disabled, using dummy functions\n"
 msgstr ""
 
-#: Top/csound.c:2297
+#: Top/csound.c:2327
 msgid "Unknown MIDI error"
 msgstr ""
 
-#: Top/csound.c:2415
+#: Top/csound.c:2445
 msgid "xyin not supported. use invalue opcode instead."
 msgstr ""
 
-#: Top/csound.c:2522
+#: Top/csound.c:2552
 msgid "Failed to allocate new opcode entry."
 msgstr ""
 
-#: Top/csound.c:2545
+#: Top/csound.c:2575
 #, c-format
 msgid "Failed to allocate opcode entry for %s."
 msgstr ""
 
-#: Top/csound.c:2876
+#: Top/csound.c:2906
 msgid "Cannot open /proc/cpuinfo. Support for RDTSC is not available.\n"
 msgstr ""
 
-#: Top/csound.c:2927
+#: Top/csound.c:2957
 msgid "No valid CPU frequency entry was found in /proc/cpuinfo.\n"
 msgstr ""
 
@@ -9975,25 +9869,25 @@ msgstr ""
 msgid "Error allocating opcode list"
 msgstr ""
 
-#: Top/main.c:161
+#: Top/main.c:160
 #, c-format
 msgid "WARNING: cannot open csoundrc file %s\n"
 msgstr ""
 
-#: Top/main.c:164
+#: Top/main.c:163
 #, c-format
 msgid "Reading options from $CSOUNDRC: %s \n"
 msgstr ""
 
-#: Top/main.c:173
+#: Top/main.c:172
 msgid "Reading options from $HOME/.csoundrc\n"
 msgstr ""
 
-#: Top/main.c:200
+#: Top/main.c:199
 msgid "no orchestra name"
 msgstr ""
 
-#: Top/main.c:225
+#: Top/main.c:224
 msgid "Reading CSD failed ... stopping"
 msgstr ""
 
@@ -10005,7 +9899,7 @@ msgstr ""
 msgid "error: multiple uses of stdout"
 msgstr ""
 
-#: Top/main.c:260 util/dnoise.c:268
+#: Top/main.c:260 util/dnoise.c:264
 #, c-format
 msgid "%s not a recognised SFOUTYP env setting"
 msgstr ""
@@ -10018,58 +9912,62 @@ msgstr ""
 msgid "realtime performance using dummy numeric scorefile\n"
 msgstr ""
 
-#: Top/main.c:319
+#: Top/main.c:314
 #, c-format
 msgid "orchname:  %s\n"
 msgstr ""
 
-#: Top/main.c:321
-#, c-format
-msgid "scorename: %s\n"
+#: Top/main.c:334
+msgid "Stopping on parser failure\n"
 msgstr ""
 
-#: Top/main.c:353
+#: Top/main.c:352
 msgid "end of orchestra compile"
 msgstr ""
 
-#: Top/main.c:360
+#: Top/main.c:359
 #, c-format
 msgid "using previous %s\n"
 msgstr ""
 
-#: Top/main.c:373
+#: Top/main.c:369
 #, c-format
 msgid "cannot open scorefile %s"
 msgstr ""
 
-#: Top/main.c:378 Top/main.c:399
-#, c-format
-msgid "cannot open %s for writing"
+#: Top/main.c:371
+msgid "sorting score ...\n"
 msgstr ""
 
 #: Top/main.c:381
-msgid "sorting score ...\n"
+#, c-format
+msgid "cannot extract %s, name conflict"
+msgstr ""
+
+#: Top/main.c:384
+#, c-format
+msgid "cannot open extract file %s"
 msgstr ""
 
 #: Top/main.c:388
 #, c-format
-msgid "cannot extract %s, name conflict"
+msgid "cannot reopen %s"
 msgstr ""
 
-#: Top/main.c:391
+#: Top/main.c:392
 #, c-format
-msgid "cannot open extract file %s"
+msgid "cannot open %s for writing"
 msgstr ""
 
-#: Top/main.c:401
+#: Top/main.c:394
 msgid "  ... extracting ...\n"
 msgstr ""
 
-#: Top/main.c:414
+#: Top/main.c:405
 msgid "end of score sort"
 msgstr ""
 
-#: Top/main.c:416
+#: Top/main.c:407
 msgid "Syntax check completed.\n"
 msgstr ""
 
@@ -10134,163 +10032,158 @@ msgstr ""
 msgid " *** error setting option '%s' to '%s': %s\n"
 msgstr ""
 
-#: Top/one_file.c:105 Top/one_file.c:113
+#: Top/one_file.c:110 Top/one_file.c:118
 msgid " *** cannot create temporary file"
 msgstr ""
 
-#: Top/one_file.c:198
+#: Top/one_file.c:203
 #, c-format
 msgid "Removing temporary file %s ...\n"
 msgstr ""
 
-#: Top/one_file.c:202
+#: Top/one_file.c:207
 #, c-format
 msgid "WARNING: could not remove %s\n"
 msgstr ""
 
-#: Top/one_file.c:268 Top/one_file.c:296
+#: Top/one_file.c:274 Top/one_file.c:302
 #, c-format
 msgid "More than %d arguments in <CsOptions>"
 msgstr ""
 
-#: Top/one_file.c:313
+#: Top/one_file.c:319
 #, c-format
 msgid "Invalid arguments in <CsOptions>: %s"
 msgstr ""
 
-#: Top/one_file.c:316
+#: Top/one_file.c:322
 #, c-format
 msgid "Invalid arguments in .csoundrc or -@ file: %s"
 msgstr ""
 
-#: Top/one_file.c:322 Top/one_file.c:790
+#: Top/one_file.c:328 Top/one_file.c:744
 msgid "Missing end tag </CsOptions>"
 msgstr ""
 
-#: Top/one_file.c:340 Top/one_file.c:372 Top/one_file.c:420
-#, c-format
-msgid "Creating %s (%p)\n"
-msgstr ""
-
-#: Top/one_file.c:343
-#, c-format
-msgid "Failed to create %s"
-msgstr ""
-
-#: Top/one_file.c:356
+#: Top/one_file.c:354
 msgid "Missing end tag </CsInstruments>"
 msgstr ""
 
-#: Top/one_file.c:389 Top/one_file.c:442
+#: Top/one_file.c:376 Top/one_file.c:430
 msgid "Missing end tag </CsScore>"
 msgstr ""
 
-#: Top/one_file.c:403 Top/one_file.c:408
+#: Top/one_file.c:391 Top/one_file.c:396
 msgid "Missing program in tag <CsScore>"
 msgstr ""
 
-#: Top/one_file.c:433
+#: Top/one_file.c:408
+#, c-format
+msgid "Creating %s (%p)\n"
+msgstr ""
+
+#: Top/one_file.c:421
 msgid "External generation failed"
 msgstr ""
 
-#: Top/one_file.c:520
+#: Top/one_file.c:468
 #, c-format
 msgid "Non base64 character %c(%2x)"
 msgstr ""
 
-#: Top/one_file.c:539
+#: Top/one_file.c:487
 msgid "Truncated byte at end of base64 stream"
 msgstr ""
 
-#: Top/one_file.c:554
+#: Top/one_file.c:503
 #, c-format
 msgid "Cannot open temporary file (%s) for MIDI subfile"
 msgstr ""
 
-#: Top/one_file.c:571
+#: Top/one_file.c:520
 msgid "Missing end tag </CsMidifileB>"
 msgstr ""
 
-#: Top/one_file.c:586 Top/one_file.c:633
+#: Top/one_file.c:536 Top/one_file.c:584
 #, c-format
 msgid "File %s already exists"
 msgstr ""
 
-#: Top/one_file.c:591
+#: Top/one_file.c:541
 #, c-format
 msgid "Cannot open sample file (%s) subfile"
 msgstr ""
 
-#: Top/one_file.c:605
+#: Top/one_file.c:555
 msgid "Missing end tag </CsSampleB>"
 msgstr ""
 
-#: Top/one_file.c:638
+#: Top/one_file.c:589
 #, c-format
 msgid "Cannot open file (%s) subfile"
 msgstr ""
 
-#: Top/one_file.c:653
+#: Top/one_file.c:604
 msgid "Missing end tag </CsFileB>"
 msgstr ""
 
-#: Top/one_file.c:672
+#: Top/one_file.c:624
 #, c-format
 msgid "This CSD file requires a version of Csound before %d.%02d"
 msgstr ""
 
-#: Top/one_file.c:680 Top/one_file.c:687
+#: Top/one_file.c:632 Top/one_file.c:639
 #, c-format
 msgid "This CSD file requires a version of Csound after %d.%02d"
 msgstr ""
 
-#: Top/one_file.c:693
+#: Top/one_file.c:645
 msgid "Missing end tag </CsVersion>"
 msgstr ""
 
-#: Top/one_file.c:702
+#: Top/one_file.c:655
 msgid "**** Licence Information ****\n"
 msgstr ""
 
-#: Top/one_file.c:708
+#: Top/one_file.c:661
 msgid "**** End of Licence Information ****\n"
 msgstr ""
 
-#: Top/one_file.c:719
+#: Top/one_file.c:672
 msgid "Missing end tag </CsLicence>"
 msgstr ""
 
-#: Top/one_file.c:749
+#: Top/one_file.c:703
 #, c-format
 msgid "Failed to open csd file: %s"
 msgstr ""
 
-#: Top/one_file.c:764
+#: Top/one_file.c:718
 msgid "STARTING FILE\n"
 msgstr ""
 
-#: Top/one_file.c:780
+#: Top/one_file.c:734
 msgid "Creating options\n"
 msgstr ""
 
-#: Top/one_file.c:786
+#: Top/one_file.c:740
 msgid "Skipping <CsOptions>\n"
 msgstr ""
 
-#: Top/one_file.c:800
+#: Top/one_file.c:754
 msgid "Creating orchestra\n"
 msgstr ""
 
-#: Top/one_file.c:805
+#: Top/one_file.c:759
 msgid "Creating score\n"
 msgstr ""
 
-#: Top/one_file.c:839
+#: Top/one_file.c:793
 #, c-format
 msgid "unknown CSD tag: %s\n"
 msgstr ""
 
-#: Top/one_file.c:844
+#: Top/one_file.c:798
 msgid "Could not find <CsoundSynthesizer> tag in CSD file.\n"
 msgstr ""
 
@@ -10464,15 +10357,15 @@ msgstr ""
 #, c-format
 msgid ""
 "\n"
-" Could not open %s for writing, bye...\n"
+"Could not open %s for writing, bye...\n"
 msgstr ""
 
 #: util/atsa.c:544
 msgid "saving ATS data..."
 msgstr ""
 
-#: util/atsa.c:546 util/atsa.c:2344 util/atsa.c:2358 util/atsa.c:2368
-#: util/atsa.c:2548 util/atsa.c:2611 util/atsa.c:2699
+#: util/atsa.c:546 util/atsa.c:2354 util/atsa.c:2368 util/atsa.c:2387
+#: util/atsa.c:2567 util/atsa.c:2630 util/atsa.c:2718
 msgid "done!\n"
 msgstr ""
 
@@ -10580,181 +10473,181 @@ msgid ""
 "\n"
 msgstr ""
 
-#: util/atsa.c:1482
+#: util/atsa.c:1492
 #, c-format
 msgid "atsa: error opening residual file '%s'"
 msgstr ""
 
-#: util/atsa.c:1486
+#: util/atsa.c:1496
 #, c-format
 msgid "atsa: residual file has %d channels, must be stereo !"
 msgstr ""
 
-#: util/atsa.c:1813
+#: util/atsa.c:1823
 #, c-format
 msgid ""
 "\n"
 "ERROR: cannot open file %s for writing\n"
 msgstr ""
 
-#: util/atsa.c:1908
+#: util/atsa.c:1918
 msgid "Error: sound not optimised !"
 msgstr ""
 
-#: util/atsa.c:2003
+#: util/atsa.c:2013
 #, c-format
 msgid "atsa: cannot open input file '%s'"
 msgstr ""
 
-#: util/atsa.c:2010
+#: util/atsa.c:2020
 #, c-format
 msgid "atsa: file has %d channels, must be mono !"
 msgstr ""
 
-#: util/atsa.c:2015
+#: util/atsa.c:2025
 msgid "tracking...\n"
 msgstr ""
 
-#: util/atsa.c:2024
+#: util/atsa.c:2034
 #, c-format
 msgid "start %f out of bounds, corrected to 0.0"
 msgstr ""
 
-#: util/atsa.c:2034
+#: util/atsa.c:2044
 #, c-format
 msgid "duration %f out of bounds, limited to file duration"
 msgstr ""
 
-#: util/atsa.c:2040
+#: util/atsa.c:2050
 #, c-format
 msgid "start: %f duration: %f file dur: %f\n"
 msgstr ""
 
-#: util/atsa.c:2047
+#: util/atsa.c:2057
 #, c-format
 msgid "lowest freq. %f out of bounds, forced to default: %f"
 msgstr ""
 
-#: util/atsa.c:2057
+#: util/atsa.c:2067
 #, c-format
 msgid "highest freq. %f out of bounds, forced to default: %f"
 msgstr ""
 
-#: util/atsa.c:2064
+#: util/atsa.c:2074
 #, c-format
 msgid ""
 "freq. dev. %f out of bounds, should be > 0.0 and <= 1.0, forced to default: "
 "%f"
 msgstr ""
 
-#: util/atsa.c:2072
+#: util/atsa.c:2082
 #, c-format
 msgid ""
 "windows cycles %d out of bounds, should be between 1 and 8, forced to "
 "default: %d"
 msgstr ""
 
-#: util/atsa.c:2080
+#: util/atsa.c:2090
 #, c-format
 msgid ""
 "window type %d out of bounds, should be between 0 and 3, forced to default: "
 "%d"
 msgstr ""
 
-#: util/atsa.c:2088
+#: util/atsa.c:2098
 #, c-format
 msgid ""
 "hop size %f out of bounds, should be > 0.0 and <= 1.0, forced to default: %f"
 msgstr ""
 
-#: util/atsa.c:2096
+#: util/atsa.c:2106
 #, c-format
 msgid ""
 "lowest magnitude %f out of bounds, should be >= 0.0 and <= 1.0, forced to "
 "default: %f"
 msgstr ""
 
-#: util/atsa.c:2120
+#: util/atsa.c:2130
 #, c-format
 msgid "atsa: %d frames are not enough for analysis, need at least %d"
 msgstr ""
 
-#: util/atsa.c:2129
+#: util/atsa.c:2139
 #, c-format
 msgid "track length %d out of bounds, forced to: %d"
 msgstr ""
 
-#: util/atsa.c:2138
+#: util/atsa.c:2148
 #, c-format
 msgid "min. segment length %d out of bounds, forced to: %d"
 msgstr ""
 
-#: util/atsa.c:2147
+#: util/atsa.c:2157
 #, c-format
 msgid "min. gap length %d out of bounds, forced to: %d"
 msgstr ""
 
-#: util/atsa.c:2153
+#: util/atsa.c:2163
 #, c-format
 msgid ""
 "SMR threshold %f out of bounds, should be >= 0.0 and < %f dB SPL, forced to "
 "default: %f"
 msgstr ""
 
-#: util/atsa.c:2164
+#: util/atsa.c:2174
 #, c-format
 msgid ""
 "min. seg. SMR %f out of bounds, should be >= %f and < %f dB SPL, forced to "
 "default: %f"
 msgstr ""
 
-#: util/atsa.c:2172
+#: util/atsa.c:2182
 #, c-format
 msgid ""
 "last peak contribution %f out of bounds, should be >= 0.0 and <= 1.0, forced "
 "to default: %f"
 msgstr ""
 
-#: util/atsa.c:2180
+#: util/atsa.c:2190
 #, c-format
 msgid ""
 "SMR contribution %f out of bounds, should be >= 0.0 and <= 1.0, forced to "
 "default: %f"
 msgstr ""
 
-#: util/atsa.c:2325
+#: util/atsa.c:2335
 msgid "Initializing ATS data..."
 msgstr ""
 
-#: util/atsa.c:2355
+#: util/atsa.c:2365
 msgid "Computing residual..."
 msgstr ""
 
-#: util/atsa.c:2366
+#: util/atsa.c:2381 util/atsa.c:2384
 msgid "Analysing residual..."
 msgstr ""
 
-#: util/atsa.c:2370
+#: util/atsa.c:2389
 msgid "tracking completed.\n"
 msgstr ""
 
-#: util/atsa.c:2478
+#: util/atsa.c:2497
 msgid "Filling sound gaps..."
 msgstr ""
 
-#: util/atsa.c:2566
+#: util/atsa.c:2585
 msgid "Trimming short partials..."
 msgstr ""
 
-#: util/atsa.c:2662
+#: util/atsa.c:2681
 msgid "Computing averages..."
 msgstr ""
 
-#: util/atsa.c:2713
+#: util/atsa.c:2732
 msgid "No partials to track -- stopping\n"
 msgstr ""
 
-#: util/atsa.c:2813
+#: util/atsa.c:2832
 msgid "Soundfile analysis for ATS opcodes"
 msgstr ""
 
@@ -10786,8 +10679,8 @@ msgstr ""
 msgid "illegal number of filenames"
 msgstr ""
 
-#: util/cvanal.c:113 util/dnoise.c:456 util/lpanal.c:518 util/pvanal.c:258
-#: util/srconv.c:351
+#: util/cvanal.c:113 util/dnoise.c:445 util/lpanal.c:518 util/pvanal.c:258
+#: util/srconv.c:350
 #, c-format
 msgid "error while opening %s"
 msgstr ""
@@ -10827,256 +10720,256 @@ msgstr ""
 msgid "Soundfile analysis for convolve"
 msgstr ""
 
-#: util/dnoise.c:285
+#: util/dnoise.c:281
 msgid "-o cannot be stdin\n"
 msgstr ""
 
-#: util/dnoise.c:297
+#: util/dnoise.c:293
 msgid "-A overriding local default WAV out"
 msgstr ""
 
-#: util/dnoise.c:302
+#: util/dnoise.c:298
 msgid "-J overriding local default AIFF/WAV out"
 msgstr ""
 
-#: util/dnoise.c:309
+#: util/dnoise.c:305
 msgid "-W overriding local default AIFF out"
 msgstr ""
 
-#: util/dnoise.c:356
+#: util/dnoise.c:345
 msgid "no t argument"
 msgstr ""
 
-#: util/dnoise.c:379
+#: util/dnoise.c:368
 msgid "no n argument"
 msgstr ""
 
-#: util/dnoise.c:384
+#: util/dnoise.c:373
 msgid "no b argument"
 msgstr ""
 
-#: util/dnoise.c:392
+#: util/dnoise.c:381
 msgid "no B argument"
 msgstr ""
 
-#: util/dnoise.c:404
+#: util/dnoise.c:393
 msgid "no E argument"
 msgstr ""
 
-#: util/dnoise.c:408
+#: util/dnoise.c:397
 msgid "no N argument"
 msgstr ""
 
-#: util/dnoise.c:412
+#: util/dnoise.c:401
 msgid "no M argument"
 msgstr ""
 
-#: util/dnoise.c:416
+#: util/dnoise.c:405
 msgid "no L argument"
 msgstr ""
 
-#: util/dnoise.c:420
+#: util/dnoise.c:409
 msgid "no w argument"
 msgstr ""
 
-#: util/dnoise.c:424
+#: util/dnoise.c:413
 msgid "no D argument"
 msgstr ""
 
-#: util/dnoise.c:431 util/srconv.c:328
+#: util/dnoise.c:420 util/srconv.c:327
 #, c-format
 msgid "Looking at %c\n"
 msgstr ""
 
-#: util/dnoise.c:438 util/srconv.c:336
+#: util/dnoise.c:427 util/srconv.c:335
 #, c-format
 msgid "Infile set to %s\n"
 msgstr ""
 
-#: util/dnoise.c:441 util/srconv.c:339
+#: util/dnoise.c:430 util/srconv.c:338
 #, c-format
 msgid "End with %s\n"
 msgstr ""
 
-#: util/dnoise.c:447
+#: util/dnoise.c:436
 msgid "dnoise: no input file\n"
 msgstr ""
 
-#: util/dnoise.c:451
+#: util/dnoise.c:440
 msgid "Must have an example noise file (-i name)\n"
 msgstr ""
 
-#: util/dnoise.c:479
+#: util/dnoise.c:468
 #, c-format
 msgid "cannot open %s.\n"
 msgstr ""
 
-#: util/dnoise.c:491 util/srconv.c:461 util/srconv.c:473
+#: util/dnoise.c:480 util/srconv.c:460 util/srconv.c:472
 #, c-format
 msgid "cannot open %s."
 msgstr ""
 
-#: util/dnoise.c:510
+#: util/dnoise.c:499
 msgid "dnoise: input MUST be mono or stereo\n"
 msgstr ""
 
-#: util/dnoise.c:518
+#: util/dnoise.c:507
 msgid "dnoise: cannot open noise reference file\n"
 msgstr ""
 
-#: util/dnoise.c:523
+#: util/dnoise.c:512
 msgid "Incompatible sample rates\n"
 msgstr ""
 
-#: util/dnoise.c:542
+#: util/dnoise.c:531
 #, c-format
 msgid "dnoise: warning - N not a valid power of two; revised N = %d\n"
 msgstr ""
 
-#: util/dnoise.c:552
+#: util/dnoise.c:541
 msgid "dnoise: warning - do not specify both M and W\n"
 msgstr ""
 
-#: util/dnoise.c:562
+#: util/dnoise.c:551
 msgid "dnoise: warning - invalid W ignored\n"
 msgstr ""
 
-#: util/dnoise.c:576
+#: util/dnoise.c:565
 msgid "dnoise: warning - M is too small\n"
 msgstr ""
 
-#: util/dnoise.c:586
+#: util/dnoise.c:575
 msgid "dnoise: M too large\n"
 msgstr ""
 
-#: util/dnoise.c:592
+#: util/dnoise.c:581
 msgid "dnoise: L too large\n"
 msgstr ""
 
-#: util/dnoise.c:602
+#: util/dnoise.c:591
 #, c-format
 msgid "writing %u-byte blks of %s to %s"
 msgstr ""
 
-#: util/dnoise.c:627 util/dnoise.c:666 util/dnoise.c:721 util/dnoise.c:732
-#: util/dnoise.c:736 util/dnoise.c:743 util/dnoise.c:753 util/dnoise.c:758
-#: util/dnoise.c:762 util/dnoise.c:766 util/dnoise.c:770
+#: util/dnoise.c:616 util/dnoise.c:655 util/dnoise.c:710 util/dnoise.c:721
+#: util/dnoise.c:725 util/dnoise.c:732 util/dnoise.c:742 util/dnoise.c:747
+#: util/dnoise.c:751 util/dnoise.c:755 util/dnoise.c:759
 msgid "dnoise: insufficient memory\n"
 msgstr ""
 
-#: util/dnoise.c:779 util/dnoise.c:788
+#: util/dnoise.c:768 util/dnoise.c:777
 msgid "dnoise: begin time is greater than EOF of noise file!"
 msgstr ""
 
-#: util/dnoise.c:820
+#: util/dnoise.c:809
 msgid "dnoise: not enough samples of noise reference\n"
 msgstr ""
 
-#: util/dnoise.c:1118
+#: util/dnoise.c:1103
 #, c-format
 msgid "%5.1f seconds of input complete\n"
 msgstr ""
 
-#: util/dnoise.c:1137
+#: util/dnoise.c:1122
 msgid "processing complete\n"
 msgstr ""
 
-#: util/dnoise.c:1147
+#: util/dnoise.c:1132
 msgid "usage: dnoise [flags] input_file"
 msgstr ""
 
-#: util/dnoise.c:1149
+#: util/dnoise.c:1134
 msgid "flags:"
 msgstr ""
 
-#: util/dnoise.c:1150
+#: util/dnoise.c:1135
 msgid "i = noise reference soundfile"
 msgstr ""
 
-#: util/dnoise.c:1151
+#: util/dnoise.c:1136
 msgid "o = output file"
 msgstr ""
 
-#: util/dnoise.c:1152
+#: util/dnoise.c:1137
 msgid "N = # of bandpass filters (1024)"
 msgstr ""
 
-#: util/dnoise.c:1153
+#: util/dnoise.c:1138
 msgid "w = filter overlap factor: {0,1,(2),3} DON'T USE -w AND -M"
 msgstr ""
 
-#: util/dnoise.c:1154
+#: util/dnoise.c:1139
 msgid "M = analysis window length (N-1 unless -w is specified)"
 msgstr ""
 
-#: util/dnoise.c:1155
+#: util/dnoise.c:1140
 msgid "L = synthesis window length (M)"
 msgstr ""
 
-#: util/dnoise.c:1156
+#: util/dnoise.c:1141
 msgid "D = decimation factor (M/8)"
 msgstr ""
 
-#: util/dnoise.c:1157
+#: util/dnoise.c:1142
 msgid "b = begin time in noise reference soundfile (0)"
 msgstr ""
 
-#: util/dnoise.c:1158
+#: util/dnoise.c:1143
 msgid "B = starting sample in noise reference soundfile (0)"
 msgstr ""
 
-#: util/dnoise.c:1159
+#: util/dnoise.c:1144
 msgid "e = end time in noise reference soundfile (end)"
 msgstr ""
 
-#: util/dnoise.c:1160
+#: util/dnoise.c:1145
 msgid "E = final sample in noise reference soundfile (end)"
 msgstr ""
 
-#: util/dnoise.c:1161
+#: util/dnoise.c:1146
 msgid "t = threshold above noise reference in dB (30)"
 msgstr ""
 
-#: util/dnoise.c:1162
+#: util/dnoise.c:1147
 msgid "S = sharpness of noise-gate turnoff (1) (1 to 5)"
 msgstr ""
 
-#: util/dnoise.c:1163
+#: util/dnoise.c:1148
 msgid "n = number of FFT frames to average over (5)"
 msgstr ""
 
-#: util/dnoise.c:1164
+#: util/dnoise.c:1149
 msgid "m = minimum gain of noise-gate when off in dB (-40)"
 msgstr ""
 
-#: util/dnoise.c:1165
+#: util/dnoise.c:1150
 msgid "V : verbose - print status info"
 msgstr ""
 
-#: util/dnoise.c:1166
+#: util/dnoise.c:1151
 msgid "A : AIFF format output"
 msgstr ""
 
-#: util/dnoise.c:1167
+#: util/dnoise.c:1152
 msgid "W : WAV format output"
 msgstr ""
 
-#: util/dnoise.c:1168
+#: util/dnoise.c:1153
 msgid "J : IRCAM format output"
 msgstr ""
 
-#: util/dnoise.c:1187
+#: util/dnoise.c:1172
 #, c-format
 msgid "soundfile write returned sample count of %d, not %d\n"
 msgstr ""
 
-#: util/dnoise.c:1189
+#: util/dnoise.c:1174
 msgid ""
 "(disk may be full...\n"
 " closing the file ...)\n"
 msgstr ""
 
-#: util/dnoise.c:1257
+#: util/dnoise.c:1242
 msgid "Removes noise from a sound file"
 msgstr ""
 
@@ -11084,7 +10977,7 @@ msgstr ""
 msgid "Usage:\tenvext [-flags] soundfile\n"
 msgstr ""
 
-#: util/envext.c:54 util/srconv.c:738
+#: util/envext.c:54 util/srconv.c:737
 msgid "-o fnam\tsound output filename\n"
 msgstr ""
 
@@ -11118,7 +11011,7 @@ msgstr ""
 msgid "enveloping %ld sample frames (%3.1f secs)\n"
 msgstr ""
 
-#: util/envext.c:179
+#: util/envext.c:177
 msgid "Create a text file of envelope"
 msgstr ""
 
@@ -11532,7 +11425,7 @@ msgstr ""
 msgid "Legal flags are:"
 msgstr ""
 
-#: util/mixer.c:107 util/scale.c:60 util/srconv.c:753
+#: util/mixer.c:107 util/scale.c:60 util/srconv.c:752
 msgid "-H#\tprint a heartbeat style 1, 2 or 3 at each soundfile write"
 msgstr ""
 
@@ -11572,7 +11465,7 @@ msgstr ""
 msgid "mixer: error: "
 msgstr ""
 
-#: util/mixer.c:188 util/scale.c:161 util/srconv.c:232
+#: util/mixer.c:188 util/scale.c:161 util/srconv.c:231
 #, c-format
 msgid "%s not a recognized SFOUTYP env setting"
 msgstr ""
@@ -11801,17 +11694,17 @@ msgstr ""
 msgid "Soundfile analysis for pvoc"
 msgstr ""
 
-#: util/pvanal.c:469
+#: util/pvanal.c:467
 #, c-format
 msgid "pvxanal: unable to create analysis file: %s"
 msgstr ""
 
-#: util/pvanal.c:500 util/pvanal.c:532
+#: util/pvanal.c:498 util/pvanal.c:530
 #, c-format
 msgid "pvxanal: error writing analysis frames: %s\n"
 msgstr ""
 
-#: util/pvanal.c:542
+#: util/pvanal.c:540
 #, c-format
 msgid ""
 "\n"
@@ -11901,7 +11794,7 @@ msgstr ""
 msgid "-P fpnum\tscale file to given percentage of full"
 msgstr ""
 
-#: util/scale.c:62 util/srconv.c:755
+#: util/scale.c:62 util/srconv.c:754
 msgid "-- fnam\tlog output to file"
 msgstr ""
 
@@ -12052,75 +11945,75 @@ msgstr ""
 msgid "Sound format -%c has been overruled by -%c"
 msgstr ""
 
-#: util/srconv.c:299
+#: util/srconv.c:298
 msgid "No Q argument"
 msgstr ""
 
-#: util/srconv.c:304
+#: util/srconv.c:303
 msgid "No P argument"
 msgstr ""
 
-#: util/srconv.c:313
+#: util/srconv.c:312
 msgid "No r argument"
 msgstr ""
 
-#: util/srconv.c:322
+#: util/srconv.c:321
 msgid "No break file"
 msgstr ""
 
-#: util/srconv.c:345
+#: util/srconv.c:344
 msgid "No input given\n"
 msgstr ""
 
-#: util/srconv.c:362
+#: util/srconv.c:361
 msgid "srconv: cannot specify both -r and -P"
 msgstr ""
 
-#: util/srconv.c:373
+#: util/srconv.c:372
 msgid "srconv: cannot open time-vary function file"
 msgstr ""
 
-#: util/srconv.c:389
+#: util/srconv.c:388
 msgid "srconv: too few x-y pairs in time-vary function file"
 msgstr ""
 
-#: util/srconv.c:403
+#: util/srconv.c:402
 msgid "srconv: first x value in time-vary function must be 0"
 msgstr ""
 
-#: util/srconv.c:408
+#: util/srconv.c:407
 msgid "srconv: invalid initial y value in time-vary function"
 msgstr ""
 
-#: util/srconv.c:413 util/srconv.c:705
+#: util/srconv.c:412 util/srconv.c:704
 msgid "srconv: invalid x values in time-vary function"
 msgstr ""
 
-#: util/srconv.c:732
+#: util/srconv.c:731
 msgid ""
 "usage: srconv [flags] infile\n"
 "\n"
 "flags:"
 msgstr ""
 
-#: util/srconv.c:733
+#: util/srconv.c:732
 msgid ""
 "-P num\tpitch transposition ratio (srate/r) [do not specify both P and r]"
 msgstr ""
 
-#: util/srconv.c:735
+#: util/srconv.c:734
 msgid "-Q num\tquality factor (1 to 8: default = 2)"
 msgstr ""
 
-#: util/srconv.c:736
+#: util/srconv.c:735
 msgid "-i filnam\tbreak file"
 msgstr ""
 
-#: util/srconv.c:737
+#: util/srconv.c:736
 msgid "-r num\toutput sample rate (must be specified)"
 msgstr ""
 
-#: util/srconv.c:821
+#: util/srconv.c:820
 msgid "Sample rate conversion"
 msgstr ""
 
@@ -12271,5 +12164,13 @@ msgid "Extract part of a sound file"
 msgstr ""
 
 #, fuzzy
+#~ msgid "tableseg: not initialized"
+#~ msgstr "%s: не выступлено с иничиативой"
+
+#, fuzzy
+#~ msgid "tablexseg: not initialized"
+#~ msgstr "%s: не выступлено с иничиативой"
+
+#, fuzzy
 #~ msgid "OSCrecv: OSC has not been initialised"
 #~ msgstr "%s: не выступлено с иничиативой"
diff --git a/po/update b/po/update
old mode 100644
new mode 100755
diff --git a/readme-csound5-complete.txt b/readme-csound5-complete.txt
index daef7f5..f48d39c 100644
--- a/readme-csound5-complete.txt
+++ b/readme-csound5-complete.txt
@@ -1,5 +1,5 @@
 CSOUND AND CSOUND VST
-Version 5.14.0
+Version 5.14.2
 
 A user-programmable and user-extensible sound processing language
 and software synthesizer.
diff --git a/readme-csound5.txt b/readme-csound5.txt
index b97cc47..ecb459d 100644
--- a/readme-csound5.txt
+++ b/readme-csound5.txt
@@ -1,5 +1,5 @@
 CSOUND
-Version 5.14.0
+Version 5.14.2
 
 A user-programmable and user-extensible sound processing language
 and software synthesizer.
diff --git a/samples/hrtf-44100-left.dat b/samples/hrtf-44100-left.dat
index 19d7b72..19a2947 100644
Binary files a/samples/hrtf-44100-left.dat and b/samples/hrtf-44100-left.dat differ
diff --git a/samples/hrtf-44100-right.dat b/samples/hrtf-44100-right.dat
index 17e33d6..b9f7b05 100644
Binary files a/samples/hrtf-44100-right.dat and b/samples/hrtf-44100-right.dat differ
diff --git a/samples/hrtf-48000-left.dat b/samples/hrtf-48000-left.dat
index 95daad6..9281583 100644
Binary files a/samples/hrtf-48000-left.dat and b/samples/hrtf-48000-left.dat differ
diff --git a/samples/hrtf-48000-right.dat b/samples/hrtf-48000-right.dat
index 4a10a0c..039d879 100644
Binary files a/samples/hrtf-48000-right.dat and b/samples/hrtf-48000-right.dat differ
diff --git a/samples/hrtf-96000-left.dat b/samples/hrtf-96000-left.dat
index 3f3f8c2..fdcdf7e 100644
Binary files a/samples/hrtf-96000-left.dat and b/samples/hrtf-96000-left.dat differ
diff --git a/samples/hrtf-96000-right.dat b/samples/hrtf-96000-right.dat
index 237ea81..7327ba0 100644
Binary files a/samples/hrtf-96000-right.dat and b/samples/hrtf-96000-right.dat differ
diff --git a/tests/test1.csd b/tests/test1.csd
index 0bfaada..e50ef63 100644
--- a/tests/test1.csd
+++ b/tests/test1.csd
@@ -6,12 +6,6 @@ sr=44100
 ksmps=1
 nchnls=1
 
-
-
-
-
-
-
 	instr 1	;untitled
 aout	vco2 10000, 440
 
@@ -22,14 +16,6 @@ aout	vco2 10000, 440
 </CsInstruments>
 
 <CsScore>
-
-
-
-
-
-
-
-
 i1	0.0	2	
 e
 
diff --git a/tests/test10.csd b/tests/test10.csd
index 1bcedf0..81ec71b 100644
--- a/tests/test10.csd
+++ b/tests/test10.csd
@@ -39,14 +39,6 @@ aout	vco2 kenv, ifreq
 </CsInstruments>
 
 <CsScore>
-
-
-
-
-
-
-
-
 i1	0.0	2 440
 e
 
diff --git a/tests/test11.csd b/tests/test11.csd
index 21ea750..1b9fd5b 100644
--- a/tests/test11.csd
+++ b/tests/test11.csd
@@ -40,13 +40,6 @@ aout	vco2 kenv, ifreq
 
 <CsScore>
 
-
-
-
-
-
-
-
 i1	0.0	2 440
 e
 
diff --git a/tests/test12.csd b/tests/test12.csd
index e60ce3f..3129dc6 100644
--- a/tests/test12.csd
+++ b/tests/test12.csd
@@ -31,14 +31,6 @@ aout	vco2 kenv, ifreq
 </CsInstruments>
 
 <CsScore>
-
-
-
-
-
-
-
-
 i1	0.0	2 440
 e
 
diff --git a/tests/test13.csd b/tests/test13.csd
index 3addd3f..66a7ada 100644
--- a/tests/test13.csd
+++ b/tests/test13.csd
@@ -24,8 +24,6 @@ aout	vco2 kenv, ifreq
 </CsInstruments>
 
 <CsScore>
-
-
 i1	0.0	2 440 80
 e
 
diff --git a/tests/test14.csd b/tests/test14.csd
index b21645d..a5b9c72 100644
--- a/tests/test14.csd
+++ b/tests/test14.csd
@@ -27,8 +27,6 @@ aout	vco2 kenv, ifreq
 </CsInstruments>
 
 <CsScore>
-
-
 i1	0.0	2 440 80
 e
 
diff --git a/tests/test16.csd b/tests/test16.csd
index b543add..c20f4a3 100644
--- a/tests/test16.csd
+++ b/tests/test16.csd
@@ -32,14 +32,6 @@ aout	vco2 kenv, kfreq
 </CsInstruments>
 
 <CsScore>
-
-
-
-
-
-
-
-
 i1	0.0	2 440
 e
 
diff --git a/tests/test17.csd b/tests/test17.csd
index 6196060..87ac7f4 100644
--- a/tests/test17.csd
+++ b/tests/test17.csd
@@ -35,13 +35,6 @@ aout	vco2 kenv, kfreq
 
 <CsScore>
 
-
-
-
-
-
-
-
 i1	0.0	2 440
 e
 
diff --git a/tests/test18.csd b/tests/test18.csd
index 048a1ed..726427d 100644
--- a/tests/test18.csd
+++ b/tests/test18.csd
@@ -34,13 +34,6 @@ aout	vco2 kenv, kfreq
 
 <CsScore>
 
-
-
-
-
-
-
-
 i1	0.0	2 440
 e
 
diff --git a/tests/test19.csd b/tests/test19.csd
index 573a5ac..0337cec 100644
--- a/tests/test19.csd
+++ b/tests/test19.csd
@@ -35,14 +35,6 @@ aout	vco2 kenv, kfreq
 </CsInstruments>
 
 <CsScore>
-
-
-
-
-
-
-
-
 i1	0.0	2 440 0
 i1  + . 440 1
 i1  + . 440 2
diff --git a/tests/test2.csd b/tests/test2.csd
index d20d244..d02e8b0 100644
--- a/tests/test2.csd
+++ b/tests/test2.csd
@@ -7,11 +7,6 @@ ksmps=1
 nchnls=2
 
 
-
-
-
-
-
 	instr 1	;untitled
 aout	vco2 10000, 440
 
@@ -23,13 +18,6 @@ aout	vco2 10000, 440
 
 <CsScore>
 
-
-
-
-
-
-
-
 i1	0.0	2	
 e
 
diff --git a/tests/test3.csd b/tests/test3.csd
index fc18deb..a7d9947 100644
--- a/tests/test3.csd
+++ b/tests/test3.csd
@@ -22,13 +22,6 @@ aout	vco2 iamp, ifreq
 
 <CsScore>
 
-
-
-
-
-
-
-
 i1	0.0	2	
 e
 
diff --git a/tests/test31.csd b/tests/test31.csd
index eebe6b3..f30c742 100644
--- a/tests/test31.csd
+++ b/tests/test31.csd
@@ -15,6 +15,55 @@ endin
 
 </CsInstruments>
 <CsScore>
-i1 0 .1
+i1 0 0.1
 </CsScore>
-</CsoundSynthesizer>
+</CsoundSynthesizer><bsbPanel>
+ <label>Widgets</label>
+ <objectName/>
+ <x>72</x>
+ <y>179</y>
+ <width>400</width>
+ <height>200</height>
+ <visible>true</visible>
+ <uuid/>
+ <bgcolor mode="nobackground">
+  <r>231</r>
+  <g>46</g>
+  <b>255</b>
+ </bgcolor>
+ <bsbObject version="2" type="BSBVSlider">
+  <objectName>slider1</objectName>
+  <x>5</x>
+  <y>5</y>
+  <width>20</width>
+  <height>100</height>
+  <uuid>{1ae23f3b-d446-4eda-a053-d2fa4589b5d4}</uuid>
+  <visible>true</visible>
+  <midichan>0</midichan>
+  <midicc>-3</midicc>
+  <minimum>0.00000000</minimum>
+  <maximum>1.00000000</maximum>
+  <value>0.00000000</value>
+  <mode>lin</mode>
+  <mouseControl act="jump">continuous</mouseControl>
+  <resolution>-1.00000000</resolution>
+  <randomizable group="0">false</randomizable>
+ </bsbObject>
+</bsbPanel>
+<bsbPresets>
+</bsbPresets>
+<MacOptions>
+Version: 3
+Render: Real
+Ask: Yes
+Functions: ioObject
+Listing: Window
+WindowBounds: 72 179 400 200
+CurrentView: io
+IOViewEdit: On
+Options:
+</MacOptions>
+<MacGUI>
+ioView nobackground {59367, 11822, 65535}
+ioSlider {5, 5} {20, 100} 0.000000 1.000000 0.000000 slider1
+</MacGUI>
diff --git a/tests/test32.csd b/tests/test32.csd
index 29d868b..7b206ac 100644
--- a/tests/test32.csd
+++ b/tests/test32.csd
@@ -9,8 +9,8 @@ if isrc \
      == 1  \
      goto noise
 print isrc
-goto \
-    next
+ goto \
+     next
 noise: asig rand 1
 next:
 
@@ -19,7 +19,56 @@ endin
 </CsInstruments>
 
 <CsScore>
-
+e
 </CsScore>
 
-</CsoundSynthesizer>
+</CsoundSynthesizer><bsbPanel>
+ <label>Widgets</label>
+ <objectName/>
+ <x>72</x>
+ <y>179</y>
+ <width>400</width>
+ <height>200</height>
+ <visible>true</visible>
+ <uuid/>
+ <bgcolor mode="nobackground">
+  <r>231</r>
+  <g>46</g>
+  <b>255</b>
+ </bgcolor>
+ <bsbObject version="2" type="BSBVSlider">
+  <objectName>slider1</objectName>
+  <x>5</x>
+  <y>5</y>
+  <width>20</width>
+  <height>100</height>
+  <uuid>{dc77e3c0-5395-4507-ba10-c7b84f8be663}</uuid>
+  <visible>true</visible>
+  <midichan>0</midichan>
+  <midicc>-3</midicc>
+  <minimum>0.00000000</minimum>
+  <maximum>1.00000000</maximum>
+  <value>0.00000000</value>
+  <mode>lin</mode>
+  <mouseControl act="jump">continuous</mouseControl>
+  <resolution>-1.00000000</resolution>
+  <randomizable group="0">false</randomizable>
+ </bsbObject>
+</bsbPanel>
+<bsbPresets>
+</bsbPresets>
+<MacOptions>
+Version: 3
+Render: Real
+Ask: Yes
+Functions: ioObject
+Listing: Window
+WindowBounds: 72 179 400 200
+CurrentView: io
+IOViewEdit: On
+Options:
+</MacOptions>
+<MacGUI>
+ioView nobackground {59367, 11822, 65535}
+ioSlider {5, 5} {20, 100} 0.000000 1.000000 0.000000 slider1
+</MacGUI>
diff --git a/tests/test39.csd b/tests/test39.csd
index a1216da..9329a88 100644
--- a/tests/test39.csd
+++ b/tests/test39.csd
@@ -21,4 +21,55 @@ e
 
 </CsScore>
 
-</CsoundSynthesizer>
\ No newline at end of file
+</CsoundSynthesizer>
+<bsbPanel>
+ <label>Widgets</label>
+ <objectName/>
+ <x>0</x>
+ <y>61</y>
+ <width>397</width>
+ <height>670</height>
+ <visible>true</visible>
+ <uuid/>
+ <bgcolor mode="nobackground">
+  <r>231</r>
+  <g>46</g>
+  <b>255</b>
+ </bgcolor>
+ <bsbObject version="2" type="BSBVSlider">
+  <objectName>slider1</objectName>
+  <x>5</x>
+  <y>5</y>
+  <width>20</width>
+  <height>100</height>
+  <uuid>{d7962195-d850-4007-966f-0a35711f7def}</uuid>
+  <visible>true</visible>
+  <midichan>0</midichan>
+  <midicc>-3</midicc>
+  <minimum>0.00000000</minimum>
+  <maximum>1.00000000</maximum>
+  <value>0.00000000</value>
+  <mode>lin</mode>
+  <mouseControl act="jump">continuous</mouseControl>
+  <resolution>-1.00000000</resolution>
+  <randomizable group="0">false</randomizable>
+ </bsbObject>
+</bsbPanel>
+<bsbPresets>
+</bsbPresets>
+<MacOptions>
+Version: 3
+Render: Real
+Ask: Yes
+Functions: ioObject
+Listing: Window
+WindowBounds: 0 61 397 670
+CurrentView: io
+IOViewEdit: On
+Options:
+</MacOptions>
+
+<MacGUI>
+ioView nobackground {59367, 11822, 65535}
+ioSlider {5, 5} {20, 100} 0.000000 1.000000 0.000000 slider1
+</MacGUI>
diff --git a/tests/test4.csd b/tests/test4.csd
index 2554bdb..47ff09f 100644
--- a/tests/test4.csd
+++ b/tests/test4.csd
@@ -23,13 +23,6 @@ aout	vco2 kenv, ifreq
 
 <CsScore>
 
-
-
-
-
-
-
-
 i1	0.0	2	
 e
 
diff --git a/tests/test41.csd b/tests/test41.csd
index 84cef34..9280ddc 100644
--- a/tests/test41.csd
+++ b/tests/test41.csd
@@ -40,13 +40,6 @@ aout	vco2 kenv, ifreq
 
 <CsScore>
 
-
-
-
-
-
-
-
 i1	0.0	2 440
 e
 
diff --git a/tests/test5.csd b/tests/test5.csd
index 33d155a..1b8ff78 100644
--- a/tests/test5.csd
+++ b/tests/test5.csd
@@ -24,13 +24,6 @@ aout	vco2 kenv, ifreq
 
 <CsScore>
 
-
-
-
-
-
-
-
 i1	0.0	2	
 e
 
diff --git a/tests/test6.csd b/tests/test6.csd
index c5bbfab..1094948 100644
--- a/tests/test6.csd
+++ b/tests/test6.csd
@@ -24,13 +24,6 @@ aout	vco2 kenv, ifreq
 
 <CsScore>
 
-
-
-
-
-
-
-
 i1	0.0	2 440
 e
 
diff --git a/tests/test7.csd b/tests/test7.csd
index 14e5d62..58f858d 100644
--- a/tests/test7.csd
+++ b/tests/test7.csd
@@ -26,13 +26,6 @@ aout	vco2 kenv, ifreq
 
 <CsScore>
 
-
-
-
-
-
-
-
 i1	0.0	2 440
 e
 
diff --git a/tests/test8.csd b/tests/test8.csd
index 0b864a0..47fd341 100644
--- a/tests/test8.csd
+++ b/tests/test8.csd
@@ -26,13 +26,6 @@ aout	vco2 kenv, ifreq
 
 <CsScore>
 
-
-
-
-
-
-
-
 i1	0.0	2 440
 e
 
diff --git a/tests/test9.csd b/tests/test9.csd
index 787dd78..00bcf28 100644
--- a/tests/test9.csd
+++ b/tests/test9.csd
@@ -29,13 +29,6 @@ aout	vco2 kenv, ifreq
 
 <CsScore>
 
-
-
-
-
-
-
-
 i1	0.0	2 440
 e
 
diff --git a/util/atsa.c b/util/atsa.c
index 3836b87..fcea3b7 100644
--- a/util/atsa.c
+++ b/util/atsa.c
@@ -98,7 +98,7 @@ typedef float mus_sample_t;
 #if defined(LINUX) || defined(MACOSX)
 #  define ATSA_RES_FILE "/tmp/atsa_res.wav"
 #else
-#  define ATSA_RES_FILE "atsa_res.wav"
+#  define ATSA_RES_FILE "/atsa_res.wav"
 #endif
 
 /* constants and macros */
@@ -534,7 +534,7 @@ static int main_anal(CSOUND *csound, char *soundfile, char *ats_outfile,
     fd = csound->FileOpen2(csound, &outfile, CSFILE_STD, ats_outfile, "wb",
                           NULL, CSFTYPE_ATS, 0);
     if (fd == NULL) {
-      csound->Die(csound, Str("\n Could not open %s for writing, bye...\n"),
+      csound->Die(csound, Str("\nCould not open %s for writing, bye...\n"),
                   ats_outfile);
     }
     /* call tracker */
@@ -721,7 +721,17 @@ static int atsa_main(CSOUND *csound, int argc, char **argv)
         soundfile == NULL || soundfile[0] == '\0' ||
         ats_outfile == NULL || ats_outfile[0] == '\0')
       usage(csound);
+#ifdef WIN32
+    {
+      char buffer[160];
+      char * tmp = getenv("TEMP");
+      strncpy(buffer, tmp, 160);
+      strncat(buffer, ATSA_RES_FILE, 160);
+      val = main_anal(csound, soundfile, ats_outfile, anargs, buffer);
+    }
+#else
     val = main_anal(csound, soundfile, ats_outfile, anargs, ATSA_RES_FILE);
+#endif
     csound->Free(csound, anargs);
     return (val);
 }
@@ -2363,8 +2373,17 @@ static ATS_SOUND *tracker(CSOUND *csound, ANARGS *anargs, char *soundfile,
     csound->Free(csound, bufs);
     /* analyse residual */
     if (anargs->type == 3 || anargs->type == 4) {
+#ifdef WIN32
+      char buffer[160];
+      char * tmp = getenv("TEMP");
+      strncpy(buffer, tmp, 160);
+      strncat(buffer, ATSA_RES_FILE, 160);
+      csound->Message(csound, Str("Analysing residual..."));
+      residual_analysis(csound, buffer, sound);
+#else
       csound->Message(csound, Str("Analysing residual..."));
       residual_analysis(csound, ATSA_RES_FILE, sound);
+#endif
       csound->Message(csound, Str("done!\n"));
     }
     csound->Message(csound, Str("tracking completed.\n"));
diff --git a/util/dnoise.c b/util/dnoise.c
index d36943a..6e34f10 100644
--- a/util/dnoise.c
+++ b/util/dnoise.c
@@ -203,8 +203,8 @@ static int dnoise(CSOUND *csound, int argc, char **argv)
 
     MYFLT
         Ninv,       /* 1. / N */
-        RoverTwoPi, /* R/D divided by 2*Pi */
-        TwoPioverR, /* 2*Pi divided by R/I */
+      //RoverTwoPi, /* R/D divided by 2*Pi */
+      //TwoPioverR, /* 2*Pi divided by R/I */
         sum,        /* scale factor for renormalizing windows */
         rIn,        /* decimated sampling rate */
         rOut,       /* pre-interpolated sampling rate */
@@ -220,8 +220,6 @@ static int dnoise(CSOUND *csound, int argc, char **argv)
         R = -FL(1.0);  /* input sampling rate */
 
     int    i,j,k,   /* index variables */
-        Dd,         /* number of new inputs to read (Dd <= D) */
-        Ii,         /* number of new outputs to write (Ii <= I) */
         ibs,        /* current starting location in input buffer */
         ibc,        /* current location in input buffer */
         obs,        /* current starting location in output buffer */
@@ -243,7 +241,6 @@ static int dnoise(CSOUND *csound, int argc, char **argv)
         first = 0;  /* first-time-thru flag */
 
     SOUNDIN     *p, *pn;
-    void        *dummy;
     char        *infile = NULL, *nfile = NULL;
     SNDFILE     *inf = NULL, *outfd = NULL;
     char        c, *s;
@@ -252,7 +249,6 @@ static int dnoise(CSOUND *csound, int argc, char **argv)
     MYFLT       beg_ntime = FL(0.0), input_ndur = FL(0.0), srn = FL(0.0);
     const char  *envoutyp = NULL;
     unsigned int  outbufsiz = 0U;
-    char        outformch = 's';
     int         nrecs = 0;
 
     csound->e0dbfs = csound->dbfs_to_float = FL(1.0);
@@ -314,31 +310,24 @@ static int dnoise(CSOUND *csound, int argc, char **argv)
               O->sfheader = 0;           /* skip sfheader  */
               break;
             case 'c':
-              outformch = c;
               O->outformat = AE_CHAR;     /* 8-bit char soundfile */
               break;
             case '8':
-              outformch = c;
               O->outformat = AE_UNCH;     /* 8-bit unsigned char file */
               break;
             case 'a':
-              outformch = c;
               O->outformat = AE_ALAW;     /* a-law soundfile */
               break;
             case 'u':
-              outformch = c;
               O->outformat = AE_ULAW;     /* mu-law soundfile */
               break;
             case 's':
-              outformch = c;
               O->outformat = AE_SHORT;    /* short_int soundfile */
               break;
             case 'l':
-              outformch = c;
               O->outformat = AE_LONG;     /* long_int soundfile */
               break;
             case 'f':
-              outformch = c;
               O->outformat = AE_FLOAT;    /* float soundfile */
               break;
             case 'R':
@@ -492,8 +481,8 @@ static int dnoise(CSOUND *csound, int argc, char **argv)
         return -1;
       }
       /* register file to be closed by csoundReset() */
-      dummy = csound->CreateFileHandle(csound, &outfd, CSFILE_SND_W,
-                                               O->outfilename);
+      (void)csound->CreateFileHandle(csound, &outfd, CSFILE_SND_W,
+                                     O->outfilename);
       sf_command(outfd, SFC_SET_CLIPPING, NULL, SF_TRUE);
     }
     csound->esr = (MYFLT) p->sr;
@@ -846,12 +835,8 @@ static int dnoise(CSOUND *csound, int argc, char **argv)
     rIn = ((MYFLT) R / D);
     rOut = ((MYFLT) R / I);
     invR = FL(1.0) / R;
-    RoverTwoPi = rIn / TWOPI_F;
-    TwoPioverR = TWOPI_F / rOut;
     nI = -(aLen / D) * D;    /* input time (in samples) */
     nO = nI;                 /* output time (in samples) */
-    Dd = aLen + nI + 1;      /* number of new inputs to read */
-    Ii = 0;                  /* number of new outputs to write */
     ibs = ibuflen + Chans * (nI - aLen - 1);    /* starting position in ib1 */
     ib1 = ibuf1;        /* filled with zeros to start */
     ib2 = ibuf2;        /* first buffer of speech */
@@ -1182,7 +1167,7 @@ static int dnoise_usage(CSOUND *csound, int exitcode)
 /* report soundfile write(osfd) error      */
 /*    called after chk of write() bytecnt  */
 
-static void sndwrterr(CSOUND *csound, SNDFILE *outfd, int nret, int nput)
+static void sndwrterr(CSOUND *csound, int nret, int nput)
 {
     csound->Message(csound, Str("soundfile write returned sample count of %d, "
                                 "not %d\n"), nret, nput);
@@ -1201,7 +1186,7 @@ static int writebuffer(CSOUND *csound, SNDFILE *outfd,
     if (outfd == NULL) return 0;
     n = sf_write_MYFLT(outfd, outbuf, nsmps);
     if (n < nsmps) {
-      sndwrterr(csound, outfd, n, nsmps);
+      sndwrterr(csound, n, nsmps);
       return -1;
     }
     if (O->rewrt_hdr)
diff --git a/util/envext.c b/util/envext.c
index 695accd..6e97dfe 100644
--- a/util/envext.c
+++ b/util/envext.c
@@ -133,7 +133,6 @@ static void
 FindEnvelope(CSOUND *csound, SNDFILE *infd, SOUNDIN *p,
              double window, char *outname)
 {
-    int         chans;
     double      tpersample;
     double      max, min;
     long        mxpos, minpos;
@@ -147,7 +146,6 @@ FindEnvelope(CSOUND *csound, SNDFILE *infd, SOUNDIN *p,
     outfile = fopen((outname == NULL ? "newenv" : outname), "w");
     bufferlen = (int)(window*(double)p->sr);
     buffer = (MYFLT*) malloc(bufferlen*sizeof(MYFLT));
-    chans = p->nchanls;
     tpersample = 1.0/(double)p->sr;
     fprintf(outfile, "%.3f\t%.3f\n", 0.0, 0.0);
     while ((read_in = csound->getsndin(csound,infd,buffer,bufferlen,p)) > 0) {
diff --git a/util/lpanal.c b/util/lpanal.c
index cd03ef0..4dc0b34 100644
--- a/util/lpanal.c
+++ b/util/lpanal.c
@@ -72,9 +72,9 @@ typedef struct {
 
 /* Forward declaration */
 
-static  void    alpol(CSOUND *, LPC *, MYFLT *,
-                                double *, double *, double *, double *);
-static  void    gauss(CSOUND *, LPC *, double (*)[MAXPOLES], double*, double*);
+static  void    alpol(LPC *, MYFLT *,
+                      double *, double *, double *, double *);
+static  void    gauss(LPC *, double (*)[MAXPOLES], double*, double*);
 static  void    quit(CSOUND *, char *), lpdieu(CSOUND *, char *);
 static  void    usage(CSOUND *);
 static  void    ptable(CSOUND *, MYFLT, MYFLT, MYFLT, int, LPANAL_GLOBALS*);
@@ -103,7 +103,7 @@ static  MYFLT   getpch(CSOUND *, MYFLT *, LPANAL_GLOBALS*);
  *
  */
 
-static void polyzero(int nmax, int n, double *a, double *zerore, double *zeroim,
+static void polyzero(int n, double *a, double *zerore, double *zeroim,
                      int *pt, int itmax, int *indic, double *work)
 {
     double        u, v, w, k, m, f, fm, fc, xm, ym, xr, yr, xc, yc;
@@ -120,9 +120,9 @@ static void polyzero(int nmax, int n, double *a, double *zerore, double *zeroim,
       return;
     }
 
-    for (i=0; i<=n; i++)
-      work[i+1] = a[i];
-
+    /* for (i=0; i<=n; i++) */
+    /*   work[i+1] = a[i]; */
+    memcpy(work+1, a, (n+1)*sizeof(double));
     *indic = 0;
     *pt = 0;
     n1 = n;
@@ -592,7 +592,7 @@ static int lpanal(CSOUND *csound, int argc, char **argv)
         (csound, Str("Starting new frame...\n"));
 #endif
       counter++;
-      alpol(csound, &lpc, sigbuf, &errn, &rms1, &rms2, filterCoef);
+      alpol(&lpc, sigbuf, &errn, &rms1, &rms2, filterCoef);
       /* Transfer results */
       coef[0] = (MYFLT)rms2;
       coef[1] = (MYFLT)rms1;
@@ -627,7 +627,7 @@ static int lpanal(CSOUND *csound, int argc, char **argv)
 
         /* Get the Filter Poles */
 
-        polyzero(100,lpc.poleCount,filterCoef,polePart1,polePart2,
+        polyzero(lpc.poleCount,filterCoef,polePart1,polePart2,
                  &poleFound,2000,&indic,workArray1);
 
         if (poleFound<lpc.poleCount) {
@@ -750,7 +750,7 @@ static void lpdieu(CSOUND *csound, char *msg)
  *
  */
 
-static void alpol(CSOUND *csound, LPC *thislp, MYFLT *sig, double *errn,
+static void alpol(LPC *thislp, MYFLT *sig, double *errn,
                   double *rms1, double *rms2, double b[MAXPOLES])
                                         /* sig now MYFLT */
                                         /* b filled here */
@@ -794,7 +794,7 @@ static void alpol(CSOUND *csound, LPC *thislp, MYFLT *sig, double *errn,
     }
 
     /* Solves the system */
-    gauss(csound, thislp, thislp->a, v, b);
+    gauss(thislp, thislp->a, v, b);
 
     /* Compute associted parameters */
     for (i=0; i < thislp->poleCount;++i) {
@@ -814,7 +814,7 @@ static void alpol(CSOUND *csound, LPC *thislp, MYFLT *sig, double *errn,
  * Perform gauss elemination: Could be replaced by something more robust
  *
  */
-static void gauss(CSOUND *csound, LPC* thislp,
+static void gauss(LPC* thislp,
                   double (*a/*old*/)[MAXPOLES], double *bold, double b[])
 {
     double amax, dum, pivot;
@@ -843,7 +843,7 @@ static void gauss(CSOUND *csound, LPC* thislp,
                       i, thislp->poleCount, amax);
       csound->Die(csound, Str("gauss: ill-conditioned"));
    */ 
-	 for (ii=i; ii < thislp->poleCount;++ii) a[ii][i] = 1.0e-20; /* VL: fix for very low values */
+         for (ii=i; ii < thislp->poleCount;++ii) a[ii][i] = 1.0e-20; /* VL: fix for very low values */
        }
       if (i != istar) {
         for (j=0; j < thislp->poleCount;++j)  {    /* switch rows */
@@ -879,7 +879,7 @@ static void gauss(CSOUND *csound, LPC* thislp,
             csound->Message(csound,"Row %d or %d have maximum of %g\n",
              thislp->poleCount-1, thislp->poleCount,
              fabs(a[thislp->poleCount-1][thislp->poleCount-1]));
-	     csound->Die(csound, Str("gauss: ill-conditioned"));*/
+             csound->Die(csound, Str("gauss: ill-conditioned"));*/
       }
 
     b[thislp->poleCount-1] =
diff --git a/util/lpc_export.c b/util/lpc_export.c
index 6f1028d..575a035 100644
--- a/util/lpc_export.c
+++ b/util/lpc_export.c
@@ -76,7 +76,7 @@ static int lpc_export(CSOUND *csound, int argc, char **argv)
             hdr.framrate, hdr.srate, hdr.duration);
     str = (char *)csound->Malloc(csound,hdr.headersize-sizeof(LPHEADER)+4);
     fread(&hdr, sizeof(char), hdr.headersize-sizeof(LPHEADER)+4, inf);
-    for (i=0; i<hdr.headersize-sizeof(LPHEADER)+4; i++)
+    for (i=0; i<(signed int)hdr.headersize-sizeof(LPHEADER)+4; i++)
       putc(str[i],outf);
     putc('\n', outf);
     coef = (MYFLT *)csound->Malloc(csound,(hdr.npoles+hdr.nvals)*sizeof(MYFLT));
diff --git a/util/lpc_import.c b/util/lpc_import.c
index 162a981..97aa125 100644
--- a/util/lpc_import.c
+++ b/util/lpc_import.c
@@ -72,7 +72,7 @@ static int lpc_import(CSOUND *csound, int argc, char **argv)
             hdr.framrate, hdr.srate, hdr.duration);
     str = (char *)csound->Malloc(csound,hdr.headersize-sizeof(LPHEADER)+4);
     fread(&hdr, sizeof(char), hdr.headersize-sizeof(LPHEADER)+4, inf);
-    for (i=0; i<hdr.headersize-sizeof(LPHEADER)+4; i++)
+    for (i=0; i<(signed int)hdr.headersize-sizeof(LPHEADER)+4; i++)
       putc(str[i],outf);
     putc('\n', outf);
     coef = (MYFLT *)csound->Malloc(csound, (hdr.npoles+hdr.nvals)*sizeof(MYFLT));
diff --git a/util/pvanal.c b/util/pvanal.c
index 51a71b2..f9d0ce4 100644
--- a/util/pvanal.c
+++ b/util/pvanal.c
@@ -116,7 +116,7 @@ static  int     pvxanal(CSOUND *csound, SOUNDIN *p, SNDFILE *fd,
                                         const char *fname,
                                         long srate, long chans, long fftsize,
                                         long overlap, long winsize,
-                                        pv_wtype wintype, int verbose,
+                                        pv_wtype wintype, /*int verbose,*/
                                         double beta);
 static  long    generate_frame(CSOUND*, PVX *pvx, MYFLT *fbuf, float *outanal,
                                         long samps, int frametype);
@@ -162,8 +162,8 @@ static int pvanal(CSOUND *csound, int argc, char **argv)
     FILE    *trfil = stdout;
     pv_wtype  WindowType = PVOC_HANN;
     char    err_msg[512];
-    int     verbose = 0;
     double  beta = 6.8;
+    int verbose = 0;
 
     csound->oparms->displays = 0;
     if (!(--argc))
@@ -299,7 +299,7 @@ static int pvanal(CSOUND *csound, int argc, char **argv)
     if (pvxanal(csound, p, infd, outfilnam, p->sr,
                         ((!channel || channel == ALLCHNLS) ? p->nchanls : 1),
                         frameSize, frameIncr, frameSize * 2,
-                        WindowType, verbose, beta) != 0) {
+                WindowType, /*verbose,*/ beta) != 0) {
       csound->Message(csound, Str("error generating pvocex file.\n"));
       return -1;
     }
@@ -406,7 +406,7 @@ static void PVDisplay_Display(PVDISPLAY *p, int frame)
 
 static int pvxanal(CSOUND *csound, SOUNDIN *p, SNDFILE *fd, const char *fname,
                    long srate, long chans, long fftsize, long overlap,
-                   long winsize, pv_wtype wintype, int verbose, double beta)
+                   long winsize, pv_wtype wintype, /*int verbose,*/ double beta)
 {
     int         i, k, pvfile = -1, rc = 0;
     pv_stype    stype = STYPE_16;
@@ -417,10 +417,8 @@ static int pvxanal(CSOUND *csound, SOUNDIN *p, SNDFILE *fd, const char *fname,
     MYFLT       *inbuf_c[MAXPVXCHANS];
     float       *frame_c[MAXPVXCHANS];  /* RWD : MUST be 32bit  */
     MYFLT       *inbuf = NULL;
-    MYFLT       nyquist, chwidth;
     float       *frame;                 /* RWD : MUST be 32bit  */
     MYFLT       *chanbuf;
-    unsigned int  nbins;
     long        total_sampsread = 0;
     PVDISPLAY   disp;
 
@@ -431,9 +429,9 @@ static int pvxanal(CSOUND *csound, SOUNDIN *p, SNDFILE *fd, const char *fname,
       case AE_FLOAT:  stype = STYPE_IEEE_FLOAT; break;
     }
 
-    nbins = (fftsize/2) + 1;
-    nyquist = (MYFLT) srate * FL(0.5);
-    chwidth = nyquist/(MYFLT)(nbins - 1);
+    //nbins = (fftsize/2) + 1;
+    //nyquist = (MYFLT) srate * FL(0.5);
+    //    chwidth = nyquist/(MYFLT)(nbins - 1);
     for (i = 0; i < MAXPVXCHANS; i++) {
       pvx[i] = NULL;
       inbuf_c[i] = NULL;
diff --git a/util/scale.c b/util/scale.c
index 524f707..943f9ac 100644
--- a/util/scale.c
+++ b/util/scale.c
@@ -73,7 +73,7 @@ static void usage(CSOUND *csound, char *mesg)
     csound->Die(csound, "\n%s", mesg);
 }
 
-static char set_output_format(CSOUND *csound, OPARMS *p, char c, char outformch)
+static char set_output_format(OPARMS *p, char c, char outformch)
 {
     switch (c) {
       case 'a': p->outformat = AE_ALAW;   /* a-law soundfile */
@@ -219,7 +219,7 @@ static int scale(CSOUND *csound, int argc, char **argv)
           case '3':
           case 'l':
           case 'f':
-            outformch = set_output_format(csound, O, c, outformch);
+            outformch = set_output_format(O, c, outformch);
             break;
           case 'R':
             O->rewrt_hdr = 1;
@@ -463,7 +463,7 @@ static float FindAndReportMax(CSOUND *csound, SCALE *thissc, SNDFILE *infile)
     double  max, min;
     long    mxpos, minpos;
     int     maxtimes, mintimes;
-    int     i, j, chans = thissc->p->nchanls;
+    int     i, chans = thissc->p->nchanls;
     int     block = 0;
     int     bufferLenFrames = (int) BUFFER_LEN / chans;
     int     bufferLenSamples = bufferLenFrames * chans;
@@ -474,7 +474,7 @@ static float FindAndReportMax(CSOUND *csound, SCALE *thissc, SNDFILE *infile)
     while ((read_in = csound->getsndin(csound, infile, buffer,
                                        bufferLenSamples, thissc->p)) > 0) {
       for (i = 0; i < read_in; i++) {
-        j = (i / chans) + (bufferLenFrames * block);
+        //j = (i / chans) + (bufferLenFrames * block);
         if (buffer[i] >= max) ++maxtimes;
         if (buffer[i] <= min) ++mintimes;
         if (buffer[i] > max)
diff --git a/util/srconv.c b/util/srconv.c
index c61b202..9d84a7e 100644
--- a/util/srconv.c
+++ b/util/srconv.c
@@ -205,7 +205,6 @@ static int srconv(CSOUND *csound, int argc, char **argv)
 
     FILE        *tvfp = NULL;   /* time-vary function file */
     SOUNDIN     *p;
-    void        *dummy;
     int         channel = ALLCHNLS;
     MYFLT       beg_time = FL(0.0), input_dur = FL(0.0), sr = FL(0.0);
     char        *infile = NULL, *bfile = NULL;
@@ -374,7 +373,7 @@ static int srconv(CSOUND *csound, int argc, char **argv)
         goto err_rtn_msg;
       }
       /* register file to be closed by csoundReset() */
-      dummy = csound->CreateFileHandle(csound, &tvfp, CSFILE_STD, bfile);
+      (void) csound->CreateFileHandle(csound, &tvfp, CSFILE_STD, bfile);
       fscanf(tvfp, "%d", &tvlen);
       fxval = (MYFLT*) csound->Malloc(csound, tvlen * sizeof(MYFLT));
       fyval = (MYFLT*) csound->Malloc(csound, tvlen * sizeof(MYFLT));
@@ -474,8 +473,8 @@ static int srconv(CSOUND *csound, int argc, char **argv)
         goto err_rtn_msg;
       }
       /* register file to be closed by csoundReset() */
-      dummy = csound->CreateFileHandle(csound, &outfd, CSFILE_SND_W,
-                                               O->outfilename);
+      (void) csound->CreateFileHandle(csound, &outfd, CSFILE_SND_W,
+                                      O->outfilename);
       sf_command(outfd, SFC_SET_CLIPPING, NULL, SF_TRUE);
     }
     csound->esr = (MYFLT) p->sr;

-- 
csound packaging



More information about the pkg-multimedia-commits mailing list