diff options
-rw-r--r-- | bfcomp.c | 23 |
1 files changed, 17 insertions, 6 deletions
@@ -43,6 +43,7 @@ void usage(const char *argv0){ "Reads a Brainfuck program from <srcfile> and saves the compiled executable\n" "in <dstfile>.\n" "Uses nasm for assembling and gcc for linking.\n" + " -d Copies generated assembly to <srcfile>.asm\n" " -h Show help\n" " -H Calculate heatmap while executing\n" " -L Output last cell reached\n" @@ -59,9 +60,9 @@ __attribute__((noreturn)) void usage1(const char *argv0){ typedef struct Params{ int memsize; const char *srcfname,*dstfname; - bool lastcell,verbose,heatmap; + bool lastcell,verbose,heatmap,copyasm; } Params; -Params params={30000,NULL,NULL,false,false,false}; +Params params={30000,NULL,NULL,false,false,false,false}; void parseargs(int argc,char **argv){ if(argc<2)usage1(argv[0]); @@ -71,6 +72,10 @@ void parseargs(int argc,char **argv){ if(argv[i][0]=='-'){ for(int j=1;argv[i][j];j++){ switch(argv[i][j]){ + case 'd': + params.copyasm=true; + break; + case 'h': usage(argv[0]); exit(0); @@ -95,6 +100,9 @@ void parseargs(int argc,char **argv){ case 'v': params.verbose=true; break; + + default: + usage1(argv[0]); } } } else if(params.srcfname==NULL)params.srcfname=argv[i]; @@ -424,10 +432,13 @@ int main(int argc,char **argv){ fclose(asmf); - /*char *b; - asprintf(&b,"cp %s %s.asm",asmfname,params.srcfname); - runcmd(b); - free(b);*/ + if(params.copyasm){ + char *b; + asprintf(&b,"cp %s %s.asm",asmfname,params.srcfname); + runcmd(b); + free(b); + } + int ret=compilechain(asmfname,params.dstfname); unlink(asmfname); if(params.verbose)fprintf(stderr,"unlink(%s) (asmfname)\n",asmfname); |