blob: 7e26d9bcde9726bf81ce7677f77eff937632f8db [file] [log] [blame]
Patrick Georgi3b77b722011-07-07 15:41:53 +02001/* Public Domain Curses */
2
3#include <curspriv.h>
4
5RCSID("$Id: deleteln.c,v 1.35 2008/07/13 16:08:18 wmcbrine Exp $")
6
7/*man-start**************************************************************
8
9 Name: deleteln
10
11 Synopsis:
12 int deleteln(void);
13 int wdeleteln(WINDOW *win);
14 int insdelln(int n);
15 int winsdelln(WINDOW *win, int n);
16 int insertln(void);
17 int winsertln(WINDOW *win);
18
19 int mvdeleteln(int y, int x);
20 int mvwdeleteln(WINDOW *win, int y, int x);
21 int mvinsertln(int y, int x);
22 int mvwinsertln(WINDOW *win, int y, int x);
23
24 Description:
25 With the deleteln() and wdeleteln() functions, the line under
26 the cursor in the window is deleted. All lines below the
27 current line are moved up one line. The bottom line of the
28 window is cleared. The cursor position does not change.
29
Stefan Reinauere11835e2011-10-31 12:54:00 -070030 With the insertln() and winsertn() functions, a blank line is
Patrick Georgi3b77b722011-07-07 15:41:53 +020031 inserted above the current line and the bottom line is lost.
32
Stefan Reinauere11835e2011-10-31 12:54:00 -070033 mvdeleteln(), mvwdeleteln(), mvinsertln() and mvwinsertln()
Patrick Georgi3b77b722011-07-07 15:41:53 +020034 allow moving the cursor and inserting/deleting in one call.
35
36 Return Value:
37 All functions return OK on success and ERR on error.
38
39 Portability X/Open BSD SYS V
40 deleteln Y Y Y
41 wdeleteln Y Y Y
42 mvdeleteln - - -
43 mvwdeleteln - - -
44 insdelln Y - 4.0
45 winsdelln Y - 4.0
46 insertln Y Y Y
47 winsertln Y Y Y
48 mvinsertln - - -
49 mvwinsertln - - -
50
51**man-end****************************************************************/
52
53int wdeleteln(WINDOW *win)
54{
55 chtype blank, *temp, *ptr;
56 int y;
57
58 PDC_LOG(("wdeleteln() - called\n"));
59
60 if (!win)
61 return ERR;
62
63 /* wrs (4/10/93) account for window background */
64
65 blank = win->_bkgd;
66
67 temp = win->_y[win->_cury];
68
69 for (y = win->_cury; y < win->_bmarg; y++)
70 {
71 win->_y[y] = win->_y[y + 1];
72 win->_firstch[y] = 0;
73 win->_lastch[y] = win->_maxx - 1;
74 }
75
76 for (ptr = temp; (ptr - temp < win->_maxx); ptr++)
77 *ptr = blank; /* make a blank line */
78
Stefan Reinauere11835e2011-10-31 12:54:00 -070079 if (win->_cury <= win->_bmarg)
Patrick Georgi3b77b722011-07-07 15:41:53 +020080 {
81 win->_firstch[win->_bmarg] = 0;
82 win->_lastch[win->_bmarg] = win->_maxx - 1;
83 win->_y[win->_bmarg] = temp;
84 }
85
86 return OK;
87}
88
89int deleteln(void)
90{
91 PDC_LOG(("deleteln() - called\n"));
92
93 return wdeleteln(stdscr);
94}
95
96int mvdeleteln(int y, int x)
97{
98 PDC_LOG(("mvdeleteln() - called\n"));
99
100 if (move(y, x) == ERR)
101 return ERR;
102
103 return wdeleteln(stdscr);
104}
105
106int mvwdeleteln(WINDOW *win, int y, int x)
107{
108 PDC_LOG(("mvwdeleteln() - called\n"));
109
110 if (wmove(win, y, x) == ERR)
111 return ERR;
112
113 return wdeleteln(win);
114}
115
116int winsdelln(WINDOW *win, int n)
117{
118 int i;
119
120 PDC_LOG(("winsdelln() - called\n"));
121
122 if (!win)
123 return ERR;
124
125 if (n > 0)
126 {
127 for (i = 0; i < n; i++)
128 if (winsertln(win) == ERR)
129 return ERR;
130 }
131 else if (n < 0)
132 {
133 n = -n;
134 for (i = 0; i < n; i++)
135 if (wdeleteln(win) == ERR)
136 return ERR;
137 }
138
139 return OK;
140}
141
142int insdelln(int n)
143{
144 PDC_LOG(("insdelln() - called\n"));
145
146 return winsdelln(stdscr, n);
147}
148
149int winsertln(WINDOW *win)
150{
151 chtype blank, *temp, *end;
152 int y;
153
154 PDC_LOG(("winsertln() - called\n"));
155
156 if (!win)
157 return ERR;
158
159 /* wrs (4/10/93) account for window background */
160
161 blank = win->_bkgd;
162
163 temp = win->_y[win->_maxy - 1];
164
165 for (y = win->_maxy - 1; y > win->_cury; y--)
166 {
167 win->_y[y] = win->_y[y - 1];
168 win->_firstch[y] = 0;
169 win->_lastch[y] = win->_maxx - 1;
170 }
171
172 win->_y[win->_cury] = temp;
173
174 for (end = &temp[win->_maxx - 1]; temp <= end; temp++)
175 *temp = blank;
176
177 win->_firstch[win->_cury] = 0;
178 win->_lastch[win->_cury] = win->_maxx - 1;
179
180 return OK;
181}
182
183int insertln(void)
184{
185 PDC_LOG(("insertln() - called\n"));
186
187 return winsertln(stdscr);
188}
189
190int mvinsertln(int y, int x)
191{
192 PDC_LOG(("mvinsertln() - called\n"));
193
194 if (move(y, x) == ERR)
195 return ERR;
196
197 return winsertln(stdscr);
198}
199
200int mvwinsertln(WINDOW *win, int y, int x)
201{
202 PDC_LOG(("mvwinsertln() - called\n"));
203
204 if (wmove(win, y, x) == ERR)
205 return ERR;
206
207 return winsertln(win);
208}