1*b09154d5Srin /* $NetBSD: curs_set.c,v 1.12 2021/09/06 07:45:48 rin Exp $ */
2bb083e0eSblymn
3bb083e0eSblymn /*-
4bb083e0eSblymn * Copyright (c) 1998-2000 Brett Lymn
5bb083e0eSblymn * (blymn@baea.com.au, brett_lymn@yahoo.com.au)
6bb083e0eSblymn * All rights reserved.
7bb083e0eSblymn *
8bb083e0eSblymn * This code has been donated to The NetBSD Foundation by the Author.
9bb083e0eSblymn *
10bb083e0eSblymn * Redistribution and use in source and binary forms, with or without
11bb083e0eSblymn * modification, are permitted provided that the following conditions
12bb083e0eSblymn * are met:
13bb083e0eSblymn * 1. Redistributions of source code must retain the above copyright
14bb083e0eSblymn * notice, this list of conditions and the following disclaimer.
15bb083e0eSblymn * 2. The name of the author may not be used to endorse or promote products
16c03a48d6Swiz * derived from this software without specific prior written permission
17bb083e0eSblymn *
18bb083e0eSblymn * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
19bb083e0eSblymn * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
20bb083e0eSblymn * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
21bb083e0eSblymn * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
22bb083e0eSblymn * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
23bb083e0eSblymn * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24bb083e0eSblymn * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25bb083e0eSblymn * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26bb083e0eSblymn * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
27bb083e0eSblymn * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28bb083e0eSblymn *
29bb083e0eSblymn *
30bb083e0eSblymn */
31bb083e0eSblymn
3266cab71cSblymn #include <sys/cdefs.h>
3366cab71cSblymn #ifndef lint
34*b09154d5Srin __RCSID("$NetBSD: curs_set.c,v 1.12 2021/09/06 07:45:48 rin Exp $");
3566cab71cSblymn #endif /* not lint */
3666cab71cSblymn
37bb083e0eSblymn #include "curses.h"
38bb083e0eSblymn #include "curses_private.h"
39bb083e0eSblymn
40bb083e0eSblymn /*
41bb083e0eSblymn * curs_set --
42bb083e0eSblymn * Set the visibility of the cursor, 0 means invisible, 1 means normal
43bb083e0eSblymn * visibility and 2 means high visibility. Return the previous
44bb083e0eSblymn * visibility iff the terminal supports the new visibility otherwise
45bb083e0eSblymn * return ERR.
46bb083e0eSblymn */
47bb083e0eSblymn int
curs_set(int visibility)48bb083e0eSblymn curs_set(int visibility)
49bb083e0eSblymn {
50bb083e0eSblymn int old_one;
51bb083e0eSblymn
52c84d91aaSblymn old_one = _cursesi_screen->old_mode;
53bb083e0eSblymn switch (visibility) {
54bb083e0eSblymn case 0: /* invisible */
5598eb8895Sroy if (cursor_invisible != NULL) {
561f221324Sjdc __CTRACE(__CTRACE_MISC,
571f221324Sjdc "curs_set: invisible\n");
58c84d91aaSblymn _cursesi_screen->old_mode = 0;
5998eb8895Sroy tputs(cursor_invisible, 0, __cputchar);
603da4a766Sblymn fflush(_cursesi_screen->outfd);
61bb083e0eSblymn return old_one;
62bb083e0eSblymn }
63bb083e0eSblymn break;
64bb083e0eSblymn
65bb083e0eSblymn case 1: /* normal */
6698eb8895Sroy if (cursor_normal != NULL) {
671f221324Sjdc __CTRACE(__CTRACE_MISC, "curs_set: normal\n");
68c84d91aaSblymn _cursesi_screen->old_mode = 1;
6998eb8895Sroy tputs(cursor_normal, 0, __cputchar);
703da4a766Sblymn fflush(_cursesi_screen->outfd);
71bb083e0eSblymn return old_one;
72bb083e0eSblymn }
73bb083e0eSblymn break;
74bb083e0eSblymn
75bb083e0eSblymn case 2: /* high visibility */
7698eb8895Sroy if (cursor_visible != NULL) {
77*b09154d5Srin __CTRACE(__CTRACE_MISC, "curs_set: high vis\n");
78c84d91aaSblymn _cursesi_screen->old_mode = 2;
7998eb8895Sroy tputs(cursor_visible, 0, __cputchar);
803da4a766Sblymn fflush(_cursesi_screen->outfd);
81bb083e0eSblymn return old_one;
82bb083e0eSblymn }
83bb083e0eSblymn break;
84bb083e0eSblymn
85bb083e0eSblymn default:
86bb083e0eSblymn break;
87bb083e0eSblymn }
88bb083e0eSblymn
89bb083e0eSblymn return ERR;
90bb083e0eSblymn }
91bb083e0eSblymn
9266cab71cSblymn /*
9366cab71cSblymn * __restore_cursor_vis --
9466cab71cSblymn * Restore the old cursor visibility.
9566cab71cSblymn */
9666cab71cSblymn void
__restore_cursor_vis(void)9766cab71cSblymn __restore_cursor_vis(void)
9866cab71cSblymn {
99c84d91aaSblymn curs_set(_cursesi_screen->old_mode);
10066cab71cSblymn }
101bb083e0eSblymn
102