changeset 18244:9feb46ac6847

maint: Periodic merge of gui-release to default.
author John W. Eaton <jwe@octave.org>
date Tue, 07 Jan 2014 22:09:35 -0500
parents 3d22b24863b9 (current diff) c7fe55478e11 (diff)
children 89e3601c33aa
files libinterp/corefcn/inv.cc
diffstat 2 files changed, 41 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/libgui/qterminal/libqterminal/win32/QWinTerminalImpl.cpp	Tue Jan 07 15:15:47 2014 -0800
+++ b/libgui/qterminal/libqterminal/win32/QWinTerminalImpl.cpp	Tue Jan 07 22:09:35 2014 -0500
@@ -1184,14 +1184,22 @@
         {
           if (c == L'\r' && i < (len - 1) && s.at (i+1) == L'\n')
             i++;
-          if (nEvents)
-            {
-              WriteConsoleInput (hStdIn, events, nEvents, &written);
-              nEvents = 0;
-              ZeroMemory (events, sizeof (events));
-            }
-          PostMessage (m_consoleWindow, WM_KEYDOWN, VK_RETURN, 0x001C0001);
-          PostMessage (m_consoleWindow, WM_KEYDOWN, VK_RETURN, 0xC01C0001);
+
+          // add new line
+          events[nEvents].EventType                        = KEY_EVENT;
+          events[nEvents].Event.KeyEvent.bKeyDown          = TRUE;
+          events[nEvents].Event.KeyEvent.wRepeatCount      = 1;
+          events[nEvents].Event.KeyEvent.wVirtualKeyCode   =
+            VK_RETURN;
+          events[nEvents].Event.KeyEvent.wVirtualScanCode  = 0;
+          events[nEvents].Event.KeyEvent.uChar.UnicodeChar = c.unicode ();
+          events[nEvents].Event.KeyEvent.dwControlKeyState = 0;
+          nEvents++;
+ 
+          WriteConsoleInput (hStdIn, events, nEvents, &written);
+          nEvents = 0;
+          ZeroMemory (events, sizeof (events));
+ 
         }
       else
         {
--- a/libinterp/corefcn/inv.cc	Tue Jan 07 15:15:47 2014 -0800
+++ b/libinterp/corefcn/inv.cc	Tue Jan 07 22:09:35 2014 -0500
@@ -213,11 +213,22 @@
 
       retval(0) = result;
 
-      volatile double xrcond = isfloat ? frcond : rcond;
-      xrcond += 1.0;
-      if (nargout < 2 && (info == -1 || xrcond == 1.0))
+      bool rcond_plus_one_eq_one = false;
+
+      if (isfloat)
+        {
+          volatile float xrcond = frcond;
+          rcond_plus_one_eq_one = xrcond + 1.0F == 1.0F;
+        }
+      else
+        {
+          volatile double xrcond = rcond;
+          rcond_plus_one_eq_one = xrcond + 1.0 == 1.0;
+        }
+
+      if (nargout < 2 && (info == -1 || rcond_plus_one_eq_one))
         warning ("inverse: matrix singular to machine precision, rcond = %g",
-                 rcond);
+                 (isfloat ? frcond : rcond));
     }
 
   return retval;
@@ -230,6 +241,16 @@
 %!error inv ()
 %!error inv ([1, 2; 3, 4], 2)
 %!error <argument must be a square matrix> inv ([1, 2; 3, 4; 5, 6])
+
+%!test
+%! [xinv, rcond] = inv (single ([1,2;3,4]));
+%! assert (isa (xinv, 'single'));
+%! assert (isa (rcond, 'single'));
+
+%!test
+%! [xinv, rcond] = inv ([1,2;3,4]);
+%! assert (isa (xinv, 'double'));
+%! assert (isa (rcond, 'double'));
 */
 
 // FIXME: this should really be done with an alias, but