js crashes max - what's the problem with this code?


    Aug 02 2006 | 2:48 am
    i am building a simple template to create a grid of objects based on numbers passed in. it works perfectly the first time, but the second time through it crashes max. as far as i can tell there are no infinite loops. am i missing something? i'm running XP. myer
    here's my patch ***********************************************
    // variables var oldelements = 0; var theelements = new Array(128);
    // methods
    function msg_int(a, b, c, d) // accept int input as calling the slider function { grid(a, b, c, d) }
    // generate ctlins function grid(xelements, yelements, deltax, deltay) {
    // safety check for number of sliders if(oldelements { oldelements = 0; // too few sliders, set to 0 } if(oldelements>128) { oldelements = 128; // too many sliders, set to 128 }
    // take out the existing ones for (var i=0;i { this.patcher.remove(theelements[i]); post(i); }
    // re-assign the "old element" value oldelements = (xelements)*(yelements); post(oldelements);
    // put in the new ones for (var j = 0; j { for (var k = 0; k { theelements[k] = this.patcher.newdefault((150+(k*(deltax))), (100+(j*(deltay))), "ctlin"); } } }
    ***********************************************************

    • Aug 02 2006 | 7:46 am
    • Aug 02 2006 | 11:15 am
      the only crashes I've seen using javascript result from calling patcher.remove() on max objects that don't actually exist - check the manual, there's a function (property? I don't remember exactly which it is right now) called something like isValid that makes sure that you can properly call remove without crashing Max.
      best evan
      On Aug 2, 2006, at 3:48 AM, Myer wrote:
      > > i am building a simple template to create a grid of objects based > on numbers passed in. it works perfectly the first time, but the > second time through it crashes max. as far as i can tell there are > no infinite loops. am i missing something? i'm running XP. > myer > > here's my patch > *********************************************** > max v2; > #N vpatcher 38 383 789 956; > #P origin 11 0; > #P window setfont "Sans Serif" 10.; > #P window linecount 1; > #P message 107 272 53 9109514 5 4 90 90; > #P message 27 274 53 9109514 4 4 50 50; > #P newex 21 363 100 9109514 js sliderexample2.js; > #P message 19 394 97 9109514 sliders $1 $2 $3 $4; > #P connect 2 0 1 0; > #P connect 3 0 1 0; > #P pop; > ************************************************** > here's me script: > ********************************************************* > > // ctlin.js > // > // pass in numbers and get a specified grid of ctlin objects > // > > // inlets and outlets > inlets = 1; > outlets = 0; > > // variables > var oldelements = 0; > var theelements = new Array(128); > > // methods > > function msg_int(a, b, c, d) // accept int input as calling the > slider function > { > grid(a, b, c, d) > } > > // generate ctlins > function grid(xelements, yelements, deltax, deltay) > { > > // safety check for number of sliders > if(oldelements > { > oldelements = 0; // too few sliders, set to 0 > } > if(oldelements>128) > { > oldelements = 128; // too many sliders, set to 128 > } > > // take out the existing ones > for (var i=0;i > { > this.patcher.remove(theelements[i]); > post(i); > } > > // re-assign the "old element" value > oldelements = (xelements)*(yelements); > post(oldelements); > > // put in the new ones > for (var j = 0; j > { > for (var k = 0; k > { > theelements[k] = this.patcher.newdefault((150+(k*(deltax))), (100 > +(j*(deltay))), "ctlin"); > } > } > } > > > > > *********************************************************** >
    • Aug 05 2006 | 2:40 pm
      thanks guys - this helps a lot. when i'm done with my object (which will help streamline midi implementation into new patches by routing inputs to a predictable nomenclature - button row 1 number 1 (br1n1, etc), i'll post it). :) myer