fifo

mortimer59's icon

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
    x->size = n;
    x->end = 0;
    x->count = 0;
    x->getal = (long *)NewPtr(n * 4);
    x->out = intout(x);

    RestoreA4();
    return (x);
}

Peter Castine's icon

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.

Peter Castine's icon

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.