There have been many forum posts concerning LCD programs that either do not work at all or that do not work reliably. A search on the Internet will show that this problem is not confined to the Arduino community. You would think that with all the information available via the Internet that the problem would have been resolved years ago. The fact is that almost all of the manufacturer's data sheets that I have found appear to be derived from the same source, with differences due mainly to editorial or typographical errors. Also, almost all of the information that has been put together by individuals is just a rehash of the same data sheet information.
I have looked at dozens of programming examples on the internet and, in my opinion, virtually all of them fail to interpret the data sheet information correctly. This includes the LCD libraries available on the 'playground' and it includes the official LiquidCrystal library. The authors of the LCD libraries are NOT to blame. Much of the information on the data sheets is ambiguous and some of it is wrong. I am in the process of preparing an explanation of how I interpret the data sheet information and why I feel my interpretation is correct. I'll get that up on the playground as soon as it is in usable form.
Meanwhile, and the real reason for this thread, is that I have come up with a replacement for LiquidCrystal.cpp that I would like to make available to see if my reasoning is correct. This is not a new library, it is just a rework of some of the existing code. It uses the same constructors, variables, and functions. There's nothing new in it, just some code additions that better implement the various data sheets as I interpret them. You shouldn't have to change any existing program code that uses the LiquidCrystal library, and LiquidCrystal.h doesn't have to be changed either.
I know that I can chop my program up into pieces and put it into a thread, but there must be a better way. I see that there is a 'code library' as part of the playground. Is this the appropriate place for relatively untested code, and if so, would someone please outline how I go about utilizing it. I hope my contribution will prove useful.