+/*
+ * remove_token() - a tokenizer that kills, maims, and destroys
+ */
+/**
+ * \brief a string tokenizer
+ * \param Source StringBuffer to read into
+ * \param parmnum n'th parameter to remove
+ * \param separator tokenizer param
+ * \returns -1 if not found, else length of token.
+ */
+int StrBufRemove_token(StrBuf *Source, int parmnum, char separator)
+{
+ int ReducedBy;
+ char *d, *s; /* dest, source */
+ int count = 0;
+
+ /* Find desired parameter */
+ d = Source->buf;
+ while (count < parmnum) {
+ /* End of string, bail! */
+ if (!*d) {
+ d = NULL;
+ break;
+ }
+ if (*d == separator) {
+ count++;
+ }
+ d++;
+ }
+ if (!d) return 0; /* Parameter not found */
+
+ /* Find next parameter */
+ s = d;
+ while (*s && *s != separator) {
+ s++;
+ }
+
+ ReducedBy = d - s;
+
+ /* Hack and slash */
+ if (*s) {
+ memmove(d, s, Source->BufUsed - (s - Source->buf));
+ Source->BufUsed -= (ReducedBy + 1);
+ }
+ else if (d == Source->buf) {
+ *d = 0;
+ Source->BufUsed = 0;
+ }
+ else {
+ *--d = 0;
+ Source->BufUsed -= (ReducedBy + 1);
+ }
+ /*
+ while (*s) {
+ *d++ = *s++;
+ }
+ *d = 0;
+ */
+ return ReducedBy;
+}
+
+