function [F,h] = loadsdpafile(varargin)
%LOADSDPAFILE Loads a problem definition in the SDPA format
%
%    [F,h] = loadsdpafile('filename')  Loads the problem min(h(x)), F(x)>0 from file 'filename'
%    [F,h] = loadsdpafile         A "Open" - box will be opened

% Author Johan Löfberg
% $Id: loadsdpafile.m,v 1.3 2005-06-17 13:02:01 joloef Exp $

filename = varargin{1};

% Does the file exist
if ~exist(filename)
    filename = [filename '.dat-s'];
    if ~exist(filename)
        error(['No such file.']);
    end
end
    
% Load using SeDuMi
try
    [At,b,c,K,perm] = fromsdpa(filename);
catch
    error('LOADSDPAFILE currently requires SeDuMi to be installed');
end

nvars = length(b);
x = sdpvar(nvars,1);

F = set([]);
top = 1;
if isfield(K,'l')
    if K.l(1)>0
        X = c(top:top+K.l-1)-At(top:top+K.l-1,:)*x;
        F = F + set(X(:));
        top = top + K.l;
    end
end

if isfield(K,'s')
    if K.s(1)>0
        for i = 1:length(K.s)
            [ix,iy,iv] = find([c(top:top+K.s(i)^2-1) At(top:top+K.s(i)^2-1,:)]);
            off = (ix-1)/(K.s(i)+1);
            if all(off == round(off))           
                X = c(top:top+K.s(i)^2-1)-At(top:top+K.s(i)^2-1,:)*x;
                F = F + set(diag(reshape(X,K.s(i),K.s(i))) > 0);
                top = top + K.s(i)^2;
            else
                X = c(top:top+K.s(i)^2-1)-At(top:top+K.s(i)^2-1,:)*x;
                F = F + set(reshape(X,K.s(i),K.s(i)) > 0);
                top = top + K.s(i)^2;
            end
        end
    end
end

h = -b'*x;

