38 lines
986 B
C
38 lines
986 B
C
#ifndef CODEREADER
|
|
#define CODEREADER
|
|
|
|
#include "consts.c"
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include "program.c"
|
|
|
|
unsigned int fromFile(char *path, struct program *program) {
|
|
unsigned int countInstructions;
|
|
unsigned int staticVars;
|
|
FILE *fptr;
|
|
fptr = fopen(path, "r+b");
|
|
if (fptr == NULL) {
|
|
printf("Error: cannot open code file %s\n", path);
|
|
exit(EXIT_FAILURE);
|
|
}
|
|
unsigned int buffer[4];
|
|
fread(buffer, 4, 4, fptr);
|
|
// Check file type
|
|
if (buffer[0] != 0x46424A4E) {
|
|
printf("Error: wrong file type");
|
|
exit(EXIT_FAILURE);
|
|
}
|
|
if (buffer[1] != VERSION) {
|
|
printf("Error: wrong version");
|
|
exit(EXIT_FAILURE);
|
|
}
|
|
countInstructions = buffer[2];
|
|
staticVars = buffer[3];
|
|
unsigned int instBuffer[countInstructions];
|
|
fread(instBuffer, 4, countInstructions, fptr);
|
|
copyToProgram(instBuffer, countInstructions, program);
|
|
return staticVars;
|
|
}
|
|
|
|
#endif /* ifdef CODEREADER */
|