diff options
Diffstat (limited to 'desiredata/src/desire.h')
-rw-r--r-- | desiredata/src/desire.h | 686 |
1 files changed, 0 insertions, 686 deletions
diff --git a/desiredata/src/desire.h b/desiredata/src/desire.h deleted file mode 100644 index 0be0c00d..00000000 --- a/desiredata/src/desire.h +++ /dev/null @@ -1,686 +0,0 @@ -/* - This file is part of PureData - Copyright 2004-2006 by Mathieu Bouchard - Copyright 2000-2001 IEM KUG Graz Austria (Thomas Musil) - Copyright (c) 1997-1999 Miller Puckette. - For information on usage and redistribution, and for a DISCLAIMER OF ALL - WARRANTIES, see the file, "LICENSE.txt", in this distribution. - - this file declares the C interface for the second half of DesireData. - this is where most of the differences between DesireData and PureData lie. - - SYNONYMS: - 1. glist = graph = canvas = patcher; those were not always synonymous. - however, graph sometimes means a canvas that is displaying an array. - 2. outconnect = connection = patchcord = wire - - canvases have a few flags that determine their appearance: - gl_havewindow: should open its own window (only if mapped? or...) - gl_isgraph: the GOP flag: show as graph-on-parent, vs TextBox. - gl_owner==0: it's a root canvas, should be in canvas_list. - In this case "gl_havewindow" is always set. - - canvas_list is a list of root windows only, which can be traversed using canvases_each. - - If a canvas has a window it may still not be "mapped." Miniaturized - windows aren't mapped, for example, but a window is also not mapped - immediately upon creation. In either case gl_havewindow is true but - gl_mapped is false. - - Closing a non-root window makes it invisible; closing a root destroys it. - A canvas that's just a text object on its parent is always "toplevel." An - embedded canvas can switch back and forth to appear as a toplevel by double- - clicking on it. Single-clicking a text box makes the toplevel become visible - and raises the window it's in. - - If a canvas shows up as a graph on its parent, the graph is blanked while the - canvas has its own window, even if miniaturized. -*/ - -#ifndef DESIRE -#define DESIRE 1 -#endif -#ifndef __DESIRE_H -#define __DESIRE_H - -#include "m_pd.h" -#include <stdio.h> - -#if defined(_LANGUAGE_C_PLUS_PLUS) || defined(__cplusplus) -extern "C" { -#endif - -/* ----------------------- START OF FORMER S_STUFF ----------------------------- */ - -/* from s_path.c */ - -typedef struct _namelist { /* element in a linked list of stored strings */ - struct _namelist *nl_next; /* next in list */ - char *nl_string; /* the string */ -} t_namelist; - -t_namelist *namelist_append(t_namelist *listwas, const char *s, int allowdup); -t_namelist *namelist_append_files(t_namelist *listwas, const char *s); -void namelist_free(t_namelist *listwas); -char *namelist_get(t_namelist *namelist, int n); -void sys_setextrapath(const char *p); -extern int sys_usestdpath; -extern t_namelist *sys_externlist; -extern t_namelist *sys_searchpath; -extern t_namelist *sys_helppath; - -// IOhannes : added namespace support for libraries -// the define QUALIFIED_NAME both turns on namespaces and sets the library-object delimiter -#define QUALIFIED_NAME "/" -#ifdef QUALIFIED_NAME -void pd_set_library_name(char *libname); -#endif - -int sys_open_absolute( const char *name, const char* ext, char **dirresult, char **nameresult, int bin, int *fdp); -int sys_trytoopenone(const char *dir, const char *name, const char* ext, char **dirresult, char **nameresult, int bin); - -/* s_main.c */ -extern int sys_debuglevel; -extern int sys_verbose; -extern int sys_noloadbang; -extern int sys_nogui; -extern char *sys_guicmd; -extern int sys_tooltips; -extern int sys_defeatrt; -extern t_symbol *sys_flags; -extern t_symbol *sys_libdir; /* library directory for auxilliary files */ - -/* s_loader.c */ -int sys_load_lib(t_canvas *canvas, char *filename); - -/* s_audio.c */ -#define SENDDACS_NO 0 /* return values for sys_send_dacs() */ -#define SENDDACS_YES 1 -#define SENDDACS_SLEPT 2 -#define DEFDACBLKSIZE 64 /* the default dac~blocksize */ -extern int sys_dacblocksize; /* the real dac~blocksize */ -extern int sys_schedblocksize; /* audio block size for scheduler */ -extern int sys_hipriority; /* real-time flag, true if priority boosted */ -extern t_sample *sys_soundout; -extern t_sample *sys_soundin; -extern int sys_inchannels; -extern int sys_outchannels; -extern int sys_advance_samples; /* scheduler advance in samples */ -extern int sys_blocksize; /* audio I/O block size in sample frames */ -extern float sys_dacsr; -extern int sys_schedadvance; -extern int sys_sleepgrain; -extern int sys_callbackscheduler; /* tb: scheduler to use (0: traditional, 1: callback) */ -void sys_open_audio( -int naudioindev, int * audioindev, int nchindev, int * chindev, -int naudiooutdev, int *audiooutdev, int nchoutdev, int *choutdev, -int srate, int dacblocksize, int advance, int schedmode, int enable); -void sys_reopen_audio(void); -void sys_close_audio(void); -int sys_send_dacs(void); -void sys_set_priority(int higher); -void sys_audiobuf(int nbufs); -void sys_getmeters(float *inmax, float *outmax); -void sys_listdevs(void); -void sys_setblocksize(int n); -void sys_update_sleepgrain(void); //tb - -/* s_midi.c */ -#define MAXMIDIINDEV 16 /* max. number of input ports */ -#define MAXMIDIOUTDEV 16 /* max. number of output ports */ -extern int sys_nmidiin; -extern int sys_nmidiout; -extern int sys_midiindevlist[]; -extern int sys_midioutdevlist[]; -void sys_open_midi(int nmidiin, int *midiinvec, int nmidiout, int *midioutvec, int enable); -void sys_get_midi_params(int *pnmidiindev, int *pmidiindev, int *pnmidioutdev, int *pmidioutdev); -void sys_get_midi_apis(char *buf); -void sys_reopen_midi( void); -void sys_close_midi( void); -EXTERN void sys_putmidimess(int portno, int a, int b, int c); -EXTERN void sys_putmidibyte(int portno, int a); -EXTERN void sys_poll_midi(void); -EXTERN void sys_setmiditimediff(double inbuftime, double outbuftime); -EXTERN void sys_midibytein(int portno, int byte); -/* implemented in the system dependent MIDI code (s_midi_pm.c, etc.) */ -void midi_getdevs(char *indevlist, int *nindevs, char *outdevlist, int *noutdevs, int maxndev, int devdescsize); -void sys_do_open_midi(int nmidiindev, int *midiindev, int nmidioutdev, int *midioutdev); - -#ifdef USEAPI_ALSA -EXTERN void sys_alsa_putmidimess(int portno, int a, int b, int c); -EXTERN void sys_alsa_putmidibyte(int portno, int a); -EXTERN void sys_alsa_poll_midi(void); -EXTERN void sys_alsa_setmiditimediff(double inbuftime, double outbuftime); -EXTERN void sys_alsa_midibytein(int portno, int byte); -EXTERN void sys_alsa_close_midi( void); -/* implemented in the system dependent MIDI code (s_midi_pm.c, etc. ) */ -void midi_alsa_getdevs(char *indevlist, int *nindevs, char *outdevlist, int *noutdevs, int maxndev, int devdescsize); -void sys_alsa_do_open_midi(int nmidiindev, int *midiindev, int nmidioutdev, int *midioutdev); -#endif - -/* m_sched.c */ -EXTERN void sys_log_error(int type); -#define ERR_NOTHING 0 -#define ERR_ADCSLEPT 1 -#define ERR_DACSLEPT 2 -#define ERR_RESYNC 3 -#define ERR_DATALATE 4 -#define ERR_XRUN 5 -#define ERR_SYSLOCK 6 -void sched_set_using_dacs(int flag); -void sys_setscheduler(int scheduler); //tb -int sys_getscheduler(void); //tb - -/* s_inter.c */ -EXTERN void sys_microsleep(int microsec); -EXTERN void sys_bail(int exitcode); -EXTERN int sys_pollgui(void); -typedef void (*t_socketnotifier)(void *x); -typedef void (*t_socketreceivefn)(void *x, t_binbuf *b); - -typedef struct _socketreceiver { - char *inbuf; - int inhead; - int intail; - void *owner; - int udp; - t_socketnotifier notifier; - t_socketreceivefn socketreceivefn; -/* for sending only: */ - int fd; - struct _socketreceiver *next; - char *obuf; - int ohead, otail, osize; - int waitingforping; - int bytessincelastping; -} t_socketreceiver; - -EXTERN char pd_version[]; -EXTERN t_text *sys_netreceive; -EXTERN t_socketreceiver *sys_socketreceiver; -//EXTERN t_socketreceiver *netreceive_newest_receiver(t_text *x); - -EXTERN t_namelist *sys_externlist; -EXTERN t_namelist *sys_openlist; -EXTERN t_namelist *sys_messagelist; - -EXTERN t_socketreceiver *socketreceiver_new(t_pd *owner, int fd, - t_socketnotifier notifier, t_socketreceivefn socketreceivefn, int udp); -EXTERN void socketreceiver_read(t_socketreceiver *x, int fd); -EXTERN void sys_sockerror(const char *s); -EXTERN void sys_closesocket(int fd); - -typedef void (*t_fdpollfn)(void *ptr, int fd); -EXTERN void sys_addpollfn(int fd, t_fdpollfn fn, void *ptr); -EXTERN void sys_rmpollfn(int fd); -#ifdef UNIX -void sys_setalarm(int microsec); -void sys_setvirtualalarm(void); -#endif - -#define API_NONE 0 -#define API_ALSA 1 -#define API_OSS 2 -#define API_MMIO 3 -#define API_PORTAUDIO 4 -#define API_JACK 5 -#define API_ASIO 7 - -#if defined(USEAPI_OSS) -#define API_DEFAULT API_OSS -#define API_DEFSTRING "oss" -#elif defined(USEAPI_ALSA) -#define API_DEFAULT API_ALSA -#define API_DEFSTRING "alsa" -#elif defined(USEAPI_JACK) -#define API_DEFAULT API_JACK -#define API_DEFSTRING "jack" -#elif defined(USEAPI_MMIO) -#define API_DEFAULT API_MMIO -#define API_DEFSTRING "mmio" -#elif defined(USEAPI_PORTAUDIO) -#define API_DEFAULT API_PORTAUDIO -#define API_DEFSTRING "portaudio" -#else -#define API_DEFAULT 0 -#define API_DEFSTRING "none" -#endif - -#define DEFAULTAUDIODEV 0 -#define MAXAUDIOINDEV 4 -#define MAXAUDIOOUTDEV 4 -#define DEFMIDIDEV 0 -#define DEFAULTSRATE 44100 -#ifdef MSW -#define DEFAULTADVANCE 70 -#else -#define DEFAULTADVANCE 50 -#endif - -struct t_audiodevs { - int ndev; - int dev[MAXAUDIOINDEV]; - int chdev[MAXAUDIOINDEV]; -#ifdef __cplusplus - t_audiodevs() : ndev(-1) {} -#endif -}; - -/* new audio api interface */ -typedef struct t_audioapi { - int (*open_audio)( - int naudioindev, int *audioindev, int nchindev, int *chindev, - int naudiooutdev, int *audiooutdev, int nchoutdev, int *choutdev, - int rate, int schedmode); - void (*close_audio)(void); - int (*send_dacs)(void); - void (*getdevs)(char *indevlist, int *nindevs, char *outdevlist, int *noutdevs, int *canmulti, int maxndev, int devdescsize); -} t_audioapi; - -int pa_open_audio(int inchans, int outchans, int rate, int advance, int indeviceno, int outdeviceno, int schedmode); - -/* tb { */ -void pa_test_setting (int ac, t_atom *av); -void pa_getcurrent_devices(void); -void pa_getaudiooutdevinfo(t_float f); -void pa_getaudioindevinfo(t_float f); -/* } tb */ - -int jack_open_audio(int wantinchans, int wantoutchans, int rate, int scheduler); -void jack_listdevs(void); -void sys_listmididevs(void); -void sys_set_midi_api(int whichapi); -void sys_set_audio_api(int whichapi); -void sys_get_audio_apis(char *buf); -extern int sys_audioapi; -void sys_set_audio_state(int onoff); - -/* API dependent audio flags and settings */ -void oss_set32bit(void); -void linux_alsa_devname(char *devname); - -void sys_get_audio_params(t_audiodevs *in, t_audiodevs *out, int *prate, int *dacblocksize, int *padvance, int *pscheduler); -void sys_save_audio_params(t_audiodevs *in, t_audiodevs *out, int rate, int dacblocksize, int advance, int scheduler); - -/* s_file.c */ -typedef void (*t_printhook)(const char *s); -extern t_printhook sys_printhook; /* set this to override printing */ -extern FILE *sys_printtofh; -#ifdef MSW -#define vsnprintf _vsnprintf /* jsarlo -- alias this name for msw */ -#endif - -/* jsarlo { */ -EXTERN double sys_time; -EXTERN double sys_time_per_dsp_tick; -EXTERN int sys_externalschedlib; - -EXTERN t_sample* get_sys_soundout(void); -EXTERN t_sample* get_sys_soundin(void); -EXTERN int* get_sys_main_advance(void); -EXTERN double* get_sys_time_per_dsp_tick(void); -EXTERN int* get_sys_schedblocksize(void); -EXTERN double* get_sys_time(void); -EXTERN float* get_sys_dacsr(void); -EXTERN int* get_sys_sleepgrain(void); -EXTERN int* get_sys_schedadvance(void); - -EXTERN void sys_clearhist(void); -EXTERN void sys_initmidiqueue(void); -EXTERN int sys_addhist(int phase); -EXTERN void sys_setmiditimediff(double inbuftime, double outbuftime); -EXTERN void sched_tick(double next_sys_time); -EXTERN void sys_pollmidiqueue(void); -EXTERN int sys_pollgui(void); -EXTERN void sys_setchsr(int chin, int chout, int sr, int dacblocksize); - -EXTERN void inmidi_noteon( int portno, int channel, int pitch, int velo); -EXTERN void inmidi_controlchange( int portno, int channel, int ctlnumber, int value); -EXTERN void inmidi_programchange( int portno, int channel, int value); -EXTERN void inmidi_pitchbend( int portno, int channel, int value); -EXTERN void inmidi_aftertouch( int portno, int channel, int value); -EXTERN void inmidi_polyaftertouch(int portno, int channel, int pitch, int value); -/* } jsarlo */ - -/* functions in x_midi.c */ -void inmidi_realtimein( int portno, int cmd); -void inmidi_byte( int portno, int byte); -void inmidi_sysex( int portno, int byte); - -/* ----------------------- END OF FORMER S_STUFF ----------------------------- */ - - -/* ----------------------- (v)asprintf missing on mingw... ---------------------------------------------------*/ - -#ifndef HAVE_VASPRINTF -extern int vasprintf(char **str, const char *fmt, va_list ap) throw (); -#endif - -#ifndef HAVE_ASPRINTF -extern int asprintf(char **str, const char *fmt, ...) throw (); -#endif - -/* ----------------------- m_imp.h ---------------------------------------------------*/ - -typedef struct _methodentry { - t_symbol *me_name; - t_gotfn me_fun; - t_atomtype me_arg[MAXPDARG+1]; -} t_methodentry; - -typedef void (*t_bangmethod) (t_pd *x); -typedef void (*t_pointermethod)(t_pd *x, t_gpointer *gp); -typedef void (*t_floatmethod) (t_pd *x, t_float f); -typedef void (*t_symbolmethod) (t_pd *x, t_symbol *s); -typedef void (*t_stringmethod) (t_pd *x, const char *s); -typedef void (*t_listmethod) (t_pd *x, t_symbol *s, int argc, t_atom *argv); -typedef void (*t_anymethod) (t_pd *x, t_symbol *s, int argc, t_atom *argv); - -t_pd *pd_new2(int argc, t_atom *argv); -t_pd *pd_new3(const char *s); - -struct _class { - t_symbol *name; /* name (mostly for error reporting) */ - t_symbol *helpname; /* name of help file */ - t_symbol *externdir; /* directory extern was loaded from */ - size_t size; /* size of an instance */ - t_methodentry *methods; /* methods other than bang, etc below */ - int nmethod; /* number of methods */ - t_method freemethod; /* function to call before freeing */ - t_bangmethod bangmethod; /* common methods */ - t_pointermethod pointermethod; - t_floatmethod floatmethod; - t_symbolmethod symbolmethod; /* or t_stringmethod, but only C++ has anonymous unions, so... */ - t_listmethod listmethod; - t_anymethod anymethod; - t_savefn savefn; /* function to call when saving */ - int floatsignalin; /* onset to float for signal input */ - unsigned gobj:1; /* true if is a gobj */ - unsigned patchable:1; /* true if we have a t_object header */ - unsigned firstin:1; /* if patchable, true if draw first inlet */ - unsigned drawcommand:1; /* a drawing command for a template */ - unsigned newatoms:1; /* can handle refcounting of atoms (future use) */ - unsigned use_stringmethod:1; /* the symbolmethod slot holds a stringmethod instead */ - t_symbol *firsttip; - t_symbol **fields; /* names of fields aka attributes, and I don't mean the #V attributes. */ - int nfields; /* ... and how many of them */ - t_notice notice; /* observer method */ - t_onsubscribe onsubscribe; /* observable method */ -}; - -//#define c_methods methods /* for Cyclone */ -//#define c_nmethod nmethod /* for Cyclone */ -//#define c_externdir externdir /* for PDDP */ -//#define c_name name /* for Cyclone,Creb,Pidip */ -//#define c_size size /* for Cyclone,Flext */ -//#define me_name name /* for Cyclone */ -//#define me_fun fun /* for Cyclone */ -//#define me_arg arg /* for Cyclone */ - -/* m_obj.c */ -EXTERN int obj_noutlets(t_object *x); -EXTERN int obj_ninlets(t_object *x); -EXTERN t_outconnect *obj_starttraverseoutlet(t_object *x, t_outlet **op, int nout); -EXTERN t_outconnect *obj_nexttraverseoutlet(t_outconnect *lastconnect, t_object **destp, t_inlet **inletp, int *whichp); -EXTERN t_outconnect *obj_connect(t_object *source, int outno, t_object *sink, int inno); -EXTERN void obj_disconnect(t_object *source, int outno, t_object *sink, int inno); -EXTERN void outlet_setstacklim(void); -EXTERN int obj_issignalinlet(t_object *x, int m); -EXTERN int obj_issignaloutlet(t_object *x, int m); -EXTERN int obj_nsiginlets(t_object *x); -EXTERN int obj_nsigoutlets(t_object *x); -EXTERN int obj_siginletindex(t_object *x, int m); -EXTERN int obj_sigoutletindex(t_object *x, int m); - -/* misc */ -EXTERN void glob_evalfile(t_pd *ignore, t_symbol *name, t_symbol *dir); -EXTERN void glob_initfromgui(void *dummy, t_symbol *s); -EXTERN void glob_quit(void *dummy); - -/* ----------------------- g_canvas.h ------------------------------------------------*/ - -/* i don't know whether this is currently used at all in DesireData. -- matju 2006.09 */ -#ifdef GARRAY_THREAD_LOCK -#include <pthread.h> /* TB: for t_garray */ -#endif - -typedef struct t_gtemplate t_gtemplate; -typedef struct _canvasenvironment t_canvasenvironment; -typedef struct _slot t_slot; - -/* the t_tick structure describes where to draw x and y "ticks" for a canvas */ -typedef struct _tick { /* where to put ticks on x or y axes */ - float point; /* one point to draw a big tick at */ - float inc; /* x or y increment per little tick */ - int lperb; /* little ticks per big; 0 if no ticks to draw */ -} t_tick; - -typedef struct t_boxes t_boxes; - -/* the t_canvas structure, which describes a list of elements that live on an area of a window.*/ -#ifdef PD_PLUSPLUS_FACE -struct _glist : t_object { -#else -struct _glist { - t_object gl_obj; /* header in case we're a [pd] or abstraction */ -#endif - int pixwidth, pixheight; /* width in pixels (on parent, if a graph) */ - float x1,y1,x2,y2; /* bounding rectangle in our own coordinates */ - int screenx1, screeny1, screenx2, screeny2; /* screen coordinates when toplevel */ - int xmargin, ymargin; /* origin for GOP rectangle */ - /* ticks and tick labels */ - t_tick xtick; int nxlabels; t_symbol **xlabel; float xlabely; - t_tick ytick; int nylabels; t_symbol **ylabel; float ylabelx; - t_symbol *name; /* symbol bound here */ - int font; /* nominal font size in points, e.g., 10 */ - t_canvasenvironment *env; /* one of these per $0; env=0 for subpatches */ - unsigned int havewindow:1; /* this indicates whether we publish to the manager */ - unsigned int gop:1; - unsigned int goprect:1; /* gop version >= 0.39 */ - unsigned int hidetext:1; /* hide object-name + args when doing graph on parent */ - long next_o_index; /* next object index. to be incremented on each use */ - long next_w_index; /* next wire index. to be incremented on each use */ - t_boxes *boxes; -}; - -struct _namelist; - -/* LATER consider adding font size to this struct (see canvas_getfont()) */ -struct _canvasenvironment { - t_symbol *dir; /* directory patch lives in */ - int argc; /* number of "$" arguments */ - t_atom *argv; /* array of "$" arguments */ - long dollarzero; /* value of "$0" */ - struct _namelist *path;/* search path (0.40) */ -}; - -/* a data structure to describe a field in a pure datum */ -#define DT_FLOAT 0 -#define DT_SYMBOL 1 -#define DT_CANVAS 2 -#define DT_ARRAY 3 - -typedef struct t_dataslot { - int type; - t_symbol *name; - t_symbol *arraytemplate; /* filled in for arrays only */ -} t_dataslot; - -#ifdef PD_PLUSPLUS_FACE -typedef struct t_template : t_pd { -#else -typedef struct t_template { - t_pd t_pdobj; /* header */ -#endif - t_gtemplate *list; /* list of "struct"/gtemplate objects */ - t_symbol *sym; /* name */ - int n; /* number of dataslots (fields) */ - t_dataslot *vec; /* array of dataslots */ -} t_template; - -/* this is not really a t_object, but it needs to be observable and have a refcount, so... */ -#ifdef PD_PLUSPLUS_FACE -struct _array : t_object { -#else -struct _array { - t_gobj gl_obj; -#endif - int n; /* number of elements */ - int elemsize; /* size in bytes; LATER get this from template */ - char *vec; /* array of elements */ - union { - t_symbol *tsym; /* template for elements */ - t_symbol *templatesym; /* alias */ - }; - t_gpointer gp; /* pointer to scalar or array element we're in */ -}; - -#ifdef PD_PLUSPLUS_FACE -struct _garray : t_gobj { -#else -struct _garray { - t_gobj x_gobj; -#endif - t_scalar *scalar; /* scalar "containing" the array */ - t_canvas *canvas; /* containing canvas */ - t_symbol *name; /* unexpanded name (possibly with leading '$') */ - t_symbol *realname; /* expanded name (symbol we're bound to) */ - unsigned int usedindsp:1; /* true if some DSP routine is using this */ - unsigned int saveit:1; /* true if we should save this with parent */ - unsigned int listviewing:1; /* true if list view window is open */ - unsigned int hidename:1; /* don't print name above graph */ -}; - -t_array *garray_getarray(t_garray *x); - -/* structure for traversing all the connections in a canvas */ -typedef struct t_linetraverser { - t_canvas *canvas; - t_object *from; int nout; int outlet; t_outlet *outletp; - t_object *to; int nin; int inlet; t_inlet *inletp; - t_outconnect *next; - int nextoutno; -#ifdef __cplusplus - t_linetraverser() {} - t_linetraverser(t_canvas *canvas); -#endif -} t_linetraverser; - -extern t_canvas *canvas_list; /* list of all root canvases */ -extern t_class *vinlet_class, *voutlet_class, *canvas_class; -extern int canvas_valid; /* incremented when pointers might be stale */ -EXTERN int sys_noloadbang; -EXTERN t_symbol *s_empty; - -#define PLOTSTYLE_POINTS 0 /* plotting styles for arrays */ -#define PLOTSTYLE_POLY 1 -#define PLOTSTYLE_BEZ 2 - -/* from kernel.c */ -EXTERN void gobj_save(t_gobj *x, t_binbuf *b); -EXTERN void pd_eval_text(const char *t, size_t size); -EXTERN int sys_syntax; - -/* from desire.c */ -EXTERN int pd_scanargs(int argc, t_atom *argv, const char *fmt, ...); -EXTERN int pd_saveargs(t_binbuf *b, const char *fmt, ...); -EXTERN void pd_upload(t_gobj *self); -EXTERN void sys_mgui(void *self, const char *sel, const char *fmt, ...); -EXTERN void canvas_add(t_canvas *x, t_gobj *g, int index=-1); -EXTERN void canvas_delete(t_canvas *x, t_gobj *y); -EXTERN void canvas_deletelinesfor(t_canvas *x, t_text *text); -EXTERN void canvas_deletelinesforio(t_canvas *x, t_text *text, t_inlet *inp, t_outlet *outp); -EXTERN int canvas_isvisible(t_canvas *x); -EXTERN int canvas_istoplevel(t_canvas *x); -EXTERN int canvas_istable(t_canvas *x); -EXTERN int canvas_isabstraction(t_canvas *x); -EXTERN t_canvas *canvas_getcanvas(t_canvas *x); -EXTERN t_canvas *canvas_getrootfor(t_canvas *x); -EXTERN t_canvas *canvas_getcurrent(void); -EXTERN t_canvasenvironment *canvas_getenv(t_canvas *x); -EXTERN int canvas_getdollarzero(void); -EXTERN t_symbol *canvas_realizedollar(t_canvas *x, t_symbol *s); -EXTERN t_symbol *canvas_makebindsym(t_symbol *s); - -EXTERN void linetraverser_start(t_linetraverser *t, t_canvas *x); -EXTERN t_outconnect *linetraverser_next(t_linetraverser *t); - -/* -------------------- TO BE SORTED OUT --------------------- */ -EXTERN void canvas_redrawallfortemplatecanvas(t_canvas *x, int action); -EXTERN void array_resize(t_array *x, int n); -EXTERN void word_init(t_word *wp, t_template *tmpl, t_gpointer *gp); -EXTERN void word_restore(t_word *wp, t_template *tmpl, int argc, t_atom *argv); -EXTERN t_scalar *scalar_new(t_canvas *owner, t_symbol *templatesym); -EXTERN void word_free(t_word *wp, t_template *tmpl); -EXTERN void scalar_redraw(t_scalar *x, t_canvas *canvas); -//EXTERN int pd_pickle(t_foo *foo, const char *fmt, ...); -EXTERN void pd_set_newest (t_pd *x); -EXTERN const char *inlet_tip(t_inlet* i,int num); - -extern t_hash<t_pd *,long> *object_table; -extern t_hash<t_symbol *,t_class *> *class_table; - -/* some kernel.c stuff that wasn't in any header, when shifting to C++. */ -void obj_moveinletfirst(t_object *x, t_inlet *i); -void obj_moveoutletfirst(t_object *x, t_outlet *o); -int inlet_getsignalindex(t_inlet *x); -int outlet_getsignalindex(t_outlet *x); -void text_save(t_gobj *z, t_binbuf *b); -t_sample *obj_findsignalscalar(t_object *x, int m); -void class_set_extern_dir(t_symbol *s); -void glob_update_class_info (t_pd *bogus, t_symbol *s, t_symbol *cb_recv, t_symbol *cb_sel); -void pd_free_zombie(t_pd *x); - -/* some other stuff that wasn't in any header */ -void glob_watchdog(t_pd *dummy); - -#if defined(_LANGUAGE_C_PLUS_PLUS) || defined(__cplusplus) -} -#endif - -#ifdef __cplusplus -#include<iostream> -// should I remove min,max now? g++ complains about conflict between min and std::min... -// they have the same def. btw i don't know how to refer to my own. -namespace desire { -template <class T> static T min(T a, T b) {return a<b?a:b;} -template <class T> static T max(T a, T b) {return a>b?a:b;} -template <class T> T clip(T a, T b, T c) {return min(max(a,b),c);} -void oprintf(std::ostream &buf, const char *s, ...); -void voprintf(std::ostream &buf, const char *s, va_list args); -}; -EXTERN std::ostringstream lost_posts; -#endif - -#define L post("%s:%d in %s",__FILE__,__LINE__,__PRETTY_FUNCTION__); -#define LS(self) post("%s:%d in %s (self=%lx class=%s)",__FILE__,__LINE__,__PRETTY_FUNCTION__,(long)self, \ - ((t_gobj *)self)->_class->name->name); - -#define STACKSIZE 1024 -struct t_call { - t_pd *self; /* receiver */ - t_symbol *s; /* selector */ - /* insert temporary profiling variables here */ -}; - -EXTERN t_call pd_stack[STACKSIZE]; -EXTERN int pd_stackn; - -EXTERN int gstack_empty(); /* that's a completely different stack: see pd_pushsym,pd_popsym */ - -class Error {}; -class VeryUnlikelyError : Error {}; -inline static int throw_if_negative(int n) {if (n<0) throw VeryUnlikelyError(); else return n;} -#define asprintf(ARGS...) throw_if_negative( asprintf(ARGS)) -#define vasprintf(ARGS...) throw_if_negative(vasprintf(ARGS)) - -#define PERFORM1ARGS(A,a) A a = (A)w[1]; -#define PERFORM2ARGS(A,a,B,b) PERFORM1ARGS(A,a) B b = (B)w[2]; -#define PERFORM3ARGS(A,a,B,b,C,c) PERFORM2ARGS(A,a,B,b) C c = (C)w[3]; -#define PERFORM4ARGS(A,a,B,b,C,c,D,d) PERFORM3ARGS(A,a,B,b,C,c) D d = (D)w[4]; -#define PERFORM5ARGS(A,a,B,b,C,c,D,d,E,e) PERFORM4ARGS(A,a,B,b,C,c,D,d) E e = (E)w[5]; -#define PERFORM6ARGS(A,a,B,b,C,c,D,d,E,e,F,f) PERFORM5ARGS(A,a,B,b,C,c,D,d,E,e) F f = (F)w[6]; -#define PERFORM7ARGS(A,a,B,b,C,c,D,d,E,e,F,f,G,g) PERFORM6ARGS(A,a,B,b,C,c,D,d,E,e,F,f) G g = (G)w[7]; -#define PERFORM8ARGS(A,a,B,b,C,c,D,d,E,e,F,f,G,g,H,h) PERFORM7ARGS(A,a,B,b,C,c,D,d,E,e,F,f,G,g) H h = (H)w[8]; - -#endif /* __DESIRE_H */ |