File:  [local] / rpl / src / instructions_a1.c
Revision 1.40: download - view: text, annotated - select for diffs - revision graph
Wed Dec 19 09:58:24 2012 UTC (11 years, 4 months ago) by bertrand
Branches: MAIN
CVS tags: HEAD
Changement des dates du copyright.

    1: /*
    2: ================================================================================
    3:   RPL/2 (R) version 4.1.12
    4:   Copyright (C) 1989-2012 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 'abort'
   29: ================================================================================
   30:   Entrées : pointeur sur une structure struct_processus
   31: --------------------------------------------------------------------------------
   32:   Sorties :
   33: --------------------------------------------------------------------------------
   34:   Effets de bord : néant
   35: ================================================================================
   36: */
   37: 
   38: void
   39: instruction_abort(struct_processus *s_etat_processus)
   40: {
   41:     struct timespec                     attente;
   42: 
   43:     (*s_etat_processus).erreur_execution = d_ex;
   44: 
   45:     if ((*s_etat_processus).affichage_arguments == 'Y')
   46:     {
   47:         printf("\n  ABORT ");
   48: 
   49:         if ((*s_etat_processus).langue == 'F')
   50:         {
   51:             printf("(abandon du programme)\n\n");
   52:             printf("  Aucun argument\n");
   53:         }
   54:         else
   55:         {
   56:             printf("(program abort)\n\n");
   57:             printf("  No argument\n");
   58:         }
   59: 
   60:         return;
   61:     }
   62:     else if ((*s_etat_processus).test_instruction == 'Y')
   63:     {
   64:         (*s_etat_processus).nombre_arguments = -1;
   65:         return;
   66:     }
   67:     
   68:     if (test_cfsf(s_etat_processus, 31) == d_vrai)
   69:     {
   70:         if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
   71:         {
   72:             return;
   73:         }
   74:     }
   75: 
   76:     envoi_signal_processus((*s_etat_processus).pid_processus_pere,
   77:             rpl_sigabort);
   78:     (*s_etat_processus).requete_arret = 'Y';
   79: 
   80:     attente.tv_sec = 0;
   81:     attente.tv_nsec = GRANULARITE_us * 1000;
   82: 
   83:     while((*s_etat_processus).var_volatile_requete_arret == 0)
   84:     {
   85:         scrutation_interruptions(s_etat_processus);
   86:         nanosleep(&attente, NULL);
   87:         INCR_GRANULARITE(attente.tv_nsec);
   88:     }
   89: 
   90:     if ((*s_etat_processus).traitement_instruction_halt == d_vrai)
   91:     {
   92:         (*s_etat_processus).execution_pas_suivant = d_vrai;
   93:     }
   94: 
   95:     return;
   96: }
   97: 
   98: 
   99: /*
  100: ================================================================================
  101:   Fonction 'and'
  102: ================================================================================
  103:   Entrées : pointeur sur une structure struct_processus
  104: --------------------------------------------------------------------------------
  105:   Sorties :
  106: --------------------------------------------------------------------------------
  107:   Effets de bord : néant
  108: ================================================================================
  109: */
  110: 
  111: void
  112: instruction_and(struct_processus *s_etat_processus)
  113: {
  114:     struct_liste_chainee        *l_element_courant;
  115:     struct_liste_chainee        *l_element_precedent;
  116: 
  117:     struct_objet                *s_copie_argument_1;
  118:     struct_objet                *s_copie_argument_2;
  119:     struct_objet                *s_objet_argument_1;
  120:     struct_objet                *s_objet_argument_2;
  121:     struct_objet                *s_objet_resultat;
  122: 
  123:     unsigned long               nombre_elements;
  124: 
  125:     (*s_etat_processus).erreur_execution = d_ex;
  126: 
  127:     if ((*s_etat_processus).affichage_arguments == 'Y')
  128:     {
  129:         printf("\n  AND ");
  130: 
  131:         if ((*s_etat_processus).langue == 'F')
  132:         {
  133:             printf("(opérateur et)\n\n");
  134:         }
  135:         else
  136:         {
  137:             printf("(and operator)\n\n");
  138:         }
  139: 
  140:         printf("    2: %s, %s\n", d_INT, d_REL);
  141:         printf("    1: %s, %s\n", d_INT, d_REL);
  142:         printf("->  1: %s\n\n", d_INT);
  143: 
  144:         printf("    2: %s\n", d_BIN);
  145:         printf("    1: %s\n", d_BIN);
  146:         printf("->  1: %s\n\n", d_BIN);
  147: 
  148:         printf("    2: %s\n", d_NOM);
  149:         printf("    1: %s, %s, %s, %s\n", d_NOM, d_ALG, d_INT, d_REL);
  150:         printf("->  1: %s\n\n", d_ALG);
  151: 
  152:         printf("    2: %s, %s, %s, %s\n", d_NOM, d_ALG, d_INT, d_REL);
  153:         printf("    1: %s\n", d_NOM);
  154:         printf("->  1: %s\n\n", d_ALG);
  155: 
  156:         printf("    2: %s\n", d_ALG);
  157:         printf("    1: %s\n", d_ALG);
  158:         printf("->  1: %s\n\n", d_ALG);
  159: 
  160:         printf("    2: %s\n", d_RPN);
  161:         printf("    1: %s\n", d_RPN);
  162:         printf("->  1: %s\n", d_RPN);
  163: 
  164:         return;
  165:     }
  166:     else if ((*s_etat_processus).test_instruction == 'Y')
  167:     {
  168:         (*s_etat_processus).nombre_arguments = 0;
  169:         return;
  170:     }
  171:     
  172:     if (test_cfsf(s_etat_processus, 31) == d_vrai)
  173:     {
  174:         if (empilement_pile_last(s_etat_processus, 2) == d_erreur)
  175:         {
  176:             return;
  177:         }
  178:     }
  179: 
  180:     if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
  181:             &s_objet_argument_1) == d_erreur)
  182:     {
  183:         (*s_etat_processus).erreur_execution = d_ex_manque_argument;
  184:         return;
  185:     }
  186: 
  187:     if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
  188:             &s_objet_argument_2) == d_erreur)
  189:     {
  190:         liberation(s_etat_processus, s_objet_argument_1);
  191: 
  192:         (*s_etat_processus).erreur_execution = d_ex_manque_argument;
  193:         return;
  194:     }
  195: 
  196: /*
  197: --------------------------------------------------------------------------------
  198:   AND logique
  199: --------------------------------------------------------------------------------
  200: */
  201: 
  202:     if (((((*s_objet_argument_1).type == INT) ||
  203:             ((*s_objet_argument_1).type == REL)) &&
  204:             (((*s_objet_argument_2).type == INT) ||
  205:             ((*s_objet_argument_2).type == REL))))
  206:     {
  207:         if ((s_objet_resultat = allocation(s_etat_processus, INT)) == NULL)
  208:         {
  209:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  210:             return;
  211:         }
  212: 
  213:         if ((*s_objet_argument_1).type == INT)
  214:         {
  215:             if ((*s_objet_argument_2).type == INT)
  216:             {
  217:                 if (((*((integer8 *) (*s_objet_argument_1).objet)) != 0) &&
  218:                         ((*((integer8 *) (*s_objet_argument_2).objet)) != 0))
  219:                 {
  220:                     (*((integer8 *) (*s_objet_resultat).objet)) = -1;
  221:                 }
  222:                 else
  223:                 {
  224:                     (*((integer8 *) (*s_objet_resultat).objet)) = 0;
  225:                 }
  226:             }
  227:             else
  228:             {
  229:                 if (((*((integer8 *) (*s_objet_argument_1).objet)) != 0) &&
  230:                         ((*((real8 *) (*s_objet_argument_2).objet)) != 0))
  231:                 {
  232:                     (*((integer8 *) (*s_objet_resultat).objet)) = -1;
  233:                 }
  234:                 else
  235:                 {
  236:                     (*((integer8 *) (*s_objet_resultat).objet)) = 0;
  237:                 }
  238:             }
  239:         }
  240:         else
  241:         {
  242:             if ((*s_objet_argument_2).type == INT)
  243:             {
  244:                 if (((*((real8 *) (*s_objet_argument_1).objet)) != 0) &&
  245:                         ((*((integer8 *) (*s_objet_argument_2).objet)) != 0))
  246:                 {
  247:                     (*((integer8 *) (*s_objet_resultat).objet)) = -1;
  248:                 }
  249:                 else
  250:                 {
  251:                     (*((integer8 *) (*s_objet_resultat).objet)) = 0;
  252:                 }
  253:             }
  254:             else
  255:             {
  256:                 if (((*((real8 *) (*s_objet_argument_1).objet)) != 0) &&
  257:                         ((*((real8 *) (*s_objet_argument_2).objet)) != 0))
  258:                 {
  259:                     (*((integer8 *) (*s_objet_resultat).objet)) = -1;
  260:                 }
  261:                 else
  262:                 {
  263:                     (*((integer8 *) (*s_objet_resultat).objet)) = 0;
  264:                 }
  265:             }
  266:         }
  267:     }
  268: 
  269: /*
  270: --------------------------------------------------------------------------------
  271:   AND binaire
  272: --------------------------------------------------------------------------------
  273: */
  274: 
  275:     else if (((*s_objet_argument_1).type == BIN) &&
  276:             ((*s_objet_argument_2).type == BIN))
  277:     {
  278:         if ((s_objet_resultat = allocation(s_etat_processus, BIN)) == NULL)
  279:         {
  280:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  281:             return;
  282:         }
  283: 
  284:         (*((logical8 *) (*s_objet_resultat).objet)) = 
  285:                 (*((logical8 *) (*s_objet_argument_1).objet)) &
  286:                 (*((logical8 *) (*s_objet_argument_2).objet));
  287:     }
  288: 
  289: /*
  290: --------------------------------------------------------------------------------
  291:    AND entre des arguments complexes
  292: --------------------------------------------------------------------------------
  293: */
  294: 
  295:     /*
  296:      * Nom ou valeur numérique / Nom ou valeur numérique
  297:      */
  298: 
  299:     else if ((((*s_objet_argument_1).type == NOM) &&
  300:             (((*s_objet_argument_2).type == NOM) ||
  301:             ((*s_objet_argument_2).type == INT) ||
  302:             ((*s_objet_argument_2).type == REL))) ||
  303:             (((*s_objet_argument_2).type == NOM) &&
  304:             (((*s_objet_argument_1).type == INT) ||
  305:             ((*s_objet_argument_1).type == REL))))
  306:     {
  307:         if ((s_objet_resultat = allocation(s_etat_processus, ALG)) == NULL)
  308:         {
  309:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  310:             return;
  311:         }
  312: 
  313:         if (((*s_objet_resultat).objet = allocation_maillon(s_etat_processus))
  314:                 == NULL)
  315:         {
  316:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  317:             return;
  318:         }
  319: 
  320:         l_element_courant = (*s_objet_resultat).objet;
  321: 
  322:         if (((*l_element_courant).donnee =
  323:                 allocation(s_etat_processus, FCT)) == NULL)
  324:         {
  325:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  326:             return;
  327:         }
  328: 
  329:         (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
  330:                 .nombre_arguments = 0;
  331:         (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
  332:                 .fonction = instruction_vers_niveau_superieur;
  333: 
  334:         if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
  335:                 .nom_fonction = malloc(3 * sizeof(unsigned char))) == NULL)
  336:         {
  337:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  338:             return;
  339:         }
  340: 
  341:         strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
  342:                 .nom_fonction, "<<");
  343: 
  344:         if (((*l_element_courant).suivant =
  345:                 allocation_maillon(s_etat_processus)) == NULL)
  346:         {
  347:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  348:             return;
  349:         }
  350: 
  351:         l_element_courant = (*l_element_courant).suivant;
  352:         (*l_element_courant).donnee = s_objet_argument_2;
  353: 
  354:         if (((*l_element_courant).suivant =
  355:                 allocation_maillon(s_etat_processus)) == NULL)
  356:         {
  357:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  358:             return;
  359:         }
  360: 
  361:         l_element_courant = (*l_element_courant).suivant;
  362:         (*l_element_courant).donnee = s_objet_argument_1;
  363: 
  364:         if (((*l_element_courant).suivant =
  365:                 allocation_maillon(s_etat_processus)) == NULL)
  366:         {
  367:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  368:             return;
  369:         }
  370: 
  371:         l_element_courant = (*l_element_courant).suivant;
  372: 
  373:         if (((*l_element_courant).donnee =
  374:                 allocation(s_etat_processus, FCT)) == NULL)
  375:         {
  376:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  377:             return;
  378:         }
  379: 
  380:         (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
  381:                 .nombre_arguments = 0;
  382:         (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
  383:                 .fonction = instruction_and;
  384: 
  385:         if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
  386:                 .nom_fonction = malloc(4 * sizeof(unsigned char))) == NULL)
  387:         {
  388:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  389:             return;
  390:         }
  391: 
  392:         strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
  393:                 .nom_fonction, "AND");
  394: 
  395:         if (((*l_element_courant).suivant =
  396:                 allocation_maillon(s_etat_processus)) == NULL)
  397:         {
  398:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  399:             return;
  400:         }
  401: 
  402:         l_element_courant = (*l_element_courant).suivant;
  403: 
  404:         if (((*l_element_courant).donnee =
  405:                 allocation(s_etat_processus, FCT)) == NULL)
  406:         {
  407:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  408:             return;
  409:         }
  410: 
  411:         (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
  412:                 .nombre_arguments = 0;
  413:         (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
  414:                 .fonction = instruction_vers_niveau_inferieur;
  415: 
  416:         if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
  417:                 .nom_fonction = malloc(3 * sizeof(unsigned char))) == NULL)
  418:         {
  419:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  420:             return;
  421:         }
  422: 
  423:         strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
  424:                 .nom_fonction, ">>");
  425: 
  426:         (*l_element_courant).suivant = NULL;
  427: 
  428:         s_objet_argument_1 = NULL;
  429:         s_objet_argument_2 = NULL;
  430:     }
  431: 
  432:     /*
  433:      * Nom ou valeur numérique / Expression
  434:      */
  435: 
  436:     else if ((((*s_objet_argument_1).type == ALG) ||
  437:             ((*s_objet_argument_1).type == RPN)) &&
  438:             (((*s_objet_argument_2).type == NOM) ||
  439:             ((*s_objet_argument_2).type == INT) ||
  440:             ((*s_objet_argument_2).type == REL)))
  441:     {
  442:         nombre_elements = 0;
  443:         l_element_courant = (struct_liste_chainee *)
  444:                 (*s_objet_argument_1).objet;
  445: 
  446:         while(l_element_courant != NULL)
  447:         {
  448:             nombre_elements++;
  449:             l_element_courant = (*l_element_courant).suivant;
  450:         }
  451: 
  452:         if (nombre_elements == 2)
  453:         {
  454:             liberation(s_etat_processus, s_objet_argument_1);
  455:             liberation(s_etat_processus, s_objet_argument_2);
  456: 
  457:             (*s_etat_processus).erreur_execution = d_ex_argument_invalide;
  458:             return;
  459:         }
  460: 
  461:         if ((s_objet_resultat = copie_objet(s_etat_processus,
  462:                 s_objet_argument_1, 'N')) == NULL)
  463:         {
  464:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  465:             return;
  466:         }
  467: 
  468:         l_element_courant = (struct_liste_chainee *)
  469:                 (*s_objet_resultat).objet;
  470:         l_element_precedent = l_element_courant;
  471:         l_element_courant = (*l_element_courant).suivant;
  472: 
  473:         if (((*l_element_precedent).suivant =
  474:                 allocation_maillon(s_etat_processus)) == NULL)
  475:         {
  476:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  477:             return;
  478:         }
  479: 
  480:         (*(*l_element_precedent).suivant).donnee = s_objet_argument_2;
  481:         (*(*l_element_precedent).suivant).suivant = l_element_courant;
  482: 
  483:         while((*l_element_courant).suivant != NULL)
  484:         {
  485:             l_element_precedent = l_element_courant;
  486:             l_element_courant = (*l_element_courant).suivant;
  487:         }
  488: 
  489:         if (((*l_element_precedent).suivant =
  490:                 allocation_maillon(s_etat_processus)) == NULL)
  491:         {
  492:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  493:             return;
  494:         }
  495: 
  496:         if (((*(*l_element_precedent).suivant).donnee =
  497:                 allocation(s_etat_processus, FCT)) == NULL)
  498:         {
  499:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  500:             return;
  501:         }
  502: 
  503:         (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
  504:                 .donnee).objet)).nombre_arguments = 0;
  505:         (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
  506:                 .donnee).objet)).fonction = instruction_and;
  507: 
  508:         if (((*((struct_fonction *) (*(*(*l_element_precedent)
  509:                 .suivant).donnee).objet)).nom_fonction =
  510:                 malloc(4 * sizeof(unsigned char))) == NULL)
  511:         {
  512:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  513:             return;
  514:         }
  515: 
  516:         strcpy((*((struct_fonction *) (*(*(*l_element_precedent)
  517:                 .suivant).donnee).objet)).nom_fonction, "AND");
  518: 
  519:         (*(*l_element_precedent).suivant).suivant = l_element_courant;
  520: 
  521:         s_objet_argument_2 = NULL;
  522:     }
  523: 
  524:     /*
  525:      * Expression / Nom ou valeur numérique
  526:      */
  527: 
  528:     else if ((((*s_objet_argument_1).type == NOM) ||
  529:             ((*s_objet_argument_1).type == INT) ||
  530:             ((*s_objet_argument_1).type == REL)) &&
  531:             (((*s_objet_argument_2).type == ALG) ||
  532:             ((*s_objet_argument_2).type == RPN)))
  533:     {
  534:         nombre_elements = 0;
  535:         l_element_courant = (struct_liste_chainee *)
  536:                 (*s_objet_argument_2).objet;
  537: 
  538:         while(l_element_courant != NULL)
  539:         {
  540:             nombre_elements++;
  541:             l_element_courant = (*l_element_courant).suivant;
  542:         }
  543: 
  544:         if (nombre_elements == 2)
  545:         {
  546:             liberation(s_etat_processus, s_objet_argument_1);
  547:             liberation(s_etat_processus, s_objet_argument_2);
  548: 
  549:             (*s_etat_processus).erreur_execution = d_ex_argument_invalide;
  550:             return;
  551:         }
  552: 
  553:         if ((s_objet_resultat = copie_objet(s_etat_processus,
  554:                 s_objet_argument_2, 'N')) == NULL)
  555:         {
  556:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  557:             return;
  558:         }
  559: 
  560:         l_element_courant = (struct_liste_chainee *)
  561:                 (*s_objet_resultat).objet;
  562:         l_element_precedent = l_element_courant;
  563: 
  564:         while((*l_element_courant).suivant != NULL)
  565:         {
  566:             l_element_precedent = l_element_courant;
  567:             l_element_courant = (*l_element_courant).suivant;
  568:         }
  569: 
  570:         if (((*l_element_precedent).suivant =
  571:                 allocation_maillon(s_etat_processus)) == NULL)
  572:         {
  573:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  574:             return;
  575:         }
  576: 
  577:         (*(*l_element_precedent).suivant).donnee = s_objet_argument_1;
  578:         l_element_precedent = (*l_element_precedent).suivant;
  579: 
  580:         if (((*l_element_precedent).suivant =
  581:                 allocation_maillon(s_etat_processus)) == NULL)
  582:         {
  583:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  584:             return;
  585:         }
  586: 
  587:         if (((*(*l_element_precedent).suivant).donnee =
  588:                 allocation(s_etat_processus, FCT)) == NULL)
  589:         {
  590:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  591:             return;
  592:         }
  593: 
  594:         (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
  595:                 .donnee).objet)).nombre_arguments = 0;
  596:         (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
  597:                 .donnee).objet)).fonction = instruction_and;
  598: 
  599:         if (((*((struct_fonction *) (*(*(*l_element_precedent)
  600:                 .suivant).donnee).objet)).nom_fonction =
  601:                 malloc(4 * sizeof(unsigned char))) == NULL)
  602:         {
  603:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  604:             return;
  605:         }
  606: 
  607:         strcpy((*((struct_fonction *) (*(*(*l_element_precedent)
  608:                 .suivant).donnee).objet)).nom_fonction, "AND");
  609: 
  610:         (*(*l_element_precedent).suivant).suivant = l_element_courant;
  611: 
  612:         s_objet_argument_1 = NULL;
  613:     }
  614: 
  615:     /*
  616:      * Expression / Expression
  617:      */
  618: 
  619:     else if ((((*s_objet_argument_1).type == ALG) &&
  620:             ((*s_objet_argument_2).type == ALG)) ||
  621:             (((*s_objet_argument_1).type == RPN) &&
  622:             ((*s_objet_argument_2).type == RPN)))
  623:     {
  624:         nombre_elements = 0;
  625:         l_element_courant = (struct_liste_chainee *)
  626:                 (*s_objet_argument_1).objet;
  627: 
  628:         while(l_element_courant != NULL)
  629:         {
  630:             nombre_elements++;
  631:             l_element_courant = (*l_element_courant).suivant;
  632:         }
  633: 
  634:         if (nombre_elements == 2)
  635:         {
  636:             liberation(s_etat_processus, s_objet_argument_1);
  637:             liberation(s_etat_processus, s_objet_argument_2);
  638: 
  639:             (*s_etat_processus).erreur_execution = d_ex_argument_invalide;
  640:             return;
  641:         }
  642: 
  643:         nombre_elements = 0;
  644:         l_element_courant = (struct_liste_chainee *)
  645:                 (*s_objet_argument_2).objet;
  646: 
  647:         while(l_element_courant != NULL)
  648:         {
  649:             nombre_elements++;
  650:             l_element_courant = (*l_element_courant).suivant;
  651:         }
  652: 
  653:         if (nombre_elements == 2)
  654:         {
  655:             liberation(s_etat_processus, s_objet_argument_1);
  656:             liberation(s_etat_processus, s_objet_argument_2);
  657: 
  658:             (*s_etat_processus).erreur_execution = d_ex_argument_invalide;
  659:             return;
  660:         }
  661: 
  662:         if ((s_copie_argument_1 = copie_objet(s_etat_processus,
  663:                 s_objet_argument_1, 'N')) == NULL)
  664:         {
  665:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  666:             return;
  667:         }
  668: 
  669:         if ((s_copie_argument_2 = copie_objet(s_etat_processus,
  670:                 s_objet_argument_2, 'N')) == NULL)
  671:         {
  672:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  673:             return;
  674:         }
  675: 
  676:         l_element_courant = (struct_liste_chainee *)
  677:                 (*s_copie_argument_1).objet;
  678:         (*s_copie_argument_1).objet = (void *) (*((struct_liste_chainee *)
  679:                 (*s_copie_argument_1).objet)).suivant;
  680: 
  681:         liberation(s_etat_processus, (*l_element_courant).donnee);
  682:         liberation_maillon(s_etat_processus, l_element_courant);
  683: 
  684:         l_element_courant = (struct_liste_chainee *)
  685:                 (*s_copie_argument_2).objet;
  686:         l_element_precedent = l_element_courant;
  687:         s_objet_resultat = s_copie_argument_2;
  688: 
  689:         while((*l_element_courant).suivant != NULL)
  690:         {
  691:             l_element_precedent = l_element_courant;
  692:             l_element_courant = (*l_element_courant).suivant;
  693:         }
  694: 
  695:         liberation(s_etat_processus, (*l_element_courant).donnee);
  696:         liberation_maillon(s_etat_processus, l_element_courant);
  697: 
  698:         (*l_element_precedent).suivant = (struct_liste_chainee *)
  699:                 (*s_copie_argument_1).objet;
  700:         (*s_copie_argument_1).objet = NULL;
  701:         free(s_copie_argument_1);
  702: 
  703:         l_element_courant = (*l_element_precedent).suivant;
  704:         while((*l_element_courant).suivant != NULL)
  705:         {
  706:             l_element_precedent = l_element_courant;
  707:             l_element_courant = (*l_element_courant).suivant;
  708:         }
  709: 
  710:         if (((*l_element_precedent).suivant =
  711:                 allocation_maillon(s_etat_processus)) == NULL)
  712:         {
  713:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  714:             return;
  715:         }
  716: 
  717:         (*(*l_element_precedent).suivant).suivant = l_element_courant;
  718:         l_element_courant = (*l_element_precedent).suivant;
  719: 
  720:         if (((*l_element_courant).donnee =
  721:                 allocation(s_etat_processus, FCT)) == NULL)
  722:         {
  723:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  724:             return;
  725:         }
  726: 
  727:         (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
  728:                 .nombre_arguments = 0;
  729:         (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
  730:                 .fonction = instruction_and;
  731: 
  732:         if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
  733:                 .nom_fonction = malloc(4 * sizeof(unsigned char))) == NULL)
  734:         {
  735:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  736:             return;
  737:         }
  738: 
  739:         strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
  740:                 .nom_fonction, "AND");
  741:     }
  742: 
  743: /*
  744: --------------------------------------------------------------------------------
  745:   AND impossible
  746: --------------------------------------------------------------------------------
  747: */
  748: 
  749:     else
  750:     {
  751:         liberation(s_etat_processus, s_objet_argument_1);
  752:         liberation(s_etat_processus, s_objet_argument_2);
  753: 
  754:         (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
  755:         return;
  756:     }
  757: 
  758:     liberation(s_etat_processus, s_objet_argument_1);
  759:     liberation(s_etat_processus, s_objet_argument_2);
  760: 
  761:     if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
  762:             s_objet_resultat) == d_erreur)
  763:     {
  764:         return;
  765:     }
  766: 
  767:     return;
  768: }
  769: 
  770: 
  771: /*
  772: ================================================================================
  773:   Fonction 'abs'
  774: ================================================================================
  775:   Entrées :
  776: --------------------------------------------------------------------------------
  777:   Sorties :
  778: --------------------------------------------------------------------------------
  779:   Effets de bord : néant
  780: ================================================================================
  781: */
  782: 
  783: void
  784: instruction_abs(struct_processus *s_etat_processus)
  785: {
  786:     logical1                            erreur_memoire;
  787: 
  788:     real8                               tampon_flottant;
  789: 
  790:     struct_liste_chainee                *l_element_courant;
  791:     struct_liste_chainee                *l_element_precedent;
  792: 
  793:     struct_objet                        *s_copie_argument;
  794:     struct_objet                        *s_objet_argument;
  795:     struct_objet                        *s_objet_resultat;
  796: 
  797:     unsigned long                       i;
  798:     unsigned long                       j;
  799:     unsigned long                       k;
  800:     unsigned long                       nombre_elements;
  801: 
  802:     void                                *accumulateur;
  803: 
  804:     (*s_etat_processus).erreur_execution = d_ex;
  805: 
  806:     if ((*s_etat_processus).affichage_arguments == 'Y')
  807:     {
  808:         printf("\n  ABS ");
  809: 
  810:         if ((*s_etat_processus).langue == 'F')
  811:         {
  812:             printf("(norme)\n\n");
  813:         }
  814:         else
  815:         {
  816:             printf("(norm)\n\n");
  817:         }
  818: 
  819:         printf("    1: %s\n", d_INT);
  820:         printf("->  1: %s\n\n", d_INT);
  821: 
  822:         printf("    1: %s, %s\n", d_REL, d_CPL);
  823:         printf("->  1: %s\n\n", d_REL);
  824: 
  825:         printf("    1: %s, %s, %s\n", d_VIN, d_VRL, d_VCX);
  826:         printf("->  1: %s\n\n", d_REL);
  827: 
  828:         printf("    1: %s, %s, %s\n", d_MIN, d_MRL, d_MCX);
  829:         printf("->  1: %s\n\n", d_REL);
  830: 
  831:         printf("    1: %s, %s\n", d_NOM, d_ALG);
  832:         printf("->  1: %s\n\n", d_ALG);
  833: 
  834:         printf("    1: %s\n", d_RPN);
  835:         printf("->  1: %s\n", d_RPN);
  836: 
  837:         return;
  838:     }
  839:     else if ((*s_etat_processus).test_instruction == 'Y')
  840:     {
  841:         (*s_etat_processus).nombre_arguments = 1;
  842:         return;
  843:     }
  844:     
  845:     if (test_cfsf(s_etat_processus, 31) == d_vrai)
  846:     {
  847:         if (empilement_pile_last(s_etat_processus, 1) == d_erreur)
  848:         {
  849:             return;
  850:         }
  851:     }
  852: 
  853:     if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
  854:             &s_objet_argument) == d_erreur)
  855:     {
  856:         (*s_etat_processus).erreur_execution = d_ex_manque_argument;
  857:         return;
  858:     }
  859: 
  860: /*
  861: --------------------------------------------------------------------------------
  862:   Valeur absolue d'un entier
  863: --------------------------------------------------------------------------------
  864: */
  865: 
  866:     if ((*s_objet_argument).type == INT)
  867:     {
  868:         if ((s_objet_resultat = allocation(s_etat_processus, INT)) == NULL)
  869:         {
  870:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  871:             return;
  872:         }
  873: 
  874:         (*((integer8 *) (*s_objet_resultat).objet)) = abs((*((integer8 *)
  875:                 (*s_objet_argument).objet)));
  876:     }
  877: 
  878: /*
  879: --------------------------------------------------------------------------------
  880:   Valeur absolue d'un réel
  881: --------------------------------------------------------------------------------
  882: */
  883: 
  884:     else if ((*s_objet_argument).type == REL)
  885:     {
  886:         if ((s_objet_resultat = allocation(s_etat_processus, REL)) == NULL)
  887:         {
  888:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  889:             return;
  890:         }
  891: 
  892:         (*((real8 *) (*s_objet_resultat).objet)) = fabs(*((real8 *)
  893:                 (*s_objet_argument).objet));
  894:     }
  895: 
  896: /*
  897: --------------------------------------------------------------------------------
  898:   Valeur absolue d'un complexe
  899: --------------------------------------------------------------------------------
  900: */
  901: 
  902:     else if ((*s_objet_argument).type == CPL)
  903:     {
  904:         if ((s_objet_resultat = allocation(s_etat_processus, REL)) == NULL)
  905:         {
  906:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  907:             return;
  908:         }
  909: 
  910:         (*s_objet_resultat).type = REL;
  911:         f77absc_(((struct_complexe16 *) (*s_objet_argument).objet),
  912:                 ((real8 *) (*s_objet_resultat).objet));
  913:     }
  914: 
  915: /*
  916: --------------------------------------------------------------------------------
  917:   Norme de Frobenius d'un tableau
  918: --------------------------------------------------------------------------------
  919: */
  920: 
  921:     /*
  922:      * Vecteur d'entiers
  923:      */
  924: 
  925:     else if ((*s_objet_argument).type == VIN)
  926:     {
  927:         if ((s_objet_resultat = allocation(s_etat_processus, REL)) == NULL)
  928:         {
  929:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  930:             return;
  931:         }
  932: 
  933:         if ((accumulateur = malloc((*(((struct_vecteur *)
  934:                 (*s_objet_argument).objet))).taille * sizeof(real8))) == NULL)
  935:         {
  936:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  937:             return;
  938:         }
  939: 
  940:         for(i = 0; i < (*(((struct_vecteur *) (*s_objet_argument).objet)))
  941:                 .taille; i++)
  942:         {
  943:             ((real8 *) accumulateur)[i] = (real8) (((integer8 *)
  944:                     (*((struct_vecteur *) (*s_objet_argument).objet))
  945:                     .tableau)[i] * ((integer8 *) (*((struct_vecteur *)
  946:                     (*s_objet_argument).objet)).tableau)[i]);
  947:         }
  948: 
  949:         (*((real8 *) (*s_objet_resultat).objet)) =
  950:                 sqrt(sommation_vecteur_reel(accumulateur,
  951:                 &((*(((struct_vecteur *) (*s_objet_argument).objet))).taille),
  952:                 &erreur_memoire));
  953: 
  954:         if (erreur_memoire == d_vrai)
  955:         {
  956:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  957:             return;
  958:         }
  959: 
  960:         free(accumulateur);
  961:     }
  962: 
  963:     /*
  964:      * Vecteur de réels
  965:      */
  966: 
  967:     else if ((*s_objet_argument).type == VRL)
  968:     {
  969:         if ((s_objet_resultat = allocation(s_etat_processus, REL)) == NULL)
  970:         {
  971:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  972:             return;
  973:         }
  974: 
  975:         if ((accumulateur = malloc((*(((struct_vecteur *)
  976:                 (*s_objet_argument).objet))).taille * sizeof(real8))) == NULL)
  977:         {
  978:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  979:             return;
  980:         }
  981: 
  982:         for(i = 0; i < (*(((struct_vecteur *) (*s_objet_argument).objet)))
  983:                 .taille; i++)
  984:         {
  985:             ((real8 *) accumulateur)[i] = ((real8 *) (*((struct_vecteur *)
  986:                     (*s_objet_argument).objet)).tableau)[i] *
  987:                     ((real8 *) (*((struct_vecteur *)
  988:                     (*s_objet_argument).objet)).tableau)[i];
  989:         }
  990: 
  991:         (*((real8 *) (*s_objet_resultat).objet)) =
  992:                 sqrt(sommation_vecteur_reel(accumulateur,
  993:                 &((*(((struct_vecteur *) (*s_objet_argument).objet))).taille),
  994:                 &erreur_memoire));
  995: 
  996:         if (erreur_memoire == d_vrai)
  997:         {
  998:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  999:             return;
 1000:         }
 1001: 
 1002:         free(accumulateur);
 1003:     }
 1004: 
 1005:     /*
 1006:      * Vecteur de complexes
 1007:      */
 1008: 
 1009:     else if ((*s_objet_argument).type == VCX)
 1010:     {
 1011:         if ((s_objet_resultat = allocation(s_etat_processus, REL)) == NULL)
 1012:         {
 1013:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1014:             return;
 1015:         }
 1016: 
 1017:         if ((accumulateur = malloc((*(((struct_vecteur *)
 1018:                 (*s_objet_argument).objet))).taille * sizeof(real8))) == NULL)
 1019:         {
 1020:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1021:             return;
 1022:         }
 1023: 
 1024:         for(i = 0; i < (*(((struct_vecteur *) (*s_objet_argument).objet)))
 1025:                 .taille; i++)
 1026:         {
 1027:             f77absc_(&(((struct_complexe16 *) (*((struct_vecteur *)
 1028:                     (*s_objet_argument).objet)).tableau)[i]), &tampon_flottant);
 1029:             ((real8 *) accumulateur)[i] = (tampon_flottant * tampon_flottant);
 1030:         }
 1031: 
 1032:         (*((real8 *) (*s_objet_resultat).objet)) =
 1033:                 sqrt(sommation_vecteur_reel(accumulateur,
 1034:                 &((*(((struct_vecteur *) (*s_objet_argument).objet))).taille),
 1035:                 &erreur_memoire));
 1036: 
 1037:         if (erreur_memoire == d_vrai)
 1038:         {
 1039:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1040:             return;
 1041:         }
 1042: 
 1043:         free(accumulateur);
 1044:     }
 1045: 
 1046:     /*
 1047:      * Matrice d'entiers
 1048:      */
 1049: 
 1050:     else if ((*s_objet_argument).type == MIN)
 1051:     {
 1052:         if ((s_objet_resultat = allocation(s_etat_processus, REL)) == NULL)
 1053:         {
 1054:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1055:             return;
 1056:         }
 1057: 
 1058:         if ((accumulateur = malloc((nombre_elements =
 1059:                 (*(((struct_matrice *) (*s_objet_argument).objet)))
 1060:                 .nombre_lignes * (*(((struct_matrice *) (*s_objet_argument)
 1061:                 .objet))).nombre_colonnes) * sizeof(real8))) == NULL)
 1062:         {
 1063:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1064:             return;
 1065:         }
 1066: 
 1067:         for(k = 0, i = 0; i < (*(((struct_matrice *)
 1068:                 (*s_objet_argument).objet))).nombre_lignes; i++)
 1069:         {
 1070:             for(j = 0; j < (*(((struct_matrice *) (*s_objet_argument).objet)))
 1071:                     .nombre_colonnes; j++)
 1072:             {
 1073:                 ((real8 *) accumulateur)[k++] =
 1074:                         ((integer8 **) (*((struct_matrice *)
 1075:                         (*s_objet_argument).objet)).tableau)[i][j] *
 1076:                         ((integer8 **) (*((struct_matrice *)
 1077:                         (*s_objet_argument).objet)).tableau)[i][j];
 1078:             }
 1079:         }
 1080: 
 1081:         (*((real8 *) (*s_objet_resultat).objet)) =
 1082:                 sqrt(sommation_vecteur_reel(accumulateur, &nombre_elements,
 1083:                 &erreur_memoire));
 1084: 
 1085:         if (erreur_memoire == d_vrai)
 1086:         {
 1087:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1088:             return;
 1089:         }
 1090: 
 1091:         free(accumulateur);
 1092:     }
 1093: 
 1094:     /*
 1095:      * Matrice de réels
 1096:      */
 1097: 
 1098:     else if ((*s_objet_argument).type == MRL)
 1099:     {
 1100:         if ((s_objet_resultat = allocation(s_etat_processus, REL)) == NULL)
 1101:         {
 1102:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1103:             return;
 1104:         }
 1105: 
 1106:         if ((accumulateur = malloc((nombre_elements =
 1107:                 (*(((struct_matrice *) (*s_objet_argument).objet)))
 1108:                 .nombre_lignes * (*(((struct_matrice *) (*s_objet_argument)
 1109:                 .objet))).nombre_colonnes) * sizeof(real8))) == NULL)
 1110:         {
 1111:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1112:             return;
 1113:         }
 1114: 
 1115:         for(k = 0, i = 0; i < (*(((struct_matrice *)
 1116:                 (*s_objet_argument).objet))).nombre_lignes; i++)
 1117:         {
 1118:             for(j = 0; j < (*(((struct_matrice *) (*s_objet_argument).objet)))
 1119:                     .nombre_colonnes; j++)
 1120:             {
 1121:                 ((real8 *) accumulateur)[k++] =
 1122:                         ((real8 **) (*((struct_matrice *)
 1123:                         (*s_objet_argument).objet)).tableau)[i][j] *
 1124:                         ((real8 **) (*((struct_matrice *)
 1125:                         (*s_objet_argument).objet)).tableau)[i][j];
 1126:             }
 1127:         }
 1128: 
 1129:         (*((real8 *) (*s_objet_resultat).objet)) =
 1130:                 sqrt(sommation_vecteur_reel(accumulateur, &nombre_elements,
 1131:                 &erreur_memoire));
 1132: 
 1133:         if (erreur_memoire == d_vrai)
 1134:         {
 1135:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1136:             return;
 1137:         }
 1138: 
 1139:         free(accumulateur);
 1140:     }
 1141: 
 1142:     /*
 1143:      * Matrice de complexes
 1144:      */
 1145: 
 1146:     else if ((*s_objet_argument).type == MCX)
 1147:     {
 1148:         if ((s_objet_resultat = allocation(s_etat_processus, REL)) == NULL)
 1149:         {
 1150:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1151:             return;
 1152:         }
 1153: 
 1154:         if ((accumulateur = malloc((nombre_elements =
 1155:                 (*(((struct_matrice *) (*s_objet_argument).objet)))
 1156:                 .nombre_lignes * (*(((struct_matrice *) (*s_objet_argument)
 1157:                 .objet))).nombre_colonnes) * sizeof(real8))) == NULL)
 1158:         {
 1159:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1160:             return;
 1161:         }
 1162: 
 1163:         for(k = 0, i = 0; i < (*(((struct_matrice *)
 1164:                 (*s_objet_argument).objet))).nombre_lignes; i++)
 1165:         {
 1166:             for(j = 0; j < (*(((struct_matrice *) (*s_objet_argument).objet)))
 1167:                     .nombre_colonnes; j++)
 1168:             {
 1169:                 f77absc_(&(((struct_complexe16 **) (*((struct_matrice *)
 1170:                         (*s_objet_argument).objet)).tableau)[i][j]),
 1171:                         &tampon_flottant);
 1172:                 ((real8 *) accumulateur)[k++] =
 1173:                         (tampon_flottant * tampon_flottant);
 1174:             }
 1175:         }
 1176: 
 1177:         (*((real8 *) (*s_objet_resultat).objet)) =
 1178:                 sqrt(sommation_vecteur_reel(accumulateur, &nombre_elements,
 1179:                 &erreur_memoire));
 1180: 
 1181:         if (erreur_memoire == d_vrai)
 1182:         {
 1183:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1184:             return;
 1185:         }
 1186: 
 1187:         free(accumulateur);
 1188:     }
 1189: 
 1190: /*
 1191: --------------------------------------------------------------------------------
 1192:   Valeur absolue d'un nom
 1193: --------------------------------------------------------------------------------
 1194: */
 1195: 
 1196:     else if ((*s_objet_argument).type == NOM)
 1197:     {
 1198:         if ((s_objet_resultat = allocation(s_etat_processus, ALG)) == NULL)
 1199:         {
 1200:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1201:             return;
 1202:         }
 1203: 
 1204:         if (((*s_objet_resultat).objet =
 1205:                 allocation_maillon(s_etat_processus)) == NULL)
 1206:         {
 1207:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1208:             return;
 1209:         }
 1210: 
 1211:         l_element_courant = (*s_objet_resultat).objet;
 1212: 
 1213:         if (((*l_element_courant).donnee =
 1214:                 allocation(s_etat_processus, FCT)) == NULL)
 1215:         {
 1216:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1217:             return;
 1218:         }
 1219: 
 1220:         (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1221:                 .nombre_arguments = 0;
 1222:         (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1223:                 .fonction = instruction_vers_niveau_superieur;
 1224: 
 1225:         if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1226:                 .nom_fonction = malloc(3 * sizeof(unsigned char))) == NULL)
 1227:         {
 1228:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1229:             return;
 1230:         }
 1231: 
 1232:         strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1233:                 .nom_fonction, "<<");
 1234: 
 1235:         if (((*l_element_courant).suivant =
 1236:                 allocation_maillon(s_etat_processus)) == NULL)
 1237:         {
 1238:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1239:             return;
 1240:         }
 1241: 
 1242:         l_element_courant = (*l_element_courant).suivant;
 1243:         (*l_element_courant).donnee = s_objet_argument;
 1244: 
 1245:         if (((*l_element_courant).suivant =
 1246:                 allocation_maillon(s_etat_processus)) == NULL)
 1247:         {
 1248:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1249:             return;
 1250:         }
 1251: 
 1252:         l_element_courant = (*l_element_courant).suivant;
 1253: 
 1254:         if (((*l_element_courant).donnee =
 1255:                 allocation(s_etat_processus, FCT)) == NULL)
 1256:         {
 1257:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1258:             return;
 1259:         }
 1260: 
 1261:         (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1262:                 .nombre_arguments = 1;
 1263:         (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1264:                 .fonction = instruction_abs;
 1265: 
 1266:         if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1267:                 .nom_fonction = malloc(4 * sizeof(unsigned char))) == NULL)
 1268:         {
 1269:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1270:             return;
 1271:         }
 1272: 
 1273:         strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1274:                 .nom_fonction, "ABS");
 1275: 
 1276:         if (((*l_element_courant).suivant =
 1277:                 allocation_maillon(s_etat_processus)) == NULL)
 1278:         {
 1279:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1280:             return;
 1281:         }
 1282: 
 1283:         l_element_courant = (*l_element_courant).suivant;
 1284: 
 1285:         if (((*l_element_courant).donnee =
 1286:                 allocation(s_etat_processus, FCT)) == NULL)
 1287:         {
 1288:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1289:             return;
 1290:         }
 1291: 
 1292:         (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1293:                 .nombre_arguments = 0;
 1294:         (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1295:                 .fonction = instruction_vers_niveau_inferieur;
 1296: 
 1297:         if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1298:                 .nom_fonction = malloc(3 * sizeof(unsigned char))) == NULL)
 1299:         {
 1300:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1301:             return;
 1302:         }
 1303: 
 1304:         strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1305:                 .nom_fonction, ">>");
 1306: 
 1307:         (*l_element_courant).suivant = NULL;
 1308:         s_objet_argument = NULL;
 1309:     }
 1310: 
 1311: /*
 1312: --------------------------------------------------------------------------------
 1313:   Valeur absolue d'une expression
 1314: --------------------------------------------------------------------------------
 1315: */
 1316: 
 1317:     else if (((*s_objet_argument).type == ALG) ||
 1318:             ((*s_objet_argument).type == RPN))
 1319:     {
 1320:         if ((s_copie_argument = copie_objet(s_etat_processus,
 1321:                 s_objet_argument, 'N')) == NULL)
 1322:         {
 1323:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1324:             return;
 1325:         }
 1326: 
 1327:         l_element_courant = (struct_liste_chainee *)
 1328:                 (*s_copie_argument).objet;
 1329:         l_element_precedent = l_element_courant;
 1330: 
 1331:         while((*l_element_courant).suivant != NULL)
 1332:         {
 1333:             l_element_precedent = l_element_courant;
 1334:             l_element_courant = (*l_element_courant).suivant;
 1335:         }
 1336: 
 1337:         if (((*l_element_precedent).suivant =
 1338:                 allocation_maillon(s_etat_processus)) == NULL)
 1339:         {
 1340:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1341:             return;
 1342:         }
 1343: 
 1344:         if (((*(*l_element_precedent).suivant).donnee =
 1345:                 allocation(s_etat_processus, FCT)) == NULL)
 1346:         {
 1347:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1348:             return;
 1349:         }
 1350: 
 1351:         (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
 1352:                 .donnee).objet)).nombre_arguments = 1;
 1353:         (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
 1354:                 .donnee).objet)).fonction = instruction_abs;
 1355: 
 1356:         if (((*((struct_fonction *) (*(*(*l_element_precedent)
 1357:                 .suivant).donnee).objet)).nom_fonction =
 1358:                 malloc(4 * sizeof(unsigned char))) == NULL)
 1359:         {
 1360:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1361:             return;
 1362:         }
 1363: 
 1364:         strcpy((*((struct_fonction *) (*(*(*l_element_precedent)
 1365:                 .suivant).donnee).objet)).nom_fonction, "ABS");
 1366: 
 1367:         (*(*l_element_precedent).suivant).suivant = l_element_courant;
 1368: 
 1369:         s_objet_resultat = s_copie_argument;
 1370:     }
 1371: 
 1372: /*
 1373: --------------------------------------------------------------------------------
 1374:   Valeur absolue impossible à réaliser
 1375: --------------------------------------------------------------------------------
 1376: */
 1377: 
 1378:     else
 1379:     {
 1380:         liberation(s_etat_processus, s_objet_argument);
 1381: 
 1382:         (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
 1383:         return;
 1384:     }
 1385: 
 1386:     if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
 1387:             s_objet_resultat) == d_erreur)
 1388:     {
 1389:         return;
 1390:     }
 1391: 
 1392:     liberation(s_etat_processus, s_objet_argument);
 1393: 
 1394:     return;
 1395: }
 1396: 
 1397: 
 1398: /*
 1399: ================================================================================
 1400:   Fonction 'arg'
 1401: ================================================================================
 1402:   Entrées : structure processus
 1403: --------------------------------------------------------------------------------
 1404:   Sorties :
 1405: --------------------------------------------------------------------------------
 1406:   Effets de bord : néant
 1407: ================================================================================
 1408: */
 1409: 
 1410: void
 1411: instruction_arg(struct_processus *s_etat_processus)
 1412: {
 1413:     struct_liste_chainee            *l_element_courant;
 1414:     struct_liste_chainee            *l_element_precedent;
 1415: 
 1416:     struct_objet                    *s_copie_argument;
 1417:     struct_objet                    *s_objet_argument;
 1418:     struct_objet                    *s_objet_resultat;
 1419: 
 1420:     (*s_etat_processus).erreur_execution = d_ex;
 1421: 
 1422:     if ((*s_etat_processus).affichage_arguments == 'Y')
 1423:     {
 1424:         printf("\n  ARG ");
 1425: 
 1426:         if ((*s_etat_processus).langue == 'F')
 1427:         {
 1428:             printf("(argument)\n\n");
 1429:         }
 1430:         else
 1431:         {
 1432:             printf("(argument)\n\n");
 1433:         }
 1434: 
 1435:         printf("    1: %s, %s, %s\n", d_INT, d_REL, d_CPL);
 1436:         printf("->  1: %s\n\n", d_REL);
 1437: 
 1438:         printf("    1: %s, %s\n", d_NOM, d_ALG);
 1439:         printf("->  1: %s\n\n", d_ALG);
 1440: 
 1441:         printf("    1: %s\n", d_RPN);
 1442:         printf("->  1: %s\n", d_RPN);
 1443: 
 1444:         return;
 1445:     }
 1446:     else if ((*s_etat_processus).test_instruction == 'Y')
 1447:     {
 1448:         (*s_etat_processus).nombre_arguments = 1;
 1449:         return;
 1450:     }
 1451: 
 1452:     if (test_cfsf(s_etat_processus, 31) == d_vrai)
 1453:     {
 1454:         if (empilement_pile_last(s_etat_processus, 1) == d_erreur)
 1455:         {
 1456:             return;
 1457:         }
 1458:     }
 1459: 
 1460:     if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
 1461:             &s_objet_argument) == d_erreur)
 1462:     {
 1463:         (*s_etat_processus).erreur_execution = d_ex_manque_argument;
 1464:         return;
 1465:     }
 1466: 
 1467: /*
 1468: --------------------------------------------------------------------------------
 1469:   Argument d'un entier ou d'un réel
 1470: --------------------------------------------------------------------------------
 1471: */
 1472: 
 1473:     if (((*s_objet_argument).type == INT) ||
 1474:             ((*s_objet_argument).type == REL))
 1475:     {
 1476:         if ((s_objet_resultat = allocation(s_etat_processus, REL))
 1477:                 == NULL)
 1478:         {
 1479:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1480:             return;
 1481:         }
 1482: 
 1483:         if ((*s_objet_argument).type == INT)
 1484:         {
 1485:             if ((*((integer8 *) (*s_objet_argument).objet)) >= 0)
 1486:             {
 1487:                 (*((real8 *) (*s_objet_resultat).objet)) = 0;
 1488:             }
 1489:             else
 1490:             {
 1491:                 (*((real8 *) (*s_objet_resultat).objet)) =
 1492:                         4 * atan((real8) 1);
 1493:             }
 1494:         }
 1495:         else
 1496:         {
 1497:             if ((*((real8 *) (*s_objet_argument).objet)) >= 0)
 1498:             {
 1499:                 (*((real8 *) (*s_objet_resultat).objet)) = 0;
 1500:             }
 1501:             else
 1502:             {
 1503:                 (*((real8 *) (*s_objet_resultat).objet)) =
 1504:                         4 * atan((real8) 1);
 1505: 
 1506:                 if (test_cfsf(s_etat_processus, 60) == d_faux)
 1507:                 {
 1508:                     conversion_radians_vers_degres(&(*((real8 *)
 1509:                             (*s_objet_resultat).objet)));
 1510:                 }
 1511:             }
 1512:         }
 1513:     }
 1514: 
 1515: /*
 1516: --------------------------------------------------------------------------------
 1517:   Argument d'un complexe
 1518: --------------------------------------------------------------------------------
 1519: */
 1520: 
 1521:     else if ((*s_objet_argument).type == CPL)
 1522:     {
 1523:         if ((s_objet_resultat = allocation(s_etat_processus, REL))
 1524:                 == NULL)
 1525:         {
 1526:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1527:             return;
 1528:         }
 1529: 
 1530:         (*((real8 *) (*s_objet_resultat).objet)) =
 1531:                 atan2((*((struct_complexe16 *) (*s_objet_argument).objet))
 1532:                 .partie_imaginaire, (*((struct_complexe16 *)
 1533:                 (*s_objet_argument).objet)).partie_reelle);
 1534: 
 1535:         if (test_cfsf(s_etat_processus, 60) == d_faux)
 1536:         {
 1537:             conversion_radians_vers_degres(&(*((real8 *)
 1538:                     (*s_objet_resultat).objet)));
 1539:         }
 1540:     }
 1541: 
 1542: /*
 1543: --------------------------------------------------------------------------------
 1544:   Argument d'un nom
 1545: --------------------------------------------------------------------------------
 1546: */
 1547: 
 1548:     else if ((*s_objet_argument).type == NOM)
 1549:     {
 1550:         if ((s_objet_resultat = allocation(s_etat_processus, ALG))
 1551:                 == NULL)
 1552:         {
 1553:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1554:             return;
 1555:         }
 1556: 
 1557:         if (((*s_objet_resultat).objet =
 1558:                 allocation_maillon(s_etat_processus)) == NULL)
 1559:         {
 1560:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1561:             return;
 1562:         }
 1563: 
 1564:         l_element_courant = (*s_objet_resultat).objet;
 1565: 
 1566:         if (((*l_element_courant).donnee =
 1567:                 allocation(s_etat_processus, FCT)) == NULL)
 1568:         {
 1569:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1570:             return;
 1571:         }
 1572: 
 1573:         (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1574:                 .nombre_arguments = 0;
 1575:         (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1576:                 .fonction = instruction_vers_niveau_superieur;
 1577: 
 1578:         if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1579:                 .nom_fonction = malloc(3 * sizeof(unsigned char))) == NULL)
 1580:         {
 1581:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1582:             return;
 1583:         }
 1584: 
 1585:         strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1586:                 .nom_fonction, "<<");
 1587: 
 1588:         if (((*l_element_courant).suivant =
 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 = (*l_element_courant).suivant;
 1596:         (*l_element_courant).donnee = s_objet_argument;
 1597: 
 1598:         if (((*l_element_courant).suivant =
 1599:                 allocation_maillon(s_etat_processus)) == NULL)
 1600:         {
 1601:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1602:             return;
 1603:         }
 1604: 
 1605:         l_element_courant = (*l_element_courant).suivant;
 1606: 
 1607:         if (((*l_element_courant).donnee =
 1608:                 allocation(s_etat_processus, FCT)) == NULL)
 1609:         {
 1610:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1611:             return;
 1612:         }
 1613: 
 1614:         (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1615:                 .nombre_arguments = 1;
 1616:         (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1617:                 .fonction = instruction_arg;
 1618: 
 1619:         if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1620:                 .nom_fonction = malloc(4 * sizeof(unsigned char))) == NULL)
 1621:         {
 1622:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1623:             return;
 1624:         }
 1625: 
 1626:         strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1627:                 .nom_fonction, "ARG");
 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 = 0;
 1647:         (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1648:                 .fonction = instruction_vers_niveau_inferieur;
 1649: 
 1650:         if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1651:                 .nom_fonction = malloc(3 * 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, ">>");
 1659: 
 1660:         (*l_element_courant).suivant = NULL;
 1661:         s_objet_argument = NULL;
 1662:     }
 1663: 
 1664: /*
 1665: --------------------------------------------------------------------------------
 1666:   Argument d'une expression
 1667: --------------------------------------------------------------------------------
 1668: */
 1669: 
 1670:     else if (((*s_objet_argument).type == ALG) ||
 1671:             ((*s_objet_argument).type == RPN))
 1672:     {
 1673:         if ((s_copie_argument = copie_objet(s_etat_processus,
 1674:                 s_objet_argument, 'N')) == NULL)
 1675:         {
 1676:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1677:             return;
 1678:         }
 1679: 
 1680:         l_element_courant = (struct_liste_chainee *)
 1681:                 (*s_copie_argument).objet;
 1682:         l_element_precedent = l_element_courant;
 1683: 
 1684:         while((*l_element_courant).suivant != NULL)
 1685:         {
 1686:             l_element_precedent = l_element_courant;
 1687:             l_element_courant = (*l_element_courant).suivant;
 1688:         }
 1689: 
 1690:         if (((*l_element_precedent).suivant =
 1691:                 allocation_maillon(s_etat_processus)) == NULL)
 1692:         {
 1693:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1694:             return;
 1695:         }
 1696: 
 1697:         if (((*(*l_element_precedent).suivant).donnee =
 1698:                 allocation(s_etat_processus, FCT)) == NULL)
 1699:         {
 1700:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1701:             return;
 1702:         }
 1703: 
 1704:         (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
 1705:                 .donnee).objet)).nombre_arguments = 1;
 1706:         (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
 1707:                 .donnee).objet)).fonction = instruction_arg;
 1708: 
 1709:         if (((*((struct_fonction *) (*(*(*l_element_precedent)
 1710:                 .suivant).donnee).objet)).nom_fonction =
 1711:                 malloc(4 * sizeof(unsigned char))) == NULL)
 1712:         {
 1713:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1714:             return;
 1715:         }
 1716: 
 1717:         strcpy((*((struct_fonction *) (*(*(*l_element_precedent)
 1718:                 .suivant).donnee).objet)).nom_fonction, "ARG");
 1719: 
 1720:         (*(*l_element_precedent).suivant).suivant = l_element_courant;
 1721: 
 1722:         s_objet_resultat = s_copie_argument;
 1723:     }
 1724: 
 1725: /*
 1726: --------------------------------------------------------------------------------
 1727:   Réalisation impossible de la fonction argument
 1728: --------------------------------------------------------------------------------
 1729: */
 1730: 
 1731:     else
 1732:     {
 1733:         liberation(s_etat_processus, s_objet_argument);
 1734: 
 1735:         (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
 1736:         return;
 1737:     }
 1738: 
 1739:     liberation(s_etat_processus, s_objet_argument);
 1740: 
 1741:     if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
 1742:             s_objet_resultat) == d_erreur)
 1743:     {
 1744:         return;
 1745:     }
 1746: 
 1747:     return;
 1748: }
 1749: 
 1750: 
 1751: /*
 1752: ================================================================================
 1753:   Fonction 'asin'
 1754: ================================================================================
 1755:   Entrées : pointeur sur une structure struct_processus
 1756: --------------------------------------------------------------------------------
 1757:   Sorties :
 1758: --------------------------------------------------------------------------------
 1759:   Effets de bord : néant
 1760: ================================================================================
 1761: */
 1762: 
 1763: void
 1764: instruction_asin(struct_processus *s_etat_processus)
 1765: {
 1766:     real8                           argument;
 1767: 
 1768:     struct_complexe16               registre;
 1769: 
 1770:     struct_liste_chainee            *l_element_courant;
 1771:     struct_liste_chainee            *l_element_precedent;
 1772: 
 1773:     struct_objet                    *s_copie_argument;
 1774:     struct_objet                    *s_objet_argument;
 1775:     struct_objet                    *s_objet_resultat;
 1776: 
 1777:     (*s_etat_processus).erreur_execution = d_ex;
 1778: 
 1779:     if ((*s_etat_processus).affichage_arguments == 'Y')
 1780:     {
 1781:         printf("\n  ASIN ");
 1782: 
 1783:         if ((*s_etat_processus).langue == 'F')
 1784:         {
 1785:             printf("(arcsinus)\n\n");
 1786:         }
 1787:         else
 1788:         {
 1789:             printf("(arcsine)\n\n");
 1790:         }
 1791: 
 1792:         printf("    1: %s, %s\n", d_INT, d_REL);
 1793:         printf("->  1: %s, %s\n\n", d_REL, d_CPL);
 1794: 
 1795:         printf("    1: %s\n", d_CPL);
 1796:         printf("->  1: %s\n\n", d_CPL);
 1797: 
 1798:         printf("    1: %s, %s\n", d_NOM, d_ALG);
 1799:         printf("->  1: %s\n\n", d_ALG);
 1800: 
 1801:         printf("    1: %s\n", d_RPN);
 1802:         printf("->  1: %s\n", d_RPN);
 1803: 
 1804:         return;
 1805:     }
 1806:     else if ((*s_etat_processus).test_instruction == 'Y')
 1807:     {
 1808:         (*s_etat_processus).nombre_arguments = 1;
 1809:         return;
 1810:     }
 1811: 
 1812:     if (test_cfsf(s_etat_processus, 31) == d_vrai)
 1813:     {
 1814:         if (empilement_pile_last(s_etat_processus, 1) == d_erreur)
 1815:         {
 1816:             return;
 1817:         }
 1818:     }
 1819: 
 1820:     if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
 1821:             &s_objet_argument) == d_erreur)
 1822:     {
 1823:         (*s_etat_processus).erreur_execution = d_ex_manque_argument;
 1824:         return;
 1825:     }
 1826: 
 1827: /*
 1828: --------------------------------------------------------------------------------
 1829:   Arcsinus d'un entier ou d'un réel
 1830: --------------------------------------------------------------------------------
 1831: */
 1832: 
 1833:     if (((*s_objet_argument).type == INT) ||
 1834:             ((*s_objet_argument).type == REL))
 1835:     {
 1836:         if ((*s_objet_argument).type == INT)
 1837:         {
 1838:             argument = (real8) (*((integer8 *) (*s_objet_argument).objet));
 1839:         }
 1840:         else
 1841:         {
 1842:             argument = (*((real8 *) (*s_objet_argument).objet));
 1843:         }
 1844: 
 1845:         if ((argument >= -1) && (argument <= 1))
 1846:         {
 1847:             /*
 1848:              * Résultat réel
 1849:              */
 1850: 
 1851:             if ((s_objet_resultat = allocation(s_etat_processus, REL))
 1852:                     == NULL)
 1853:             {
 1854:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1855:                 return;
 1856:             }
 1857: 
 1858:             (*((real8 *) (*s_objet_resultat).objet)) = asin(argument);
 1859: 
 1860:             if (test_cfsf(s_etat_processus, 60) == d_faux)
 1861:             {
 1862:                 conversion_radians_vers_degres((real8 *)
 1863:                         (*s_objet_resultat).objet);
 1864:             }
 1865:         }
 1866:         else
 1867:         {
 1868:             /*
 1869:              * Résultat complexe
 1870:              */
 1871: 
 1872:             registre.partie_reelle = argument;
 1873:             registre.partie_imaginaire = 0;
 1874: 
 1875:             if ((s_objet_resultat = allocation(s_etat_processus, CPL))
 1876:                     == NULL)
 1877:             {
 1878:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1879:                 return;
 1880:             }
 1881: 
 1882:             f77asin_(&registre, (struct_complexe16 *)
 1883:                     (*s_objet_resultat).objet);
 1884:         }
 1885:     }
 1886: 
 1887: /*
 1888: --------------------------------------------------------------------------------
 1889:   Arcsinus d'un complexe
 1890: --------------------------------------------------------------------------------
 1891: */
 1892: 
 1893:     else if ((*s_objet_argument).type == CPL)
 1894:     {
 1895:         if ((s_objet_resultat = allocation(s_etat_processus, CPL))
 1896:                 == NULL)
 1897:         {
 1898:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1899:             return;
 1900:         }
 1901: 
 1902:         f77asin_((struct_complexe16 *) (*s_objet_argument).objet,
 1903:                 (struct_complexe16 *) (*s_objet_resultat).objet);
 1904:     }
 1905: 
 1906: /*
 1907: --------------------------------------------------------------------------------
 1908:   Arcsinus d'un nom
 1909: --------------------------------------------------------------------------------
 1910: */
 1911: 
 1912:     else if ((*s_objet_argument).type == NOM)
 1913:     {
 1914:         if ((s_objet_resultat = allocation(s_etat_processus, ALG))
 1915:                 == NULL)
 1916:         {
 1917:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1918:             return;
 1919:         }
 1920: 
 1921:         if (((*s_objet_resultat).objet =
 1922:                 allocation_maillon(s_etat_processus)) == NULL)
 1923:         {
 1924:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1925:             return;
 1926:         }
 1927: 
 1928:         l_element_courant = (*s_objet_resultat).objet;
 1929: 
 1930:         if (((*l_element_courant).donnee =
 1931:                 allocation(s_etat_processus, FCT)) == NULL)
 1932:         {
 1933:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1934:             return;
 1935:         }
 1936: 
 1937:         (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1938:                 .nombre_arguments = 0;
 1939:         (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1940:                 .fonction = instruction_vers_niveau_superieur;
 1941: 
 1942:         if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1943:                 .nom_fonction = malloc(3 * sizeof(unsigned char))) == NULL)
 1944:         {
 1945:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1946:             return;
 1947:         }
 1948: 
 1949:         strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1950:                 .nom_fonction, "<<");
 1951: 
 1952:         if (((*l_element_courant).suivant =
 1953:                 allocation_maillon(s_etat_processus)) == NULL)
 1954:         {
 1955:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1956:             return;
 1957:         }
 1958: 
 1959:         l_element_courant = (*l_element_courant).suivant;
 1960:         (*l_element_courant).donnee = s_objet_argument;
 1961: 
 1962:         if (((*l_element_courant).suivant =
 1963:                 allocation_maillon(s_etat_processus)) == NULL)
 1964:         {
 1965:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1966:             return;
 1967:         }
 1968: 
 1969:         l_element_courant = (*l_element_courant).suivant;
 1970: 
 1971:         if (((*l_element_courant).donnee =
 1972:                 allocation(s_etat_processus, FCT)) == NULL)
 1973:         {
 1974:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1975:             return;
 1976:         }
 1977: 
 1978:         (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1979:                 .nombre_arguments = 1;
 1980:         (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1981:                 .fonction = instruction_asin;
 1982: 
 1983:         if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1984:                 .nom_fonction = malloc(5 * sizeof(unsigned char))) == NULL)
 1985:         {
 1986:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1987:             return;
 1988:         }
 1989: 
 1990:         strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1991:                 .nom_fonction, "ASIN");
 1992: 
 1993:         if (((*l_element_courant).suivant =
 1994:                 allocation_maillon(s_etat_processus)) == NULL)
 1995:         {
 1996:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1997:             return;
 1998:         }
 1999: 
 2000:         l_element_courant = (*l_element_courant).suivant;
 2001: 
 2002:         if (((*l_element_courant).donnee =
 2003:                 allocation(s_etat_processus, FCT)) == NULL)
 2004:         {
 2005:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 2006:             return;
 2007:         }
 2008: 
 2009:         (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 2010:                 .nombre_arguments = 0;
 2011:         (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 2012:                 .fonction = instruction_vers_niveau_inferieur;
 2013: 
 2014:         if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 2015:                 .nom_fonction = malloc(3 * sizeof(unsigned char))) == NULL)
 2016:         {
 2017:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 2018:             return;
 2019:         }
 2020: 
 2021:         strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 2022:                 .nom_fonction, ">>");
 2023: 
 2024:         (*l_element_courant).suivant = NULL;
 2025:         s_objet_argument = NULL;
 2026:     }
 2027: 
 2028: /*
 2029: --------------------------------------------------------------------------------
 2030:   Arcsinus d'une expression
 2031: --------------------------------------------------------------------------------
 2032: */
 2033: 
 2034:     else if (((*s_objet_argument).type == ALG) ||
 2035:             ((*s_objet_argument).type == RPN))
 2036:     {
 2037:         if ((s_copie_argument = copie_objet(s_etat_processus,
 2038:                 s_objet_argument, 'N')) == NULL)
 2039:         {
 2040:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 2041:             return;
 2042:         }
 2043: 
 2044:         l_element_courant = (struct_liste_chainee *)
 2045:                 (*s_copie_argument).objet;
 2046:         l_element_precedent = l_element_courant;
 2047: 
 2048:         while((*l_element_courant).suivant != NULL)
 2049:         {
 2050:             l_element_precedent = l_element_courant;
 2051:             l_element_courant = (*l_element_courant).suivant;
 2052:         }
 2053: 
 2054:         if (((*l_element_precedent).suivant =
 2055:                 allocation_maillon(s_etat_processus)) == NULL)
 2056:         {
 2057:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 2058:             return;
 2059:         }
 2060: 
 2061:         if (((*(*l_element_precedent).suivant).donnee =
 2062:                 allocation(s_etat_processus, FCT)) == NULL)
 2063:         {
 2064:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 2065:             return;
 2066:         }
 2067: 
 2068:         (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
 2069:                 .donnee).objet)).nombre_arguments = 1;
 2070:         (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
 2071:                 .donnee).objet)).fonction = instruction_asin;
 2072: 
 2073:         if (((*((struct_fonction *) (*(*(*l_element_precedent)
 2074:                 .suivant).donnee).objet)).nom_fonction =
 2075:                 malloc(5 * sizeof(unsigned char))) == NULL)
 2076:         {
 2077:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 2078:             return;
 2079:         }
 2080: 
 2081:         strcpy((*((struct_fonction *) (*(*(*l_element_precedent)
 2082:                 .suivant).donnee).objet)).nom_fonction, "ASIN");
 2083: 
 2084:         (*(*l_element_precedent).suivant).suivant = l_element_courant;
 2085: 
 2086:         s_objet_resultat = s_copie_argument;
 2087:     }
 2088: 
 2089: /*
 2090: --------------------------------------------------------------------------------
 2091:   Réalisation impossible de la fonction arcsinus
 2092: --------------------------------------------------------------------------------
 2093: */
 2094: 
 2095:     else
 2096:     {
 2097:         liberation(s_etat_processus, s_objet_argument);
 2098: 
 2099:         (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
 2100:         return;
 2101:     }
 2102: 
 2103:     liberation(s_etat_processus, s_objet_argument);
 2104: 
 2105:     if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
 2106:             s_objet_resultat) == d_erreur)
 2107:     {
 2108:         return;
 2109:     }
 2110: 
 2111:     return;
 2112: }
 2113: 
 2114: 
 2115: /*
 2116: ================================================================================
 2117:   Fonction 'acos'
 2118: ================================================================================
 2119:   Entrées : pointeur sur une structure struct_processus
 2120: --------------------------------------------------------------------------------
 2121:   Sorties :
 2122: --------------------------------------------------------------------------------
 2123:   Effets de bord : néant
 2124: ================================================================================
 2125: */
 2126: 
 2127: void
 2128: instruction_acos(struct_processus *s_etat_processus)
 2129: {
 2130:     real8                           argument;
 2131: 
 2132:     struct_complexe16               registre;
 2133: 
 2134:     struct_liste_chainee            *l_element_courant;
 2135:     struct_liste_chainee            *l_element_precedent;
 2136: 
 2137:     struct_objet                    *s_copie_argument;
 2138:     struct_objet                    *s_objet_argument;
 2139:     struct_objet                    *s_objet_resultat;
 2140: 
 2141:     (*s_etat_processus).erreur_execution = d_ex;
 2142: 
 2143:     if ((*s_etat_processus).affichage_arguments == 'Y')
 2144:     {
 2145:         printf("\n  ACOS ");
 2146: 
 2147:         if ((*s_etat_processus).langue == 'F')
 2148:         {
 2149:             printf("(arccosinus)\n\n");
 2150:         }
 2151:         else
 2152:         {
 2153:             printf("(arccosine)\n\n");
 2154:         }
 2155: 
 2156:         printf("    1: %s, %s\n", d_INT, d_REL);
 2157:         printf("->  1: %s, %s\n\n", d_REL, d_CPL);
 2158: 
 2159:         printf("    1: %s\n", d_CPL);
 2160:         printf("->  1: %s\n\n", d_CPL);
 2161: 
 2162:         printf("    1: %s, %s\n", d_NOM, d_ALG);
 2163:         printf("->  1: %s\n\n", d_ALG);
 2164: 
 2165:         printf("    1: %s\n", d_RPN);
 2166:         printf("->  1: %s\n", d_RPN);
 2167: 
 2168:         return;
 2169:     }
 2170:     else if ((*s_etat_processus).test_instruction == 'Y')
 2171:     {
 2172:         (*s_etat_processus).nombre_arguments = 1;
 2173:         return;
 2174:     }
 2175: 
 2176:     if (test_cfsf(s_etat_processus, 31) == d_vrai)
 2177:     {
 2178:         if (empilement_pile_last(s_etat_processus, 1) == d_erreur)
 2179:         {
 2180:             return;
 2181:         }
 2182:     }
 2183: 
 2184:     if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
 2185:             &s_objet_argument) == d_erreur)
 2186:     {
 2187:         (*s_etat_processus).erreur_execution = d_ex_manque_argument;
 2188:         return;
 2189:     }
 2190: 
 2191: /*
 2192: --------------------------------------------------------------------------------
 2193:   Arccossinus d'un entier ou d'un réel
 2194: --------------------------------------------------------------------------------
 2195: */
 2196: 
 2197:     if (((*s_objet_argument).type == INT) ||
 2198:             ((*s_objet_argument).type == REL))
 2199:     {
 2200:         if ((*s_objet_argument).type == INT)
 2201:         {
 2202:             argument = (real8) (*((integer8 *) (*s_objet_argument).objet));
 2203:         }
 2204:         else
 2205:         {
 2206:             argument = (*((real8 *) (*s_objet_argument).objet));
 2207:         }
 2208: 
 2209:         if ((argument >= -1) && (argument <= 1))
 2210:         {
 2211:             /*
 2212:              * Résultat réel
 2213:              */
 2214: 
 2215:             if ((s_objet_resultat = allocation(s_etat_processus, REL))
 2216:                     == NULL)
 2217:             {
 2218:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 2219:                 return;
 2220:             }
 2221: 
 2222:             (*((real8 *) (*s_objet_resultat).objet)) = acos(argument);
 2223: 
 2224:             if (test_cfsf(s_etat_processus, 60) == d_faux)
 2225:             {
 2226:                 conversion_radians_vers_degres((real8 *)
 2227:                         (*s_objet_resultat).objet);
 2228:             }
 2229:         }
 2230:         else
 2231:         {
 2232:             /*
 2233:              * Résultat complexe
 2234:              */
 2235: 
 2236:             registre.partie_reelle = argument;
 2237:             registre.partie_imaginaire = 0;
 2238: 
 2239:             if ((s_objet_resultat = allocation(s_etat_processus, CPL))
 2240:                     == NULL)
 2241:             {
 2242:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 2243:                 return;
 2244:             }
 2245: 
 2246:             f77acos_(&registre, (struct_complexe16 *)
 2247:                     (*s_objet_resultat).objet);
 2248:         }
 2249:     }
 2250: 
 2251: /*
 2252: --------------------------------------------------------------------------------
 2253:   Arccossinus d'un complexe
 2254: --------------------------------------------------------------------------------
 2255: */
 2256: 
 2257:     else if ((*s_objet_argument).type == CPL)
 2258:     {
 2259:         if ((s_objet_resultat = allocation(s_etat_processus, CPL))
 2260:                 == NULL)
 2261:         {
 2262:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 2263:             return;
 2264:         }
 2265: 
 2266:         f77acos_((struct_complexe16 *) (*s_objet_argument).objet,
 2267:                 (struct_complexe16 *) (*s_objet_resultat).objet);
 2268:     }
 2269: 
 2270: /*
 2271: --------------------------------------------------------------------------------
 2272:   Arccossinus d'un nom
 2273: --------------------------------------------------------------------------------
 2274: */
 2275: 
 2276:     else if ((*s_objet_argument).type == NOM)
 2277:     {
 2278:         if ((s_objet_resultat = allocation(s_etat_processus, ALG))
 2279:                 == NULL)
 2280:         {
 2281:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 2282:             return;
 2283:         }
 2284: 
 2285:         if (((*s_objet_resultat).objet =
 2286:                 allocation_maillon(s_etat_processus)) == NULL)
 2287:         {
 2288:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 2289:             return;
 2290:         }
 2291: 
 2292:         l_element_courant = (*s_objet_resultat).objet;
 2293: 
 2294:         if (((*l_element_courant).donnee =
 2295:                 allocation(s_etat_processus, FCT)) == NULL)
 2296:         {
 2297:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 2298:             return;
 2299:         }
 2300: 
 2301:         (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 2302:                 .nombre_arguments = 0;
 2303:         (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 2304:                 .fonction = instruction_vers_niveau_superieur;
 2305: 
 2306:         if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 2307:                 .nom_fonction = malloc(3 * sizeof(unsigned char))) == NULL)
 2308:         {
 2309:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 2310:             return;
 2311:         }
 2312: 
 2313:         strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 2314:                 .nom_fonction, "<<");
 2315: 
 2316:         if (((*l_element_courant).suivant =
 2317:                 allocation_maillon(s_etat_processus)) == NULL)
 2318:         {
 2319:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 2320:             return;
 2321:         }
 2322: 
 2323:         l_element_courant = (*l_element_courant).suivant;
 2324:         (*l_element_courant).donnee = s_objet_argument;
 2325: 
 2326:         if (((*l_element_courant).suivant =
 2327:                 allocation_maillon(s_etat_processus)) == NULL)
 2328:         {
 2329:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 2330:             return;
 2331:         }
 2332: 
 2333:         l_element_courant = (*l_element_courant).suivant;
 2334: 
 2335:         if (((*l_element_courant).donnee =
 2336:                 allocation(s_etat_processus, FCT)) == NULL)
 2337:         {
 2338:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 2339:             return;
 2340:         }
 2341: 
 2342:         (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 2343:                 .nombre_arguments = 1;
 2344:         (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 2345:                 .fonction = instruction_acos;
 2346: 
 2347:         if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 2348:                 .nom_fonction = malloc(5 * sizeof(unsigned char))) == NULL)
 2349:         {
 2350:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 2351:             return;
 2352:         }
 2353: 
 2354:         strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 2355:                 .nom_fonction, "ACOS");
 2356: 
 2357:         if (((*l_element_courant).suivant =
 2358:                 allocation_maillon(s_etat_processus)) == NULL)
 2359:         {
 2360:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 2361:             return;
 2362:         }
 2363: 
 2364:         l_element_courant = (*l_element_courant).suivant;
 2365: 
 2366:         if (((*l_element_courant).donnee =
 2367:                 allocation(s_etat_processus, FCT)) == NULL)
 2368:         {
 2369:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 2370:             return;
 2371:         }
 2372: 
 2373:         (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 2374:                 .nombre_arguments = 0;
 2375:         (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 2376:                 .fonction = instruction_vers_niveau_inferieur;
 2377: 
 2378:         if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 2379:                 .nom_fonction = malloc(3 * sizeof(unsigned char))) == NULL)
 2380:         {
 2381:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 2382:             return;
 2383:         }
 2384: 
 2385:         strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 2386:                 .nom_fonction, ">>");
 2387: 
 2388:         (*l_element_courant).suivant = NULL;
 2389:         s_objet_argument = NULL;
 2390:     }
 2391: 
 2392: /*
 2393: --------------------------------------------------------------------------------
 2394:   Arccossinus d'une expression
 2395: --------------------------------------------------------------------------------
 2396: */
 2397: 
 2398:     else if (((*s_objet_argument).type == ALG) ||
 2399:             ((*s_objet_argument).type == RPN))
 2400:     {
 2401:         if ((s_copie_argument = copie_objet(s_etat_processus,
 2402:                 s_objet_argument, 'N')) == NULL)
 2403:         {
 2404:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 2405:             return;
 2406:         }
 2407: 
 2408:         l_element_courant = (struct_liste_chainee *)
 2409:                 (*s_copie_argument).objet;
 2410:         l_element_precedent = l_element_courant;
 2411: 
 2412:         while((*l_element_courant).suivant != NULL)
 2413:         {
 2414:             l_element_precedent = l_element_courant;
 2415:             l_element_courant = (*l_element_courant).suivant;
 2416:         }
 2417: 
 2418:         if (((*l_element_precedent).suivant =
 2419:                 allocation_maillon(s_etat_processus)) == NULL)
 2420:         {
 2421:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 2422:             return;
 2423:         }
 2424: 
 2425:         if (((*(*l_element_precedent).suivant).donnee =
 2426:                 allocation(s_etat_processus, FCT)) == NULL)
 2427:         {
 2428:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 2429:             return;
 2430:         }
 2431: 
 2432:         (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
 2433:                 .donnee).objet)).nombre_arguments = 1;
 2434:         (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
 2435:                 .donnee).objet)).fonction = instruction_acos;
 2436: 
 2437:         if (((*((struct_fonction *) (*(*(*l_element_precedent)
 2438:                 .suivant).donnee).objet)).nom_fonction =
 2439:                 malloc(5 * sizeof(unsigned char))) == NULL)
 2440:         {
 2441:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 2442:             return;
 2443:         }
 2444: 
 2445:         strcpy((*((struct_fonction *) (*(*(*l_element_precedent)
 2446:                 .suivant).donnee).objet)).nom_fonction, "ACOS");
 2447: 
 2448:         (*(*l_element_precedent).suivant).suivant = l_element_courant;
 2449: 
 2450:         s_objet_resultat = s_copie_argument;
 2451:     }
 2452: 
 2453: /*
 2454: --------------------------------------------------------------------------------
 2455:   Réalisation impossible de la fonction arccosinus
 2456: --------------------------------------------------------------------------------
 2457: */
 2458: 
 2459:     else
 2460:     {
 2461:         liberation(s_etat_processus, s_objet_argument);
 2462: 
 2463:         (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
 2464:         return;
 2465:     }
 2466: 
 2467:     liberation(s_etat_processus, s_objet_argument);
 2468: 
 2469:     if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
 2470:             s_objet_resultat) == d_erreur)
 2471:     {
 2472:         return;
 2473:     }
 2474: 
 2475:     return;
 2476: }
 2477: 
 2478: 
 2479: /*
 2480: ================================================================================
 2481:   Fonction 'atan'
 2482: ================================================================================
 2483:   Entrées : pointeur sur une structure struct_processus
 2484: --------------------------------------------------------------------------------
 2485:   Sorties :
 2486: --------------------------------------------------------------------------------
 2487:   Effets de bord : néant
 2488: ================================================================================
 2489: */
 2490: 
 2491: void
 2492: instruction_atan(struct_processus *s_etat_processus)
 2493: {
 2494:     real8                           argument;
 2495: 
 2496:     integer4                        erreur;
 2497: 
 2498:     struct_liste_chainee            *l_element_courant;
 2499:     struct_liste_chainee            *l_element_precedent;
 2500: 
 2501:     struct_objet                    *s_copie_argument;
 2502:     struct_objet                    *s_objet_argument;
 2503:     struct_objet                    *s_objet_resultat;
 2504: 
 2505:     (*s_etat_processus).erreur_execution = d_ex;
 2506: 
 2507:     if ((*s_etat_processus).affichage_arguments == 'Y')
 2508:     {
 2509:         printf("\n  ATAN ");
 2510: 
 2511:         if ((*s_etat_processus).langue == 'F')
 2512:         {
 2513:             printf("(arctangente)\n\n");
 2514:         }
 2515:         else
 2516:         {
 2517:             printf("(arctangent)\n\n");
 2518:         }
 2519: 
 2520:         printf("    1: %s, %s\n", d_INT, d_REL);
 2521:         printf("->  1: %s, %s\n\n", d_REL, d_CPL);
 2522: 
 2523:         printf("    1: %s\n", d_CPL);
 2524:         printf("->  1: %s\n\n", d_CPL);
 2525: 
 2526:         printf("    1: %s, %s\n", d_NOM, d_ALG);
 2527:         printf("->  1: %s\n\n", d_ALG);
 2528: 
 2529:         printf("    1: %s\n", d_RPN);
 2530:         printf("->  1: %s\n", d_RPN);
 2531: 
 2532:         return;
 2533:     }
 2534:     else if ((*s_etat_processus).test_instruction == 'Y')
 2535:     {
 2536:         (*s_etat_processus).nombre_arguments = 1;
 2537:         return;
 2538:     }
 2539: 
 2540:     if (test_cfsf(s_etat_processus, 31) == d_vrai)
 2541:     {
 2542:         if (empilement_pile_last(s_etat_processus, 1) == d_erreur)
 2543:         {
 2544:             return;
 2545:         }
 2546:     }
 2547: 
 2548:     if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
 2549:             &s_objet_argument) == d_erreur)
 2550:     {
 2551:         (*s_etat_processus).erreur_execution = d_ex_manque_argument;
 2552:         return;
 2553:     }
 2554: 
 2555: /*
 2556: --------------------------------------------------------------------------------
 2557:   Arctangente d'un entier ou d'un réel
 2558: --------------------------------------------------------------------------------
 2559: */
 2560: 
 2561:     if (((*s_objet_argument).type == INT) ||
 2562:             ((*s_objet_argument).type == REL))
 2563:     {
 2564:         if ((*s_objet_argument).type == INT)
 2565:         {
 2566:             argument = (real8) (*((integer8 *) (*s_objet_argument).objet));
 2567:         }
 2568:         else
 2569:         {
 2570:             argument = (*((real8 *) (*s_objet_argument).objet));
 2571:         }
 2572: 
 2573:         if ((s_objet_resultat = allocation(s_etat_processus, REL))
 2574:                 == NULL)
 2575:         {
 2576:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 2577:             return;
 2578:         }
 2579: 
 2580:         (*((real8 *) (*s_objet_resultat).objet)) = atan(argument);
 2581: 
 2582:         if (test_cfsf(s_etat_processus, 60) == d_faux)
 2583:         {
 2584:             conversion_radians_vers_degres((real8 *)
 2585:                     (*s_objet_resultat).objet);
 2586:         }
 2587:     }
 2588: 
 2589: /*
 2590: --------------------------------------------------------------------------------
 2591:   Arctangente d'un complexe
 2592: --------------------------------------------------------------------------------
 2593: */
 2594: 
 2595:     else if ((*s_objet_argument).type == CPL)
 2596:     {
 2597:         if ((s_objet_resultat = allocation(s_etat_processus, CPL))
 2598:                 == NULL)
 2599:         {
 2600:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 2601:             return;
 2602:         }
 2603: 
 2604:         f77atan_((struct_complexe16 *) (*s_objet_argument).objet,
 2605:                 (struct_complexe16 *) (*s_objet_resultat).objet, &erreur);
 2606: 
 2607:         if (erreur != 0)
 2608:         {
 2609:             liberation(s_etat_processus, s_objet_argument);
 2610:             liberation(s_etat_processus, s_objet_resultat);
 2611: 
 2612:             free(s_objet_resultat);
 2613: 
 2614:             (*s_etat_processus).exception = d_ep_division_par_zero;
 2615:             return;
 2616:         }
 2617:     }
 2618: 
 2619: /*
 2620: --------------------------------------------------------------------------------
 2621:   Arctangente d'un nom
 2622: --------------------------------------------------------------------------------
 2623: */
 2624: 
 2625:     else if ((*s_objet_argument).type == NOM)
 2626:     {
 2627:         if ((s_objet_resultat = allocation(s_etat_processus, ALG))
 2628:                 == NULL)
 2629:         {
 2630:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 2631:             return;
 2632:         }
 2633: 
 2634:         if (((*s_objet_resultat).objet =
 2635:                 allocation_maillon(s_etat_processus)) == NULL)
 2636:         {
 2637:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 2638:             return;
 2639:         }
 2640: 
 2641:         l_element_courant = (*s_objet_resultat).objet;
 2642: 
 2643:         if (((*l_element_courant).donnee =
 2644:                 allocation(s_etat_processus, FCT)) == NULL)
 2645:         {
 2646:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 2647:             return;
 2648:         }
 2649: 
 2650:         (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 2651:                 .nombre_arguments = 0;
 2652:         (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 2653:                 .fonction = instruction_vers_niveau_superieur;
 2654: 
 2655:         if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 2656:                 .nom_fonction = malloc(3 * sizeof(unsigned char))) == NULL)
 2657:         {
 2658:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 2659:             return;
 2660:         }
 2661: 
 2662:         strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 2663:                 .nom_fonction, "<<");
 2664: 
 2665:         if (((*l_element_courant).suivant =
 2666:                 allocation_maillon(s_etat_processus)) == NULL)
 2667:         {
 2668:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 2669:             return;
 2670:         }
 2671: 
 2672:         l_element_courant = (*l_element_courant).suivant;
 2673:         (*l_element_courant).donnee = s_objet_argument;
 2674: 
 2675:         if (((*l_element_courant).suivant =
 2676:                 allocation_maillon(s_etat_processus)) == NULL)
 2677:         {
 2678:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 2679:             return;
 2680:         }
 2681: 
 2682:         l_element_courant = (*l_element_courant).suivant;
 2683: 
 2684:         if (((*l_element_courant).donnee =
 2685:                 allocation(s_etat_processus, FCT)) == NULL)
 2686:         {
 2687:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 2688:             return;
 2689:         }
 2690: 
 2691:         (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 2692:                 .nombre_arguments = 1;
 2693:         (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 2694:                 .fonction = instruction_atan;
 2695: 
 2696:         if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 2697:                 .nom_fonction = malloc(5 * sizeof(unsigned char))) == NULL)
 2698:         {
 2699:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 2700:             return;
 2701:         }
 2702: 
 2703:         strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 2704:                 .nom_fonction, "ATAN");
 2705: 
 2706:         if (((*l_element_courant).suivant =
 2707:                 allocation_maillon(s_etat_processus)) == NULL)
 2708:         {
 2709:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 2710:             return;
 2711:         }
 2712: 
 2713:         l_element_courant = (*l_element_courant).suivant;
 2714: 
 2715:         if (((*l_element_courant).donnee =
 2716:                 allocation(s_etat_processus, FCT)) == NULL)
 2717:         {
 2718:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 2719:             return;
 2720:         }
 2721: 
 2722:         (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 2723:                 .nombre_arguments = 0;
 2724:         (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 2725:                 .fonction = instruction_vers_niveau_inferieur;
 2726: 
 2727:         if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 2728:                 .nom_fonction = malloc(3 * sizeof(unsigned char))) == NULL)
 2729:         {
 2730:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 2731:             return;
 2732:         }
 2733: 
 2734:         strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 2735:                 .nom_fonction, ">>");
 2736: 
 2737:         (*l_element_courant).suivant = NULL;
 2738:         s_objet_argument = NULL;
 2739:     }
 2740: 
 2741: /*
 2742: --------------------------------------------------------------------------------
 2743:   Arctangente d'une expression
 2744: --------------------------------------------------------------------------------
 2745: */
 2746: 
 2747:     else if (((*s_objet_argument).type == ALG) ||
 2748:             ((*s_objet_argument).type == RPN))
 2749:     {
 2750:         if ((s_copie_argument = copie_objet(s_etat_processus,
 2751:                 s_objet_argument, 'N')) == NULL)
 2752:         {
 2753:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 2754:             return;
 2755:         }
 2756: 
 2757:         l_element_courant = (struct_liste_chainee *)
 2758:                 (*s_copie_argument).objet;
 2759:         l_element_precedent = l_element_courant;
 2760: 
 2761:         while((*l_element_courant).suivant != NULL)
 2762:         {
 2763:             l_element_precedent = l_element_courant;
 2764:             l_element_courant = (*l_element_courant).suivant;
 2765:         }
 2766: 
 2767:         if (((*l_element_precedent).suivant =
 2768:                 allocation_maillon(s_etat_processus)) == NULL)
 2769:         {
 2770:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 2771:             return;
 2772:         }
 2773: 
 2774:         if (((*(*l_element_precedent).suivant).donnee =
 2775:                 allocation(s_etat_processus, FCT)) == NULL)
 2776:         {
 2777:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 2778:             return;
 2779:         }
 2780: 
 2781:         (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
 2782:                 .donnee).objet)).nombre_arguments = 1;
 2783:         (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
 2784:                 .donnee).objet)).fonction = instruction_atan;
 2785: 
 2786:         if (((*((struct_fonction *) (*(*(*l_element_precedent)
 2787:                 .suivant).donnee).objet)).nom_fonction =
 2788:                 malloc(5 * sizeof(unsigned char))) == NULL)
 2789:         {
 2790:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 2791:             return;
 2792:         }
 2793: 
 2794:         strcpy((*((struct_fonction *) (*(*(*l_element_precedent)
 2795:                 .suivant).donnee).objet)).nom_fonction, "ATAN");
 2796: 
 2797:         (*(*l_element_precedent).suivant).suivant = l_element_courant;
 2798: 
 2799:         s_objet_resultat = s_copie_argument;
 2800:     }
 2801: 
 2802: /*
 2803: --------------------------------------------------------------------------------
 2804:   Réalisation impossible de la fonction arctangente
 2805: --------------------------------------------------------------------------------
 2806: */
 2807: 
 2808:     else
 2809:     {
 2810:         liberation(s_etat_processus, s_objet_argument);
 2811: 
 2812:         (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
 2813:         return;
 2814:     }
 2815: 
 2816:     liberation(s_etat_processus, s_objet_argument);
 2817: 
 2818:     if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
 2819:             s_objet_resultat) == d_erreur)
 2820:     {
 2821:         return;
 2822:     }
 2823: 
 2824:     return;
 2825: }
 2826: 
 2827: // vim: ts=4

CVSweb interface <joel.bertrand@systella.fr>