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