1
0
Fork 0
forked from len0rd/rockbox
foxbox/apps/plugins/pdbox/PDa/src/m_fixed.c
Wincent Balin 7996e77334 PDBox: Use correct values of maximal string size for snprintf.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@22154 a1c6a512-1295-4272-9138-f99709370657
2009-08-04 13:52:43 +00:00

157 lines
3.4 KiB
C

#ifdef ROCKBOX
#include "plugin.h"
#include "pdbox.h"
#else /* ROCKBOX */
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/tcp.h>
#include <netdb.h>
#include <stdio.h>
#endif /* ROCKBOX */
#include "m_pd.h"
#include "m_imp.h"
static t_class *ipod_class = 0;
typedef struct _ipod
{
t_object x_obj;
t_symbol* x_what;
} t_ipod;
static t_ipod* ipod;
static t_int x_fd = -1;
static void ipod_connect(void)
{
#ifdef ROCKBOX
if (x_fd >= 0)
{
error("ipod_connect: already connected");
return;
}
else
{
x_fd++;
}
#else /* ROCKBOX */
struct sockaddr_in server;
struct hostent *hp;
int sockfd;
int portno = 3334;
char hostname[] = "127.0.0.1";
int intarg;
if (x_fd >= 0)
{
error("ipod_connect: already connected");
return;
}
/* create a socket */
sockfd = socket(AF_INET, SOCK_DGRAM, 0);
if (sockfd < 0)
{
sys_sockerror("socket");
return;
}
/* connect socket using hostname provided in command line */
server.sin_family = AF_INET;
hp = gethostbyname(hostname);
if (hp == 0)
{
post("bad host?\n");
return;
}
memcpy((char *)&server.sin_addr, (char *)hp->h_addr, hp->h_length);
server.sin_port = htons((u_short)portno);
if (connect(sockfd, (struct sockaddr *) &server, sizeof (server)) < 0)
{
sys_sockerror("connecting stream socket");
sys_closesocket(sockfd);
return;
}
post("connected %s %d",hostname,portno);
x_fd = sockfd;
#endif /* ROCKBOX */
}
static void ipod_bang(t_ipod *x)
{
static char sendme[200];
#ifdef ROCKBOX
snprintf(sendme, sizeof(sendme), "%s bang;\n", x->x_what->s_name);
SEND_FROM_CORE(sendme);
#else /* ROCKBOX */
sprintf(sendme,"%s bang;\n",x->x_what->s_name);
send(x_fd,sendme,strlen(sendme),0);
#endif /*ROCKBOX */
// if (x->x_sym->s_thing) pd_bang(x->x_sym->s_thing);
}
static void ipod_float(t_ipod *x, t_float f)
{
static char sendme[200];
#ifdef ROCKBOX
char f_buf[32];
ftoan(f, f_buf, sizeof(f_buf)-1);
strcpy(sendme, x->x_what->s_name);
strcat(sendme, " ");
strcat(sendme, f_buf);
SEND_FROM_CORE(sendme);
#else /* ROCKBOX */
sprintf(sendme,"%s %f;\n",x->x_what->s_name,f);
send(x_fd,sendme,strlen(sendme),0);
#endif /* ROCKBOX */
// post("forwarding float %s",x->x_what->s_name);
// if (x->x_sym->s_thing) pd_float(x->x_sym->s_thing, f);
}
static void *ipod_new(t_symbol* what)
{
t_ipod *x = (t_ipod *)pd_new(ipod_class);
post("new ipod %s",what->s_name);
x->x_what = what;
return (x);
}
static void ipod_setup(void)
{
ipod_class = class_new(gensym("ipod"), (t_newmethod)ipod_new, 0,
sizeof(t_ipod), 0, A_DEFSYM, 0);
class_addbang(ipod_class, ipod_bang);
class_addfloat(ipod_class, ipod_float);
ipod_connect();
}
void pd_checkgui(t_pd *x, t_symbol *s)
{
if (!strncmp(s->s_name,"pod_",4))
if (!strcmp((*x)->c_name->s_name,"gatom") ||
!strcmp((*x)->c_name->s_name,"vsl") ||
!strcmp((*x)->c_name->s_name,"hsl") ||
!strcmp((*x)->c_name->s_name,"bng") ||
!strcmp((*x)->c_name->s_name,"vradio") ||
!strcmp((*x)->c_name->s_name,"hradio")) {
post("binding %s to %s",s->s_name,(*x)->c_name->s_name);
if (!ipod_class) ipod_setup();
ipod = ipod_new(s);
pd_bind(&ipod->x_obj.ob_pd,s);
}
}