function [list lfhd ctot]=ziplist(fn)

lfsig=hex2dec('4034b50');

lfhd=struct('sig',uint32(0),'ver',uint16(0),'bit',uint16(0),'meth',uint16(0),'time',uint16(0),'date',uint16(0),'crc32',uint32(0),'csz',uint32(0),'ucsz',uint32(0),'fnsz',uint16(0),'exsz',uint16(0));
list=cell(1);
ex=cell(1);

bs=512;

fid=fopen(fn);

ctot=0;
fc=1;
[lfhd(fc) cnt]=zipreadlhead(fid);
ctot=ctot+30;
while(lfhd(fc).sig==lfsig)
  list{fc}=char(fread(fid,lfhd(fc).fnsz,'char'))';
  ctot=ctot+lfhd(fc).fnsz;
  ex{fc}=char(fread(fid,lfhd(fc).exsz,'char'))';
  ctot=ctot+lfhd(fc).exsz;
  err=fseek(fid,lfhd(fc).csz,'cof');
  if(err)
    r='n';
    while(r=='n')
    st=ftell(fid);
    c=0;
    while(c~=4);
      while(c~=3);
        while(c~=75);
          while (c~=80);
            c=fread(fid,1,'uint8');
          end;
          c=fread(fid,1,'uint8');
        end;
        c=fread(fid,1,'uint8');
      end;
      c=fread(fid,1,'uint8');
    end
    fseek(fid,-4,'cof');
    lfhd(fc).csz=ftell(fid)-st;
    [tmp cnt]=zipreadlhead(fid);
    char(fread(fid,tmp.fnsz,'char'))'
    r=input('(y/n)?','s');
  end
  end
  ctot=ctot+lfhd(fc).csz;
  fc=fc+1;
  [lfhd(fc) cnt]=zipreadlhead(fid);
  ctot=ctot+30;
end

fclose(fid);