//-- 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; }
//* //* 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; }