Annotation of rpl/src/instructions_g1.c, revision 1.69

1.1       bertrand    1: /*
                      2: ================================================================================
1.69    ! bertrand    3:   RPL/2 (R) version 4.1.36
1.68      bertrand    4:   Copyright (C) 1989-2024 Dr. BERTRAND Joël
1.1       bertrand    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: 
1.11      bertrand   23: #include "rpl-conv.h"
1.1       bertrand   24: 
                     25: 
                     26: /*
                     27: ================================================================================
                     28:   Fonction '>='
                     29: ================================================================================
                     30:   Entrées :
                     31: --------------------------------------------------------------------------------
                     32:   Sorties :
                     33: --------------------------------------------------------------------------------
                     34:   Effets de bord : néant
                     35: ================================================================================
                     36: */
                     37: 
                     38: void
                     39: instruction_ge(struct_processus *s_etat_processus)
                     40: {
                     41:    struct_liste_chainee        *l_element_courant;
                     42:    struct_liste_chainee        *l_element_precedent;
                     43: 
                     44:    struct_objet                *s_copie_argument_1;
                     45:    struct_objet                *s_copie_argument_2;
                     46:    struct_objet                *s_objet_argument_1;
                     47:    struct_objet                *s_objet_argument_2;
                     48:    struct_objet                *s_objet_resultat;
                     49: 
                     50:    unsigned long               nombre_elements;
                     51: 
                     52:    (*s_etat_processus).erreur_execution = d_ex;
                     53: 
                     54:    if ((*s_etat_processus).affichage_arguments == 'Y')
                     55:    {
                     56:        printf("\n  >= ");
                     57: 
                     58:        if ((*s_etat_processus).langue == 'F')
                     59:        {
                     60:            printf("(opérateur supérieur ou égal)\n\n");
                     61:        }
                     62:        else
                     63:        {
                     64:            printf("(greater or equal)\n\n");
                     65:        }
                     66: 
                     67:        printf("    2: %s, %s\n", d_INT, d_REL);
                     68:        printf("    1: %s, %s\n", d_INT, d_REL);
                     69:        printf("->  1: %s\n\n", d_INT);
                     70: 
                     71:        printf("    2: %s\n", d_BIN);
                     72:        printf("    1: %s\n", d_BIN);
                     73:        printf("->  1: %s\n\n", d_INT);
                     74: 
                     75:        printf("    2: %s\n", d_CHN);
                     76:        printf("    1: %s\n", d_CHN);
                     77:        printf("->  1: %s\n\n", d_INT);
                     78: 
                     79:        printf("    2: %s\n", d_NOM);
                     80:        printf("    1: %s, %s, %s, %s\n", d_NOM, d_ALG, d_INT, d_REL);
                     81:        printf("->  1: %s\n\n", d_ALG);
                     82: 
                     83:        printf("    2: %s, %s, %s, %s\n", d_NOM, d_ALG, d_INT, d_REL);
                     84:        printf("    1: %s\n", d_NOM);
                     85:        printf("->  1: %s\n\n", d_ALG);
                     86: 
                     87:        printf("    2: %s\n", d_ALG);
                     88:        printf("    1: %s\n", d_ALG);
                     89:        printf("->  1: %s\n\n", d_ALG);
                     90: 
                     91:        printf("    2: %s\n", d_RPN);
                     92:        printf("    1: %s\n", d_RPN);
                     93:        printf("->  1: %s\n", d_RPN);
                     94: 
                     95:        return;
                     96:    }
                     97:    else if ((*s_etat_processus).test_instruction == 'Y')
                     98:    {
                     99:        (*s_etat_processus).nombre_arguments = 0;
                    100:        return;
                    101:    }
                    102:    
                    103:    if (test_cfsf(s_etat_processus, 31) == d_vrai)
                    104:    {
                    105:        if (empilement_pile_last(s_etat_processus, 2) == d_erreur)
                    106:        {
                    107:            return;
                    108:        }
                    109:    }
                    110: 
                    111:    if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
                    112:            &s_objet_argument_1) == d_erreur)
                    113:    {
                    114:        (*s_etat_processus).erreur_execution = d_ex_manque_argument;
                    115:        return;
                    116:    }
                    117: 
                    118:    if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
                    119:            &s_objet_argument_2) == d_erreur)
                    120:    {
                    121:        liberation(s_etat_processus, s_objet_argument_2);
                    122: 
                    123:        (*s_etat_processus).erreur_execution = d_ex_manque_argument;
                    124:        return;
                    125:    }
                    126: 
                    127: /*
                    128: --------------------------------------------------------------------------------
                    129:   GE sur des valeurs numériques
                    130: --------------------------------------------------------------------------------
                    131: */
                    132: 
                    133:    if ((((*s_objet_argument_1).type == INT) ||
                    134:            ((*s_objet_argument_1).type == REL)) &&
                    135:            (((*s_objet_argument_2).type == INT) ||
                    136:            ((*s_objet_argument_2).type == REL)))
                    137:    {
                    138:        if ((s_objet_resultat = allocation(s_etat_processus, INT))
                    139:                == NULL)
                    140:        {
                    141:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                    142:            return;
                    143:        }
                    144: 
                    145:        if ((*s_objet_argument_1).type == INT)
                    146:        {
                    147:            if ((*s_objet_argument_2).type == INT)
                    148:            {
                    149:                (*((integer8 *) (*s_objet_resultat).objet)) =
                    150:                        ((*((integer8 *) (*s_objet_argument_1).objet)) <=
                    151:                        (*((integer8 *) (*s_objet_argument_2).objet)))
                    152:                        ? -1 : 0;
                    153:            }
                    154:            else
                    155:            {
                    156:                (*((integer8 *) (*s_objet_resultat).objet)) =
                    157:                        ((*((integer8 *) (*s_objet_argument_1).objet)) <=
                    158:                        (*((real8 *) (*s_objet_argument_2).objet)))
                    159:                        ? -1 : 0;
                    160:            }
                    161:        }
                    162:        else
                    163:        {
                    164:            if ((*s_objet_argument_2).type == INT)
                    165:            {
                    166:                (*((integer8 *) (*s_objet_resultat).objet)) =
                    167:                        ((*((real8 *) (*s_objet_argument_1).objet)) <=
                    168:                        (*((integer8 *) (*s_objet_argument_2).objet)))
                    169:                        ? -1 : 0;
                    170:            }
                    171:            else
                    172:            {
                    173:                (*((integer8 *) (*s_objet_resultat).objet)) =
                    174:                        ((*((real8 *) (*s_objet_argument_1).objet)) <=
                    175:                        (*((real8 *) (*s_objet_argument_2).objet)))
                    176:                        ? -1 : 0;
                    177:            }
                    178:        }
                    179:    }
                    180: 
                    181: /*
                    182: --------------------------------------------------------------------------------
                    183:   GE binaire
                    184: --------------------------------------------------------------------------------
                    185: */
                    186: 
                    187:    else if (((*s_objet_argument_1).type == BIN) &&
                    188:            ((*s_objet_argument_2).type == BIN))
                    189:    {
                    190:        if ((s_objet_resultat = allocation(s_etat_processus, INT))
                    191:                == NULL)
                    192:        {
                    193:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                    194:            return;
                    195:        }
                    196: 
                    197:        (*((integer8 *) (*s_objet_resultat).objet)) = 
                    198:                ((*((logical8 *) (*s_objet_argument_1).objet)) <=
                    199:                (*((logical8 *) (*s_objet_argument_2).objet)))
                    200:                ? -1 : 0;
                    201:    }
                    202: 
                    203: /*
                    204: --------------------------------------------------------------------------------
                    205:   GE portant sur des chaînes de caractères
                    206: --------------------------------------------------------------------------------
                    207: */
                    208: 
                    209:    else if (((*s_objet_argument_1).type == CHN) &&
                    210:            ((*s_objet_argument_2).type == CHN))
                    211:    {
                    212:        if ((s_objet_resultat = allocation(s_etat_processus, INT))
                    213:                == NULL)
                    214:        {
                    215:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                    216:            return;
                    217:        }
                    218: 
                    219:        (*((integer8 *) (*s_objet_resultat).objet)) =
                    220:                (strcmp((unsigned char *) (*s_objet_argument_1).objet,
                    221:                (unsigned char *) (*s_objet_argument_2).objet) <= 0) ? -1 : 0;
                    222:    }
                    223: 
                    224: /*
                    225: --------------------------------------------------------------------------------
                    226:   GE entre des arguments complexes
                    227: --------------------------------------------------------------------------------
                    228: */
                    229: 
                    230:    /*
                    231:     * Nom ou valeur numérique / Nom ou valeur numérique
                    232:     */
                    233: 
                    234:    else if ((((*s_objet_argument_1).type == NOM) &&
                    235:            (((*s_objet_argument_2).type == NOM) ||
                    236:            ((*s_objet_argument_2).type == INT) ||
                    237:            ((*s_objet_argument_2).type == REL))) ||
                    238:            (((*s_objet_argument_2).type == NOM) &&
                    239:            (((*s_objet_argument_1).type == INT) ||
                    240:            ((*s_objet_argument_1).type == REL))))
                    241:    {
                    242:        if ((s_objet_resultat = allocation(s_etat_processus, ALG))
                    243:                == NULL)
                    244:        {
                    245:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                    246:            return;
                    247:        }
                    248: 
                    249:        if (((*s_objet_resultat).objet =
                    250:                allocation_maillon(s_etat_processus)) == NULL)
                    251:        {
                    252:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                    253:            return;
                    254:        }
                    255: 
                    256:        l_element_courant = (*s_objet_resultat).objet;
                    257: 
                    258:        if (((*l_element_courant).donnee = allocation(s_etat_processus, FCT))
                    259:                == NULL)
                    260:        {
                    261:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                    262:            return;
                    263:        }
                    264: 
                    265:        (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
                    266:                .nombre_arguments = 0;
                    267:        (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
                    268:                .fonction = instruction_vers_niveau_superieur;
                    269: 
                    270:        if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
                    271:                .nom_fonction = malloc(3 * sizeof(unsigned char))) == NULL)
                    272:        {
                    273:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                    274:            return;
                    275:        }
                    276: 
                    277:        strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
                    278:                .nom_fonction, "<<");
                    279: 
                    280:        if (((*l_element_courant).suivant =
                    281:                allocation_maillon(s_etat_processus)) == NULL)
                    282:        {
                    283:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                    284:            return;
                    285:        }
                    286: 
                    287:        l_element_courant = (*l_element_courant).suivant;
                    288:        (*l_element_courant).donnee = s_objet_argument_2;
                    289: 
                    290:        if (((*l_element_courant).suivant =
                    291:                allocation_maillon(s_etat_processus)) == NULL)
                    292:        {
                    293:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                    294:            return;
                    295:        }
                    296: 
                    297:        l_element_courant = (*l_element_courant).suivant;
                    298:        (*l_element_courant).donnee = s_objet_argument_1;
                    299: 
                    300:        if (((*l_element_courant).suivant =
                    301:                allocation_maillon(s_etat_processus)) == NULL)
                    302:        {
                    303:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                    304:            return;
                    305:        }
                    306: 
                    307:        l_element_courant = (*l_element_courant).suivant;
                    308: 
                    309:        if (((*l_element_courant).donnee = allocation(s_etat_processus, FCT))
                    310:                == NULL)
                    311:        {
                    312:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                    313:            return;
                    314:        }
                    315: 
                    316:        (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
                    317:                .nombre_arguments = 0;
                    318:        (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
                    319:                .fonction = instruction_ge;
                    320: 
                    321:        if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
                    322:                .nom_fonction = malloc(3 * sizeof(unsigned char))) == NULL)
                    323:        {
                    324:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                    325:            return;
                    326:        }
                    327: 
                    328:        strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
                    329:                .nom_fonction, ">=");
                    330: 
                    331:        if (((*l_element_courant).suivant =
                    332:                allocation_maillon(s_etat_processus)) == NULL)
                    333:        {
                    334:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                    335:            return;
                    336:        }
                    337: 
                    338:        l_element_courant = (*l_element_courant).suivant;
                    339: 
                    340:        if (((*l_element_courant).donnee = allocation(s_etat_processus, FCT))
                    341:                == NULL)
                    342:        {
                    343:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                    344:            return;
                    345:        }
                    346: 
                    347:        (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
                    348:                .nombre_arguments = 0;
                    349:        (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
                    350:                .fonction = instruction_vers_niveau_inferieur;
                    351: 
                    352:        if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
                    353:                .nom_fonction = malloc(3 * sizeof(unsigned char))) == NULL)
                    354:        {
                    355:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                    356:            return;
                    357:        }
                    358: 
                    359:        strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
                    360:                .nom_fonction, ">>");
                    361: 
                    362:        (*l_element_courant).suivant = NULL;
                    363: 
                    364:        s_objet_argument_1 = NULL;
                    365:        s_objet_argument_2 = NULL;
                    366:    }
                    367: 
                    368:    /*
                    369:     * Nom ou valeur numérique / Expression
                    370:     */
                    371: 
                    372:    else if (((((*s_objet_argument_1).type == ALG) ||
                    373:            ((*s_objet_argument_1).type == RPN))) &&
                    374:            (((*s_objet_argument_2).type == NOM) ||
                    375:            ((*s_objet_argument_2).type == INT) ||
                    376:            ((*s_objet_argument_2).type == REL)))
                    377:    {
                    378:        nombre_elements = 0;
                    379:        l_element_courant = (struct_liste_chainee *)
                    380:                (*s_objet_argument_1).objet;
                    381: 
                    382:        while(l_element_courant != NULL)
                    383:        {
                    384:            nombre_elements++;
                    385:            l_element_courant = (*l_element_courant).suivant;
                    386:        }
                    387: 
                    388:        if (nombre_elements == 2)
                    389:        {
                    390:            liberation(s_etat_processus, s_objet_argument_1);
                    391:            liberation(s_etat_processus, s_objet_argument_2);
                    392: 
                    393:            (*s_etat_processus).erreur_execution = d_ex_argument_invalide;
                    394:            return;
                    395:        }
                    396: 
                    397:        if ((s_objet_resultat = copie_objet(s_etat_processus,
                    398:                s_objet_argument_1, 'N')) == NULL)
                    399:        {
                    400:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                    401:            return;
                    402:        }
                    403: 
                    404:        l_element_courant = (struct_liste_chainee *)
                    405:                (*s_objet_resultat).objet;
                    406:        l_element_precedent = l_element_courant;
                    407:        l_element_courant = (*l_element_courant).suivant;
                    408: 
                    409:        if (((*l_element_precedent).suivant =
                    410:                allocation_maillon(s_etat_processus)) == NULL)
                    411:        {
                    412:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                    413:            return;
                    414:        }
                    415: 
                    416:        (*(*l_element_precedent).suivant).donnee = s_objet_argument_2;
                    417:        (*(*l_element_precedent).suivant).suivant = l_element_courant;
                    418: 
                    419:        while((*l_element_courant).suivant != NULL)
                    420:        {
                    421:            l_element_precedent = l_element_courant;
                    422:            l_element_courant = (*l_element_courant).suivant;
                    423:        }
                    424: 
                    425:        if (((*l_element_precedent).suivant =
                    426:                allocation_maillon(s_etat_processus)) == NULL)
                    427:        {
                    428:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                    429:            return;
                    430:        }
                    431: 
                    432:        if (((*(*l_element_precedent).suivant).donnee =
                    433:                allocation(s_etat_processus, FCT)) == NULL)
                    434:        {
                    435:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                    436:            return;
                    437:        }
                    438: 
                    439:        (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
                    440:                .donnee).objet)).nombre_arguments = 0;
                    441:        (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
                    442:                .donnee).objet)).fonction = instruction_ge;
                    443: 
                    444:        if (((*((struct_fonction *) (*(*(*l_element_precedent)
                    445:                .suivant).donnee).objet)).nom_fonction =
                    446:                malloc(3 * sizeof(unsigned char))) == NULL)
                    447:        {
                    448:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                    449:            return;
                    450:        }
                    451: 
                    452:        strcpy((*((struct_fonction *) (*(*(*l_element_precedent)
                    453:                .suivant).donnee).objet)).nom_fonction, ">=");
                    454: 
                    455:        (*(*l_element_precedent).suivant).suivant = l_element_courant;
                    456: 
                    457:        s_objet_argument_2 = NULL;
                    458:    }
                    459: 
                    460:    /*
                    461:     * Expression / Nom ou valeur numérique
                    462:     */
                    463: 
                    464:    else if ((((*s_objet_argument_1).type == NOM) ||
                    465:            ((*s_objet_argument_1).type == INT) ||
                    466:            ((*s_objet_argument_1).type == REL)) &&
                    467:            ((((*s_objet_argument_2).type == ALG) ||
                    468:            ((*s_objet_argument_2).type == RPN))))
                    469:    {
                    470:        nombre_elements = 0;
                    471:        l_element_courant = (struct_liste_chainee *)
                    472:                (*s_objet_argument_2).objet;
                    473: 
                    474:        while(l_element_courant != NULL)
                    475:        {
                    476:            nombre_elements++;
                    477:            l_element_courant = (*l_element_courant).suivant;
                    478:        }
                    479: 
                    480:        if (nombre_elements == 2)
                    481:        {
                    482:            liberation(s_etat_processus, s_objet_argument_1);
                    483:            liberation(s_etat_processus, s_objet_argument_2);
                    484: 
                    485:            (*s_etat_processus).erreur_execution = d_ex_argument_invalide;
                    486:            return;
                    487:        }
                    488: 
                    489:        if ((s_objet_resultat = copie_objet(s_etat_processus,
                    490:                s_objet_argument_2, 'N')) == NULL)
                    491:        {
                    492:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                    493:            return;
                    494:        }
                    495: 
                    496:        l_element_courant = (struct_liste_chainee *)
                    497:                (*s_objet_resultat).objet;
                    498:        l_element_precedent = l_element_courant;
                    499: 
                    500:        while((*l_element_courant).suivant != NULL)
                    501:        {
                    502:            l_element_precedent = l_element_courant;
                    503:            l_element_courant = (*l_element_courant).suivant;
                    504:        }
                    505: 
                    506:        if (((*l_element_precedent).suivant =
                    507:                allocation_maillon(s_etat_processus)) == NULL)
                    508:        {
                    509:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                    510:            return;
                    511:        }
                    512: 
                    513:        (*(*l_element_precedent).suivant).donnee = s_objet_argument_1;
                    514:        l_element_precedent = (*l_element_precedent).suivant;
                    515: 
                    516:        if (((*l_element_precedent).suivant =
                    517:                allocation_maillon(s_etat_processus)) == NULL)
                    518:        {
                    519:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                    520:            return;
                    521:        }
                    522: 
                    523:        if (((*(*l_element_precedent).suivant).donnee =
                    524:                allocation(s_etat_processus, FCT)) == NULL)
                    525:        {
                    526:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                    527:            return;
                    528:        }
                    529: 
                    530:        (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
                    531:                .donnee).objet)).nombre_arguments = 0;
                    532:        (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
                    533:                .donnee).objet)).fonction = instruction_ge;
                    534: 
                    535:        if (((*((struct_fonction *) (*(*(*l_element_precedent)
                    536:                .suivant).donnee).objet)).nom_fonction =
                    537:                malloc(3 * sizeof(unsigned char))) == NULL)
                    538:        {
                    539:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                    540:            return;
                    541:        }
                    542: 
                    543:        strcpy((*((struct_fonction *) (*(*(*l_element_precedent)
                    544:                .suivant).donnee).objet)).nom_fonction, ">=");
                    545: 
                    546:        (*(*l_element_precedent).suivant).suivant = l_element_courant;
                    547: 
                    548:        s_objet_argument_1 = NULL;
                    549:    }
                    550: 
                    551:    /*
                    552:     * Expression / Expression
                    553:     */
                    554: 
                    555:    else if ((((*s_objet_argument_1).type == ALG) &&
                    556:            ((*s_objet_argument_2).type == ALG)) ||
                    557:            (((*s_objet_argument_1).type == RPN) &&
                    558:            ((*s_objet_argument_2).type == RPN)))
                    559:    {
                    560:        nombre_elements = 0;
                    561:        l_element_courant = (struct_liste_chainee *)
                    562:                (*s_objet_argument_1).objet;
                    563: 
                    564:        while(l_element_courant != NULL)
                    565:        {
                    566:            nombre_elements++;
                    567:            l_element_courant = (*l_element_courant).suivant;
                    568:        }
                    569: 
                    570:        if (nombre_elements == 2)
                    571:        {
                    572:            liberation(s_etat_processus, s_objet_argument_1);
                    573:            liberation(s_etat_processus, s_objet_argument_2);
                    574: 
                    575:            (*s_etat_processus).erreur_execution = d_ex_argument_invalide;
                    576:            return;
                    577:        }
                    578: 
                    579:        nombre_elements = 0;
                    580:        l_element_courant = (struct_liste_chainee *)
                    581:                (*s_objet_argument_2).objet;
                    582: 
                    583:        while(l_element_courant != NULL)
                    584:        {
                    585:            nombre_elements++;
                    586:            l_element_courant = (*l_element_courant).suivant;
                    587:        }
                    588: 
                    589:        if (nombre_elements == 2)
                    590:        {
                    591:            liberation(s_etat_processus, s_objet_argument_1);
                    592:            liberation(s_etat_processus, s_objet_argument_2);
                    593: 
                    594:            (*s_etat_processus).erreur_execution = d_ex_argument_invalide;
                    595:            return;
                    596:        }
                    597: 
                    598:        if ((s_copie_argument_1 = copie_objet(s_etat_processus,
                    599:                s_objet_argument_1, 'N')) == NULL)
                    600:        {
                    601:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                    602:            return;
                    603:        }
                    604: 
                    605:        if ((s_copie_argument_2 = copie_objet(s_etat_processus,
                    606:                s_objet_argument_2, 'N')) == NULL)
                    607:        {
                    608:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                    609:            return;
                    610:        }
                    611: 
                    612:        l_element_courant = (struct_liste_chainee *)
                    613:                (*s_copie_argument_1).objet;
                    614:        (*s_copie_argument_1).objet = (void *) (*((struct_liste_chainee *)
                    615:                (*s_copie_argument_1).objet)).suivant;
                    616: 
                    617:        liberation(s_etat_processus, (*l_element_courant).donnee);
                    618:        free(l_element_courant);
                    619: 
                    620:        l_element_courant = (struct_liste_chainee *)
                    621:                (*s_copie_argument_2).objet;
                    622:        l_element_precedent = l_element_courant;
                    623:        s_objet_resultat = s_copie_argument_2;
                    624: 
                    625:        while((*l_element_courant).suivant != NULL)
                    626:        {
                    627:            l_element_precedent = l_element_courant;
                    628:            l_element_courant = (*l_element_courant).suivant;
                    629:        }
                    630: 
                    631:        liberation(s_etat_processus, (*l_element_courant).donnee);
                    632:        free(l_element_courant);
                    633: 
                    634:        (*l_element_precedent).suivant = (struct_liste_chainee *)
                    635:                (*s_copie_argument_1).objet;
                    636:        free(s_copie_argument_1);
                    637: 
                    638:        l_element_courant = (*l_element_precedent).suivant;
                    639:        while((*l_element_courant).suivant != NULL)
                    640:        {
                    641:            l_element_precedent = l_element_courant;
                    642:            l_element_courant = (*l_element_courant).suivant;
                    643:        }
                    644: 
                    645:        if (((*l_element_precedent).suivant =
                    646:                allocation_maillon(s_etat_processus)) == NULL)
                    647:        {
                    648:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                    649:            return;
                    650:        }
                    651: 
                    652:        (*(*l_element_precedent).suivant).suivant = l_element_courant;
                    653:        l_element_courant = (*l_element_precedent).suivant;
                    654: 
                    655:        if (((*l_element_courant).donnee = allocation(s_etat_processus, FCT))
                    656:                == NULL)
                    657:        {
                    658:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                    659:            return;
                    660:        }
                    661: 
                    662:        (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
                    663:                .nombre_arguments = 0;
                    664:        (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
                    665:                .fonction = instruction_ge;
                    666: 
                    667:        if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
                    668:                .nom_fonction = malloc(3 * sizeof(unsigned char))) == NULL)
                    669:        {
                    670:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                    671:            return;
                    672:        }
                    673: 
                    674:        strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
                    675:                .nom_fonction, ">=");
                    676:    }
                    677: 
                    678: /*
                    679: --------------------------------------------------------------------------------
                    680:   GE impossible
                    681: --------------------------------------------------------------------------------
                    682: */
                    683: 
                    684:    else
                    685:    {
                    686:        liberation(s_etat_processus, s_objet_argument_1);
                    687:        liberation(s_etat_processus, s_objet_argument_2);
                    688: 
                    689:        (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
                    690:        return;
                    691:    }
                    692: 
                    693:    liberation(s_etat_processus, s_objet_argument_1);
                    694:    liberation(s_etat_processus, s_objet_argument_2);
                    695: 
                    696:    if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
                    697:            s_objet_resultat) == d_erreur)
                    698:    {
                    699:        return;
                    700:    }
                    701: 
                    702:    return;
                    703: }
                    704: 
                    705: 
                    706: /*
                    707: ================================================================================
                    708:   Fonction '>'
                    709: ================================================================================
                    710:   Entrées :
                    711: --------------------------------------------------------------------------------
                    712:   Sorties :
                    713: --------------------------------------------------------------------------------
                    714:   Effets de bord : néant
                    715: ================================================================================
                    716: */
                    717: 
                    718: void
                    719: instruction_gt(struct_processus *s_etat_processus)
                    720: {
                    721:    struct_liste_chainee        *l_element_courant;
                    722:    struct_liste_chainee        *l_element_precedent;
                    723: 
                    724:    struct_objet                *s_copie_argument_1;
                    725:    struct_objet                *s_copie_argument_2;
                    726:    struct_objet                *s_objet_argument_1;
                    727:    struct_objet                *s_objet_argument_2;
                    728:    struct_objet                *s_objet_resultat;
                    729: 
                    730:    unsigned long               nombre_elements;
                    731: 
                    732:    (*s_etat_processus).erreur_execution = d_ex;
                    733: 
                    734:    if ((*s_etat_processus).affichage_arguments == 'Y')
                    735:    {
                    736:        printf("\n  > ");
                    737: 
                    738:        if ((*s_etat_processus).langue == 'F')
                    739:        {
                    740:            printf("(opérateur supérieur strictement)\n\n");
                    741:        }
                    742:        else
                    743:        {
                    744:            printf("(greater than)\n\n");
                    745:        }
                    746: 
                    747:        printf("    2: %s, %s\n", d_INT, d_REL);
                    748:        printf("    1: %s, %s\n", d_INT, d_REL);
                    749:        printf("->  1: %s\n\n", d_INT);
                    750: 
                    751:        printf("    2: %s\n", d_BIN);
                    752:        printf("    1: %s\n", d_BIN);
                    753:        printf("->  1: %s\n\n", d_INT);
                    754: 
                    755:        printf("    2: %s\n", d_CHN);
                    756:        printf("    1: %s\n", d_CHN);
                    757:        printf("->  1: %s\n\n", d_INT);
                    758: 
                    759:        printf("    2: %s\n", d_NOM);
                    760:        printf("    1: %s, %s, %s, %s\n", d_NOM, d_ALG, d_INT, d_REL);
                    761:        printf("->  1: %s\n\n", d_ALG);
                    762: 
                    763:        printf("    2: %s, %s, %s, %s\n", d_NOM, d_ALG, d_INT, d_REL);
                    764:        printf("    1: %s\n", d_NOM);
                    765:        printf("->  1: %s\n\n", d_ALG);
                    766: 
                    767:        printf("    2: %s\n", d_ALG);
                    768:        printf("    1: %s\n", d_ALG);
                    769:        printf("->  1: %s\n\n", d_ALG);
                    770: 
                    771:        printf("    2: %s\n", d_RPN);
                    772:        printf("    1: %s\n", d_RPN);
                    773:        printf("->  1: %s\n", d_RPN);
                    774: 
                    775:        return;
                    776:    }
                    777:    else if ((*s_etat_processus).test_instruction == 'Y')
                    778:    {
                    779:        (*s_etat_processus).nombre_arguments = 0;
                    780:        return;
                    781:    }
                    782:    
                    783:    if (test_cfsf(s_etat_processus, 31) == d_vrai)
                    784:    {
                    785:        if (empilement_pile_last(s_etat_processus, 2) == d_erreur)
                    786:        {
                    787:            return;
                    788:        }
                    789:    }
                    790: 
                    791:    if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
                    792:            &s_objet_argument_1) == d_erreur)
                    793:    {
                    794:        (*s_etat_processus).erreur_execution = d_ex_manque_argument;
                    795:        return;
                    796:    }
                    797: 
                    798:    if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
                    799:            &s_objet_argument_2) == d_erreur)
                    800:    {
                    801:        liberation(s_etat_processus, s_objet_argument_1);
                    802: 
                    803:        (*s_etat_processus).erreur_execution = d_ex_manque_argument;
                    804:        return;
                    805:    }
                    806: 
                    807: /*
                    808: --------------------------------------------------------------------------------
                    809:   GT sur des valeurs numériques
                    810: --------------------------------------------------------------------------------
                    811: */
                    812: 
                    813:    if ((((*s_objet_argument_1).type == INT) ||
                    814:            ((*s_objet_argument_1).type == REL)) &&
                    815:            (((*s_objet_argument_2).type == INT) ||
                    816:            ((*s_objet_argument_2).type == REL)))
                    817:    {
                    818:        if ((s_objet_resultat = allocation(s_etat_processus, INT))
                    819:                == NULL)
                    820:        {
                    821:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                    822:            return;
                    823:        }
                    824: 
                    825:        if ((*s_objet_argument_1).type == INT)
                    826:        {
                    827:            if ((*s_objet_argument_2).type == INT)
                    828:            {
                    829:                (*((integer8 *) (*s_objet_resultat).objet)) =
                    830:                        ((*((integer8 *) (*s_objet_argument_1).objet)) <
                    831:                        (*((integer8 *) (*s_objet_argument_2).objet)))
                    832:                        ? -1 : 0;
                    833:            }
                    834:            else
                    835:            {
                    836:                (*((integer8 *) (*s_objet_resultat).objet)) =
                    837:                        ((*((integer8 *) (*s_objet_argument_1).objet)) <
                    838:                        (*((real8 *) (*s_objet_argument_2).objet)))
                    839:                        ? -1 : 0;
                    840:            }
                    841:        }
                    842:        else
                    843:        {
                    844:            if ((*s_objet_argument_2).type == INT)
                    845:            {
                    846:                (*((integer8 *) (*s_objet_resultat).objet)) =
                    847:                        ((*((real8 *) (*s_objet_argument_1).objet)) <
                    848:                        (*((integer8 *) (*s_objet_argument_2).objet)))
                    849:                        ? -1 : 0;
                    850:            }
                    851:            else
                    852:            {
                    853:                (*((integer8 *) (*s_objet_resultat).objet)) =
                    854:                        ((*((real8 *) (*s_objet_argument_1).objet)) <
                    855:                        (*((real8 *) (*s_objet_argument_2).objet)))
                    856:                        ? -1 : 0;
                    857:            }
                    858:        }
                    859:    }
                    860: 
                    861: /*
                    862: --------------------------------------------------------------------------------
                    863:   GT binaire
                    864: --------------------------------------------------------------------------------
                    865: */
                    866: 
                    867:    else if (((*s_objet_argument_1).type == BIN) &&
                    868:            ((*s_objet_argument_2).type == BIN))
                    869:    {
                    870:        if ((s_objet_resultat = allocation(s_etat_processus, INT))
                    871:                == NULL)
                    872:        {
                    873:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                    874:            return;
                    875:        }
                    876: 
                    877:        (*((integer8 *) (*s_objet_resultat).objet)) = 
                    878:                ((*((logical8 *) (*s_objet_argument_1).objet)) <
                    879:                (*((logical8 *) (*s_objet_argument_2).objet)))
                    880:                ? -1 : 0;
                    881:    }
                    882: 
                    883: /*
                    884: --------------------------------------------------------------------------------
                    885:   GT portant sur des chaînes de caractères
                    886: --------------------------------------------------------------------------------
                    887: */
                    888: 
                    889:    else if (((*s_objet_argument_1).type == CHN) &&
                    890:            ((*s_objet_argument_2).type == CHN))
                    891:    {
                    892:        if ((s_objet_resultat = allocation(s_etat_processus, INT))
                    893:                == NULL)
                    894:        {
                    895:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                    896:            return;
                    897:        }
                    898: 
                    899:        (*((integer8 *) (*s_objet_resultat).objet)) =
                    900:                (strcmp((unsigned char *) (*s_objet_argument_1).objet,
                    901:                (unsigned char *) (*s_objet_argument_2).objet) < 0) ? -1 : 0;
                    902:    }
                    903: 
                    904: /*
                    905: --------------------------------------------------------------------------------
                    906:   GT entre des arguments complexes
                    907: --------------------------------------------------------------------------------
                    908: */
                    909: 
                    910:    /*
                    911:     * Nom ou valeur numérique / Nom ou valeur numérique
                    912:     */
                    913: 
                    914:    else if ((((*s_objet_argument_1).type == NOM) &&
                    915:            (((*s_objet_argument_2).type == NOM) ||
                    916:            ((*s_objet_argument_2).type == INT) ||
                    917:            ((*s_objet_argument_2).type == REL))) ||
                    918:            (((*s_objet_argument_2).type == NOM) &&
                    919:            (((*s_objet_argument_1).type == INT) ||
                    920:            ((*s_objet_argument_1).type == REL))))
                    921:    {
                    922:        if ((s_objet_resultat = allocation(s_etat_processus, ALG))
                    923:                == NULL)
                    924:        {
                    925:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                    926:            return;
                    927:        }
                    928: 
                    929:        if (((*s_objet_resultat).objet =
                    930:                allocation_maillon(s_etat_processus)) == NULL)
                    931:        {
                    932:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                    933:            return;
                    934:        }
                    935: 
                    936:        l_element_courant = (*s_objet_resultat).objet;
                    937: 
                    938:        if (((*l_element_courant).donnee = allocation(s_etat_processus, FCT))
                    939:                == NULL)
                    940:        {
                    941:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                    942:            return;
                    943:        }
                    944: 
                    945:        (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
                    946:                .nombre_arguments = 0;
                    947:        (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
                    948:                .fonction = instruction_vers_niveau_superieur;
                    949: 
                    950:        if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
                    951:                .nom_fonction = malloc(3 * sizeof(unsigned char))) == NULL)
                    952:        {
                    953:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                    954:            return;
                    955:        }
                    956: 
                    957:        strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
                    958:                .nom_fonction, "<<");
                    959: 
                    960:        if (((*l_element_courant).suivant =
                    961:                allocation_maillon(s_etat_processus)) == NULL)
                    962:        {
                    963:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                    964:            return;
                    965:        }
                    966: 
                    967:        l_element_courant = (*l_element_courant).suivant;
                    968:        (*l_element_courant).donnee = s_objet_argument_2;
                    969: 
                    970:        if (((*l_element_courant).suivant =
                    971:                allocation_maillon(s_etat_processus)) == NULL)
                    972:        {
                    973:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                    974:            return;
                    975:        }
                    976: 
                    977:        l_element_courant = (*l_element_courant).suivant;
                    978:        (*l_element_courant).donnee = s_objet_argument_1;
                    979: 
                    980:        if (((*l_element_courant).suivant =
                    981:                allocation_maillon(s_etat_processus)) == NULL)
                    982:        {
                    983:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                    984:            return;
                    985:        }
                    986: 
                    987:        l_element_courant = (*l_element_courant).suivant;
                    988: 
                    989:        if (((*l_element_courant).donnee = allocation(s_etat_processus, FCT))
                    990:                == NULL)
                    991:        {
                    992:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                    993:            return;
                    994:        }
                    995: 
                    996:        (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
                    997:                .nombre_arguments = 0;
                    998:        (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
                    999:                .fonction = instruction_gt;
                   1000: 
                   1001:        if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
                   1002:                .nom_fonction = malloc(2 * sizeof(unsigned char))) == NULL)
                   1003:        {
                   1004:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   1005:            return;
                   1006:        }
                   1007: 
                   1008:        strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
                   1009:                .nom_fonction, ">");
                   1010: 
                   1011:        if (((*l_element_courant).suivant =
                   1012:                allocation_maillon(s_etat_processus)) == NULL)
                   1013:        {
                   1014:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   1015:            return;
                   1016:        }
                   1017: 
                   1018:        l_element_courant = (*l_element_courant).suivant;
                   1019: 
                   1020:        if (((*l_element_courant).donnee = allocation(s_etat_processus, FCT))
                   1021:                == NULL)
                   1022:        {
                   1023:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   1024:            return;
                   1025:        }
                   1026: 
                   1027:        (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
                   1028:                .nombre_arguments = 0;
                   1029:        (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
                   1030:                .fonction = instruction_vers_niveau_inferieur;
                   1031: 
                   1032:        if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
                   1033:                .nom_fonction = malloc(3 * sizeof(unsigned char))) == NULL)
                   1034:        {
                   1035:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   1036:            return;
                   1037:        }
                   1038: 
                   1039:        strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
                   1040:                .nom_fonction, ">>");
                   1041: 
                   1042:        (*l_element_courant).suivant = NULL;
                   1043: 
                   1044:        s_objet_argument_1 = NULL;
                   1045:        s_objet_argument_2 = NULL;
                   1046:    }
                   1047: 
                   1048:    /*
                   1049:     * Nom ou valeur numérique / Expression
                   1050:     */
                   1051: 
                   1052:    else if (((((*s_objet_argument_1).type == ALG) ||
                   1053:            ((*s_objet_argument_1).type == RPN))) &&
                   1054:            (((*s_objet_argument_2).type == NOM) ||
                   1055:            ((*s_objet_argument_2).type == INT) ||
                   1056:            ((*s_objet_argument_2).type == REL)))
                   1057:    {
                   1058:        nombre_elements = 0;
                   1059:        l_element_courant = (struct_liste_chainee *)
                   1060:                (*s_objet_argument_1).objet;
                   1061: 
                   1062:        while(l_element_courant != NULL)
                   1063:        {
                   1064:            nombre_elements++;
                   1065:            l_element_courant = (*l_element_courant).suivant;
                   1066:        }
                   1067: 
                   1068:        if (nombre_elements == 2)
                   1069:        {
                   1070:            liberation(s_etat_processus, s_objet_argument_1);
                   1071:            liberation(s_etat_processus, s_objet_argument_2);
                   1072: 
                   1073:            (*s_etat_processus).erreur_execution = d_ex_argument_invalide;
                   1074:            return;
                   1075:        }
                   1076: 
                   1077:        if ((s_objet_resultat = copie_objet(s_etat_processus,
                   1078:                s_objet_argument_1, 'N')) == NULL)
                   1079:        {
                   1080:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   1081:            return;
                   1082:        }
                   1083: 
                   1084:        l_element_courant = (struct_liste_chainee *)
                   1085:                (*s_objet_resultat).objet;
                   1086:        l_element_precedent = l_element_courant;
                   1087:        l_element_courant = (*l_element_courant).suivant;
                   1088: 
                   1089:        if (((*l_element_precedent).suivant =
                   1090:                allocation_maillon(s_etat_processus)) == NULL)
                   1091:        {
                   1092:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   1093:            return;
                   1094:        }
                   1095: 
                   1096:        (*(*l_element_precedent).suivant).donnee = s_objet_argument_2;
                   1097:        (*(*l_element_precedent).suivant).suivant = l_element_courant;
                   1098: 
                   1099:        while((*l_element_courant).suivant != NULL)
                   1100:        {
                   1101:            l_element_precedent = l_element_courant;
                   1102:            l_element_courant = (*l_element_courant).suivant;
                   1103:        }
                   1104: 
                   1105:        if (((*l_element_precedent).suivant =
                   1106:                allocation_maillon(s_etat_processus)) == NULL)
                   1107:        {
                   1108:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   1109:            return;
                   1110:        }
                   1111: 
                   1112:        if (((*(*l_element_precedent).suivant).donnee =
                   1113:                allocation(s_etat_processus, FCT)) == NULL)
                   1114:        {
                   1115:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   1116:            return;
                   1117:        }
                   1118: 
                   1119:        (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
                   1120:                .donnee).objet)).nombre_arguments = 0;
                   1121:        (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
                   1122:                .donnee).objet)).fonction = instruction_gt;
                   1123: 
                   1124:        if (((*((struct_fonction *) (*(*(*l_element_precedent)
                   1125:                .suivant).donnee).objet)).nom_fonction =
                   1126:                malloc(2 * sizeof(unsigned char))) == NULL)
                   1127:        {
                   1128:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   1129:            return;
                   1130:        }
                   1131: 
                   1132:        strcpy((*((struct_fonction *) (*(*(*l_element_precedent)
                   1133:                .suivant).donnee).objet)).nom_fonction, ">");
                   1134: 
                   1135:        (*(*l_element_precedent).suivant).suivant = l_element_courant;
                   1136: 
                   1137:        s_objet_argument_2 = NULL;
                   1138:    }
                   1139: 
                   1140:    /*
                   1141:     * Expression / Nom ou valeur numérique
                   1142:     */
                   1143: 
                   1144:    else if ((((*s_objet_argument_1).type == NOM) ||
                   1145:            ((*s_objet_argument_1).type == INT) ||
                   1146:            ((*s_objet_argument_1).type == REL)) &&
                   1147:            ((((*s_objet_argument_2).type == ALG) ||
                   1148:            ((*s_objet_argument_2).type == RPN))))
                   1149:    {
                   1150:        nombre_elements = 0;
                   1151:        l_element_courant = (struct_liste_chainee *)
                   1152:                (*s_objet_argument_2).objet;
                   1153: 
                   1154:        while(l_element_courant != NULL)
                   1155:        {
                   1156:            nombre_elements++;
                   1157:            l_element_courant = (*l_element_courant).suivant;
                   1158:        }
                   1159: 
                   1160:        if (nombre_elements == 2)
                   1161:        {
                   1162:            liberation(s_etat_processus, s_objet_argument_1);
                   1163:            liberation(s_etat_processus, s_objet_argument_2);
                   1164: 
                   1165:            (*s_etat_processus).erreur_execution = d_ex_argument_invalide;
                   1166:            return;
                   1167:        }
                   1168: 
                   1169:        if ((s_objet_resultat = copie_objet(s_etat_processus,
                   1170:                s_objet_argument_2, 'N')) == NULL)
                   1171:        {
                   1172:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   1173:            return;
                   1174:        }
                   1175: 
                   1176:        l_element_courant = (struct_liste_chainee *)
                   1177:                (*s_objet_resultat).objet;
                   1178:        l_element_precedent = l_element_courant;
                   1179: 
                   1180:        while((*l_element_courant).suivant != NULL)
                   1181:        {
                   1182:            l_element_precedent = l_element_courant;
                   1183:            l_element_courant = (*l_element_courant).suivant;
                   1184:        }
                   1185: 
                   1186:        if (((*l_element_precedent).suivant =
                   1187:                allocation_maillon(s_etat_processus)) == NULL)
                   1188:        {
                   1189:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   1190:            return;
                   1191:        }
                   1192: 
                   1193:        (*(*l_element_precedent).suivant).donnee = s_objet_argument_1;
                   1194:        l_element_precedent = (*l_element_precedent).suivant;
                   1195: 
                   1196:        if (((*l_element_precedent).suivant =
                   1197:                allocation_maillon(s_etat_processus)) == NULL)
                   1198:        {
                   1199:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   1200:            return;
                   1201:        }
                   1202: 
                   1203:        if (((*(*l_element_precedent).suivant).donnee =
                   1204:                allocation(s_etat_processus, FCT)) == NULL)
                   1205:        {
                   1206:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   1207:            return;
                   1208:        }
                   1209: 
                   1210:        (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
                   1211:                .donnee).objet)).nombre_arguments = 0;
                   1212:        (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
                   1213:                .donnee).objet)).fonction = instruction_gt;
                   1214: 
                   1215:        if (((*((struct_fonction *) (*(*(*l_element_precedent)
                   1216:                .suivant).donnee).objet)).nom_fonction =
                   1217:                malloc(2 * sizeof(unsigned char))) == NULL)
                   1218:        {
                   1219:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   1220:            return;
                   1221:        }
                   1222: 
                   1223:        strcpy((*((struct_fonction *) (*(*(*l_element_precedent)
                   1224:                .suivant).donnee).objet)).nom_fonction, ">");
                   1225: 
                   1226:        (*(*l_element_precedent).suivant).suivant = l_element_courant;
                   1227: 
                   1228:        s_objet_argument_1 = NULL;
                   1229:    }
                   1230: 
                   1231:    /*
                   1232:     * Expression / Expression
                   1233:     */
                   1234: 
                   1235:    else if ((((*s_objet_argument_1).type == ALG) &&
                   1236:            ((*s_objet_argument_2).type == ALG)) ||
                   1237:            (((*s_objet_argument_1).type == RPN) &&
                   1238:            ((*s_objet_argument_2).type == RPN)))
                   1239:    {
                   1240:        nombre_elements = 0;
                   1241:        l_element_courant = (struct_liste_chainee *)
                   1242:                (*s_objet_argument_1).objet;
                   1243: 
                   1244:        while(l_element_courant != NULL)
                   1245:        {
                   1246:            nombre_elements++;
                   1247:            l_element_courant = (*l_element_courant).suivant;
                   1248:        }
                   1249: 
                   1250:        if (nombre_elements == 2)
                   1251:        {
                   1252:            liberation(s_etat_processus, s_objet_argument_1);
                   1253:            liberation(s_etat_processus, s_objet_argument_2);
                   1254: 
                   1255:            (*s_etat_processus).erreur_execution = d_ex_argument_invalide;
                   1256:            return;
                   1257:        }
                   1258: 
                   1259:        nombre_elements = 0;
                   1260:        l_element_courant = (struct_liste_chainee *)
                   1261:                (*s_objet_argument_2).objet;
                   1262: 
                   1263:        while(l_element_courant != NULL)
                   1264:        {
                   1265:            nombre_elements++;
                   1266:            l_element_courant = (*l_element_courant).suivant;
                   1267:        }
                   1268: 
                   1269:        if (nombre_elements == 2)
                   1270:        {
                   1271:            liberation(s_etat_processus, s_objet_argument_1);
                   1272:            liberation(s_etat_processus, s_objet_argument_2);
                   1273: 
                   1274:            (*s_etat_processus).erreur_execution = d_ex_argument_invalide;
                   1275:            return;
                   1276:        }
                   1277: 
                   1278:        if ((s_copie_argument_1 = copie_objet(s_etat_processus,
                   1279:                s_objet_argument_1, 'N')) == NULL)
                   1280:        {
                   1281:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   1282:            return;
                   1283:        }
                   1284: 
                   1285:        if ((s_copie_argument_2 = copie_objet(s_etat_processus,
                   1286:                s_objet_argument_2, 'N')) == NULL)
                   1287:        {
                   1288:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   1289:            return;
                   1290:        }
                   1291: 
                   1292:        l_element_courant = (struct_liste_chainee *)
                   1293:                (*s_copie_argument_1).objet;
                   1294:        (*s_copie_argument_1).objet = (void *) (*((struct_liste_chainee *)
                   1295:                (*s_copie_argument_1).objet)).suivant;
                   1296: 
                   1297:        liberation(s_etat_processus, (*l_element_courant).donnee);
                   1298:        free(l_element_courant);
                   1299: 
                   1300:        l_element_courant = (struct_liste_chainee *)
                   1301:                (*s_copie_argument_2).objet;
                   1302:        l_element_precedent = l_element_courant;
                   1303:        s_objet_resultat = s_copie_argument_2;
                   1304: 
                   1305:        while((*l_element_courant).suivant != NULL)
                   1306:        {
                   1307:            l_element_precedent = l_element_courant;
                   1308:            l_element_courant = (*l_element_courant).suivant;
                   1309:        }
                   1310: 
                   1311:        liberation(s_etat_processus, (*l_element_courant).donnee);
                   1312:        free(l_element_courant);
                   1313: 
                   1314:        (*l_element_precedent).suivant = (struct_liste_chainee *)
                   1315:                (*s_copie_argument_1).objet;
                   1316:        free(s_copie_argument_1);
                   1317: 
                   1318:        l_element_courant = (*l_element_precedent).suivant;
                   1319:        while((*l_element_courant).suivant != NULL)
                   1320:        {
                   1321:            l_element_precedent = l_element_courant;
                   1322:            l_element_courant = (*l_element_courant).suivant;
                   1323:        }
                   1324: 
                   1325:        if (((*l_element_precedent).suivant =
                   1326:                allocation_maillon(s_etat_processus)) == NULL)
                   1327:        {
                   1328:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   1329:            return;
                   1330:        }
                   1331: 
                   1332:        (*(*l_element_precedent).suivant).suivant = l_element_courant;
                   1333:        l_element_courant = (*l_element_precedent).suivant;
                   1334: 
                   1335:        if (((*l_element_courant).donnee = allocation(s_etat_processus, FCT))
                   1336:                == NULL)
                   1337:        {
                   1338:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   1339:            return;
                   1340:        }
                   1341: 
                   1342:        (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
                   1343:                .nombre_arguments = 0;
                   1344:        (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
                   1345:                .fonction = instruction_gt;
                   1346: 
                   1347:        if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
                   1348:                .nom_fonction = malloc(2 * sizeof(unsigned char))) == NULL)
                   1349:        {
                   1350:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   1351:            return;
                   1352:        }
                   1353: 
                   1354:        strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
                   1355:                .nom_fonction, ">");
                   1356:    }
                   1357: 
                   1358: /*
                   1359: --------------------------------------------------------------------------------
                   1360:   GT impossible
                   1361: --------------------------------------------------------------------------------
                   1362: */
                   1363: 
                   1364:    else
                   1365:    {
                   1366:        liberation(s_etat_processus, s_objet_argument_1);
                   1367:        liberation(s_etat_processus, s_objet_argument_2);
                   1368: 
                   1369:        (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
                   1370:        return;
                   1371:    }
                   1372: 
                   1373:    liberation(s_etat_processus, s_objet_argument_1);
                   1374:    liberation(s_etat_processus, s_objet_argument_2);
                   1375: 
                   1376:    if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
                   1377:            s_objet_resultat) == d_erreur)
                   1378:    {
                   1379:        return;
                   1380:    }
                   1381: 
                   1382:    return;
                   1383: }
                   1384: 
                   1385: // vim: ts=4

CVSweb interface <joel.bertrand@systella.fr>