//-- Crawl Zip
AZREADDIRP az_readdir(char * path) {
  int pathlen = strlen(path);
  char * pbuf = malloc(pathlen + 1);
  memset(pbuf, 0, pathlen + 1);
  AARRAYP res = aarray_create();
  int i;
  
  for (i = 0; i < zip.numEntries; i++) {
    ZipEntry * ze = &zip.pEntries[i];
    
    if (ze->fileNameLen > pathlen) {
      memcpy(pbuf, ze->fileName, pathlen);
      
      if (strcmp(pbuf, path) == 0) {
        int    fl = ze->fileNameLen - pathlen + 1;
        char * fn = malloc(fl);
        memset(fn, 0, fl);
        int j;
        byte t = 0;
        
        for (j = pathlen; j < ze->fileNameLen; j++) {
          if (ze->fileName[j] == '/') {
            t = 1;
            break;
          }
          
          fn[j - pathlen] = ze->fileName[j];
        }
        
        fn[j - pathlen] = 0;
        aarray_set(res, fn, (t ? "1" : "0"));
        free(fn);
      }
    }
  }
  
  AZREADDIRP ret = NULL;
  
  if (res->length > 0) {
    ret     = malloc(sizeof(AZREADDIR));
    ret->n  = res->length;
    ret->f  = malloc(sizeof(char *)*ret->n);
    ret->t  = malloc(sizeof(byte) * ret->n);
    
    for (i = 0; i < res->length; i++) {
      ret->t[i] = (strcmp(res->items[i].val, "1") == 0) ? 1 : 0;
      ret->f[i] = strdup(res->items[i].key);
    }
  }
  
  aarray_free(res);
  return ret;
}
void aui_cfg_loadcfg()
{
	aui_cfg_array = aarray_create();

	char cfgname[256];
	snprintf(cfgname, 256, "%s.cfg", getArgv(1));
	char *buf = aui_readfromfs(cfgname);
	if (buf == NULL) {
		aui_cfg_save();
		return;
	}

	aui_cfg_parse(&aui_cfg_array, buf);
	free(buf);

	aui_cfg_fromarray();
	aui_is_show_tips = 0;
}
示例#3
0
//*
//* Load & Parse Language File
//*
byte alang_load(char * z){
  alang_release();
  alang       = aarray_create();
  char * buf  = miui_readfromzip(z);
  if (buf==NULL) return 0;
  char * vuf  = buf;
  if (strlen(vuf)>3){
    //-- Check UTF-8 File Header
    if ((vuf[0]==0xEF)&&(vuf[1]==0xBB)&&(vuf[2]==0xBF)){
        vuf+=3;
    }
  }
  byte state  = 0;
  byte slash  = 0;
  char c      = 0;
  char pc     = 0;
  char * key  = NULL;
  char * val  = NULL;
  
  while ((c=*vuf)){
    
    if (state==0){
      //-- First State
      if (!isspace(c)){
        key   = vuf;
        state = 2;
      }
      else if (c=='#')
        state = 1;
    }
    else if (state==1){
      //-- Comment
      if (c=='\n') state=0;
    }
    else if (state==2){
      if (isspace(c)||(c=='=')||(c=='\n')){
        *vuf = 0;
        if (c=='=') state=3;
        else if (c=='\n') state=0;
      }
    }
    else if (state==3){
      if (!isspace(c)){
        val = vuf;
        state=4;
        pc  = c;
      }
      else if (c=='\n') state=0;
    }
    else if (state==4){
      if (((c=='\n')&&(pc!='\\'))||(*(vuf+1)==0)){
        if ((c=='\n')&&(pc!='\\')) *vuf = 0;
          
        //-- Cleanup backslashes
        int i;
        int j=0;
        int l=strlen(val);
        for (i=0;i<l;i++){
          if ((val[i]=='\\')&&(val[i+1]=='\n')) continue;
          val[j++]=val[i];
        }
        val[j]=0;
        
        //-- Save Lang Value
        aarray_set(alang,key,val);
        
        //-- End Of String
        state = 0;
      }
      pc=c;
    }
    
    vuf++;
    
  }
  
  free(buf);
  return 1;
}