Home | History | Annotate | Line # | Download | only in libcurses
attributes.c revision 1.6
      1  1.6  blymn /*	$NetBSD: attributes.c,v 1.6 2000/04/24 14:09:42 blymn Exp $	*/
      2  1.1    mrg 
      3  1.3    jdc /*-
      4  1.3    jdc  * Copyright (c) 1999 The NetBSD Foundation, Inc.
      5  1.1    mrg  * All rights reserved.
      6  1.1    mrg  *
      7  1.3    jdc  * This code is derived from software contributed to The NetBSD Foundation
      8  1.3    jdc  * by Julian Coleman.
      9  1.3    jdc  *
     10  1.1    mrg  * Redistribution and use in source and binary forms, with or without
     11  1.1    mrg  * modification, are permitted provided that the following conditions
     12  1.1    mrg  * are met:
     13  1.1    mrg  * 1. Redistributions of source code must retain the above copyright
     14  1.1    mrg  *    notice, this list of conditions and the following disclaimer.
     15  1.3    jdc  * 2. Redistributions in binary form must reproduce the above copyright
     16  1.3    jdc  *    notice, this list of conditions and the following disclaimer in the
     17  1.3    jdc  *    documentation and/or other materials provided with the distribution.
     18  1.3    jdc  * 3. All advertising materials mentioning features or use of this software
     19  1.3    jdc  *    must display the following acknowledgement:
     20  1.3    jdc  *        This product includes software developed by the NetBSD
     21  1.3    jdc  *        Foundation, Inc. and its contributors.
     22  1.3    jdc  * 4. Neither the name of The NetBSD Foundation nor the names of its
     23  1.3    jdc  *    contributors may be used to endorse or promote products derived
     24  1.3    jdc  *    from this software without specific prior written permission.
     25  1.1    mrg  *
     26  1.3    jdc  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
     27  1.3    jdc  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
     28  1.3    jdc  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     29  1.3    jdc  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
     30  1.3    jdc  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
     31  1.3    jdc  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
     32  1.3    jdc  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
     33  1.3    jdc  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
     34  1.3    jdc  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
     35  1.3    jdc  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     36  1.3    jdc  * POSSIBILITY OF SUCH DAMAGE.
     37  1.1    mrg  */
     38  1.6  blymn 
     39  1.6  blymn #include <sys/cdefs.h>
     40  1.6  blymn #ifndef lint
     41  1.6  blymn __RCSID("$NetBSD: attributes.c,v 1.6 2000/04/24 14:09:42 blymn Exp $");
     42  1.6  blymn #endif				/* not lint */
     43  1.1    mrg 
     44  1.1    mrg #include "curses.h"
     45  1.2  blymn #include "curses_private.h"
     46  1.1    mrg 
     47  1.4  blymn #ifndef _CURSES_USE_MACROS
     48  1.4  blymn /*
     49  1.4  blymn  * attron
     50  1.4  blymn  *	Test and set attributes on stdscr
     51  1.4  blymn  */
     52  1.4  blymn 
     53  1.4  blymn int
     54  1.4  blymn attron(int attr)
     55  1.4  blymn {
     56  1.4  blymn 	return wattron(stdscr, attr);
     57  1.4  blymn }
     58  1.4  blymn 
     59  1.4  blymn /*
     60  1.4  blymn  * attroff
     61  1.4  blymn  *	Test and unset attributes on stdscr.
     62  1.4  blymn  */
     63  1.4  blymn int
     64  1.4  blymn attroff(int attr)
     65  1.4  blymn {
     66  1.4  blymn 	return wattroff(stdscr, attr);
     67  1.4  blymn }
     68  1.4  blymn 
     69  1.4  blymn /*
     70  1.4  blymn  * attrset
     71  1.4  blymn  *	Set specific attribute modes.
     72  1.4  blymn  *	Unset others.  On stdscr.
     73  1.4  blymn  */
     74  1.4  blymn int
     75  1.4  blymn attrset(int attr)
     76  1.4  blymn {
     77  1.4  blymn 	return wattrset(stdscr, attr);
     78  1.4  blymn }
     79  1.4  blymn 
     80  1.4  blymn #endif
     81  1.4  blymn 
     82  1.1    mrg /*
     83  1.1    mrg  * wattron
     84  1.1    mrg  *	Test and set attributes.
     85  1.1    mrg  *
     86  1.1    mrg  *	Modes are blinking, bold (extra bright), dim (half-bright),
     87  1.1    mrg  *	blanking (invisible), protected and reverse video
     88  1.1    mrg  */
     89  1.2  blymn 
     90  1.1    mrg int
     91  1.4  blymn wattron(WINDOW *win, int attr)
     92  1.1    mrg {
     93  1.3    jdc #ifdef DEBUG
     94  1.3    jdc 	__CTRACE ("wattron: %08x, %08x\n", attr, __nca);
     95  1.3    jdc #endif
     96  1.2  blymn 	if ((attr_t) attr & __BLINK) {
     97  1.3    jdc 		/* If can do blink, set the screen blink bit. */
     98  1.1    mrg 		if (MB != NULL && ME != NULL) {
     99  1.2  blymn 			win->wattr |= __BLINK;
    100  1.3    jdc 			/*
    101  1.3    jdc 			 * Check for conflict with color.
    102  1.3    jdc 			 */
    103  1.3    jdc 			if ((win->wattr & __COLOR) && (__nca & __BLINK)) {
    104  1.3    jdc 				win->wattr &= ~__COLOR;
    105  1.3    jdc 			}
    106  1.1    mrg 		}
    107  1.1    mrg 	}
    108  1.2  blymn 	if ((attr_t) attr & __BOLD) {
    109  1.3    jdc 		/* If can do bold, set the screen bold bit. */
    110  1.1    mrg 		if (MD != NULL && ME != NULL) {
    111  1.2  blymn 			win->wattr |= __BOLD;
    112  1.3    jdc 			if ((win->wattr & __COLOR) && (__nca & __BOLD)) {
    113  1.3    jdc 				win->wattr &= ~__COLOR;
    114  1.3    jdc 			}
    115  1.1    mrg 		}
    116  1.1    mrg 	}
    117  1.2  blymn 	if ((attr_t) attr & __DIM) {
    118  1.3    jdc 		/* If can do dim, set the screen dim bit. */
    119  1.1    mrg 		if (MH != NULL && ME != NULL) {
    120  1.2  blymn 			win->wattr |= __DIM;
    121  1.3    jdc 			if ((win->wattr & __COLOR) && (__nca & __DIM)) {
    122  1.3    jdc 				win->wattr &= ~__COLOR;
    123  1.3    jdc 			}
    124  1.1    mrg 		}
    125  1.1    mrg 	}
    126  1.2  blymn 	if ((attr_t) attr & __BLANK) {
    127  1.3    jdc 		/* If can do blank, set the screen blank bit. */
    128  1.1    mrg 		if (MK != NULL && ME != NULL) {
    129  1.2  blymn 			win->wattr |= __BLANK;
    130  1.3    jdc 			if ((win->wattr & __COLOR) && (__nca & __BLANK)) {
    131  1.3    jdc 				win->wattr &= ~__COLOR;
    132  1.3    jdc 			}
    133  1.1    mrg 		}
    134  1.1    mrg 	}
    135  1.2  blymn 	if ((attr_t) attr & __PROTECT) {
    136  1.3    jdc 		/* If can do protected, set the screen protected bit. */
    137  1.1    mrg 		if (MP != NULL && ME != NULL) {
    138  1.2  blymn 			win->wattr |= __PROTECT;
    139  1.3    jdc 			if ((win->wattr & __COLOR) && (__nca & __PROTECT)) {
    140  1.3    jdc 				win->wattr &= ~__COLOR;
    141  1.3    jdc 			}
    142  1.1    mrg 		}
    143  1.1    mrg 	}
    144  1.2  blymn 	if ((attr_t) attr & __REVERSE) {
    145  1.3    jdc 		/* If can do reverse video, set the screen reverse video bit. */
    146  1.1    mrg 		if (MR != NULL && ME != NULL)
    147  1.1    mrg 		{
    148  1.2  blymn 			win->wattr |= __REVERSE;
    149  1.3    jdc 			if ((win->wattr & __COLOR) && (__nca & __REVERSE)) {
    150  1.3    jdc 				win->wattr &= ~__COLOR;
    151  1.3    jdc 			}
    152  1.1    mrg 		}
    153  1.1    mrg 	}
    154  1.2  blymn 	if ((attr_t) attr & __STANDOUT) {
    155  1.2  blymn 		wstandout(win);
    156  1.2  blymn 	}
    157  1.3    jdc 	if ((attr_t) attr & __UNDERSCORE) {
    158  1.1    mrg 		wunderscore(win);
    159  1.1    mrg 	}
    160  1.3    jdc 	if ((attr_t) attr & __COLOR) {
    161  1.3    jdc 		/* If another color pair is set, turn that off first. */
    162  1.3    jdc 		if ((win->wattr & __COLOR) != ((attr_t) attr & __COLOR))
    163  1.3    jdc 			win->wattr &= ~__COLOR;
    164  1.3    jdc 		/* If can do color video, set the color pair bits. */
    165  1.3    jdc 		if (cO != NULL)
    166  1.3    jdc 		{
    167  1.3    jdc 			win->wattr |= attr & __COLOR;
    168  1.3    jdc 			if (__nca != __NORMAL) {
    169  1.3    jdc 				win->wattr &= ~__nca;
    170  1.3    jdc 			}
    171  1.3    jdc 		}
    172  1.3    jdc 	}
    173  1.1    mrg 	return (1);
    174  1.1    mrg }
    175  1.1    mrg 
    176  1.1    mrg /*
    177  1.1    mrg  * wattroff
    178  1.1    mrg  *	Test and unset attributes.
    179  1.1    mrg  *
    180  1.1    mrg  *	Note that the 'me' sequence unsets all attributes.  We handle
    181  1.1    mrg  *	which attributes should really be set in refresh.c:makech().
    182  1.1    mrg  */
    183  1.1    mrg int
    184  1.4  blymn wattroff(WINDOW *win, int attr)
    185  1.1    mrg {
    186  1.3    jdc #ifdef DEBUG
    187  1.3    jdc 	__CTRACE ("wattroff: %08x\n", attr);
    188  1.3    jdc #endif
    189  1.3    jdc 	/* If can do exit modes, unset the relevent attribute bits. */
    190  1.2  blymn 	if ((attr_t) attr & __BLINK) {
    191  1.1    mrg 		if (ME != NULL) {
    192  1.2  blymn 			win->wattr &= ~__BLINK;
    193  1.1    mrg 		}
    194  1.1    mrg 	}
    195  1.2  blymn 	if ((attr_t) attr & __BOLD) {
    196  1.1    mrg 		if (ME != NULL) {
    197  1.2  blymn 			win->wattr &= ~__BOLD;
    198  1.1    mrg 		}
    199  1.1    mrg 	}
    200  1.2  blymn 	if ((attr_t) attr & __DIM) {
    201  1.1    mrg 		if (ME != NULL) {
    202  1.2  blymn 			win->wattr &= ~__DIM;
    203  1.1    mrg 		}
    204  1.1    mrg 	}
    205  1.2  blymn 	if ((attr_t) attr & __BLANK) {
    206  1.1    mrg 		if (ME != NULL) {
    207  1.2  blymn 			win->wattr &= ~__BLANK;
    208  1.1    mrg 		}
    209  1.1    mrg 	}
    210  1.2  blymn 	if ((attr_t) attr & __PROTECT) {
    211  1.1    mrg 		if (ME != NULL) {
    212  1.2  blymn 			win->wattr &= ~__PROTECT;
    213  1.1    mrg 		}
    214  1.1    mrg 	}
    215  1.2  blymn 	if ((attr_t) attr & __REVERSE) {
    216  1.1    mrg 		if (ME != NULL) {
    217  1.2  blymn 			win->wattr &= ~__REVERSE;
    218  1.1    mrg 		}
    219  1.1    mrg 	}
    220  1.2  blymn 	if ((attr_t) attr & __STANDOUT) {
    221  1.2  blymn 		wstandend(win);
    222  1.2  blymn 	}
    223  1.3    jdc 	if ((attr_t) attr & __UNDERSCORE) {
    224  1.1    mrg 		wunderend(win);
    225  1.1    mrg 	}
    226  1.3    jdc 	if ((attr_t) attr & __COLOR) {
    227  1.3    jdc 		if (cO != NULL)
    228  1.3    jdc 		{
    229  1.3    jdc 			win->wattr &= ~__COLOR;
    230  1.3    jdc 		}
    231  1.3    jdc 	}
    232  1.3    jdc 
    233  1.1    mrg 	return (1);
    234  1.1    mrg }
    235  1.1    mrg 
    236  1.1    mrg /*
    237  1.1    mrg  * wattrset
    238  1.1    mrg  *	Set specific attribute modes.
    239  1.1    mrg  *	Unset others.
    240  1.1    mrg  */
    241  1.1    mrg int
    242  1.4  blymn wattrset(WINDOW *win, int attr)
    243  1.1    mrg {
    244  1.5    jdc #ifdef DEBUG
    245  1.5    jdc 	__CTRACE ("wattrset: %08x\n", attr, __nca);
    246  1.5    jdc #endif
    247  1.3    jdc 	if ((attr_t) attr & __BLINK)
    248  1.3    jdc 		wattron(win, __BLINK);
    249  1.3    jdc 	else
    250  1.3    jdc 		wattroff(win, __BLINK);
    251  1.3    jdc 	if ((attr_t) attr & __BOLD)
    252  1.3    jdc 		wattron(win, __BOLD);
    253  1.3    jdc 	else
    254  1.3    jdc 		wattroff(win, __BOLD);
    255  1.3    jdc 	if ((attr_t) attr & __DIM)
    256  1.3    jdc 		wattron(win, __DIM);
    257  1.3    jdc 	else
    258  1.3    jdc 		wattroff(win, __DIM);
    259  1.3    jdc 	if ((attr_t) attr & __BLANK)
    260  1.3    jdc 		wattron(win, __BLANK);
    261  1.3    jdc 	else
    262  1.3    jdc 		wattroff(win, __BLANK);
    263  1.3    jdc 	if ((attr_t) attr & __PROTECT)
    264  1.3    jdc 		wattron(win, __PROTECT);
    265  1.3    jdc 	else
    266  1.3    jdc 		wattroff(win, __PROTECT);
    267  1.3    jdc 	if ((attr_t) attr & __REVERSE)
    268  1.3    jdc 		wattron(win, __REVERSE);
    269  1.3    jdc 	else
    270  1.3    jdc 		wattroff(win, __REVERSE);
    271  1.3    jdc 	if ((attr_t) attr & __STANDOUT)
    272  1.2  blymn 		wstandout(win);
    273  1.3    jdc 	else
    274  1.2  blymn 		wstandend(win);
    275  1.3    jdc 	if ((attr_t) attr & __UNDERSCORE)
    276  1.1    mrg 		wunderscore(win);
    277  1.3    jdc 	else
    278  1.1    mrg 		wunderend(win);
    279  1.3    jdc 	if ((attr_t) attr & __COLOR)
    280  1.3    jdc 		wattron(win, attr & (int) __COLOR);
    281  1.3    jdc 	else
    282  1.3    jdc 		wattroff(win, (int) __COLOR);
    283  1.1    mrg 	return (1);
    284  1.1    mrg }
    285