Code covered by the BSD License  

Highlights from
slatec

from slatec by Ben Barrowes
The slatec library converted into matlab functions.

[i,j,aij,indcat,prgopt,dattrv,iflag]=usrmat(i,j,aij,indcat,prgopt,dattrv,iflag);
function [i,j,aij,indcat,prgopt,dattrv,iflag]=usrmat(i,j,aij,indcat,prgopt,dattrv,iflag);
persistent l ; 

if isempty(l), l=0; end;
%***BEGIN PROLOGUE  USRMAT
%***SUBSIDIARY
%***PURPOSE  Subsidiary to SPLP
%***LIBRARY   SLATEC
%***TYPE      SINGLE PRECISION (USRMAT-S, DUSRMT-D)
%***AUTHOR  (UNKNOWN)
%***DESCRIPTION
%
%   The user may supply this code
%
%***SEE ALSO  SPLP
%***ROUTINES CALLED  (NONE)
%***REVISION HISTORY  (YYMMDD)
%   811215  DATE WRITTEN
%   891214  Prologue converted to Version 4.0 format.  (BAB)
%   900328  Added TYPE section.  (WRB)
%***end PROLOGUE  USRMAT
prgopt_shape=size(prgopt);prgopt=reshape(prgopt,1,[]);
dattrv_shape=size(dattrv);dattrv=reshape(dattrv,1,[]);
%
%***FIRST EXECUTABLE STATEMENT  USRMAT
if( iflag(1)==1 )
%
%     THIS IS THE INITIALIZATION STEP.  THE VALUES OF IFLAG(K),K=2,3,4,
%     ARE RESPECTIVELY THE COLUMN INDEX, THE ROW INDEX (OR THE NEXT COL.
%     INDEX), AND THE POINTER TO THE MATRIX ENTRY'S VALUE WITHIN
%     DATTRV(*).  ALSO CHECK (DATTRV(1)=0.) SIGNIFYING NO DATA.
if( dattrv(1)==0. )
i = 0;
j = 0;
iflag(1) = 3;
else;
iflag(2) = fix(-dattrv(1));
iflag(3) = fix(dattrv(2));
iflag(4) = 3;
end;
%
prgopt_shape=zeros(prgopt_shape);prgopt_shape(:)=prgopt(1:numel(prgopt_shape));prgopt=prgopt_shape;
dattrv_shape=zeros(dattrv_shape);dattrv_shape(:)=dattrv(1:numel(dattrv_shape));dattrv=dattrv_shape;
return;
else;
j = fix(iflag(2));
i = fix(iflag(3));
l = fix(iflag(4));
if( i==0 )
%
%     SIGNAL THAT ALL OF THE NONZERO ENTRIES HAVE BEEN DEFINED.
iflag(1) = 3;
prgopt_shape=zeros(prgopt_shape);prgopt_shape(:)=prgopt(1:numel(prgopt_shape));prgopt=prgopt_shape;
dattrv_shape=zeros(dattrv_shape);dattrv_shape(:)=dattrv(1:numel(dattrv_shape));dattrv=dattrv_shape;
return;
elseif( i<0 ) ;
%
%     SIGNAL THAT A SWITCH IS MADE TO A NEW COLUMN.
j = fix(-i);
i = fix(dattrv(l));
l = fix(l + 1);
end;
%
aij = dattrv(l);
%
%     UPDATE THE INDICES AND POINTERS FOR THE NEXT ENTRY.
iflag(2) = fix(j);
iflag(3) = fix(dattrv(l+1));
iflag(4) = fix(l + 2);
%
%     INDCAT=0 DENOTES THAT ENTRIES OF THE MATRIX ARE ASSIGNED THE
%     VALUES FROM DATTRV(*).  NO ACCUMULATION IS PERFORMED.
indcat = 0;
prgopt_shape=zeros(prgopt_shape);prgopt_shape(:)=prgopt(1:numel(prgopt_shape));prgopt=prgopt_shape;
dattrv_shape=zeros(dattrv_shape);dattrv_shape(:)=dattrv(1:numel(dattrv_shape));dattrv=dattrv_shape;
return;
end;
prgopt_shape=zeros(prgopt_shape);prgopt_shape(:)=prgopt(1:numel(prgopt_shape));prgopt=prgopt_shape;
dattrv_shape=zeros(dattrv_shape);dattrv_shape(:)=dattrv(1:numel(dattrv_shape));dattrv=dattrv_shape;
end
%DECK UVEC

Contact us at files@mathworks.com