[m-rev.] for review: curs binding updates

Peter WANG wangp at students.cs.mu.OZ.AU
Wed Dec 1 15:48:20 AEDT 2004


For review by anyone.

Estimated hours taken: 0.5

extras/curs/curs.m:
	Added "nodelay" predicate to select nonblocking input from getch.
	Export "refresh" instead of "doupdate" as doupdate does nothing
		without a paired call to wnoutrefresh.
	Added "flushinp" to clear typeahead buffer.
	Added the constant "err" which can now be returned by getch if
		in nonblocking mode and there is no input ready.

Index: curs.m
===================================================================
RCS file: /home/mercury1/repository/mercury/extras/curs/curs.m,v
retrieving revision 1.4
diff -u -r1.4 curs.m
--- curs.m	6 Mar 2002 10:10:29 -0000	1.4
+++ curs.m	30 Nov 2004 04:58:20 -0000
@@ -28,7 +28,7 @@
 
 :- interface.
 
-:- import_module io, string, char, int.
+:- import_module bool, io, string, char, int.
 
 
 
@@ -38,6 +38,12 @@
     %
 :- pred start(io__state::di, io__state::uo) is det.
 
+    % Enable or disable the no-delay option.  If enabled (first argument is
+    % true) then getch will be a non-blocking call, i.e. return immediately
+    % if no input is ready rather than waiting for input.
+    %
+:- pred nodelay(bool::in, io__state::di, io__state::uo) is det.
+
     % Close a curses session; necessary to return the tty to a sensible
     % state.
     %
@@ -79,15 +85,20 @@
 :- pred attr_set(attr::in, io__state::di, io__state::uo) is det.
 
     % Update the display.  Changes made to the display are not made
-    % visible until doupdate is called.
+    % visible until refresh is called.
     %
-:- pred doupdate(io__state::di, io__state::uo) is det.
+:- pred refresh(io__state::di, io__state::uo) is det.
 
     % Read a character from the keyboard (unbuffered) and translate it
-    % if necessary.
+    % if necessary.  In no-delay mode, if no input is waiting, the value
+    % curs__err is returned.
     %
 :- pred getch(int::out, io__state::di, io__state::uo) is det.
 
+    % Throw away any typeahead that has not yet been read by the program.
+    %
+:- pred flushinp(io__state::di, io__state::uo) is det.
+
 
 
     % Draws a border around the inside edge of the display.
@@ -104,6 +115,13 @@
 
 
 
+    % Error code; currently only used as return value of getch to
+    % indicate that no input is ready.
+    %
+:- func err = int.
+
+
+
     % Various key code translations outside the normal ASCII range.
     %
 :- func key_down = int.
@@ -449,6 +467,16 @@
 
 % ---------------------------------------------------------------------------- %
 
+:- pragma foreign_proc("C", nodelay(BF::in, IO0::di, IO::uo),
+    [will_not_call_mercury, promise_pure], "
+
+    nodelay(stdscr, BF);
+    IO = IO0;
+
+").
+
+% ---------------------------------------------------------------------------- %
+
 :- pragma foreign_proc("C", stop(IO0::di, IO::uo),
     [will_not_call_mercury, promise_pure], "
 
@@ -538,10 +566,10 @@
 
 % ---------------------------------------------------------------------------- %
 
-:- pragma foreign_proc("C", doupdate(IO0::di, IO::uo),
+:- pragma foreign_proc("C", refresh(IO0::di, IO::uo),
     [will_not_call_mercury, promise_pure], "
 
-    doupdate();
+    refresh();
     IO = IO0;
 
 ").
@@ -554,6 +582,23 @@
     CharCode = getch();
     IO = IO0;
 
+").
+
+% ---------------------------------------------------------------------------- %
+
+:- pragma foreign_proc("C", flushinp(IO0::di, IO::uo),
+    [will_not_call_mercury, promise_pure], "
+
+    flushinp();
+    IO = IO0;
+
+").
+
+% ---------------------------------------------------------------------------- %
+
+:- pragma foreign_proc("C", err = (E::out),
+    [will_not_call_mercury, promise_pure], "
+    E = ERR;
 ").
 
 % ---------------------------------------------------------------------------- %
--------------------------------------------------------------------------
mercury-reviews mailing list
post:  mercury-reviews at cs.mu.oz.au
administrative address: owner-mercury-reviews at cs.mu.oz.au
unsubscribe: Address: mercury-reviews-request at cs.mu.oz.au Message: unsubscribe
subscribe:   Address: mercury-reviews-request at cs.mu.oz.au Message: subscribe
--------------------------------------------------------------------------



More information about the reviews mailing list