From cc8f77410fd05f1b9adefca5c7841ac8e6ecf76f Mon Sep 17 00:00:00 2001 From: Vince Weaver Date: Mon, 22 Jan 2024 00:27:31 -0500 Subject: [PATCH] trogdor: missing common generator --- demos/trogdor/generate_common.c | 77 +++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 demos/trogdor/generate_common.c diff --git a/demos/trogdor/generate_common.c b/demos/trogdor/generate_common.c new file mode 100644 index 00000000..aa8e095c --- /dev/null +++ b/demos/trogdor/generate_common.c @@ -0,0 +1,77 @@ +#include +#include +#include +#include + + + +static FILE *fff; + + +static void find_address(char *symbol_name, int routine_offset) { + + unsigned int addr=0; + char string[BUFSIZ],*result; + char temp_name[BUFSIZ]; + + strncpy(temp_name,symbol_name,BUFSIZ); + strncat(temp_name,":",2); + + while(1) { + + result=fgets(string,BUFSIZ,fff); + if (result==NULL) { + fprintf(stderr,"Error: %s not found!\n",symbol_name); + exit(-1); + } + + result=strstr(string,temp_name); + if (result!=NULL) { + string[6]=0; + sscanf(string,"%x",&addr); + break; + } + } + + + printf("%s\t=$%04x\n",symbol_name,addr+routine_offset); +} + +int main(int argc, char **argv) { + + int c; + char *filename; + char symbol[BUFSIZ]; + int routine_offset=0xd000; + + while ( (c=getopt(argc, argv, "a:s:") ) != -1) { + + switch(c) { + + case 'a': + routine_offset=strtol(optarg, NULL, 0); + break; + case 's': + strncpy(symbol,optarg,BUFSIZ-1); + break; + default: + fprintf(stderr,"Unknown option %c\n",c); + exit(-1); + break; + } + } + + filename=strdup(argv[optind]); + + fff=fopen(filename,"r"); + if (fff==NULL) { + fprintf(stderr,"ERROR! could not open %s\n",filename); + return -1; + } + + find_address(symbol,routine_offset); + + fclose(fff); + + return 0; +}