bool Assembler::Assemble(const char *filename, Assembly& assembly) { assembly.Clear(); LabelVector labels; FILE *in = fopen(filename, "rt"); if(in == null) return false; char buffer[256]; int linecount = 0; while(fgets(buffer, sizeof(buffer), in)) { size_t lc = strlen(buffer) - 1; if(buffer[lc] == '\n') buffer[lc] = '\0'; string line(buffer); if(ParseLine(line, linecount, assembly, labels) == false) { printf("Syntax error on line %d: \"%s\"\n", linecount + 1, buffer); fclose(in); return false; } linecount ++; } fclose(in); // replace label indices with code positions return SetLabels(assembly, labels); }