per DB's patch, convert nano.c to use bools wherever needed, add a few

efficiency tweaks, and fix a few minor bugs in help_init() where "Up"
and "Space" might not be displayed properly and the help browser
wouldn't work if fewer than 24 columns were available


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1885 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
master
David Lawrence Ramsey 2004-08-05 22:10:22 +00:00
parent 73cd1a5ded
commit ce62e82a93
3 changed files with 90 additions and 85 deletions

View File

@ -1,8 +1,8 @@
CVS code -
- General:
- More minor comment cleanups. (DLR)
- Convert more ints using 0 and 1 to bools using TRUE and FALSE.
(David Benbennick and DLR)
- Convert more ints and functions using 0 and 1 to bools using
TRUE and FALSE. (David Benbennick and DLR)
- Change more instances of ints that have large enough upper
bounds and which can never be negative to size_t's, and
convert nano to handle them properly. (DLR)
@ -102,6 +102,11 @@ CVS code -
thanks_for_all_the_fish()
- Delete topwin, edit, and bottomwin. (David Benbennick)
- nano.c:
help_init()
- Fix the display of the translated key descriptions "Up" and
"Space" under all circumstances, and make the help browser
work properly when there are fewer than 24 columns available.
(David Benbennick)
usage()
- Don't translate the option strings for -Z/--restricted.
(David Benbennick)

View File

@ -61,7 +61,7 @@ static ssize_t fill = 0; /* Fill - where to wrap lines,
basically */
#endif
#ifndef DISABLE_WRAPPING
static int same_line_wrap = FALSE; /* Whether wrapped text should
static bool same_line_wrap = FALSE; /* Whether wrapped text should
be prepended to the next
line */
#endif
@ -159,7 +159,7 @@ void die(const char *msg, ...)
void die_save_file(const char *die_filename)
{
char *ret;
int i = -1;
bool failed = TRUE;
/* If we're using restricted mode, don't write any emergency backup
* files, since that would allow reading from or writing to files
@ -180,9 +180,9 @@ void die_save_file(const char *die_filename)
free(buf);
}
if (ret[0] != '\0')
i = write_file(ret, TRUE, FALSE, TRUE);
failed = -1 == write_file(ret, TRUE, FALSE, TRUE);
if (i != -1)
if (!failed)
fprintf(stderr, _("\nBuffer written to %s\n"), ret);
else
fprintf(stderr, _("\nNo %s written (too many backup files?)\n"), ret);
@ -203,8 +203,8 @@ void print_view_warning(void)
}
/* Initialize global variables -- no better way for now. If
* save_cutbuffer is nonzero, don't set cutbuffer to NULL. */
void global_init(int save_cutbuffer)
* save_cutbuffer is TRUE, don't set cutbuffer to NULL. */
void global_init(bool save_cutbuffer)
{
current_x = 0;
current_y = 0;
@ -393,12 +393,12 @@ void help_init(void)
/* The space needed for the shortcut lists, at most COLS characters,
* plus '\n'. */
allocsize += (COLS + 1) * length_of_list(currshortcut);
allocsize += (COLS < 21 ? 21 : COLS + 1) * length_of_list(currshortcut);
#ifndef NANO_SMALL
/* If we're on the main list, we also count the toggle help text.
* Each line has "M-%c\t\t\t", which fills 24 columns, plus at most
* COLS - 24 characters, plus '\n'.*/
* Each line has "M-%c\t\t\t", which fills 24 columns, plus a space,
* plus translated text, plus '\n'. */
if (currshortcut == main_list) {
size_t endislen = strlen(_("enable/disable"));
@ -420,18 +420,18 @@ void help_init(void)
/* Now add our shortcut info. */
for (s = currshortcut; s != NULL; s = s->next) {
int meta_shortcut = FALSE;
bool meta_shortcut = FALSE;
/* TRUE if the character in s->metaval is shown in the
* first column. */
if (s->ctrlval != NANO_NO_KEY) {
#ifndef NANO_SMALL
if (s->ctrlval == NANO_HISTORY_KEY)
ptr += sprintf(ptr, "%.2s", _("Up"));
ptr += sprintf(ptr, "%.7s", _("Up"));
else
#endif
if (s->ctrlval == NANO_CONTROL_SPACE)
ptr += sprintf(ptr, "^%.5s", _("Space"));
ptr += sprintf(ptr, "^%.6s", _("Space"));
else if (s->ctrlval == NANO_CONTROL_8)
ptr += sprintf(ptr, "^?");
else
@ -441,7 +441,7 @@ void help_init(void)
else if (s->metaval != NANO_NO_KEY) {
meta_shortcut = TRUE;
if (s->metaval == NANO_ALT_SPACE)
ptr += snprintf(ptr, 8, "M-%.5s", _("Space"));
ptr += sprintf(ptr, "M-%.5s", _("Space"));
else
ptr += sprintf(ptr, "M-%c", toupper(s->metaval));
}
@ -794,26 +794,26 @@ RETSIGTYPE cancel_fork(int signal)
nperror("kill");
}
int open_pipe(const char *command)
/* Return TRUE on success. */
bool open_pipe(const char *command)
{
int fd[2];
FILE *f;
struct sigaction oldaction, newaction;
/* Original and temporary handlers for
* SIGINT. */
int cancel_sigs = 0;
/* cancel_sigs == 1 means that sigaction() failed without changing
* the signal handlers. cancel_sigs == 2 means the signal handler
* was changed, but the tcsetattr() didn't succeed.
bool sig_failed = FALSE;
/* sig_failed means that sigaction() failed without changing the
* signal handlers.
*
* I use this variable since it is important to put things back when
* we finish, even if we get errors. */
* We use this variable since it is important to put things back
* when we finish, even if we get errors. */
/* Make our pipes. */
if (pipe(fd) == -1) {
statusbar(_("Could not pipe"));
return 1;
return FALSE;
}
/* Fork a child. */
@ -823,7 +823,7 @@ int open_pipe(const char *command)
dup2(fd[1], fileno(stdout));
dup2(fd[1], fileno(stderr));
/* If execl() returns at all, there was an error. */
execl("/bin/sh", "sh", "-c", command, 0);
exit(0);
}
@ -835,7 +835,7 @@ int open_pipe(const char *command)
if (pid == -1) {
close(fd[0]);
statusbar(_("Could not fork"));
return 1;
return FALSE;
}
/* Before we start reading the forked command's output, we set
@ -846,12 +846,12 @@ int open_pipe(const char *command)
enable_signals();
if (sigaction(SIGINT, NULL, &newaction) == -1) {
cancel_sigs = 1;
sig_failed = TRUE;
nperror("sigaction");
} else {
newaction.sa_handler = cancel_fork;
if (sigaction(SIGINT, &newaction, &oldaction) == -1) {
cancel_sigs = 1;
sig_failed = TRUE;
nperror("sigaction");
}
}
@ -860,9 +860,9 @@ int open_pipe(const char *command)
f = fdopen(fd[0], "rb");
if (f == NULL)
nperror("fdopen");
nperror("fdopen");
read_file(f, "stdin", 0);
read_file(f, "stdin", FALSE);
/* If multibuffer mode is on, we could be here in view mode. If so,
* don't set the modification flag. */
if (!ISSET(VIEW_MODE))
@ -871,14 +871,14 @@ int open_pipe(const char *command)
if (wait(NULL) == -1)
nperror("wait");
if (cancel_sigs != 1 && sigaction(SIGINT, &oldaction, NULL) == -1)
if (!sig_failed && sigaction(SIGINT, &oldaction, NULL) == -1)
nperror("sigaction");
/* Disable interpretation of the special control keys so that we can
* use Ctrl-C for other things. */
disable_signals();
return 0;
return TRUE;
}
#endif /* !NANO_SMALL */
@ -891,7 +891,7 @@ void do_mouse(void)
/* Click in the edit window to move the cursor, but only when
we're not in a subfunction. */
if (wenclose(edit, mouse_y, mouse_x) && currshortcut == main_list) {
int sameline;
bool sameline;
/* Did they click on the line with the cursor? If they
clicked on the cursor, we set the mark. */
size_t xcur;
@ -938,7 +938,7 @@ void do_char(char ch)
{
size_t current_len = strlen(current->data);
#if !defined(DISABLE_WRAPPING) || defined(ENABLE_COLOR)
int do_refresh = FALSE;
bool do_refresh = FALSE;
/* Do we have to call edit_refresh(), or can we get away with
* update_line()? */
#endif
@ -1026,7 +1026,7 @@ void do_backspace(void)
void do_delete(void)
{
int do_refresh = FALSE;
bool do_refresh = FALSE;
/* Do we have to call edit_refresh(), or can we get away with
* update_line()? */
@ -1248,7 +1248,7 @@ void wrap_reset(void)
/* We wrap the given line. Precondition: we assume the cursor has been
* moved forward since the last typed character. Return value: whether
* we wrapped. */
int do_wrap(filestruct *inptr)
bool do_wrap(filestruct *inptr)
{
size_t len = strlen(inptr->data);
/* Length of the line we wrap. */
@ -1264,7 +1264,7 @@ int do_wrap(filestruct *inptr)
#endif
const char *after_break; /* Text after the wrap point. */
size_t after_break_len; /* strlen(after_break) */
int wrapping = FALSE; /* Do we prepend to the next line? */
bool wrapping = FALSE; /* Do we prepend to the next line? */
const char *wrap_line = NULL;
/* The next line, minus indentation. */
size_t wrap_line_len = 0; /* strlen(wrap_line) */
@ -1447,8 +1447,8 @@ int do_wrap(filestruct *inptr)
#ifndef DISABLE_SPELLER
/* A word is misspelled in the file. Let the user replace it. We
* return zero if the user cancels. */
int do_int_spell_fix(const char *word)
* return FALSE if the user cancels. */
bool do_int_spell_fix(const char *word)
{
char *save_search;
char *save_replace;
@ -1456,12 +1456,12 @@ int do_int_spell_fix(const char *word)
filestruct *current_save = current;
filestruct *edittop_save = edittop;
/* Save where we are. */
int i = 0;
bool accepted = TRUE;
/* The return value. */
int reverse_search_set = ISSET(REVERSE_SEARCH);
bool reverse_search_set = ISSET(REVERSE_SEARCH);
#ifndef NANO_SMALL
int case_sens_set = ISSET(CASE_SENSITIVE);
int mark_set = ISSET(MARK_ISSET);
bool case_sens_set = ISSET(CASE_SENSITIVE);
bool mark_set = ISSET(MARK_ISSET);
SET(CASE_SENSITIVE);
/* Make sure the marking highlight is off during spell-check. */
@ -1493,7 +1493,7 @@ int do_int_spell_fix(const char *word)
do_replace_highlight(TRUE, word);
/* Allow the replace word to be corrected. */
i = statusq(FALSE, spell_list, word,
accepted = -1 != statusq(FALSE, spell_list, word,
#ifndef NANO_SMALL
NULL,
#endif
@ -1501,7 +1501,7 @@ int do_int_spell_fix(const char *word)
do_replace_highlight(FALSE, word);
if (i != -1 && strcmp(word, answer) != 0) {
if (accepted && strcmp(word, answer) != 0) {
search_last_line = FALSE;
current_x--;
do_replace_loop(word, current_save, &current_x_save, TRUE);
@ -1534,12 +1534,12 @@ int do_int_spell_fix(const char *word)
SET(MARK_ISSET);
#endif
return i != -1;
return accepted;
}
/* Integrated spell checking using 'spell' program. Return value: NULL
* for normal termination, otherwise the error string. */
const char *do_int_speller(char *tempfile_name)
const char *do_int_speller(const char *tempfile_name)
{
char *read_buff, *read_buff_ptr, *read_buff_word;
size_t pipe_buff_size, read_buff_size, read_buff_read, bytesread;
@ -1735,7 +1735,7 @@ const char *do_alt_speller(char *tempfile_name)
static int arglen = 3;
static char **spellargs = (char **)NULL;
#ifndef NANO_SMALL
int mark_set = ISSET(MARK_ISSET);
bool mark_set = ISSET(MARK_ISSET);
int mbb_lineno_cur = 0;
/* We're going to close the current file, and open the output of
* the alternate spell command. The line that mark_beginbuf
@ -1791,23 +1791,22 @@ const char *do_alt_speller(char *tempfile_name)
}
refresh();
#ifndef NANO_SMALL
if (!mark_set) {
/* Only reload the temp file if it isn't a marked selection. */
#endif
free_filestruct(fileage);
terminal_init();
global_init(TRUE);
open_file(tempfile_name, FALSE, TRUE);
#ifndef NANO_SMALL
}
#ifndef NANO_SMALL
if (mark_set) {
do_gotopos(mbb_lineno_cur, mark_beginx, y_cur, 0);
mark_beginbuf = current;
/* In case the line got shorter, assign mark_beginx. */
mark_beginx = current_x;
SET(MARK_ISSET);
} else {
#endif
/* Only reload the temp file if it isn't a marked selection. */
free_filestruct(fileage);
terminal_init();
global_init(TRUE);
open_file(tempfile_name, FALSE, TRUE);
#ifndef NANO_SMALL
}
#endif
@ -1856,11 +1855,10 @@ void do_spell(void)
unlink(temp);
free(temp);
if (spell_msg != NULL) {
if (spell_msg != NULL)
statusbar(_("Spell checking failed: %s: %s"), spell_msg,
strerror(errno));
return;
} else
else
statusbar(_("Finished checking spelling"));
}
#endif /* !DISABLE_SPELLER */
@ -1904,7 +1902,7 @@ void justify_format(filestruct *line, size_t skip)
back = line->data + skip;
for (front = back; ; front++) {
int remove_space = FALSE;
bool remove_space = FALSE;
/* Do we want to remove this space? */
if (*front == '\t')
@ -1987,7 +1985,8 @@ size_t quote_length(const char *line)
/* a_line and b_line are lines of text. The quotation part of a_line is
* the first a_quote characters. Check that the quotation part of
* b_line is the same. */
int quotes_match(const char *a_line, size_t a_quote, const char *b_line)
bool quotes_match(const char *a_line, size_t a_quote, const char
*b_line)
{
/* Here is the assumption about a_quote: */
assert(a_quote == quote_length(a_line));
@ -1997,7 +1996,7 @@ int quotes_match(const char *a_line, size_t a_quote, const char *b_line)
/* We assume a_line and b_line have no quote part. Then, we return
* whether b_line could follow a_line in a paragraph. */
size_t indents_match(const char *a_line, size_t a_indent, const char
bool indents_match(const char *a_line, size_t a_indent, const char
*b_line, size_t b_indent)
{
assert(a_indent == indent_length(a_line));
@ -2153,13 +2152,13 @@ filestruct *backup_lines(filestruct *first_line, size_t par_len, size_t
}
/* Is it possible to break line at or before goal? */
int breakable(const char *line, int goal)
bool breakable(const char *line, int goal)
{
for (; *line != '\0' && goal >= 0; line++) {
if (isblank(*line))
return TRUE;
if (is_cntrl_char(*line) != 0)
if (is_cntrl_char(*line))
goal -= 2;
else
goal -= 1;
@ -2171,10 +2170,10 @@ int breakable(const char *line, int goal)
/* We are trying to break a chunk off line. We find the last space such
* that the display length to there is at most goal + 1. If there is no
* such space, and force is not 0, then we find the first space.
* Anyway, we then take the last space in that group of spaces. The
* terminating '\0' counts as a space. */
int break_line(const char *line, int goal, int force)
* such space, and force is TRUE, then we find the first space. Anyway,
* we then take the last space in that group of spaces. The terminating
* '\0' counts as a space. */
int break_line(const char *line, int goal, bool force)
{
/* Note that we use int instead of size_t, since goal is at most
* COLS, the screen width, which will always be reasonably small. */
@ -2333,7 +2332,7 @@ bool do_para_search(size_t *const quote, size_t *const par)
/* If full_justify is TRUE, justify the entire file. Otherwise, justify
* the current paragraph. */
void do_justify(int full_justify)
void do_justify(bool full_justify)
{
filestruct *first_par_line = NULL;
/* Will be the first line of the resulting justified paragraph.
@ -2881,7 +2880,7 @@ void handle_sigwinch(int s)
siglongjmp(jmpbuf, 1);
}
void allow_pending_sigwinch(int allow)
void allow_pending_sigwinch(bool allow)
{
sigset_t winch;
sigemptyset(&winch);
@ -2896,7 +2895,7 @@ void allow_pending_sigwinch(int allow)
#ifndef NANO_SMALL
void do_toggle(const toggle *which)
{
int enabled;
bool enabled;
/* Even easier! */
TOGGLE(which->flag);
@ -3006,9 +3005,9 @@ int main(int argc, char *argv[])
{
int optchr;
int startline = 0; /* Line to try and start at */
int fill_flag_used = FALSE; /* Was the fill option used? */
bool fill_flag_used = FALSE; /* Was the fill option used? */
const shortcut *s;
int keyhandled = FALSE; /* Have we handled the keystroke yet? */
bool keyhandled = FALSE; /* Have we handled the keystroke yet? */
int kbinput; /* Input from keyboard */
int meta_key;

View File

@ -265,7 +265,7 @@ void die(const char *msg, ...);
void die_save_file(const char *die_filename);
void die_too_small(void);
void print_view_warning(void);
void global_init(int save_cutbuffer);
void global_init(bool save_cutbuffer);
void window_init(void);
#ifndef DISABLE_MOUSE
void mouse_init(void);
@ -291,7 +291,7 @@ int no_help(void);
void nano_disabled_msg(void);
#ifndef NANO_SMALL
RETSIGTYPE cancel_fork(int signal);
int open_pipe(const char *command);
bool open_pipe(const char *command);
#endif
#ifndef DISABLE_MOUSE
void do_mouse(void);
@ -309,11 +309,11 @@ void do_mark(void);
#endif
#ifndef DISABLE_WRAPPING
void wrap_reset(void);
int do_wrap(filestruct *inptr);
bool do_wrap(filestruct *inptr);
#endif
#ifndef DISABLE_SPELLER
int do_int_spell_fix(const char *word);
const char *do_int_speller(char *tempfile_name);
bool do_int_spell_fix(const char *word);
const char *do_int_speller(const char *tempfile_name);
const char *do_alt_speller(char *tempfile_name);
void do_spell(void);
#endif
@ -323,8 +323,9 @@ size_t indent_length(const char *line);
#ifndef DISABLE_JUSTIFY
void justify_format(filestruct *line, size_t skip);
size_t quote_length(const char *line);
int quotes_match(const char *a_line, size_t a_quote, const char *b_line);
size_t indents_match(const char *a_line, size_t a_indent, const char
bool quotes_match(const char *a_line, size_t a_quote, const char
*b_line);
bool indents_match(const char *a_line, size_t a_indent, const char
*b_line, size_t b_indent);
bool begpar(const filestruct *const foo);
void do_para_begin(void);
@ -332,10 +333,10 @@ bool inpar(const char *str);
void do_para_end(void);
filestruct *backup_lines(filestruct *first_line, size_t par_len, size_t
quote_len);
int breakable(const char *line, int goal);
int break_line(const char *line, int goal, int force);
bool breakable(const char *line, int goal);
int break_line(const char *line, int goal, bool force);
bool do_para_search(size_t *const quote, size_t *const par);
void do_justify(int full_justify);
void do_justify(bool full_justify);
void do_justify_void(void);
void do_full_justify(void);
#endif /* !DISABLE_JUSTIFY */
@ -346,7 +347,7 @@ RETSIGTYPE do_suspend(int signal);
RETSIGTYPE do_cont(int signal);
#ifndef NANO_SMALL
void handle_sigwinch(int s);
void allow_pending_sigwinch(int allow);
void allow_pending_sigwinch(bool allow);
#endif
#ifndef NANO_SMALL
void do_toggle(const toggle *which);