My script snippet for building my job structure from scratch is below. As you can see, I don't use the covariates structure per se, but rather mres.
Hope this helps!
-Tom
% Ensure following variables are defined:
%
% dir - Analysis directory
% fn - Filename list of n files; length-n column vector cell array
% cv - Covariate specification;
% cv - Standard covariate structure
% cv(i).c - covariate n-by-1 vector
% cv(i).cname - covariate name
% cv(i).iCC - 1 = center, 5 = don't center
% mask - Mask or cell array of masks used to retain just brain
% ath - Analysis threshold (voxels less than ath excluded)
%
% Design configuration
%
% Set scans (cell array) and covariates (see structure in usage above)
factorial_design.des.mreg.scans = fn;
factorial_design.des.mreg.mcov = cv;
% Covariates - None
factorial_design.cov = repmat(struct('c',[],'cname',[],'iCFI',[],'iCC',[]),0,0);
% Masking - Threshold masking, Absolute
factorial_design.masking.tm.tma.athresh = ath;
% Masking - Implicit
factorial_design.masking.im = 1;
% Masking - Explicit (cell array of masks; must contain empty string if no mask)
factorial_design.masking.em = {mask};
% Global - No calculation
factorial_design.globalc.g_omit = [];
% Grand mean - No scaling
factorial_design.globalm.gmsca.gmsca_no = [];
% Global normalisation - 1=None, 2=Proportional, 3=ANCOVA
factorial_design.globalm.glonorm = 1;
% Analysis directory
factorial_design.dir = {dir};
% Place in the jobs structure
jobs{1}.stats{1}.factorial_design = factorial_design;