Reading unlimited player input

There are actually three limits on player input length:

Constant INPUT_BUFFER_LEN = 260;    ! No extra byte necessary
Constant MAX_BUFFER_WORDS = 20;
Constant PARSE_BUFFER_LEN = 61;

The second of these is only invoked in one place, in VM_Tokenise:

if (numwords >= MAX_BUFFER_WORDS) break;

So it’s a limitation of the tokenizer, not of the input-reading routine itself, which makes sense: all the input has to be read from the keyboard before the concept of “words” is relevant at all.

VM_Tokenise is called at the end of VM_ReadKeyboard, the actual input-fetching routine. So in theory it shouldn’t be too hard to make a copy of that routine that doesn’t call the tokenizer, just returns a buffer with the raw text data in it.

The difficulty then is getting it into a format you, the author, can use. The right way to do this would involve TEXT_TY_CastPrimitive, but I’ve never fully understood the block-value system. The easier way is what Eric Eve’s Text Capture extension does: define a routine that prints the buffer, call that routine inside a string ("[my buffer-printing routine]"), and let Inform handle the messy bits.

The end result would be a phrase like “request a raw line of text” that you could call within Inform 7, and then a phrase “say the/-- raw captured text” to access the results. Does that sound like what you’d want? If so I can poke at this later today, it shouldn’t take too long.