static void ParseConfig (void) /* Parse the config file */ { static const IdentTok BlockNames [] = { { "MEMORY", CFGTOK_MEMORY }, { "FILES", CFGTOK_FILES }, { "SEGMENTS", CFGTOK_SEGMENTS }, { "FORMATS", CFGTOK_FORMATS }, { "FEATURES", CFGTOK_FEATURES }, { "SYMBOLS", CFGTOK_SYMBOLS }, }; cfgtok_t BlockTok; do { /* Read the block ident */ CfgSpecialToken (BlockNames, ENTRY_COUNT (BlockNames), "Block identifier"); BlockTok = CfgTok; CfgNextTok (); /* Expected a curly brace */ CfgConsume (CFGTOK_LCURLY, "`{' expected"); /* Read the block */ switch (BlockTok) { case CFGTOK_MEMORY: ParseMemory (); break; case CFGTOK_FILES: ParseFiles (); break; case CFGTOK_SEGMENTS: ParseSegments (); break; case CFGTOK_FORMATS: ParseFormats (); break; case CFGTOK_FEATURES: ParseFeatures (); break; case CFGTOK_SYMBOLS: ParseSymbols (); break; default: FAIL ("Unexpected block token"); } /* Skip closing brace */ CfgConsume (CFGTOK_RCURLY, "`}' expected"); } while (CfgTok != CFGTOK_EOF); }
void PHPParserThread::ProcessRequest(ThreadRequest* request) { PHPParserThreadRequest* r = dynamic_cast<PHPParserThreadRequest*>(request); if(r) { switch(r->requestType) { case PHPParserThreadRequest::kParseWorkspaceFilesFull: case PHPParserThreadRequest::kParseWorkspaceFilesQuick: ParseFiles(r); break; case PHPParserThreadRequest::kParseSingleFile: ParseFile(r); break; } } }
int main(int argc, char **argv) { FILE *outfile = NULL; unsigned char *vars = NULL, *vars1 = NULL, *vars2 = NULL, *vars3 = NULL; int varsLen = 0, vars1Len = 0, vars2Len = 0, vars3Len = 0; int varsCount = 0, vars1Count = 0, vars2Count = 0, vars3Count = 0; int i = 0, x = 0, compression = 0; setlocale(LC_ALL,"Japanese"); if(argc<3) { printf("usage: %s infolder outpck [-c/-e]\n\nFlags:\n-c = Compression mode. A little slow but all files will be compressed.\n-e = Extra encryption (required for scripts)",argv[0]); return 0; } pckhead.extraencrypt = 0; for(i = 3; i < argc; i++) { if(strcmp(argv[i],"-c") == 0) compression = 1; else if(strcmp(argv[i],"-e") == 0) pckhead.extraencrypt = 1; } ParseDir(argv[1]); vars = GetBuffer("vars.dat", argv[1], &varsLen, &varsCount); vars1 = GetBuffer("vars1.dat", argv[1], &vars1Len, &vars1Count); vars2 = GetBuffer("vars2.dat", argv[1], &vars2Len, &vars2Count); vars3 = GetBuffer("vars3.dat", argv[1], &vars3Len, &vars3Count); pckhead.headersize = 0x5c; pckhead.table1.size = pckhead.globalvartable.size = pckhead.globalvartablestr.size = varsCount; (int)pckhead.table1.buffer = 0x5c; (int)pckhead.globalvartable.buffer = (int)pckhead.table1.buffer+varsCount*8; (int)pckhead.globalvartablestr.buffer = (int)pckhead.globalvartable.buffer+varsCount*8; (int)pckhead.filenametable1.buffer = varsLen+pckhead.headersize; (int)pckhead.filenametable1.size = vars1Count; (int)pckhead.filenametable2.buffer = pckhead.filenametable1.buffer+vars1Len; (int)pckhead.filenametable2.size = vars2Count; (int)pckhead.filenametable3.buffer = pckhead.filenametable2.buffer+vars2Len; (int)pckhead.filenametable3.size = vars3Count; (int)pckhead.filenametable4.buffer = pckhead.filenametable3.buffer+vars3Len; pckhead.filenametable4.size = pckhead.filenamestr.size = pckhead.filetable.size = pckhead.filestart.size = filecount; (int)pckhead.filenamestr.buffer = (int)pckhead.filenametable4.buffer+pckhead.filenametable4.size*8; (int)pckhead.filetable.buffer = (int)pckhead.filenamestr.buffer+(wcslen(filenamebuff)*2); (int)pckhead.filestart.buffer = (int)pckhead.filetable.buffer+pckhead.filetable.size*8; pckhead.unk2 = 0x366; outfile = fopen(argv[2],"wb+"); // quick hackish way to do this without having to duplicate code or do a bunch of stuff // on the first pass, write all of the file information so the space will be there and // then write the file data (compressed or otherwise) and count the totals // on the second pass only rewrite the file information which will this time be correct for(x = 0; x < 2; x++) { fwrite(&pckhead,1,sizeof(pckhead),outfile); fwrite(vars,1,varsLen,outfile); fwrite(vars1,1,vars1Len,outfile); fwrite(vars2,1,vars2Len,outfile); fwrite(vars3,1,vars3Len,outfile); //fwrite(&fileinfo,sizeof(FileEntry),filecount,outfile); for(i=0; i<filecount; i++) { fwrite(&fileinfo[i].nameoffset,1,4,outfile); fwrite(&fileinfo[i].namesize,1,4,outfile); } fwrite(filenamebuff,2,wcslen(filenamebuff),outfile); for(i=0; i<filecount; i++) { fwrite(&fileinfo[i].offset,1,4,outfile); fwrite(&fileinfo[i].size,1,4,outfile); } if(x == 0) { ParseFiles(outfile,argv[1],compression); fclose(outfile); outfile = fopen(argv[2],"rb+"); } } fclose(outfile); return 0; }