]> git.ipfire.org Git - thirdparty/bash.git/blame - lib/readline/examples/manexamp.c
Imported from ../bash-2.05.tar.gz.
[thirdparty/bash.git] / lib / readline / examples / manexamp.c
CommitLineData
726f6388
JA
1/* manexamp.c -- The examples which appear in the documentation are here. */
2
3#include <stdio.h>
4#include <readline/readline.h>
5
726f6388
JA
6/* **************************************************************** */
7/* */
28ef6c31 8/* How to Emulate gets () */
726f6388
JA
9/* */
10/* **************************************************************** */
11
12/* A static variable for holding the line. */
13static char *line_read = (char *)NULL;
14
15/* Read a string, and return a pointer to it. Returns NULL on EOF. */
16char *
17rl_gets ()
18{
19 /* If the buffer has already been allocated, return the memory
20 to the free pool. */
21 if (line_read)
22 {
23 free (line_read);
24 line_read = (char *)NULL;
25 }
26
27 /* Get a line from the user. */
28 line_read = readline ("");
29
30 /* If the line has any text in it, save it on the history. */
31 if (line_read && *line_read)
32 add_history (line_read);
33
34 return (line_read);
35}
36
37/* **************************************************************** */
38/* */
39/* Writing a Function to be Called by Readline. */
40/* */
41/* **************************************************************** */
42
43/* Invert the case of the COUNT following characters. */
44invert_case_line (count, key)
45 int count, key;
46{
47 register int start, end;
48
49 start = rl_point;
50
51 if (count < 0)
52 {
53 direction = -1;
54 count = -count;
55 }
56 else
57 direction = 1;
58
59 /* Find the end of the range to modify. */
60 end = start + (count * direction);
61
62 /* Force it to be within range. */
63 if (end > rl_end)
64 end = rl_end;
65 else if (end < 0)
66 end = -1;
67
68 if (start > end)
69 {
70 int temp = start;
71 start = end;
72 end = temp;
73 }
74
75 if (start == end)
76 return;
77
78 /* Tell readline that we are modifying the line, so save the undo
79 information. */
80 rl_modifying (start, end);
81
82 for (; start != end; start += direction)
83 {
28ef6c31
JA
84 if (_rl_uppercase_p (rl_line_buffer[start]))
85 rl_line_buffer[start] = _rl_to_lower (rl_line_buffer[start]);
86 else if (_rl_lowercase_p (rl_line_buffer[start]))
87 rl_line_buffer[start] = _rl_to_upper (rl_line_buffer[start]);
726f6388
JA
88 }
89
90 /* Move point to on top of the last character changed. */
91 rl_point = end - direction;
92}