aboutsummaryrefslogtreecommitdiffstats
path: root/crs.c
diff options
context:
space:
mode:
Diffstat (limited to 'crs.c')
-rw-r--r--crs.c66
1 files changed, 38 insertions, 28 deletions
diff --git a/crs.c b/crs.c
index 5a4a5f1..ef1e956 100644
--- a/crs.c
+++ b/crs.c
@@ -1,18 +1,18 @@
/* Copyright (C) 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
- *
+ *
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
- *
+ *
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
- *
+ *
* You should have received a copy of the GNU General Public License
* along with this software; see the file COPYING. If not, write to
- * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+ * the Free Software Foundation, 59 Temple Place, Suite 330, Boston, MA 02111, USA.
*
* As a special exception, the Free Software Foundation gives permission
* for additional uses of the text contained in its release of GUILE.
@@ -36,7 +36,7 @@
*
* If you write modifications of your own for GUILE, it is your choice
* whether to permit this exception to apply to your modifications.
- * If you do not wish that, delete this exception notice.
+ * If you do not wish that, delete this exception notice.
*/
/* "crs.c" interface to `curses' interactive terminal control library.
@@ -54,6 +54,18 @@
int wgetch P((WINDOW *));
#endif
+static int curses_initted = 0;
+
+static SCM scm_linitscr(void);
+
+
+static void do_init_maybe()
+{
+ if(!curses_initted)
+ scm_linitscr();
+ curses_initted = 1;
+}
+
/* define WIN port type */
#define WIN(obj) ((WINDOW*)CDR(obj))
#define WINP(obj) (tc16_window==TYP16(obj))
@@ -64,12 +76,6 @@ int freewindow(win)
delwin(win);
return 0;
}
-int prinwindow(exp, port, writing)
- SCM exp; SCM port; int writing;
-{
- prinport(exp, port, "window");
- return !0;
-}
int bwaddch(c, win) int c; WINDOW *win; {waddch(win, c);return c;}
int bwaddstr(str, win) char *str; WINDOW *win; {waddstr(win, str);return 0;}
sizet bwwrite(str, siz, num, win)
@@ -82,15 +88,16 @@ sizet bwwrite(str, siz, num, win)
}
int tc16_window;
static ptobfuns winptob = {
+ "window",
mark0,
freewindow,
- prinwindow,
+ 0,
equal0,
bwaddch,
bwaddstr,
bwwrite,
- wrefresh,
- wgetch,
+ wrefresh, /* warning from compiler is wrefresh(WINDOW*) not (FILE*) */
+ wgetch, /* warning from compiler is wrefresh(WINDOW*) not (FILE*) */
freewindow};
SCM mkwindow(win)
@@ -101,13 +108,13 @@ SCM mkwindow(win)
NEWCELL(z);
DEFER_INTS;
SETCHARS(z, win);
- CAR(z) = tc16_window | OPN | RDNG | WRTNG;
+ CAR(z) = scm_port_entry(tc16_window, OPN | RDNG | WRTNG);
ALLOW_INTS;
return z;
}
SCM *loc_stdscr = 0;
-SCM linitscr()
+SCM scm_linitscr()
{
WINDOW *win;
if NIMP(*loc_stdscr) {
@@ -115,10 +122,12 @@ SCM linitscr()
return *loc_stdscr;
}
win = initscr();
+ curses_initted = 1;
return *loc_stdscr = mkwindow(win);
}
SCM lendwin()
{
+ do_init_maybe();
if IMP(*loc_stdscr) return BOOL_F;
return ERR==endwin() ? BOOL_F : BOOL_T;
}
@@ -137,6 +146,7 @@ SCM lnewwin(lines, cols, args)
begin_x = CAR(CDR(args));
ASSERT(INUMP(begin_y), begin_y, ARG3, s_newwin);
ASSERT(INUMP(begin_x), begin_y, ARG4, s_newwin);
+ do_init_maybe();
win = newwin(INUM(lines), INUM(cols),
INUM(begin_y), INUM(begin_x));
return mkwindow(win);
@@ -187,7 +197,7 @@ SCM loverwrite(srcwin, dstwin)
return ERR==overwrite(WIN(srcwin), WIN(dstwin)) ? BOOL_F : BOOL_T;
}
-static char s_wmove[] = "wmove", s_wadd[] = "wadd", s_winsert[] = "winsert",
+static char s_wmove[] = "wmove", s_wadd[] = "wadd", s_winsch[] = "winsch",
s_box[] = "box";
SCM lwmove(win, y, x)
SCM win, y, x;
@@ -210,13 +220,13 @@ SCM lwadd(win, obj)
return ERR==waddstr(WIN(win), CHARS(obj)) ? BOOL_F : BOOL_T;
}
-SCM lwinsert(win, obj)
+SCM lwinsch(win, obj)
SCM win, obj;
{
- ASSERT(NIMP(win) && WINP(win), win, ARG1, s_winsert);
+ ASSERT(NIMP(win) && WINP(win), win, ARG1, s_winsch);
if INUMP(obj)
return ERR==winsch(WIN(win), INUM(obj)) ? BOOL_F : BOOL_T;
- ASSERT(ICHRP(obj), obj, ARG2, s_winsert);
+ ASSERT(ICHRP(obj), obj, ARG2, s_winsch);
return ERR==winsch(WIN(win), ICHR(obj)) ? BOOL_F : BOOL_T;
}
@@ -307,7 +317,7 @@ static char s_nonl[] = "nonl", s_nocbreak[] = "nocbreak",
s_noecho[] = "noecho", s_noraw[] = "noraw";
static iproc subr0s[] = {
- {"initscr", linitscr},
+ {"initscr", scm_linitscr},
{"endwin", lendwin},
{&s_nonl[2], lnl},
{s_nonl, lnonl},
@@ -361,12 +371,12 @@ static iproc subr1s[] = {
{ASSERT(NIMP(w) && WINP(w), w, ARG1, sn);\
return ERR==n(WIN(w), BOOL_F != b)?BOOL_F:BOOL_T;}
-/* SUBROPT(lclearok, clearok, s_clearok, "clearok") */
-/* SUBROPT(lidlok, idlok, s_idlok, "idlok") */
+SUBROPT(lidlok, idlok, s_idlok, "idlok")
SUBROPT(lleaveok, leaveok, s_leaveok, "leaveok")
SUBROPT(lscrollok, scrollok, s_scrollok, "scrollok")
-/* SUBROPT(lnodelay, nodelay, s_nodelay, "nodelay") */
+SUBROPT(lnodelay, nodelay, s_nodelay, "nodelay")
+/* SUBROPT(lclearok, clearok, s_clearok, "clearok") */
static char s_clearok[] = "clearok";
SCM lclearok(w, b) SCM w, b;
{
@@ -379,12 +389,12 @@ static iproc subr2s[] = {
{s_overlay, loverlay},
{s_overwrite, loverwrite},
{s_wadd, lwadd},
- {s_winsert, lwinsert},
+ {s_winsch, lwinsch},
{s_clearok, lclearok},
- /* {s_idlok, lidlok}, */
+ {s_idlok, lidlok},
{s_leaveok, lleaveok},
{s_scrollok, lscrollok},
-/* {s_nodelay, lnodelay}, */
+ {s_nodelay, lnodelay},
{0, 0}};
void init_crs()
@@ -408,5 +418,5 @@ void init_crs()
make_subr(s_mvwin, tc7_subr_3, lmvwin);
make_subr(s_box, tc7_subr_3, lbox);
add_feature("curses");
- add_final(lendwin);
+ /* add_final(lendwin); */
}