2
0
mirror of https://github.com/xcat2/xNBA.git synced 2024-12-14 07:11:32 +00:00

initial check in

This commit is contained in:
Dan Lynch 2006-06-21 10:20:39 +00:00
parent 3a660f9b25
commit 3994688804
2 changed files with 179 additions and 0 deletions

View File

@ -0,0 +1,26 @@
#include <curses.h>
#include "core.h"
#include "cursor.h"
/** @file
*
* MuCurses printing functions (no cursor advance)
*
*/
/**
* Add string of single-byte characters and renditions to a window
*
* @v *win window to be rendered in
* @v *chstr pointer to first chtype in "string"
* @v n max number of chars from chstr to render
* @ret rc return status code
*/
int waddchnstr ( WINDOW *win, const chtype *chstr, int n ) {
struct cursor_pos pos;
_store_curs_pos( win, &pos );
_wputchstr( win, chstr, NOWRAP, n );
_restore_curs_pos( win, &pos );
return OK;
}

153
src/hci/mucurses/windows.c Normal file
View File

@ -0,0 +1,153 @@
#include <curses.h>
#include <stddef.h>
#include <malloc.h>
#include "core.h"
/** @file
*
* MuCurses windows instance functions
*
*/
/**
* Delete a window
*
* @v *win pointer to window being deleted
* @ret rc return status code
*/
int delwin ( WINDOW *win ) {
if ( win == NULL )
return ERR;
/* I think we should blank the region covered by the window -
ncurses doesn't do this, but they have a buffer, so they
may just be deleting from an offscreen context whereas we
are guaranteed to be deleting something onscreen */
wmove( win, 0, 0 );
chtype killch = (chtype)' ';
do {
_wputch( win, killch, WRAP );
} while ( win->curs_x + win->curs_y );
free( win );
wmove ( stdscr, 0, 0 );
return OK;
}
/**
* Create a new derived window
*
* @v parent parent window
* @v nlines window height
* @v ncols window width
* @v begin_y window y origin (relative to parent)
* @v begin_x window x origin (relative to parent)
* @ret ptr return pointer to child window
*/
WINDOW *derwin ( WINDOW *parent, int nlines, int ncols,
int begin_y, int begin_x ) {
WINDOW *child;
if ( parent == NULL )
return NULL;
if ( ( (unsigned)ncols > parent->width ) ||
( (unsigned)nlines > parent->height ) )
return NULL;
child = malloc( sizeof( WINDOW ) );
child->ori_y = parent->ori_y + begin_y;
child->ori_x = parent->ori_x + begin_x;
child->height = nlines;
child->width = ncols;
child->parent = parent;
child->scr = parent->scr;
return child;
}
/**
* Create a duplicate of the specified window
*
* @v orig original window
* @ret ptr pointer to duplicate window
*/
WINDOW *dupwin ( WINDOW *orig ) {
WINDOW *copy;
if ( orig == NULL )
return NULL;
copy = malloc( sizeof( WINDOW ) );
copy->scr = orig->scr;
copy->attrs = orig->attrs;
copy->ori_y = orig->ori_y;
copy->ori_x = orig->ori_x;
copy->curs_y = orig->curs_y;
copy->curs_x = orig->curs_x;
copy->height = orig->height;
copy->width = orig->width;
return copy;
}
/**
* Move window origin to specified coordinates
*
* @v *win window to move
* @v y Y position
* @v x X position
* @ret rc return status code
*/
int mvwin ( WINDOW *win, int y, int x ) {
if ( win == NULL )
return ERR;
if ( ( ( (unsigned)y + win->height ) > LINES ) ||
( ( (unsigned)x + win->width ) > COLS ) )
return ERR;
win->ori_y = y;
win->ori_x = x;
return OK;
}
/**
* Create new WINDOW
*
* @v nlines number of lines
* @v ncols number of columns
* @v begin_y column origin
* @v begin_x line origin
* @ret *win return pointer to new window
*/
WINDOW *newwin ( int nlines, int ncols, int begin_y, int begin_x ) {
WINDOW *win = malloc( sizeof(WINDOW) );
if ( ( (unsigned)( begin_y + nlines ) > stdscr->height ) &&
( (unsigned)( begin_x + ncols ) > stdscr->width ) )
return NULL;
win->ori_y = begin_y;
win->ori_x = begin_x;
win->height = nlines;
win->width = ncols;
win->scr = stdscr->scr;
win->parent = stdscr;
return win;
}
/**
* Create a new sub-window
*
* @v orig parent window
* @v nlines window height
* @v ncols window width
* @v begin_y window y origin (absolute)
* @v begin_x window x origin (absolute)
* @ret ptr return pointer to child window
*/
WINDOW *subwin ( WINDOW *parent, int nlines, int ncols,
int begin_y, int begin_x ) {
WINDOW *child;
if ( parent == NULL )
return NULL;
child = malloc( sizeof( WINDOW ) );
child = newwin( nlines, ncols, begin_y, begin_x );
child->parent = parent;
child->scr = parent->scr;
return child;
}