int include_mapping(const char *srcfile) { // read source file void *buffer; UINT32 length; file_error filerr = core_fload(srcfile, &buffer, &length); if (filerr != FILERR_NONE) { fprintf(stderr, "Unable to read source file '%s'\n", srcfile); return 1; } // rip through it to find all drivers char *srcptr = (char *)buffer; char *endptr = srcptr + length; while (srcptr < endptr) { char c = *srcptr++; // count newlines if (c == 13 || c == 10) { if (c == 13 && *srcptr == 10) srcptr++; continue; } // look for start of C comment if (c == '#' && *srcptr == '@') { srcptr++; //mapping char filename[256]; filename[0] = 0; for (int pos = 0; srcptr < endptr && pos < ARRAY_LENGTH(filename) - 1 && (*srcptr!=','); pos++) { filename[pos] = *srcptr++; filename[pos+1] = 0; } srcptr++; // skip comma char mapping[256]; mapping[0] = 0; for (int pos = 0; srcptr < endptr && pos < ARRAY_LENGTH(mapping) - 1 && (*srcptr!=10) && (*srcptr!=13); pos++) { mapping[pos] = *srcptr++; mapping[pos+1] = 0; } include_map.add(filename,core_strdup(mapping)); continue; } for (int pos = 0; srcptr < endptr && !isspace(*srcptr); pos++) { c = *srcptr++; } } osd_free(buffer); return 0; }
int main(int argc, char *argv[]) { astring *dirname = NULL, *tempfilename = NULL, *tempheader = NULL, *tempfooter = NULL; UINT32 bufsize; void *buffer; int listnum; int result; /* first argument is the directory */ if (argc < 4) { fprintf(stderr, "Usage:\nregrep <template> <outputdir> <summary1> [<summary2> [<summary3> ...]]\n"); return 1; } tempfilename = astring_dupc(argv[1]); dirname = astring_dupc(argv[2]); list_count = argc - 3; /* read the template file into an astring */ if (core_fload(astring_c(tempfilename), &buffer, &bufsize) == FILERR_NONE) { tempheader = astring_dupch((const char *)buffer, bufsize); free(buffer); } /* verify the template */ if (tempheader == NULL) { fprintf(stderr, "Unable to read template file\n"); return 1; } result = astring_findc(tempheader, 0, "<!--CONTENT-->"); if (result == -1) { fprintf(stderr, "Template is missing a <!--CONTENT--> marker\n"); return 1; } tempfooter = astring_substr(astring_dup(tempheader), result + 14, -1); tempheader = astring_substr(tempheader, 0, result); /* loop over arguments and read the files */ for (listnum = 0; listnum < list_count; listnum++) { result = read_summary_log(argv[listnum + 3], listnum); if (result != 0) return result; } /* output the summary */ output_report(dirname, tempheader, tempfooter, sort_file_list()); astring_free(dirname); astring_free(tempfilename); astring_free(tempheader); astring_free(tempfooter); return 0; }
int main(int argc, char *argv[]) { UINT32 bufsize; void *buffer; int listnum; int result; /* first argument is the directory */ if (argc < 4) { fprintf(stderr, "Usage:\nregrep <template> <outputdir> <summary1> [<summary2> [<summary3> ...]]\n"); return 1; } std::string tempfilename(argv[1]); std::string dirname(argv[2]); list_count = argc - 3; /* read the template file into an astring */ std::string tempheader; if (core_fload(tempfilename.c_str(), &buffer, &bufsize) == FILERR_NONE) { tempheader.assign((const char *)buffer, bufsize); osd_free(buffer); } /* verify the template */ if (tempheader.length() == 0) { fprintf(stderr, "Unable to read template file\n"); return 1; } result = tempheader.find("<!--CONTENT-->"); if (result == -1) { fprintf(stderr, "Template is missing a <!--CONTENT--> marker\n"); return 1; } std::string tempfooter(tempheader); tempfooter = tempfooter.substr(result + 14); tempfooter = tempheader.substr(0, result); /* loop over arguments and read the files */ for (listnum = 0; listnum < list_count; listnum++) { result = read_summary_log(argv[listnum + 3], listnum); if (result != 0) return result; } /* output the summary */ output_report(dirname, tempheader, tempfooter, sort_file_list()); return 0; }
int main(int argc, char *argv[]) { // loop over arguments include_path **incpathhead = &incpaths; astring srcdir, dstdir, tempfilename, tempheader, tempfooter; int unadorned = 0; for (int argnum = 1; argnum < argc; argnum++) { char *arg = argv[argnum]; // include path? if (arg[0] == '-' && arg[1] == 'I') { *incpathhead = new include_path; if (*incpathhead != NULL) { (*incpathhead)->next = NULL; (*incpathhead)->path.cpy(&arg[2]).replacechr('/', PATH_SEPARATOR[0]); incpathhead = &(*incpathhead)->next; } } // other parameter else if (arg[0] != '-' && unadorned == 0) { srcdir.cpy(arg); unadorned++; } else if (arg[0] != '-' && unadorned == 1) { dstdir.cpy(arg); unadorned++; } else if (arg[0] != '-' && unadorned == 2) { tempfilename.cpy(arg); unadorned++; } else usage(argv[0]); } // make sure we got 3 parameters if (srcdir.len() == 0 || dstdir.len() == 0 || tempfilename.len() == 0) usage(argv[0]); // read the template file into an astring UINT32 bufsize; void *buffer; if (core_fload(tempfilename, &buffer, &bufsize) == FILERR_NONE) { tempheader.cpy((const char *)buffer, bufsize); osd_free(buffer); } // verify the template if (tempheader.len() == 0) { fprintf(stderr, "Unable to read template file\n"); return 1; } int result = tempheader.find(0, "<!--CONTENT-->"); if (result == -1) { fprintf(stderr, "Template is missing a <!--CONTENT--> marker\n"); return 1; } tempfooter.cpy(tempheader).substr(result + 14, -1); tempheader.substr(0, result); // recurse over subdirectories return recurse_dir(srcdir.len(), dstdir.len(), srcdir, dstdir, tempheader, tempfooter); }
int main(int argc, char *argv[]) { file_error filerr; int displayendian; int displaychunk; UINT32 curbyte; UINT32 length; int maxchunks; UINT32 curpc; options opts; int numbytes; void *data; char *p; int result = 0; // parse options first if (parse_options(argc, argv, &opts)) return 1; // load the file filerr = core_fload(opts.filename, &data, &length); if (filerr != FILERR_NONE) { fprintf(stderr, "Error opening file '%s'\n", opts.filename); return 1; } // precompute parameters displaychunk = (opts.dasm->display / 2) + 1; displayendian = opts.dasm->display % 2; switch (displaychunk) { case 1: maxchunks = 6; break; case 2: maxchunks = 3; break; default: maxchunks = 1; break; } // run it try { if (length > opts.skip) length = length - opts.skip; if ((length > opts.count) && (opts.count != 0)) length = opts.count; curpc = opts.basepc; for (curbyte = 0; curbyte < length; curbyte += numbytes) { UINT8 *oprom = (UINT8 *)data + opts.skip + curbyte; char buffer[1024]; UINT32 pcdelta; int numchunks; // disassemble pcdelta = (*opts.dasm->func)(nullptr, buffer, curpc, oprom, oprom, opts.mode) & DASMFLAG_LENGTHMASK; if (opts.dasm->pcshift < 0) numbytes = pcdelta << -opts.dasm->pcshift; else numbytes = pcdelta >> opts.dasm->pcshift; // force upper or lower if (opts.lower) { for (p = buffer; *p != 0; p++) *p = tolower((UINT8)*p); } else if (opts.upper) { for (p = buffer; *p != 0; p++) *p = toupper((UINT8)*p); } // round to the nearest display chunk numbytes = ((numbytes + displaychunk - 1) / displaychunk) * displaychunk; if (numbytes == 0) numbytes = displaychunk; numchunks = numbytes / displaychunk; // non-flipped case if (!opts.flipped) { // output the address printf("%08X: ", curpc); // output the raw bytes if (!opts.norawbytes) { int firstchunks = (numchunks < maxchunks) ? numchunks : maxchunks; int chunknum, bytenum; for (chunknum = 0; chunknum < firstchunks; chunknum++) { for (bytenum = 0; bytenum < displaychunk; bytenum++) printf("%02X", oprom[displayendian ? (displaychunk - 1 - bytenum) : bytenum]); printf(" "); oprom += displaychunk; } for ( ; chunknum < maxchunks; chunknum++) printf("%*s ", displaychunk * 2, ""); printf(" "); } // output the disassembly printf("%s\n", buffer); // output additional raw bytes if (!opts.norawbytes && numchunks > maxchunks) { for (numchunks -= maxchunks; numchunks > 0; numchunks -= maxchunks) { int firstchunks = (numchunks < maxchunks) ? numchunks : maxchunks; int chunknum, bytenum; printf(" "); for (chunknum = 0; chunknum < firstchunks; chunknum++) { for (bytenum = 0; bytenum < displaychunk; bytenum++) printf("%02X", oprom[displayendian ? (displaychunk - 1 - bytenum) : bytenum]); printf(" "); oprom += displaychunk; } printf("\n"); } } } // flipped case else { // output the disassembly and address printf("\t%-40s ; %08X", buffer, curpc); // output the raw bytes if (!opts.norawbytes) { int chunknum, bytenum; printf(": "); for (chunknum = 0; chunknum < numchunks; chunknum++) { for (bytenum = 0; bytenum < displaychunk; bytenum++) printf("%02X", oprom[displayendian ? (displaychunk - 1 - bytenum) : bytenum]); printf(" "); oprom += displaychunk; } } printf("\n"); } // advance curpc += pcdelta; } } catch (emu_fatalerror &fatal) { fprintf(stderr, "%s\n", fatal.string()); result = 1; if (fatal.exitcode() != 0) result = fatal.exitcode(); } catch (emu_exception &) { fprintf(stderr, "Caught unhandled emulator exception\n"); result = 1; } catch (add_exception &aex) { fprintf(stderr, "Tag '%s' already exists in tagged_list\n", aex.tag()); result = 1; } catch (std::exception &ex) { fprintf(stderr, "Caught unhandled %s exception: %s\n", typeid(ex).name(), ex.what()); result = 1; } catch (...) { fprintf(stderr, "Caught unhandled exception\n"); result = 1; } osd_free(data); return result; }
int parse_file(const char *srcfile) { // read source file void *buffer; UINT32 length; file_error filerr = core_fload(srcfile, &buffer, &length); if (filerr != FILERR_NONE) { fprintf(stderr, "Unable to read source file '%s'\n", srcfile); return 1; } // rip through it to find all drivers char *srcptr = (char *)buffer; char *endptr = srcptr + length; int linenum = 1; bool in_comment = false; while (srcptr < endptr) { char c = *srcptr++; // count newlines if (c == 13 || c == 10) { if (c == 13 && *srcptr == 10) srcptr++; linenum++; continue; } // skip any spaces if (isspace(c)) continue; // look for end of C comment if (in_comment && c == '*' && *srcptr == '/') { srcptr++; in_comment = false; continue; } // skip anything else inside a C comment if (in_comment) continue; // look for start of C comment if (c == '/' && *srcptr == '*') { srcptr++; in_comment = true; continue; } // if we hit a C++ comment, scan to the end of line if (c == '/' && *srcptr == '/') { while (srcptr < endptr && *srcptr != 13 && *srcptr != 10) srcptr++; continue; } // look for an import directive if (c == '#') { char filename[256]; filename[0] = 0; for (int pos = 0; srcptr < endptr && pos < ARRAY_LENGTH(filename) - 1 && !isspace(*srcptr); pos++) { filename[pos] = *srcptr++; filename[pos+1] = 0; } fprintf(stderr, "Importing drivers from '%s'\n", filename); parse_file(filename); continue; } if (c == '!') { char drivname[256]; drivname[0] = 0; for (int pos = 0; srcptr < endptr && pos < ARRAY_LENGTH(drivname) - 1 && !isspace(*srcptr); pos++) { drivname[pos] = *srcptr++; drivname[pos+1] = 0; } fprintf(stderr, "Place driver '%s' to ignore list\n", drivname); char *name = (char *)malloc(strlen(drivname) + 1); strcpy(name, drivname); ignorelst[ignorecount++] = name; continue; } // otherwise treat as a driver name char drivname[32]; drivname[0] = 0; srcptr--; for (int pos = 0; srcptr < endptr && pos < ARRAY_LENGTH(drivname) - 1 && !isspace(*srcptr); pos++) { drivname[pos] = *srcptr++; drivname[pos+1] = 0; } // verify the name as valid for (char *drivch = drivname; *drivch != 0; drivch++) { if ((*drivch >= 'a' && *drivch <= 'z') || (*drivch >= '0' && *drivch <= '9') || *drivch == '_') continue; fprintf(stderr, "%s:%d - Invalid character '%c' in driver \"%s\"\n", srcfile, linenum, *drivch, drivname); return 1; } // add it to the list if(!isignored(drivname)) { char *name = (char *)malloc(strlen(drivname) + 1); strcpy(name, drivname); drivlist[drivcount++] = name; } } osd_free(buffer); return 0; }
static file_entry &compute_dependencies(int srcrootlen, astring &srcfile) { // see if we already have an entry astring normalfile(srcfile); normalfile.replacechr(PATH_SEPARATOR[0], '/'); file_entry *foundfile = file_map.find(normalfile); if (foundfile != NULL) return *foundfile; // create a new header entry file_entry &file = *new file_entry; file.deplist = NULL; file.name = normalfile; file_map.add(file.name, &file); // read the source file UINT32 filelength; char *filedata; if (core_fload(srcfile, (void **)&filedata, &filelength) != FILERR_NONE) { fprintf(stderr, "Unable to read file '%s'\n", srcfile.cstr()); return file; } // find the #include directives in this file for (int index = 0; index < filelength; index++) if (filedata[index] == '#' && strncmp(&filedata[index + 1], "include", 7) == 0) { // first make sure we're not commented or quoted bool just_continue = false; for (int scan = index; scan > 2 && filedata[scan] != 13 && filedata[scan] != 10; scan--) if ((filedata[scan] == '/' && filedata[scan - 1] == '/') || filedata[scan] == '"') { just_continue = true; break; } if (just_continue) continue; // scan forward to find the quotes or bracket index += 7; int scan; for (scan = index; scan < filelength && filedata[scan] != '<' && filedata[scan] != '"' && filedata[scan] != 13 && filedata[scan] != 10; scan++) ; // ignore if not found or if it's bracketed if (scan >= filelength || filedata[scan] != '"') continue; int start = ++scan; // find the closing quote while (scan < filelength && filedata[scan] != '"') scan++; if (scan >= filelength) continue; // find the include file astring filename(&filedata[start], scan - start); astring target; // create a new dependency if (find_include_file(target, srcrootlen, srcfile, filename)) { dependency *dep = new dependency; dep->next = file.deplist; file.deplist = dep; dep->file = &compute_dependencies(srcrootlen, target); } } osd_free(filedata); return file; }
static file_entry *compute_dependencies(int srcrootlen, const astring *srcfile) { astring *normalfile; UINT32 filelength; file_entry *file; char *filedata; int index; /* see if we already have an entry */ normalfile = astring_dup(srcfile); astring_replacechr(normalfile, PATH_SEPARATOR[0], '/'); file = (file_entry *)tagmap_find(file_map, astring_c(normalfile)); if (file != NULL) return file; /* create a new header entry */ file = (file_entry *)malloc(sizeof(*file)); file->deplist = NULL; file->name = normalfile; tagmap_add(file_map, astring_c(file->name), file, FALSE); /* read the source file */ if (core_fload(astring_c(srcfile), (void **)&filedata, &filelength) != FILERR_NONE) { fprintf(stderr, "Unable to read file '%s'\n", astring_c(srcfile)); return file; } /* find the #include directives in this file */ for (index = 0; index < filelength; index++) if (filedata[index] == '#' && strncmp(&filedata[index + 1], "include", 7) == 0) { astring *filename, *target; int scan = index; dependency *dep; int start; int just_continue = 0; /* first make sure we're not commented or quoted */ for (scan = index; scan > 2 && filedata[scan] != 13 && filedata[scan] != 10; scan--) if ((filedata[scan] == '/' && filedata[scan - 1] == '/') || filedata[scan] == '"') { just_continue = 1; break; } if (just_continue) continue; /* scan forward to find the quotes or bracket */ index += 7; for (scan = index; scan < filelength && filedata[scan] != '<' && filedata[scan] != '"' && filedata[scan] != 13 && filedata[scan] != 10; scan++) ; /* ignore if not found or if it's bracketed */ if (scan >= filelength || filedata[scan] != '"') continue; start = ++scan; /* find the closing quote */ while (scan < filelength && filedata[scan] != '"') scan++; if (scan >= filelength) continue; /* find the include file */ filename = astring_dupch(&filedata[start], scan - start); target = find_include_file(srcrootlen, srcfile, filename); /* create a new dependency */ if (target != NULL) { dep = (dependency *)malloc(sizeof(*dep)); dep->next = file->deplist; file->deplist = dep; dep->file = compute_dependencies(srcrootlen, target); astring_free(target); } astring_free(filename); } osd_free(filedata); return file; }
int parse_file(const char *srcfile) { // read source file void *buffer; UINT32 length; file_error filerr = core_fload(srcfile, &buffer, &length); if (filerr != FILERR_NONE) { fprintf(stderr, "Unable to read source file '%s'\n", srcfile); return 1; } // rip through it to find all drivers char *srcptr = (char *)buffer; char *endptr = srcptr + length; int linenum = 1; bool in_comment = false; while (srcptr < endptr) { char c = *srcptr++; // count newlines if (c == 13 || c == 10) { if (c == 13 && *srcptr == 10) srcptr++; linenum++; continue; } // skip any spaces if (isspace(c)) continue; // look for end of C comment if (in_comment && c == '*' && *srcptr == '/') { srcptr++; in_comment = false; continue; } // skip anything else inside a C comment if (in_comment) continue; // look for start of C comment if (c == '/' && *srcptr == '*') { srcptr++; in_comment = true; continue; } // if we hit a C++ comment, scan to the end of line if (c == '/' && *srcptr == '/') { while (srcptr < endptr && *srcptr != 13 && *srcptr != 10) srcptr++; continue; } // look for an import directive if (c == '#') { char filename[256]; filename[0] = 0; for (int pos = 0; srcptr < endptr && pos < ARRAY_LENGTH(filename) - 1 && !isspace(*srcptr); pos++) { filename[pos] = *srcptr++; filename[pos+1] = 0; } fprintf(stderr, "Importing drivers from '%s'\n", filename); parse_file(filename); continue; } if (c == '@') { // Used for makemak tool char drivname[256]; drivname[0] = 0; for (int pos = 0; srcptr < endptr && pos < ARRAY_LENGTH(drivname) - 1 && !isspace(*srcptr); pos++) { drivname[pos] = *srcptr++; drivname[pos+1] = 0; } librarylist_entry *lentry = new librarylist_entry; lentry->name.cpy(drivname); lentry->next = NULL; lentry->sourcefiles = NULL; if (last_libraryitem!=NULL) { last_libraryitem->next = lentry; } last_libraryitem = lentry; last_sourceitem = NULL; if (librarylist==NULL) { librarylist = lentry; } continue; } srcptr--; // Used for makemak tool char drivname[256]; drivname[0] = 0; for (int pos = 0; srcptr < endptr && pos < ARRAY_LENGTH(drivname) - 1 && !isspace(*srcptr); pos++) { drivname[pos] = *srcptr++; drivname[pos+1] = 0; } list_entry *lentry = new list_entry; lentry->name.cpy(drivname); lentry->next = NULL; if (last_sourceitem!=NULL) { last_sourceitem->next = lentry; } last_sourceitem = lentry; if (last_libraryitem->sourcefiles==NULL) { last_libraryitem->sourcefiles = lentry; } } osd_free(buffer); return 0; }