version 1.63, 2013/09/06 10:30:50
|
version 1.68, 2014/07/26 09:58:02
|
Line 1
|
Line 1
|
/* |
/* |
================================================================================ |
================================================================================ |
RPL/2 (R) version 4.1.16 |
RPL/2 (R) version 4.1.19 |
Copyright (C) 1989-2013 Dr. BERTRAND Joël |
Copyright (C) 1989-2014 Dr. BERTRAND Joël |
|
|
This file is part of RPL/2. |
This file is part of RPL/2. |
|
|
Line 1017 swap(void *variable_1, void *variable_2,
|
Line 1017 swap(void *variable_1, void *variable_2,
|
logical1 |
logical1 |
recherche_instruction_suivante(struct_processus *s_etat_processus) |
recherche_instruction_suivante(struct_processus *s_etat_processus) |
{ |
{ |
|
enum t_type registre_type_en_cours; |
|
|
logical1 drapeau_fin_objet; |
logical1 drapeau_fin_objet; |
logical1 erreur; |
logical1 erreur; |
|
|
Line 1024 recherche_instruction_suivante(struct_pr
|
Line 1026 recherche_instruction_suivante(struct_pr
|
int erreur_format; |
int erreur_format; |
|
|
unsigned char base_binaire; |
unsigned char base_binaire; |
|
unsigned char caractere_fin; |
unsigned char *pointeur_caractere_courant; |
unsigned char *pointeur_caractere_courant; |
unsigned char *pointeur_caractere_destination; |
unsigned char *pointeur_caractere_destination; |
unsigned char *pointeur_debut_instruction; |
unsigned char *pointeur_debut_instruction; |
unsigned char *pointeur_fin_instruction; |
unsigned char *pointeur_fin_instruction; |
|
|
signed long niveau; |
signed long niveau; |
signed long niveau_annexe; |
|
|
|
erreur_analyse = d_ex; |
erreur_analyse = d_ex; |
erreur_format = d_ex; |
erreur_format = d_ex; |
erreur = d_absence_erreur; |
erreur = d_absence_erreur; |
|
|
|
switch((*s_etat_processus).type_en_cours) |
|
{ |
|
case RPN: |
|
{ |
|
caractere_fin = '>'; |
|
break; |
|
} |
|
|
|
case LST: |
|
{ |
|
caractere_fin = '}'; |
|
break; |
|
} |
|
|
|
case TBL: |
|
{ |
|
caractere_fin = ']'; |
|
break; |
|
} |
|
|
|
default: |
|
{ |
|
caractere_fin = d_code_espace; |
|
break; |
|
} |
|
} |
|
|
drapeau_fin_objet = d_faux; |
drapeau_fin_objet = d_faux; |
niveau = 0; |
niveau = 0; |
|
|
Line 1074 recherche_instruction_suivante(struct_pr
|
Line 1103 recherche_instruction_suivante(struct_pr
|
while(((*pointeur_caractere_courant) != d_code_espace) && |
while(((*pointeur_caractere_courant) != d_code_espace) && |
((*pointeur_caractere_courant) != d_code_fin_chaine) && |
((*pointeur_caractere_courant) != d_code_fin_chaine) && |
(drapeau_fin_objet == d_faux) && |
(drapeau_fin_objet == d_faux) && |
(erreur_analyse == d_ex) && |
(erreur_analyse == d_ex) && (erreur_format == d_ex)) |
(erreur_format == d_ex)) |
|
{ |
{ |
switch(*pointeur_caractere_courant++) |
switch(*pointeur_caractere_courant++) |
{ |
{ |
Line 1294 recherche_instruction_suivante(struct_pr
|
Line 1322 recherche_instruction_suivante(struct_pr
|
pointeur_caractere_courant++; |
pointeur_caractere_courant++; |
|
|
if (((*pointeur_caractere_courant) != d_code_fin_chaine) && |
if (((*pointeur_caractere_courant) != d_code_fin_chaine) && |
((*pointeur_caractere_courant) != ' ')) |
((*pointeur_caractere_courant) != d_code_espace) && |
|
((*pointeur_caractere_courant) != caractere_fin)) |
{ |
{ |
erreur_analyse = d_ex_syntaxe; |
erreur_analyse = d_ex_syntaxe; |
} |
} |
Line 1418 recherche_instruction_suivante(struct_pr
|
Line 1447 recherche_instruction_suivante(struct_pr
|
} |
} |
|
|
niveau = 1; |
niveau = 1; |
niveau_annexe = 0; |
|
|
|
while((niveau != 0) && ((*pointeur_caractere_courant) != |
while((niveau != 0) && ((*pointeur_caractere_courant) != |
d_code_fin_chaine)) |
d_code_fin_chaine)) |
Line 1427 recherche_instruction_suivante(struct_pr
|
Line 1455 recherche_instruction_suivante(struct_pr
|
pointeur_caractere_courant |
pointeur_caractere_courant |
- (*s_etat_processus).definitions_chainees; |
- (*s_etat_processus).definitions_chainees; |
|
|
|
registre_type_en_cours = (*s_etat_processus).type_en_cours; |
|
(*s_etat_processus).type_en_cours = LST; |
|
|
if (recherche_instruction_suivante(s_etat_processus) |
if (recherche_instruction_suivante(s_etat_processus) |
== d_erreur) |
== d_erreur) |
{ |
{ |
|
(*s_etat_processus).type_en_cours = |
|
registre_type_en_cours; |
|
|
if ((*s_etat_processus).instruction_courante |
if ((*s_etat_processus).instruction_courante |
!= NULL) |
!= NULL) |
{ |
{ |
free((*s_etat_processus).instruction_courante); |
free((*s_etat_processus).instruction_courante); |
|
(*s_etat_processus).instruction_courante = NULL; |
} |
} |
|
|
return(d_erreur); |
return(d_erreur); |
Line 1443 recherche_instruction_suivante(struct_pr
|
Line 1478 recherche_instruction_suivante(struct_pr
|
(*s_etat_processus).definitions_chainees + |
(*s_etat_processus).definitions_chainees + |
(*s_etat_processus).position_courante; |
(*s_etat_processus).position_courante; |
|
|
if (strcmp((*s_etat_processus).instruction_courante, "{") |
if (strcmp((*s_etat_processus).instruction_courante, "}") |
== 0) |
== 0) |
{ |
{ |
if (niveau_annexe == 0) |
|
{ |
|
niveau++; |
|
} |
|
else |
|
{ |
|
erreur_analyse = d_ex_syntaxe; |
|
} |
|
} |
|
else if (strcmp((*s_etat_processus).instruction_courante, |
|
"}") == 0) |
|
{ |
|
if (niveau_annexe == 0) |
|
{ |
|
niveau--; |
|
} |
|
else |
|
{ |
|
erreur_analyse = d_ex_syntaxe; |
|
} |
|
} |
|
else if (strcmp((*s_etat_processus).instruction_courante, |
|
"<[") == 0) |
|
{ |
|
niveau++; |
|
} |
|
else if (strcmp((*s_etat_processus).instruction_courante, |
|
"]>") == 0) |
|
{ |
|
niveau--; |
niveau--; |
} |
} |
else if (strcmp((*s_etat_processus).instruction_courante, |
|
"[") == 0) |
|
{ |
|
niveau_annexe++; |
|
|
|
if (niveau_annexe > 2) |
|
{ |
|
erreur_analyse = d_ex_syntaxe; |
|
} |
|
} |
|
else if (strcmp((*s_etat_processus).instruction_courante, |
|
"[[") == 0) |
|
{ |
|
niveau_annexe += 2; |
|
|
|
if (niveau_annexe > 2) |
|
{ |
|
erreur_analyse = d_ex_syntaxe; |
|
} |
|
} |
|
else if (strcmp((*s_etat_processus).instruction_courante, |
|
"]") == 0) |
|
{ |
|
niveau_annexe--; |
|
|
|
if (niveau_annexe < 0) |
|
{ |
|
erreur_analyse = d_ex_syntaxe; |
|
} |
|
} |
|
else if (strcmp((*s_etat_processus).instruction_courante, |
|
"]]") == 0) |
|
{ |
|
niveau_annexe -= 2; |
|
|
|
if (niveau_annexe < 0) |
|
{ |
|
erreur_analyse = d_ex_syntaxe; |
|
} |
|
} |
|
else if ((*s_etat_processus).instruction_courante[0] == '"') |
|
{ |
|
if (niveau_annexe != 0) |
|
{ |
|
erreur_analyse = d_ex_syntaxe; |
|
} |
|
} |
|
|
|
free((*s_etat_processus).instruction_courante); |
free((*s_etat_processus).instruction_courante); |
} |
} |
|
|
if ((niveau != 0) || (niveau_annexe != 0)) |
if (niveau != 0) |
{ |
{ |
erreur_analyse = d_ex_syntaxe; |
erreur_analyse = d_ex_syntaxe; |
} |
} |
Line 1635 recherche_instruction_suivante(struct_pr
|
Line 1594 recherche_instruction_suivante(struct_pr
|
pointeur_caractere_courant |
pointeur_caractere_courant |
- (*s_etat_processus).definitions_chainees; |
- (*s_etat_processus).definitions_chainees; |
|
|
|
registre_type_en_cours = (*s_etat_processus) |
|
.type_en_cours; |
|
(*s_etat_processus).type_en_cours = RPN; |
|
|
if (recherche_instruction_suivante(s_etat_processus) |
if (recherche_instruction_suivante(s_etat_processus) |
== d_erreur) |
== d_erreur) |
{ |
{ |
|
(*s_etat_processus).type_en_cours = |
|
registre_type_en_cours; |
|
|
if ((*s_etat_processus).instruction_courante |
if ((*s_etat_processus).instruction_courante |
!= NULL) |
!= NULL) |
{ |
{ |
free((*s_etat_processus).instruction_courante); |
free((*s_etat_processus).instruction_courante); |
|
(*s_etat_processus).instruction_courante = NULL; |
} |
} |
|
|
return(d_erreur); |
return(d_erreur); |
} |
} |
|
|
|
(*s_etat_processus).type_en_cours = |
|
registre_type_en_cours; |
pointeur_caractere_courant = |
pointeur_caractere_courant = |
(*s_etat_processus).definitions_chainees + |
(*s_etat_processus).definitions_chainees + |
(*s_etat_processus).position_courante; |
(*s_etat_processus).position_courante; |
Line 1713 recherche_instruction_suivante(struct_pr
|
Line 1682 recherche_instruction_suivante(struct_pr
|
pointeur_caractere_courant |
pointeur_caractere_courant |
- (*s_etat_processus).definitions_chainees; |
- (*s_etat_processus).definitions_chainees; |
|
|
|
registre_type_en_cours = (*s_etat_processus) |
|
.type_en_cours; |
|
(*s_etat_processus).type_en_cours = TBL; |
|
|
if ((erreur = recherche_instruction_suivante( |
if ((erreur = recherche_instruction_suivante( |
s_etat_processus)) != d_absence_erreur) |
s_etat_processus)) != d_absence_erreur) |
{ |
{ |
|
(*s_etat_processus).type_en_cours = |
|
registre_type_en_cours; |
|
|
if ((*s_etat_processus).instruction_courante |
if ((*s_etat_processus).instruction_courante |
!= NULL) |
!= NULL) |
{ |
{ |
free((*s_etat_processus) |
free((*s_etat_processus) |
.instruction_courante); |
.instruction_courante); |
|
(*s_etat_processus).instruction_courante |
|
= NULL; |
} |
} |
|
|
return(d_erreur); |
return(d_erreur); |
} |
} |
|
|
|
(*s_etat_processus).type_en_cours = |
|
registre_type_en_cours; |
pointeur_caractere_courant = (*s_etat_processus) |
pointeur_caractere_courant = (*s_etat_processus) |
.definitions_chainees + (*s_etat_processus) |
.definitions_chainees + (*s_etat_processus) |
.position_courante; |
.position_courante; |
Line 1744 recherche_instruction_suivante(struct_pr
|
Line 1724 recherche_instruction_suivante(struct_pr
|
break; |
break; |
} |
} |
} |
} |
|
|
|
if ((*pointeur_caractere_courant) == caractere_fin) |
|
{ |
|
break; |
|
} |
} |
} |
|
|
pointeur_fin_instruction = pointeur_caractere_courant; |
pointeur_fin_instruction = pointeur_caractere_courant; |
Line 1779 recherche_instruction_suivante(struct_pr
|
Line 1764 recherche_instruction_suivante(struct_pr
|
(*(*s_etat_processus).instruction_courante) = d_code_fin_chaine; |
(*(*s_etat_processus).instruction_courante) = d_code_fin_chaine; |
} |
} |
|
|
|
uprintf("%c %s\n", caractere_fin, (*s_etat_processus).instruction_courante); |
(*s_etat_processus).position_courante = pointeur_fin_instruction |
(*s_etat_processus).position_courante = pointeur_fin_instruction |
- (*s_etat_processus).definitions_chainees; |
- (*s_etat_processus).definitions_chainees; |
|
|