Version 2 of tedickey

Updated 2007-11-10 04:46:33 by andy

This is no longer an empty page.

Enter page contents here or click cancel to leave it empty.

Does lynx render TAB< >?

 #include <xterm.h>

 #include <sys/types.h>
 #include <string.h>
 #include <ctype.h>

 #include <xstrings.h>

 char *
 x_basename(char *name)
 {
     char *cp;

     cp = strrchr(name, '/');
 #ifdef __UNIXOS2__
     if (cp == 0)
         cp = strrchr(name, '\\');
 #endif
     return (cp ? cp + 1 : name);
 }

 char *
 x_getenv(const char *name)
 {
     return x_nonempty(getenv(name));
 }

 /*
  * Check if the given string is nonnull/nonempty.  If so, return a pointer
  * to the beginning of its content, otherwise return null.
  */
 char *
 x_nonempty(char *s)
 {
     if (s != 0) {
         if (*s == '\0') {
             s = 0;
         } else {
             s = x_skip_blanks(s);
             if (*s == '\0')
                 s = 0;
         }
     }
     return s;
 }

 char *
 x_skip_blanks(char *s)
 {
     while (isspace(CharOf(*s)))
         ++s;
     return s;
 }

 char *
 x_skip_nonblanks(char *s)
 {
     while (*s != '\0' && !isspace(CharOf(*s)))
         ++s;
     return s;
 }

 int
 x_strcasecmp(const char *s1, const char *s2)
 {
     unsigned len = strlen(s1);

     if (len != strlen(s2))
         return 1;

     return x_strncasecmp(s1, s2, len);
 }

 int
 x_strncasecmp(const char *s1, const char *s2, unsigned n)
 {
     while (n-- != 0) {
         int c1 = toupper(CharOf(*s1));
         int c2 = toupper(CharOf(*s2));
         if (c1 != c2)
             return 1;
         if (c1 == 0)
             break;
         s1++, s2++;
     }

     return 0;
 }

 /*
  * Allocates a copy of a string
  */
 char *
 x_strdup(const char *s)
 {
     char *result = 0;

     if (s != 0) {
         char *t = CastMallocN(char, strlen(s));
         if (t != 0) {
             strcpy(t, s);
         }
         result = t;
     }
     return result;
 }

 /*
  * Returns a pointer to the first occurrence of s2 in s1,
  * or NULL if there are none.
  */
 char *
 x_strindex(char *s1, char *s2)
 {
     char *s3;
     size_t s2len = strlen(s2);

     while ((s3 = strchr(s1, *s2)) != NULL) {
         if (strncmp(s3, s2, s2len) == 0)
             return (s3);
         s1 = ++s3;
     }
     return (NULL);
 }

 /*
  * Trims leading/trailing spaces from a copy of the string.
  */
 char *
 x_strtrim(char *s)
 {
     char *base = s;
     char *d;

     if (s != 0 && *s != '\0') {
         char *t = x_strdup(base);
         s = t;
         d = s;
         s = x_skip_blanks(s);
         while ((*d++ = *s++) != '\0') {
             ;
         }
         if (*t != '\0') {
             s = t + strlen(t);
             while (s != t && isspace(CharOf(s[-1]))) {
                 *--s = '\0';
             }
         }
         base = t;
     }
     return base;
 }