Hi Paul,
Thanks!
I was only given 2 errors when compiling which I fixed
so it was interesting to see what you had to do.
I had a look at the vst version and got that compiling
and running a while ago. I think the juno6 will be a
nice consolidation project for my newly acquired c++
skills after my exams (c++ this Saturday afternoon)
and wife permitting.
I've played with the alsa seq thing before so your
code will be a nice short cut mechanism. Jack I have
yet to really play with properly.
Thanks again!
Kev
--- Paul Coccoli <pcoccoli(a)gmail.com> wrote:
The patch is below.
WARNING: I did not test the patch itself. The
sources from which it
was made have been lying around on my disk for
years, so they've
almost certainly been altered by the little gremlins
that live in my
machine and flip bits while I sleep at night.
It probably won't apply, and if it does, it will
probably cause your
computer to explode.
You have been warned!
It's all an ugly hack by the way, not meant for
distribution. Much of
it deals with the move from g++-2 to g++-3, the rest
is the alsa_seq
stuff. It looks like I wrapped my changes in #ifdef
USE_ALSA_SEQ but
i don't know if I define that in any of the
Makefiles. I may have set
it on the command line (I'm lazy like that).
If I could think of any more disclaimers, I would
include them.
Perhaps a real Linux audio developer will pick this
up, add proper
jack support, etc.
diff -Naur juno-1.0.1/gmoog/Makefile
juno-1.0.1-alsa/gmoog/Makefile
--- juno-1.0.1/gmoog/Makefile 2005-11-07
21:46:51.000000000 -0500
+++ juno-1.0.1-alsa/gmoog/Makefile 2005-11-07
21:46:33.000000000 -0500
@@ -45,7 +45,7 @@
.depend: Makefile
touch .depend
- makedepend -f .depend $(INCLUDE_DIRS)
-I/usr/include/g++-2 $(shell
gtk-config --cflags) *.C *.c
+ makedepend -f .depend $(INCLUDE_DIRS)
-I/usr/include/g++-3 $(shell
gtk-config --cflags) *.C *.c
.PHONY: objs
diff -Naur juno-1.0.1/gmoog/Scope.C
juno-1.0.1-alsa/gmoog/Scope.C
--- juno-1.0.1/gmoog/Scope.C 2005-11-07
21:46:51.000000000 -0500
+++ juno-1.0.1-alsa/gmoog/Scope.C 2005-11-07
21:46:33.000000000 -0500
@@ -34,8 +34,8 @@
Scope::Scope()
{
- addInput( "sync", NULL );
- addInput( "sig", NULL );
+ addInput( "sync", (moog_callback_t)NULL );
+ addInput( "sig", (moog_callback_t)NULL );
showing = 0;
mainWindow = NULL;
diff -Naur juno-1.0.1/juno6/juno_synth.C
juno-1.0.1-alsa/juno6/juno_synth.C
--- juno-1.0.1/juno6/juno_synth.C 2005-11-07
21:46:51.000000000 -0500
+++ juno-1.0.1-alsa/juno6/juno_synth.C 2005-11-07
21:46:33.000000000 -0500
@@ -210,7 +210,8 @@
void turnOnArpeggio(bool on)
{
- MoogObject *target = (on) ? arpeggio :
junoControl;
+ // MoogObject *target = (on) ? arpeggio :
junoControl;
+ MoogObject *target = (MoogObject*)(on) ?
(MoogObject*)arpeggio :
(MoogObject*)junoControl;
if (voice0)
voice0->attachVoice(target);
diff -Naur juno-1.0.1/juno6/juno_wrappers.C
juno-1.0.1-alsa/juno6/juno_wrappers.C
--- juno-1.0.1/juno6/juno_wrappers.C 2005-11-07
21:46:51.000000000 -0500
+++ juno-1.0.1-alsa/juno6/juno_wrappers.C 2005-11-07
21:46:33.000000000 -0500
@@ -94,7 +94,7 @@
if (midiInput)
{
- addInput(tmp2, NULL);
+ addInput(tmp2, (moog_callback_t)NULL);
PATCH(midiInput, tmp1, this, tmp2);
}
pitchOutputs[i] = junoControl->getOutput(tmp2);
diff -Naur juno-1.0.1/juno6/Makefile
juno-1.0.1-alsa/juno6/Makefile
--- juno-1.0.1/juno6/Makefile 2005-11-07
21:46:51.000000000 -0500
+++ juno-1.0.1-alsa/juno6/Makefile 2005-11-07
21:46:33.000000000 -0500
@@ -3,7 +3,8 @@
GTK_CFLAGS=$(shell gtk-config --cflags)
INCLUDE_PATH=-I.. -Iumg/base/include $(GTK_CFLAGS)
CPPFLAGS=$(INCLUDE_PATH) $(GTK_CFLAGS) -Wall
$(OPTIMIZE) $(DEBUG) $(PROFILE)
-LDFLAGS= -L../moog -L../gmoog -L../util
-L/usr/local/lib -lgmoog
-lmoog -lmoogutil $(shell gtk-config --libs)
-lgthread
+LDFLAGS= -L../moog -L../gmoog -L../util
-L/usr/local/lib -lgmoog
-lmoog -lmoogutil $(shell gtk-config --libs)
-lgthread -lasound
+
PROGS=juno6 list_patches copy_patch
@@ -37,6 +38,6 @@
.depend: Makefile
touch .depend
- makedepend -f .depend $(INCLUDE_PATH)
-I/usr/include/g++-2 *.C *.c
+ makedepend -f .depend $(INCLUDE_PATH)
-I/usr/include/g++-3 *.C *.c
include .depend
diff -Naur juno-1.0.1/libgmoog/Makefile
juno-1.0.1-alsa/libgmoog/Makefile
--- juno-1.0.1/libgmoog/Makefile 2005-11-07
21:46:51.000000000 -0500
+++ juno-1.0.1-alsa/libgmoog/Makefile 2005-11-07
21:46:33.000000000 -0500
@@ -45,7 +45,7 @@
.depend: Makefile
touch .depend
- makedepend -f .depend $(INCLUDE_DIRS)
-I/usr/include/g++-2 $(shell
gtk-config --cflags) *.C *.c
+ makedepend -f .depend $(INCLUDE_DIRS)
-I/usr/include/g++-3 $(shell
gtk-config --cflags) *.C *.c
.PHONY: objs
diff -Naur juno-1.0.1/libgmoog/Scope.C
juno-1.0.1-alsa/libgmoog/Scope.C
--- juno-1.0.1/libgmoog/Scope.C 2005-11-07
21:46:51.000000000 -0500
+++ juno-1.0.1-alsa/libgmoog/Scope.C 2005-11-07
21:46:33.000000000 -0500
@@ -34,8 +34,8 @@
Scope::Scope()
{
- addInput( "sync", NULL );
- addInput( "sig", NULL );
+ addInput( "sync", (moog_callback_t)NULL );
+ addInput( "sig", (moog_callback_t)NULL );
showing = 0;
mainWindow = NULL;
diff -Naur juno-1.0.1/libmoog/IIR2.C
juno-1.0.1-alsa/libmoog/IIR2.C
--- juno-1.0.1/libmoog/IIR2.C 2005-11-07
21:46:51.000000000 -0500
+++ juno-1.0.1-alsa/libmoog/IIR2.C 2005-11-07
21:46:33.000000000 -0500
@@ -25,7 +25,7 @@
cx[0] = cx[1] = cy[0] = cy[1] = 0;
x[0] = x[1] = y[0] = y[1] = 0;
- addInput("sig", NULL);
+ addInput("sig", (moog_callback_t)NULL);
addOutput("sig", true);
output = getOutput(0);
diff -Naur juno-1.0.1/libmoog/Makefile
juno-1.0.1-alsa/libmoog/Makefile
--- juno-1.0.1/libmoog/Makefile 2005-11-07
21:46:51.000000000 -0500
+++ juno-1.0.1-alsa/libmoog/Makefile 2005-11-07
21:46:33.000000000 -0500
@@ -76,7 +76,7 @@
.depend: Makefile
touch .depend
- makedepend -f .depend $(INCLUDE_DIRS)
-I/usr/include/g++-2 *.C *.c
+ makedepend -f .depend $(INCLUDE_DIRS)
-I/usr/include/g++-3 *.C *.c
.PHONY: objs depend
diff -Naur juno-1.0.1/libmoog/MidiInput.C
juno-1.0.1-alsa/libmoog/MidiInput.C
--- juno-1.0.1/libmoog/MidiInput.C 2005-11-07
21:46:51.000000000 -0500
+++ juno-1.0.1-alsa/libmoog/MidiInput.C 2005-11-07
21:46:33.000000000 -0500
@@ -26,6 +26,32 @@
#include "Scheduler.h"
#include "pitch.h"
+#define USE_ALSA_SEQ
+#ifdef USE_ALSA_SEQ
+#include <alsa/asoundlib.h>
+snd_seq_t *hseq;
+
+snd_seq_t *open_seq() {
+
+ snd_seq_t *seq_handle;
+ int portid;
+
+ if (snd_seq_open(&seq_handle, "hw",
SND_SEQ_OPEN_DUPLEX, 0) < 0) {
+ fprintf(stderr, "Error opening ALSA
sequencer.\n");
+ exit(1);
+ }
+ snd_seq_set_client_name(seq_handle, "j6");
+ if ((portid =
snd_seq_create_simple_port(seq_handle, "j6",
+
SND_SEQ_PORT_CAP_WRITE|SND_SEQ_PORT_CAP_SUBS_WRITE,
+ SND_SEQ_PORT_TYPE_APPLICATION)) < 0) {
+ fprintf(stderr, "Error creating sequencer
port.\n");
+ exit(1);
+ }
+ return(seq_handle);
+}
+
+#else
+
#define READ1 if ( !inCommand )\
{\
read( midiFd, &data[ 0 ], 1 );\
@@ -41,6 +67,8 @@
read( midiFd, &data[ 1 ], 1 );\
}\
+#endif
+
void* midi_input_run( void* data )
{
return(((MidiInput *)data)->run());
@@ -56,8 +84,14 @@
pthread_mutex_init(&startStopLock, NULL);
lastNote = -1;
+#ifndef USE_ALSA_SEQ
if ( openDevice( device, MIDI_READ ) < 0 )
return;
+#else
+ if (!(hseq = open_seq()))
+ return;
+ midiFd = 99;
+#endif
addOutput( "bend", false );
@@ -112,6 +146,7 @@
{
running = 1;
pthread_create( &midiThread, NULL, midi_input_run,
this );
+ debug(DEBUG_APPMSG1, "Midi thread started");
}
pthread_mutex_unlock(&startStopLock);
}
@@ -129,6 +164,7 @@
pthread_mutex_unlock(&startStopLock);
}
+#ifndef USE_ALSA_SEQ
void*
MidiInput::run()
{
@@ -161,9 +197,9 @@
channel = tmp & 0x0F;
inCommand = 0;
}
-
+
switch( cmd )
- {
+ {
case MIDI_NOTEOFF: //0x80
READ2;
doNoteOff( channel, data[0], data[1] );
@@ -234,6 +270,79 @@
/* not reached */
return( NULL );
}
+#else
+void*
+MidiInput::run()
+{
+ char ctlName[ 10 ]; //format is "ctl00-000"
+
+ snd_seq_event_t *ev;
+
+ while( running )
+ {
+ snd_seq_event_input(hseq, &ev);
+
+ switch( ev->type )
+ {
+ case SND_SEQ_EVENT_NOTEOFF: //0x80
+ doNoteOff( ev->data.control.channel,
ev->data.note.note, 0 );
+ break;
+
+ case SND_SEQ_EVENT_NOTEON: //0x90
+// debug( DEBUG_APPMSG1, "NOTEON ch=%d
note=%d vel=%d\n",
ev->data.control.channel, ev->data.note.note,
ev->data.note.velocity);
+ if ( ev->data.note.velocity == 0 )
+ {
+ doNoteOff( ev->data.control.channel,
ev->data.note.note, 0 );
+ }
+ else
+ {
+ doNoteOn( ev->data.control.channel,
ev->data.note.note,
+ ev->data.note.velocity );
+ }
+ break;
+
+ case SND_SEQ_EVENT_KEYPRESS: //0xA0
+// debug( DEBUG_STATUS, "KEY PRESSURE ch=%d
note=%d amount=%d\n",
+// channel, cmd, data[ 0 ] );
+ break;
+
+ case SND_SEQ_EVENT_CONTROLLER: //0xB0
+// debug( DEBUG_APPMSG1, "CTL ch=%d ctl=%d
val=%d\n",
ev->data.control.channel, ev->data.control.param,
ev->data.control.value);
+ sprintf( ctlName, "ctl%d-%d",
ev->data.control.channel,
+ ev->data.control.param );
+ {
+ Output* out;
+ out = MoogObject::getOutput( ctlName );
+ if ( out != NULL )
+ out->setData(
ev->data.control.value / 127.0);
+ }
+
+ break;
+
+ case SND_SEQ_EVENT_PGMCHANGE: //0xC0
+// debug( DEBUG_STATUS, "PGM_CHANGE %d %d\n",
channel, data[ 0 ] );
+ break;
+
+ case SND_SEQ_EVENT_CHANPRESS: //0xD0
+// debug( DEBUG_STATUS, "CHN_PRESSURE %d %d\n",
channel, data[ 0 ] );
+ break;
+
+ case SND_SEQ_EVENT_PITCHBEND: //0xE0
+ doPitchBend( ev->data.control.value );
//FIXME: channel?
+ break;
+
+ default:
+ //debug( DEBUG_STATUS, "[%d]\n", cmd );
+ break;
+ }
+ }
+
+ pthread_exit(0);
+
+ /* not reached */
+ return( NULL );
+}
+#endif
void
MidiInput::doNoteOn( unsigned int c, unsigned int
n, unsigned int v )
diff -Naur juno-1.0.1/libmoog/MoogObject.C
juno-1.0.1-alsa/libmoog/MoogObject.C
--- juno-1.0.1/libmoog/MoogObject.C 2005-11-07
21:46:51.000000000 -0500
+++ juno-1.0.1-alsa/libmoog/MoogObject.C 2005-11-07
21:46:33.000000000 -0500
@@ -53,7 +53,8 @@
if (io == OUTPUT)
{
- bool continuousOutput = va_arg(va, bool);
+ //PC bool continuousOutput = va_arg(va,
bool);
+ bool continuousOutput = va_arg(va, int);
addOutput(name, continuousOutput);
}
else
diff -Naur juno-1.0.1/libmoog/Oscillator.C
juno-1.0.1-alsa/libmoog/Oscillator.C
--- juno-1.0.1/libmoog/Oscillator.C 2005-11-07
21:46:51.000000000 -0500
+++ juno-1.0.1-alsa/libmoog/Oscillator.C 2005-11-07
21:46:33.000000000 -0500
@@ -46,7 +46,7 @@
init( w );
}
-Oscillator::Oscillator( DataBlock* w, double frq,
double amp = 1,
double zro = 0 )
+Oscillator::Oscillator( DataBlock* w, double frq,
double amp, double zro)
{
init( w );
set( I_OSC_FRQ, frq );
diff -Naur juno-1.0.1/libmoogutil/String.C
juno-1.0.1-alsa/libmoogutil/String.C
--- juno-1.0.1/libmoogutil/String.C 2005-11-07
21:46:51.000000000 -0500
+++ juno-1.0.1-alsa/libmoogutil/String.C 2005-11-07
21:46:33.000000000 -0500
@@ -346,7 +346,8 @@
case 'c':
maxlen += 1;
- (void)va_arg(ap, char);
+ //PC (void)va_arg(ap, char);
+ (void)va_arg(ap, int);
break;
case 's':
diff -Naur juno-1.0.1/Makefile.include
juno-1.0.1-alsa/Makefile.include
--- juno-1.0.1/Makefile.include 2005-11-07
21:46:51.000000000 -0500
+++ juno-1.0.1-alsa/Makefile.include 2005-11-07
21:46:33.000000000 -0500
@@ -8,17 +8,18 @@
PROFILE=-pg
endif
-ifeq ($(USE_DEBUG), n)
-DEBUG=
-else
+#ifeq ($(USE_DEBUG), n)
+#DEBUG=
+#else
DEBUG=-g
-endif
+#endif
-ifeq ($(USE_OPTIMIZE), max)
-OPTIMIZE=-O6 -fomit-frame-pointer -m486 -ffast-math
-else
-OPTIMIZE=-O2
-endif
+#ifeq ($(USE_OPTIMIZE), max)
+#OPTIMIZE=-O6 -fomit-frame-pointer -m486
-ffast-math
+#else
+#OPTIMIZE=-O2
+#endif
+OPTIMIZE=-O0
CC=gcc
diff -Naur juno-1.0.1/moog/IIR2.C
juno-1.0.1-alsa/moog/IIR2.C
--- juno-1.0.1/moog/IIR2.C 2005-11-07
21:46:51.000000000 -0500
+++ juno-1.0.1-alsa/moog/IIR2.C 2005-11-07
21:46:33.000000000 -0500
@@ -25,7 +25,7 @@
cx[0] = cx[1] = cy[0] = cy[1] = 0;
x[0] = x[1] = y[0] = y[1] = 0;
- addInput("sig", NULL);
+ addInput("sig", (moog_callback_t)NULL);
addOutput("sig", true);
output = getOutput(0);
diff -Naur juno-1.0.1/moog/Makefile
juno-1.0.1-alsa/moog/Makefile
--- juno-1.0.1/moog/Makefile 2005-11-07
21:46:51.000000000 -0500
+++ juno-1.0.1-alsa/moog/Makefile 2005-11-07
21:46:33.000000000 -0500
@@ -76,7 +76,7 @@
.depend: Makefile
touch .depend
- makedepend -f .depend $(INCLUDE_DIRS)
-I/usr/include/g++-2 *.C *.c
+ makedepend -f .depend $(INCLUDE_DIRS)
-I/usr/include/g++-3 *.C *.c
.PHONY: objs depend
diff -Naur juno-1.0.1/moog/MidiInput.C
juno-1.0.1-alsa/moog/MidiInput.C
--- juno-1.0.1/moog/MidiInput.C 2005-11-07
21:46:51.000000000 -0500
+++ juno-1.0.1-alsa/moog/MidiInput.C 2005-11-07
21:46:33.000000000 -0500
@@ -26,6 +26,32 @@
#include "Scheduler.h"
#include "pitch.h"
+#define USE_ALSA_SEQ
+#ifdef USE_ALSA_SEQ
+#include <alsa/asoundlib.h>
+snd_seq_t *hseq;
+
+snd_seq_t *open_seq() {
+
+ snd_seq_t *seq_handle;
+ int portid;
+
+ if (snd_seq_open(&seq_handle, "hw",
SND_SEQ_OPEN_DUPLEX, 0) < 0) {
+ fprintf(stderr, "Error opening ALSA
sequencer.\n");
+ exit(1);
+ }
+ snd_seq_set_client_name(seq_handle, "j6");
+ if ((portid =
snd_seq_create_simple_port(seq_handle, "j6",
+
SND_SEQ_PORT_CAP_WRITE|SND_SEQ_PORT_CAP_SUBS_WRITE,
+ SND_SEQ_PORT_TYPE_APPLICATION)) < 0) {
+ fprintf(stderr, "Error creating sequencer
port.\n");
+ exit(1);
+ }
+ return(seq_handle);
+}
+
+#else
+
#define READ1 if ( !inCommand )\
{\
read( midiFd, &data[ 0 ], 1 );\
@@ -41,6 +67,8 @@
read( midiFd, &data[ 1 ], 1 );\
}\
+#endif
+
void* midi_input_run( void* data )
{
return(((MidiInput *)data)->run());
@@ -56,8 +84,14 @@
pthread_mutex_init(&startStopLock, NULL);
lastNote = -1;
+#ifndef USE_ALSA_SEQ
if ( openDevice( device, MIDI_READ ) < 0 )
return;
+#else
+ if (!(hseq = open_seq()))
+ return;
+ midiFd = 99;
+#endif
addOutput( "bend", false );
@@ -112,6 +146,7 @@
{
running = 1;
pthread_create( &midiThread, NULL, midi_input_run,
this );
+ debug(DEBUG_APPMSG1, "Midi thread started");
}
pthread_mutex_unlock(&startStopLock);
}
@@ -129,6 +164,7 @@
pthread_mutex_unlock(&startStopLock);
}
+#ifndef USE_ALSA_SEQ
void*
MidiInput::run()
{
@@ -161,9 +197,9 @@
channel = tmp & 0x0F;
inCommand = 0;
}
-
+
switch( cmd )
- {
+ {
case MIDI_NOTEOFF: //0x80
READ2;
doNoteOff( channel, data[0], data[1] );
@@ -234,6 +270,79 @@
/* not reached */
return( NULL );
}
+#else
+void*
+MidiInput::run()
+{
+ char ctlName[ 10 ]; //format is "ctl00-000"
+
+ snd_seq_event_t *ev;
+
+ while( running )
+ {
+ snd_seq_event_input(hseq, &ev);
+
+ switch( ev->type )
+ {
+ case SND_SEQ_EVENT_NOTEOFF: //0x80
+ doNoteOff( ev->data.control.channel,
ev->data.note.note, 0 );
+ break;
+
+ case SND_SEQ_EVENT_NOTEON: //0x90
+// debug( DEBUG_APPMSG1, "NOTEON ch=%d
note=%d vel=%d\n",
ev->data.control.channel, ev->data.note.note,
ev->data.note.velocity);
+ if ( ev->data.note.velocity == 0 )
+ {
+ doNoteOff( ev->data.control.channel,
ev->data.note.note, 0 );
+ }
+ else
+ {
+ doNoteOn( ev->data.control.channel,
ev->data.note.note,
+ ev->data.note.velocity );
+ }
+ break;
+
+ case SND_SEQ_EVENT_KEYPRESS: //0xA0
+// debug( DEBUG_STATUS, "KEY PRESSURE ch=%d
note=%d amount=%d\n",
+// channel, cmd, data[ 0 ] );
+ break;
+
+ case SND_SEQ_EVENT_CONTROLLER: //0xB0
+// debug( DEBUG_APPMSG1, "CTL ch=%d ctl=%d
val=%d\n",
ev->data.control.channel, ev->data.control.param,
ev->data.control.value);
+ sprintf( ctlName, "ctl%d-%d",
ev->data.control.channel,
+ ev->data.control.param );
+ {
+ Output* out;
+ out = MoogObject::getOutput( ctlName );
+ if ( out != NULL )
+ out->setData(
ev->data.control.value / 127.0);
+ }
+
+ break;
+
+ case SND_SEQ_EVENT_PGMCHANGE: //0xC0
+// debug( DEBUG_STATUS, "PGM_CHANGE %d %d\n",
channel, data[ 0 ] );
+ break;
+
+ case SND_SEQ_EVENT_CHANPRESS: //0xD0
+// debug( DEBUG_STATUS, "CHN_PRESSURE %d %d\n",
channel, data[ 0 ] );
+ break;
+
+ case SND_SEQ_EVENT_PITCHBEND: //0xE0
+ doPitchBend( ev->data.control.value );
//FIXME: channel?
+ break;
+
+ default:
+ //debug( DEBUG_STATUS, "[%d]\n", cmd );
+ break;
+ }
+ }
+
+ pthread_exit(0);
+
+ /* not reached */
+ return( NULL );
+}
+#endif
void
MidiInput::doNoteOn( unsigned int c, unsigned int
n, unsigned int v )
diff -Naur juno-1.0.1/moog/MoogObject.C
juno-1.0.1-alsa/moog/MoogObject.C
--- juno-1.0.1/moog/MoogObject.C 2005-11-07
21:46:51.000000000 -0500
+++ juno-1.0.1-alsa/moog/MoogObject.C 2005-11-07
21:46:33.000000000 -0500
@@ -53,7 +53,8 @@
if (io == OUTPUT)
{
- bool continuousOutput = va_arg(va, bool);
+ //PC bool continuousOutput = va_arg(va,
bool);
+ bool continuousOutput = va_arg(va, int);
addOutput(name, continuousOutput);
}
else
diff -Naur juno-1.0.1/moog/Oscillator.C
juno-1.0.1-alsa/moog/Oscillator.C
--- juno-1.0.1/moog/Oscillator.C 2005-11-07
21:46:51.000000000 -0500
+++ juno-1.0.1-alsa/moog/Oscillator.C 2005-11-07
21:46:33.000000000 -0500
@@ -46,7 +46,7 @@
init( w );
}
-Oscillator::Oscillator( DataBlock* w, double frq,
double amp = 1,
double zro = 0 )
+Oscillator::Oscillator( DataBlock* w, double frq,
double amp, double zro)
{
init( w );
set( I_OSC_FRQ, frq );
diff -Naur juno-1.0.1/util/String.C
juno-1.0.1-alsa/util/String.C
--- juno-1.0.1/util/String.C 2005-11-07
21:46:51.000000000 -0500
+++ juno-1.0.1-alsa/util/String.C 2005-11-07
21:46:33.000000000 -0500
@@ -346,7 +346,8 @@
case 'c':
maxlen += 1;
- (void)va_arg(ap, char);
+ //PC (void)va_arg(ap, char);
+ (void)va_arg(ap, int);
break;
case 's':
___________________________________________________________
Yahoo! Messenger - NEW crystal clear PC to PC calling worldwide with voicemail
http://uk.messenger.yahoo.com