亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? dir.c

?? MMC interface and FAT File system
?? C
字號:
//###########################################################
// File: dir.c
//
// For FAT12, FAT16 and FAT32
// FAT32 not tested yet
// Only for first Partition
// Only for drives with 512 bytes per sector (the most)
//
//#########################################################################
// Last change: 09.11.2003
//#########################################################################
// holger.klabunde@t-online.de
// http://home.t-online.de/home/holger.klabunde/homepage.htm
//#########################################################################
// Compiler: AVR-GCC 3.2
//#########################################################################
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

#include "protos.h"
#include "dos.h"
#include "mydefs.h"
#include "serial.h"

/*
unsigned char MakeDir(char *name)
{
 //MakeFilename

 //Test if directoryname exists in currentdir
   //if directory exist return success

 //MakeNewDirentry

 //AllocCluster for new dir
   //Cluster allocated ? if not return no_success
   
 //clean all sectors of cluster (fill with 0x00)
 //insert "." my new dir entry
 //insert ".." upper dir entry
 //return success
}
*/
       
//###########################################################
unsigned char ChangeDir(char *name)
//###########################################################
{
 if(FindName(name)==FULL_MATCH) return F_OK;
 else return F_ERROR;
}

//###########################################################
unsigned char MakeNewFileEntry(void)
//###########################################################
{
 unsigned long tmpsector,tmpcluster,lastdircluster;
 unsigned int i;
 unsigned char result;
 
 if(CurrentDirCluster<2) result=SearchRootDir();
 else result=SearchSubDir(CurrentDirCluster);

 if(result==0)
  {
   //if dir is rootdir (FAT12/16 only) you have a problem ;)
   if(CurrentDirCluster<2 && (FATtype==FAT12 || FATtype==FAT16) )
    {
#ifdef F_DEBUG
     puts("Rootdir is full !\n");
#endif
     return F_ERROR;
    }

   //search the last cluster of directory
   lastdircluster=CurrentDirCluster;
   do
    {
     tmpcluster=GetNextClusterNumber(lastdircluster);
     if(tmpcluster < endofclusterchain) lastdircluster=tmpcluster;
    }while(tmpcluster < endofclusterchain);
   
   tmpcluster=AllocCluster(lastdircluster); //if currentdir is full alloc new cluster for dir
   if(tmpcluster==DISK_FULL) //no free clusters ?
    {
#ifdef F_DEBUG
     puts("No free cluster for directory !\n");
#endif
     return F_ERROR;
    }

   //fill all cluster sectors with zero
   for(i=0; i<BYTE_PER_SEC; i++) inbuff[i]=0; //Fill write buffer

   tmpsector=GetFirstSectorOfCluster(tmpcluster);
   for(i=0; i<secPerCluster; i++)
    {
     CFWriteSector(tmpsector,inbuff);
     tmpsector++;
    }
   
   FileDirOffset=0;              //set offset for new direntry in dirsector
   FileDirSector=GetFirstSectorOfCluster(tmpcluster);
  }     

 tmpcluster=AllocCluster(0); //alloc first cluster for file
 if(tmpcluster==DISK_FULL) //no free clusters ?
  {
#ifdef F_DEBUG
   puts("No free cluster for file !\n");
#endif
   return F_ERROR;
  }

 FileFirstCluster=tmpcluster;
 FileSize=0;
 UpdateFileEntry(); //write new file entry

 return F_OK; //all ok 
}

//###########################################################
unsigned char UpdateFileEntry(void)
//###########################################################
{
 struct DirEntry *di;
 
 CFReadSector(FileDirSector,inbuff);
 di=(struct DirEntry *)&inbuff[FileDirOffset*32];

 strncpy(di->DIR_Name,FileName,8);
 strncpy(di->DIR_Ext,FileExt,3);

 di->DIR_Attr=ATTR_FILE;
 di->DIR_NTres=0;
 di->DIR_CrtTimeTenth=0;

//because i have no clock give file a fixed time
 di->DIR_CrtTime=(unsigned int)( (19<<11) + (21<<5) );      //creation time
 di->DIR_CrtDate=(unsigned int)( (23<<9) + (5<<5) + 10);  //creation date
 di->DIR_LastAccDate=(unsigned int)( (23<<9) + (5<<5) + 10);  //last access date 10.05.2003
 di->DIR_WrtTime=(unsigned int)( (19<<11) + (21<<5) ); //last write time 19:21
 di->DIR_WrtDate=(unsigned int)( (23<<9) + (5<<5) + 10); //last write date 10.05.2003

 di->DIR_FstClusHI=(unsigned int)(FileFirstCluster>>16);  //first cluster high word                 
 di->DIR_FstClusLO=(unsigned int)(FileFirstCluster & 0xFFFF);  //first cluster low word                 
 di->DIR_FileSize=FileSize;

 CFWriteSector(FileDirSector,inbuff);
 return F_OK;
}

//###########################################################
//search root dir for free dir entry
unsigned char SearchRootDir(void)
//###########################################################
{
 unsigned long i;
 unsigned char result;

 result=0;
  
 for(i=0; i<RootDirSectors; i++)
  {
   result=SearchDirSector(FirstRootSector+i);
   if(result!=0) break; //break sector loop
  }

 return result;
}

//###########################################################
//search sub dir for free dir entry
unsigned char SearchSubDir(unsigned long startcluster)
//###########################################################
{
 unsigned long tmpsector,tmpcluster;
 unsigned char i,result;
 
 tmpcluster=startcluster;
 result=0;
 
 while(tmpcluster < endofclusterchain)
  {
   tmpsector=GetFirstSectorOfCluster(tmpcluster);
   for(i=0; i<secPerCluster; i++)
    {
     result=SearchDirSector(tmpsector+i);
     if(result!=0) break; //break sector loop
    } 

   if(result!=0) break; //break cluster loop
   tmpcluster=GetNextClusterNumber(tmpcluster);
  }

 return result;
}

//###########################################################
//search dir sector for free dir entry
unsigned char SearchDirSector(unsigned long sector)
//###########################################################
{
 unsigned int count;

 CFReadSector(sector,inbuff); //read one directory sector.
 count=0;
 do
  {
   if(inbuff[count]==0 || inbuff[count]==0xE5)
    {
     FileDirSector=sector; //keep some values in mind
     FileDirOffset=count/32;
     return 1;
    }

   count+=32;
  }while(count<BYTE_PER_SEC);

 return 0;
}

//###########################################################
// List dir function (if name==NULL)
// Change to dir or find a filename (if name!=NULL)
//
// Following global variables will be set if dir or filename
// was found:
//
// For directories:
// CurrentDirCluster First cluster of directory
//
// For files:
// FileName          8 chars for filename
// FileExt           3 chars for extension
// FileDirSector     Sector which keeps direntry of the file
// FileDirOffset     Offset to direntry of the file
// FileFirstCluster  First cluster of the dir/file in FAT 
// FileSize
unsigned char ScanOneDirectorySector(unsigned long sector, char *name)
//###########################################################
{
 unsigned char by,i;
 unsigned int count;
 unsigned long tmp;
 struct DirEntry *di;
 struct DirEntryBuffer *dib;
 char nam[8];
 char ext[3];
 unsigned char match;

 if(name) //find filename or directory name
  {
   MakeFileName(name,nam,ext);
  }//if(name)
 
 by=CFReadSector(sector,inbuff); //read one directory sector.
 count=0;
 do
  {
   match=NO_MATCH;
   di=(struct DirEntry *)(&inbuff[count]);
   //make a second pointer to inbuff for easier access to long filename entrys
   dib=(struct DirEntryBuffer *)di;
   
   if(di->DIR_Name[0]==0) return END_DIR; //end of directory
      
   if(di->DIR_Name[0]!=0xE5 && di->DIR_Name[0]>0)
    {
     di->DIR_Attr&=0x3F;            //smash upper two bits

     if(di->DIR_Attr==ATTR_LONG_NAME)
      {
#ifdef F_DEBUG
       //show parts of long filenames. max. 13 chars per dir entry
       //beginning at the *END* of filename :-(
       if(lo && name==NULL)
        {
         puts("L "); //show flag long filename entry
         for(i=1; i<=9; i+=2) { by=dib->longchars[i]; if(by<0xFF) putchar(by); }
         for(i=14; i<=24; i+=2) { by=dib->longchars[i]; if(by<0xFF) putchar(by); }
         for(i=28; i<=30; i+=2) { by=dib->longchars[i]; if(by<0xFF) putchar(by); }

         puts("\n");
        } 
#endif
      }
     else
      {
       if(name==NULL) //List only
        {
#ifdef F_DEBUG
         if(di->DIR_Attr & ATTR_VOLUME_ID) puts("V "); //flag volume
         else if(di->DIR_Attr & ATTR_DIRECTORY) puts("D "); //flag directory
            else puts("F ");                      //flag file

         for(i=0; i<8; i++) putchar(di->DIR_Name[i]); //show filename
         putchar('.');
         for(i=0; i<3; i++) putchar(di->DIR_Ext[i]); //show extension

         putchar(' ');

         if(di->DIR_Attr & ATTR_READ_ONLY) putchar('R'); else putchar('-'); //read only
         if(di->DIR_Attr & ATTR_SYSTEM) putchar('S'); else putchar('-');    //system
         if(di->DIR_Attr & ATTR_HIDDEN) putchar('H'); else putchar('-');    //hidden
         if(di->DIR_Attr & ATTR_ARCHIVE) putchar('A'); else putchar('-');   //archived
#endif
        }//if(name==NULL)
       else //searching for a filename or a directory name
        {
         if(strncmp(nam,di->DIR_Name,8)==0) match=MATCH_NAME;
         if(strncmp(ext,di->DIR_Ext,3)==0) match+=MATCH_EXT;
#ifdef F_DEBUG
         if(echo) { if(match==FULL_MATCH) puts("Found\n"); }
#endif
        }
                
       if(di->DIR_Attr & ATTR_VOLUME_ID)
        {
#ifdef F_DEBUG
         if(name==NULL) puts(" <VOL>\n");
#endif
        }
       else
        {
#ifdef F_DEBUG
         if(name==NULL) //List only
          {
           by=(unsigned char)(di->DIR_WrtDate & 0x001F); //day of month
           printf("  %02u.",by);
           by=(unsigned char)((di->DIR_WrtDate>>5) & 0x000F); //month
           printf("%02u.",by);
           by=(unsigned char)(di->DIR_WrtDate>>9); //year since 1980
           if(by<20) by+=80; else by-=20;
           printf("%02u",by);
              
           by=(unsigned char)(di->DIR_WrtTime>>11); //hour of day
           printf("  %02u:",by);
           by=(unsigned char)((di->DIR_WrtTime>>5) & 0x003F); //minute
           printf("%02u",by);
          }//if(name==NULL)
#endif            
         if(di->DIR_Attr & ATTR_DIRECTORY) //this is a directory
          {
           tmp=di->DIR_FstClusHI; //Highword of first cluster number
           tmp<<=16;
           tmp+=di->DIR_FstClusLO; //Lowword of first cluster number

           if(name==NULL) //List only
            {
#ifdef F_DEBUG
             printf(" <DIR>      Clu: % 9lu\n",tmp);
#endif
            } 
           else          //searching for a directoryname
            {
             if(match==FULL_MATCH)
              {
               CurrentDirCluster=tmp;
#ifdef F_DEBUG
               if(echo) printf("%lu\n",CurrentDirCluster);
#endif
               return FULL_MATCH;
              } 
            }//if(name==NULL) 
          }//if(di->DIR_Attr & ATTR_DIRECTORY)
         else //is not a directory. this is a file
          {
           tmp=di->DIR_FstClusHI; //Highword of first cluster number
           tmp<<=16;
           tmp+=di->DIR_FstClusLO; //Lowword of first cluster number

           if(name==NULL) //List filenames only
            {
#ifdef F_DEBUG
             printf(" % 9lu  Clu: % 9lu\n",di->DIR_FileSize,tmp);
#endif
            }
           else //searching for a filename
            {
             if(match==FULL_MATCH)
              {
               strncpy(FileName,nam,8);
               strncpy(FileExt,ext,3);
               FileDirSector=sector; //keep some values in mind
               FileDirOffset=count/32;
               FileFirstCluster=tmp;
               FileSize=di->DIR_FileSize;
#ifdef F_DEBUG
               if(echo) printf("%lu\n%lu\n%lu\n%u\n",FileFirstCluster,FileSize,FileDirSector,FileDirOffset);
#endif
               return FULL_MATCH;
              } 
             } 

          }//if(di->DIR_Attr & ATTR_DIRECTORY)
        }
      }
         
    }//if(di->DIR_Name[0]!=0xE5 && di->DIR_Name[0]>0)
        
   count+=32;
  }while(count<BYTE_PER_SEC);

 return NO_MATCH;
}


//###########################################################
unsigned char ScanSubDir(unsigned long startcluster, char *name)
//###########################################################
{
 unsigned long tmpsector,tmpcluster;
 unsigned char i,result;
 
 tmpcluster=startcluster;
 result=NO_MATCH;
 
 while(tmpcluster < endofclusterchain)
  {
   tmpsector=GetFirstSectorOfCluster(tmpcluster);
   for(i=0; i<secPerCluster; i++)
    {
     result=ScanOneDirectorySector(tmpsector+i, name);
     if(result!=NO_MATCH) break; //break sector loop
    } 

   if(result!=NO_MATCH) break; //break cluster loop
   tmpcluster=GetNextClusterNumber(tmpcluster);
  }

 if(echo) ser_putc(EOT); //End of Transmission
 return(result);
}

//###########################################################
//FAT12/16 only
unsigned char ScanRootDir(char *name)
//###########################################################
{
 unsigned long i;
 unsigned char result;

 result=NO_MATCH;
  
 for(i=0; i<RootDirSectors; i++)
  {
   result=ScanOneDirectorySector(FirstRootSector+i, name);
   if(result!=NO_MATCH) break; //break sector loop
  }

 if(echo) ser_putc(EOT); //End of Transmission
 return(result);
}

//###########################################################
void MakeFileName(char *inname, char *outname, char *outext)
//###########################################################
{
 unsigned char by,i,j;
 char *po;

 po=outname;
 for(i=0; i<8; i++) *po++=' '; //fill filename buffers with spaces

 po=outext;
 *po++=' ';
 *po++=' ';
 *po  =' ';

 po=outname;

 if(inname[0]=='.' && inname[1]=='.') //change to upper dir
  {
   *po++='.';
   *po  ='.';
  }
 else
  {
   i=0; //get filename and make it uppercase
   do
    {
     by=inname[i];
     if(by!='.' && by!=0) *po++=toupper(by);
     i++;
    }while(i<8 && by!='.' && by!=0);

   //if i < 8 there was a dot or a \0
   //if i == 8 there could be a dot or a \0
   if(i==8 && by!='.' && by!=0) { by=inname[i]; i++; }

   if(by=='.')
    {
     j=0;
     do
      {
       by=inname[i];
       if(by!=0) outext[j]=toupper(by);
       j++;
       i++;
      }while(j<3 && by!=0);
    }
  }

// for(i=0; i<8; i++) putchar(outname[i]);
// for(i=0; i<3; i++) putchar(outext[i]);
}


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久草热8精品视频在线观看| 性做久久久久久免费观看欧美| 色视频欧美一区二区三区| 免费观看在线综合| 亚洲三级电影全部在线观看高清| 3atv一区二区三区| 91一区二区在线观看| 九一九一国产精品| 亚洲国产乱码最新视频| 国产日本一区二区| 日韩欧美色综合网站| 在线观看亚洲精品| 播五月开心婷婷综合| 美美哒免费高清在线观看视频一区二区| 国产精品美女www爽爽爽| 日韩一级大片在线| 欧美三级日本三级少妇99| 成人午夜在线播放| 国产在线视视频有精品| 亚洲大片一区二区三区| 成人午夜看片网址| 久久超碰97人人做人人爱| 亚洲一区二区三区视频在线| 中文字幕一区二区在线播放| 久久综合网色—综合色88| 欧美三级视频在线播放| 色婷婷综合久久久久中文一区二区| 丁香婷婷综合激情五月色| 国产在线精品免费av| 蜜臀av性久久久久av蜜臀妖精| 亚洲在线观看免费视频| 一区二区高清免费观看影视大全| 国产精品久久久久一区二区三区共| 久久蜜桃香蕉精品一区二区三区| 欧美一区二区三区四区在线观看 | 成人美女视频在线观看18| 欧美zozozo| 欧美影院午夜播放| 91浏览器入口在线观看| 99精品偷自拍| 91麻豆6部合集magnet| 91网址在线看| 91免费版在线| 欧美性色黄大片手机版| 一区二区中文视频| 中文字幕第一页久久| 国产精品热久久久久夜色精品三区| 久久精品一区八戒影视| 国产精品欧美精品| 最新国产精品久久精品| 亚洲三级电影网站| 亚洲一区二区三区四区五区中文| 亚洲 欧美综合在线网络| 三级一区在线视频先锋| 日本91福利区| 国产一区不卡视频| 高清成人免费视频| 色综合天天综合网天天看片| 欧美性生活一区| 69堂精品视频| 久久久久久综合| 国产精品国产三级国产普通话三级| 国产精品三级电影| 亚洲自拍都市欧美小说| 蜜桃传媒麻豆第一区在线观看| 久久99精品国产麻豆不卡| 懂色av中文字幕一区二区三区| 99国产精品视频免费观看| 欧美群妇大交群中文字幕| 日韩精品最新网址| 国产精品欧美综合在线| 一区二区三区不卡视频 | 中文字幕欧美一| 一区二区三区丝袜| 轻轻草成人在线| 国产91精品在线观看| 欧美性一二三区| 2020国产精品久久精品美国| 亚洲精品美腿丝袜| 另类小说综合欧美亚洲| 成人综合在线网站| 欧美视频一区二区三区四区 | 中文字幕av在线一区二区三区| 亚洲精品成a人| 久久精品国产第一区二区三区| 国产成人一级电影| 欧美日韩一级大片网址| 国产亚洲福利社区一区| 亚洲国产成人av| 国产福利一区在线观看| 欧美日韩中文一区| 国产精品网友自拍| 日韩电影在线观看电影| 92精品国产成人观看免费| 在线播放中文字幕一区| 国产精品久久久久久久岛一牛影视 | 欧美一区二区三区日韩| 国产精品视频免费| 久久99九九99精品| 欧美日韩mp4| 中文字幕一区二区三区在线播放| 日本午夜精品视频在线观看| 91丨九色丨蝌蚪富婆spa| 精品国产亚洲一区二区三区在线观看| 18欧美亚洲精品| 国产乱码一区二区三区| 91精品国产手机| 一区二区三区在线视频播放| 国产成人高清在线| 日韩欧美亚洲另类制服综合在线| 夜夜夜精品看看| 91浏览器在线视频| 国产精品美女久久久久aⅴ| 国产精品一品二品| 欧美r级电影在线观看| 午夜精品久久久| 色先锋资源久久综合| 国产精品欧美经典| 国产v日产∨综合v精品视频| 久久众筹精品私拍模特| 蜜臀va亚洲va欧美va天堂 | 欧美丰满一区二区免费视频| 亚洲乱码国产乱码精品精小说| 国产精品一区在线观看乱码| 日韩一区二区在线观看视频播放| 亚洲国产成人tv| 欧美日韩一区二区三区四区五区| 亚洲日穴在线视频| 91麻豆精东视频| 亚洲免费高清视频在线| 91视频www| 亚洲免费观看高清完整| 91黄色免费网站| 艳妇臀荡乳欲伦亚洲一区| 色婷婷久久99综合精品jk白丝| 最新欧美精品一区二区三区| 91亚洲精品一区二区乱码| 国产精品国产精品国产专区不片| 国产成人三级在线观看| 亚洲国产精品精华液2区45| 国产999精品久久| 国产精品久久久久永久免费观看 | 久久99精品国产.久久久久久| 欧美精品黑人性xxxx| 亚洲成在人线免费| 在线不卡一区二区| 国内成人精品2018免费看| 2023国产精品视频| 成人在线视频首页| 日韩理论在线观看| 欧美图区在线视频| 日本不卡一二三| 精品91自产拍在线观看一区| 国产精品一区二区在线观看不卡| 久久精品男人的天堂| 成人黄页毛片网站| 亚洲精品免费在线播放| 欧美在线不卡一区| 免费的国产精品| 久久九九全国免费| 99re在线视频这里只有精品| 性做久久久久久| 精品人在线二区三区| 粉嫩嫩av羞羞动漫久久久| 亚洲精品免费视频| 在线综合+亚洲+欧美中文字幕| 美女视频免费一区| 中文字幕不卡的av| 欧美日韩另类一区| 国产尤物一区二区在线| 最新久久zyz资源站| 在线播放国产精品二区一二区四区| 久久99精品久久只有精品| 中文字幕亚洲区| 欧美日韩免费高清一区色橹橹| 久久国产精品无码网站| 中文字幕亚洲不卡| 欧美丰满少妇xxxbbb| 成人性视频免费网站| 视频一区视频二区中文| 国产日韩视频一区二区三区| 一本色道久久综合狠狠躁的推荐 | 狠狠色狠狠色综合系列| 亚洲色大成网站www久久九九| 91精品国产手机| 91视视频在线直接观看在线看网页在线看| 香港成人在线视频| 国产精品天干天干在线综合| 欧美精品xxxxbbbb| 成人精品免费网站| 秋霞午夜av一区二区三区| 国产精品久久久久久久第一福利| 欧美一区二区三区精品| 波多野结衣一区二区三区| 日韩主播视频在线| 中文字幕视频一区| 精品久久一区二区| 欧美精品一级二级| 一本久久综合亚洲鲁鲁五月天| 激情文学综合插|