void argsplit_msgarg (struct msgs_array *, char *, char **);
void argsplit_insert (struct msgs_array *, char *, char **);
void arglist_free (char *, char **);
-void ambigsw (char *, struct swit *);
+void ambigsw (const char *, const struct swit *);
int atooi(char *);
char **brkstring (char *, char *, char *);
int context_del (char *);
char *context_find (const char *);
char *context_find_by_type (const char *, const char *, const char *);
+int context_find_prefix(const char *);
int context_foil (char *);
void context_read (void);
void context_replace (char *, char *);
struct msgs *folder_read (char *name, int lockflag);
struct msgs *folder_realloc (struct msgs *, int, int);
-int gans (char *, struct swit *);
-char **getans (char *, struct swit *);
+
+/*
+ * Flush standard output, read a line from standard input into a static buffer,
+ * zero out the newline, and return a pointer to the buffer.
+ * On error, return NULL.
+ */
+const char *read_line(void);
+
+/*
+ * Print null-terminated PROMPT to and flush standard output. Read answers from
+ * standard input until one matches an entry in SWITCHES. When one matches,
+ * return its swret field. Return 0 on EOF.
+ */
+int read_switch(const char *PROMPT, const struct swit *SWITCHES);
+
+/*
+ * If standard input is not a tty, return 1 without printing anything. Else,
+ * print null-terminated PROMPT to and flush standard output. Read answers from
+ * standard input until one is "yes" or "no", returning 1 for "yes" and 0 for
+ * "no". Also return 0 on EOF.
+ */
+int read_yes_or_no_if_tty(const char *PROMPT);
+
+/*
+ * Print null-terminated PROMPT to and flush standard output. Read multi-word
+ * answers from standard input until a first word matches an entry in SWITCHES.
+ * When one matches, return a pointer to an array of pointers to the words.
+ * Return NULL on EOF, interrupt, or other error.
+ */
+char **read_switch_multiword(const char *PROMPT, const struct swit *SWITCHES);
+
+/*
+ * Same as read_switch_multiword but using readline(3) for input.
+ */
#ifdef READLINE_SUPPORT
-char **getans_via_readline (char *, struct swit *);
+char **read_switch_multiword_via_readline (char *, struct swit *);
#endif /* READLINE_SUPPORT */
-int getanswer (char *);
+
char **getarguments (char *, int, char **, int);
/*
void m_pclose(void);
void m_unknown(m_getfld_state_t *, FILE *);
-int makedir (char *);
+int makedir (const char *);
char *message_id (time_t, int);
/*
int pidstatus (int, FILE *, char *);
char *pluspath(char *);
void print_help (char *, struct swit *, int);
-void print_sw (char *, struct swit *, char *, FILE *);
+void print_sw (const char *, const struct swit *, char *, FILE *);
void print_version (char *);
void push (void);
char *pwd (void);
void seq_setprev (struct msgs *);
void seq_setunseen (struct msgs *, int);
int showfile (char **, char *);
-int smatch(char *, struct swit *);
+int smatch(const char *, const struct swit *);
/*
* Convert a set of bit flags to printable format.
* from least significant bit to most significant.
*/
char *snprintb (char *buffer, size_t size, unsigned flags, char *bitfield);
-int ssequal (char *, char *);
+int ssequal (const char *, const char *);
int stringdex (char *, char *);
char *trimcpy (char *);
int unputenv (char *);
int sc_width(void);
int build_form (char *, char *, int *, char *, char *, char *, char *,
char *, char *);
-int sendsbr (char **, int, char *, char *, struct stat *, int);
+int sendsbr (char **, int, char *, char *, struct stat *, int, const char *);
int SOprintf (char *, ...);
int what_now (char *, int, int, char *, char *,
int, struct msgs *, char *, int, char *, int);
int writeBase64 (unsigned char *, size_t, unsigned char *);
int writeBase64raw (unsigned char *, size_t, unsigned char *);
+/*
+ * first argument: the string to be decoded
+ * second argument: the decoded bytes
+ * third argument: number of decoded bytes
+ * fourth argument: non-zero for text content, and for which CR's should be skipped
+ * fifth argument: for an MD5 digest, it can be null
+ */
+int decodeBase64 (const char *, const char **, size_t *, int, unsigned char *);
+
+void hexify (const unsigned char *, size_t, char **);
+
/*
* credentials management
*/