t_symbol size limit


    Feb 16 2006 | 5:36 pm
    Hi list,
    I'm programming an external that would allow to save an XML interface
    for a Lemur inside the containing patcher. I implemented the save
    method for the object, but I'm now in front of an issue : it seems
    it's impossible to generate a symbol larger than 2000 bytes. That
    means that if I use gensym on a file larger than 2k, I get a
    truncated XML file in my saved patcher.
    Any ideas ?
    Thanks in advance...
    --
    Axel Balley
    JazzMutant

    • Feb 16 2006 | 9:15 pm
      I would recommend you serialize the xml file into multiple symbols,
      or write the raw bytes as a sequence of integer atoms as does comment
      in "two-byte compatibility mode". A little more work, but shouldn't
      be that tough to implement.
      -Joshua
    • Feb 16 2006 | 10:32 pm
      Hi Axel,
      are you sure you can't solve this by using a list of symbols?
      Don't forget that large unique symbols fill up memory since they never
      go away as long as Max is running.
      best greetings,
      Thomas
    • Feb 16 2006 | 10:56 pm
      Thanks for your answers, Thomas and Joshua
      I'll try going in those directions, though I'm still a newbie at this
      (I coded my first Max external about 4 days ago)
      --
      Axel Balley
      JazzMutant
    • Feb 17 2006 | 9:31 am
      On around Feb 16, 2006, at 23:56, Axel Balley said something like:
      > I'll try going in those directions, though I'm still a newbie at this
      > (I coded my first Max external about 4 days ago)
      In that case, may I add the following, some stuff I learnt from writing
      my I Ching objects, which also had many kB of text...
      The SDK docs leave the impression that lists cannot begin with a
      symbol. This is not strictly true. It is perfectly possible to write
      something like
      Atom textlist[3];
      SETSYM(textlist, gensym("foo")); // Handy macro, cf. ext_mess.h
      SETSYM(textlist+1, gensym("baz"));
      SETSYM(textlist+2, gensym("bark"));
      outlet_list(myOutlet, NIL, 3, textlist);
      (2nd param to outlet_list() can also be gensym("list"), but NIL will do
      fine; the example can be extended to more items).
      But note:
      1) Most Max objects will convert your list [foo baz bark] into a foo
      message with the parameters baz and bark. These are two different
      animals. For this reason, you might be better off to follow the model
      of the textedit object, which sends out "text" messages with the text
      followed by a stream of symbol parameters. The code would be identical
      to above, just the outlet_list() call would be an outlet_anything()
      call:
      outlet_anything(myOutlet, gensym("text"), 3, textlist);
      Stash the value of gensym("text") in a static variable if you're going
      to use it a lot (which seems likely).
      2) Most Max objects will either croak or truncate your argument list if
      it contains more than 255 elements. You will probably need to subdivide
      your XML file into multiple messages rather then send the entire file
      out as a single message.
      Hope this helps,
      Peter
      -------------- http://www.bek.no/~pcastine/Litter/ --------------
      Peter Castine | ^
      | Litter Power & Litter Bundle for Jitter
      pcastine@gmx.net |
      pcastine@bek.no | iCE: Sequencing, Recording, and Interface Building
      4-15@kagi.com | for Max/MSP
      | Extremely cool
      | http://www.dspaudio.com
      | http://www.dspaudio.com/software/software.html
    • Feb 17 2006 | 11:07 am
      On around Feb 17, 2006, at 10:31, Peter Castine said something like:
      > better off to follow the model of the textedit object, which sends out
      > "text" messages with the text followed by a stream of symbol
      > parameters.
      That was unclear, sorry. Please read:
      ...the model of the textedit object, which sends out "text" messages,
      each followed by a stream of symbol parameters representing the actual
      text. So for an XML file containing the fragment "fourscore and seven
      years ago our fathers brought forth upon this continent" you might
      generate the messages
      text fourscore and seven years ago our fathers
      text brought forth upon this continent a new nation
      text conceived in liberty and dedicated to the proposition
      etc...
      Hope that's clearer (even if "conceived in liberty" sounds like the
      title of a movie about someone born out of wedlock),
      P.
      -------------- http://www.bek.no/~pcastine/Litter/ --------------
      Peter Castine | ^
      | Litter Power & Litter Bundle for Jitter
      pcastine@gmx.net |
      pcastine@bek.no | iCE: Sequencing, Recording, and Interface Building
      4-15@kagi.com | for Max/MSP
      | Extremely cool
      | http://www.dspaudio.com
      | http://www.dspaudio.com/software/software.html
    • Feb 17 2006 | 1:12 pm
      Thanks for your help, the symbols stream thing is exactly what I was
      after.
      I'll let you know if things work out !
      Axel