source: trunk/third/readline/examples/manexamp.c @ 17010

Revision 17010, 2.4 KB checked in by ghudson, 23 years ago (diff)
This commit was generated by cvs2svn to compensate for changes in r17009, which included commits to RCS files with non-trunk default branches.
Line 
1/* manexamp.c -- The examples which appear in the documentation are here. */
2
3#include <stdio.h>
4#include <readline/readline.h>
5
6/* **************************************************************** */
7/*                                                                  */
8/*                      How to Emulate gets ()                      */
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    {
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]);
88    }
89
90  /* Move point to on top of the last character changed. */
91  rl_point = end - direction;
92}
Note: See TracBrowser for help on using the repository browser.