How does that work when people choose the option not to use the _underlines?
In this case, Width is a SUB and _WIDTH is a function. The parser differentiates the two by usage.
LOCATE and _LOCATE, however, would both be Subs and wouldn't work. Even bigger problem would be that the internals would need a complete overhaul...
For example, let's LOCATE 3 pixels right, 3 pixels down and PRINT "foo".
The way things are now, we increase ROW by one, so we can print in the proper spot below it on the next line. Only problem here is we've offset 3 pixels below a normal row...
What should CSRLIN and POS print for us? How do we track that 3 pixel offset? With _FONT 8, width and height of a font is 8 pixels... Normally we print at ROW 1, COLUMN 1 (0, 0 pixels), hit ENTER, and move down to ROW 2...
But here, we located to 3,3 before printing.
Does the next row start at 8 pixels like usual? Do we go in and make CSRLIN and POS report SINGLE values? We're at row 1.4, column 1.4?
All these commands are interconnected and work off the premise of ROW and COLUMN coordinates. Once LOCATE changes, all of their underlying structures change as well.
Now, somebody will ask, "WHY DO WE HAVE A _PRINTSTRING COMMAND THEN?"
The answer to that is, "It exists outside LOCATE, CSRLIN, POS, POINT, SCREEN, and all those other interconnected commands."
Try this:
LOCATE 10, 10
_PRINTSTRING (1, 1), "Test"
PRINT "Foo"
Where does that Foo print? Down on line 2, below the Test from _PRINTSTRING? Or is it in relationto that last LOCATE at 10, 10, and completely unaffected by that Test??
Our LOCATE coordinate system is integer-based, and dependent on _FONTHEIGHT and _FONTWIDTH. To change it to pixel-based, you'd need to alter all the existing code to swap from grid-coordinates over to pixel-coordinates...
Anyone want to volunteer to do that? All I can say is it won't be me. I don't have the time to undertake such a massive alteration for something which I doubt I'd ever use at all. ;)