File:  [local] / rpl / src / instructions_c1.c
Revision 1.3: download - view: text, annotated - select for diffs - revision graph
Wed Feb 10 10:14:20 2010 UTC (14 years, 2 months ago) by bertrand
Branches: MAIN
CVS tags: rpl-4_0_11, HEAD
Branchement vers 4.0.11

    1: /*
    2: ================================================================================
    3:   RPL/2 (R) version 4.0.11
    4:   Copyright (C) 1989-2010 Dr. BERTRAND Joël
    5: 
    6:   This file is part of RPL/2.
    7: 
    8:   RPL/2 is free software; you can redistribute it and/or modify it
    9:   under the terms of the CeCILL V2 License as published by the french
   10:   CEA, CNRS and INRIA.
   11:  
   12:   RPL/2 is distributed in the hope that it will be useful, but WITHOUT
   13:   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
   14:   FITNESS FOR A PARTICULAR PURPOSE.  See the CeCILL V2 License
   15:   for more details.
   16:  
   17:   You should have received a copy of the CeCILL License
   18:   along with RPL/2. If not, write to info@cecill.info.
   19: ================================================================================
   20: */
   21: 
   22: 
   23: #include "rpl.conv.h"
   24: 
   25: 
   26: /*
   27: ================================================================================
   28:   Fonction 'clear'
   29: ================================================================================
   30:   Entrées : structure processus
   31: --------------------------------------------------------------------------------
   32:   Sorties :
   33: --------------------------------------------------------------------------------
   34:   Effets de bord : néant
   35: ================================================================================
   36: */
   37: 
   38: void
   39: instruction_clear(struct_processus *s_etat_processus)
   40: {
   41:     struct_liste_chainee            *l_element_courant;
   42:     struct_liste_chainee            *l_element_suivant;
   43: 
   44:     (*s_etat_processus).erreur_execution = d_ex;
   45: 
   46:     if ((*s_etat_processus).affichage_arguments == 'Y')
   47:     {
   48:         printf("\n  CLEAR ");
   49: 
   50:         if ((*s_etat_processus).langue == 'F')
   51:         {
   52:             printf("(efface la pile)\n\n");
   53:             printf("  Aucun argument\n");
   54:         }
   55:         else
   56:         {
   57:             printf("(clear stack)\n\n");
   58:             printf("  No argument\n");
   59:         }
   60: 
   61:         return;
   62:     }
   63:     else if ((*s_etat_processus).test_instruction == 'Y')
   64:     {
   65:         (*s_etat_processus).nombre_arguments = -1;
   66:         return;
   67:     }
   68: 
   69:     if (test_cfsf(s_etat_processus, 31) == d_vrai)
   70:     {
   71:         if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
   72:         {
   73:             return;
   74:         }
   75:     }
   76: 
   77:     l_element_courant = (*s_etat_processus).l_base_pile;
   78:     while(l_element_courant != NULL)
   79:     {
   80:         liberation(s_etat_processus, (*l_element_courant).donnee);
   81:         l_element_suivant = (*l_element_courant).suivant;
   82: 
   83:         // On ne libère le maillon de la chaîne. On le sauvegarde
   84:         // arbitrairement dans le tampon.
   85: 
   86:         (*l_element_courant).donnee = NULL;
   87:         (*l_element_courant).suivant = (*s_etat_processus).pile_tampon;
   88:         (*s_etat_processus).pile_tampon = l_element_courant;
   89:         (*s_etat_processus).taille_pile_tampon++;
   90: 
   91:         l_element_courant = l_element_suivant;
   92:     }
   93: 
   94:     (*s_etat_processus).l_base_pile = NULL;
   95:     (*s_etat_processus).hauteur_pile_operationnelle = 0;
   96: 
   97:     return;
   98: }
   99: 
  100: 
  101: /*
  102: ================================================================================
  103:   Fonction 'cllcd' (efface la sortie graphique)
  104: ================================================================================
  105:   Entrées : structure processus
  106: --------------------------------------------------------------------------------
  107:   Sorties :
  108: --------------------------------------------------------------------------------
  109:   Effets de bord : néant
  110: ================================================================================
  111: */
  112: 
  113: void
  114: instruction_cllcd(struct_processus *s_etat_processus)
  115: {
  116:     struct_fichier_graphique            *l_element_precedent;
  117: 
  118:     struct_marque                       *marque;
  119:     struct_marque                       *prochaine_marque;
  120: 
  121:     (*s_etat_processus).erreur_execution = d_ex;
  122: 
  123:     if ((*s_etat_processus).affichage_arguments == 'Y')
  124:     {
  125:         printf("\n  CLLCD ");
  126: 
  127:         if ((*s_etat_processus).langue == 'F')
  128:         {
  129:             printf("(efface la file graphique)\n\n");
  130:             printf("  Aucun argument\n");
  131:         }
  132:         else
  133:         {
  134:             printf("(erase the graphical queue)\n\n");
  135:             printf("  No argument\n");
  136:         }
  137: 
  138:         return;
  139:     }
  140:     else if ((*s_etat_processus).test_instruction == 'Y')
  141:     {
  142:         (*s_etat_processus).nombre_arguments = -1;
  143:         return;
  144:     }
  145: 
  146:     if (test_cfsf(s_etat_processus, 31) == d_vrai)
  147:     {
  148:         if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
  149:         {
  150:             return;
  151:         }
  152:     }
  153: 
  154:     while((*s_etat_processus).fichiers_graphiques != NULL)
  155:     {
  156:         if (destruction_fichier((*(*s_etat_processus).fichiers_graphiques).nom)
  157:                 == d_erreur)
  158:         {
  159:             (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
  160:             return;
  161:         }
  162: 
  163:         free((*(*s_etat_processus).fichiers_graphiques).nom);
  164: 
  165:         if ((*(*s_etat_processus).fichiers_graphiques).legende != NULL)
  166:         {
  167:             free((*(*s_etat_processus).fichiers_graphiques).legende);
  168:         }
  169: 
  170:         l_element_precedent = (*s_etat_processus).fichiers_graphiques;
  171:         (*s_etat_processus).fichiers_graphiques =
  172:                 (*(*s_etat_processus).fichiers_graphiques).suivant;
  173: 
  174:         free(l_element_precedent);
  175:     }
  176: 
  177:     if ((*s_etat_processus).entree_standard != NULL)
  178:     {
  179:         if (fprintf((*s_etat_processus).entree_standard, "quit\n") < 0)
  180:         {
  181:             (*s_etat_processus).erreur_systeme = d_es_processus;
  182:             return;
  183:         }
  184: 
  185:         if (fflush((*s_etat_processus).entree_standard) != 0)
  186:         {
  187:             (*s_etat_processus).erreur_systeme = d_es_processus;
  188:             return;
  189:         }
  190: 
  191:         if (pclose((*s_etat_processus).entree_standard) == -1)
  192:         {
  193:             (*s_etat_processus).erreur_systeme = d_es_processus;
  194:             return;
  195:         }
  196: 
  197:         (*s_etat_processus).entree_standard = NULL;
  198:     }
  199: 
  200:     free((*s_etat_processus).titre);
  201:     free((*s_etat_processus).legende);
  202:     free((*s_etat_processus).label_x);
  203:     free((*s_etat_processus).label_y);
  204:     free((*s_etat_processus).label_z);
  205: 
  206:     (*s_etat_processus).titre = malloc(sizeof(unsigned char));
  207:     (*s_etat_processus).label_x = malloc(sizeof(unsigned char));
  208:     (*s_etat_processus).label_y = malloc(sizeof(unsigned char));
  209:     (*s_etat_processus).label_z = malloc(sizeof(unsigned char));
  210:     (*s_etat_processus).legende = malloc(sizeof(unsigned char));
  211: 
  212:     if (((*s_etat_processus).titre == NULL) ||
  213:             ((*s_etat_processus).legende == NULL) ||
  214:             ((*s_etat_processus).label_x == NULL) ||
  215:             ((*s_etat_processus).label_y == NULL) ||
  216:             ((*s_etat_processus).label_z == NULL))
  217:     {
  218:         (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  219:         return;
  220:     }
  221: 
  222:     (*s_etat_processus).titre[0] = d_code_fin_chaine;
  223:     (*s_etat_processus).label_x[0] = d_code_fin_chaine;
  224:     (*s_etat_processus).label_y[0] = d_code_fin_chaine;
  225:     (*s_etat_processus).label_z[0] = d_code_fin_chaine;
  226:     (*s_etat_processus).legende[0] = d_code_fin_chaine;
  227: 
  228:     marque = (*s_etat_processus).s_marques;
  229: 
  230:     while(marque != NULL)
  231:     {
  232:         free((*marque).position);
  233:         free((*marque).label);
  234:         prochaine_marque = (*marque).suivant;
  235:         free(marque);
  236:         marque = prochaine_marque;
  237:     }
  238: 
  239:     (*s_etat_processus).s_marques = NULL;
  240: 
  241:     return;
  242: }
  243: 
  244: 
  245: /*
  246: ================================================================================
  247:   Fonction 'cf'
  248: ================================================================================
  249:   Entrées : structure processus
  250: --------------------------------------------------------------------------------
  251:   Sorties :
  252: --------------------------------------------------------------------------------
  253:   Effets de bord : néant
  254: ================================================================================
  255: */
  256: 
  257: void
  258: instruction_cf(struct_processus *s_etat_processus)
  259: {
  260:     struct_objet                            *s_objet;
  261: 
  262:     (*s_etat_processus).erreur_execution = d_ex;
  263: 
  264:     if ((*s_etat_processus).affichage_arguments == 'Y')
  265:     {
  266:         printf("\n  CF ");
  267: 
  268:         if ((*s_etat_processus).langue == 'F')
  269:         {
  270:             printf("(efface un indicateur binaire)\n\n");
  271:         }
  272:         else
  273:         {
  274:             printf("(clear flag)\n\n");
  275:         }
  276: 
  277:         printf("    1: 1 <= %s <= 64\n", d_INT);
  278: 
  279:         return;
  280:     }
  281:     else if ((*s_etat_processus).test_instruction == 'Y')
  282:     {
  283:         (*s_etat_processus).nombre_arguments = -1;
  284:         return;
  285:     }
  286: 
  287:     if (test_cfsf(s_etat_processus, 31) == d_vrai)
  288:     {
  289:         if (empilement_pile_last(s_etat_processus, 1) == d_erreur)
  290:         {
  291:             return;
  292:         }
  293:     }
  294: 
  295:     if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
  296:             &s_objet) == d_erreur)
  297:     {
  298:         (*s_etat_processus).erreur_execution = d_ex_manque_argument;
  299:         return;
  300:     }
  301: 
  302:     if ((*s_objet).type == INT)
  303:     {
  304:         if (((*((integer8 *) (*s_objet).objet)) < 1) || ((*((integer8 *)
  305:                 (*s_objet).objet)) > 64))
  306:         {
  307:             liberation(s_etat_processus, s_objet);
  308: 
  309:             (*s_etat_processus).erreur_execution = d_ex_drapeau_inexistant;
  310:             return;
  311:         }
  312: 
  313:         cf(s_etat_processus, (unsigned char) (*((integer8 *)
  314:                 (*s_objet).objet)));
  315:     }
  316:     else
  317:     {
  318:         liberation(s_etat_processus, s_objet);
  319: 
  320:         (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
  321:         return;
  322:     }
  323: 
  324:     liberation(s_etat_processus, s_objet);
  325: 
  326:     return;
  327: }
  328: 
  329: 
  330: /*
  331: ================================================================================
  332:   Fonction 'ceil'
  333: ================================================================================
  334:   Entrées :
  335: --------------------------------------------------------------------------------
  336:   Sorties :
  337: --------------------------------------------------------------------------------
  338:   Effets de bord : néant
  339: ================================================================================
  340: */
  341: 
  342: void
  343: instruction_ceil(struct_processus *s_etat_processus)
  344: {
  345:     struct_liste_chainee                *l_element_courant;
  346:     struct_liste_chainee                *l_element_precedent;
  347: 
  348:     struct_objet                        *s_copie_argument;
  349:     struct_objet                        *s_objet_argument;
  350:     struct_objet                        *s_objet_resultat;
  351: 
  352:     (*s_etat_processus).erreur_execution = d_ex;
  353: 
  354:     if ((*s_etat_processus).affichage_arguments == 'Y')
  355:     {
  356:         printf("\n  CEIL ");
  357: 
  358:         if ((*s_etat_processus).langue == 'F')
  359:         {
  360:             printf("(entier supérieur)\n\n");
  361:         }
  362:         else
  363:         {
  364:             printf("(ceil)\n\n");
  365:         }
  366: 
  367:         printf("    1: %s\n", d_INT);
  368:         printf("->  1: %s\n\n", d_INT);
  369: 
  370:         printf("    1: %s\n", d_REL);
  371:         printf("->  1: %s\n\n", d_REL);
  372: 
  373:         printf("    1: %s, %s\n", d_NOM, d_ALG);
  374:         printf("->  1: %s\n\n", d_ALG);
  375: 
  376:         printf("    1: %s\n", d_RPN);
  377:         printf("->  1: %s\n", d_RPN);
  378: 
  379:         return;
  380:     }
  381:     else if ((*s_etat_processus).test_instruction == 'Y')
  382:     {
  383:         (*s_etat_processus).nombre_arguments = 1;
  384:         return;
  385:     }
  386: 
  387:     if (test_cfsf(s_etat_processus, 31) == d_vrai)
  388:     {
  389:         if (empilement_pile_last(s_etat_processus, 1) == d_erreur)
  390:         {
  391:             return;
  392:         }
  393:     }
  394: 
  395:     if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
  396:             &s_objet_argument) == d_erreur)
  397:     {
  398:         (*s_etat_processus).erreur_execution = d_ex_manque_argument;
  399:         return;
  400:     }
  401: 
  402: /*
  403: --------------------------------------------------------------------------------
  404:   Plafond d'un entier
  405: --------------------------------------------------------------------------------
  406: */
  407: 
  408:     if ((*s_objet_argument).type == INT)
  409:     {
  410:         s_objet_resultat = s_objet_argument;
  411:         s_objet_argument = NULL;
  412:     }
  413: 
  414: /*
  415: --------------------------------------------------------------------------------
  416:   Plafond d'un réel
  417: --------------------------------------------------------------------------------
  418: */
  419: 
  420:     else if ((*s_objet_argument).type == REL)
  421:     {
  422:         if ((s_objet_resultat = allocation(s_etat_processus, INT)) == NULL)
  423:         {
  424:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  425:             return;
  426:         }
  427: 
  428:         (*((integer8 *) (*s_objet_resultat).objet)) =
  429:                 ceil((*((real8 *) (*s_objet_argument).objet)));
  430: 
  431:         if (!(((((*((integer8 *) (*s_objet_resultat).objet)) - 1) <
  432:                 (*((real8 *) (*s_objet_argument).objet))) && ((*((integer8 *)
  433:                 (*s_objet_resultat).objet)) > (*((real8 *) (*s_objet_argument)
  434:                 .objet))))))
  435:         {
  436:             free((*s_objet_resultat).objet);
  437: 
  438:             if (((*s_objet_resultat).objet = malloc(sizeof(real8))) == NULL)
  439:             {
  440:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  441:                 return;
  442:             }
  443: 
  444:             (*s_objet_resultat).type = REL;
  445:             (*((real8 *) (*s_objet_resultat).objet)) =
  446:                     ceil((*((real8 *) (*s_objet_argument).objet)));
  447:         }
  448:     }
  449: 
  450: /*
  451: --------------------------------------------------------------------------------
  452:   Plafond d'un nom
  453: --------------------------------------------------------------------------------
  454: */
  455: 
  456:     else if ((*s_objet_argument).type == NOM)
  457:     {
  458:         if ((s_objet_resultat = allocation(s_etat_processus, ALG)) == NULL)
  459:         {
  460:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  461:             return;
  462:         }
  463: 
  464:         if (((*s_objet_resultat).objet =
  465:                 allocation_maillon(s_etat_processus)) == NULL)
  466:         {
  467:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  468:             return;
  469:         }
  470: 
  471:         l_element_courant = (*s_objet_resultat).objet;
  472: 
  473:         if (((*l_element_courant).donnee =
  474:                 allocation(s_etat_processus, FCT)) == NULL)
  475:         {
  476:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  477:             return;
  478:         }
  479: 
  480:         (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
  481:                 .nombre_arguments = 0;
  482:         (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
  483:                 .fonction = instruction_vers_niveau_superieur;
  484: 
  485:         if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
  486:                 .nom_fonction = malloc(3 * sizeof(unsigned char))) == NULL)
  487:         {
  488:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  489:             return;
  490:         }
  491: 
  492:         strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
  493:                 .nom_fonction, "<<");
  494: 
  495:         if (((*l_element_courant).suivant =
  496:                 allocation_maillon(s_etat_processus)) == NULL)
  497:         {
  498:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  499:             return;
  500:         }
  501: 
  502:         l_element_courant = (*l_element_courant).suivant;
  503:         (*l_element_courant).donnee = s_objet_argument;
  504: 
  505:         if (((*l_element_courant).suivant =
  506:                 allocation_maillon(s_etat_processus)) == NULL)
  507:         {
  508:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  509:             return;
  510:         }
  511: 
  512:         l_element_courant = (*l_element_courant).suivant;
  513: 
  514:         if (((*l_element_courant).donnee =
  515:                 allocation(s_etat_processus, FCT)) == NULL)
  516:         {
  517:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  518:             return;
  519:         }
  520: 
  521:         (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
  522:                 .nombre_arguments = 1;
  523:         (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
  524:                 .fonction = instruction_ceil;
  525: 
  526:         if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
  527:                 .nom_fonction = malloc(5 * sizeof(unsigned char))) == NULL)
  528:         {
  529:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  530:             return;
  531:         }
  532: 
  533:         strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
  534:                 .nom_fonction, "CEIL");
  535: 
  536:         if (((*l_element_courant).suivant =
  537:                 allocation_maillon(s_etat_processus)) == NULL)
  538:         {
  539:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  540:             return;
  541:         }
  542: 
  543:         l_element_courant = (*l_element_courant).suivant;
  544: 
  545:         if (((*l_element_courant).donnee =
  546:                 allocation(s_etat_processus, FCT)) == NULL)
  547:         {
  548:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  549:             return;
  550:         }
  551: 
  552:         (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
  553:                 .nombre_arguments = 0;
  554:         (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
  555:                 .fonction = instruction_vers_niveau_inferieur;
  556: 
  557:         if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
  558:                 .nom_fonction = malloc(3 * sizeof(unsigned char))) == NULL)
  559:         {
  560:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  561:             return;
  562:         }
  563: 
  564:         strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
  565:                 .nom_fonction, ">>");
  566: 
  567:         (*l_element_courant).suivant = NULL;
  568:         s_objet_argument = NULL;
  569:     }
  570: 
  571: /*
  572: --------------------------------------------------------------------------------
  573:   Plafond d'une expression
  574: --------------------------------------------------------------------------------
  575: */
  576: 
  577:     else if (((*s_objet_argument).type == ALG) ||
  578:             ((*s_objet_argument).type == RPN))
  579:     {
  580:         if ((s_copie_argument = copie_objet(s_etat_processus,
  581:                 s_objet_argument, 'N')) == NULL)
  582:         {
  583:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  584:             return;
  585:         }
  586: 
  587:         l_element_courant = (struct_liste_chainee *)
  588:                 (*s_copie_argument).objet;
  589:         l_element_precedent = l_element_courant;
  590: 
  591:         while((*l_element_courant).suivant != NULL)
  592:         {
  593:             l_element_precedent = l_element_courant;
  594:             l_element_courant = (*l_element_courant).suivant;
  595:         }
  596: 
  597:         if (((*l_element_precedent).suivant =
  598:                 allocation_maillon(s_etat_processus)) == NULL)
  599:         {
  600:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  601:             return;
  602:         }
  603: 
  604:         if (((*(*l_element_precedent).suivant).donnee =
  605:                 allocation(s_etat_processus, FCT)) == NULL)
  606:         {
  607:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  608:             return;
  609:         }
  610: 
  611:         (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
  612:                 .donnee).objet)).nombre_arguments = 1;
  613:         (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
  614:                 .donnee).objet)).fonction = instruction_ceil;
  615: 
  616:         if (((*((struct_fonction *) (*(*(*l_element_precedent)
  617:                 .suivant).donnee).objet)).nom_fonction =
  618:                 malloc(5 * sizeof(unsigned char))) == NULL)
  619:         {
  620:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  621:             return;
  622:         }
  623: 
  624:         strcpy((*((struct_fonction *) (*(*(*l_element_precedent)
  625:                 .suivant).donnee).objet)).nom_fonction, "CEIL");
  626: 
  627:         (*(*l_element_precedent).suivant).suivant = l_element_courant;
  628: 
  629:         s_objet_resultat = s_copie_argument;
  630:     }
  631: 
  632: /*
  633: --------------------------------------------------------------------------------
  634:   Fonction ceil impossible à réaliser
  635: --------------------------------------------------------------------------------
  636: */
  637: 
  638:     else
  639:     {
  640:         liberation(s_etat_processus, s_objet_argument);
  641: 
  642:         (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
  643:         return;
  644:     }
  645: 
  646:     if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
  647:             s_objet_resultat) == d_erreur)
  648:     {
  649:         return;
  650:     }
  651: 
  652:     liberation(s_etat_processus, s_objet_argument);
  653: 
  654:     return;
  655: }
  656: 
  657: 
  658: /*
  659: ================================================================================
  660:   Fonction 'case'
  661: ================================================================================
  662:   Entrées :
  663: --------------------------------------------------------------------------------
  664:   Sorties :
  665: --------------------------------------------------------------------------------
  666:   Effets de bord : néant
  667: ================================================================================
  668: */
  669: 
  670: void
  671: instruction_case(struct_processus *s_etat_processus)
  672: {
  673:     struct_objet                *s_objet;
  674: 
  675:     (*s_etat_processus).erreur_execution = d_ex;
  676: 
  677:     if ((*s_etat_processus).affichage_arguments == 'Y')
  678:     {
  679:         printf("\n  CASE ");
  680: 
  681:         if ((*s_etat_processus).langue == 'F')
  682:         {
  683:             printf("(structure de contrôle)\n\n");
  684:             printf("  Utilisation :\n\n");
  685:         }
  686:         else
  687:         {
  688:             printf("(control statement)\n\n");
  689:             printf("  Usage:\n\n");
  690:         }
  691: 
  692:         printf("    SELECT (expression test)\n");
  693:         printf("        CASE (clause 1) THEN (expression 1) END\n");
  694:         printf("        CASE (clause 2) THEN (expression 2) END\n");
  695:         printf("        ...\n");
  696:         printf("        CASE (clause n) THEN (expression n) END\n");
  697:         printf("    DEFAULT\n");
  698:         printf("        (expression)\n");
  699:         printf("    END\n\n");
  700: 
  701:         printf("    SELECT (expression test)\n");
  702:         printf("        CASE (clause 1) THEN (expression 1) END\n");
  703:         printf("        (expression)\n");
  704:         printf("        CASE (clause 2) THEN (expression 2) END\n");
  705:         printf("    END\n");
  706: 
  707:         return;
  708:     }
  709:     else if ((*s_etat_processus).test_instruction == 'Y')
  710:     {
  711:         (*s_etat_processus).nombre_arguments = -1;
  712:         return;
  713:     }
  714: 
  715:     if ((*(*s_etat_processus).l_base_pile_systeme).clause == 'S')
  716:     {
  717: 
  718:         /*
  719:          * Première apparition de l'instruction CASE dans la structure de test.
  720:          */
  721: 
  722:         if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
  723:                 &s_objet) == d_erreur)
  724:         {
  725:             (*s_etat_processus).erreur_execution = d_ex_manque_argument;
  726:             return;
  727:         }
  728: 
  729:         (*(*s_etat_processus).l_base_pile_systeme).objet_de_test = s_objet;
  730:         (*(*s_etat_processus).l_base_pile_systeme).clause = 'K';
  731:     }
  732: 
  733:     if ((s_objet = copie_objet(s_etat_processus,
  734:             (*(*s_etat_processus).l_base_pile_systeme)
  735:             .objet_de_test, 'P')) == NULL)
  736:     {
  737:         (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  738:         return;
  739:     }
  740: 
  741:     if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
  742:             s_objet) == d_erreur)
  743:     {
  744:         return;
  745:     }
  746: 
  747:     return;
  748: }
  749: 
  750: 
  751: /*
  752: ================================================================================
  753:   Fonction 'c->r'
  754: ================================================================================
  755:   Entrées : structure processus
  756: --------------------------------------------------------------------------------
  757:   Sorties :
  758: --------------------------------------------------------------------------------
  759:   Effets de bord : néant
  760: ================================================================================
  761: */
  762: 
  763: void
  764: instruction_c_vers_r(struct_processus *s_etat_processus)
  765: {
  766:     struct_objet                    *s_objet_argument;
  767:     struct_objet                    *s_objet_resultat_1;
  768:     struct_objet                    *s_objet_resultat_2;
  769: 
  770:     unsigned long                   i;
  771:     unsigned long                   j;
  772: 
  773:     (*s_etat_processus).erreur_execution = d_ex;
  774: 
  775:     if ((*s_etat_processus).affichage_arguments == 'Y')
  776:     {
  777:         printf("\n  C->R ");
  778: 
  779:         if ((*s_etat_processus).langue == 'F')
  780:         {
  781:             printf("(complexe vers réel)\n\n");
  782:         }
  783:         else
  784:         {
  785:             printf("(complex to real)\n\n");
  786:         }
  787: 
  788:         printf("    1: %s\n", d_CPL);
  789:         printf("->  2: %s\n", d_REL);
  790:         printf("    1: %s\n\n", d_REL);
  791: 
  792:         printf("    1: %s\n", d_VCX);
  793:         printf("->  2: %s\n", d_VRL);
  794:         printf("    1: %s\n\n", d_VRL);
  795: 
  796:         printf("    1: %s\n", d_MCX);
  797:         printf("->  2: %s\n", d_MRL);
  798:         printf("    1: %s\n", d_MRL);
  799: 
  800:         return;
  801:     }
  802:     else if ((*s_etat_processus).test_instruction == 'Y')
  803:     {
  804:         (*s_etat_processus).nombre_arguments = -1;
  805:         return;
  806:     }
  807: 
  808:     if (test_cfsf(s_etat_processus, 31) == d_vrai)
  809:     {
  810:         if (empilement_pile_last(s_etat_processus, 1) == d_erreur)
  811:         {
  812:             return;
  813:         }
  814:     }
  815: 
  816:     if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
  817:             &s_objet_argument) == d_erreur)
  818:     {
  819:         (*s_etat_processus).erreur_execution = d_ex_manque_argument;
  820:         return;
  821:     }
  822: 
  823: /*
  824: --------------------------------------------------------------------------------
  825:   Eclatement d'un complexe
  826: --------------------------------------------------------------------------------
  827: */
  828: 
  829:     if ((*s_objet_argument).type == CPL)
  830:     {
  831:         if ((s_objet_resultat_1 = allocation(s_etat_processus, REL))
  832:                 == NULL)
  833:         {
  834:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  835:             return;
  836:         }
  837: 
  838:         if ((s_objet_resultat_2 = allocation(s_etat_processus, REL))
  839:                 == NULL)
  840:         {
  841:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  842:             return;
  843:         }
  844: 
  845:         (*((real8 *) (*s_objet_resultat_1).objet)) =
  846:                 (*((struct_complexe16 *) (*s_objet_argument).objet))
  847:                 .partie_imaginaire;
  848: 
  849:         (*((real8 *) (*s_objet_resultat_2).objet)) =
  850:                 (*((struct_complexe16 *) (*s_objet_argument).objet))
  851:                 .partie_reelle;
  852:     }
  853: 
  854: /*
  855: --------------------------------------------------------------------------------
  856:   Eclatement d'un vecteur
  857: --------------------------------------------------------------------------------
  858: */
  859: 
  860:     else if ((*s_objet_argument).type == VCX)
  861:     {
  862:         if ((s_objet_resultat_1 = allocation(s_etat_processus, VRL))
  863:                 == NULL)
  864:         {
  865:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  866:             return;
  867:         }
  868: 
  869:         if ((s_objet_resultat_2 = allocation(s_etat_processus, VRL))
  870:                 == NULL)
  871:         {
  872:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  873:             return;
  874:         }
  875: 
  876:         if (((*((struct_vecteur *) (*s_objet_resultat_1).objet)).tableau =
  877:                 malloc((*(((struct_vecteur *) (*s_objet_argument)
  878:                 .objet))).taille * sizeof(real8))) == NULL)
  879:         {
  880:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  881:             return;
  882:         }
  883: 
  884:         if (((*((struct_vecteur *) (*s_objet_resultat_2).objet)).tableau =
  885:                 malloc((*(((struct_vecteur *) (*s_objet_argument)
  886:                 .objet))).taille * sizeof(real8))) == NULL)
  887:         {
  888:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  889:             return;
  890:         }
  891: 
  892:         (*((struct_vecteur *) (*s_objet_resultat_1).objet)).taille =
  893:                 (*(((struct_vecteur *) (*s_objet_argument).objet))).taille;
  894:         (*((struct_vecteur *) (*s_objet_resultat_2).objet)).taille =
  895:                 (*(((struct_vecteur *) (*s_objet_argument).objet))).taille;
  896: 
  897:         for(i = 0; i < (*(((struct_vecteur *) (*s_objet_argument).objet)))
  898:                 .taille; i++)
  899:         {
  900:             ((real8 *) (*((struct_vecteur *) (*s_objet_resultat_1).objet))
  901:                     .tableau)[i] = ((struct_complexe16 *) (*((struct_vecteur *)
  902:                     (*s_objet_argument).objet)).tableau)[i].partie_imaginaire;
  903: 
  904:             ((real8 *) (*((struct_vecteur *) (*s_objet_resultat_2).objet))
  905:                     .tableau)[i] = ((struct_complexe16 *) (*((struct_vecteur *)
  906:                     (*s_objet_argument).objet)).tableau)[i].partie_reelle;
  907:         }
  908:     }
  909: 
  910: /*
  911: --------------------------------------------------------------------------------
  912:   Eclatement d'une matrice
  913: --------------------------------------------------------------------------------
  914: */
  915: 
  916:     else if ((*s_objet_argument).type == MCX)
  917:     {
  918:         if ((s_objet_resultat_1 = allocation(s_etat_processus, MRL))
  919:                 == NULL)
  920:         {
  921:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  922:             return;
  923:         }
  924: 
  925:         if ((s_objet_resultat_2 = allocation(s_etat_processus, MRL))
  926:                 == NULL)
  927:         {
  928:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  929:             return;
  930:         }
  931: 
  932:         if (((*((struct_matrice *) (*s_objet_resultat_1).objet)).tableau =
  933:                 malloc((*(((struct_matrice *) (*s_objet_argument)
  934:                 .objet))).nombre_lignes * sizeof(real8 *))) == NULL)
  935:         {
  936:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  937:             return;
  938:         }
  939: 
  940:         if (((*((struct_matrice *) (*s_objet_resultat_2).objet)).tableau =
  941:                 malloc((*(((struct_matrice *) (*s_objet_argument)
  942:                 .objet))).nombre_lignes * sizeof(real8 *))) == NULL)
  943:         {
  944:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  945:             return;
  946:         }
  947: 
  948:         (*((struct_matrice *) (*s_objet_resultat_1).objet)).nombre_lignes =
  949:                 (*((struct_matrice *) (*s_objet_argument).objet)).nombre_lignes;
  950:         (*((struct_matrice *) (*s_objet_resultat_2).objet)).nombre_lignes =
  951:                 (*((struct_matrice *) (*s_objet_argument).objet)).nombre_lignes;
  952:         (*((struct_matrice *) (*s_objet_resultat_1).objet)).nombre_colonnes =
  953:                 (*((struct_matrice *) (*s_objet_argument).objet))
  954:                 .nombre_colonnes;
  955:         (*((struct_matrice *) (*s_objet_resultat_2).objet)).nombre_colonnes =
  956:                 (*((struct_matrice *) (*s_objet_argument).objet))
  957:                 .nombre_colonnes;
  958: 
  959:         for(i = 0; i < (*(((struct_matrice *) (*s_objet_argument).objet)))
  960:                 .nombre_lignes; i++)
  961:         {
  962:             if ((((real8 **) (*((struct_matrice *) (*s_objet_resultat_1)
  963:                     .objet)).tableau)[i] = malloc(
  964:                     (*(((struct_matrice *) (*s_objet_argument).objet)))
  965:                     .nombre_colonnes * sizeof(real8))) == NULL)
  966:             {
  967:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  968:                 return;
  969:             }
  970: 
  971:             if ((((real8 **) (*((struct_matrice *) (*s_objet_resultat_2)
  972:                     .objet)).tableau)[i] = malloc(
  973:                     (*(((struct_matrice *) (*s_objet_argument).objet)))
  974:                     .nombre_colonnes * sizeof(real8))) == NULL)
  975:             {
  976:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  977:                 return;
  978:             }
  979: 
  980:             for(j = 0; j < (*(((struct_matrice *) (*s_objet_argument).objet)))
  981:                     .nombre_colonnes; j++)
  982:             {
  983:                 ((real8 **) (*((struct_matrice *) (*s_objet_resultat_1).objet))
  984:                         .tableau)[i][j] = ((struct_complexe16 **)
  985:                         (*((struct_matrice *) (*s_objet_argument).objet))
  986:                         .tableau)[i][j].partie_imaginaire;
  987: 
  988:                 ((real8 **) (*((struct_matrice *) (*s_objet_resultat_2).objet))
  989:                         .tableau)[i][j] = ((struct_complexe16 **)
  990:                         (*((struct_matrice *) (*s_objet_argument).objet))
  991:                         .tableau)[i][j].partie_reelle;
  992:             }
  993:         }
  994:     }
  995: 
  996: /*
  997: --------------------------------------------------------------------------------
  998:   Eclatement impossible
  999: --------------------------------------------------------------------------------
 1000: */
 1001: 
 1002:     else
 1003:     {
 1004:         liberation(s_etat_processus, s_objet_argument);
 1005: 
 1006:         (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
 1007:         return;
 1008:     }
 1009: 
 1010:     liberation(s_etat_processus, s_objet_argument);
 1011: 
 1012:     if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
 1013:             s_objet_resultat_2) == d_erreur)
 1014:     {
 1015:         return;
 1016:     }
 1017: 
 1018:     if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
 1019:             s_objet_resultat_1) == d_erreur)
 1020:     {
 1021:         return;
 1022:     }
 1023: 
 1024:     return;
 1025: }
 1026: 
 1027: 
 1028: /*
 1029: ================================================================================
 1030:   Fonction 'conj'
 1031: ================================================================================
 1032:   Entrées :
 1033: --------------------------------------------------------------------------------
 1034:   Sorties :
 1035: --------------------------------------------------------------------------------
 1036:   Effets de bord : néant
 1037: ================================================================================
 1038: */
 1039: 
 1040: void
 1041: instruction_conj(struct_processus *s_etat_processus)
 1042: {
 1043:     struct_liste_chainee        *l_element_courant;
 1044:     struct_liste_chainee        *l_element_precedent;
 1045: 
 1046:     struct_objet                *s_copie_argument;
 1047:     struct_objet                *s_objet_argument;
 1048:     struct_objet                *s_objet_resultat;
 1049: 
 1050:     unsigned long               i;
 1051:     unsigned long               j;
 1052: 
 1053:     (*s_etat_processus).erreur_execution = d_ex;
 1054: 
 1055:     if ((*s_etat_processus).affichage_arguments == 'Y')
 1056:     {
 1057:         printf("\n  CONJ ");
 1058: 
 1059:         if ((*s_etat_processus).langue == 'F')
 1060:         {
 1061:             printf("(conjugaison)\n\n");
 1062:         }
 1063:         else
 1064:         {
 1065:             printf("(conjugated)\n\n");
 1066:         }
 1067: 
 1068:         printf("    1: %s\n", d_INT);
 1069:         printf("->  1: %s\n\n", d_INT);
 1070: 
 1071:         printf("    1: %s\n", d_REL);
 1072:         printf("->  1: %s\n\n", d_REL);
 1073: 
 1074:         printf("    1: %s\n", d_CPL);
 1075:         printf("->  1: %s\n\n", d_CPL);
 1076: 
 1077:         printf("    1: %s\n", d_VIN);
 1078:         printf("->  1: %s\n\n", d_VIN);
 1079: 
 1080:         printf("    1: %s\n", d_VRL);
 1081:         printf("->  1: %s\n\n", d_VRL);
 1082: 
 1083:         printf("    1: %s\n", d_VCX);
 1084:         printf("->  1: %s\n\n", d_VCX);
 1085: 
 1086:         printf("    1: %s\n", d_MIN);
 1087:         printf("->  1: %s\n\n", d_MIN);
 1088: 
 1089:         printf("    1: %s\n", d_MRL);
 1090:         printf("->  1: %s\n\n", d_MRL);
 1091: 
 1092:         printf("    1: %s\n", d_MCX);
 1093:         printf("->  1: %s\n\n", d_MCX);
 1094: 
 1095:         printf("    1: %s, %s\n", d_NOM, d_ALG);
 1096:         printf("->  1: %s\n\n", d_ALG);
 1097: 
 1098:         printf("    1: %s\n", d_RPN);
 1099:         printf("->  1: %s\n", d_RPN);
 1100: 
 1101:         return;
 1102:     }
 1103:     else if ((*s_etat_processus).test_instruction == 'Y')
 1104:     {
 1105:         (*s_etat_processus).nombre_arguments = 1;
 1106:         return;
 1107:     }
 1108: 
 1109:     if (test_cfsf(s_etat_processus, 31) == d_vrai)
 1110:     {
 1111:         if (empilement_pile_last(s_etat_processus, 1) == d_erreur)
 1112:         {
 1113:             return;
 1114:         }
 1115:     }
 1116: 
 1117:     if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
 1118:             &s_objet_argument) == d_erreur)
 1119:     {
 1120:         (*s_etat_processus).erreur_execution = d_ex_manque_argument;
 1121:         return;
 1122:     }
 1123: 
 1124: /*
 1125: --------------------------------------------------------------------------------
 1126:   Conjugué d'un entier ou d'un réel
 1127: --------------------------------------------------------------------------------
 1128: */
 1129: 
 1130:     if (((*s_objet_argument).type == INT) ||
 1131:             ((*s_objet_argument).type == REL))
 1132:     {
 1133:         s_objet_resultat = s_objet_argument;
 1134:         s_objet_argument = NULL;
 1135:     }
 1136: 
 1137: /*
 1138: --------------------------------------------------------------------------------
 1139:   Conjugué d'un complexe
 1140: --------------------------------------------------------------------------------
 1141: */
 1142: 
 1143:     else if ((*s_objet_argument).type == CPL)
 1144:     {
 1145:         (*((struct_complexe16 *) (*s_objet_argument).objet)).partie_reelle =
 1146:                 (*((struct_complexe16 *) (*s_objet_argument).objet))
 1147:                 .partie_reelle;
 1148:         (*((struct_complexe16 *) (*s_objet_argument).objet)).partie_imaginaire =
 1149:                 -(*((struct_complexe16 *) (*s_objet_argument).objet))
 1150:                 .partie_imaginaire;
 1151: 
 1152:         s_objet_resultat = s_objet_argument;
 1153:         s_objet_argument = NULL;
 1154:     }
 1155: 
 1156: /*
 1157: --------------------------------------------------------------------------------
 1158:   Conjugué d'un vecteur d'entiers ou de réels
 1159: --------------------------------------------------------------------------------
 1160: */
 1161: 
 1162:     else if (((*s_objet_argument).type == VIN) ||
 1163:             ((*s_objet_argument).type == VRL))
 1164:     {
 1165:         s_objet_resultat = s_objet_argument;
 1166:         s_objet_argument = NULL;
 1167:     }
 1168: 
 1169: /*
 1170: --------------------------------------------------------------------------------
 1171:   Conjugué d'un vecteur de complexes
 1172: --------------------------------------------------------------------------------
 1173: */
 1174: 
 1175:     else if ((*s_objet_argument).type == VCX)
 1176:     {
 1177:         for(i = 0; i < (*(((struct_vecteur *) (*s_objet_argument).objet)))
 1178:                 .taille; i++)
 1179:         {
 1180:             ((struct_complexe16 *) (*(((struct_vecteur *) (*s_objet_argument)
 1181:                     .objet))).tableau)[i].partie_reelle =
 1182:                     ((struct_complexe16 *) (*(((struct_vecteur *)
 1183:                     (*s_objet_argument).objet))).tableau)[i].partie_reelle;
 1184:             ((struct_complexe16 *) (*(((struct_vecteur *) (*s_objet_argument)
 1185:                     .objet))).tableau)[i].partie_imaginaire =
 1186:                     -((struct_complexe16 *) (*(((struct_vecteur *)
 1187:                     (*s_objet_argument).objet))).tableau)[i].partie_imaginaire;
 1188:         }
 1189: 
 1190:         s_objet_resultat = s_objet_argument;
 1191:         s_objet_argument = NULL;
 1192:     }
 1193: 
 1194: /*
 1195: --------------------------------------------------------------------------------
 1196:   Conjuguée d'une matrice d'entiers ou de réels
 1197: --------------------------------------------------------------------------------
 1198: */
 1199: 
 1200:     else if (((*s_objet_argument).type == MIN) ||
 1201:             ((*s_objet_argument).type == MRL))
 1202:     {
 1203:         s_objet_resultat = s_objet_argument;
 1204:         s_objet_argument = NULL;
 1205:     }
 1206: 
 1207: /*
 1208: --------------------------------------------------------------------------------
 1209:   Conjuguée d'une matrice de complexes
 1210: --------------------------------------------------------------------------------
 1211: */
 1212: 
 1213:     else if ((*s_objet_argument).type == MCX)
 1214:     {
 1215:         for(i = 0; i < (*(((struct_matrice *) (*s_objet_argument).objet)))
 1216:                 .nombre_lignes; i++)
 1217:         {
 1218:             for(j = 0; j < (*(((struct_matrice *) (*s_objet_argument).objet)))
 1219:                     .nombre_colonnes; j++)
 1220:             {
 1221:                 ((struct_complexe16 **) (*(((struct_matrice *)
 1222:                         (*s_objet_argument).objet))).tableau)[i][j]
 1223:                         .partie_reelle = ((struct_complexe16 **)
 1224:                         (*(((struct_matrice *) (*s_objet_argument).objet)))
 1225:                         .tableau)[i][j].partie_reelle;
 1226:                 ((struct_complexe16 **) (*(((struct_matrice *)
 1227:                         (*s_objet_argument).objet))).tableau)[i][j]
 1228:                         .partie_imaginaire = -((struct_complexe16 **)
 1229:                         (*(((struct_matrice *) (*s_objet_argument).objet)))
 1230:                         .tableau)[i][j].partie_imaginaire;
 1231:             }
 1232:         }
 1233: 
 1234:         s_objet_resultat = s_objet_argument;
 1235:         s_objet_argument = NULL;
 1236:     }
 1237: 
 1238: /*
 1239: --------------------------------------------------------------------------------
 1240:   Conjugué d'un nom
 1241: --------------------------------------------------------------------------------
 1242: */
 1243: 
 1244:     else if ((*s_objet_argument).type == NOM)
 1245:     {
 1246:         if ((s_objet_resultat = allocation(s_etat_processus, ALG))
 1247:                 == NULL)
 1248:         {
 1249:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1250:             return;
 1251:         }
 1252: 
 1253:         if (((*s_objet_resultat).objet =
 1254:                 allocation_maillon(s_etat_processus)) == NULL)
 1255:         {
 1256:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1257:             return;
 1258:         }
 1259: 
 1260:         l_element_courant = (*s_objet_resultat).objet;
 1261: 
 1262:         if (((*l_element_courant).donnee =
 1263:                 allocation(s_etat_processus, FCT)) == NULL)
 1264:         {
 1265:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1266:             return;
 1267:         }
 1268: 
 1269:         (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1270:                 .nombre_arguments = 0;
 1271:         (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1272:                 .fonction = instruction_vers_niveau_superieur;
 1273: 
 1274:         if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1275:                 .nom_fonction = malloc(3 * sizeof(unsigned char))) == NULL)
 1276:         {
 1277:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1278:             return;
 1279:         }
 1280: 
 1281:         strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1282:                 .nom_fonction, "<<");
 1283: 
 1284:         if (((*l_element_courant).suivant =
 1285:                 allocation_maillon(s_etat_processus)) == NULL)
 1286:         {
 1287:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1288:             return;
 1289:         }
 1290: 
 1291:         l_element_courant = (*l_element_courant).suivant;
 1292:         (*l_element_courant).donnee = s_objet_argument;
 1293: 
 1294:         if (((*l_element_courant).suivant =
 1295:                 allocation_maillon(s_etat_processus)) == NULL)
 1296:         {
 1297:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1298:             return;
 1299:         }
 1300: 
 1301:         l_element_courant = (*l_element_courant).suivant;
 1302: 
 1303:         if (((*l_element_courant).donnee =
 1304:                 allocation(s_etat_processus, FCT)) == NULL)
 1305:         {
 1306:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1307:             return;
 1308:         }
 1309: 
 1310:         (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1311:                 .nombre_arguments = 1;
 1312:         (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1313:                 .fonction = instruction_conj;
 1314: 
 1315:         if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1316:                 .nom_fonction = malloc(5 * sizeof(unsigned char))) == NULL)
 1317:         {
 1318:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1319:             return;
 1320:         }
 1321: 
 1322:         strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1323:                 .nom_fonction, "CONJ");
 1324: 
 1325:         if (((*l_element_courant).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_courant = (*l_element_courant).suivant;
 1333: 
 1334:         if (((*l_element_courant).donnee =
 1335:                 allocation(s_etat_processus, FCT)) == NULL)
 1336:         {
 1337:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1338:             return;
 1339:         }
 1340: 
 1341:         (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1342:                 .nombre_arguments = 0;
 1343:         (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1344:                 .fonction = instruction_vers_niveau_inferieur;
 1345: 
 1346:         if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1347:                 .nom_fonction = malloc(3 * sizeof(unsigned char))) == NULL)
 1348:         {
 1349:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1350:             return;
 1351:         }
 1352: 
 1353:         strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1354:                 .nom_fonction, ">>");
 1355: 
 1356:         (*l_element_courant).suivant = NULL;
 1357:         s_objet_argument = NULL;
 1358:     }
 1359: 
 1360: /*
 1361: --------------------------------------------------------------------------------
 1362:   Conjuguée d'une expression
 1363: --------------------------------------------------------------------------------
 1364: */
 1365: 
 1366:     else if (((*s_objet_argument).type == ALG) ||
 1367:             ((*s_objet_argument).type == RPN))
 1368:     {
 1369:         if ((s_copie_argument = copie_objet(s_etat_processus,
 1370:                 s_objet_argument, 'N')) == NULL)
 1371:         {
 1372:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1373:             return;
 1374:         }
 1375: 
 1376:         l_element_courant = (struct_liste_chainee *)
 1377:                 (*s_copie_argument).objet;
 1378:         l_element_precedent = l_element_courant;
 1379: 
 1380:         while((*l_element_courant).suivant != NULL)
 1381:         {
 1382:             l_element_precedent = l_element_courant;
 1383:             l_element_courant = (*l_element_courant).suivant;
 1384:         }
 1385: 
 1386:         if (((*l_element_precedent).suivant =
 1387:                 allocation_maillon(s_etat_processus)) == NULL)
 1388:         {
 1389:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1390:             return;
 1391:         }
 1392: 
 1393:         if (((*(*l_element_precedent).suivant).donnee =
 1394:                 allocation(s_etat_processus, FCT)) == NULL)
 1395:         {
 1396:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1397:             return;
 1398:         }
 1399: 
 1400:         (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
 1401:                 .donnee).objet)).nombre_arguments = 1;
 1402:         (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
 1403:                 .donnee).objet)).fonction = instruction_conj;
 1404: 
 1405:         if (((*((struct_fonction *) (*(*(*l_element_precedent)
 1406:                 .suivant).donnee).objet)).nom_fonction =
 1407:                 malloc(5 * sizeof(unsigned char))) == NULL)
 1408:         {
 1409:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1410:             return;
 1411:         }
 1412: 
 1413:         strcpy((*((struct_fonction *) (*(*(*l_element_precedent)
 1414:                 .suivant).donnee).objet)).nom_fonction, "CONJ");
 1415: 
 1416:         (*(*l_element_precedent).suivant).suivant = l_element_courant;
 1417: 
 1418:         s_objet_resultat = s_copie_argument;
 1419:     }
 1420: 
 1421: /*
 1422: --------------------------------------------------------------------------------
 1423:   Conjugaison impossible
 1424: --------------------------------------------------------------------------------
 1425: */
 1426: 
 1427:     else
 1428:     {
 1429:         liberation(s_etat_processus, s_objet_argument);
 1430: 
 1431:         (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
 1432:         return;
 1433:     }
 1434: 
 1435:     liberation(s_etat_processus, s_objet_argument);
 1436: 
 1437:     if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
 1438:             s_objet_resultat) == d_erreur)
 1439:     {
 1440:         return;
 1441:     }
 1442: 
 1443:     return;
 1444: }
 1445: 
 1446: 
 1447: /*
 1448: ================================================================================
 1449:   Fonction 'cos'
 1450: ================================================================================
 1451:   Entrées : pointeur sur une structure struct_processus
 1452: --------------------------------------------------------------------------------
 1453:   Sorties :
 1454: --------------------------------------------------------------------------------
 1455:   Effets de bord : néant
 1456: ================================================================================
 1457: */
 1458: 
 1459: void
 1460: instruction_cos(struct_processus *s_etat_processus)
 1461: {
 1462:     real8                           angle;
 1463: 
 1464:     struct_liste_chainee            *l_element_courant;
 1465:     struct_liste_chainee            *l_element_precedent;
 1466: 
 1467:     struct_objet                    *s_copie_argument;
 1468:     struct_objet                    *s_objet_argument;
 1469:     struct_objet                    *s_objet_resultat;
 1470: 
 1471:     (*s_etat_processus).erreur_execution = d_ex;
 1472: 
 1473:     if ((*s_etat_processus).affichage_arguments == 'Y')
 1474:     {
 1475:         printf("\n  COS ");
 1476: 
 1477:         if ((*s_etat_processus).langue == 'F')
 1478:         {
 1479:             printf("(cosinus)\n\n");
 1480:         }
 1481:         else
 1482:         {
 1483:             printf("(cosine)\n\n");
 1484:         }
 1485: 
 1486:         printf("    1: %s, %s\n", d_INT, d_REL);
 1487:         printf("->  1: %s\n\n", d_REL);
 1488: 
 1489:         printf("    1: %s\n", d_CPL);
 1490:         printf("->  1: %s\n\n", d_CPL);
 1491: 
 1492:         printf("    1: %s, %s\n", d_NOM, d_ALG);
 1493:         printf("->  1: %s\n\n", d_ALG);
 1494: 
 1495:         printf("    1: %s\n", d_RPN);
 1496:         printf("->  1: %s\n", d_RPN);
 1497: 
 1498:         return;
 1499:     }
 1500:     else if ((*s_etat_processus).test_instruction == 'Y')
 1501:     {
 1502:         (*s_etat_processus).nombre_arguments = 1;
 1503:         return;
 1504:     }
 1505: 
 1506:     if (test_cfsf(s_etat_processus, 31) == d_vrai)
 1507:     {
 1508:         if (empilement_pile_last(s_etat_processus, 1) == d_erreur)
 1509:         {
 1510:             return;
 1511:         }
 1512:     }
 1513: 
 1514:     if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
 1515:             &s_objet_argument) == d_erreur)
 1516:     {
 1517:         (*s_etat_processus).erreur_execution = d_ex_manque_argument;
 1518:         return;
 1519:     }
 1520: 
 1521: /*
 1522: --------------------------------------------------------------------------------
 1523:   Cosinus d'un entier ou d'un réel
 1524: --------------------------------------------------------------------------------
 1525: */
 1526: 
 1527:     if (((*s_objet_argument).type == INT) ||
 1528:             ((*s_objet_argument).type == REL))
 1529:     {
 1530:         if ((s_objet_resultat = allocation(s_etat_processus, REL))
 1531:                 == NULL)
 1532:         {
 1533:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1534:             return;
 1535:         }
 1536: 
 1537:         if ((*s_objet_argument).type == INT)
 1538:         {
 1539:             angle = (real8) (*((integer8 *) (*s_objet_argument).objet));
 1540:         }
 1541:         else
 1542:         {
 1543:             angle = (*((real8 *) (*s_objet_argument).objet));
 1544:         }
 1545: 
 1546:         if (test_cfsf(s_etat_processus, 60) == d_faux)
 1547:         {
 1548:             conversion_degres_vers_radians(&angle);
 1549:         }
 1550: 
 1551:         (*((real8 *) (*s_objet_resultat).objet)) = cos(angle);
 1552:     }
 1553: 
 1554: /*
 1555: --------------------------------------------------------------------------------
 1556:   Cosinus d'un complexe
 1557: --------------------------------------------------------------------------------
 1558: */
 1559: 
 1560:     else if ((*s_objet_argument).type == CPL)
 1561:     {
 1562:         if ((s_objet_resultat = allocation(s_etat_processus, CPL))
 1563:                 == NULL)
 1564:         {
 1565:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1566:             return;
 1567:         }
 1568: 
 1569:         f77cos_((struct_complexe16 *) (*s_objet_argument).objet,
 1570:                 (struct_complexe16 *) (*s_objet_resultat).objet);
 1571:     }
 1572: 
 1573: /*
 1574: --------------------------------------------------------------------------------
 1575:   Cosinus d'un nom
 1576: --------------------------------------------------------------------------------
 1577: */
 1578: 
 1579:     else if ((*s_objet_argument).type == NOM)
 1580:     {
 1581:         if ((s_objet_resultat = allocation(s_etat_processus, ALG))
 1582:                 == NULL)
 1583:         {
 1584:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1585:             return;
 1586:         }
 1587: 
 1588:         if (((*s_objet_resultat).objet =
 1589:                 allocation_maillon(s_etat_processus)) == NULL)
 1590:         {
 1591:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1592:             return;
 1593:         }
 1594: 
 1595:         l_element_courant = (*s_objet_resultat).objet;
 1596: 
 1597:         if (((*l_element_courant).donnee =
 1598:                 allocation(s_etat_processus, FCT)) == NULL)
 1599:         {
 1600:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1601:             return;
 1602:         }
 1603: 
 1604:         (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1605:                 .nombre_arguments = 0;
 1606:         (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1607:                 .fonction = instruction_vers_niveau_superieur;
 1608: 
 1609:         if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1610:                 .nom_fonction = malloc(3 * sizeof(unsigned char))) == NULL)
 1611:         {
 1612:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1613:             return;
 1614:         }
 1615: 
 1616:         strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1617:                 .nom_fonction, "<<");
 1618: 
 1619:         if (((*l_element_courant).suivant =
 1620:                 allocation_maillon(s_etat_processus)) == NULL)
 1621:         {
 1622:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1623:             return;
 1624:         }
 1625: 
 1626:         l_element_courant = (*l_element_courant).suivant;
 1627:         (*l_element_courant).donnee = s_objet_argument;
 1628: 
 1629:         if (((*l_element_courant).suivant =
 1630:                 allocation_maillon(s_etat_processus)) == NULL)
 1631:         {
 1632:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1633:             return;
 1634:         }
 1635: 
 1636:         l_element_courant = (*l_element_courant).suivant;
 1637: 
 1638:         if (((*l_element_courant).donnee =
 1639:                 allocation(s_etat_processus, FCT)) == NULL)
 1640:         {
 1641:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1642:             return;
 1643:         }
 1644: 
 1645:         (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1646:                 .nombre_arguments = 1;
 1647:         (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1648:                 .fonction = instruction_cos;
 1649: 
 1650:         if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1651:                 .nom_fonction = malloc(4 * sizeof(unsigned char))) == NULL)
 1652:         {
 1653:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1654:             return;
 1655:         }
 1656: 
 1657:         strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1658:                 .nom_fonction, "COS");
 1659: 
 1660:         if (((*l_element_courant).suivant =
 1661:                 allocation_maillon(s_etat_processus)) == NULL)
 1662:         {
 1663:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1664:             return;
 1665:         }
 1666: 
 1667:         l_element_courant = (*l_element_courant).suivant;
 1668: 
 1669:         if (((*l_element_courant).donnee =
 1670:                 allocation(s_etat_processus, FCT)) == NULL)
 1671:         {
 1672:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1673:             return;
 1674:         }
 1675: 
 1676:         (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1677:                 .nombre_arguments = 0;
 1678:         (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1679:                 .fonction = instruction_vers_niveau_inferieur;
 1680: 
 1681:         if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1682:                 .nom_fonction = malloc(3 * sizeof(unsigned char))) == NULL)
 1683:         {
 1684:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1685:             return;
 1686:         }
 1687: 
 1688:         strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1689:                 .nom_fonction, ">>");
 1690: 
 1691:         (*l_element_courant).suivant = NULL;
 1692:         s_objet_argument = NULL;
 1693:     }
 1694: 
 1695: /*
 1696: --------------------------------------------------------------------------------
 1697:   Cosinus d'une expression
 1698: --------------------------------------------------------------------------------
 1699: */
 1700: 
 1701:     else if (((*s_objet_argument).type == ALG) ||
 1702:             ((*s_objet_argument).type == RPN))
 1703:     {
 1704:         if ((s_copie_argument = copie_objet(s_etat_processus,
 1705:                 s_objet_argument, 'N')) == NULL)
 1706:         {
 1707:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1708:             return;
 1709:         }
 1710: 
 1711:         l_element_courant = (struct_liste_chainee *)
 1712:                 (*s_copie_argument).objet;
 1713:         l_element_precedent = l_element_courant;
 1714: 
 1715:         while((*l_element_courant).suivant != NULL)
 1716:         {
 1717:             l_element_precedent = l_element_courant;
 1718:             l_element_courant = (*l_element_courant).suivant;
 1719:         }
 1720: 
 1721:         if (((*l_element_precedent).suivant =
 1722:                 allocation_maillon(s_etat_processus)) == NULL)
 1723:         {
 1724:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1725:             return;
 1726:         }
 1727: 
 1728:         if (((*(*l_element_precedent).suivant).donnee =
 1729:                 allocation(s_etat_processus, FCT)) == NULL)
 1730:         {
 1731:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1732:             return;
 1733:         }
 1734: 
 1735:         (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
 1736:                 .donnee).objet)).nombre_arguments = 1;
 1737:         (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
 1738:                 .donnee).objet)).fonction = instruction_cos;
 1739: 
 1740:         if (((*((struct_fonction *) (*(*(*l_element_precedent)
 1741:                 .suivant).donnee).objet)).nom_fonction =
 1742:                 malloc(4 * sizeof(unsigned char))) == NULL)
 1743:         {
 1744:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1745:             return;
 1746:         }
 1747: 
 1748:         strcpy((*((struct_fonction *) (*(*(*l_element_precedent)
 1749:                 .suivant).donnee).objet)).nom_fonction, "COS");
 1750: 
 1751:         (*(*l_element_precedent).suivant).suivant = l_element_courant;
 1752: 
 1753:         s_objet_resultat = s_copie_argument;
 1754:     }
 1755: 
 1756: /*
 1757: --------------------------------------------------------------------------------
 1758:   Réalisation impossible de la fonction cosinus
 1759: --------------------------------------------------------------------------------
 1760: */
 1761: 
 1762:     else
 1763:     {
 1764:         liberation(s_etat_processus, s_objet_argument);
 1765: 
 1766:         (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
 1767:         return;
 1768:     }
 1769: 
 1770:     liberation(s_etat_processus, s_objet_argument);
 1771: 
 1772:     if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
 1773:             s_objet_resultat) == d_erreur)
 1774:     {
 1775:         return;
 1776:     }
 1777: 
 1778:     return;
 1779: }
 1780: 
 1781: 
 1782: /*
 1783: ================================================================================
 1784:   Fonction 'cosh'
 1785: ================================================================================
 1786:   Entrées : pointeur sur une structure struct_processus
 1787: --------------------------------------------------------------------------------
 1788:   Sorties :
 1789: --------------------------------------------------------------------------------
 1790:   Effets de bord : néant
 1791: ================================================================================
 1792: */
 1793: 
 1794: void
 1795: instruction_cosh(struct_processus *s_etat_processus)
 1796: {
 1797:     real8                           argument;
 1798: 
 1799:     struct_liste_chainee            *l_element_courant;
 1800:     struct_liste_chainee            *l_element_precedent;
 1801: 
 1802:     struct_objet                    *s_copie_argument;
 1803:     struct_objet                    *s_objet_argument;
 1804:     struct_objet                    *s_objet_resultat;
 1805: 
 1806:     (*s_etat_processus).erreur_execution = d_ex;
 1807: 
 1808:     if ((*s_etat_processus).affichage_arguments == 'Y')
 1809:     {
 1810:         printf("\n  COSH ");
 1811: 
 1812:         if ((*s_etat_processus).langue == 'F')
 1813:         {
 1814:             printf("(cosinus hyperbolique)\n\n");
 1815:         }
 1816:         else
 1817:         {
 1818:             printf("(hyperbolic cosine)\n\n");
 1819:         }
 1820: 
 1821:         printf("    1: %s, %s\n", d_INT, d_REL);
 1822:         printf("->  1: %s\n\n", d_INT);
 1823: 
 1824:         printf("    1: %s\n", d_CPL);
 1825:         printf("->  1: %s\n\n", d_CPL);
 1826: 
 1827:         printf("    1: %s, %s\n", d_NOM, d_ALG);
 1828:         printf("->  1: %s\n\n", d_ALG);
 1829: 
 1830:         printf("    1: %s\n", d_RPN);
 1831:         printf("->  1: %s\n", d_RPN);
 1832: 
 1833:         return;
 1834:     }
 1835:     else if ((*s_etat_processus).test_instruction == 'Y')
 1836:     {
 1837:         (*s_etat_processus).nombre_arguments = 1;
 1838:         return;
 1839:     }
 1840: 
 1841:     if (test_cfsf(s_etat_processus, 31) == d_vrai)
 1842:     {
 1843:         if (empilement_pile_last(s_etat_processus, 1) == d_erreur)
 1844:         {
 1845:             return;
 1846:         }
 1847:     }
 1848: 
 1849:     if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
 1850:             &s_objet_argument) == d_erreur)
 1851:     {
 1852:         (*s_etat_processus).erreur_execution = d_ex_manque_argument;
 1853:         return;
 1854:     }
 1855: 
 1856: /*
 1857: --------------------------------------------------------------------------------
 1858:   Cosinus hyperbolique d'un entier ou d'un réel
 1859: --------------------------------------------------------------------------------
 1860: */
 1861: 
 1862:     if (((*s_objet_argument).type == INT) ||
 1863:             ((*s_objet_argument).type == REL))
 1864:     {
 1865:         if ((s_objet_resultat = allocation(s_etat_processus, REL))
 1866:                 == NULL)
 1867:         {
 1868:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1869:             return;
 1870:         }
 1871: 
 1872:         if ((*s_objet_argument).type == INT)
 1873:         {
 1874:             argument = (real8) (*((integer8 *) (*s_objet_argument).objet));
 1875:         }
 1876:         else
 1877:         {
 1878:             argument = (*((real8 *) (*s_objet_argument).objet));
 1879:         }
 1880: 
 1881:         (*((real8 *) (*s_objet_resultat).objet)) = cosh(argument);
 1882:     }
 1883: 
 1884: /*
 1885: --------------------------------------------------------------------------------
 1886:   Cosinus hyperbolique d'un complexe
 1887: --------------------------------------------------------------------------------
 1888: */
 1889: 
 1890:     else if ((*s_objet_argument).type == CPL)
 1891:     {
 1892:         if ((s_objet_resultat = allocation(s_etat_processus, CPL))
 1893:                 == NULL)
 1894:         {
 1895:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1896:             return;
 1897:         }
 1898: 
 1899:         f77cosh_((struct_complexe16 *) (*s_objet_argument).objet,
 1900:                 (struct_complexe16 *) (*s_objet_resultat).objet);
 1901:     }
 1902: 
 1903: /*
 1904: --------------------------------------------------------------------------------
 1905:   Cosinus hyperbolique d'un nom
 1906: --------------------------------------------------------------------------------
 1907: */
 1908: 
 1909:     else if ((*s_objet_argument).type == NOM)
 1910:     {
 1911:         if ((s_objet_resultat = allocation(s_etat_processus, ALG))
 1912:                 == NULL)
 1913:         {
 1914:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1915:             return;
 1916:         }
 1917: 
 1918:         if (((*s_objet_resultat).objet =
 1919:                 allocation_maillon(s_etat_processus)) == NULL)
 1920:         {
 1921:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1922:             return;
 1923:         }
 1924: 
 1925:         l_element_courant = (*s_objet_resultat).objet;
 1926: 
 1927:         if (((*l_element_courant).donnee =
 1928:                 allocation(s_etat_processus, FCT)) == NULL)
 1929:         {
 1930:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1931:             return;
 1932:         }
 1933: 
 1934:         (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1935:                 .nombre_arguments = 0;
 1936:         (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1937:                 .fonction = instruction_vers_niveau_superieur;
 1938: 
 1939:         if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1940:                 .nom_fonction = malloc(3 * sizeof(unsigned char))) == NULL)
 1941:         {
 1942:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1943:             return;
 1944:         }
 1945: 
 1946:         strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1947:                 .nom_fonction, "<<");
 1948: 
 1949:         if (((*l_element_courant).suivant =
 1950:                 allocation_maillon(s_etat_processus)) == NULL)
 1951:         {
 1952:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1953:             return;
 1954:         }
 1955: 
 1956:         l_element_courant = (*l_element_courant).suivant;
 1957:         (*l_element_courant).donnee = s_objet_argument;
 1958: 
 1959:         if (((*l_element_courant).suivant =
 1960:                 allocation_maillon(s_etat_processus)) == NULL)
 1961:         {
 1962:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1963:             return;
 1964:         }
 1965: 
 1966:         l_element_courant = (*l_element_courant).suivant;
 1967: 
 1968:         if (((*l_element_courant).donnee =
 1969:                 allocation(s_etat_processus, FCT)) == NULL)
 1970:         {
 1971:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1972:             return;
 1973:         }
 1974: 
 1975:         (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1976:                 .nombre_arguments = 1;
 1977:         (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1978:                 .fonction = instruction_cosh;
 1979: 
 1980:         if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1981:                 .nom_fonction = malloc(5 * sizeof(unsigned char))) == NULL)
 1982:         {
 1983:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1984:             return;
 1985:         }
 1986: 
 1987:         strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1988:                 .nom_fonction, "COSH");
 1989: 
 1990:         if (((*l_element_courant).suivant =
 1991:                 allocation_maillon(s_etat_processus)) == NULL)
 1992:         {
 1993:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1994:             return;
 1995:         }
 1996: 
 1997:         l_element_courant = (*l_element_courant).suivant;
 1998: 
 1999:         if (((*l_element_courant).donnee =
 2000:                 allocation(s_etat_processus, FCT)) == NULL)
 2001:         {
 2002:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 2003:             return;
 2004:         }
 2005: 
 2006:         (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 2007:                 .nombre_arguments = 0;
 2008:         (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 2009:                 .fonction = instruction_vers_niveau_inferieur;
 2010: 
 2011:         if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 2012:                 .nom_fonction = malloc(3 * sizeof(unsigned char))) == NULL)
 2013:         {
 2014:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 2015:             return;
 2016:         }
 2017: 
 2018:         strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 2019:                 .nom_fonction, ">>");
 2020: 
 2021:         (*l_element_courant).suivant = NULL;
 2022:         s_objet_argument = NULL;
 2023:     }
 2024: 
 2025: /*
 2026: --------------------------------------------------------------------------------
 2027:   Cosinus hyperbolique d'une expression
 2028: --------------------------------------------------------------------------------
 2029: */
 2030: 
 2031:     else if (((*s_objet_argument).type == ALG) ||
 2032:             ((*s_objet_argument).type == RPN))
 2033:     {
 2034:         if ((s_copie_argument = copie_objet(s_etat_processus,
 2035:                 s_objet_argument, 'N')) == NULL)
 2036:         {
 2037:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 2038:             return;
 2039:         }
 2040: 
 2041:         l_element_courant = (struct_liste_chainee *)
 2042:                 (*s_copie_argument).objet;
 2043:         l_element_precedent = l_element_courant;
 2044: 
 2045:         while((*l_element_courant).suivant != NULL)
 2046:         {
 2047:             l_element_precedent = l_element_courant;
 2048:             l_element_courant = (*l_element_courant).suivant;
 2049:         }
 2050: 
 2051:         if (((*l_element_precedent).suivant =
 2052:                 allocation_maillon(s_etat_processus)) == NULL)
 2053:         {
 2054:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 2055:             return;
 2056:         }
 2057: 
 2058:         if (((*(*l_element_precedent).suivant).donnee =
 2059:                 allocation(s_etat_processus, FCT)) == NULL)
 2060:         {
 2061:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 2062:             return;
 2063:         }
 2064: 
 2065:         (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
 2066:                 .donnee).objet)).nombre_arguments = 1;
 2067:         (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
 2068:                 .donnee).objet)).fonction = instruction_cosh;
 2069: 
 2070:         if (((*((struct_fonction *) (*(*(*l_element_precedent)
 2071:                 .suivant).donnee).objet)).nom_fonction =
 2072:                 malloc(5 * sizeof(unsigned char))) == NULL)
 2073:         {
 2074:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 2075:             return;
 2076:         }
 2077: 
 2078:         strcpy((*((struct_fonction *) (*(*(*l_element_precedent)
 2079:                 .suivant).donnee).objet)).nom_fonction, "COSH");
 2080: 
 2081:         (*(*l_element_precedent).suivant).suivant = l_element_courant;
 2082: 
 2083:         s_objet_resultat = s_copie_argument;
 2084:     }
 2085: 
 2086: /*
 2087: --------------------------------------------------------------------------------
 2088:   Réalisation impossible de la fonction cosinus hyperbolique
 2089: --------------------------------------------------------------------------------
 2090: */
 2091: 
 2092:     else
 2093:     {
 2094:         liberation(s_etat_processus, s_objet_argument);
 2095: 
 2096:         (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
 2097:         return;
 2098:     }
 2099: 
 2100:     liberation(s_etat_processus, s_objet_argument);
 2101: 
 2102:     if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
 2103:             s_objet_resultat) == d_erreur)
 2104:     {
 2105:         return;
 2106:     }
 2107: 
 2108:     return;
 2109: }
 2110: 
 2111: // vim: ts=4

CVSweb interface <joel.bertrand@systella.fr>