Change-Id: If881ec130833c7e7e62caa3d31e350a531f5bc8e Signed-off-by: Stefan Reinauer <stefan.reinauer@coreboot.org> Reviewed-on: http://review.coreboot.org/12398 Tested-by: build bot (Jenkins) Reviewed-by: Patrick Georgi <pgeorgi@google.com>
		
			
				
	
	
		
			151 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			151 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /* Public Domain Curses */
 | |
| 
 | |
| #include "pdcx11.h"
 | |
| 
 | |
| RCSID("$Id: pdcscrn.c,v 1.55 2008/07/14 04:24:52 wmcbrine Exp $")
 | |
| 
 | |
| /* COLOR_PAIR to attribute encoding table. */
 | |
| 
 | |
| short *xc_atrtab = (short *)NULL;
 | |
| 
 | |
| /* close the physical screen */
 | |
| 
 | |
| void PDC_scr_close(void)
 | |
| {
 | |
|     PDC_LOG(("PDC_scr_close() - called\n"));
 | |
| }
 | |
| 
 | |
| void PDC_scr_free(void)
 | |
| {
 | |
|     XCursesExit();
 | |
| 
 | |
|     xc_atrtab = (short *)NULL;
 | |
| }
 | |
| 
 | |
| /* open the physical screen -- allocate SP, miscellaneous intialization */
 | |
| 
 | |
| int PDC_scr_open(int argc, char **argv)
 | |
| {
 | |
|     extern bool sb_started;
 | |
| 
 | |
|     PDC_LOG(("PDC_scr_open() - called\n"));
 | |
| 
 | |
|     if ((XCursesInitscr(argc, argv) == ERR) || !SP)
 | |
|         return ERR;
 | |
| 
 | |
|     SP->cursrow = SP->curscol = 0;
 | |
|     SP->orig_attr = FALSE;
 | |
|     SP->sb_on = sb_started;
 | |
|     SP->sb_total_y = 0;
 | |
|     SP->sb_viewport_y = 0;
 | |
|     SP->sb_cur_y = 0;
 | |
|     SP->sb_total_x = 0;
 | |
|     SP->sb_viewport_x = 0;
 | |
|     SP->sb_cur_x = 0;
 | |
| 
 | |
|     return OK;
 | |
| }
 | |
| 
 | |
| /* the core of resize_term() */
 | |
| 
 | |
| int PDC_resize_screen(int nlines, int ncols)
 | |
| {
 | |
|     PDC_LOG(("PDC_resize_screen() - called. Lines: %d Cols: %d\n",
 | |
|              nlines, ncols));
 | |
| 
 | |
|     if (nlines || ncols || !SP->resized)
 | |
|         return ERR;
 | |
| 
 | |
|     shmdt((char *)Xcurscr);
 | |
|     XCursesInstructAndWait(CURSES_RESIZE);
 | |
| 
 | |
|     if ((shmid_Xcurscr = shmget(shmkey_Xcurscr,
 | |
|         SP->XcurscrSize + XCURSESSHMMIN, 0700)) < 0)
 | |
|     {
 | |
|         perror("Cannot allocate shared memory for curscr");
 | |
|         kill(xc_otherpid, SIGKILL);
 | |
|         return ERR;
 | |
|     }
 | |
| 
 | |
|     XCursesLINES = SP->lines;
 | |
|     XCursesCOLS = SP->cols;
 | |
| 
 | |
|     PDC_LOG(("%s:shmid_Xcurscr %d shmkey_Xcurscr %d SP->lines %d "
 | |
|              "SP->cols %d\n", XCLOGMSG, shmid_Xcurscr,
 | |
|              shmkey_Xcurscr, SP->lines, SP->cols));
 | |
| 
 | |
|     Xcurscr = (unsigned char*)shmat(shmid_Xcurscr, 0, 0);
 | |
|     xc_atrtab = (short *)(Xcurscr + XCURSCR_ATRTAB_OFF);
 | |
| 
 | |
|     SP->resized = FALSE;
 | |
| 
 | |
|     return OK;
 | |
| }
 | |
| 
 | |
| void PDC_reset_prog_mode(void)
 | |
| {
 | |
|     PDC_LOG(("PDC_reset_prog_mode() - called.\n"));
 | |
| }
 | |
| 
 | |
| void PDC_reset_shell_mode(void)
 | |
| {
 | |
|     PDC_LOG(("PDC_reset_shell_mode() - called.\n"));
 | |
| }
 | |
| 
 | |
| void PDC_restore_screen_mode(int i)
 | |
| {
 | |
| }
 | |
| 
 | |
| void PDC_save_screen_mode(int i)
 | |
| {
 | |
| }
 | |
| 
 | |
| void PDC_init_pair(short pair, short fg, short bg)
 | |
| {
 | |
|     xc_atrtab[pair * 2] = fg;
 | |
|     xc_atrtab[pair * 2 + 1] = bg;
 | |
| }
 | |
| 
 | |
| int PDC_pair_content(short pair, short *fg, short *bg)
 | |
| {
 | |
|     *fg = xc_atrtab[pair * 2];
 | |
|     *bg = xc_atrtab[pair * 2 + 1];
 | |
| 
 | |
|     return OK;
 | |
| }
 | |
| 
 | |
| bool PDC_can_change_color(void)
 | |
| {
 | |
|     return TRUE;
 | |
| }
 | |
| 
 | |
| int PDC_color_content(short color, short *red, short *green, short *blue)
 | |
| {
 | |
|     XColor *tmp = (XColor *)(Xcurscr + XCURSCR_XCOLOR_OFF);
 | |
| 
 | |
|     tmp->pixel = color;
 | |
| 
 | |
|     XCursesInstructAndWait(CURSES_GET_COLOR);
 | |
| 
 | |
|     *red = ((double)(tmp->red) * 1000 / 65535) + 0.5;
 | |
|     *green = ((double)(tmp->green) * 1000 / 65535) + 0.5;
 | |
|     *blue = ((double)(tmp->blue) * 1000 / 65535) + 0.5;
 | |
| 
 | |
|     return OK;
 | |
| }
 | |
| 
 | |
| int PDC_init_color(short color, short red, short green, short blue)
 | |
| {
 | |
|     XColor *tmp = (XColor *)(Xcurscr + XCURSCR_XCOLOR_OFF);
 | |
| 
 | |
|     tmp->pixel = color;
 | |
| 
 | |
|     tmp->red = ((double)red * 65535 / 1000) + 0.5;
 | |
|     tmp->green = ((double)green * 65535 / 1000) + 0.5;
 | |
|     tmp->blue = ((double)blue * 65535 / 1000) + 0.5;
 | |
| 
 | |
|     XCursesInstructAndWait(CURSES_SET_COLOR);
 | |
| 
 | |
|     return OK;
 | |
| }
 |