move hash.[hc] into lib-lib/
[apps/madmutt.git] / lib / str.h
index b9adfec..8629d15 100644 (file)
--- a/lib/str.h
+++ b/lib/str.h
@@ -7,12 +7,57 @@
  * It's licensed under the GNU General Public License,
  * please see the file GPL in the top level source directory.
  */
-
-/* mutt functions which are generally useful. */
-
 #ifndef _LIB_STR_H
 #define _LIB_STR_H
 
-#define NONULL(x) x?x:""
+#include <sys/types.h>
+
+# define HUGE_STRING     5120
+# define LONG_STRING     1024
+# define STRING          256
+# define SHORT_STRING    128
+
+/*
+ * Create a format string to be used with scanf.
+ * To use it, write, for instance, MUTT_FORMAT(HUGE_STRING).
+ * 
+ * See K&R 2nd ed, p. 231 for an explanation.
+ */
+# define _MUTT_FORMAT_2(a,b)   "%" a  b
+# define _MUTT_FORMAT_1(a, b)  _MUTT_FORMAT_2(#a, b)
+# define MUTT_FORMAT(a)                _MUTT_FORMAT_1(a, "s")
+# define MUTT_FORMAT2(a,b)     _MUTT_FORMAT_1(a, b)
+
+# define ISSPACE(c) isspace((unsigned char)c)
+# define ISBLANK(c) (c == ' ' || c == '\t')
+# define strfcpy(A,B,C) strncpy(A,B,C), *(A+(C)-1)=0
+/* this macro must check for *c == 0 since isspace(0) has
+ * unreliable behavior on some systems */
+# define SKIPWS(c) while (*(c) && isspace ((unsigned char) *(c))) c++;
+
+/*
+ * safety wrappers/replacements
+ * (mostly only difference: safely handle NULL strings)
+ */
+char *str_cat (char*, size_t, const char*);
+char *str_ncat (char*, size_t, const char*, size_t);
+int str_cmp (const char*, const char*);
+int str_casecmp (const char*, const char*);
+int str_ncmp (const char*, const char*, size_t);
+int str_ncasecmp (const char*, const char*, size_t);
+int str_coll (const char*, const char*);
+
+/*
+ * tools
+ */
+char *str_tolower (char*);
+char *str_substrcpy (char*, const char*, const char*, size_t);
+char *str_substrdup (const char*, const char*);
+void str_replace (char**, const char*);
+void str_adjust (char**);
+int str_eq (const char*, const char*);
+const char *str_isstr (const char*, const char*);
+char* str_skip_initws (char*);
+void str_skip_trailws (char*);
 
 #endif /* !_LIB_STR_H */