--- rpl/src/instructions_o1.c 2019/01/01 09:03:07 1.97 +++ rpl/src/instructions_o1.c 2023/08/07 17:42:56 1.107 @@ -1,7 +1,7 @@ /* ================================================================================ - RPL/2 (R) version 4.1.30 - Copyright (C) 1989-2019 Dr. BERTRAND Joël + RPL/2 (R) version 4.1.35 + Copyright (C) 1989-2023 Dr. BERTRAND Joël This file is part of RPL/2. @@ -1265,7 +1265,7 @@ instruction_open(struct_processus *s_eta printf(" IMAXBEL, OPOST, ONLCR, OCRNL, ONOCR, ONLRET,\n"); printf(" OFILL, HUPCL, CLOCAL, CRTSCTS, ISIG, ICANON,\n"); printf(" ECHO, ECHOE, ECHOK, ECHONL, NOFLSH, TOSTOP,\n"); - printf(" IEXTEN\n"); + printf(" IEXTEN, RAW\n"); printf(" Address : { \"ADDRESS\" [ 127 0 0 1 ] }\n"); printf(" { \"HOST\" \"hostname\" }\n"); @@ -3890,6 +3890,24 @@ instruction_open(struct_processus *s_eta #ifdef B230400 "230400", #endif +#ifdef B460800 + "460800", +#endif +#ifdef B500000 + "500000", +#endif +#ifdef B576000 + "576000", +#endif +#ifdef B921600 + "921600", +#endif +#ifdef B1000000 + "1000000", +#endif +#ifdef B1152000 + "1152000", +#endif NULL }; tcflag_t vitesses_constantes[] = { B50, B75, B110, B134, B150, B200, B300, B600, @@ -3903,6 +3921,24 @@ instruction_open(struct_processus *s_eta #ifdef B230400 B230400, #endif +#ifdef B460800 + B460800, +#endif +#ifdef B500000 + B500000, +#endif +#ifdef B576000 + B576000, +#endif +#ifdef B921600 + B921600, +#endif +#ifdef B1000000 + B1000000, +#endif +#ifdef B1152000 + B1152000, +#endif 0 }; unsigned int vitesse_courante; @@ -4173,8 +4209,8 @@ instruction_open(struct_processus *s_eta #ifdef IXANY "IXANY", #endif - "IXOFF", "OPOST", - "ONLCR", "OCRNL", "ONOCR", "ONLRET", + "IXOFF", + "OPOST", "ONLCR", "OCRNL", "ONOCR", "ONLRET", #ifdef OFILL "OFILL", #endif @@ -4183,7 +4219,11 @@ instruction_open(struct_processus *s_eta "CRTSCTS", #endif "ISIG", "ICANON", "ECHO", "ECHOE", "ECHOK", - "ECHONL", "NOFLSH", "TOSTOP", "IEXTEN", NULL }; + "ECHONL", "NOFLSH", "TOSTOP", "IEXTEN", + + "RAW", + + NULL }; tcflag_t fonctions_constantes[] = { /* c_iflag */ 1, IGNBRK, 1, BRKINT, 1, IGNPAR, 1, PARMRK, @@ -4204,9 +4244,12 @@ instruction_open(struct_processus *s_eta #ifdef CRTSCTS 3, CRTSCTS, #endif - /* c_lfkag */ + /* c_lflag */ 4, ISIG, 4, ICANON, 4, ECHO, 4, ECHOE, 4, ECHOK, - 4, ECHONL, 4, NOFLSH, 4, TOSTOP, 4, IEXTEN }; + 4, ECHONL, 4, NOFLSH, 4, TOSTOP, 4, IEXTEN, + + /* RAW */ + 5, 0 }; unsigned int fonction_courante; // On vient de trouver quelque chose à interpréter. @@ -4256,6 +4299,12 @@ instruction_open(struct_processus *s_eta [(fonction_courante * 2) + 1]; break; } + + case 5: + { + // RAW ne peut être négatif + break; + } } } else @@ -4290,15 +4339,64 @@ instruction_open(struct_processus *s_eta [(fonction_courante * 2) + 1]; break; } + + case 5: + { + // no ignbrk + tc.c_iflag &= ~(tcflag_t) IGNBRK; + // no brkint + tc.c_iflag &= ~(tcflag_t) BRKINT; + // no ignpar + tc.c_iflag &= ~(tcflag_t) IGNPAR; + // no parmrk + tc.c_iflag &= ~(tcflag_t) PARMRK; + // no inpck + tc.c_iflag &= ~(tcflag_t) INPCK; + // no istrip + tc.c_iflag &= ~(tcflag_t) ISTRIP; + // no inlcr + tc.c_iflag &= ~(tcflag_t) INLCR; + // no icrnl + tc.c_iflag &= ~(tcflag_t) ICRNL; + // no ixon + tc.c_iflag &= ~(tcflag_t) IXON; + // no ixoff + tc.c_iflag &= ~(tcflag_t) IXOFF; +#ifdef IXANY + // no ixany + tc.c_iflag &= ~(tcflag_t) IXANY; +#endif + // no opost + tc.c_oflag &= ~(tcflag_t) OPOST; + // no isig + tc.c_lflag &= ~(tcflag_t) ISIG; + // no icanon + tc.c_lflag &= ~(tcflag_t) ICANON; + // no echo + tc.c_lflag &= ~(tcflag_t) ECHO; + // no echoe + tc.c_lflag &= ~(tcflag_t) ECHOE; + // no echok + tc.c_lflag &= ~(tcflag_t) ECHOK; + } } } - break; + // On sort si on a trouvé un paramètre + // correct et donc différent de "NO RAW". + + if (!((negation == d_vrai) && + (fonctions_constantes[fonction_courante * 2] + == 5))) + { + break; + } } } if (fonctions[fonction_courante] == NULL) { + // Paramètre inconnu free(parametre_courant_majuscule); liberation(s_etat_processus, s_objet_argument); liberation(s_etat_processus, s_objet_resultat);