? abi/files.txt
? abi/places.txt
? abi/src/BeOS_4.5_x86_OBJ
? abi/src/patch.sed
? abi/src/patch.sh
? abi/src/places.txt
Index: abi/src/af/ev/mac/ev_MacMenu.cpp
===================================================================
RCS file: /cvsroot/abi/src/af/ev/mac/ev_MacMenu.cpp,v
retrieving revision 1.5
diff -c -3 -p -r1.5 ev_MacMenu.cpp
*** abi/src/af/ev/mac/ev_MacMenu.cpp	1999/10/15 07:53:51	1.5
--- abi/src/af/ev/mac/ev_MacMenu.cpp	2000/02/07 23:28:34
***************
*** 21,26 ****
--- 21,27 ----
  #include <string.h>
  #include "ut_types.h"
  #include "ut_stack.h"
+ #include "ut_string.h"
  #include "xap_Types.h"
  #include "ev_MacMenu.h"
  #include "xap_MacApp.h"
Index: abi/src/af/ev/win/ev_Win32Menu.cpp
===================================================================
RCS file: /cvsroot/abi/src/af/ev/win/ev_Win32Menu.cpp,v
retrieving revision 1.25
diff -c -3 -p -r1.25 ev_Win32Menu.cpp
*** abi/src/af/ev/win/ev_Win32Menu.cpp	1999/10/15 07:53:53	1.25
--- abi/src/af/ev/win/ev_Win32Menu.cpp	2000/02/07 23:28:40
***************
*** 22,27 ****
--- 22,28 ----
  #include <string.h>
  #include "ut_types.h"
  #include "ut_stack.h"
+ #include "ut_string.h"
  #include "ut_debugmsg.h"
  #include "xap_Types.h"
  #include "ev_Win32Menu.h"
Index: abi/src/af/ev/xp/ev_EditMethod.cpp
===================================================================
RCS file: /cvsroot/abi/src/af/ev/xp/ev_EditMethod.cpp,v
retrieving revision 1.10
diff -c -3 -p -r1.10 ev_EditMethod.cpp
*** abi/src/af/ev/xp/ev_EditMethod.cpp	1999/04/06 14:51:28	1.10
--- abi/src/af/ev/xp/ev_EditMethod.cpp	2000/02/07 23:28:40
*************** EV_EditMethod * EV_EditMethodContainer::
*** 144,157 ****
  
  	UT_uint32 k, kLast;
  	for (k=0; k<m_countStatic; k++)
! 		if (UT_strcmp(szName,m_arrayStaticEditMethods[k].getName()) == 0)
  			return &m_arrayStaticEditMethods[k];
  	
  	kLast = m_vecDynamicEditMethods.getItemCount();
  	for (k=0; k<kLast; k++)
  	{
  		EV_EditMethod * pem = (EV_EditMethod *)m_vecDynamicEditMethods.getNthItem(k);
! 		if (UT_strcmp(szName,pem->getName()) == 0)
  			return pem;
  	}
  
--- 144,157 ----
  
  	UT_uint32 k, kLast;
  	for (k=0; k<m_countStatic; k++)
! 		if (strcmp(szName,m_arrayStaticEditMethods[k].getName()) == 0)
  			return &m_arrayStaticEditMethods[k];
  	
  	kLast = m_vecDynamicEditMethods.getItemCount();
  	for (k=0; k<kLast; k++)
  	{
  		EV_EditMethod * pem = (EV_EditMethod *)m_vecDynamicEditMethods.getNthItem(k);
! 		if (strcmp(szName,pem->getName()) == 0)
  			return pem;
  	}
  
Index: abi/src/af/gr/qnx/gr_QNXGraphics.h
===================================================================
RCS file: /cvsroot/abi/src/af/gr/qnx/gr_QNXGraphics.h,v
retrieving revision 1.1.1.1
diff -c -3 -p -r1.1.1.1 gr_QNXGraphics.h
*** abi/src/af/gr/qnx/gr_QNXGraphics.h	2000/01/11 12:06:43	1.1.1.1
--- abi/src/af/gr/qnx/gr_QNXGraphics.h	2000/02/07 23:28:40
***************
*** 26,36 ****
  #include <string.h>
  #include <Pt.h>
  
  class UT_ByteBuf;
  
  class QNXFont : public GR_Font {
          public:
!                 QNXFont(const char *aFont)  { m_fontstr = (aFont) ? strdup(aFont) : NULL; };
                  ~QNXFont()  { if (m_fontstr) { free(m_fontstr); } };
                  const char *getFont(void)   { return(m_fontstr); };
          private:
--- 26,38 ----
  #include <string.h>
  #include <Pt.h>
  
+ #include <ut_string.h>
+ 
  class UT_ByteBuf;
  
  class QNXFont : public GR_Font {
          public:
!                 QNXFont(const char *aFont)  { m_fontstr = (aFont) ? UT_strdup(aFont) : NULL; };
                  ~QNXFont()  { if (m_fontstr) { free(m_fontstr); } };
                  const char *getFont(void)   { return(m_fontstr); };
          private:
Index: abi/src/af/gr/win/gr_Win32Graphics.cpp
===================================================================
RCS file: /cvsroot/abi/src/af/gr/win/gr_Win32Graphics.cpp,v
retrieving revision 1.38
diff -c -3 -p -r1.38 gr_Win32Graphics.cpp
*** abi/src/af/gr/win/gr_Win32Graphics.cpp	2000/01/07 09:51:39	1.38
--- abi/src/af/gr/win/gr_Win32Graphics.cpp	2000/02/07 23:28:46
*************** GR_Font* GR_Win32Graphics::findFont(cons
*** 115,151 ****
  	lf.lfHeight = -(iHeight);
  
  	// TODO note that we don't support all those other ways of expressing weight.
! 	if (0 == stricmp(pszFontWeight, "bold"))
  	{
  		lf.lfWeight = 700;
  	}
  
  	// TODO -- remove this block entirely, since oblique is no longer a valid style
  	// We squash oblique into italic
! 	if (0 == stricmp(pszFontStyle, "italic") || 0 == stricmp(pszFontStyle, "oblique"))
  	{
  		lf.lfItalic = TRUE;
  	}
  
  	// TODO note that we currently think pszFontFamily is a single name, not a list!
  	// TODO why don't these generic family names work?!?
! 	if (0 == stricmp(pszFontFamily, "serif"))
  	{
  		lf.lfPitchAndFamily = DEFAULT_PITCH | FF_ROMAN;
  	}
! 	else if (0 == stricmp(pszFontFamily, "sans-serif"))
  	{
  		lf.lfPitchAndFamily = DEFAULT_PITCH | FF_SWISS;
  	}
! 	else if (0 == stricmp(pszFontFamily, "cursive"))
  	{
  		lf.lfPitchAndFamily = DEFAULT_PITCH | FF_SCRIPT;
  	}
! 	else if (0 == stricmp(pszFontFamily, "fantasy"))
  	{
  		lf.lfPitchAndFamily = DEFAULT_PITCH | FF_DECORATIVE;
  	}
! 	else if (0 == stricmp(pszFontFamily, "monospace"))
  	{
  		lf.lfPitchAndFamily = DEFAULT_PITCH | FF_MODERN;
  	}
--- 115,151 ----
  	lf.lfHeight = -(iHeight);
  
  	// TODO note that we don't support all those other ways of expressing weight.
! 	if (0 == UT_stricmp(pszFontWeight, "bold"))
  	{
  		lf.lfWeight = 700;
  	}
  
  	// TODO -- remove this block entirely, since oblique is no longer a valid style
  	// We squash oblique into italic
! 	if (0 == UT_stricmp(pszFontStyle, "italic") || 0 == UT_stricmp(pszFontStyle, "oblique"))
  	{
  		lf.lfItalic = TRUE;
  	}
  
  	// TODO note that we currently think pszFontFamily is a single name, not a list!
  	// TODO why don't these generic family names work?!?
! 	if (0 == UT_stricmp(pszFontFamily, "serif"))
  	{
  		lf.lfPitchAndFamily = DEFAULT_PITCH | FF_ROMAN;
  	}
! 	else if (0 == UT_stricmp(pszFontFamily, "sans-serif"))
  	{
  		lf.lfPitchAndFamily = DEFAULT_PITCH | FF_SWISS;
  	}
! 	else if (0 == UT_stricmp(pszFontFamily, "cursive"))
  	{
  		lf.lfPitchAndFamily = DEFAULT_PITCH | FF_SCRIPT;
  	}
! 	else if (0 == UT_stricmp(pszFontFamily, "fantasy"))
  	{
  		lf.lfPitchAndFamily = DEFAULT_PITCH | FF_DECORATIVE;
  	}
! 	else if (0 == UT_stricmp(pszFontFamily, "monospace"))
  	{
  		lf.lfPitchAndFamily = DEFAULT_PITCH | FF_MODERN;
  	}
Index: abi/src/af/util/beos/ut_BeOSString.cpp
===================================================================
RCS file: /cvsroot/abi/src/af/util/beos/ut_BeOSString.cpp,v
retrieving revision 1.2
diff -c -3 -p -r1.2 ut_BeOSString.cpp
*** abi/src/af/util/beos/ut_BeOSString.cpp	1999/10/18 12:08:06	1.2
--- abi/src/af/util/beos/ut_BeOSString.cpp	2000/02/07 23:28:49
***************
*** 28,48 ****
  #include "ut_assert.h"
  #include "ut_string.h"
  
- UT_sint32 UT_strcmp(const char *s1, const char *s2)
- {
- 	return strcmp(s1,s2);
- }
- 
- UT_sint32 UT_stricmp(const char *s1, const char *s2)
- {
- 	return strcasecmp(s1,s2);
- }
- 
- UT_sint32 UT_strnicmp(const char *s1, const char *s2, int lenS1)
- {
- 	return strncasecmp(s1,s2,lenS1);
- }
- 
  char * UT_catPathname(const char * szPath, const char * szFile)
  {
  	UT_ASSERT((szPath) && (*szPath));
--- 28,33 ----
Index: abi/src/af/util/mac/ut_MacString.cpp
===================================================================
RCS file: /cvsroot/abi/src/af/util/mac/ut_MacString.cpp,v
retrieving revision 1.1
diff -c -3 -p -r1.1 ut_MacString.cpp
*** abi/src/af/util/mac/ut_MacString.cpp	1999/12/19 00:45:52	1.1
--- abi/src/af/util/mac/ut_MacString.cpp	2000/02/07 23:28:49
***************
*** 28,64 ****
  #include "ut_assert.h"
  #include "ut_string.h"
  
- UT_sint32 UT_strcmp(const char *s1, const char *s2)
- {
- 	return strcmp(s1,s2);
- }
- 
- UT_sint32 UT_stricmp(const char *s1, const char *s2)
- {
- 	// Quick implementation of stricmp until someone finds the Mac equivalent in the Toolbox
- 	for(; toupper(*s1) == toupper(*s2); s1++, s2++)
- 	{
- 		if(*s1 == '\0' || (*s2 == '\0'))
- 			return 0;
- 	}
- 	return *s1 - *s2;
- }
- 
- UT_sint32 UT_strnicmp(const char *s1, const char *s2, int lenS1)
- {
- 	int len;
- 	// Quick implementation of strnicmp until someone finds the Mac equivalent in the Toolbox
- 	for(len = 0; len < lenS1 && toupper(*s1) == toupper(*s2); s1++, s2++, len++)
- 	{
- 		if(*s1 == '\0' || (*s2 == '\0'))
- 			return 0;
- 	}
- 	if(len == lenS1)
- 		return 0;
- 	else
- 		return *s1 - *s2;
- }
- 
  char * UT_catPathname(const char * szPath, const char * szFile)
  {
  	UT_ASSERT((szPath) && (*szPath));
--- 28,33 ----
Index: abi/src/af/util/qnx/ut_qnxString.cpp
===================================================================
RCS file: /cvsroot/abi/src/af/util/qnx/ut_qnxString.cpp,v
retrieving revision 1.1.1.1
diff -c -3 -p -r1.1.1.1 ut_qnxString.cpp
*** abi/src/af/util/qnx/ut_qnxString.cpp	2000/01/11 12:07:45	1.1.1.1
--- abi/src/af/util/qnx/ut_qnxString.cpp	2000/02/07 23:28:51
***************
*** 28,49 ****
  #include "ut_assert.h"
  #include "ut_string.h"
  
- UT_sint32 UT_strcmp(const char *s1, const char *s2)
- {
- 	return strcmp(s1,s2);
- }
- 
- UT_sint32 UT_stricmp(const char *s1, const char *s2)
- {
- 	return stricmp(s1,s2);
- }
- 
- UT_sint32 UT_strnicmp(const char *s1, const char *s2, int lenS1)
- {
- 	// strncasecmp is not very portable, so we use GLIB's implementation
- 	return strnicmp(s1,s2,lenS1);
- }
- 
  char * UT_catPathname(const char * szPath, const char * szFile)
  {
  	UT_ASSERT((szPath) && (*szPath));
--- 28,33 ----
*************** char * UT_catPathname(const char * szPat
*** 59,62 ****
  
  	return szPathname;
  }
- 
--- 43,45 ----
Index: abi/src/af/util/unix/ut_dialogHelper.cpp
===================================================================
RCS file: /cvsroot/abi/src/af/util/unix/ut_dialogHelper.cpp,v
retrieving revision 1.11
diff -c -3 -p -r1.11 ut_dialogHelper.cpp
*** abi/src/af/util/unix/ut_dialogHelper.cpp	2000/02/01 22:13:02	1.11
--- abi/src/af/util/unix/ut_dialogHelper.cpp	2000/02/07 23:28:54
*************** void fix_label_callback( GtkWidget *widg
*** 434,440 ****
  
  		/* convert the &'s into _'s .  Also handle \& as &'s */
  		accelch = 0;
! 		newlbl = g_strdup(str);					UT_ASSERT(newlbl);
  		for ( i = 0; newlbl[i] != 0; i++ ) 
  		{
  			if ( newlbl[i] == '&' ) {
--- 434,440 ----
  
  		/* convert the &'s into _'s .  Also handle \& as &'s */
  		accelch = 0;
! 		newlbl = UT_strdup(str);				UT_ASSERT(newlbl);
  		for ( i = 0; newlbl[i] != 0; i++ ) 
  		{
  			if ( newlbl[i] == '&' ) {
Index: abi/src/af/util/unix/ut_unixString.cpp
===================================================================
RCS file: /cvsroot/abi/src/af/util/unix/ut_unixString.cpp,v
retrieving revision 1.5
diff -c -3 -p -r1.5 ut_unixString.cpp
*** abi/src/af/util/unix/ut_unixString.cpp	1999/10/18 12:08:06	1.5
--- abi/src/af/util/unix/ut_unixString.cpp	2000/02/07 23:28:54
***************
*** 30,51 ****
  #include "ut_assert.h"
  #include "ut_string.h"
  
- UT_sint32 UT_strcmp(const char *s1, const char *s2)
- {
- 	return strcmp(s1,s2);
- }
- 
- UT_sint32 UT_stricmp(const char *s1, const char *s2)
- {
- 	return g_strcasecmp(s1,s2);
- }
- 
- UT_sint32 UT_strnicmp(const char *s1, const char *s2, int lenS1)
- {
- 	// strncasecmp is not very portable, so we use GLIB's implementation
- 	return g_strncasecmp(s1,s2,lenS1);
- }
- 
  char * UT_catPathname(const char * szPath, const char * szFile)
  {
  	UT_ASSERT((szPath) && (*szPath));
--- 30,35 ----
Index: abi/src/af/util/win/ut_Win32String.cpp
===================================================================
RCS file: /cvsroot/abi/src/af/util/win/ut_Win32String.cpp,v
retrieving revision 1.3
diff -c -3 -p -r1.3 ut_Win32String.cpp
*** abi/src/af/util/win/ut_Win32String.cpp	1999/10/18 12:08:07	1.3
--- abi/src/af/util/win/ut_Win32String.cpp	2000/02/07 23:28:54
***************
*** 28,48 ****
  #include "ut_assert.h"
  #include "ut_string.h"
  
- UT_sint32 UT_strcmp(const char *s1, const char *s2)
- {
- 	return strcmp(s1,s2);
- }
- 
- UT_sint32 UT_stricmp(const char *s1, const char *s2)
- {
- 	return stricmp(s1,s2);
- }
- 
- UT_sint32 UT_strnicmp(const char *s1, const char *s2, int lenS1)
- {
- 	return strnicmp(s1,s2,lenS1);
- }
- 
  char * UT_catPathname(const char * szPath, const char * szFile)
  {
  	UT_ASSERT((szPath) && (*szPath));
--- 28,33 ----
Index: abi/src/af/util/xp/ut_hash.cpp
===================================================================
RCS file: /cvsroot/abi/src/af/util/xp/ut_hash.cpp,v
retrieving revision 1.16
diff -c -3 -p -r1.16 ut_hash.cpp
*** abi/src/af/util/xp/ut_hash.cpp	1999/04/15 16:56:26	1.16
--- abi/src/af/util/xp/ut_hash.cpp	2000/02/07 23:28:55
***************
*** 23,28 ****
--- 23,29 ----
  #include <string.h>
  
  #include "ut_hash.h"
+ #include "ut_string.h"
  #include "ut_assert.h"
  
  #define CHUNK_NUM_ENTRIES		8
Index: abi/src/af/util/xp/ut_string.cpp
===================================================================
RCS file: /cvsroot/abi/src/af/util/xp/ut_string.cpp,v
retrieving revision 1.33
diff -c -3 -p -r1.33 ut_string.cpp
*** abi/src/af/util/xp/ut_string.cpp	1999/11/07 18:56:14	1.33
--- abi/src/af/util/xp/ut_string.cpp	2000/02/07 23:28:57
***************
*** 29,41 ****
  #include "ut_growbuf.h"
  
  //////////////////////////////////////////////////////////////////
! // The following functions defined in ut_string.h are defined
! // in platform code:
! //    UT_strcmp()
! //    UT_stricmp()
! //    UT_strnicmp()
  //////////////////////////////////////////////////////////////////
  
  UT_Bool UT_cloneString(char *& rszDest, const char * szSource)
  {
  	if (szSource && *szSource)
--- 29,91 ----
  #include "ut_growbuf.h"
  
  //////////////////////////////////////////////////////////////////
! // char * UT_catPathname(const char * szPath, const char * szFile);
! // is defined in platform-specific code.
  //////////////////////////////////////////////////////////////////
  
+ char * UT_strdup(const char * szSource) 
+ { 
+ 	UT_ASSERT(szSource);
+ 
+ 	int len = strlen(szSource)+1;
+ 	if(char * ret = (char *)calloc(len, sizeof(char)))
+ 		return((char *)memcpy(ret, szSource, len));
+ 	else
+ 		return(NULL);
+ }
+ 
+ UT_sint32 UT_stricmp(const char * s1, const char * s2)
+ {
+ 	UT_ASSERT(s1);
+ 	UT_ASSERT(s2);
+ 	
+ 	while(tolower(*s1) == tolower(*s2) && *s1 != '\0' && *s2 != '\0')
+ 	{
+ 		s1++;
+ 		s2++;
+ 	}
+ 	
+ 	if (*s1 == '\0' && *s2 == '\0')
+ 	{
+ 		return 0;
+ 	}
+ 	else
+ 	{
+ 		return ((*s1)-(islower(*s1)?tolower(*s2):(isupper(*s1)?toupper(*s2):*s2)));
+ 	}
+ }
+ 
+ UT_sint32 UT_strnicmp(const char *s1, const char *s2, int ilen)
+ {
+ 	UT_ASSERT(s1);
+ 	UT_ASSERT(s2);
+ 
+ 	while((ilen--)>0 && tolower(*s1) == tolower(*s2) && *s1 != '\0' && *s2 != '\0')
+ 	{
+ 		s1++;
+ 		s2++;
+ 	}
+ 	
+ 	if(ilen==-1 || (*s1 == '\0' && *s2 == '\0'))
+ 	{
+ 		return 0;
+ 	}
+ 	else
+ 	{
+ 		return ((*s1)-(islower(*s1)?tolower(*s2):(isupper(*s1)?toupper(*s2):*s2)));
+ 	}
+ }
+ 
  UT_Bool UT_cloneString(char *& rszDest, const char * szSource)
  {
  	if (szSource && *szSource)
*************** UT_sint32 UT_XML_stricmp(const XML_Char 
*** 119,125 ****
  UT_sint32 UT_XML_strcmp(const XML_Char * sz1, const XML_Char * sz2)
  {
  	UT_ASSERT(sizeof(char) == sizeof(XML_Char));
! 	return UT_strcmp(sz1,sz2);
  }
  
  UT_Bool UT_XML_cloneNoAmpersands(XML_Char *& rszDest, const XML_Char * szSource)
--- 169,175 ----
  UT_sint32 UT_XML_strcmp(const XML_Char * sz1, const XML_Char * sz2)
  {
  	UT_ASSERT(sizeof(char) == sizeof(XML_Char));
! 	return strcmp(sz1,sz2);
  }
  
  UT_Bool UT_XML_cloneNoAmpersands(XML_Char *& rszDest, const XML_Char * szSource)
Index: abi/src/af/util/xp/ut_string.h
===================================================================
RCS file: /cvsroot/abi/src/af/util/xp/ut_string.h,v
retrieving revision 1.31
diff -c -3 -p -r1.31 ut_string.h
*** abi/src/af/util/xp/ut_string.h	1999/10/18 12:08:09	1.31
--- abi/src/af/util/xp/ut_string.h	2000/02/07 23:28:58
*************** class UT_GrowBuf;
*** 27,35 ****
  
  UT_BEGIN_EXTERN_C
  
! UT_sint32 UT_strcmp(const char *s1, const char *s2);
  UT_sint32 UT_stricmp(const char *s1, const char *s2);
! UT_sint32 UT_strnicmp(const char *s1, const char *s2, int lenS1);
  UT_Bool UT_cloneString(char *& rszDest, const char * szSource);
  UT_Bool UT_replaceString(char *& rszDest, const char * szSource);
  
--- 27,49 ----
  
  UT_BEGIN_EXTERN_C
  
! ///////////////////////////////////////////////////////////////////////////////
! // Replacements for common non-ANSI functions
! 
! char * UT_strdup(const char * szSource); 
! 
! // Below are case-insensitive strcmp-like functions prototypes.  The functions
! // lexographically compare strings, returning <0, 0, >0 as strcmp(...) does.
! // For strings containing characters between 'Z' and 'a' in the ASCII table,
! // the strings /do/ compare differently depending on case.  For example, 
! // "ABCDE" < "ABCD^", but "abcde" > "abcd^".
! // This functionality is comparable with the 'standard' GNU strcasecmp(...)
! // and the Microsoft stricmp functions.
  UT_sint32 UT_stricmp(const char *s1, const char *s2);
! UT_sint32 UT_strnicmp(const char *s1, const char *s2, int ilen);
! 
! ///////////////////////////////////////////////////////////////////////////////
! 
  UT_Bool UT_cloneString(char *& rszDest, const char * szSource);
  UT_Bool UT_replaceString(char *& rszDest, const char * szSource);
  
Index: abi/src/af/xap/beos/xap_BeOSDlg_MessageBox.cpp
===================================================================
RCS file: /cvsroot/abi/src/af/xap/beos/xap_BeOSDlg_MessageBox.cpp,v
retrieving revision 1.3
diff -c -3 -p -r1.3 xap_BeOSDlg_MessageBox.cpp
*** abi/src/af/xap/beos/xap_BeOSDlg_MessageBox.cpp	1999/06/05 04:39:45	1.3
--- abi/src/af/xap/beos/xap_BeOSDlg_MessageBox.cpp	2000/02/07 23:28:58
***************
*** 22,27 ****
--- 22,28 ----
  #include "xap_BeOSDlg_MessageBox.h"
  #include "xap_BeOSApp.h"
  #include "xap_BeOSFrame.h"
+ #include "ut_string.h"
  #include <string.h>
  
  /*****************************************************************/
Index: abi/src/af/xap/beos/xap_BeOSFrame.cpp
===================================================================
RCS file: /cvsroot/abi/src/af/xap/beos/xap_BeOSFrame.cpp,v
retrieving revision 1.16
diff -c -3 -p -r1.16 xap_BeOSFrame.cpp
*** abi/src/af/xap/beos/xap_BeOSFrame.cpp	1999/12/08 11:44:32	1.16
--- abi/src/af/xap/beos/xap_BeOSFrame.cpp	2000/02/07 23:29:00
***************
*** 20,25 ****
--- 20,26 ----
  #include <stdio.h>
  #include <string.h>
  #include "ut_types.h"
+ #include "ut_string.h"
  #include "ut_debugmsg.h"
  #include "ut_assert.h"
  #include "xap_ViewListener.h"
*************** UT_Bool XAP_BeOSFrame::show()
*** 243,249 ****
  UT_Bool XAP_BeOSFrame::openURL(const char * szURL)
  {
  	char *url;
! 	url = (char*)strdup(szURL);
  	be_roster->Launch("text/html", 1, &url);
  	free(url);
  	return UT_TRUE;
--- 244,250 ----
  UT_Bool XAP_BeOSFrame::openURL(const char * szURL)
  {
  	char *url;
! 	url = (char*)UT_strdup(szURL);
  	be_roster->Launch("text/html", 1, &url);
  	free(url);
  	return UT_TRUE;
Index: abi/src/af/xap/qnx/xap_QNXApp.cpp
===================================================================
RCS file: /cvsroot/abi/src/af/xap/qnx/xap_QNXApp.cpp,v
retrieving revision 1.1.1.1
diff -c -3 -p -r1.1.1.1 xap_QNXApp.cpp
*** abi/src/af/xap/qnx/xap_QNXApp.cpp	2000/01/11 12:10:28	1.1.1.1
--- abi/src/af/xap/qnx/xap_QNXApp.cpp	2000/02/07 23:29:01
***************
*** 24,29 ****
--- 24,30 ----
  
  #include "ut_debugmsg.h"
  
+ #include "ut_string.h"
  #include "xap_Args.h"
  #include "xap_QNXApp.h"
  #include "xap_FakeClipboard.h"
Index: abi/src/af/xap/unix/xap_UnixApp.cpp
===================================================================
RCS file: /cvsroot/abi/src/af/xap/unix/xap_UnixApp.cpp,v
retrieving revision 1.47
diff -c -3 -p -r1.47 xap_UnixApp.cpp
*** abi/src/af/xap/unix/xap_UnixApp.cpp	1999/12/12 16:59:43	1.47
--- abi/src/af/xap/unix/xap_UnixApp.cpp	2000/02/07 23:29:02
***************
*** 28,33 ****
--- 28,34 ----
  
  #include "ut_debugmsg.h"
  #include "ut_dialogHelper.h"
+ #include "ut_string.h"
  
  #include "xap_Args.h"
  #include "xap_UnixApp.h"
Index: abi/src/af/xap/unix/xap_UnixFontManager.cpp
===================================================================
RCS file: /cvsroot/abi/src/af/xap/unix/xap_UnixFontManager.cpp,v
retrieving revision 1.29
diff -c -3 -p -r1.29 xap_UnixFontManager.cpp
*** abi/src/af/xap/unix/xap_UnixFontManager.cpp	1999/12/03 03:32:11	1.29
--- abi/src/af/xap/unix/xap_UnixFontManager.cpp	2000/02/07 23:29:04
*************** void XAP_UnixFontManager::_allocateThisF
*** 298,304 ****
  	  We then do our best shot to allocate this font.
  	*/
  
! 	char * linedup = strdup(line);
  
  	// Look for either first space or first tab
  	char * firstspace = index(linedup, ' ');
--- 298,304 ----
  	  We then do our best shot to allocate this font.
  	*/
  
! 	char * linedup = UT_strdup(line);
  
  	// Look for either first space or first tab
  	char * firstspace = index(linedup, ' ');
*************** void XAP_UnixFontManager::_allocateThisF
*** 335,341 ****
  		return;
  	}
  	// allocate a real buffer for this
! 	fontfile = strdup(fontfile);
  	// tack on the working directory to get the full path to the font file
  	char * newstuff = (char *) calloc(strlen(workingdir) + 1 + strlen(fontfile) + 1,
  									  sizeof(char));
--- 335,341 ----
  		return;
  	}
  	// allocate a real buffer for this
! 	fontfile = UT_strdup(fontfile);
  	// tack on the working directory to get the full path to the font file
  	char * newstuff = (char *) calloc(strlen(workingdir) + 1 + strlen(fontfile) + 1,
  									  sizeof(char));
Index: abi/src/af/xap/unix/gnome/xap_UnixGnomeApp.cpp
===================================================================
RCS file: /cvsroot/abi/src/af/xap/unix/gnome/xap_UnixGnomeApp.cpp,v
retrieving revision 1.2
diff -c -3 -p -r1.2 xap_UnixGnomeApp.cpp
*** abi/src/af/xap/unix/gnome/xap_UnixGnomeApp.cpp	1999/12/03 03:32:12	1.2
--- abi/src/af/xap/unix/gnome/xap_UnixGnomeApp.cpp	2000/02/07 23:29:05
***************
*** 26,31 ****
--- 26,32 ----
  
  #include "ut_debugmsg.h"
  #include "ut_dialogHelper.h"
+ #include "ut_string.h"
  
  #include "xap_Args.h"
  #include "xap_UnixApp.h"
Index: abi/src/af/xap/xp/xap_Frame.cpp
===================================================================
RCS file: /cvsroot/abi/src/af/xap/xp/xap_Frame.cpp,v
retrieving revision 1.42
diff -c -3 -p -r1.42 xap_Frame.cpp
*** abi/src/af/xap/xp/xap_Frame.cpp	1999/12/06 17:32:55	1.42
--- abi/src/af/xap/xp/xap_Frame.cpp	2000/02/07 23:29:07
***************
*** 26,31 ****
--- 26,32 ----
  #include "ut_assert.h"
  #include "ut_debugmsg.h"
  #include "ut_vector.h"
+ #include "ut_string.h"
  #include "xap_App.h"
  #include "xap_Frame.h"
  #include "xap_Prefs.h"
Index: abi/src/af/xap/xp/xap_Prefs.cpp
===================================================================
RCS file: /cvsroot/abi/src/af/xap/xp/xap_Prefs.cpp,v
retrieving revision 1.22
diff -c -3 -p -r1.22 xap_Prefs.cpp
*** abi/src/af/xap/xp/xap_Prefs.cpp	1999/12/01 23:39:05	1.22
--- abi/src/af/xap/xp/xap_Prefs.cpp	2000/02/07 23:29:11
*************** void XAP_Prefs::addRecent(const char * s
*** 214,220 ****
  	for (UT_uint32 i=0; i<m_vecRecent.getItemCount(); i++)
  	{
  		sz = (const char *)m_vecRecent.getNthItem(i);
! 		if ((sz==szRecent) || !UT_strcmp(sz, szRecent))
  		{
  			// yep, we're gonna move it up
  			m_vecRecent.deleteNthItem(i);
--- 214,220 ----
  	for (UT_uint32 i=0; i<m_vecRecent.getItemCount(); i++)
  	{
  		sz = (const char *)m_vecRecent.getNthItem(i);
! 		if ((sz==szRecent) || !strcmp(sz, szRecent))
  		{
  			// yep, we're gonna move it up
  			m_vecRecent.deleteNthItem(i);
Index: abi/src/hello/ap/unix/ap_UnixApp.cpp
===================================================================
RCS file: /cvsroot/abi/src/hello/ap/unix/ap_UnixApp.cpp,v
retrieving revision 1.3
diff -c -3 -p -r1.3 ap_UnixApp.cpp
*** abi/src/hello/ap/unix/ap_UnixApp.cpp	1999/06/14 16:17:49	1.3
--- abi/src/hello/ap/unix/ap_UnixApp.cpp	2000/02/07 23:29:12
***************
*** 29,34 ****
--- 29,35 ----
  
  #include "ut_debugmsg.h"
  #include "ut_types.h"
+ #include "ut_string.h"
  #include "xap_App.h"
  #include "xap_Args.h"
  #include "ap_UnixFrame.h"
Index: abi/src/wp/ap/beos/ap_BeOSApp.cpp
===================================================================
RCS file: /cvsroot/abi/src/wp/ap/beos/ap_BeOSApp.cpp,v
retrieving revision 1.29
diff -c -3 -p -r1.29 ap_BeOSApp.cpp
*** abi/src/wp/ap/beos/ap_BeOSApp.cpp	2000/01/27 06:15:45	1.29
--- abi/src/wp/ap/beos/ap_BeOSApp.cpp	2000/02/07 23:29:20
***************
*** 32,37 ****
--- 32,38 ----
  
  #include "ut_debugmsg.h"
  #include "ut_bytebuf.h"
+ #include "ut_string.h"
  #include "xap_Args.h"
  #include "ap_BeOSFrame.h"
  #include "ap_BeOSApp.h"
Index: abi/src/wp/ap/qnx/ap_QNXApp.cpp
===================================================================
RCS file: /cvsroot/abi/src/wp/ap/qnx/ap_QNXApp.cpp,v
retrieving revision 1.4
diff -c -3 -p -r1.4 ap_QNXApp.cpp
*** abi/src/wp/ap/qnx/ap_QNXApp.cpp	2000/01/27 06:15:46	1.4
--- abi/src/wp/ap/qnx/ap_QNXApp.cpp	2000/02/07 23:29:24
***************
*** 33,38 ****
--- 33,39 ----
  #include <sys/stat.h>
  
  #include "ut_debugmsg.h"
+ #include "ut_string.h"
  #include "ut_misc.h"
  
  #include "xap_Args.h"
Index: abi/src/wp/ap/qnx/ap_QNXPrefs.cpp
===================================================================
RCS file: /cvsroot/abi/src/wp/ap/qnx/ap_QNXPrefs.cpp,v
retrieving revision 1.1.1.1
diff -c -3 -p -r1.1.1.1 ap_QNXPrefs.cpp
*** abi/src/wp/ap/qnx/ap_QNXPrefs.cpp	2000/01/11 12:17:24	1.1.1.1
--- abi/src/wp/ap/qnx/ap_QNXPrefs.cpp	2000/02/07 23:29:25
***************
*** 21,26 ****
--- 21,27 ----
  #include "string.h"
  #include "locale.h"
  #include "ctype.h"
+ #include "ut_string.h"
  #include "ut_debugmsg.h"
  #include "ap_QNXPrefs.h"
  
*************** void AP_QNXPrefs::overlayEnvironmentPref
*** 73,79 ****
  	// TODO (see .../src/wp/ap/xp/ap_*_Languages.h)
  
          // make a copy of the current locale so we can set it back
! 	char *old_locale = strdup(setlocale(LC_ALL, NULL));
  
  	// this will set our current locale information
  	// according to the user's env variables
--- 74,80 ----
  	// TODO (see .../src/wp/ap/xp/ap_*_Languages.h)
  
          // make a copy of the current locale so we can set it back
! 	char *old_locale = UT_strdup(setlocale(LC_ALL, NULL));
  
  	// this will set our current locale information
  	// according to the user's env variables
*************** void AP_QNXPrefs::overlayEnvironmentPref
*** 92,98 ****
  	// (they are probably all the same, anyway)
  	
  	const char * szNewLang = "EnUS"; // default to US English
! 	char * lc_ctype = strdup(setlocale(LC_CTYPE, NULL));
  
  	// locale categories seem to always look like this:
  	// two letter for language (lowcase) _ two letter country code (upcase)
--- 93,99 ----
  	// (they are probably all the same, anyway)
  	
  	const char * szNewLang = "EnUS"; // default to US English
! 	char * lc_ctype = UT_strdup(setlocale(LC_CTYPE, NULL));
  
  	// locale categories seem to always look like this:
  	// two letter for language (lowcase) _ two letter country code (upcase)
Index: abi/src/wp/ap/unix/ap_UnixApp.cpp
===================================================================
RCS file: /cvsroot/abi/src/wp/ap/unix/ap_UnixApp.cpp,v
retrieving revision 1.42
diff -c -3 -p -r1.42 ap_UnixApp.cpp
*** abi/src/wp/ap/unix/ap_UnixApp.cpp	2000/01/27 06:15:47	1.42
--- abi/src/wp/ap/unix/ap_UnixApp.cpp	2000/02/07 23:29:30
***************
*** 32,37 ****
--- 32,38 ----
  #include <sys/stat.h>
  
  #include "ut_debugmsg.h"
+ #include "ut_string.h"
  #include "ut_misc.h"
  
  #include "xap_Args.h"
Index: abi/src/wp/ap/unix/ap_UnixPrefs.cpp
===================================================================
RCS file: /cvsroot/abi/src/wp/ap/unix/ap_UnixPrefs.cpp,v
retrieving revision 1.6
diff -c -3 -p -r1.6 ap_UnixPrefs.cpp
*** abi/src/wp/ap/unix/ap_UnixPrefs.cpp	1999/09/20 21:39:45	1.6
--- abi/src/wp/ap/unix/ap_UnixPrefs.cpp	2000/02/07 23:29:31
***************
*** 21,26 ****
--- 21,27 ----
  #include "string.h"
  #include "locale.h"
  #include "ctype.h"
+ #include "ut_string.h"
  #include "ut_debugmsg.h"
  #include "ap_UnixPrefs.h"
  
*************** void AP_UnixPrefs::overlayEnvironmentPre
*** 73,79 ****
  	// TODO (see .../src/wp/ap/xp/ap_*_Languages.h)
  
          // make a copy of the current locale so we can set it back
! 	char *old_locale = strdup(setlocale(LC_ALL, NULL));
  
  	// this will set our current locale information
  	// according to the user's env variables
--- 74,80 ----
  	// TODO (see .../src/wp/ap/xp/ap_*_Languages.h)
  
          // make a copy of the current locale so we can set it back
! 	char *old_locale = UT_strdup(setlocale(LC_ALL, NULL));
  
  	// this will set our current locale information
  	// according to the user's env variables
*************** void AP_UnixPrefs::overlayEnvironmentPre
*** 92,98 ****
  	// (they are probably all the same, anyway)
  	
  	const char * szNewLang = "EnUS"; // default to US English
! 	char * lc_ctype = strdup(setlocale(LC_CTYPE, NULL));
  
  	// locale categories seem to always look like this:
  	// two letter for language (lowcase) _ two letter country code (upcase)
--- 93,99 ----
  	// (they are probably all the same, anyway)
  	
  	const char * szNewLang = "EnUS"; // default to US English
! 	char * lc_ctype = UT_strdup(setlocale(LC_CTYPE, NULL));
  
  	// locale categories seem to always look like this:
  	// two letter for language (lowcase) _ two letter country code (upcase)
Index: abi/src/wp/ap/unix/gnome/ap_UnixGnomeApp.cpp
===================================================================
RCS file: /cvsroot/abi/src/wp/ap/unix/gnome/ap_UnixGnomeApp.cpp,v
retrieving revision 1.5
diff -c -3 -p -r1.5 ap_UnixGnomeApp.cpp
*** abi/src/wp/ap/unix/gnome/ap_UnixGnomeApp.cpp	2000/01/27 06:15:47	1.5
--- abi/src/wp/ap/unix/gnome/ap_UnixGnomeApp.cpp	2000/02/07 23:29:33
***************
*** 32,37 ****
--- 32,38 ----
  #include <sys/stat.h>
  
  #include "ut_debugmsg.h"
+ #include "ut_string.h"
  #include "ut_misc.h"
  
  #include "xap_Args.h"
Index: abi/src/wp/ap/win/ap_Win32App.cpp
===================================================================
RCS file: /cvsroot/abi/src/wp/ap/win/ap_Win32App.cpp,v
retrieving revision 1.39
diff -c -3 -p -r1.39 ap_Win32App.cpp
*** abi/src/wp/ap/win/ap_Win32App.cpp	2000/01/27 06:15:48	1.39
--- abi/src/wp/ap/win/ap_Win32App.cpp	2000/02/07 23:29:36
***************
*** 32,37 ****
--- 32,38 ----
  
  #include "ut_debugmsg.h"
  #include "ut_bytebuf.h"
+ #include "ut_string.h"
  #include "xap_Args.h"
  #include "ap_Win32Frame.h"
  #include "ap_Win32App.h"
Index: abi/src/wp/ap/xp/ap_Dialog_Paragraph.cpp
===================================================================
RCS file: /cvsroot/abi/src/wp/ap/xp/ap_Dialog_Paragraph.cpp,v
retrieving revision 1.21
diff -c -3 -p -r1.21 ap_Dialog_Paragraph.cpp
*** abi/src/wp/ap/xp/ap_Dialog_Paragraph.cpp	2000/01/29 01:07:14	1.21
--- abi/src/wp/ap/xp/ap_Dialog_Paragraph.cpp	2000/02/07 23:29:41
*************** UT_Bool AP_Dialog_Paragraph::setDialogDa
*** 210,220 ****
  				{
  					if(UT_hasDimensionComponent(sz))
  						_setMenuItemValue(id_MENU_SPECIAL_SPACING, spacing_EXACTLY, op_INIT);
! 					else if(UT_strcmp("1.0", sz) == 0)
  						_setMenuItemValue(id_MENU_SPECIAL_SPACING, spacing_SINGLE, op_INIT);
! 					else if(UT_strcmp("1.5", sz) == 0)
  						_setMenuItemValue(id_MENU_SPECIAL_SPACING, spacing_ONEANDHALF, op_INIT);
! 					else if(UT_strcmp("2.0", sz) == 0)
  						_setMenuItemValue(id_MENU_SPECIAL_SPACING, spacing_DOUBLE, op_INIT);
  					else
  						_setMenuItemValue(id_MENU_SPECIAL_SPACING, spacing_MULTIPLE, op_INIT);
--- 210,220 ----
  				{
  					if(UT_hasDimensionComponent(sz))
  						_setMenuItemValue(id_MENU_SPECIAL_SPACING, spacing_EXACTLY, op_INIT);
! 					else if(strcmp("1.0", sz) == 0)
  						_setMenuItemValue(id_MENU_SPECIAL_SPACING, spacing_SINGLE, op_INIT);
! 					else if(strcmp("1.5", sz) == 0)
  						_setMenuItemValue(id_MENU_SPECIAL_SPACING, spacing_ONEANDHALF, op_INIT);
! 					else if(strcmp("2.0", sz) == 0)
  						_setMenuItemValue(id_MENU_SPECIAL_SPACING, spacing_DOUBLE, op_INIT);
  					else
  						_setMenuItemValue(id_MENU_SPECIAL_SPACING, spacing_MULTIPLE, op_INIT);
Index: abi/src/wp/ap/xp/ap_EditMethods.cpp
===================================================================
RCS file: /cvsroot/abi/src/wp/ap/xp/ap_EditMethods.cpp,v
retrieving revision 1.176
diff -c -3 -p -r1.176 ap_EditMethods.cpp
*** abi/src/wp/ap/xp/ap_EditMethods.cpp	2000/02/01 10:34:40	1.176
--- abi/src/wp/ap/xp/ap_EditMethods.cpp	2000/02/07 23:29:52
*************** static UT_Bool s_AskForPathname(XAP_Fram
*** 929,935 ****
  	// raise the file-open or file-save-as dialog.
  	// return a_OK or a_CANCEL depending on which button
  	// the user hits.
! 	// return a pointer a strdup()'d string containing the
  	// pathname the user entered -- ownership of this goes
  	// to the caller (so free it when you're done with it).
  
--- 929,935 ----
  	// raise the file-open or file-save-as dialog.
  	// return a_OK or a_CANCEL depending on which button
  	// the user hits.
! 	// return a pointer a UT_strdup()'d string containing the
  	// pathname the user entered -- ownership of this goes
  	// to the caller (so free it when you're done with it).
  
*************** static UT_Bool s_AskForGraphicPathname(X
*** 1045,1051 ****
  	// raise the file-open dialog for inserting an image.
  	// return a_OK or a_CANCEL depending on which button
  	// the user hits.
! 	// return a pointer a strdup()'d string containing the
  	// pathname the user entered -- ownership of this goes
  	// to the caller (so free it when you're done with it).
  
--- 1045,1051 ----
  	// raise the file-open dialog for inserting an image.
  	// return a_OK or a_CANCEL depending on which button
  	// the user hits.
! 	// return a pointer a UT_strdup()'d string containing the
  	// pathname the user entered -- ownership of this goes
  	// to the caller (so free it when you're done with it).
  
Index: abi/src/wp/impexp/xp/ie_exp_RTF_listenerWriteDoc.cpp
===================================================================
RCS file: /cvsroot/abi/src/wp/impexp/xp/ie_exp_RTF_listenerWriteDoc.cpp,v
retrieving revision 1.13
diff -c -3 -p -r1.13 ie_exp_RTF_listenerWriteDoc.cpp
*** abi/src/wp/impexp/xp/ie_exp_RTF_listenerWriteDoc.cpp	2000/01/29 01:07:14	1.13
--- abi/src/wp/impexp/xp/ie_exp_RTF_listenerWriteDoc.cpp	2000/02/07 23:29:56
*************** void s_RTF_ListenerWriteDoc::_rtf_open_b
*** 556,562 ****
  	m_pie->_rtf_keyword_ifnotdefault_twips("sb",szTopMargin,0);
  	m_pie->_rtf_keyword_ifnotdefault_twips("sa",szBottomMargin,0);
  
! 	if (UT_strcmp(szLineHeight,"1.0") != 0)
  	{
  		double f = UT_convertDimensionless(szLineHeight);
  		if (f != 0.0)					// we get zero on bogus strings....
--- 556,562 ----
  	m_pie->_rtf_keyword_ifnotdefault_twips("sb",szTopMargin,0);
  	m_pie->_rtf_keyword_ifnotdefault_twips("sa",szBottomMargin,0);
  
! 	if (strcmp(szLineHeight,"1.0") != 0)
  	{
  		double f = UT_convertDimensionless(szLineHeight);
  		if (f != 0.0)					// we get zero on bogus strings....
