Viewing file: manexamp.c (3.22 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
/* manexamp.c -- The examples which appear in the documentation are here. */
/* Copyright (C) 1987-2009 Free Software Foundation, Inc.
This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing.
Readline is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
Readline is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with Readline. If not, see <http://www.gnu.org/licenses/>. */
#include <stdio.h> #include <readline/readline.h>
/* **************************************************************** */ /* */ /* How to Emulate gets () */ /* */ /* **************************************************************** */
/* A static variable for holding the line. */ static char *line_read = (char *)NULL;
/* Read a string, and return a pointer to it. Returns NULL on EOF. */ char * rl_gets () { /* If the buffer has already been allocated, return the memory to the free pool. */ if (line_read) { free (line_read); line_read = (char *)NULL; }
/* Get a line from the user. */ line_read = readline ("");
/* If the line has any text in it, save it on the history. */ if (line_read && *line_read) add_history (line_read);
return (line_read); }
/* **************************************************************** */ /* */ /* Writing a Function to be Called by Readline. */ /* */ /* **************************************************************** */
/* Invert the case of the COUNT following characters. */ invert_case_line (count, key) int count, key; { register int start, end;
start = rl_point;
if (count < 0) { direction = -1; count = -count; } else direction = 1; /* Find the end of the range to modify. */ end = start + (count * direction);
/* Force it to be within range. */ if (end > rl_end) end = rl_end; else if (end < 0) end = -1;
if (start > end) { int temp = start; start = end; end = temp; }
if (start == end) return;
/* Tell readline that we are modifying the line, so save the undo information. */ rl_modifying (start, end);
for (; start != end; start += direction) { if (_rl_uppercase_p (rl_line_buffer[start])) rl_line_buffer[start] = _rl_to_lower (rl_line_buffer[start]); else if (_rl_lowercase_p (rl_line_buffer[start])) rl_line_buffer[start] = _rl_to_upper (rl_line_buffer[start]); }
/* Move point to on top of the last character changed. */ rl_point = end - direction; }
|