File:  [local] / rpl / src / instructions_b1.c
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue Jan 26 15:22:45 2010 UTC (14 years, 3 months ago) by bertrand
Branches: JKB
CVS tags: start


Commit initial.

    1: /*
    2: ================================================================================
    3:   RPL/2 (R) version 4.0.9
    4:   Copyright (C) 1989-2010 Dr. BERTRAND Joël
    5: 
    6:   This file is part of RPL/2.
    7: 
    8:   RPL/2 is free software; you can redistribute it and/or modify it
    9:   under the terms of the CeCILL V2 License as published by the french
   10:   CEA, CNRS and INRIA.
   11:  
   12:   RPL/2 is distributed in the hope that it will be useful, but WITHOUT
   13:   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
   14:   FITNESS FOR A PARTICULAR PURPOSE.  See the CeCILL V2 License
   15:   for more details.
   16:  
   17:   You should have received a copy of the CeCILL License
   18:   along with RPL/2. If not, write to info@cecill.info.
   19: ================================================================================
   20: */
   21: 
   22: 
   23: #include "rpl.conv.h"
   24: 
   25: 
   26: /*
   27: ================================================================================
   28:   Fonction 'bin'
   29: ================================================================================
   30:   Entrées :
   31: --------------------------------------------------------------------------------
   32:   Sorties :
   33: --------------------------------------------------------------------------------
   34:   Effets de bord : néant
   35: ================================================================================
   36: */
   37: 
   38: void
   39: instruction_bin(struct_processus *s_etat_processus)
   40: {
   41:     (*s_etat_processus).erreur_execution = d_ex;
   42: 
   43:     if ((*s_etat_processus).affichage_arguments == 'Y')
   44:     {
   45:         printf("\n  BIN ");
   46: 
   47:         if ((*s_etat_processus).langue == 'F')
   48:         {
   49:             printf("(base binaire)\n\n");
   50:             printf("  Aucun argument\n");
   51:         }
   52:         else
   53:         {
   54:             printf("(binary base)\n\n");
   55:             printf("  No argument\n");
   56:         }
   57: 
   58:         return;
   59:     }
   60:     else if ((*s_etat_processus).test_instruction == 'Y')
   61:     {
   62:         (*s_etat_processus).nombre_arguments = -1;
   63:         return;
   64:     }
   65: 
   66:     if (test_cfsf(s_etat_processus, 31) == d_vrai)
   67:     {
   68:         if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
   69:         {
   70:             return;
   71:         }
   72:     }
   73: 
   74:     cf(s_etat_processus, 43);
   75:     sf(s_etat_processus, 44);
   76: 
   77:     return;
   78: }
   79: 
   80: 
   81: /*
   82: ================================================================================
   83:   Fonction 'beep'
   84: ================================================================================
   85:   Entrées :
   86: --------------------------------------------------------------------------------
   87:   Sorties :
   88: --------------------------------------------------------------------------------
   89:   Effets de bord : néant
   90: ================================================================================
   91: */
   92: 
   93: void
   94: instruction_beep(struct_processus *s_etat_processus)
   95: {
   96:     (*s_etat_processus).erreur_execution = d_ex;
   97: 
   98:     if ((*s_etat_processus).affichage_arguments == 'Y')
   99:     {
  100:         printf("\n  BEEP ");
  101: 
  102:         if ((*s_etat_processus).langue == 'F')
  103:         {
  104:             printf("(son d'avertissement)\n\n");
  105:             printf("  Aucun argument\n");
  106:         }
  107:         else
  108:         {
  109:             printf("(warning bell)\n\n");
  110:             printf("  No argument\n");
  111:         }
  112: 
  113:         return;
  114:     }
  115:     else if ((*s_etat_processus).test_instruction == 'Y')
  116:     {
  117:         (*s_etat_processus).nombre_arguments = -1;
  118:         return;
  119:     }
  120: 
  121:     if (test_cfsf(s_etat_processus, 31) == d_vrai)
  122:     {
  123:         if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
  124:         {
  125:             return;
  126:         }
  127:     }
  128: 
  129:     if (test_cfsf(s_etat_processus, 51) == d_faux)
  130:     {
  131:         printf("%s", ds_beep);
  132:     }
  133: 
  134:     return;
  135: }
  136: 
  137: 
  138: /*
  139: ================================================================================
  140:   Fonction 'b->r'
  141: ================================================================================
  142:   Entrées : pointeur sur une structure struct_processus
  143: --------------------------------------------------------------------------------
  144:   Sorties :
  145: --------------------------------------------------------------------------------
  146:   Effets de bord : néant
  147: ================================================================================
  148: */
  149: 
  150: void
  151: instruction_b_vers_r(struct_processus *s_etat_processus)
  152: {
  153:     struct_objet                *s_objet_argument;
  154:     struct_objet                *s_objet_resultat;
  155: 
  156:     (*s_etat_processus).erreur_execution = d_ex;
  157: 
  158:     if ((*s_etat_processus).affichage_arguments == 'Y')
  159:     {
  160:         printf("\n  B->R ");
  161: 
  162:         if ((*s_etat_processus).langue == 'F')
  163:         {
  164:             printf("(binaire vers réel)\n\n");
  165:         }
  166:         else
  167:         {
  168:             printf("(binary to real)\n\n");
  169:         }
  170: 
  171:         printf("    1: %s\n", d_BIN);
  172:         printf("->  1: %s\n", d_INT);
  173: 
  174:         return;
  175:     }
  176:     else if ((*s_etat_processus).test_instruction == 'Y')
  177:     {
  178:         (*s_etat_processus).nombre_arguments = -1;
  179:         return;
  180:     }
  181: 
  182:     if (test_cfsf(s_etat_processus, 31) == d_vrai)
  183:     {
  184:         if (empilement_pile_last(s_etat_processus, 1) == d_erreur)
  185:         {
  186:             return;
  187:         }
  188:     }
  189: 
  190:     if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
  191:             &s_objet_argument) == d_erreur)
  192:     {
  193:         (*s_etat_processus).erreur_execution = d_ex_manque_argument;
  194:         return;
  195:     }
  196: 
  197:     if ((*s_objet_argument).type == BIN)
  198:     {
  199:         if ((s_objet_resultat = allocation(s_etat_processus, INT))
  200:                 == NULL)
  201:         {
  202:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  203:             return;
  204:         }
  205: 
  206:         (*((integer8 *) (*s_objet_resultat).objet)) = (*((logical8 *)
  207:                 (*s_objet_argument).objet));
  208:     }
  209:     else
  210:     {
  211:         liberation(s_etat_processus, s_objet_argument);
  212: 
  213:         (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
  214:         return;
  215:     }
  216: 
  217:     if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
  218:             s_objet_resultat) == d_erreur)
  219:     {
  220:         return;
  221:     }
  222: 
  223:     liberation(s_etat_processus, s_objet_argument);
  224: 
  225:     return;
  226: }
  227: 
  228: 
  229: /*
  230: ================================================================================
  231:   Fonction 'backspace'
  232: ================================================================================
  233:   Entrées :
  234: --------------------------------------------------------------------------------
  235:   Sorties :
  236: --------------------------------------------------------------------------------
  237:   Effets de bord : néant
  238: ================================================================================
  239: */
  240: 
  241: void
  242: instruction_backspace(struct_processus *s_etat_processus)
  243: {
  244:     file                        *descripteur;
  245: 
  246:     integer8                    position_finale;
  247:     integer8                    position_initiale;
  248: 
  249:     logical1                    presence_chaine;
  250:     logical1                    presence_indicateur;
  251: 
  252:     long                        pointeur;
  253:     long                        niveau;
  254: 
  255:     size_t                      longueur_effective;
  256:     size_t                      longueur_questure;
  257: 
  258:     struct flock                lock;
  259: 
  260:     struct_objet                *s_objet_argument;
  261: 
  262:     unsigned char               *tampon_lecture;
  263: 
  264:     (*s_etat_processus).erreur_execution = d_ex;
  265: 
  266:     if ((*s_etat_processus).affichage_arguments == 'Y')
  267:     {
  268:         printf("\n  BACKSPACE ");
  269: 
  270:         if ((*s_etat_processus).langue == 'F')
  271:         {
  272:             printf("(retour à l'enregistrement précédent)\n\n");
  273:         }
  274:         else
  275:         {
  276:             printf("(return to the previous record)\n\n");
  277:         }
  278: 
  279:         printf("    1: %s\n", d_FCH);
  280: 
  281:         return;
  282:     }
  283:     else if ((*s_etat_processus).test_instruction == 'Y')
  284:     {
  285:         (*s_etat_processus).nombre_arguments = -1;
  286:         return;
  287:     }
  288: 
  289:     if (test_cfsf(s_etat_processus, 31) == d_vrai)
  290:     {
  291:         if (empilement_pile_last(s_etat_processus, 1) == d_erreur)
  292:         {
  293:             return;
  294:         }
  295:     }
  296: 
  297:     if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
  298:             &s_objet_argument) == d_erreur)
  299:     {
  300:         (*s_etat_processus).erreur_execution = d_ex_manque_argument;
  301:         return;
  302:     }
  303: 
  304:     if ((*s_objet_argument).type == FCH)
  305:     {
  306:         /*
  307:          * Vérification des verrous
  308:          */
  309: 
  310:         lock.l_type = F_RDLCK;
  311:         lock.l_whence = SEEK_SET;
  312:         lock.l_start = 0;
  313:         lock.l_len = 0;
  314:         lock.l_pid = getpid();
  315: 
  316:         if ((descripteur = descripteur_fichier(s_etat_processus,
  317:                 (struct_fichier *) (*s_objet_argument).objet)) == NULL)
  318:         {
  319:             liberation(s_etat_processus, s_objet_argument);
  320:             return;
  321:         }
  322: 
  323:         if (fcntl(fileno(descripteur), F_GETLK, &lock) == -1)
  324:         {
  325:             liberation(s_etat_processus, s_objet_argument);
  326: 
  327:             (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
  328:             return;
  329:         }
  330: 
  331:         if (lock.l_type != F_UNLCK)
  332:         {
  333:             liberation(s_etat_processus, s_objet_argument);
  334: 
  335:             (*s_etat_processus).erreur_execution =
  336:                     d_ex_fichier_verrouille;
  337:             return;
  338:         }
  339: 
  340:         if ((*((struct_fichier *) (*s_objet_argument).objet)).acces == 'S')
  341:         {
  342:             /*
  343:              * Fichiers à accès séquentiel
  344:              */
  345: 
  346:             if ((*((struct_fichier *) (*s_objet_argument).objet)).binaire
  347:                     == 'N')
  348:             {
  349:                 /*
  350:                  * Fichiers formatés
  351:                  */
  352: 
  353:                 if ((position_finale = ftell(descripteur)) == -1)
  354:                 {
  355:                     liberation(s_etat_processus, s_objet_argument);
  356: 
  357:                     (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
  358:                     return;
  359:                 }
  360: 
  361:                 longueur_questure = 256;
  362: 
  363:                 if ((tampon_lecture = malloc(longueur_questure *
  364:                         sizeof(unsigned char))) == NULL)
  365:                 {
  366:                     (*s_etat_processus).erreur_systeme =
  367:                             d_es_allocation_memoire;
  368:                     return;
  369:                 }
  370: 
  371:                 do
  372:                 {
  373:                     if ((position_initiale = (position_finale -
  374:                             longueur_questure)) < 0)
  375:                     {
  376:                         position_initiale = 0;
  377:                         longueur_effective = position_finale + 1;
  378:                     }
  379:                     else
  380:                     {
  381:                         longueur_effective = longueur_questure;
  382:                     }
  383: 
  384:                     if (fseek(descripteur, position_initiale, SEEK_SET) != 0)
  385:                     {
  386:                         (*s_etat_processus).erreur_systeme =
  387:                                 d_es_erreur_fichier;
  388:                         return;
  389:                     }
  390: 
  391:                     longueur_effective = fread(tampon_lecture,
  392:                             (size_t) sizeof(unsigned char), longueur_effective,
  393:                             descripteur);
  394: 
  395:                     pointeur = longueur_effective - 1;
  396:                     presence_indicateur = d_faux;
  397: 
  398:                     while((pointeur >= 0) && (presence_indicateur == d_faux))
  399:                     {
  400:                         if (tampon_lecture[pointeur] == '}')
  401:                         {
  402:                             presence_indicateur = d_vrai;
  403:                         }
  404:                         else
  405:                         {
  406:                             position_finale--;
  407:                             pointeur--;
  408:                         }
  409:                     }
  410:                 } while((longueur_effective == longueur_questure) &&
  411:                         (presence_indicateur == d_faux));
  412: 
  413:                 if (presence_indicateur == d_faux)
  414:                 {
  415:                     /*
  416:                      * Le début du fichier est atteint.
  417:                      */
  418: 
  419:                     if (fseek(descripteur, 0, SEEK_SET) != 0)
  420:                     {
  421:                         liberation(s_etat_processus, s_objet_argument);
  422:                         free(tampon_lecture);
  423: 
  424:                         (*s_etat_processus).erreur_systeme =
  425:                                 d_es_erreur_fichier;
  426:                         return;
  427:                     }
  428: 
  429:                     (*s_etat_processus).erreur_execution =
  430:                             d_ex_debut_de_fichier_atteint;
  431: 
  432:                     liberation(s_etat_processus, s_objet_argument);
  433:                     free(tampon_lecture);
  434: 
  435:                     return;
  436:                 }
  437: 
  438:                 position_finale = position_finale - 1;
  439:                 presence_chaine = d_faux;
  440:                 niveau = 1;
  441: 
  442:                 if (position_finale < 0)
  443:                 {
  444:                     liberation(s_etat_processus, s_objet_argument);
  445:                     free(tampon_lecture);
  446: 
  447:                     (*s_etat_processus).erreur_execution =
  448:                             d_ex_debut_de_fichier_atteint;
  449:                     return;
  450:                 }
  451: 
  452:                 do
  453:                 {
  454:                     if ((position_initiale = (position_finale -
  455:                             longueur_questure)) < 0)
  456:                     {
  457:                         position_initiale = 0;
  458:                         longueur_effective = position_finale + 1;
  459:                     }
  460:                     else
  461:                     {
  462:                         longueur_effective = longueur_questure;
  463:                         position_finale--;
  464:                     }
  465: 
  466:                     if (fseek(descripteur, position_initiale, SEEK_SET) != 0)
  467:                     {
  468:                         (*s_etat_processus).erreur_systeme =
  469:                                 d_es_erreur_fichier;
  470:                         return;
  471:                     }
  472: 
  473:                     longueur_effective = fread(tampon_lecture,
  474:                             (size_t) sizeof(unsigned char), longueur_effective,
  475:                             descripteur);
  476: 
  477:                     pointeur = longueur_effective - 1;
  478:                     presence_indicateur = d_faux;
  479: 
  480:                     while((pointeur >= 0) && (presence_indicateur == d_faux))
  481:                     {
  482:                         if (tampon_lecture[pointeur] == '"')
  483:                         {
  484:                             presence_chaine = (presence_chaine == d_vrai)
  485:                                     ? d_faux : d_vrai;
  486:                         }
  487:                         else
  488:                         {
  489:                             if (tampon_lecture[pointeur] == '}')
  490:                             {
  491:                                 niveau++;
  492:                             }
  493:                             else if (tampon_lecture[pointeur] == '{')
  494:                             {
  495:                                 niveau--;
  496:                             }
  497:                         }
  498: 
  499:                         if (niveau == 0)
  500:                         {
  501:                             presence_indicateur = d_vrai;
  502:                         }
  503:                         else
  504:                         {
  505:                             position_finale--;
  506:                             pointeur--;
  507:                         }
  508:                     }
  509:                 } while((longueur_effective == longueur_questure) &&
  510:                         (presence_indicateur == d_faux));
  511: 
  512:                 if (presence_indicateur == d_faux)
  513:                 {
  514:                     liberation(s_etat_processus, s_objet_argument);
  515:                     free(tampon_lecture);
  516: 
  517:                     (*s_etat_processus).erreur_execution =
  518:                             d_ex_fin_de_fichier_atteinte;
  519:                     return;
  520:                 }
  521: 
  522:                 if (fseek(descripteur, position_finale, SEEK_SET) != 0)
  523:                 {
  524:                     liberation(s_etat_processus, s_objet_argument);
  525:                     free(tampon_lecture);
  526: 
  527:                     (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
  528:                     return;
  529:                 }
  530: 
  531:                 free(tampon_lecture);
  532:             }
  533:             else
  534:             {
  535:                 /*
  536:                  * Fichiers non formatés
  537:                  */
  538:             }
  539:         }
  540:         else
  541:         {
  542:             liberation(s_etat_processus, s_objet_argument);
  543: 
  544:             (*s_etat_processus).erreur_execution = d_ex_erreur_type_fichier;
  545:             return;
  546:         }
  547:     }
  548:     else
  549:     {
  550:         liberation(s_etat_processus, s_objet_argument);
  551: 
  552:         (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
  553:         return;
  554:     }
  555: 
  556:     liberation(s_etat_processus, s_objet_argument);
  557: 
  558:     return;
  559: }
  560: 
  561: 
  562: /*
  563: ================================================================================
  564:   Fonction 'bessel'
  565: ================================================================================
  566:   Entrées :
  567: --------------------------------------------------------------------------------
  568:   Sorties :
  569: --------------------------------------------------------------------------------
  570:   Effets de bord : néant
  571: ================================================================================
  572: */
  573: 
  574: void
  575: instruction_bessel(struct_processus *s_etat_processus)
  576: {
  577:     logical1                    creation_expression;
  578: 
  579:     struct_liste_chainee        *l_element_atome;
  580:     struct_liste_chainee        *l_element_courant;
  581:     struct_liste_chainee        *l_element_precedent;
  582: 
  583:     struct_objet                *s_copie_argument_1;
  584:     struct_objet                *s_copie_argument_2;
  585:     struct_objet                *s_copie_argument_3;
  586:     struct_objet                *s_objet_argument_1;
  587:     struct_objet                *s_objet_argument_2;
  588:     struct_objet                *s_objet_argument_3;
  589:     struct_objet                *s_objet_resultat;
  590: 
  591:     unsigned long               i;
  592: 
  593:     (*s_etat_processus).erreur_execution = d_ex;
  594: 
  595:     if ((*s_etat_processus).affichage_arguments == 'Y')
  596:     {
  597:         printf("\n  BESSEL ");
  598: 
  599:         if ((*s_etat_processus).langue == 'F')
  600:         {
  601:             printf("(fonctions de Bessel)\n\n");
  602:         }
  603:         else
  604:         {
  605:             printf("(Bessel functions)\n\n");
  606:         }
  607: 
  608:         printf("    3: \"J\", \"Y\", \"I\", \"K\", \"j\", \"y\", "
  609:                 "\"i\", \"k\"\n");
  610:         printf("    2: %s, %s\n", d_INT, d_REL);
  611:         printf("    1: %s, %s\n", d_INT, d_REL);
  612:         printf("->  1: %s\n\n", d_REL);
  613: 
  614:         printf("    3: \"J\", \"Y\", \"I\", \"K\", \"j\", \"y\", "
  615:                 "\"i\", \"k\"\n");
  616:         printf("    2: %s, %s\n", d_INT, d_REL);
  617:         printf("    1: %s, %s\n", d_NOM, d_ALG);
  618:         printf("->  1: %s\n\n", d_ALG);
  619: 
  620:         printf("    3: \"J\", \"Y\", \"I\", \"K\", \"j\", \"y\", "
  621:                 "\"i\", \"k\"\n");
  622:         printf("    2: %s, %s\n", d_INT, d_REL);
  623:         printf("    1: %s\n", d_RPN);
  624:         printf("->  1: %s\n", d_RPN);
  625:         return;
  626:     }
  627:     else if ((*s_etat_processus).test_instruction == 'Y')
  628:     {
  629:         (*s_etat_processus).nombre_arguments = 3;
  630:         return;
  631:     }
  632: 
  633:     if (test_cfsf(s_etat_processus, 31) == d_vrai)
  634:     {
  635:         if (empilement_pile_last(s_etat_processus, 3) == d_erreur)
  636:         {
  637:             return;
  638:         }
  639:     }
  640: 
  641:     /*
  642:      * Jn   fonction cylindrique régulière
  643:      * Yn   fonction cylindrique irrégulière
  644:      * In   fonction cylindrique régulière modifiée
  645:      * Kn   fonction cylindrique irrégulière modifiée
  646:      * jn   fonction sphérique régulière
  647:      * yn   fonction sphérique irrégulière
  648:      * in   fonction sphérique régulière modifiée
  649:      * kn   fonction sphérique irrégulière modifiée
  650:      *
  651:      * Attention : Ordre fractionnaire uniquement pour les
  652:      * fonctions cylindriques
  653:      */
  654: 
  655:     creation_expression = d_faux;
  656: 
  657:     if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
  658:             &s_objet_argument_1) == d_erreur)
  659:     {
  660:         (*s_etat_processus).erreur_execution = d_ex_manque_argument;
  661:         return;
  662:     }
  663: 
  664:     if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
  665:             &s_objet_argument_2) == d_erreur)
  666:     {
  667:         liberation(s_etat_processus, s_objet_argument_1);
  668: 
  669:         (*s_etat_processus).erreur_execution = d_ex_manque_argument;
  670:         return;
  671:     }
  672: 
  673:     if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
  674:             &s_objet_argument_3) == d_erreur)
  675:     {
  676:         liberation(s_etat_processus, s_objet_argument_1);
  677:         liberation(s_etat_processus, s_objet_argument_2);
  678: 
  679:         (*s_etat_processus).erreur_execution = d_ex_manque_argument;
  680:         return;
  681:     }
  682: 
  683:     if ((*s_objet_argument_3).type == CHN)
  684:     {
  685:         if ((strcmp((unsigned char *) (*s_objet_argument_3).objet, "J") == 0) ||
  686:                 (strcmp((unsigned char *) (*s_objet_argument_3).objet, "Y")
  687:                 == 0) || (strcmp((unsigned char *) (*s_objet_argument_3).objet,
  688:                 "I") == 0) || (strcmp((unsigned char *) (*s_objet_argument_3)
  689:                 .objet, "K") == 0) || (strcmp((unsigned char *)
  690:                 (*s_objet_argument_3).objet, "j") == 0) || (strcmp(
  691:                 (unsigned char *) (*s_objet_argument_3).objet, "y") == 0) ||
  692:                 (strcmp((unsigned char *) (*s_objet_argument_3).objet, "i") ==
  693:                 0) || (strcmp((unsigned char *) (*s_objet_argument_3).objet,
  694:                 "k") == 0))
  695:         {
  696:             if ((*s_objet_argument_2).type == INT)
  697:             {
  698:                 if ((*s_objet_argument_1).type == INT)
  699:                 {
  700:                     if ((s_objet_resultat = allocation(s_etat_processus, REL))
  701:                             == NULL)
  702:                     {
  703:                         (*s_etat_processus).erreur_systeme =
  704:                                 d_es_allocation_memoire;
  705:                         return;
  706:                     }
  707: 
  708:                     switch((*((unsigned char *) (*s_objet_argument_3).objet)))
  709:                     {
  710:                         case 'J' :
  711:                         {
  712:                             (*((real8 *) (*s_objet_resultat).objet)) =
  713:                                     gsl_sf_bessel_Jn((int) ((*((integer8 *)
  714:                                     (*s_objet_argument_2).objet))),
  715:                                     (double) ((*((integer8 *)
  716:                                     (*s_objet_argument_1).objet))));
  717:                             break;
  718:                         }
  719: 
  720:                         case 'Y' :
  721:                         {
  722:                             if ((*((integer8 *) (*s_objet_argument_1).objet))
  723:                                     <= 0)
  724:                             {
  725:                                 (*s_etat_processus).exception =
  726:                                         d_ep_resultat_indefini;
  727: 
  728:                                 liberation(s_etat_processus,
  729:                                         s_objet_argument_1);
  730:                                 liberation(s_etat_processus,
  731:                                         s_objet_argument_2);
  732:                                 liberation(s_etat_processus,
  733:                                         s_objet_argument_3);
  734:                                 liberation(s_etat_processus,
  735:                                         s_objet_resultat);
  736: 
  737:                                 return;
  738:                             }
  739: 
  740:                             (*((real8 *) (*s_objet_resultat).objet)) =
  741:                                     gsl_sf_bessel_Yn((int) ((*((integer8 *)
  742:                                     (*s_objet_argument_2).objet))),
  743:                                     (double) ((*((integer8 *)
  744:                                     (*s_objet_argument_1).objet))));
  745:                             break;
  746:                         }
  747: 
  748:                         case 'I' :
  749:                         {
  750:                             (*((real8 *) (*s_objet_resultat).objet)) =
  751:                                     gsl_sf_bessel_In((int) ((*((integer8 *)
  752:                                     (*s_objet_argument_2).objet))),
  753:                                     (double) ((*((integer8 *)
  754:                                     (*s_objet_argument_1).objet))));
  755:                             break;
  756:                         }
  757: 
  758:                         case 'K' :
  759:                         {
  760:                             if ((*((integer8 *) (*s_objet_argument_1).objet))
  761:                                     <= 0)
  762:                             {
  763:                                 (*s_etat_processus).exception =
  764:                                         d_ep_resultat_indefini;
  765: 
  766:                                 liberation(s_etat_processus,
  767:                                         s_objet_argument_1);
  768:                                 liberation(s_etat_processus,
  769:                                         s_objet_argument_2);
  770:                                 liberation(s_etat_processus,
  771:                                         s_objet_argument_3);
  772:                                 liberation(s_etat_processus,
  773:                                         s_objet_resultat);
  774: 
  775:                                 return;
  776:                             }
  777: 
  778:                             (*((real8 *) (*s_objet_resultat).objet)) =
  779:                                     gsl_sf_bessel_Kn((int) ((*((integer8 *)
  780:                                     (*s_objet_argument_2).objet))),
  781:                                     (double) ((*((integer8 *)
  782:                                     (*s_objet_argument_1).objet))));
  783:                             break;
  784:                         }
  785: 
  786:                         case 'j' :
  787:                         {
  788:                             if (((*((integer8 *) (*s_objet_argument_1).objet))
  789:                                     < 0) || ((*((integer8 *)
  790:                                     (*s_objet_argument_2).objet)) < 0))
  791:                             {
  792:                                 (*s_etat_processus).exception =
  793:                                         d_ep_resultat_indefini;
  794: 
  795:                                 liberation(s_etat_processus,
  796:                                         s_objet_argument_1);
  797:                                 liberation(s_etat_processus,
  798:                                         s_objet_argument_2);
  799:                                 liberation(s_etat_processus,
  800:                                         s_objet_argument_3);
  801:                                 liberation(s_etat_processus,
  802:                                         s_objet_resultat);
  803: 
  804:                                 return;
  805:                             }
  806: 
  807:                             (*((real8 *) (*s_objet_resultat).objet)) =
  808:                                     gsl_sf_bessel_jl((int) ((*((integer8 *)
  809:                                     (*s_objet_argument_2).objet))),
  810:                                     (double) ((*((integer8 *)
  811:                                     (*s_objet_argument_1).objet))));
  812:                             break;
  813:                         }
  814: 
  815:                         case 'y' :
  816:                         {
  817:                             if (((*((integer8 *) (*s_objet_argument_1).objet))
  818:                                     <= 0) || ((*((integer8 *)
  819:                                     (*s_objet_argument_2).objet)) < 0))
  820:                             {
  821:                                 (*s_etat_processus).exception =
  822:                                         d_ep_resultat_indefini;
  823: 
  824:                                 liberation(s_etat_processus,
  825:                                         s_objet_argument_1);
  826:                                 liberation(s_etat_processus,
  827:                                         s_objet_argument_2);
  828:                                 liberation(s_etat_processus,
  829:                                         s_objet_argument_3);
  830:                                 liberation(s_etat_processus,
  831:                                         s_objet_resultat);
  832: 
  833:                                 return;
  834:                             }
  835: 
  836:                             (*((real8 *) (*s_objet_resultat).objet)) =
  837:                                     gsl_sf_bessel_yl((int) ((*((integer8 *)
  838:                                     (*s_objet_argument_2).objet))),
  839:                                     (double) ((*((integer8 *)
  840:                                     (*s_objet_argument_1).objet))));
  841:                             break;
  842:                         }
  843: 
  844:                         case 'i' :
  845:                         {
  846:                             if ((*((integer8 *) (*s_objet_argument_2).objet))
  847:                                     < 0)
  848:                             {
  849:                                 (*s_etat_processus).exception =
  850:                                         d_ep_resultat_indefini;
  851: 
  852:                                 liberation(s_etat_processus,
  853:                                         s_objet_argument_1);
  854:                                 liberation(s_etat_processus,
  855:                                         s_objet_argument_2);
  856:                                 liberation(s_etat_processus,
  857:                                         s_objet_argument_3);
  858:                                 liberation(s_etat_processus,
  859:                                         s_objet_resultat);
  860: 
  861:                                 return;
  862:                             }
  863: 
  864:                             (*((real8 *) (*s_objet_resultat).objet)) =
  865:                                     exp(fabs((double) (*((integer8 *)
  866:                                     (*s_objet_argument_1).objet)))) *
  867:                                     gsl_sf_bessel_il_scaled(
  868:                                     (int) ((*((integer8 *)
  869:                                     (*s_objet_argument_2).objet))),
  870:                                     (double) ((*((integer8 *)
  871:                                     (*s_objet_argument_1).objet))));
  872:                             break;
  873:                         }
  874: 
  875:                         case 'k' :
  876:                         {
  877:                             if (((*((integer8 *) (*s_objet_argument_1).objet))
  878:                                     <= 0) || ((*((integer8 *)
  879:                                     (*s_objet_argument_2).objet)) < 0))
  880:                             {
  881:                                 (*s_etat_processus).exception =
  882:                                         d_ep_resultat_indefini;
  883: 
  884:                                 liberation(s_etat_processus,
  885:                                         s_objet_argument_1);
  886:                                 liberation(s_etat_processus,
  887:                                         s_objet_argument_2);
  888:                                 liberation(s_etat_processus,
  889:                                         s_objet_argument_3);
  890:                                 liberation(s_etat_processus,
  891:                                         s_objet_resultat);
  892: 
  893:                                 return;
  894:                             }
  895: 
  896:                             (*((real8 *) (*s_objet_resultat).objet)) =
  897:                                     exp(fabs((double) (*((integer8 *)
  898:                                     (*s_objet_argument_1).objet)))) *
  899:                                     gsl_sf_bessel_kl_scaled(
  900:                                     (int) ((*((integer8 *)
  901:                                     (*s_objet_argument_2).objet))),
  902:                                     (double) ((*((integer8 *)
  903:                                     (*s_objet_argument_1).objet))));
  904:                             break;
  905:                         }
  906:                     }
  907:                 }
  908:                 else if ((*s_objet_argument_1).type == REL)
  909:                 {
  910:                     if ((s_objet_resultat = allocation(s_etat_processus, REL))
  911:                             == NULL)
  912:                     {
  913:                         (*s_etat_processus).erreur_systeme =
  914:                                 d_es_allocation_memoire;
  915:                         return;
  916:                     }
  917: 
  918:                     switch((*((unsigned char *) (*s_objet_argument_3).objet)))
  919:                     {
  920:                         case 'J' :
  921:                         {
  922:                             (*((real8 *) (*s_objet_resultat).objet)) =
  923:                                     gsl_sf_bessel_Jn((int) ((*((integer8 *)
  924:                                     (*s_objet_argument_2).objet))),
  925:                                     (double) ((*((real8 *)
  926:                                     (*s_objet_argument_1).objet))));
  927:                             break;
  928:                         }
  929: 
  930:                         case 'Y' :
  931:                         {
  932:                             if ((*((real8 *) (*s_objet_argument_1).objet))
  933:                                     <= 0)
  934:                             {
  935:                                 (*s_etat_processus).exception =
  936:                                         d_ep_resultat_indefini;
  937: 
  938:                                 liberation(s_etat_processus,
  939:                                         s_objet_argument_1);
  940:                                 liberation(s_etat_processus,
  941:                                         s_objet_argument_2);
  942:                                 liberation(s_etat_processus,
  943:                                         s_objet_argument_3);
  944:                                 liberation(s_etat_processus,
  945:                                         s_objet_resultat);
  946: 
  947:                                 return;
  948:                             }
  949: 
  950:                             (*((real8 *) (*s_objet_resultat).objet)) =
  951:                                     gsl_sf_bessel_Yn((int) ((*((integer8 *)
  952:                                     (*s_objet_argument_2).objet))),
  953:                                     (double) ((*((real8 *)
  954:                                     (*s_objet_argument_1).objet))));
  955:                             break;
  956:                         }
  957: 
  958:                         case 'I' :
  959:                         {
  960:                             (*((real8 *) (*s_objet_resultat).objet)) =
  961:                                     gsl_sf_bessel_In((int) ((*((integer8 *)
  962:                                     (*s_objet_argument_2).objet))),
  963:                                     (double) ((*((real8 *)
  964:                                     (*s_objet_argument_1).objet))));
  965:                             break;
  966:                         }
  967: 
  968:                         case 'K' :
  969:                         {
  970:                             if ((*((real8 *) (*s_objet_argument_1).objet))
  971:                                     <= 0)
  972:                             {
  973:                                 (*s_etat_processus).exception =
  974:                                         d_ep_resultat_indefini;
  975: 
  976:                                 liberation(s_etat_processus,
  977:                                         s_objet_argument_1);
  978:                                 liberation(s_etat_processus,
  979:                                         s_objet_argument_2);
  980:                                 liberation(s_etat_processus,
  981:                                         s_objet_argument_3);
  982:                                 liberation(s_etat_processus,
  983:                                         s_objet_resultat);
  984: 
  985:                                 return;
  986:                             }
  987: 
  988:                             (*((real8 *) (*s_objet_resultat).objet)) =
  989:                                     gsl_sf_bessel_Kn((int) ((*((integer8 *)
  990:                                     (*s_objet_argument_2).objet))),
  991:                                     (double) ((*((real8 *)
  992:                                     (*s_objet_argument_1).objet))));
  993:                             break;
  994:                         }
  995: 
  996:                         case 'j' :
  997:                         {
  998:                             if (((*((integer8 *) (*s_objet_argument_1).objet))
  999:                                     < 0) || ((*((integer8 *)
 1000:                                     (*s_objet_argument_2).objet)) < 0))
 1001:                             {
 1002:                                 (*s_etat_processus).exception =
 1003:                                         d_ep_resultat_indefini;
 1004: 
 1005:                                 liberation(s_etat_processus,
 1006:                                         s_objet_argument_1);
 1007:                                 liberation(s_etat_processus,
 1008:                                         s_objet_argument_2);
 1009:                                 liberation(s_etat_processus,
 1010:                                         s_objet_argument_3);
 1011:                                 liberation(s_etat_processus,
 1012:                                         s_objet_resultat);
 1013: 
 1014:                                 return;
 1015:                             }
 1016: 
 1017:                             (*((real8 *) (*s_objet_resultat).objet)) =
 1018:                                     gsl_sf_bessel_jl((int) ((*((integer8 *)
 1019:                                     (*s_objet_argument_2).objet))),
 1020:                                     (double) ((*((real8 *)
 1021:                                     (*s_objet_argument_1).objet))));
 1022:                             break;
 1023:                         }
 1024: 
 1025:                         case 'y' :
 1026:                         {
 1027:                             if (((*((integer8 *) (*s_objet_argument_1).objet))
 1028:                                     <= 0) || ((*((integer8 *)
 1029:                                     (*s_objet_argument_2).objet)) < 0))
 1030:                             {
 1031:                                 (*s_etat_processus).exception =
 1032:                                         d_ep_resultat_indefini;
 1033: 
 1034:                                 liberation(s_etat_processus,
 1035:                                         s_objet_argument_1);
 1036:                                 liberation(s_etat_processus,
 1037:                                         s_objet_argument_2);
 1038:                                 liberation(s_etat_processus,
 1039:                                         s_objet_argument_3);
 1040:                                 liberation(s_etat_processus,
 1041:                                         s_objet_resultat);
 1042: 
 1043:                                 return;
 1044:                             }
 1045: 
 1046:                             (*((real8 *) (*s_objet_resultat).objet)) =
 1047:                                     gsl_sf_bessel_yl((int) ((*((integer8 *)
 1048:                                     (*s_objet_argument_2).objet))),
 1049:                                     (double) ((*((real8 *)
 1050:                                     (*s_objet_argument_1).objet))));
 1051:                             break;
 1052:                         }
 1053: 
 1054:                         case 'i' :
 1055:                         {
 1056:                             if ((*((integer8 *) (*s_objet_argument_2).objet))
 1057:                                     < 0)
 1058:                             {
 1059:                                 (*s_etat_processus).exception =
 1060:                                         d_ep_resultat_indefini;
 1061: 
 1062:                                 liberation(s_etat_processus,
 1063:                                         s_objet_argument_1);
 1064:                                 liberation(s_etat_processus,
 1065:                                         s_objet_argument_2);
 1066:                                 liberation(s_etat_processus,
 1067:                                         s_objet_argument_3);
 1068:                                 liberation(s_etat_processus,
 1069:                                         s_objet_resultat);
 1070: 
 1071:                                 return;
 1072:                             }
 1073: 
 1074:                             (*((real8 *) (*s_objet_resultat).objet)) =
 1075:                                     exp(fabs((double) (*((real8 *)
 1076:                                     (*s_objet_argument_1).objet)))) *
 1077:                                     gsl_sf_bessel_il_scaled(
 1078:                                     (int) ((*((integer8 *)
 1079:                                     (*s_objet_argument_2).objet))),
 1080:                                     (double) ((*((real8 *)
 1081:                                     (*s_objet_argument_1).objet))));
 1082:                             break;
 1083:                         }
 1084: 
 1085:                         case 'k' :
 1086:                         {
 1087:                             if (((*((integer8 *) (*s_objet_argument_1).objet))
 1088:                                     <= 0) || ((*((integer8 *)
 1089:                                     (*s_objet_argument_2).objet)) < 0))
 1090:                             {
 1091:                                 (*s_etat_processus).exception =
 1092:                                         d_ep_resultat_indefini;
 1093: 
 1094:                                 liberation(s_etat_processus,
 1095:                                         s_objet_argument_1);
 1096:                                 liberation(s_etat_processus,
 1097:                                         s_objet_argument_2);
 1098:                                 liberation(s_etat_processus,
 1099:                                         s_objet_argument_3);
 1100:                                 liberation(s_etat_processus,
 1101:                                         s_objet_resultat);
 1102: 
 1103:                                 return;
 1104:                             }
 1105: 
 1106:                             (*((real8 *) (*s_objet_resultat).objet)) =
 1107:                                     exp(fabs((double) (*((real8 *)
 1108:                                     (*s_objet_argument_1).objet)))) *
 1109:                                     gsl_sf_bessel_kl_scaled(
 1110:                                     (int) ((*((integer8 *)
 1111:                                     (*s_objet_argument_2).objet))),
 1112:                                     (double) ((*((real8 *)
 1113:                                     (*s_objet_argument_1).objet))));
 1114:                             break;
 1115:                         }
 1116:                     }
 1117:                 }
 1118:                 else if (((*s_objet_argument_1).type == NOM) ||
 1119:                         ((*s_objet_argument_1).type == RPN) ||
 1120:                         ((*s_objet_argument_1).type == ALG))
 1121:                 {
 1122:                     creation_expression = d_vrai;
 1123:                 }
 1124:                 else
 1125:                 {
 1126:                     liberation(s_etat_processus, s_objet_argument_1);
 1127:                     liberation(s_etat_processus, s_objet_argument_2);
 1128:                     liberation(s_etat_processus, s_objet_argument_3);
 1129: 
 1130:                     (*s_etat_processus).erreur_execution =
 1131:                             d_ex_erreur_type_argument;
 1132:                     return;
 1133:                 }
 1134:             }
 1135:             else if ((*s_objet_argument_2).type == REL)
 1136:             {
 1137:                 if ((*s_objet_argument_1).type == INT)
 1138:                 {
 1139:                     if ((s_objet_resultat = allocation(s_etat_processus, REL))
 1140:                             == NULL)
 1141:                     {
 1142:                         (*s_etat_processus).erreur_systeme =
 1143:                                 d_es_allocation_memoire;
 1144:                         return;
 1145:                     }
 1146: 
 1147:                     switch((*((unsigned char *) (*s_objet_argument_3).objet)))
 1148:                     {
 1149:                         case 'J' :
 1150:                         {
 1151:                             if (((*((integer8 *) (*s_objet_argument_1).objet))
 1152:                                     < 0) || ((*((real8 *)
 1153:                                     (*s_objet_argument_2).objet)) < 0))
 1154:                             {
 1155:                                 (*s_etat_processus).exception =
 1156:                                         d_ep_resultat_indefini;
 1157: 
 1158:                                 liberation(s_etat_processus,
 1159:                                         s_objet_argument_1);
 1160:                                 liberation(s_etat_processus,
 1161:                                         s_objet_argument_2);
 1162:                                 liberation(s_etat_processus,
 1163:                                         s_objet_argument_3);
 1164:                                 liberation(s_etat_processus,
 1165:                                         s_objet_resultat);
 1166: 
 1167:                                 return;
 1168:                             }
 1169: 
 1170:                             (*((real8 *) (*s_objet_resultat).objet)) =
 1171:                                     gsl_sf_bessel_Jnu((double) ((*((real8 *)
 1172:                                     (*s_objet_argument_2).objet))),
 1173:                                     (double) ((*((integer8 *)
 1174:                                     (*s_objet_argument_1).objet))));
 1175: 
 1176:                             break;
 1177:                         }
 1178: 
 1179:                         case 'Y' :
 1180:                         {
 1181:                             if (((*((integer8 *) (*s_objet_argument_1).objet))
 1182:                                     <= 0) || ((*((real8 *)
 1183:                                     (*s_objet_argument_2).objet)) < 0))
 1184:                             {
 1185:                                 (*s_etat_processus).exception =
 1186:                                         d_ep_resultat_indefini;
 1187: 
 1188:                                 liberation(s_etat_processus,
 1189:                                         s_objet_argument_1);
 1190:                                 liberation(s_etat_processus,
 1191:                                         s_objet_argument_2);
 1192:                                 liberation(s_etat_processus,
 1193:                                         s_objet_argument_3);
 1194:                                 liberation(s_etat_processus,
 1195:                                         s_objet_resultat);
 1196: 
 1197:                                 return;
 1198:                             }
 1199: 
 1200:                             (*((real8 *) (*s_objet_resultat).objet)) =
 1201:                                     gsl_sf_bessel_Ynu((double) ((*((real8 *)
 1202:                                     (*s_objet_argument_2).objet))),
 1203:                                     (double) ((*((integer8 *)
 1204:                                     (*s_objet_argument_1).objet))));
 1205:                             break;
 1206:                         }
 1207: 
 1208:                         case 'I' :
 1209:                         {
 1210:                             if (((*((integer8 *) (*s_objet_argument_1).objet))
 1211:                                     < 0) || ((*((real8 *)
 1212:                                     (*s_objet_argument_2).objet)) < 0))
 1213:                             {
 1214:                                 (*s_etat_processus).exception =
 1215:                                         d_ep_resultat_indefini;
 1216: 
 1217:                                 liberation(s_etat_processus,
 1218:                                         s_objet_argument_1);
 1219:                                 liberation(s_etat_processus,
 1220:                                         s_objet_argument_2);
 1221:                                 liberation(s_etat_processus,
 1222:                                         s_objet_argument_3);
 1223:                                 liberation(s_etat_processus,
 1224:                                         s_objet_resultat);
 1225: 
 1226:                                 return;
 1227:                             }
 1228: 
 1229:                             (*((real8 *) (*s_objet_resultat).objet)) =
 1230:                                     gsl_sf_bessel_Inu((double) ((*((real8 *)
 1231:                                     (*s_objet_argument_2).objet))),
 1232:                                     (double) ((*((integer8 *)
 1233:                                     (*s_objet_argument_1).objet))));
 1234:                             break;
 1235:                         }
 1236: 
 1237:                         case 'K' :
 1238:                         {
 1239:                             if (((*((integer8 *) (*s_objet_argument_1).objet))
 1240:                                     <= 0) || ((*((real8 *)
 1241:                                     (*s_objet_argument_2).objet)) < 0))
 1242:                             {
 1243:                                 (*s_etat_processus).exception =
 1244:                                         d_ep_resultat_indefini;
 1245: 
 1246:                                 liberation(s_etat_processus,
 1247:                                         s_objet_argument_1);
 1248:                                 liberation(s_etat_processus,
 1249:                                         s_objet_argument_2);
 1250:                                 liberation(s_etat_processus,
 1251:                                         s_objet_argument_3);
 1252:                                 liberation(s_etat_processus,
 1253:                                         s_objet_resultat);
 1254: 
 1255:                                 return;
 1256:                             }
 1257: 
 1258:                             (*((real8 *) (*s_objet_resultat).objet)) =
 1259:                                     gsl_sf_bessel_Knu((double) ((*((real8 *)
 1260:                                     (*s_objet_argument_2).objet))),
 1261:                                     (double) ((*((integer8 *)
 1262:                                     (*s_objet_argument_1).objet))));
 1263:                             break;
 1264:                         }
 1265: 
 1266:                         default :
 1267:                         {
 1268:                             (*s_etat_processus).exception =
 1269:                                     d_ep_resultat_indefini;
 1270: 
 1271:                             liberation(s_etat_processus, s_objet_argument_1);
 1272:                             liberation(s_etat_processus, s_objet_argument_2);
 1273:                             liberation(s_etat_processus, s_objet_argument_3);
 1274:                             liberation(s_etat_processus, s_objet_resultat);
 1275: 
 1276:                             return;
 1277:                             break;
 1278:                         }
 1279:                     }
 1280:                 }
 1281:                 else if ((*s_objet_argument_1).type == REL)
 1282:                 {
 1283:                     if ((s_objet_resultat = allocation(s_etat_processus, REL))
 1284:                             == NULL)
 1285:                     {
 1286:                         (*s_etat_processus).erreur_systeme =
 1287:                                 d_es_allocation_memoire;
 1288:                         return;
 1289:                     }
 1290: 
 1291:                     switch((*((unsigned char *) (*s_objet_argument_3).objet)))
 1292:                     {
 1293:                         case 'J' :
 1294:                         {
 1295:                             if (((*((real8 *) (*s_objet_argument_1).objet))
 1296:                                     < 0) || ((*((real8 *)
 1297:                                     (*s_objet_argument_2).objet)) < 0))
 1298:                             {
 1299:                                 (*s_etat_processus).exception =
 1300:                                         d_ep_resultat_indefini;
 1301: 
 1302:                                 liberation(s_etat_processus,
 1303:                                         s_objet_argument_1);
 1304:                                 liberation(s_etat_processus,
 1305:                                         s_objet_argument_2);
 1306:                                 liberation(s_etat_processus,
 1307:                                         s_objet_argument_3);
 1308:                                 liberation(s_etat_processus,
 1309:                                         s_objet_resultat);
 1310: 
 1311:                                 return;
 1312:                             }
 1313: 
 1314:                             (*((real8 *) (*s_objet_resultat).objet)) =
 1315:                                     gsl_sf_bessel_Jnu((double) ((*((real8 *)
 1316:                                     (*s_objet_argument_2).objet))),
 1317:                                     (double) ((*((real8 *)
 1318:                                     (*s_objet_argument_1).objet))));
 1319:                             break;
 1320:                         }
 1321: 
 1322:                         case 'Y' :
 1323:                         {
 1324:                             if (((*((real8 *) (*s_objet_argument_1).objet))
 1325:                                     <= 0) || ((*((real8 *)
 1326:                                     (*s_objet_argument_2).objet)) < 0))
 1327:                             {
 1328:                                 (*s_etat_processus).exception =
 1329:                                         d_ep_resultat_indefini;
 1330: 
 1331:                                 liberation(s_etat_processus,
 1332:                                         s_objet_argument_1);
 1333:                                 liberation(s_etat_processus,
 1334:                                         s_objet_argument_2);
 1335:                                 liberation(s_etat_processus,
 1336:                                         s_objet_argument_3);
 1337:                                 liberation(s_etat_processus,
 1338:                                         s_objet_resultat);
 1339: 
 1340:                                 return;
 1341:                             }
 1342: 
 1343:                             (*((real8 *) (*s_objet_resultat).objet)) =
 1344:                                     gsl_sf_bessel_Yn((double) ((*((real8 *)
 1345:                                     (*s_objet_argument_2).objet))),
 1346:                                     (double) ((*((real8 *)
 1347:                                     (*s_objet_argument_1).objet))));
 1348:                             break;
 1349:                         }
 1350: 
 1351:                         case 'I' :
 1352:                         {
 1353:                             if (((*((real8 *) (*s_objet_argument_1).objet))
 1354:                                     < 0) || ((*((real8 *)
 1355:                                     (*s_objet_argument_2).objet)) < 0))
 1356:                             {
 1357:                                 (*s_etat_processus).exception =
 1358:                                         d_ep_resultat_indefini;
 1359: 
 1360:                                 liberation(s_etat_processus,
 1361:                                         s_objet_argument_1);
 1362:                                 liberation(s_etat_processus,
 1363:                                         s_objet_argument_2);
 1364:                                 liberation(s_etat_processus,
 1365:                                         s_objet_argument_3);
 1366:                                 liberation(s_etat_processus,
 1367:                                         s_objet_resultat);
 1368: 
 1369:                                 return;
 1370:                             }
 1371: 
 1372:                             (*((real8 *) (*s_objet_resultat).objet)) =
 1373:                                     gsl_sf_bessel_In((double) ((*((real8 *)
 1374:                                     (*s_objet_argument_2).objet))),
 1375:                                     (double) ((*((real8 *)
 1376:                                     (*s_objet_argument_1).objet))));
 1377:                             break;
 1378:                         }
 1379: 
 1380:                         case 'K' :
 1381:                         {
 1382:                             if (((*((real8 *) (*s_objet_argument_1).objet))
 1383:                                     <= 0) || ((*((real8 *)
 1384:                                     (*s_objet_argument_2).objet)) < 0))
 1385:                             {
 1386:                                 (*s_etat_processus).exception =
 1387:                                         d_ep_resultat_indefini;
 1388: 
 1389:                                 liberation(s_etat_processus,
 1390:                                         s_objet_argument_1);
 1391:                                 liberation(s_etat_processus,
 1392:                                         s_objet_argument_2);
 1393:                                 liberation(s_etat_processus,
 1394:                                         s_objet_argument_3);
 1395:                                 liberation(s_etat_processus,
 1396:                                         s_objet_resultat);
 1397: 
 1398:                                 return;
 1399:                             }
 1400: 
 1401:                             (*((real8 *) (*s_objet_resultat).objet)) =
 1402:                                     gsl_sf_bessel_Kn((double) ((*((real8 *)
 1403:                                     (*s_objet_argument_2).objet))),
 1404:                                     (double) ((*((real8 *)
 1405:                                     (*s_objet_argument_1).objet))));
 1406:                             break;
 1407:                         }
 1408: 
 1409:                         default :
 1410:                         {
 1411:                             (*s_etat_processus).exception =
 1412:                                     d_ep_resultat_indefini;
 1413: 
 1414:                             liberation(s_etat_processus, s_objet_argument_1);
 1415:                             liberation(s_etat_processus, s_objet_argument_2);
 1416:                             liberation(s_etat_processus, s_objet_argument_3);
 1417:                             liberation(s_etat_processus, s_objet_resultat);
 1418: 
 1419:                             return;
 1420:                             break;
 1421:                         }
 1422:                     }
 1423:                 }
 1424:                 else
 1425:                 {
 1426:                     liberation(s_etat_processus, s_objet_argument_1);
 1427:                     liberation(s_etat_processus, s_objet_argument_2);
 1428:                     liberation(s_etat_processus, s_objet_argument_3);
 1429: 
 1430:                     (*s_etat_processus).erreur_execution =
 1431:                             d_ex_erreur_type_argument;
 1432:                     return;
 1433:                 }
 1434:             }
 1435:             else if (((*s_objet_argument_2).type == NOM) ||
 1436:                     ((*s_objet_argument_2).type == RPN) ||
 1437:                     ((*s_objet_argument_2).type == ALG))
 1438:             {
 1439:                 creation_expression = d_vrai;
 1440:             }
 1441:             else
 1442:             {
 1443:                 liberation(s_etat_processus, s_objet_argument_1);
 1444:                 liberation(s_etat_processus, s_objet_argument_2);
 1445:                 liberation(s_etat_processus, s_objet_argument_3);
 1446: 
 1447:                 (*s_etat_processus).erreur_execution =
 1448:                         d_ex_erreur_type_argument;
 1449:                 return;
 1450:             }
 1451:         }
 1452:         else
 1453:         {
 1454:             liberation(s_etat_processus, s_objet_argument_1);
 1455:             liberation(s_etat_processus, s_objet_argument_2);
 1456:             liberation(s_etat_processus, s_objet_argument_3);
 1457: 
 1458:             (*s_etat_processus).erreur_execution = d_ex_argument_invalide;
 1459:             return;
 1460:         }
 1461:     }
 1462:     else if (((*s_objet_argument_3).type == NOM) ||
 1463:             ((*s_objet_argument_3).type == RPN) ||
 1464:             ((*s_objet_argument_3).type == ALG))
 1465:     {
 1466:         creation_expression = d_vrai;
 1467:     }
 1468:     else
 1469:     {
 1470:         liberation(s_etat_processus, s_objet_argument_1);
 1471:         liberation(s_etat_processus, s_objet_argument_2);
 1472:         liberation(s_etat_processus, s_objet_argument_3);
 1473: 
 1474:         (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
 1475:         return;
 1476:     }
 1477: 
 1478:     if (creation_expression == d_vrai)
 1479:     {
 1480:         if ((s_copie_argument_1 = copie_objet(s_etat_processus,
 1481:                 s_objet_argument_1, 'N')) == NULL)
 1482:         {
 1483:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1484:             return;
 1485:         }
 1486: 
 1487:         if ((s_copie_argument_2 = copie_objet(s_etat_processus,
 1488:                 s_objet_argument_2, 'N')) == NULL)
 1489:         {
 1490:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1491:             return;
 1492:         }
 1493: 
 1494:         if ((s_copie_argument_3 = copie_objet(s_etat_processus,
 1495:                 s_objet_argument_3, 'N')) == NULL)
 1496:         {
 1497:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1498:             return;
 1499:         }
 1500: 
 1501:         if (((*s_copie_argument_1).type == RPN) ||
 1502:                 ((*s_copie_argument_2).type == RPN) ||
 1503:                 ((*s_copie_argument_3).type == RPN))
 1504:         {
 1505:             if ((s_objet_resultat = allocation(s_etat_processus, RPN))
 1506:                     == NULL)
 1507:             {
 1508:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1509:                 return;
 1510:             }
 1511:         }
 1512:         else
 1513:         {
 1514:             if ((s_objet_resultat = allocation(s_etat_processus, ALG))
 1515:                     == NULL)
 1516:             {
 1517:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1518:                 return;
 1519:             }
 1520:         }
 1521: 
 1522:         if (((*s_objet_resultat).objet =
 1523:                 allocation_maillon(s_etat_processus)) == NULL)
 1524:         {
 1525:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1526:             return;
 1527:         }
 1528: 
 1529:         l_element_courant = (*s_objet_resultat).objet;
 1530: 
 1531:         if (((*l_element_courant).donnee = allocation(s_etat_processus, FCT))
 1532:                 == NULL)
 1533:         {
 1534:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1535:             return;
 1536:         }
 1537: 
 1538:         (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1539:                 .nombre_arguments = 0;
 1540:         (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1541:                 .fonction = instruction_vers_niveau_superieur;
 1542: 
 1543:         if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1544:                 .nom_fonction = malloc(3 * sizeof(unsigned char))) == NULL)
 1545:         {
 1546:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1547:             return;
 1548:         }
 1549: 
 1550:         strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1551:                 .nom_fonction, "<<");
 1552: 
 1553:         if (((*s_copie_argument_3).type == ALG) ||
 1554:                 ((*s_copie_argument_3).type == RPN))
 1555:         {
 1556: 
 1557:             l_element_atome = (struct_liste_chainee *)
 1558:                     (*s_copie_argument_3).objet;
 1559: 
 1560:             i = 0;
 1561: 
 1562:             while(l_element_atome != NULL)
 1563:             {
 1564:                 i++;
 1565:                 l_element_atome = (*l_element_atome).suivant;
 1566:             }
 1567: 
 1568:             if (i < 3)
 1569:             {
 1570:                 if (((*l_element_courant).suivant =
 1571:                         allocation_maillon(s_etat_processus)) == NULL)
 1572:                 {
 1573:                     (*s_etat_processus).erreur_systeme =
 1574:                             d_es_allocation_memoire;
 1575:                     return;
 1576:                 }
 1577: 
 1578:                 l_element_courant = (*l_element_courant).suivant;
 1579:                 (*l_element_courant).donnee = s_copie_argument_3;
 1580:             }
 1581:             else
 1582:             {
 1583:                 (*l_element_courant).suivant = (*((struct_liste_chainee *)
 1584:                         (*s_copie_argument_3).objet)).suivant;
 1585: 
 1586:                 l_element_precedent = NULL;
 1587:                 l_element_courant = (*l_element_courant).suivant;
 1588: 
 1589:                 liberation(s_etat_processus,
 1590:                         (*((struct_liste_chainee *) (*s_copie_argument_3)
 1591:                         .objet)).donnee);
 1592:                 free((*s_copie_argument_3).objet);
 1593:                 free(s_copie_argument_3);
 1594: 
 1595:                 while((*l_element_courant).suivant != NULL)
 1596:                 {
 1597:                     l_element_precedent = l_element_courant;
 1598:                     l_element_courant = (*l_element_courant).suivant;
 1599:                 }
 1600: 
 1601:                 liberation(s_etat_processus, (*l_element_courant).donnee);
 1602:                 free(l_element_courant);
 1603: 
 1604:                 l_element_courant = l_element_precedent;
 1605:             }
 1606:         }
 1607:         else
 1608:         {
 1609:             if (((*l_element_courant).suivant =
 1610:                     allocation_maillon(s_etat_processus)) == NULL)
 1611:             {
 1612:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1613:                 return;
 1614:             }
 1615: 
 1616:             l_element_courant = (*l_element_courant).suivant;
 1617:             (*l_element_courant).donnee = s_copie_argument_3;
 1618:         }
 1619: 
 1620:         if (((*s_copie_argument_2).type == ALG) ||
 1621:                 ((*s_copie_argument_2).type == RPN))
 1622:         {
 1623:             l_element_atome = (struct_liste_chainee *)
 1624:                     (*s_copie_argument_2).objet;
 1625: 
 1626:             i = 0;
 1627: 
 1628:             while(l_element_atome != NULL)
 1629:             {
 1630:                 i++;
 1631:                 l_element_atome = (*l_element_atome).suivant;
 1632:             }
 1633: 
 1634:             if (i < 3)
 1635:             {
 1636:                 if (((*l_element_courant).suivant =
 1637:                         allocation_maillon(s_etat_processus)) == NULL)
 1638:                 {
 1639:                     (*s_etat_processus).erreur_systeme =
 1640:                             d_es_allocation_memoire;
 1641:                     return;
 1642:                 }
 1643: 
 1644:                 l_element_courant = (*l_element_courant).suivant;
 1645:                 (*l_element_courant).donnee = s_copie_argument_2;
 1646:             }
 1647:             else
 1648:             {
 1649:                 (*l_element_courant).suivant = (*((struct_liste_chainee *)
 1650:                         (*s_copie_argument_2).objet)).suivant;
 1651: 
 1652:                 l_element_courant = (*l_element_courant).suivant;
 1653:                 l_element_precedent = NULL;
 1654: 
 1655:                 liberation(s_etat_processus,
 1656:                         (*((struct_liste_chainee *) (*s_copie_argument_2)
 1657:                         .objet)).donnee);
 1658:                 free((*s_copie_argument_2).objet);
 1659:                 free(s_copie_argument_2);
 1660: 
 1661:                 while((*l_element_courant).suivant != NULL)
 1662:                 {
 1663:                     l_element_precedent = l_element_courant;
 1664:                     l_element_courant = (*l_element_courant).suivant;
 1665:                 }
 1666: 
 1667:                 liberation(s_etat_processus, (*l_element_courant).donnee);
 1668:                 free(l_element_courant);
 1669: 
 1670:                 l_element_courant = l_element_precedent;
 1671:             }
 1672:         }
 1673:         else
 1674:         {
 1675:             if (((*l_element_courant).suivant =
 1676:                     allocation_maillon(s_etat_processus)) == NULL)
 1677:             {
 1678:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1679:                 return;
 1680:             }
 1681: 
 1682:             l_element_courant = (*l_element_courant).suivant;
 1683:             (*l_element_courant).donnee = s_copie_argument_2;
 1684:         }
 1685: 
 1686:         if (((*s_copie_argument_1).type == ALG) ||
 1687:                 ((*s_copie_argument_1).type == RPN))
 1688:         {
 1689:             l_element_atome = (struct_liste_chainee *)
 1690:                     (*s_copie_argument_1).objet;
 1691: 
 1692:             i = 0;
 1693: 
 1694:             while(l_element_atome != NULL)
 1695:             {
 1696:                 i++;
 1697:                 l_element_atome = (*l_element_atome).suivant;
 1698:             }
 1699: 
 1700:             if (i < 3)
 1701:             {
 1702:                 if (((*l_element_courant).suivant =
 1703:                         allocation_maillon(s_etat_processus)) == NULL)
 1704:                 {
 1705:                     (*s_etat_processus).erreur_systeme =
 1706:                             d_es_allocation_memoire;
 1707:                     return;
 1708:                 }
 1709: 
 1710:                 l_element_courant = (*l_element_courant).suivant;
 1711:                 (*l_element_courant).donnee = s_copie_argument_1;
 1712:             }
 1713:             else
 1714:             {
 1715:                 (*l_element_courant).suivant = (*((struct_liste_chainee *)
 1716:                         (*s_copie_argument_1).objet)).suivant;
 1717: 
 1718:                 l_element_courant = (*l_element_courant).suivant;
 1719:                 l_element_precedent = NULL;
 1720: 
 1721:                 liberation(s_etat_processus,
 1722:                         (*((struct_liste_chainee *) (*s_copie_argument_1)
 1723:                         .objet)).donnee);
 1724:                 free((*s_copie_argument_1).objet);
 1725:                 free(s_copie_argument_1);
 1726: 
 1727:                 while((*l_element_courant).suivant != NULL)
 1728:                 {
 1729:                     l_element_precedent = l_element_courant;
 1730:                     l_element_courant = (*l_element_courant).suivant;
 1731:                 }
 1732: 
 1733:                 liberation(s_etat_processus, (*l_element_courant).donnee);
 1734:                 free(l_element_courant);
 1735: 
 1736:                 l_element_courant = l_element_precedent;
 1737:             }
 1738:         }
 1739:         else
 1740:         {
 1741:             if (((*l_element_courant).suivant =
 1742:                     allocation_maillon(s_etat_processus)) == NULL)
 1743:             {
 1744:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1745:                 return;
 1746:             }
 1747: 
 1748:             l_element_courant = (*l_element_courant).suivant;
 1749:             (*l_element_courant).donnee = s_copie_argument_1;
 1750:         }
 1751: 
 1752:         if (((*l_element_courant).suivant =
 1753:                 allocation_maillon(s_etat_processus)) == NULL)
 1754:         {
 1755:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1756:             return;
 1757:         }
 1758: 
 1759:         l_element_courant = (*l_element_courant).suivant;
 1760: 
 1761:         if (((*l_element_courant).donnee =
 1762:                 allocation(s_etat_processus, FCT)) == NULL)
 1763:         {
 1764:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1765:             return;
 1766:         }
 1767: 
 1768:         (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1769:                 .nombre_arguments = 3;
 1770:         (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1771:                 .fonction = instruction_bessel;
 1772: 
 1773:         if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1774:                 .nom_fonction = malloc(7 * sizeof(unsigned char))) == NULL)
 1775:         {
 1776:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1777:             return;
 1778:         }
 1779: 
 1780:         strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1781:                 .nom_fonction, "BESSEL");
 1782: 
 1783:         if (((*l_element_courant).suivant =
 1784:                 allocation_maillon(s_etat_processus)) == NULL)
 1785:         {
 1786:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1787:             return;
 1788:         }
 1789: 
 1790:         l_element_courant = (*l_element_courant).suivant;
 1791: 
 1792:         if (((*l_element_courant).donnee = (struct_objet *)
 1793:                 allocation(s_etat_processus, FCT)) == NULL)
 1794:         {
 1795:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1796:             return;
 1797:         }
 1798: 
 1799:         (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1800:                 .nombre_arguments = 0;
 1801:         (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1802:                 .fonction = instruction_vers_niveau_inferieur;
 1803: 
 1804:         if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1805:                 .nom_fonction = malloc(3 * sizeof(unsigned char))) == NULL)
 1806:         {
 1807:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1808:             return;
 1809:         }
 1810: 
 1811:         strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1812:                 .nom_fonction, ">>");
 1813: 
 1814:         (*l_element_courant).suivant = NULL;
 1815:     }
 1816: 
 1817:     if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
 1818:             s_objet_resultat) == d_erreur)
 1819:     {
 1820:         return;
 1821:     }
 1822: 
 1823:     liberation(s_etat_processus, s_objet_argument_1);
 1824:     liberation(s_etat_processus, s_objet_argument_2);
 1825:     liberation(s_etat_processus, s_objet_argument_3);
 1826: 
 1827:     return;
 1828: }
 1829: 
 1830: // vim: ts=4

CVSweb interface <joel.bertrand@systella.fr>