* bug 15070 fixed: bitset() failed for bit pos as encoded integer
[scilab.git] / scilab / modules / elementary_functions / macros / bitset.sci
index 50c6e9f..8fa11a8 100644 (file)
@@ -25,13 +25,15 @@ function y = bitset(x,pos,v)
     rhs = argn(2);
 
     if rhs < 2 then
-        error(msprintf(gettext("%s: Wrong number of input argument(s): At least %d expected.\n"),"bitset",2));
+        msg = _("%s: Wrong number of input argument(s): At least %d expected.\n")
+        error(msprintf(msg, "bitset", 2));
     end
 
     // case empty matrix
     if isempty(x)
         if ~isempty(pos) & prod(size(pos))<>1
-            error(msprintf(gettext("%s: Wrong size for input arguments: Same sizes expected.\n"),"bitset"));
+            msg = _("%s: Wrong size for input arguments: Same sizes expected.\n")
+            error(msprintf(msg, "bitset"));
         else
             y=[]
             return
@@ -40,14 +42,16 @@ function y = bitset(x,pos,v)
 
     // check v value
     if rhs == 3 & or(v <> 0 & v <> 1) then
-        error(msprintf(gettext("%s: Wrong value for input argument #%d: 0 or 1 expected.\n"),"bitset",3));
+        msg = _("%s: Wrong value for input argument #%d: 0 or 1 expected.\n")
+        error(msprintf(msg, "bitset",3));
     elseif rhs == 2 then
         v = ones(x);
     end
 
     // check size
     if or(size(x) <> size(pos)) | or(size(v) <> size(x)) then
-        error(msprintf(gettext("%s: Wrong size for input arguments: Same sizes expected.\n"),"bitset"));
+        msg = _("%s: Wrong size for input arguments: Same sizes expected.\n")
+        error(msprintf(msg, "bitset"));
     end
 
     // check type
@@ -55,14 +59,16 @@ function y = bitset(x,pos,v)
         | (type(x) == 8  & (inttype(x) < 10)) ..
         | (typeof(x) == "hypermat" & (or(x-floor(x) <> 0) | or(x < 0))) ..
         | (type(x) <> 1 & type(x) <> 8 & typeof(x) <> "hypermat") then
-        error(msprintf(gettext("%s: Wrong type for input argument #%d: Scalar/matrix/hypermatrix of unsigned integers expected.\n"),"bitset",1));
+        msg = _("%s: Wrong type for input argument #%d: Scalar/matrix/hypermatrix of unsigned integers expected.\n")
+        error(msprintf(msg, "bitset",1));
     end
 
     if (type(pos) == 1  & (or(pos-floor(pos) <> 0) | or(pos < 0))) ..
         | (type(pos) == 8  & (inttype(pos) < 10)) ..
         | (typeof(pos) == "hypermat" & (or(pos-floor(pos) <> 0) | or(pos < 0))) ..
         | (type(pos) <> 1 & type(pos) <> 8 & typeof(pos) <> "hypermat") then
-        error(msprintf(gettext("%s: Wrong type for input argument #%d: Scalar/matrix/hypermatrix of unsigned integers expected.\n"),"bitset",2));
+        msg = _("%s: Wrong type for input argument #%d: Scalar/matrix/hypermatrix of unsigned integers expected.\n")
+        error(msprintf(msg, "bitset",2));
     end
 
     // check pos value
@@ -74,7 +80,8 @@ function y = bitset(x,pos,v)
     end
 
     if or(pos > posmax) | or(pos < 1) then
-        error(msprintf(gettext("%s: Wrong value for input argument #%d: Must be between %d and %d.\n"),"bitset",2,1,posmax));
+        msg = _("%s: Wrong value for input argument #%d: Must be between %d and %d.\n")
+        error(msprintf(msg, "bitset", 2, 1, posmax));
     end
 
     // Algorithm
@@ -95,11 +102,10 @@ function y = bitset(x,pos,v)
     if type(x(1)) == 8 then
 
         select inttype(x(1))
-        case 11 then mask = uint8(2^(pos(:)-1));
-        case 12 then mask = uint16(2^(pos(:)-1));
-        case 14 then mask = uint32(2^(pos(:)-1));
+        case 11 then mask = 2^uint8((pos(:)-1));
+        case 12 then mask = 2^uint16((pos(:)-1));
+        case 14 then mask = 2^uint32((pos(:)-1));
         end
-
         mask = matrix(mask, sz);
         y(vZero) = x(vZero) & (~mask(vZero));
         y(vOne) = x(vOne) | mask(vOne);