Index: trunk/psLib/src/sys/psString.c
===================================================================
--- trunk/psLib/src/sys/psString.c	(revision 5569)
+++ trunk/psLib/src/sys/psString.c	(revision 6201)
@@ -11,7 +11,8 @@
  *
  *  @author Eric Van Alst, MHPCC
- *
- *  @version $Revision: 1.21 $ $Name: not supported by cvs2svn $
- *  @date $Date: 2005-11-22 19:11:07 $
+ *  @author David Robbins, MHPCC
+ *
+ *  @version $Revision: 1.22 $ $Name: not supported by cvs2svn $
+ *  @date $Date: 2006-01-26 05:31:54 $
  *
  *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
@@ -35,5 +36,6 @@
 }
 
-psString psStringNCopy(const char *string, unsigned int nChar)
+psString psStringNCopy(const char *string,
+                       unsigned int nChar)
 {
     char *returnValue = NULL;
@@ -59,5 +61,7 @@
 }
 
-ssize_t psStringAppend(char **dest, const char *format, ...)
+ssize_t psStringAppend(char **dest,
+                       const char *format,
+                       ...)
 {
     va_list         args;
@@ -104,5 +108,7 @@
 }
 
-ssize_t psStringPrepend(char **dest, const char *format, ...)
+ssize_t psStringPrepend(char **dest,
+                        const char *format,
+                        ...)
 {
     va_list         args;
@@ -157,2 +163,41 @@
     return length;
 }
+
+// XXX: This should probably be implemented using strpbrk
+psList *psStringSplit(const char *string,
+                      const char *splitters)
+{
+    psList *values = psListAlloc(NULL); // The list of values to return
+    unsigned int length = strlen(string); // The length of the string
+    unsigned int numSplitters = strlen(splitters); // Number of characters that might split
+    unsigned int start = 0;             // The position of the start of a word
+    for (int i = 1; i < length; i++) {
+        bool split = false;             // Is this character a splitter?
+        for (int j = 0; j < numSplitters && ! split; j++) {
+            if (string[i] == splitters[j]) {
+                split = true;
+            }
+        }
+        if (split) {
+            if (i == start) {
+                // Some idiot put in two spaces, or two commas or something
+                start++;
+            } else {
+                // We're at the end of the word
+                psString word = psStringNCopy(&string[start], i - start);
+                (void)psListAdd(values, PS_LIST_TAIL, word);
+                start = i + 1;
+                psFree(word);
+            }
+        }
+    }
+    if (start < length) {
+        // Copy the last word
+        psString word = psStringNCopy(&string[start], length - start);
+        (void)psListAdd(values, PS_LIST_TAIL, word);
+        psFree(word);
+    }
+
+    return values;
+}
+
