fifo

Feb 19, 2009 at 10:43am

fifo

Hello

I install codeblocs on MaxMsp 4.56 on pc but how to compile this on pc: this code is for macintosh in first, and how do you compile same object for mac and pc.

/* ——–fifo.c———– */
// created 17/3/95
// modified 12/4/96

/* a fifo buffer filled with longs
and empties itself on every bang (in order of coming in)
*/

// copyright St. Rainstick, Amsterdam 1995
// any changes to the source must be sent to:
// St. Rainstick
// Herenmarkt 12
// 1012 ED Amsterdam
// rainstick@xs4all.nl

// *********************************************************************************

#include “ext.h”
#include
#include “typedefs.h”

fptr *FNS;

typedef struct fifo
{
struct object d_ob;
long *getal;
long count, end, size;
void *out;

}Fifo;

void *fifo_new();
void *fifo_int();
void *fifo_bang();
void *fifo_free();
void *class;

main(f)
fptr *f;
{

RememberA0();
SetUpA4();
FNS = f;

setup(&class, fifo_new, fifo_free, (short)sizeof(Fifo), 0L, A_DEFLONG,0);
addbang(fifo_bang);
addint(fifo_int);
RestoreA4();
}

void *fifo_int(x,n)
struct fifo *x;
long n;
{
register i;

SetUpA4();
x->getal[x->count] = n;
x->count = (x->count + 1) % x->size;
RestoreA4();
}

void *fifo_bang(x)
struct fifo *x;
{
register i;

SetUpA4();
if (x->end != x->count){
outlet_int(x->out,x->getal[x->end]);
x->end = (x->end + 1) % x->size;
}
RestoreA4();
}

void *fifo_free(x)
struct fifo *x;
{
SetUpA4();
DisposPtr((Ptr)(x->getal));
RestoreA4();
}

void *fifo_new(n)
long n;
{

struct fifo *x;

SetUpA4();
x = (struct fifo *)newobject(class);
if (n<10) n = 10;
x->size = n;
x->end = 0;
x->count = 0;
x->getal = (long *)NewPtr(n * 4);
x->out = intout(x);

RestoreA4();
return (x);
}

#42391
Feb 19, 2009 at 6:26pm

This code is ancient. Get an up to date copy of the SDK.

The references to fptr, and all the A4-world stuff — SetupA4(), RestoreA4(), etc — have not been used since about 1995. This is seriously dead code you’re working with.

#151735
Feb 23, 2009 at 1:21pm

OK, here’s a more concrete answer:

Delete the line:

#include 

Delete the line:

fptr *FNS;

Delete all occurrences of any of the following statements:

  • RememberA0();
  • SetUpA4();
  • RestoreA4();

    While you’re at it, edit all function definitions to use ANSI C syntax. So, for instance, replace:

    void *fifo_int(x,n)
    struct fifo *x;
    long n;
    {

    with:

    void *fifo_int(Fifo* x, long n)
    {

    Rewrite main as follows

    void main(void)
      {
      setup((t_messlist*) &class,
            (method) fifo_new,
            (method) fifo_free,
            sizeof(Fifo), 0L, A_DEFLONG, 0);
      addbang(fifo_bang);
      addint(fifo_int);
      }

    Note the explicit typecasts, which will be necessary with a modern compiler. OTOH, since functions are now prototyped, you don’t need to typecast sizeof(Fifo).

    Some compilers will complain about main() not returning int. This is a harmless warning, although you can apparently safely define main to return int and end the function with a return 0; statement if that makes you happier.

    That should be about everything.

    Don’t forget to read the SDK documentation to understand what you’re doing.

    Hope this helps —- P.

#151736

You must be logged in to reply to this topic.