c856e90a3823a3e83081b3e7925027e80b56db79
[coreboot.git] / payloads / libpayload / curses / PDCurses-3.4 / pdcurses / deleteln.c
1 /* Public Domain Curses */
2
3 #include <curspriv.h>
4
5 RCSID("$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
30         With the insertln() and winsertn() functions, a blank line is 
31         inserted above the current line and the bottom line is lost.
32
33         mvdeleteln(), mvwdeleteln(), mvinsertln() and mvwinsertln() 
34         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
53 int 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
79     if (win->_cury <= win->_bmarg) 
80     {
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
89 int deleteln(void)
90 {
91     PDC_LOG(("deleteln() - called\n"));
92
93     return wdeleteln(stdscr);
94 }
95
96 int 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
106 int 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
116 int 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
142 int insdelln(int n)
143 {
144     PDC_LOG(("insdelln() - called\n"));
145
146     return winsdelln(stdscr, n);
147 }
148
149 int 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
183 int insertln(void)
184 {
185     PDC_LOG(("insertln() - called\n"));
186
187     return winsertln(stdscr);
188 }
189
190 int 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
200 int 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 }