***
*** ALL functions and methods need to be in their own file
***

file char.C:
 TO_UPPER is used in the inner loops of all the case-insensitive
 comparision functions, and SHOULD be used by c_upcase and c_capitalize.
 TO_UPPER can be made twice as fast by adding a static 256 byte long
 conversion table that when indexed by a character returns it's
 uppercase equivalent.  This will be needed for internationalization
 anyway, because toupper isn't robust enough for ISO character sets.
DONE

 c_trim, c_left_trim, c_right_trim
 These need to be re-written to do their work in-place (i.e. no copying
 to a temporary)  The strlen, strcpy, new and delete calls should all
 go away.  Why do these have a "c_" prefix?  Why not overload trim,
 left_trim and right_trim?
DONE

 reverse
 This could be re-written to use pointers instead of indices.  The
 dividing the length by two can be eliminated, and a check for when
 the top and bottom pointers meet or cross substituted.
 
 strfind
 This is needlessly complex, and uses too many variables (they won't fit
 in the register set). The following code could be adapted (from
 X11/R3/fonts/mkfontdir/fontdir.c)
DONE

 strrfind
 You ought to be able to simplify this one in a similar manner.
DONE

String.h
 Every String has it's own growth_ratio!!  This should be static.

 All the string append functions would be faster if a pointer to the
 end of the string was kept instead of the string length.  The only
 thing that would slow down due to this, would be strlen, which
 gets an additional memory reference and a subtract. This probably isn't
 worth doing (the pain isn't worth the gain in this case...)

String.C
 String& strncat (String& s, const char* c, int n);
 String& strncat (String& s1, const String& s2, int n);
 These call strncat(char*, char*, int), when they should be using
 strncpy.
DONE

 reverse
 See comments on the reverse in char.C

 strchr, strrchr, strtol, atoi, strtod,
 These should be eliminated, because the automatic conversion from
 String to char* will cause the right thing to happen with less
 overhead.
 LGO 10/28/89 - did this for is_equal, is_not_equal, is_ge, is_le, is_lt, is_gt
 LGO 11/07/89 - did this for strcmp, strncmp
 LGO 01/05/90 - did this for strchr, strrchr
DONE

 insert, replace, yank, sub_string, strncpy, trim, left_trim, right_trim
 These need to be re-written to do their work in-place (i.e. no copying
 to a temporary)  The strlen, strcpy, new and delete calls should all
 go away.
 LGO 01/03/89 - did this for trim, left_trim, right_trim
DONE

 upcase, capitalize
 Should use the new TO_UPPER (see comments under char.C above)
DONE
 
Gen_String.h
 See comments for String.h
DONE

Gen_String.C
 See comments for String.C
 In addition, update_ref_count and check_memory need to be private
 methods, integrated together, with the initial checks done inline.
DONE

 When this is done, most methods can be greatly simplified 
DONE
