blob: c12cfdb4d5811089721de3cdcb8060fdf5310220 [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;
David Lawrence Ramsey5db0cdc2002-06-28 22:45:14 +000048extern struct stat originalfilestat;
Chris Allegretta31925e42000-11-02 04:40:39 +000049extern char *answer;
Chris Allegrettaa2ea1932000-06-06 05:53:49 +000050extern char *hblank, *help_text;
Chris Allegretta27eb13f2000-11-05 16:52:21 +000051extern char *last_search;
52extern char *last_replace;
Chris Allegrettae1f14522001-09-19 03:19:43 +000053#ifndef DISABLE_OPERATINGDIR
54extern char *operating_dir;
Chris Allegrettaf5de33a2002-02-27 04:14:16 +000055extern char *full_operating_dir;
Chris Allegrettae1f14522001-09-19 03:19:43 +000056#endif
Chris Allegretta8d8e0122001-04-18 04:28:54 +000057#ifndef DISABLE_SPELLER
58extern char *alt_speller;
59#endif
Chris Allegrettaa2ea1932000-06-06 05:53:49 +000060extern struct stat fileinfo;
61extern filestruct *current, *fileage, *edittop, *editbot, *filebot;
62extern filestruct *cutbuffer, *mark_beginbuf;
Chris Allegretta2d7893d2001-07-11 02:08:33 +000063
Chris Allegretta355fbe52001-07-14 19:32:47 +000064#ifdef ENABLE_MULTIBUFFER
Chris Allegrettaf2387fb2002-04-10 02:31:20 +000065extern openfilestruct *open_files;
Chris Allegretta2d7893d2001-07-11 02:08:33 +000066#endif
67
Chris Allegretta08893e02001-11-29 02:42:27 +000068#ifdef ENABLE_COLOR
Chris Allegretta45329a12002-03-10 01:22:21 +000069extern colortype *colorstrings;
Chris Allegrettab6c5dc22002-05-04 03:47:33 +000070extern syntaxtype *syntaxes;
Chris Allegretta09900ff2002-05-04 04:23:30 +000071extern char *syntaxstr;
Chris Allegretta08893e02001-11-29 02:42:27 +000072#endif
73
Chris Allegrettaa2ea1932000-06-06 05:53:49 +000074extern shortcut *shortcut_list;
Chris Allegrettaa8c22572002-02-15 19:17:02 +000075extern shortcut *main_list, *whereis_list;
76extern shortcut *replace_list, *goto_list;
77extern shortcut *writefile_list, *insertfile_list;
Chris Allegretta7162e3d2002-04-06 05:02:14 +000078extern shortcut *spell_list, *replace_list_2;
79#ifndef NANO_SMALL
80extern shortcut *extcmd_list;
81#endif
Chris Allegrettaa8c22572002-02-15 19:17:02 +000082extern shortcut *help_list;
Rocco Corsiaf5c3022001-01-12 07:51:05 +000083#ifndef DISABLE_BROWSER
Chris Allegrettaa8c22572002-02-15 19:17:02 +000084extern shortcut *browser_list, *gotodir_list;
Chris Allegrettaf4b96012001-01-03 07:11:47 +000085#endif
Chris Allegretta6b58acd2001-04-12 03:01:53 +000086extern shortcut *currshortcut;
Chris Allegretta805c26d2000-09-06 13:39:17 +000087
88#ifdef HAVE_REGEX_H
Chris Allegretta9fc8d432000-07-07 01:49:52 +000089extern int use_regexp, regexp_compiled;
90extern regex_t search_regexp;
91extern regmatch_t regmatches[10];
Chris Allegretta3533a342002-03-24 23:19:32 +000092
93#ifdef ENABLE_COLOR
94extern regex_t color_regexp;
95extern regmatch_t colormatches[1];
Chris Allegrettab6c5dc22002-05-04 03:47:33 +000096
97extern regex_t syntaxfile_regexp;
98extern regmatch_t synfilematches[1];
Chris Allegretta7162e3d2002-04-06 05:02:14 +000099#endif /* ENABLE_COLOR */
Chris Allegretta805c26d2000-09-06 13:39:17 +0000100#endif
101
Chris Allegrettaa8c22572002-02-15 19:17:02 +0000102extern toggle *toggles;
Chris Allegrettaa2ea1932000-06-06 05:53:49 +0000103
104/* Programs we want available */
105
Chris Allegrettadab017e2002-04-23 10:56:06 +0000106/* public functions in global.c */
107int length_of_list(const shortcut *s);
108void shortcut_init(int unjustify);
Chris Allegretta6232d662002-05-12 19:52:15 +0000109#ifdef DEBUG
Chris Allegrettadab017e2002-04-23 10:56:06 +0000110void thanks_for_all_the_fish(void);
Chris Allegretta6232d662002-05-12 19:52:15 +0000111#endif
Chris Allegrettadab017e2002-04-23 10:56:06 +0000112
113
114
Chris Allegrettae4933a32001-06-13 02:35:44 +0000115char *revstrstr(char *haystack, char *needle, char *rev_start);
Chris Allegretta99ed9dc2002-02-28 00:57:18 +0000116char *stristr(char *haystack, char *needle);
117char *revstristr(char *haystack, char *needle, char *rev_start);
David Lawrence Ramseyc5967552002-06-21 03:20:06 +0000118char *strstrwrapper(char *haystack, char *needle, char *rev_start, int line_pos);
Chris Allegrettaa2ea1932000-06-06 05:53:49 +0000119int search_init(int replacing);
120int renumber(filestruct * fileptr);
121int free_filestruct(filestruct * src);
Chris Allegrettaf2387fb2002-04-10 02:31:20 +0000122
123#ifdef ENABLE_MULTIBUFFER
124int free_openfilestruct(openfilestruct * src);
125#endif
126
Chris Allegrettaa2ea1932000-06-06 05:53:49 +0000127int xplustabs(void);
128int do_yesno(int all, int leavecursor, char *msg, ...);
129int actual_x(filestruct * fileptr, int xplus);
Chris Allegrettad4fa0d32002-03-05 19:55:55 +0000130int strnlenpt(char *buf, int size);
Chris Allegrettaa2ea1932000-06-06 05:53:49 +0000131int strlenpt(char *buf);
Chris Allegrettaa8c22572002-02-15 19:17:02 +0000132int statusq(int allowtabs, shortcut s[], char *def, char *msg, ...);
Chris Allegrettaecc3d7f2001-06-05 23:24:55 +0000133int write_file(char *name, int tmpfile, int append, int nonamechange);
Chris Allegrettaa2ea1932000-06-06 05:53:49 +0000134int do_cut_text(void);
135int do_uncut_text(void);
136int no_help(void);
Chris Allegrettabceb1b22000-06-19 04:22:15 +0000137int renumber_all(void);
Chris Allegretta4dc03d52002-05-11 03:04:44 +0000138int open_file(const char *filename, int insert, int quiet);
Chris Allegretta2d7893d2001-07-11 02:08:33 +0000139int do_insertfile(int loading_file);
Chris Allegretta48b06702002-02-22 04:30:50 +0000140int num_of_digits(int n);
Chris Allegretta77777d42002-03-29 16:31:29 +0000141int open_pipe(char *command);
Chris Allegretta4dc03d52002-05-11 03:04:44 +0000142int read_file(FILE *f, const char *filename, int quiet);
Chris Allegretta2d7893d2001-07-11 02:08:33 +0000143
Chris Allegretta355fbe52001-07-14 19:32:47 +0000144#ifdef ENABLE_MULTIBUFFER
Chris Allegretta48b06702002-02-22 04:30:50 +0000145int add_open_file(int update);
Chris Allegretta2d7893d2001-07-11 02:08:33 +0000146#endif
147
Chris Allegrettae1f14522001-09-19 03:19:43 +0000148#ifndef DISABLE_OPERATINGDIR
149int check_operating_dir(char *currpath, int allow_tabcomp);
150#endif
151
Chris Allegretta6232d662002-05-12 19:52:15 +0000152#ifndef NANO_SMALL
153int do_next_word_void(void);
154int do_prev_word_void(void);
155#endif /* !NANO_SMALL */
156
Chris Allegrettacc197ef2001-05-29 04:21:44 +0000157int do_writeout(char *path, int exiting, int append);
Chris Allegretta2084acc2001-11-29 03:43:08 +0000158int do_gotoline(int line, int save_pos);
Chris Allegretta1bc0c7e2002-01-08 15:00:24 +0000159int is_whole_word(int curr_pos, filestruct *fileptr, char *searchword);
Chris Allegretta27eb13f2000-11-05 16:52:21 +0000160int do_replace_loop(char *prevanswer, filestruct *begin, int *beginx,
161 int wholewords, int *i);
Chris Allegretta8d990b52001-09-22 22:14:25 +0000162int do_find_bracket(void);
Chris Allegrettae1f14522001-09-19 03:19:43 +0000163
Chris Allegretta1b3381b2001-09-28 21:59:01 +0000164#if defined (ENABLE_MULTIBUFFER) || !defined (DISABLE_SPELLER)
Chris Allegretta2084acc2001-11-29 03:43:08 +0000165void do_gotopos(int line, int pos_x, int pos_y, int pos_placewewant);
Chris Allegrettae1f14522001-09-19 03:19:43 +0000166#endif
167
Chris Allegrettabceb1b22000-06-19 04:22:15 +0000168/* Now in move.c */
169int do_up(void);
170int do_down(void);
171int do_left(void);
172int do_right(void);
Chris Allegretta04d848e2000-11-05 17:54:41 +0000173int check_wildcard_match(const char *text, const char *pattern);
Chris Allegrettabe77c612000-11-24 14:00:16 +0000174
David Lawrence Ramseyf21cd102002-06-13 00:40:19 +0000175char *input_tab(char *buf, int place, int *lastwastab, int *newplace, int *list);
Chris Allegrettabe77c612000-11-24 14:00:16 +0000176char *real_dir_from_tilde(char *buf);
Chris Allegrettaa2ea1932000-06-06 05:53:49 +0000177
Chris Allegretta0bb70dc2001-12-17 04:34:23 +0000178void signal_init(void);
David Lawrence Ramseyf21cd102002-06-13 00:40:19 +0000179void unsunder(char *str, int true_len);
180void sunder(char *str);
Chris Allegrettaa2ea1932000-06-06 05:53:49 +0000181void lowercase(char *src);
182void blank_bottombars(void);
Chris Allegretta7162e3d2002-04-06 05:02:14 +0000183void check_wrap(filestruct * inptr);
Chris Allegrettaa2ea1932000-06-06 05:53:49 +0000184void dump_buffer(filestruct * inptr);
185void align(char **strp);
Chris Allegrettaf1d33d32000-08-19 03:53:39 +0000186void edit_refresh(void), edit_refresh_clearok(void);
Chris Allegretta2d7893d2001-07-11 02:08:33 +0000187void edit_update(filestruct * fileptr, int topmidbotnone);
Chris Allegrettaa2ea1932000-06-06 05:53:49 +0000188void update_cursor(void);
189void delete_node(filestruct * fileptr);
Chris Allegrettaf2387fb2002-04-10 02:31:20 +0000190
191#ifdef ENABLE_MULTIBUFFER
192void delete_opennode(openfilestruct * fileptr);
193#endif
194
Chris Allegrettaa2ea1932000-06-06 05:53:49 +0000195void set_modified(void);
196void dump_buffer_reverse(filestruct * inptr);
197void reset_cursor(void);
198void check_statblank(void);
199void update_line(filestruct * fileptr, int index);
Robert Siemborskidd53ec22000-07-04 02:35:19 +0000200void fix_editbot(void);
Chris Allegrettaa2ea1932000-06-06 05:53:49 +0000201void statusbar(char *msg, ...);
Chris Allegrettaf4b96012001-01-03 07:11:47 +0000202void blank_statusbar(void);
203void titlebar(char *path);
Chris Allegrettaa2ea1932000-06-06 05:53:49 +0000204void previous_line(void);
205void center_cursor(void);
Chris Allegretta6232d662002-05-12 19:52:15 +0000206void bottombars(const shortcut *s);
Chris Allegrettaa2ea1932000-06-06 05:53:49 +0000207void blank_statusbar_refresh(void);
Chris Allegretta77777d42002-03-29 16:31:29 +0000208void nperror(const char *s);
Chris Allegretta150469a2001-01-05 21:13:14 +0000209void *mallocstrcpy(char *dest, char *src);
Chris Allegrettaa2ea1932000-06-06 05:53:49 +0000210void wrap_reset(void);
211void display_main_list(void);
212void nano_small_msg(void);
Chris Allegretta3bc8c722000-12-10 17:03:25 +0000213void nano_disable_msg(void);
Chris Allegrettabceb1b22000-06-19 04:22:15 +0000214void do_early_abort(void);
215void *nmalloc(size_t howmuch);
216void *nrealloc(void *ptr, size_t howmuch);
217void die(char *msg, ...);
Chris Allegretta2d7893d2001-07-11 02:08:33 +0000218void die_save_file(char *die_filename);
Chris Allegrettabceb1b22000-06-19 04:22:15 +0000219void new_file(void);
Robert Siemborski63b3d7e2000-07-04 22:15:39 +0000220void new_magicline(void);
Chris Allegrettae3167732001-03-18 16:59:34 +0000221void splice_node(filestruct *begin, filestruct *newnode, filestruct *end);
Chris Allegrettaf2387fb2002-04-10 02:31:20 +0000222
223#ifdef ENABLE_MULTIBUFFER
224void splice_opennode(openfilestruct *begin, openfilestruct *newnode, openfilestruct *end);
225#endif
226
Chris Allegrettafa0c6962001-10-22 23:22:19 +0000227void null_at(char **data, int index);
Chris Allegretta3e3ae942001-09-22 19:02:04 +0000228void page_up(void);
Chris Allegretta04d848e2000-11-05 17:54:41 +0000229void blank_edit(void);
Chris Allegretta27eb13f2000-11-05 16:52:21 +0000230void search_init_globals(void);
231void replace_abort(void);
Chris Allegretta9149e612000-11-27 00:23:41 +0000232void add_to_cutbuffer(filestruct * inptr);
Chris Allegrettad00e6df2000-11-29 04:33:26 +0000233void do_replace_highlight(int highlight_flag, char *word);
Chris Allegretta65121632000-12-18 07:05:27 +0000234void nano_disabled_msg(void);
Chris Allegretta70444892001-01-07 23:02:02 +0000235void window_init(void);
Chris Allegretta6b58acd2001-04-12 03:01:53 +0000236void do_mouse(void);
Chris Allegretta5050aa62001-04-22 07:10:21 +0000237void print_view_warning(void);
Chris Allegretta2d7893d2001-07-11 02:08:33 +0000238void unlink_node(filestruct * fileptr);
Chris Allegrettaf2387fb2002-04-10 02:31:20 +0000239
240#ifdef ENABLE_MULTIBUFFER
241void unlink_opennode(openfilestruct * fileptr);
242#endif
243
Chris Allegrettacc197ef2001-05-29 04:21:44 +0000244void cut_marked_segment(filestruct * top, int top_x, filestruct * bot,
245 int bot_x, int destructive);
Chris Allegretta8d8e0122001-04-18 04:28:54 +0000246
Chris Allegretta7a500092001-04-19 21:13:46 +0000247#ifdef ENABLE_NANORC
Chris Allegretta8d8e0122001-04-18 04:28:54 +0000248void do_rcfile(void);
249#endif
250
Chris Allegretta8a0de3b2000-11-24 20:45:14 +0000251#ifdef NANO_EXTRA
Chris Allegretta34318ed2001-01-31 23:22:36 +0000252void do_credits(void);
Chris Allegretta8a0de3b2000-11-24 20:45:14 +0000253#endif
Chris Allegrettaa2ea1932000-06-06 05:53:49 +0000254
255int do_writeout_void(void), do_exit(void), do_gotoline_void(void);
Chris Allegretta2d7893d2001-07-11 02:08:33 +0000256int do_insertfile_void(void), do_search(void);
257
Chris Allegretta355fbe52001-07-14 19:32:47 +0000258#ifdef ENABLE_MULTIBUFFER
Chris Allegretta2d7893d2001-07-11 02:08:33 +0000259int load_open_file(void), close_open_file(void);
260#endif
261
Chris Allegretta3e3ae942001-09-22 19:02:04 +0000262int do_page_up(void), do_page_down(void);
Chris Allegretta2084acc2001-11-29 03:43:08 +0000263int do_cursorpos(int constant), do_cursorpos_void(void), do_spell(void);
Chris Allegrettaa2ea1932000-06-06 05:53:49 +0000264int do_home(void), do_end(void), total_refresh(void), do_mark(void);
265int do_delete(void), do_backspace(void), do_tab(void), do_justify(void);
266int do_first_line(void), do_last_line(void);
267int do_replace(void), do_help(void), do_enter_void(void);
Chris Allegrettae3167732001-03-18 16:59:34 +0000268int keypad_on(WINDOW * win, int newval);
Chris Allegrettaa2ea1932000-06-06 05:53:49 +0000269
Chris Allegretta355fbe52001-07-14 19:32:47 +0000270#ifdef ENABLE_MULTIBUFFER
Chris Allegretta2d7893d2001-07-11 02:08:33 +0000271int open_prevfile(int closing_file), open_nextfile(int closing_file);
Chris Allegrettaa8c22572002-02-15 19:17:02 +0000272int open_prevfile_void(void), open_nextfile_void(void);
Chris Allegretta2d7893d2001-07-11 02:08:33 +0000273#endif
274
Chris Allegretta88b09152001-05-17 11:35:43 +0000275char *charalloc (size_t howmuch);
Chris Allegretta7162e3d2002-04-06 05:02:14 +0000276char *get_next_filename(const char *name);
Chris Allegretta88b09152001-05-17 11:35:43 +0000277
Chris Allegrettafd0fe7e2002-03-04 16:30:17 +0000278#if !defined (DISABLE_SPELLER) || !defined (DISABLE_OPERATINGDIR)
Chris Allegrettaa8c22572002-02-15 19:17:02 +0000279char *get_full_path(const char *origpath);
280#endif
281
282#ifndef DISABLE_SPELLER
Chris Allegrettabc72e362002-02-16 20:03:44 +0000283char *check_writable_directory(const char *path);
Chris Allegrettaa8c22572002-02-15 19:17:02 +0000284char *safe_tempnam(const char *dirname, const char *filename_prefix);
Chris Allegretta2d7893d2001-07-11 02:08:33 +0000285#endif
286
Rocco Corsiaf5c3022001-01-12 07:51:05 +0000287#ifndef DISABLE_BROWSER
Chris Allegrettaf4b96012001-01-03 07:11:47 +0000288char *do_browser(char *path);
Chris Allegretta150469a2001-01-05 21:13:14 +0000289struct stat filestat(const char *path);
290char *do_browse_from(char *inpath);
Chris Allegrettaf4b96012001-01-03 07:11:47 +0000291#endif
292
Chris Allegretta8ce24132001-04-30 11:28:46 +0000293#ifdef ENABLE_COLOR
294int do_colorinit(void);
295void color_on(WINDOW *win, int whatever);
296void color_off(WINDOW *win, int whatever);
Chris Allegrettab6c5dc22002-05-04 03:47:33 +0000297void update_color(void);
Chris Allegretta8ce24132001-04-30 11:28:46 +0000298
299extern colorstruct colors[NUM_NCOLORS];
300#endif /* ENABLE_COLOR */
301
Chris Allegretta08020882001-01-29 23:37:54 +0000302RETSIGTYPE main_loop (int junk);
Chris Allegrettac08f50d2001-01-06 18:12:43 +0000303
Chris Allegrettaa2ea1932000-06-06 05:53:49 +0000304filestruct *copy_node(filestruct * src);
305filestruct *copy_filestruct(filestruct * src);
306filestruct *make_new_node(filestruct * prevnode);
Chris Allegrettaf2387fb2002-04-10 02:31:20 +0000307
308#ifdef ENABLE_MULTIBUFFER
309openfilestruct *make_new_opennode(openfilestruct * prevnode);
310#endif
311
Chris Allegretta8d990b52001-09-22 22:14:25 +0000312filestruct *findnextstr(int quiet, int bracket_mode, filestruct * begin,
Chris Allegretta27eb13f2000-11-05 16:52:21 +0000313 int beginx, char *needle);
Chris Allegretta2d7893d2001-07-11 02:08:33 +0000314
Chris Allegrettab3655b42001-10-22 03:15:31 +0000315#ifndef DISABLE_HELP
316void help_init(void);
317#endif