Annotation of embedaddon/readline/examples/manexamp.c, revision 1.1
1.1 ! misho 1: /* manexamp.c -- The examples which appear in the documentation are here. */
! 2:
! 3: /* Copyright (C) 1987-2009 Free Software Foundation, Inc.
! 4:
! 5: This file is part of the GNU Readline Library (Readline), a library for
! 6: reading lines of text with interactive input and history editing.
! 7:
! 8: Readline is free software: you can redistribute it and/or modify
! 9: it under the terms of the GNU General Public License as published by
! 10: the Free Software Foundation, either version 3 of the License, or
! 11: (at your option) any later version.
! 12:
! 13: Readline is distributed in the hope that it will be useful,
! 14: but WITHOUT ANY WARRANTY; without even the implied warranty of
! 15: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
! 16: GNU General Public License for more details.
! 17:
! 18: You should have received a copy of the GNU General Public License
! 19: along with Readline. If not, see <http://www.gnu.org/licenses/>.
! 20: */
! 21:
! 22: #include <stdio.h>
! 23: #include <readline/readline.h>
! 24:
! 25: /* **************************************************************** */
! 26: /* */
! 27: /* How to Emulate gets () */
! 28: /* */
! 29: /* **************************************************************** */
! 30:
! 31: /* A static variable for holding the line. */
! 32: static char *line_read = (char *)NULL;
! 33:
! 34: /* Read a string, and return a pointer to it. Returns NULL on EOF. */
! 35: char *
! 36: rl_gets ()
! 37: {
! 38: /* If the buffer has already been allocated, return the memory
! 39: to the free pool. */
! 40: if (line_read)
! 41: {
! 42: free (line_read);
! 43: line_read = (char *)NULL;
! 44: }
! 45:
! 46: /* Get a line from the user. */
! 47: line_read = readline ("");
! 48:
! 49: /* If the line has any text in it, save it on the history. */
! 50: if (line_read && *line_read)
! 51: add_history (line_read);
! 52:
! 53: return (line_read);
! 54: }
! 55:
! 56: /* **************************************************************** */
! 57: /* */
! 58: /* Writing a Function to be Called by Readline. */
! 59: /* */
! 60: /* **************************************************************** */
! 61:
! 62: /* Invert the case of the COUNT following characters. */
! 63: invert_case_line (count, key)
! 64: int count, key;
! 65: {
! 66: register int start, end;
! 67:
! 68: start = rl_point;
! 69:
! 70: if (count < 0)
! 71: {
! 72: direction = -1;
! 73: count = -count;
! 74: }
! 75: else
! 76: direction = 1;
! 77:
! 78: /* Find the end of the range to modify. */
! 79: end = start + (count * direction);
! 80:
! 81: /* Force it to be within range. */
! 82: if (end > rl_end)
! 83: end = rl_end;
! 84: else if (end < 0)
! 85: end = -1;
! 86:
! 87: if (start > end)
! 88: {
! 89: int temp = start;
! 90: start = end;
! 91: end = temp;
! 92: }
! 93:
! 94: if (start == end)
! 95: return;
! 96:
! 97: /* Tell readline that we are modifying the line, so save the undo
! 98: information. */
! 99: rl_modifying (start, end);
! 100:
! 101: for (; start != end; start += direction)
! 102: {
! 103: if (_rl_uppercase_p (rl_line_buffer[start]))
! 104: rl_line_buffer[start] = _rl_to_lower (rl_line_buffer[start]);
! 105: else if (_rl_lowercase_p (rl_line_buffer[start]))
! 106: rl_line_buffer[start] = _rl_to_upper (rl_line_buffer[start]);
! 107: }
! 108:
! 109: /* Move point to on top of the last character changed. */
! 110: rl_point = end - direction;
! 111: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>