[PD-cvs] externals/mrpeach/osc packOSC.c,1.3,1.4

Martin Peach mrpeach at users.sourceforge.net
Mon Jun 4 23:18:26 CEST 2007


Update of /cvsroot/pure-data/externals/mrpeach/osc
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv30531

Modified Files:
	packOSC.c 
Log Message:
added bufsize message and cleaned up code


Index: packOSC.c
===================================================================
RCS file: /cvsroot/pure-data/externals/mrpeach/osc/packOSC.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -C2 -d -r1.3 -r1.4
*** packOSC.c	28 May 2007 00:45:58 -0000	1.3
--- packOSC.c	4 Jun 2007 21:18:24 -0000	1.4
***************
*** 232,237 ****
  } typedArg;
  
- static char bufferForOSCbuf[SC_BUFFER_SIZE];
- static t_atom bufferForOSClist[SC_BUFFER_SIZE];
  
  static t_class *packOSC_class;
--- 232,235 ----
***************
*** 240,249 ****
  {
      t_object    x_obj;
!     t_int       x_typetags; // typetag flag
!     int         x_bundle; // bundle open flag
!     OSCbuf      x_oscbuf[1]; // OSCbuffer
!     t_atom      *x_osclist;
!     t_outlet    *x_bdpthout; // bundle-depth floatoutlet
!     t_outlet    *x_listout; // OSC packet list ouput
  } t_packOSC;
  
--- 238,249 ----
  {
      t_object    x_obj;
!     t_int       x_typetags; /* typetag flag */
!     int         x_bundle; /* bundle open flag */
!     OSCbuf      x_oscbuf[1]; /* OSCbuffer */
!     t_outlet    *x_bdpthout; /* bundle-depth floatoutlet */
!     t_outlet    *x_listout; /* OSC packet list ouput */
!     size_t      x_buflength; /* number of elements in x_bufferForOSCbuf and x_bufferForOSClist */
!     char        *x_bufferForOSCbuf; /*[SC_BUFFER_SIZE];*/
!     t_atom      *x_bufferForOSClist; /*[SC_BUFFER_SIZE];*/
  } t_packOSC;
  
***************
*** 251,255 ****
  static void packOSC_openbundle(t_packOSC *x);
  static void packOSC_closebundle(t_packOSC *x);
! static void packOSC_settypetags(t_packOSC *x, t_float *f);
  static void packOSC_sendtyped(t_packOSC *x, t_symbol *s, int argc, t_atom *argv);
  static void packOSC_send_type_forced(t_packOSC *x, t_symbol *s, int argc, t_atom *argv);
--- 251,256 ----
  static void packOSC_openbundle(t_packOSC *x);
  static void packOSC_closebundle(t_packOSC *x);
! static void packOSC_settypetags(t_packOSC *x, t_floatarg f);
! static void packOSC_setbufsize(t_packOSC *x, t_floatarg f);
  static void packOSC_sendtyped(t_packOSC *x, t_symbol *s, int argc, t_atom *argv);
  static void packOSC_send_type_forced(t_packOSC *x, t_symbol *s, int argc, t_atom *argv);
***************
*** 266,275 ****
  {
      t_packOSC *x = (t_packOSC *)pd_new(packOSC_class);
!     // set typetags to 1 by default
!     x->x_typetags = 1;
!     // bundle is closed
!     x->x_bundle   = 0;
!     OSC_initBuffer(x->x_oscbuf, SC_BUFFER_SIZE, bufferForOSCbuf);
!     x->x_osclist = bufferForOSClist;
      x->x_listout = outlet_new(&x->x_obj, &s_list);
      x->x_bdpthout = outlet_new(&x->x_obj, &s_float);
--- 267,281 ----
  {
      t_packOSC *x = (t_packOSC *)pd_new(packOSC_class);
!     x->x_typetags = 1; /* set typetags to 1 by default */
!     x->x_bundle   = 0; /* bundle is closed */
!     x->x_buflength = SC_BUFFER_SIZE;
!     x->x_bufferForOSCbuf = (char *)getbytes(sizeof(char)*x->x_buflength);
!     if(x->x_bufferForOSCbuf == NULL)
!         error("packOSC: unable to allocate %lu bytes for x_bufferForOSCbuf", sizeof(char)*x->x_buflength);
!     x->x_bufferForOSClist = (t_atom *)getbytes(sizeof(t_atom)*x->x_buflength);
!     if(x->x_bufferForOSClist == NULL)
!         error("packOSC: unable to allocate %lu bytes for x_bufferForOSClist", sizeof(t_atom)*x->x_buflength);
!     if (x->x_oscbuf != NULL)
!         OSC_initBuffer(x->x_oscbuf, x->x_buflength, x->x_bufferForOSCbuf);
      x->x_listout = outlet_new(&x->x_obj, &s_list);
      x->x_bdpthout = outlet_new(&x->x_obj, &s_float);
***************
*** 298,306 ****
      }
      outlet_float(x->x_bdpthout, (float)x->x_oscbuf->bundleDepth);
!     // in bundle mode we send when bundle is closed?
      if(!OSC_isBufferEmpty(x->x_oscbuf) > 0 && OSC_isBufferDone(x->x_oscbuf))
      {
          packOSC_sendbuffer(x);
!         OSC_initBuffer(x->x_oscbuf, SC_BUFFER_SIZE, bufferForOSCbuf);
          x->x_bundle = 0;
          return;
--- 304,312 ----
      }
      outlet_float(x->x_bdpthout, (float)x->x_oscbuf->bundleDepth);
!     /* in bundle mode we send when bundle is closed */
      if(!OSC_isBufferEmpty(x->x_oscbuf) > 0 && OSC_isBufferDone(x->x_oscbuf))
      {
          packOSC_sendbuffer(x);
!         OSC_initBuffer(x->x_oscbuf, x->x_buflength, x->x_bufferForOSCbuf);
          x->x_bundle = 0;
          return;
***************
*** 308,327 ****
  }
  
! static void packOSC_settypetags(t_packOSC *x, t_float *f)
  {
      x->x_typetags = (f != 0)?1:0;
!     post("packOSC: setting typetags %d",x->x_typetags);
  }
  
  
  
! //////////////////////////////////////////////////////////////////////
! // this is the real and only sending routine now, for both typed and
! // undtyped mode.
  
  static void packOSC_sendtyped(t_packOSC *x, t_symbol *s, int argc, t_atom *argv)
  {
      char            messageName[MAXPDSTRING];
!     unsigned int    nTypeTags = 0, typeStrTotalSize;
      unsigned int    argsSize = sizeof(typedArg)*argc;
      char*           typeStr = NULL; /* might not be used */
--- 314,347 ----
  }
  
! static void packOSC_settypetags(t_packOSC *x, t_floatarg f)
  {
      x->x_typetags = (f != 0)?1:0;
!     post("packOSC: setting typetags %d", x->x_typetags);
  }
  
+ static void packOSC_setbufsize(t_packOSC *x, t_floatarg f)
+ {
+     if (x->x_bufferForOSCbuf != NULL) freebytes((void *)x->x_bufferForOSCbuf, sizeof(char)*x->x_buflength);
+     if (x->x_bufferForOSClist != NULL) freebytes((void *)x->x_bufferForOSClist, sizeof(t_atom)*x->x_buflength);
+     post("packOSC: bufsize arg is %f (%lu)", f, (long)f);
+     x->x_buflength = (long)f;
+     x->x_bufferForOSCbuf = (char *)getbytes(sizeof(char)*x->x_buflength);
+     if(x->x_bufferForOSCbuf == NULL)
+         error("packOSC unable to allocate %lu bytes for x_bufferForOSCbuf", sizeof(char)*x->x_buflength);
+     x->x_bufferForOSClist = (t_atom *)getbytes(sizeof(t_atom)*x->x_buflength);
+     if(x->x_bufferForOSClist == NULL)
+         error("packOSC unable to allocate %lu bytes for x_bufferForOSClist", sizeof(t_atom)*x->x_buflength);
+     OSC_initBuffer(x->x_oscbuf, x->x_buflength, x->x_bufferForOSCbuf);
+     post("packOSC: bufsize is now %d",x->x_buflength);
+ }
  
  
! /* this is the real and only sending routine now, for both typed and */
! /* undtyped mode. */
  
  static void packOSC_sendtyped(t_packOSC *x, t_symbol *s, int argc, t_atom *argv)
  {
      char            messageName[MAXPDSTRING];
!     unsigned int    nTypeTags = 0, typeStrTotalSize = 0;
      unsigned int    argsSize = sizeof(typedArg)*argc;
      char*           typeStr = NULL; /* might not be used */
***************
*** 336,340 ****
          return;
      }
!     messageName[0] = '\0'; // empty
  
      atom_string(&argv[0], messageName, MAXPDSTRING); /* the OSC address string */
--- 356,360 ----
          return;
      }
!     messageName[0] = '\0'; /* empty */
  
      atom_string(&argv[0], messageName, MAXPDSTRING); /* the OSC address string */
***************
*** 419,423 ****
      {
          packOSC_sendbuffer(x);
!         OSC_initBuffer(x->x_oscbuf, SC_BUFFER_SIZE, bufferForOSCbuf);
      }
  
--- 439,443 ----
      {
          packOSC_sendbuffer(x);
!         OSC_initBuffer(x->x_oscbuf, x->x_buflength, x->x_bufferForOSCbuf);
      }
  
***************
*** 446,449 ****
--- 466,471 ----
  static void packOSC_free(t_packOSC *x)
  {
+     if (x->x_bufferForOSCbuf != NULL) freebytes((void *)x->x_bufferForOSCbuf, sizeof(char)*x->x_buflength);
+     if (x->x_bufferForOSClist != NULL) freebytes((void *)x->x_bufferForOSClist, sizeof(t_atom)*x->x_buflength);
  }
  
***************
*** 454,458 ****
          sizeof(t_packOSC), 0, A_DEFFLOAT, 0);
      class_addmethod(packOSC_class, (t_method)packOSC_settypetags,
!         gensym("typetags"), A_FLOAT, 0);
      class_addmethod(packOSC_class, (t_method)packOSC_send,
          gensym("send"), A_GIMME, 0);
--- 476,482 ----
          sizeof(t_packOSC), 0, A_DEFFLOAT, 0);
      class_addmethod(packOSC_class, (t_method)packOSC_settypetags,
!         gensym("typetags"), A_DEFFLOAT, 0);
!     class_addmethod(packOSC_class, (t_method)packOSC_setbufsize,
!         gensym("bufsize"), A_DEFFLOAT, 0);
      class_addmethod(packOSC_class, (t_method)packOSC_send,
          gensym("send"), A_GIMME, 0);
***************
*** 486,490 ****
              i = atom_getint(a);
              if (f == (t_float)i)
!             { // assume that if the int and float are the same, it's an int
                  returnVal.type = INT_osc;
                  returnVal.datum.i = i;
--- 510,514 ----
              i = atom_getint(a);
              if (f == (t_float)i)
!             { /* assume that if the int and float are the same, it's an int */
                  returnVal.type = INT_osc;
                  returnVal.datum.i = i;
***************
*** 602,606 ****
  }
  
! static int packOSC_writetypedmessage(t_packOSC *x, OSCbuf *buf, char *messageName, int numArgs, typedArg *args, char *typeStr)
  {
      int i, j, returnVal = OSC_writeAddressAndTypes(buf, messageName, typeStr);
--- 626,631 ----
  }
  
! static int packOSC_writetypedmessage
! (t_packOSC *x, OSCbuf *buf, char *messageName, int numArgs, typedArg *args, char *typeStr)
  {
      int i, j, returnVal = OSC_writeAddressAndTypes(buf, messageName, typeStr);
***************
*** 709,713 ****
                  break;
              default:
!                 break; // just skip bad types (which we won't get anyway unless this code is buggy)
          }
      }
--- 734,738 ----
                  break;
              default:
!                 break; /* just skip bad types (which we won't get anyway unless this code is buggy) */
          }
      }
***************
*** 732,746 ****
      {
          post("packOSC_sendbuffer() called but buffer not ready!, not exiting");
!         return;	//{{raf}}
      }
      length = OSC_packetSize(x->x_oscbuf);
!     buf = OSC_getPacket(x->x_oscbuf);
  #ifdef DEBUG
      post ("packOSC_sendbuffer: length: %lu", length);
  #endif
      /* convert the bytes in the buffer to floats in a list */
!     for (i = 0; i < length; ++i) SETFLOAT(&x->x_osclist[i], buf[i]);
      /* send the list out the outlet */
!     outlet_list(x->x_listout, &s_list, length, x->x_osclist);
  }
  
--- 757,771 ----
      {
          post("packOSC_sendbuffer() called but buffer not ready!, not exiting");
!         return;
      }
      length = OSC_packetSize(x->x_oscbuf);
!     buf = (unsigned char *)OSC_getPacket(x->x_oscbuf);
  #ifdef DEBUG
      post ("packOSC_sendbuffer: length: %lu", length);
  #endif
      /* convert the bytes in the buffer to floats in a list */
!     for (i = 0; i < length; ++i) SETFLOAT(&x->x_bufferForOSClist[i], buf[i]);
      /* send the list out the outlet */
!     outlet_list(x->x_listout, &s_list, length, x->x_bufferForOSClist);
  }
  
***************
*** 982,985 ****
--- 1007,1011 ----
      int4byte paddedLength;
  
+     if (buf == NULL) return 10;
      if (CheckTypeTag(buf, '\0')) return 9;
  
***************
*** 1107,1111 ****
  {
      int len = OSC_strlen(string) + 1;  /* We need space for the null char. */
!     
      /* Round up len to next multiple of STRING_ALIGN_PAD to account for alignment padding */
      if ((len % STRING_ALIGN_PAD) != 0)
--- 1133,1137 ----
  {
      int len = OSC_strlen(string) + 1;  /* We need space for the null char. */
! 
      /* Round up len to next multiple of STRING_ALIGN_PAD to account for alignment padding */
      if ((len % STRING_ALIGN_PAD) != 0)
***************
*** 1119,1125 ****
  {
      int i;
!     
      for (i = 0; str[i] != '\0'; i++) dest[i] = str[i];
!     
      return OSC_WritePadding(dest, i);
  }
--- 1145,1151 ----
  {
      int i;
! 
      for (i = 0; str[i] != '\0'; i++) dest[i] = str[i];
! 
      return OSC_WritePadding(dest, i);
  }
***************
*** 1128,1132 ****
  {
      int i;
!     
      dest[0] = ',';
      for (i = 0; str[i] != '\0'; i++) dest[i+1] = str[i];
--- 1154,1158 ----
  {
      int i;
! 
      dest[0] = ',';
      for (i = 0; str[i] != '\0'; i++) dest[i+1] = str[i];





More information about the Pd-cvs mailing list