| /* Public Domain Curses */ |
| |
| #include "pdcos2.h" |
| |
| RCSID("$Id: pdcsetsc.c,v 1.44 2008/07/14 04:24:51 wmcbrine Exp $") |
| |
| /*man-start************************************************************** |
| |
| Name: pdcsetsc |
| |
| Synopsis: |
| int PDC_set_blink(bool blinkon); |
| void PDC_set_title(const char *title); |
| |
| Description: |
| PDC_set_blink() toggles whether the A_BLINK attribute sets an |
| actual blink mode (TRUE), or sets the background color to high |
| intensity (FALSE). The default is platform-dependent (FALSE in |
| most cases). It returns OK if it could set the state to match |
| the given parameter, ERR otherwise. Current platforms also |
| adjust the value of COLORS according to this function -- 16 for |
| FALSE, and 8 for TRUE. |
| |
| PDC_set_title() sets the title of the window in which the curses |
| program is running. This function may not do anything on some |
| platforms. (Currently it only works in Win32 and X11.) |
| |
| Portability X/Open BSD SYS V |
| PDC_set_blink - - - |
| PDC_set_title - - - |
| |
| **man-end****************************************************************/ |
| |
| int PDC_curs_set(int visibility) |
| { |
| #ifndef EMXVIDEO |
| VIOCURSORINFO pvioCursorInfo; |
| #endif |
| int ret_vis, hidden = 0, start = 0, end = 0; |
| |
| PDC_LOG(("PDC_curs_set() - called: visibility=%d\n", visibility)); |
| |
| ret_vis = SP->visibility; |
| SP->visibility = visibility; |
| |
| switch(visibility) |
| { |
| case 0: /* invisible */ |
| #ifdef EMXVIDEO |
| start = end = 0; |
| #else |
| start = pdc_font / 4; |
| end = pdc_font; |
| hidden = -1; |
| #endif |
| break; |
| |
| case 2: /* highly visible */ |
| start = 2; /* almost full-height block */ |
| end = pdc_font - 1; |
| break; |
| |
| default: /* normal visibility */ |
| start = (SP->orig_cursor >> 8) & 0xff; |
| end = SP->orig_cursor & 0xff; |
| } |
| |
| #ifdef EMXVIDEO |
| if (!visibility) |
| v_hidecursor(); |
| else |
| v_ctype(start, end); |
| #else |
| pvioCursorInfo.yStart = (USHORT)start; |
| pvioCursorInfo.cEnd = (USHORT)end; |
| pvioCursorInfo.cx = (USHORT)1; |
| pvioCursorInfo.attr = hidden; |
| VioSetCurType((PVIOCURSORINFO)&pvioCursorInfo, 0); |
| #endif |
| return ret_vis; |
| } |
| |
| void PDC_set_title(const char *title) |
| { |
| PDC_LOG(("PDC_set_title() - called:<%s>\n", title)); |
| } |
| |
| int PDC_set_blink(bool blinkon) |
| { |
| #ifndef EMXVIDEO |
| USHORT statebuf[3], result; |
| |
| statebuf[0] = 6; /* length */ |
| statebuf[1] = 2; /* blink/intensity */ |
| statebuf[2] = !blinkon; |
| |
| result = VioSetState(&statebuf, 0); |
| VioGetState(&statebuf, 0); /* needed? */ |
| |
| if (pdc_color_started) |
| COLORS = statebuf[2] ? 16 : 8; |
| |
| return (result == 0) ? OK : ERR; |
| #else |
| if (pdc_color_started) |
| COLORS = 16; |
| |
| return blinkon ? ERR : OK; |
| #endif |
| } |