Annotation of rpl/src/instructions_o1.c, revision 1.1

1.1     ! bertrand    1: /*
        !             2: ================================================================================
        !             3:   RPL/2 (R) version 4.0.9
        !             4:   Copyright (C) 1989-2010 Dr. BERTRAND Joël
        !             5: 
        !             6:   This file is part of RPL/2.
        !             7: 
        !             8:   RPL/2 is free software; you can redistribute it and/or modify it
        !             9:   under the terms of the CeCILL V2 License as published by the french
        !            10:   CEA, CNRS and INRIA.
        !            11:  
        !            12:   RPL/2 is distributed in the hope that it will be useful, but WITHOUT
        !            13:   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
        !            14:   FITNESS FOR A PARTICULAR PURPOSE.  See the CeCILL V2 License
        !            15:   for more details.
        !            16:  
        !            17:   You should have received a copy of the CeCILL License
        !            18:   along with RPL/2. If not, write to info@cecill.info.
        !            19: ================================================================================
        !            20: */
        !            21: 
        !            22: 
        !            23: #include "rpl.conv.h"
        !            24: 
        !            25: 
        !            26: /*
        !            27: ================================================================================
        !            28:   Fonction 'oct'
        !            29: ================================================================================
        !            30:   Entrées :
        !            31: --------------------------------------------------------------------------------
        !            32:   Sorties :
        !            33: --------------------------------------------------------------------------------
        !            34:   Effets de bord : néant
        !            35: ================================================================================
        !            36: */
        !            37: 
        !            38: void
        !            39: instruction_oct(struct_processus *s_etat_processus)
        !            40: {
        !            41:    (*s_etat_processus).erreur_execution = d_ex;
        !            42: 
        !            43:    if ((*s_etat_processus).affichage_arguments == 'Y')
        !            44:    {
        !            45:        printf("\n  OCT ");
        !            46: 
        !            47:        if ((*s_etat_processus).langue == 'F')
        !            48:        {
        !            49:            printf("(base octale)\n\n");
        !            50:            printf("  Aucun argument\n");
        !            51:        }
        !            52:        else
        !            53:        {
        !            54:            printf("(octal base)\n\n");
        !            55:            printf("  No argument\n");
        !            56:        }
        !            57: 
        !            58:        return;
        !            59:    }
        !            60:    else if ((*s_etat_processus).test_instruction == 'Y')
        !            61:    {
        !            62:        (*s_etat_processus).nombre_arguments = -1;
        !            63:        return;
        !            64:    }
        !            65: 
        !            66:    if (test_cfsf(s_etat_processus, 31) == d_vrai)
        !            67:    {
        !            68:        if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
        !            69:        {
        !            70:            return;
        !            71:        }
        !            72:    }
        !            73: 
        !            74:    sf(s_etat_processus, 43);
        !            75:    cf(s_etat_processus, 44);
        !            76: 
        !            77:    return;
        !            78: }
        !            79: 
        !            80: 
        !            81: /*
        !            82: ================================================================================
        !            83:   Fonction 'over'
        !            84: ================================================================================
        !            85:   Entrées :
        !            86: --------------------------------------------------------------------------------
        !            87:   Sorties :
        !            88: --------------------------------------------------------------------------------
        !            89:   Effets de bord : néant
        !            90: ================================================================================
        !            91: */
        !            92: 
        !            93: void
        !            94: instruction_over(struct_processus *s_etat_processus)
        !            95: {
        !            96:    struct_objet                        *s_objet;
        !            97: 
        !            98:    (*s_etat_processus).erreur_execution = d_ex;
        !            99: 
        !           100:    if ((*s_etat_processus).affichage_arguments == 'Y')
        !           101:    {
        !           102:        printf("\n  OVER ");
        !           103: 
        !           104:        if ((*s_etat_processus).langue == 'F')
        !           105:        {
        !           106:            printf("(duplication de l'objet de niveau 2)\n\n");
        !           107:        }
        !           108:        else
        !           109:        {
        !           110:            printf("(duplication of level 2 object)\n\n");
        !           111:        }
        !           112: 
        !           113:        printf("    2: %s, %s, %s, %s, %s, %s,\n"
        !           114:                "       %s, %s, %s, %s, %s,\n"
        !           115:                "       %s, %s, %s, %s, %s,\n"
        !           116:                "       %s, %s, %s, %s,\n"
        !           117:                "       %s, %s\n",
        !           118:                d_INT, d_REL, d_CPL, d_VIN, d_VRL, d_VCX, d_MIN, d_MRL, d_MCX,
        !           119:                d_TAB, d_BIN, d_NOM, d_CHN, d_LST, d_ALG, d_RPN, d_FCH, d_SCK,
        !           120:                d_SQL, d_SLB, d_PRC, d_MTX);
        !           121:        printf("    1: %s, %s, %s, %s, %s, %s,\n"
        !           122:                "       %s, %s, %s, %s, %s,\n"
        !           123:                "       %s, %s, %s, %s, %s,\n"
        !           124:                "       %s, %s, %s, %s,\n"
        !           125:                "       %s, %s\n",
        !           126:                d_INT, d_REL, d_CPL, d_VIN, d_VRL, d_VCX, d_MIN, d_MRL, d_MCX,
        !           127:                d_TAB, d_BIN, d_NOM, d_CHN, d_LST, d_ALG, d_RPN, d_FCH, d_SCK,
        !           128:                d_SQL, d_SLB, d_PRC, d_MTX);
        !           129:        printf("->  3: %s, %s, %s, %s, %s, %s,\n"
        !           130:                "       %s, %s, %s, %s, %s,\n"
        !           131:                "       %s, %s, %s, %s, %s,\n"
        !           132:                "       %s, %s, %s, %s,\n"
        !           133:                "       %s, %s\n",
        !           134:                d_INT, d_REL, d_CPL, d_VIN, d_VRL, d_VCX, d_MIN, d_MRL, d_MCX,
        !           135:                d_TAB, d_BIN, d_NOM, d_CHN, d_LST, d_ALG, d_RPN, d_FCH, d_SCK,
        !           136:                d_SQL, d_SLB, d_PRC, d_MTX);
        !           137:        printf("    ...\n");
        !           138:        printf("    1: %s, %s, %s, %s, %s, %s,\n"
        !           139:                "       %s, %s, %s, %s, %s,\n"
        !           140:                "       %s, %s, %s, %s, %s,\n"
        !           141:                "       %s, %s, %s, %s,\n"
        !           142:                "       %s, %s\n",
        !           143:                d_INT, d_REL, d_CPL, d_VIN, d_VRL, d_VCX, d_MIN, d_MRL, d_MCX,
        !           144:                d_TAB, d_BIN, d_NOM, d_CHN, d_LST, d_ALG, d_RPN, d_FCH, d_SCK,
        !           145:                d_SQL, d_SLB, d_PRC, d_MTX);
        !           146: 
        !           147:        return;
        !           148:    }
        !           149:    else if ((*s_etat_processus).test_instruction == 'Y')
        !           150:    {
        !           151:        (*s_etat_processus).nombre_arguments = -1;
        !           152:        return;
        !           153:    }
        !           154: 
        !           155:    if (test_cfsf(s_etat_processus, 31) == d_vrai)
        !           156:    {
        !           157:        if (empilement_pile_last(s_etat_processus, 2) == d_erreur)
        !           158:        {
        !           159:            return;
        !           160:        }
        !           161:    }
        !           162: 
        !           163:    if ((*s_etat_processus).hauteur_pile_operationnelle < 2)
        !           164:    {
        !           165:        (*s_etat_processus).erreur_execution = d_ex_manque_argument;
        !           166:        return;
        !           167:    }
        !           168: 
        !           169:    s_objet = copie_objet(s_etat_processus,
        !           170:            (*(*(*s_etat_processus).l_base_pile).suivant).donnee, 'P');
        !           171: 
        !           172:    if (s_objet == NULL)
        !           173:    {
        !           174:        (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !           175:        return;
        !           176:    }
        !           177: 
        !           178:    if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
        !           179:            s_objet) == d_erreur)
        !           180:    {
        !           181:        (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !           182:        return;
        !           183:    }
        !           184: 
        !           185:    return;
        !           186: }
        !           187: 
        !           188: 
        !           189: /*
        !           190: ================================================================================
        !           191:   Fonction 'or'
        !           192: ================================================================================
        !           193:   Entrées : pointeur sur une structure struct_processus
        !           194: --------------------------------------------------------------------------------
        !           195:   Sorties :
        !           196: --------------------------------------------------------------------------------
        !           197:   Effets de bord : néant
        !           198: ================================================================================
        !           199: */
        !           200: 
        !           201: void
        !           202: instruction_or(struct_processus *s_etat_processus)
        !           203: {
        !           204:    struct_liste_chainee        *l_element_courant;
        !           205:    struct_liste_chainee        *l_element_precedent;
        !           206: 
        !           207:    struct_objet                *s_copie_argument_1;
        !           208:    struct_objet                *s_copie_argument_2;
        !           209:    struct_objet                *s_objet_argument_1;
        !           210:    struct_objet                *s_objet_argument_2;
        !           211:    struct_objet                *s_objet_resultat;
        !           212: 
        !           213:    unsigned long               nombre_elements;
        !           214: 
        !           215:    (*s_etat_processus).erreur_execution = d_ex;
        !           216: 
        !           217:    if ((*s_etat_processus).affichage_arguments == 'Y')
        !           218:    {
        !           219:        printf("\n  OR ");
        !           220: 
        !           221:        if ((*s_etat_processus).langue == 'F')
        !           222:        {
        !           223:            printf("(opérateur ou)\n\n");
        !           224:        }
        !           225:        else
        !           226:        {
        !           227:            printf("(or operator)\n\n");
        !           228:        }
        !           229: 
        !           230:        printf("    2: %s, %s\n", d_INT, d_REL);
        !           231:        printf("    1: %s, %s\n", d_INT, d_REL);
        !           232:        printf("->  1: %s\n\n", d_INT);
        !           233: 
        !           234:        printf("    2: %s\n", d_BIN);
        !           235:        printf("    1: %s\n", d_BIN);
        !           236:        printf("->  1: %s\n\n", d_BIN);
        !           237: 
        !           238:        printf("    2: %s\n", d_NOM);
        !           239:        printf("    1: %s, %s, %s, %s\n", d_NOM, d_ALG, d_INT, d_REL);
        !           240:        printf("->  1: %s\n\n", d_ALG);
        !           241: 
        !           242:        printf("    2: %s, %s, %s, %s\n", d_NOM, d_ALG, d_INT, d_REL);
        !           243:        printf("    1: %s\n", d_NOM);
        !           244:        printf("->  1: %s\n\n", d_ALG);
        !           245: 
        !           246:        printf("    2: %s\n", d_ALG);
        !           247:        printf("    1: %s\n", d_ALG);
        !           248:        printf("->  1: %s\n\n", d_ALG);
        !           249: 
        !           250:        printf("    2: %s\n", d_RPN);
        !           251:        printf("    1: %s\n", d_RPN);
        !           252:        printf("->  1: %s\n", d_RPN);
        !           253: 
        !           254:        return;
        !           255:    }
        !           256:    else if ((*s_etat_processus).test_instruction == 'Y')
        !           257:    {
        !           258:        (*s_etat_processus).nombre_arguments = 0;
        !           259:        return;
        !           260:    }
        !           261:    
        !           262:    if (test_cfsf(s_etat_processus, 31) == d_vrai)
        !           263:    {
        !           264:        if (empilement_pile_last(s_etat_processus, 2) == d_erreur)
        !           265:        {
        !           266:            return;
        !           267:        }
        !           268:    }
        !           269: 
        !           270:    if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
        !           271:            &s_objet_argument_1) == d_erreur)
        !           272:    {
        !           273:        (*s_etat_processus).erreur_execution = d_ex_manque_argument;
        !           274:        return;
        !           275:    }
        !           276: 
        !           277:    if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
        !           278:            &s_objet_argument_2) == d_erreur)
        !           279:    {
        !           280:        liberation(s_etat_processus, s_objet_argument_1);
        !           281: 
        !           282:        (*s_etat_processus).erreur_execution = d_ex_manque_argument;
        !           283:        return;
        !           284:    }
        !           285: 
        !           286: /*
        !           287: --------------------------------------------------------------------------------
        !           288:   OR logique
        !           289: --------------------------------------------------------------------------------
        !           290: */
        !           291: 
        !           292:    if ((((*s_objet_argument_1).type == INT) ||
        !           293:            ((*s_objet_argument_1).type == REL)) &&
        !           294:            (((*s_objet_argument_2).type == INT) ||
        !           295:            ((*s_objet_argument_2).type == REL)))
        !           296:    {
        !           297:        if ((s_objet_resultat = allocation(s_etat_processus, INT)) == NULL)
        !           298:        {
        !           299:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !           300:            return;
        !           301:        }
        !           302: 
        !           303:        if ((*s_objet_argument_1).type == INT)
        !           304:        {
        !           305:            if ((*s_objet_argument_2).type == INT)
        !           306:            {
        !           307:                if (((*((integer8 *) (*s_objet_argument_1).objet)) != 0) ||
        !           308:                        ((*((integer8 *) (*s_objet_argument_2).objet)) != 0))
        !           309:                {
        !           310:                    (*((integer8 *) (*s_objet_resultat).objet)) = -1;
        !           311:                }
        !           312:                else
        !           313:                {
        !           314:                    (*((integer8 *) (*s_objet_resultat).objet)) = 0;
        !           315:                }
        !           316:            }
        !           317:            else
        !           318:            {
        !           319:                if (((*((integer8 *) (*s_objet_argument_1).objet)) != 0) ||
        !           320:                        ((*((real8 *) (*s_objet_argument_2).objet)) != 0))
        !           321:                {
        !           322:                    (*((integer8 *) (*s_objet_resultat).objet)) = -1;
        !           323:                }
        !           324:                else
        !           325:                {
        !           326:                    (*((integer8 *) (*s_objet_resultat).objet)) = 0;
        !           327:                }
        !           328:            }
        !           329:        }
        !           330:        else
        !           331:        {
        !           332:            if ((*s_objet_argument_2).type == INT)
        !           333:            {
        !           334:                if (((*((real8 *) (*s_objet_argument_1).objet)) != 0) ||
        !           335:                        ((*((integer8 *) (*s_objet_argument_2).objet)) != 0))
        !           336:                {
        !           337:                    (*((integer8 *) (*s_objet_resultat).objet)) = -1;
        !           338:                }
        !           339:                else
        !           340:                {
        !           341:                    (*((integer8 *) (*s_objet_resultat).objet)) = 0;
        !           342:                }
        !           343:            }
        !           344:            else
        !           345:            {
        !           346:                if (((*((real8 *) (*s_objet_argument_1).objet)) != 0) ||
        !           347:                        ((*((real8 *) (*s_objet_argument_2).objet)) != 0))
        !           348:                {
        !           349:                    (*((integer8 *) (*s_objet_resultat).objet)) = -1;
        !           350:                }
        !           351:                else
        !           352:                {
        !           353:                    (*((integer8 *) (*s_objet_resultat).objet)) = 0;
        !           354:                }
        !           355:            }
        !           356:        }
        !           357:    }
        !           358: 
        !           359: /*
        !           360: --------------------------------------------------------------------------------
        !           361:   OR binaire
        !           362: --------------------------------------------------------------------------------
        !           363: */
        !           364: 
        !           365:    else if (((*s_objet_argument_1).type == BIN) &&
        !           366:            ((*s_objet_argument_2).type == BIN))
        !           367:    {
        !           368:        if ((s_objet_resultat = allocation(s_etat_processus, BIN)) == NULL)
        !           369:        {
        !           370:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !           371:            return;
        !           372:        }
        !           373: 
        !           374:        (*((logical8 *) (*s_objet_resultat).objet)) = 
        !           375:                (*((logical8 *) (*s_objet_argument_1).objet)) |
        !           376:                (*((logical8 *) (*s_objet_argument_2).objet));
        !           377:    }
        !           378: 
        !           379: /*
        !           380: --------------------------------------------------------------------------------
        !           381:    OR entre des arguments complexes
        !           382: --------------------------------------------------------------------------------
        !           383: */
        !           384: 
        !           385:    /*
        !           386:     * Nom ou valeur numérique / Nom ou valeur numérique
        !           387:     */
        !           388: 
        !           389:    else if ((((*s_objet_argument_1).type == NOM) &&
        !           390:            (((*s_objet_argument_2).type == NOM) ||
        !           391:            ((*s_objet_argument_2).type == INT) ||
        !           392:            ((*s_objet_argument_2).type == REL))) ||
        !           393:            (((*s_objet_argument_2).type == NOM) &&
        !           394:            (((*s_objet_argument_1).type == INT) ||
        !           395:            ((*s_objet_argument_1).type == REL))))
        !           396:    {
        !           397:        if ((s_objet_resultat = allocation(s_etat_processus, ALG)) == NULL)
        !           398:        {
        !           399:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !           400:            return;
        !           401:        }
        !           402: 
        !           403:        if (((*s_objet_resultat).objet =
        !           404:                allocation_maillon(s_etat_processus)) == NULL)
        !           405:        {
        !           406:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !           407:            return;
        !           408:        }
        !           409: 
        !           410:        l_element_courant = (*s_objet_resultat).objet;
        !           411: 
        !           412:        if (((*l_element_courant).donnee = allocation(s_etat_processus, FCT))
        !           413:                == NULL)
        !           414:        {
        !           415:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !           416:            return;
        !           417:        }
        !           418: 
        !           419:        (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
        !           420:                .nombre_arguments = 0;
        !           421:        (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
        !           422:                .fonction = instruction_vers_niveau_superieur;
        !           423: 
        !           424:        if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
        !           425:                .nom_fonction = malloc(3 * sizeof(unsigned char))) == NULL)
        !           426:        {
        !           427:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !           428:            return;
        !           429:        }
        !           430: 
        !           431:        strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
        !           432:                .nom_fonction, "<<");
        !           433: 
        !           434:        if (((*l_element_courant).suivant =
        !           435:                allocation_maillon(s_etat_processus)) == NULL)
        !           436:        {
        !           437:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !           438:            return;
        !           439:        }
        !           440: 
        !           441:        l_element_courant = (*l_element_courant).suivant;
        !           442:        (*l_element_courant).donnee = s_objet_argument_2;
        !           443: 
        !           444:        if (((*l_element_courant).suivant =
        !           445:                allocation_maillon(s_etat_processus)) == NULL)
        !           446:        {
        !           447:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !           448:            return;
        !           449:        }
        !           450: 
        !           451:        l_element_courant = (*l_element_courant).suivant;
        !           452:        (*l_element_courant).donnee = s_objet_argument_1;
        !           453: 
        !           454:        if (((*l_element_courant).suivant =
        !           455:                allocation_maillon(s_etat_processus)) == NULL)
        !           456:        {
        !           457:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !           458:            return;
        !           459:        }
        !           460: 
        !           461:        l_element_courant = (*l_element_courant).suivant;
        !           462: 
        !           463:        if (((*l_element_courant).donnee = allocation(s_etat_processus, FCT))
        !           464:                == NULL)
        !           465:        {
        !           466:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !           467:            return;
        !           468:        }
        !           469: 
        !           470:        (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
        !           471:                .nombre_arguments = 0;
        !           472:        (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
        !           473:                .fonction = instruction_or;
        !           474: 
        !           475:        if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
        !           476:                .nom_fonction = malloc(3 * sizeof(unsigned char))) == NULL)
        !           477:        {
        !           478:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !           479:            return;
        !           480:        }
        !           481: 
        !           482:        strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
        !           483:                .nom_fonction, "OR");
        !           484: 
        !           485:        if (((*l_element_courant).suivant =
        !           486:                allocation_maillon(s_etat_processus)) == NULL)
        !           487:        {
        !           488:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !           489:            return;
        !           490:        }
        !           491: 
        !           492:        l_element_courant = (*l_element_courant).suivant;
        !           493: 
        !           494:        if (((*l_element_courant).donnee = allocation(s_etat_processus, FCT))
        !           495:                == NULL)
        !           496:        {
        !           497:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !           498:            return;
        !           499:        }
        !           500: 
        !           501:        (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
        !           502:                .nombre_arguments = 0;
        !           503:        (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
        !           504:                .fonction = instruction_vers_niveau_inferieur;
        !           505: 
        !           506:        if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
        !           507:                .nom_fonction = malloc(3 * sizeof(unsigned char))) == NULL)
        !           508:        {
        !           509:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !           510:            return;
        !           511:        }
        !           512: 
        !           513:        strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
        !           514:                .nom_fonction, ">>");
        !           515: 
        !           516:        (*l_element_courant).suivant = NULL;
        !           517: 
        !           518:        s_objet_argument_1 = NULL;
        !           519:        s_objet_argument_2 = NULL;
        !           520:    }
        !           521: 
        !           522:    /*
        !           523:     * Nom ou valeur numérique / Expression
        !           524:     */
        !           525: 
        !           526:    else if ((((*s_objet_argument_1).type == ALG) ||
        !           527:            ((*s_objet_argument_1).type == RPN)) &&
        !           528:            (((*s_objet_argument_2).type == NOM) ||
        !           529:            ((*s_objet_argument_2).type == INT) ||
        !           530:            ((*s_objet_argument_2).type == REL)))
        !           531:    {
        !           532:        nombre_elements = 0;
        !           533:        l_element_courant = (struct_liste_chainee *)
        !           534:                (*s_objet_argument_1).objet;
        !           535: 
        !           536:        while(l_element_courant != NULL)
        !           537:        {
        !           538:            nombre_elements++;
        !           539:            l_element_courant = (*l_element_courant).suivant;
        !           540:        }
        !           541: 
        !           542:        if (nombre_elements == 2)
        !           543:        {
        !           544:            liberation(s_etat_processus, s_objet_argument_1);
        !           545:            liberation(s_etat_processus, s_objet_argument_2);
        !           546: 
        !           547:            (*s_etat_processus).erreur_execution = d_ex_argument_invalide;
        !           548:            return;
        !           549:        }
        !           550: 
        !           551:        if ((s_objet_resultat = copie_objet(s_etat_processus,
        !           552:                s_objet_argument_1, 'N')) == NULL)
        !           553:        {
        !           554:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !           555:            return;
        !           556:        }
        !           557: 
        !           558:        l_element_courant = (struct_liste_chainee *)
        !           559:                (*s_objet_resultat).objet;
        !           560:        l_element_precedent = l_element_courant;
        !           561:        l_element_courant = (*l_element_courant).suivant;
        !           562: 
        !           563:        if (((*l_element_precedent).suivant =
        !           564:                allocation_maillon(s_etat_processus)) == NULL)
        !           565:        {
        !           566:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !           567:            return;
        !           568:        }
        !           569: 
        !           570:        (*(*l_element_precedent).suivant).donnee = s_objet_argument_2;
        !           571:        (*(*l_element_precedent).suivant).suivant = l_element_courant;
        !           572: 
        !           573:        while((*l_element_courant).suivant != NULL)
        !           574:        {
        !           575:            l_element_precedent = l_element_courant;
        !           576:            l_element_courant = (*l_element_courant).suivant;
        !           577:        }
        !           578: 
        !           579:        if (((*l_element_precedent).suivant =
        !           580:                allocation_maillon(s_etat_processus)) == NULL)
        !           581:        {
        !           582:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !           583:            return;
        !           584:        }
        !           585: 
        !           586:        if (((*(*l_element_precedent).suivant).donnee =
        !           587:                allocation(s_etat_processus, FCT)) == NULL)
        !           588:        {
        !           589:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !           590:            return;
        !           591:        }
        !           592: 
        !           593:        (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
        !           594:                .donnee).objet)).nombre_arguments = 0;
        !           595:        (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
        !           596:                .donnee).objet)).fonction = instruction_or;
        !           597: 
        !           598:        if (((*((struct_fonction *) (*(*(*l_element_precedent)
        !           599:                .suivant).donnee).objet)).nom_fonction =
        !           600:                malloc(3 * sizeof(unsigned char))) == NULL)
        !           601:        {
        !           602:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !           603:            return;
        !           604:        }
        !           605: 
        !           606:        strcpy((*((struct_fonction *) (*(*(*l_element_precedent)
        !           607:                .suivant).donnee).objet)).nom_fonction, "OR");
        !           608: 
        !           609:        (*(*l_element_precedent).suivant).suivant = l_element_courant;
        !           610: 
        !           611:        s_objet_argument_2 = NULL;
        !           612:    }
        !           613: 
        !           614:    /*
        !           615:     * Expression / Nom ou valeur numérique
        !           616:     */
        !           617: 
        !           618:    else if ((((*s_objet_argument_1).type == NOM) ||
        !           619:            ((*s_objet_argument_1).type == INT) ||
        !           620:            ((*s_objet_argument_1).type == REL)) &&
        !           621:            (((*s_objet_argument_2).type == ALG) ||
        !           622:            ((*s_objet_argument_2).type == RPN)))
        !           623:    {
        !           624:        nombre_elements = 0;
        !           625:        l_element_courant = (struct_liste_chainee *)
        !           626:                (*s_objet_argument_2).objet;
        !           627: 
        !           628:        while(l_element_courant != NULL)
        !           629:        {
        !           630:            nombre_elements++;
        !           631:            l_element_courant = (*l_element_courant).suivant;
        !           632:        }
        !           633: 
        !           634:        if (nombre_elements == 2)
        !           635:        {
        !           636:            liberation(s_etat_processus, s_objet_argument_1);
        !           637:            liberation(s_etat_processus, s_objet_argument_2);
        !           638: 
        !           639:            (*s_etat_processus).erreur_execution = d_ex_argument_invalide;
        !           640:            return;
        !           641:        }
        !           642: 
        !           643:        if ((s_objet_resultat = copie_objet(s_etat_processus,
        !           644:                s_objet_argument_2, 'N')) == NULL)
        !           645:        {
        !           646:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !           647:            return;
        !           648:        }
        !           649: 
        !           650:        l_element_courant = (struct_liste_chainee *)
        !           651:                (*s_objet_resultat).objet;
        !           652:        l_element_precedent = l_element_courant;
        !           653: 
        !           654:        while((*l_element_courant).suivant != NULL)
        !           655:        {
        !           656:            l_element_precedent = l_element_courant;
        !           657:            l_element_courant = (*l_element_courant).suivant;
        !           658:        }
        !           659: 
        !           660:        if (((*l_element_precedent).suivant =
        !           661:                allocation_maillon(s_etat_processus)) == NULL)
        !           662:        {
        !           663:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !           664:            return;
        !           665:        }
        !           666: 
        !           667:        (*(*l_element_precedent).suivant).donnee = s_objet_argument_1;
        !           668:        l_element_precedent = (*l_element_precedent).suivant;
        !           669: 
        !           670:        if (((*l_element_precedent).suivant =
        !           671:                allocation_maillon(s_etat_processus)) == NULL)
        !           672:        {
        !           673:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !           674:            return;
        !           675:        }
        !           676: 
        !           677:        if (((*(*l_element_precedent).suivant).donnee =
        !           678:                allocation(s_etat_processus, FCT)) == NULL)
        !           679:        {
        !           680:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !           681:            return;
        !           682:        }
        !           683: 
        !           684:        (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
        !           685:                .donnee).objet)).nombre_arguments = 0;
        !           686:        (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
        !           687:                .donnee).objet)).fonction = instruction_or;
        !           688: 
        !           689:        if (((*((struct_fonction *) (*(*(*l_element_precedent)
        !           690:                .suivant).donnee).objet)).nom_fonction =
        !           691:                malloc(3 * sizeof(unsigned char))) == NULL)
        !           692:        {
        !           693:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !           694:            return;
        !           695:        }
        !           696: 
        !           697:        strcpy((*((struct_fonction *) (*(*(*l_element_precedent)
        !           698:                .suivant).donnee).objet)).nom_fonction, "OR");
        !           699: 
        !           700:        (*(*l_element_precedent).suivant).suivant = l_element_courant;
        !           701: 
        !           702:        s_objet_argument_1 = NULL;
        !           703:    }
        !           704: 
        !           705:    /*
        !           706:     * Expression / Expression
        !           707:     */
        !           708: 
        !           709:    else if ((((*s_objet_argument_1).type == ALG) &&
        !           710:            ((*s_objet_argument_2).type == ALG)) ||
        !           711:            (((*s_objet_argument_1).type == RPN) &&
        !           712:            ((*s_objet_argument_2).type == RPN)))
        !           713:    {
        !           714:        nombre_elements = 0;
        !           715:        l_element_courant = (struct_liste_chainee *)
        !           716:                (*s_objet_argument_1).objet;
        !           717: 
        !           718:        while(l_element_courant != NULL)
        !           719:        {
        !           720:            nombre_elements++;
        !           721:            l_element_courant = (*l_element_courant).suivant;
        !           722:        }
        !           723: 
        !           724:        if (nombre_elements == 2)
        !           725:        {
        !           726:            liberation(s_etat_processus, s_objet_argument_1);
        !           727:            liberation(s_etat_processus, s_objet_argument_2);
        !           728: 
        !           729:            (*s_etat_processus).erreur_execution = d_ex_argument_invalide;
        !           730:            return;
        !           731:        }
        !           732: 
        !           733:        nombre_elements = 0;
        !           734:        l_element_courant = (struct_liste_chainee *)
        !           735:                (*s_objet_argument_2).objet;
        !           736: 
        !           737:        while(l_element_courant != NULL)
        !           738:        {
        !           739:            nombre_elements++;
        !           740:            l_element_courant = (*l_element_courant).suivant;
        !           741:        }
        !           742: 
        !           743:        if (nombre_elements == 2)
        !           744:        {
        !           745:            liberation(s_etat_processus, s_objet_argument_1);
        !           746:            liberation(s_etat_processus, s_objet_argument_2);
        !           747: 
        !           748:            (*s_etat_processus).erreur_execution = d_ex_argument_invalide;
        !           749:            return;
        !           750:        }
        !           751: 
        !           752:        if ((s_copie_argument_1 = copie_objet(s_etat_processus,
        !           753:                s_objet_argument_1, 'N')) == NULL)
        !           754:        {
        !           755:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !           756:            return;
        !           757:        }
        !           758: 
        !           759:        if ((s_copie_argument_2 = copie_objet(s_etat_processus,
        !           760:                s_objet_argument_2, 'N')) == NULL)
        !           761:        {
        !           762:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !           763:            return;
        !           764:        }
        !           765: 
        !           766:        l_element_courant = (struct_liste_chainee *)
        !           767:                (*s_copie_argument_1).objet;
        !           768:        (*s_copie_argument_1).objet = (void *) (*((struct_liste_chainee *)
        !           769:                (*s_copie_argument_1).objet)).suivant;
        !           770: 
        !           771:        liberation(s_etat_processus, (*l_element_courant).donnee);
        !           772:        free(l_element_courant);
        !           773: 
        !           774:        l_element_courant = (struct_liste_chainee *)
        !           775:                (*s_copie_argument_2).objet;
        !           776:        l_element_precedent = l_element_courant;
        !           777:        s_objet_resultat = s_copie_argument_2;
        !           778: 
        !           779:        while((*l_element_courant).suivant != NULL)
        !           780:        {
        !           781:            l_element_precedent = l_element_courant;
        !           782:            l_element_courant = (*l_element_courant).suivant;
        !           783:        }
        !           784: 
        !           785:        liberation(s_etat_processus, (*l_element_courant).donnee);
        !           786:        free(l_element_courant);
        !           787: 
        !           788:        (*l_element_precedent).suivant = (struct_liste_chainee *)
        !           789:                (*s_copie_argument_1).objet;
        !           790:        free(s_copie_argument_1);
        !           791: 
        !           792:        l_element_courant = (*l_element_precedent).suivant;
        !           793:        while((*l_element_courant).suivant != NULL)
        !           794:        {
        !           795:            l_element_precedent = l_element_courant;
        !           796:            l_element_courant = (*l_element_courant).suivant;
        !           797:        }
        !           798: 
        !           799:        if (((*l_element_precedent).suivant =
        !           800:                allocation_maillon(s_etat_processus)) == NULL)
        !           801:        {
        !           802:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !           803:            return;
        !           804:        }
        !           805: 
        !           806:        (*(*l_element_precedent).suivant).suivant = l_element_courant;
        !           807:        l_element_courant = (*l_element_precedent).suivant;
        !           808: 
        !           809:        if (((*l_element_courant).donnee = allocation(s_etat_processus, FCT))
        !           810:                == NULL)
        !           811:        {
        !           812:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !           813:            return;
        !           814:        }
        !           815: 
        !           816:        (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
        !           817:                .nombre_arguments = 0;
        !           818:        (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
        !           819:                .fonction = instruction_or;
        !           820: 
        !           821:        if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
        !           822:                .nom_fonction = malloc(3 * sizeof(unsigned char))) == NULL)
        !           823:        {
        !           824:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !           825:            return;
        !           826:        }
        !           827: 
        !           828:        strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
        !           829:                .nom_fonction, "OR");
        !           830:    }
        !           831: 
        !           832: /*
        !           833: --------------------------------------------------------------------------------
        !           834:   OR impossible
        !           835: --------------------------------------------------------------------------------
        !           836: */
        !           837: 
        !           838:    else
        !           839:    {
        !           840:        liberation(s_etat_processus, s_objet_argument_1);
        !           841:        liberation(s_etat_processus, s_objet_argument_2);
        !           842: 
        !           843:        (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
        !           844:        return;
        !           845:    }
        !           846: 
        !           847:    liberation(s_etat_processus, s_objet_argument_1);
        !           848:    liberation(s_etat_processus, s_objet_argument_2);
        !           849: 
        !           850:    if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
        !           851:            s_objet_resultat) == d_erreur)
        !           852:    {
        !           853:        return;
        !           854:    }
        !           855: 
        !           856:    return;
        !           857: }
        !           858: 
        !           859: 
        !           860: /*
        !           861: ================================================================================
        !           862:   Fonction 'open'
        !           863: ================================================================================
        !           864:   Entrées : pointeur sur une structure struct_processus
        !           865: --------------------------------------------------------------------------------
        !           866:   Sorties :
        !           867: --------------------------------------------------------------------------------
        !           868:   Effets de bord : néant
        !           869: ================================================================================
        !           870: */
        !           871: 
        !           872: void
        !           873: instruction_open(struct_processus *s_etat_processus)
        !           874: {
        !           875:    /*
        !           876:     * Type d'ouverture :
        !           877:     *   NEW     : crée un nouveau fichier, retourne une erreur si un fichier
        !           878:     *             préexiste ;
        !           879:     *   OLD     : ouvre un fichier existant, retourne une erreur si le fichier
        !           880:     *             n'existe pas ;
        !           881:     *   REPLACE : remplace un fichier existant, retourne une erreur s'il n'y
        !           882:     *             a aucun fichier à effacer ;
        !           883:     *   UNKNOWN : ouvre un fichier existant ou crée un nouveau fichier ;
        !           884:     *   SCRATCH : crée un fichier temporaire automatiquement effacé lors
        !           885:     *             de sa fermeture (protection automatique 'readwrite');
        !           886:     *
        !           887:     * Type d'accès :
        !           888:     *   SEQUENTIAL : accès séquentiel ;
        !           889:     *   DIRECT     : accès direct ;
        !           890:     *   KEYED      : accès indexé.
        !           891:     *
        !           892:     * Protection :
        !           893:     *   READONLY  : lecture seule ;
        !           894:     *   WRITEONLY : écriture seule ;
        !           895:     *   READWRITE : lecture et écriture autorisées.
        !           896:     *
        !           897:     * Format :
        !           898:     *   FORMATTED   : fichier texte ;
        !           899:     *   UNFORMATTED : fichier binaire.
        !           900:     */
        !           901: 
        !           902:    file                        *descripteur;
        !           903: 
        !           904:    int                         buffer_emission;
        !           905:    int                         buffer_reception;
        !           906:    int                         drapeau;
        !           907:    int                         priorite;
        !           908:    int                         protocole_numerique;
        !           909:    int                         timeout_emission;
        !           910:    int                         timeout_reception;
        !           911:    int                         type;
        !           912: 
        !           913:    integer8                    adresse[16];
        !           914:    integer8                    nombre_maximal_connexions;
        !           915:    integer8                    port;
        !           916:    integer8                    position_clef;
        !           917: 
        !           918:    logical1                    autorisation_liberation_nom;
        !           919:    logical1                    erreur;
        !           920:    logical1                    existence;
        !           921:    logical1                    ouverture;
        !           922:    logical1                    presence_port;
        !           923: 
        !           924:    struct_liste_chainee        *l_element_courant;
        !           925:    struct_liste_chainee        *l_element_courant_sous_objet;
        !           926: 
        !           927:    struct flock                lock;
        !           928: 
        !           929:    struct addrinfo             *resolution;
        !           930:    struct addrinfo             *resolution_courante;
        !           931: 
        !           932:    struct protoent             *s_protocole;
        !           933: 
        !           934:    struct sockaddr_un          socket_unix;
        !           935:    struct sockaddr_in          socket_ipv4;
        !           936:    struct sockaddr_in6         socket_ipv6;
        !           937: 
        !           938:    struct_objet                *s_objet_argument;
        !           939:    struct_objet                *s_objet_resultat;
        !           940: 
        !           941:    uint32_t                    adresse_ipv4;
        !           942: 
        !           943:    unsigned char               *argument_majuscule;
        !           944:    unsigned char               *chaine_descripteurs;
        !           945:    unsigned char               format;
        !           946:    unsigned char               *hote;
        !           947:    unsigned char               *nom;
        !           948:    unsigned char               *nom_temporaire;
        !           949:    unsigned char               options[12];
        !           950:    unsigned char               *peripherique;
        !           951:    unsigned char               *pointeur;
        !           952:    unsigned char               protection;
        !           953:    unsigned char               protocole[16 + 1];
        !           954:    unsigned char               *protocole_socket;
        !           955:    unsigned char               type_acces;
        !           956:    unsigned char               type_adresse;
        !           957:    unsigned char               type_arguments;
        !           958:    unsigned char               type_domaine;
        !           959:    unsigned char               type_ouverture;
        !           960:    unsigned char               type_socket;
        !           961: 
        !           962:    unsigned long               i;
        !           963:    unsigned long               nombre_elements;
        !           964:    unsigned long               prochain_descripteur;
        !           965:    unsigned long               unite;
        !           966: 
        !           967: #  define                      d_BIND_TO_DEVICE        0
        !           968: #  define                      d_BROADCAST             1
        !           969: #  define                      d_DONT_ROUTE            2
        !           970: #  define                      d_KEEP_ALIVE            3
        !           971: #  define                      d_PRIORITY              4
        !           972: #  define                      d_RECEIVE_BUFFER        5
        !           973: #  define                      d_FORCE_RECEIVE_BUFFER  6
        !           974: #  define                      d_SEND_BUFFER           7
        !           975: #  define                      d_FORCE_SEND_BUFFER     8
        !           976: #  define                      d_RECEIVING_TIMEOUT     9
        !           977: #  define                      d_SENDING_TIMEOUT       10
        !           978: #  define                      d_REUSE_ADDRESS         11
        !           979: 
        !           980:    /*
        !           981:     * Argument : { "ouverture" "accès" "format" [ { "nom" } 'protection' ] }
        !           982:     */
        !           983: 
        !           984:    (*s_etat_processus).erreur_execution = d_ex;
        !           985: 
        !           986:    if ((*s_etat_processus).affichage_arguments == 'Y')
        !           987:    {
        !           988:        printf("\n  OPEN ");
        !           989: 
        !           990:        if ((*s_etat_processus).langue == 'F')
        !           991:        {
        !           992:            printf("(ouverture d'un fichier, d'une socket ou d'un sémaphore)"
        !           993:                    "\n\n");
        !           994:        }
        !           995:        else
        !           996:        {
        !           997:            printf("(open file, socket or semaphore)\n\n");
        !           998:        }
        !           999: 
        !          1000:        printf("    1: %s\n", d_LST);
        !          1001:        printf("->  1: %s, %s\n\n", d_FCH, d_SCK);
        !          1002: 
        !          1003:        printf("    1: %s\n", d_CHN);
        !          1004:        printf("->  1: %s\n\n", d_SPH);
        !          1005: 
        !          1006:        if ((*s_etat_processus).langue == 'F')
        !          1007:        {
        !          1008:            printf("  Utilisation :\n\n");
        !          1009:        }
        !          1010:        else
        !          1011:        {
        !          1012:            printf("  Usage:\n\n");
        !          1013:        }
        !          1014: 
        !          1015:        printf("    { \"filetype\" \"access\" \"format\" { \"name\" "
        !          1016:                "\"file name\" } \"protection\" } OPEN\n");
        !          1017:        printf("    { \"sockettype\" { \"name\" \"local name\" } } OPEN\n");
        !          1018:        printf("    { \"sockettype\" \"socketdomain\" \"protection\" } OPEN\n");
        !          1019: 
        !          1020:        printf("    File type       : NEW/OLD/REPLACE/UNKNOWN/SCRATCH\n");
        !          1021:        printf("    File access     : SEQUENTIAL/DIRECT/KEYED\n");
        !          1022:        printf("    Socket type     : STREAM/DATAGRAM/RAW/"
        !          1023:                "ROBUST DATAGRAM/SEQUENTIAL DATAGRAM\n");
        !          1024:        printf("    Socket domain   : LOCAL/FOREIGN\n");
        !          1025:        printf("    Socket protocol : IPV4/IPV6/UNIX\n");
        !          1026:        printf("    Format          : FORMATTED/UNFORMATTED/FLOW\n");
        !          1027:        printf("    Protection      : READONLY/WRITEONLY/READWRITE\n\n");
        !          1028: 
        !          1029:        printf("    Address         : { \"ADDRESS\" [ 127 0 0 1 ] }\n");
        !          1030:        printf("                      { \"HOST\" \"hostname\" }\n");
        !          1031:        printf("    Connections     : { \"LISTEN\" amount of connections }\n");
        !          1032:        printf("    Name            : { \"NAME\" \"filename\" }\n");
        !          1033:        printf("    Options         : { \"OPTION\" \"option\" argument }\n");
        !          1034:        printf("                      \"BIND TO DEVICE\" \"device\"\n");
        !          1035:        printf("                      \"BROADCAST\"\n");
        !          1036:        printf("                      \"DO NOT ROUTE\"\n");
        !          1037:        printf("                      \"KEEP ALIVE\"\n");
        !          1038:        printf("                      \"PRIORITY\" integer\n");
        !          1039:        printf("                      \"RECEIVE BUFFER\" integer\n");
        !          1040:        printf("                      \"FORCE RECEIVE BUFFER\" integer\n");
        !          1041:        printf("                      \"SEND BUFFER\" integer\n");
        !          1042:        printf("                      \"FORCE SEND BUFFER\" integer\n");
        !          1043:        printf("                      \"RECEIVING TIMEOUT\" integer\n");
        !          1044:        printf("                      \"SENDING TIMEOUT\" integer\n");
        !          1045:        printf("                      \"REUSE ADDRESS\"\n");
        !          1046:        printf("    Port            : { \"PORT\" port number }\n");
        !          1047:        printf("    Protocol        : { \"PROTOCOL\" \"protocol\" }\n\n");
        !          1048: 
        !          1049:        printf("    { { \"NAME\" \"filename\" } } OPEN\n");
        !          1050:        printf("    { \"SCRATCH\" } OPEN\n");
        !          1051:        printf("    { { \"NAME\" \"filename\" } \"UNKNOWN\" \"FORMATTED\" "
        !          1052:                "\"DIRECT\" } OPEN\n");
        !          1053:        printf("    { { \"NAME\" \"filename\" } \"OLD\" \"FORMATTED\" "
        !          1054:                "\"KEYED\" { \"KEY\" 2 } } OPEN\n");
        !          1055:        printf("    { \"STREAM\" \"READWRITE\" } OPEN\n");
        !          1056:        printf("    { \"FOREIGN\" \"DATAGRAM\" } OPEN\n");
        !          1057:        printf("    { \"LOCAL\" { \"NAME\" \"socket.sock\" } } OPEN\n");
        !          1058: 
        !          1059:        return;
        !          1060:    }
        !          1061:    else if ((*s_etat_processus).test_instruction == 'Y')
        !          1062:    {
        !          1063:        (*s_etat_processus).nombre_arguments = -1;
        !          1064:        return;
        !          1065:    }
        !          1066: 
        !          1067:    if (test_cfsf(s_etat_processus, 31) == d_vrai)
        !          1068:    {
        !          1069:        if (empilement_pile_last(s_etat_processus, 1) == d_erreur)
        !          1070:        {
        !          1071:            return;
        !          1072:        }
        !          1073:    }
        !          1074: 
        !          1075:    if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
        !          1076:            &s_objet_argument) == d_erreur)
        !          1077:    {
        !          1078:        (*s_etat_processus).erreur_execution = d_ex_manque_argument;
        !          1079:        return;
        !          1080:    }
        !          1081: 
        !          1082:    if ((*s_objet_argument).type == LST)
        !          1083:    {
        !          1084:        l_element_courant = (struct_liste_chainee *) (*s_objet_argument).objet;
        !          1085: 
        !          1086:        if (l_element_courant == NULL)
        !          1087:        {
        !          1088:            liberation(s_etat_processus, s_objet_argument);
        !          1089: 
        !          1090:            (*s_etat_processus).erreur_execution =
        !          1091:                    d_ex_erreur_parametre_fichier;
        !          1092:            return;
        !          1093:        }
        !          1094: 
        !          1095:        format = ' ';
        !          1096:        type_domaine = ' ';
        !          1097:        type_ouverture = ' ';
        !          1098:        protection = ' ';
        !          1099:        type_acces = ' ';
        !          1100:        type_socket = ' ';
        !          1101:        nom = NULL;
        !          1102:        position_clef = 0;
        !          1103:        port = 0;
        !          1104:        type_arguments = ' ';
        !          1105:        nombre_maximal_connexions = 0;
        !          1106:        hote = NULL;
        !          1107:        type_adresse = ' ';
        !          1108:        protocole[0] = d_code_fin_chaine;
        !          1109:        protocole_socket = NULL;
        !          1110:        presence_port = d_faux;
        !          1111:        peripherique = NULL;
        !          1112:        priorite = 0;
        !          1113:        buffer_emission = 0;
        !          1114:        buffer_reception = 0;
        !          1115:        timeout_emission = 0;
        !          1116:        timeout_reception = 0;
        !          1117:        drapeau = -1;
        !          1118: 
        !          1119:        for(i = 0; i < 12; options[i++] = 'N');
        !          1120: 
        !          1121:        while(l_element_courant != NULL)
        !          1122:        {
        !          1123:            if ((*(*l_element_courant).donnee).type == CHN)
        !          1124:            {
        !          1125:                if ((argument_majuscule = conversion_majuscule((unsigned char *)
        !          1126:                        (*(*l_element_courant).donnee).objet)) == NULL)
        !          1127:                {
        !          1128:                    (*s_etat_processus).erreur_systeme =
        !          1129:                            d_es_allocation_memoire;
        !          1130:                    return;
        !          1131:                }
        !          1132: 
        !          1133:                if (strcmp(argument_majuscule, "NEW") == 0)
        !          1134:                {
        !          1135:                    if (type_ouverture != ' ')
        !          1136:                    {
        !          1137:                        liberation(s_etat_processus, s_objet_argument);
        !          1138:                        free(argument_majuscule);
        !          1139: 
        !          1140:                        (*s_etat_processus).erreur_execution =
        !          1141:                                d_ex_erreur_parametre_fichier;
        !          1142:                        return;
        !          1143:                    }
        !          1144: 
        !          1145:                    if (type_arguments == ' ')
        !          1146:                    {
        !          1147:                        type_arguments = 'F';
        !          1148:                    }
        !          1149:                    else if (type_arguments == 'S')
        !          1150:                    {
        !          1151:                        liberation(s_etat_processus, s_objet_argument);
        !          1152:                        free(argument_majuscule);
        !          1153: 
        !          1154:                        (*s_etat_processus).erreur_execution =
        !          1155:                                d_ex_erreur_parametre_fichier;
        !          1156:                        return;
        !          1157:                    }
        !          1158: 
        !          1159:                    type_ouverture = 'N';
        !          1160:                }
        !          1161:                else if (strcmp(argument_majuscule, "REPLACE") == 0)
        !          1162:                {
        !          1163:                    if (type_ouverture != ' ')
        !          1164:                    {
        !          1165:                        liberation(s_etat_processus, s_objet_argument);
        !          1166:                        free(argument_majuscule);
        !          1167: 
        !          1168:                        (*s_etat_processus).erreur_execution =
        !          1169:                                d_ex_erreur_parametre_fichier;
        !          1170:                        return;
        !          1171:                    }
        !          1172: 
        !          1173:                    if (type_arguments == ' ')
        !          1174:                    {
        !          1175:                        type_arguments = 'F';
        !          1176:                    }
        !          1177:                    else if (type_arguments == 'S')
        !          1178:                    {
        !          1179:                        liberation(s_etat_processus, s_objet_argument);
        !          1180:                        free(argument_majuscule);
        !          1181: 
        !          1182:                        (*s_etat_processus).erreur_execution =
        !          1183:                                d_ex_erreur_parametre_fichier;
        !          1184:                        return;
        !          1185:                    }
        !          1186: 
        !          1187:                    type_ouverture = 'R';
        !          1188:                }
        !          1189:                else if (strcmp(argument_majuscule, "UNKNOWN") == 0)
        !          1190:                {
        !          1191:                    if (type_ouverture != ' ')
        !          1192:                    {
        !          1193:                        liberation(s_etat_processus, s_objet_argument);
        !          1194:                        free(argument_majuscule);
        !          1195: 
        !          1196:                        (*s_etat_processus).erreur_execution =
        !          1197:                                d_ex_erreur_parametre_fichier;
        !          1198:                        return;
        !          1199:                    }
        !          1200: 
        !          1201:                    if (type_arguments == ' ')
        !          1202:                    {
        !          1203:                        type_arguments = 'F';
        !          1204:                    }
        !          1205:                    else if (type_arguments == 'S')
        !          1206:                    {
        !          1207:                        liberation(s_etat_processus, s_objet_argument);
        !          1208:                        free(argument_majuscule);
        !          1209: 
        !          1210:                        (*s_etat_processus).erreur_execution =
        !          1211:                                d_ex_erreur_parametre_fichier;
        !          1212:                        return;
        !          1213:                    }
        !          1214: 
        !          1215:                    type_ouverture = 'U';
        !          1216:                }
        !          1217:                else if (strcmp(argument_majuscule, "SCRATCH") == 0)
        !          1218:                {
        !          1219:                    if (type_ouverture != ' ')
        !          1220:                    {
        !          1221:                        liberation(s_etat_processus, s_objet_argument);
        !          1222:                        free(argument_majuscule);
        !          1223: 
        !          1224:                        (*s_etat_processus).erreur_execution =
        !          1225:                                d_ex_erreur_parametre_fichier;
        !          1226:                        return;
        !          1227:                    }
        !          1228: 
        !          1229:                    if (type_arguments == ' ')
        !          1230:                    {
        !          1231:                        type_arguments = 'F';
        !          1232:                    }
        !          1233:                    else if (type_arguments == 'S')
        !          1234:                    {
        !          1235:                        liberation(s_etat_processus, s_objet_argument);
        !          1236:                        free(argument_majuscule);
        !          1237: 
        !          1238:                        (*s_etat_processus).erreur_execution =
        !          1239:                                d_ex_erreur_parametre_fichier;
        !          1240:                        return;
        !          1241:                    }
        !          1242: 
        !          1243:                    type_ouverture = 'S';
        !          1244:                }
        !          1245:                else if (strcmp(argument_majuscule, "SEQUENTIAL") == 0)
        !          1246:                {
        !          1247:                    if (type_acces != ' ')
        !          1248:                    {
        !          1249:                        liberation(s_etat_processus, s_objet_argument);
        !          1250:                        free(argument_majuscule);
        !          1251: 
        !          1252:                        (*s_etat_processus).erreur_execution =
        !          1253:                                d_ex_erreur_parametre_fichier;
        !          1254:                        return;
        !          1255:                    }
        !          1256: 
        !          1257:                    if (type_arguments == ' ')
        !          1258:                    {
        !          1259:                        type_arguments = 'F';
        !          1260:                    }
        !          1261:                    else if (type_arguments == 'S')
        !          1262:                    {
        !          1263:                        liberation(s_etat_processus, s_objet_argument);
        !          1264:                        free(argument_majuscule);
        !          1265: 
        !          1266:                        (*s_etat_processus).erreur_execution =
        !          1267:                                d_ex_erreur_parametre_fichier;
        !          1268:                        return;
        !          1269:                    }
        !          1270: 
        !          1271:                    type_acces = 'S';
        !          1272:                }
        !          1273:                else if (strcmp(argument_majuscule, "DIRECT") == 0)
        !          1274:                {
        !          1275:                    if (type_acces != ' ')
        !          1276:                    {
        !          1277:                        liberation(s_etat_processus, s_objet_argument);
        !          1278:                        free(argument_majuscule);
        !          1279: 
        !          1280:                        (*s_etat_processus).erreur_execution =
        !          1281:                                d_ex_erreur_parametre_fichier;
        !          1282:                        return;
        !          1283:                    }
        !          1284: 
        !          1285:                    if (type_arguments == ' ')
        !          1286:                    {
        !          1287:                        type_arguments = 'F';
        !          1288:                    }
        !          1289:                    else if (type_arguments == 'S')
        !          1290:                    {
        !          1291:                        liberation(s_etat_processus, s_objet_argument);
        !          1292:                        free(argument_majuscule);
        !          1293: 
        !          1294:                        (*s_etat_processus).erreur_execution =
        !          1295:                                d_ex_erreur_parametre_fichier;
        !          1296:                        return;
        !          1297:                    }
        !          1298: 
        !          1299:                    type_acces = 'D';
        !          1300:                }
        !          1301:                else if (strcmp(argument_majuscule, "KEYED") == 0)
        !          1302:                {
        !          1303:                    if (type_acces != ' ')
        !          1304:                    {
        !          1305:                        liberation(s_etat_processus, s_objet_argument);
        !          1306:                        free(argument_majuscule);
        !          1307: 
        !          1308:                        (*s_etat_processus).erreur_execution =
        !          1309:                                d_ex_erreur_parametre_fichier;
        !          1310:                        return;
        !          1311:                    }
        !          1312: 
        !          1313:                    if (type_arguments == ' ')
        !          1314:                    {
        !          1315:                        type_arguments = 'F';
        !          1316:                    }
        !          1317:                    else if (type_arguments == 'S')
        !          1318:                    {
        !          1319:                        liberation(s_etat_processus, s_objet_argument);
        !          1320:                        free(argument_majuscule);
        !          1321: 
        !          1322:                        (*s_etat_processus).erreur_execution =
        !          1323:                                d_ex_erreur_parametre_fichier;
        !          1324:                        return;
        !          1325:                    }
        !          1326: 
        !          1327:                    type_acces = 'I';
        !          1328:                }
        !          1329:                else if (strcmp(argument_majuscule, "READONLY") == 0)
        !          1330:                {
        !          1331:                    if (protection != ' ')
        !          1332:                    {
        !          1333:                        liberation(s_etat_processus, s_objet_argument);
        !          1334:                        free(argument_majuscule);
        !          1335: 
        !          1336:                        (*s_etat_processus).erreur_execution =
        !          1337:                                d_ex_erreur_parametre_fichier;
        !          1338:                        return;
        !          1339:                    }
        !          1340: 
        !          1341:                    protection = 'R';
        !          1342:                }
        !          1343:                else if (strcmp(argument_majuscule, "WRITEONLY") == 0)
        !          1344:                {
        !          1345:                    if (protection != ' ')
        !          1346:                    {
        !          1347:                        liberation(s_etat_processus, s_objet_argument);
        !          1348:                        free(argument_majuscule);
        !          1349: 
        !          1350:                        (*s_etat_processus).erreur_execution =
        !          1351:                                d_ex_erreur_parametre_fichier;
        !          1352:                        return;
        !          1353:                    }
        !          1354: 
        !          1355:                    protection = 'W';
        !          1356:                }
        !          1357:                else if (strcmp(argument_majuscule, "READWRITE") == 0)
        !          1358:                {
        !          1359:                    if (protection != ' ')
        !          1360:                    {
        !          1361:                        liberation(s_etat_processus, s_objet_argument);
        !          1362:                        free(argument_majuscule);
        !          1363: 
        !          1364:                        (*s_etat_processus).erreur_execution =
        !          1365:                                d_ex_erreur_parametre_fichier;
        !          1366:                        return;
        !          1367:                    }
        !          1368: 
        !          1369:                    protection = 'N';
        !          1370:                }
        !          1371:                else if (strcmp(argument_majuscule, "FORMATTED") == 0)
        !          1372:                {
        !          1373:                    if (format != ' ')
        !          1374:                    {
        !          1375:                        liberation(s_etat_processus, s_objet_argument);
        !          1376:                        free(argument_majuscule);
        !          1377: 
        !          1378:                        (*s_etat_processus).erreur_execution =
        !          1379:                                d_ex_erreur_parametre_fichier;
        !          1380:                        return;
        !          1381:                    }
        !          1382: 
        !          1383:                    format = 'N';
        !          1384:                }
        !          1385:                else if (strcmp(argument_majuscule, "UNFORMATTED") == 0)
        !          1386:                {
        !          1387:                    if (format != ' ')
        !          1388:                    {
        !          1389:                        liberation(s_etat_processus, s_objet_argument);
        !          1390:                        free(argument_majuscule);
        !          1391: 
        !          1392:                        (*s_etat_processus).erreur_execution =
        !          1393:                                d_ex_erreur_parametre_fichier;
        !          1394:                        return;
        !          1395:                    }
        !          1396: 
        !          1397:                    format = 'Y';
        !          1398:                }
        !          1399:                else if (strcmp(argument_majuscule, "FLOW") == 0)
        !          1400:                {
        !          1401:                    if (format != ' ')
        !          1402:                    {
        !          1403:                        liberation(s_etat_processus, s_objet_argument);
        !          1404:                        free(argument_majuscule);
        !          1405: 
        !          1406:                        (*s_etat_processus).erreur_execution =
        !          1407:                                d_ex_erreur_parametre_fichier;
        !          1408:                        return;
        !          1409:                    }
        !          1410: 
        !          1411:                    format = 'F';
        !          1412:                }
        !          1413:                else if (strcmp(argument_majuscule, "STREAM") == 0)
        !          1414:                {
        !          1415:                    if (type_socket != ' ')
        !          1416:                    {
        !          1417:                        liberation(s_etat_processus, s_objet_argument);
        !          1418:                        free(argument_majuscule);
        !          1419: 
        !          1420:                        (*s_etat_processus).erreur_execution =
        !          1421:                                d_ex_erreur_parametre_fichier;
        !          1422:                        return;
        !          1423:                    }
        !          1424: 
        !          1425:                    if (type_arguments == ' ')
        !          1426:                    {
        !          1427:                        type_arguments = 'S';
        !          1428:                    }
        !          1429:                    else if (type_arguments == 'F')
        !          1430:                    {
        !          1431:                        liberation(s_etat_processus, s_objet_argument);
        !          1432:                        free(argument_majuscule);
        !          1433: 
        !          1434:                        (*s_etat_processus).erreur_execution =
        !          1435:                                d_ex_erreur_parametre_fichier;
        !          1436:                        return;
        !          1437:                    }
        !          1438: 
        !          1439:                    type_socket = 'S';
        !          1440:                }
        !          1441:                else if (strcmp(argument_majuscule, "DATAGRAM") == 0)
        !          1442:                {
        !          1443:                    if (type_socket != ' ')
        !          1444:                    {
        !          1445:                        liberation(s_etat_processus, s_objet_argument);
        !          1446:                        free(argument_majuscule);
        !          1447: 
        !          1448:                        (*s_etat_processus).erreur_execution =
        !          1449:                                d_ex_erreur_parametre_fichier;
        !          1450:                        return;
        !          1451:                    }
        !          1452: 
        !          1453:                    type_socket = 'D';
        !          1454:                }
        !          1455:                else if (strcmp(argument_majuscule, "SEQUENTIAL DATAGRAM") == 0)
        !          1456:                {
        !          1457:                    if (type_socket != ' ')
        !          1458:                    {
        !          1459:                        liberation(s_etat_processus, s_objet_argument);
        !          1460:                        free(argument_majuscule);
        !          1461: 
        !          1462:                        (*s_etat_processus).erreur_execution =
        !          1463:                                d_ex_erreur_parametre_fichier;
        !          1464:                        return;
        !          1465:                    }
        !          1466: 
        !          1467:                    if (type_arguments == ' ')
        !          1468:                    {
        !          1469:                        type_arguments = 'S';
        !          1470:                    }
        !          1471:                    else if (type_arguments == 'F')
        !          1472:                    {
        !          1473:                        liberation(s_etat_processus, s_objet_argument);
        !          1474:                        free(argument_majuscule);
        !          1475: 
        !          1476:                        (*s_etat_processus).erreur_execution =
        !          1477:                                d_ex_erreur_parametre_fichier;
        !          1478:                        return;
        !          1479:                    }
        !          1480: 
        !          1481:                    type_socket = 'Q';
        !          1482:                }
        !          1483:                else if (strcmp(argument_majuscule, "RAW") == 0)
        !          1484:                {
        !          1485:                    if (type_socket != ' ')
        !          1486:                    {
        !          1487:                        liberation(s_etat_processus, s_objet_argument);
        !          1488:                        free(argument_majuscule);
        !          1489: 
        !          1490:                        (*s_etat_processus).erreur_execution =
        !          1491:                                d_ex_erreur_parametre_fichier;
        !          1492:                        return;
        !          1493:                    }
        !          1494: 
        !          1495:                    if (type_arguments == ' ')
        !          1496:                    {
        !          1497:                        type_arguments = 'S';
        !          1498:                    }
        !          1499:                    else if (type_arguments == 'F')
        !          1500:                    {
        !          1501:                        liberation(s_etat_processus, s_objet_argument);
        !          1502:                        free(argument_majuscule);
        !          1503: 
        !          1504:                        (*s_etat_processus).erreur_execution =
        !          1505:                                d_ex_erreur_parametre_fichier;
        !          1506:                        return;
        !          1507:                    }
        !          1508: 
        !          1509:                    type_socket = 'R';
        !          1510:                }
        !          1511:                else if (strcmp(argument_majuscule, "ROBUST DATAGRAM") == 0)
        !          1512:                {
        !          1513:                    if (type_socket != ' ')
        !          1514:                    {
        !          1515:                        liberation(s_etat_processus, s_objet_argument);
        !          1516:                        free(argument_majuscule);
        !          1517: 
        !          1518:                        (*s_etat_processus).erreur_execution =
        !          1519:                                d_ex_erreur_parametre_fichier;
        !          1520:                        return;
        !          1521:                    }
        !          1522: 
        !          1523:                    if (type_arguments == ' ')
        !          1524:                    {
        !          1525:                        type_arguments = 'S';
        !          1526:                    }
        !          1527:                    else if (type_arguments == 'F')
        !          1528:                    {
        !          1529:                        liberation(s_etat_processus, s_objet_argument);
        !          1530:                        free(argument_majuscule);
        !          1531: 
        !          1532:                        (*s_etat_processus).erreur_execution =
        !          1533:                                d_ex_erreur_parametre_fichier;
        !          1534:                        return;
        !          1535:                    }
        !          1536: 
        !          1537:                    type_socket = 'M';
        !          1538:                }
        !          1539:                else if (strcmp(argument_majuscule, "LOCAL") == 0)
        !          1540:                {
        !          1541:                    if (type_domaine != ' ')
        !          1542:                    {
        !          1543:                        liberation(s_etat_processus, s_objet_argument);
        !          1544:                        free(argument_majuscule);
        !          1545: 
        !          1546:                        (*s_etat_processus).erreur_execution =
        !          1547:                                d_ex_erreur_parametre_fichier;
        !          1548:                        return;
        !          1549:                    }
        !          1550: 
        !          1551:                    if (type_arguments == ' ')
        !          1552:                    {
        !          1553:                        type_arguments = 'S';
        !          1554:                    }
        !          1555:                    else if (type_arguments == 'F')
        !          1556:                    {
        !          1557:                        liberation(s_etat_processus, s_objet_argument);
        !          1558:                        free(argument_majuscule);
        !          1559: 
        !          1560:                        (*s_etat_processus).erreur_execution =
        !          1561:                                d_ex_erreur_parametre_fichier;
        !          1562:                        return;
        !          1563:                    }
        !          1564: 
        !          1565:                    type_domaine = 'L';
        !          1566:                }
        !          1567:                else if (strcmp(argument_majuscule, "FOREIGN") == 0)
        !          1568:                {
        !          1569:                    if (type_domaine != ' ')
        !          1570:                    {
        !          1571:                        liberation(s_etat_processus, s_objet_argument);
        !          1572:                        free(argument_majuscule);
        !          1573: 
        !          1574:                        (*s_etat_processus).erreur_execution =
        !          1575:                                d_ex_erreur_parametre_fichier;
        !          1576:                        return;
        !          1577:                    }
        !          1578: 
        !          1579:                    if (type_arguments == ' ')
        !          1580:                    {
        !          1581:                        type_arguments = 'S';
        !          1582:                    }
        !          1583:                    else if (type_arguments == 'F')
        !          1584:                    {
        !          1585:                        liberation(s_etat_processus, s_objet_argument);
        !          1586:                        free(argument_majuscule);
        !          1587: 
        !          1588:                        (*s_etat_processus).erreur_execution =
        !          1589:                                d_ex_erreur_parametre_fichier;
        !          1590:                        return;
        !          1591:                    }
        !          1592: 
        !          1593:                    type_domaine = 'F';
        !          1594:                }
        !          1595:                else if (strcmp(argument_majuscule, "IPV4") == 0)
        !          1596:                {
        !          1597:                    if (strcmp(protocole, "") != 0)
        !          1598:                    {
        !          1599:                        liberation(s_etat_processus, s_objet_argument);
        !          1600:                        free(argument_majuscule);
        !          1601: 
        !          1602:                        (*s_etat_processus).erreur_execution =
        !          1603:                                d_ex_erreur_parametre_fichier;
        !          1604:                        return;
        !          1605:                    }
        !          1606: 
        !          1607:                    if (type_arguments == ' ')
        !          1608:                    {
        !          1609:                        type_arguments = 'S';
        !          1610:                    }
        !          1611:                    else if (type_arguments == 'F')
        !          1612:                    {
        !          1613:                        liberation(s_etat_processus, s_objet_argument);
        !          1614:                        free(argument_majuscule);
        !          1615: 
        !          1616:                        (*s_etat_processus).erreur_execution =
        !          1617:                                d_ex_erreur_parametre_fichier;
        !          1618:                        return;
        !          1619:                    }
        !          1620: 
        !          1621:                    strcpy(protocole, "IPV4");
        !          1622:                }
        !          1623:                else if (strcmp(argument_majuscule, "IPV6") == 0)
        !          1624:                {
        !          1625:                    if (strcmp(protocole, "") != 0)
        !          1626:                    {
        !          1627:                        liberation(s_etat_processus, s_objet_argument);
        !          1628:                        free(argument_majuscule);
        !          1629: 
        !          1630:                        (*s_etat_processus).erreur_execution =
        !          1631:                                d_ex_erreur_parametre_fichier;
        !          1632:                        return;
        !          1633:                    }
        !          1634: 
        !          1635:                    if (type_arguments == ' ')
        !          1636:                    {
        !          1637:                        type_arguments = 'S';
        !          1638:                    }
        !          1639:                    else if (type_arguments == 'F')
        !          1640:                    {
        !          1641:                        liberation(s_etat_processus, s_objet_argument);
        !          1642:                        free(argument_majuscule);
        !          1643: 
        !          1644:                        (*s_etat_processus).erreur_execution =
        !          1645:                                d_ex_erreur_parametre_fichier;
        !          1646:                        return;
        !          1647:                    }
        !          1648: 
        !          1649:                    strcpy(protocole, "IPV6");
        !          1650:                }
        !          1651:                else if (strcmp(argument_majuscule, "UNIX") == 0)
        !          1652:                {
        !          1653:                    if (strcmp(protocole, "") != 0)
        !          1654:                    {
        !          1655:                        liberation(s_etat_processus, s_objet_argument);
        !          1656:                        free(argument_majuscule);
        !          1657: 
        !          1658:                        (*s_etat_processus).erreur_execution =
        !          1659:                                d_ex_erreur_parametre_fichier;
        !          1660:                        return;
        !          1661:                    }
        !          1662: 
        !          1663:                    if (type_arguments == ' ')
        !          1664:                    {
        !          1665:                        type_arguments = 'S';
        !          1666:                    }
        !          1667:                    else if (type_arguments == 'F')
        !          1668:                    {
        !          1669:                        liberation(s_etat_processus, s_objet_argument);
        !          1670:                        free(argument_majuscule);
        !          1671: 
        !          1672:                        (*s_etat_processus).erreur_execution =
        !          1673:                                d_ex_erreur_parametre_fichier;
        !          1674:                        return;
        !          1675:                    }
        !          1676: 
        !          1677:                    strcpy(protocole, "UNIX");
        !          1678:                }
        !          1679:                else
        !          1680:                {
        !          1681:                    liberation(s_etat_processus, s_objet_argument);
        !          1682:                    free(argument_majuscule);
        !          1683: 
        !          1684:                    (*s_etat_processus).erreur_execution =
        !          1685:                            d_ex_erreur_parametre_fichier;
        !          1686:                    return;
        !          1687:                }
        !          1688: 
        !          1689:                free(argument_majuscule);
        !          1690:            }
        !          1691:            else if ((*(*l_element_courant).donnee).type == LST)
        !          1692:            {
        !          1693:                l_element_courant_sous_objet =
        !          1694:                        (*(*l_element_courant).donnee).objet;
        !          1695: 
        !          1696:                nombre_elements = 0;
        !          1697:                while(l_element_courant_sous_objet != NULL)
        !          1698:                {
        !          1699:                    nombre_elements++;
        !          1700:                    l_element_courant_sous_objet =
        !          1701:                            (*l_element_courant_sous_objet).suivant;
        !          1702:                }
        !          1703: 
        !          1704:                l_element_courant_sous_objet =
        !          1705:                        (*(*l_element_courant).donnee).objet;
        !          1706: 
        !          1707:                if (nombre_elements == 2)
        !          1708:                {
        !          1709:                    if ((*(*l_element_courant_sous_objet).donnee).type == CHN)
        !          1710:                    {
        !          1711:                        if ((argument_majuscule = conversion_majuscule(
        !          1712:                                (unsigned char *)
        !          1713:                                (*(*l_element_courant_sous_objet)
        !          1714:                                .donnee).objet)) == NULL)
        !          1715:                        {
        !          1716:                            (*s_etat_processus).erreur_systeme =
        !          1717:                                    d_es_allocation_memoire;
        !          1718:                            return;
        !          1719:                        }
        !          1720: 
        !          1721:                        l_element_courant_sous_objet =
        !          1722:                                (*l_element_courant_sous_objet).suivant;
        !          1723: 
        !          1724:                        if (strcmp(argument_majuscule, "NAME") == 0)
        !          1725:                        {
        !          1726:                            if ((*(*l_element_courant_sous_objet).donnee).type
        !          1727:                                   == CHN)
        !          1728:                            {
        !          1729:                                if (nom != NULL)
        !          1730:                                {
        !          1731:                                    liberation(s_etat_processus,
        !          1732:                                            s_objet_argument);
        !          1733:                                    free(argument_majuscule);
        !          1734: 
        !          1735:                                    (*s_etat_processus).erreur_execution =
        !          1736:                                            d_ex_erreur_parametre_fichier;
        !          1737:                                    return;
        !          1738:                                }
        !          1739: 
        !          1740:                                nom = (unsigned char *)
        !          1741:                                        (*(*l_element_courant_sous_objet)
        !          1742:                                        .donnee).objet;
        !          1743:                            }
        !          1744:                            else
        !          1745:                            {
        !          1746:                                liberation(s_etat_processus, s_objet_argument);
        !          1747:                                free(argument_majuscule);
        !          1748: 
        !          1749:                                (*s_etat_processus).erreur_execution =
        !          1750:                                        d_ex_erreur_parametre_fichier;
        !          1751:                                return;
        !          1752:                            }
        !          1753:                        }
        !          1754:                        else if (strcmp(argument_majuscule, "OPTION") == 0)
        !          1755:                        {
        !          1756:                            if ((*(*l_element_courant_sous_objet).donnee).type
        !          1757:                                   == CHN)
        !          1758:                            {
        !          1759:                                if (type_arguments == ' ')
        !          1760:                                {
        !          1761:                                    type_arguments = 'S';
        !          1762:                                }
        !          1763:                                else if (type_arguments == 'F')
        !          1764:                                {
        !          1765:                                    liberation(s_etat_processus,
        !          1766:                                            s_objet_argument);
        !          1767:                                    free(argument_majuscule);
        !          1768: 
        !          1769:                                    (*s_etat_processus).erreur_execution =
        !          1770:                                            d_ex_erreur_parametre_fichier;
        !          1771:                                    return;
        !          1772:                                }
        !          1773:                            }
        !          1774: 
        !          1775:                            free(argument_majuscule);
        !          1776: 
        !          1777:                            if ((argument_majuscule = conversion_majuscule(
        !          1778:                                    (unsigned char *)
        !          1779:                                    (*(*l_element_courant_sous_objet)
        !          1780:                                    .donnee).objet)) == NULL)
        !          1781:                            {
        !          1782:                                (*s_etat_processus).erreur_systeme =
        !          1783:                                        d_es_allocation_memoire;
        !          1784:                                return;
        !          1785:                            }
        !          1786: 
        !          1787:                            if (strcmp(argument_majuscule, "BROADCAST") == 0)
        !          1788:                            {
        !          1789:                                if (options[d_BROADCAST] == 'Y')
        !          1790:                                {
        !          1791:                                    liberation(s_etat_processus,
        !          1792:                                            s_objet_argument);
        !          1793:                                    free(argument_majuscule);
        !          1794: 
        !          1795:                                    (*s_etat_processus).erreur_execution =
        !          1796:                                            d_ex_erreur_parametre_fichier;
        !          1797:                                    return;
        !          1798:                                }
        !          1799: 
        !          1800:                                options[d_BROADCAST] = 'Y';
        !          1801:                            }
        !          1802:                            else if (strcmp(argument_majuscule, "DO NOT ROUTE")
        !          1803:                                    == 0)
        !          1804:                            {
        !          1805:                                if (options[d_DONT_ROUTE] == 'Y')
        !          1806:                                {
        !          1807:                                    liberation(s_etat_processus,
        !          1808:                                            s_objet_argument);
        !          1809:                                    free(argument_majuscule);
        !          1810: 
        !          1811:                                    (*s_etat_processus).erreur_execution =
        !          1812:                                            d_ex_erreur_parametre_fichier;
        !          1813:                                    return;
        !          1814:                                }
        !          1815: 
        !          1816:                                options[d_DONT_ROUTE] = 'Y';
        !          1817:                            }
        !          1818:                            else if (strcmp(argument_majuscule, "KEEP ALIVE")
        !          1819:                                    == 0)
        !          1820:                            {
        !          1821:                                if (options[d_KEEP_ALIVE] == 'Y')
        !          1822:                                {
        !          1823:                                    liberation(s_etat_processus,
        !          1824:                                            s_objet_argument);
        !          1825:                                    free(argument_majuscule);
        !          1826: 
        !          1827:                                    (*s_etat_processus).erreur_execution =
        !          1828:                                            d_ex_erreur_parametre_fichier;
        !          1829:                                    return;
        !          1830:                                }
        !          1831: 
        !          1832:                                options[d_KEEP_ALIVE] = 'Y';
        !          1833:                            }
        !          1834:                            else if (strcmp(argument_majuscule, "REUSE ADDRESS")
        !          1835:                                    == 0)
        !          1836:                            {
        !          1837:                                if (options[d_REUSE_ADDRESS] == 'Y')
        !          1838:                                {
        !          1839:                                    liberation(s_etat_processus,
        !          1840:                                            s_objet_argument);
        !          1841:                                    free(argument_majuscule);
        !          1842: 
        !          1843:                                    (*s_etat_processus).erreur_execution =
        !          1844:                                            d_ex_erreur_parametre_fichier;
        !          1845:                                    return;
        !          1846:                                }
        !          1847: 
        !          1848:                                options[d_REUSE_ADDRESS] = 'Y';
        !          1849:                            }
        !          1850:                            else
        !          1851:                            {
        !          1852:                                liberation(s_etat_processus,
        !          1853:                                        s_objet_argument);
        !          1854:                                free(argument_majuscule);
        !          1855: 
        !          1856:                                (*s_etat_processus).erreur_execution =
        !          1857:                                        d_ex_erreur_parametre_fichier;
        !          1858:                                return;
        !          1859:                            }
        !          1860:                        }
        !          1861:                        else if (strcmp(argument_majuscule, "HOST") == 0)
        !          1862:                        {
        !          1863:                            if ((*(*l_element_courant_sous_objet).donnee).type
        !          1864:                                   == CHN)
        !          1865:                            {
        !          1866:                                if (type_arguments == ' ')
        !          1867:                                {
        !          1868:                                    type_arguments = 'S';
        !          1869:                                }
        !          1870:                                else if (type_arguments == 'F')
        !          1871:                                {
        !          1872:                                    liberation(s_etat_processus,
        !          1873:                                            s_objet_argument);
        !          1874:                                    free(argument_majuscule);
        !          1875: 
        !          1876:                                    (*s_etat_processus).erreur_execution =
        !          1877:                                            d_ex_erreur_parametre_fichier;
        !          1878:                                    return;
        !          1879:                                }
        !          1880: 
        !          1881:                                if (hote != NULL)
        !          1882:                                {
        !          1883:                                    liberation(s_etat_processus,
        !          1884:                                            s_objet_argument);
        !          1885:                                    free(argument_majuscule);
        !          1886: 
        !          1887:                                    (*s_etat_processus).erreur_execution =
        !          1888:                                            d_ex_erreur_parametre_fichier;
        !          1889:                                    return;
        !          1890:                                }
        !          1891: 
        !          1892:                                hote = (unsigned char *)
        !          1893:                                        (*(*l_element_courant_sous_objet)
        !          1894:                                        .donnee).objet;
        !          1895:                            }
        !          1896:                            else
        !          1897:                            {
        !          1898:                                liberation(s_etat_processus,
        !          1899:                                        s_objet_argument);
        !          1900:                                free(argument_majuscule);
        !          1901: 
        !          1902:                                (*s_etat_processus).erreur_execution =
        !          1903:                                        d_ex_erreur_parametre_fichier;
        !          1904:                                return;
        !          1905:                            }
        !          1906:                        }
        !          1907:                        else if (strcmp(argument_majuscule, "PROTOCOL") == 0)
        !          1908:                        {
        !          1909:                            if ((*(*l_element_courant_sous_objet).donnee).type
        !          1910:                                   == CHN)
        !          1911:                            {
        !          1912:                                if (type_arguments == ' ')
        !          1913:                                {
        !          1914:                                    type_arguments = 'S';
        !          1915:                                }
        !          1916:                                else if (type_arguments == 'F')
        !          1917:                                {
        !          1918:                                    liberation(s_etat_processus,
        !          1919:                                            s_objet_argument);
        !          1920:                                    free(argument_majuscule);
        !          1921: 
        !          1922:                                    (*s_etat_processus).erreur_execution =
        !          1923:                                            d_ex_erreur_parametre_fichier;
        !          1924:                                    return;
        !          1925:                                }
        !          1926: 
        !          1927:                                if (protocole_socket != NULL)
        !          1928:                                {
        !          1929:                                    liberation(s_etat_processus,
        !          1930:                                            s_objet_argument);
        !          1931:                                    free(argument_majuscule);
        !          1932: 
        !          1933:                                    (*s_etat_processus).erreur_execution =
        !          1934:                                            d_ex_erreur_parametre_fichier;
        !          1935:                                    return;
        !          1936:                                }
        !          1937: 
        !          1938:                                protocole_socket = (unsigned char *)
        !          1939:                                        (*(*l_element_courant_sous_objet)
        !          1940:                                        .donnee).objet;
        !          1941:                            }
        !          1942:                            else
        !          1943:                            {
        !          1944:                                liberation(s_etat_processus, s_objet_argument);
        !          1945:                                free(argument_majuscule);
        !          1946: 
        !          1947:                                (*s_etat_processus).erreur_execution =
        !          1948:                                        d_ex_erreur_parametre_fichier;
        !          1949:                                return;
        !          1950:                            }
        !          1951:                        }
        !          1952:                        else if (strcmp(argument_majuscule, "KEY") == 0)
        !          1953:                        {
        !          1954:                            if ((*(*l_element_courant_sous_objet).donnee).type
        !          1955:                                    == INT)
        !          1956:                            {
        !          1957:                                if (type_arguments == ' ')
        !          1958:                                {
        !          1959:                                    type_arguments = 'F';
        !          1960:                                }
        !          1961:                                else if (type_arguments == 'S')
        !          1962:                                {
        !          1963:                                    liberation(s_etat_processus,
        !          1964:                                            s_objet_argument);
        !          1965:                                    free(argument_majuscule);
        !          1966: 
        !          1967:                                    (*s_etat_processus).erreur_execution =
        !          1968:                                            d_ex_erreur_parametre_fichier;
        !          1969:                                    return;
        !          1970:                                }
        !          1971: 
        !          1972:                                if (position_clef != 0)
        !          1973:                                {
        !          1974:                                    liberation(s_etat_processus,
        !          1975:                                            s_objet_argument);
        !          1976: 
        !          1977:                                    (*s_etat_processus).erreur_execution =
        !          1978:                                            d_ex_erreur_parametre_fichier;
        !          1979:                                    return;
        !          1980:                                }
        !          1981:                                else
        !          1982:                                {
        !          1983:                                    if ((position_clef = (*((integer8 *)
        !          1984:                                            (*(*l_element_courant_sous_objet)
        !          1985:                                            .donnee).objet))) <= 0)
        !          1986:                                    {
        !          1987:                                        liberation(s_etat_processus,
        !          1988:                                                s_objet_argument);
        !          1989: 
        !          1990:                                        (*s_etat_processus).erreur_execution =
        !          1991:                                                d_ex_erreur_parametre_fichier;
        !          1992:                                        return;
        !          1993:                                    }
        !          1994:                                }
        !          1995:                            }
        !          1996:                            else
        !          1997:                            {
        !          1998:                                liberation(s_etat_processus, s_objet_argument);
        !          1999:                                free(argument_majuscule);
        !          2000: 
        !          2001:                                (*s_etat_processus).erreur_execution =
        !          2002:                                        d_ex_erreur_parametre_fichier;
        !          2003:                                return;
        !          2004:                            }
        !          2005:                        }
        !          2006:                        else if (strcmp(argument_majuscule, "PORT") == 0)
        !          2007:                        {
        !          2008:                            if ((*(*l_element_courant_sous_objet)
        !          2009:                                    .donnee).type == INT)
        !          2010:                            {
        !          2011:                                if (type_arguments == ' ')
        !          2012:                                {
        !          2013:                                    type_arguments = 'S';
        !          2014:                                }
        !          2015:                                else if (type_arguments == 'F')
        !          2016:                                {
        !          2017:                                    liberation(s_etat_processus,
        !          2018:                                            s_objet_argument);
        !          2019:                                    free(argument_majuscule);
        !          2020: 
        !          2021:                                    (*s_etat_processus).erreur_execution =
        !          2022:                                            d_ex_erreur_parametre_fichier;
        !          2023:                                    return;
        !          2024:                                }
        !          2025: 
        !          2026:                                if (presence_port == d_vrai)
        !          2027:                                {
        !          2028:                                    liberation(s_etat_processus,
        !          2029:                                            s_objet_argument);
        !          2030: 
        !          2031:                                    (*s_etat_processus).erreur_execution =
        !          2032:                                            d_ex_erreur_parametre_fichier;
        !          2033:                                    return;
        !          2034:                                }
        !          2035:                                else
        !          2036:                                {
        !          2037:                                    presence_port = d_vrai;
        !          2038: 
        !          2039:                                    if ((port = (*((integer8 *)
        !          2040:                                            (*(*l_element_courant_sous_objet)
        !          2041:                                            .donnee).objet))) < 0)
        !          2042:                                    {
        !          2043:                                        liberation(s_etat_processus,
        !          2044:                                                s_objet_argument);
        !          2045: 
        !          2046:                                        (*s_etat_processus).erreur_execution =
        !          2047:                                                d_ex_erreur_parametre_fichier;
        !          2048:                                        return;
        !          2049:                                    }
        !          2050: 
        !          2051:                                    if (port > 65535)
        !          2052:                                    {
        !          2053:                                        liberation(s_etat_processus,
        !          2054:                                                s_objet_argument);
        !          2055: 
        !          2056:                                        (*s_etat_processus).erreur_execution =
        !          2057:                                                d_ex_erreur_parametre_fichier;
        !          2058:                                        return;
        !          2059:                                    }
        !          2060:                                }
        !          2061:                            }
        !          2062:                            else
        !          2063:                            {
        !          2064:                                liberation(s_etat_processus, s_objet_argument);
        !          2065:                                free(argument_majuscule);
        !          2066: 
        !          2067:                                (*s_etat_processus).erreur_execution =
        !          2068:                                        d_ex_erreur_parametre_fichier;
        !          2069:                                return;
        !          2070:                            }
        !          2071:                        }
        !          2072:                        else if (strcmp(argument_majuscule, "LISTEN") == 0)
        !          2073:                        {
        !          2074:                            if ((*(*l_element_courant_sous_objet).donnee).type
        !          2075:                                    == INT)
        !          2076:                            {
        !          2077:                                if (type_arguments == ' ')
        !          2078:                                {
        !          2079:                                    type_arguments = 'S';
        !          2080:                                }
        !          2081:                                else if (type_arguments == 'F')
        !          2082:                                {
        !          2083:                                    liberation(s_etat_processus,
        !          2084:                                            s_objet_argument);
        !          2085:                                    free(argument_majuscule);
        !          2086: 
        !          2087:                                    (*s_etat_processus).erreur_execution =
        !          2088:                                            d_ex_erreur_parametre_fichier;
        !          2089:                                    return;
        !          2090:                                }
        !          2091: 
        !          2092:                                if (nombre_maximal_connexions != 0)
        !          2093:                                {
        !          2094:                                    liberation(s_etat_processus,
        !          2095:                                            s_objet_argument);
        !          2096: 
        !          2097:                                    (*s_etat_processus).erreur_execution =
        !          2098:                                            d_ex_erreur_parametre_fichier;
        !          2099:                                    return;
        !          2100:                                }
        !          2101:                                else
        !          2102:                                {
        !          2103:                                    if ((nombre_maximal_connexions =
        !          2104:                                            (*((integer8 *)
        !          2105:                                            (*(*l_element_courant_sous_objet)
        !          2106:                                            .donnee).objet))) <= 0)
        !          2107:                                    {
        !          2108:                                        liberation(s_etat_processus,
        !          2109:                                                s_objet_argument);
        !          2110: 
        !          2111:                                        (*s_etat_processus).erreur_execution =
        !          2112:                                                d_ex_erreur_parametre_fichier;
        !          2113:                                        return;
        !          2114:                                    }
        !          2115:                                }
        !          2116:                            }
        !          2117:                        }
        !          2118:                        else if (strcmp(argument_majuscule, "ADDRESS") == 0)
        !          2119:                        {
        !          2120:                            if ((*(*l_element_courant_sous_objet)
        !          2121:                                    .donnee).type == VIN)
        !          2122:                            {
        !          2123:                                if (type_arguments == ' ')
        !          2124:                                {
        !          2125:                                    type_arguments = 'S';
        !          2126:                                }
        !          2127:                                else if (type_arguments == 'F')
        !          2128:                                {
        !          2129:                                    liberation(s_etat_processus,
        !          2130:                                            s_objet_argument);
        !          2131:                                    free(argument_majuscule);
        !          2132: 
        !          2133:                                    (*s_etat_processus).erreur_execution =
        !          2134:                                            d_ex_erreur_parametre_fichier;
        !          2135:                                    return;
        !          2136:                                }
        !          2137: 
        !          2138:                                if (type_adresse != ' ')
        !          2139:                                {
        !          2140:                                    liberation(s_etat_processus,
        !          2141:                                            s_objet_argument);
        !          2142: 
        !          2143:                                    (*s_etat_processus).erreur_execution =
        !          2144:                                            d_ex_erreur_parametre_fichier;
        !          2145:                                    return;
        !          2146:                                }
        !          2147: 
        !          2148:                                if ((*((struct_vecteur *)
        !          2149:                                        (*(*l_element_courant_sous_objet)
        !          2150:                                        .donnee).objet)).taille == 4)
        !          2151:                                { // Adresse IPv4
        !          2152:                                    type_adresse = '4';
        !          2153: 
        !          2154:                                    for(i = 0; i < 4; i++)
        !          2155:                                    {
        !          2156:                                        adresse[i] = ((integer8 *)
        !          2157:                                                (*((struct_vecteur *) (*
        !          2158:                                                (*l_element_courant_sous_objet)
        !          2159:                                                .donnee).objet)).tableau)[i];
        !          2160: 
        !          2161:                                        if ((adresse[i] < 0) || (adresse[i] >
        !          2162:                                                255))
        !          2163:                                        {
        !          2164:                                            liberation(s_etat_processus,
        !          2165:                                                    s_objet_argument);
        !          2166: 
        !          2167:                                            (*s_etat_processus).erreur_execution
        !          2168:                                                = d_ex_erreur_parametre_fichier;
        !          2169:                                            return;
        !          2170:                                        }
        !          2171:                                    }
        !          2172:                                }
        !          2173:                                else if ((*((struct_vecteur *)
        !          2174:                                        (*(*l_element_courant_sous_objet)
        !          2175:                                        .donnee).objet)).taille == 16)
        !          2176:                                { // Adresse IPv6
        !          2177:                                    type_adresse = '6';
        !          2178: 
        !          2179:                                    for(i = 0; i < 16; i++)
        !          2180:                                    {
        !          2181:                                        adresse[i] = ((integer8 *)
        !          2182:                                                (*((struct_vecteur *) (*
        !          2183:                                                (*l_element_courant_sous_objet)
        !          2184:                                                .donnee).objet)).tableau)[i];
        !          2185: 
        !          2186:                                        if ((adresse[i] < 0) || (adresse[i] >
        !          2187:                                                255))
        !          2188:                                        {
        !          2189:                                            liberation(s_etat_processus,
        !          2190:                                                    s_objet_argument);
        !          2191: 
        !          2192:                                            (*s_etat_processus).erreur_execution
        !          2193:                                                = d_ex_erreur_parametre_fichier;
        !          2194:                                            return;
        !          2195:                                        }
        !          2196:                                    }
        !          2197:                                }
        !          2198:                                else
        !          2199:                                { // Adresse non supportée
        !          2200:                                    liberation(s_etat_processus,
        !          2201:                                            s_objet_argument);
        !          2202: 
        !          2203:                                    (*s_etat_processus).erreur_execution =
        !          2204:                                            d_ex_erreur_parametre_fichier;
        !          2205:                                    return;
        !          2206:                                }
        !          2207:                            }
        !          2208:                        }
        !          2209:                        else
        !          2210:                        {
        !          2211:                            liberation(s_etat_processus, s_objet_argument);
        !          2212:                            free(argument_majuscule);
        !          2213: 
        !          2214:                            (*s_etat_processus).erreur_execution =
        !          2215:                                    d_ex_erreur_parametre_fichier;
        !          2216:                            return;
        !          2217:                        }
        !          2218: 
        !          2219:                        free(argument_majuscule);
        !          2220:                    }
        !          2221:                    else
        !          2222:                    {
        !          2223:                        liberation(s_etat_processus, s_objet_argument);
        !          2224:                        (*s_etat_processus).erreur_execution =
        !          2225:                                d_ex_erreur_parametre_fichier;
        !          2226: 
        !          2227:                        return;
        !          2228:                    }
        !          2229:                }
        !          2230:                else if (nombre_elements == 3)
        !          2231:                {
        !          2232:                    if ((*(*l_element_courant_sous_objet).donnee).type == CHN)
        !          2233:                    {
        !          2234:                        if ((argument_majuscule = conversion_majuscule(
        !          2235:                                (unsigned char *)
        !          2236:                                (*(*l_element_courant_sous_objet)
        !          2237:                                .donnee).objet)) == NULL)
        !          2238:                        {
        !          2239:                            (*s_etat_processus).erreur_systeme =
        !          2240:                                    d_es_allocation_memoire;
        !          2241:                            return;
        !          2242:                        }
        !          2243: 
        !          2244:                        if (strcmp(argument_majuscule, "OPTION") == 0)
        !          2245:                        {
        !          2246:                            if (type_arguments == ' ')
        !          2247:                            {
        !          2248:                                type_arguments = 'S';
        !          2249:                            }
        !          2250:                            else if (type_arguments == 'F')
        !          2251:                            {
        !          2252:                                liberation(s_etat_processus, s_objet_argument);
        !          2253:                                free(argument_majuscule);
        !          2254: 
        !          2255:                                (*s_etat_processus).erreur_execution =
        !          2256:                                        d_ex_erreur_parametre_fichier;
        !          2257:                                return;
        !          2258:                            }
        !          2259: 
        !          2260:                            free(argument_majuscule);
        !          2261: 
        !          2262:                            l_element_courant_sous_objet =
        !          2263:                                    (*l_element_courant_sous_objet).suivant;
        !          2264: 
        !          2265:                            if ((*(*l_element_courant_sous_objet)
        !          2266:                                    .donnee).type != CHN)
        !          2267:                            {
        !          2268:                                liberation(s_etat_processus, s_objet_argument);
        !          2269: 
        !          2270:                                (*s_etat_processus).erreur_execution =
        !          2271:                                        d_ex_erreur_parametre_fichier;
        !          2272:                                return;
        !          2273:                            }
        !          2274: 
        !          2275:                            if ((argument_majuscule = conversion_majuscule(
        !          2276:                                    (unsigned char *)
        !          2277:                                    (*(*l_element_courant_sous_objet)
        !          2278:                                    .donnee).objet)) == NULL)
        !          2279:                            {
        !          2280:                                (*s_etat_processus).erreur_systeme =
        !          2281:                                        d_es_allocation_memoire;
        !          2282:                                return;
        !          2283:                            }
        !          2284: 
        !          2285:                            l_element_courant_sous_objet =
        !          2286:                                    (*l_element_courant_sous_objet).suivant;
        !          2287: 
        !          2288:                            if (strcmp(argument_majuscule, "BIND TO DEVICE")
        !          2289:                                    == 0)
        !          2290:                            {
        !          2291:                                if ((*(*l_element_courant_sous_objet)
        !          2292:                                        .donnee).type != CHN)
        !          2293:                                {
        !          2294:                                    liberation(s_etat_processus,
        !          2295:                                            s_objet_argument);
        !          2296:                                    free(argument_majuscule);
        !          2297: 
        !          2298:                                    (*s_etat_processus).erreur_execution =
        !          2299:                                            d_ex_erreur_parametre_fichier;
        !          2300:                                    return;
        !          2301:                                }
        !          2302: 
        !          2303:                                if (options[d_BIND_TO_DEVICE] == 'Y')
        !          2304:                                {
        !          2305:                                    liberation(s_etat_processus,
        !          2306:                                            s_objet_argument);
        !          2307:                                    free(argument_majuscule);
        !          2308: 
        !          2309:                                    (*s_etat_processus).erreur_execution =
        !          2310:                                            d_ex_erreur_parametre_fichier;
        !          2311:                                    return;
        !          2312:                                }
        !          2313: 
        !          2314:                                options[d_BIND_TO_DEVICE] = 'Y';
        !          2315: 
        !          2316:                                peripherique = (unsigned char *)
        !          2317:                                        (*(*l_element_courant_sous_objet)
        !          2318:                                        .donnee).objet;
        !          2319:                            }
        !          2320:                            else if (strcmp(argument_majuscule, "PRIORITY")
        !          2321:                                    == 0)
        !          2322:                            {
        !          2323:                                if ((*(*l_element_courant_sous_objet)
        !          2324:                                        .donnee).type != INT)
        !          2325:                                {
        !          2326:                                    liberation(s_etat_processus,
        !          2327:                                            s_objet_argument);
        !          2328:                                    free(argument_majuscule);
        !          2329: 
        !          2330:                                    (*s_etat_processus).erreur_execution =
        !          2331:                                            d_ex_erreur_parametre_fichier;
        !          2332:                                    return;
        !          2333:                                }
        !          2334: 
        !          2335:                                if (options[d_PRIORITY] == 'Y')
        !          2336:                                {
        !          2337:                                    liberation(s_etat_processus,
        !          2338:                                            s_objet_argument);
        !          2339:                                    free(argument_majuscule);
        !          2340: 
        !          2341:                                    (*s_etat_processus).erreur_execution =
        !          2342:                                            d_ex_erreur_parametre_fichier;
        !          2343:                                    return;
        !          2344:                                }
        !          2345: 
        !          2346:                                options[d_PRIORITY] = 'Y';
        !          2347: 
        !          2348:                                priorite = (int) (*((integer8 *)
        !          2349:                                        (*(*l_element_courant_sous_objet)
        !          2350:                                        .donnee).objet));
        !          2351:                            }
        !          2352:                            else if (strcmp(argument_majuscule,
        !          2353:                                    "RECEIVE BUFFER") == 0)
        !          2354:                            {
        !          2355:                                if ((*(*l_element_courant_sous_objet)
        !          2356:                                        .donnee).type != INT)
        !          2357:                                {
        !          2358:                                    liberation(s_etat_processus,
        !          2359:                                            s_objet_argument);
        !          2360:                                    free(argument_majuscule);
        !          2361: 
        !          2362:                                    (*s_etat_processus).erreur_execution =
        !          2363:                                            d_ex_erreur_parametre_fichier;
        !          2364:                                    return;
        !          2365:                                }
        !          2366: 
        !          2367:                                if ((options[d_RECEIVE_BUFFER] == 'Y') ||
        !          2368:                                        (options[d_FORCE_RECEIVE_BUFFER]
        !          2369:                                        == 'Y'))
        !          2370:                                {
        !          2371:                                    liberation(s_etat_processus,
        !          2372:                                            s_objet_argument);
        !          2373:                                    free(argument_majuscule);
        !          2374: 
        !          2375:                                    (*s_etat_processus).erreur_execution =
        !          2376:                                            d_ex_erreur_parametre_fichier;
        !          2377:                                    return;
        !          2378:                                }
        !          2379: 
        !          2380:                                options[d_RECEIVE_BUFFER] = 'Y';
        !          2381: 
        !          2382:                                buffer_reception = (int) (*((integer8 *)
        !          2383:                                        (*(*l_element_courant_sous_objet)
        !          2384:                                        .donnee).objet));
        !          2385:                            }
        !          2386:                            else if (strcmp(argument_majuscule,
        !          2387:                                    "FORCE RECEIVE BUFFER") == 0)
        !          2388:                            {
        !          2389:                                if ((*(*l_element_courant_sous_objet)
        !          2390:                                        .donnee).type != INT)
        !          2391:                                {
        !          2392:                                    liberation(s_etat_processus,
        !          2393:                                            s_objet_argument);
        !          2394:                                    free(argument_majuscule);
        !          2395: 
        !          2396:                                    (*s_etat_processus).erreur_execution =
        !          2397:                                            d_ex_erreur_parametre_fichier;
        !          2398:                                    return;
        !          2399:                                }
        !          2400: 
        !          2401:                                if ((options[d_RECEIVE_BUFFER] == 'Y') ||
        !          2402:                                        (options[d_FORCE_RECEIVE_BUFFER]
        !          2403:                                        == 'Y'))
        !          2404:                                {
        !          2405:                                    liberation(s_etat_processus,
        !          2406:                                            s_objet_argument);
        !          2407:                                    free(argument_majuscule);
        !          2408: 
        !          2409:                                    (*s_etat_processus).erreur_execution =
        !          2410:                                            d_ex_erreur_parametre_fichier;
        !          2411:                                    return;
        !          2412:                                }
        !          2413: 
        !          2414:                                options[d_FORCE_RECEIVE_BUFFER] = 'Y';
        !          2415: 
        !          2416:                                buffer_reception = (int) (*((integer8 *)
        !          2417:                                        (*(*l_element_courant_sous_objet)
        !          2418:                                        .donnee).objet));
        !          2419:                            }
        !          2420:                            else if (strcmp(argument_majuscule,
        !          2421:                                    "SEND BUFFER") == 0)
        !          2422:                            {
        !          2423:                                if ((*(*l_element_courant_sous_objet)
        !          2424:                                        .donnee).type != INT)
        !          2425:                                {
        !          2426:                                    liberation(s_etat_processus,
        !          2427:                                            s_objet_argument);
        !          2428:                                    free(argument_majuscule);
        !          2429: 
        !          2430:                                    (*s_etat_processus).erreur_execution =
        !          2431:                                            d_ex_erreur_parametre_fichier;
        !          2432:                                    return;
        !          2433:                                }
        !          2434: 
        !          2435:                                if ((options[d_SEND_BUFFER] == 'Y') ||
        !          2436:                                        (options[d_FORCE_SEND_BUFFER] == 'Y'))
        !          2437:                                {
        !          2438:                                    liberation(s_etat_processus,
        !          2439:                                            s_objet_argument);
        !          2440:                                    free(argument_majuscule);
        !          2441: 
        !          2442:                                    (*s_etat_processus).erreur_execution =
        !          2443:                                            d_ex_erreur_parametre_fichier;
        !          2444:                                    return;
        !          2445:                                }
        !          2446: 
        !          2447:                                options[d_SEND_BUFFER] = 'Y';
        !          2448: 
        !          2449:                                buffer_emission = (int) (*((integer8 *)
        !          2450:                                        (*(*l_element_courant_sous_objet)
        !          2451:                                        .donnee).objet));
        !          2452:                            }
        !          2453:                            else if (strcmp(argument_majuscule,
        !          2454:                                    "FORCE SEND BUFFER") == 0)
        !          2455:                            {
        !          2456:                                if ((*(*l_element_courant_sous_objet)
        !          2457:                                        .donnee).type != INT)
        !          2458:                                {
        !          2459:                                    liberation(s_etat_processus,
        !          2460:                                            s_objet_argument);
        !          2461:                                    free(argument_majuscule);
        !          2462: 
        !          2463:                                    (*s_etat_processus).erreur_execution =
        !          2464:                                            d_ex_erreur_parametre_fichier;
        !          2465:                                    return;
        !          2466:                                }
        !          2467: 
        !          2468:                                if ((options[d_SEND_BUFFER] == 'Y') ||
        !          2469:                                        (options[d_FORCE_SEND_BUFFER] == 'Y'))
        !          2470:                                {
        !          2471:                                    liberation(s_etat_processus,
        !          2472:                                            s_objet_argument);
        !          2473:                                    free(argument_majuscule);
        !          2474: 
        !          2475:                                    (*s_etat_processus).erreur_execution =
        !          2476:                                            d_ex_erreur_parametre_fichier;
        !          2477:                                    return;
        !          2478:                                }
        !          2479: 
        !          2480:                                options[d_FORCE_SEND_BUFFER] = 'Y';
        !          2481: 
        !          2482:                                buffer_emission = (int) (*((integer8 *)
        !          2483:                                        (*(*l_element_courant_sous_objet)
        !          2484:                                        .donnee).objet));
        !          2485:                            }
        !          2486:                            else if (strcmp(argument_majuscule,
        !          2487:                                    "RECEIVING TIMEOUT") == 0)
        !          2488:                            {
        !          2489:                                if ((*(*l_element_courant_sous_objet)
        !          2490:                                        .donnee).type != INT)
        !          2491:                                {
        !          2492:                                    liberation(s_etat_processus,
        !          2493:                                            s_objet_argument);
        !          2494:                                    free(argument_majuscule);
        !          2495: 
        !          2496:                                    (*s_etat_processus).erreur_execution =
        !          2497:                                            d_ex_erreur_parametre_fichier;
        !          2498:                                    return;
        !          2499:                                }
        !          2500: 
        !          2501:                                if (options[d_RECEIVING_TIMEOUT] == 'Y')
        !          2502:                                {
        !          2503:                                    liberation(s_etat_processus,
        !          2504:                                            s_objet_argument);
        !          2505:                                    free(argument_majuscule);
        !          2506: 
        !          2507:                                    (*s_etat_processus).erreur_execution =
        !          2508:                                            d_ex_erreur_parametre_fichier;
        !          2509:                                    return;
        !          2510:                                }
        !          2511: 
        !          2512:                                options[d_RECEIVING_TIMEOUT] = 'Y';
        !          2513: 
        !          2514:                                timeout_reception = (int) (*((integer8 *)
        !          2515:                                        (*(*l_element_courant_sous_objet)
        !          2516:                                        .donnee).objet));
        !          2517:                            }
        !          2518:                            else if (strcmp(argument_majuscule,
        !          2519:                                    "SENDING TIMEOUT") == 0)
        !          2520:                            {
        !          2521:                                if ((*(*l_element_courant_sous_objet)
        !          2522:                                        .donnee).type != INT)
        !          2523:                                {
        !          2524:                                    liberation(s_etat_processus,
        !          2525:                                            s_objet_argument);
        !          2526:                                    free(argument_majuscule);
        !          2527: 
        !          2528:                                    (*s_etat_processus).erreur_execution =
        !          2529:                                            d_ex_erreur_parametre_fichier;
        !          2530:                                    return;
        !          2531:                                }
        !          2532: 
        !          2533:                                if (options[d_SENDING_TIMEOUT] == 'Y')
        !          2534:                                {
        !          2535:                                    liberation(s_etat_processus,
        !          2536:                                            s_objet_argument);
        !          2537:                                    free(argument_majuscule);
        !          2538: 
        !          2539:                                    (*s_etat_processus).erreur_execution =
        !          2540:                                            d_ex_erreur_parametre_fichier;
        !          2541:                                    return;
        !          2542:                                }
        !          2543: 
        !          2544:                                options[d_SENDING_TIMEOUT] = 'Y';
        !          2545: 
        !          2546:                                timeout_emission = (int) (*((integer8 *)
        !          2547:                                        (*(*l_element_courant_sous_objet)
        !          2548:                                        .donnee).objet));
        !          2549:                            }
        !          2550:                            else
        !          2551:                            {
        !          2552:                                liberation(s_etat_processus, s_objet_argument);
        !          2553:                                free(argument_majuscule);
        !          2554: 
        !          2555:                                (*s_etat_processus).erreur_execution =
        !          2556:                                        d_ex_erreur_parametre_fichier;
        !          2557:                                return;
        !          2558:                            }
        !          2559: 
        !          2560:                            free(argument_majuscule);
        !          2561:                        }
        !          2562:                        else
        !          2563:                        {
        !          2564:                            liberation(s_etat_processus, s_objet_argument);
        !          2565:                            free(argument_majuscule);
        !          2566: 
        !          2567:                            (*s_etat_processus).erreur_execution =
        !          2568:                                    d_ex_erreur_parametre_fichier;
        !          2569:                            return;
        !          2570:                        }
        !          2571:                    }
        !          2572:                    else
        !          2573:                    {
        !          2574:                        liberation(s_etat_processus, s_objet_argument);
        !          2575:                        (*s_etat_processus).erreur_execution =
        !          2576:                                d_ex_erreur_parametre_fichier;
        !          2577: 
        !          2578:                        return;
        !          2579:                    }
        !          2580:                }
        !          2581:                else
        !          2582:                {
        !          2583:                    liberation(s_etat_processus, s_objet_argument);
        !          2584:                    (*s_etat_processus).erreur_execution =
        !          2585:                            d_ex_erreur_parametre_fichier;
        !          2586: 
        !          2587:                    return;
        !          2588:                }
        !          2589:            }
        !          2590:            else
        !          2591:            {
        !          2592:                liberation(s_etat_processus, s_objet_argument);
        !          2593: 
        !          2594:                (*s_etat_processus).erreur_execution =
        !          2595:                        d_ex_erreur_parametre_fichier;
        !          2596:                return;
        !          2597:            }
        !          2598: 
        !          2599:            l_element_courant = (*l_element_courant).suivant;
        !          2600:        }
        !          2601: 
        !          2602:        if (type_arguments == 'F')
        !          2603:        {
        !          2604:            /*
        !          2605:             * Traitement des fichiers
        !          2606:             */
        !          2607: 
        !          2608:            /*
        !          2609:             * Vérification de la cohérence et comportement par défaut
        !          2610:             */
        !          2611: 
        !          2612:            if (type_ouverture == ' ')
        !          2613:            {
        !          2614:                type_ouverture = 'U';
        !          2615:            }
        !          2616: 
        !          2617:            if (type_acces == ' ')
        !          2618:            {
        !          2619:                type_acces = 'S';
        !          2620:            }
        !          2621: 
        !          2622:            if (format == ' ')
        !          2623:            {
        !          2624:                format = 'N';
        !          2625:            }
        !          2626: 
        !          2627:            if (protection == ' ')
        !          2628:            {
        !          2629:                protection = 'N';
        !          2630:            }
        !          2631:            
        !          2632:            if ((type_ouverture == 'S') && (protection != 'N'))
        !          2633:            {
        !          2634:                liberation(s_etat_processus, s_objet_argument);
        !          2635: 
        !          2636:                (*s_etat_processus).erreur_execution =
        !          2637:                        d_ex_erreur_parametre_fichier;
        !          2638:                return;
        !          2639:            }
        !          2640: 
        !          2641:            if ((type_ouverture != 'S') && (nom == NULL))
        !          2642:            {
        !          2643:                liberation(s_etat_processus, s_objet_argument);
        !          2644: 
        !          2645:                (*s_etat_processus).erreur_execution =
        !          2646:                        d_ex_erreur_parametre_fichier;
        !          2647:                return;
        !          2648:            }
        !          2649: 
        !          2650:            if (((type_acces != 'I') && (position_clef != 0)) ||
        !          2651:                    ((type_acces == 'I') && (position_clef == 0)))
        !          2652:            {
        !          2653:                liberation(s_etat_processus, s_objet_argument);
        !          2654: 
        !          2655:                (*s_etat_processus).erreur_execution =
        !          2656:                        d_ex_erreur_parametre_fichier;
        !          2657:                return;
        !          2658:            }
        !          2659: 
        !          2660:            if ((s_objet_resultat = allocation(s_etat_processus, FCH))
        !          2661:                    == NULL)
        !          2662:            {
        !          2663:                (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          2664:                return;
        !          2665:            }
        !          2666: 
        !          2667:            if (nom == NULL)
        !          2668:            {
        !          2669:                if ((nom_temporaire = creation_nom_fichier(s_etat_processus,
        !          2670:                        (*s_etat_processus).chemin_fichiers_temporaires))
        !          2671:                        == NULL)
        !          2672:                {
        !          2673:                    (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
        !          2674:                    return;
        !          2675:                }
        !          2676: 
        !          2677:                if ((nom = malloc((strlen(nom_temporaire)
        !          2678:                        + 5) * sizeof(unsigned char))) == NULL)
        !          2679:                {
        !          2680:                    (*s_etat_processus).erreur_systeme =
        !          2681:                            d_es_allocation_memoire;
        !          2682:                    return;
        !          2683:                }
        !          2684: 
        !          2685:                sprintf(nom, "%s.rpl", nom_temporaire);
        !          2686:                free(nom_temporaire);
        !          2687: 
        !          2688:                autorisation_liberation_nom = d_vrai;
        !          2689:            }
        !          2690:            else
        !          2691:            {
        !          2692:                autorisation_liberation_nom = d_faux;
        !          2693:            }
        !          2694: 
        !          2695:            /*
        !          2696:             * Ouverture du fichier
        !          2697:             */
        !          2698: 
        !          2699:            (*((struct_fichier *) (*s_objet_resultat).objet))
        !          2700:                    .nom = NULL;
        !          2701:            (*((struct_fichier *) (*s_objet_resultat).objet))
        !          2702:                    .acces = type_acces;
        !          2703:            (*((struct_fichier *) (*s_objet_resultat).objet))
        !          2704:                    .binaire = format;
        !          2705:            (*((struct_fichier *) (*s_objet_resultat).objet))
        !          2706:                    .ouverture = type_ouverture;
        !          2707:            (*((struct_fichier *) (*s_objet_resultat).objet)).pid
        !          2708:                    = getpid();
        !          2709:            (*((struct_fichier *) (*s_objet_resultat).objet)).tid
        !          2710:                    = pthread_self();
        !          2711: 
        !          2712:            if (((*((struct_fichier *) (*s_objet_resultat).objet)).format =
        !          2713:                    allocation(s_etat_processus, LST)) == NULL)
        !          2714:            {
        !          2715:                (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          2716:                return;
        !          2717:            }
        !          2718: 
        !          2719:            (*(*((struct_fichier *) (*s_objet_resultat).objet))
        !          2720:                    .format).objet = NULL;
        !          2721: 
        !          2722:            switch(type_ouverture)
        !          2723:            {
        !          2724:                case 'N' :
        !          2725:                {
        !          2726:                    erreur = caracteristiques_fichier(s_etat_processus,
        !          2727:                            nom, &existence, &ouverture, &unite);
        !          2728: 
        !          2729:                    if ((erreur != 0) || (unite != 0))
        !          2730:                    {
        !          2731:                        liberation(s_etat_processus, s_objet_argument);
        !          2732:                        liberation(s_etat_processus, s_objet_resultat);
        !          2733: 
        !          2734:                        (*s_etat_processus).erreur_execution =
        !          2735:                                d_ex_erreur_acces_fichier;
        !          2736:                        return;
        !          2737:                    }
        !          2738: 
        !          2739:                    if ((descripteur = fopen(nom, "w+")) == NULL)
        !          2740:                    {
        !          2741:                        liberation(s_etat_processus, s_objet_argument);
        !          2742:                        liberation(s_etat_processus, s_objet_resultat);
        !          2743: 
        !          2744:                        (*s_etat_processus).erreur_execution =
        !          2745:                                d_ex_erreur_acces_fichier;
        !          2746:                        return;
        !          2747:                    }
        !          2748: 
        !          2749:                    break;
        !          2750:                }
        !          2751: 
        !          2752:                case 'O' :
        !          2753:                {
        !          2754:                    erreur = caracteristiques_fichier(s_etat_processus,
        !          2755:                            nom, &existence, &ouverture, &unite);
        !          2756: 
        !          2757:                    if ((erreur != d_absence_erreur) || (existence == d_faux))
        !          2758:                    {
        !          2759:                        liberation(s_etat_processus, s_objet_argument);
        !          2760:                        liberation(s_etat_processus, s_objet_resultat);
        !          2761: 
        !          2762:                        (*s_etat_processus).erreur_execution =
        !          2763:                                d_ex_erreur_acces_fichier;
        !          2764:                        return;
        !          2765:                    }
        !          2766: 
        !          2767:                    if ((descripteur = fopen(nom, "r+")) == NULL)
        !          2768:                    {
        !          2769:                        liberation(s_etat_processus, s_objet_argument);
        !          2770:                        liberation(s_etat_processus, s_objet_resultat);
        !          2771: 
        !          2772:                        (*s_etat_processus).erreur_execution =
        !          2773:                                d_ex_erreur_acces_fichier;
        !          2774:                        return;
        !          2775:                    }
        !          2776: 
        !          2777:                    break;
        !          2778:                }
        !          2779: 
        !          2780:                case 'R' :
        !          2781:                {
        !          2782:                    erreur = caracteristiques_fichier(s_etat_processus,
        !          2783:                            nom, &existence, &ouverture, &unite);
        !          2784: 
        !          2785:                    if ((erreur != d_absence_erreur) || (existence == d_faux))
        !          2786:                    {
        !          2787:                        liberation(s_etat_processus, s_objet_argument);
        !          2788:                        liberation(s_etat_processus, s_objet_resultat);
        !          2789: 
        !          2790:                        (*s_etat_processus).erreur_execution =
        !          2791:                                d_ex_erreur_acces_fichier;
        !          2792:                        return;
        !          2793:                    }
        !          2794: 
        !          2795:                    /* Test du verrou */
        !          2796: 
        !          2797:                    if ((descripteur = fopen(nom, "r")) == NULL)
        !          2798:                    {
        !          2799:                        liberation(s_etat_processus, s_objet_argument);
        !          2800:                        liberation(s_etat_processus, s_objet_resultat);
        !          2801: 
        !          2802:                        (*s_etat_processus).erreur_execution =
        !          2803:                                d_ex_erreur_acces_fichier;
        !          2804:                        return;
        !          2805:                    }
        !          2806: 
        !          2807:                    lock.l_type = F_WRLCK;
        !          2808:                    lock.l_whence = SEEK_SET;
        !          2809:                    lock.l_start = 0;
        !          2810:                    lock.l_len = 0;
        !          2811:                    lock.l_pid = getpid();
        !          2812: 
        !          2813:                    if (fcntl(fileno(descripteur), F_GETLK, &lock) == -1)
        !          2814:                    {
        !          2815:                        if (fclose(descripteur) != 0)
        !          2816:                        {
        !          2817:                            liberation(s_etat_processus, s_objet_resultat);
        !          2818: 
        !          2819:                            (*s_etat_processus).erreur_systeme =
        !          2820:                                    d_es_erreur_fichier;
        !          2821:                            return;
        !          2822:                        }
        !          2823: 
        !          2824:                        liberation(s_etat_processus, s_objet_resultat);
        !          2825: 
        !          2826:                        (*s_etat_processus).erreur_systeme =
        !          2827:                                d_es_erreur_fichier;
        !          2828:                        return;
        !          2829:                    }
        !          2830: 
        !          2831:                    if (fclose(descripteur) != 0)
        !          2832:                    {
        !          2833:                        liberation(s_etat_processus, s_objet_resultat);
        !          2834: 
        !          2835:                        (*s_etat_processus).erreur_systeme =
        !          2836:                                d_es_erreur_fichier;
        !          2837:                        return;
        !          2838:                    }
        !          2839: 
        !          2840:                    if ((descripteur = fopen(nom, "w+")) == NULL)
        !          2841:                    {
        !          2842:                        liberation(s_etat_processus, s_objet_argument);
        !          2843:                        liberation(s_etat_processus, s_objet_resultat);
        !          2844: 
        !          2845:                        (*s_etat_processus).erreur_execution =
        !          2846:                                d_ex_erreur_acces_fichier;
        !          2847:                        return;
        !          2848:                    }
        !          2849: 
        !          2850:                    break;
        !          2851:                }
        !          2852: 
        !          2853:                case 'U' :
        !          2854:                {
        !          2855:                    erreur = caracteristiques_fichier(s_etat_processus,
        !          2856:                            nom, &existence, &ouverture, &unite);
        !          2857: 
        !          2858:                    if (erreur == d_erreur)
        !          2859:                    {
        !          2860:                        liberation(s_etat_processus, s_objet_argument);
        !          2861:                        liberation(s_etat_processus, s_objet_resultat);
        !          2862: 
        !          2863:                        (*s_etat_processus).erreur_execution =
        !          2864:                                d_ex_erreur_acces_fichier;
        !          2865:                        return;
        !          2866:                    }
        !          2867: 
        !          2868:                    if (existence == d_faux)
        !          2869:                    {
        !          2870:                        if ((descripteur = fopen(nom, "w+")) == NULL)
        !          2871:                        {
        !          2872:                            liberation(s_etat_processus, s_objet_argument);
        !          2873:                            liberation(s_etat_processus, s_objet_resultat);
        !          2874: 
        !          2875:                            (*s_etat_processus).erreur_execution =
        !          2876:                                    d_ex_erreur_acces_fichier;
        !          2877:                            return;
        !          2878:                        }
        !          2879:                    }
        !          2880:                    else
        !          2881:                    {
        !          2882:                        if ((descripteur = fopen(nom, "r+")) == NULL)
        !          2883:                        {
        !          2884:                            liberation(s_etat_processus, s_objet_argument);
        !          2885:                            liberation(s_etat_processus, s_objet_resultat);
        !          2886: 
        !          2887:                            (*s_etat_processus).erreur_execution =
        !          2888:                                    d_ex_erreur_acces_fichier;
        !          2889:                            return;
        !          2890:                        }
        !          2891:                    }
        !          2892: 
        !          2893:                    break;
        !          2894:                }
        !          2895: 
        !          2896:                case 'S' :
        !          2897:                {
        !          2898:                    erreur = caracteristiques_fichier(s_etat_processus,
        !          2899:                            nom, &existence, &ouverture, &unite);
        !          2900: 
        !          2901:                    if ((erreur != d_absence_erreur) || (existence != d_faux))
        !          2902:                    {
        !          2903:                        liberation(s_etat_processus, s_objet_argument);
        !          2904:                        liberation(s_etat_processus, s_objet_resultat);
        !          2905: 
        !          2906:                        (*s_etat_processus).erreur_execution =
        !          2907:                                d_ex_erreur_acces_fichier;
        !          2908:                        return;
        !          2909:                    }
        !          2910: 
        !          2911:                    if ((descripteur = fopen(nom, "w+")) == NULL)
        !          2912:                    {
        !          2913:                        liberation(s_etat_processus, s_objet_argument);
        !          2914:                        liberation(s_etat_processus, s_objet_resultat);
        !          2915: 
        !          2916:                        (*s_etat_processus).erreur_execution =
        !          2917:                                d_ex_erreur_acces_fichier;
        !          2918:                        return;
        !          2919:                    }
        !          2920: 
        !          2921:                    break;
        !          2922:                }
        !          2923: 
        !          2924:                default:
        !          2925:                {
        !          2926:                    BUG(1, printf("type_ouverture=%c\n", type_ouverture));
        !          2927:                    return;
        !          2928:                }
        !          2929:            }
        !          2930: 
        !          2931:            if (((*((struct_fichier *) (*s_objet_resultat).objet)).nom =
        !          2932:                    malloc((strlen(nom) + 1) *
        !          2933:                    sizeof(unsigned char))) == NULL)
        !          2934:            {
        !          2935:                (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          2936:                return;
        !          2937:            }
        !          2938: 
        !          2939:            strcpy((*((struct_fichier *) (*s_objet_resultat).objet)).nom, nom);
        !          2940:            liberation(s_etat_processus, s_objet_argument);
        !          2941: 
        !          2942:            (*((struct_fichier *) (*s_objet_resultat).objet)).protection =
        !          2943:                    protection;
        !          2944:            (*((struct_fichier *) (*s_objet_resultat).objet)).position_clef =
        !          2945:                    position_clef;
        !          2946:            
        !          2947:            if (autorisation_liberation_nom == d_vrai)
        !          2948:            {
        !          2949:                free(nom);
        !          2950:            }
        !          2951: 
        !          2952:            rewind(descripteur);
        !          2953: 
        !          2954:            lock.l_type = F_WRLCK;
        !          2955:            lock.l_whence = SEEK_SET;
        !          2956:            lock.l_start = 0;
        !          2957:            lock.l_len = 0;
        !          2958:            lock.l_pid = getpid();
        !          2959: 
        !          2960:            if (fcntl(fileno(descripteur), F_GETLK, &lock) == -1)
        !          2961:            {
        !          2962:                if (fclose(descripteur) != 0)
        !          2963:                {
        !          2964:                    liberation(s_etat_processus, s_objet_resultat);
        !          2965: 
        !          2966:                    (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
        !          2967:                    return;
        !          2968:                }
        !          2969: 
        !          2970:                liberation(s_etat_processus, s_objet_resultat);
        !          2971: 
        !          2972:                (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
        !          2973:                return;
        !          2974:            }
        !          2975: 
        !          2976:            if (lock.l_type == F_UNLCK)
        !          2977:            {
        !          2978:                /*
        !          2979:                 * Positionnement d'un verrou exclusif d'écriture par défaut
        !          2980:                 */
        !          2981: 
        !          2982:                lock.l_type = F_RDLCK;
        !          2983:                lock.l_whence = SEEK_SET;
        !          2984:                lock.l_start = 0;
        !          2985:                lock.l_len = 0;
        !          2986:                lock.l_pid = getpid();
        !          2987: 
        !          2988:                if (fcntl(fileno(descripteur), F_SETLK, &lock) == -1)
        !          2989:                {
        !          2990:                    if (fclose(descripteur) != 0)
        !          2991:                    {
        !          2992:                        liberation(s_etat_processus, s_objet_resultat);
        !          2993: 
        !          2994:                        (*s_etat_processus).erreur_systeme =
        !          2995:                                d_es_erreur_fichier;
        !          2996:                        return;
        !          2997:                    }
        !          2998: 
        !          2999:                    liberation(s_etat_processus, s_objet_resultat);
        !          3000: 
        !          3001:                    (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
        !          3002:                    return;
        !          3003:                }
        !          3004:            }
        !          3005:            else
        !          3006:            {
        !          3007:                /*
        !          3008:                 * Test de la cohérence du verrou avec l'option PROTECTION
        !          3009:                 */
        !          3010: 
        !          3011:                if ((lock.l_type == F_RDLCK) && (protection != 'R'))
        !          3012:                {
        !          3013:                    if (fclose(descripteur) != 0)
        !          3014:                    {
        !          3015:                        liberation(s_etat_processus, s_objet_resultat);
        !          3016: 
        !          3017:                        (*s_etat_processus).erreur_systeme =
        !          3018:                                d_es_erreur_fichier;
        !          3019:                        return;
        !          3020:                    }
        !          3021: 
        !          3022:                    liberation(s_etat_processus, s_objet_resultat);
        !          3023: 
        !          3024:                    (*s_etat_processus).erreur_execution =
        !          3025:                            d_ex_fichier_verrouille;
        !          3026:                    return;
        !          3027:                }
        !          3028:                else if ((lock.l_type == F_WRLCK) && (protection != 'W'))
        !          3029:                {
        !          3030:                    if (fclose(descripteur) != 0)
        !          3031:                    {
        !          3032:                        liberation(s_etat_processus, s_objet_resultat);
        !          3033: 
        !          3034:                        (*s_etat_processus).erreur_systeme =
        !          3035:                                d_es_erreur_fichier;
        !          3036:                        return;
        !          3037:                    }
        !          3038: 
        !          3039:                    liberation(s_etat_processus, s_objet_resultat);
        !          3040: 
        !          3041:                    (*s_etat_processus).erreur_execution =
        !          3042:                            d_ex_fichier_verrouille;
        !          3043:                    return;
        !          3044:                }
        !          3045:                else
        !          3046:                {
        !          3047:                    liberation(s_etat_processus, s_objet_resultat);
        !          3048: 
        !          3049:                    (*s_etat_processus).erreur_execution =
        !          3050:                            d_ex_fichier_verrouille;
        !          3051:                    return;
        !          3052:                }
        !          3053:            }
        !          3054: 
        !          3055:            /*
        !          3056:             * Gestion de la liste des fichiers ouverts
        !          3057:             */
        !          3058: 
        !          3059:            l_element_courant = (*s_etat_processus).s_fichiers;
        !          3060: 
        !          3061:            if (l_element_courant == NULL)
        !          3062:            {
        !          3063:                if (((*s_etat_processus).s_fichiers = malloc(sizeof(
        !          3064:                        struct_liste_chainee))) == NULL)
        !          3065:                {
        !          3066:                    (*s_etat_processus).erreur_systeme =
        !          3067:                            d_es_allocation_memoire;
        !          3068:                    return;
        !          3069:                }
        !          3070: 
        !          3071:                (*(*s_etat_processus).s_fichiers).suivant = NULL;
        !          3072: 
        !          3073:                if (((*(*s_etat_processus).s_fichiers).donnee =
        !          3074:                        malloc(sizeof(struct_descripteur_fichier))) == NULL)
        !          3075:                {
        !          3076:                    (*s_etat_processus).erreur_systeme =
        !          3077:                            d_es_allocation_memoire;
        !          3078:                    return;
        !          3079:                }
        !          3080: 
        !          3081:                l_element_courant = (*s_etat_processus).s_fichiers;
        !          3082:                prochain_descripteur = 0;
        !          3083:            }
        !          3084:            else
        !          3085:            {
        !          3086:                /*
        !          3087:                 * Recherche du premier descripteur libre
        !          3088:                 */
        !          3089: 
        !          3090:                if ((chaine_descripteurs = malloc(
        !          3091:                        ds_nombre_maximum_fichiers_ouverts + 1)) == NULL)
        !          3092:                {
        !          3093:                    (*s_etat_processus).erreur_systeme =
        !          3094:                            d_es_allocation_memoire;
        !          3095:                    return;
        !          3096:                }
        !          3097: 
        !          3098:                for(pointeur = chaine_descripteurs, i = 0;
        !          3099:                        i < ds_nombre_maximum_fichiers_ouverts;
        !          3100:                        (*pointeur) = d_code_espace, pointeur++, i++);
        !          3101:                (*pointeur) = d_code_fin_chaine;
        !          3102: 
        !          3103:                do
        !          3104:                {
        !          3105:                    chaine_descripteurs[(*((struct_descripteur_fichier *)
        !          3106:                            (*l_element_courant).donnee)).identifiant] = '-';
        !          3107:                    l_element_courant = (*l_element_courant).suivant;
        !          3108:                } while(l_element_courant != NULL);
        !          3109: 
        !          3110:                i = 0;
        !          3111:                pointeur = chaine_descripteurs;
        !          3112: 
        !          3113:                while(i < ds_nombre_maximum_fichiers_ouverts)
        !          3114:                {
        !          3115:                    if ((*pointeur) == ' ')
        !          3116:                    {
        !          3117:                        break;
        !          3118:                    }
        !          3119: 
        !          3120:                    pointeur++;
        !          3121:                    i++;
        !          3122:                }
        !          3123: 
        !          3124:                free(chaine_descripteurs);
        !          3125: 
        !          3126:                if (i == ds_nombre_maximum_fichiers_ouverts)
        !          3127:                {
        !          3128:                    (*s_etat_processus).erreur_systeme =
        !          3129:                            d_es_nombre_max_descripteurs;
        !          3130:                    return;
        !          3131:                }
        !          3132: 
        !          3133:                prochain_descripteur = i;
        !          3134: 
        !          3135:                /*
        !          3136:                 * Ajout d'un élément à la fin de la liste chaînée
        !          3137:                 */
        !          3138: 
        !          3139:                l_element_courant = (*s_etat_processus).s_fichiers;
        !          3140:                while((*l_element_courant).suivant != NULL)
        !          3141:                {
        !          3142:                    l_element_courant = (*l_element_courant).suivant;
        !          3143:                }
        !          3144: 
        !          3145:                if (((*l_element_courant).suivant =
        !          3146:                        allocation_maillon(s_etat_processus)) == NULL)
        !          3147:                {
        !          3148:                    (*s_etat_processus).erreur_systeme =
        !          3149:                            d_es_allocation_memoire;
        !          3150:                    return;
        !          3151:                }
        !          3152: 
        !          3153:                l_element_courant = (*l_element_courant).suivant;
        !          3154:                (*l_element_courant).suivant = NULL;
        !          3155: 
        !          3156:                if (((*l_element_courant).donnee =
        !          3157:                        malloc(sizeof(struct_descripteur_fichier))) == NULL)
        !          3158:                {
        !          3159:                    (*s_etat_processus).erreur_systeme =
        !          3160:                            d_es_allocation_memoire;
        !          3161:                    return;
        !          3162:                }
        !          3163:            }
        !          3164: 
        !          3165:            (*((struct_fichier *) (*s_objet_resultat).objet)).descripteur
        !          3166:                    = prochain_descripteur;
        !          3167:            (*((struct_descripteur_fichier *) (*l_element_courant).donnee))
        !          3168:                    .identifiant = prochain_descripteur;
        !          3169:            (*((struct_descripteur_fichier *) (*l_element_courant).donnee))
        !          3170:                    .descripteur = descripteur;
        !          3171:            (*((struct_descripteur_fichier *) (*l_element_courant).donnee))
        !          3172:                    .pid = getpid();
        !          3173:            (*((struct_descripteur_fichier *) (*l_element_courant).donnee))
        !          3174:                    .tid = pthread_self();
        !          3175:            (*((struct_descripteur_fichier *) (*l_element_courant).donnee))
        !          3176:                    .effacement = (type_ouverture == 'S') ? 'Y' : 'N';
        !          3177: 
        !          3178:            if (((*((struct_descripteur_fichier *) (*l_element_courant)
        !          3179:                    .donnee)).nom = malloc((strlen((*((struct_fichier *)
        !          3180:                    (*s_objet_resultat).objet)).nom) + 1) *
        !          3181:                    sizeof(unsigned char))) == NULL)
        !          3182:            {
        !          3183:                (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          3184:                return;
        !          3185:            }
        !          3186: 
        !          3187:            strcpy((*((struct_descripteur_fichier *) (*l_element_courant)
        !          3188:                    .donnee)).nom, (*((struct_fichier *) (*s_objet_resultat)
        !          3189:                    .objet)).nom);
        !          3190: 
        !          3191:        }
        !          3192:        else if (type_arguments == 'S')
        !          3193:        {
        !          3194:            /*
        !          3195:             * Traitement des sockets
        !          3196:             */
        !          3197: 
        !          3198: 
        !          3199:            inline logical1 options_socket()
        !          3200:            {
        !          3201:                /*
        !          3202:                 * Options des sockets
        !          3203:                 */
        !          3204: 
        !          3205: #              define WARNING(message) \
        !          3206:                if ((*s_etat_processus).langue != 'F') \
        !          3207:                    printf("+++Warning : %s unavailable on host system\n", \
        !          3208:                            message); \
        !          3209:                else \
        !          3210:                    printf("+++Attention : %s non disponible sur le système " \
        !          3211:                            "hôte\n", message)
        !          3212: 
        !          3213:                if (options[d_BIND_TO_DEVICE] == 'Y')
        !          3214:                {
        !          3215: #                  ifdef SO_BINDTODEVICE
        !          3216:                        if (setsockopt((*((struct_socket *) (*s_objet_resultat)
        !          3217:                                .objet)).socket, SOL_SOCKET, SO_BINDTODEVICE,
        !          3218:                                peripherique, strlen(peripherique)) != 0)
        !          3219:                        {
        !          3220:                            liberation(s_etat_processus, s_objet_argument);
        !          3221:                            liberation(s_etat_processus, s_objet_resultat);
        !          3222: 
        !          3223:                            (*s_etat_processus).erreur_execution =
        !          3224:                                    d_ex_erreur_parametre_fichier;
        !          3225:                            return(d_erreur);
        !          3226:                        }
        !          3227: #                  else
        !          3228:                        WARNING("BIND TO DEVICE");
        !          3229: #                  endif
        !          3230:                }
        !          3231: 
        !          3232:                if (options[d_BROADCAST] == 'Y')
        !          3233:                {
        !          3234:                    if (setsockopt((*((struct_socket *) (*s_objet_resultat)
        !          3235:                            .objet)).socket, SOL_SOCKET, SO_BROADCAST,
        !          3236:                            &drapeau, sizeof(drapeau)) != 0)
        !          3237:                    {
        !          3238:                        liberation(s_etat_processus, s_objet_argument);
        !          3239:                        liberation(s_etat_processus, s_objet_resultat);
        !          3240: 
        !          3241:                        (*s_etat_processus).erreur_execution =
        !          3242:                                d_ex_erreur_parametre_fichier;
        !          3243:                        return(d_erreur);
        !          3244:                    }
        !          3245:                }
        !          3246: 
        !          3247:                if (options[d_DONT_ROUTE] == 'Y')
        !          3248:                {
        !          3249:                    if (setsockopt((*((struct_socket *) (*s_objet_resultat)
        !          3250:                            .objet)).socket, SOL_SOCKET, SO_DONTROUTE,
        !          3251:                            &drapeau, sizeof(drapeau)) != 0)
        !          3252:                    {
        !          3253:                        liberation(s_etat_processus, s_objet_argument);
        !          3254:                        liberation(s_etat_processus, s_objet_resultat);
        !          3255: 
        !          3256:                        (*s_etat_processus).erreur_execution =
        !          3257:                                d_ex_erreur_parametre_fichier;
        !          3258:                        return(d_erreur);
        !          3259:                    }
        !          3260:                }
        !          3261: 
        !          3262:                if (options[d_KEEP_ALIVE] == 'Y')
        !          3263:                {
        !          3264:                    if (setsockopt((*((struct_socket *) (*s_objet_resultat)
        !          3265:                            .objet)).socket, SOL_SOCKET, SO_KEEPALIVE,
        !          3266:                            &drapeau, sizeof(drapeau)) != 0)
        !          3267:                    {
        !          3268:                        liberation(s_etat_processus, s_objet_argument);
        !          3269:                        liberation(s_etat_processus, s_objet_resultat);
        !          3270: 
        !          3271:                        (*s_etat_processus).erreur_execution =
        !          3272:                                d_ex_erreur_parametre_fichier;
        !          3273:                        return(d_erreur);
        !          3274:                    }
        !          3275:                }
        !          3276: 
        !          3277:                if (options[d_PRIORITY] == 'Y')
        !          3278:                {
        !          3279: #                  ifdef SO_PRIORITY
        !          3280:                        if (setsockopt((*((struct_socket *) (*s_objet_resultat)
        !          3281:                                .objet)).socket, SOL_SOCKET, SO_PRIORITY,
        !          3282:                                &priorite, sizeof(priorite)) != 0)
        !          3283:                        {
        !          3284:                            liberation(s_etat_processus, s_objet_argument);
        !          3285:                            liberation(s_etat_processus, s_objet_resultat);
        !          3286: 
        !          3287:                            (*s_etat_processus).erreur_execution =
        !          3288:                                    d_ex_erreur_parametre_fichier;
        !          3289:                            return(d_erreur);
        !          3290:                        }
        !          3291: #                  else
        !          3292:                        WARNING("PRIORITY");
        !          3293: #                  endif
        !          3294:                }
        !          3295: 
        !          3296:                if (options[d_RECEIVE_BUFFER] == 'Y')
        !          3297:                {
        !          3298:                    if (setsockopt((*((struct_socket *) (*s_objet_resultat)
        !          3299:                            .objet)).socket, SOL_SOCKET, SO_RCVBUF,
        !          3300:                            &buffer_reception, sizeof(buffer_reception)) != 0)
        !          3301:                    {
        !          3302:                        liberation(s_etat_processus, s_objet_argument);
        !          3303:                        liberation(s_etat_processus, s_objet_resultat);
        !          3304: 
        !          3305:                        (*s_etat_processus).erreur_execution =
        !          3306:                                d_ex_erreur_parametre_fichier;
        !          3307:                        return(d_erreur);
        !          3308:                    }
        !          3309:                }
        !          3310: 
        !          3311:                if (options[d_FORCE_RECEIVE_BUFFER] == 'Y')
        !          3312:                {
        !          3313: #                  ifdef SO_RCVBUFFORCE
        !          3314:                        if (setsockopt((*((struct_socket *) (*s_objet_resultat)
        !          3315:                                .objet)).socket, SOL_SOCKET, SO_RCVBUFFORCE,
        !          3316:                                &buffer_reception, sizeof(buffer_reception))
        !          3317:                                != 0)
        !          3318:                        {
        !          3319:                            liberation(s_etat_processus, s_objet_argument);
        !          3320:                            liberation(s_etat_processus, s_objet_resultat);
        !          3321: 
        !          3322:                            (*s_etat_processus).erreur_execution =
        !          3323:                                    d_ex_erreur_parametre_fichier;
        !          3324:                            return(d_erreur);
        !          3325:                        }
        !          3326: #                  else
        !          3327:                        WARNING("FORCE_RECEIVE_BUFFER");
        !          3328: #                  endif
        !          3329:                }
        !          3330: 
        !          3331:                if (options[d_SEND_BUFFER] == 'Y')
        !          3332:                {
        !          3333:                    if (setsockopt((*((struct_socket *) (*s_objet_resultat)
        !          3334:                            .objet)).socket, SOL_SOCKET, SO_SNDBUF,
        !          3335:                            &buffer_emission, sizeof(buffer_emission)) != 0)
        !          3336:                    {
        !          3337:                        liberation(s_etat_processus, s_objet_argument);
        !          3338:                        liberation(s_etat_processus, s_objet_resultat);
        !          3339: 
        !          3340:                        (*s_etat_processus).erreur_execution =
        !          3341:                                d_ex_erreur_parametre_fichier;
        !          3342:                        return(d_erreur);
        !          3343:                    }
        !          3344:                }
        !          3345: 
        !          3346:                if (options[d_FORCE_SEND_BUFFER] == 'Y')
        !          3347:                {
        !          3348: #                  ifdef SO_SNDBUFFORCE
        !          3349:                        if (setsockopt((*((struct_socket *) (*s_objet_resultat)
        !          3350:                                .objet)).socket, SOL_SOCKET, SO_SNDBUFFORCE,
        !          3351:                                &buffer_emission, sizeof(buffer_emission)) != 0)
        !          3352:                        {
        !          3353:                            liberation(s_etat_processus, s_objet_argument);
        !          3354:                            liberation(s_etat_processus, s_objet_resultat);
        !          3355: 
        !          3356:                            (*s_etat_processus).erreur_execution =
        !          3357:                                    d_ex_erreur_parametre_fichier;
        !          3358:                            return(d_erreur);
        !          3359:                        }
        !          3360: #                  else
        !          3361:                        WARNING("FORCE_SEND_BUFFER");
        !          3362: #                  endif
        !          3363:                }
        !          3364: 
        !          3365:                if (options[d_RECEIVING_TIMEOUT] == 'Y')
        !          3366:                {
        !          3367:                    if (setsockopt((*((struct_socket *) (*s_objet_resultat)
        !          3368:                            .objet)).socket, SOL_SOCKET, SO_RCVTIMEO,
        !          3369:                            &timeout_reception, sizeof(timeout_reception)) != 0)
        !          3370:                    {
        !          3371:                        liberation(s_etat_processus, s_objet_argument);
        !          3372:                        liberation(s_etat_processus, s_objet_resultat);
        !          3373: 
        !          3374:                        (*s_etat_processus).erreur_execution =
        !          3375:                                d_ex_erreur_parametre_fichier;
        !          3376:                        return(d_erreur);
        !          3377:                    }
        !          3378:                }
        !          3379: 
        !          3380:                if (options[d_SENDING_TIMEOUT] == 'Y')
        !          3381:                {
        !          3382:                    if (setsockopt((*((struct_socket *) (*s_objet_resultat)
        !          3383:                            .objet)).socket, SOL_SOCKET, SO_SNDTIMEO,
        !          3384:                            &timeout_emission, sizeof(timeout_emission)) != 0)
        !          3385:                    {
        !          3386:                        liberation(s_etat_processus, s_objet_argument);
        !          3387:                        liberation(s_etat_processus, s_objet_resultat);
        !          3388: 
        !          3389:                        (*s_etat_processus).erreur_execution =
        !          3390:                                d_ex_erreur_parametre_fichier;
        !          3391:                        return(d_erreur);
        !          3392:                    }
        !          3393:                }
        !          3394: 
        !          3395:                if (options[d_REUSE_ADDRESS] == 'Y')
        !          3396:                {
        !          3397:                    if (setsockopt((*((struct_socket *) (*s_objet_resultat)
        !          3398:                            .objet)).socket, SOL_SOCKET, SO_REUSEADDR,
        !          3399:                            &drapeau, sizeof(drapeau)) != 0)
        !          3400:                    {
        !          3401:                        liberation(s_etat_processus, s_objet_argument);
        !          3402:                        liberation(s_etat_processus, s_objet_resultat);
        !          3403: 
        !          3404:                        (*s_etat_processus).erreur_execution =
        !          3405:                                d_ex_erreur_parametre_fichier;
        !          3406:                        return(d_erreur);
        !          3407:                    }
        !          3408:                }
        !          3409: 
        !          3410:                return(d_absence_erreur);
        !          3411: #undef         WARNING
        !          3412:            }
        !          3413: 
        !          3414:            /*
        !          3415:             * Vérification de la cohérence des arguments et traitement
        !          3416:             * des valeurs par défaut.
        !          3417:             */
        !          3418: 
        !          3419:            if (format == ' ')
        !          3420:            {
        !          3421:                format = 'N';
        !          3422:            }
        !          3423: 
        !          3424:            if (protection == ' ')
        !          3425:            {
        !          3426:                protection = 'N';
        !          3427:            }
        !          3428: 
        !          3429:            if (type_domaine == ' ')
        !          3430:            {
        !          3431:                type_domaine = 'L';
        !          3432:            }
        !          3433: 
        !          3434:            if (type_socket == ' ')
        !          3435:            {
        !          3436:                type_socket = 'S';
        !          3437:                type = SOCK_STREAM;
        !          3438:            }
        !          3439: 
        !          3440:            if (nom != NULL)
        !          3441:            {
        !          3442:                if (strcmp(protocole, "") == 0)
        !          3443:                {
        !          3444:                    strcpy(protocole, "UNIX");
        !          3445:                }
        !          3446:            }
        !          3447:            else
        !          3448:            {
        !          3449:                if (strcmp(protocole, "") == 0)
        !          3450:                {
        !          3451:                    strcpy(protocole, "IPV4");
        !          3452:                }
        !          3453:            }
        !          3454: 
        !          3455:            if ((nom != NULL) && (hote != NULL))
        !          3456:            {
        !          3457:                liberation(s_etat_processus, s_objet_argument);
        !          3458: 
        !          3459:                (*s_etat_processus).erreur_execution =
        !          3460:                        d_ex_erreur_parametre_fichier;
        !          3461:                return;
        !          3462:            }
        !          3463: 
        !          3464:            if ((nom != NULL) && (strcmp(protocole, "UNIX") != 0))
        !          3465:            {
        !          3466:                liberation(s_etat_processus, s_objet_argument);
        !          3467: 
        !          3468:                (*s_etat_processus).erreur_execution =
        !          3469:                        d_ex_erreur_parametre_fichier;
        !          3470:                return;
        !          3471:            }
        !          3472: 
        !          3473:            if ((hote != NULL) && (strcmp(protocole, "UNIX") == 0))
        !          3474:            {
        !          3475:                liberation(s_etat_processus, s_objet_argument);
        !          3476: 
        !          3477:                (*s_etat_processus).erreur_execution =
        !          3478:                        d_ex_erreur_parametre_fichier;
        !          3479:                return;
        !          3480:            }
        !          3481: 
        !          3482:            if ((nom != NULL) && (type_domaine == 'F') && (type_adresse != ' '))
        !          3483:            {
        !          3484:                liberation(s_etat_processus, s_objet_argument);
        !          3485: 
        !          3486:                (*s_etat_processus).erreur_execution =
        !          3487:                        d_ex_erreur_parametre_fichier;
        !          3488:                return;
        !          3489:            }
        !          3490: 
        !          3491:            if ((presence_port == d_vrai) && (nom != NULL))
        !          3492:            {
        !          3493:                liberation(s_etat_processus, s_objet_argument);
        !          3494: 
        !          3495:                (*s_etat_processus).erreur_execution =
        !          3496:                        d_ex_erreur_parametre_fichier;
        !          3497:                return;
        !          3498:            }
        !          3499: 
        !          3500:            if (((strcmp(protocole, "IPV4") == 0) && (type_adresse == '6')) ||
        !          3501:                    ((strcmp(protocole, "IPV6") == 0) && (type_adresse == '4')))
        !          3502:            {
        !          3503:                liberation(s_etat_processus, s_objet_argument);
        !          3504: 
        !          3505:                (*s_etat_processus).erreur_execution =
        !          3506:                        d_ex_erreur_parametre_fichier;
        !          3507:                return;
        !          3508:            }
        !          3509: 
        !          3510:            if ((nombre_maximal_connexions != 0) && ((type_socket != 'S') &&
        !          3511:                    (type_socket != 'Q')))
        !          3512:            {
        !          3513:                liberation(s_etat_processus, s_objet_argument);
        !          3514: 
        !          3515:                (*s_etat_processus).erreur_execution =
        !          3516:                        d_ex_erreur_parametre_fichier;
        !          3517:                return;
        !          3518:            }
        !          3519: 
        !          3520:            if (nombre_maximal_connexions == 0)
        !          3521:            {
        !          3522:                nombre_maximal_connexions = 1;
        !          3523:            }
        !          3524: 
        !          3525:            if (protocole_socket == NULL)
        !          3526:            {
        !          3527:                protocole_numerique = 0;
        !          3528:            }
        !          3529:            else
        !          3530:            {
        !          3531:                for(i = 0; i < strlen(protocole_socket); i++)
        !          3532:                {
        !          3533:                    if ((protocole_socket[i] >= 'A') &&
        !          3534:                            (protocole_socket[i] <= 'Z'))
        !          3535:                    {
        !          3536:                        protocole_socket[i] += 'a' - 'A';
        !          3537:                    }
        !          3538:                }
        !          3539: 
        !          3540:                if (strcmp(protocole_socket, "ipv4") == 0)
        !          3541:                {
        !          3542:                    protocole_socket[2] = d_code_fin_chaine;
        !          3543:                }
        !          3544: 
        !          3545:                if ((s_protocole = getprotobyname(protocole_socket)) == NULL)
        !          3546:                {
        !          3547:                    liberation(s_etat_processus, s_objet_argument);
        !          3548: 
        !          3549:                    (*s_etat_processus).erreur_execution =
        !          3550:                            d_ex_erreur_parametre_fichier;
        !          3551:                    return;
        !          3552:                }
        !          3553: 
        !          3554:                protocole_numerique = (*s_protocole).p_proto;
        !          3555:            }
        !          3556: 
        !          3557:            if ((s_objet_resultat = allocation(s_etat_processus, SCK))
        !          3558:                    == NULL)
        !          3559:            {
        !          3560:                (*s_etat_processus).erreur_systeme =
        !          3561:                        d_es_allocation_memoire;
        !          3562:                return;
        !          3563:            }
        !          3564: 
        !          3565:            if (((*((struct_socket *) (*s_objet_resultat).objet)).format =
        !          3566:                    allocation(s_etat_processus, LST)) == NULL)
        !          3567:            {
        !          3568:                (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          3569:                return;
        !          3570:            }
        !          3571: 
        !          3572:            (*((struct_socket *) (*s_objet_resultat).objet)).protection
        !          3573:                    = protection;
        !          3574:            (*(*((struct_socket *) (*s_objet_resultat).objet))
        !          3575:                    .format).objet = NULL;
        !          3576: 
        !          3577:            switch(type_socket)
        !          3578:            {
        !          3579:                case 'S' :
        !          3580:                    type = SOCK_STREAM;
        !          3581:                    strcpy((*((struct_socket *) (*s_objet_resultat).objet)).
        !          3582:                            type, "STREAM");
        !          3583:                    break;
        !          3584: 
        !          3585:                case 'D' :
        !          3586:                    type = SOCK_DGRAM;
        !          3587:                    strcpy((*((struct_socket *) (*s_objet_resultat).objet)).
        !          3588:                            type, "DATAGRAM");
        !          3589:                    break;
        !          3590: 
        !          3591:                case 'Q' :
        !          3592:                    strcpy((*((struct_socket *) (*s_objet_resultat).objet)).
        !          3593:                            type, "SEQUENTIAL DATAGRAM");
        !          3594:                    type = SOCK_SEQPACKET;
        !          3595:                    break;
        !          3596: 
        !          3597:                case 'R' :
        !          3598:                    type = SOCK_RAW;
        !          3599:                    strcpy((*((struct_socket *) (*s_objet_resultat).objet)).
        !          3600:                            type, "RAW");
        !          3601:                    break;
        !          3602: 
        !          3603:                case 'M' :
        !          3604:                    type = SOCK_RDM;
        !          3605:                    strcpy((*((struct_socket *) (*s_objet_resultat).objet)).
        !          3606:                            type, "ROBUST DATAGRAM");
        !          3607:                    break;
        !          3608:            }
        !          3609: 
        !          3610:            if ((protection != 'N') && ((type_socket != 'S') &&
        !          3611:                    (type_socket != 'Q')))
        !          3612:            {
        !          3613:                liberation(s_etat_processus, s_objet_argument);
        !          3614:                liberation(s_etat_processus, s_objet_resultat);
        !          3615: 
        !          3616:                (*s_etat_processus).erreur_execution =
        !          3617:                        d_ex_erreur_parametre_fichier;
        !          3618:                return;
        !          3619:            }
        !          3620: 
        !          3621:            if (nom == NULL)
        !          3622:            {
        !          3623:                if (((*((struct_socket *) (*s_objet_resultat).objet)).adresse =
        !          3624:                        malloc(sizeof(unsigned char))) == NULL)
        !          3625:                {
        !          3626:                    (*s_etat_processus).erreur_systeme =
        !          3627:                            d_es_allocation_memoire;
        !          3628:                    return;
        !          3629:                }
        !          3630: 
        !          3631:                strcpy((*((struct_socket *) (*s_objet_resultat).objet)).adresse,
        !          3632:                        "");
        !          3633:            }
        !          3634:            else
        !          3635:            {
        !          3636:                if (((*((struct_socket *) (*s_objet_resultat).objet)).adresse =
        !          3637:                        malloc((strlen(nom) + 1) * sizeof(unsigned char)))
        !          3638:                        == NULL)
        !          3639:                {
        !          3640:                    (*s_etat_processus).erreur_systeme =
        !          3641:                            d_es_allocation_memoire;
        !          3642:                    return;
        !          3643:                }
        !          3644: 
        !          3645:                strcpy((*((struct_socket *) (*s_objet_resultat).objet)).adresse,
        !          3646:                        nom);
        !          3647:            }
        !          3648: 
        !          3649:            if (((*((struct_socket *) (*s_objet_resultat).objet))
        !          3650:                    .adresse_distante = malloc(sizeof(unsigned char))) == NULL)
        !          3651:            {
        !          3652:                (*s_etat_processus).erreur_systeme =
        !          3653:                        d_es_allocation_memoire;
        !          3654:                return;
        !          3655:            }
        !          3656: 
        !          3657:            strcpy((*((struct_socket *) (*s_objet_resultat).objet))
        !          3658:                    .adresse_distante, "");
        !          3659: 
        !          3660:            (*((struct_socket *) (*s_objet_resultat).objet)).localisation =
        !          3661:                    type_domaine;
        !          3662:            (*((struct_socket *) (*s_objet_resultat).objet)).binaire =
        !          3663:                    format;
        !          3664:            (*((struct_socket *) (*s_objet_resultat).objet)).pid =
        !          3665:                    getpid();
        !          3666:            (*((struct_socket *) (*s_objet_resultat).objet)).tid =
        !          3667:                    pthread_self();
        !          3668:            (*((struct_socket *) (*s_objet_resultat).objet)).socket_en_ecoute
        !          3669:                    = 'Y';
        !          3670:            (*((struct_socket *) (*s_objet_resultat).objet)).socket_connectee
        !          3671:                    = d_faux;
        !          3672: 
        !          3673:            if (type_domaine == 'L')
        !          3674:            { // Socket serveur
        !          3675:                if (nom != NULL)
        !          3676:                {
        !          3677:                    /*
        !          3678:                     * La socket locale est dans l'espace des noms.
        !          3679:                     */
        !          3680: 
        !          3681:                    if (((*((struct_socket *) (*s_objet_resultat).objet))
        !          3682:                            .socket = socket(PF_UNIX, type,
        !          3683:                            protocole_numerique)) == -1)
        !          3684:                    {
        !          3685:                        liberation(s_etat_processus, s_objet_argument);
        !          3686:                        liberation(s_etat_processus, s_objet_resultat);
        !          3687: 
        !          3688:                        (*s_etat_processus).erreur_execution =
        !          3689:                                d_ex_erreur_acces_fichier;
        !          3690:                        return;
        !          3691:                    }
        !          3692: 
        !          3693:                    (*((struct_socket *) (*s_objet_resultat).objet)).domaine
        !          3694:                            = PF_UNIX;
        !          3695:                    (*((struct_socket *) (*s_objet_resultat).objet)).effacement
        !          3696:                            = 'Y';
        !          3697: 
        !          3698:                    socket_unix.sun_family = AF_UNIX;
        !          3699: 
        !          3700:                    pointeur = (*((struct_socket *)
        !          3701:                            (*s_objet_resultat).objet)).adresse;
        !          3702: 
        !          3703:                    while((*pointeur) == d_code_espace)
        !          3704:                    {
        !          3705:                        pointeur++;
        !          3706:                    }
        !          3707: 
        !          3708:                    strncpy(socket_unix.sun_path, pointeur, 108);
        !          3709:                    socket_unix.sun_path[108 - 1] = d_code_fin_chaine;
        !          3710: 
        !          3711:                    if (options_socket() == d_erreur)
        !          3712:                    {
        !          3713:                        liberation(s_etat_processus, s_objet_argument);
        !          3714:                        liberation(s_etat_processus, s_objet_resultat);
        !          3715: 
        !          3716:                        return;
        !          3717:                    }
        !          3718: 
        !          3719:                    if (bind((*((struct_socket *) (*s_objet_resultat).objet))
        !          3720:                            .socket, (const struct sockaddr *) &socket_unix,
        !          3721:                            sizeof(socket_unix)) != 0)
        !          3722:                    {
        !          3723:                        liberation(s_etat_processus, s_objet_argument);
        !          3724:                        liberation(s_etat_processus, s_objet_resultat);
        !          3725: 
        !          3726:                        (*s_etat_processus).erreur_execution =
        !          3727:                                d_ex_erreur_acces_fichier;
        !          3728:                        return;
        !          3729:                    }
        !          3730:                }
        !          3731:                else
        !          3732:                {
        !          3733:                    /*
        !          3734:                     * La socket est une socket réseau locale. L'adresse
        !          3735:                     * passée en argument est l'adresse sur laquelle
        !          3736:                     * cette socket est à l'écoute.
        !          3737:                     */
        !          3738: 
        !          3739:                    (*((struct_socket *) (*s_objet_resultat).objet)).effacement
        !          3740:                            = 'N';
        !          3741: 
        !          3742:                    if (hote != NULL)
        !          3743:                    { // Hôte défini par un nom
        !          3744:                        resolution = NULL;
        !          3745: 
        !          3746:                        if (getaddrinfo(hote, NULL, NULL, &resolution) != 0) 
        !          3747:                        {
        !          3748:                            liberation(s_etat_processus, s_objet_argument);
        !          3749:                            liberation(s_etat_processus, s_objet_resultat);
        !          3750: 
        !          3751:                            if (resolution != NULL)
        !          3752:                            {
        !          3753:                                freeaddrinfo(resolution);
        !          3754:                            }
        !          3755: 
        !          3756:                            (*s_etat_processus).erreur_execution =
        !          3757:                                    d_ex_erreur_acces_fichier;
        !          3758:                            return;
        !          3759:                        }
        !          3760: 
        !          3761:                        if (strcmp(protocole, "IPV4") == 0)
        !          3762:                        { // Accès en IPv4
        !          3763:                            resolution_courante = resolution;
        !          3764: 
        !          3765:                            while(resolution_courante != NULL)
        !          3766:                            {
        !          3767:                                if ((*resolution_courante).ai_family ==
        !          3768:                                        AF_INET)
        !          3769:                                {
        !          3770:                                    break;
        !          3771:                                }
        !          3772: 
        !          3773:                                resolution_courante = (*resolution_courante)
        !          3774:                                        .ai_next;
        !          3775:                            }
        !          3776: 
        !          3777:                            if (resolution_courante == NULL)
        !          3778:                            {
        !          3779:                                liberation(s_etat_processus, s_objet_argument);
        !          3780:                                liberation(s_etat_processus, s_objet_resultat);
        !          3781: 
        !          3782:                                freeaddrinfo(resolution);
        !          3783: 
        !          3784:                                (*s_etat_processus).erreur_execution =
        !          3785:                                        d_ex_erreur_acces_fichier;
        !          3786:                                return;
        !          3787:                            }
        !          3788: 
        !          3789:                            if (((*((struct_socket *)
        !          3790:                                    (*s_objet_resultat).objet))
        !          3791:                                    .socket = socket(PF_INET, type,
        !          3792:                                    protocole_numerique)) == -1)
        !          3793:                            {
        !          3794:                                liberation(s_etat_processus, s_objet_argument);
        !          3795:                                liberation(s_etat_processus, s_objet_resultat);
        !          3796: 
        !          3797:                                freeaddrinfo(resolution);
        !          3798: 
        !          3799:                                (*s_etat_processus).erreur_execution =
        !          3800:                                        d_ex_erreur_acces_fichier;
        !          3801:                                return;
        !          3802:                            }
        !          3803: 
        !          3804:                            (*((struct_socket *) (*s_objet_resultat).objet))
        !          3805:                                    .domaine = PF_INET;
        !          3806: 
        !          3807:                            memset(&socket_ipv4, 0, sizeof(socket_ipv4));
        !          3808:                            socket_ipv4.sin_family = AF_INET;
        !          3809:                            socket_ipv4.sin_port = htons((uint16_t) port);
        !          3810:                            socket_ipv4.sin_addr.s_addr =
        !          3811:                                    (*((struct sockaddr_in *)
        !          3812:                                    (*resolution_courante).ai_addr))
        !          3813:                                    .sin_addr.s_addr;
        !          3814: 
        !          3815:                            if (options_socket() == d_erreur)
        !          3816:                            {
        !          3817:                                liberation(s_etat_processus, s_objet_argument);
        !          3818:                                liberation(s_etat_processus, s_objet_resultat);
        !          3819: 
        !          3820:                                freeaddrinfo(resolution);
        !          3821:                                return;
        !          3822:                            }
        !          3823: 
        !          3824:                            if (bind((*((struct_socket *) (*s_objet_resultat)
        !          3825:                                    .objet)).socket, (const struct sockaddr *)
        !          3826:                                    &socket_ipv4, sizeof(socket_ipv4)) != 0)
        !          3827:                            {
        !          3828:                                liberation(s_etat_processus, s_objet_argument);
        !          3829:                                liberation(s_etat_processus, s_objet_resultat);
        !          3830: 
        !          3831:                                freeaddrinfo(resolution);
        !          3832: 
        !          3833:                                (*s_etat_processus).erreur_execution =
        !          3834:                                        d_ex_erreur_acces_fichier;
        !          3835:                                return;
        !          3836:                            }
        !          3837: 
        !          3838:                            if (((*((struct_socket *) (*s_objet_resultat)
        !          3839:                                    .objet)).adresse = malloc(22 *
        !          3840:                                    sizeof(unsigned char))) == NULL)
        !          3841:                            {
        !          3842:                                (*s_etat_processus).erreur_systeme =
        !          3843:                                        d_es_allocation_memoire;
        !          3844:                                return;
        !          3845:                            }
        !          3846: 
        !          3847:                            sprintf((*((struct_socket *) (*s_objet_resultat)
        !          3848:                                    .objet)).adresse, "%d.%d.%d.%d",
        !          3849:                                    (ntohl((*((struct sockaddr_in *)
        !          3850:                                    (*resolution_courante).ai_addr)).sin_addr
        !          3851:                                    .s_addr) >> 24) & 0xFF,
        !          3852:                                    (ntohl((*((struct sockaddr_in *)
        !          3853:                                    (*resolution_courante).ai_addr)).sin_addr
        !          3854:                                    .s_addr) >> 16) & 0xFF,
        !          3855:                                    (ntohl((*((struct sockaddr_in *)
        !          3856:                                    (*resolution_courante).ai_addr)).sin_addr
        !          3857:                                    .s_addr) >> 8) & 0xFF,
        !          3858:                                    ntohl((*((struct sockaddr_in *)
        !          3859:                                    (*resolution_courante).ai_addr)).sin_addr
        !          3860:                                    .s_addr) & 0xFF);
        !          3861:                        }
        !          3862:                        else
        !          3863:                        { // Accès en IPv6
        !          3864:                            resolution_courante = resolution;
        !          3865: 
        !          3866:                            while(resolution_courante != NULL)
        !          3867:                            {
        !          3868:                                if ((*resolution_courante).ai_family ==
        !          3869:                                        AF_INET6)
        !          3870:                                {
        !          3871:                                    break;
        !          3872:                                }
        !          3873: 
        !          3874:                                resolution_courante = (*resolution_courante)
        !          3875:                                        .ai_next;
        !          3876:                            }
        !          3877: 
        !          3878:                            if (resolution_courante == NULL)
        !          3879:                            {
        !          3880:                                liberation(s_etat_processus, s_objet_argument);
        !          3881:                                liberation(s_etat_processus, s_objet_resultat);
        !          3882: 
        !          3883:                                freeaddrinfo(resolution);
        !          3884: 
        !          3885:                                (*s_etat_processus).erreur_execution =
        !          3886:                                        d_ex_erreur_acces_fichier;
        !          3887:                                return;
        !          3888:                            }
        !          3889: 
        !          3890:                            if (((*((struct_socket *)
        !          3891:                                    (*s_objet_resultat).objet))
        !          3892:                                    .socket = socket(PF_INET6, type,
        !          3893:                                    protocole_numerique)) == -1)
        !          3894:                            {
        !          3895:                                liberation(s_etat_processus, s_objet_argument);
        !          3896:                                liberation(s_etat_processus, s_objet_resultat);
        !          3897: 
        !          3898:                                freeaddrinfo(resolution);
        !          3899: 
        !          3900:                                (*s_etat_processus).erreur_execution =
        !          3901:                                        d_ex_erreur_acces_fichier;
        !          3902:                                return;
        !          3903:                            }
        !          3904: 
        !          3905:                            (*((struct_socket *) (*s_objet_resultat).objet))
        !          3906:                                    .domaine = PF_INET6;
        !          3907: 
        !          3908:                            memset(&socket_ipv6, 0, sizeof(socket_ipv6));
        !          3909:                            socket_ipv6.sin6_family = AF_INET6;
        !          3910:                            socket_ipv6.sin6_port = htons((uint16_t) port);
        !          3911: 
        !          3912:                            for(i = 0; i < 16;
        !          3913:                                    socket_ipv6.sin6_addr.s6_addr[i] =
        !          3914:                                    (*((struct sockaddr_in6 *)
        !          3915:                                    (*resolution_courante).ai_addr))
        !          3916:                                    .sin6_addr.s6_addr[i], i++);
        !          3917: 
        !          3918:                            if (options_socket() == d_erreur)
        !          3919:                            {
        !          3920:                                liberation(s_etat_processus, s_objet_argument);
        !          3921:                                liberation(s_etat_processus, s_objet_resultat);
        !          3922: 
        !          3923:                                freeaddrinfo(resolution);
        !          3924:                                return;
        !          3925:                            }
        !          3926: 
        !          3927:                            if (bind((*((struct_socket *) (*s_objet_resultat)
        !          3928:                                    .objet)).socket, (const struct sockaddr *)
        !          3929:                                    &socket_ipv6, sizeof(socket_ipv6)) != 0)
        !          3930:                            {
        !          3931:                                liberation(s_etat_processus, s_objet_argument);
        !          3932:                                liberation(s_etat_processus, s_objet_resultat);
        !          3933: 
        !          3934:                                freeaddrinfo(resolution);
        !          3935: 
        !          3936:                                (*s_etat_processus).erreur_execution =
        !          3937:                                        d_ex_erreur_acces_fichier;
        !          3938:                                return;
        !          3939:                            }
        !          3940: 
        !          3941:                            if (((*((struct_socket *) (*s_objet_resultat)
        !          3942:                                    .objet)).adresse = malloc(55 *
        !          3943:                                    sizeof(unsigned char))) == NULL)
        !          3944:                            {
        !          3945:                                (*s_etat_processus).erreur_systeme =
        !          3946:                                        d_es_allocation_memoire;
        !          3947:                                return;
        !          3948:                            }
        !          3949: 
        !          3950:                            for(i = 0; i < 16; i++)
        !          3951:                            {
        !          3952:                                sprintf((*((struct_socket *) (*s_objet_resultat)
        !          3953:                                        .objet)).adresse,
        !          3954:                                        (i == 0) ? "%s%X" : "%s:%X",
        !          3955:                                        (*((struct_socket *) (*s_objet_resultat)
        !          3956:                                        .objet)).adresse,
        !          3957:                                        (*((struct sockaddr_in6 *)
        !          3958:                                        (*resolution_courante).ai_addr))
        !          3959:                                        .sin6_addr.s6_addr[i]);
        !          3960:                            }
        !          3961:                        }
        !          3962: 
        !          3963:                        freeaddrinfo(resolution);
        !          3964: 
        !          3965:                        sprintf((*((struct_socket *) (*s_objet_resultat)
        !          3966:                                .objet)).adresse, "%s(%u)",
        !          3967:                                (*((struct_socket *) (*s_objet_resultat)
        !          3968:                                .objet)).adresse, (unsigned int) port);
        !          3969:                    }
        !          3970:                    else
        !          3971:                    { // Hôte défini par une adresse
        !          3972:                        if (strcmp(protocole, "IPV4") == 0)
        !          3973:                        { // Accès en IPv4
        !          3974:                            if (((*((struct_socket *) (*s_objet_resultat)
        !          3975:                                    .objet)).adresse = malloc(22 *
        !          3976:                                    sizeof(unsigned char))) == NULL)
        !          3977:                            {
        !          3978:                                (*s_etat_processus).erreur_systeme =
        !          3979:                                        d_es_allocation_memoire;
        !          3980:                                return;
        !          3981:                            }
        !          3982: 
        !          3983:                            (*((struct_socket *) (*s_objet_resultat).objet))
        !          3984:                                    .adresse[0] = d_code_fin_chaine;
        !          3985: 
        !          3986:                            for(i = 0; i < 4; i++)
        !          3987:                            {
        !          3988:                                sprintf((*((struct_socket *) (*s_objet_resultat)
        !          3989:                                        .objet)).adresse,
        !          3990:                                        (i == 0) ? "%s%d" : "%s.%d",
        !          3991:                                        (*((struct_socket *) (*s_objet_resultat)
        !          3992:                                        .objet)).adresse, (int) adresse[i]);
        !          3993:                            }
        !          3994: 
        !          3995:                            sprintf((*((struct_socket *) (*s_objet_resultat)
        !          3996:                                    .objet)).adresse, "%s(%u)",
        !          3997:                                    (*((struct_socket *) (*s_objet_resultat)
        !          3998:                                    .objet)).adresse, (unsigned int) port);
        !          3999: 
        !          4000:                            if (((*((struct_socket *)
        !          4001:                                    (*s_objet_resultat).objet))
        !          4002:                                    .socket = socket(PF_INET, type,
        !          4003:                                    protocole_numerique)) == -1)
        !          4004:                            {
        !          4005:                                liberation(s_etat_processus, s_objet_argument);
        !          4006:                                liberation(s_etat_processus, s_objet_resultat);
        !          4007: 
        !          4008:                                (*s_etat_processus).erreur_execution =
        !          4009:                                        d_ex_erreur_acces_fichier;
        !          4010:                                return;
        !          4011:                            }
        !          4012: 
        !          4013:                            (*((struct_socket *) (*s_objet_resultat).objet))
        !          4014:                                    .domaine = PF_INET;
        !          4015: 
        !          4016:                            memset(&socket_ipv4, 0, sizeof(socket_ipv4));
        !          4017:                            socket_ipv4.sin_family = AF_INET;
        !          4018:                            socket_ipv4.sin_port = htons((uint16_t) port);
        !          4019: 
        !          4020:                            adresse_ipv4 = 0;
        !          4021:                            for(i = 0; i < 4; adresse_ipv4 =
        !          4022:                                    (256 * adresse_ipv4) + adresse[i++]);
        !          4023: 
        !          4024:                            socket_ipv4.sin_addr.s_addr = htonl(adresse_ipv4);
        !          4025: 
        !          4026:                            if (options_socket() == d_erreur)
        !          4027:                            {
        !          4028:                                liberation(s_etat_processus, s_objet_argument);
        !          4029:                                liberation(s_etat_processus, s_objet_resultat);
        !          4030: 
        !          4031:                                return;
        !          4032:                            }
        !          4033: 
        !          4034:                            if (bind((*((struct_socket *) (*s_objet_resultat)
        !          4035:                                    .objet)).socket, (const struct sockaddr *)
        !          4036:                                    &socket_ipv4, sizeof(socket_ipv4)) != 0)
        !          4037:                            {
        !          4038:                                liberation(s_etat_processus, s_objet_argument);
        !          4039:                                liberation(s_etat_processus, s_objet_resultat);
        !          4040: 
        !          4041:                                (*s_etat_processus).erreur_execution =
        !          4042:                                        d_ex_erreur_acces_fichier;
        !          4043:                                return;
        !          4044:                            }
        !          4045:                        }
        !          4046:                        else
        !          4047:                        { // Accès en IPv6
        !          4048:                            if (((*((struct_socket *) (*s_objet_resultat)
        !          4049:                                    .objet)).adresse = malloc(55 *
        !          4050:                                    sizeof(unsigned char))) == NULL)
        !          4051:                            {
        !          4052:                                (*s_etat_processus).erreur_systeme =
        !          4053:                                        d_es_allocation_memoire;
        !          4054:                                return;
        !          4055:                            }
        !          4056: 
        !          4057:                            (*((struct_socket *) (*s_objet_resultat).objet))
        !          4058:                                    .adresse[0] = d_code_fin_chaine;
        !          4059: 
        !          4060:                            for(i = 0; i < 16; i++)
        !          4061:                            {
        !          4062:                                sprintf((*((struct_socket *) (*s_objet_resultat)
        !          4063:                                        .objet)).adresse,
        !          4064:                                        (i == 0) ? "%s%X" : "%s:%X",
        !          4065:                                        (*((struct_socket *) (*s_objet_resultat)
        !          4066:                                        .objet)).adresse, (unsigned int)
        !          4067:                                        adresse[i]);
        !          4068:                            }
        !          4069: 
        !          4070:                            sprintf((*((struct_socket *) (*s_objet_resultat)
        !          4071:                                    .objet)).adresse, "%s(%u)",
        !          4072:                                    (*((struct_socket *) (*s_objet_resultat)
        !          4073:                                    .objet)).adresse, (unsigned int) port);
        !          4074: 
        !          4075:                            if (((*((struct_socket *)
        !          4076:                                    (*s_objet_resultat).objet))
        !          4077:                                    .socket = socket(PF_INET6, type,
        !          4078:                                    protocole_numerique)) == -1)
        !          4079:                            {
        !          4080:                                liberation(s_etat_processus, s_objet_argument);
        !          4081:                                liberation(s_etat_processus, s_objet_resultat);
        !          4082: 
        !          4083:                                (*s_etat_processus).erreur_execution =
        !          4084:                                        d_ex_erreur_acces_fichier;
        !          4085:                                return;
        !          4086:                            }
        !          4087: 
        !          4088:                            (*((struct_socket *) (*s_objet_resultat).objet))
        !          4089:                                    .domaine = PF_INET6;
        !          4090: 
        !          4091:                            memset(&socket_ipv6, 0, sizeof(socket_ipv6));
        !          4092:                            socket_ipv6.sin6_family = AF_INET6;
        !          4093:                            socket_ipv6.sin6_port = htons((uint16_t) port);
        !          4094: 
        !          4095:                            for(i = 0; i < 16;
        !          4096:                                    socket_ipv6.sin6_addr.s6_addr[i] =
        !          4097:                                    (unsigned char) (adresse[i]), i++);
        !          4098: 
        !          4099:                            if (options_socket() == d_erreur)
        !          4100:                            {
        !          4101:                                liberation(s_etat_processus, s_objet_argument);
        !          4102:                                liberation(s_etat_processus, s_objet_resultat);
        !          4103: 
        !          4104:                                return;
        !          4105:                            }
        !          4106: 
        !          4107:                            if (bind((*((struct_socket *) (*s_objet_resultat)
        !          4108:                                    .objet)).socket, (const struct sockaddr *)
        !          4109:                                    &socket_ipv6, sizeof(socket_ipv6)) != 0)
        !          4110:                            {
        !          4111:                                liberation(s_etat_processus, s_objet_argument);
        !          4112:                                liberation(s_etat_processus, s_objet_resultat);
        !          4113: 
        !          4114:                                (*s_etat_processus).erreur_execution =
        !          4115:                                        d_ex_erreur_acces_fichier;
        !          4116:                                return;
        !          4117:                            }
        !          4118:                        }
        !          4119:                    }
        !          4120: 
        !          4121:                    (*((struct_socket *) (*s_objet_resultat).objet)).effacement
        !          4122:                            = 'N';
        !          4123:                }
        !          4124: 
        !          4125:                if ((type_socket == 'S') || (type_socket == 'Q'))
        !          4126:                {
        !          4127:                    if (listen((*((struct_socket *) (*s_objet_resultat).objet))
        !          4128:                            .socket, (int) nombre_maximal_connexions) != 0)
        !          4129:                    {
        !          4130:                        liberation(s_etat_processus, s_objet_argument);
        !          4131:                        liberation(s_etat_processus, s_objet_resultat);
        !          4132: 
        !          4133:                        (*s_etat_processus).erreur_execution =
        !          4134:                                d_ex_erreur_acces_fichier;
        !          4135:                        return;
        !          4136:                    }
        !          4137: 
        !          4138:                    (*((struct_socket *) (*s_objet_resultat).objet))
        !          4139:                            .socket_connectee = d_vrai;
        !          4140: 
        !          4141:                    if (protection == 'R')
        !          4142:                    { // WRITEONLY
        !          4143:                        if (shutdown((*((struct_socket *) (*s_objet_resultat)
        !          4144:                                .objet)).socket, SHUT_RD) != 0)
        !          4145:                        {
        !          4146:                            liberation(s_etat_processus, s_objet_argument);
        !          4147:                            liberation(s_etat_processus, s_objet_resultat);
        !          4148: 
        !          4149:                            (*s_etat_processus).erreur_execution =
        !          4150:                                    d_ex_erreur_acces_fichier;
        !          4151:                            return;
        !          4152:                        }
        !          4153:                    }
        !          4154:                    else if (protection == 'W')
        !          4155:                    { // READONLY
        !          4156:                        if (shutdown((*((struct_socket *) (*s_objet_resultat)
        !          4157:                                .objet)).socket, SHUT_WR) != 0)
        !          4158:                        {
        !          4159:                            liberation(s_etat_processus, s_objet_argument);
        !          4160:                            liberation(s_etat_processus, s_objet_resultat);
        !          4161: 
        !          4162:                            (*s_etat_processus).erreur_execution =
        !          4163:                                    d_ex_erreur_acces_fichier;
        !          4164:                            return;
        !          4165:                        }
        !          4166:                    }
        !          4167:                    else
        !          4168:                    { // READWRITE
        !          4169:                    }
        !          4170:                }
        !          4171:            }
        !          4172:            else
        !          4173:            { // Socket cliente
        !          4174:                (*((struct_socket *) (*s_objet_resultat).objet)).effacement
        !          4175:                        = 'N';
        !          4176: 
        !          4177:                /*
        !          4178:                 * Dans le cas où la socket n'est pas connectée, on
        !          4179:                 * ne peut utiliser ni "NAME", ni "HOST", ni "PORT",
        !          4180:                 * et encore moins spécifier une adresse. En effet, la cible
        !          4181:                 * est défini par la commande TARGET.
        !          4182:                 */
        !          4183: 
        !          4184:                if ((type_socket != 'S') && (type_socket != 'Q'))
        !          4185:                {
        !          4186:                    if ((presence_port == d_vrai) || (hote != NULL) ||
        !          4187:                            (nom != NULL) || (type_adresse != ' '))
        !          4188:                    {
        !          4189:                        liberation(s_etat_processus, s_objet_argument);
        !          4190:                        liberation(s_etat_processus, s_objet_resultat);
        !          4191: 
        !          4192:                        (*s_etat_processus).erreur_execution =
        !          4193:                                d_ex_erreur_parametre_fichier;
        !          4194:                        return;
        !          4195:                    }
        !          4196:                }
        !          4197: 
        !          4198:                if (nom != NULL)
        !          4199:                {
        !          4200:                    /*
        !          4201:                     * La socket est dans l'espace des noms.
        !          4202:                     */
        !          4203: 
        !          4204:                    if (((*((struct_socket *) (*s_objet_resultat).objet))
        !          4205:                            .socket = socket(PF_UNIX, type,
        !          4206:                            protocole_numerique)) == -1)
        !          4207:                    {
        !          4208:                        liberation(s_etat_processus, s_objet_argument);
        !          4209:                        liberation(s_etat_processus, s_objet_resultat);
        !          4210: 
        !          4211:                        (*s_etat_processus).erreur_execution =
        !          4212:                                d_ex_erreur_acces_fichier;
        !          4213:                        return;
        !          4214:                    }
        !          4215: 
        !          4216:                    (*((struct_socket *) (*s_objet_resultat).objet))
        !          4217:                            .domaine = PF_UNIX;
        !          4218: 
        !          4219:                    socket_unix.sun_family = AF_UNIX;
        !          4220:                    strncpy(socket_unix.sun_path, (*((struct_socket *)
        !          4221:                            (*s_objet_resultat).objet)).adresse, 108);
        !          4222:                    socket_unix.sun_path[108 - 1] = d_code_fin_chaine;
        !          4223: 
        !          4224:                    if ((type_socket == 'S') || (type_socket == 'Q'))
        !          4225:                    {
        !          4226:                        if (connect((*((struct_socket *) (*s_objet_resultat)
        !          4227:                                .objet)).socket, (const struct sockaddr *)
        !          4228:                                &socket_unix, sizeof(socket_unix)) != 0)
        !          4229:                        {
        !          4230:                            liberation(s_etat_processus, s_objet_argument);
        !          4231:                            liberation(s_etat_processus, s_objet_resultat);
        !          4232: 
        !          4233:                            (*s_etat_processus).erreur_execution =
        !          4234:                                    d_ex_erreur_acces_fichier;
        !          4235:                            return;
        !          4236:                        }
        !          4237: 
        !          4238:                        (*((struct_socket *) (*s_objet_resultat).objet))
        !          4239:                                .socket_connectee = d_vrai;
        !          4240:                        (*((struct_socket *) (*s_objet_resultat).objet))
        !          4241:                                .socket_en_ecoute = 'N';
        !          4242:                    }
        !          4243:                }
        !          4244:                else
        !          4245:                {
        !          4246:                    /*
        !          4247:                     * La socket est une socket réseau. L'adresse
        !          4248:                     * passée en argument est l'adresse sur laquelle
        !          4249:                     * cette socket est à l'écoute.
        !          4250:                     */
        !          4251: 
        !          4252:                    if (hote != NULL)
        !          4253:                    { // Hôte défini par un nom
        !          4254:                        resolution = NULL;
        !          4255: 
        !          4256:                        if (getaddrinfo(hote, NULL, NULL, &resolution) != 0) 
        !          4257:                        {
        !          4258:                            liberation(s_etat_processus, s_objet_argument);
        !          4259:                            liberation(s_etat_processus, s_objet_resultat);
        !          4260: 
        !          4261:                            if (resolution != NULL)
        !          4262:                            {
        !          4263:                                freeaddrinfo(resolution);
        !          4264:                            }
        !          4265: 
        !          4266:                            (*s_etat_processus).erreur_execution =
        !          4267:                                    d_ex_erreur_acces_fichier;
        !          4268:                            return;
        !          4269:                        }
        !          4270: 
        !          4271:                        if (strcmp(protocole, "IPV4") == 0)
        !          4272:                        { // Accès en IPv4
        !          4273:                            resolution_courante = resolution;
        !          4274: 
        !          4275:                            while(resolution_courante != NULL)
        !          4276:                            {
        !          4277:                                if ((*resolution_courante).ai_family ==
        !          4278:                                        AF_INET)
        !          4279:                                {
        !          4280:                                    break;
        !          4281:                                }
        !          4282: 
        !          4283:                                resolution_courante = (*resolution_courante)
        !          4284:                                        .ai_next;
        !          4285:                            }
        !          4286: 
        !          4287:                            if (resolution_courante == NULL)
        !          4288:                            {
        !          4289:                                liberation(s_etat_processus, s_objet_argument);
        !          4290:                                liberation(s_etat_processus, s_objet_resultat);
        !          4291: 
        !          4292:                                freeaddrinfo(resolution);
        !          4293: 
        !          4294:                                (*s_etat_processus).erreur_execution =
        !          4295:                                        d_ex_erreur_acces_fichier;
        !          4296:                                return;
        !          4297:                            }
        !          4298: 
        !          4299:                            if (((*((struct_socket *)
        !          4300:                                    (*s_objet_resultat).objet))
        !          4301:                                    .socket = socket(PF_INET, type,
        !          4302:                                    protocole_numerique)) == -1)
        !          4303:                            {
        !          4304:                                liberation(s_etat_processus, s_objet_argument);
        !          4305:                                liberation(s_etat_processus, s_objet_resultat);
        !          4306: 
        !          4307:                                freeaddrinfo(resolution);
        !          4308: 
        !          4309:                                (*s_etat_processus).erreur_execution =
        !          4310:                                        d_ex_erreur_acces_fichier;
        !          4311:                                return;
        !          4312:                            }
        !          4313: 
        !          4314:                            (*((struct_socket *) (*s_objet_resultat).objet))
        !          4315:                                .domaine = PF_INET;
        !          4316: 
        !          4317:                            memset(&socket_ipv4, 0, sizeof(socket_ipv4));
        !          4318:                            socket_ipv4.sin_family = AF_INET;
        !          4319:                            socket_ipv4.sin_port = htons((uint16_t) port);
        !          4320:                            socket_ipv4.sin_addr.s_addr =
        !          4321:                                    (*((struct sockaddr_in *)
        !          4322:                                    (*resolution_courante).ai_addr))
        !          4323:                                    .sin_addr.s_addr;
        !          4324: 
        !          4325:                            if ((type_socket == 'S') || (type_socket == 'Q'))
        !          4326:                            {
        !          4327:                                if (connect((*((struct_socket *)
        !          4328:                                        (*s_objet_resultat).objet)).socket,
        !          4329:                                        (const struct sockaddr *)
        !          4330:                                        &socket_ipv4, sizeof(socket_ipv4)) != 0)
        !          4331:                                {
        !          4332:                                    liberation(s_etat_processus,
        !          4333:                                            s_objet_argument);
        !          4334:                                    liberation(s_etat_processus,
        !          4335:                                            s_objet_resultat);
        !          4336: 
        !          4337:                                    freeaddrinfo(resolution);
        !          4338: 
        !          4339:                                    (*s_etat_processus).erreur_execution =
        !          4340:                                            d_ex_erreur_acces_fichier;
        !          4341:                                    return;
        !          4342:                                }
        !          4343: 
        !          4344:                                (*((struct_socket *) (*s_objet_resultat).objet))
        !          4345:                                        .socket_connectee = d_vrai;
        !          4346:                                (*((struct_socket *) (*s_objet_resultat).objet))
        !          4347:                                        .socket_en_ecoute = 'N';
        !          4348:                            }
        !          4349: 
        !          4350:                            if (((*((struct_socket *) (*s_objet_resultat)
        !          4351:                                    .objet)).adresse = malloc(22 *
        !          4352:                                    sizeof(unsigned char))) == NULL)
        !          4353:                            {
        !          4354:                                (*s_etat_processus).erreur_systeme =
        !          4355:                                        d_es_allocation_memoire;
        !          4356:                                return;
        !          4357:                            }
        !          4358: 
        !          4359:                            sprintf((*((struct_socket *) (*s_objet_resultat)
        !          4360:                                    .objet)).adresse, "%d.%d.%d.%d",
        !          4361:                                    (ntohl((*((struct sockaddr_in *)
        !          4362:                                    (*resolution_courante).ai_addr)).sin_addr
        !          4363:                                    .s_addr) >> 24) & 0xFF,
        !          4364:                                    (ntohl((*((struct sockaddr_in *)
        !          4365:                                    (*resolution_courante).ai_addr)).sin_addr
        !          4366:                                    .s_addr) >> 16) & 0xFF,
        !          4367:                                    (ntohl((*((struct sockaddr_in *)
        !          4368:                                    (*resolution_courante).ai_addr)).sin_addr
        !          4369:                                    .s_addr) >> 8) & 0xFF,
        !          4370:                                    ntohl((*((struct sockaddr_in *)
        !          4371:                                    (*resolution_courante).ai_addr)).sin_addr
        !          4372:                                    .s_addr) & 0xFF);
        !          4373:                        }
        !          4374:                        else
        !          4375:                        { // Accès en IPv6
        !          4376:                            resolution_courante = resolution;
        !          4377: 
        !          4378:                            while(resolution_courante != NULL)
        !          4379:                            {
        !          4380:                                if ((*resolution_courante).ai_family ==
        !          4381:                                        AF_INET6)
        !          4382:                                {
        !          4383:                                    break;
        !          4384:                                }
        !          4385: 
        !          4386:                                resolution_courante = (*resolution_courante)
        !          4387:                                        .ai_next;
        !          4388:                            }
        !          4389: 
        !          4390:                            if (resolution_courante == NULL)
        !          4391:                            {
        !          4392:                                liberation(s_etat_processus, s_objet_argument);
        !          4393:                                liberation(s_etat_processus, s_objet_resultat);
        !          4394: 
        !          4395:                                freeaddrinfo(resolution);
        !          4396: 
        !          4397:                                (*s_etat_processus).erreur_execution =
        !          4398:                                        d_ex_erreur_acces_fichier;
        !          4399:                                return;
        !          4400:                            }
        !          4401: 
        !          4402:                            if (((*((struct_socket *)
        !          4403:                                    (*s_objet_resultat).objet))
        !          4404:                                    .socket = socket(PF_INET6, type,
        !          4405:                                    protocole_numerique)) == -1)
        !          4406:                            {
        !          4407:                                liberation(s_etat_processus, s_objet_argument);
        !          4408:                                liberation(s_etat_processus, s_objet_resultat);
        !          4409: 
        !          4410:                                freeaddrinfo(resolution);
        !          4411: 
        !          4412:                                (*s_etat_processus).erreur_execution =
        !          4413:                                        d_ex_erreur_acces_fichier;
        !          4414:                                return;
        !          4415:                            }
        !          4416: 
        !          4417:                            (*((struct_socket *) (*s_objet_resultat).objet))
        !          4418:                                    .domaine = PF_INET6;
        !          4419: 
        !          4420:                            memset(&socket_ipv6, 0, sizeof(socket_ipv6));
        !          4421:                            socket_ipv6.sin6_family = AF_INET6;
        !          4422:                            socket_ipv6.sin6_port = htons((uint16_t) port);
        !          4423: 
        !          4424:                            for(i = 0; i < 16;
        !          4425:                                    socket_ipv6.sin6_addr.s6_addr[i] =
        !          4426:                                    (*((struct sockaddr_in6 *)
        !          4427:                                    (*resolution_courante).ai_addr))
        !          4428:                                    .sin6_addr.s6_addr[i], i++);
        !          4429: 
        !          4430:                            if ((type_socket == 'S') || (type_socket == 'Q'))
        !          4431:                            {
        !          4432:                                if (connect((*((struct_socket *)
        !          4433:                                        (*s_objet_resultat).objet)).socket,
        !          4434:                                        (const struct sockaddr *)
        !          4435:                                        &socket_ipv6, sizeof(socket_ipv6)) != 0)
        !          4436:                                {
        !          4437:                                    liberation(s_etat_processus,
        !          4438:                                            s_objet_argument);
        !          4439:                                    liberation(s_etat_processus,
        !          4440:                                            s_objet_resultat);
        !          4441: 
        !          4442:                                    freeaddrinfo(resolution);
        !          4443: 
        !          4444:                                    (*s_etat_processus).erreur_execution =
        !          4445:                                            d_ex_erreur_acces_fichier;
        !          4446:                                    return;
        !          4447:                                }
        !          4448: 
        !          4449:                                (*((struct_socket *) (*s_objet_resultat).objet))
        !          4450:                                        .socket_connectee = d_vrai;
        !          4451:                                (*((struct_socket *) (*s_objet_resultat).objet))
        !          4452:                                        .socket_en_ecoute = 'N';
        !          4453:                            }
        !          4454: 
        !          4455:                            if (((*((struct_socket *) (*s_objet_resultat)
        !          4456:                                    .objet)).adresse = malloc(55 *
        !          4457:                                    sizeof(unsigned char))) == NULL)
        !          4458:                            {
        !          4459:                                (*s_etat_processus).erreur_systeme =
        !          4460:                                        d_es_allocation_memoire;
        !          4461:                                return;
        !          4462:                            }
        !          4463: 
        !          4464:                            for(i = 0; i < 16; i++)
        !          4465:                            {
        !          4466:                                sprintf((*((struct_socket *) (*s_objet_resultat)
        !          4467:                                        .objet)).adresse,
        !          4468:                                        (i == 0) ? "%s%X" : "%s:%X",
        !          4469:                                        (*((struct_socket *) (*s_objet_resultat)
        !          4470:                                        .objet)).adresse,
        !          4471:                                        (*((struct sockaddr_in6 *)
        !          4472:                                        (*resolution_courante).ai_addr))
        !          4473:                                        .sin6_addr.s6_addr[i]);
        !          4474:                            }
        !          4475:                        }
        !          4476: 
        !          4477:                        freeaddrinfo(resolution);
        !          4478: 
        !          4479:                        sprintf((*((struct_socket *) (*s_objet_resultat)
        !          4480:                                .objet)).adresse, "%s(%u)",
        !          4481:                                (*((struct_socket *) (*s_objet_resultat)
        !          4482:                                .objet)).adresse, (unsigned int) port);
        !          4483:                    }
        !          4484:                    else
        !          4485:                    { // Hôte défini par une adresse
        !          4486:                        if (strcmp(protocole, "IPV4") == 0)
        !          4487:                        { // Accès en IPv4
        !          4488:                            if (type_adresse == '4')
        !          4489:                            {
        !          4490:                                if (((*((struct_socket *) (*s_objet_resultat)
        !          4491:                                        .objet)).adresse = malloc(22 *
        !          4492:                                        sizeof(unsigned char))) == NULL)
        !          4493:                                {
        !          4494:                                    (*s_etat_processus).erreur_systeme =
        !          4495:                                            d_es_allocation_memoire;
        !          4496:                                    return;
        !          4497:                                }
        !          4498: 
        !          4499:                                (*((struct_socket *) (*s_objet_resultat).objet))
        !          4500:                                        .adresse[0] = d_code_fin_chaine;
        !          4501: 
        !          4502:                                for(i = 0; i < 4; i++)
        !          4503:                                {
        !          4504:                                    sprintf((*((struct_socket *)
        !          4505:                                            (*s_objet_resultat).objet)).adresse,
        !          4506:                                            (i == 0) ? "%s%d" : "%s.%d",
        !          4507:                                            (*((struct_socket *)
        !          4508:                                            (*s_objet_resultat)
        !          4509:                                            .objet)).adresse, (int) adresse[i]);
        !          4510:                                }
        !          4511: 
        !          4512:                                sprintf((*((struct_socket *) (*s_objet_resultat)
        !          4513:                                        .objet)).adresse, "%s(%u)",
        !          4514:                                        (*((struct_socket *) (*s_objet_resultat)
        !          4515:                                        .objet)).adresse, (unsigned int) port);
        !          4516:                            }
        !          4517:                            else
        !          4518:                            {
        !          4519:                                if (((*((struct_socket *) (*s_objet_resultat)
        !          4520:                                        .objet)).adresse = malloc(
        !          4521:                                        sizeof(unsigned char))) == NULL)
        !          4522:                                {
        !          4523:                                    (*s_etat_processus).erreur_systeme =
        !          4524:                                            d_es_allocation_memoire;
        !          4525:                                    return;
        !          4526:                                }
        !          4527: 
        !          4528:                                (*((struct_socket *) (*s_objet_resultat).objet))
        !          4529:                                        .adresse[0] = d_code_fin_chaine;
        !          4530:                            }
        !          4531: 
        !          4532:                            if (((*((struct_socket *)
        !          4533:                                    (*s_objet_resultat).objet))
        !          4534:                                    .socket = socket(PF_INET, type,
        !          4535:                                    protocole_numerique)) == -1)
        !          4536:                            {
        !          4537:                                liberation(s_etat_processus, s_objet_argument);
        !          4538:                                liberation(s_etat_processus, s_objet_resultat);
        !          4539: 
        !          4540:                                (*s_etat_processus).erreur_execution =
        !          4541:                                        d_ex_erreur_acces_fichier;
        !          4542:                                return;
        !          4543:                            }
        !          4544: 
        !          4545:                            (*((struct_socket *) (*s_objet_resultat).objet))
        !          4546:                                    .domaine = PF_INET;
        !          4547: 
        !          4548:                            memset(&socket_ipv4, 0, sizeof(socket_ipv4));
        !          4549:                            socket_ipv4.sin_family = AF_INET;
        !          4550:                            socket_ipv4.sin_port = htons((uint16_t) port);
        !          4551: 
        !          4552:                            adresse_ipv4 = 0;
        !          4553:                            for(i = 0; i < 4; adresse_ipv4 =
        !          4554:                                    (256 * adresse_ipv4) + adresse[i++]);
        !          4555: 
        !          4556:                            socket_ipv4.sin_addr.s_addr = htonl(adresse_ipv4);
        !          4557: 
        !          4558:                            if ((type_socket == 'S') || (type_socket == 'Q'))
        !          4559:                            {
        !          4560:                                if (connect((*((struct_socket *)
        !          4561:                                        (*s_objet_resultat).objet)).socket,
        !          4562:                                        (const struct sockaddr *)
        !          4563:                                        &socket_ipv4, sizeof(socket_ipv4)) != 0)
        !          4564:                                {
        !          4565:                                    liberation(s_etat_processus,
        !          4566:                                            s_objet_argument);
        !          4567:                                    liberation(s_etat_processus,
        !          4568:                                            s_objet_resultat);
        !          4569: 
        !          4570:                                    (*s_etat_processus).erreur_execution =
        !          4571:                                            d_ex_erreur_acces_fichier;
        !          4572:                                    return;
        !          4573:                                }
        !          4574: 
        !          4575:                                (*((struct_socket *) (*s_objet_resultat).objet))
        !          4576:                                        .socket_connectee = d_vrai;
        !          4577:                                (*((struct_socket *) (*s_objet_resultat).objet))
        !          4578:                                        .socket_en_ecoute = 'N';
        !          4579:                            }
        !          4580:                        }
        !          4581:                        else if (strcmp(protocole, "IPV6") == 0)
        !          4582:                        { // Accès en IPv6
        !          4583:                            if (type_adresse == '6')
        !          4584:                            {
        !          4585:                                if (((*((struct_socket *) (*s_objet_resultat)
        !          4586:                                        .objet)).adresse = malloc(55 *
        !          4587:                                        sizeof(unsigned char))) == NULL)
        !          4588:                                {
        !          4589:                                    (*s_etat_processus).erreur_systeme =
        !          4590:                                            d_es_allocation_memoire;
        !          4591:                                    return;
        !          4592:                                }
        !          4593: 
        !          4594:                                (*((struct_socket *) (*s_objet_resultat).objet))
        !          4595:                                        .adresse[0] = d_code_fin_chaine;
        !          4596: 
        !          4597:                                for(i = 0; i < 16; i++)
        !          4598:                                {
        !          4599:                                    sprintf((*((struct_socket *)
        !          4600:                                            (*s_objet_resultat).objet)).adresse,
        !          4601:                                            (i == 0) ? "%s%X" : "%s:%X",
        !          4602:                                            (*((struct_socket *)
        !          4603:                                            (*s_objet_resultat)
        !          4604:                                            .objet)).adresse, (unsigned int)
        !          4605:                                            adresse[i]);
        !          4606:                                }
        !          4607: 
        !          4608:                                sprintf((*((struct_socket *) (*s_objet_resultat)
        !          4609:                                        .objet)).adresse, "%s(%u)",
        !          4610:                                        (*((struct_socket *) (*s_objet_resultat)
        !          4611:                                        .objet)).adresse, (unsigned int) port);
        !          4612:                            }
        !          4613:                            else
        !          4614:                            {
        !          4615:                                if (((*((struct_socket *) (*s_objet_resultat)
        !          4616:                                        .objet)).adresse = malloc(
        !          4617:                                        sizeof(unsigned char))) == NULL)
        !          4618:                                {
        !          4619:                                    (*s_etat_processus).erreur_systeme =
        !          4620:                                            d_es_allocation_memoire;
        !          4621:                                    return;
        !          4622:                                }
        !          4623: 
        !          4624:                                (*((struct_socket *) (*s_objet_resultat).objet))
        !          4625:                                        .adresse[0] = d_code_fin_chaine;
        !          4626:                            }
        !          4627: 
        !          4628:                            if (((*((struct_socket *)
        !          4629:                                    (*s_objet_resultat).objet))
        !          4630:                                    .socket = socket(PF_INET6, type,
        !          4631:                                    protocole_numerique)) == -1)
        !          4632:                            {
        !          4633:                                liberation(s_etat_processus, s_objet_argument);
        !          4634:                                liberation(s_etat_processus, s_objet_resultat);
        !          4635: 
        !          4636:                                (*s_etat_processus).erreur_execution =
        !          4637:                                        d_ex_erreur_acces_fichier;
        !          4638:                                return;
        !          4639:                            }
        !          4640: 
        !          4641:                            (*((struct_socket *) (*s_objet_resultat).objet))
        !          4642:                                    .domaine = PF_INET6;
        !          4643: 
        !          4644:                            memset(&socket_ipv6, 0, sizeof(socket_ipv6));
        !          4645:                            socket_ipv6.sin6_family = AF_INET6;
        !          4646:                            socket_ipv6.sin6_port = htons((uint16_t) port);
        !          4647: 
        !          4648:                            for(i = 0; i < 16;
        !          4649:                                    socket_ipv6.sin6_addr.s6_addr[i] =
        !          4650:                                    (unsigned char) (adresse[i]), i++);
        !          4651: 
        !          4652:                            if ((type_socket == 'S') || (type_socket == 'Q'))
        !          4653:                            {
        !          4654:                                if (connect((*((struct_socket *)
        !          4655:                                        (*s_objet_resultat).objet)).socket,
        !          4656:                                        (const struct sockaddr *)
        !          4657:                                        &socket_ipv6, sizeof(socket_ipv6)) != 0)
        !          4658:                                {
        !          4659:                                    liberation(s_etat_processus,
        !          4660:                                            s_objet_argument);
        !          4661:                                    liberation(s_etat_processus,
        !          4662:                                            s_objet_resultat);
        !          4663: 
        !          4664:                                    (*s_etat_processus).erreur_execution =
        !          4665:                                            d_ex_erreur_acces_fichier;
        !          4666:                                    return;
        !          4667:                                }
        !          4668: 
        !          4669:                                (*((struct_socket *) (*s_objet_resultat).objet))
        !          4670:                                        .socket_connectee = d_vrai;
        !          4671:                                (*((struct_socket *) (*s_objet_resultat).objet))
        !          4672:                                        .socket_en_ecoute = 'N';
        !          4673:                            }
        !          4674:                        }
        !          4675:                        else
        !          4676:                        { // Socket UNIX
        !          4677:                            if (((*((struct_socket *) (*s_objet_resultat)
        !          4678:                                    .objet)).adresse = malloc(
        !          4679:                                    sizeof(unsigned char))) == NULL)
        !          4680:                            {
        !          4681:                                (*s_etat_processus).erreur_systeme =
        !          4682:                                        d_es_allocation_memoire;
        !          4683:                                return;
        !          4684:                            }
        !          4685: 
        !          4686:                            (*((struct_socket *) (*s_objet_resultat).objet))
        !          4687:                                    .adresse[0] = d_code_fin_chaine;
        !          4688: 
        !          4689:                            if (((*((struct_socket *)
        !          4690:                                    (*s_objet_resultat).objet))
        !          4691:                                    .socket = socket(PF_UNIX, type,
        !          4692:                                    protocole_numerique)) == -1)
        !          4693:                            {
        !          4694:                                liberation(s_etat_processus, s_objet_argument);
        !          4695:                                liberation(s_etat_processus, s_objet_resultat);
        !          4696: 
        !          4697:                                (*s_etat_processus).erreur_execution =
        !          4698:                                        d_ex_erreur_acces_fichier;
        !          4699:                                return;
        !          4700:                            }
        !          4701:                        }
        !          4702:                    }
        !          4703: 
        !          4704:                    (*((struct_socket *) (*s_objet_resultat).objet)).effacement
        !          4705:                            = 'N';
        !          4706:                }
        !          4707: 
        !          4708:                if ((type_socket == 'S') || (type_socket == 'Q'))
        !          4709:                {
        !          4710:                    if (protection == 'R')
        !          4711:                    { // WRITEONLY
        !          4712:                        if (shutdown((*((struct_socket *) (*s_objet_resultat)
        !          4713:                                .objet)).socket, SHUT_RD) != 0)
        !          4714:                        {
        !          4715:                            liberation(s_etat_processus, s_objet_argument);
        !          4716:                            liberation(s_etat_processus, s_objet_resultat);
        !          4717: 
        !          4718:                            (*s_etat_processus).erreur_execution =
        !          4719:                                    d_ex_erreur_acces_fichier;
        !          4720:                            return;
        !          4721:                        }
        !          4722:                    }
        !          4723:                    else if (protection == 'W')
        !          4724:                    { // READONLY
        !          4725:                        if (shutdown((*((struct_socket *) (*s_objet_resultat)
        !          4726:                                .objet)).socket, SHUT_WR) != 0)
        !          4727:                        {
        !          4728:                            liberation(s_etat_processus, s_objet_argument);
        !          4729:                            liberation(s_etat_processus, s_objet_resultat);
        !          4730: 
        !          4731:                            (*s_etat_processus).erreur_execution =
        !          4732:                                    d_ex_erreur_acces_fichier;
        !          4733:                            return;
        !          4734:                        }
        !          4735:                    }
        !          4736:                    else
        !          4737:                    { // READWRITE
        !          4738:                    }
        !          4739:                }
        !          4740:            }
        !          4741: 
        !          4742:            /*
        !          4743:             * Gestion de la liste des sockets ouvertes
        !          4744:             */
        !          4745: 
        !          4746:            l_element_courant = (*s_etat_processus).s_sockets;
        !          4747: 
        !          4748:            if (l_element_courant == NULL)
        !          4749:            {
        !          4750:                if (((*s_etat_processus).s_sockets =
        !          4751:                        allocation_maillon(s_etat_processus)) == NULL)
        !          4752:                {
        !          4753:                    (*s_etat_processus).erreur_systeme =
        !          4754:                            d_es_allocation_memoire;
        !          4755:                    return;
        !          4756:                }
        !          4757: 
        !          4758:                (*(*s_etat_processus).s_sockets).suivant = NULL;
        !          4759:                l_element_courant = (*s_etat_processus).s_sockets;
        !          4760:            }
        !          4761:            else
        !          4762:            {
        !          4763:                /*
        !          4764:                 * Ajout d'un élément à la fin de la liste chaînée
        !          4765:                 */
        !          4766: 
        !          4767:                while((*l_element_courant).suivant != NULL)
        !          4768:                {
        !          4769:                    l_element_courant = (*l_element_courant).suivant;
        !          4770:                }
        !          4771: 
        !          4772:                if (((*l_element_courant).suivant =
        !          4773:                        allocation_maillon(s_etat_processus)) == NULL)
        !          4774:                {
        !          4775:                    (*s_etat_processus).erreur_systeme =
        !          4776:                            d_es_allocation_memoire;
        !          4777:                    return;
        !          4778:                }
        !          4779: 
        !          4780:                l_element_courant = (*l_element_courant).suivant;
        !          4781:                (*l_element_courant).suivant = NULL;
        !          4782:            }
        !          4783: 
        !          4784:            if (((*l_element_courant).donnee = copie_objet(s_etat_processus,
        !          4785:                    s_objet_resultat, 'O')) == NULL)
        !          4786:            {
        !          4787:                (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          4788:                return;
        !          4789:            }
        !          4790:        }
        !          4791:        else
        !          4792:        {
        !          4793:            liberation(s_etat_processus, s_objet_argument);
        !          4794: 
        !          4795:            (*s_etat_processus).erreur_execution =
        !          4796:                    d_ex_erreur_parametre_fichier;
        !          4797:            return;
        !          4798:        }
        !          4799:    }
        !          4800:    else if ((*s_objet_argument).type == CHN)
        !          4801:    {
        !          4802:        if ((s_objet_resultat = allocation(s_etat_processus, SPH)) == NULL)
        !          4803:        {
        !          4804:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          4805:            return;
        !          4806:        }
        !          4807: 
        !          4808:        if (((*((struct_semaphore *) (*s_objet_resultat).objet)).nom =
        !          4809:                malloc((strlen((unsigned char *) (*s_objet_argument).objet)
        !          4810:                + 1) *sizeof(unsigned char))) == NULL)
        !          4811:        {
        !          4812:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          4813:            return;
        !          4814:        }
        !          4815: 
        !          4816:        strcpy((*((struct_semaphore *) (*s_objet_resultat).objet)).nom,
        !          4817:                (unsigned char *) (*s_objet_argument).objet);
        !          4818: 
        !          4819:        if (((*((struct_semaphore *) (*s_objet_resultat).objet)).semaphore =
        !          4820:                sem_open((*((struct_semaphore *) (*s_objet_resultat).objet))
        !          4821:                .nom, 0)) == SEM_FAILED)
        !          4822:        {
        !          4823:            if (errno == ENOMEM)
        !          4824:            {
        !          4825:                (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          4826:                return;
        !          4827:            }
        !          4828: 
        !          4829:            (*s_etat_processus).erreur_execution = d_ex_semaphore;
        !          4830: 
        !          4831:            liberation(s_etat_processus, s_objet_argument);
        !          4832:            liberation(s_etat_processus, s_objet_resultat);
        !          4833:            return;
        !          4834:        }
        !          4835:    }
        !          4836:    else
        !          4837:    {
        !          4838:        liberation(s_etat_processus, s_objet_argument);
        !          4839: 
        !          4840:        (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
        !          4841:        return;
        !          4842:    }
        !          4843: 
        !          4844:    if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
        !          4845:            s_objet_resultat) == d_erreur)
        !          4846:    {
        !          4847:        return;
        !          4848:    }
        !          4849: 
        !          4850:    return;
        !          4851: }
        !          4852: 
        !          4853: // vim: ts=4

CVSweb interface <joel.bertrand@systella.fr>