Code Search for Developers
 
 
  

jcom.ramp.cpp from Jamoma at Krugle


Show jcom.ramp.cpp syntax highlighted

/* 
 * jcom.ramp
 * External for Jamoma: ramp values using Jamoma's RampLib library
 * By Tim Place, Copyright © 2006
 * 
 * License: This code is licensed under the terms of the GNU LGPL
 * http://www.gnu.org/licenses/lgpl.html 
 */

#include "ext.h"					// Max Header
#include "ext_obex.h"				// Max Object Extensions (attributes) Header
#include "commonsyms.h"				// Common symbols used by the Max 4.5 API
#include "RampUnitWrap.h"

enum outlets{
	k_outlet_value = 0,
	k_outlet_dumpout,
	num_outlets
};


typedef struct _ramp{
	t_object	 ob;
	void		*obex;
	void		*outlets[num_outlets];
	t_symbol	*attr_rampunit;			///< name of the current rampunit
	rampunit	*my_ramp;				///< instance of the current rampunit
} t_ramp;


// Prototypes
void*		ramp_new(t_symbol *s, long argc, t_atom *argv);
void		ramp_free(t_ramp *x);
void		ramp_assist(t_ramp *x, void *b, long msg, long arg, char *dst);
t_max_err 	ramp_setrampunit(t_ramp *x, void *attr, long argc, t_atom *argv);
void		ramp_int(t_ramp *x, long n);
void		ramp_float(t_ramp *x, double f);
void		ramp_set(t_ramp *x, double value);
void		ramp_list(t_ramp *x, t_symbol *msg, short argc, t_atom *argv);
void		ramp_callback(void *v, float value);
void 		ramp_attrset(t_ramp *x, t_symbol *msg, short argc, t_atom *argv);
void 		ramp_attrget(t_ramp *x, t_symbol *msg, short argc, t_atom *argv);


// Globals
t_class		*ramp_class;				// Required: Global pointer for our class


/************************************************************************************/
// Class Definition

int main(void)				// main recieves a copy of the Max function macros table
{
	t_class *c;
	
	// Initialize Globals
	common_symbols_init();

	// Define our class
	c = class_new("jcom.ramp",(method)ramp_new, (method)ramp_free, (short)sizeof(t_ramp), (method)0L, A_GIMME, 0);
	class_obexoffset_set(c, calcoffset(t_ramp, obex));
	
	// Make methods accessible for our class:
	class_addmethod(c, (method)ramp_int,				"int",			A_DEFLONG,	0);
	class_addmethod(c, (method)ramp_float,				"float",		A_DEFFLOAT,	0);
 	class_addmethod(c, (method)ramp_list,				"list",			A_GIMME,	0);
	class_addmethod(c, (method)ramp_set,				"set",			A_DEFFLOAT,	0);
	class_addmethod(c, (method)ramp_attrset,			"attrset",		A_GIMME, 	0);
	class_addmethod(c, (method)ramp_attrget,			"attrget",		A_GIMME,	0);
	class_addmethod(c, (method)ramp_assist,				"assist",		A_CANT,		0); 
    class_addmethod(c, (method)object_obex_dumpout,		"dumpout",		A_CANT,		0);  
    class_addmethod(c, (method)object_obex_quickref,	"quickref",		A_CANT,		0);

	// ATTRIBUTE: rampunit
	class_addattr(c, 
		attr_offset_new("rampunit", _sym_symbol, 0,
		(method)0, (method)ramp_setrampunit, calcoffset(t_ramp, attr_rampunit)));

	// Finalize our class
	class_register(CLASS_BOX, c);
	ramp_class = c;
	
	return 0;
}


/************************************************************************************/
// Object Life

void *ramp_new(t_symbol *s, long argc, t_atom *argv)
{
	t_ramp	*x = (t_ramp *)object_alloc(ramp_class);
	t_atom	a;

	if(x){
		x->outlets[k_outlet_dumpout] = outlet_new(x, 0L);
		x->outlets[k_outlet_value]   = outlet_new(x, 0L);
		object_obex_store((void *)x, _sym_dumpout, (t_object *)x->outlets[k_outlet_dumpout]);

		x->my_ramp = NULL;
		x->attr_rampunit = _sym_nothing;		
		attr_args_process(x, argc, argv);	// handle attribute args
		
		if(x->attr_rampunit == _sym_nothing){
			atom_setsym(&a, gensym("linear.sched"));
			object_attr_setvalueof(x, gensym("rampunit"), 1, &a);
		}
	}
	return (x);		// return the pointer to our new instantiation
}


void ramp_free(t_ramp *x)
{
	delete x->my_ramp;
	x->my_ramp = NULL;
}


/************************************************************************************/
// Methods bound to input/inlets

// Method for Assistance Messages
void ramp_assist(t_ramp *x, void *b, long msg, long arg, char *dst)
{
	if(msg==1) 						// Inlet
		strcpy(dst, "input");
	else{							// Outlets
		switch(arg){
			case k_outlet_value:
					strcpy(dst, "ramping value");
					break;
			case k_outlet_dumpout:
					strcpy(dst, "dumpout");
					break;
		}
 	}		
}


// ATTRIBUTE: set rampunit
t_max_err ramp_setrampunit(t_ramp *x, void *attr, long argc, t_atom *argv)
{
	x->attr_rampunit = atom_getsym(argv);
	
	if(x->my_ramp)
		delete x->my_ramp;
	x->my_ramp = new rampunit(x->attr_rampunit->s_name, ramp_callback, (void *)x);		// create ramp unit
	
	return MAX_ERR_NONE;
	#pragma unused(attr)
}


// Triggered by our Ramp Unit's tick function
void ramp_callback(void *v, float value)
{	
	t_ramp *x = (t_ramp *)v;
	outlet_float(x->outlets[k_outlet_value], value);
}


// INT INPUT
void ramp_int(t_ramp *x, long value)
{
	x->my_ramp->set(value);
	outlet_float(x->outlets[k_outlet_value], value);
}


// FLOAT INPUT
void ramp_float(t_ramp *x, double value)
{
	x->my_ramp->set(value);
	outlet_float(x->outlets[k_outlet_value], value);
}


// SET FLOAT INPUT
void ramp_set(t_ramp *x, double value)
{
	x->my_ramp->set(value);
}


// LIST INPUT <value, ramptime>
void ramp_list(t_ramp *x, t_symbol *msg, short argc, t_atom *argv)
{
	x->my_ramp->go(atom_getfloat(argv), atom_getfloat(argv+1));
}


// RAMP UNIT ATTRIBUTES
void ramp_attrset(t_ramp *x, t_symbol *msg, short argc, t_atom *argv)
{
	short 	err = 0;
	
	if(argc != 2){
		error("jcom.ramp::attrset -- bad arguments");
		return;
	}
	err = x->my_ramp->attrset(atom_getsym(argv), atom_getfloat(argv+1));
	if(err)
		error("jcom.ramp::attrset error %i", err);
}


void ramp_attrget(t_ramp *x, t_symbol *msg, short argc, t_atom *argv)
{
	short 	err = 0;
	
	if(argc != 1){
		error("jcom.ramp::attrset -- bad arguments");
		return;
	}

	double value;
	
	err = x->my_ramp->attrget(atom_getsym(argv), &value);
	if(err)
		error("jcom.ramp::attrget error %i", err);
	else
		outlet_float(x->outlets[k_outlet_dumpout], value);
}




See more files for this project here

Jamoma

Jamoma is a flexible framework for the creation of modules in Max, MSP, and Jitter

Project homepage: http://sourceforge.net/projects/jamoma
Programming language(s): C++,JavaScript,XML
License: other

  jcom.ramp.xcodeproj/
    project.pbxproj
  jcom.ramp.cpp
  jcom.ramp.def
  jcom.ramp.pch
  jcom.ramp.sln
  jcom.ramp.vcproj