diff options
Diffstat (limited to 'lib/libncurses')
-rw-r--r-- | lib/libncurses/TESTS/bs.c | 1252 | ||||
-rw-r--r-- | lib/libncurses/TESTS/gdc.c | 202 | ||||
-rw-r--r-- | lib/libncurses/lib_deleteln.c | 49 | ||||
-rw-r--r-- | lib/libncurses/lib_insertln.c | 50 | ||||
-rw-r--r-- | lib/libncurses/ncurses.h | 497 | ||||
-rw-r--r-- | lib/libncurses/termcap.h | 52 |
6 files changed, 0 insertions, 2102 deletions
diff --git a/lib/libncurses/TESTS/bs.c b/lib/libncurses/TESTS/bs.c deleted file mode 100644 index 3785fcd..0000000 --- a/lib/libncurses/TESTS/bs.c +++ /dev/null @@ -1,1252 +0,0 @@ -/* - * bs.c - original author: Bruce Holloway - * salvo option by: Chuck A DeGaul - * with improved user interface, autoconfiguration and code cleanup - * by Eric S. Raymond <esr@snark.thyrsus.com> - * v1.2 with color support and minor portability fixes, November 1990 - * v2.0 featuring strict ANSI/POSIX conformance, November 1993. - */ - -#include <ncurses.h> -#include <signal.h> -#include <ctype.h> -#include <assert.h> - -#ifndef A_UNDERLINE /* BSD curses */ -#define beep() write(1,"\007",1); -#define cbreak crmode -#define saveterm savetty -#define resetterm resetty -#define nocbreak nocrmode -#define strchr index -#endif /* !A_UNDERLINE */ - -#ifdef isxdigit /* aha, must be an AT&T system... */ -#define srand(n) srand48(n) -#define rand() lrand48() -extern long lrand48(); -extern void srand48(); -#define bzero(s, n) (void)memset((char *)(s), '\0', n) -extern char *memset(); -/* - * Try this if ungetch() fails to resolve. - * - * #define ungetch ungetc - */ -#endif /* isxdigit */ - -extern unsigned sleep(); -extern char *strchr(), *strcpy(); -extern long time(); -extern void exit(); - -static bool checkplace(); - -/* - * Constants for tuning the random-fire algorithm. It prefers moves that - * diagonal-stripe the board with a stripe separation of srchstep. If - * no such preferred moves are found, srchstep is decremented. - */ -#define BEGINSTEP 3 /* initial value of srchstep */ - -/* miscellaneous constants */ -#define SHIPTYPES 5 -#define OTHER (1-turn) -#define PLAYER 0 -#define COMPUTER 1 -#define MARK_HIT 'H' -#define MARK_MISS 'o' -#define CTRLC '\003' /* used as terminate command */ -#define FF '\014' /* used as redraw command */ - -/* coordinate handling */ -#define BWIDTH 10 -#define BDEPTH 10 - -/* display symbols */ -#define SHOWHIT '*' -#define SHOWSPLASH ' ' -#define IS_SHIP(c) isupper(c) - -/* how to position us on player board */ -#define PYBASE 3 -#define PXBASE 3 -#define PY(y) (PYBASE + (y)) -#define PX(x) (PXBASE + (x)*3) -#define pgoto(y, x) (void)move(PY(y), PX(x)) - -/* how to position us on cpu board */ -#define CYBASE 3 -#define CXBASE 48 -#define CY(y) (CYBASE + (y)) -#define CX(x) (CXBASE + (x)*3) -#define cgoto(y, x) (void)move(CY(y), CX(x)) - -#define ONBOARD(x, y) (x >= 0 && x < BWIDTH && y >= 0 && y < BDEPTH) - -/* other board locations */ -#define COLWIDTH 80 -#define PROMPTLINE 21 /* prompt line */ -#define SYBASE CYBASE + BDEPTH + 3 /* move key diagram */ -#define SXBASE 63 -#define MYBASE SYBASE - 1 /* diagram caption */ -#define MXBASE 64 -#define HYBASE SYBASE - 1 /* help area */ -#define HXBASE 0 - -/* this will need to be changed if BWIDTH changes */ -static char numbers[] = " 0 1 2 3 4 5 6 7 8 9"; - -static char carrier[] = "Aircraft Carrier"; -static char battle[] = "Battleship"; -static char sub[] = "Submarine"; -static char destroy[] = "Destroyer"; -static char ptboat[] = "PT Boat"; - -static char name[40]; -static char dftname[] = "stranger"; - -/* direction constants */ -#define E 0 -#define SE 1 -#define S 2 -#define SW 3 -#define W 4 -#define NW 5 -#define N 6 -#define NE 7 -static int xincr[8] = {1, 1, 0, -1, -1, -1, 0, 1}; -static int yincr[8] = {0, 1, 1, 1, 0, -1, -1, -1}; - -/* current ship position and direction */ -static int curx = (BWIDTH / 2); -static int cury = (BDEPTH / 2); - -typedef struct -{ - char *name; /* name of the ship type */ - unsigned hits; /* how many times has this ship been hit? */ - char symbol; /* symbol for game purposes */ - char length; /* length of ship */ - char x, y; /* coordinates of ship start point */ - char dir; /* direction of `bow' */ - bool placed; /* has it been placed on the board? */ -} -ship_t; - -ship_t plyship[SHIPTYPES] = -{ - { carrier, 0, 'A', 5}, - { battle, 0, 'B', 4}, - { destroy, 0, 'D', 3}, - { sub, 0, 'S', 3}, - { ptboat, 0, 'P', 2}, -}; - -ship_t cpuship[SHIPTYPES] = -{ - { carrier, 0, 'A', 5}, - { battle, 0, 'B', 4}, - { destroy, 0, 'D', 3}, - { sub, 0, 'S', 3}, - { ptboat, 0, 'P', 2}, -}; - -/* "Hits" board, and main board. */ -static char hits[2][BWIDTH][BDEPTH], board[2][BWIDTH][BDEPTH]; - -static int turn; /* 0=player, 1=computer */ -static int plywon=0, cpuwon=0; /* How many games has each won? */ - -static int salvo, blitz, closepack; - -#define PR (void)addstr - -static void uninitgame(sig) -/* end the game, either normally or due to signal */ -int sig; -{ - clear(); - (void)refresh(); - (void)resetterm(); - (void)echo(); - (void)endwin(); - exit(0); -} - -static void announceopts() -/* announce which game options are enabled */ -{ - if (salvo || blitz || closepack) - { - (void) printw("Playing optional game ("); - if (salvo) - (void) printw("salvo, "); - else - (void) printw("nosalvo, "); - if (blitz) - (void) printw("blitz "); - else - (void) printw("noblitz, "); - if (closepack) - (void) printw("closepack)"); - else - (void) printw("noclosepack)"); - } - else - (void) printw( - "Playing standard game (noblitz, nosalvo, noclosepack)"); -} - -static void intro() -{ - extern char *getlogin(); - char *tmpname; - - srand(time(0L)+getpid()); /* Kick the random number generator */ - - (void) signal(SIGINT,uninitgame); - (void) signal(SIGINT,uninitgame); - (void) signal(SIGIOT,uninitgame); /* for assert(3) */ - if(signal(SIGQUIT,SIG_IGN) != SIG_IGN) - (void)signal(SIGQUIT,uninitgame); - - if(tmpname = getlogin()) - { - (void)strcpy(name,tmpname); - name[0] = toupper(name[0]); - } - else - (void)strcpy(name,dftname); - - (void)initscr(); -#ifdef KEY_MIN - keypad(stdscr, TRUE); -#endif /* KEY_MIN */ - (void)saveterm(); - (void)nonl(); - (void)cbreak(); - (void)noecho(); - -#ifdef PENGUIN - (void)clear(); - (void)mvaddstr(4,29,"Welcome to Battleship!"); - (void)move(8,0); - PR(" \\\n"); - PR(" \\ \\ \\\n"); - PR(" \\ \\ \\ \\ \\_____________\n"); - PR(" \\ \\ \\_____________ \\ \\/ |\n"); - PR(" \\ \\/ \\ \\/ |\n"); - PR(" \\/ \\_____/ |__\n"); - PR(" ________________/ |\n"); - PR(" \\ S.S. Penguin |\n"); - PR(" \\ /\n"); - PR(" \\___________________________________________________/\n"); - - (void) mvaddstr(22,27,"Hit any key to continue..."); (void)refresh(); - (void) getch(); -#endif /* PENGUIN */ - -#ifdef A_COLOR - start_color(); - - init_pair(COLOR_BLACK, COLOR_BLACK, COLOR_BLACK); - init_pair(COLOR_GREEN, COLOR_GREEN, COLOR_BLACK); - init_pair(COLOR_RED, COLOR_RED, COLOR_BLACK); - init_pair(COLOR_CYAN, COLOR_CYAN, COLOR_BLACK); - init_pair(COLOR_WHITE, COLOR_WHITE, COLOR_BLACK); - init_pair(COLOR_MAGENTA, COLOR_MAGENTA, COLOR_BLACK); - init_pair(COLOR_BLUE, COLOR_BLUE, COLOR_BLACK); - init_pair(COLOR_YELLOW, COLOR_YELLOW, COLOR_BLACK); -#endif /* A_COLOR */ - -} - -/* VARARGS1 */ -static void prompt(n, f, s) -/* print a message at the prompt line */ -int n; -char *f, *s; -{ - (void) move(PROMPTLINE + n, 0); - (void) clrtoeol(); - (void) printw(f, s); - (void) refresh(); -} - -static void error(s) -char *s; -{ - (void) move(PROMPTLINE + 2, 0); - (void) clrtoeol(); - if (s) - { - (void) addstr(s); - (void) beep(); - } -} - -static void placeship(b, ss, vis) -int b; -ship_t *ss; -int vis; -{ - int l; - - for(l = 0; l < ss->length; ++l) - { - int newx = ss->x + l * xincr[ss->dir]; - int newy = ss->y + l * yincr[ss->dir]; - - board[b][newx][newy] = ss->symbol; - if (vis) - { - pgoto(newy, newx); - (void) addch((chtype)ss->symbol); - } - } - ss->hits = 0; -} - -static int rnd(n) -int n; -{ - return(((rand() & 0x7FFF) % n)); -} - -static void randomplace(b, ss) -/* generate a valid random ship placement into px,py */ -int b; -ship_t *ss; -{ - register int bwidth = BWIDTH - ss->length; - register int bdepth = BDEPTH - ss->length; - - do { - ss->y = rnd(bdepth); - ss->x = rnd(bwidth); - ss->dir = rnd(2) ? E : S; - } while - (!checkplace(b, ss, FALSE)); -} - -static void initgame() -{ - int i, j, unplaced; - ship_t *ss; - - (void) clear(); - (void) mvaddstr(0,35,"BATTLESHIPS"); - (void) move(PROMPTLINE + 2, 0); - announceopts(); - - bzero(board, sizeof(char) * BWIDTH * BDEPTH * 2); - bzero(hits, sizeof(char) * BWIDTH * BDEPTH * 2); - for (i = 0; i < SHIPTYPES; i++) - { - ss = cpuship + i; - ss->x = ss->y = ss->dir = ss->hits = ss->placed = 0; - ss = plyship + i; - ss->x = ss->y = ss->dir = ss->hits = ss->placed = 0; - } - - /* draw empty boards */ - (void) mvaddstr(PYBASE - 2, PXBASE + 5, "Main Board"); - (void) mvaddstr(PYBASE - 1, PXBASE - 3,numbers); - for(i=0; i < BDEPTH; ++i) - { - (void) mvaddch(PYBASE + i, PXBASE - 3, i + 'A'); -#ifdef A_COLOR - if (has_colors()) - attron(COLOR_PAIR(COLOR_BLUE)); -#endif /* A_COLOR */ - (void) addch(' '); - for (j = 0; j < BWIDTH; j++) - (void) addstr(" . "); -#ifdef A_COLOR - attrset(0); -#endif /* A_COLOR */ - (void) addch(' '); - (void) addch(i + 'A'); - } - (void) mvaddstr(PYBASE + BDEPTH, PXBASE - 3,numbers); - (void) mvaddstr(CYBASE - 2, CXBASE + 7,"Hit/Miss Board"); - (void) mvaddstr(CYBASE - 1, CXBASE - 3, numbers); - for(i=0; i < BDEPTH; ++i) - { - (void) mvaddch(CYBASE + i, CXBASE - 3, i + 'A'); -#ifdef A_COLOR - if (has_colors()) - attron(COLOR_PAIR(COLOR_BLUE)); -#endif /* A_COLOR */ - (void) addch(' '); - for (j = 0; j < BWIDTH; j++) - (void) addstr(" . "); -#ifdef A_COLOR - attrset(0); -#endif /* A_COLOR */ - (void) addch(' '); - (void) addch(i + 'A'); - } - - (void) mvaddstr(CYBASE + BDEPTH,CXBASE - 3,numbers); - - (void) mvprintw(HYBASE, HXBASE, - "To position your ships: move the cursor to a spot, then"); - (void) mvprintw(HYBASE+1,HXBASE, - "type the first letter of a ship type to select it, then"); - (void) mvprintw(HYBASE+2,HXBASE, - "type a direction ([hjkl] or [4862]), indicating how the"); - (void) mvprintw(HYBASE+3,HXBASE, - "ship should be pointed. You may also type a ship letter"); - (void) mvprintw(HYBASE+4,HXBASE, - "followed by `r' to position it randomly, or type `R' to"); - (void) mvprintw(HYBASE+5,HXBASE, - "place all remaining ships randomly."); - - (void) mvaddstr(MYBASE, MXBASE, "Aiming keys:"); - (void) mvaddstr(SYBASE, SXBASE, "y k u 7 8 9"); - (void) mvaddstr(SYBASE+1, SXBASE, " \\|/ \\|/ "); - (void) mvaddstr(SYBASE+2, SXBASE, "h-+-l 4-+-6"); - (void) mvaddstr(SYBASE+3, SXBASE, " /|\\ /|\\ "); - (void) mvaddstr(SYBASE+4, SXBASE, "b j n 1 2 3"); - - /* have the computer place ships */ - for(ss = cpuship; ss < cpuship + SHIPTYPES; ss++) - { - randomplace(COMPUTER, ss); - placeship(COMPUTER, ss, FALSE); - } - - ss = (ship_t *)NULL; - do { - extern char *strchr(); - static char getcoord(); - char c, docked[SHIPTYPES + 2], *cp = docked; - - /* figure which ships still wait to be placed */ - *cp++ = 'R'; - for (i = 0; i < SHIPTYPES; i++) - if (!plyship[i].placed) - *cp++ = plyship[i].symbol; - *cp = '\0'; - - /* get a command letter */ - prompt(1, "Type one of [%s] to pick a ship.", docked+1); - do { - c = getcoord(PLAYER); - } while - (!strchr(docked, c)); - - if (c == 'R') - (void) ungetch('R'); - else - { - /* map that into the corresponding symbol */ - for (ss = plyship; ss < plyship + SHIPTYPES; ss++) - if (ss->symbol == c) - break; - - prompt(1, "Type one of [hjklrR] to place your %s.", ss->name); - pgoto(cury, curx); - } - - do { - c = getch(); - } while - (!strchr("hjklrR", c) || c == FF); - - if (c == FF) - { - (void)clearok(stdscr, TRUE); - (void)refresh(); - } - else if (c == 'r') - { - prompt(1, "Random-placing your %s", ss->name); - randomplace(PLAYER, ss); - placeship(PLAYER, ss, TRUE); - error((char *)NULL); - ss->placed = TRUE; - } - else if (c == 'R') - { - prompt(1, "Placing the rest of your fleet at random..."); - for (ss = plyship; ss < plyship + SHIPTYPES; ss++) - if (!ss->placed) - { - randomplace(PLAYER, ss); - placeship(PLAYER, ss, TRUE); - ss->placed = TRUE; - } - error((char *)NULL); - } - else if (strchr("hjkl8462", c)) - { - ss->x = curx; - ss->y = cury; - - switch(c) - { - case 'k': case '8': ss->dir = N; break; - case 'j': case '2': ss->dir = S; break; - case 'h': case '4': ss->dir = W; break; - case 'l': case '6': ss->dir = E; break; - } - - if (checkplace(PLAYER, ss, TRUE)) - { - placeship(PLAYER, ss, TRUE); - error((char *)NULL); - ss->placed = TRUE; - } - } - - for (unplaced = i = 0; i < SHIPTYPES; i++) - unplaced += !plyship[i].placed; - } while - (unplaced); - - turn = rnd(2); - - (void) mvprintw(HYBASE, HXBASE, - "To fire, move the cursor to your chosen aiming point "); - (void) mvprintw(HYBASE+1, HXBASE, - "and strike any key other than a motion key. "); - (void) mvprintw(HYBASE+2, HXBASE, - " "); - (void) mvprintw(HYBASE+3, HXBASE, - " "); - (void) mvprintw(HYBASE+4, HXBASE, - " "); - (void) mvprintw(HYBASE+5, HXBASE, - " "); - - (void) prompt(0, "Press any key to start..."); - (void) getch(); -} - -static int getcoord(atcpu) -int atcpu; -{ - int ny, nx, c; - - if (atcpu) - cgoto(cury,curx); - else - pgoto(cury, curx); - (void)refresh(); - for (;;) - { - if (atcpu) - { - (void) mvprintw(CYBASE + BDEPTH+1, CXBASE+11, "(%d, %c)", curx, 'A'+cury); - cgoto(cury, curx); - } - else - { - (void) mvprintw(PYBASE + BDEPTH+1, PXBASE+11, "(%d, %c)", curx, 'A'+cury); - pgoto(cury, curx); - } - - switch(c = getch()) - { - case 'k': case '8': -#ifdef KEY_MIN - case KEY_UP: -#endif /* KEY_MIN */ - ny = cury+BDEPTH-1; nx = curx; - break; - case 'j': case '2': -#ifdef KEY_MIN - case KEY_DOWN: -#endif /* KEY_MIN */ - ny = cury+1; nx = curx; - break; - case 'h': case '4': -#ifdef KEY_MIN - case KEY_LEFT: -#endif /* KEY_MIN */ - ny = cury; nx = curx+BWIDTH-1; - break; - case 'l': case '6': -#ifdef KEY_MIN - case KEY_RIGHT: -#endif /* KEY_MIN */ - ny = cury; nx = curx+1; - break; - case 'y': case '7': -#ifdef KEY_MIN - case KEY_A1: -#endif /* KEY_MIN */ - ny = cury+BDEPTH-1; nx = curx+BWIDTH-1; - break; - case 'b': case '1': -#ifdef KEY_MIN - case KEY_C1: -#endif /* KEY_MIN */ - ny = cury+1; nx = curx+BWIDTH-1; - break; - case 'u': case '9': -#ifdef KEY_MIN - case KEY_A3: -#endif /* KEY_MIN */ - ny = cury+BDEPTH-1; nx = curx+1; - break; - case 'n': case '3': -#ifdef KEY_MIN - case KEY_C3: -#endif /* KEY_MIN */ - ny = cury+1; nx = curx+1; - break; - case FF: - nx = curx; ny = cury; - (void)clearok(stdscr, TRUE); - (void)refresh(); - break; - default: - if (atcpu) - (void) mvaddstr(CYBASE + BDEPTH + 1, CXBASE + 11, " "); - else - (void) mvaddstr(PYBASE + BDEPTH + 1, PXBASE + 11, " "); - return(c); - } - - curx = nx % BWIDTH; - cury = ny % BDEPTH; - } -} - -static int collidecheck(b, y, x) -/* is this location on the selected zboard adjacent to a ship? */ -int b; -int y, x; -{ - int collide; - - /* anything on the square */ - if (collide = IS_SHIP(board[b][x][y])) - return(collide); - - /* anything on the neighbors */ - if (!closepack) - { - int i; - - for (i = 0; i < 8; i++) - { - int xend, yend; - - yend = y + yincr[i]; - xend = x + xincr[i]; - if (ONBOARD(xend, yend)) - collide += IS_SHIP(board[b][xend][yend]); - } - } - return(collide); -} - -static bool checkplace(b, ss, vis) -int b; -ship_t *ss; -int vis; -{ - int l, xend, yend; - - /* first, check for board edges */ - xend = ss->x + ss->length * xincr[ss->dir]; - yend = ss->y + ss->length * yincr[ss->dir]; - if (!ONBOARD(xend, yend)) - { - if (vis) - switch(rnd(3)) - { - case 0: - error("Ship is hanging from the edge of the world"); - break; - case 1: - error("Try fitting it on the board"); - break; - case 2: - error("Figure I won't find it if you put it there?"); - break; - } - return(0); - } - - for(l = 0; l < ss->length; ++l) - { - if(collidecheck(b, ss->y+l*yincr[ss->dir], ss->x+l*xincr[ss->dir])) - { - if (vis) - switch(rnd(3)) - { - case 0: - error("There's already a ship there"); - break; - case 1: - error("Collision alert! Aaaaaagh!"); - break; - case 2: - error("Er, Admiral, what about the other ship?"); - break; - } - return(FALSE); - } - } - return(TRUE); -} - -static int awinna() -{ - int i, j; - ship_t *ss; - - for(i=0; i<2; ++i) - { - ss = (i) ? cpuship : plyship; - for(j=0; j < SHIPTYPES; ++j, ++ss) - if(ss->length > ss->hits) - break; - if (j == SHIPTYPES) - return(OTHER); - } - return(-1); -} - -static ship_t *hitship(x, y) -/* register a hit on the targeted ship */ -int x, y; -{ - ship_t *sb, *ss; - char sym; - int oldx, oldy; - - getyx(stdscr, oldy, oldx); - sb = (turn) ? plyship : cpuship; - if(!(sym = board[OTHER][x][y])) - return((ship_t *)NULL); - for(ss = sb; ss < sb + SHIPTYPES; ++ss) - if(ss->symbol == sym) - { - if (++ss->hits < ss->length) /* still afloat? */ - return((ship_t *)NULL); - else /* sunk! */ - { - int i, j; - - if (!closepack) - for (j = -1; j <= 1; j++) - { - int bx = ss->x + j * xincr[(ss->dir + 2) % 8]; - int by = ss->y + j * yincr[(ss->dir + 2) % 8]; - - for (i = -1; i <= ss->length; ++i) - { - int x, y; - - x = bx + i * xincr[ss->dir]; - y = by + i * yincr[ss->dir]; - if (ONBOARD(x, y)) - { - hits[turn][x][y] = MARK_MISS; - if (turn % 2 == PLAYER) - { - cgoto(y, x); -#ifdef A_COLOR - if (has_colors()) - attron(COLOR_PAIR(COLOR_GREEN)); -#endif /* A_COLOR */ - (void)addch(MARK_MISS); -#ifdef A_COLOR - attrset(0); -#endif /* A_COLOR */ - } - } - } - } - - for (i = 0; i < ss->length; ++i) - { - int x = ss->x + i * xincr[ss->dir]; - int y = ss->y + i * yincr[ss->dir]; - - hits[turn][x][y] = ss->symbol; - if (turn % 2 == PLAYER) - { - cgoto(y, x); - (void) addch(ss->symbol); - } - } - - (void) move(oldy, oldx); - return(ss); - } - } - (void) move(oldy, oldx); - return((ship_t *)NULL); -} - -static int plyturn() -{ - ship_t *ss; - bool hit; - char *m; - - prompt(1, "Where do you want to shoot? "); - for (;;) - { - (void) getcoord(COMPUTER); - if (hits[PLAYER][curx][cury]) - { - prompt(1, "You shelled this spot already! Try again."); - beep(); - } - else - break; - } - hit = IS_SHIP(board[COMPUTER][curx][cury]); - hits[PLAYER][curx][cury] = hit ? MARK_HIT : MARK_MISS; - cgoto(cury, curx); -#ifdef A_COLOR - if (has_colors()) - if (hit) - attron(COLOR_PAIR(COLOR_RED)); - else - attron(COLOR_PAIR(COLOR_GREEN)); -#endif /* A_COLOR */ - (void) addch((chtype)hits[PLAYER][curx][cury]); -#ifdef A_COLOR - attrset(0); -#endif /* A_COLOR */ - - prompt(1, "You %s.", hit ? "scored a hit" : "missed"); - if(hit && (ss = hitship(curx, cury))) - { - switch(rnd(5)) - { - case 0: - m = " You sank my %s!"; - break; - case 1: - m = " I have this sinking feeling about my %s...."; - break; - case 2: - m = " My %s has gone to Davy Jones's locker!"; - break; - case 3: - m = " Glub, glub -- my %s is headed for the bottom!"; - break; - case 4: - m = " You'll pick up survivors from my my %s, I hope...!"; - break; - } - (void)printw(m, ss->name); - (void)beep(); - return(awinna() == -1); - } - return(hit); -} - -static int sgetc(s) -char *s; -{ - char *s1; - int ch; - - (void)refresh(); - for(;;) - { - ch = getch(); - if (islower(ch)) - ch = toupper(ch); - if (ch == CTRLC) - uninitgame(); - for (s1=s; *s1 && ch != *s1; ++s1) - continue; - if (*s1) - { - (void) addch((chtype)ch); - (void)refresh(); - return(ch); - } - } -} - - -static void randomfire(px, py) -/* random-fire routine -- implements simple diagonal-striping strategy */ -int *px, *py; -{ - static int turncount = 0; - static int srchstep = BEGINSTEP; - static int huntoffs; /* Offset on search strategy */ - int ypossible[BWIDTH * BDEPTH], xpossible[BWIDTH * BDEPTH], nposs; - int ypreferred[BWIDTH * BDEPTH], xpreferred[BWIDTH * BDEPTH], npref; - int x, y, i; - - if (turncount++ == 0) - huntoffs = rnd(srchstep); - - /* first, list all possible moves */ - nposs = npref = 0; - for (x = 0; x < BWIDTH; x++) - for (y = 0; y < BDEPTH; y++) - if (!hits[COMPUTER][x][y]) - { - xpossible[nposs] = x; - ypossible[nposs] = y; - nposs++; - if (((x+huntoffs) % srchstep) != (y % srchstep)) - { - xpreferred[npref] = x; - ypreferred[npref] = y; - npref++; - } - } - - if (npref) - { - i = rnd(npref); - - *px = xpreferred[i]; - *py = ypreferred[i]; - } - else if (nposs) - { - i = rnd(nposs); - - *px = xpossible[i]; - *py = ypossible[i]; - - if (srchstep > 1) - --srchstep; - } - else - { - error("No moves possible?? Help!"); - exit(1); - /*NOTREACHED*/ - } -} - -#define S_MISS 0 -#define S_HIT 1 -#define S_SUNK -1 - -static bool cpufire(x, y) -/* fire away at given location */ -int x, y; -{ - bool hit, sunk; - ship_t *ss; - - hits[COMPUTER][x][y] = (hit = (board[PLAYER][x][y])) ? MARK_HIT : MARK_MISS; - (void) mvprintw(PROMPTLINE, 0, - "I shoot at %c%d. I %s!", y + 'A', x, hit ? "hit" : "miss"); - if (sunk = (hit && (ss = hitship(x, y)))) - (void) printw(" I've sunk your %s", ss->name); - (void)clrtoeol(); - - pgoto(y, x); -#ifdef A_COLOR - if (has_colors()) - if (hit) - attron(COLOR_PAIR(COLOR_RED)); - else - attron(COLOR_PAIR(COLOR_GREEN)); -#endif /* A_COLOR */ - (void)addch((chtype)(hit ? SHOWHIT : SHOWSPLASH)); -#ifdef A_COLOR - attrset(0); -#endif /* A_COLOR */ - - return(hit ? (sunk ? S_SUNK : S_HIT) : S_MISS); -} - -/* - * This code implements a fairly irregular FSM, so please forgive the rampant - * unstructuredness below. The five labels are states which need to be held - * between computer turns. - */ -static bool cputurn() -{ -#define POSSIBLE(x, y) (ONBOARD(x, y) && !hits[COMPUTER][x][y]) -#define RANDOM_FIRE 0 -#define RANDOM_HIT 1 -#define HUNT_DIRECT 2 -#define FIRST_PASS 3 -#define REVERSE_JUMP 4 -#define SECOND_PASS 5 - static int next = RANDOM_FIRE; - static bool used[4]; - static ship_t ts; - int navail, x, y, d, n, hit = S_MISS; - - switch(next) - { - case RANDOM_FIRE: /* last shot was random and missed */ - refire: - randomfire(&x, &y); - if (!(hit = cpufire(x, y))) - next = RANDOM_FIRE; - else - { - ts.x = x; ts.y = y; - ts.hits = 1; - next = (hit == S_SUNK) ? RANDOM_FIRE : RANDOM_HIT; - } - break; - - case RANDOM_HIT: /* last shot was random and hit */ - used[E/2] = used[S/2] = used[W/2] = used[N/2] = FALSE; - /* FALLTHROUGH */ - - case HUNT_DIRECT: /* last shot hit, we're looking for ship's long axis */ - for (d = navail = 0; d < 4; d++) - { - x = ts.x + xincr[d*2]; y = ts.y + yincr[d*2]; - if (!used[d] && POSSIBLE(x, y)) - navail++; - else - used[d] = TRUE; - } - if (navail == 0) /* no valid places for shots adjacent... */ - goto refire; /* ...so we must random-fire */ - else - { - for (d = 0, n = rnd(navail) + 1; n; n--) - while (used[d]) - d++; - - assert(d <= 4); - - used[d] = FALSE; - x = ts.x + xincr[d*2]; - y = ts.y + yincr[d*2]; - - assert(POSSIBLE(x, y)); - - if (!(hit = cpufire(x, y))) - next = HUNT_DIRECT; - else - { - ts.x = x; ts.y = y; ts.dir = d*2; ts.hits++; - next = (hit == S_SUNK) ? RANDOM_FIRE : FIRST_PASS; - } - } - break; - - case FIRST_PASS: /* we have a start and a direction now */ - x = ts.x + xincr[ts.dir]; - y = ts.y + yincr[ts.dir]; - if (POSSIBLE(x, y) && (hit = cpufire(x, y))) - { - ts.x = x; ts.y = y; ts.hits++; - next = (hit == S_SUNK) ? RANDOM_FIRE : FIRST_PASS; - } - else - next = REVERSE_JUMP; - break; - - case REVERSE_JUMP: /* nail down the ship's other end */ - d = ts.dir + 4; - x = ts.x + ts.hits * xincr[d]; - y = ts.y + ts.hits * yincr[d]; - if (POSSIBLE(x, y) && (hit = cpufire(x, y))) - { - ts.x = x; ts.y = y; ts.dir = d; ts.hits++; - next = (hit == S_SUNK) ? RANDOM_FIRE : SECOND_PASS; - } - else - next = RANDOM_FIRE; - break; - - case SECOND_PASS: /* kill squares not caught on first pass */ - x = ts.x + xincr[ts.dir]; - y = ts.y + yincr[ts.dir]; - if (POSSIBLE(x, y) && (hit = cpufire(x, y))) - { - ts.x = x; ts.y = y; ts.hits++; - next = (hit == S_SUNK) ? RANDOM_FIRE: SECOND_PASS; - break; - } - else - next = RANDOM_FIRE; - break; - } - - /* check for continuation and/or winner */ - if (salvo) - { - (void)refresh(); - (void)sleep(1); - } - if (awinna() != -1) - return(FALSE); - -#ifdef DEBUG - (void) mvprintw(PROMPTLINE + 2, 0, - "New state %d, x=%d, y=%d, d=%d", - next, x, y, d); -#endif /* DEBUG */ - return(hit); -} - -playagain() -{ - int j; - ship_t *ss; - - for (ss = cpuship; ss < cpuship + SHIPTYPES; ss++) - for(j = 0; j < ss->length; j++) - { - cgoto(ss->y + j * yincr[ss->dir], ss->x + j * xincr[ss->dir]); - (void)addch((chtype)ss->symbol); - } - - if(awinna()) - ++cpuwon; - else - ++plywon; - j = 18 + strlen(name); - if(plywon >= 10) - ++j; - if(cpuwon >= 10) - ++j; - (void) mvprintw(1,(COLWIDTH-j)/2, - "%s: %d Computer: %d",name,plywon,cpuwon); - - prompt(2, (awinna()) ? "Want to be humiliated again, %s [yn]? " - : "Going to give me a chance for revenge, %s [yn]? ",name); - return(sgetc("YN") == 'Y'); -} - -static void do_options(c,op) -int c; -char *op[]; -{ - register int i; - - if (c > 1) - { - for (i=1; i<c; i++) - { - switch(op[i][0]) - { - default: - case '?': - (void) fprintf(stderr, "Usage: battle [-s | -b] [-c]\n"); - (void) fprintf(stderr, "\tWhere the options are:\n"); - (void) fprintf(stderr, "\t-s : play a salvo game\n"); - (void) fprintf(stderr, "\t-b : play a blitz game\n"); - (void) fprintf(stderr, "\t-c : ships may be adjacent\n"); - exit(1); - break; - case '-': - switch(op[i][1]) - { - case 'b': - blitz = 1; - if (salvo == 1) - { - (void) fprintf(stderr, - "Bad Arg: -b and -s are mutually exclusive\n"); - exit(1); - } - break; - case 's': - salvo = 1; - if (blitz == 1) - { - (void) fprintf(stderr, - "Bad Arg: -s and -b are mutually exclusive\n"); - exit(1); - } - break; - case 'c': - closepack = 1; - break; - default: - (void) fprintf(stderr, - "Bad arg: type \"%s ?\" for usage message\n", op[0]); - exit(1); - } - } - } - } -} - -static int scount(who) -int who; -{ - register int i, shots; - register ship_t *sp; - - if (who) - sp = cpuship; /* count cpu shots */ - else - sp = plyship; /* count player shots */ - - for (i=0, shots = 0; i < SHIPTYPES; i++, sp++) - { - if (sp->hits >= sp->length) - continue; /* dead ship */ - else - shots++; - } - return(shots); -} - -main(argc, argv) -int argc; -char *argv[]; -{ - do_options(argc, argv); - - intro(); - do { - initgame(); - while(awinna() == -1) - { - if (!blitz) - { - if (!salvo) - { - if(turn) - (void) cputurn(); - else - (void) plyturn(); - } - else - { - register int i; - - i = scount(turn); - while (i--) - { - if (turn) - { - if (cputurn() && awinna() != -1) - i = 0; - } - else - { - if (plyturn() && awinna() != -1) - i = 0; - } - } - } - } - else - while(turn ? cputurn() : plyturn()) - continue; - turn = OTHER; - } - } while - (playagain()); - uninitgame(); - /*NOTREACHED*/ -} - -/* bs.c ends here */ diff --git a/lib/libncurses/TESTS/gdc.c b/lib/libncurses/TESTS/gdc.c deleted file mode 100644 index 84bd651..0000000 --- a/lib/libncurses/TESTS/gdc.c +++ /dev/null @@ -1,202 +0,0 @@ -/* - * Grand digital clock for curses compatible terminals - * Usage: gdc [-s] [n] -- run for n seconds (default infinity) - * Flags: -s: scroll - * - * modified 10-18-89 for curses (jrl) - * 10-18-89 added signal handling - */ - -#include <time.h> -#include <signal.h> -#include <ncurses.h> -#include <stdlib.h> -#ifndef NONPOSIX -#include <unistd.h> -#endif - -#define YBASE 10 -#define XBASE 10 -#define XLENGTH 54 -#define YDEPTH 5 - -/* it won't be */ -long now; /* yeah! */ -struct tm *tm; - -short disp[11] = { - 075557, 011111, 071747, 071717, 055711, - 074717, 074757, 071111, 075757, 075717, 002020 -}; -long old[6], next[6], new[6], mask; -char scrol; - -int sigtermed=0; - -int hascolor = 0; - -void set(int, int); -void standt(int); -void movto(int, int); - -void sighndl(signo) -int signo; -{ - signal(signo, sighndl); - sigtermed=signo; -} - -int -main(argc, argv) -int argc; -char **argv; -{ -long t, a; -int i, j, s, k; -int n = 0; - - signal(SIGINT,sighndl); - signal(SIGTERM,sighndl); - signal(SIGKILL,sighndl); - - initscr(); - cbreak(); - noecho(); - - hascolor = has_colors(); - - if(hascolor) { - start_color(); - init_pair(1, COLOR_BLACK, COLOR_RED); - init_pair(2, COLOR_RED, COLOR_BLACK); - init_pair(3, COLOR_WHITE, COLOR_BLACK); - attrset(COLOR_PAIR(2)); - } - - clear(); - refresh(); - while(--argc > 0) { - if(**++argv == '-') - scrol = 1; - else - n = atoi(*argv); - } - - if(hascolor) { - attrset(COLOR_PAIR(3)); - - mvaddch(YBASE - 1, XBASE - 1, ACS_ULCORNER); - hline(ACS_HLINE, XLENGTH); - mvaddch(YBASE - 1, XBASE + XLENGTH, ACS_URCORNER); - - mvaddch(YBASE + YDEPTH, XBASE - 1, ACS_LLCORNER); - hline(ACS_HLINE, XLENGTH); - mvaddch(YBASE + YDEPTH, XBASE + XLENGTH, ACS_LRCORNER); - - move(YBASE, XBASE - 1); - vline(ACS_VLINE, YDEPTH); - - move(YBASE, XBASE + XLENGTH); - vline(ACS_VLINE, YDEPTH); - - attrset(COLOR_PAIR(2)); - } - do { - mask = 0; - time(&now); - tm = localtime(&now); - set(tm->tm_sec%10, 0); - set(tm->tm_sec/10, 4); - set(tm->tm_min%10, 10); - set(tm->tm_min/10, 14); - set(tm->tm_hour%10, 20); - set(tm->tm_hour/10, 24); - set(10, 7); - set(10, 17); - for(k=0; k<6; k++) { - if(scrol) { - for(i=0; i<5; i++) - new[i] = (new[i]&~mask) | (new[i+1]&mask); - new[5] = (new[5]&~mask) | (next[k]&mask); - } else - new[k] = (new[k]&~mask) | (next[k]&mask); - next[k] = 0; - for(s=1; s>=0; s--) { - standt(s); - for(i=0; i<6; i++) { - if((a = (new[i]^old[i])&(s ? new : old)[i]) != 0) { - for(j=0,t=1<<26; t; t>>=1,j++) { - if(a&t) { - if(!(a&(t<<1))) { - movto(YBASE + i, XBASE + 2*j); - } - addstr(" "); - } - } - } - if(!s) { - old[i] = new[i]; - } - } - if(!s) { - refresh(); - } - } - } - movto(6, 0); - refresh(); - sleep(1); - if (sigtermed) { - standend(); - clear(); - refresh(); - endwin(); - fprintf(stderr, "gdc terminated by signal %d\n", sigtermed); - exit(1); - } - } while(--n); - standend(); - clear(); - refresh(); - endwin(); - return(0); -} - -void -set(int t, int n) -{ -int i, m; - - m = 7<<n; - for(i=0; i<5; i++) { - next[i] |= ((disp[t]>>(4-i)*3)&07)<<n; - mask |= (next[i]^old[i])&m; - } - if(mask&m) - mask |= m; -} - -void -standt(int on) -{ - if (on) { - if(hascolor) { - attron(COLOR_PAIR(1)); - } else { - attron(A_STANDOUT); - } - } else { - if(hascolor) { - attron(COLOR_PAIR(2)); - } else { - attroff(A_STANDOUT); - } - } -} - -void -movto(int line, int col) -{ - move(line, col); -} - diff --git a/lib/libncurses/lib_deleteln.c b/lib/libncurses/lib_deleteln.c deleted file mode 100644 index 054b99f..0000000 --- a/lib/libncurses/lib_deleteln.c +++ /dev/null @@ -1,49 +0,0 @@ - -/* This work is copyrighted. See COPYRIGHT.OLD & COPYRIGHT.NEW for * -* details. If they are missing then this copy is in violation of * -* the copyright conditions. */ - -/* -** lib_deleteln.c -** -** The routine wdeleteln(). -** -*/ - -#include "curses.priv.h" -#include <nterm.h> - -int wdeleteln(WINDOW *win) -{ -chtype *end, *temp; -int y, touched = 0; - - T(("wdeleteln(%x) called", win)); - - temp = win->_line[win->_cury]; - - if (win->_idlok && (delete_line != NULL)) { - wrefresh(win); - putp(delete_line); - touched = 1; - } - - for (y = win->_cury; y < win->_regbottom; y++) { - win->_line[y] = win->_line[y+1]; - - if (!touched) { - win->_firstchar[y] = 0; - win->_lastchar[y] = win->_maxx; - } - } - - win->_line[win->_regbottom] = temp; - if (!touched) { - win->_firstchar[win->_regbottom] = 0; - win->_lastchar[win->_regbottom] = win->_maxx; - } - - for (end = &(temp[win->_maxx]); temp <= end; ) - *temp++ = ' '; - return OK; -} diff --git a/lib/libncurses/lib_insertln.c b/lib/libncurses/lib_insertln.c deleted file mode 100644 index 4a39ce0..0000000 --- a/lib/libncurses/lib_insertln.c +++ /dev/null @@ -1,50 +0,0 @@ - -/* This work is copyrighted. See COPYRIGHT.OLD & COPYRIGHT.NEW for * -* details. If they are missing then this copy is in violation of * -* the copyright conditions. */ - -/* -** lib_insertln.c -** -** The routine winsertln(). -** -*/ - -#include "curses.priv.h" -#include <nterm.h> - -int winsertln(WINDOW *win) -{ -chtype *temp, *end; -int y, touched = 0; - - T(("winsertln(%x) called", win)); - - temp = win->_line[win->_regbottom]; - - if (win->_idlok && (insert_line != NULL)) { - wrefresh(win); - putp(insert_line); - touched = 1; - } - - if (!touched) { - win->_firstchar[win->_cury] = 0; - win->_lastchar[win->_cury] = win->_maxx; - } - - for (y = win->_regbottom; y > win->_cury; y--) { - win->_line[y] = win->_line[y-1]; - - if (!touched) { - win->_firstchar[y] = 0; - win->_lastchar[y] = win->_maxx; - } - } - - win->_line[win->_cury] = temp; - - for (end = &temp[win->_maxx]; temp <= end; temp++) - *temp = ' '; - return OK; -} diff --git a/lib/libncurses/ncurses.h b/lib/libncurses/ncurses.h deleted file mode 100644 index d9f615a..0000000 --- a/lib/libncurses/ncurses.h +++ /dev/null @@ -1,497 +0,0 @@ - -/* This work is copyrighted. See COPYRIGHT.OLD & COPYRIGHT.NEW for * -* details. If they are missing then this copy is in violation of * -* the copyright conditions. */ - -#ifndef __NCURSES_H -#define __NCURSES_H -#define CURSES 1 -#define CURSES_H 1 - -#include <stdio.h> -#include <stdarg.h> -#ifndef NOTERMIOS -#include <termios.h> -#else -#include <sgtty.h> -#include <sys/ioctl.h> -#endif -#include <unctrl.h> - -#define bool char - -typedef unsigned long chtype; - -/* attributes */ -#define A_ATTRIBUTES 0xffffff00 -#define A_NORMAL 0x00000000 -#define A_STANDOUT 0x00010000 -#define A_UNDERLINE 0x00020000 -#define A_REVERSE 0x00040000 -#define A_BLINK 0x00080000 -#define A_DIM 0x00100000 -#define A_BOLD 0x00200000 -#define A_ALTCHARSET 0x00400000 -#define A_INVIS 0x00800000 -#define A_PROTECT 0x01000000 -#define A_CHARTEXT 0x000000ff -#define A_COLOR 0x0000ff00 -#define COLOR_PAIR(n) (n << 8) -#define PAIR_NUMBER(a) ((a & A_COLOR) >> 8) - -/* colors */ -extern int COLORS; -extern int COLOR_PAIRS; -extern unsigned char color_pairs[]; - -#define COLOR_BLACK 0 -#define COLOR_RED 1 -#define COLOR_GREEN 2 -#define COLOR_YELLOW 3 -#define COLOR_BLUE 4 -#define COLOR_MAGENTA 5 -#define COLOR_CYAN 6 -#define COLOR_WHITE 7 - -/* line graphics */ - -extern chtype acs_map[]; - - -#define ACS_ULCORNER (acs_map['l']) -#define ACS_LLCORNER (acs_map['m']) -#define ACS_URCORNER (acs_map['k']) -#define ACS_LRCORNER (acs_map['j']) -#define ACS_RTEE (acs_map['u']) -#define ACS_LTEE (acs_map['t']) -#define ACS_BTEE (acs_map['v']) -#define ACS_TTEE (acs_map['w']) -#define ACS_HLINE (acs_map['q']) -#define ACS_VLINE (acs_map['x']) -#define ACS_PLUS (acs_map['n']) -#define ACS_S1 (acs_map['o']) /* scan line 1 */ -#define ACS_S9 (acs_map['s']) /* scan line 9 */ -#define ACS_DIAMOND (acs_map['`']) /* diamond */ -#define ACS_CKBOARD (acs_map['a']) /* checker board (stipple) */ -#define ACS_DEGREE (acs_map['f']) /* degree symbol */ -#define ACS_PLMINUS (acs_map['g']) /* plus/minus */ -#define ACS_BULLET (acs_map['~']) /* bullet */ -#define ACS_LARROW (acs_map[',']) /* arrow pointing left */ -#define ACS_RARROW (acs_map['+']) /* arrow pointing right */ -#define ACS_DARROW (acs_map['.']) /* arrow pointing down */ -#define ACS_UARROW (acs_map['-']) /* arrow pointing up */ -#define ACS_BOARD (acs_map['h']) /* board of squares */ -#define ACS_LANTERN (acs_map['I']) /* lantern symbol */ -#define ACS_BLOCK (acs_map['0']) /* solid square block */ - -#ifndef TRUE -# define TRUE (1) -# define FALSE (0) -#endif - -#define ERR (-1) -#define OK (0) - -#define _SUBWIN 0x01 -#define _ENDLINE 0x02 -#define _FULLWIN 0x04 -#define _SCROLLWIN 0x08 -#define _ISPAD 0x10 -#define _HASMOVED 0x20 - -#define _NOCHANGE -1 - -typedef struct screen SCREEN; -typedef struct _win_st WINDOW; - -struct _win_st { - short _cury, _curx; /* current cursor position */ - short _maxy, _maxx; /* maximum values of x and y NOT the screen dimensions */ - short _begy, _begx; - short _flags; - chtype _attrs; - chtype _bkgd; - - /* The following should be consolidated into one bitset */ - bool _notimeout; - bool _use_idc; - bool _clear; - bool _leave; - bool _scroll; - bool _idlok; - bool _immed; - bool _sync; - bool _use_keypad; /* 0=no, 1=yes */ - bool _use_meta; /* T=use the meta key */ - - int _delay; /* 0 = nodelay - <0 = blocking - >0 = delay */ - chtype **_line; - short *_firstchar; /* First changed character in the line */ - short *_lastchar; /* Last changed character in the line */ - short _regtop; /* Top and bottom of scrolling region */ - short _regbottom; - int _parx; - int _pary; - WINDOW *_parent; /* parent if a sub-window */ -}; - -extern WINDOW *stdscr, *curscr, *newscr; - -extern int LINES, COLS; - -#ifdef __cplusplus -extern "C" { -#endif - -extern char ttytype[]; /* needed for backward compatibility */ - -extern int tigetflag(char *); -extern int tigetnum(char *); -extern char *tigetstr(char *); - -/* Debugging : use with libdcurses.a */ - -extern void _init_trace(void); -extern void _tracef(char *, ...); -extern char *_traceattr(int mode); -extern void traceon(void); -extern void traceoff(void); - -/* function prototypes */ - -extern int baudrate(void); -extern int beep(void); -extern int cbreak(void); -extern int clearok(WINDOW *,int); -extern int copywin(WINDOW *,WINDOW *,int,int,int,int,int,int,int); -extern int crmode(void); -extern int curs_set(int); -extern int def_prog_mode(void); -extern int def_shell_mode(void); -extern int delwin(WINDOW *); -extern WINDOW *derwin(WINDOW *,int,int,int,int); -extern int doupdate(void); -extern int echo(void); -extern int endwin(void); -extern char erasechar(void); -extern int flash(void); -extern int flushinp(void); -extern int idlok(WINDOW *,int); -extern int is_linetouched(WINDOW *,int); -extern int is_wintouched(WINDOW *); -extern WINDOW *initscr(void); -extern int isendwin(void); -extern char *keyname(int); -extern int keypad(WINDOW *,int); -extern char killchar(void); -extern int leaveok(WINDOW *,int); -extern char *longname(void); -extern int meta(WINDOW *,int); -extern int mvcur(int,int,int,int); -extern int mvprintw(int,int,char *,...); -extern int mvscanw(int,int,char *,...); -extern int mvwin(WINDOW *,int,int); -extern int mvwprintw(WINDOW *,int,int,char *,...); -extern int mvwscanw(WINDOW *,int,int,char *,...); -extern WINDOW *newpad(int,int); -extern SCREEN *newterm(char *,FILE *,FILE *); -extern WINDOW *newwin(int,int,int,int); -extern int nl(void); -extern int nocbreak(void); -extern int nocrmode(void); -extern int nodelay(WINDOW *,int); -extern int noecho(void); -extern int nonl(void); -extern int noraw(void); -extern int overlay(WINDOW *,WINDOW *); -extern int overwrite(WINDOW *,WINDOW *); -extern int pnoutrefresh(WINDOW *,int,int,int,int,int,int); -extern int prefresh(WINDOW *,int,int,int,int,int,int); -extern int printw(char *,...); -extern int putp(char *); -extern int raw(void); -extern int reset_prog_mode(void); -extern int reset_shell_mode(void); -extern int resetty(void); -extern int ripoffline(int line, int (*init)(WINDOW *, int)); -extern int savetty(void); -extern int scanw(char *,...); -extern int scrollok(WINDOW *,int); -extern SCREEN *set_term(SCREEN *); -extern int setupterm(char *,int,int *); -extern WINDOW *subwin(WINDOW *,int,int,int,int); -extern char *tgoto(char *,int,int); -extern int timeout(int); -extern char *tparm(char *, ...); -extern int tputs(char *,int,int (*)(char)); -extern int ungetch(int); -extern int vidattr(chtype); -extern int vidputs(chtype,int (*)(char)); -extern int vwscanw(WINDOW *,char *,va_list); -extern int vwprintw(WINDOW *,char *,va_list); -extern int waddch(WINDOW *,chtype); -extern int waddchnstr(WINDOW *,chtype *,int); -extern int waddnstr(WINDOW *,char *,int); -extern int wattron(WINDOW *,chtype); -extern int wborder(WINDOW *,chtype,chtype,chtype,chtype,chtype,chtype,chtype,chtype); -extern int wclear(WINDOW *); -extern int wclrtobot(WINDOW *); -extern int wclrtoeol(WINDOW *); -extern int wdelch(WINDOW *); -extern int werase(WINDOW *); -extern int wgetch(WINDOW *); -extern int wgetnstr(WINDOW *,char *,int maxlen); -extern int whline(WINDOW *,chtype,int); -extern int winsch(WINDOW *,chtype); -extern int winsdel(WINDOW *,int); -extern int winsnstr(WINDOW *,char *,int); -extern int wmove(WINDOW *,int,int); -extern int wnoutrefresh(WINDOW *); -extern int wprintw(WINDOW *,char *,...); -extern int redrawln(WINDOW *,int,int); -extern int wrefresh(WINDOW *); -extern int wscanw(WINDOW *,char *,...); -extern int wscrl(WINDOW *,int); -extern int wsetscrreg(WINDOW *,int,int); -extern int wtimeout(WINDOW *,int); -extern int wtouchln(WINDOW *,int,int,int); -extern int wvline(WINDOW *,chtype,int); - -extern bool can_change_color(void); -extern int color_content(short,short *,short *, short *); -extern int has_colors(void); -extern int init_color(short,short,short,short); -extern int init_pair(short,short,short); -extern int pair_content(short,short*,short*); -extern int start_color(void); - -extern int slk_init(int); -extern int slk_set(int,char *,int); -extern int slk_refresh(void); -extern int slk_noutrefresh(void); -extern char *slk_label(int); -extern int slk_clear(void); -extern int slk_restore(void); -extern int slk_touch(void); - -#ifdef __cplusplus -} -#endif - -/* - * pseudo functions - */ -#define wgetstr(w, s) wgetnstr(w, s, -1) - -#define napms(x) usleep(1000*x) -#define setterm(term) setupterm(term, 1, (int *)0) - -#define fixterm() reset_prog_mode() -#define resetterm() reset_shell_mode() -#define saveterm() def_prog_mode() -#define crmode() cbreak() -#define nocrmode() nocbreak() -#define gettmode() - -#define getyx(win,y,x) (y = (win)->_cury, x = (win)->_curx) -#define getbegyx(win,y,x) (y = (win)->_begy, x = (win)->_begx) -#define getmaxyx(win,y,x) (y = (win)->_maxy + 1, x = (win)->_maxx + 1) -#define getsyx(y,x) getyx(stdscr, y, x) -#define setsyx(y,x) (stdscr->_cury = y, stdscr->_curx = x) - -/* It seems older SYSV curses define these */ -#define getattrs(win) (win->_attrs) -#define getmaxx(win) ((win)->_maxx + 1) -#define getmaxy(win) ((win)->_maxy + 1) - -#define winch(win) ((win)->_line[(win)->_cury][(win)->_curx]) -#define wstandout(win) (wattrset(win,A_STANDOUT)) -#define wstandend(win) (wattrset(win,A_NORMAL)) -#define wattroff(win,at) ((win)->_attrs &= ~(at)) -#define wattrset(win,at) ((win)->_attrs = (at)) - -#define subpad(p,l,c,y,x) derwin(p,l,c,y,x) -#define scroll(win) wscrl(win,1) - -#define touchwin(win) wtouchln((win), 0, (win)->_maxy + 1, 1) -#define touchline(win, s, c) wtouchln((win), s, c, 1) -#define untouchwin(win) wtouchln((win), 0, (win)->_maxy + 1, 0) - -#define box(win, v, h) wborder(win, v, v, h, h, 0, 0, 0, 0) -#define border(ls, rs, ts, bs, tl, tr, bl, br) wborder(stdscr, ls, rs, ts, bs, tl, tr, bl, br) -#define hline(ch, n) whline(stdscr, ch, n) -#define vline(ch, n) wvline(stdscr, ch, n) - -#define winsstr(w, s) winsnstr(w, s, 0) -#define winsertln(w) winsdel(w, 1) -#define wdeleteln(w) winsdel(w, -1) - -#define redrawwin(w) redrawln(w, 0, w->_maxy+1) - -/* - * psuedo functions for standard screen - */ - -#define inch() winch(stdscr) -#define standout() wstandout(stdscr) -#define standend() wstandend(stdscr) -#define attron(at) wattron(stdscr,at) -#define attroff(at) wattroff(stdscr,at) -#define attrset(at) wattrset(stdscr,at) -#define addch(ch) waddch(stdscr,ch) -#define getch() wgetch(stdscr) -#define addstr(str) waddnstr(stdscr,str,-1) -#define getstr(str) wgetstr(stdscr,str) -#define move(y, x) wmove(stdscr,y,x) -#define clear() wclear(stdscr) -#define erase() werase(stdscr) -#define clrtobot() wclrtobot(stdscr) -#define clrtoeol() wclrtoeol(stdscr) -#define insertln() winsertln(stdscr) -#define deleteln() wdeleteln(stdscr) -#define refresh() wrefresh(stdscr) -#define insch(c) winsch(stdscr,c) -#define delch() wdelch(stdscr) -#define setscrreg(t,b) wsetscrreg(stdscr,t,b) -#define scrl(n) wscrl(stdscr,n) -#define timeout(delay) wtimeout(stdscr, delay) -#define waddstr(win,str) waddnstr(win,str,-1) -#define waddchstr(win,str) waddchnstr(win,str,-1) -#define addchstr(str) waddchstr(stdscr, str) -#define addchnstr(str, n) waddchnstr(stdscr, str, n) -#define insdel(n) winsdel(stdscr, n) -#define insstr(s) winsstr(stdscr, s) -#define insnstr(s, n) winsnstr(stdscr, s, n) - -/* - * mv functions -*/ - -#define mvwaddch(win,y,x,ch) (wmove(win,y,x) == ERR ? ERR : waddch(win,ch)) -#define mvwgetch(win,y,x) (wmove(win,y,x) == ERR ? ERR : wgetch(win)) -#define mvwaddchnstr(win,y,x,str,n) (wmove(win,y,x) == ERR ? ERR : waddchnstr(win,str,n)) -#define mvwaddchstr(win,y,x,str) (wmove(win,y,x) == ERR ? ERR : waddchnstr(win,str,-1)) -#define mvwaddnstr(win,y,x,str,n) (wmove(win,y,x) == ERR ? ERR : waddnstr(win,str,n)) -#define mvwaddstr(win,y,x,str) (wmove(win,y,x) == ERR ? ERR : waddnstr(win,str,-1)) -#define mvwgetstr(win,y,x,str) (wmove(win,y,x) == ERR ? ERR : wgetstr(win,str)) -#define mvwinch(win,y,x) (wmove(win,y,x) == ERR ? ERR : winch(win)) -#define mvwdelch(win,y,x) (wmove(win,y,x) == ERR ? ERR : wdelch(win)) -#define mvwinsch(win,y,x,c) (wmove(win,y,x) == ERR ? ERR : winsch(win,c)) -#define mvaddch(y,x,ch) mvwaddch(stdscr,y,x,ch) -#define mvgetch(y,x) mvwgetch(stdscr,y,x) -#define mvaddnstr(y,x,str,n) mvwaddnstr(stdscr,y,x,str,n) -#define mvaddstr(y,x,str) mvwaddstr(stdscr,y,x,str) -#define mvgetstr(y,x,str) mvwgetstr(stdscr,y,x,str) -#define mvinch(y,x) mvwinch(stdscr,y,x) -#define mvdelch(y,x) mvwdelch(stdscr,y,x) -#define mvinsch(y,x,c) mvwinsch(stdscr,y,x,c) -#define mvwinsstr(w, y, x, s) (wmove(w,y,x) == ERR ? ERR : winsstr(w,s)) -#define mvwinsnstr(w, y, x, s, n) (wmove(w,y,x) == ERR ? ERR : winsnstr(w,s,n)) -#define mvinsstr(y,x,s) mvwinsstr(stdscr,y,x,s) -#define mvinsnstr(y,x,s,n) mvwinsnstr(stdscr,y,x,s,n) - -/* Funny "characters" enabled for various special function keys for input */ -/* Whether such a key exists depend if its definition is in the terminfo entry */ - -#define KEY_MIN 0401 /* Minimum curses key */ -#define KEY_BREAK 0401 /* break key (unreliable) */ -#define KEY_DOWN 0402 /* The four arrow keys ... */ -#define KEY_UP 0403 -#define KEY_LEFT 0404 -#define KEY_RIGHT 0405 /* ... */ -#define KEY_HOME 0406 /* Home key (upward+left arrow) */ -#define KEY_BACKSPACE 0407 /* backspace (unreliable) */ -#define KEY_F0 0410 /* Function keys. Space for 64 */ -#define KEY_F(n) (KEY_F0+(n)) /* keys is reserved. */ -#define KEY_DL 0510 /* Delete line */ -#define KEY_IL 0511 /* Insert line */ -#define KEY_DC 0512 /* Delete character */ -#define KEY_IC 0513 /* Insert char or enter insert mode */ -#define KEY_EIC 0514 /* Exit insert char mode */ -#define KEY_CLEAR 0515 /* Clear screen */ -#define KEY_EOS 0516 /* Clear to end of screen */ -#define KEY_EOL 0517 /* Clear to end of line */ -#define KEY_SF 0520 /* Scroll 1 line forward */ -#define KEY_SR 0521 /* Scroll 1 line backwards (reverse) */ -#define KEY_NPAGE 0522 /* Next page */ -#define KEY_PPAGE 0523 /* Previous page */ -#define KEY_STAB 0524 /* Set tab */ -#define KEY_CTAB 0525 /* Clear tab */ -#define KEY_CATAB 0526 /* Clear all tabs */ -#define KEY_ENTER 0527 /* Enter or send (unreliable) */ -#define KEY_SRESET 0530 /* soft (partial) reset (unreliable) */ -#define KEY_RESET 0531 /* reset or hard reset (unreliable) */ -#define KEY_PRINT 0532 /* print or copy */ -#define KEY_LL 0533 /* home down or bottom (lower left) */ - -/* The keypad is arranged like this: */ -/* a1 up a3 */ -/* left b2 right */ -/* c1 down c3 */ - -#define KEY_A1 0534 /* Upper left of keypad */ -#define KEY_A3 0535 /* Upper right of keypad */ -#define KEY_B2 0536 /* Center of keypad */ -#define KEY_C1 0537 /* Lower left of keypad */ -#define KEY_C3 0540 /* Lower right of keypad */ -#define KEY_BTAB 0541 /* Back tab key */ -#define KEY_BEG 0542 /* beg(inning) key */ -#define KEY_CANCEL 0543 /* cancel key */ -#define KEY_CLOSE 0544 /* close key */ -#define KEY_COMMAND 0545 /* cmd (command) key */ -#define KEY_COPY 0546 /* copy key */ -#define KEY_CREATE 0547 /* create key */ -#define KEY_END 0550 /* end key */ -#define KEY_EXIT 0551 /* exit key */ -#define KEY_FIND 0552 /* find key */ -#define KEY_HELP 0553 /* help key */ -#define KEY_MARK 0554 /* mark key */ -#define KEY_MESSAGE 0555 /* message key */ -#define KEY_MOVE 0556 /* move key */ -#define KEY_NEXT 0557 /* next object key */ -#define KEY_OPEN 0560 /* open key */ -#define KEY_OPTIONS 0561 /* options key */ -#define KEY_PREVIOUS 0562 /* previous object key */ -#define KEY_REDO 0563 /* redo key */ -#define KEY_REFERENCE 0564 /* ref(erence) key */ -#define KEY_REFRESH 0565 /* refresh key */ -#define KEY_REPLACE 0566 /* replace key */ -#define KEY_RESTART 0567 /* restart key */ -#define KEY_RESUME 0570 /* resume key */ -#define KEY_SAVE 0571 /* save key */ -#define KEY_SBEG 0572 /* shifted beginning key */ -#define KEY_SCANCEL 0573 /* shifted cancel key */ -#define KEY_SCOMMAND 0574 /* shifted command key */ -#define KEY_SCOPY 0575 /* shifted copy key */ -#define KEY_SCREATE 0576 /* shifted create key */ -#define KEY_SDC 0577 /* shifted delete char key */ -#define KEY_SDL 0600 /* shifted delete line key */ -#define KEY_SELECT 0601 /* select key */ -#define KEY_SEND 0602 /* shifted end key */ -#define KEY_SEOL 0603 /* shifted clear line key */ -#define KEY_SEXIT 0604 /* shifted exit key */ -#define KEY_SFIND 0605 /* shifted find key */ -#define KEY_SHELP 0606 /* shifted help key */ -#define KEY_SHOME 0607 /* shifted home key */ -#define KEY_SIC 0610 /* shifted input key */ -#define KEY_SLEFT 0611 /* shifted left arrow key */ -#define KEY_SMESSAGE 0612 /* shifted message key */ -#define KEY_SMOVE 0613 /* shifted move key */ -#define KEY_SNEXT 0614 /* shifted next key */ -#define KEY_SOPTIONS 0615 /* shifted options key */ -#define KEY_SPREVIOUS 0616 /* shifted prev key */ -#define KEY_SPRINT 0617 /* shifted print key */ -#define KEY_SREDO 0620 /* shifted redo key */ -#define KEY_SREPLACE 0621 /* shifted replace key */ -#define KEY_SRIGHT 0622 /* shifted right arrow */ -#define KEY_SRSUME 0623 /* shifted resume key */ -#define KEY_SSAVE 0624 /* shifted save key */ -#define KEY_SSUSPEND 0625 /* shifted suspend key */ -#define KEY_SUNDO 0626 /* shifted undo key */ -#define KEY_SUSPEND 0627 /* suspend key */ -#define KEY_UNDO 0630 /* undo key */ -#define KEY_MAX 0777 /* Maximum curses key */ - -#endif diff --git a/lib/libncurses/termcap.h b/lib/libncurses/termcap.h deleted file mode 100644 index 68fa7e5..0000000 --- a/lib/libncurses/termcap.h +++ /dev/null @@ -1,52 +0,0 @@ -#ifndef _TERMCAP_H -#define _TERMCAP_H 1 - -#ifdef __FreeBSD__ -#include <sys/cdefs.h> -#else -#ifndef __P -#if defined(__STDC__) || defined(__cplusplus) -#define __P(protos) protos -#else -#define __P(protos) () /* traditional C preprocessor */ -#endif -#endif -#ifndef __BEGIN_DECLS -#ifdef __cplusplus -#define __BEGIN_DECLS extern "C" { -#define __END_DECLS }; -#else -#define __BEGIN_DECLS -#define __END_DECLS -#endif -#endif -#endif - -__BEGIN_DECLS - -#ifndef __FreeBSD__ -#include <sys/types.h> -#endif - -extern char PC; -extern char *UP; -extern char *BC; -#ifdef __FreeBSD__ -extern short ospeed; -#else -extern speed_t ospeed; -#endif - -extern int tgetent __P((char *, const char *)); -extern int tgetflag __P((const char *)); -extern int tgetnum __P((const char *)); -extern char *tgetstr __P((const char *, char **)); - -extern int tputs __P((const char *, int, int (*)(int))); - -extern char *tgoto __P((const char *, int, int)); -extern char *tparam __P((const char *, char *, int, ...)); - -__END_DECLS - -#endif /* _TERMCAP_H */ |