1 /* 2 * Project : tin - a Usenet reader 3 * Module : proto.h 4 * Author : Urs Janssen <urs@tin.org> 5 * Created : 6 * Updated : 2020-06-10 7 * Notes : 8 * 9 * Copyright (c) 1997-2021 Urs Janssen <urs@tin.org> 10 * All rights reserved. 11 * 12 * Redistribution and use in source and binary forms, with or without 13 * modification, are permitted provided that the following conditions 14 * are met: 15 * 16 * 1. Redistributions of source code must retain the above copyright notice, 17 * this list of conditions and the following disclaimer. 18 * 19 * 2. Redistributions in binary form must reproduce the above copyright 20 * notice, this list of conditions and the following disclaimer in the 21 * documentation and/or other materials provided with the distribution. 22 * 23 * 3. Neither the name of the copyright holder nor the names of its 24 * contributors may be used to endorse or promote products derived from 25 * this software without specific prior written permission. 26 * 27 * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 28 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 29 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 30 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 31 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 32 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 33 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 34 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 35 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 36 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 37 * POSSIBILITY OF SUCH DAMAGE. 38 */ 39 40 41 #ifndef PROTO_H 42 # define PROTO_H 1 43 44 #ifndef KEYMAP_H 45 # include "keymap.h" 46 #endif /* !KEYMAP_H */ 47 #ifndef OPTIONS_MENU_H 48 # include "options_menu.h" 49 #endif /* !OPTIONS_MENU_H */ 50 51 /* This fixes ambiguities on platforms that don't distinguish extern case */ 52 #ifdef CASE_PROBLEM 53 # define Raw tin_raw 54 # define EndWin tin_EndWin 55 #endif /* CASE_PROBLEM */ 56 57 /* active.c */ 58 extern char group_flag(char ch); 59 extern int find_newnews_index(const char *cur_newnews_host); 60 extern int read_news_active_file(void); 61 extern t_bool match_group_list(const char *group, const char *group_list); 62 extern t_bool parse_active_line(char *line, t_artnum *max, t_artnum *min, char *moderated); 63 extern t_bool process_bogus(char *name); 64 extern t_bool need_reread_active_file(void); 65 extern t_bool resync_active_file(void); 66 extern void create_save_active_file(void); 67 extern void load_newnews_info(char *info); 68 69 /* art.c */ 70 extern int find_artnum(t_artnum art); 71 extern int global_get_multipart_info(int aindex, MultiPartInfo *setme); 72 extern int global_get_multiparts(int aindex, MultiPartInfo **malloc_and_setme_info, t_bool tagging); 73 extern t_bool global_look_for_multipart(int aindex, char start, char stop); 74 extern t_bool index_group(struct t_group *group); 75 extern void do_update(t_bool catchup); 76 extern void find_base(struct t_group *group); 77 extern void make_threads(struct t_group *group, t_bool rethread); 78 extern void set_article(struct t_article *art); 79 extern void show_art_msg(const char *group); 80 extern void sort_arts(unsigned /* int */ sort_art_type); 81 82 /* attrib.c */ 83 extern int add_scope(const char *scope); 84 extern void assign_attributes_to_groups(void); 85 extern void build_news_headers_array(struct t_attribute *scope, t_bool header_to_display); 86 extern void read_attributes_file(t_bool global_file); 87 extern void write_attributes_file(const char *file); 88 89 /* auth.c */ 90 #ifdef NNTP_ABLE 91 extern t_bool authenticate(char *server, char *user, t_bool startup); 92 #endif /* NNTP_ABLE */ 93 94 /* charset.c */ 95 extern char *convert_to_printable(char *buf, t_bool keep_tab); 96 extern t_bool is_art_tex_encoded(FILE *fp); 97 extern void convert_iso2asc(char *iso, char **asc_buffer, size_t *max_line_len, int t); 98 extern void convert_tex2iso(char *from, char *to); 99 #if defined(MULTIBYTE_ABLE) && !defined(NO_LOCALE) 100 extern wchar_t *wconvert_to_printable(wchar_t *wbuf, t_bool keep_tab); 101 #endif /* MULTIBYTE_ABLE && !NO_LOCALE */ 102 103 /* color.c */ 104 extern void draw_pager_line(const char *str, int flags, t_bool raw_data); 105 #ifdef HAVE_COLOR 106 extern void bcol(int color); 107 extern void fcol(int color); 108 # ifdef USE_CURSES 109 extern void free_color_pair_arrays(void); 110 # endif /* USE_CURSES */ 111 #endif /* HAVE_COLOR */ 112 113 /* config.c */ 114 extern char **ulBuildArgv(char *cmd, int *new_argc); 115 extern char *quote_space_to_dash(char *str); 116 extern const char *print_boolean(t_bool value); 117 extern t_bool match_boolean(char *line, const char *pat, t_bool *dst); 118 extern t_bool match_integer(char *line, const char *pat, int *dst, int maxval); 119 extern t_bool match_list(char *line, constext *pat, constext *const *table, int *dst); 120 extern t_bool match_long(char *line, const char *pat, long *dst); 121 extern t_bool match_string(char *line, const char *pat, char *dst, size_t dstlen); 122 extern t_bool read_config_file(char *file, t_bool global_file); 123 extern void quote_dash_to_space(char *str); 124 extern void read_server_config(void); 125 extern void write_config_file(char *file); 126 127 /* cook.c */ 128 extern const char *get_filename(t_param *ptr); 129 extern t_bool cook_article(t_bool wrap_lines, t_openartinfo *artinfo, int hide_uue, t_bool show_all_headers); 130 extern t_bool expand_ctrl_chars(char **line, size_t *length, size_t lcook_width); 131 132 /* curses.c */ 133 extern OUTC_RETTYPE outchar(OUTC_ARGS); 134 extern int InitScreen(void); 135 extern int RawState(void); 136 extern int ReadCh(void); 137 extern int get_arrow_key(int prech); 138 #if !defined(USE_CURSES) 139 extern int get_termcaps(void); 140 #endif /* !USE_CURSES */ 141 extern void EndInverse(void); 142 extern void EndWin(void); 143 extern void InitWin(void); 144 extern void Raw(int state); 145 extern void StartInverse(void); 146 extern void cursoroff(void); 147 extern void cursoron(void); 148 extern void highlight_string(int row, int col, int size); 149 extern void set_keypad_off(void); 150 extern void set_keypad_on(void); 151 extern void set_xclick_off(void); 152 extern void set_xclick_on(void); 153 extern void setup_screen(void); 154 extern void word_highlight_string(int row, int col, int size, int color); 155 #if defined(MULTIBYTE_ABLE) && !defined(NO_LOCALE) && !defined(USE_CURSES) 156 extern wint_t ReadWch(void); 157 #endif /* MULTIBYTE_ABLE && !NO_LOCALE && !USE_CURSES */ 158 #ifndef USE_CURSES 159 extern void ClearScreen(void); 160 extern void CleartoEOLN(void); 161 extern void CleartoEOS(void); 162 extern void MoveCursor(int row, int col); 163 extern void ScrollScreen(int lines_to_scroll); 164 extern void SetScrollRegion(int topline, int bottomline); 165 # ifdef HAVE_COLOR 166 extern void reset_screen_attr(void); 167 # endif /* HAVE_COLOR */ 168 #endif /* USE_CURSES */ 169 #if 0 170 extern void ToggleInverse(void); 171 #endif /* 0 */ 172 173 /* debug.c */ 174 #ifdef DEBUG 175 extern void debug_delete_files(void); 176 extern void debug_print_file(const char *fname, const char *fmt, ...); 177 extern void debug_print_active(void); 178 extern void debug_print_arts(void); 179 extern void debug_print_bitmap(struct t_group *group, struct t_article *art); 180 extern void debug_print_comment(const char *comment); 181 extern void debug_print_filters(void); 182 extern void debug_print_header(struct t_article *s); 183 extern void debug_print_malloc(t_bool is_malloc, const char *xfile, int line, size_t size); 184 # ifdef DEBUG 185 extern const char *logtime(void); 186 # endif /* DEBUG */ 187 #endif /* DEBUG */ 188 189 /* envarg.c */ 190 extern void envargs(int *Pargc, char ***Pargv, const char *envstr); 191 192 /* feed.c */ 193 extern int feed_articles(int function, int level, t_function type, struct t_group *group, int respnum); 194 195 /* filter.c */ 196 extern t_bool filter_articles(struct t_group *group); 197 extern t_bool filter_menu(t_function type, struct t_group *group, struct t_article *art); 198 extern t_bool filter_on_path(struct t_group *group); 199 extern t_bool quick_filter(t_function type, struct t_group *group, struct t_article *art); 200 extern t_bool quick_filter_select_posted_art(struct t_group *group, const char *subj, const char *a_message_id); 201 extern t_bool read_filter_file(const char *file); 202 extern void free_filter_array(struct t_filters *ptr); 203 #if defined(SIGWINCH) || defined(SIGTSTP) 204 extern void refresh_filter_menu(void); 205 #endif /* SIGWINCH || SIGTSTP */ 206 extern void unfilter_articles(struct t_group *group); 207 extern void write_filter_file(const char *filename); 208 209 /* getline.c */ 210 extern char *tin_getline(const char *prompt, int number_only, const char *str, int max_chars, t_bool passwd, int which_hist); 211 extern void gl_redraw(void); 212 213 /* global.c */ 214 extern void bug_report(void); 215 extern void move_up(void); 216 extern void move_down(void); 217 extern void page_up(void); 218 extern void page_down(void); 219 extern void top_of_list(void); 220 extern void end_of_list(void); 221 extern void move_to_item(int n); 222 extern void prompt_item_num(int ch, const char *prompt); 223 extern void scroll_down(void); 224 extern void scroll_up(void); 225 extern void set_first_screen_item(void); 226 227 /* group.c */ 228 extern int group_page(struct t_group *group); 229 extern t_bool group_mark_postprocess(int function, t_function feed_type, int respnum); 230 extern void clear_note_area(void); 231 extern void mark_screen(int screen_row, int screen_col, const char *value); 232 extern void pos_first_unread_thread(void); 233 extern void show_group_page(void); 234 235 /* hashstr.c */ 236 extern char *hash_str(const char *s); 237 extern void hash_init(void); 238 extern void hash_reclaim(void); 239 240 /* help.c */ 241 extern void show_help_page(const int level, const char *title); 242 extern void show_mini_help(int level); 243 extern void toggle_mini_help(int level); 244 245 /* header.c */ 246 extern const char *get_domain_name(void); 247 extern const char *get_fqdn(const char *host); 248 extern const char *get_host_name(void); 249 #ifndef FORGERY 250 extern char *build_sender(void); 251 #endif /* !FORGERY */ 252 253 /* heapsort.c */ 254 #ifndef HAVE_HEAPSORT 255 extern int heapsort(void *, size_t, size_t, t_compfunc); 256 #endif /* !HAVE_HEAPSORT */ 257 258 /* inews.c */ 259 extern t_bool submit_news_file(char *name, struct t_group *group, char *a_message_id); 260 extern void get_from_name(char *from_name, struct t_group *thisgrp); 261 extern void get_user_info(char *user_name, char *full_name); 262 263 /* init.c */ 264 extern void init_selfinfo(void); 265 extern void postinit_regexp(void); 266 #ifdef HAVE_COLOR 267 extern void postinit_colors(int last_color); 268 #endif /* HAVE_COLOR */ 269 #if defined(MULTIBYTE_ABLE) && !defined(NO_LOCALE) 270 extern t_bool utf8_pcre(void); 271 #endif /* MULTIBYTE_ABLE && !NO_LOCALE */ 272 273 /* joinpath.c */ 274 extern void joinpath(char *result, size_t result_size, const char *dir, const char *file); 275 276 /* keymap.c */ 277 extern t_bool read_keymap_file(void); 278 extern void free_keymaps(void); 279 extern void setup_default_keys(void); 280 281 /* langinfo.c */ 282 #ifndef NO_LOCALE 283 extern const char *tin_nl_langinfo(nl_item item); 284 #endif /* !NO_LOCALE */ 285 286 /* list.c */ 287 extern char *random_organization(char *in_org); 288 extern int find_group_index(const char *group, t_bool ignore_case); 289 extern struct t_group *group_add(const char *group); 290 extern struct t_group *group_find(const char *group_name, t_bool ignore_case); 291 extern unsigned long hash_groupname(const char *group); 292 extern void group_rehash(t_bool yanked_out); 293 extern void init_group_hash(void); 294 295 /* lock.c */ 296 extern int fd_lock(int fd, t_bool block); 297 extern int fd_unlock(int fd); 298 extern t_bool dot_lock(const char *filename); 299 extern t_bool dot_unlock(const char *filename); 300 #if 0 /* unused */ 301 extern int test_fd_lock(int fd); 302 #endif /* 0 */ 303 304 /* mail.c */ 305 extern t_bool art_edit(struct t_group *group, struct t_article *article); 306 extern void find_art_max_min(const char *group_path, t_artnum *art_max, t_artnum *art_min); 307 extern void print_active_head(const char *active_file); 308 extern void print_group_line(FILE *fp, const char *group_name, t_artnum art_max, t_artnum art_min, const char *base_dir); 309 extern void read_descriptions(t_bool verb); 310 extern void grp_del_mail_arts(struct t_group *group); 311 extern void grp_del_mail_art(struct t_article *article); 312 #ifdef HAVE_MH_MAIL_HANDLING 313 extern void read_mail_active_file(void); 314 extern void write_mail_active_file(void); 315 #endif /* HAVE_MH_MAIL_HANDLING */ 316 317 /* main.c */ 318 extern int main(int argc, char *argv[]); 319 extern int read_cmd_line_groups(void); 320 extern void giveup(void); 321 322 /* memory.c */ 323 extern void expand_active(void); 324 extern void expand_art(void); 325 extern void expand_base(void); 326 extern void expand_newnews(void); 327 extern void expand_save(void); 328 extern void expand_scope(void); 329 extern void init_alloc(void); 330 extern void free_all_arrays(void); 331 extern void free_art_array(void); 332 extern void free_save_array(void); 333 extern void free_scope(int num); 334 extern void *my_malloc1(const char *file, int line, size_t size); 335 extern void *my_calloc1(const char *file, int line, size_t nmemb, size_t size); 336 extern void *my_realloc1(const char *file, int line, void *p, size_t size); 337 #ifndef USE_CURSES 338 extern void init_screen_array(t_bool allocate); 339 #endif /* !USE_CURSES */ 340 341 /* mimetypes.c */ 342 extern void lookup_mimetype(const char *ext, t_part *part); 343 extern t_bool lookup_extension(char *extension, size_t ext_len, const char *major, const char *minor); 344 345 /* misc.c */ 346 extern char *buffer_to_ascii(char *c); 347 extern char *escape_shell_meta(const char *source, int quote_area); 348 extern char *get_tmpfilename(const char *filename); 349 extern char *idna_decode(char *in); 350 extern char *quote_wild(char *str); 351 extern char *quote_wild_whitespace(char *str); 352 extern char *strip_line(char *line); 353 extern const char *eat_re(char *s, t_bool eat_was); 354 extern const char *get_val(const char *env, const char *def); 355 extern const char *gnksa_strerror(int errcode); 356 extern int gnksa_check_from(char *from); 357 extern int gnksa_split_from(const char *from, char *address, char *realname, int *addrtype); 358 extern int get_initials(struct t_article *art, char *s, int maxsize); 359 extern int gnksa_do_check_from(const char *from, char *address, char *realname); 360 extern int my_mkdir(char *path, mode_t mode); 361 extern int parse_from(const char *from, char *address, char *realname); 362 extern int strfmailer(const char *mail_prog, char *subject, char *to, const char *filename, char *dest, size_t maxsize, const char *format); 363 extern int strfpath(const char *format, char *str, size_t maxsize, struct t_group *group, t_bool expand_all); 364 extern int strfquote(const char *group, int respnum, char *s, size_t maxsize, char *format); 365 extern int tin_version_info(FILE *fp); 366 extern int tin_gettime(struct t_tintime *tt); 367 extern long file_mtime(const char *file); 368 extern long file_size(const char *file); 369 extern t_bool backup_file(const char *filename, const char *backupname); 370 extern t_bool copy_fp(FILE *fp_ip, FILE *fp_op); 371 extern t_bool invoke_cmd(const char *nam); 372 extern t_bool invoke_editor(const char *filename, int lineno, struct t_group *group); 373 extern t_bool mail_check(const char *mailbox_name); 374 extern void append_file(char *old_filename, char *new_filename); 375 extern void asfail(const char *file, int line, const char *cond); 376 extern void base_name(const char *fullpath, char *file); 377 extern void cleanup_tmp_files(void); 378 extern void copy_body(FILE *fp_ip, FILE *fp_op, char *prefix, char *initl, t_bool raw_data); 379 extern void create_index_lock_file(char *the_lock_file); 380 extern void dir_name(const char *fullpath, char *dir); 381 extern void draw_mark_selected(int i); 382 extern void draw_percent_mark(long cur_num, long max_num); 383 extern void get_author(t_bool thread, struct t_article *art, char *str, size_t len); 384 extern void get_cwd(char *buf); 385 extern void make_base_group_path(const char *base_dir, const char *group_name, char *group_path, size_t group_path_len); 386 extern void make_group_path(const char *name, char *path); 387 extern void process_charsets(char **line, size_t *max_line_len, const char *network_charset, const char *local_charset, t_bool conv_tex2iso); 388 extern void read_input_history_file(void); 389 extern void rename_file(const char *old_filename, const char *new_filename); 390 extern void show_inverse_video_status(void); 391 extern void strip_name(const char *from, char *address); 392 extern void tin_done(int ret, const char *fmt, ...); 393 extern void toggle_inverse_video(void); 394 #if defined(CHARSET_CONVERSION) || (defined(MULTIBYTE_ABLE) && !defined(NO_LOCALE)) 395 extern char *utf8_valid(char *line); 396 #endif /* CHARSET_CONVERSION || (MULTIBYTE_ABLE && !NO_LOCALE) */ 397 #if defined(NO_LOCALE) || !defined(MULTIBYTE_ABLE) 398 extern int my_isprint(int c); 399 #endif /* NO_LOCALE || !MULTIBYTE_ABLE */ 400 #ifdef CHARSET_CONVERSION 401 extern t_bool buffer_to_network(char *line, int mmnwcharset); 402 #endif /* CHARSET_CONVERSION */ 403 #ifdef HAVE_COLOR 404 extern t_bool toggle_color(void); 405 extern void show_color_status(void); 406 #endif /* HAVE_COLOR */ 407 #ifdef HAVE_ISPELL 408 extern t_bool invoke_ispell(const char *nam, struct t_group *group); 409 #endif /* HAVE_ISPELL */ 410 #ifndef NO_SHELL_ESCAPE 411 extern void shell_escape(void); 412 extern void do_shell_escape(void); 413 #endif /* !NO_SHELL_ESCAPE */ 414 415 /* newsrc.c */ 416 extern int group_get_art_info(char *tin_spooldir, char *groupname, int grouptype, t_artnum *art_count, t_artnum *art_max, t_artnum *art_min); 417 extern signed long int read_newsrc(char *newsrc_file, t_bool allgroups); 418 extern signed long int write_newsrc(void); 419 extern t_bool pos_group_in_newsrc(struct t_group *group, int pos); 420 extern void art_mark(struct t_group *group, struct t_article *art, int flag); 421 extern void backup_newsrc(void); 422 extern void catchup_newsrc_file(void); 423 extern void delete_group(char *group); 424 extern void expand_bitmap(struct t_group *group, t_artnum min); 425 extern void grp_mark_read(struct t_group *group, struct t_article *art); 426 extern void grp_mark_unread(struct t_group *group); 427 extern void parse_unread_arts(struct t_group *group, t_artnum min); 428 extern void reset_newsrc(void); 429 extern void subscribe(struct t_group *group, int sub_state, t_bool get_info); 430 extern void thd_mark_read(struct t_group *group, long thread); 431 extern void thd_mark_unread(struct t_group *group, long thread); 432 extern void set_default_bitmap(struct t_group *group); 433 434 /* nntplib.c */ 435 extern FILE *get_nntp_fp(FILE *fp); 436 /* extern FILE *get_nntp_wr_fp(FILE *fp); */ 437 extern char *getserverbyfile(const char *file); 438 extern int nntp_open(void); 439 extern void nntp_close(t_bool send_no_quit); 440 #ifdef NNTP_ABLE 441 extern FILE *nntp_command(const char *, int, char *, size_t); 442 extern char *get_server(char *string, int size); 443 extern int check_extensions(int); 444 extern int get_respcode(char *, size_t); 445 extern int get_only_respcode(char *, size_t); 446 extern int new_nntp_command(const char *command, int success, char *message, size_t mlen); 447 extern void put_server(const char *string); 448 extern void u_put_server(const char *string); 449 #endif /* NNTP_ABLE */ 450 451 /* nrctbl.c */ 452 extern t_bool get_newsrcname(char *newsrc_name, size_t newsrc_name_len, const char *nntpserver_name); 453 #ifdef NNTP_ABLE 454 extern void get_nntpserver(char *nntpserver_name, size_t nntpserver_name_len, char *nick_name); 455 #endif /* NNTP_ABLE */ 456 457 /* options_menu.c */ 458 extern char *fmt_option_prompt(char *dst, size_t len, t_bool editing, enum option_enum option); 459 extern void config_page(const char *grpname, enum context level); 460 extern int option_row(enum option_enum option); 461 extern t_bool option_is_visible(enum option_enum option); 462 extern void check_score_defaults(void); 463 extern void refresh_config_page(enum option_enum act_option); 464 extern void show_menu_help(const char *help_message); 465 466 /* page.c */ 467 extern int show_page(struct t_group *group, int start_respnum, int *threadnum); 468 extern void display_info_page(int part); 469 extern void draw_page(const char *group, int part); 470 extern void info_pager(FILE *info_fh, const char *title, t_bool wrap_at_ends); 471 extern void resize_article(t_bool wrap_lines, t_openartinfo *artinfo); 472 extern void toggle_raw(struct t_group *group); 473 474 /* parsdate.y */ 475 extern time_t parsedate(char *p, TIMEINFO *now); 476 477 /* pgp.c */ 478 #ifdef HAVE_PGP_GPG 479 extern t_bool pgp_check_article(t_openartinfo *artinfo); 480 extern void init_pgp(void); 481 extern void invoke_pgp_mail(const char *nam, char *mail_to); 482 extern void invoke_pgp_news(char *artfile); 483 #endif /* HAVE_PGP_GPG */ 484 485 /* plp_snprintf.c */ 486 #ifndef HAVE_SNPRINTF 487 extern int plp_snprintf(char *, size_t, const char *, ...); 488 #endif /* !HAVE_SNPRINTF */ 489 #ifndef HAVE_VSNPRINTF 490 extern int plp_vsnprintf(char *, size_t, const char *, va_list); 491 #endif /* !HAVE_VSNPRINTF */ 492 493 /* post.c */ 494 extern char *backup_article_name(const char *the_article); 495 extern char *checknadd_headers(const char *infile, struct t_group *group); 496 extern int count_postponed_articles(void); 497 extern int mail_to_author(const char *group, int respnum, t_bool copy_text, t_bool with_headers, t_bool raw_data); 498 extern int mail_to_someone(const char *address, t_bool confirm_to_mail, t_openartinfo *artinfo, const struct t_group *group); 499 extern int post_response(const char *groupname, int respnum, t_bool copy_text, t_bool with_headers, t_bool raw_data); 500 extern int repost_article(const char *groupname, int respnum, t_bool supersede, t_openartinfo *artinfo); 501 extern t_bool cancel_article(struct t_group *group, struct t_article *art, int respnum); 502 extern t_bool mail_bug_report(void); 503 extern t_bool pickup_postponed_articles(t_bool ask, t_bool all); 504 extern t_bool post_article(const char *groupname); 505 extern t_bool reread_active_after_posting(void); 506 extern t_bool user_posted_messages(void); 507 extern void init_postinfo(void); 508 extern void quick_post_article(t_bool postponed_only, int num_cmd_line_groups); 509 #if defined(SIGWINCH) || defined(SIGTSTP) 510 extern void refresh_post_screen(int context); 511 #endif /* SIGWINCH || SIGTSTP */ 512 #ifdef USE_CANLOCK 513 extern char *build_canlock(const char *messageid, const char *secret); 514 extern char *get_secret(void); 515 #endif /* USE_CANLOCK */ 516 517 /* prompt.c */ 518 extern char *prompt_string_default(const char *prompt, char *def, const char *failtext, int history); 519 extern char *sized_message(char **result, const char *format, const char *subject); 520 extern int prompt_num(int ch, const char *prompt); 521 extern int prompt_yn(const char *prompt, t_bool default_answer); 522 extern int prompt_msgid(void); 523 extern t_bool prompt_default_string(const char *prompt, char *buf, int buf_len, char *default_prompt, int which_hist); 524 extern t_bool prompt_menu_string(int line, const char *prompt, char *var); 525 extern t_bool prompt_option_char(enum option_enum option); 526 extern t_bool prompt_option_list(enum option_enum option); 527 extern t_bool prompt_option_num(enum option_enum option); 528 extern t_bool prompt_option_on_off(enum option_enum option); 529 extern t_bool prompt_option_string(enum option_enum option); 530 extern t_bool prompt_string(const char *prompt, char *buf, int which_hist); 531 extern void prompt_continue(void); 532 extern void prompt_slk_redraw(void); 533 extern void prompt_yn_redraw(void); 534 535 /* read.c */ 536 extern char *tin_fgets(FILE *fp, t_bool header); 537 #ifdef HAVE_SELECT 538 extern t_bool wait_for_input(void); 539 #endif /* HAVE_SELECT */ 540 #ifdef NNTP_ABLE 541 extern void drain_buffer(FILE *fp); 542 #endif /* NNTP_ABLE */ 543 544 /* refs.c */ 545 extern char *get_references(struct t_msgid *refptr); 546 extern struct t_msgid *find_msgid(const char *msgid); 547 extern void build_references(struct t_group *group); 548 extern void clear_art_ptrs(void); 549 extern void collate_subjects(void); 550 extern void free_msgids(void); 551 extern void thread_by_reference(void); 552 553 /* regex.c */ 554 extern t_bool compile_regex(const char *regex, struct regex_cache *cache, int options); 555 extern t_bool match_regex(const char *string, char *pattern, struct regex_cache *cache, t_bool icase); 556 extern void highlight_regexes(int row, struct regex_cache *regex, int color); 557 558 /* rfc1524.c */ 559 extern t_mailcap *get_mailcap_entry(t_part *part, const char *path); 560 extern void free_mailcap(t_mailcap *tmailcap); 561 562 /* rfc2045.c */ 563 extern int read_decoded_base64_line(FILE *file, char **line, size_t *max_line_len, const int max_lines_to_read, char **rest); 564 extern int read_decoded_qp_line(FILE *file, char **line, size_t *max_line_len, const int max_lines_to_read); 565 extern void rfc1521_encode(char *line, FILE *f, int e); 566 567 /* rfc2046.c */ 568 extern FILE *open_art_fp(struct t_group *group, t_artnum art); 569 extern const char *get_param(t_param *list, const char *name); 570 extern char *parse_header(char *buf, const char *pat, t_bool decode, t_bool structured, t_bool keep_tab); 571 extern int art_open(t_bool wrap_lines, struct t_article *art, struct t_group *group, t_openartinfo *artinfo, t_bool show_progress_meter, const char *pmesg); 572 extern int content_type(char *type); 573 extern int parse_rfc822_headers(struct t_header *hdr, FILE *from, FILE *to); 574 extern t_param *new_params(void); 575 extern t_part *new_part(t_part *part); 576 extern void art_close(t_openartinfo *artinfo); 577 extern void free_and_init_header(struct t_header *hdr); 578 extern void free_list(t_param *list); 579 extern void free_parts(t_part *ptr); 580 extern void unfold_header(char *line); 581 582 /* rfc2047.c */ 583 extern char *rfc1522_decode(const char *s); 584 extern char *rfc1522_encode(char *s, const char *charset, t_bool ismail); 585 extern int mmdecode(const char *what, int encoding, int delimiter, char *where); 586 extern void rfc15211522_encode(const char *filename, constext *mime_encoding, struct t_group *group, t_bool allow_8bit_header, t_bool ismail); 587 extern void compose_mail_mime_forwarded(const char *filename, FILE *articlefp, t_bool include_text, struct t_group *group); 588 extern void compose_mail_text_plain(const char *filename, struct t_group *group); 589 590 /* save.c */ 591 extern int check_start_save_any_news(int function, t_bool catchup); 592 extern t_bool create_path(const char *path); 593 extern t_bool post_process_files(t_function proc_type_func, t_bool auto_delete); 594 extern t_bool save_and_process_art(t_openartinfo *artinfo, struct t_article *artptr, t_bool is_mailbox, const char *inpath, int max, t_bool post_process); 595 extern t_part *get_part(int n); 596 extern t_url *find_url(int n); 597 extern void attachment_page(t_openartinfo *art); 598 extern void decode_save_mime(t_openartinfo *art, t_bool postproc); 599 extern void print_art_separator_line(FILE *fp, t_bool is_mailbox); 600 601 /* screen.c */ 602 extern char *fmt_message(const char *fmt, va_list ap); 603 extern void center_line(int line, t_bool inverse, const char *str); 604 extern void clear_message(void); 605 extern void draw_arrow_mark(int line); 606 extern void erase_arrow(void); 607 extern void error_message(unsigned int sdelay, const char *fmt, ...); 608 extern void info_message(const char *fmt, ...); 609 extern void perror_message(const char *fmt, ...); 610 extern void ring_bell(void); 611 extern void show_progress(const char *txt, t_artnum count, t_artnum total); 612 extern void show_title(const char *title); 613 extern void spin_cursor(void); 614 extern void stow_cursor(void); 615 extern void wait_message(unsigned int sdelay, const char *fmt, ...); 616 617 /* search.c */ 618 extern enum option_enum search_config(t_bool forward, t_bool repeat, enum option_enum current, enum option_enum last); 619 extern int get_search_vectors(int *start, int *end); 620 extern int search(t_function func, int current_art, t_bool repeat); 621 extern int search_active(t_bool forward, t_bool repeat); 622 extern int search_article(t_bool forward, t_bool repeat, int start_line, int lines, t_lineinfo *line, int reveal_ctrl_l_lines, FILE *fp); 623 extern int search_body(struct t_group *group, int current_art, t_bool repeat); 624 extern int generic_search(t_bool forward, t_bool repeat, int current, int last, int level); 625 extern void reset_srch_offsets(void); 626 627 /* select.c */ 628 extern int add_my_group(const char *group, t_bool add, t_bool ignore_case); 629 extern int choose_new_group(void); 630 extern int skip_newgroups(void); 631 extern void selection_page(int start_groupnum, int num_cmd_line_groups); 632 extern void show_selection_page(void); 633 extern void toggle_my_groups(const char *group); 634 635 /* sigfile.c */ 636 extern void msg_write_signature(FILE *fp, t_bool include_dot_signature, struct t_group *thisgroup); 637 638 /* signal.c */ 639 extern RETSIGTYPE(*sigdisp (int signum, RETSIGTYPE (*func)(SIG_ARGS))) (SIG_ARGS); 640 extern t_bool set_win_size(int *num_lines, int *num_cols); 641 extern void allow_resize(t_bool allow); 642 extern void handle_resize(t_bool repaint); 643 extern void set_noteslines(int num_lines); 644 extern void set_signal_catcher(int flag); 645 extern void set_signal_handlers(void); 646 647 /* strftime.c */ 648 extern size_t my_strftime(char *s, size_t maxsize, const char *format, struct tm *timeptr); 649 650 /* string.c */ 651 extern char *eat_tab(char *s); 652 extern char *fmt_string(const char *fmt, ...); 653 extern char *my_strdup(const char *str); 654 extern char *str_trim(char *string); 655 extern char *strunc(const char *message, int len); 656 extern char *tin_ltoa(t_artnum value, int digits); 657 extern char *tin_strtok(char *str, const char *delim); 658 extern int sh_format(char *dst, size_t len, const char *fmt, ...); 659 extern int strwidth(const char *str); 660 extern size_t mystrcat(char **t, const char *s); 661 extern void my_strncpy(char *p, const char *q, size_t n); 662 extern void parse_format_string(const char *fmtstr, struct t_fmt *fmt); 663 extern void str_lwr(char *str); 664 extern int my_tolower(int); 665 extern int my_toupper(int); 666 #if !defined(HAVE_STRCASESTR) || defined(DECL_STRCASESTR) 667 extern char *strcasestr(const char *haystack, const char *needle); 668 #endif /* !HAVE_STRCASESTR || DECL_STRCASESTR */ 669 #if !defined(HAVE_STRSEP) || defined(DECL_SEP) 670 extern char *strsep(char **stringp, const char *delim); 671 #endif /* !HAVE_STRSEP || DECL_STRSEP */ 672 #ifndef HAVE_STRPBRK 673 extern char *strpbrk(const char *str1, const char *str2); 674 #endif /* !HAVE_STRPBRK */ 675 #ifndef HAVE_STRSTR 676 extern char *strstr(const char *text, const char *pattern); 677 #endif /* !HAVE_STRSTR */ 678 #ifndef HAVE_STRCASECMP 679 extern int strcasecmp(const char *p, const char *q); 680 #endif /* !HAVE STRCASECMP */ 681 #ifndef HAVE_STRNCASECMP 682 extern int strncasecmp(const char *p, const char *q, size_t n); 683 #endif /* !HAVE_STRNCASECMP */ 684 #ifndef HAVE_ATOI 685 extern int atoi(const char *s); 686 #endif /* !HAVE_ATOI */ 687 #ifndef HAVE_ATOL 688 extern long atol(const char *s); 689 #endif /* !HAVE_ATOL */ 690 #ifndef HAVE_STRTOL 691 extern long strtol(const char *str, char **ptr, int use_base); 692 #endif /* !HAVE STRTOL */ 693 #ifndef HAVE_STRERROR 694 extern char *my_strerror(int n); 695 # define strerror(n) my_strerror(n) 696 #endif /* !HAVE_STRERROR */ 697 #ifndef HAVE_STRRSTR 698 extern char *my_strrstr(const char *str, const char *pat); 699 # define strrstr(s,p) my_strrstr(s,p) 700 #endif /* !HAVE_STRRSTR */ 701 #if defined(MULTIBYTE_ABLE) && !defined(NO_LOCALE) 702 extern char *spart(const char *str, int columns, t_bool pad); 703 extern char *wchar_t2char(const wchar_t *wstr); 704 extern wchar_t *abbr_wcsgroupname(const wchar_t *grpname, int len); 705 extern wchar_t *char2wchar_t(const char *str); 706 extern wchar_t *wcspart(const wchar_t *wstr, int columns, t_bool pad); 707 extern wchar_t *wexpand_tab(wchar_t *wstr, size_t tab_width); 708 extern wchar_t *wstrunc(const wchar_t *wmessage, int len); 709 #else 710 extern char *abbr_groupname(const char *grpname, size_t len); 711 extern char *expand_tab(char *str, size_t tab_width); 712 #endif /* MULTIBYTE_ABLE && !NO_LOCALE */ 713 #if defined(HAVE_LIBICUUC) && defined(MULTIBYTE_ABLE) && defined(HAVE_UNICODE_UBIDI_H) && !defined(NO_LOCALE) 714 extern char *render_bidi(const char *str, t_bool *is_rtl); 715 #endif /* HAVE_LIBICUUC && MULTIBYTE_ABLE && HAVE_UNICODE_UBIDI_H && !NO_LOCALE */ 716 #ifdef HAVE_UNICODE_NORMALIZATION 717 extern char *normalize(const char *str); 718 #endif /* HAVE_UNICODE_NORMALIZATION */ 719 #if defined(HAVE_LIBICUUC) && defined(MULTIBYTE_ABLE) && !defined(NO_LOCALE) 720 extern UChar *char2UChar(const char *str); 721 extern char *UChar2char(const UChar *ustr); 722 #endif /* HAVE_LIBICUUC && MULTIBYTE_ABLE && !NO_LOCALE */ 723 724 /* tags.c */ 725 extern int line_is_tagged(int n); 726 extern int tag_multipart(int arts_index); 727 extern t_bool arts_selected(void); 728 extern t_bool set_range(int level, int min, int max, int curr); 729 extern t_bool tag_article(int art); 730 extern t_bool untag_all_articles(void); 731 extern void do_auto_select_arts(void); 732 extern void undo_auto_select_arts(void); 733 extern void undo_selections(void); 734 extern void untag_article(long art); 735 736 /* tmpfile.c */ 737 #ifndef HAVE_TMPFILE 738 extern FILE *tmpfile(void); 739 #endif /* !HAVE_TMPFILE */ 740 741 /* my_tmpfile.c */ 742 extern int my_tmpfile(char *filename, size_t name_size, const char *base_dir); 743 744 /* thread.c */ 745 extern int find_response(int i, int n); 746 extern int get_score_of_thread(int n); 747 extern int new_responses(int thread); 748 extern int next_response(int n); 749 extern int next_thread(int n); 750 extern int next_unread(int n); 751 extern int num_of_responses(int n); 752 extern int prev_response(int n); 753 extern int prev_unread(int n); 754 extern int stat_thread(int n, struct t_art_stat *sbuf); 755 extern int which_response(int n); 756 extern int which_thread(int n); 757 extern int thread_page(struct t_group *group, int respnum, int thread_depth, t_pagerinfo *page); 758 extern t_bool thread_mark_postprocess(int function, t_function feed_type, int respnum); 759 extern void fixup_thread(int respnum, t_bool redraw); 760 761 /* version.c */ 762 extern struct t_version *check_upgrade(char *line, const char *skip, const char *version); 763 extern void upgrade_prompt_quit(struct t_version *upgrade, const char *file); 764 765 /* wildmat.c */ 766 extern t_bool wildmat(const char *text, char *p, t_bool icase); 767 extern t_bool wildmatpos(const char *text, char *p, t_bool icase, int *srch_offsets, int srch_offsets_size); 768 769 /* xface.c */ 770 #ifdef XFACE_ABLE 771 extern void slrnface_stop(void); 772 extern void slrnface_start(void); 773 extern void slrnface_display_xface(char *face); 774 extern void slrnface_clear_xface(void); 775 extern void slrnface_suppress_xface(void); 776 extern void slrnface_show_xface(void); 777 #endif /* XFACE_ABLE */ 778 779 /* xref.c */ 780 extern t_bool overview_xref_support(void); 781 extern void NSETRNG0(t_bitmap *bitmap, t_artnum low, t_artnum high); 782 extern void NSETRNG1(t_bitmap *bitmap, t_artnum low, t_artnum high); 783 extern void art_mark_xref_read(struct t_article *art); 784 785 #endif /* !PROTO_H */ 786