⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ffs_util.c

📁 ADAM2 sources (modified by Oleg)
💻 C
📖 第 1 页 / 共 2 页
字号:
                  {                  idir=_ffs_GetBit16Value(ffse2->inode);                  _ffs_prepend(appname,sizeof appname,"/");                  cp=ffse2->data;                  for(j=0;(j<iFileNameLength2)&&(j<((sizeof dirname)-1));j++)                     dirname[j]=*cp++;                  dirname[j]=0;                  _ffs_prepend(appname,sizeof appname,dirname);                  }                }              ffse2=ffs_GetNextFileSystemEntry(ffse2);              }            }          _ffs_prepend(appname,sizeof appname,"/");          AppCopyVectors();          argc=1;          argv[0]=appname;            gopc=progloader(argc,argv);           init_env();          ResetMMS();          if (gopc)            {            dsts=ExeAt(gopc,argc,argv,(char **)env_vars);            PrintfRestore();            }          if (dsts&0x80000000)            tsts=dsts;          }        }      ffse=ffs_GetNextFileSystemEntry(ffse);      }    }  return(tsts);  }int ffs_autoload(void)  {  int i;  for(i=0;i<ffs_iNumOfFlashMounts;i++)    {    _ffs_autoexecute(i,ffs_sFlashFileSystemsMounts[i].ffs_ptr);    }  return(0);  }bit32u ffs_dumpfilesystem(int argc, char *argv[])  {  int i,show_deleted;  char *cp;  show_deleted=FALSE;  for(i=1;i<argc;i++)    {    cp=argv[i];    if (*cp=='-')      {      cp++;      while(*cp)        {        switch(*cp)          {          case 'a': show_deleted=TRUE;                    break;          default:  break;          }        cp++;        }       }    }  for(i=0;i<ffs_iNumOfFlashMounts;i++)    {    _ffs_DumpFlashDisk(i,ffs_sFlashFileSystemsMounts[i].ffs_ptr,show_deleted);    }  return(0);  }void ffs_ReportFFSInfo(void)  {  ffs_tEntry *ffse;  int i,iSlot,iFlashFileSystemSize,iCurrentFreeSpace,iFreeSpaceAfterCleanUp;  int iCurrentUsedSpace,iFileLength,iFileNameLength,iFileFlags;   sys_printf("\n");  sys_printf("Mounted File Systems: %d.\n",ffs_iNumOfFlashMounts);  for(i=0;i<ffs_iNumOfFlashMounts;i++)    {    ffse=ffs_sFlashFileSystemsMounts[i].ffs_ptr;    iSlot=ffs_sFlashFileSystemsMounts[i].slot;    ffse=(ffs_tEntry *)(((char *)ffse)+4);    iFlashFileSystemSize=_ffs_GetBit32Value((char *)ffse);    iCurrentFreeSpace=iFreeSpaceAfterCleanUp=iFlashFileSystemSize-10;    iCurrentUsedSpace=0;    ffse=(ffs_tEntry *)(((char *)ffse)+4);    while(_ffs_GetBit16Value(ffse->inode)!=0xffff)      {      iFileLength=_ffs_GetBit24Value(ffse->flen);      iFileNameLength=ffse->fnlen&0x0ff;      iFileFlags=_ffs_GetBit16Value(ffse->flags);      ffse=(ffs_tEntry *)(((char *)ffse)+(sizeof(ffs_tEntry)-1)+iFileLength+iFileNameLength);      iCurrentFreeSpace-=(sizeof(ffs_tEntry)-1)+iFileLength+iFileNameLength;      if (iFileFlags&FFS_F_DELETE)        {        iFreeSpaceAfterCleanUp-=(sizeof(ffs_tEntry)-1)+iFileLength+iFileNameLength;        iCurrentUsedSpace+=iFileLength;        }      }    sys_printf("Slot=%2d, Total=%8d, Used=%8d, Available=",iSlot,iFlashFileSystemSize-10,iCurrentUsedSpace);    if (iCurrentFreeSpace==iFreeSpaceAfterCleanUp)      sys_printf("%8d\n",iCurrentFreeSpace);     else      sys_printf("%8d / %d\n",iCurrentFreeSpace,iFreeSpaceAfterCleanUp);    }  }/*void ffs_find_new_ffs(void)                                                *//*  {                                                                        *//*                                                                           *//*                                                                           *//*  }                                                                        *//*void ffs_findfirst(cbit8 uid,cbit8 gid,cbit8 *rstruct)                     *//*  {                                                                        *//*                                                                           *//*                                                                           *//*                                                                           *//*  }                                                                        *//*void ffs_findnext(cbit8 uid,cbit8 gid,cbit8 *rstruct)                      *//*  {                                                                        *//*                                                                           *//*                                                                           *//*                                                                           *//*  }                                                                        */ffs_tEntry *ffs_GetNextFileSystemEntry(ffs_tEntry *ffse)  {  int   iFileNameLength;  bit32 iFileLength;  iFileLength=_ffs_GetBit24Value(ffse->flen);  iFileNameLength=ffse->fnlen&0x0ff;  return((ffs_tEntry *)(((char *)ffse)+(sizeof(ffs_tEntry)-1)+iFileLength+iFileNameLength));  }/*void ls(char filename)                                                     *//*  {                                                                        *//*                                                                           *//*  AceGetMyUidGid(&uid,&gid);                                               *//*                                                                           *//*                                                                           *//*                                                                           *//*                                                                           *//*  }                                                                        */void get_cwd(char *tmpfile)  {  strcpy(tmpfile,"/tmp");  }void ffs_AbandonWrite(FFS_FILE *stream)  {  ffs_tEntry *ffse;    if ((stream->_FileState&FILE_OPEN)==0) return;  if (stream->_SubSystemType!=FILE_FLASH) return;  if ((stream->_FileState&FILE_WRITE)==0) return;  ffse=(ffs_tEntry *)stream->_BufferBase;    stream->_FileState=FILE_FREE;  sys_free(ffse);  }static char RootFlash[]={'F','F','S',0,0x00,0x00,0x0e,0x00,                         0,0,0xff,0x83,0x7e,0xff,0x34,0x12,0,0,3,2,0,0,0,                         'e','t','c',                         1,0,                         0,0,0xff,0x83,0x7e,0xff,0x34,0x12,0,0,3,2,0,0,0,                         'b','i','n',                         2,0,                         1,0,0xc0,0x81,0xda,0x3a,0,0,0,0,8,7,0,0,3,                         0x68,0x6f,0x73,0x74,0x6e,0x61,0x6d,0x65,                         0x6d,0x79,0x73,0x65,0x6c,0x66,0x0a,                         0xff,0xff};int _ffs_FormatRootFlashDisk(int argc, char *argv[])  {  int i,slot;  bit32u adr1,bootblocksize,envblocksize;  slot=0;  sys_printf("Formating Flash Disk\n");  if (ffs_RemoveSlotMount(slot)==FFS_ERRS_NO_ERROR)    sys_printf("Flash Disk Unmounted\n");  bootblocksize=FWBGetBlockSize(CS0_BASE);  if (bootblocksize<MIN_BOOT_BLOCK_SIZE)     bootblocksize=MIN_BOOT_BLOCK_SIZE;  envblocksize=FWBGetBlockSize(CS0_BASE+CS0_SIZE-1);  if (envblocksize<MIN_ENV_BLOCK_SIZE)     envblocksize=MIN_ENV_BLOCK_SIZE;  i=getflashsize(CS0_BASE,CS0_SIZE)/(1024*1024);  sys_printf("Calculated Flash size: %d Mbytes\n",i);  adr1=1024*1024*i;  adr1-=bootblocksize+envblocksize;  if (argc!=7)    {    if (!FWBErase(CS0_BASE+bootblocksize,adr1,1))      {      sys_printf("\nFormatting Flash disk Failed!");      return(0);      }    }  sys_printf("\n");    FWBOpen(CS0_BASE+bootblocksize);  for(i=0;i<sizeof(RootFlash);i++)     {    if ((i>=4)&&(i<=7))      {      FWBWriteByte(CS0_BASE+bootblocksize+i,(char)(adr1>>((i-4)*8)));      }     else      FWBWriteByte(CS0_BASE+bootblocksize+i,RootFlash[i]);    }  FWBClose();  if (ffs_AddFileSystem(0,(void *)(CS0_BASE+bootblocksize))==FFS_ERRS_NO_ERROR)    sys_printf("Flash Disk Mounted\n");  return(0);  }ffs_tEntry *GetFfsBase(int ffs_index)  {  if(ffs_index<ffs_iNumOfFlashMounts)    return(ffs_sFlashFileSystemsMounts[ffs_index].ffs_ptr);   else    return(0);  }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -