# HG changeset patch # User Michael Pavone # Date 1473315327 25200 # Node ID b15187a99d6f2609a6d69c3bf58e26c4053ed750 # Parent bed2d84eeabe5aa0b1b7420aac134670d9d20626 Add a command line option for printing out label addresses on the command line. Useful for debugging purposes. diff -r bed2d84eeabe -r b15187a99d6f src/asm.c --- a/src/asm.c Tue Sep 06 09:42:31 2016 -0700 +++ b/src/asm.c Wed Sep 07 23:15:27 2016 -0700 @@ -445,7 +445,7 @@ return 1; } -uint8_t assemble_file(FILE *input, FILE *output) +uint8_t assemble_file(FILE *input, FILE *output, uint8_t print_labels) { //fixed size buffers are lame, but so are lines longer than 4K characters //this is good enough for the really simple first version @@ -656,14 +656,20 @@ } } } + if (print_labels) { + for (int i = 0; i < labels.num_labels; i++) + { + printf("%s: %X\n", labels.labels[i].name, labels.labels[i].address); + } + } if (pc == fwrite(outbuf, 1, pc, output)) { free_labels(&labels); - return 1; + return 0; } fputs("Error writing to output file\n", stderr); error: free_labels(&labels); - return 0; + return 1; } @@ -683,7 +689,8 @@ fprintf(stderr, "Failed to open %s for writing\n", argv[2]); return 1; } - int ret = assemble_file(infile, outfile); + uint8_t print_labels = argc > 3 && !strcmp("-l", argv[3]); + int ret = assemble_file(infile, outfile, print_labels); fclose(infile); fclose(outfile); return ret;