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

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

CVSweb interface <joel.bertrand@systella.fr>