function [ id, points, im ] = markers( file, ~ )
%markers: Detecta marcadores en la imagen
%   Devuelve los identificadores, las esquinas y la imagen
%     *sin parámetros captura imagenes de la cármara  (Pulsa q/Q/Esc
%      para devolver las esquinas y los identificadores)
%     *si se indica un fichero se procesa la imagen del fichero
%     *si se añade un parámetro extra (cualquier valor), muestra la imagen del fichero con el marcador
%
%   Valores devueltos:
%     id: es un vector con los identificadores de las marcas detectadas
%     points: es una matriz de tres dimensiones points(j,k,i): 
%             j: índice de las dos coordenadas (c,f) 
%             k: índice de las 4 esquinas del marcador
%             i: es el índice  en el vector de ids 
%     im: imagen procesada
%

% Ejecutable detección marcadores
if isunix || ismac
    command = './markers ';
else
    command = 'markers.exe ';
end

if nargin <1
    % si se omite el parámetro -> captura imagenes de la cármara
    [status,cmdout] = system([command, ' > tmp.key']);
elseif nargin <2
    % si se indica el fichero se procesa la imagen
    [status,cmdout] = system([command, file, ' > tmp.key']);
else
    % si se añade un parámetro extra muestra la imagen con el marcador
    [status,cmdout] = system([command, ' -d ', file, ' > tmp.key']);
end


% Abre fichero tmp.key 
tmp_file = fopen('tmp.key', 'r');
if tmp_file == -1
    error('Could not open file tmp.key.');
end

filename='';
% Lee cabecera
keyword = 'filename= ';
while ~feof(tmp_file)
    text=fgetl(tmp_file);
    pos = strfind(text, keyword);
    if ~isempty(pos)
        filename = text(pos+size(keyword,2):end);
        break;
    end
end   

    
% Busca el id y las coordendas de los marcadores
i=1; 
points=[]; id = [];
      
while ~feof(tmp_file)
    % busca el id
    id_found = false;
    while ~feof(tmp_file)
        keyword = 'id= ';
        text=fgetl(tmp_file);
        pos = strfind(text, keyword);
        if ~isempty(pos)
            id(i) = str2num(text(pos+size(keyword,2):end));
            id_found = true;
            break;
        end
    end 
    
    if  id_found
        % lee 4 esquinas
        for j=1:4
            text=fgetl(tmp_file);
            points(:,j,i) = str2num(text);
        end
        % comprueba si ha leido las 4 esquinas
        if size(points(:,:,i),2) == 4
            i=i+1;
        else
            points(:,:,i) = []; % elimina el marcador incompleto
        end
    end
end

im =[];
if ~isempty(filename)
    im = imread(filename);
end

fclose(tmp_file);

end % end script
