1/*	$NetBSD: curs_set.c,v 1.9 2010/02/03 15:34:40 roy Exp $	*/
2
3/*-
4 * Copyright (c) 1998-2000 Brett Lymn
5 *                         (blymn@baea.com.au, brett_lymn@yahoo.com.au)
6 * All rights reserved.
7 *
8 * This code has been donated to The NetBSD Foundation by the Author.
9 *
10 * Redistribution and use in source and binary forms, with or without
11 * modification, are permitted provided that the following conditions
12 * are met:
13 * 1. Redistributions of source code must retain the above copyright
14 *    notice, this list of conditions and the following disclaimer.
15 * 2. The name of the author may not be used to endorse or promote products
16 *    derived from this software without specific prior written permission
17 *
18 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
19 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
20 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
21 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
22 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
23 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
27 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 *
29 *
30 */
31
32#include <sys/cdefs.h>
33#ifndef lint
34__RCSID("$NetBSD: curs_set.c,v 1.9 2010/02/03 15:34:40 roy Exp $");
35#endif				/* not lint */
36
37#include "curses.h"
38#include "curses_private.h"
39
40/*
41 * curs_set --
42 *    Set the visibility of the cursor, 0 means invisible, 1 means normal
43 *    visibility and 2 means high visibility.  Return the previous
44 *    visibility iff the terminal supports the new visibility otherwise
45 *    return ERR.
46 */
47int
48curs_set(int visibility)
49{
50	int old_one;
51
52	old_one = _cursesi_screen->old_mode;
53	switch (visibility) {
54		case 0: /* invisible */
55			if (cursor_invisible != NULL) {
56#ifdef DEBUG
57				__CTRACE(__CTRACE_MISC,
58				    "curs_set: invisible\n");
59#endif
60				_cursesi_screen->old_mode = 0;
61				tputs(cursor_invisible, 0, __cputchar);
62				fflush(_cursesi_screen->outfd);
63				return old_one;
64			}
65			break;
66
67		case 1: /* normal */
68			if (cursor_normal != NULL) {
69#ifdef DEBUG
70				__CTRACE(__CTRACE_MISC, "curs_set: normal\n");
71#endif
72				_cursesi_screen->old_mode = 1;
73				tputs(cursor_normal, 0, __cputchar);
74				fflush(_cursesi_screen->outfd);
75				return old_one;
76			}
77			break;
78
79		case 2: /* high visibility */
80			if (cursor_visible != NULL) {
81#ifdef DEBUG
82				__CTRACE(__CTRACE_MISC,
83				    "curs_set: high vis\n");
84#endif
85				_cursesi_screen->old_mode = 2;
86				tputs(cursor_visible, 0, __cputchar);
87				fflush(_cursesi_screen->outfd);
88				return old_one;
89			}
90			break;
91
92		default:
93			break;
94	}
95
96	return ERR;
97}
98
99/*
100 * __restore_cursor_vis --
101 *     Restore the old cursor visibility.
102 */
103void
104__restore_cursor_vis(void)
105{
106	curs_set(_cursesi_screen->old_mode);
107}
108
109