Team Ai
Datasetpublic

hschumann2/TempleOS-Source-Code

sourceHugging Faceupdated 1y agoView on Hugging Face
0likes847downloads
DskStrA.txt345 linesDownload Raw Back to BlkDev
1 2U8 *FileExtDot(U8 *src)3{//Find dot char in name.4  I64 ch;5  while (ch=*src++)6    if (ch=='.' && *src!='/' && *src!='.')7      return src-1;8  return NULL;9}10 11U8 *FileExtRem(U8 *src,U8 *dst=NULL)12{//Remove filename extension from str.13  U8 *ptr;14  if (ptr=FileExtDot(src)) {15    if (dst)16      StrCpy(dst,ptr+1);17    *ptr=0;18  } else if (dst)19    *dst=0;20  return dst;21}22 23Bool IsDotZ(U8 *filename)24{//Does name end in .Z?25  I64 i=StrLen(filename);26  if (StrOcc(filename,'.')>1 && filename[i-1]=='Z' && filename[i-2]=='.')27    return TRUE;28  else29    return FALSE;30}31 32Bool IsDotC(U8 *filename)33{//Does name end in .C?34  I64 i=StrLen(filename);35  if (StrOcc(filename,'.')>1 && filename[i-1]=='C' && filename[i-2]=='.')36    return TRUE;37  else38    return FALSE;39}40 41Bool FilesFindMatch(U8 *_test_name,U8 *files_find_mask,I64 fuf_flags=0)42{//Does filename meet Files Find mask?43  I64 tn_len=StrLen(_test_name),mask_len=StrLen(files_find_mask);44  U8 *mask1=MAlloc(mask_len+1),*mask2=MAlloc(mask_len+1),45        *ptr,*test_name1,*test_name2;46  Bool res=FALSE;47  StrCpy(mask1,files_find_mask);48  if (StrOcc(_test_name,'/')) {49    test_name1=MAlloc(tn_len+1);50    test_name2=MAlloc(tn_len+1);51    StrCpy(test_name1,_test_name);52    StrLastRem(test_name1,"/",test_name2);53  } else {54    test_name1=NULL;55    test_name2=NULL;56  }57  while (TRUE) {58    StrFirstRem(mask1,";",mask2);59    if (!test_name2 || StrOcc(mask2,'/'))60      ptr=_test_name;61    else62      ptr=test_name2;63    if (*mask2) {64      if (*mask2=='!') {65        if (WildMatch(ptr,mask2+1)) {66          res=FALSE;67          break;68        }69      } else {70        if (WildMatch(ptr,mask2)) {71          if (Bt(&fuf_flags,FUf_JUST_TXT) &&72                !FilesFindMatch(_test_name,FILEMASK_TXT)) {73            res=FALSE;74            break;75          } else if (Bt(&fuf_flags,FUf_JUST_DD) &&76                !FilesFindMatch(_test_name,FILEMASK_DD)) {77            res=FALSE;78            break;79          } else if (Bt(&fuf_flags,FUf_JUST_SRC) &&80                !FilesFindMatch(_test_name,FILEMASK_SRC)) {81            res=FALSE;82            break;83          } else if (Bt(&fuf_flags,FUf_JUST_AOT) &&84                !FilesFindMatch(_test_name,FILEMASK_AOT)) {85            res=FALSE;86            break;87          } else if (Bt(&fuf_flags,FUf_JUST_JIT) &&88                !FilesFindMatch(_test_name,FILEMASK_JIT)) {89            res=FALSE;90            break;91          } else if (Bt(&fuf_flags,FUf_JUST_GR) &&92                !FilesFindMatch(_test_name,FILEMASK_GR)) {93            res=FALSE;94            break;95          } else96            res=TRUE;97        }98      }99    } else100      break;101  }102  Free(test_name1);103  Free(test_name2);104  Free(mask1);105  Free(mask2);106  return res;107}108 109U8 *DirNameAbs(U8 *_dirname)110{//MAlloc absolute dir string with drv letter.111  I64 maxlen;112  U8 drv[3],*res,*buf,*buf2,*buf3,*buf4,*dirname,*free_dirname;113  if (!Fs->cur_dir || !*Fs->cur_dir)114    return StrNew(_dirname);115  free_dirname=dirname=MStrUtil(_dirname,116        SUF_REM_LEADING|SUF_REM_TRAILING|SUF_REM_CTRL_CHARS);117  *drv=Drv2Let;118  drv[1]=':';119  drv[2]=0;120  if (*dirname && dirname[1]==':') {121    if (*dirname==':')122      *drv=blkdev.boot_drv_let;123    else if (*dirname=='~')124      *drv=*blkdev.home_dir;125    else126      *drv=*dirname;127    dirname=dirname+2;128    buf=StrNew("/");129  } else130    buf=StrNew(Fs->cur_dir);131  if (*dirname=='/') {132    Free(buf);133    buf=StrNew("/");134    dirname++;135  }136  buf2=StrNew(dirname);137  maxlen=StrLen(buf)+1+StrLen(buf2)+1;138  buf3=MAlloc(maxlen);139  buf4=MAlloc(maxlen);140  StrCpy(buf3,buf);141  while (*buf2) {142    StrFirstRem(buf2,"/",buf4);143    if (!*buf4)144      StrCpy(buf3,"/");145    else if (!StrCmp(buf4,"..")) {146      StrLastRem(buf3,"/");147      if (!*buf3)148        StrCpy(buf3,"/");149    } else if (!StrCmp(buf4,"~")) {150      Free(buf3);151      buf3=MAlloc(StrLen(blkdev.home_dir+2)+1+StrLen(buf2)+1);152      StrCpy(buf3,blkdev.home_dir+2);153      *drv=*blkdev.home_dir;154    } else if (!StrCmp(buf4,"."));155    else if (*buf4) {156      if (StrCmp(buf3,"/"))157        CatPrint(buf3,"/");158      CatPrint(buf3,buf4);159    }160  }161  Free(buf);162  res=MAlloc(StrLen(buf3)+3);163  StrCpy(res,drv);164  StrCpy(res+2,buf3);165  Free(buf2);166  Free(buf3);167  Free(buf4);168  Free(free_dirname);169  return res;170}171 172U8 *FileNameAbs(U8 *_filename,I64 fuf_flags=0)173{//Absolute filename. Accepts FUF_Z_OR_NOT_Z, FUF_SCAN_PARENTS.174  U8 *res,*filename,*buf,*buf_file,*buf_dir,*free_filename,*free_buf;175  CDirEntry de;176  free_filename=filename=MStrUtil(_filename,177        SUF_REM_LEADING|SUF_REM_TRAILING|SUF_REM_CTRL_CHARS);178  free_buf=buf=StrNew(filename);179  if (*buf && buf[1]==':') {180    buf+=2;181    filename+=2;182  }183  buf_file=MAlloc(StrLen(free_filename)+1);184  StrLastRem(buf,"/",buf_file);185  if (*filename=='/' && !*buf)186    StrCpy(buf,"/");187  buf_dir=DirNameAbs(free_buf);188  Free(free_buf);189  res=MAlloc(StrLen(buf_dir)+1+StrLen(buf_file)+1);190  StrCpy(res,buf_dir);191  if (res[StrLen(res)-1]!='/')192    CatPrint(res,"/");193  CatPrint(res,buf_file);194  Free(buf_file);195  Free(buf_dir);196  Free(free_filename);197  if (fuf_flags && FileFind(res,&de,fuf_flags|FUF_JUST_FILES)) {198    Free(res);199    res=de.full_name;200  }201  return res;202}203 204U8 *ExtChg(U8 *filename,U8 *extension)205{//Change filename extension.206  U8 *res=MAlloc(StrLen(filename)+1+StrLen(extension)+1);207  StrCpy(res,filename);208  if (FileExtDot(filename))209    FileExtRem(res);210  return CatPrint(res,".%s",extension);211}212 213U8 *ExtDft(U8 *filename,U8 *extension)214{//Give extension if has none.215  U8 *res=MAlloc(StrLen(filename)+1+StrLen(extension)+1);216  StrCpy(res,filename);217  if (!FileExtDot(filename))218    CatPrint(res,".%s",extension);219  return res;220}221 222CDirEntry *Cd2DirEntry(CDirEntry *tmpde,U8 *abs_name)223{224  I64 i;225  while (tmpde) {226    i=StrLen(tmpde->full_name);227    if (StrNCmp(tmpde->full_name,abs_name,i)||228          i && tmpde->full_name[i-1]!='/' && abs_name[i] && abs_name[i]!='/')229      tmpde=tmpde->next;230    else231      if (StrLen(abs_name)==i)232        return tmpde;233      else234        return Cd2DirEntry(tmpde->sub,abs_name);235  }236  return NULL;237}238 239I64 FileAttr(U8 *name,I64 attr=0)240{241  if (IsDotZ(name))242    attr|=RS_ATTR_COMPRESSED;243  else244    attr&=~RS_ATTR_COMPRESSED;245  if (IsDotC(name))246    attr|=RS_ATTR_CONTIGUOUS;247  return attr;248}249 250Bool FileNameChk(U8 *filename)251{//Return check for valid filename, not checking existence.252  U8 *ptr=filename;253  if (!filename) return FALSE;254  if (!*ptr) return FALSE;255  if (*ptr=='.') {256    if (!ptr[1]) return TRUE;257    if (ptr[1]=='.' && !ptr[2]) return TRUE;258  }259  if (StrLen(filename)>=CDIR_FILENAME_LEN) return FALSE;260  while (*ptr)261    if (!Bt(char_bmp_filename,*ptr++))262      return FALSE;263  return TRUE;264}265 266U8 *ToggleZorNotZ(U8 *name)267{//MAlloc name with Z if not Z or vice versa.268  U8 *res;269  if (IsDotZ(name)) {270    res=StrNew(name);271    res[StrLen(name)-2]=0;272  } else273    res=MStrPrint("%s.Z",name);274  return res;275}276 277U8 *FileNameTmpTxt()278{//Make pretty-safe tmp filename in home dir.279  return MStrPrint("~/SysTmp%X.DD.Z",GetTSC>>8&0xFFFFFFFF);280}281 282U8 *DirCur(CTask *task=NULL,CTask *mem_task=NULL)283{//MAlloc copy of cur dir with drv letter.284  U8 *st;285  if (!task) task=Fs;286  if (!task->cur_dir)287    return NULL;288  st=MAlloc(StrLen(task->cur_dir)+3,mem_task);289  *st=Drv2Let(task->cur_dv);290  st[1]=':';291  StrCpy(st+2,task->cur_dir);292  return st;293}294 295U8 *DirFile(U8 *dirname,U8 *name=NULL,U8 *_extension=NULL)296{/*Strips file from dirname, scans for file upward until found or297returns default.298 299("/Kernel/KHashA.HC.Z",NULL,NULL)       returns "D:/Kernel"300("/Kernel",NULL,"PRJ.Z")                returns "D:/Kernel/Kernel.PRJ.Z"301("/Kernel/BlkDev",NULL,"PRJ.Z")         returns "D:/Kernel/Kernel.PRJ.Z"302("/Apps/Psalmody","Load","HC.Z")        returns "D:/Apps/Psalmody/Load.HC.Z"303*/304  U8 *st=DirNameAbs(dirname),*st2,*st3,*res,*dft=NULL,*ext;305  if (_extension && *_extension) {306    if (*_extension=='.')307      ext=StrNew(_extension);308    else309      ext=MStrPrint(".%s",_extension);310  } else311    ext=StrNew("");312  while (StrOcc(st,'/')&&!IsDir(st))313    StrLastRem(st,"/");314  while (StrOcc(st,'/')) {315    st2=StrNew(st);316    st3=StrNew(st);317    StrLastRem(st2,"/",st3);318 319    if (name)320      res=MStrPrint("%s/%s%s",st,name,ext);321    else {322      if (*ext)323        res=MStrPrint("%s/%s%s",st,st3,ext);324      else325        res=StrNew(st);326    }327    if (!dft)328      dft=StrNew(res);329    if (!*ext && (!name||!*name) || FileFind(res)) {330      Free(st3);331      Free(st2);332      Free(st);333      Free(dft);334      Free(ext);335      return res;336    }337    Free(st);338    st=st2;339    Free(st3);340  }341  Free(st);342  Free(ext);343  return dft;344}345