creps@silver.bacs.indiana.edu (Steve Creps) (10/31/88)
Posting-number: Volume 5, Issue 24 Submitted-by: "Steve Creps" <creps@silver.bacs.indiana.edu> Archive-name: pc-curses-1.3/Part2 #! /bin/sh # This is a shell archive. Remove anything before this line, then unpack # it by saving it into a file and typing "sh file". To overwrite existing # files, type "sh file -c". You can also feed this as standard input via # unshar, or by typing "sh <file", e.g.. If this archive is complete, you # will see the following message at the end: # "End of archive 2 (of 5)." # Contents: attrib.c boxes.c chardel.c charins.c clrtobot.c clrtoeol.c # curspriv.h linedel.c lineins.c options.c overlay.c refresh.c # setmode.c setterm.c # Wrapped by creps@silver on Fri Oct 28 17:43:07 1988 PATH=/bin:/usr/bin:/usr/ucb ; export PATH if test -f 'attrib.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'attrib.c'\" else echo shar: Extracting \"'attrib.c'\" \(3805 characters\) sed "s/^X//" >'attrib.c' <<'END_OF_FILE' X/****************************************************************/ X/* Character attribute routines of the PCcurses package */ X/* */ X/****************************************************************/ X/* This version of curses is based on ncurses, a curses version */ X/* originally written by Pavel Curtis at Cornell University. */ X/* I have made substantial changes to make it run on IBM PC's, */ X/* and therefore consider myself free make it public domain. */ X/* Bjorn Larsson (...mcvax!enea!infovax!bl) */ X/****************************************************************/ X/* 1.0: Release: 870515 */ X/* 1.2: Rcsid[] string for maintenance: 881002 */ X/* 1.3: MSC -W3, Turbo'C' -w -w-pro checkes: 881005 */ X/****************************************************************/ X X#include <curses.h> X#include <curspriv.h> X Xchar _curses_attrib_rcsid[] = "@(#)attrib.c v1.3 - 881005"; X X/****************************************************************/ X/* Wattrset() sets the attributes as specified in window 'win'. */ X/****************************************************************/ X Xvoid wattrset(win,attrs) X WINDOW *win; X int attrs; X { X win->_attrs = attrs & ATR_MSK; X } /* wattrset */ X X/****************************************************************/ X/* Wattron() sets the specified attribute(s) in window 'win'. */ X/****************************************************************/ X Xvoid wattron(win,attrs) X WINDOW *win; X int attrs; X { X win->_attrs |= (attrs & ATR_MSK); X } /* wattron */ X X/****************************************************************/ X/* Wattroff() clears the specified attribute(s) in window */ X/* 'win'. */ X/****************************************************************/ X Xvoid wattroff(win,attrs) X WINDOW *win; X int attrs; X { X win->_attrs &= (~attrs & ATR_MSK); X } /* wattroff */ X X/****************************************************************/ X/* Wstandout() starts standout mode in window 'win'. */ X/****************************************************************/ X Xvoid wstandout(win) X WINDOW *win; X { X win->_attrs = A_STANDOUT; X } /* wstandout */ X X/****************************************************************/ X/* Wstandend() clears all special attributes in window 'win'. */ X/****************************************************************/ X Xvoid wstandend(win) X WINDOW *win; X { X win->_attrs = ATR_NRM; X } /* wstandend */ X X/****************************************************************/ X/* Attrset() sets the attributes as specified in stdscr. */ X/****************************************************************/ X Xvoid attrset(attrs) X int attrs; X { X stdscr->_attrs = attrs & ATR_MSK; X } /* attrset */ X X/****************************************************************/ X/* Attron() sets the specified attribute(s) in stdscr. */ X/****************************************************************/ X Xvoid attron(attrs) X int attrs; X { X stdscr->_attrs |= (attrs & ATR_MSK); X } /* attron */ X X/****************************************************************/ X/* Attroff() clears the specified attribute(s) in stdscr. */ X/****************************************************************/ X Xvoid attroff(attrs) X int attrs; X { X stdscr->_attrs &= (~attrs & ATR_MSK); X } /* attroff */ X X/****************************************************************/ X/* Standout() starts standout mode in stdscr. */ X/****************************************************************/ X Xvoid standout() X { X stdscr->_attrs = A_STANDOUT; X } /* standout */ X X/****************************************************************/ X/* Standend() clears all special attributes in stdscr. */ X/****************************************************************/ X Xvoid standend() X { X stdscr->_attrs = ATR_NRM; X } /* standend */ END_OF_FILE if test 3805 -ne `wc -c <'attrib.c'`; then echo shar: \"'attrib.c'\" unpacked with wrong size! fi # end of 'attrib.c' fi if test -f 'boxes.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'boxes.c'\" else echo shar: Extracting \"'boxes.c'\" \(4197 characters\) sed "s/^X//" >'boxes.c' <<'END_OF_FILE' X/****************************************************************/ X/* Box() routines of the PCcurses package */ X/* */ X/****************************************************************/ X/* This version of curses is based on ncurses, a curses version */ X/* originally written by Pavel Curtis at Cornell University. */ X/* I have made substantial changes to make it run on IBM PC's, */ X/* and therefore consider myself free to make it public domain. */ X/* Bjorn Larsson (...mcvax!enea!infovax!bl) */ X/****************************************************************/ X/* 1.0: Release: 870515 */ X/* 1.2: Max limits off by 1. Fixed thanks to S. Creps: 881002 */ X/* 1.3: MSC '-W3', Turbo'C' '-w -w-pro' checks. Support */ X/* for border(), wborder() functions: 881005 */ X/****************************************************************/ X X#include <curses.h> X#include <curspriv.h> X Xchar _curses_boxes_rcsid[] = "@(#)boxes.c v1.3 - 881005"; X X/****************************************************************/ X/* wbox(win,ymin,xmin,ymax,xmax,v,h) draws a box in window */ X/* 'win', enclosing the area xmin-xmax and ymin-xmax. If */ X/* xmax and/or ymax is 0, the window max value is used. 'v' and */ X/* 'h' are the vertical and horizontal characters to use. If */ X/* 'v' and 'h' are PC grapics lines, wbox will make the corners */ X/* in a pretty way. */ X/****************************************************************/ X Xint wbox(win,ymin,xmin,ymax,xmax,v,h) X WINDOW *win; X int ymin; X int xmin; X int ymax; X int xmax; X char v; X char h; X { X static int l, r, t, b, tl, tr, bl,br; /* border chars */ X int i; X X if (ymax == 0) X ymax = win->_maxy - 1; X if (xmax == 0) X xmax = win->_maxx - 1; X X if (ymin >= win->_maxy || ymax > win->_maxy || X xmin >= win->_maxx || xmax > win->_maxx || X ymin >= ymax || xmin >= xmax X ) X return(ERR); X X l = r = v & 0xff; /* get rid of sign-extended int */ X t = b = h & 0xff; X tl = tr = bl = br = v; /* default same as vertical */ X X if (l == 0xba) /* vertical double bars */ X { X if (t == 0xcd) /* horizontal too? */ X {tl=0xc9;tr=0xbb;bl=0xc8;br=0xbc;}/* use double bar corners */ X else X {tl=0xd6;tr=0xb7;bl=0xd3;br=0xbd;}/* use hor-s vert-d corners */ X } /* if */ X X if (l == 0xb3) /* vertical single bars */ X { X if (t == 0xcd) X {tl=0xd5;tr=0xb8;bl=0xd4;br=0xbe;}/* horizontal double bars */ X else X {tl=0xda;tr=0xbf;bl=0xc0;br=0xd9;}/* use hor-s vert-s bars */ X } /* if */ X X if (win->_borderchars[0]) /* border() settings override parms */ X l = win->_borderchars[0]; X if (win->_borderchars[3]) X r = win->_borderchars[1]; X if (win->_borderchars[3]) X t = win->_borderchars[2]; X if (win->_borderchars[3]) X b = win->_borderchars[3]; X if (win->_borderchars[4]) X tl = win->_borderchars[4]; X if (win->_borderchars[5]) X tr = win->_borderchars[5]; X if (win->_borderchars[6]) X bl = win->_borderchars[6]; X if (win->_borderchars[7]) X br = win->_borderchars[7]; X X for (i = xmin+1;i <= xmax-1;i++) X { X win->_line[ymin][i] = t | win->_attrs; X win->_line[ymax][i] = b | win->_attrs; X } X for (i = ymin+1;i <= ymax-1;i++) X { X win->_line[i][xmin] = l | win->_attrs; X win->_line[i][xmax] = r | win->_attrs; X } X win->_line[ymin][xmin] = tl | win->_attrs; X win->_line[ymin][xmax] = tr | win->_attrs; X win->_line[ymax][xmin] = bl | win->_attrs; X win->_line[ymax][xmax] = br | win->_attrs; X X for (i=ymin; i <= ymax ; i++) X { X if (win->_minchng[i] == _NO_CHANGE) X { X win->_minchng[i] = xmin; X win->_maxchng[i] = xmax; X } /* if */ X else X { X win->_minchng[i] = min(win->_minchng[i], xmin); X win->_maxchng[i] = max(win->_maxchng[i], xmax); X } /* else */ X } /* for */ X return(OK); X } /* box */ X X/****************************************************************/ X/* box(win,v,h) draws a box around window window 'win'. 'v' and */ X/* 'h' are the vertical and horizontal characters to use. */ X/****************************************************************/ X Xvoid box(win,v,h) X WINDOW *win; X char v; X char h; X { X wbox(win,0,0,0,0,v,h); X } /* box */ END_OF_FILE if test 4197 -ne `wc -c <'boxes.c'`; then echo shar: \"'boxes.c'\" unpacked with wrong size! fi # end of 'boxes.c' fi if test -f 'chardel.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'chardel.c'\" else echo shar: Extracting \"'chardel.c'\" \(3106 characters\) sed "s/^X//" >'chardel.c' <<'END_OF_FILE' X/****************************************************************/ X/* Wdelch() routine of the PCcurses package */ X/* */ X/****************************************************************/ X/* This version of curses is based on ncurses, a curses version */ X/* originally written by Pavel Curtis at Cornell University. */ X/* I have made substantial changes to make it run on IBM PC's, */ X/* and therefore consider myself free to make it public domain. */ X/* Bjorn Larsson (...mcvax!enea!infovax!bl) */ X/****************************************************************/ X/* 1.0: Release: 870515 */ X/* 1.2: Max limits off by 1. Fixed thanks to S. Creps: 881002 */ X/* 1.3: MSC -W3, Turbo'C' -w -w-pro checkes: 881005 */ X/****************************************************************/ X X#include <curses.h> X#include <curspriv.h> X Xchar _curses_chardel_rcsid[] = "@(#)chardel.c v1.3 - 881005"; X X/****************************************************************/ X/* Wdelch() deletes the character at the window cursor, and the */ X/* characters to the right of it are shifted left, inserting a */ X/* space at the last position of the line. */ X/****************************************************************/ X Xint wdelch(win) X WINDOW *win; X { X int *temp1; X int *temp2; X int *end; X short y = win->_cury; X short x = win->_curx; X short maxx = win->_maxx - 1; X X end = &win->_line[y][maxx]; X temp1 = &win->_line[y][x]; X temp2 = temp1 + 1; X while (temp1 < end) X *temp1++ = *temp2++; X *temp1 = ' ' | (win->_attrs & ATR_MSK); X win->_maxchng[y] = maxx; X if (win->_minchng[y] == _NO_CHANGE || win->_minchng[y] > x) X win->_minchng[y] = x; X return(OK); X } /* wdelch */ X X/****************************************************************/ X/* Delch() deletes the character at the stdscr cursor, and the */ X/* characters to the right of it are shifted left, inserting a */ X/* space at the last position of the line. */ X/****************************************************************/ X Xint delch() X { X return(wdelch(stdscr)); X } /* delch */ X X/****************************************************************/ X/* Mvdelch() moves the stdscr cursor to a new position, then */ X/* deletes the character at the stdscr cursor, and the charac- */ X/* ters to the right of it are shifted left, inserting a space */ X/* at the last position of the line. */ X/****************************************************************/ X Xint mvdelch(y,x) X int y; X int x; X { X if (wmove(stdscr,y,x) == ERR) X return(ERR); X return(wdelch(stdscr)); X } /* mvdelch */ X X/****************************************************************/ X/* Mvwdelch() moves the cursor of window 'win' to a new posi- */ X/* tion, then deletes the character at the stdscr cursor, and */ X/* the characters to the right of it are shifted left, inser- */ X/* ting a space at the last position of the line. */ X/****************************************************************/ X Xint mvwdelch(win,y,x) X WINDOW *win; X int y; X int x; X { X if (wmove(win,y,x) == ERR) X return(ERR); X return(wdelch(win)); X } /* mvwdelch */ END_OF_FILE if test 3106 -ne `wc -c <'chardel.c'`; then echo shar: \"'chardel.c'\" unpacked with wrong size! fi # end of 'chardel.c' fi if test -f 'charins.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'charins.c'\" else echo shar: Extracting \"'charins.c'\" \(5462 characters\) sed "s/^X//" >'charins.c' <<'END_OF_FILE' X/****************************************************************/ X/* Winsch() routine of the PCcurses package */ X/* */ X/****************************************************************/ X/* This version of curses is based on ncurses, a curses version */ X/* originally written by Pavel Curtis at Cornell University. */ X/* I have made substantial changes to make it run on IBM PC's, */ X/* and therefore consider myself free to make it public domain. */ X/* Bjorn Larsson (...mcvax!enea!infovax!bl) */ X/****************************************************************/ X/* 1.0: Release: 870515 */ X/* 1.1: Added 'raw' output routines (allows PC charac- */ X/* ters < 0x20 to be displayed: 880306 */ X/* 1.2: Max limits off by 1. Fixed thanks to S. Creps: 881002 */ X/* 1.3: MSC -W3, Turbo'C' -w -w-pro checkes: 881005 */ X/****************************************************************/ X X#include <curses.h> X#include <curspriv.h> X Xchar _curses_charins_rcsid[] = "@(#)charins.c v1.3 - 881005"; X X/****************************************************************/ X/* _Chins() inserts character 'c' at the cursor position in */ X/* window 'win'. If xlat is true, normal character translation */ X/* is performed; If xlat is false, the character is output 'as */ X/* is'. */ X/****************************************************************/ X Xstatic int _chins(win,c,xlat) X WINDOW *win; X char c; X bool xlat; X { X int *temp1; X int *temp2; X int *end; X int x = win->_curx; X int y = win->_cury; X int maxx = win->_maxx - 1; X X if((c < ' ') && (c == '\n' || c == '\r' || c == '\t' || c == '\b')) X return(_chadd(win,c,xlat)); X end = &win->_line[y][x]; X temp1 = &win->_line[y][maxx]; X temp2 = temp1 - 1; X if((c < ' ') && xlat) /* if CTRL-char make space for 2 */ X temp2--; X while (temp1 > end) X *temp1-- = *temp2--; X win->_maxchng[y] = maxx; X if ((win->_minchng[y] == _NO_CHANGE) || (win->_minchng[y] > x)) X win->_minchng[y] = x; X return(_chadd(win,c,xlat)); /* fixes CTRL-chars too */ X } /* _chins */ X X/****************************************************************/ X/* Insch() inserts character 'c' at the cursor position in */ X/* stdscr. The cursor is advanced. */ X/****************************************************************/ X Xint insch(c) X char c; X { X return(_chins(stdscr,c,TRUE)); X } /* insch */ X X/****************************************************************/ X/* Winsch() inserts character 'c' at the cursor position in */ X/* window 'win'. The cursor is advanced. */ X/****************************************************************/ X Xint winsch(win,c) X WINDOW *win; X char c; X { X return(_chins(win,c,TRUE)); X } /* winsch */ X X/****************************************************************/ X/* Mvinsch() moves the stdscr cursor to a new position, then */ X/* inserts character 'c' at the cursor position in stdscr. The */ X/* cursor is advanced. */ X/****************************************************************/ X Xint mvinsch(y,x,c) X int y; X int x; X char c; X { X if (wmove(stdscr,y,x) == ERR) X return(ERR); X return(_chins(stdscr,c,TRUE)); X } /* mvinsch */ X X/****************************************************************/ X/* Mvwinsch() moves the cursor of window 'win' to a new posi- */ X/* tion, then inserts character 'c' at the cursor position in */ X/* window 'win'. The cursor is advanced. */ X/****************************************************************/ X Xint mvwinsch(win,y,x,c) X WINDOW *win; X int y; X int x; X char c; X { X if (wmove(win,y,x) == ERR) X return(ERR); X return(_chins(win,c,TRUE)); X } /* mvwinsch */ X X/****************************************************************/ X/* Insrawch() inserts character 'c' at the cursor position in */ X/* stdscr. Control characters are not interpreted, and the */ X/* cursor is advanced. */ X/****************************************************************/ X Xint insrawch(c) X char c; X { X return(_chins(stdscr,c,FALSE)); X } /* insrawch */ X X/****************************************************************/ X/* Winsrawch() inserts character 'c' at the cursor position in */ X/* window 'win'. Control characters are not interpreted, and */ X/* the cursor is advanced. */ X/****************************************************************/ X Xint winsrawch(win,c) X WINDOW *win; X char c; X { X return(_chins(win,c,FALSE)); X } /* winsrawch */ X X/****************************************************************/ X/* Mvinsrawch() moves the stdscr cursor to a new position, then */ X/* inserts character 'c' at the cursor position in stdscr. */ X/* Control characters are not interpreted, and the cursor is */ X/* advanced. */ X/****************************************************************/ X Xint mvinsrawch(y,x,c) X int y; X int x; X char c; X { X if (wmove(stdscr,y,x) == ERR) X return(ERR); X return(_chins(stdscr,c,FALSE)); X } /* mvinsrawch */ X X/****************************************************************/ X/* Mvwinsrawch() moves the cursor of window 'win' to a new */ X/* position, then inserts character 'c' at the cursor position */ X/* in window 'win'. Control characters are not interpreted, and */ X/* the cursor is advanced. */ X/****************************************************************/ X Xint mvwinsrawch(win,y,x,c) X WINDOW *win; X int y; X int x; X char c; X { X if (wmove(win,y,x) == ERR) X return(ERR); X return(_chins(win,c,FALSE)); X } /* mvwinsrawch */ END_OF_FILE if test 5462 -ne `wc -c <'charins.c'`; then echo shar: \"'charins.c'\" unpacked with wrong size! fi # end of 'charins.c' fi if test -f 'clrtobot.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'clrtobot.c'\" else echo shar: Extracting \"'clrtobot.c'\" \(3336 characters\) sed "s/^X//" >'clrtobot.c' <<'END_OF_FILE' X/****************************************************************/ X/* Wclrtobot() routine of the PCcurses package */ X/* */ X/****************************************************************/ X/* This version of curses is based on ncurses, a curses version */ X/* originally written by Pavel Curtis at Cornell University. */ X/* I have made substantial changes to make it run on IBM PC's, */ X/* and therefore consider myself free to make it public domain. */ X/* Bjorn Larsson (...mcvax!enea!infovax!bl) */ X/****************************************************************/ X/* 1.0: Release: 870515 */ X/* 1.1: Renamed clrbot() to clrtobot(). Reported by */ X/* Eric Rosco: 870907 */ X/* 1.2: Max limits off by 1. Fixed thanks to S. Creps: 881002 */ X/* 1.3: MSC -W3, Turbo'C' -w -w-pro checkes: 881005 */ X/****************************************************************/ X X#include <curses.h> X#include <curspriv.h> X Xchar _curses_clrtobot_rcsid[] = "@(#)clrtobot.c v1.3 - 881005"; X X/****************************************************************/ X/* Wclrtobot() fills the right half of the cursor line of */ X/* window 'win', and all lines below it with blanks. */ X/****************************************************************/ X Xint wclrtobot(win) X WINDOW *win; X { X int y; X int minx; X static int startx; X static int *ptr; X static int *end; X static int *maxx; X static int blank; X X blank = ' ' | (win->_attrs & ATR_MSK); X startx = win->_curx; X for (y = win->_cury; y <= win->_regbottom; y++) X { X minx = _NO_CHANGE; X end = &win->_line[y][win->_maxx - 1]; X for (ptr = &win->_line[y][startx]; ptr <= end; ptr++) X { X if (*ptr != blank) X { X maxx = ptr; X if (minx == _NO_CHANGE) X minx = ptr - win->_line[y]; X *ptr = blank; X } /* if */ X } /* for */ X if (minx != _NO_CHANGE) X { X if ((win->_minchng[y] > minx) || (win->_minchng[y] == _NO_CHANGE)) X win->_minchng[y] = minx; X if (win->_maxchng[y] < maxx - win->_line[y]) X win->_maxchng[y] = maxx - win->_line[y]; X } /* if */ X startx = 0; X } /* for */ X return(OK); X } /* wclrtobot */ X X/****************************************************************/ X/* Clrtobot() fills the right half of the cursor line of */ X/* stdscr, and all lines below it with blanks. */ X/****************************************************************/ X Xint clrtobot() X { X return(wclrtobot(stdscr)); X } /* clrtobot */ X X/****************************************************************/ X/* Mvclrtobot() moves the cursor to a new position in stdscr */ X/* and fills the right half of the cursor line, and all lines */ X/* below it with blanks. */ X/****************************************************************/ X Xint mvclrtobot(y,x) X int y; X int x; X { X if (wmove(stdscr,y,x) == ERR) X return(ERR); X return(wclrtobot(stdscr)); X } /* mvclrtobot */ X X/****************************************************************/ X/* Mvwclrtobot() moves the cursor to a new position in window */ X/* 'win', and fills the right half of the cursor line, and all */ X/* lines below it with blanks. */ X/****************************************************************/ X Xint mvwclrtobot(win,y,x) X WINDOW *win; X int y; X int x; X { X if (wmove(win,y,x) == ERR) X return(ERR); X return(wclrtobot(win)); X } /* mvwclrtobot */ END_OF_FILE if test 3336 -ne `wc -c <'clrtobot.c'`; then echo shar: \"'clrtobot.c'\" unpacked with wrong size! fi # end of 'clrtobot.c' fi if test -f 'clrtoeol.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'clrtoeol.c'\" else echo shar: Extracting \"'clrtoeol.c'\" \(3119 characters\) sed "s/^X//" >'clrtoeol.c' <<'END_OF_FILE' X/****************************************************************/ X/* Wclrtoeol() routine of the PCcurses package */ X/* */ X/****************************************************************/ X/* This version of curses is based on ncurses, a curses version */ X/* originally written by Pavel Curtis at Cornell University. */ X/* I have made substantial changes to make it run on IBM PC's, */ X/* and therefore consider myself free to make it public domain. */ X/* Bjorn Larsson (...mcvax!enea!infovax!bl) */ X/****************************************************************/ X/* 1.0: Release: 870515 */ X/* 1.2: Max limits off by 1. Fixed thanks to S. Creps: 880210 */ X/* 1.3: MSC -W3, Turbo'C' -w -w-pro checkes: 881005 */ X/****************************************************************/ X X#include <curses.h> X#include <curspriv.h> X Xchar _curses_clrtoeol_rcsid[] = "@(#)clrtoeol.c v1.3 - 881005"; X X/****************************************************************/ X/* Wclrtoeol() fills the half of the cursor line to the right */ X/* of the cursor in window 'win' with blanks. */ X/****************************************************************/ X Xint wclrtoeol(win) X WINDOW *win; X { X int *maxx; X int *ptr; X int *end; X static int y; X static int x; X static int minx; X static int blank; X X y = win->_cury; X x = win->_curx; X blank = ' ' | (win->_attrs & ATR_MSK); X X end = &win->_line[y][win->_maxx - 1]; X minx = _NO_CHANGE; X maxx = &win->_line[y][x]; X for (ptr = maxx; ptr <= end; ptr++) X { X if (*ptr != blank) X { X maxx = ptr; X if (minx == _NO_CHANGE) X minx = ptr - win->_line[y]; X *ptr = blank; X } /* if */ X } /* for */ X X if (minx != _NO_CHANGE) X { X if (win->_minchng[y] > minx || win->_minchng[y] == _NO_CHANGE) X win->_minchng[y] = minx; X if (win->_maxchng[y] < maxx - win->_line[y]) X win->_maxchng[y] = maxx - win->_line[y]; X } /* if */ X return(OK); X } /* wclrtoeol */ X X/****************************************************************/ X/* Clrtoeol() fills the half of the cursor line to the right */ X/* of the cursor in stdscr with blanks. */ X/****************************************************************/ X Xint clrtoeol() X { X return(wclrtoeol(stdscr)); X } /* clrtoeol */ X X/****************************************************************/ X/* Mvclrtoeol() moves the cursor to a new position in stdscr */ X/* and fills the right half of the cursor line with blanks. */ X/****************************************************************/ X Xint mvcltoreol(y,x) X int y; X int x; X { X if (wmove(stdscr,y,x) == ERR) X return(ERR); X return(wclrtoeol(stdscr)); X } /* mvclrtoeol */ X X/****************************************************************/ X/* Mvwclrtoeol() moves the cursor to a new position in window */ X/* 'win', and fills the right half of the cursor line with */ X/* blanks. */ X/****************************************************************/ X Xint mvwclrtoeol(win,y,x) X WINDOW *win; X int y; X int x; X { X if (wmove(win,y,x) == ERR) X return(ERR); X return(wclrtoeol(win)); X } /* mvwclrtoeol */ END_OF_FILE if test 3119 -ne `wc -c <'clrtoeol.c'`; then echo shar: \"'clrtoeol.c'\" unpacked with wrong size! fi # end of 'clrtoeol.c' fi if test -f 'curspriv.h' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'curspriv.h'\" else echo shar: Extracting \"'curspriv.h'\" \(3818 characters\) sed "s/^X//" >'curspriv.h' <<'END_OF_FILE' X/****************************************************************/ X/* CURSPRIV.H */ X/* Header file for definitions and declarations for the */ X/* PCcurses package. These definitions should not be gene- */ X/* rally accessible to programmers. */ X/****************************************************************/ X/* This version of curses is based on ncurses, a curses version */ X/* originally written by Pavel Curtis at Cornell University. */ X/* I have made substantial changes to make it run on IBM PC's, */ X/* and therefore consider myself free to make it public domain. */ X/* Bjorn Larsson (...mcvax!enea!infovax!bl) */ X/****************************************************************/ X/* 1.0: Release: 870515 */ X/* 1.1: Add _chadd() for raw output routines: 880306 */ X/* 1.2: Support (by #ifdef UCMASM) for uppercase-only */ X/* assembly routine names. If UCMASM if defined, */ X/* all assembler names are #defined as upper case. */ X/* Not needed if you do "MASM /MX. Also missing */ X/* declaration of cursesscroll(). Fixes thanks to */ X/* N.D. Pentcheff: 881002 */ X/* 1.3: All modules lint-checked with MSC '-W3' and */ X/* turbo'C' '-w -w-pro' switches: 881005 */ X/****************************************************************/ X X/* window properties */ X X#define _SUBWIN 1 /* window is a subwindow */ X#define _ENDLINE 2 /* last winline is last screen line */ X#define _FULLWIN 4 /* window fills screen */ X#define _SCROLLWIN 8 /* window lwr rgt is screen lwr rgt */ X X/* Miscellaneous */ X X#define _INBUFSIZ 200 /* size of terminal input buffer */ X#define _NO_CHANGE -1 /* flags line edge unchanged */ X X#define _BREAKCHAR 0x03 /* ^C character */ X#define _DCCHAR 0x08 /* Delete Char char (BS) */ X#define _DLCHAR 0x1b /* Delete Line char (ESC) */ X#define _GOCHAR 0x11 /* ^Q character */ X#define _PRINTCHAR 0x10 /* ^P character */ X#define _STOPCHAR 0x13 /* ^S character */ X#define NUNGETCH 10 /* max # chars to ungetch() */ X X/* character mask definitions */ X X#define CHR_MSK ((int) 0x00ff) /* ASCIIZ character mask */ X#define ATR_MSK ((int) 0xff00) /* attribute mask */ X#define ATR_NRM ((int) 0x0000) /* no special attributes */ X X/* type declarations */ X Xtypedef struct X { X WINDOW *tmpwin; /* window used for updates */ X int cursrow; /* position of physical cursor */ X int curscol; X bool autocr; /* if lf -> crlf */ X bool cbreak; /* if terminal unbuffered */ X bool echo; /* if terminal echo */ X bool raw; /* if terminal raw mode */ X bool refrbrk; /* if premature refresh brk allowed */ X bool orgcbr; /* original MSDOS ^-BREAK setting */ X } cursv; X X/* External variables */ X Xextern cursv _cursvar; /* curses variables */ X X/* 'C' standard library function declarations */ X Xextern char *calloc(); Xextern char *malloc(); Xextern void free(); Xextern int sprintf(); Xextern int sscanf(); X X/* Curses internal functions, not to be used by programmers */ X X/* #Define UCMASM if your version of MASM does not support */ X/* the '/MX' switch, or if you use another assembler */ X X#ifdef UCMASM X#define _cursescattr _CURSESCATTR X#define _cursescmode _CURSESCMODE X#define _cursescursor _CURSESCURSOR X#define _cursesgcb _CURSESGCB X#define _cursesgcmode _CURSESGCMODE X#define _cursesgcols _CURSESGCOLS X#define _curseskey _CURSESKEY X#define _cursesscroll _CURSESSCROLL X#define _curseskeytst _CURSESKEYTST X#define _cursesputc _CURSESPUTC X#define _cursesscb _CURSESSCB X#endif X Xextern int _chadd(); Xextern void _cursescattr(); Xextern void _cursescmode(); Xextern void _cursescursor(); Xextern int _cursesgcb(); Xextern int _cursesgcmode(); Xextern int _cursesgcols(); Xextern int _curseskey(); Xextern bool _curseskeytst(); Xextern void _cursesscroll(); Xextern bool _cursespendch(); Xextern void _cursesputc(); Xextern void _cursesscb(); END_OF_FILE if test 3818 -ne `wc -c <'curspriv.h'`; then echo shar: \"'curspriv.h'\" unpacked with wrong size! fi # end of 'curspriv.h' fi if test -f 'linedel.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'linedel.c'\" else echo shar: Extracting \"'linedel.c'\" \(3128 characters\) sed "s/^X//" >'linedel.c' <<'END_OF_FILE' X/****************************************************************/ X/* Wdeleteln() routine of the PCcurses package */ X/* */ X/****************************************************************/ X/* This version of curses is based on ncurses, a curses version */ X/* originally written by Pavel Curtis at Cornell University. */ X/* I have made substantial changes to make it run on IBM PC's, */ X/* and therefore consider myself free to make it public domain. */ X/* Bjorn Larsson (...mcvax!enea!infovax!bl) */ X/****************************************************************/ X/* 1.0: Release: 870515 */ X/* 1.2: max limits off by 1. Fixed thanks to S. Creps: 881002 */ X/* 1.3: MSC -W3, Turbo'C' -w -w-pro checkes: 881005 */ X/****************************************************************/ X X#include <curses.h> X#include <curspriv.h> X Xchar _curses_linedel_rcsid[] = "@(#)linedel.c v1.3 - 881005"; X X/****************************************************************/ X/* Wdeleteln() deletes the line at the window cursor, and the */ X/* lines below it are shifted up, inserting a blank line at */ X/* the bottom of the window. */ X/****************************************************************/ X Xint wdeleteln(win) X WINDOW *win; X { X int *end; X int *temp; X short y; X static int blank; X X blank = ' ' | (win->_attrs & ATR_MSK); X X temp = win->_line[win->_cury]; X for (y = win->_cury; y < win->_regbottom; y++) X { X win->_line[y] = win->_line[y+1]; X win->_minchng[y] = 0; X win->_maxchng[y] = win->_maxx - 1; X } X win->_minchng[y] = 0; X win->_maxchng[y] = win->_maxx - 1; X win->_line[win->_regbottom] = temp; X for (end = &(temp[win->_maxx -1]); temp <= end;) X *temp++ = blank; X return(OK); X } /* wdeleteln */ X X/****************************************************************/ X/* Deleteln() deletes the line at the stdscr cursor, and the */ X/* lines below it are shifted up, inserting a blank line at */ X/* the bottom of stdscr. */ X/****************************************************************/ X Xint deleteln() X { X return(wdeleteln(stdscr)); X } /* deleteln */ X X/****************************************************************/ X/* Mvdeleteln() moves the cursor to a new position in stdscr, */ X/* then deletes the line at the window cursor, and the lines */ X/* below it are shifted up, inserting a blank line at the bot- */ X/* tom of stdscr. */ X/****************************************************************/ X Xint mvdeleteln(y,x) X int y; X int x; X { X if (wmove(stdscr,y,x) == ERR) X return(ERR); X return(wdeleteln(stdscr)); X } /* mvdeleteln */ X X/****************************************************************/ X/* Mvwdeleteln() moves the cursor to a new position in a win- */ X/* dow, then deletes the line at the window cursor, and the */ X/* lines below it are shifted up, inserting a blank line at */ X/* the bottom of the window. */ X/****************************************************************/ X Xint mvwdeleteln(win,y,x) X WINDOW *win; X int y; X int x; X { X if (wmove(win,y,x) == ERR) X return(ERR); X return(wdeleteln(win)); X } /* mvwdeleteln */ END_OF_FILE if test 3128 -ne `wc -c <'linedel.c'`; then echo shar: \"'linedel.c'\" unpacked with wrong size! fi # end of 'linedel.c' fi if test -f 'lineins.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'lineins.c'\" else echo shar: Extracting \"'lineins.c'\" \(3010 characters\) sed "s/^X//" >'lineins.c' <<'END_OF_FILE' X/****************************************************************/ X/* Winsertln() routine of the PCcurses package */ X/* */ X/****************************************************************/ X/* This version of curses is based on ncurses, a curses version */ X/* originally written by Pavel Curtis at Cornell University. */ X/* I have made substantial changes to make it run on IBM PC's, */ X/* and therefore consider myself free to make it public domain. */ X/* Bjorn Larsson (...mcvax!enea!infovax!bl) */ X/****************************************************************/ X/* 1.0: Release: 870515 */ X/* 1.1: Mvinsertln() and friends were misrenamed: 880305 */ X/* 1.2: Max limits off by 1. Fixed thanks to S. Creps: 881002 */ X/* 1.3: MSC -W3, Turbo'C' -w -w-pro checkes: 881005 */ X/****************************************************************/ X X#include <curses.h> X#include <curspriv.h> X Xchar _curses_lineins_rcsid[] = "@(#)lineins.c v1.3 - 881005"; X X/****************************************************************/ X/* Winsertln() inserts a blank line instead of the cursor line */ X/* in window 'win' and pushes other lines down. */ X/****************************************************************/ X Xint winsertln(win) X WINDOW *win; X { X int *temp; X int *end; X short y; X static int blank; X X blank = ' ' | (win->_attrs & ATR_MSK); X temp = win->_line[win->_regbottom]; X for (y = win->_regbottom; y > win->_cury; y--) X { X win->_line[y] = win->_line[y-1]; X win->_minchng[y] = 0; X win->_maxchng[y] = win->_maxx - 1; X } /* for */ X win->_line[win->_cury] = temp; X for (end = &temp[win->_maxx -1]; temp <= end; temp++) X *temp = blank; X win->_minchng[win->_cury] = 0; X win->_maxchng[win->_cury] = win->_maxx - 1; X return(OK); X } /* winsertln */ X X/****************************************************************/ X/* Insertln() inserts a blank line instead of the cursor line */ X/* in stdscr and pushes other lines down. */ X/****************************************************************/ X Xint insertln() X { X return(winsertln(stdscr)); X } /* insertln */ X X/****************************************************************/ X/* Mvinsertln() moves the stdscr cursor to a new positions, in- */ X/* serts a blank line instead of the cursor line and pushes */ X/* other lines down. */ X/****************************************************************/ X Xint mvinsertln(y,x) X int y; X int x; X { X if (wmove(stdscr,y,x) == ERR) X return(ERR); X return(winsertln(stdscr)); X } /* mvinsertln */ X X/****************************************************************/ X/* Mvwinsertln() moves the cursor in window 'win' to a new po- */ X/* si tions, inserts a blank line instead of the cursor line */ X/* and pushes other lines down. */ X/****************************************************************/ X Xint mvwinsertln(win,y,x) X WINDOW *win; X int y; X int x; X { X if (wmove(win,y,x) == ERR) X return(ERR); X return(winsertln(win)); X } /* mvwinsertln */ END_OF_FILE if test 3010 -ne `wc -c <'lineins.c'`; then echo shar: \"'lineins.c'\" unpacked with wrong size! fi # end of 'lineins.c' fi if test -f 'options.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'options.c'\" else echo shar: Extracting \"'options.c'\" \(4288 characters\) sed "s/^X//" >'options.c' <<'END_OF_FILE' X/****************************************************************/ X/* Idlok(), clearok(), leaveok(), scrollok(), nodelay(), key- */ X/* pad(), meta(), cursoff() and curson() routines of the */ X/* PCcurses package. */ X/* */ X/****************************************************************/ X/* This version of curses is based on ncurses, a curses version */ X/* originally written by Pavel Curtis at Cornell University. */ X/* I have made substantial changes to make it run on IBM PC's, */ X/* and therefore consider myself free to make it public domain. */ X/* Bjorn Larsson (...mcvax!enea!infovax!bl) */ X/****************************************************************/ X/* 1.0: Release: 870515 */ X/* 1.2: Rcsid[] string for maintenance: 881002 */ X/* 1.3: MSC -W3, Turbo'C' -w -w-pro checkes: 881005 */ X/****************************************************************/ X X#include <curses.h> X#include <curspriv.h> X Xchar _curses_options_rcsid[] = "@(#)option.c v1.3 - 881005"; X Xstatic bool hasold = FALSE; /* for remembering old cursor type */ Xstatic int oldmode; X X/****************************************************************/ X/* Idlok() is used to set flag for using the terminal insert/ */ X/* delete line capabilities. This is not relevant for the PC */ X/* version of curses, and thus nothing is done. */ X/****************************************************************/ X Xvoid idlok() X { X } /* idlok */ X X/****************************************************************/ X/* Clearok() marks window 'win' to cause screen clearing and */ X/* redraw the next time a refresh is done. */ X/****************************************************************/ X Xvoid clearok(win, flag) X WINDOW *win; X bool flag; X { X if (win == curscr) X _cursvar.tmpwin->_clear = flag; X else X win->_clear = flag; X } /* clearok */ X X/****************************************************************/ X/* Leaveok() marks window 'win' to allow the update routines */ X/* to leave the hardware cursor where it happens to be at the */ X/* end of update. Usually used in combination with cursoff(). */ X/****************************************************************/ X Xvoid leaveok(win, flag) X WINDOW *win; X bool flag; X { X win->_leave = flag; X } /* leaveok */ X X/****************************************************************/ X/* Scrollok() marks window 'win' to allow the scrolling region */ X/* of it to actually scroll. */ X/****************************************************************/ X Xvoid scrollok(win, flag) X WINDOW *win; X bool flag; X { X win->_scroll = flag; X } /* scrollok */ X X/****************************************************************/ X/* Nodelay() marks the window to make character input non- */ X/* waiting, i.e. if there is no character to get, -1 will be */ X/* returned. */ X/****************************************************************/ X Xvoid nodelay(win, flag) X WINDOW *win; X bool flag; X { X win->_nodelay = flag; X } /* nodelay */ X X/****************************************************************/ X/* Keypad() marks window 'win' to use the special keypad mode. */ X/****************************************************************/ X Xvoid keypad(win, flag) X WINDOW *win; X bool flag; X { X win->_keypad = flag; X } /* keypad */ X X/****************************************************************/ X/* Meta() allows use of any alternate character set allowed by */ X/* the terminal. We always allow this on the PC, so this one */ X/* does nothing. */ X/****************************************************************/ X Xvoid meta() X { X } /* meta */ X X/****************************************************************/ X/* Cursoff() turns off the hardware cursor. */ X/****************************************************************/ X Xvoid cursoff() X { X if (!hasold) X { X oldmode = _cursesgcmode(); /* get old cursor type */ X hasold = TRUE; X } X _cursescmode(31,30); /* turn it off */ X } /* cursoff */ X X/****************************************************************/ X/* Curson() turns on the hardware cursor. */ X/****************************************************************/ X Xvoid curson() X { X if (hasold) X { X _cursescmode(oldmode >> 8,oldmode); X hasold = FALSE; X } X } /* curson */ END_OF_FILE if test 4288 -ne `wc -c <'options.c'`; then echo shar: \"'options.c'\" unpacked with wrong size! fi # end of 'options.c' fi if test -f 'overlay.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'overlay.c'\" else echo shar: Extracting \"'overlay.c'\" \(3687 characters\) sed "s/^X//" >'overlay.c' <<'END_OF_FILE' X/****************************************************************/ X/* Overlay() and overwrite() functions of the PCcurses package */ X/* */ X/****************************************************************/ X/* This version of curses is based on ncurses, a curses version */ X/* originally written by Pavel Curtis at Cornell University. */ X/* I have made substantial changes to make it run on IBM PC's, */ X/* and therefore consider myself free to make it public domain. */ X/* Bjorn Larsson (...mcvax!enea!infovax!bl) */ X/****************************************************************/ X/* 1.0: Release: 870515 */ X/* 1.2: Max limits off by 1. Fixed thanks to S. Creps: 881002 */ X/* 1.3: MSC -W3, Turbo'C' -w -w-pro checkes: 881005 */ X/****************************************************************/ X X#include <curses.h> X#include <curspriv.h> X Xchar _curses_overlay_rcsid[] = "@(#)overlay.c v1.3 - 881005"; X X/****************************************************************/ X/* Overlay() overwrites 'win1' upon 'win2', with origins alig- */ X/* ned. Overlay is transparent; blanks from 'win1' are not */ X/* copied to 'win2'. */ X/****************************************************************/ X Xvoid overlay(win1, win2) X WINDOW *win1, *win2; X { X int *minchng; X int *maxchng; X int *w1ptr; X int *w2ptr; X int attrs; X int col; X int line; X int last_line; X int last_col; X X last_col = min(win1->_maxx, win2->_maxx) - 1; X last_line = min(win1->_maxy, win2->_maxy) - 1; X attrs = win2->_attrs & ATR_MSK; X minchng = win2->_minchng; X maxchng = win2->_maxchng; X X for(line = 0; line <= last_line; line++) X { X register short fc, lc; X w1ptr = win1->_line[line]; X w2ptr = win2->_line[line]; X fc = _NO_CHANGE; X for(col = 0; col <= last_col; col++) X { X if ((*w1ptr & CHR_MSK) != ' ') X { X *w2ptr = (*w1ptr & CHR_MSK) | attrs; X if (fc == _NO_CHANGE) X fc = col; X lc = col; X } /* if */ X w1ptr++; X w2ptr++; X } /* for */ X X if (*minchng == _NO_CHANGE) X { X *minchng = fc; X *maxchng = lc; X } /* if */ X else X if (fc != _NO_CHANGE) X { X if (fc < *minchng) X *minchng = fc; X if (lc > *maxchng) X *maxchng = lc; X } /* else if */ X minchng++; X maxchng++; X } /* for */ X } /* overlay */ X X/****************************************************************/ X/* Overwrite() overwrites 'win1' upon 'win2', with origins */ X/* aligned. Overwrite is non-transparent; blanks from 'win1' */ X/* are copied to 'win2'. */ X/****************************************************************/ X Xvoid overwrite(win1, win2) X WINDOW *win1, *win2; X { X int *minchng; X int *maxchng; X int *w1ptr; X int *w2ptr; X int attrs; X int col; X int line; X int last_line; X int last_col; X X last_col = min(win1->_maxx, win2->_maxx) - 1; X last_line = min(win1->_maxy, win2->_maxy) - 1; X attrs = win2->_attrs & ATR_MSK; X minchng = win2->_minchng; X maxchng = win2->_maxchng; X X for(line = 0; line <= last_line; line++) X { X register short fc, lc; X X w1ptr = win1->_line[line]; X w2ptr = win2->_line[line]; X fc = _NO_CHANGE; X X for(col = 0; col <= last_col; col++) X { X if ((*w1ptr & CHR_MSK) != (*w2ptr & CHR_MSK)) X { X *w2ptr = (*w1ptr & CHR_MSK) | attrs; X X if (fc == _NO_CHANGE) X fc = col; X lc = col; X } /* if */ X X w1ptr++; X w2ptr++; X } /* for */ X X if (*minchng == _NO_CHANGE) X { X *minchng = fc; X *maxchng = lc; X } /* if */ X else X if (fc != _NO_CHANGE) X { X if (fc < *minchng) X *minchng = fc; X if (lc > *maxchng) X *maxchng = lc; X } /* else if */ X minchng++; X maxchng++; X } /* for */ X } /* overwrite */ END_OF_FILE if test 3687 -ne `wc -c <'overlay.c'`; then echo shar: \"'overlay.c'\" unpacked with wrong size! fi # end of 'overlay.c' fi if test -f 'refresh.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'refresh.c'\" else echo shar: Extracting \"'refresh.c'\" \(3441 characters\) sed "s/^X//" >'refresh.c' <<'END_OF_FILE' X/****************************************************************/ X/* Wrefresh() and wnoutrefresh() routines of the PCcurses */ X/* package */ X/* */ X/****************************************************************/ X/* This version of curses is based on ncurses, a curses version */ X/* originally written by Pavel Curtis at Cornell University. */ X/* I have made substantial changes to make it run on IBM PC's, */ X/* and therefore consider myself free to make it public domain. */ X/* Bjorn Larsson (...mcvax!enea!infovax!bl) */ X/****************************************************************/ X/* 1.0: Release: 870515 */ X/* 1.2: Max limits off by 1. Fixed thanks to S. Creps: 881002 */ X/* 1.3: MSC -W3, Turbo'C' -w -w-pro checkes: 881005 */ X/****************************************************************/ X X#include <curses.h> X#include <curspriv.h> X Xchar _curses_refresh_rcsid[] = "@(#)refresh.c v1.3 - 881005"; X X/****************************************************************/ X/* Wrefresh() updates window win's area of the physical screen. */ X/****************************************************************/ X Xvoid wrefresh(win) X WINDOW *win; X { X if (win == curscr) X curscr->_clear = TRUE; X else X wnoutrefresh(win); X doupdate(); X } /* wrefresh */ X X/****************************************************************/ X/* Wnoutrefresh() updates the image of the desired screen, */ X/* without doing physical update (copies window win's image to */ X/* the _cursvar.tmpwin window, which is hidden from the user). */ X/****************************************************************/ X Xvoid wnoutrefresh(win) X register WINDOW *win; X { X register int *dst; /* start destination in temp window */ X register int *end; /* end destination in temp window */ X register int *src; /* source in user window */ X register int first; /* first changed char on line */ X register int last; /* last changed char on line */ X static WINDOW *nscr; X static int begy; /* window's place on screen */ X static int begx; X static int i; X static int j; X X nscr = _cursvar.tmpwin; X begy = win->_begy; X begx = win->_begx; X X for (i=0, j=begy; i < win->_maxy; i++, j++) X { X if (win->_minchng[i] != _NO_CHANGE) X { X first = win->_minchng[i]; X last = win->_maxchng[i]; X dst = &(nscr->_line[j][begx + first]); X end = &(nscr->_line[j][begx + last]); X src = &(win->_line[i][first]); X X while (dst <= end) /* copy user line to temp window */ X *dst++ = *src++; X X first += begx; /* nscr's min/max change positions */ X last += begx; X X if ((nscr->_minchng[j] == _NO_CHANGE)||(nscr->_minchng[j] > first)) X nscr->_minchng[j] = first; X if (last > nscr->_maxchng[j]) X nscr->_maxchng[j] = last; X X win->_minchng[i] = _NO_CHANGE; /* updated now */ X } /* if */ X win->_maxchng[i] = _NO_CHANGE; /* updated now */ X } /* for */ X X if (win->_clear) X { X win->_clear = FALSE; X nscr->_clear = TRUE; X } /* if */ X X if (!win->_leave) X { X nscr->_cury = win->_cury + begy; X nscr->_curx = win->_curx + begx; X } /* if */ X } /* wnoutrefresh */ X X/****************************************************************/ X/* Refresh() updates stdscr's area of the physical screen. */ X/****************************************************************/ X Xvoid refresh() X { X wrefresh(stdscr); X } /* refresh */ END_OF_FILE if test 3441 -ne `wc -c <'refresh.c'`; then echo shar: \"'refresh.c'\" unpacked with wrong size! fi # end of 'refresh.c' fi if test -f 'setmode.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'setmode.c'\" else echo shar: Extracting \"'setmode.c'\" \(3268 characters\) sed "s/^X//" >'setmode.c' <<'END_OF_FILE' X/****************************************************************/ X/* Terminal mode routines of the PCcurses package. */ X/* */ X/****************************************************************/ X/* This version of curses is based on ncurses, a curses version */ X/* originally written by Pavel Curtis at Cornell University. */ X/* I have made substantial changes to make it run on IBM PC's, */ X/* and therefore consider myself free make it public domain. */ X/* Bjorn Larsson (...mcvax!enea!infovax!bl) */ X/****************************************************************/ X/* BUT: this particular module was written by */ X/* N. Dean Pentcheff (dean@violet.berkeley.edu) */ X/* It provides PC Curses versions of: */ X/* reset_prog_mode(); */ X/* reset_shell_mode(); */ X/* set_prog_mode(); */ X/* set_shell_mode(); */ X/* */ X/* B. Larsson took the liberty to modify its style slightly */ X/* when incorporating it into PCcurses v.1.2. The routines in */ X/* this module do a similar thing to savetty() and resetty(). */ X/****************************************************************/ X/* 1.2: Style clean-up, rcsid[] string for maintenance: 881002 */ X/* 1.3: MSC -W3, Turbo'C' -w -w-pro checkes: 881005 */ X/****************************************************************/ X X#include <curses.h> X#include <curspriv.h> X Xstruct cttyset X { X bool been_set; X bool oautocr; X bool ocbreak; X bool oecho; X bool oraw; X }; X Xchar _curses_setmode_rcsid[] = "@(#)setmode.c v1.3 - 881005"; X Xstatic struct cttyset sh_tty = {FALSE};/* tty modes for shell_mode */ Xstatic struct cttyset pr_tty = {FALSE};/* tty modes for prog_mode */ X X/****************************************************************/ X/* Def_prog_mode() saves the current tty status, to be recalled */ X/* later by reset_prog_mode. */ X/****************************************************************/ X Xvoid def_prog_mode() X { X pr_tty.been_set = TRUE; X pr_tty.oautocr = _cursvar.autocr; X pr_tty.ocbreak = _cursvar.cbreak; X pr_tty.oecho = _cursvar.echo; X pr_tty.oraw = _cursvar.raw; X } /* def_prog_mode */ X X/****************************************************************/ X/* Reset_prog_mode() resets tty modes to the values saved in a */ X/* call to def_prog_mode. */ X/****************************************************************/ X Xvoid reset_prog_mode() X { X if (pr_tty.been_set == TRUE) X { X _cursvar.autocr = pr_tty.oautocr; X _cursvar.cbreak = pr_tty.ocbreak; X _cursvar.echo = pr_tty.oecho; X _cursvar.raw = pr_tty.oraw; X } /* if */ X } /* reset_prog_mode */ X X/****************************************************************/ X/* Def_shell_mode() saves the tty status, to be recalled by */ X/* reset_shell_mode. A noop in PCcurses. */ X/****************************************************************/ X Xvoid def_shell_mode() X { X } /* def_shell_mode */ X X/****************************************************************/ X/* Reset_shell_mode() resets the tty status to the status it */ X/* had before curses began. */ X/****************************************************************/ X Xvoid reset_shell_mode() X { X _cursvar.autocr = TRUE; X _cursvar.cbreak = FALSE; X _cursvar.echo = TRUE; X _cursvar.raw = FALSE; X } /* reset_shell_mode */ END_OF_FILE if test 3268 -ne `wc -c <'setmode.c'`; then echo shar: \"'setmode.c'\" unpacked with wrong size! fi # end of 'setmode.c' fi if test -f 'setterm.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'setterm.c'\" else echo shar: Extracting \"'setterm.c'\" \(3007 characters\) sed "s/^X//" >'setterm.c' <<'END_OF_FILE' X/****************************************************************/ X/* Raw(), noraw(), echo(), noecho(), nl(), nonl(), cbreak(), */ X/* nocbreak(), crmode(), nocrmode() and refrbrk() routines of */ X/* the PCcurses package. */ X/* */ X/****************************************************************/ X/* This version of curses is based on ncurses, a curses version */ X/* originally written by Pavel Curtis at Cornell University. */ X/* I have made substantial changes to make it run on IBM PC's, */ X/* and therefore consider myself free to make it public domain. */ X/* Bjorn Larsson (...mcvax!enea!infovax!bl) */ X/****************************************************************/ X/* 1.0: Release: 870515 */ X/* 1.2: Rcsid[] string for maintenance: 881002 */ X/* 1.3: MSC -W3, Turbo'C' -w -w-pro checkes: 881005 */ X/****************************************************************/ X X#include <curses.h> X#include <curspriv.h> X Xchar _curses_setterm_rcsid[] = "@(#)setterm.c v1.3 - 881005"; X X/****************************************************************/ X/* Raw() and noraw() sets or clears raw mode. */ X/****************************************************************/ X Xvoid raw() X { X _cursvar.raw = TRUE; X _cursesscb(FALSE); /* disallow ^BREAK on disk I/O */ X flushinp(); X } /* raw */ X Xvoid noraw() X { X _cursvar.raw = FALSE; X _cursesscb(_cursvar.orgcbr); /* restore original ^BREAK status */ X } /* noraw */ X X/****************************************************************/ X/* Echo() and noecho() sets or clears echo mode. */ X/****************************************************************/ X Xvoid echo() X { X _cursvar.echo = TRUE; X } /* echo */ X Xvoid noecho() X { X _cursvar.echo = FALSE; X } /* noecho */ X X/****************************************************************/ X/* Nl() and nonl() sets or clears autocr mapping mode. */ X/****************************************************************/ X Xvoid nl() X { X _cursvar.autocr = TRUE; X } /* nl */ X Xvoid nonl() X { X _cursvar.autocr = FALSE; X } /* nonl */ X X/****************************************************************/ X/* Cbreak(), nocbreak(), crmode() amd nocrmode() sets or */ X/* clears cbreak mode. */ X/****************************************************************/ X Xvoid cbreak() X { X _cursvar.cbreak = TRUE; X } /* cbreak */ X Xvoid nocbreak() X { X _cursvar.cbreak = FALSE; X } /* nocbreak */ X Xvoid crmode() X { X _cursvar.cbreak = TRUE; X } /* crmode */ X Xvoid nocrmode() X { X _cursvar.cbreak = FALSE; X } /* nocrmode */ X X/****************************************************************/ X/* Refrbrk() sets or unsets the screen refresh break flag. If */ X/* this flag is set, and there is any input available, any */ X/* screen refresh will be prematurely terminated, anticipating */ X/* more screen updates. This flag is FALSE by default. */ X/****************************************************************/ X Xvoid refrbrk(bf) X bool bf; X { X _cursvar.refrbrk = bf; X } /* refrbrk */ END_OF_FILE if test 3007 -ne `wc -c <'setterm.c'`; then echo shar: \"'setterm.c'\" unpacked with wrong size! fi # end of 'setterm.c' fi echo shar: End of archive 2 \(of 5\). cp /dev/null ark2isdone MISSING="" for I in 1 2 3 4 5 ; do if test ! -f ark${I}isdone ; then MISSING="${MISSING} ${I}" fi done if test "${MISSING}" = "" ; then echo You have unpacked all 5 archives. rm -f ark[1-9]isdone else echo You still need to unpack the following archives: echo " " ${MISSING} fi ## End of shell archive. exit 0