Team Ai
Datasetpublic

hschumann2/TempleOS-Source-Code

sourceHugging Faceupdated 1y agoView on Hugging Face
0likes847downloads
ADskB.txt193 linesDownload Raw Back to ABlkDev
1 2#help_index "File/Internal"3I64 DirTreeSerializeSize(CDirEntry *tmpde)4{5  I64 res=0;6  while (tmpde) {7    res+=CDIR_SIZE+1;8    if (tmpde->attr & RS_ATTR_DIR)9      res+=DirTreeSerializeSize(tmpde->sub);10    tmpde=tmpde->next;11  }12  return res+1;13}14I64 DirTreeSerializeFill(CDirEntry *tmpde,U8 *dst)15{16  I64 res=0,i;17  while (tmpde) {18    *dst++=1;19    res++;20    MemCpy(dst,&tmpde->start,CDIR_SIZE);21    dst+=CDIR_SIZE;22    res+=CDIR_SIZE;23    if (tmpde->attr & RS_ATTR_DIR) {24      i=DirTreeSerializeFill(tmpde->sub,dst);25      dst+=i;26      res+=i;27    }28    tmpde=tmpde->next;29  }30  *dst=0;31  return res+1;32}33public U8 *DirTreeSerialize(CDirEntry *tmpde,I64 *_size=NULL)34{//Serialize tree returned from FilesFind() into a one contiguous U8 array.35  I64 size=DirTreeSerializeSize(tmpde);36  U8 *buf=MAlloc(size);37  DirTreeSerializeFill(tmpde,buf);38  if (_size) *_size=size;39  return buf;40}41 42U8 *DirTreeUnserialize2(U8 *src,CDirEntry **tmpde)43{44  CDirEntry *tmpde1;45  if (*src++) {46    tmpde1=CAlloc(sizeof(CDirEntry));47    *tmpde=tmpde1;48    MemCpy(&tmpde1->start,src,CDIR_SIZE);49    src+=CDIR_SIZE;50    if (tmpde1->attr & RS_ATTR_DIR)51      src=DirTreeUnserialize2(src,&tmpde1->sub);52    src=DirTreeUnserialize2(src,&tmpde1->next);53  } else54    *tmpde=NULL;55  return src;56}57public CDirEntry *DirTreeUnserialize(U8 *src)58{//Unserialize tree to make it like a tree returned from FilesFind().59  CDirEntry *tmpde=NULL;60  DirTreeUnserialize2(src,&tmpde);61  return tmpde;62}63 64#help_index "File/Program Routines"65U0 FOFlatten(CDirEntry *tmpde,CDirEntry **a,I64 *i)66{67  CDirEntry *tmpde1;68  while (tmpde) {69    tmpde1=tmpde->next;70    if (tmpde->attr&RS_ATTR_DIR) {71      FOFlatten(tmpde->sub,a,i);72      DirEntryDel(tmpde);73    } else {74      a[*i]=tmpde;75      *i=*i+1;76    }77    tmpde=tmpde1;78  }79}80 81I64 Size1(CDirEntry *tmpde,I64 *_fuf_flags,I64 round_to)82{83  U8 buf[BLK_SIZE];84  I64 res=0,i;85  CDrv *dv;86  while (tmpde) {87    if ((i=tmpde->size) && Bt(_fuf_flags,FUf_EXPAND) &&88          !(tmpde->attr&RS_ATTR_DIR) &&89          FileAttr(tmpde->name)&RS_ATTR_COMPRESSED) {90      dv=Let2Drv(*tmpde->full_name);91      BlkRead(dv,buf,Clus2Blk(dv,tmpde->clus),1);92      i=(&buf)(CArcCompress *)->expanded_size;93    }94    if (round_to)95      i=CeilU64(tmpde->size,round_to);96    if (tmpde->attr&RS_ATTR_DIR)97      i+=Size1(tmpde->sub,_fuf_flags,round_to);98    tmpde->user_data=i;99    res+=i;100    tmpde=tmpde->next;101  }102  return res;103}104public I64 Size(U8 *files_find_mask="/*",U8 *fu_flags=NULL,I64 round_to=0)105{//Total size of files in mask. "+x" for expanded size.106//Does not include directory size of base directory, but107  //does include size of sub directories.108  I64 fuf_flags=0,res=0;109  CDirEntry *tmpde1=NULL;110  ScanFlags(&fuf_flags,Define("ST_FILE_UTIL_FLAGS"),"+r");111  ScanFlags(&fuf_flags,Define("ST_FILE_UTIL_FLAGS"),fu_flags);112  if (tmpde1=FilesFind(files_find_mask,fuf_flags&FUG_FILES_FIND)) {113    fuf_flags&=FUF_EXPAND;114    res=Size1(tmpde1,&fuf_flags,round_to);115    DirTreeDel(tmpde1);116  }117  return res;118}119 120public I64 FileCnt(CDirEntry *tmpde)121{//Cnt of files in CDirEntry tree.122  I64 cnt=0;123  while (tmpde) {124    if (tmpde->attr&RS_ATTR_DIR)125      cnt+=FileCnt(tmpde->sub);126    else127      cnt++;128    tmpde=tmpde->next;129  }130  return cnt;131}132 133#help_index "File/Cmd Line (Typically);Cmd Line (Typically)"134public I64 FF(U8 *files_find_mask,U8 *fu_flags=NULL)135{//Files find. List files matching mask.136  I64 cnt=0,fuf_flags=0;137  CDirEntry *tmpde,*tmpde1;138  ScanFlags(&fuf_flags,Define("ST_FILE_UTIL_FLAGS"),"+r+f+F");139  ScanFlags(&fuf_flags,Define("ST_FILE_UTIL_FLAGS"),fu_flags);140  tmpde=tmpde1=FilesFind(files_find_mask,fuf_flags);141  while (tmpde) {142    PutFileLink(tmpde->full_name);143    '\n';144    cnt++;145    tmpde=tmpde->next;146  }147  DirTreeDel(tmpde1);148  return cnt;149}150 151public I64 Zip(U8 *files_find_mask="*",U8 *fu_flags=NULL)152{//Compress files by moving to .Z filename.153  U8 *st;154  CDirEntry *tmpde,*tmpde1;155  I64 res=0,fuf_flags=0;156  ScanFlags(&fuf_flags,Define("ST_FILE_UTIL_FLAGS"),"+r+f+F+O");157  ScanFlags(&fuf_flags,Define("ST_FILE_UTIL_FLAGS"),fu_flags);158  tmpde=tmpde1=FilesFind(files_find_mask,fuf_flags);159  while (tmpde) {160    if (!IsDotZ(tmpde->full_name)) {161      st=MStrPrint("%s.Z",tmpde->full_name);162      res+=Move(tmpde->full_name,st);163      Free(st);164    }165    tmpde=tmpde->next;166  }167  DirTreeDel(tmpde1);168  return res;169}170 171public I64 Unzip(U8 *files_find_mask="*.Z",U8 *fu_flags=NULL)172{//Uncompress files by moving to not .Z filename.173//You don't have to do this for normal operation.174  //It automatically unzips ".Z" files.175  U8 *st;176  CDirEntry *tmpde,*tmpde1;177  I64 res=0,fuf_flags=0;178  ScanFlags(&fuf_flags,Define("ST_FILE_UTIL_FLAGS"),"+r+f+F+O");179  ScanFlags(&fuf_flags,Define("ST_FILE_UTIL_FLAGS"),fu_flags);180  tmpde=tmpde1=FilesFind(files_find_mask,fuf_flags);181  while (tmpde) {182    if (IsDotZ(tmpde->full_name)) {183      st=StrNew(tmpde->full_name);184      StrLastRem(st,".");185      res+=Move(tmpde->full_name,st);186      Free(st);187    }188    tmpde=tmpde->next;189  }190  DirTreeDel(tmpde1);191  return res;192}193