I had some longer strings I wanted to use in my new microreaderboard, and while in the first version, I managed to expand the buffer just enough to fit my longer strings, I didn't like that I had to check the length of my strings.
Looking into the code, the program memory strings are copied into a ram buffer that has to be as big as the longest string. I made a few simple mods to simply use pgm_read_byte at the top of the loop and eliminated the buffer. You can put in as long a string as will fit in flash.
I was going to eliminate the need to tell it the number of strings by doing:
#define NoOfStrings1 sizeof(stringset1)/sizeof(char*) but I couldn't remember if this would be done at compile time, or would be calculated at runtime, requiring pulling in division routines
so I did a
#define NoOfStrings1 sizeof(StringSet1)>>1
I think it becomes a constant, as the amount of flash written was identical.
http://baldwisdom.com/data/mrb.c