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 |
} |
} |