Version 1 of tedickey

Updated 2007-11-09 23:35:32 by tedickey

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;

}