home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1994 March / Source_Code_CD-ROM_Walnut_Creek_March_1994.iso / compsrcs / misc / volume30 / tin / part05 < prev    next >
Encoding:
Text File  |  1992-05-19  |  54.1 KB  |  1,550 lines

  1. Newsgroups: comp.sources.misc
  2. From: iain%anl433.uucp@germany.eu.net (Iain J. Lea)
  3. Subject:  v30i005:  tin - threaded full screen newsreader, Part05/14
  4. Message-ID: <1992May20.172351.28777@sparky.imd.sterling.com>
  5. X-Md4-Signature: 983c197f80bd5c5897d5a94f73961541
  6. Date: Wed, 20 May 1992 17:23:51 GMT
  7. Approved: kent@sparky.imd.sterling.com
  8.  
  9. Submitted-by: iain%anl433.uucp@germany.eu.net (Iain J. Lea)
  10. Posting-number: Volume 30, Issue 5
  11. Archive-name: tin/part05
  12. Environment: BSD, SCO, ISC, SUNOS, SYSVR3, SYSVR4, ULTRIX, XENIX
  13. Supersedes: tin: Volume 29, Issue 19-30
  14.  
  15. #! /bin/sh
  16. # This is a shell archive.  Remove anything before this line, then feed it
  17. # into a shell via "sh file" or similar.  To overwrite existing files,
  18. # type "sh file -c".
  19. # The tool that generated this appeared in the comp.sources.unix newsgroup;
  20. # send mail to comp-sources-unix@uunet.uu.net if you want that tool.
  21. # Contents:  proto.h rcfile.c
  22. # Wrapped by kent@sparky on Tue May 19 13:38:03 1992
  23. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  24. echo If this archive is complete, you will see the following message:
  25. echo '          "shar: End of archive 5 (of 14)."'
  26. if test -f 'proto.h' -a "${1}" != "-c" ; then 
  27.   echo shar: Will not clobber existing file \"'proto.h'\"
  28. else
  29.   echo shar: Extracting \"'proto.h'\" \(27832 characters\)
  30.   sed "s/^X//" >'proto.h' <<'END_OF_FILE'
  31. X#if __STDC__
  32. X/* active.c */
  33. Xextern void resync_active_file(void);
  34. Xextern int read_active_file(void);
  35. Xextern int backup_active(int create);
  36. Xextern void notify_groups(void);
  37. Xextern void mark_unthreaded_groups(void);
  38. X/* art.c */
  39. Xextern void find_base(int only_unread);
  40. Xextern int num_of_arts(void);
  41. Xextern int valid_artnum(long art);
  42. Xextern int purge_needed(void);
  43. Xextern void index_group(char *group, char *group_path);
  44. Xextern int read_group(char *group, char *group_path);
  45. Xextern void make_threads(int rethread);
  46. Xextern int parse_headers(FILE *fp, struct article_t *h);
  47. Xextern void write_index_file(char *group);
  48. Xextern int read_index_file(char *group_name);
  49. Xextern void find_index_file(char *group);
  50. Xextern void do_update(void);
  51. Xextern char *parse_date(char *date, char *str);
  52. Xextern int artnum_comp(char *p1, char *p2);
  53. Xextern int subj_comp(char *p1, char *p2);
  54. Xextern int from_comp(char *p1, char *p2);
  55. Xextern int date_comp(char *p1, char *p2);
  56. Xextern void set_article(struct article_t *art);
  57. X/* curses.c */
  58. Xextern int InitScreen(void);
  59. Xextern void ScreenSize(int *num_lines, int *num_columns);
  60. Xextern void InitWin(void);
  61. Xextern void EndWin(void);
  62. Xextern void ClearScreen(void);
  63. Xextern void MoveCursor(int row, int col);
  64. Xextern void CleartoEOLN(void);
  65. Xextern void CleartoEOS(void);
  66. Xextern void StartInverse(void);
  67. Xextern void EndInverse(void);
  68. Xextern int RawState(void);
  69. Xextern void Raw(int state);
  70. Xextern int ReadCh(void);
  71. Xextern int outchar(int c);
  72. X/* debug.c */
  73. Xextern void debug_nntp(char *func, char *line);
  74. Xextern void debug_nntp_respcode(int respcode);
  75. Xextern void debug_print_arts(void);
  76. Xextern void debug_print_header(struct article_t *s);
  77. Xextern void debug_print_comment(char *comment);
  78. Xextern void debug_print_base(void);
  79. Xextern void debug_print_active(void);
  80. X/* feed.c */
  81. Xextern void feed_articles(int function, int level, char *prompt, int respnum, char *group_path);
  82. Xextern int print_file(FILE *fp, int respnum, int count);
  83. X/* getline.c */
  84. Xextern char *getline(char *prompt, int number_only, char *str);
  85. X/* group.c */
  86. Xextern void group_page(char *group);
  87. Xextern void fix_new_highest(int groupnum);
  88. Xextern void show_group_page(char *group);
  89. Xextern void draw_subject_arrow(void);
  90. Xextern void erase_subject_arrow(void);
  91. Xextern void prompt_subject_num(int ch, char *group);
  92. Xextern void clear_note_area(void);
  93. Xextern int find_new_pos(int old_top, long old_artnum, int cur_pos);
  94. Xextern void mark_screen(int level, int screen_row, int screen_col, char *value);
  95. Xextern void set_subj_from_size(int num_cols);
  96. Xextern void toggle_subject_from(void);
  97. X/* hashstr.c */
  98. Xextern char *hash_str(char *s);
  99. Xextern struct hashnode *add_string(char *s);
  100. Xextern void hash_init(void);
  101. Xextern void hash_reclaim(void);
  102. X/* help.c */
  103. Xextern void show_info_page(int type, char *help[], char *title);
  104. X/* inews.c */
  105. Xextern int submit_inews(char *name);
  106. Xextern void get_host_name(char *host_name);
  107. Xextern void get_from_name(char *from_name);
  108. X/* init.c */
  109. Xextern void init_selfinfo(void);
  110. Xextern void set_tindir(void);
  111. Xextern int create_mail_save_dirs(void);
  112. X/* kill.c */
  113. Xextern int read_kill_file(void);
  114. Xextern void write_kill_file(void);
  115. Xextern int kill_art_menu(char *group_name, int index);
  116. Xextern int unkill_all_articles(void);
  117. Xextern int kill_any_articles(char *group);
  118. X/* lang.c */
  119. X/* main.c */
  120. Xextern void main(int argc, char *argv[]);
  121. Xextern void read_cmd_line_options(int argc, char *argv[]);
  122. Xextern void usage(char *progname);
  123. Xextern int check_for_any_new_news(int check_any_unread, int start_any_unread);
  124. Xextern void save_or_mail_new_news(void);
  125. Xextern void update_index_files(void);
  126. Xextern void show_intro_page(void);
  127. X/* memory.c */
  128. Xextern void init_alloc(void);
  129. Xextern void expand_art(void);
  130. Xextern void expand_active(void);
  131. Xextern void expand_kill(void);
  132. Xextern void expand_save(void);
  133. Xextern void init_screen_array(int allocate);
  134. Xextern void free_all_arrays(void);
  135. Xextern void free_art_array(void);
  136. Xextern void free_active_arrays(void);
  137. Xextern void free_kill_array(void);
  138. Xextern void free_save_array(void);
  139. Xextern char *my_malloc(unsigned size);
  140. Xextern char *my_realloc(char *p, unsigned size);
  141. X/* misc.c */
  142. Xextern void asfail(char *file, int line, char *cond);
  143. Xextern void copy_fp(FILE *fp_ip, FILE *fp_op, char *prefix);
  144. Xextern char *get_val(char *env, char *def);
  145. Xextern int invoke_editor(char *nam);
  146. Xextern void shell_escape(void);
  147. Xextern void tin_done(int ret);
  148. Xextern long hash_groupname(char *group);
  149. Xextern void rename_file(char *old_filename, char *new_filename);
  150. Xextern char *str_dup(char *str);
  151. Xextern int invoke_cmd(char *nam);
  152. Xextern void draw_percent_mark(int cur_num, int max_num);
  153. Xextern void set_real_uid_gid(void);
  154. Xextern void set_tin_uid_gid(void);
  155. Xextern void basename(char *dirname, char *program);
  156. Xextern void mail_setup(void);
  157. Xextern int mail_check(void);
  158. Xextern void parse_from(char *str, char *addr, char *name);
  159. Xextern long my_atol(char *s, int n);
  160. Xextern int my_stricmp(char *p, char *q);
  161. Xextern char *eat_re(char *s);
  162. Xextern long hash_s(char *s);
  163. Xextern void my_strncpy(char *p, char *q, int n);
  164. Xextern int untag_all_articles(void);
  165. Xextern char *str_str(char *text, char *pattern, int patlen);
  166. Xextern void get_author(int thread, int respnum, char *str);
  167. Xextern void toggle_inverse_video(void);
  168. Xextern int get_arrow_key(void);
  169. X/* newsrc.c */
  170. Xextern int auto_subscribe_groups(void);
  171. Xextern void backup_newsrc(void);
  172. Xextern void read_newsrc(int sub_only);
  173. Xextern void write_newsrc(void);
  174. Xextern void rewrite_newsrc(void);
  175. Xextern void read_newsrc_line(char *group);
  176. Xextern void update_newsrc(char *group, int groupnum, int mark_unread);
  177. Xextern void subscribe(char *group, int ch, int num, int out_seq);
  178. Xextern void reset_newsrc(void);
  179. Xextern void delete_group(char *group);
  180. Xextern int undel_group(void);
  181. Xextern void mark_group_read(char *group, int groupnum);
  182. Xextern void parse_seq(char *s);
  183. Xextern int parse_unread(char *s, int groupnum);
  184. Xextern int get_line_unread(char *group, int groupnum);
  185. Xextern void print_seq(FILE *fp, int groupnum);
  186. Xextern int pos_group_in_newsrc(char *group, int pos);
  187. Xextern void mark_all_xref_read(char *xref_line);
  188. X/* nntplib.c */
  189. Xextern char *getserverbyfile(char *file);
  190. Xextern int server_init(char *machine);
  191. Xextern int get_tcp_socket(char *machine);
  192. Xextern int handle_server_response(int response, char *nntpserver);
  193. Xextern void put_server(char *string);
  194. Xextern int get_server(char *string, int size);
  195. Xextern void close_server(void);
  196. X/* open.c */
  197. Xextern void nntp_open(void);
  198. Xextern void nntp_close(void);
  199. Xextern FILE *open_active_fp(void);
  200. Xextern FILE *open_subscription_fp(void);
  201. Xextern FILE *open_index_fp(char *group_name);
  202. Xextern FILE *open_art_fp(char *group_path, long art);
  203. Xextern FILE *open_header_fp(char *group_path, long art);
  204. Xextern int base_comp(char *p1, char *p2);
  205. Xextern void setup_base(char *group, char *group_path);
  206. Xextern int get_respcode(void);
  207. Xextern int stuff_nntp(char *fnam);
  208. Xextern FILE *nntp_to_fp(void);
  209. Xextern int nntp_to_fd(void);
  210. Xextern void log_user(void);
  211. Xextern char *nntp_respcode(int respcode);
  212. X/* page.c */
  213. Xextern int show_page(int respnum, int *threadnum, char *group, char *group_path);
  214. Xextern void redraw_page(int respnum, char *group);
  215. Xextern void show_note_page(int respnum, char *group);
  216. Xextern void show_first_header(int respnum, char *group);
  217. Xextern void show_cont_header(int respnum);
  218. Xextern int art_open(long art, char *group_path);
  219. Xextern void art_close(void);
  220. Xextern int prompt_response(int ch, int respnum);
  221. Xextern void yank_to_addr(char *orig, char *addr);
  222. Xextern int show_last_page(void);
  223. Xextern int match_header(char *buf, char *pat, char *body, int len);
  224. X/* post.c */
  225. Xextern int user_posted_messages(void);
  226. Xextern void update_art_posted_file(char *group, int action, char *subj);
  227. Xextern int post_header_ok(char *article);
  228. Xextern int post_base(char *group, int *posted);
  229. Xextern int post_response(char *group, int respnum, int copy_text);
  230. Xextern int mail_to_someone(char *address, int confirm_to_mail, int *mailed_ok);
  231. Xextern int mail_bug_report(void);
  232. Xextern int mail_to_author(char *group, int respnum, int copy_text);
  233. Xextern void find_mail_header(int header, char *file, char *value);
  234. Xextern int cancel_article(char *group, int respnum);
  235. Xextern int crosspost_article(char *group, int respnum);
  236. Xextern int submit_file(char *name);
  237. Xextern void add_signature(FILE *fp, int flag);
  238. Xextern void insert_x_headers(char *infile);
  239. Xextern void find_reply_to_addr(int respnum, char *from_addr);
  240. X/* prompt.c */
  241. Xextern int prompt_num(int ch, char *prompt);
  242. Xextern int prompt_string(char *prompt, char *buf);
  243. Xextern int prompt_menu_string(int line, int col, char *var);
  244. Xextern int prompt_yn(int line, char *prompt, int prompt_ch);
  245. Xextern void prompt_on_off(int row, int col, int *var, char *help_text, char *prompt_text);
  246. Xextern void continue_prompt(void);
  247. X/* rcfile.c */
  248. Xextern int read_rcfile(void);
  249. Xextern void write_rcfile(void);
  250. Xextern int change_rcfile(char *group, int kill_at_once);
  251. Xextern void show_rcfile_menu(void);
  252. Xextern void expand_rel_abs_pathname(int line, int col, char *str);
  253. Xextern void show_menu_help(char *help_message);
  254. Xextern int match_boolean(char *line, char *pat, int *dst);
  255. Xextern int match_number(char *line, char *pat, int *dst);
  256. Xextern int match_string(char *line, char *pat, char *dst, int dstlen);
  257. X/* save.c */
  258. Xextern int check_start_save_any_news(int check_start_save);
  259. Xextern int save_art_to_file(int respnum, int index, int mailbox, char *filename);
  260. Xextern int save_thread_to_file(int is_mailbox, char *group_path);
  261. Xextern int save_regex_arts(int is_mailbox, char *group_path);
  262. Xextern int append_to_existing_file(int i);
  263. Xextern int create_path(char *path);
  264. Xextern int create_sub_dir(int i);
  265. Xextern void add_to_save_list(int index, struct article_t *article, int is_mailbox, char *path);
  266. Xextern void sort_save_list(void);
  267. Xextern int save_comp(char *p1, char *p2);
  268. Xextern char *save_filename(int i);
  269. Xextern char *get_first_savefile(void);
  270. Xextern char *get_last_savefile(void);
  271. Xextern int post_process_files(int proc_type_ch);
  272. Xextern void post_process_uud(int pp);
  273. Xextern void post_process_sh(void);
  274. Xextern char *get_archive_file(char *dir, char *ext);
  275. Xextern void delete_processed_files(void);
  276. X/* screen.c */
  277. Xextern void info_message(char *str);
  278. Xextern void wait_message(char *str);
  279. Xextern void error_message(char *template, char *str);
  280. Xextern void perror_message(char *template, char *str);
  281. Xextern void clear_message(void);
  282. Xextern void center_line(int line, int inverse, char *str);
  283. Xextern void draw_arrow(int line);
  284. Xextern void erase_arrow(int line);
  285. Xextern void show_title(char *title);
  286. Xextern void ring_bell(void);
  287. X/* search.c */
  288. Xextern int search_author(int only_unread, int current_art, int forward);
  289. Xextern void search_group(int forward);
  290. Xextern void search_subject(int forward, char *group);
  291. Xextern int search_article(int forward);
  292. Xextern void make_lower(char *s, char *t);
  293. X/* select.c */
  294. Xextern void selection_index(int start_groupnum);
  295. Xextern void group_selection_page(void);
  296. Xextern int prompt_group_num(int ch);
  297. Xextern void erase_group_arrow(void);
  298. Xextern void draw_group_arrow(void);
  299. Xextern int choose_new_group(void);
  300. Xextern int add_group(char *s, int get_unread);
  301. Xextern int reposition_group(char *group, int default_num);
  302. Xextern void catchup_group(int goto_next_unread_group);
  303. Xextern void next_unread_group(int enter_group);
  304. Xextern void set_groupname_len(int all_groups);
  305. X/* signal.c */
  306. Xextern sigtype_t (*sigdisp(int sig, sigtype_t (*func)()))();
  307. Xextern void set_signal_handlers(void);
  308. Xextern void set_alarm_signal(void);
  309. Xextern void signal_handler(int sig);
  310. Xextern void set_win_size(int *num_lines, int *num_cols);
  311. Xextern void set_signals_art(void);
  312. Xextern void set_signals_group(void);
  313. Xextern void set_signals_page(void);
  314. Xextern void set_signals_select(void);
  315. Xextern void set_signals_spooldir(void);
  316. Xextern void set_signals_thread(void);
  317. Xextern void art_suspend(int sig);
  318. Xextern void main_suspend(int sig);
  319. Xextern void select_suspend(int sig);
  320. Xextern void spooldir_suspend(int sig);
  321. Xextern void group_suspend(int sig);
  322. Xextern void page_suspend(int sig);
  323. Xextern void thread_suspend(int sig);
  324. Xextern void rcfile_suspend(int sig);
  325. Xextern void art_resize(int sig);
  326. Xextern void main_resize(int sig);
  327. Xextern void select_resize(int sig);
  328. Xextern void spooldir_resize(int sig);
  329. Xextern void group_resize(int sig);
  330. Xextern void page_resize(int sig);
  331. Xextern void thread_resize(int sig);
  332. X/* spooldir.c */
  333. Xextern int spooldir_index(void);
  334. Xextern void show_spooldir_page(void);
  335. Xextern int prompt_spooldir_num(int ch);
  336. Xextern void erase_spooldir_arrow(void);
  337. Xextern void draw_spooldir_arrow(void);
  338. Xextern int load_spooldirs(void);
  339. Xextern void get_spooldir(void);
  340. Xextern int set_spooldir(char *name);
  341. X/* thread.c */
  342. Xextern int show_thread(int respnum, char *group, char *group_path);
  343. Xextern void show_thread_page(void);
  344. Xextern void draw_thread_arrow(void);
  345. Xextern void erase_thread_arrow(void);
  346. Xextern int prompt_thread_num(int ch);
  347. Xextern int new_responses(int thread);
  348. Xextern int which_thread(int n);
  349. Xextern int which_response(int n);
  350. Xextern int num_of_responses(int n);
  351. Xextern int stat_thread(int n, struct art_stat_t *sbuf);
  352. Xextern int next_response(int n);
  353. Xextern int next_thread(int n);
  354. Xextern int prev_response(int n);
  355. Xextern int choose_response(int i, int n);
  356. Xextern int next_unread(int n);
  357. Xextern int prev_unread(int n);
  358. X/* wildmat.c */
  359. Xextern int wildmat(char *text, char *p);
  360. X#else
  361. X/* active.c */
  362. Xextern void resync_active_file(/*void*/);
  363. Xextern int read_active_file(/*void*/);
  364. Xextern int backup_active(/*int create*/);
  365. Xextern void notify_groups(/*void*/);
  366. Xextern void mark_unthreaded_groups(/*void*/);
  367. X/* art.c */
  368. Xextern void find_base(/*int only_unread*/);
  369. Xextern int num_of_arts(/*void*/);
  370. Xextern int valid_artnum(/*long art*/);
  371. Xextern int purge_needed(/*void*/);
  372. Xextern void index_group(/*char *group, char *group_path*/);
  373. Xextern int read_group(/*char *group, char *group_path*/);
  374. Xextern void make_threads(/*int rethread*/);
  375. Xextern int parse_headers(/*FILE *fp, struct article_t *h*/);
  376. Xextern void write_index_file(/*char *group*/);
  377. Xextern int read_index_file(/*char *group_name*/);
  378. Xextern void find_index_file(/*char *group*/);
  379. Xextern void do_update(/*void*/);
  380. Xextern char *parse_date(/*char *date, char *str*/);
  381. Xextern int artnum_comp(/*char *p1, char *p2*/);
  382. Xextern int subj_comp(/*char *p1, char *p2*/);
  383. Xextern int from_comp(/*char *p1, char *p2*/);
  384. Xextern int date_comp(/*char *p1, char *p2*/);
  385. Xextern void set_article(/*struct article_t *art*/);
  386. X/* curses.c */
  387. Xextern int InitScreen(/*void*/);
  388. Xextern void ScreenSize(/*int *num_lines, int *num_columns*/);
  389. Xextern void InitWin(/*void*/);
  390. Xextern void EndWin(/*void*/);
  391. Xextern void ClearScreen(/*void*/);
  392. Xextern void MoveCursor(/*int row, int col*/);
  393. Xextern void CleartoEOLN(/*void*/);
  394. Xextern void CleartoEOS(/*void*/);
  395. Xextern void StartInverse(/*void*/);
  396. Xextern void EndInverse(/*void*/);
  397. Xextern int RawState(/*void*/);
  398. Xextern void Raw(/*int state*/);
  399. Xextern int ReadCh(/*void*/);
  400. Xextern int outchar(/*int c*/);
  401. X/* debug.c */
  402. Xextern void debug_nntp(/*char *func, char *line*/);
  403. Xextern void debug_nntp_respcode(/*int respcode*/);
  404. Xextern void debug_print_arts(/*void*/);
  405. Xextern void debug_print_header(/*struct article_t *s*/);
  406. Xextern void debug_print_comment(/*char *comment*/);
  407. Xextern void debug_print_base(/*void*/);
  408. Xextern void debug_print_active(/*void*/);
  409. X/* feed.c */
  410. Xextern void feed_articles(/*int function, int level, char *prompt, int respnum, char *group_path*/);
  411. Xextern int print_file(/*FILE *fp, int respnum, int count*/);
  412. X/* getline.c */
  413. Xextern char *getline(/*char *prompt, int number_only, char *str*/);
  414. X/* group.c */
  415. Xextern void group_page(/*char *group*/);
  416. Xextern void fix_new_highest(/*int groupnum*/);
  417. Xextern void show_group_page(/*char *group*/);
  418. Xextern void draw_subject_arrow(/*void*/);
  419. Xextern void erase_subject_arrow(/*void*/);
  420. Xextern void prompt_subject_num(/*int ch, char *group*/);
  421. Xextern void clear_note_area(/*void*/);
  422. Xextern int find_new_pos(/*int old_top, long old_artnum, int cur_pos*/);
  423. Xextern void mark_screen(/*int level, int screen_row, int screen_col, char *value*/);
  424. Xextern void set_subj_from_size(/*int num_cols*/);
  425. Xextern void toggle_subject_from(/*void*/);
  426. X/* hashstr.c */
  427. Xextern char *hash_str(/*char *s*/);
  428. Xextern struct hashnode *add_string(/*char *s*/);
  429. Xextern void hash_init(/*void*/);
  430. Xextern void hash_reclaim(/*void*/);
  431. X/* help.c */
  432. Xextern void show_info_page(/*int type, char *help[], char *title*/);
  433. X/* inews.c */
  434. Xextern int submit_inews(/*char *name*/);
  435. Xextern void get_host_name(/*char *host_name*/);
  436. Xextern void get_from_name(/*char *from_name*/);
  437. X/* init.c */
  438. Xextern void init_selfinfo(/*void*/);
  439. Xextern void set_tindir(/*void*/);
  440. Xextern int create_mail_save_dirs(/*void*/);
  441. X/* kill.c */
  442. Xextern int read_kill_file(/*void*/);
  443. Xextern void write_kill_file(/*void*/);
  444. Xextern int kill_art_menu(/*char *group_name, int index*/);
  445. Xextern int unkill_all_articles(/*void*/);
  446. Xextern int kill_any_articles(/*char *group*/);
  447. X/* lang.c */
  448. X/* main.c */
  449. Xextern void main(/*int argc, char *argv[]*/);
  450. Xextern void read_cmd_line_options(/*int argc, char *argv[]*/);
  451. Xextern void usage(/*char *progname*/);
  452. Xextern int check_for_any_new_news(/*int check_any_unread, int start_any_unread*/);
  453. Xextern void save_or_mail_new_news(/*void*/);
  454. Xextern void update_index_files(/*void*/);
  455. Xextern void show_intro_page(/*void*/);
  456. X/* memory.c */
  457. Xextern void init_alloc(/*void*/);
  458. Xextern void expand_art(/*void*/);
  459. Xextern void expand_active(/*void*/);
  460. Xextern void expand_kill(/*void*/);
  461. Xextern void expand_save(/*void*/);
  462. Xextern void init_screen_array(/*int allocate*/);
  463. Xextern void free_all_arrays(/*void*/);
  464. Xextern void free_art_array(/*void*/);
  465. Xextern void free_active_arrays(/*void*/);
  466. Xextern void free_kill_array(/*void*/);
  467. Xextern void free_save_array(/*void*/);
  468. Xextern char *my_malloc(/*unsigned size*/);
  469. Xextern char *my_realloc(/*char *p, unsigned size*/);
  470. X/* misc.c */
  471. Xextern void asfail(/*char *file, int line, char *cond*/);
  472. Xextern void copy_fp(/*FILE *fp_ip, FILE *fp_op, char *prefix*/);
  473. Xextern char *get_val(/*char *env, char *def*/);
  474. Xextern int invoke_editor(/*char *nam*/);
  475. Xextern void shell_escape(/*void*/);
  476. Xextern void tin_done(/*int ret*/);
  477. Xextern long hash_groupname(/*char *group*/);
  478. Xextern void rename_file(/*char *old_filename, char *new_filename*/);
  479. Xextern char *str_dup(/*char *str*/);
  480. Xextern int invoke_cmd(/*char *nam*/);
  481. Xextern void draw_percent_mark(/*int cur_num, int max_num*/);
  482. Xextern void set_real_uid_gid(/*void*/);
  483. Xextern void set_tin_uid_gid(/*void*/);
  484. Xextern void basename(/*char *dirname, char *program*/);
  485. Xextern void mail_setup(/*void*/);
  486. Xextern int mail_check(/*void*/);
  487. Xextern void parse_from(/*char *str, char *addr, char *name*/);
  488. Xextern long my_atol(/*char *s, int n*/);
  489. Xextern int my_stricmp(/*char *p, char *q*/);
  490. Xextern char *eat_re(/*char *s*/);
  491. Xextern long hash_s(/*char *s*/);
  492. Xextern void my_strncpy(/*char *p, char *q, int n*/);
  493. Xextern int untag_all_articles(/*void*/);
  494. Xextern char *str_str(/*char *text, char *pattern, int patlen*/);
  495. Xextern void get_author(/*int thread, int respnum, char *str*/);
  496. Xextern void toggle_inverse_video(/*void*/);
  497. Xextern int get_arrow_key(/*void*/);
  498. X/* newsrc.c */
  499. Xextern int auto_subscribe_groups(/*void*/);
  500. Xextern void backup_newsrc(/*void*/);
  501. Xextern void read_newsrc(/*int sub_only*/);
  502. Xextern void write_newsrc(/*void*/);
  503. Xextern void rewrite_newsrc(/*void*/);
  504. Xextern void read_newsrc_line(/*char *group*/);
  505. Xextern void update_newsrc(/*char *group, int groupnum, int mark_unread*/);
  506. Xextern void subscribe(/*char *group, int ch, int num, int out_seq*/);
  507. Xextern void reset_newsrc(/*void*/);
  508. Xextern void delete_group(/*char *group*/);
  509. Xextern int undel_group(/*void*/);
  510. Xextern void mark_group_read(/*char *group, int groupnum*/);
  511. Xextern void parse_seq(/*char *s*/);
  512. Xextern int parse_unread(/*char *s, int groupnum*/);
  513. Xextern int get_line_unread(/*char *group, int groupnum*/);
  514. Xextern void print_seq(/*FILE *fp, int groupnum*/);
  515. Xextern int pos_group_in_newsrc(/*char *group, int pos*/);
  516. Xextern void mark_all_xref_read(/*char *xref_line*/);
  517. X/* nntplib.c */
  518. Xextern char *getserverbyfile(/*char *file*/);
  519. Xextern int server_init(/*char *machine*/);
  520. Xextern int get_tcp_socket(/*char *machine*/);
  521. Xextern int handle_server_response(/*int response, char *nntpserver*/);
  522. Xextern void put_server(/*char *string*/);
  523. Xextern int get_server(/*char *string, int size*/);
  524. Xextern void close_server(/*void*/);
  525. X/* open.c */
  526. Xextern void nntp_open(/*void*/);
  527. Xextern void nntp_close(/*void*/);
  528. Xextern FILE *open_active_fp(/*void*/);
  529. Xextern FILE *open_subscription_fp(/*void*/);
  530. Xextern FILE *open_index_fp(/*char *group_name*/);
  531. Xextern FILE *open_art_fp(/*char *group_path, long art*/);
  532. Xextern FILE *open_header_fp(/*char *group_path, long art*/);
  533. Xextern int base_comp(/*char *p1, char *p2*/);
  534. Xextern void setup_base(/*char *group, char *group_path*/);
  535. Xextern int get_respcode(/*void*/);
  536. Xextern int stuff_nntp(/*char *fnam*/);
  537. Xextern FILE *nntp_to_fp(/*void*/);
  538. Xextern int nntp_to_fd(/*void*/);
  539. Xextern void log_user(/*void*/);
  540. Xextern char *nntp_respcode(/*int respcode*/);
  541. X/* page.c */
  542. Xextern int show_page(/*int respnum, int *threadnum, char *group, char *group_path*/);
  543. Xextern void redraw_page(/*int respnum, char *group*/);
  544. Xextern void show_note_page(/*int respnum, char *group*/);
  545. Xextern void show_first_header(/*int respnum, char *group*/);
  546. Xextern void show_cont_header(/*int respnum*/);
  547. Xextern int art_open(/*long art, char *group_path*/);
  548. Xextern void art_close(/*void*/);
  549. Xextern int prompt_response(/*int ch, int respnum*/);
  550. Xextern void yank_to_addr(/*char *orig, char *addr*/);
  551. Xextern int show_last_page(/*void*/);
  552. Xextern int match_header(/*char *buf, char *pat, char *body, int len*/);
  553. X/* post.c */
  554. Xextern int user_posted_messages(/*void*/);
  555. Xextern void update_art_posted_file(/*char *group, int action, char *subj*/);
  556. Xextern int post_header_ok(/*char *article*/);
  557. Xextern int post_base(/*char *group, int *posted*/);
  558. Xextern int post_response(/*char *group, int respnum, int copy_text*/);
  559. Xextern int mail_to_someone(/*char *address, int confirm_to_mail, int *mailed_ok*/);
  560. Xextern int mail_bug_report(/*void*/);
  561. Xextern int mail_to_author(/*char *group, int respnum, int copy_text*/);
  562. Xextern void find_mail_header(/*int header, char *file, char *value*/);
  563. Xextern int cancel_article(/*char *group, int respnum*/);
  564. Xextern int crosspost_article(/*char *group, int respnum*/);
  565. Xextern int submit_file(/*char *name*/);
  566. Xextern void add_signature(/*FILE *fp, int flag*/);
  567. Xextern void insert_x_headers(/*char *infile*/);
  568. Xextern void find_reply_to_addr(/*int respnum, char *from_addr*/);
  569. X/* prompt.c */
  570. Xextern int prompt_num(/*int ch, char *prompt*/);
  571. Xextern int prompt_string(/*char *prompt, char *buf*/);
  572. Xextern int prompt_menu_string(/*int line, int col, char *var*/);
  573. Xextern int prompt_yn(/*int line, char *prompt, int prompt_ch*/);
  574. Xextern void prompt_on_off(/*int row, int col, int *var, char *help_text, char *prompt_text*/);
  575. Xextern void continue_prompt(/*void*/);
  576. X/* rcfile.c */
  577. Xextern int read_rcfile(/*void*/);
  578. Xextern void write_rcfile(/*void*/);
  579. Xextern int change_rcfile(/*char *group, int kill_at_once*/);
  580. Xextern void show_rcfile_menu(/*void*/);
  581. Xextern void expand_rel_abs_pathname(/*int line, int col, char *str*/);
  582. Xextern void show_menu_help(/*char *help_message*/);
  583. Xextern int match_boolean(/*char *line, char *pat, int *dst*/);
  584. Xextern int match_number(/*char *line, char *pat, int *dst*/);
  585. Xextern int match_string(/*char *line, char *pat, char *dst, int dstlen*/);
  586. X/* save.c */
  587. Xextern int check_start_save_any_news(/*int check_start_save*/);
  588. Xextern int save_art_to_file(/*int respnum, int index, int mailbox, char *filename*/);
  589. Xextern int save_thread_to_file(/*int is_mailbox, char *group_path*/);
  590. Xextern int save_regex_arts(/*int is_mailbox, char *group_path*/);
  591. Xextern int append_to_existing_file(/*int i*/);
  592. Xextern int create_path(/*char *path*/);
  593. Xextern int create_sub_dir(/*int i*/);
  594. Xextern void add_to_save_list(/*int index, struct article_t *article, int is_mailbox, char *path*/);
  595. Xextern void sort_save_list(/*void*/);
  596. Xextern int save_comp(/*char *p1, char *p2*/);
  597. Xextern char *save_filename(/*int i*/);
  598. Xextern char *get_first_savefile(/*void*/);
  599. Xextern char *get_last_savefile(/*void*/);
  600. Xextern int post_process_files(/*int proc_type_ch*/);
  601. Xextern void post_process_uud(/*int pp*/);
  602. Xextern void post_process_sh(/*void*/);
  603. Xextern char *get_archive_file(/*char *dir, char *ext*/);
  604. Xextern void delete_processed_files(/*void*/);
  605. X/* screen.c */
  606. Xextern void info_message(/*char *str*/);
  607. Xextern void wait_message(/*char *str*/);
  608. Xextern void error_message(/*char *template, char *str*/);
  609. Xextern void perror_message(/*char *template, char *str*/);
  610. Xextern void clear_message(/*void*/);
  611. Xextern void center_line(/*int line, int inverse, char *str*/);
  612. Xextern void draw_arrow(/*int line*/);
  613. Xextern void erase_arrow(/*int line*/);
  614. Xextern void show_title(/*char *title*/);
  615. Xextern void ring_bell(/*void*/);
  616. X/* search.c */
  617. Xextern int search_author(/*int only_unread, int current_art, int forward*/);
  618. Xextern void search_group(/*int forward*/);
  619. Xextern void search_subject(/*int forward, char *group*/);
  620. Xextern int search_article(/*int forward*/);
  621. Xextern void make_lower(/*char *s, char *t*/);
  622. X/* select.c */
  623. Xextern void selection_index(/*int start_groupnum*/);
  624. Xextern void group_selection_page(/*void*/);
  625. Xextern int prompt_group_num(/*int ch*/);
  626. Xextern void erase_group_arrow(/*void*/);
  627. Xextern void draw_group_arrow(/*void*/);
  628. Xextern int choose_new_group(/*void*/);
  629. Xextern int add_group(/*char *s, int get_unread*/);
  630. Xextern int reposition_group(/*char *group, int default_num*/);
  631. Xextern void catchup_group(/*int goto_next_unread_group*/);
  632. Xextern void next_unread_group(/*int enter_group*/);
  633. Xextern void set_groupname_len(/*int all_groups*/);
  634. X/* signal.c */
  635. Xextern sigtype_t (*sigdisp(/*int sig, sigtype_t (*func)()*/))();
  636. Xextern void set_signal_handlers(/*void*/);
  637. Xextern void set_alarm_signal(/*void*/);
  638. Xextern void signal_handler(/*int sig*/);
  639. Xextern void set_win_size(/*int *num_lines, int *num_cols*/);
  640. Xextern void set_signals_art(/*void*/);
  641. Xextern void set_signals_group(/*void*/);
  642. Xextern void set_signals_page(/*void*/);
  643. Xextern void set_signals_select(/*void*/);
  644. Xextern void set_signals_spooldir(/*void*/);
  645. Xextern void set_signals_thread(/*void*/);
  646. Xextern void art_suspend(/*int sig*/);
  647. Xextern void main_suspend(/*int sig*/);
  648. Xextern void select_suspend(/*int sig*/);
  649. Xextern void spooldir_suspend(/*int sig*/);
  650. Xextern void group_suspend(/*int sig*/);
  651. Xextern void page_suspend(/*int sig*/);
  652. Xextern void thread_suspend(/*int sig*/);
  653. Xextern void rcfile_suspend(/*int sig*/);
  654. Xextern void art_resize(/*int sig*/);
  655. Xextern void main_resize(/*int sig*/);
  656. Xextern void select_resize(/*int sig*/);
  657. Xextern void spooldir_resize(/*int sig*/);
  658. Xextern void group_resize(/*int sig*/);
  659. Xextern void page_resize(/*int sig*/);
  660. Xextern void thread_resize(/*int sig*/);
  661. X/* spooldir.c */
  662. Xextern int spooldir_index(/*void*/);
  663. Xextern void show_spooldir_page(/*void*/);
  664. Xextern int prompt_spooldir_num(/*int ch*/);
  665. Xextern void erase_spooldir_arrow(/*void*/);
  666. Xextern void draw_spooldir_arrow(/*void*/);
  667. Xextern int load_spooldirs(/*void*/);
  668. Xextern void get_spooldir(/*void*/);
  669. Xextern int set_spooldir(/*char *name*/);
  670. X/* thread.c */
  671. Xextern int show_thread(/*int respnum, char *group, char *group_path*/);
  672. Xextern void show_thread_page(/*void*/);
  673. Xextern void draw_thread_arrow(/*void*/);
  674. Xextern void erase_thread_arrow(/*void*/);
  675. Xextern int prompt_thread_num(/*int ch*/);
  676. Xextern int new_responses(/*int thread*/);
  677. Xextern int which_thread(/*int n*/);
  678. Xextern int which_response(/*int n*/);
  679. Xextern int num_of_responses(/*int n*/);
  680. Xextern int stat_thread(/*int n, struct art_stat_t *sbuf*/);
  681. Xextern int next_response(/*int n*/);
  682. Xextern int next_thread(/*int n*/);
  683. Xextern int prev_response(/*int n*/);
  684. Xextern int choose_response(/*int i, int n*/);
  685. Xextern int next_unread(/*int n*/);
  686. Xextern int prev_unread(/*int n*/);
  687. X/* wildmat.c */
  688. Xextern int wildmat(/*char *text, char *p*/);
  689. X#endif
  690. END_OF_FILE
  691.   if test 27832 -ne `wc -c <'proto.h'`; then
  692.     echo shar: \"'proto.h'\" unpacked with wrong size!
  693.   fi
  694.   # end of 'proto.h'
  695. fi
  696. if test -f 'rcfile.c' -a "${1}" != "-c" ; then 
  697.   echo shar: Will not clobber existing file \"'rcfile.c'\"
  698. else
  699.   echo shar: Extracting \"'rcfile.c'\" \(23814 characters\)
  700.   sed "s/^X//" >'rcfile.c' <<'END_OF_FILE'
  701. X/*
  702. X *  Project   : tin - a threaded Netnews reader
  703. X *  Module    : rcfile.c
  704. X *  Author    : I.Lea
  705. X *  Created   : 01-04-91
  706. X *  Updated   : 09-05-92
  707. X *  Notes     :
  708. X *  Copyright : (c) Copyright 1991-92 by Iain Lea
  709. X *              You may  freely  copy or  redistribute  this software,
  710. X *              so  long as there is no profit made from its use, sale
  711. X *              trade or  reproduction.  You may not change this copy-
  712. X *              right notice, and it must be included in any copy made
  713. X */
  714. X
  715. X#include    "tin.h"
  716. X
  717. Xextern int index_point;
  718. X
  719. Xstatic int COL1;
  720. Xstatic int COL2;
  721. Xstatic int COL3;
  722. X
  723. X/*
  724. X *  read_rcfile - read defaults from ~/.tin/tinrc
  725. X */
  726. X
  727. Xint read_rcfile ()
  728. X{
  729. X    char buf[LEN];
  730. X    FILE *fp;
  731. X
  732. X    if ((fp = fopen (rcfile, "r")) == NULL) {
  733. X        return (FALSE);
  734. X    }    
  735. X
  736. X    while (fgets (buf, sizeof (buf), fp) != NULL) {
  737. X        if (buf[0] == '#' || buf[0] == '\n') { 
  738. X            continue;
  739. X        }    
  740. X        if (match_boolean (buf, "save_archive=", &save_archive_name)) {
  741. X            continue;
  742. X        }    
  743. X        if (match_boolean (buf, "start_editor_offset=", &start_editor_offset)) {
  744. X            continue;
  745. X        }    
  746. X        if (match_boolean (buf, "mark_saved_read=", &mark_saved_read)) {
  747. X            continue;
  748. X        }    
  749. X        if (match_boolean (buf, "draw_arrow=", &draw_arrow_mark)) {
  750. X            if (draw_arrow_mark == FALSE && inverse_okay == FALSE) {
  751. X                inverse_okay = TRUE;
  752. X            }
  753. X            continue;
  754. X        }    
  755. X        if (match_boolean (buf, "print_header=", &print_header)) {
  756. X            continue;
  757. X        }
  758. X        if (match_number (buf, "kill_level=", &kill_level)) {
  759. X            continue;
  760. X        }
  761. X        if (match_boolean (buf, "pos_first_unread=", &pos_first_unread)) {
  762. X            continue;
  763. X        }    
  764. X        if (match_boolean (buf, "full_page_scroll=", &full_page_scroll)) {
  765. X            continue;
  766. X        }    
  767. X        if (match_boolean (buf, "catchup_read_groups=", &catchup_read_groups)) {
  768. X            continue;
  769. X        }    
  770. X        if (match_boolean (buf, "thread_articles=", &thread_arts)) {
  771. X            continue;
  772. X        }    
  773. X        if (match_boolean (buf, "unlink_article=", &unlink_article)) {
  774. X            continue;
  775. X        }    
  776. X        if (match_boolean (buf, "show_only_unread=", &show_only_unread)) {
  777. X            continue;
  778. X        }    
  779. X        if (match_boolean (buf, "confirm_action=", &confirm_action)) {
  780. X            continue;
  781. X        }
  782. X        if (match_number (buf, "show_author=", &default_show_author)) {
  783. X            continue;
  784. X        }    
  785. X        if (match_number (buf, "post_process_type=", &post_proc_type)) {
  786. X            switch (post_proc_type) {
  787. X                case POST_PROC_SHAR:
  788. X                    proc_ch_default = 's';
  789. X                    break;
  790. X                case POST_PROC_UUDECODE:
  791. X                    proc_ch_default = 'u';
  792. X                    break;
  793. X                case POST_PROC_UUD_LST_ZOO:
  794. X                    proc_ch_default = 'U';
  795. X                    break;
  796. X                case POST_PROC_UUD_EXT_ZOO:
  797. X                    proc_ch_default = 'U';
  798. X                    break;
  799. X                case POST_PROC_NONE:
  800. X                default:
  801. X                    proc_ch_default = 'n';
  802. X                    break;
  803. X            }
  804. X            continue;
  805. X        }    
  806. X        if (match_number (buf, "sort_article_type=", &sort_art_type)) {
  807. X            continue;
  808. X        }    
  809. X        if (match_string (buf, "savedir=", default_savedir, sizeof (default_savedir))) {
  810. X            if (default_savedir[0] == '.' && strlen (default_savedir) == 1) {
  811. X#if defined(BSD) && ! defined(sinix)
  812. X                getwd (buf);    
  813. X#else
  814. X                getcwd (buf, LEN);
  815. X#endif
  816. X                my_strncpy (default_savedir, buf, sizeof (default_savedir));
  817. X            }
  818. X            continue;
  819. X        }    
  820. X        if (match_string (buf, "maildir=", default_maildir, sizeof (default_maildir))) {
  821. X            continue;
  822. X        }
  823. X        if (match_string (buf, "printer=", printer, sizeof (printer))) {
  824. X            continue;
  825. X        }
  826. X        if (match_string (buf, "default_spooldir_alias=", spooldir_alias, sizeof (spooldir_alias))) {
  827. X            set_tindir ();
  828. X            continue;
  829. X        }
  830. X        if (match_string (buf, "default_author_search=", default_author_search, sizeof (default_author_search))) {
  831. X            continue;
  832. X        }
  833. X        if (match_string (buf, "default_goto_group=", default_goto_group, sizeof (default_goto_group))) {
  834. X            continue;
  835. X        }
  836. X        if (match_string (buf, "default_group_search=", default_group_search, sizeof (default_group_search))) {
  837. X            continue;
  838. X        }
  839. X        if (match_string (buf, "default_subject_search=", default_subject_search, sizeof (default_subject_search))) {
  840. X            continue;
  841. X        }
  842. X        if (match_string (buf, "default_art_search=", default_art_search, sizeof (default_art_search))) {
  843. X            continue;
  844. X        }
  845. X        if (match_string (buf, "default_crosspost_group=", default_crosspost_group, sizeof (default_crosspost_group))) {
  846. X            continue;
  847. X        }
  848. X        if (match_string (buf, "default_mail_address=", default_mail_address, sizeof (default_mail_address))) {
  849. X            continue;
  850. X        }
  851. X        if (match_number (buf, "default_move_group=", &default_move_group)) {
  852. X            continue;
  853. X        }
  854. X        if (match_string (buf, "default_pipe_command=", default_pipe_command, sizeof (default_pipe_command))) {
  855. X            continue;
  856. X        }
  857. X        if (match_string (buf, "default_post_subject=", default_post_subject, sizeof (default_post_subject))) {
  858. X            continue;
  859. X        }
  860. X        if (match_string (buf, "default_regex_pattern=", default_regex_pattern, sizeof (default_regex_pattern))) {
  861. X            continue;
  862. X        }
  863. X        if (match_string (buf, "default_save_file=", default_save_file, sizeof (default_save_file))) {
  864. X            continue;
  865. X        }
  866. X        if (match_string (buf, "default_shell_command=", default_shell_command, sizeof (default_shell_command))) {
  867. X            continue;
  868. X        }
  869. X    }
  870. X    fclose (fp);
  871. X    return TRUE;        
  872. X}
  873. X
  874. X
  875. X/*
  876. X *  write_rcfile - write defaults to ~/.tin/tinrc
  877. X */
  878. X
  879. Xvoid write_rcfile ()
  880. X{
  881. X    FILE *fp;
  882. X
  883. X    if ((fp = fopen (rcfile, "w")) == NULL) {
  884. X        return;
  885. X    }    
  886. X    
  887. X    if (! cmd_line) {
  888. X        wait_message (txt_saving);
  889. X    }
  890. X    fprintf (fp, "# if ON articles/threads with Archive-name: in mail header will\n");
  891. X    fprintf (fp, "# be automatically saved with the Archive-name & part/patch no.\n");
  892. X    fprintf (fp, "save_archive=%s\n\n", (save_archive_name ? "ON" : "OFF"));
  893. X    fprintf (fp, "# if ON articles of a threads will be saved to separate files\n");
  894. X    fprintf (fp, "# otherwise the whole thread will be saved to one file\n");
  895. X    fprintf (fp, "start_editor_offset=%s\n\n", (start_editor_offset ? "ON" : "OFF"));
  896. X    fprintf (fp, "# if ON mark articles that are saved as read\n");
  897. X    fprintf (fp, "mark_saved_read=%s\n\n", (mark_saved_read ? "ON" : "OFF"));
  898. X    fprintf (fp, "# if 0 killed articles are simply marked as being read\n");
  899. X    fprintf (fp, "# if 1 killed articles are removed and never seen\n");
  900. X    fprintf (fp, "kill_level=%d\n\n", kill_level);
  901. X    fprintf (fp, "# if ON use -> otherwise highlighted bar for selection\n");
  902. X    fprintf (fp, "draw_arrow=%s\n\n", (draw_arrow_mark ? "ON" : "OFF"));
  903. X    fprintf (fp, "# if ON print all of mail header otherwise Subject: & From: lines\n");
  904. X    fprintf (fp, "print_header=%s\n\n", (print_header ? "ON" : "OFF"));
  905. X    fprintf (fp, "# if ON put cursor at first unread art in group otherwise last art\n");
  906. X    fprintf (fp, "pos_first_unread=%s\n\n", (pos_first_unread ? "ON" : "OFF"));
  907. X    fprintf (fp, "# if ON scroll full page of groups/articles otherwise half a page\n");
  908. X    fprintf (fp, "full_page_scroll=%s\n\n", (full_page_scroll ? "ON" : "OFF"));
  909. X    fprintf (fp, "# if ON ask user if read groups should all be marked read\n");
  910. X    fprintf (fp, "catchup_read_groups=%s\n\n", (catchup_read_groups ? "ON" : "OFF"));
  911. X    fprintf (fp, "# if ON confirm certain commands with y/n before executing\n");
  912. X    fprintf (fp, "confirm_action=%s\n\n", (confirm_action ? "ON" : "OFF"));
  913. X    fprintf (fp, "# part of from field to display 0) none 1) address 2) full name 3) both\n");
  914. X    fprintf (fp, "show_author=%d\n\n", default_show_author);
  915. X    fprintf (fp, "# type of post processing to perform after saving articles.\n");
  916. X    fprintf (fp, "# 0=(none) 1=(shar) 2=(uudecode) 3=(uud & list zoo) 4=(uud & extract zoo) 5=(patch).\n");
  917. X    fprintf (fp, "post_process_type=%d\n\n", post_proc_type);
  918. X    fprintf (fp, "# if ON and group not in ~/.tin/unthread articles will be threaded.\n");
  919. X    fprintf (fp, "thread_articles=%s\n\n", (thread_arts ? "ON" : "OFF"));
  920. X    fprintf (fp, "# if ON remove ~/.article after posting.\n");
  921. X    fprintf (fp, "unlink_article=%s\n\n", (unlink_article ? "ON" : "OFF"));
  922. X    fprintf (fp, "# if ON show only new/unread articles otherwise show all.\n");
  923. X    fprintf (fp, "show_only_unread=%s\n\n", (show_only_unread ? "ON" : "OFF"));
  924. X    fprintf (fp, "# sort articles by 0=(nothing) 1=(Subject descend) 2=(Subject ascend)\n");
  925. X    fprintf (fp, "# 3=(From descend) 4=(From ascend) 5=(Date descend) 6=(Date ascend).\n");
  926. X    fprintf (fp, "sort_article_type=%d\n\n", sort_art_type);
  927. X    fprintf (fp, "# (-d) directory where articles/threads are saved\n");
  928. X    fprintf (fp, "savedir=%s\n\n", default_savedir);
  929. X    fprintf (fp, "# (-M) directory where articles/threads are saved in mailbox format\n");    
  930. X    fprintf (fp, "maildir=%s\n\n", default_maildir);    
  931. X    fprintf (fp, "# (-p) print program with parameters used to print articles/threads\n");
  932. X    fprintf (fp, "printer=%s\n\n", printer);
  933. X
  934. X    fprintf (fp, "# default actions/prompt strings for questions\n");
  935. X    fprintf (fp, "default_spooldir_alias=%s\n", spooldir_alias);
  936. X    fprintf (fp, "default_author_search=%s\n", default_author_search);
  937. X    fprintf (fp, "default_goto_group=%s\n", default_goto_group);
  938. X    fprintf (fp, "default_group_search=%s\n", default_group_search);
  939. X    fprintf (fp, "default_subject_search=%s\n", default_subject_search);
  940. X    fprintf (fp, "default_art_search=%s\n", default_art_search);
  941. X    fprintf (fp, "default_crosspost_group=%s\n", default_crosspost_group);
  942. X    fprintf (fp, "default_mail_address=%s\n", default_mail_address);
  943. X    fprintf (fp, "default_move_group=%d\n", default_move_group);
  944. X    fprintf (fp, "default_pipe_command=%s\n", default_pipe_command);
  945. X    fprintf (fp, "default_post_subject=%s\n", default_post_subject);
  946. X    fprintf (fp, "default_regex_pattern=%s\n", default_regex_pattern);
  947. X    fprintf (fp, "default_save_file=%s\n", default_save_file);
  948. X    fprintf (fp, "default_shell_command=%s\n", default_shell_command);
  949. X
  950. X    fclose (fp);
  951. X    chmod (rcfile, 0600);
  952. X}
  953. X
  954. X/*
  955. X *  options menu so that the user can dynamically change parameters
  956. X */
  957. Xint change_rcfile (group, kill_at_once)
  958. X    char *group;
  959. X    int kill_at_once;
  960. X{
  961. X    char *str = (char *) 0;
  962. X    int ch, i;
  963. X    int kill_changed = FALSE;
  964. X    int orig_kill_state;
  965. X    int orig_show_only_unread;
  966. X    int orig_thread_arts;
  967. X    int option;
  968. X    int ret_code = NO_KILLING;
  969. X    int var_orig;
  970. X    
  971. X#ifdef SIGTSTP
  972. X    sigtype_t (*susp)() = (sigtype_t *) 0;
  973. X
  974. X    if (do_sigtstp) {
  975. X        susp = sigdisp (SIGTSTP, SIG_DFL);
  976. X    }
  977. X#endif
  978. X
  979. X    COL1 = 0;
  980. X    COL2 = ((COLS / 3) * 1) + 1;
  981. X    COL3 = ((COLS / 3) * 2) + 2;
  982. X
  983. X    show_rcfile_menu ();
  984. X
  985. X    while (1) {
  986. X
  987. X#ifdef SIGTSTP
  988. X        if (do_sigtstp) {
  989. X            sigdisp (SIGTSTP, rcfile_suspend);
  990. X        }
  991. X#endif
  992. X        MoveCursor (LINES, 0);
  993. X        ch = ReadCh ();
  994. X        if (ch >= '1' && ch <= '9') {
  995. X            option = prompt_num (ch, "Enter option number> ");
  996. X        } else {
  997. X            if (ch == 'q' || ch == ESC) {
  998. X                option = -1;
  999. X            } else {
  1000. X                option = 0;
  1001. X            }
  1002. X        }
  1003. X#ifdef SIGTSTP
  1004. X        if (do_sigtstp) {
  1005. X            sigdisp (SIGTSTP, SIG_IGN);
  1006. X        }
  1007. X#endif
  1008. X        switch (option) {
  1009. X            case 0:
  1010. X                write_rcfile ();
  1011. X                /* FALLTHRU */
  1012. X            case -1:
  1013. X                if (kill_changed) {
  1014. X                    if (kill_at_once) {
  1015. X                        if (killed_articles = read_kill_file ()) {
  1016. X                            if (kill_any_articles (group)) {
  1017. X                                make_threads (FALSE);
  1018. X                                find_base (show_only_unread);
  1019. X                            }
  1020. X                        } else {
  1021. X                            if (unkill_all_articles()) {
  1022. X                                make_threads (FALSE);
  1023. X                                find_base (show_only_unread);
  1024. X                            }
  1025. X                        }
  1026. X                    }
  1027. X                    ret_code = KILLING;
  1028. X                }
  1029. X
  1030. X                clear_note_area ();
  1031. X#ifdef SIGTSTP
  1032. X                if (do_sigtstp) {
  1033. X                    sigdisp (SIGTSTP, susp);
  1034. X                }
  1035. X#endif
  1036. X                return ret_code;
  1037. X            
  1038. X            case 1:        /* auto save */
  1039. X                prompt_on_off (INDEX_TOP, COL1, &save_archive_name, 
  1040. X                    txt_help_autosave, txt_opt_autosave);
  1041. X                break;
  1042. X
  1043. X            case 2:        /* start editor with line offset */
  1044. X                prompt_on_off (INDEX_TOP, COL2, &start_editor_offset, 
  1045. X                    txt_help_start_editor_offset, txt_opt_start_editor_offset);
  1046. X                break;
  1047. X            
  1048. X            case 3:        /* mark saved articles read */
  1049. X                prompt_on_off (INDEX_TOP, COL3, &mark_saved_read, 
  1050. X                    txt_help_mark_saved_read, txt_opt_mark_saved_read);
  1051. X                break;
  1052. X
  1053. X            case 4:        /* confirm action */
  1054. X                prompt_on_off (INDEX_TOP+2, COL1, &confirm_action, 
  1055. X                    txt_help_confirm_action, txt_opt_confirm_action);
  1056. X                break;
  1057. X
  1058. X            case 5:        /* draw -> / highlighted bar */
  1059. X                prompt_on_off (INDEX_TOP+2, COL2, &draw_arrow_mark, 
  1060. X                    txt_help_draw_arrow, txt_opt_draw_arrow);
  1061. X                if (draw_arrow_mark == FALSE && inverse_okay == FALSE) {
  1062. X                    inverse_okay = TRUE;
  1063. X                }
  1064. X                break;
  1065. X
  1066. X            case 6:        /* print header */
  1067. X                prompt_on_off (INDEX_TOP+2, COL3, &print_header, 
  1068. X                    txt_help_print_header, txt_opt_print_header);
  1069. X                break;
  1070. X            
  1071. X            case 7:        /* position cursor at first / last unread art */
  1072. X                prompt_on_off (INDEX_TOP+4, COL1, &pos_first_unread, 
  1073. X                    txt_help_pos_first_unread, txt_opt_pos_first_unread);
  1074. X                break;
  1075. X
  1076. X            case 8:        /* scroll half/full page of groups/articles */
  1077. X                prompt_on_off (INDEX_TOP+4, COL2, &full_page_scroll, 
  1078. X                    txt_help_page_scroll, txt_opt_page_scroll);
  1079. X                break;
  1080. X
  1081. X            case 9:        /* catchup read groups when quitting */
  1082. X                prompt_on_off (INDEX_TOP+4, COL3, &catchup_read_groups, 
  1083. X                    txt_help_catchup_groups, txt_opt_catchup_groups);
  1084. X                break;
  1085. X
  1086. X            case 10:    /* thread/unthread all groups except those in ~/.tin/unthreaded */
  1087. X                orig_thread_arts = thread_arts;    
  1088. X                prompt_on_off (INDEX_TOP+6, COL1, &thread_arts, 
  1089. X                    txt_help_thread_arts, txt_opt_thread_arts);
  1090. X                if (thread_arts != orig_thread_arts || group != (char *) 0) {
  1091. X                    make_threads (TRUE);
  1092. X                    find_base (show_only_unread);
  1093. X                }
  1094. X                break;
  1095. X
  1096. X            case 11:    /* show all arts or just new/unread arts */
  1097. X                orig_show_only_unread = show_only_unread;    
  1098. X                prompt_on_off (INDEX_TOP+6, COL2, &show_only_unread, 
  1099. X                    txt_help_show_only_unread, txt_opt_show_only_unread);
  1100. X                if (show_only_unread != orig_show_only_unread || group != (char *) 0) {
  1101. X                    make_threads (TRUE);
  1102. X                    find_base (show_only_unread);
  1103. X                    if (space_mode) {
  1104. X                        for (i = 0; i < top_base; i++) {
  1105. X                            if (new_responses (i)) {
  1106. X                                break;
  1107. X                            }
  1108. X                        }
  1109. X                        if (i < top_base) {
  1110. X                            index_point = i;
  1111. X                        } else {
  1112. X                            index_point = top_base - 1;
  1113. X                        }
  1114. X                    } else {
  1115. X                        index_point = top_base - 1;
  1116. X                    }
  1117. X                }
  1118. X                break;
  1119. X
  1120. X            case 13:        /* show subject & author / subject only */
  1121. X                var_orig = show_author;
  1122. X                show_menu_help (txt_help_show_author);
  1123. X                do {
  1124. X                    MoveCursor (INDEX_TOP+8, COL1 + (int) strlen (txt_opt_show_author));
  1125. X                    if ((ch    = ReadCh()) == ' ') {
  1126. X                        if (show_author + 1 > SHOW_FROM_BOTH) {
  1127. X                            show_author = SHOW_FROM_NONE;
  1128. X                        } else {
  1129. X                            show_author++;
  1130. X                        }
  1131. X                        switch (show_author) {
  1132. X                            case SHOW_FROM_NONE:
  1133. X                                str = txt_show_from_none;
  1134. X                                break;
  1135. X                            case SHOW_FROM_ADDR:
  1136. X                                str = txt_show_from_addr;
  1137. X                                break;
  1138. X                            case SHOW_FROM_NAME:
  1139. X                                str = txt_show_from_name;
  1140. X                                break;
  1141. X                            case SHOW_FROM_BOTH:
  1142. X                                str = txt_show_from_both;
  1143. X                                break;
  1144. X                        }
  1145. X                        fputs (str, stdout);
  1146. X                        fflush (stdout);
  1147. X                    }
  1148. X                } while (ch != CR && ch != ESC);
  1149. X
  1150. X                if (ch == ESC) {    /* restore original value */
  1151. X                    show_author = var_orig;
  1152. X                    switch (show_author) {
  1153. X                        case SHOW_FROM_NONE:
  1154. X                            str = txt_show_from_none;
  1155. X                            break;
  1156. X                        case SHOW_FROM_ADDR:
  1157. X                            str = txt_show_from_addr;
  1158. X                            break;
  1159. X                        case SHOW_FROM_NAME:
  1160. X                            str = txt_show_from_name;
  1161. X                            break;
  1162. X                        case SHOW_FROM_BOTH:
  1163. X                            str = txt_show_from_both;
  1164. X                            break;
  1165. X                    }
  1166. X                    fputs (str, stdout);
  1167. X                    fflush (stdout);
  1168. X                } else {
  1169. X                    default_show_author = show_author;
  1170. X                    set_subj_from_size (COLS);
  1171. X                }
  1172. X                break;
  1173. X
  1174. X            case 14:
  1175. X                var_orig = post_proc_type;
  1176. X                show_menu_help (txt_help_post_proc_type);
  1177. X                do {
  1178. X                    MoveCursor (INDEX_TOP+8, COL2 + (int) strlen (txt_opt_process_type));
  1179. X                    if ((ch    = ReadCh()) == ' ') {
  1180. X                        if (post_proc_type + 1 > POST_PROC_UUD_EXT_ZOO) {
  1181. X                            post_proc_type = POST_PROC_NONE;
  1182. X                        } else {
  1183. X                            post_proc_type++;
  1184. X                        }
  1185. X                        switch (post_proc_type) {
  1186. X                            case POST_PROC_NONE:
  1187. X                                str = txt_post_process_none;
  1188. X                                proc_ch_default = 'n';
  1189. X                                break;
  1190. X                            case POST_PROC_SHAR:
  1191. X                                str = txt_post_process_sh;
  1192. X                                proc_ch_default = 's';
  1193. X                                break;
  1194. X                            case POST_PROC_UUDECODE:
  1195. X                                str = txt_post_process_uudecode;
  1196. X                                proc_ch_default = 'u';
  1197. X                                break;
  1198. X                            case POST_PROC_UUD_LST_ZOO:
  1199. X                                str = txt_post_process_uud_lst_zoo;
  1200. X                                proc_ch_default = 'U';
  1201. X                                break;
  1202. X                            case POST_PROC_UUD_EXT_ZOO:
  1203. X                                str = txt_post_process_uud_ext_zoo;
  1204. X                                proc_ch_default = 'U';
  1205. X                                break;
  1206. X                        }
  1207. X                        CleartoEOLN (); 
  1208. X                        fputs (str, stdout);
  1209. X                        fflush (stdout);
  1210. X                    }
  1211. X                } while (ch != CR && ch != ESC);
  1212. X
  1213. X                if (ch == ESC) {    /* restore original value */
  1214. X                    post_proc_type = var_orig;
  1215. X                    switch (post_proc_type) {
  1216. X                        case POST_PROC_NONE:
  1217. X                            str = txt_post_process_none;
  1218. X                            proc_ch_default = 'n';
  1219. X                            break;
  1220. X                        case POST_PROC_SHAR:
  1221. X                            str = txt_post_process_sh;
  1222. X                            proc_ch_default = 's';
  1223. X                            break;
  1224. X                        case POST_PROC_UUDECODE:
  1225. X                            str = txt_post_process_uudecode;
  1226. X                            proc_ch_default = 'u';
  1227. X                            break;
  1228. X                        case POST_PROC_UUD_LST_ZOO:
  1229. X                            str = txt_post_process_uud_lst_zoo;
  1230. X                            proc_ch_default = 'U';
  1231. X                            break;
  1232. X                        case POST_PROC_UUD_EXT_ZOO:
  1233. X                            str = txt_post_process_uud_ext_zoo;
  1234. X                            proc_ch_default = 'U';
  1235. X                            break;
  1236. X                    }
  1237. X                    CleartoEOLN (); 
  1238. X                    fputs (str, stdout);
  1239. X                    fflush (stdout);
  1240. X                }
  1241. X                break;
  1242. X
  1243. X            case 15:
  1244. X                var_orig = sort_art_type;
  1245. X                show_menu_help (txt_help_sort_type);
  1246. X                do {
  1247. X                    MoveCursor (INDEX_TOP+10, COL1 + (int) strlen (txt_opt_sort_type));
  1248. X                    if ((ch    = ReadCh()) == ' ') {
  1249. X                        if (sort_art_type + 1 > SORT_BY_DATE_ASCEND) {
  1250. X                            sort_art_type = SORT_BY_NOTHING;
  1251. X                        } else {
  1252. X                            sort_art_type++;
  1253. X                        }
  1254. X                        switch (sort_art_type) {
  1255. X                            case SORT_BY_NOTHING:
  1256. X                                str = txt_sort_by_nothing;
  1257. X                                break;
  1258. X                            case SORT_BY_SUBJ_DESCEND:
  1259. X                                str = txt_sort_by_subj_descend;
  1260. X                                break;
  1261. X                            case SORT_BY_SUBJ_ASCEND:
  1262. X                                str = txt_sort_by_subj_ascend;
  1263. X                                break;
  1264. X                            case SORT_BY_FROM_DESCEND:
  1265. X                                str = txt_sort_by_from_descend;
  1266. X                                break;
  1267. X                            case SORT_BY_FROM_ASCEND:
  1268. X                                str = txt_sort_by_from_ascend;
  1269. X                                break;
  1270. X                            case SORT_BY_DATE_DESCEND:
  1271. X                                str = txt_sort_by_date_descend;
  1272. X                                break;
  1273. X                            case SORT_BY_DATE_ASCEND:
  1274. X                                str = txt_sort_by_date_ascend;
  1275. X                                break;
  1276. X                        }
  1277. X                        CleartoEOLN (); 
  1278. X                        fputs (str, stdout);
  1279. X                        fflush (stdout);
  1280. X                    }
  1281. X                } while (ch != CR && ch != ESC);
  1282. X
  1283. X                if (ch == ESC) {    /* restore original value */
  1284. X                    sort_art_type = var_orig;
  1285. X                    switch (sort_art_type) {
  1286. X                        case SORT_BY_NOTHING:
  1287. X                            str = txt_sort_by_nothing;
  1288. X                            break;
  1289. X                        case SORT_BY_SUBJ_DESCEND:
  1290. X                            str = txt_sort_by_subj_descend;
  1291. X                            break;
  1292. X                        case SORT_BY_SUBJ_ASCEND:
  1293. X                            str = txt_sort_by_subj_ascend;
  1294. X                            break;
  1295. X                        case SORT_BY_FROM_DESCEND:
  1296. X                            str = txt_sort_by_from_descend;
  1297. X                            break;
  1298. X                        case SORT_BY_FROM_ASCEND:
  1299. X                            str = txt_sort_by_from_ascend;
  1300. X                            break;
  1301. X                        case SORT_BY_DATE_DESCEND:
  1302. X                            str = txt_sort_by_date_descend;
  1303. X                            break;
  1304. X                        case SORT_BY_DATE_ASCEND:
  1305. X                            str = txt_sort_by_date_ascend;
  1306. X                            break;
  1307. X                    }
  1308. X                    CleartoEOLN (); 
  1309. X                    fputs (str, stdout);
  1310. X                    fflush (stdout);
  1311. X                }
  1312. X                break;
  1313. X
  1314. X            case 16:
  1315. X                show_menu_help (txt_help_savedir);
  1316. X                prompt_menu_string (INDEX_TOP+12, COL1 + (int) strlen (txt_opt_savedir), default_savedir);
  1317. X                expand_rel_abs_pathname (INDEX_TOP+12, COL1 + (int) strlen (txt_opt_savedir), default_savedir);
  1318. X                break;
  1319. X
  1320. X            case 17:
  1321. X                show_menu_help (txt_help_maildir);
  1322. X                prompt_menu_string (INDEX_TOP+14, COL1 + (int) strlen (txt_opt_maildir), default_maildir);
  1323. X                expand_rel_abs_pathname (INDEX_TOP+14, COL1 + (int) strlen (txt_opt_maildir), default_maildir);
  1324. X                break;
  1325. X
  1326. X            case 18:
  1327. X                show_menu_help (txt_help_printer);
  1328. X                prompt_menu_string (INDEX_TOP+16, COL1 + (int) strlen (txt_opt_printer), printer);
  1329. X                expand_rel_abs_pathname (INDEX_TOP+16, COL1 + (int) strlen (txt_opt_printer), printer);
  1330. X                break;
  1331. X        }
  1332. X        show_menu_help (txt_select_rcfile_option);
  1333. X    }
  1334. X}
  1335. X
  1336. X
  1337. Xvoid show_rcfile_menu ()
  1338. X{
  1339. X    char *str = (char *) 0;
  1340. X
  1341. X    ClearScreen ();
  1342. X
  1343. X    center_line (0, TRUE, txt_options_menu);
  1344. X    
  1345. X    MoveCursor (INDEX_TOP, 0);
  1346. X    printf ("%s%s\r\n\r\n", txt_opt_autosave, (save_archive_name ? "ON " : "OFF"));
  1347. X    printf ("%s%s\r\n\r\n", txt_opt_confirm_action, (confirm_action ? "ON " : "OFF"));
  1348. X    printf ("%s%s\r\n\r\n", txt_opt_pos_first_unread, (pos_first_unread ? "ON " : "OFF"));
  1349. X    printf ("%s%s", txt_opt_thread_arts, (thread_arts ? "ON " : "OFF"));
  1350. X
  1351. X    MoveCursor(INDEX_TOP, COL2);
  1352. X    printf ("%s%s", txt_opt_start_editor_offset, (start_editor_offset ? "ON " : "OFF"));
  1353. X    MoveCursor(INDEX_TOP+2, COL2);
  1354. X    printf ("%s%s", txt_opt_draw_arrow, (draw_arrow_mark ? "ON " : "OFF"));
  1355. X    MoveCursor(INDEX_TOP+4, COL2);
  1356. X    printf ("%s%s", txt_opt_page_scroll, (full_page_scroll ? "ON " : "OFF"));
  1357. X    MoveCursor(INDEX_TOP+6, COL2);
  1358. X    printf ("%s%s", txt_opt_show_only_unread, (show_only_unread ? "ON " : "OFF"));
  1359. X
  1360. X    MoveCursor(INDEX_TOP, COL3);
  1361. X    printf ("%s%s", txt_opt_mark_saved_read, (mark_saved_read ? "ON " : "OFF"));
  1362. X    MoveCursor(INDEX_TOP+2, COL3);
  1363. X    printf ("%s%s", txt_opt_print_header, (print_header ? "ON " : "OFF"));
  1364. X    MoveCursor(INDEX_TOP+4, COL3);
  1365. X    printf ("%s%s", txt_opt_catchup_groups, (catchup_read_groups ? "ON " : "OFF"));
  1366. X
  1367. X    MoveCursor(INDEX_TOP+8, COL1);
  1368. X    switch (show_author) {
  1369. X        case SHOW_FROM_NONE:
  1370. X            str = txt_show_from_none;
  1371. X            break;
  1372. X        case SHOW_FROM_ADDR:
  1373. X            str = txt_show_from_addr;
  1374. X            break;
  1375. X        case SHOW_FROM_NAME:
  1376. X            str = txt_show_from_name;
  1377. X            break;
  1378. X        case SHOW_FROM_BOTH:
  1379. X            str = txt_show_from_both;
  1380. X            break;
  1381. X    }
  1382. X    printf ("%s%s", txt_opt_show_author, str);
  1383. X    MoveCursor(INDEX_TOP+8, COL2);
  1384. X    switch (post_proc_type) {
  1385. X        case POST_PROC_NONE:
  1386. X            str = txt_post_process_none;
  1387. X            break;
  1388. X        case POST_PROC_SHAR:
  1389. X            str = txt_post_process_sh;
  1390. X            break;
  1391. X        case POST_PROC_UUDECODE:
  1392. X            str = txt_post_process_uudecode;
  1393. X            break;
  1394. X        case POST_PROC_UUD_LST_ZOO:
  1395. X            str = txt_post_process_uud_lst_zoo;
  1396. X            break;
  1397. X        case POST_PROC_UUD_EXT_ZOO:
  1398. X            str = txt_post_process_uud_ext_zoo;
  1399. X            break;
  1400. X    }
  1401. X    printf ("%s%s\r\n\r\n", txt_opt_process_type, str);
  1402. X    
  1403. X    MoveCursor(INDEX_TOP+10, COL1);
  1404. X    switch (sort_art_type) {
  1405. X        case SORT_BY_NOTHING:
  1406. X            str = txt_sort_by_nothing;
  1407. X            break;
  1408. X        case SORT_BY_SUBJ_DESCEND:
  1409. X            str = txt_sort_by_subj_descend;
  1410. X            break;
  1411. X        case SORT_BY_SUBJ_ASCEND:
  1412. X            str = txt_sort_by_subj_ascend;
  1413. X            break;
  1414. X        case SORT_BY_FROM_DESCEND:
  1415. X            str = txt_sort_by_from_descend;
  1416. X            break;
  1417. X        case SORT_BY_FROM_ASCEND:
  1418. X            str = txt_sort_by_from_ascend;
  1419. X            break;
  1420. X        case SORT_BY_DATE_DESCEND:
  1421. X            str = txt_sort_by_date_descend;
  1422. X            break;
  1423. X        case SORT_BY_DATE_ASCEND:
  1424. X            str = txt_sort_by_date_ascend;
  1425. X            break;
  1426. X    }
  1427. X    printf ("%s%s\r\n\r\n", txt_opt_sort_type, str);
  1428. X
  1429. X    printf ("%s%s\r\n\r\n", txt_opt_savedir, default_savedir);
  1430. X    printf ("%s%s\r\n\r\n", txt_opt_maildir, default_maildir);
  1431. X    printf ("%s%s\r\n\r\n", txt_opt_printer, printer);
  1432. X    fflush(stdout);
  1433. X
  1434. X    show_menu_help (txt_select_rcfile_option);
  1435. X    MoveCursor (LINES, 0);
  1436. X}
  1437. X
  1438. X/*
  1439. X *  expand ~/News to /usr/username/News and print to screen
  1440. X */
  1441. Xvoid expand_rel_abs_pathname (line, col, str)
  1442. X    int line;
  1443. X    int col;
  1444. X    char *str;
  1445. X{
  1446. X    char buf[LEN];
  1447. X    
  1448. X    if (str[0] == '~') {
  1449. X        if (strlen (str) == 1) {
  1450. X            strcpy (str, homedir);
  1451. X        } else {
  1452. X            sprintf (buf, "%s%s", homedir, str+1);
  1453. X            strcpy (str, buf);
  1454. X        }
  1455. X    }
  1456. X    MoveCursor (line, col);
  1457. X    CleartoEOLN ();
  1458. X    puts (str);
  1459. X    fflush (stdout);
  1460. X}
  1461. X
  1462. X/*
  1463. X *  show_menu_help
  1464. X */
  1465. Xvoid show_menu_help (help_message)
  1466. X    char *help_message;
  1467. X{
  1468. X     MoveCursor (LINES-2, 0);
  1469. X     CleartoEOLN ();
  1470. X     center_line (LINES-2, FALSE, help_message);
  1471. X}
  1472. X
  1473. X
  1474. Xint match_boolean (line, pat, dst)
  1475. X    char *line;
  1476. X    char *pat;
  1477. X    int *dst;
  1478. X{
  1479. X    int    patlen = strlen (pat);
  1480. X
  1481. X    if (strncmp (line, pat, patlen) == 0) {
  1482. X        *dst = (strncmp (&line[patlen], "ON", 2) == 0 ? TRUE : FALSE);
  1483. X        return TRUE;
  1484. X    }
  1485. X    return FALSE;
  1486. X}
  1487. X
  1488. X
  1489. Xint match_number (line, pat, dst)
  1490. X    char *line;
  1491. X    char *pat;
  1492. X    int *dst;
  1493. X{
  1494. X    int    patlen = strlen (pat);
  1495. X
  1496. X    if (strncmp (line, pat, patlen) == 0) {
  1497. X        *dst = atoi (&line[patlen]);
  1498. X        return TRUE;
  1499. X    }
  1500. X    return FALSE;
  1501. X}
  1502. X
  1503. X
  1504. Xint match_string (line, pat, dst, dstlen)
  1505. X    char *line;
  1506. X    char *pat;
  1507. X    char *dst;
  1508. X    int dstlen;
  1509. X{
  1510. X    int    patlen = strlen (pat);
  1511. X
  1512. X    if (strncmp (line, pat, patlen) == 0) {
  1513. X        strncpy (dst, &line[patlen], dstlen);
  1514. X        dst[strlen (dst) - 1] = '\0';
  1515. X        return TRUE;
  1516. X    }
  1517. X    return FALSE;
  1518. X}
  1519. X
  1520. END_OF_FILE
  1521.   if test 23814 -ne `wc -c <'rcfile.c'`; then
  1522.     echo shar: \"'rcfile.c'\" unpacked with wrong size!
  1523.   fi
  1524.   # end of 'rcfile.c'
  1525. fi
  1526. echo shar: End of archive 5 \(of 14\).
  1527. cp /dev/null ark5isdone
  1528. MISSING=""
  1529. for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ; do
  1530.     if test ! -f ark${I}isdone ; then
  1531.     MISSING="${MISSING} ${I}"
  1532.     fi
  1533. done
  1534. if test "${MISSING}" = "" ; then
  1535.     echo You have unpacked all 14 archives.
  1536.     rm -f ark[1-9]isdone ark[1-9][0-9]isdone
  1537. else
  1538.     echo You still must unpack the following archives:
  1539.     echo "        " ${MISSING}
  1540. fi
  1541. exit 0
  1542. exit 0 # Just in case...
  1543.