The value of handling end of line processing and scrolling is when wanting to use the lcd as a message output device.
Without end of line processing, sending a message string longer than a lcd line creates issues on the display.
If the LCD library handled it, then the sketch/application code becomes much simpler since it can simply send the message strings.
To me it is case of why make every application writer have to write his own end of line processing code when it could easily be handled in the library and used by anyone that needs this functionality?
IMO, a feature rich LCD library should have the ability to do this and the application should be able to enable/disable this functionality.
Consider this, the existing LiquidCrystal libraries do not make the application writer have to deal with calculating display memory addresses when setting the cursor position. The library offers a convenience function setCursor(col, row) which does it for the application.
The library code could (and should IMO) also provide the functionality of handling line wrapping and end of line processing. (most arduino hd44780 libraries do not provide end of line processing or line wrapping)
I have seen a few Arduino lcd libraries that handle and processing and line wrapping but most of them do not handle vertical scrolling. Most just wrap back to the 0,0 position when they get beyond the bottom line.
Having spent more than a decade writing terminal emulation s/w (back in the 80's) and having implemented code to do end of line processing and wrapping in arduino lcd libraries, here are some of my notes/observations:
When doing end of line processing on these types of displays where the number of lines is quite small, one thing that dramatically helps, is handling line wraps and linefeeds just a bit differently than the way people would think a terminal handles it.
What is needed is to defer any end of line processing or scroll operations until the next character after the needed line processing event is received.
i.e. if you get a or need to wrap, or scroll, you do not do this until you receive another printable character.
For the most part it is not noticeable but when dealing with a display with small number of lines it can make a big and noticeable difference.
If the library doesn't defer the processing, then you can never fill the entire display with characters since the LF on the last line or the act of sending the very last character on a full display causes the display to scroll leaving the bottom line empty.
i.e. if you were do something like this on a 16x2 display:
lcd.println("hello")
lcd.println("good bye");
And the library were to process linefeeds as it received them and scroll the display, you end up with a display that has "good bye" on the top line and a blank line on the bottom line.
While it could be argued that is technically correct, it is often not what is desired.
If the library were to defer the line feed processing, then both lines would be on the display and the scroll would be done as the next message is sent to the library.
Anyway, I believe that end of line processing including handling line wraps and vertical scrolling is useful functionality even on small displays.
That is why I implemented it in my openGLCD library and would provide the functionality in any future arduino lcd library that I released.
--- bill