function nc_varput(ncfile,varname,data,varargin)
%NC_VARPUT:  Writes data into a netCDF file.
%
%   NC_VARPUT(NCFILE,VARNAME,DATA) writes the matlab variable DATA to
%   the variable VARNAME in the netCDF file NCFILE.  The main requirement
%   here is that DATA have the same dimensions as the netCDF variable.
% 
%   NC_VARPUT(NCFILE,VARNAME,DATA,START,COUNT) writes DATA contiguously, 
%   starting at the zero-based index START and with extents given by
%   COUNT.
%
%   NC_VARPUT(NCFILE,VARNAME,DATA,START,COUNT,STRIDE) writes DATA  
%   starting at the zero-based index START with extents given by
%   COUNT, but this time with strides given by STRIDE.  If STRIDE is not
%   given, then it is assumes that all data is contiguous.
%
%   Setting the preference 'PRESERVE_FVD' to true will compel MATLAB to 
%   display the dimensions in the opposite order from what the C utility 
%   oct_ncdump displays.  Writing large data becomes much more efficient in
%   this case.
%
%   Any '_FillValue', 'missing_value', 'scale_factor', or 'add_offset'
%   attributes of VARNAME will be honored if possible.
% 
%   Example:
%       nc_create_empty('myfile.nc');
%       nc_adddim('myfile.nc','longitude',360);
%       varstruct.Name = 'longitude';
%       varstruct.Nctype = 'double';
%       varstruct.Dimension = { 'longitude' };
%       nc_addvar('myfile.nc',varstruct);
%       nc_varput('myfile.nc','longitude',[-180:179]');
%       nc_dump('myfile.nc');
%
%   Example:  write only two values to 'longitude'.
%       data = [0 1]';
%       oct_start = 180;
%       count = 2;
%       nc_varput('myfile.nc','longitude',data,oct_start,count);
%
%   See also nc_varget, nc_create_empty, nc_adddim, nc_addvar.


%% for vectors make row/columnwise irrelevent
if isvector(data)
    vinfo = nc_getvarinfo(ncfile,varname);
    if numel(vinfo.Size) == 1
        data = reshape(data,[numel(data) 1]);
    end
end

%% write
backend = snc_write_backend(ncfile);
switch(backend)
	case 'tmw'
		nc_varput_tmw(ncfile,varname,data,varargin{:});
	case 'tmw_hdf4'
		nc_varput_hdf4(ncfile,varname,data,varargin{:});
	case 'tmw_hdf4_2011b'
		nc_varput_hdf4_2011b(ncfile,varname,data,varargin{:});
	case 'oct_mexnc'
		oct_nc_varput_mexnc(ncfile,varname,data,varargin{:});
end

return
