| 19 |
|
|
| 20 |
extern int yydebug; |
extern int yydebug; |
| 21 |
extern char *yytext; |
extern char *yytext; |
| 22 |
|
extern FILE *yyin; |
| 23 |
|
|
| 24 |
int numerLinii = 1; |
int numerLinii = 1; |
| 25 |
int numerInstrukcji = 0; |
int numerInstrukcji = 0; |
| 26 |
int daneOffset = 0; |
int daneOffset = 0; |
| 27 |
char * buforZnakowy = NULL; |
char *buforZnakowy = NULL; |
| 28 |
int wystapilBlad = 0; |
int wystapilBlad = 0; |
| 29 |
int aktualnaSekcja = 0; |
int aktualnaSekcja = 0; |
| 30 |
int wyrownanieAdresow = 0; |
int wyrownanieAdresow = 0; |
| 104 |
{ |
{ |
| 105 |
int opcja, status; |
int opcja, status; |
| 106 |
char *nazwaPlikuDanych, *nazwaPlikuRozkazow; |
char *nazwaPlikuDanych, *nazwaPlikuRozkazow; |
|
char *nazwaPlikuZrodlowego = NULL; |
|
| 107 |
char *nazwaPlikuWynikowego = NULL; |
char *nazwaPlikuWynikowego = NULL; |
| 108 |
FILE *plikBin, *binarkaSMARC = NULL; |
FILE *plikBin, *plikASM, *binarkaSMARC = NULL; |
| 109 |
|
|
| 110 |
while ((opcja = getopt(argc,argv,"hvo:qz")) != -1) |
while ((opcja = getopt(argc,argv,"hvo:qz")) != -1) |
| 111 |
switch (opcja) |
switch (opcja) |
| 126 |
case '?': |
case '?': |
| 127 |
case 'h': |
case 'h': |
| 128 |
printf(SPASM_POMOC); |
printf(SPASM_POMOC); |
| 129 |
exit(1); |
return(1); |
| 130 |
} |
} |
| 131 |
|
|
| 132 |
if (optind < argc) |
if (optind < argc) |
| 133 |
nazwaPlikuZrodlowego = argv[optind]; |
{ |
| 134 |
|
if ((plikASM = fopen(argv[optind], "r")) == NULL) |
| 135 |
|
{ |
| 136 |
|
fprintf(stderr, ERROR_PREFIX" could not open `%s'\n", argv[optind]); |
| 137 |
|
return(1); |
| 138 |
|
} |
| 139 |
|
yyin = plikASM; |
| 140 |
|
} |
| 141 |
else |
else |
| 142 |
nazwaPlikuZrodlowego = SPASM_ZRODLO; |
{ |
| 143 |
|
printf(SPASM_POMOC); |
| 144 |
freopen(nazwaPlikuZrodlowego, "r", stdin); |
return(1); |
| 145 |
|
} |
| 146 |
|
|
| 147 |
Dopisz (&buforZnakowy, ""); //sama alokacja :) |
Dopisz (&buforZnakowy, ""); //sama alokacja :) |
| 148 |
sprintf(buforZnakowy, SPASM_DANE_PREFIKS"%d", getpid()); |
sprintf(buforZnakowy, SPASM_DANE_PREFIKS"%d", getpid()); |
| 164 |
if ((plikWynikowyDanych = fopen(nazwaPlikuDanych, "w+"))) |
if ((plikWynikowyDanych = fopen(nazwaPlikuDanych, "w+"))) |
| 165 |
{ |
{ |
| 166 |
yyparse(); |
yyparse(); |
| 167 |
|
fclose(plikASM); |
| 168 |
wyrownanieAdresow = WORD_ALIGN; |
wyrownanieAdresow = WORD_ALIGN; |
| 169 |
DaneAlign(&wyrownanieAdresow); |
DaneAlign(&wyrownanieAdresow); |
| 170 |
} |
} |