function [ap,wr,sil,n,eg] = parsemopts(opts)
	% [append, write, silent, n , eg] = PARSEMOPTS(opts)
	% Returns which options were given in the opts char string.
	% This is used in several of the mattex ;

	% set default values
	ap = 1;
	wr = 0;
	sil = 0;
	n  = 2;
	eg = 0;


	if strcmp(class(opts),'double')
		% if only a number was given this must be n.
		n = opts;
	elseif strcmp(class(opts),'char')

		w = strfind(opts,'w');	% write  ?
		a = strfind(opts,'a');	% append ?
		s = strfind(opts,'s');	% silent ?
		e = strfind(opts,'e');	% scientific ?

		% error if both write and append are given, default append if nothing is given
		if ( (numel(a) > 0) && ( numel(w) > 0 ) )
			error('both the append and write options were given, this is contradictory');
		elseif (numel(a) == 0) && ( numel(w) == 0 )
			append = 1;
			write = 0;
		end

		% write
		if numel(w) > 0
			ap = 0;
			wr = 1;
			opts(w) = ' ';
		end

		% append
		if numel(a) > 0
			ap = 1;
			wr = 0;
			opts(a) = ' ';
		end

		% silent
		if numel(s) > 0 
			sil = 1;
			opts(s) = ' ';
		else
			sil = 0;
		end

		% scientific
		if numel(e) > 0 
			eg = 1;
			opts(e)=' ';
		else
			eg = 0;
		end

		% find numerical characters in string
		id = regexp(opts,'\d');

		if length(id) == 0
			n = 2;
		else
			% check if there is a gap in id (this would be bad, two numbers are given)
			bad = 0;
			for i = id(1):id(end)
				if sum(i==id) == 0
					bad = bad + 1;
				end
			end
			if bad > 0
				error(['there are multiple numbers given in the options string, I expected'...
						' only one.']);
			else
				numstr = opts(id);
				n = str2num(numstr);
				opts(id) = '';
			end
		end

		opts(strfind(opts,' '))=''; % clear remaining whitespace

		% are any unknown options given?
		if numel(opts)>0
			error(['unknown option: ' opts]);
		end
	end

	% check if value of n is erranous
	if n < 1
		error([ 'n must be absolutely positive (n>0). ' ...
			   'You cannot have 0 or less significant digits.']);
	end
end