+int match_pattern_nocase(byte *, byte *);
+
+/* md5hex.c */
+
+void md5_to_hex(byte *, byte *);
+void hex_to_md5(byte *, byte *);
+
+#define MD5_SIZE 16
+#define MD5_HEX_SIZE 33
+
+/* prime.c */
+
+int isprime(uns);
+uns nextprime(uns);
+
+/* timer.c */
+
+void init_timer(void);
+uns get_timer(void);
+
+/* regex.c */
+
+typedef struct regex regex;
+
+regex *rx_compile(byte *r, int icase);
+void rx_free(regex *r);
+int rx_match(regex *r, byte *s);
+int rx_subst(regex *r, byte *by, byte *src, byte *dest, uns destlen);
+
+/* random.c */
+
+uns random_max(uns);
+
+/* mmap.c */
+
+void *mmap_file(byte *name, unsigned *len, int writeable);
+void munmap_file(void *start, unsigned len);
+
+/* partmap.c */
+
+struct partmap;
+struct partmap *partmap_open(byte *name, int writeable);
+void *partmap_map(struct partmap *p, sh_off_t offset, uns size);
+void partmap_close(struct partmap *p);
+sh_off_t partmap_size(struct partmap *p);
+
+/* proctitle.c */
+
+void setproctitle_init(int argc, char **argv);
+void setproctitle(char *msg, ...) __attribute__((format(printf,1,2)));
+
+/* randomkey.c */
+
+void randomkey(byte *buf, uns size);
+
+/* exitstatus.c */
+
+#define EXIT_STATUS_MSG_SIZE 32
+int format_exit_status(byte *msg, int stat);
+
+/* runcmd.c */
+
+int run_command(byte *cmd, ...);
+void NONRET exec_command(byte *cmd, ...);
+void echo_command(byte *buf, int size, byte *cmd, ...);
+int run_command_v(byte *cmd, va_list args);
+void NONRET exec_command_v(byte *cmd, va_list args);
+void echo_command_v(byte *buf, int size, byte *cmd, va_list args);
+
+/* carefulio.c */
+
+int careful_read(int fd, void *buf, int len);
+int careful_write(int fd, void *buf, int len);
+
+/* sighandler.c */
+
+typedef int (*sh_sighandler_t)(int);
+ /* obtains signum, returns nonzero if abort() should be called */
+extern sh_sighandler_t signal_handler[];
+
+struct sigaction;
+void handle_signal(int signum, struct sigaction *oldact);
+void unhandle_signal(int signum, struct sigaction *oldact);
+
+#endif