add Data.Sequence to nhc98 build
[haskell-directory.git] / cbits / fpstring.c
index 3d32083..9e0b809 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2003 David Roundy
- * Copyright (c) 2005-2006 Don Stewart
+ * Copyright (c) 2005-6 Don Stewart
  *
  * All rights reserved.
  *
  * SUCH DAMAGE.
  */
 
-#include <stdlib.h>
+#include "fpstring.h"
 
 /* copy a string in reverse */
-void reverse(unsigned char *dest, unsigned char *from, int len)
-{
-    unsigned char *p, *q;
-    p = from + len - 1;
-    q = dest;
-
-    while (p >= from)
+void fps_reverse(unsigned char *q, unsigned char *p, unsigned long n) {
+    p += n-1;
+    while (n-- != 0)
         *q++ = *p--;
 }
 
-/* compare bytes ascii-wise */
-static int cmp(const void *p, const void *q) {
-    return (*(unsigned char *)p - *(unsigned char *)q);
-}
-
-/* quicksort wrapper */
-void my_qsort(unsigned char *base, size_t size)
-{
-    qsort(base, size, sizeof(char), cmp);
-}
-
 /* duplicate a string, interspersing the character through the elements
    of the duplicated string */
-void intersperse(unsigned char *dest, unsigned char *from, int len, char c)
-{
-    unsigned char *p, *q;
-    p = from;
-    q = dest;
-    while (p < from + len - 1) {
-        *q++ = *p++; 
+void fps_intersperse(unsigned char *q,
+                     unsigned char *p,
+                     unsigned long n,
+                     unsigned char c) {
+
+    while (n > 1) {
+        *q++ = *p++;
         *q++ = c;
+        n--;
     }
-    *q = *p;
+    if (n == 1)
+        *q = *p;
 }
 
 /* find maximum char in a packed string */
-unsigned char maximum(unsigned char *p, int len)
-{
+unsigned char fps_maximum(unsigned char *p, unsigned long len) {
     unsigned char *q, c = *p;
     for (q = p; q < p + len; q++)
         if (*q > c)
@@ -78,11 +64,19 @@ unsigned char maximum(unsigned char *p, int len)
 }
 
 /* find minimum char in a packed string */
-unsigned char minimum(unsigned char *p, int len)
-{
+unsigned char fps_minimum(unsigned char *p, unsigned long  len) {
     unsigned char *q, c = *p;
     for (q = p; q < p + len; q++)
         if (*q < c)
             c = *q;
     return c;
 }
+
+/* count the number of occurences of a char in a string */
+unsigned long fps_count(unsigned char *p, unsigned long len, unsigned char w) {
+    unsigned long c;
+    for (c = 0; len-- != 0; ++p)
+        if (*p == w)
+            ++c;
+    return c;
+}