/* insert row at r, c - caled by _cbinsertrow and _cbinserterow */
_cbinsertrow_insert(s = {}, val = {}, r = 1, c = 1, mode = 0)
{
local y, nr_s, nc_s, nr_v, nc_v, c_end, ins;
y = s;
if (not(isempty(val)))
{
(nr_s, nc_s) = size(y);
(nr_v, nc_v) = size(val);
c_end = min(c + nc_v - 1, nc_s);
ins = y[.., c..c_end];
r = r * ones(1, nc_v);
ins = insert(ins, val, r, mode);
(nr_v, nc_v) = size(ins);
y[.., c..(c + nc_v - 1)] = ins;
}
return(y);
}