diff options
author | Pixel <> | 2001-04-16 15:12:16 +0000 |
---|---|---|
committer | Pixel <> | 2001-04-16 15:12:16 +0000 |
commit | e09044e963015cf672d0f992264ee1563717602a (patch) | |
tree | 1a55d7d5e46401a41ca7bc24e597d90b0b720601 /lib/assembler.c | |
parent | 3953a2906211a6c0007079dcafe66aa372ab33d1 (diff) |
Indentation
Diffstat (limited to 'lib/assembler.c')
-rw-r--r-- | lib/assembler.c | 294 |
1 files changed, 153 insertions, 141 deletions
diff --git a/lib/assembler.c b/lib/assembler.c index affbdda..4abdb62 100644 --- a/lib/assembler.c +++ b/lib/assembler.c @@ -139,7 +139,7 @@ static bytestream_t *pushuninit(int size) s->size = 1; s->Label = NULL; s->Expr = NULL; - + s->relog = 1; s->line = line; @@ -212,7 +212,7 @@ static void pushstring(char *s) { char marker = *s, tstring[6]; int valid; - + s++; while ((*s) && (marker != *s)) { @@ -339,7 +339,7 @@ static expression_t *copy_expression(expression_t * e) t = Emalloc(sizeof(expression_t)); *t = *e; - + if (t->symbol) { trouve = 0; if (e->e_subtype == E_LABEL) { @@ -501,7 +501,7 @@ void push_pile(char *a) } e->father = NULL; e->child = NULL; - + /* On prédevine le subtype sur quelques cas */ /* Cas des labels (en nom:) */ @@ -1243,7 +1243,7 @@ static instruct_t *e_match_i(phon_t * phons, instruct_t * instructs, expression_ if (!instructs->strings[i]) { if (strcasecmp(instructs->names[i], i ? t->symbol : stringtolook)) { go_out = 1; - } + } } else { switch (instructs->strings[i][0]) { case 'P': @@ -1265,10 +1265,11 @@ static instruct_t *e_match_i(phon_t * phons, instruct_t * instructs, expression_ } if ((t->e_subtype == E_OPERATION) && (!(((t->child->e_subtype == E_LABEL) - && (t->child->next->e_subtype == E_VALUE)) - || ((t->child->e_subtype == E_VALUE) - && (t->child->next->e_subtype == - E_LABEL))))) { + && (t->child->next->e_subtype == + E_VALUE)) + || ((t->child->e_subtype == E_VALUE) + && (t->child->next->e_subtype == + E_LABEL))))) { go_out = 1; } @@ -1498,9 +1499,9 @@ void asm_eol(void) switch (e_current->e_subtype) { case E_INTERNAL: switch (e_current->op) { - case 1: /* DB */ - case 2: /* DW */ - case 3: /* DD */ + case 1: /* DB */ + case 2: /* DW */ + case 3: /* DD */ do { e_line = e_current->next; e_current->next = NULL; @@ -1527,7 +1528,7 @@ void asm_eol(void) } } while (1); break; - case 4: /* DS */ + case 4: /* DS */ do { e_line = e_current->next; e_current->next = NULL; @@ -1544,7 +1545,7 @@ void asm_eol(void) } } while (1); break; - case 5: /* DR */ + case 5: /* DR */ do { e_line = e_current->next; e_current->next = NULL; @@ -1687,7 +1688,8 @@ void asm_eol(void) /* Ecrit un ou plusieurs mots dans le fichier spécifié, avec traitement des erreurs */ -static void writeword(unsigned long int a, FILE * f, int n) { +static void writeword(unsigned long int a, FILE * f, int n) +{ int i; if (fwrite(&a, sizeof(unsigned long int), 1, f) != 1) { @@ -1696,7 +1698,7 @@ static void writeword(unsigned long int a, FILE * f, int n) { } exception(1, _("Error writing file")); } - + for (i = 0; i < n - 1; i++) { writeword(0, f, 1); } @@ -1704,7 +1706,8 @@ static void writeword(unsigned long int a, FILE * f, int n) { /* Ecrit une chaine dans le fichier spécifié, avec traitement des erreurs */ -static void writestring(char * string, FILE * f) { +static void writestring(char *string, FILE * f) +{ for (; *string; string++) { writeword(*string, f, 1); } @@ -1731,15 +1734,16 @@ static void writestring(char * string, FILE * f) { /* Cette fonction ajoute un fichier à un autre */ -void appendfile(FILE * f, char * name) { +void appendfile(FILE * f, char *name) +{ unsigned long int a; - FILE * g; + FILE *g; if (!(g = fopen(name, "rb"))) { pushcontext(strerror(errno)); exception(1, _("Error writing file")); } - + while (fread(&a, sizeof(a), 1, g) == 1) { writeword(a, f, 1); } @@ -1748,7 +1752,7 @@ void appendfile(FILE * f, char * name) { pushcontext(strerror(errno)); exception(1, _("Error reading file")); } - + fclose(g); } @@ -1757,12 +1761,12 @@ void appendfile(FILE * f, char * name) { void asm_eof(FILE * f) { - bytestream_t * t, * u; - FILE * f1, * f2; + bytestream_t *t, *u; + FILE *f1, *f2; int nbsymbols = 0, a, nbi = 0, nbe = 0; char errctx[BUFSIZ], trouve; - bytestream_t * ttext = text, * tdata = data, * tbss = bss; - + bytestream_t *ttext = text, *tdata = data, *tbss = bss; + pushcontext(_("Creating temporary files")); if (!(f1 = fopen("__text__", "wb"))) { pushcontext(strerror(errno)); @@ -1773,73 +1777,75 @@ void asm_eof(FILE * f) exception(1, _("Error writing file __symbols__")); } popcontext(); - + pushcontext(_("Dumping memory into object file")); - - + + /* Segment de texte */ pushcontext(_("Dumping text segment")); for (ttext = ttext->next; ttext; ttext = ttext->next) { - sprintf(errctx, _("Processing word number %i coming from line %i of the file %s."), ttext->offset, ttext->line, ttext->filename); + sprintf(errctx, _("Processing word number %i coming from line %i of the file %s."), ttext->offset, + ttext->line, ttext->filename); pushcontext(errctx); - + a = 0; - + if (ttext->Expr) { - switch(ttext->Expr->e_subtype) { - case E_VALUE: - a = ttext->Expr->avalue; - break; - case E_LABEL: - a = ttext->Expr->avalue; - nbsymbols++; - writeword(1, f2, 1); - writeword(ttext->offset, f2, 1); - writeword(strlen(ttext->Expr->symbol), f2, 1); - writestring(ttext->Expr->symbol, f2); - nbe++; - break; - case E_OPERATION: - if (ttext->Expr->op == OP_DIRECT) { - if (ttext->Expr->child->e_subtype == E_VALUE) { - a = ttext->Expr->child->avalue; - break; - } - } - if (ttext->Expr->op != OP_FUNC_CALL) { - exception(1, _("Can't evaluate expression for a direct value")); - } - if (strcmp(ttext->Expr->symbol, "diff")) { - exception(1, _("Can't evaluate expression for a direct value")); - } - if ((ttext->Expr->child->e_subtype != E_LABEL) || (ttext->Expr->child->next->e_subtype != E_LABEL)) { - exception(1, _("Can only use the diff() function onto labels")); - } - - t = (bytestream_t *) NomVarToVar(ttext->Expr->child->symbol, labels, &trouve); - if (!trouve) { - exception(1, _("Can only evaluate a diff on local symbols")); - } - u = (bytestream_t *) NomVarToVar(ttext->Expr->child->next->symbol, labels, &trouve); - if (!trouve) { - exception(1, _("Can only evaluate a diff on local symbols")); - } - - if (t->segment != u->segment) { - exception(1, _("Can only evaluate a diff on symbols from the same segment")); + switch (ttext->Expr->e_subtype) { + case E_VALUE: + a = ttext->Expr->avalue; + break; + case E_LABEL: + a = ttext->Expr->avalue; + nbsymbols++; + writeword(1, f2, 1); + writeword(ttext->offset, f2, 1); + writeword(strlen(ttext->Expr->symbol), f2, 1); + writestring(ttext->Expr->symbol, f2); + nbe++; + break; + case E_OPERATION: + if (ttext->Expr->op == OP_DIRECT) { + if (ttext->Expr->child->e_subtype == E_VALUE) { + a = ttext->Expr->child->avalue; + break; } - - a = t->offset - u->offset; - break; - default: - exception(1, _("Can't evaluate expression")); + } + if (ttext->Expr->op != OP_FUNC_CALL) { + exception(1, _("Can't evaluate expression for a direct value")); + } + if (strcmp(ttext->Expr->symbol, "diff")) { + exception(1, _("Can't evaluate expression for a direct value")); + } + if ((ttext->Expr->child->e_subtype != E_LABEL) + || (ttext->Expr->child->next->e_subtype != E_LABEL)) { + exception(1, _("Can only use the diff() function onto labels")); + } + + t = (bytestream_t *) NomVarToVar(ttext->Expr->child->symbol, labels, &trouve); + if (!trouve) { + exception(1, _("Can only evaluate a diff on local symbols")); + } + u = (bytestream_t *) NomVarToVar(ttext->Expr->child->next->symbol, labels, &trouve); + if (!trouve) { + exception(1, _("Can only evaluate a diff on local symbols")); + } + + if (t->segment != u->segment) { + exception(1, _("Can only evaluate a diff on symbols from the same segment")); + } + + a = t->offset - u->offset; + break; + default: + exception(1, _("Can't evaluate expression")); } } - + a += ttext->Encoded; - + if (ttext->size) { writeword(a, f1, text->size); } else { @@ -1858,70 +1864,72 @@ void asm_eof(FILE * f) popcontext(); } popcontext(); - + /* Segment de data */ pushcontext(_("Dumping data segment")); for (tdata = tdata->next; tdata; tdata = tdata->next) { - sprintf(errctx, _("Processing word number %i coming from line %i of the file %s."), tdata->offset, tdata->line, tdata->filename); + sprintf(errctx, _("Processing word number %i coming from line %i of the file %s."), tdata->offset, + tdata->line, tdata->filename); pushcontext(errctx); - + a = 0; - + if (tdata->Expr) { - switch(tdata->Expr->e_subtype) { - case E_VALUE: - a = tdata->Expr->avalue; - break; - case E_LABEL: - a = tdata->Expr->avalue; - nbsymbols++; - writeword(3, f2, 1); - writeword(tdata->offset + s_text, f2, 1); - writeword(strlen(tdata->Expr->symbol), f2, 1); - writestring(tdata->Expr->symbol, f2); - nbe++; - break; - case E_OPERATION: - if (tdata->Expr->op == OP_DIRECT) { - if (tdata->Expr->child->e_subtype == E_VALUE) { - a = tdata->Expr->child->avalue; - break; - } - } - if (tdata->Expr->op != OP_FUNC_CALL) { - exception(1, _("Can't evaluate expression for a direct value")); - } - if (strcmp(tdata->Expr->symbol, "diff")) { - exception(1, _("Can't evaluate expression for a direct value")); - } - if ((tdata->Expr->child->e_subtype != E_LABEL) || (tdata->Expr->child->next->e_subtype != E_LABEL)) { - exception(1, _("Can only use the diff() function onto labels")); - } - - t = (bytestream_t *) NomVarToVar(tdata->Expr->child->symbol, labels, &trouve); - if (!trouve) { - exception(1, _("Can only evaluate a diff on local symbols")); - } - u = (bytestream_t *) NomVarToVar(tdata->Expr->child->next->symbol, labels, &trouve); - if (!trouve) { - exception(1, _("Can only evaluate a diff on local symbols")); - } - - if (t->segment != u->segment) { - exception(1, _("Can only evaluate a diff on symbols from the same segment")); + switch (tdata->Expr->e_subtype) { + case E_VALUE: + a = tdata->Expr->avalue; + break; + case E_LABEL: + a = tdata->Expr->avalue; + nbsymbols++; + writeword(3, f2, 1); + writeword(tdata->offset + s_text, f2, 1); + writeword(strlen(tdata->Expr->symbol), f2, 1); + writestring(tdata->Expr->symbol, f2); + nbe++; + break; + case E_OPERATION: + if (tdata->Expr->op == OP_DIRECT) { + if (tdata->Expr->child->e_subtype == E_VALUE) { + a = tdata->Expr->child->avalue; + break; } - - a = t->offset - u->offset; - break; - default: - exception(1, _("Can't evaluate expression")); + } + if (tdata->Expr->op != OP_FUNC_CALL) { + exception(1, _("Can't evaluate expression for a direct value")); + } + if (strcmp(tdata->Expr->symbol, "diff")) { + exception(1, _("Can't evaluate expression for a direct value")); + } + if ((tdata->Expr->child->e_subtype != E_LABEL) + || (tdata->Expr->child->next->e_subtype != E_LABEL)) { + exception(1, _("Can only use the diff() function onto labels")); + } + + t = (bytestream_t *) NomVarToVar(tdata->Expr->child->symbol, labels, &trouve); + if (!trouve) { + exception(1, _("Can only evaluate a diff on local symbols")); + } + u = (bytestream_t *) NomVarToVar(tdata->Expr->child->next->symbol, labels, &trouve); + if (!trouve) { + exception(1, _("Can only evaluate a diff on local symbols")); + } + + if (t->segment != u->segment) { + exception(1, _("Can only evaluate a diff on symbols from the same segment")); + } + + a = t->offset - u->offset; + break; + default: + exception(1, _("Can't evaluate expression")); } } - + a += tdata->Encoded; - + if (tdata->size) { writeword(a, f1, text->size); } else { @@ -1937,16 +1945,17 @@ void asm_eof(FILE * f) popcontext(); } popcontext(); - + fclose(f1); - + /* Segment bss */ pushcontext(_("Dumping bss segment")); for (tbss = tbss->next; tbss; tbss = tbss->next) { - sprintf(errctx, _("Processing word number %i coming from line %i of the file %s."), tbss->offset, tbss->line, tbss->filename); + sprintf(errctx, _("Processing word number %i coming from line %i of the file %s."), tbss->offset, + tbss->line, tbss->filename); pushcontext(errctx); - + if (!tbss->size) { if (tbss->Label) { nbsymbols++; @@ -1954,7 +1963,7 @@ void asm_eof(FILE * f) writeword(tbss->offset + s_text + s_data, f2, 1); writeword(strlen(tbss->Label), f2, 1); writestring(tbss->Label, f2); - nbi++; + nbi++; } } popcontext(); @@ -1970,22 +1979,25 @@ void asm_eof(FILE * f) } else { writeword(-1, f, 1); } - + writeword(s_text, f, 1); writeword(s_data, f, 1); writeword(s_bss, f, 1); writeword(ftell(f2) + 1, f, 1); fclose(f2); - + writeword(nbsymbols, f, 1); appendfile(f, "__symbols__"); appendfile(f, "__text__"); fclose(f); - + unlink("__symbols__"); unlink("__text__"); - - fprintf(stderr, _("Statistics: %i words of text, %i words of data, and %i words reserved.\n%i symbols generated with %i internal and %i external.\n"), s_text, s_data, s_bss, nbsymbols, nbi, nbe); + + fprintf(stderr, + _ + ("Statistics: %i words of text, %i words of data, and %i words reserved.\n%i symbols generated with %i internal and %i external.\n"), + s_text, s_data, s_bss, nbsymbols, nbi, nbe); } /* Diverses fonctions pour faire plein de free() partout */ |