From 2ec494f1c9864d65ba3d4aa78a39d3d34b843953 Mon Sep 17 00:00:00 2001
From: Houtan Bastani <houtan.bastani@ens.fr>
Date: Fri, 11 Feb 2011 12:18:48 +0100
Subject: [PATCH] kalman_steady_state: remove instances of mexErrMsgTxt

---
 .../kalman_steady_state.cc                    | 51 ++++++++-----------
 tests/kalman_steady_state/test1.m             |  6 ++-
 2 files changed, 26 insertions(+), 31 deletions(-)

diff --git a/mex/sources/kalman_steady_state/kalman_steady_state.cc b/mex/sources/kalman_steady_state/kalman_steady_state.cc
index f2ee847aae..b4df143de1 100644
--- a/mex/sources/kalman_steady_state/kalman_steady_state.cc
+++ b/mex/sources/kalman_steady_state/kalman_steady_state.cc
@@ -82,67 +82,60 @@ mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
 {
   // Check the number of arguments and set some flags.
   int measurement_error_flag = 1;
-  if (nrhs > 4)
-    {
-      mexErrMsgTxt("This function requires at most 4 input arguments!");
-    }
-  if (nrhs < 3)
-    {
-      mexErrMsgTxt("This function requires at least 3 input arguments!");
-    }
-  if (nrhs < 4)
-    {
-      measurement_error_flag = 0;
-    }
-  if (nlhs > 1)
-    {
-      mexErrMsgTxt("This function gives at most 1 output argument!");
-    }
+  if (nrhs < 3 || 4 < nrhs)
+    DYN_MEX_FUNC_ERR_MSG_TXT("kalman_steady_state accepts either 3 or 4 input arguments!");
+
+  if (nlhs < 1 || 2 < nlhs)
+    DYN_MEX_FUNC_ERR_MSG_TXT("kalman_steady_state requires at least 1, but no more than 2, output arguments!");
+
+  if (nrhs == 3)
+    measurement_error_flag = 0;
+
   // Check the type of the input arguments and get the size of the matrices.
   mwSize n = mxGetM(prhs[0]);
   if (n != mxGetN(prhs[0]))
     {
-      mexErrMsgTxt("The first input argument (T) must be a square matrix!");
+      DYN_MEX_FUNC_ERR_MSG_TXT("kalman_steady_state: The first input argument (T) must be a square matrix!");
     }
   if ((mxIsNumeric(prhs[0]) == 0) || (mxIsComplex(prhs[0]) == 1))
     {
-      mexErrMsgTxt("The first input argument (T) must be a real matrix!");
+      DYN_MEX_FUNC_ERR_MSG_TXT("kalman_steady_state: The first input argument (T) must be a real matrix!");
     }
   mwSize q = mxGetM(prhs[1]);
   if (q != mxGetN(prhs[1]))
     {
-      mexErrMsgTxt("The second input argument (QQ) must be a square matrix!");
+      DYN_MEX_FUNC_ERR_MSG_TXT("kalman_steady_state: The second input argument (QQ) must be a square matrix!");
     }
   if ((mxIsNumeric(prhs[1]) == 0) || (mxIsComplex(prhs[1]) == 1))
     {
-      mexErrMsgTxt("The second input argument (QQ) must be a real matrix!");
+      DYN_MEX_FUNC_ERR_MSG_TXT("kalman_steady_state: The second input argument (QQ) must be a real matrix!");
     }
   if (q != n)
     {
-      mexErrMsgTxt("The size of the second input argument (QQ) must match the size of the first argument (T)!");
+      DYN_MEX_FUNC_ERR_MSG_TXT("kalman_steady_state: The size of the second input argument (QQ) must match the size of the first argument (T)!");
     }
   mwSize p = mxGetN(prhs[2]);
   if (mxGetM(prhs[2]) != n)
     {
-      mexErrMsgTxt("The number of rows of the third argument (Z) must match the number of rows of the first argument (T)!");
+      DYN_MEX_FUNC_ERR_MSG_TXT("kalman_steady_state: The number of rows of the third argument (Z) must match the number of rows of the first argument (T)!");
     }
   if ((mxIsNumeric(prhs[2]) == 0) || (mxIsComplex(prhs[2]) == 1))
     {
-      mexErrMsgTxt("The third input argument (Z) must be a real matrix!");
+      DYN_MEX_FUNC_ERR_MSG_TXT("kalman_steady_state: The third input argument (Z) must be a real matrix!");
     }
   if (measurement_error_flag)
     {
       if (mxGetM(prhs[3]) != mxGetN(prhs[3]))
         {
-          mexErrMsgTxt("The fourth input argument (H) must be a square matrix!");
+          DYN_MEX_FUNC_ERR_MSG_TXT("kalman_steady_state: The fourth input argument (H) must be a square matrix!");
         }
       if (mxGetM(prhs[3]) != p)
         {
-          mexErrMsgTxt("The number of rows of the fourth input argument (H) must match the number of rows of the third input argument!");
+          DYN_MEX_FUNC_ERR_MSG_TXT("kalman_steady_state: The number of rows of the fourth input argument (H) must match the number of rows of the third input argument!");
         }
       if ((mxIsNumeric(prhs[3]) == 0) || (mxIsComplex(prhs[3]) == 1))
         {
-          mexErrMsgTxt("The fifth input argument (H) must be a real matrix!");
+          DYN_MEX_FUNC_ERR_MSG_TXT("kalman_steady_state: The fifth input argument (H) must be a real matrix!");
         }
     }
   // Get input matrices.
@@ -205,8 +198,8 @@ mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
   BWORK = (lapack_int *) mxCalloc(nn, sizeof(lapack_int));
   // Initialize the output of the mex file
   double *P;
-  plhs[0] = mxCreateDoubleMatrix(n, n, mxREAL);
-  P = mxGetPr(plhs[0]);
+  plhs[1] = mxCreateDoubleMatrix(n, n, mxREAL);
+  P = mxGetPr(plhs[1]);
   // Call the slicot routine
   sb02od(DICO, JOBB, FACT, UPLO, JOBL, SORT, &n, &p, &p, &T[0], &LDA, &Z[0], &LDB, &QQ[0], &LDQ, &H[0], &LDR, &L[0], &LDL, &rcond, &P[0], &LDX, &WR[0], &WI[0], &BETA[0], &S[0], &LDS, &TT[0], &LDT, &UU[0], &LDU, &tolerance, &IWORK[0], &DWORK[0], &LDWORK, &BWORK[0], &INFO);
   mxFree(T);
@@ -271,5 +264,5 @@ mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
           }
         }
     }
-  return;
+  plhs[0] = mxCreateDoubleScalar(0);
 }
diff --git a/tests/kalman_steady_state/test1.m b/tests/kalman_steady_state/test1.m
index 895aeb9f69..d928d2b374 100755
--- a/tests/kalman_steady_state/test1.m
+++ b/tests/kalman_steady_state/test1.m
@@ -17,7 +17,8 @@ for i=1:100
     Z(1,1) = 1;
     Z(2,3) = 1;
     Z(3,6) = 1;
-    P = kalman_steady_state(transpose(T),QQ,transpose(Z),H);
+    [err P] = kalman_steady_state(transpose(T),QQ,transpose(Z),H);
+    mexErrCheck('kalman_steady_state',err);
 end
 
 % Without measurment errors.
@@ -34,5 +35,6 @@ for i=1:100
     Z(1,1) = 1;
     Z(2,3) = 1;
     Z(3,6) = 1;
-    P = kalman_steady_state(transpose(T),QQ,transpose(Z),H);
+    [err P] = kalman_steady_state(transpose(T),QQ,transpose(Z),H);
+    mexErrCheck('kalman_steady_state',err);
 end
-- 
GitLab