2021-12-17 14:21:45 +01:00
|
|
|
#include<stdlib.h>
|
|
|
|
#include<stdio.h>
|
|
|
|
#include<string.h>
|
|
|
|
#include"mars_types.h" /* importe les types utilisés dans le programme */
|
|
|
|
#include"options.h" /* Inclus les options du programme */
|
|
|
|
|
|
|
|
int ouvrir_fichier(char* path){
|
|
|
|
FILE* fluxouverture;
|
2021-12-17 15:50:43 +01:00
|
|
|
char instru[4];
|
|
|
|
char arg1[4], arg2[4];
|
2021-12-17 14:21:45 +01:00
|
|
|
int c=0;
|
|
|
|
int i;
|
2021-12-17 15:50:43 +01:00
|
|
|
int ligne=0;
|
|
|
|
char buffer[4];
|
|
|
|
|
|
|
|
char previnstru[4]; // contient l'instruction ayant été "mal interprétée" à cause d'une instruction mauvaise
|
|
|
|
int errinstru; // flag qui aide le prog à savoir si l'instruction précédente était mauvaise
|
|
|
|
|
|
|
|
buffer[0]='\0';
|
2021-12-17 14:21:45 +01:00
|
|
|
|
|
|
|
fluxouverture=fopen(path, "r");
|
|
|
|
|
|
|
|
if (fluxouverture == NULL){
|
|
|
|
perror("fopen");
|
|
|
|
return EXIT_FAILURE;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (fluxouverture){
|
|
|
|
while (!feof(fluxouverture)){
|
2021-12-17 15:50:43 +01:00
|
|
|
|
|
|
|
instru[0]='\0';
|
|
|
|
arg1[0]='\0';
|
|
|
|
arg2[0]='\0';
|
|
|
|
|
|
|
|
|
|
|
|
|
2021-12-17 14:21:45 +01:00
|
|
|
printf("\n");
|
|
|
|
/*fread(&instru,sizeof(char),1,fluxouverture);
|
|
|
|
fread(&arg1,sizeof(char),3,fluxouverture);
|
|
|
|
fread(&arg2,sizeof(char),3,fluxouverture);
|
|
|
|
printf("%s %s %s\n", instru, arg1, arg2);*/
|
|
|
|
fscanf(fluxouverture, "%s %s %s", instru, arg1, arg2);
|
|
|
|
|
2021-12-17 15:50:43 +01:00
|
|
|
for (i=0; i<strlen(instru); i++){
|
2021-12-17 14:21:45 +01:00
|
|
|
printf("%c", instru[i]);
|
|
|
|
}
|
|
|
|
printf(" ");
|
|
|
|
|
2021-12-17 15:50:43 +01:00
|
|
|
/*if (!feof(fluxouverture) || !strcmp(arg1, buffer)==0){
|
|
|
|
for (i=0; i<strlen(arg1); i++){
|
2021-12-17 14:21:45 +01:00
|
|
|
printf("%c", arg1[i]);
|
|
|
|
}
|
|
|
|
printf(" ");
|
2021-12-17 15:50:43 +01:00
|
|
|
} else {
|
|
|
|
printf("\n");
|
|
|
|
}*/
|
|
|
|
|
|
|
|
if (!feof(fluxouverture) || !strcmp(arg1, buffer)==0){
|
|
|
|
if (strcmp(arg1, "MOV")==0 || strcmp(arg1, "ADD")==0 || strcmp(arg1, "SUB")==0 || strcmp(arg1, "JMP")==0 || strcmp(arg1, "JMZ")==0 || strcmp(arg1, "JMG")==0 || strcmp(arg1, "DJZ")==0 || strcmp(arg1, "CMP")==0 || strcmp(arg1, "DAT")==0){
|
|
|
|
printf("\n");
|
|
|
|
fseek(fluxouverture, -1, SEEK_CUR);
|
|
|
|
for (i=0; i<strlen(arg1); i++){
|
|
|
|
previnstru[i]=arg1[i];
|
|
|
|
printf("%c", previnstru[i]);
|
|
|
|
}
|
|
|
|
|
|
|
|
} else if (strcmp(arg1, "MOV")!=0 || strcmp(arg1, "ADD")!=0 || strcmp(arg1, "SUB")!=0 || strcmp(arg1, "JMP")!=0 || strcmp(arg1, "JMZ")!=0 || strcmp(arg1, "JMG")!=0 || strcmp(arg1, "DJZ")!=0 || strcmp(arg1, "CMP")!=0 || strcmp(arg1, "DAT")!=0) {
|
|
|
|
for (i=0; i<strlen(arg1); i++){
|
|
|
|
printf("%c", arg1[i]);
|
|
|
|
}
|
|
|
|
printf(" ");
|
|
|
|
} else {
|
|
|
|
printf("\n");
|
|
|
|
}
|
2021-12-17 14:21:45 +01:00
|
|
|
}
|
2021-12-17 15:50:43 +01:00
|
|
|
|
|
|
|
/*if (strcmp(arg2, "DAT")==0){
|
|
|
|
printf("bon");
|
|
|
|
}*/
|
2021-12-17 14:21:45 +01:00
|
|
|
|
2021-12-17 15:50:43 +01:00
|
|
|
if (!feof(fluxouverture) || !strcmp(arg2, buffer)==0){
|
|
|
|
if (strcmp(arg2, "MOV")==0 || strcmp(arg2, "ADD")==0 || strcmp(arg2, "SUB")==0 || strcmp(arg2, "JMP")==0 || strcmp(arg2, "JMZ")==0 || strcmp(arg2, "JMG")==0 || strcmp(arg2, "DJZ")==0 || strcmp(arg2, "CMP")==0 || strcmp(arg2, "DAT")==0){
|
|
|
|
|
|
|
|
fseek(fluxouverture, -3, SEEK_CUR);
|
|
|
|
} else if (strcmp(arg2, "MOV")!=0 || strcmp(arg2, "ADD")!=0 || strcmp(arg2, "SUB")!=0 || strcmp(arg2, "JMP")!=0 || strcmp(arg2, "JMZ")!=0 || strcmp(arg2, "JMG")!=0 || strcmp(arg2, "DJZ")!=0 || strcmp(arg2, "CMP")!=0 || strcmp(arg2, "DAT")!=0) {
|
|
|
|
for (i=0; i<strlen(arg2); i++){
|
2021-12-17 14:21:45 +01:00
|
|
|
printf("%c", arg2[i]);
|
|
|
|
}
|
2021-12-17 15:50:43 +01:00
|
|
|
} else {
|
|
|
|
printf("\n");
|
2021-12-17 14:21:45 +01:00
|
|
|
}
|
2021-12-17 15:50:43 +01:00
|
|
|
|
|
|
|
// return de la fonction si pas d'erreur
|
|
|
|
// instru / arg1 / arg2
|
|
|
|
|
|
|
|
// return de la fonction si erreur
|
|
|
|
// previnstru / arg1 / arg2 ?
|
|
|
|
|
2021-12-17 14:21:45 +01:00
|
|
|
}
|
|
|
|
}
|
2021-12-17 15:50:43 +01:00
|
|
|
}
|
2021-12-17 14:21:45 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
int main (int argc, char* argv[]){
|
|
|
|
ouvrir_fichier(argv[1]);
|
2021-12-17 15:50:43 +01:00
|
|
|
printf("\n");
|
2021-12-17 14:21:45 +01:00
|
|
|
}
|