blob: b88c36ee37351407fc97109fe16a8aa1539c84dd [file] [log] [blame]
Chris Allegretta11b00112000-08-06 21:13:45 +00001/* $Id$ */
Chris Allegrettaa2ea1932000-06-06 05:53:49 +00002/**************************************************************************
3 * proto.h *
4 * *
Jordi Mallach8ae57892002-01-04 17:57:40 +00005 * Copyright (C) 1999-2002 Chris Allegretta *
Chris Allegrettaa2ea1932000-06-06 05:53:49 +00006 * This program is free software; you can redistribute it and/or modify *
7 * it under the terms of the GNU General Public License as published by *
Chris Allegretta3a24f3f2001-10-24 11:33:54 +00008 * the Free Software Foundation; either version 2, or (at your option) *
Chris Allegrettaa2ea1932000-06-06 05:53:49 +00009 * any later version. *
10 * *
11 * This program is distributed in the hope that it will be useful, *
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
14 * GNU General Public License for more details. *
15 * *
16 * You should have received a copy of the GNU General Public License *
17 * along with this program; if not, write to the Free Software *
18 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. *
19 * *
20 **************************************************************************/
21
22/* Externs */
23
24#include <sys/stat.h>
Chris Allegretta805c26d2000-09-06 13:39:17 +000025
26#ifdef HAVE_REGEX_H
Chris Allegretta9fc8d432000-07-07 01:49:52 +000027#include <regex.h>
Chris Allegretta805c26d2000-09-06 13:39:17 +000028#endif
29
Chris Allegrettaa2ea1932000-06-06 05:53:49 +000030#include "nano.h"
31
Chris Allegretta17dcb722001-01-20 21:40:07 +000032extern int editwinrows;
Chris Allegretta7162e3d2002-04-06 05:02:14 +000033extern int current_x, current_y, totlines;
Chris Allegrettaa2ea1932000-06-06 05:53:49 +000034extern int placewewant;
35extern int mark_beginx, samelinewrap;
Chris Allegrettab3655b42001-10-22 03:15:31 +000036extern long totsize;
37extern int temp_opt;
Chris Allegretta6fe61492001-05-21 12:56:25 +000038extern int fill, wrap_at, flags,tabsize;
Chris Allegretta27eb13f2000-11-05 16:52:21 +000039extern int search_last_line;
Chris Allegretta6b58acd2001-04-12 03:01:53 +000040extern int currslen;
Chris Allegrettaa2ea1932000-06-06 05:53:49 +000041
Chris Allegrettae4f940d2002-03-03 22:36:36 +000042#ifndef DISABLE_JUSTIFY
Chris Allegretta45329a12002-03-10 01:22:21 +000043extern char *quotestr;
Chris Allegrettae4f940d2002-03-03 22:36:36 +000044#endif
45
Chris Allegrettaa2ea1932000-06-06 05:53:49 +000046extern WINDOW *edit, *topwin, *bottomwin;
Chris Allegretta1a6e9042000-12-14 13:56:28 +000047extern char *filename;
Chris Allegretta31925e42000-11-02 04:40:39 +000048extern char *answer;
Chris Allegrettaa2ea1932000-06-06 05:53:49 +000049extern char *hblank, *help_text;
Chris Allegretta27eb13f2000-11-05 16:52:21 +000050extern char *last_search;
51extern char *last_replace;
Chris Allegrettae1f14522001-09-19 03:19:43 +000052#ifndef DISABLE_OPERATINGDIR
53extern char *operating_dir;
Chris Allegrettaf5de33a2002-02-27 04:14:16 +000054extern char *full_operating_dir;
Chris Allegrettae1f14522001-09-19 03:19:43 +000055#endif
Chris Allegretta8d8e0122001-04-18 04:28:54 +000056#ifndef DISABLE_SPELLER
57extern char *alt_speller;
58#endif
Chris Allegrettaa2ea1932000-06-06 05:53:49 +000059extern struct stat fileinfo;
60extern filestruct *current, *fileage, *edittop, *editbot, *filebot;
61extern filestruct *cutbuffer, *mark_beginbuf;
Chris Allegretta2d7893d2001-07-11 02:08:33 +000062
Chris Allegretta355fbe52001-07-14 19:32:47 +000063#ifdef ENABLE_MULTIBUFFER
Chris Allegretta2d7893d2001-07-11 02:08:33 +000064extern filestruct *open_files;
65#endif
66
Chris Allegretta08893e02001-11-29 02:42:27 +000067#ifdef ENABLE_COLOR
Chris Allegretta45329a12002-03-10 01:22:21 +000068extern colortype *colorstrings;
Chris Allegretta08893e02001-11-29 02:42:27 +000069#endif
70
Chris Allegrettaa2ea1932000-06-06 05:53:49 +000071extern shortcut *shortcut_list;
Chris Allegrettaa8c22572002-02-15 19:17:02 +000072extern shortcut *main_list, *whereis_list;
73extern shortcut *replace_list, *goto_list;
74extern shortcut *writefile_list, *insertfile_list;
Chris Allegretta7162e3d2002-04-06 05:02:14 +000075extern shortcut *spell_list, *replace_list_2;
76#ifndef NANO_SMALL
77extern shortcut *extcmd_list;
78#endif
Chris Allegrettaa8c22572002-02-15 19:17:02 +000079extern shortcut *help_list;
Rocco Corsiaf5c3022001-01-12 07:51:05 +000080#ifndef DISABLE_BROWSER
Chris Allegrettaa8c22572002-02-15 19:17:02 +000081extern shortcut *browser_list, *gotodir_list;
Chris Allegrettaf4b96012001-01-03 07:11:47 +000082#endif
Chris Allegretta6b58acd2001-04-12 03:01:53 +000083extern shortcut *currshortcut;
Chris Allegretta805c26d2000-09-06 13:39:17 +000084
85#ifdef HAVE_REGEX_H
Chris Allegretta9fc8d432000-07-07 01:49:52 +000086extern int use_regexp, regexp_compiled;
87extern regex_t search_regexp;
88extern regmatch_t regmatches[10];
Chris Allegretta3533a342002-03-24 23:19:32 +000089
90#ifdef ENABLE_COLOR
91extern regex_t color_regexp;
92extern regmatch_t colormatches[1];
Chris Allegretta7162e3d2002-04-06 05:02:14 +000093#endif /* ENABLE_COLOR */
Chris Allegretta805c26d2000-09-06 13:39:17 +000094#endif
95
Chris Allegrettaa8c22572002-02-15 19:17:02 +000096extern toggle *toggles;
Chris Allegrettaa2ea1932000-06-06 05:53:49 +000097
98/* Programs we want available */
99
Chris Allegrettae4933a32001-06-13 02:35:44 +0000100char *revstrstr(char *haystack, char *needle, char *rev_start);
Chris Allegretta99ed9dc2002-02-28 00:57:18 +0000101char *stristr(char *haystack, char *needle);
102char *revstristr(char *haystack, char *needle, char *rev_start);
Chris Allegrettae4933a32001-06-13 02:35:44 +0000103char *strstrwrapper(char *haystack, char *needle, char *rev_start);
Chris Allegrettaa2ea1932000-06-06 05:53:49 +0000104int search_init(int replacing);
105int renumber(filestruct * fileptr);
106int free_filestruct(filestruct * src);
107int xplustabs(void);
108int do_yesno(int all, int leavecursor, char *msg, ...);
109int actual_x(filestruct * fileptr, int xplus);
Chris Allegrettad4fa0d32002-03-05 19:55:55 +0000110int strnlenpt(char *buf, int size);
Chris Allegrettaa2ea1932000-06-06 05:53:49 +0000111int strlenpt(char *buf);
Chris Allegrettaa8c22572002-02-15 19:17:02 +0000112int statusq(int allowtabs, shortcut s[], char *def, char *msg, ...);
Chris Allegrettaecc3d7f2001-06-05 23:24:55 +0000113int write_file(char *name, int tmpfile, int append, int nonamechange);
Chris Allegrettaa2ea1932000-06-06 05:53:49 +0000114int do_cut_text(void);
115int do_uncut_text(void);
116int no_help(void);
Chris Allegrettabceb1b22000-06-19 04:22:15 +0000117int renumber_all(void);
118int open_file(char *filename, int insert, int quiet);
Chris Allegretta2d7893d2001-07-11 02:08:33 +0000119int do_insertfile(int loading_file);
Chris Allegrettaa8c22572002-02-15 19:17:02 +0000120int length_of_list(shortcut *s);
Chris Allegretta48b06702002-02-22 04:30:50 +0000121int num_of_digits(int n);
Chris Allegretta77777d42002-03-29 16:31:29 +0000122int open_pipe(char *command);
123int read_file(int fd, char *filename, int quiet);
Chris Allegretta2d7893d2001-07-11 02:08:33 +0000124
Chris Allegretta355fbe52001-07-14 19:32:47 +0000125#ifdef ENABLE_MULTIBUFFER
Chris Allegretta48b06702002-02-22 04:30:50 +0000126int add_open_file(int update);
Chris Allegretta2d7893d2001-07-11 02:08:33 +0000127#endif
128
Chris Allegrettae1f14522001-09-19 03:19:43 +0000129#ifndef DISABLE_OPERATINGDIR
130int check_operating_dir(char *currpath, int allow_tabcomp);
131#endif
132
Chris Allegrettacc197ef2001-05-29 04:21:44 +0000133int do_writeout(char *path, int exiting, int append);
Chris Allegretta2084acc2001-11-29 03:43:08 +0000134int do_gotoline(int line, int save_pos);
Chris Allegretta1bc0c7e2002-01-08 15:00:24 +0000135int is_whole_word(int curr_pos, filestruct *fileptr, char *searchword);
Chris Allegretta27eb13f2000-11-05 16:52:21 +0000136int do_replace_loop(char *prevanswer, filestruct *begin, int *beginx,
137 int wholewords, int *i);
Chris Allegretta8d990b52001-09-22 22:14:25 +0000138int do_find_bracket(void);
Chris Allegrettae1f14522001-09-19 03:19:43 +0000139
Chris Allegretta1b3381b2001-09-28 21:59:01 +0000140#if defined (ENABLE_MULTIBUFFER) || !defined (DISABLE_SPELLER)
Chris Allegretta2084acc2001-11-29 03:43:08 +0000141void do_gotopos(int line, int pos_x, int pos_y, int pos_placewewant);
Chris Allegrettae1f14522001-09-19 03:19:43 +0000142#endif
143
Chris Allegrettabceb1b22000-06-19 04:22:15 +0000144/* Now in move.c */
145int do_up(void);
146int do_down(void);
147int do_left(void);
148int do_right(void);
Chris Allegretta04d848e2000-11-05 17:54:41 +0000149int check_wildcard_match(const char *text, const char *pattern);
Chris Allegrettabe77c612000-11-24 14:00:16 +0000150
Chris Allegretta2084acc2001-11-29 03:43:08 +0000151char *input_tab(char *buf, int place, int *lastWasTab, int *newplace, int *list);
Chris Allegrettabe77c612000-11-24 14:00:16 +0000152char *real_dir_from_tilde(char *buf);
Chris Allegrettaa2ea1932000-06-06 05:53:49 +0000153
Chris Allegretta07798352000-11-27 22:58:23 +0000154void shortcut_init(int unjustify);
Chris Allegretta0bb70dc2001-12-17 04:34:23 +0000155void signal_init(void);
Chris Allegrettaa2ea1932000-06-06 05:53:49 +0000156void lowercase(char *src);
157void blank_bottombars(void);
Chris Allegretta7162e3d2002-04-06 05:02:14 +0000158void check_wrap(filestruct * inptr);
Chris Allegrettaa2ea1932000-06-06 05:53:49 +0000159void dump_buffer(filestruct * inptr);
160void align(char **strp);
Chris Allegrettaf1d33d32000-08-19 03:53:39 +0000161void edit_refresh(void), edit_refresh_clearok(void);
Chris Allegretta2d7893d2001-07-11 02:08:33 +0000162void edit_update(filestruct * fileptr, int topmidbotnone);
Chris Allegrettaa2ea1932000-06-06 05:53:49 +0000163void update_cursor(void);
164void delete_node(filestruct * fileptr);
165void set_modified(void);
166void dump_buffer_reverse(filestruct * inptr);
167void reset_cursor(void);
168void check_statblank(void);
169void update_line(filestruct * fileptr, int index);
Robert Siemborskidd53ec22000-07-04 02:35:19 +0000170void fix_editbot(void);
Chris Allegrettaa2ea1932000-06-06 05:53:49 +0000171void statusbar(char *msg, ...);
Chris Allegrettaf4b96012001-01-03 07:11:47 +0000172void blank_statusbar(void);
173void titlebar(char *path);
Chris Allegrettaa2ea1932000-06-06 05:53:49 +0000174void previous_line(void);
175void center_cursor(void);
Chris Allegrettaa8c22572002-02-15 19:17:02 +0000176void bottombars(shortcut *s);
Chris Allegrettaa2ea1932000-06-06 05:53:49 +0000177void blank_statusbar_refresh(void);
Chris Allegretta77777d42002-03-29 16:31:29 +0000178void nperror(const char *s);
Chris Allegretta150469a2001-01-05 21:13:14 +0000179void *mallocstrcpy(char *dest, char *src);
Chris Allegrettaa2ea1932000-06-06 05:53:49 +0000180void wrap_reset(void);
181void display_main_list(void);
182void nano_small_msg(void);
Chris Allegretta3bc8c722000-12-10 17:03:25 +0000183void nano_disable_msg(void);
Chris Allegrettabceb1b22000-06-19 04:22:15 +0000184void do_early_abort(void);
185void *nmalloc(size_t howmuch);
186void *nrealloc(void *ptr, size_t howmuch);
187void die(char *msg, ...);
Chris Allegretta2d7893d2001-07-11 02:08:33 +0000188void die_save_file(char *die_filename);
Chris Allegrettabceb1b22000-06-19 04:22:15 +0000189void new_file(void);
Robert Siemborski63b3d7e2000-07-04 22:15:39 +0000190void new_magicline(void);
Chris Allegrettae3167732001-03-18 16:59:34 +0000191void splice_node(filestruct *begin, filestruct *newnode, filestruct *end);
Chris Allegrettafa0c6962001-10-22 23:22:19 +0000192void null_at(char **data, int index);
Chris Allegretta3e3ae942001-09-22 19:02:04 +0000193void page_up(void);
Chris Allegretta04d848e2000-11-05 17:54:41 +0000194void blank_edit(void);
Chris Allegretta27eb13f2000-11-05 16:52:21 +0000195void search_init_globals(void);
196void replace_abort(void);
Chris Allegretta9149e612000-11-27 00:23:41 +0000197void add_to_cutbuffer(filestruct * inptr);
Chris Allegrettad00e6df2000-11-29 04:33:26 +0000198void do_replace_highlight(int highlight_flag, char *word);
Chris Allegretta65121632000-12-18 07:05:27 +0000199void nano_disabled_msg(void);
Chris Allegretta70444892001-01-07 23:02:02 +0000200void window_init(void);
Chris Allegretta6b58acd2001-04-12 03:01:53 +0000201void do_mouse(void);
Chris Allegretta5050aa62001-04-22 07:10:21 +0000202void print_view_warning(void);
Chris Allegretta2d7893d2001-07-11 02:08:33 +0000203void unlink_node(filestruct * fileptr);
Chris Allegrettacc197ef2001-05-29 04:21:44 +0000204void cut_marked_segment(filestruct * top, int top_x, filestruct * bot,
205 int bot_x, int destructive);
Chris Allegrettaf5de33a2002-02-27 04:14:16 +0000206void free_shortcutage(shortcut **src);
207void thanks_for_all_the_fish(void);
Chris Allegretta8d8e0122001-04-18 04:28:54 +0000208
Chris Allegretta7a500092001-04-19 21:13:46 +0000209#ifdef ENABLE_NANORC
Chris Allegretta8d8e0122001-04-18 04:28:54 +0000210void do_rcfile(void);
211#endif
212
Chris Allegretta8a0de3b2000-11-24 20:45:14 +0000213#ifdef NANO_EXTRA
Chris Allegretta34318ed2001-01-31 23:22:36 +0000214void do_credits(void);
Chris Allegretta8a0de3b2000-11-24 20:45:14 +0000215#endif
Chris Allegrettaa2ea1932000-06-06 05:53:49 +0000216
217int do_writeout_void(void), do_exit(void), do_gotoline_void(void);
Chris Allegretta2d7893d2001-07-11 02:08:33 +0000218int do_insertfile_void(void), do_search(void);
219
Chris Allegretta355fbe52001-07-14 19:32:47 +0000220#ifdef ENABLE_MULTIBUFFER
Chris Allegretta2d7893d2001-07-11 02:08:33 +0000221int load_open_file(void), close_open_file(void);
222#endif
223
Chris Allegretta3e3ae942001-09-22 19:02:04 +0000224int do_page_up(void), do_page_down(void);
Chris Allegretta2084acc2001-11-29 03:43:08 +0000225int do_cursorpos(int constant), do_cursorpos_void(void), do_spell(void);
Chris Allegrettaa2ea1932000-06-06 05:53:49 +0000226int do_home(void), do_end(void), total_refresh(void), do_mark(void);
227int do_delete(void), do_backspace(void), do_tab(void), do_justify(void);
228int do_first_line(void), do_last_line(void);
229int do_replace(void), do_help(void), do_enter_void(void);
Chris Allegrettae3167732001-03-18 16:59:34 +0000230int keypad_on(WINDOW * win, int newval);
Chris Allegrettaa2ea1932000-06-06 05:53:49 +0000231
Chris Allegretta355fbe52001-07-14 19:32:47 +0000232#ifdef ENABLE_MULTIBUFFER
Chris Allegretta2d7893d2001-07-11 02:08:33 +0000233int open_prevfile(int closing_file), open_nextfile(int closing_file);
Chris Allegrettaa8c22572002-02-15 19:17:02 +0000234int open_prevfile_void(void), open_nextfile_void(void);
Chris Allegretta2d7893d2001-07-11 02:08:33 +0000235#endif
236
Chris Allegretta88b09152001-05-17 11:35:43 +0000237char *charalloc (size_t howmuch);
Chris Allegretta7162e3d2002-04-06 05:02:14 +0000238char *get_next_filename(const char *name);
Chris Allegretta88b09152001-05-17 11:35:43 +0000239
Chris Allegrettafd0fe7e2002-03-04 16:30:17 +0000240#if !defined (DISABLE_SPELLER) || !defined (DISABLE_OPERATINGDIR)
Chris Allegrettaa8c22572002-02-15 19:17:02 +0000241char *get_full_path(const char *origpath);
242#endif
243
244#ifndef DISABLE_SPELLER
Chris Allegrettabc72e362002-02-16 20:03:44 +0000245char *check_writable_directory(const char *path);
Chris Allegrettaa8c22572002-02-15 19:17:02 +0000246char *safe_tempnam(const char *dirname, const char *filename_prefix);
Chris Allegretta2d7893d2001-07-11 02:08:33 +0000247#endif
248
Rocco Corsiaf5c3022001-01-12 07:51:05 +0000249#ifndef DISABLE_BROWSER
Chris Allegrettaf4b96012001-01-03 07:11:47 +0000250char *do_browser(char *path);
Chris Allegretta150469a2001-01-05 21:13:14 +0000251struct stat filestat(const char *path);
252char *do_browse_from(char *inpath);
Chris Allegrettaf4b96012001-01-03 07:11:47 +0000253#endif
254
Chris Allegretta8ce24132001-04-30 11:28:46 +0000255#ifdef ENABLE_COLOR
256int do_colorinit(void);
257void color_on(WINDOW *win, int whatever);
258void color_off(WINDOW *win, int whatever);
259
260extern colorstruct colors[NUM_NCOLORS];
261#endif /* ENABLE_COLOR */
262
Chris Allegretta08020882001-01-29 23:37:54 +0000263RETSIGTYPE main_loop (int junk);
Chris Allegrettac08f50d2001-01-06 18:12:43 +0000264
Chris Allegrettaa2ea1932000-06-06 05:53:49 +0000265filestruct *copy_node(filestruct * src);
266filestruct *copy_filestruct(filestruct * src);
267filestruct *make_new_node(filestruct * prevnode);
Chris Allegretta8d990b52001-09-22 22:14:25 +0000268filestruct *findnextstr(int quiet, int bracket_mode, filestruct * begin,
Chris Allegretta27eb13f2000-11-05 16:52:21 +0000269 int beginx, char *needle);
Chris Allegretta2d7893d2001-07-11 02:08:33 +0000270
Chris Allegrettab3655b42001-10-22 03:15:31 +0000271#ifndef DISABLE_HELP
272void help_init(void);
273#endif