Fix some greedy sed changes in imported code. Also provide a sys/types.h for compatib...
[kugel-rb.git] / apps / plugins / pdbox / PDa / src / m_pd.h
blobefd5cf13c558e89003e712ee7958fe565bd64442
1 /* Copyright (c) 1997-1999 Miller Puckette.
2 * For information on usage and redistribution, and for a DISCLAIMER OF ALL
3 * WARRANTIES, see the file, "LICENSE.txt," in this distribution. */
5 #ifndef __m_pd_h_
7 #if defined(_LANGUAGE_C_PLUS_PLUS) || defined(__cplusplus)
8 extern "C" {
9 #endif
11 #define PD_VERSION 0.37 /* oops, don't use this... */ */
12 #define PD_MAJOR_VERSION 0 /* ... use these two instead. */
13 #define PD_MINOR_VERSION 37
15 /* old name for "MSW" flag -- we have to take it for the sake of many old
16 "nmakefiles" for externs, which will define NT and not MSW */
17 #if defined(NT) && !defined(MSW)
18 #define MSW
19 #endif
21 #ifdef MSW
22 // #pragma warning( disable : 4091 )
23 #pragma warning( disable : 4305 ) /* uncast const double to float */
24 #pragma warning( disable : 4244 ) /* uncast float/int conversion etc. */
25 #pragma warning( disable : 4101 ) /* unused automatic variables */
26 #endif /* MSW */
28 /* the external storage class is "extern" in UNIX; in MSW it's ugly. */
29 #ifdef MSW
30 #ifdef PD_INTERNAL
31 #define EXTERN __declspec(dllexport) extern
32 #else
33 #define EXTERN __declspec(dllimport) extern
34 #endif /* PD_INTERNAL */
35 #else
36 #define EXTERN extern
37 #endif /* MSW */
39 /* and depending on the compiler, hidden data structures are
40 declared differently: */
41 #if defined( __GNUC__) || defined( __BORLANDC__ ) || defined( __MWERKS__ )
42 #define EXTERN_STRUCT struct
43 #else
44 #define EXTERN_STRUCT extern struct
45 #endif
48 #if !defined(_SIZE_T) && !defined(_SIZE_T_)
49 #include <stddef.h> /* just for size_t -- how lame! */
50 #endif
52 #ifdef ROCKBOX
53 #include <inttypes.h>
54 #endif
56 #define MAXPDSTRING 1000 /* use this for anything you want */
57 #define MAXPDARG 5 /* max number of args we can typecheck today */
59 /* signed and unsigned integer types the size of a pointer: */
60 #ifdef ROCKBOX
61 typedef intptr_t t_int;
62 #else /* ROCKBOX */
63 #ifdef __alpha__
64 typedef long t_int;
65 #else
66 typedef int t_int;
67 #endif
68 #endif /* ROCKBOX */
70 typedef float t_float; /* a floating-point number at most the same size */
71 typedef float t_floatarg; /* floating-point type for function calls */
73 typedef struct _symbol
75 char *s_name;
76 struct _class **s_thing;
77 struct _symbol *s_next;
78 } t_symbol;
80 EXTERN_STRUCT _array;
81 #define t_array struct _array /* g_canvas.h */
83 /* pointers to glist and array elements go through a "stub" which sticks
84 around after the glist or array is freed. The stub itself is deleted when
85 both the glist/array is gone and the refcount is zero, ensuring that no
86 gpointers are pointing here. */
88 #define GP_NONE 0 /* the stub points nowhere (has been cut off) */
89 #define GP_GLIST 1 /* the stub points to a glist element */
90 #define GP_ARRAY 2 /* ... or array */
92 typedef struct _gstub
94 union
96 struct _glist *gs_glist; /* glist we're in */
97 struct _array *gs_array; /* array we're in */
98 } gs_un;
99 int gs_which; /* GP_GLIST/GP_ARRAY */
100 int gs_refcount; /* number of gpointers pointing here */
101 } t_gstub;
103 typedef struct _gpointer /* pointer to a gobj in a glist */
105 union
107 struct _scalar *gp_scalar; /* scalar we're in (if glist) */
108 union word *gp_w; /* raw data (if array) */
109 } gp_un;
110 int gp_valid; /* number which must match gpointee */
111 t_gstub *gp_stub; /* stub which points to glist/array */
112 } t_gpointer;
114 typedef union word
116 t_float w_float;
117 t_symbol *w_symbol;
118 t_gpointer *w_gpointer;
119 t_array *w_array;
120 struct _glist *w_list;
121 int w_index;
122 } t_word;
124 typedef enum
126 A_NULL,
127 A_FLOAT,
128 A_SYMBOL,
129 A_POINTER,
130 A_SEMI,
131 A_COMMA,
132 A_DEFFLOAT,
133 A_DEFSYM,
134 A_DOLLAR,
135 A_DOLLSYM,
136 A_GIMME,
137 A_CANT
138 } t_atomtype;
140 #define A_DEFSYMBOL A_DEFSYM /* better name for this */
142 typedef struct _atom
144 t_atomtype a_type;
145 union word a_w;
146 } t_atom;
148 EXTERN_STRUCT _class;
149 #define t_class struct _class
151 EXTERN_STRUCT _outlet;
152 #define t_outlet struct _outlet
154 EXTERN_STRUCT _inlet;
155 #define t_inlet struct _inlet
157 EXTERN_STRUCT _binbuf;
158 #define t_binbuf struct _binbuf
160 EXTERN_STRUCT _clock;
161 #define t_clock struct _clock
163 EXTERN_STRUCT _outconnect;
164 #define t_outconnect struct _outconnect
166 EXTERN_STRUCT _glist;
167 #define t_glist struct _glist
168 #define t_canvas struct _glist /* LATER lose this */
170 typedef t_class *t_pd; /* pure datum: nothing but a class pointer */
172 typedef struct _gobj /* a graphical object */
174 t_pd g_pd; /* pure datum header (class) */
175 struct _gobj *g_next; /* next in list */
176 } t_gobj;
178 typedef struct _scalar /* a graphical object holding data */
180 t_gobj sc_gobj; /* header for graphical object */
181 t_symbol *sc_template; /* template name (LATER replace with pointer) */
182 t_word sc_vec[1]; /* indeterminate-length array of words */
183 } t_scalar;
185 typedef struct _text /* patchable object - graphical, with text */
187 t_gobj te_g; /* header for graphical object */
188 t_binbuf *te_binbuf; /* holder for the text */
189 t_outlet *te_outlet; /* linked list of outlets */
190 t_inlet *te_inlet; /* linked list of inlets */
191 short te_xpix; /* x&y location (within the toplevel) */
192 short te_ypix;
193 short te_width; /* requested width in chars, 0 if auto */
194 unsigned int te_type:2; /* from defs below */
195 } t_text;
197 #define T_TEXT 0 /* just a textual comment */
198 #define T_OBJECT 1 /* a MAX style patchable object */
199 #define T_MESSAGE 2 /* a MAX stype message */
200 #define T_ATOM 3 /* a cell to display a number or symbol */
202 #define te_pd te_g.g_pd
204 /* t_object is synonym for t_text (LATER unify them) */
206 typedef struct _text t_object;
208 #define ob_outlet te_outlet
209 #define ob_inlet te_inlet
210 #define ob_binbuf te_binbuf
211 #define ob_pd te_g.g_pd
212 #define ob_g te_g
214 typedef void (*t_method)(void);
215 typedef void *(*t_newmethod)( void);
216 typedef void (*t_gotfn)(void *x, ...);
218 /* ---------------- pre-defined objects and symbols --------------*/
219 EXTERN t_pd pd_objectmaker; /* factory for creating "object" boxes */
220 EXTERN t_pd pd_canvasmaker; /* factory for creating canvases */
221 EXTERN t_symbol s_pointer;
222 EXTERN t_symbol s_float;
223 EXTERN t_symbol s_symbol;
224 EXTERN t_symbol s_bang;
225 EXTERN t_symbol s_list;
226 EXTERN t_symbol s_anything;
227 EXTERN t_symbol s_signal;
228 EXTERN t_symbol s__N;
229 EXTERN t_symbol s__X;
230 EXTERN t_symbol s_x;
231 EXTERN t_symbol s_y;
232 EXTERN t_symbol s_;
234 /* --------- prototypes from the central message system ----------- */
235 EXTERN void pd_typedmess(t_pd *x, t_symbol *s, int argc, t_atom *argv);
236 EXTERN void pd_forwardmess(t_pd *x, int argc, t_atom *argv);
237 EXTERN t_symbol *gensym(char *s);
238 EXTERN t_gotfn getfn(t_pd *x, t_symbol *s);
239 EXTERN t_gotfn zgetfn(t_pd *x, t_symbol *s);
240 EXTERN void nullfn(void);
241 EXTERN void pd_vmess(t_pd *x, t_symbol *s, char *fmt, ...);
242 #define mess0(x, s) ((*getfn((x), (s)))((x)))
243 #define mess1(x, s, a) ((*getfn((x), (s)))((x), (a)))
244 #define mess2(x, s, a,b) ((*getfn((x), (s)))((x), (a),(b)))
245 #define mess3(x, s, a,b,c) ((*getfn((x), (s)))((x), (a),(b),(c)))
246 #define mess4(x, s, a,b,c,d) ((*getfn((x), (s)))((x), (a),(b),(c),(d)))
247 #define mess5(x, s, a,b,c,d,e) ((*getfn((x), (s)))((x), (a),(b),(c),(d),(e)))
248 EXTERN void obj_list(t_object *x, t_symbol *s, int argc, t_atom *argv);
249 EXTERN t_pd *pd_newest(void);
251 /* --------------- memory management -------------------- */
252 EXTERN void *getbytes(size_t nbytes);
253 EXTERN void *getzbytes(size_t nbytes);
254 EXTERN void *copybytes(void *src, size_t nbytes);
255 EXTERN void freebytes(void *x, size_t nbytes);
256 EXTERN void *resizebytes(void *x, size_t oldsize, size_t newsize);
258 /* -------------------- atoms ----------------------------- */
260 #define SETSEMI(atom) ((atom)->a_type = A_SEMI, (atom)->a_w.w_index = 0)
261 #define SETCOMMA(atom) ((atom)->a_type = A_COMMA, (atom)->a_w.w_index = 0)
262 #define SETPOINTER(atom, gp) ((atom)->a_type = A_POINTER, \
263 (atom)->a_w.w_gpointer = (gp))
264 #define SETFLOAT(atom, f) ((atom)->a_type = A_FLOAT, (atom)->a_w.w_float = (f))
265 #define SETSYMBOL(atom, s) ((atom)->a_type = A_SYMBOL, \
266 (atom)->a_w.w_symbol = (s))
267 #define SETDOLLAR(atom, n) ((atom)->a_type = A_DOLLAR, \
268 (atom)->a_w.w_index = (n))
269 #define SETDOLLSYM(atom, s) ((atom)->a_type = A_DOLLSYM, \
270 (atom)->a_w.w_symbol= (s))
272 EXTERN t_float atom_getfloat(t_atom *a);
273 EXTERN t_int atom_getint(t_atom *a);
274 EXTERN t_symbol *atom_getsymbol(t_atom *a);
275 EXTERN t_symbol *atom_gensym(t_atom *a);
276 EXTERN t_float atom_getfloatarg(int which, int argc, t_atom *argv);
277 EXTERN t_int atom_getintarg(int which, int argc, t_atom *argv);
278 EXTERN t_symbol *atom_getsymbolarg(int which, int argc, t_atom *argv);
280 EXTERN void atom_string(t_atom *a, char *buf, unsigned int bufsize);
282 /* ------------------ binbufs --------------- */
284 EXTERN t_binbuf *binbuf_new(void);
285 EXTERN void binbuf_free(t_binbuf *x);
286 EXTERN t_binbuf *binbuf_duplicate(t_binbuf *y);
288 EXTERN void binbuf_text(t_binbuf *x, char *text, size_t size);
289 EXTERN void binbuf_gettext(t_binbuf *x, char **bufp, int *lengthp);
290 EXTERN void binbuf_clear(t_binbuf *x);
291 EXTERN void binbuf_add(t_binbuf *x, int argc, t_atom *argv);
292 EXTERN void binbuf_addv(t_binbuf *x, char *fmt, ...);
293 EXTERN void binbuf_addbinbuf(t_binbuf *x, t_binbuf *y);
294 EXTERN void binbuf_addsemi(t_binbuf *x);
295 EXTERN void binbuf_restore(t_binbuf *x, int argc, t_atom *argv);
296 EXTERN void binbuf_print(t_binbuf *x);
297 EXTERN int binbuf_getnatom(t_binbuf *x);
298 EXTERN t_atom *binbuf_getvec(t_binbuf *x);
299 EXTERN void binbuf_eval(t_binbuf *x, t_pd *target, int argc, t_atom *argv);
300 EXTERN int binbuf_read(t_binbuf *b, char *filename, char *dirname,
301 int crflag);
302 EXTERN int binbuf_read_via_path(t_binbuf *b, char *filename, char *dirname,
303 int crflag);
304 EXTERN int binbuf_write(t_binbuf *x, char *filename, char *dir,
305 int crflag);
306 EXTERN void binbuf_evalfile(t_symbol *name, t_symbol *dir);
307 EXTERN t_symbol *binbuf_realizedollsym(t_symbol *s, int ac, t_atom *av,
308 int tonew);
310 /* ------------------ clocks --------------- */
312 typedef long long t_time;
313 EXTERN t_clock *clock_new(void *owner, t_method fn);
314 EXTERN void clock_set(t_clock *x, t_time systime);
315 EXTERN void clock_delay(t_clock *x, t_time delaytime);
316 EXTERN void clock_unset(t_clock *x);
317 EXTERN t_time clock_getlogicaltime(void);
318 EXTERN t_time clock_getsystime(void); /* OBSOLETE; use clock_getlogicaltime() */
319 EXTERN t_time clock_gettimesince(t_time prevsystime);
320 EXTERN t_time clock_getsystimeafter(t_time delaytime);
321 EXTERN void clock_free(t_clock *x);
323 /* ----------------- pure data ---------------- */
324 EXTERN t_pd *pd_new(t_class *cls);
325 EXTERN void pd_free(t_pd *x);
326 EXTERN void pd_bind(t_pd *x, t_symbol *s);
327 EXTERN void pd_unbind(t_pd *x, t_symbol *s);
328 EXTERN t_pd *pd_findbyclass(t_symbol *s, t_class *c);
329 EXTERN void pd_pushsym(t_pd *x);
330 EXTERN void pd_popsym(t_pd *x);
331 EXTERN t_symbol *pd_getfilename(void);
332 EXTERN t_symbol *pd_getdirname(void);
333 EXTERN void pd_bang(t_pd *x);
334 EXTERN void pd_pointer(t_pd *x, t_gpointer *gp);
335 EXTERN void pd_float(t_pd *x, t_float f);
336 EXTERN void pd_symbol(t_pd *x, t_symbol *s);
337 EXTERN void pd_list(t_pd *x, t_symbol *s, int argc, t_atom *argv);
338 EXTERN void pd_anything(t_pd *x, t_symbol *s, int argc, t_atom *argv);
339 #define pd_class(x) (*(x))
341 /* ----------------- pointers ---------------- */
342 EXTERN void gpointer_init(t_gpointer *gp);
343 EXTERN void gpointer_copy(const t_gpointer *gpfrom, t_gpointer *gpto);
344 EXTERN void gpointer_unset(t_gpointer *gp);
345 EXTERN int gpointer_check(const t_gpointer *gp, int headok);
347 /* ----------------- patchable "objects" -------------- */
348 EXTERN_STRUCT _inlet;
349 #define t_inlet struct _inlet
350 EXTERN_STRUCT _outlet;
351 #define t_outlet struct _outlet
353 EXTERN t_inlet *inlet_new(t_object *owner, t_pd *dest, t_symbol *s1,
354 t_symbol *s2);
355 EXTERN t_inlet *pointerinlet_new(t_object *owner, t_gpointer *gp);
356 EXTERN t_inlet *floatinlet_new(t_object *owner, t_float *fp);
357 EXTERN t_inlet *symbolinlet_new(t_object *owner, t_symbol **sp);
358 EXTERN void inlet_free(t_inlet *x);
360 EXTERN t_outlet *outlet_new(t_object *owner, t_symbol *s);
361 EXTERN void outlet_bang(t_outlet *x);
362 EXTERN void outlet_pointer(t_outlet *x, t_gpointer *gp);
363 EXTERN void outlet_float(t_outlet *x, t_float f);
364 EXTERN void outlet_symbol(t_outlet *x, t_symbol *s);
365 EXTERN void outlet_list(t_outlet *x, t_symbol *s, int argc, t_atom *argv);
366 EXTERN void outlet_anything(t_outlet *x, t_symbol *s, int argc, t_atom *argv);
367 EXTERN t_symbol *outlet_getsymbol(t_outlet *x);
368 EXTERN void outlet_free(t_outlet *x);
369 EXTERN t_object *pd_checkobject(t_pd *x);
372 /* -------------------- canvases -------------- */
374 EXTERN void glob_setfilename(void *dummy, t_symbol *name, t_symbol *dir);
376 EXTERN void canvas_setargs(int argc, t_atom *argv);
377 EXTERN void canvas_getargs(int *argcp, t_atom **argvp);
378 EXTERN t_symbol *canvas_getcurrentdir(void);
379 EXTERN t_glist *canvas_getcurrent(void);
380 EXTERN void canvas_makefilename(t_glist *c, char *file,
381 char *result,int resultsize);
382 EXTERN t_symbol *canvas_getdir(t_glist *x);
383 EXTERN int sys_fontwidth(int fontsize);
384 EXTERN int sys_fontheight(int fontsize);
385 EXTERN void canvas_dataproperties(t_glist *x, t_scalar *sc, t_binbuf *b);
387 /* ---------------- widget behaviors ---------------------- */
389 EXTERN_STRUCT _widgetbehavior;
390 #define t_widgetbehavior struct _widgetbehavior
392 EXTERN_STRUCT _parentwidgetbehavior;
393 #define t_parentwidgetbehavior struct _parentwidgetbehavior
394 EXTERN t_parentwidgetbehavior *pd_getparentwidget(t_pd *x);
396 /* -------------------- classes -------------- */
398 #define CLASS_DEFAULT 0 /* flags for new classes below */
399 #define CLASS_PD 1
400 #define CLASS_GOBJ 2
401 #define CLASS_PATCHABLE 3
402 #define CLASS_NOINLET 8
404 #define CLASS_TYPEMASK 3
407 EXTERN t_class *class_new(t_symbol *name, t_newmethod newmethod,
408 t_method freemethod, size_t size, int flags, t_atomtype arg1, ...);
409 EXTERN void class_addcreator(t_newmethod newmethod, t_symbol *s,
410 t_atomtype type1, ...);
411 EXTERN void class_addmethod(t_class *c, t_method fn, t_symbol *sel,
412 t_atomtype arg1, ...);
413 EXTERN void class_addbang(t_class *c, t_method fn);
414 EXTERN void class_addpointer(t_class *c, t_method fn);
415 EXTERN void class_doaddfloat(t_class *c, t_method fn);
416 EXTERN void class_addsymbol(t_class *c, t_method fn);
417 EXTERN void class_addlist(t_class *c, t_method fn);
418 EXTERN void class_addanything(t_class *c, t_method fn);
419 EXTERN void class_sethelpsymbol(t_class *c, t_symbol *s);
420 EXTERN void class_setwidget(t_class *c, t_widgetbehavior *w);
421 EXTERN void class_setparentwidget(t_class *c, t_parentwidgetbehavior *w);
422 EXTERN t_parentwidgetbehavior *class_parentwidget(t_class *c);
423 EXTERN char *class_getname(t_class *c);
424 EXTERN char *class_gethelpname(t_class *c);
425 EXTERN void class_setdrawcommand(t_class *c);
426 EXTERN int class_isdrawcommand(t_class *c);
427 EXTERN void class_domainsignalin(t_class *c, int onset);
428 #define CLASS_MAINSIGNALIN(c, type, field) \
429 class_domainsignalin(c, (char *)(&((type *)0)->field) - (char *)0)
431 /* prototype for functions to save Pd's to a binbuf */
432 typedef void (*t_savefn)(t_gobj *x, t_binbuf *b);
433 EXTERN void class_setsavefn(t_class *c, t_savefn f);
434 EXTERN t_savefn class_getsavefn(t_class *c);
435 /* prototype for functions to open properties dialogs */
436 typedef void (*t_propertiesfn)(t_gobj *x, struct _glist *glist);
437 EXTERN void class_setpropertiesfn(t_class *c, t_propertiesfn f);
438 EXTERN t_propertiesfn class_getpropertiesfn(t_class *c);
440 #ifndef PD_CLASS_DEF
441 #define class_addbang(x, y) class_addbang((x), (t_method)(y))
442 #define class_addpointer(x, y) class_addpointer((x), (t_method)(y))
443 #define class_addfloat(x, y) class_doaddfloat((x), (t_method)(y))
444 #define class_addsymbol(x, y) class_addsymbol((x), (t_method)(y))
445 #define class_addlist(x, y) class_addlist((x), (t_method)(y))
446 #define class_addanything(x, y) class_addanything((x), (t_method)(y))
447 #endif
449 /* ------------ printing --------------------------------- */
450 EXTERN void post(char *fmt, ...);
451 EXTERN void startpost(char *fmt, ...);
452 EXTERN void poststring(char *s);
453 EXTERN void postfloat(float f);
454 EXTERN void postatom(int argc, t_atom *argv);
455 EXTERN void endpost(void);
456 EXTERN void error(char *fmt, ...);
457 EXTERN void bug(char *fmt, ...);
458 EXTERN void pd_error(void *object, char *fmt, ...);
459 EXTERN void sys_logerror(char *object, char *s);
460 EXTERN void sys_unixerror(char *object);
461 EXTERN void sys_ouch(void);
463 #ifdef __linux__
464 EXTERN char* sys_get_path( void);
465 #endif
466 EXTERN void sys_addpath(const char* p);
469 /* ------------ system interface routines ------------------- */
470 EXTERN int sys_isreadablefile(const char *name);
471 EXTERN void sys_bashfilename(const char *from, char *to);
472 EXTERN void sys_unbashfilename(const char *from, char *to);
473 EXTERN int open_via_path(const char *name, const char *ext, const char *dir,
474 char *dirresult, char **nameresult, unsigned int size, int bin);
475 EXTERN int sched_geteventno(void);
476 EXTERN t_time sys_getrealtime(void);
479 /* ------------ threading ------------------- */
480 /* T.Grill - see m_sched.c */
482 EXTERN void sys_lock(void);
483 EXTERN void sys_unlock(void);
484 EXTERN int sys_trylock(void);
487 /* --------------- signals ----------------------------------- */
489 #define MAXLOGSIG 32
490 #define MAXSIGSIZE (1 << MAXLOGSIG)
491 #ifndef FIXEDPOINT
492 typedef float t_sample;
493 #else
494 #include "m_fixed.h"
495 #endif
498 typedef struct _signal
500 int s_n; /* number of points in the array */
501 t_sample *s_vec; /* the array */
502 float s_sr; /* sample rate */
503 int s_refcount; /* number of times used */
504 int s_isborrowed; /* whether we're going to borrow our array */
505 struct _signal *s_borrowedfrom; /* signal to borrow it from */
506 struct _signal *s_nextfree; /* next in freelist */
507 struct _signal *s_nextused; /* next in used list */
508 } t_signal;
511 typedef t_int *(*t_perfroutine)(t_int *args);
513 EXTERN t_int *plus_perform(t_int *args);
514 EXTERN t_int *zero_perform(t_int *args);
515 EXTERN t_int *copy_perform(t_int *args);
517 EXTERN void dsp_add_plus(t_sample *in1, t_sample *in2, t_sample *out, int n);
518 EXTERN void dsp_add_copy(t_sample *in, t_sample *out, int n);
519 EXTERN void dsp_add_scalarcopy(t_sample *in, t_sample *out, int n);
520 EXTERN void dsp_add_zero(t_sample *out, int n);
522 EXTERN int sys_getblksize(void);
523 EXTERN float sys_getsr(void);
524 EXTERN int sys_get_inchannels(void);
525 EXTERN int sys_get_outchannels(void);
527 EXTERN void dsp_add(t_perfroutine f, int n, ...);
528 EXTERN void dsp_addv(t_perfroutine f, int n, t_int *vec);
529 EXTERN void pd_fft(float *buf, int npoints, int inverse);
530 EXTERN int ilog2(int n);
532 EXTERN void mayer_fht(t_sample *fz, int n);
533 EXTERN void mayer_fft(int n, t_sample *real, t_sample *imag);
534 EXTERN void mayer_ifft(int n, t_sample *real, t_sample *imag);
535 EXTERN void mayer_realfft(int n, t_sample *real);
536 EXTERN void mayer_realifft(int n, t_sample *real);
538 //EXTERN t_sample cos_table[];
540 #define LOGCOSTABSIZE 9
541 #define COSTABSIZE (1<<LOGCOSTABSIZE)
543 EXTERN int canvas_suspend_dsp(void);
544 EXTERN void canvas_resume_dsp(int oldstate);
545 EXTERN void canvas_update_dsp(void);
547 /* IOhannes { (up/downsampling) */
548 typedef struct _resample
550 int method; /* up/downsampling method ID */
552 t_int downsample; /* downsampling factor */
553 t_int upsample; /* upsampling factor */
555 t_sample *s_vec; /* here we hold the resampled data */
556 int s_n;
558 t_sample *coeffs; /* coefficients for filtering... */
559 int coefsize;
561 t_sample *buffer; /* buffer for filtering */
562 int bufsize;
563 } t_resample;
565 EXTERN void resample_init(t_resample *x);
566 EXTERN void resample_free(t_resample *x);
568 EXTERN void resample_dsp(t_resample *x, t_sample *in, int insize, t_sample *out, int outsize, int method);
569 EXTERN void resamplefrom_dsp(t_resample *x, t_sample *in, int insize, int outsize, int method);
570 EXTERN void resampleto_dsp(t_resample *x, t_sample *out, int insize, int outsize, int method);
571 /* } IOhannes */
573 /* ----------------------- utility functions for signals -------------- */
574 EXTERN float mtof(float);
575 EXTERN float ftom(float);
576 EXTERN float rmstodb(float);
577 EXTERN float powtodb(float);
578 EXTERN float dbtorms(float);
579 EXTERN float dbtopow(float);
581 EXTERN float q8_sqrt(float);
582 EXTERN float q8_rsqrt(float);
583 #ifndef N32
584 EXTERN float qsqrt(float); /* old names kept for extern compatibility */
585 EXTERN float qrsqrt(float);
586 #endif
587 /* --------------------- data --------------------------------- */
589 /* graphical arrays */
590 EXTERN_STRUCT _garray;
591 #define t_garray struct _garray
593 EXTERN t_class *garray_class;
594 EXTERN int garray_getfloatarray(t_garray *x, int *size, t_sample **vec);
595 EXTERN float garray_get(t_garray *x, t_symbol *s, t_int indx);
596 EXTERN void garray_redraw(t_garray *x);
597 EXTERN int garray_npoints(t_garray *x);
598 EXTERN char *garray_vec(t_garray *x);
599 EXTERN void garray_resize(t_garray *x, t_floatarg f);
600 EXTERN void garray_usedindsp(t_garray *x);
601 EXTERN void garray_setsaveit(t_garray *x, int saveit);
602 EXTERN t_class *scalar_class;
604 EXTERN t_float *value_get(t_symbol *s);
605 EXTERN void value_release(t_symbol *s);
606 EXTERN int value_getfloat(t_symbol *s, t_float *f);
607 EXTERN int value_setfloat(t_symbol *s, t_float f);
609 /* ------- GUI interface - functions to send strings to TK --------- */
610 EXTERN void sys_vgui(char *fmt, ...);
611 EXTERN void sys_gui(char *s);
613 /* dialog window creation and destruction */
614 EXTERN void gfxstub_new(t_pd *owner, void *key, const char *cmd);
615 EXTERN void gfxstub_deleteforkey(void *key);
617 extern t_class *glob_pdobject; /* object to send "pd" messages */
619 /*------------- Max 0.26 compatibility --------------------*/
621 /* the following reflects the new way classes are laid out, with the class
622 pointing to the messlist and not vice versa. Externs shouldn't feel it. */
623 typedef t_class *t_externclass;
625 EXTERN void c_extern(t_externclass *cls, t_newmethod newroutine,
626 t_method freeroutine, t_symbol *name, size_t size, int tiny, \
627 t_atomtype arg1, ...);
628 EXTERN void c_addmess(t_method fn, t_symbol *sel, t_atomtype arg1, ...);
630 #define t_getbytes getbytes
631 #define t_freebytes freebytes
632 #define t_resizebytes resizebytes
633 #define typedmess pd_typedmess
634 #define vmess pd_vmess
636 /* A definition to help gui objects straddle 0.34-0.35 changes. If this is
637 defined, there is a "te_xpix" field in objects, not a "te_xpos" as before: */
639 #define PD_USE_TE_XPIX
641 #if 0
642 /* a test for NANs and denormals. Should only be necessary on i386. */
643 #define PD_BADFLOAT(f) ((((*(unsigned int*)&(f))&0x7f800000)==0) || \
644 (((*(unsigned int*)&(f))&0x7f800000)==0x7f800000))
645 /* more stringent test: anything not between 1e-19 and 1e19 in absolute val */
646 #define PD_BIGORSMALL(f) ((((*(unsigned int*)&(f))&0x60000000)==0) || \
647 (((*(unsigned int*)&(f))&0x60000000)==0x60000000))
648 #else
649 #define PD_BADFLOAT(f) 0
650 #define PD_BIGORSMALL(f) 0
651 #endif
653 #if defined(_LANGUAGE_C_PLUS_PLUS) || defined(__cplusplus)
655 #endif
657 #define __m_pd_h_
658 #endif /* __m_pd_h_ */