--- /dev/null
+diff -urN mercury-extras-0.12.2.orig/curs/curs.m mercury-extras-0.12.2/curs/curs.m
+--- mercury-extras-0.12.2.orig/curs/curs.m 2006-10-10 19:42:19.000000000 +1300
++++ mercury-extras-0.12.2/curs/curs.m 2006-10-10 20:06:42.000000000 +1300
+@@ -30,7 +30,7 @@
+
+ :- import_module bool, io, string, char, int.
+
+-
++:- include_module curs__panel.
+
+ % Start a curses session (colour, unbuffered input, no echoing,
+ % invisible cursor if possible, scrolling on when output past
+@@ -220,104 +220,6 @@
+ :- func cyan = colour.
+ :- func white = colour.
+
+- % ------------------------------------------------------------------------ %
+- % ------------------------------------------------------------------------ %
+-
+- % Panels are windows over the main display; they may be
+- % stacked, moved, ordered and hidden. Contents of panels
+- % closer to the top of the stack obscure the parts of panels
+- % they overlap that are lower in the stack.
+- %
+- :- module panel.
+-
+- :- interface.
+-
+-
+-
+- :- type panel.
+-
+- % new(Rows, Cols, Row, Col, Attr, Panel) creates a new panel
+- % Panel whose size is given by (Rows, Cols) and whose position
+- % on the display is given by (Row, Col). The new panel starts
+- % visible and at the top of the stack. The default attributes
+- % for the panel are set to Attr.
+- %
+- :- pred new(int::in, int::in, int::in, int::in, attr::in, panel::out,
+- io__state::di, io__state::uo) is det.
+-
+- % Destroy a panel.
+- %
+- :- pred delete(panel::in, io__state::di, io__state::uo) is det.
+-
+- % Raise/lower a panel to the top/bottom of the stack.
+- %
+- :- pred raise(panel::in, io__state::di, io__state::uo) is det.
+-
+- :- pred lower(panel::in, io__state::di, io__state::uo) is det.
+-
+- % Hide/reveal a panel (revealing places it at the top of the stack).
+- %
+- :- pred hide(panel::in, io__state::di, io__state::uo) is det.
+-
+- :- pred reveal(panel::in, io__state::di, io__state::uo) is det.
+-
+- % Move a panel to (Row, Col) on the display.
+- %
+- :- pred relocate(panel::in, int::in, int::in,
+- io__state::di, io__state::uo) is det.
+-
+- % Clear a panel.
+- %
+- :- pred clear(panel::in, io__state::di, io__state::uo) is det.
+-
+- % Move the virtual cursor to given row and column; (0, 0) are the
+- % coordinates for the upper left hand corner of the panel.
+- %
+- :- pred move(panel::in, int::in, int::in,
+- io__state::di, io__state::uo) is det.
+-
+- % Add a char/string to a panel with the given attributes.
+- % Note that char codes are passed rather than plain chars.
+- %
+- :- pred addch(panel::in, attr::in, int::in,
+- io__state::di, io__state::uo) is det.
+-
+- :- pred addstr(panel::in, attr::in, string::in,
+- io__state::di, io__state::uo) is det.
+-
+- % Turn on/off or set attributes that will be applied by default.
+- %
+- :- pred attr_on(panel::in, attr::in, io__state::di, io__state::uo) is det.
+- :- pred attr_off(panel::in, attr::in, io__state::di, io__state::uo) is det.
+- :- pred attr_set(panel::in, attr::in, io__state::di, io__state::uo) is det.
+-
+- % Update the display (also calls doupdate).
+- % NOTE that doupdate does not call update_panels.
+- %
+- :- pred update_panels(io__state::di, io__state::uo) is det.
+-
+-
+-
+- % Draws a border around the inside edge of the display.
+- %
+- :- pred border(panel::in, io__state::di, io__state::uo) is det.
+-
+- % Draws an horizontal line of length N moving to the right.
+- %
+- :- pred hline(panel::in, int::in, int::in,
+- io__state::di, io__state::uo) is det.
+-
+- % Draws a vertical line of length N moving down.
+- %
+- :- pred vline(panel::in, int::in, int::in,
+- io__state::di, io__state::uo) is det.
+-
+- :- end_module panel.
+-
+- % ------------------------------------------------------------------------ %
+- % ------------------------------------------------------------------------ %
+-
+-% ---------------------------------------------------------------------------- %
+ % ---------------------------------------------------------------------------- %
+
+ :- implementation.
+@@ -936,219 +838,4 @@
+
+ ").
+
+- % ------------------------------------------------------------------------ %
+- % ------------------------------------------------------------------------ %
+-
+- :- module panel.
+-
+- :- implementation.
+-
+- :- type panel == c_pointer.
+-
+- % ------------------------------------------------------------------------ %
+-
+- :- pragma c_header_code("
+-
+- #include <ncurses.h>
+- #include <panel.h>
+-
+- ").
+-
+- % ------------------------------------------------------------------------ %
+-
+- :- pragma foreign_proc("C", new(Rows::in, Cols::in, Row::in, Col::in, Attr::in,
+- Panel::out, IO0::di, IO::uo),
+- [will_not_call_mercury, promise_pure], "
+-
+- WINDOW *w = newwin(Rows, Cols, Row, Col);
+- scrollok(w, TRUE);
+- wattrset(w, Attr);
+- wcolor_set(w, Attr, NULL);
+- wclear(w);
+- (*(PANEL**)&(Panel)) = new_panel(w);
+-
+- IO = IO0;
+-
+- ").
+-
+- % ------------------------------------------------------------------------ %
+-
+- :- pragma foreign_proc("C", delete(Panel::in, IO0::di, IO::uo),
+- [will_not_call_mercury, promise_pure], "
+-
+- delwin(panel_window((PANEL *)Panel));
+- del_panel((PANEL *)Panel);
+-
+- IO = IO0;
+-
+- ").
+-
+- % ------------------------------------------------------------------------ %
+-
+- :- pragma foreign_proc("C", raise(Panel::in, IO0::di, IO::uo),
+- [will_not_call_mercury, promise_pure], "
+-
+- top_panel((PANEL *)Panel);
+-
+- IO = IO0;
+-
+- ").
+-
+- % ------------------------------------------------------------------------ %
+-
+- :- pragma foreign_proc("C", lower(Panel::in, IO0::di, IO::uo),
+- [will_not_call_mercury, promise_pure], "
+-
+- bottom_panel((PANEL *)Panel);
+-
+- IO = IO0;
+-
+- ").
+-
+- % ------------------------------------------------------------------------ %
+-
+- :- pragma foreign_proc("C", hide(Panel::in, IO0::di, IO::uo),
+- [will_not_call_mercury, promise_pure], "
+-
+- hide_panel((PANEL *)Panel);
+-
+- IO = IO0;
+-
+- ").
+-
+- % ------------------------------------------------------------------------ %
+-
+- :- pragma foreign_proc("C", reveal(Panel::in, IO0::di, IO::uo),
+- [will_not_call_mercury, promise_pure], "
+-
+- show_panel((PANEL *)Panel);
+-
+- IO = IO0;
+-
+- ").
+-
+- % ------------------------------------------------------------------------ %
+-
+- :- pragma foreign_proc("C", relocate(Panel::in, Row::in, Col::in, IO0::di, IO::uo),
+- [will_not_call_mercury, promise_pure], "
+-
+- move_panel((PANEL *)Panel, Row, Col);
+-
+- IO = IO0;
+-
+- ").
+-
+- % ------------------------------------------------------------------------ %
+-
+- :- pragma foreign_proc("C", clear(Panel::in, IO0::di, IO::uo),
+- [will_not_call_mercury, promise_pure], "
+-
+- wclear(panel_window((PANEL *)Panel));
+-
+- IO = IO0;
+-
+- ").
+-
+- % ------------------------------------------------------------------------ %
+-
+- :- pragma foreign_proc("C", move(Panel::in, Row::in, Col::in, IO0::di, IO::uo),
+- [will_not_call_mercury, promise_pure], "
+-
+- wmove(panel_window((PANEL *)Panel), Row, Col);
+-
+- IO = IO0;
+-
+- ").
+-
+- % ------------------------------------------------------------------------ %
+-
+- :- pragma foreign_proc("C", addch(Panel::in, Attr::in, CharCode::in, IO0::di, IO::uo),
+- [will_not_call_mercury, promise_pure], "
+-
+- waddch(panel_window((PANEL *)Panel), (chtype)Attr | (chtype)CharCode);
+-
+- IO = IO0;
+-
+- ").
+-
+- % ------------------------------------------------------------------------ %
+-
+- addstr(Panel, Attr, Str) -->
+- string__foldl(
+- ( pred(Char::in, di, uo) is det -->
+- addch(Panel, Attr, char__to_int(Char))
+- ),
+- Str
+- ).
+-
+- % ------------------------------------------------------------------------ %
+-
+- :- pragma foreign_proc("C", attr_on(Panel::in, Attr::in, IO0::di, IO::uo),
+- [will_not_call_mercury, promise_pure], "
+-
+- wattron(panel_window((PANEL *)Panel), Attr);
+- IO = IO0;
+-
+- ").
+- :- pragma foreign_proc("C", attr_off(Panel::in, Attr::in, IO0::di, IO::uo),
+- [will_not_call_mercury, promise_pure], "
+-
+- wattroff(panel_window((PANEL *)Panel), Attr);
+- IO = IO0;
+-
+- ").
+- :- pragma foreign_proc("C", attr_set(Panel::in, Attr::in, IO0::di, IO::uo),
+- [will_not_call_mercury, promise_pure], "
+-
+- wattrset(panel_window((PANEL *)Panel), Attr);
+- IO = IO0;
+-
+- ").
+-
+- % ------------------------------------------------------------------------ %
+-
+- :- pragma foreign_proc("C", update_panels(IO0::di, IO::uo),
+- [will_not_call_mercury, promise_pure], "
+-
+- update_panels();
+- doupdate();
+-
+- IO = IO0;
+-
+- ").
+-
+- % ------------------------------------------------------------------------ %
+-
+- :- pragma foreign_proc("C", border(Panel::in, IO0::di, IO::uo),
+- [will_not_call_mercury, promise_pure], "
+-
+- wborder(panel_window((PANEL *)Panel), 0, 0, 0, 0, 0, 0, 0, 0);
+- IO = IO0;
+-
+- ").
+-
+- :- pragma foreign_proc("C", hline(Panel::in, C::in, N::in, IO0::di, IO::uo),
+- [will_not_call_mercury, promise_pure], "
+-
+- whline(panel_window((PANEL *)Panel), C, N);
+- IO = IO0;
+-
+- ").
+-
+- :- pragma foreign_proc("C", vline(Panel::in, C::in, N::in, IO0::di, IO::uo),
+- [will_not_call_mercury, promise_pure], "
+-
+- wvline(panel_window((PANEL *)Panel), C, N);
+- IO = IO0;
+-
+- ").
+-
+- % ------------------------------------------------------------------------ %
+-
+- :- end_module panel.
+-
+- % ------------------------------------------------------------------------ %
+- % ------------------------------------------------------------------------ %
+-
+-% ---------------------------------------------------------------------------- %
+ % ---------------------------------------------------------------------------- %
+diff -urN mercury-extras-0.12.2.orig/curs/curs.panel.m mercury-extras-0.12.2/curs/curs.panel.m
+--- mercury-extras-0.12.2.orig/curs/curs.panel.m 1970-01-01 12:00:00.000000000 +1200
++++ mercury-extras-0.12.2/curs/curs.panel.m 2006-10-10 20:07:35.000000000 +1300
+@@ -0,0 +1,296 @@
++% ------------------------------------------------------------------------ %
++
++ % Panels are windows over the main display; they may be
++ % stacked, moved, ordered and hidden. Contents of panels
++ % closer to the top of the stack obscure the parts of panels
++ % they overlap that are lower in the stack.
++ %
++:- module curs__panel.
++
++:- interface.
++
++
++
++:- type panel.
++
++ % new(Rows, Cols, Row, Col, Attr, Panel) creates a new panel
++ % Panel whose size is given by (Rows, Cols) and whose position
++ % on the display is given by (Row, Col). The new panel starts
++ % visible and at the top of the stack. The default attributes
++ % for the panel are set to Attr.
++ %
++:- pred new(int::in, int::in, int::in, int::in, attr::in, panel::out,
++ io__state::di, io__state::uo) is det.
++
++ % Destroy a panel.
++ %
++:- pred delete(panel::in, io__state::di, io__state::uo) is det.
++
++ % Raise/lower a panel to the top/bottom of the stack.
++ %
++:- pred raise(panel::in, io__state::di, io__state::uo) is det.
++
++:- pred lower(panel::in, io__state::di, io__state::uo) is det.
++
++ % Hide/reveal a panel (revealing places it at the top of the stack).
++ %
++:- pred hide(panel::in, io__state::di, io__state::uo) is det.
++
++:- pred reveal(panel::in, io__state::di, io__state::uo) is det.
++
++ % Move a panel to (Row, Col) on the display.
++ %
++:- pred relocate(panel::in, int::in, int::in,
++ io__state::di, io__state::uo) is det.
++
++ % Clear a panel.
++ %
++:- pred clear(panel::in, io__state::di, io__state::uo) is det.
++
++ % Move the virtual cursor to given row and column; (0, 0) are the
++ % coordinates for the upper left hand corner of the panel.
++ %
++:- pred move(panel::in, int::in, int::in,
++ io__state::di, io__state::uo) is det.
++
++ % Add a char/string to a panel with the given attributes.
++ % Note that char codes are passed rather than plain chars.
++ %
++:- pred addch(panel::in, attr::in, int::in,
++ io__state::di, io__state::uo) is det.
++
++:- pred addstr(panel::in, attr::in, string::in,
++ io__state::di, io__state::uo) is det.
++
++ % Turn on/off or set attributes that will be applied by default.
++ %
++:- pred attr_on(panel::in, attr::in, io__state::di, io__state::uo) is det.
++:- pred attr_off(panel::in, attr::in, io__state::di, io__state::uo) is det.
++:- pred attr_set(panel::in, attr::in, io__state::di, io__state::uo) is det.
++
++ % Update the display (also calls doupdate).
++ % NOTE that doupdate does not call update_panels.
++ %
++:- pred update_panels(io__state::di, io__state::uo) is det.
++
++
++
++ % Draws a border around the inside edge of the display.
++ %
++:- pred border(panel::in, io__state::di, io__state::uo) is det.
++
++ % Draws an horizontal line of length N moving to the right.
++ %
++:- pred hline(panel::in, int::in, int::in,
++ io__state::di, io__state::uo) is det.
++
++ % Draws a vertical line of length N moving down.
++ %
++:- pred vline(panel::in, int::in, int::in,
++ io__state::di, io__state::uo) is det.
++
++% ------------------------------------------------------------------------ %
++
++:- implementation.
++
++:- type panel == c_pointer.
++
++% ------------------------------------------------------------------------ %
++
++:- pragma c_header_code("
++
++#include <ncurses.h>
++#include <panel.h>
++
++").
++
++% ------------------------------------------------------------------------ %
++
++:- pragma foreign_proc("C", new(Rows::in, Cols::in, Row::in, Col::in, Attr::in,
++ Panel::out, IO0::di, IO::uo),
++ [will_not_call_mercury, promise_pure], "
++
++ WINDOW *w = newwin(Rows, Cols, Row, Col);
++ scrollok(w, TRUE);
++ wattrset(w, Attr);
++ wcolor_set(w, Attr, NULL);
++ wclear(w);
++ (*(PANEL**)&(Panel)) = new_panel(w);
++
++ IO = IO0;
++
++").
++
++% ------------------------------------------------------------------------ %
++
++:- pragma foreign_proc("C", delete(Panel::in, IO0::di, IO::uo),
++ [will_not_call_mercury, promise_pure], "
++
++ delwin(panel_window((PANEL *)Panel));
++ del_panel((PANEL *)Panel);
++
++ IO = IO0;
++
++").
++
++% ------------------------------------------------------------------------ %
++
++:- pragma foreign_proc("C", raise(Panel::in, IO0::di, IO::uo),
++ [will_not_call_mercury, promise_pure], "
++
++ top_panel((PANEL *)Panel);
++
++ IO = IO0;
++
++").
++
++% ------------------------------------------------------------------------ %
++
++:- pragma foreign_proc("C", lower(Panel::in, IO0::di, IO::uo),
++ [will_not_call_mercury, promise_pure], "
++
++ bottom_panel((PANEL *)Panel);
++
++ IO = IO0;
++
++").
++
++% ------------------------------------------------------------------------ %
++
++:- pragma foreign_proc("C", hide(Panel::in, IO0::di, IO::uo),
++ [will_not_call_mercury, promise_pure], "
++
++ hide_panel((PANEL *)Panel);
++
++ IO = IO0;
++
++").
++
++% ------------------------------------------------------------------------ %
++
++:- pragma foreign_proc("C", reveal(Panel::in, IO0::di, IO::uo),
++ [will_not_call_mercury, promise_pure], "
++
++ show_panel((PANEL *)Panel);
++
++ IO = IO0;
++
++").
++
++% ------------------------------------------------------------------------ %
++
++:- pragma foreign_proc("C", relocate(Panel::in, Row::in, Col::in, IO0::di, IO::uo),
++ [will_not_call_mercury, promise_pure], "
++
++ move_panel((PANEL *)Panel, Row, Col);
++
++ IO = IO0;
++
++").
++
++% ------------------------------------------------------------------------ %
++
++:- pragma foreign_proc("C", clear(Panel::in, IO0::di, IO::uo),
++ [will_not_call_mercury, promise_pure], "
++
++ wclear(panel_window((PANEL *)Panel));
++
++ IO = IO0;
++
++").
++
++% ------------------------------------------------------------------------ %
++
++:- pragma foreign_proc("C", move(Panel::in, Row::in, Col::in, IO0::di, IO::uo),
++ [will_not_call_mercury, promise_pure], "
++
++ wmove(panel_window((PANEL *)Panel), Row, Col);
++
++ IO = IO0;
++
++").
++
++% ------------------------------------------------------------------------ %
++
++:- pragma foreign_proc("C", addch(Panel::in, Attr::in, CharCode::in, IO0::di, IO::uo),
++ [will_not_call_mercury, promise_pure], "
++
++ waddch(panel_window((PANEL *)Panel), (chtype)Attr | (chtype)CharCode);
++
++ IO = IO0;
++
++").
++
++% ------------------------------------------------------------------------ %
++
++addstr(Panel, Attr, Str) -->
++ string__foldl(
++ ( pred(Char::in, di, uo) is det -->
++ addch(Panel, Attr, char__to_int(Char))
++ ),
++ Str
++ ).
++
++% ------------------------------------------------------------------------ %
++
++:- pragma foreign_proc("C", attr_on(Panel::in, Attr::in, IO0::di, IO::uo),
++ [will_not_call_mercury, promise_pure], "
++
++ wattron(panel_window((PANEL *)Panel), Attr);
++ IO = IO0;
++
++").
++:- pragma foreign_proc("C", attr_off(Panel::in, Attr::in, IO0::di, IO::uo),
++ [will_not_call_mercury, promise_pure], "
++
++ wattroff(panel_window((PANEL *)Panel), Attr);
++ IO = IO0;
++
++").
++:- pragma foreign_proc("C", attr_set(Panel::in, Attr::in, IO0::di, IO::uo),
++ [will_not_call_mercury, promise_pure], "
++
++ wattrset(panel_window((PANEL *)Panel), Attr);
++ IO = IO0;
++
++").
++
++% ------------------------------------------------------------------------ %
++
++:- pragma foreign_proc("C", update_panels(IO0::di, IO::uo),
++ [will_not_call_mercury, promise_pure], "
++
++ update_panels();
++ doupdate();
++
++ IO = IO0;
++
++").
++
++% ------------------------------------------------------------------------ %
++
++:- pragma foreign_proc("C", border(Panel::in, IO0::di, IO::uo),
++ [will_not_call_mercury, promise_pure], "
++
++ wborder(panel_window((PANEL *)Panel), 0, 0, 0, 0, 0, 0, 0, 0);
++ IO = IO0;
++
++").
++
++:- pragma foreign_proc("C", hline(Panel::in, C::in, N::in, IO0::di, IO::uo),
++ [will_not_call_mercury, promise_pure], "
++
++ whline(panel_window((PANEL *)Panel), C, N);
++ IO = IO0;
++
++").
++
++:- pragma foreign_proc("C", vline(Panel::in, C::in, N::in, IO0::di, IO::uo),
++ [will_not_call_mercury, promise_pure], "
++
++ wvline(panel_window((PANEL *)Panel), C, N);
++ IO = IO0;
++
++").
++
++% ------------------------------------------------------------------------ %