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

Revision 12992, 2.4 KB checked in by kcr, 26 years ago (diff)
This commit was generated by cvs2svn to compensate for changes in r12991, 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/*                                                                  */
9*                       How to Emulate gets ()                      */
10/*                                                                  */
11/* **************************************************************** */
12
13/* A static variable for holding the line. */
14static char *line_read = (char *)NULL;
15
16/* Read a string, and return a pointer to it.  Returns NULL on EOF. */
17char *
18rl_gets ()
19{
20  /* If the buffer has already been allocated, return the memory
21     to the free pool. */
22  if (line_read)
23    {
24      free (line_read);
25      line_read = (char *)NULL;
26    }
27
28  /* Get a line from the user. */
29  line_read = readline ("");
30
31  /* If the line has any text in it, save it on the history. */
32  if (line_read && *line_read)
33    add_history (line_read);
34
35  return (line_read);
36}
37
38/* **************************************************************** */
39/*                                                                  */
40/*        Writing a Function to be Called by Readline.              */
41/*                                                                  */
42/* **************************************************************** */
43
44/* Invert the case of the COUNT following characters. */
45invert_case_line (count, key)
46     int count, key;
47{
48  register int start, end;
49
50  start = rl_point;
51
52  if (count < 0)
53    {
54      direction = -1;
55      count = -count;
56    }
57  else
58    direction = 1;
59     
60  /* Find the end of the range to modify. */
61  end = start + (count * direction);
62
63  /* Force it to be within range. */
64  if (end > rl_end)
65    end = rl_end;
66  else if (end < 0)
67    end = -1;
68
69  if (start > end)
70    {
71      int temp = start;
72      start = end;
73      end = temp;
74    }
75
76  if (start == end)
77    return;
78
79  /* Tell readline that we are modifying the line, so save the undo
80     information. */
81  rl_modifying (start, end);
82
83  for (; start != end; start += direction)
84    {
85      if (uppercase_p (rl_line_buffer[start]))
86        rl_line_buffer[start] = to_lower (rl_line_buffer[start]);
87      else if (lowercase_p (rl_line_buffer[start]))
88        rl_line_buffer[start] = to_upper (rl_line_buffer[start]);
89    }
90
91  /* Move point to on top of the last character changed. */
92  rl_point = end - direction;
93}
94
Note: See TracBrowser for help on using the repository browser.