version 1.57, 2012/07/03 12:49:55
|
version 1.80, 2015/01/27 14:18:07
|
Line 1
|
Line 1
|
/* |
/* |
================================================================================ |
================================================================================ |
RPL/2 (R) version 4.1.9 |
RPL/2 (R) version 4.1.20 |
Copyright (C) 1989-2012 Dr. BERTRAND Joël |
Copyright (C) 1989-2015 Dr. BERTRAND Joël |
|
|
This file is part of RPL/2. |
This file is part of RPL/2. |
|
|
Line 210 instruction_or(struct_processus *s_etat_
|
Line 210 instruction_or(struct_processus *s_etat_
|
struct_objet *s_objet_argument_2; |
struct_objet *s_objet_argument_2; |
struct_objet *s_objet_resultat; |
struct_objet *s_objet_resultat; |
|
|
unsigned long nombre_elements; |
integer8 nombre_elements; |
|
|
(*s_etat_processus).erreur_execution = d_ex; |
(*s_etat_processus).erreur_execution = d_ex; |
|
|
Line 907 instruction_open(struct_processus *s_eta
|
Line 907 instruction_open(struct_processus *s_eta
|
int buffer_reception; |
int buffer_reception; |
int drapeau; |
int drapeau; |
int priorite; |
int priorite; |
|
int prochain_descripteur; |
int protocole_numerique; |
int protocole_numerique; |
int timeout_emission; |
int timeout_emission; |
int timeout_reception; |
int timeout_reception; |
Line 973 instruction_open(struct_processus *s_eta
|
Line 974 instruction_open(struct_processus *s_eta
|
|
|
unsigned long i; |
unsigned long i; |
unsigned long nombre_elements; |
unsigned long nombre_elements; |
unsigned long prochain_descripteur; |
|
unsigned long unite; |
unsigned long unite; |
|
|
# define d_BIND_TO_DEVICE 0 |
# define d_BIND_TO_DEVICE 0 |
Line 1028 instruction_open(struct_processus *s_eta
|
Line 1028 instruction_open(struct_processus *s_eta
|
"\"file name\" } \"protection\" } OPEN\n"); |
"\"file name\" } \"protection\" } OPEN\n"); |
printf(" { \"filetype\" \"access\" \"format\" { \"name\" " |
printf(" { \"filetype\" \"access\" \"format\" { \"name\" " |
"\"file name\" } \n" |
"\"file name\" } \n" |
" { \"stty\" { \"stty parameters\" ... } } } OPEN\n"); |
" { \"stty\" \"speed,bits,parity,stop\"\n" |
|
" { \"stty parameters\" ... } } } OPEN\n"); |
printf(" { \"sockettype\" { \"name\" \"local name\" } } OPEN\n"); |
printf(" { \"sockettype\" { \"name\" \"local name\" } } OPEN\n"); |
printf(" { \"sockettype\" \"socketdomain\" \"protection\" } OPEN\n"); |
printf(" { \"sockettype\" \"socketdomain\" \"protection\" } OPEN\n"); |
printf(" \"/semaphore\" OPEN\n\n"); |
printf(" \"/semaphore\" OPEN\n\n"); |
Line 1078 instruction_open(struct_processus *s_eta
|
Line 1079 instruction_open(struct_processus *s_eta
|
printf(" { \"STREAM\" \"READWRITE\" } OPEN\n"); |
printf(" { \"STREAM\" \"READWRITE\" } OPEN\n"); |
printf(" { \"FOREIGN\" \"DATAGRAM\" } OPEN\n"); |
printf(" { \"FOREIGN\" \"DATAGRAM\" } OPEN\n"); |
printf(" { \"LOCAL\" { \"NAME\" \"socket.sock\" } } OPEN\n"); |
printf(" { \"LOCAL\" { \"NAME\" \"socket.sock\" } } OPEN\n"); |
printf(" { { \"NAME\" \"/dev/ttyS1\" } { \"STTY\" { \"9600,8,N,1\" " |
printf(" { { \"NAME\" \"/dev/ttyS1\" } { \"STTY\" \"9600,8,N,1\" " |
"\n { \"NO ICANON\" \"IGNBRK\" } } } OPEN\n"); |
"\n { \"NO ICANON\" \"IGNBRK\" } } } OPEN\n"); |
|
|
return; |
return; |
Line 1148 instruction_open(struct_processus *s_eta
|
Line 1149 instruction_open(struct_processus *s_eta
|
{ |
{ |
if ((*(*l_element_courant).donnee).type == CHN) |
if ((*(*l_element_courant).donnee).type == CHN) |
{ |
{ |
if ((argument_majuscule = conversion_majuscule((unsigned char *) |
if ((argument_majuscule = conversion_majuscule(s_etat_processus, |
(*(*l_element_courant).donnee).objet)) == NULL) |
(unsigned char *) (*(*l_element_courant).donnee).objet)) |
|
== NULL) |
{ |
{ |
(*s_etat_processus).erreur_systeme = |
(*s_etat_processus).erreur_systeme = |
d_es_allocation_memoire; |
d_es_allocation_memoire; |
Line 1763 instruction_open(struct_processus *s_eta
|
Line 1765 instruction_open(struct_processus *s_eta
|
if ((*(*l_element_courant_sous_objet).donnee).type == CHN) |
if ((*(*l_element_courant_sous_objet).donnee).type == CHN) |
{ |
{ |
if ((argument_majuscule = conversion_majuscule( |
if ((argument_majuscule = conversion_majuscule( |
(unsigned char *) |
s_etat_processus, (unsigned char *) |
(*(*l_element_courant_sous_objet) |
(*(*l_element_courant_sous_objet) |
.donnee).objet)) == NULL) |
.donnee).objet)) == NULL) |
{ |
{ |
Line 1829 instruction_open(struct_processus *s_eta
|
Line 1831 instruction_open(struct_processus *s_eta
|
free(argument_majuscule); |
free(argument_majuscule); |
|
|
if ((argument_majuscule = conversion_majuscule( |
if ((argument_majuscule = conversion_majuscule( |
(unsigned char *) |
s_etat_processus, (unsigned char *) |
(*(*l_element_courant_sous_objet) |
(*(*l_element_courant_sous_objet) |
.donnee).objet)) == NULL) |
.donnee).objet)) == NULL) |
{ |
{ |
Line 1998 instruction_open(struct_processus *s_eta
|
Line 2000 instruction_open(struct_processus *s_eta
|
if ((protocole_socket[i] >= 'a') && |
if ((protocole_socket[i] >= 'a') && |
(protocole_socket[i] <= 'z')) |
(protocole_socket[i] <= 'z')) |
{ |
{ |
protocole_socket[i] -= 'a' - 'A'; |
protocole_socket[i] = (unsigned char) |
|
(protocole_socket[i] |
|
- ('a' - 'A')); |
} |
} |
} |
} |
} |
} |
Line 2141 instruction_open(struct_processus *s_eta
|
Line 2145 instruction_open(struct_processus *s_eta
|
{ |
{ |
type_arguments = 'S'; |
type_arguments = 'S'; |
} |
} |
else if (type_arguments == 'F') |
|
{ |
{ |
liberation(s_etat_processus, |
liberation(s_etat_processus, |
s_objet_argument); |
s_objet_argument); |
Line 2318 instruction_open(struct_processus *s_eta
|
Line 2321 instruction_open(struct_processus *s_eta
|
if ((*(*l_element_courant_sous_objet).donnee).type == CHN) |
if ((*(*l_element_courant_sous_objet).donnee).type == CHN) |
{ |
{ |
if ((argument_majuscule = conversion_majuscule( |
if ((argument_majuscule = conversion_majuscule( |
(unsigned char *) |
s_etat_processus, (unsigned char *) |
(*(*l_element_courant_sous_objet) |
(*(*l_element_courant_sous_objet) |
.donnee).objet)) == NULL) |
.donnee).objet)) == NULL) |
{ |
{ |
Line 2359 instruction_open(struct_processus *s_eta
|
Line 2362 instruction_open(struct_processus *s_eta
|
} |
} |
|
|
if ((argument_majuscule = conversion_majuscule( |
if ((argument_majuscule = conversion_majuscule( |
(unsigned char *) |
s_etat_processus, (unsigned char *) |
(*(*l_element_courant_sous_objet) |
(*(*l_element_courant_sous_objet) |
.donnee).objet)) == NULL) |
.donnee).objet)) == NULL) |
{ |
{ |
Line 3620 instruction_open(struct_processus *s_eta
|
Line 3623 instruction_open(struct_processus *s_eta
|
} |
} |
|
|
if ((parametre_courant_majuscule = conversion_majuscule( |
if ((parametre_courant_majuscule = conversion_majuscule( |
(*(*parametre_courant).donnee).objet)) == NULL) |
s_etat_processus, (*(*parametre_courant).donnee).objet)) |
|
== NULL) |
{ |
{ |
liberation(s_etat_processus, s_objet_argument); |
liberation(s_etat_processus, s_objet_argument); |
liberation(s_etat_processus, s_objet_resultat); |
liberation(s_etat_processus, s_objet_resultat); |
Line 3657 instruction_open(struct_processus *s_eta
|
Line 3661 instruction_open(struct_processus *s_eta
|
// Vitesse |
// Vitesse |
|
|
unsigned char *vitesses[] = |
unsigned char *vitesses[] = |
{ "0", "50", "75", "110", "134", "150", |
{ "50", "75", "110", "134", "150", |
"200", "300", "600", "1200", "1800", "2400", |
"200", "300", "600", "1200", "1800", "2400", |
"4800", "9600", "19200", "38400", |
"4800", "9600", "19200", "38400", |
#ifdef B57600 |
#ifdef B57600 |
Line 3670 instruction_open(struct_processus *s_eta
|
Line 3674 instruction_open(struct_processus *s_eta
|
"230400", |
"230400", |
#endif |
#endif |
NULL }; |
NULL }; |
int vitesses_constantes[] = |
tcflag_t vitesses_constantes[] = |
{ B0, B50, B75, B110, B134, B150, B200, B300, B600, |
{ B50, B75, B110, B134, B150, B200, B300, B600, |
B1200, B1800, B2400, B4800, B9600, B19200, B38400, |
B1200, B1800, B2400, B4800, B9600, B19200, B38400, |
#ifdef B57600 |
#ifdef B57600 |
B57600, |
B57600, |
Line 3696 instruction_open(struct_processus *s_eta
|
Line 3700 instruction_open(struct_processus *s_eta
|
d_code_espace) |
d_code_espace) |
{ |
{ |
#ifdef CBAUD |
#ifdef CBAUD |
tc.c_cflag &= ~CBAUD; |
tc.c_cflag &= ~((tcflag_t) CBAUD); |
tc.c_cflag |= vitesses_constantes[vitesse_courante]; |
tc.c_cflag |= vitesses_constantes[vitesse_courante]; |
#else // POSIX |
#else // POSIX |
cfsetispeed(&tc, |
cfsetispeed(&tc, |
Line 3742 instruction_open(struct_processus *s_eta
|
Line 3746 instruction_open(struct_processus *s_eta
|
{ |
{ |
case '5': |
case '5': |
{ |
{ |
tc.c_cflag &= ~CSIZE; |
tc.c_cflag &= ~((tcflag_t) CSIZE); |
tc.c_cflag |= CS5; |
tc.c_cflag |= CS5; |
break; |
break; |
} |
} |
|
|
case '6': |
case '6': |
{ |
{ |
tc.c_cflag &= ~CSIZE; |
tc.c_cflag &= ~((tcflag_t) CSIZE); |
tc.c_cflag |= CS6; |
tc.c_cflag |= CS6; |
break; |
break; |
} |
} |
|
|
case '7': |
case '7': |
{ |
{ |
tc.c_cflag &= ~CSIZE; |
tc.c_cflag &= ~((tcflag_t) CSIZE); |
tc.c_cflag |= CS7; |
tc.c_cflag |= CS7; |
break; |
break; |
} |
} |
|
|
case '8': |
case '8': |
{ |
{ |
tc.c_cflag &= ~CSIZE; |
tc.c_cflag &= ~((tcflag_t) CSIZE); |
tc.c_cflag |= CS8; |
tc.c_cflag |= CS8; |
break; |
break; |
} |
} |
Line 3809 instruction_open(struct_processus *s_eta
|
Line 3813 instruction_open(struct_processus *s_eta
|
{ |
{ |
case 'N': |
case 'N': |
{ |
{ |
tc.c_cflag &= ~PARENB; |
tc.c_cflag &= ~((tcflag_t) PARENB); |
break; |
break; |
} |
} |
|
|
Line 3823 instruction_open(struct_processus *s_eta
|
Line 3827 instruction_open(struct_processus *s_eta
|
case 'E': |
case 'E': |
{ |
{ |
tc.c_cflag |= PARENB; |
tc.c_cflag |= PARENB; |
tc.c_cflag &= ~PARODD; |
tc.c_cflag &= ~((tcflag_t) PARODD); |
break; |
break; |
} |
} |
|
|
Line 3868 instruction_open(struct_processus *s_eta
|
Line 3872 instruction_open(struct_processus *s_eta
|
{ |
{ |
case '1': |
case '1': |
{ |
{ |
tc.c_cflag &= ~CSTOPB; |
tc.c_cflag &= ~((tcflag_t) CSTOPB); |
break; |
break; |
} |
} |
|
|
Line 3934 instruction_open(struct_processus *s_eta
|
Line 3938 instruction_open(struct_processus *s_eta
|
} |
} |
|
|
if ((parametre_courant_majuscule = conversion_majuscule( |
if ((parametre_courant_majuscule = conversion_majuscule( |
(*(*parametre_courant).donnee).objet)) == NULL) |
s_etat_processus, (*(*parametre_courant).donnee) |
|
.objet)) == NULL) |
{ |
{ |
(*s_etat_processus).erreur_systeme = |
(*s_etat_processus).erreur_systeme = |
d_es_allocation_memoire; |
d_es_allocation_memoire; |
Line 3962 instruction_open(struct_processus *s_eta
|
Line 3967 instruction_open(struct_processus *s_eta
|
#endif |
#endif |
"ISIG", "ICANON", "ECHO", "ECHOE", "ECHOK", |
"ISIG", "ICANON", "ECHO", "ECHOE", "ECHOK", |
"ECHONL", "NOFLSH", "TOSTOP", "IEXTEN", NULL }; |
"ECHONL", "NOFLSH", "TOSTOP", "IEXTEN", NULL }; |
int fonctions_constantes[] = |
tcflag_t fonctions_constantes[] = |
{ /* c_iflag */ |
{ /* c_iflag */ |
1, IGNBRK, 1, BRKINT, 1, IGNPAR, 1, PARMRK, |
1, IGNBRK, 1, BRKINT, 1, IGNPAR, 1, PARMRK, |
1, INPCK, 1, ISTRIP, 1, INLCR, 1, IGNCR, 1, ICRNL, |
1, INPCK, 1, ISTRIP, 1, INLCR, 1, IGNCR, 1, ICRNL, |
Line 4307 instruction_open(struct_processus *s_eta
|
Line 4312 instruction_open(struct_processus *s_eta
|
return; |
return; |
} |
} |
|
|
prochain_descripteur = i; |
prochain_descripteur = (int) i; |
|
|
/* |
/* |
* Ajout d'un élément à la fin de la liste chaînée |
* Ajout d'un élément à la fin de la liste chaînée |
Line 4397 instruction_open(struct_processus *s_eta
|
Line 4402 instruction_open(struct_processus *s_eta
|
# ifdef SO_BINDTODEVICE |
# ifdef SO_BINDTODEVICE |
if (setsockopt((*((struct_socket *) (*s_objet_resultat) |
if (setsockopt((*((struct_socket *) (*s_objet_resultat) |
.objet)).socket, SOL_SOCKET, SO_BINDTODEVICE, |
.objet)).socket, SOL_SOCKET, SO_BINDTODEVICE, |
peripherique, strlen(peripherique)) != 0) |
peripherique, (socklen_t) strlen(peripherique)) |
|
!= 0) |
{ |
{ |
liberation(s_etat_processus, s_objet_argument); |
liberation(s_etat_processus, s_objet_argument); |
liberation(s_etat_processus, s_objet_resultat); |
liberation(s_etat_processus, s_objet_resultat); |
Line 4691 instruction_open(struct_processus *s_eta
|
Line 4697 instruction_open(struct_processus *s_eta
|
for(i = 0; i < 16; adresse[i++] = 0); |
for(i = 0; i < 16; adresse[i++] = 0); |
type_adresse = '6'; |
type_adresse = '6'; |
} |
} |
else |
else if (strcmp(protocole, "UNIX") != 0) |
{ |
{ |
liberation(s_etat_processus, s_objet_argument); |
liberation(s_etat_processus, s_objet_argument); |
|
|
Line 4735 instruction_open(struct_processus *s_eta
|
Line 4741 instruction_open(struct_processus *s_eta
|
if (strcmp(protocole_socket, "IPV4") == 0) |
if (strcmp(protocole_socket, "IPV4") == 0) |
{ |
{ |
protocole_socket[2] = d_code_fin_chaine; |
protocole_socket[2] = d_code_fin_chaine; |
|
protocole_numerique = 0; |
} |
} |
|
else |
if ((s_protocole = getprotobyname(protocole_socket)) == NULL) |
|
{ |
{ |
liberation(s_etat_processus, s_objet_argument); |
if ((s_protocole = getprotobyname(protocole_socket)) |
|
== NULL) |
|
{ |
|
liberation(s_etat_processus, s_objet_argument); |
|
|
(*s_etat_processus).erreur_execution = |
(*s_etat_processus).erreur_execution = |
d_ex_erreur_parametre_fichier; |
d_ex_erreur_parametre_fichier; |
return; |
return; |
} |
} |
|
|
protocole_numerique = (*s_protocole).p_proto; |
protocole_numerique = (*s_protocole).p_proto; |
|
} |
} |
} |
|
|
if ((s_objet_resultat = allocation(s_etat_processus, SCK)) |
if ((s_objet_resultat = allocation(s_etat_processus, SCK)) |
Line 5247 instruction_open(struct_processus *s_eta
|
Line 5257 instruction_open(struct_processus *s_eta
|
|
|
adresse_ipv4 = 0; |
adresse_ipv4 = 0; |
for(i = 0; i < 4; adresse_ipv4 = |
for(i = 0; i < 4; adresse_ipv4 = |
(256 * adresse_ipv4) + adresse[i++]); |
(256 * adresse_ipv4) + |
|
((unsigned char) adresse[i++])); |
|
|
socket_ipv4.sin_addr.s_addr = htonl(adresse_ipv4); |
socket_ipv4.sin_addr.s_addr = htonl(adresse_ipv4); |
|
|
Line 5836 instruction_open(struct_processus *s_eta
|
Line 5847 instruction_open(struct_processus *s_eta
|
|
|
adresse_ipv4 = 0; |
adresse_ipv4 = 0; |
for(i = 0; i < 4; adresse_ipv4 = |
for(i = 0; i < 4; adresse_ipv4 = |
(256 * adresse_ipv4) + adresse[i++]); |
(256 * adresse_ipv4) |
|
+ ((unsigned char) adresse[i++])); |
|
|
socket_ipv4.sin_addr.s_addr = htonl(adresse_ipv4); |
socket_ipv4.sin_addr.s_addr = htonl(adresse_ipv4); |
|
|