mirror of
https://github.com/nanochess/pretty6502.git
synced 2024-12-26 09:29:40 +00:00
Reads the input file in one pass. Nicer repetition of spaces in output (robertlipe).
This commit is contained in:
parent
192644256c
commit
5f46ea09f6
2040
aard1.new.asm
Normal file
2040
aard1.new.asm
Normal file
File diff suppressed because it is too large
Load Diff
BIN
pretty6502
BIN
pretty6502
Binary file not shown.
72
pretty6502.c
72
pretty6502.c
@ -37,8 +37,8 @@ void request_space(FILE *output, int *current, int new, int force)
|
||||
*/
|
||||
while (1) {
|
||||
if (tabs == 0) {
|
||||
fputc(' ', output);
|
||||
(*current)++;
|
||||
fprintf(output, "%*s", new - *current, "");
|
||||
*current = new;
|
||||
} else {
|
||||
fputc('\t', output);
|
||||
*current = (*current + tabs) / tabs * tabs;
|
||||
@ -61,12 +61,8 @@ int main(int argc, char *argv[])
|
||||
int align_comment;
|
||||
FILE *input;
|
||||
FILE *output;
|
||||
char line[4096];
|
||||
int input_lines;
|
||||
int allocation;
|
||||
char *data;
|
||||
int current_line;
|
||||
int next_position;
|
||||
char *p;
|
||||
char *p1;
|
||||
char *p2;
|
||||
@ -198,43 +194,53 @@ int main(int argc, char *argv[])
|
||||
/*
|
||||
** Open input file, measure it and read it into buffer
|
||||
*/
|
||||
input = fopen(argv[c], "r");
|
||||
input = fopen(argv[c], "rb");
|
||||
if (input == NULL) {
|
||||
fprintf(stderr, "Unable to open input file: %s\n", argv[c]);
|
||||
exit(1);
|
||||
}
|
||||
fprintf(stderr, "Processing %s...\n", argv[c]);
|
||||
input_lines = 0;
|
||||
allocation = 0;
|
||||
while (fgets(line, sizeof(line) - 1, input)) {
|
||||
allocation += strlen(line) + 1;
|
||||
input_lines++;
|
||||
}
|
||||
fclose(input);
|
||||
data = malloc(allocation);
|
||||
fseek(input, 0, SEEK_END);
|
||||
allocation = ftell(input);
|
||||
data = malloc(allocation + sizeof(char));
|
||||
if (data == NULL) {
|
||||
fprintf(stderr, "Unable to allocate memory\n");
|
||||
fclose(input);
|
||||
exit(1);
|
||||
}
|
||||
input = fopen(argv[c], "r");
|
||||
if (input == NULL) {
|
||||
fprintf(stderr, "Unable to open input file: %s\n", argv[c]);
|
||||
fseek(input, 0, SEEK_SET);
|
||||
if (fread(data, sizeof(char), allocation, input) != allocation) {
|
||||
fprintf(stderr, "Something went wrong reading the input file\n");
|
||||
fclose(input);
|
||||
free(data);
|
||||
exit(1);
|
||||
}
|
||||
current_line = 0;
|
||||
next_position = 0;
|
||||
while (fgets(line, sizeof(line) - 1, input)) {
|
||||
if (current_line >= input_lines || next_position + strlen(line) + 1 > allocation) {
|
||||
fprintf(stderr, "Buuurp! the source file grew!\n");
|
||||
fclose(input);
|
||||
exit(1);
|
||||
}
|
||||
strcpy(data + next_position, line);
|
||||
next_position += strlen(line) + 1;
|
||||
current_line++;
|
||||
}
|
||||
fclose(input);
|
||||
|
||||
/*
|
||||
** Ease processing of input file
|
||||
*/
|
||||
request = 0;
|
||||
p1 = data;
|
||||
p2 = data;
|
||||
while (p1 < data + allocation) {
|
||||
if (*p1 == '\r') { /* Ignore \r characters */
|
||||
p1++;
|
||||
continue;
|
||||
}
|
||||
if (*p1 == '\n') {
|
||||
p1++;
|
||||
*p2++ = '\0'; /* Break line */
|
||||
request = 1;
|
||||
continue;
|
||||
}
|
||||
*p2++ = *p1++;
|
||||
request = 0;
|
||||
}
|
||||
if (request == 0)
|
||||
*p2++ = '\0'; /* Force line break */
|
||||
allocation = p2 - data;
|
||||
|
||||
/*
|
||||
** Now generate output file
|
||||
*/
|
||||
@ -245,7 +251,7 @@ int main(int argc, char *argv[])
|
||||
exit(1);
|
||||
}
|
||||
p = data;
|
||||
for (input_lines = 0; input_lines < current_line; input_lines++) {
|
||||
while (p < data + allocation) {
|
||||
current_column = 0;
|
||||
p1 = p;
|
||||
if (*p1 && !isspace(*p1) && *p1 != ';') { /* Label */
|
||||
@ -276,7 +282,7 @@ int main(int argc, char *argv[])
|
||||
request = start_operand;
|
||||
request_space(output, ¤t_column, request, 1);
|
||||
p2 = p1;
|
||||
while (*p2 && *p2 != ';' && *p2 != '\r' && *p2 != '\n') {
|
||||
while (*p2 && *p2 != ';') {
|
||||
if (*p2 == '"') {
|
||||
p2++;
|
||||
while (*p2 && *p2 != '"')
|
||||
@ -311,7 +317,7 @@ int main(int argc, char *argv[])
|
||||
request = start_mnemonic;
|
||||
request_space(output, ¤t_column, request, 0);
|
||||
p2 = p1;
|
||||
while (*p2 && *p2 != '\r' && *p2 != '\n')
|
||||
while (*p2)
|
||||
p2++;
|
||||
while (p2 > p1 && isspace(*(p2 - 1)))
|
||||
p2--;
|
||||
|
Loading…
Reference in New Issue
Block a user