Home | History | Annotate | Line # | Download | only in libcurses
attributes.c revision 1.4
      1  1.4  blymn /*	$NetBSD: attributes.c,v 1.4 2000/04/15 13:17:02 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.1    mrg 
     39  1.1    mrg #include "curses.h"
     40  1.2  blymn #include "curses_private.h"
     41  1.1    mrg 
     42  1.4  blymn #ifndef _CURSES_USE_MACROS
     43  1.4  blymn /*
     44  1.4  blymn  * attron
     45  1.4  blymn  *	Test and set attributes on stdscr
     46  1.4  blymn  */
     47  1.4  blymn 
     48  1.4  blymn int
     49  1.4  blymn attron(int attr)
     50  1.4  blymn {
     51  1.4  blymn 	return wattron(stdscr, attr);
     52  1.4  blymn }
     53  1.4  blymn 
     54  1.4  blymn /*
     55  1.4  blymn  * attroff
     56  1.4  blymn  *	Test and unset attributes on stdscr.
     57  1.4  blymn  */
     58  1.4  blymn int
     59  1.4  blymn attroff(int attr)
     60  1.4  blymn {
     61  1.4  blymn 	return wattroff(stdscr, attr);
     62  1.4  blymn }
     63  1.4  blymn 
     64  1.4  blymn /*
     65  1.4  blymn  * attrset
     66  1.4  blymn  *	Set specific attribute modes.
     67  1.4  blymn  *	Unset others.  On stdscr.
     68  1.4  blymn  */
     69  1.4  blymn int
     70  1.4  blymn attrset(int attr)
     71  1.4  blymn {
     72  1.4  blymn 	return wattrset(stdscr, attr);
     73  1.4  blymn }
     74  1.4  blymn 
     75  1.4  blymn #endif
     76  1.4  blymn 
     77  1.1    mrg /*
     78  1.1    mrg  * wattron
     79  1.1    mrg  *	Test and set attributes.
     80  1.1    mrg  *
     81  1.1    mrg  *	Modes are blinking, bold (extra bright), dim (half-bright),
     82  1.1    mrg  *	blanking (invisible), protected and reverse video
     83  1.1    mrg  */
     84  1.2  blymn 
     85  1.1    mrg int
     86  1.4  blymn wattron(WINDOW *win, int attr)
     87  1.1    mrg {
     88  1.3    jdc #ifdef DEBUG
     89  1.3    jdc 	__CTRACE ("wattron: %08x, %08x\n", attr, __nca);
     90  1.3    jdc #endif
     91  1.2  blymn 	if ((attr_t) attr & __BLINK) {
     92  1.3    jdc 		/* If can do blink, set the screen blink bit. */
     93  1.1    mrg 		if (MB != NULL && ME != NULL) {
     94  1.2  blymn 			win->wattr |= __BLINK;
     95  1.3    jdc 			/*
     96  1.3    jdc 			 * Check for conflict with color.
     97  1.3    jdc 			 */
     98  1.3    jdc 			if ((win->wattr & __COLOR) && (__nca & __BLINK)) {
     99  1.3    jdc 				win->wattr &= ~__COLOR;
    100  1.3    jdc 			}
    101  1.1    mrg 		}
    102  1.1    mrg 	}
    103  1.2  blymn 	if ((attr_t) attr & __BOLD) {
    104  1.3    jdc 		/* If can do bold, set the screen bold bit. */
    105  1.1    mrg 		if (MD != NULL && ME != NULL) {
    106  1.2  blymn 			win->wattr |= __BOLD;
    107  1.3    jdc 			if ((win->wattr & __COLOR) && (__nca & __BOLD)) {
    108  1.3    jdc 				win->wattr &= ~__COLOR;
    109  1.3    jdc 			}
    110  1.1    mrg 		}
    111  1.1    mrg 	}
    112  1.2  blymn 	if ((attr_t) attr & __DIM) {
    113  1.3    jdc 		/* If can do dim, set the screen dim bit. */
    114  1.1    mrg 		if (MH != NULL && ME != NULL) {
    115  1.2  blymn 			win->wattr |= __DIM;
    116  1.3    jdc 			if ((win->wattr & __COLOR) && (__nca & __DIM)) {
    117  1.3    jdc 				win->wattr &= ~__COLOR;
    118  1.3    jdc 			}
    119  1.1    mrg 		}
    120  1.1    mrg 	}
    121  1.2  blymn 	if ((attr_t) attr & __BLANK) {
    122  1.3    jdc 		/* If can do blank, set the screen blank bit. */
    123  1.1    mrg 		if (MK != NULL && ME != NULL) {
    124  1.2  blymn 			win->wattr |= __BLANK;
    125  1.3    jdc 			if ((win->wattr & __COLOR) && (__nca & __BLANK)) {
    126  1.3    jdc 				win->wattr &= ~__COLOR;
    127  1.3    jdc 			}
    128  1.1    mrg 		}
    129  1.1    mrg 	}
    130  1.2  blymn 	if ((attr_t) attr & __PROTECT) {
    131  1.3    jdc 		/* If can do protected, set the screen protected bit. */
    132  1.1    mrg 		if (MP != NULL && ME != NULL) {
    133  1.2  blymn 			win->wattr |= __PROTECT;
    134  1.3    jdc 			if ((win->wattr & __COLOR) && (__nca & __PROTECT)) {
    135  1.3    jdc 				win->wattr &= ~__COLOR;
    136  1.3    jdc 			}
    137  1.1    mrg 		}
    138  1.1    mrg 	}
    139  1.2  blymn 	if ((attr_t) attr & __REVERSE) {
    140  1.3    jdc 		/* If can do reverse video, set the screen reverse video bit. */
    141  1.1    mrg 		if (MR != NULL && ME != NULL)
    142  1.1    mrg 		{
    143  1.2  blymn 			win->wattr |= __REVERSE;
    144  1.3    jdc 			if ((win->wattr & __COLOR) && (__nca & __REVERSE)) {
    145  1.3    jdc 				win->wattr &= ~__COLOR;
    146  1.3    jdc 			}
    147  1.1    mrg 		}
    148  1.1    mrg 	}
    149  1.2  blymn 	if ((attr_t) attr & __STANDOUT) {
    150  1.2  blymn 		wstandout(win);
    151  1.2  blymn 	}
    152  1.3    jdc 	if ((attr_t) attr & __UNDERSCORE) {
    153  1.1    mrg 		wunderscore(win);
    154  1.1    mrg 	}
    155  1.3    jdc 	if ((attr_t) attr & __COLOR) {
    156  1.3    jdc 		/* If another color pair is set, turn that off first. */
    157  1.3    jdc 		if ((win->wattr & __COLOR) != ((attr_t) attr & __COLOR))
    158  1.3    jdc 			win->wattr &= ~__COLOR;
    159  1.3    jdc 		/* If can do color video, set the color pair bits. */
    160  1.3    jdc 		if (cO != NULL)
    161  1.3    jdc 		{
    162  1.3    jdc 			win->wattr |= attr & __COLOR;
    163  1.3    jdc 			if (__nca != __NORMAL) {
    164  1.3    jdc 				win->wattr &= ~__nca;
    165  1.3    jdc 			}
    166  1.3    jdc 		}
    167  1.3    jdc 	}
    168  1.1    mrg 	return (1);
    169  1.1    mrg }
    170  1.1    mrg 
    171  1.1    mrg /*
    172  1.1    mrg  * wattroff
    173  1.1    mrg  *	Test and unset attributes.
    174  1.1    mrg  *
    175  1.1    mrg  *	Note that the 'me' sequence unsets all attributes.  We handle
    176  1.1    mrg  *	which attributes should really be set in refresh.c:makech().
    177  1.1    mrg  */
    178  1.1    mrg int
    179  1.4  blymn wattroff(WINDOW *win, int attr)
    180  1.1    mrg {
    181  1.3    jdc #ifdef DEBUG
    182  1.3    jdc 	__CTRACE ("wattroff: %08x\n", attr);
    183  1.3    jdc #endif
    184  1.3    jdc 	/* If can do exit modes, unset the relevent attribute bits. */
    185  1.2  blymn 	if ((attr_t) attr & __BLINK) {
    186  1.1    mrg 		if (ME != NULL) {
    187  1.2  blymn 			win->wattr &= ~__BLINK;
    188  1.1    mrg 		}
    189  1.1    mrg 	}
    190  1.2  blymn 	if ((attr_t) attr & __BOLD) {
    191  1.1    mrg 		if (ME != NULL) {
    192  1.2  blymn 			win->wattr &= ~__BOLD;
    193  1.1    mrg 		}
    194  1.1    mrg 	}
    195  1.2  blymn 	if ((attr_t) attr & __DIM) {
    196  1.1    mrg 		if (ME != NULL) {
    197  1.2  blymn 			win->wattr &= ~__DIM;
    198  1.1    mrg 		}
    199  1.1    mrg 	}
    200  1.2  blymn 	if ((attr_t) attr & __BLANK) {
    201  1.1    mrg 		if (ME != NULL) {
    202  1.2  blymn 			win->wattr &= ~__BLANK;
    203  1.1    mrg 		}
    204  1.1    mrg 	}
    205  1.2  blymn 	if ((attr_t) attr & __PROTECT) {
    206  1.1    mrg 		if (ME != NULL) {
    207  1.2  blymn 			win->wattr &= ~__PROTECT;
    208  1.1    mrg 		}
    209  1.1    mrg 	}
    210  1.2  blymn 	if ((attr_t) attr & __REVERSE) {
    211  1.1    mrg 		if (ME != NULL) {
    212  1.2  blymn 			win->wattr &= ~__REVERSE;
    213  1.1    mrg 		}
    214  1.1    mrg 	}
    215  1.2  blymn 	if ((attr_t) attr & __STANDOUT) {
    216  1.2  blymn 		wstandend(win);
    217  1.2  blymn 	}
    218  1.3    jdc 	if ((attr_t) attr & __UNDERSCORE) {
    219  1.1    mrg 		wunderend(win);
    220  1.1    mrg 	}
    221  1.3    jdc 	if ((attr_t) attr & __COLOR) {
    222  1.3    jdc 		if (cO != NULL)
    223  1.3    jdc 		{
    224  1.3    jdc 			win->wattr &= ~__COLOR;
    225  1.3    jdc 		}
    226  1.3    jdc 	}
    227  1.3    jdc 
    228  1.1    mrg 	return (1);
    229  1.1    mrg }
    230  1.1    mrg 
    231  1.1    mrg /*
    232  1.1    mrg  * wattrset
    233  1.1    mrg  *	Set specific attribute modes.
    234  1.1    mrg  *	Unset others.
    235  1.1    mrg  */
    236  1.1    mrg int
    237  1.4  blymn wattrset(WINDOW *win, int attr)
    238  1.1    mrg {
    239  1.3    jdc 	if ((attr_t) attr & __BLINK)
    240  1.3    jdc 		wattron(win, __BLINK);
    241  1.3    jdc 	else
    242  1.3    jdc 		wattroff(win, __BLINK);
    243  1.3    jdc 	if ((attr_t) attr & __BOLD)
    244  1.3    jdc 		wattron(win, __BOLD);
    245  1.3    jdc 	else
    246  1.3    jdc 		wattroff(win, __BOLD);
    247  1.3    jdc 	if ((attr_t) attr & __DIM)
    248  1.3    jdc 		wattron(win, __DIM);
    249  1.3    jdc 	else
    250  1.3    jdc 		wattroff(win, __DIM);
    251  1.3    jdc 	if ((attr_t) attr & __BLANK)
    252  1.3    jdc 		wattron(win, __BLANK);
    253  1.3    jdc 	else
    254  1.3    jdc 		wattroff(win, __BLANK);
    255  1.3    jdc 	if ((attr_t) attr & __PROTECT)
    256  1.3    jdc 		wattron(win, __PROTECT);
    257  1.3    jdc 	else
    258  1.3    jdc 		wattroff(win, __PROTECT);
    259  1.3    jdc 	if ((attr_t) attr & __REVERSE)
    260  1.3    jdc 		wattron(win, __REVERSE);
    261  1.3    jdc 	else
    262  1.3    jdc 		wattroff(win, __REVERSE);
    263  1.3    jdc 	if ((attr_t) attr & __STANDOUT)
    264  1.2  blymn 		wstandout(win);
    265  1.3    jdc 	else
    266  1.2  blymn 		wstandend(win);
    267  1.3    jdc 	if ((attr_t) attr & __UNDERSCORE)
    268  1.1    mrg 		wunderscore(win);
    269  1.3    jdc 	else
    270  1.1    mrg 		wunderend(win);
    271  1.3    jdc 	if ((attr_t) attr & __COLOR)
    272  1.3    jdc 		wattron(win, attr & (int) __COLOR);
    273  1.3    jdc 	else
    274  1.3    jdc 		wattroff(win, (int) __COLOR);
    275  1.1    mrg 	return (1);
    276  1.1    mrg }
    277