Add assembling to build process
This commit is contained in:
parent
451c6406c2
commit
09dce9f92c
|
@ -16,14 +16,30 @@
|
||||||
int main (int argc, char** argv) {
|
int main (int argc, char** argv) {
|
||||||
int rv = EXIT_SUCCESS;
|
int rv = EXIT_SUCCESS;
|
||||||
|
|
||||||
/* check for right amount of cl arguments (1 filename at the moment) */
|
char* filename_compiled = "brainfuck.bin";
|
||||||
if (argc != 2) {
|
|
||||||
|
/* check for right amount of cl arguments (even number of arguments (including environment variable)) */
|
||||||
|
if (argc % 2) {
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Parse arguments */
|
/* Parse arguments */
|
||||||
char* filename = argv[1];
|
char* filename;
|
||||||
|
char* device = "logisim";
|
||||||
|
|
||||||
|
for (int i = 1; i < argc; i++) {
|
||||||
|
if (argv[i][0] == '-') {
|
||||||
|
switch (argv[i][1]) {
|
||||||
|
case 'o': filename_compiled = argv[i+1];break;
|
||||||
|
case 'd': device = argv[i+1];break;
|
||||||
|
default: printf("ERROR: unknown argument: %c\n", argv[i][1]);exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
i++;
|
||||||
|
} else {
|
||||||
|
filename = argv[i];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* read file into buffer */
|
/* read file into buffer */
|
||||||
FILE* fd = 0; /* File descriptor */
|
FILE* fd = 0; /* File descriptor */
|
||||||
|
@ -64,6 +80,8 @@ int main (int argc, char** argv) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fclose(fd);
|
||||||
|
|
||||||
/* extract tokens from buffer */
|
/* extract tokens from buffer */
|
||||||
char* tokens;
|
char* tokens;
|
||||||
/* Allocate memory for tokens */
|
/* Allocate memory for tokens */
|
||||||
|
@ -84,15 +102,43 @@ int main (int argc, char** argv) {
|
||||||
|
|
||||||
/* Analyze the code for errors and warnings. */
|
/* Analyze the code for errors and warnings. */
|
||||||
int scan_result = analyze(tokens);
|
int scan_result = analyze(tokens);
|
||||||
|
/* Exit if analyzer detects errors. */
|
||||||
if (scan_result < 0) {
|
if (scan_result < 0) {
|
||||||
exit(scan_result);
|
exit(scan_result);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Just print the tokens as example. */
|
/* Translate into binary */
|
||||||
for (char* index = tokens; *index; index++) {
|
char* binary = assemble(device, tokens);
|
||||||
(void)printf("%c", *index);
|
if (binary <= 0) {
|
||||||
|
(void)printf("ERROR: Error during assembling step!\n");
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
(void)printf("\n");
|
free(tokens);
|
||||||
|
|
||||||
|
/* Write to file. */
|
||||||
|
FILE* fout = 0; /* File descriptor */
|
||||||
|
fout = fopen(filename_compiled, "w");
|
||||||
|
|
||||||
|
if (!fout) {
|
||||||
|
(void)printf("ERROR: Could not open file %s!\n", filename_compiled);
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* DEBUG START */
|
||||||
|
|
||||||
|
for (int i = 0; i < 533; i++) {
|
||||||
|
(void)printf("%c", binary[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* DEBUG END */
|
||||||
|
|
||||||
|
if (fprintf(fout, "%s", binary) < 0) {
|
||||||
|
(void)printf("ERROR: Could not write to file %s!\n", filename_compiled);
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
|
||||||
|
fclose(fout);
|
||||||
|
|
||||||
return rv;
|
return rv;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue