コード例 #1
0
ファイル: cdfs.cpp プロジェクト: rameshg87/osmosys
bool iso9660::flist(char *path)
{
  int flag,bp,prv_fldr=1,f_cnt,g,st=0,i=0,j,file_flag=0,folder_flag=0,k,count;
  unsigned char tname[30],*bf,*bf2;
  short int file_location,parent;
  if((pr.pts%512)==0)
    count=pr.pts/512;
  else
    count=(pr.pts/512)+1;
  bf=(unsigned char*) (klm.kdmalloc (count*512));
  drv->pioread(pr.lptb*4,count,bf);
  int off=0;
load_rdr(0,pr.rdr);
  
  if(path[0]!='\0' && path[0]=='/')
  {
      path++;
  }  
while(path[i]!='\0')
    {
    
      load_ptb(0,bf);
      off=0;
      bp=0;
      flag=0;
      j=0;
      if(i==0)
	file_location=pt.loc_ext;
      
      
      while(path[i]!='/' && path[i]!='\0')
	{
	  tname[j++]=path[i++];
	}
      tname[j]='\0';
      if(path[i]=='/' || path[i]=='\0')
	{
	  if(path[i]!='\0')
	  i++;
	  while(off<pr.pts)
	    {
	      if(pt.len_di%2==0)	
		{
		  off=off+8+pt.len_di;
		  if(off!=pr.pts)
		    {	
		      load_ptb(off,bf);
		      bp++;
		    }
		  if(prv_fldr!=pt.par_dir_no)
		    {
		      
		      flag=0;
		      continue;
		    }
		  
		  for(g=0;tname[g]!='\0' && tname[g]==pt.dir_id[g];++g);
		  if((off==pr.pts && pt.len_di!=g)||(g==pt.len_di && parent==pt.par_dir_no && tname[g]!='\0'))
		    {
		      disp1.printf("\nInvalid Directory %s",tname);
		      return 0;
		    }
		  
		  else if(g==pt.len_di && tname[g]=='\0')
		    {
		      
		      file_location=pt.loc_ext;
		      parent=pt.par_dir_no;
		      prv_fldr=bp+1;
		      flag=1;
		      //disp1.printf("\nParent Directory of %s is %x",tname,parent);
		      break;
		    }
		}
	      
	      else
		{
		  off=off+8+pt.len_di+1;
		  if(off!=pr.pts)
		    {
		      load_ptb(off,bf);
		      bp++;
		    }
		  
		  if(prv_fldr!=pt.par_dir_no)
		    {
		      
		      flag=0;
		      continue;
		    }
		  
		  
		  for(g=0;tname[g]!='\0' && tname[g]==pt.dir_id[g];++g);
		  if((off==pr.pts && g!=pt.len_di)||(g==pt.len_di && parent==pt.par_dir_no && tname[g]!='\0'))
		    {
		      disp1.printf("\nInvalid Directory %s",tname);
		      return 0;
		    }
		  else if(g==pt.len_di && tname[g]=='\0')
		    {
		      
		      file_location=pt.loc_ext;
		      parent=pt.par_dir_no;
		      prv_fldr=bp+1;
		      //disp1.printf("\nParent Directory of %s is %x",tname,parent);
		      flag=1;
		      break;
		    }
		}
	    }
	  if(flag==0)
	    {
	      
	      disp1.printf("\nCannot find the directory %s",tname);
	      return 0;
	    }
		
	}
    }
  	  
  //disp1.printf("\nNonesense location %x %x",file_location,pr.lbs);

  //disp1.printf("\n");
  
  if(path[0]=='\0' && *(path-1)=='/')
    {
  
      file_location=rd.loc_ext;
    
      
    }
  if((pr.lbs%512)==0)
    count=pr.lbs/512;
  else
    count=(pr.lbs/512)+1;
  bf2=(unsigned char*) (klm.kdmalloc (count*512));
  
  drv->pioread(file_location*4,count,bf2);
  off=0;
  flag=0;
  load_rdr(off,bf2);
  off=off+rd.len_dir;
  load_rdr(off,bf2);
  off=off+rd.len_dir;
  load_rdr(off,bf2);
  int h;
  while(rd.len_dir !=0)
    {
	if(rd.file_flag==0x00)
	   disp1.setattrib(0x02);
        else
	   disp1.setattrib(0x01);

      for(h=0;h<rd.len_file_id;++h)
	disp1.printf("%c",rd.file_id[h]);
      disp1.printf("  ");	
      off=off+rd.len_dir;
      load_rdr(off,bf2);
      
    }
  disp1.printf("\n");	  
  disp1.setattrib(0x0f);

  return 1;
}