File:  [local] / rpl / src / instructions_g1.c
Revision 1.64: download - view: text, annotated - select for diffs - revision graph
Fri Jan 10 11:15:45 2020 UTC (4 years, 3 months ago) by bertrand
Branches: MAIN
CVS tags: rpl-4_1_32, HEAD
Modification du copyright.

    1: /*
    2: ================================================================================
    3:   RPL/2 (R) version 4.1.32
    4:   Copyright (C) 1989-2020 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 '>='
   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>