From 5fc441477e5f39d6a8bdd1f7d9ab7c68f265bb25 Mon Sep 17 00:00:00 2001 From: Augusto Gunsch Date: Sun, 1 Nov 2020 19:11:11 -0300 Subject: [PATCH] Add file outputting --- main.c | 26 +++++++++++++++++++++----- templates.h | 10 ++++------ translator.c | 4 ++-- translator.h | 2 +- 4 files changed, 28 insertions(+), 14 deletions(-) diff --git a/main.c b/main.c index b5caf7e..c578371 100644 --- a/main.c +++ b/main.c @@ -29,6 +29,17 @@ char* verfname(char* fname) { exit(1); } +char* getoutname(char* fname) { + int len = strlen(fname); + int sz = sizeof(char)*(len+2); + char* outname = (char*)malloc(sz); + strcpy(outname, fname); + int ind = len-2; + char* ext = sizeof(char)*ind+outname; + snprintf(ext, 4, "asm"); + return outname; +} + int main(int argc, char* argv[]) { if(argc < 2) { fprintf(stderr, "Usage: %s {file}\n", argv[0]); @@ -52,12 +63,17 @@ int main(int argc, char* argv[]) { struct Translator* t = mktranslator(p->lns, fname); translate(t); freeparser(p); - - // printing - printasmlns(t); - - // freeing asmlns free(fname); + + // output + char* outname = getoutname(argv[1]); + + FILE* output = fopen(outname, "w"); + printasmlns(t, output); + fclose(output); + + // freeing rest + free(outname); freetranslator(t); return 0; diff --git a/templates.h b/templates.h index e9e25e8..1236346 100644 --- a/templates.h +++ b/templates.h @@ -105,21 +105,19 @@ char* tarith[TARITHN] = { "" }; -#define TNEGN 5 +#define TNEGN 4 char* tneg[TNEGN] = { "", "@SP", - "M=M-1", - "A=M", + "A=M-1", "M=-M", }; -#define TNOTN 5 +#define TNOTN 4 char* tnot[TNOTN] = { "", "@SP", - "M=M-1", - "A=M", + "A=M-1", "M=!M", }; diff --git a/translator.c b/translator.c index ec9b4da..29ac1a7 100644 --- a/translator.c +++ b/translator.c @@ -39,9 +39,9 @@ void freetranslator(struct Translator* t) { free(t); } -void printasmlns(struct Translator* t) { +void printasmlns(struct Translator* t, FILE* stream) { for(int i = 0; i < t->asmind; i++) - printf("%s\n", t->asmlns[i]->instr); + fprintf(stream, "%s\n", t->asmlns[i]->instr); } char* heapstr(struct Translator* t, const char* input) { diff --git a/translator.h b/translator.h index 6e38dcd..ea4de6b 100644 --- a/translator.h +++ b/translator.h @@ -20,7 +20,7 @@ struct Translator { }; void freetranslator(struct Translator* t); -void printasmlns(struct Translator* t); +void printasmlns(struct Translator* t, FILE* stream); void translate(struct Translator* t); struct Translator* mktranslator(struct lnarray* lns, char* fname); #endif