File:  [local] / rpl / src / instructions_b1.c
Revision 1.43: download - view: text, annotated - select for diffs - revision graph
Sun Mar 10 22:15:48 2013 UTC (11 years, 1 month ago) by bertrand
Branches: MAIN
CVS tags: HEAD
Suite des patches pour l'intégration des fichiers non formatés. La
commande BACKSPACE fonctionne maintenant avec les fichiers non formatés. Un
problème majeur a été corrigé dans BACKSPACE sur le fonctionnement avec
les fichiers formatés (problème d'échappement des guillemets).

    1: /*
    2: ================================================================================
    3:   RPL/2 (R) version 4.1.13
    4:   Copyright (C) 1989-2013 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:     struct_descripteur_fichier  *descripteur;
  245: 
  246:     int                         i;
  247:     int                         nombre_octets;
  248: 
  249:     integer8                    position_finale;
  250:     integer8                    position_initiale;
  251:     integer8                    saut;
  252: 
  253:     logical1                    guillemets_a_cheval;
  254:     logical1                    presence_chaine;
  255:     logical1                    presence_indicateur;
  256: 
  257:     long                        pointeur;
  258:     long                        niveau;
  259: 
  260:     size_t                      longueur_effective;
  261:     size_t                      longueur_questure;
  262: 
  263:     struct flock                lock;
  264: 
  265:     struct_objet                *s_objet_argument;
  266: 
  267:     unsigned char               *tampon_lecture;
  268:     unsigned char               tampon[9];
  269: 
  270:     (*s_etat_processus).erreur_execution = d_ex;
  271: 
  272:     if ((*s_etat_processus).affichage_arguments == 'Y')
  273:     {
  274:         printf("\n  BACKSPACE ");
  275: 
  276:         if ((*s_etat_processus).langue == 'F')
  277:         {
  278:             printf("(retour à l'enregistrement précédent)\n\n");
  279:         }
  280:         else
  281:         {
  282:             printf("(return to the previous record)\n\n");
  283:         }
  284: 
  285:         printf("    1: %s\n", d_FCH);
  286: 
  287:         return;
  288:     }
  289:     else if ((*s_etat_processus).test_instruction == 'Y')
  290:     {
  291:         (*s_etat_processus).nombre_arguments = -1;
  292:         return;
  293:     }
  294: 
  295:     if (test_cfsf(s_etat_processus, 31) == d_vrai)
  296:     {
  297:         if (empilement_pile_last(s_etat_processus, 1) == d_erreur)
  298:         {
  299:             return;
  300:         }
  301:     }
  302: 
  303:     if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
  304:             &s_objet_argument) == d_erreur)
  305:     {
  306:         (*s_etat_processus).erreur_execution = d_ex_manque_argument;
  307:         return;
  308:     }
  309: 
  310:     if ((*s_objet_argument).type == FCH)
  311:     {
  312:         /*
  313:          * Fichiers à accès séquentiel
  314:          */
  315: 
  316:         if ((*((struct_fichier *) (*s_objet_argument).objet)).acces == 'S')
  317:         {
  318:             /*
  319:              * Vérification des verrous
  320:              */
  321: 
  322:             lock.l_type = F_RDLCK;
  323:             lock.l_whence = SEEK_SET;
  324:             lock.l_start = 0;
  325:             lock.l_len = 0;
  326:             lock.l_pid = getpid();
  327: 
  328:             if ((descripteur = descripteur_fichier(s_etat_processus,
  329:                     (struct_fichier *) (*s_objet_argument).objet)) == NULL)
  330:             {
  331:                 liberation(s_etat_processus, s_objet_argument);
  332:                 return;
  333:             }
  334: 
  335:             if (fcntl(fileno((*descripteur).descripteur_c), F_GETLK, &lock)
  336:                     == -1)
  337:             {
  338:                 liberation(s_etat_processus, s_objet_argument);
  339: 
  340:                 (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
  341:                 return;
  342:             }
  343: 
  344:             if (lock.l_type != F_UNLCK)
  345:             {
  346:                 liberation(s_etat_processus, s_objet_argument);
  347: 
  348:                 (*s_etat_processus).erreur_execution =
  349:                         d_ex_fichier_verrouille;
  350:                 return;
  351:             }
  352: 
  353:             if ((*((struct_fichier *) (*s_objet_argument).objet)).binaire
  354:                     == 'N')
  355:             {
  356:                 /*
  357:                  * Fichiers formatés
  358:                  */
  359: 
  360:                 if ((position_finale = ftell((*descripteur).descripteur_c))
  361:                         == -1)
  362:                 {
  363:                     liberation(s_etat_processus, s_objet_argument);
  364: 
  365:                     (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
  366:                     return;
  367:                 }
  368: 
  369:                 longueur_questure = 256;
  370: 
  371:                 if ((tampon_lecture = malloc(longueur_questure *
  372:                         sizeof(unsigned char))) == NULL)
  373:                 {
  374:                     (*s_etat_processus).erreur_systeme =
  375:                             d_es_allocation_memoire;
  376:                     return;
  377:                 }
  378: 
  379:                 do
  380:                 {
  381:                     if ((position_initiale = (position_finale -
  382:                             longueur_questure)) < 0)
  383:                     {
  384:                         position_initiale = 0;
  385:                         longueur_effective = position_finale + 1;
  386:                     }
  387:                     else
  388:                     {
  389:                         longueur_effective = longueur_questure;
  390:                     }
  391: 
  392:                     if (fseek((*descripteur).descripteur_c, position_initiale,
  393:                             SEEK_SET) != 0)
  394:                     {
  395:                         (*s_etat_processus).erreur_systeme =
  396:                                 d_es_erreur_fichier;
  397:                         return;
  398:                     }
  399: 
  400:                     longueur_effective = fread(tampon_lecture,
  401:                             (size_t) sizeof(unsigned char), longueur_effective,
  402:                             (*descripteur).descripteur_c);
  403: 
  404:                     pointeur = longueur_effective - 1;
  405:                     presence_indicateur = d_faux;
  406: 
  407:                     while((pointeur >= 0) && (presence_indicateur == d_faux))
  408:                     {
  409:                         if (tampon_lecture[pointeur] == '}')
  410:                         {
  411:                             presence_indicateur = d_vrai;
  412:                         }
  413:                         else
  414:                         {
  415:                             position_finale--;
  416:                             pointeur--;
  417:                         }
  418:                     }
  419:                 } while((longueur_effective == longueur_questure) &&
  420:                         (presence_indicateur == d_faux));
  421: 
  422:                 if (presence_indicateur == d_faux)
  423:                 {
  424:                     /*
  425:                      * Le début du fichier est atteint.
  426:                      */
  427: 
  428:                     if (fseek((*descripteur).descripteur_c, 0, SEEK_SET) != 0)
  429:                     {
  430:                         liberation(s_etat_processus, s_objet_argument);
  431:                         free(tampon_lecture);
  432: 
  433:                         (*s_etat_processus).erreur_systeme =
  434:                                 d_es_erreur_fichier;
  435:                         return;
  436:                     }
  437: 
  438:                     (*s_etat_processus).erreur_execution =
  439:                             d_ex_debut_de_fichier_atteint;
  440: 
  441:                     liberation(s_etat_processus, s_objet_argument);
  442:                     free(tampon_lecture);
  443: 
  444:                     return;
  445:                 }
  446: 
  447:                 position_finale = position_finale - 1;
  448:                 presence_chaine = d_faux;
  449:                 niveau = 1;
  450: 
  451:                 if (position_finale < 0)
  452:                 {
  453:                     liberation(s_etat_processus, s_objet_argument);
  454:                     free(tampon_lecture);
  455: 
  456:                     (*s_etat_processus).erreur_execution =
  457:                             d_ex_debut_de_fichier_atteint;
  458:                     return;
  459:                 }
  460: 
  461:                 do
  462:                 {
  463:                     if ((position_initiale = (position_finale -
  464:                             longueur_questure)) < 0)
  465:                     {
  466:                         position_initiale = 0;
  467:                         longueur_effective = position_finale + 1;
  468:                     }
  469:                     else
  470:                     {
  471:                         longueur_effective = longueur_questure;
  472:                         position_finale--;
  473:                     }
  474: 
  475:                     if (fseek((*descripteur).descripteur_c, position_initiale,
  476:                             SEEK_SET) != 0)
  477:                     {
  478:                         (*s_etat_processus).erreur_systeme =
  479:                                 d_es_erreur_fichier;
  480:                         return;
  481:                     }
  482: 
  483:                     longueur_effective = fread(tampon_lecture,
  484:                             (size_t) sizeof(unsigned char), longueur_effective,
  485:                             (*descripteur).descripteur_c);
  486: 
  487:                     pointeur = longueur_effective - 1;
  488:                     presence_indicateur = d_faux;
  489:                     guillemets_a_cheval = d_faux;
  490: 
  491:                     while((pointeur >= 0) && (presence_indicateur == d_faux)
  492:                             && (guillemets_a_cheval == d_faux))
  493:                     {
  494:                         if (tampon_lecture[pointeur] == '"')
  495:                         {
  496:                             if (pointeur > 0)
  497:                             {
  498:                                 // On n'est pas au début du buffer, on regarde
  499:                                 // si les guillemets sont échappés.
  500: 
  501:                                 if (tampon_lecture[pointeur - 1] != '\\')
  502:                                 {
  503:                                         presence_chaine = (presence_chaine
  504:                                                 == d_vrai) ? d_faux : d_vrai;
  505:                                 }
  506:                             }
  507:                             else
  508:                             {
  509:                                 // On est au début du buffer. Un guillemet
  510:                                 // peut-être échappé par le dernier caractère
  511:                                 // du buffer précédent.
  512: 
  513:                                 guillemets_a_cheval = d_vrai;
  514:                             }
  515:                         }
  516:                         else
  517:                         {
  518:                             if (tampon_lecture[pointeur] == '}')
  519:                             {
  520:                                 niveau++;
  521:                             }
  522:                             else if (tampon_lecture[pointeur] == '{')
  523:                             {
  524:                                 niveau--;
  525:                             }
  526:                         }
  527: 
  528:                         if (guillemets_a_cheval == d_faux)
  529:                         {
  530:                             if (niveau == 0)
  531:                             {
  532:                                 presence_indicateur = d_vrai;
  533:                             }
  534:                             else
  535:                             {
  536:                                 position_finale--;
  537:                                 pointeur--;
  538:                             }
  539:                         }
  540:                     }
  541:                 } while((longueur_effective == longueur_questure) &&
  542:                         (presence_indicateur == d_faux));
  543: 
  544:                 if (presence_indicateur == d_faux)
  545:                 {
  546:                     liberation(s_etat_processus, s_objet_argument);
  547:                     free(tampon_lecture);
  548: 
  549:                     (*s_etat_processus).erreur_execution =
  550:                             d_ex_fin_de_fichier_atteinte;
  551:                     return;
  552:                 }
  553: 
  554:                 if (fseek((*descripteur).descripteur_c, position_finale,
  555:                         SEEK_SET) != 0)
  556:                 {
  557:                     liberation(s_etat_processus, s_objet_argument);
  558:                     free(tampon_lecture);
  559: 
  560:                     (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
  561:                     return;
  562:                 }
  563: 
  564:                 free(tampon_lecture);
  565:             }
  566:             else
  567:             {
  568:                 /*
  569:                  * Fichiers non formatés
  570:                  */
  571: 
  572:                 /*
  573:                  Chaque enregistrement est terminé par un champ
  574:                  * indiquant la longueur totale de cet enregistrement.
  575:                  *
  576:                  * XXXXXXX0                             longueur sur 7 bits
  577:                  * XXXX0011 XXXXXXXX XXXX0011           longueur sur 16 bits
  578:                  * LSB(1/2) MSB      LSB(2/2)
  579:                  * XXXX0101 XXXXXXXX XXXXXXXX XXXX0101  longueur sur 24 bits
  580:                  * XXXX0111 XXXXXXXX XXXXXXXX XXXXXXXX
  581:                  *          XXXX0111                    longueur sur 32 bits
  582:                  * XXXX1001 XXXXXXXX XXXXXXXX XXXXXXXX
  583:                  *          XXXXXXXX XXXX1001           longueur sur 40 bits
  584:                  * XXXX1011 XXXXXXXX XXXXXXXX XXXXXXXX
  585:                  *          XXXXXXXX XXXXXXXX XXXX1011  longueur sur 48 bits
  586:                  * XXXX1101 XXXXXXXX XXXXXXXX XXXXXXXX
  587:                  *          XXXXXXXX XXXXXXXX XXXXXXXX
  588:                  *          XXXX1101                    longueur sur 56 bits
  589:                  * XXXX1111 XXXXXXXX XXXXXXXX XXXXXXXX
  590:                  *          XXXXXXXX XXXXXXXX XXXXXXXX
  591:                  *          XXXXXXXX XXXX1111           longueur sur 64 bits
  592:                  */
  593: 
  594:                 if ((position_finale = ftell((*descripteur).descripteur_c))
  595:                         == -1)
  596:                 {
  597:                     liberation(s_etat_processus, s_objet_argument);
  598: 
  599:                     (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
  600:                     return;
  601:                 }
  602: 
  603:                 // Lecture du premier octet. Le pointeur de lecture se
  604:                 // trouve après l'opération à sa position initiale.
  605: 
  606:                 if (position_finale == 0)
  607:                 {
  608:                     liberation(s_etat_processus, s_objet_argument);
  609: 
  610:                     (*s_etat_processus).erreur_execution =
  611:                             d_ex_debut_de_fichier_atteint;
  612:                     return;
  613:                 }
  614: 
  615:                 if (fseek((*descripteur).descripteur_c, position_finale - 1,
  616:                         SEEK_SET) != 0)
  617:                 {
  618:                     liberation(s_etat_processus, s_objet_argument);
  619: 
  620:                     (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
  621:                     return;
  622:                 }
  623: 
  624:                 if (fread(tampon, (size_t) sizeof(unsigned char), 1,
  625:                         (*descripteur).descripteur_c) != 1)
  626:                 {
  627:                     liberation(s_etat_processus, s_objet_argument);
  628: 
  629:                     (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
  630:                     return;
  631:                 }
  632: 
  633:                 if ((tampon[0] & 0x01) == 0)
  634:                 {
  635:                     // Longueur sur sept bits
  636:                     saut = tampon[0] >> 1;
  637:                 }
  638:                 else
  639:                 {
  640:                     // Longueurs supérieures
  641:                     nombre_octets = 2 + ((tampon[0] >> 1) & 0x07);
  642: 
  643:                     if ((position_finale - nombre_octets) < 0)
  644:                     {
  645:                         liberation(s_etat_processus, s_objet_argument);
  646: 
  647:                         (*s_etat_processus).erreur_systeme = d_ex_syntaxe;
  648:                         return;
  649:                     }
  650: 
  651:                     if (fseek((*descripteur).descripteur_c, position_finale
  652:                             - nombre_octets, SEEK_SET) != 0)
  653:                     {
  654:                         liberation(s_etat_processus, s_objet_argument);
  655: 
  656:                         (*s_etat_processus).erreur_systeme =
  657:                                 d_es_erreur_fichier;
  658:                         return;
  659:                     }
  660: 
  661:                     if (fread(tampon, (size_t) sizeof(unsigned char),
  662:                             nombre_octets, (*descripteur).descripteur_c)
  663:                             != (size_t) nombre_octets)
  664:                     {
  665:                         liberation(s_etat_processus, s_objet_argument);
  666: 
  667:                         (*s_etat_processus).erreur_systeme =
  668:                                 d_es_erreur_fichier;
  669:                         return;
  670:                     }
  671: 
  672:                     // Récupération du LSB
  673: 
  674:                     saut = (tampon[0] & 0xF0)
  675:                             | ((tampon[nombre_octets - 1] & 0x0F) >> 4);
  676: 
  677:                     // Autres octets
  678: 
  679:                     for(i = 1; i < (nombre_octets - 1); i++)
  680:                     {
  681:                         saut |= tampon[i] << (((nombre_octets - 1) - i) * 8);
  682:                     }
  683:                 }
  684: 
  685:                 if (position_finale - saut >= 0)
  686:                 {
  687:                     if (fseek((*descripteur).descripteur_c,
  688:                             position_finale - saut, SEEK_SET) != 0)
  689:                     {
  690:                         liberation(s_etat_processus, s_objet_argument);
  691: 
  692:                         (*s_etat_processus).erreur_systeme =
  693:                                 d_es_erreur_fichier;
  694:                         return;
  695:                     }
  696:                 }
  697:                 else
  698:                 {
  699:                     liberation(s_etat_processus, s_objet_argument);
  700: 
  701:                     (*s_etat_processus).erreur_execution =
  702:                             d_ex_debut_de_fichier_atteint;
  703:                     return;
  704:                 }
  705:             }
  706:         }
  707:         else
  708:         {
  709:             liberation(s_etat_processus, s_objet_argument);
  710: 
  711:             (*s_etat_processus).erreur_execution = d_ex_erreur_type_fichier;
  712:             return;
  713:         }
  714:     }
  715:     else
  716:     {
  717:         liberation(s_etat_processus, s_objet_argument);
  718: 
  719:         (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
  720:         return;
  721:     }
  722: 
  723:     liberation(s_etat_processus, s_objet_argument);
  724: 
  725:     return;
  726: }
  727: 
  728: 
  729: /*
  730: ================================================================================
  731:   Fonction 'bessel'
  732: ================================================================================
  733:   Entrées :
  734: --------------------------------------------------------------------------------
  735:   Sorties :
  736: --------------------------------------------------------------------------------
  737:   Effets de bord : néant
  738: ================================================================================
  739: */
  740: 
  741: void
  742: instruction_bessel(struct_processus *s_etat_processus)
  743: {
  744:     logical1                    creation_expression;
  745: 
  746:     struct_liste_chainee        *l_element_atome;
  747:     struct_liste_chainee        *l_element_courant;
  748:     struct_liste_chainee        *l_element_precedent;
  749: 
  750:     struct_objet                *s_copie_argument_1;
  751:     struct_objet                *s_copie_argument_2;
  752:     struct_objet                *s_copie_argument_3;
  753:     struct_objet                *s_objet_argument_1;
  754:     struct_objet                *s_objet_argument_2;
  755:     struct_objet                *s_objet_argument_3;
  756:     struct_objet                *s_objet_resultat;
  757: 
  758:     unsigned long               i;
  759: 
  760:     (*s_etat_processus).erreur_execution = d_ex;
  761: 
  762:     if ((*s_etat_processus).affichage_arguments == 'Y')
  763:     {
  764:         printf("\n  BESSEL ");
  765: 
  766:         if ((*s_etat_processus).langue == 'F')
  767:         {
  768:             printf("(fonctions de Bessel)\n\n");
  769:         }
  770:         else
  771:         {
  772:             printf("(Bessel functions)\n\n");
  773:         }
  774: 
  775:         printf("    3: \"J\", \"Y\", \"I\", \"K\", \"j\", \"y\", "
  776:                 "\"i\", \"k\"\n");
  777:         printf("    2: %s, %s\n", d_INT, d_REL);
  778:         printf("    1: %s, %s\n", d_INT, d_REL);
  779:         printf("->  1: %s\n\n", d_REL);
  780: 
  781:         printf("    3: \"J\", \"Y\", \"I\", \"K\", \"j\", \"y\", "
  782:                 "\"i\", \"k\"\n");
  783:         printf("    2: %s, %s\n", d_INT, d_REL);
  784:         printf("    1: %s, %s\n", d_NOM, d_ALG);
  785:         printf("->  1: %s\n\n", d_ALG);
  786: 
  787:         printf("    3: \"J\", \"Y\", \"I\", \"K\", \"j\", \"y\", "
  788:                 "\"i\", \"k\"\n");
  789:         printf("    2: %s, %s\n", d_INT, d_REL);
  790:         printf("    1: %s\n", d_RPN);
  791:         printf("->  1: %s\n", d_RPN);
  792:         return;
  793:     }
  794:     else if ((*s_etat_processus).test_instruction == 'Y')
  795:     {
  796:         (*s_etat_processus).nombre_arguments = 3;
  797:         return;
  798:     }
  799: 
  800:     if (test_cfsf(s_etat_processus, 31) == d_vrai)
  801:     {
  802:         if (empilement_pile_last(s_etat_processus, 3) == d_erreur)
  803:         {
  804:             return;
  805:         }
  806:     }
  807: 
  808:     /*
  809:      * Jn   fonction cylindrique régulière
  810:      * Yn   fonction cylindrique irrégulière
  811:      * In   fonction cylindrique régulière modifiée
  812:      * Kn   fonction cylindrique irrégulière modifiée
  813:      * jn   fonction sphérique régulière
  814:      * yn   fonction sphérique irrégulière
  815:      * in   fonction sphérique régulière modifiée
  816:      * kn   fonction sphérique irrégulière modifiée
  817:      *
  818:      * Attention : Ordre fractionnaire uniquement pour les
  819:      * fonctions cylindriques
  820:      */
  821: 
  822:     creation_expression = d_faux;
  823: 
  824:     if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
  825:             &s_objet_argument_1) == d_erreur)
  826:     {
  827:         (*s_etat_processus).erreur_execution = d_ex_manque_argument;
  828:         return;
  829:     }
  830: 
  831:     if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
  832:             &s_objet_argument_2) == d_erreur)
  833:     {
  834:         liberation(s_etat_processus, s_objet_argument_1);
  835: 
  836:         (*s_etat_processus).erreur_execution = d_ex_manque_argument;
  837:         return;
  838:     }
  839: 
  840:     if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
  841:             &s_objet_argument_3) == d_erreur)
  842:     {
  843:         liberation(s_etat_processus, s_objet_argument_1);
  844:         liberation(s_etat_processus, s_objet_argument_2);
  845: 
  846:         (*s_etat_processus).erreur_execution = d_ex_manque_argument;
  847:         return;
  848:     }
  849: 
  850:     if ((*s_objet_argument_3).type == CHN)
  851:     {
  852:         if ((strcmp((unsigned char *) (*s_objet_argument_3).objet, "J") == 0) ||
  853:                 (strcmp((unsigned char *) (*s_objet_argument_3).objet, "Y")
  854:                 == 0) || (strcmp((unsigned char *) (*s_objet_argument_3).objet,
  855:                 "I") == 0) || (strcmp((unsigned char *) (*s_objet_argument_3)
  856:                 .objet, "K") == 0) || (strcmp((unsigned char *)
  857:                 (*s_objet_argument_3).objet, "j") == 0) || (strcmp(
  858:                 (unsigned char *) (*s_objet_argument_3).objet, "y") == 0) ||
  859:                 (strcmp((unsigned char *) (*s_objet_argument_3).objet, "i") ==
  860:                 0) || (strcmp((unsigned char *) (*s_objet_argument_3).objet,
  861:                 "k") == 0))
  862:         {
  863:             if ((*s_objet_argument_2).type == INT)
  864:             {
  865:                 if ((*s_objet_argument_1).type == INT)
  866:                 {
  867:                     if ((s_objet_resultat = allocation(s_etat_processus, REL))
  868:                             == NULL)
  869:                     {
  870:                         (*s_etat_processus).erreur_systeme =
  871:                                 d_es_allocation_memoire;
  872:                         return;
  873:                     }
  874: 
  875:                     switch((*((unsigned char *) (*s_objet_argument_3).objet)))
  876:                     {
  877:                         case 'J' :
  878:                         {
  879:                             (*((real8 *) (*s_objet_resultat).objet)) =
  880:                                     gsl_sf_bessel_Jn((int) ((*((integer8 *)
  881:                                     (*s_objet_argument_2).objet))),
  882:                                     (double) ((*((integer8 *)
  883:                                     (*s_objet_argument_1).objet))));
  884:                             break;
  885:                         }
  886: 
  887:                         case 'Y' :
  888:                         {
  889:                             if ((*((integer8 *) (*s_objet_argument_1).objet))
  890:                                     <= 0)
  891:                             {
  892:                                 (*s_etat_processus).exception =
  893:                                         d_ep_resultat_indefini;
  894: 
  895:                                 liberation(s_etat_processus,
  896:                                         s_objet_argument_1);
  897:                                 liberation(s_etat_processus,
  898:                                         s_objet_argument_2);
  899:                                 liberation(s_etat_processus,
  900:                                         s_objet_argument_3);
  901:                                 liberation(s_etat_processus,
  902:                                         s_objet_resultat);
  903: 
  904:                                 return;
  905:                             }
  906: 
  907:                             (*((real8 *) (*s_objet_resultat).objet)) =
  908:                                     gsl_sf_bessel_Yn((int) ((*((integer8 *)
  909:                                     (*s_objet_argument_2).objet))),
  910:                                     (double) ((*((integer8 *)
  911:                                     (*s_objet_argument_1).objet))));
  912:                             break;
  913:                         }
  914: 
  915:                         case 'I' :
  916:                         {
  917:                             (*((real8 *) (*s_objet_resultat).objet)) =
  918:                                     gsl_sf_bessel_In((int) ((*((integer8 *)
  919:                                     (*s_objet_argument_2).objet))),
  920:                                     (double) ((*((integer8 *)
  921:                                     (*s_objet_argument_1).objet))));
  922:                             break;
  923:                         }
  924: 
  925:                         case 'K' :
  926:                         {
  927:                             if ((*((integer8 *) (*s_objet_argument_1).objet))
  928:                                     <= 0)
  929:                             {
  930:                                 (*s_etat_processus).exception =
  931:                                         d_ep_resultat_indefini;
  932: 
  933:                                 liberation(s_etat_processus,
  934:                                         s_objet_argument_1);
  935:                                 liberation(s_etat_processus,
  936:                                         s_objet_argument_2);
  937:                                 liberation(s_etat_processus,
  938:                                         s_objet_argument_3);
  939:                                 liberation(s_etat_processus,
  940:                                         s_objet_resultat);
  941: 
  942:                                 return;
  943:                             }
  944: 
  945:                             (*((real8 *) (*s_objet_resultat).objet)) =
  946:                                     gsl_sf_bessel_Kn((int) ((*((integer8 *)
  947:                                     (*s_objet_argument_2).objet))),
  948:                                     (double) ((*((integer8 *)
  949:                                     (*s_objet_argument_1).objet))));
  950:                             break;
  951:                         }
  952: 
  953:                         case 'j' :
  954:                         {
  955:                             if (((*((integer8 *) (*s_objet_argument_1).objet))
  956:                                     < 0) || ((*((integer8 *)
  957:                                     (*s_objet_argument_2).objet)) < 0))
  958:                             {
  959:                                 (*s_etat_processus).exception =
  960:                                         d_ep_resultat_indefini;
  961: 
  962:                                 liberation(s_etat_processus,
  963:                                         s_objet_argument_1);
  964:                                 liberation(s_etat_processus,
  965:                                         s_objet_argument_2);
  966:                                 liberation(s_etat_processus,
  967:                                         s_objet_argument_3);
  968:                                 liberation(s_etat_processus,
  969:                                         s_objet_resultat);
  970: 
  971:                                 return;
  972:                             }
  973: 
  974:                             (*((real8 *) (*s_objet_resultat).objet)) =
  975:                                     gsl_sf_bessel_jl((int) ((*((integer8 *)
  976:                                     (*s_objet_argument_2).objet))),
  977:                                     (double) ((*((integer8 *)
  978:                                     (*s_objet_argument_1).objet))));
  979:                             break;
  980:                         }
  981: 
  982:                         case 'y' :
  983:                         {
  984:                             if (((*((integer8 *) (*s_objet_argument_1).objet))
  985:                                     <= 0) || ((*((integer8 *)
  986:                                     (*s_objet_argument_2).objet)) < 0))
  987:                             {
  988:                                 (*s_etat_processus).exception =
  989:                                         d_ep_resultat_indefini;
  990: 
  991:                                 liberation(s_etat_processus,
  992:                                         s_objet_argument_1);
  993:                                 liberation(s_etat_processus,
  994:                                         s_objet_argument_2);
  995:                                 liberation(s_etat_processus,
  996:                                         s_objet_argument_3);
  997:                                 liberation(s_etat_processus,
  998:                                         s_objet_resultat);
  999: 
 1000:                                 return;
 1001:                             }
 1002: 
 1003:                             (*((real8 *) (*s_objet_resultat).objet)) =
 1004:                                     gsl_sf_bessel_yl((int) ((*((integer8 *)
 1005:                                     (*s_objet_argument_2).objet))),
 1006:                                     (double) ((*((integer8 *)
 1007:                                     (*s_objet_argument_1).objet))));
 1008:                             break;
 1009:                         }
 1010: 
 1011:                         case 'i' :
 1012:                         {
 1013:                             if ((*((integer8 *) (*s_objet_argument_2).objet))
 1014:                                     < 0)
 1015:                             {
 1016:                                 (*s_etat_processus).exception =
 1017:                                         d_ep_resultat_indefini;
 1018: 
 1019:                                 liberation(s_etat_processus,
 1020:                                         s_objet_argument_1);
 1021:                                 liberation(s_etat_processus,
 1022:                                         s_objet_argument_2);
 1023:                                 liberation(s_etat_processus,
 1024:                                         s_objet_argument_3);
 1025:                                 liberation(s_etat_processus,
 1026:                                         s_objet_resultat);
 1027: 
 1028:                                 return;
 1029:                             }
 1030: 
 1031:                             (*((real8 *) (*s_objet_resultat).objet)) =
 1032:                                     exp(fabs((double) (*((integer8 *)
 1033:                                     (*s_objet_argument_1).objet)))) *
 1034:                                     gsl_sf_bessel_il_scaled(
 1035:                                     (int) ((*((integer8 *)
 1036:                                     (*s_objet_argument_2).objet))),
 1037:                                     (double) ((*((integer8 *)
 1038:                                     (*s_objet_argument_1).objet))));
 1039:                             break;
 1040:                         }
 1041: 
 1042:                         case 'k' :
 1043:                         {
 1044:                             if (((*((integer8 *) (*s_objet_argument_1).objet))
 1045:                                     <= 0) || ((*((integer8 *)
 1046:                                     (*s_objet_argument_2).objet)) < 0))
 1047:                             {
 1048:                                 (*s_etat_processus).exception =
 1049:                                         d_ep_resultat_indefini;
 1050: 
 1051:                                 liberation(s_etat_processus,
 1052:                                         s_objet_argument_1);
 1053:                                 liberation(s_etat_processus,
 1054:                                         s_objet_argument_2);
 1055:                                 liberation(s_etat_processus,
 1056:                                         s_objet_argument_3);
 1057:                                 liberation(s_etat_processus,
 1058:                                         s_objet_resultat);
 1059: 
 1060:                                 return;
 1061:                             }
 1062: 
 1063:                             (*((real8 *) (*s_objet_resultat).objet)) =
 1064:                                     exp(fabs((double) (*((integer8 *)
 1065:                                     (*s_objet_argument_1).objet)))) *
 1066:                                     gsl_sf_bessel_kl_scaled(
 1067:                                     (int) ((*((integer8 *)
 1068:                                     (*s_objet_argument_2).objet))),
 1069:                                     (double) ((*((integer8 *)
 1070:                                     (*s_objet_argument_1).objet))));
 1071:                             break;
 1072:                         }
 1073:                     }
 1074:                 }
 1075:                 else if ((*s_objet_argument_1).type == REL)
 1076:                 {
 1077:                     if ((s_objet_resultat = allocation(s_etat_processus, REL))
 1078:                             == NULL)
 1079:                     {
 1080:                         (*s_etat_processus).erreur_systeme =
 1081:                                 d_es_allocation_memoire;
 1082:                         return;
 1083:                     }
 1084: 
 1085:                     switch((*((unsigned char *) (*s_objet_argument_3).objet)))
 1086:                     {
 1087:                         case 'J' :
 1088:                         {
 1089:                             (*((real8 *) (*s_objet_resultat).objet)) =
 1090:                                     gsl_sf_bessel_Jn((int) ((*((integer8 *)
 1091:                                     (*s_objet_argument_2).objet))),
 1092:                                     (double) ((*((real8 *)
 1093:                                     (*s_objet_argument_1).objet))));
 1094:                             break;
 1095:                         }
 1096: 
 1097:                         case 'Y' :
 1098:                         {
 1099:                             if ((*((real8 *) (*s_objet_argument_1).objet))
 1100:                                     <= 0)
 1101:                             {
 1102:                                 (*s_etat_processus).exception =
 1103:                                         d_ep_resultat_indefini;
 1104: 
 1105:                                 liberation(s_etat_processus,
 1106:                                         s_objet_argument_1);
 1107:                                 liberation(s_etat_processus,
 1108:                                         s_objet_argument_2);
 1109:                                 liberation(s_etat_processus,
 1110:                                         s_objet_argument_3);
 1111:                                 liberation(s_etat_processus,
 1112:                                         s_objet_resultat);
 1113: 
 1114:                                 return;
 1115:                             }
 1116: 
 1117:                             (*((real8 *) (*s_objet_resultat).objet)) =
 1118:                                     gsl_sf_bessel_Yn((int) ((*((integer8 *)
 1119:                                     (*s_objet_argument_2).objet))),
 1120:                                     (double) ((*((real8 *)
 1121:                                     (*s_objet_argument_1).objet))));
 1122:                             break;
 1123:                         }
 1124: 
 1125:                         case 'I' :
 1126:                         {
 1127:                             (*((real8 *) (*s_objet_resultat).objet)) =
 1128:                                     gsl_sf_bessel_In((int) ((*((integer8 *)
 1129:                                     (*s_objet_argument_2).objet))),
 1130:                                     (double) ((*((real8 *)
 1131:                                     (*s_objet_argument_1).objet))));
 1132:                             break;
 1133:                         }
 1134: 
 1135:                         case 'K' :
 1136:                         {
 1137:                             if ((*((real8 *) (*s_objet_argument_1).objet))
 1138:                                     <= 0)
 1139:                             {
 1140:                                 (*s_etat_processus).exception =
 1141:                                         d_ep_resultat_indefini;
 1142: 
 1143:                                 liberation(s_etat_processus,
 1144:                                         s_objet_argument_1);
 1145:                                 liberation(s_etat_processus,
 1146:                                         s_objet_argument_2);
 1147:                                 liberation(s_etat_processus,
 1148:                                         s_objet_argument_3);
 1149:                                 liberation(s_etat_processus,
 1150:                                         s_objet_resultat);
 1151: 
 1152:                                 return;
 1153:                             }
 1154: 
 1155:                             (*((real8 *) (*s_objet_resultat).objet)) =
 1156:                                     gsl_sf_bessel_Kn((int) ((*((integer8 *)
 1157:                                     (*s_objet_argument_2).objet))),
 1158:                                     (double) ((*((real8 *)
 1159:                                     (*s_objet_argument_1).objet))));
 1160:                             break;
 1161:                         }
 1162: 
 1163:                         case 'j' :
 1164:                         {
 1165:                             if (((*((integer8 *) (*s_objet_argument_1).objet))
 1166:                                     < 0) || ((*((integer8 *)
 1167:                                     (*s_objet_argument_2).objet)) < 0))
 1168:                             {
 1169:                                 (*s_etat_processus).exception =
 1170:                                         d_ep_resultat_indefini;
 1171: 
 1172:                                 liberation(s_etat_processus,
 1173:                                         s_objet_argument_1);
 1174:                                 liberation(s_etat_processus,
 1175:                                         s_objet_argument_2);
 1176:                                 liberation(s_etat_processus,
 1177:                                         s_objet_argument_3);
 1178:                                 liberation(s_etat_processus,
 1179:                                         s_objet_resultat);
 1180: 
 1181:                                 return;
 1182:                             }
 1183: 
 1184:                             (*((real8 *) (*s_objet_resultat).objet)) =
 1185:                                     gsl_sf_bessel_jl((int) ((*((integer8 *)
 1186:                                     (*s_objet_argument_2).objet))),
 1187:                                     (double) ((*((real8 *)
 1188:                                     (*s_objet_argument_1).objet))));
 1189:                             break;
 1190:                         }
 1191: 
 1192:                         case 'y' :
 1193:                         {
 1194:                             if (((*((integer8 *) (*s_objet_argument_1).objet))
 1195:                                     <= 0) || ((*((integer8 *)
 1196:                                     (*s_objet_argument_2).objet)) < 0))
 1197:                             {
 1198:                                 (*s_etat_processus).exception =
 1199:                                         d_ep_resultat_indefini;
 1200: 
 1201:                                 liberation(s_etat_processus,
 1202:                                         s_objet_argument_1);
 1203:                                 liberation(s_etat_processus,
 1204:                                         s_objet_argument_2);
 1205:                                 liberation(s_etat_processus,
 1206:                                         s_objet_argument_3);
 1207:                                 liberation(s_etat_processus,
 1208:                                         s_objet_resultat);
 1209: 
 1210:                                 return;
 1211:                             }
 1212: 
 1213:                             (*((real8 *) (*s_objet_resultat).objet)) =
 1214:                                     gsl_sf_bessel_yl((int) ((*((integer8 *)
 1215:                                     (*s_objet_argument_2).objet))),
 1216:                                     (double) ((*((real8 *)
 1217:                                     (*s_objet_argument_1).objet))));
 1218:                             break;
 1219:                         }
 1220: 
 1221:                         case 'i' :
 1222:                         {
 1223:                             if ((*((integer8 *) (*s_objet_argument_2).objet))
 1224:                                     < 0)
 1225:                             {
 1226:                                 (*s_etat_processus).exception =
 1227:                                         d_ep_resultat_indefini;
 1228: 
 1229:                                 liberation(s_etat_processus,
 1230:                                         s_objet_argument_1);
 1231:                                 liberation(s_etat_processus,
 1232:                                         s_objet_argument_2);
 1233:                                 liberation(s_etat_processus,
 1234:                                         s_objet_argument_3);
 1235:                                 liberation(s_etat_processus,
 1236:                                         s_objet_resultat);
 1237: 
 1238:                                 return;
 1239:                             }
 1240: 
 1241:                             (*((real8 *) (*s_objet_resultat).objet)) =
 1242:                                     exp(fabs((double) (*((real8 *)
 1243:                                     (*s_objet_argument_1).objet)))) *
 1244:                                     gsl_sf_bessel_il_scaled(
 1245:                                     (int) ((*((integer8 *)
 1246:                                     (*s_objet_argument_2).objet))),
 1247:                                     (double) ((*((real8 *)
 1248:                                     (*s_objet_argument_1).objet))));
 1249:                             break;
 1250:                         }
 1251: 
 1252:                         case 'k' :
 1253:                         {
 1254:                             if (((*((integer8 *) (*s_objet_argument_1).objet))
 1255:                                     <= 0) || ((*((integer8 *)
 1256:                                     (*s_objet_argument_2).objet)) < 0))
 1257:                             {
 1258:                                 (*s_etat_processus).exception =
 1259:                                         d_ep_resultat_indefini;
 1260: 
 1261:                                 liberation(s_etat_processus,
 1262:                                         s_objet_argument_1);
 1263:                                 liberation(s_etat_processus,
 1264:                                         s_objet_argument_2);
 1265:                                 liberation(s_etat_processus,
 1266:                                         s_objet_argument_3);
 1267:                                 liberation(s_etat_processus,
 1268:                                         s_objet_resultat);
 1269: 
 1270:                                 return;
 1271:                             }
 1272: 
 1273:                             (*((real8 *) (*s_objet_resultat).objet)) =
 1274:                                     exp(fabs((double) (*((real8 *)
 1275:                                     (*s_objet_argument_1).objet)))) *
 1276:                                     gsl_sf_bessel_kl_scaled(
 1277:                                     (int) ((*((integer8 *)
 1278:                                     (*s_objet_argument_2).objet))),
 1279:                                     (double) ((*((real8 *)
 1280:                                     (*s_objet_argument_1).objet))));
 1281:                             break;
 1282:                         }
 1283:                     }
 1284:                 }
 1285:                 else if (((*s_objet_argument_1).type == NOM) ||
 1286:                         ((*s_objet_argument_1).type == RPN) ||
 1287:                         ((*s_objet_argument_1).type == ALG))
 1288:                 {
 1289:                     creation_expression = d_vrai;
 1290:                 }
 1291:                 else
 1292:                 {
 1293:                     liberation(s_etat_processus, s_objet_argument_1);
 1294:                     liberation(s_etat_processus, s_objet_argument_2);
 1295:                     liberation(s_etat_processus, s_objet_argument_3);
 1296: 
 1297:                     (*s_etat_processus).erreur_execution =
 1298:                             d_ex_erreur_type_argument;
 1299:                     return;
 1300:                 }
 1301:             }
 1302:             else if ((*s_objet_argument_2).type == REL)
 1303:             {
 1304:                 if ((*s_objet_argument_1).type == INT)
 1305:                 {
 1306:                     if ((s_objet_resultat = allocation(s_etat_processus, REL))
 1307:                             == NULL)
 1308:                     {
 1309:                         (*s_etat_processus).erreur_systeme =
 1310:                                 d_es_allocation_memoire;
 1311:                         return;
 1312:                     }
 1313: 
 1314:                     switch((*((unsigned char *) (*s_objet_argument_3).objet)))
 1315:                     {
 1316:                         case 'J' :
 1317:                         {
 1318:                             if (((*((integer8 *) (*s_objet_argument_1).objet))
 1319:                                     < 0) || ((*((real8 *)
 1320:                                     (*s_objet_argument_2).objet)) < 0))
 1321:                             {
 1322:                                 (*s_etat_processus).exception =
 1323:                                         d_ep_resultat_indefini;
 1324: 
 1325:                                 liberation(s_etat_processus,
 1326:                                         s_objet_argument_1);
 1327:                                 liberation(s_etat_processus,
 1328:                                         s_objet_argument_2);
 1329:                                 liberation(s_etat_processus,
 1330:                                         s_objet_argument_3);
 1331:                                 liberation(s_etat_processus,
 1332:                                         s_objet_resultat);
 1333: 
 1334:                                 return;
 1335:                             }
 1336: 
 1337:                             (*((real8 *) (*s_objet_resultat).objet)) =
 1338:                                     gsl_sf_bessel_Jnu((double) ((*((real8 *)
 1339:                                     (*s_objet_argument_2).objet))),
 1340:                                     (double) ((*((integer8 *)
 1341:                                     (*s_objet_argument_1).objet))));
 1342: 
 1343:                             break;
 1344:                         }
 1345: 
 1346:                         case 'Y' :
 1347:                         {
 1348:                             if (((*((integer8 *) (*s_objet_argument_1).objet))
 1349:                                     <= 0) || ((*((real8 *)
 1350:                                     (*s_objet_argument_2).objet)) < 0))
 1351:                             {
 1352:                                 (*s_etat_processus).exception =
 1353:                                         d_ep_resultat_indefini;
 1354: 
 1355:                                 liberation(s_etat_processus,
 1356:                                         s_objet_argument_1);
 1357:                                 liberation(s_etat_processus,
 1358:                                         s_objet_argument_2);
 1359:                                 liberation(s_etat_processus,
 1360:                                         s_objet_argument_3);
 1361:                                 liberation(s_etat_processus,
 1362:                                         s_objet_resultat);
 1363: 
 1364:                                 return;
 1365:                             }
 1366: 
 1367:                             (*((real8 *) (*s_objet_resultat).objet)) =
 1368:                                     gsl_sf_bessel_Ynu((double) ((*((real8 *)
 1369:                                     (*s_objet_argument_2).objet))),
 1370:                                     (double) ((*((integer8 *)
 1371:                                     (*s_objet_argument_1).objet))));
 1372:                             break;
 1373:                         }
 1374: 
 1375:                         case 'I' :
 1376:                         {
 1377:                             if (((*((integer8 *) (*s_objet_argument_1).objet))
 1378:                                     < 0) || ((*((real8 *)
 1379:                                     (*s_objet_argument_2).objet)) < 0))
 1380:                             {
 1381:                                 (*s_etat_processus).exception =
 1382:                                         d_ep_resultat_indefini;
 1383: 
 1384:                                 liberation(s_etat_processus,
 1385:                                         s_objet_argument_1);
 1386:                                 liberation(s_etat_processus,
 1387:                                         s_objet_argument_2);
 1388:                                 liberation(s_etat_processus,
 1389:                                         s_objet_argument_3);
 1390:                                 liberation(s_etat_processus,
 1391:                                         s_objet_resultat);
 1392: 
 1393:                                 return;
 1394:                             }
 1395: 
 1396:                             (*((real8 *) (*s_objet_resultat).objet)) =
 1397:                                     gsl_sf_bessel_Inu((double) ((*((real8 *)
 1398:                                     (*s_objet_argument_2).objet))),
 1399:                                     (double) ((*((integer8 *)
 1400:                                     (*s_objet_argument_1).objet))));
 1401:                             break;
 1402:                         }
 1403: 
 1404:                         case 'K' :
 1405:                         {
 1406:                             if (((*((integer8 *) (*s_objet_argument_1).objet))
 1407:                                     <= 0) || ((*((real8 *)
 1408:                                     (*s_objet_argument_2).objet)) < 0))
 1409:                             {
 1410:                                 (*s_etat_processus).exception =
 1411:                                         d_ep_resultat_indefini;
 1412: 
 1413:                                 liberation(s_etat_processus,
 1414:                                         s_objet_argument_1);
 1415:                                 liberation(s_etat_processus,
 1416:                                         s_objet_argument_2);
 1417:                                 liberation(s_etat_processus,
 1418:                                         s_objet_argument_3);
 1419:                                 liberation(s_etat_processus,
 1420:                                         s_objet_resultat);
 1421: 
 1422:                                 return;
 1423:                             }
 1424: 
 1425:                             (*((real8 *) (*s_objet_resultat).objet)) =
 1426:                                     gsl_sf_bessel_Knu((double) ((*((real8 *)
 1427:                                     (*s_objet_argument_2).objet))),
 1428:                                     (double) ((*((integer8 *)
 1429:                                     (*s_objet_argument_1).objet))));
 1430:                             break;
 1431:                         }
 1432: 
 1433:                         default :
 1434:                         {
 1435:                             (*s_etat_processus).exception =
 1436:                                     d_ep_resultat_indefini;
 1437: 
 1438:                             liberation(s_etat_processus, s_objet_argument_1);
 1439:                             liberation(s_etat_processus, s_objet_argument_2);
 1440:                             liberation(s_etat_processus, s_objet_argument_3);
 1441:                             liberation(s_etat_processus, s_objet_resultat);
 1442: 
 1443:                             return;
 1444:                             break;
 1445:                         }
 1446:                     }
 1447:                 }
 1448:                 else if ((*s_objet_argument_1).type == REL)
 1449:                 {
 1450:                     if ((s_objet_resultat = allocation(s_etat_processus, REL))
 1451:                             == NULL)
 1452:                     {
 1453:                         (*s_etat_processus).erreur_systeme =
 1454:                                 d_es_allocation_memoire;
 1455:                         return;
 1456:                     }
 1457: 
 1458:                     switch((*((unsigned char *) (*s_objet_argument_3).objet)))
 1459:                     {
 1460:                         case 'J' :
 1461:                         {
 1462:                             if (((*((real8 *) (*s_objet_argument_1).objet))
 1463:                                     < 0) || ((*((real8 *)
 1464:                                     (*s_objet_argument_2).objet)) < 0))
 1465:                             {
 1466:                                 (*s_etat_processus).exception =
 1467:                                         d_ep_resultat_indefini;
 1468: 
 1469:                                 liberation(s_etat_processus,
 1470:                                         s_objet_argument_1);
 1471:                                 liberation(s_etat_processus,
 1472:                                         s_objet_argument_2);
 1473:                                 liberation(s_etat_processus,
 1474:                                         s_objet_argument_3);
 1475:                                 liberation(s_etat_processus,
 1476:                                         s_objet_resultat);
 1477: 
 1478:                                 return;
 1479:                             }
 1480: 
 1481:                             (*((real8 *) (*s_objet_resultat).objet)) =
 1482:                                     gsl_sf_bessel_Jnu((double) ((*((real8 *)
 1483:                                     (*s_objet_argument_2).objet))),
 1484:                                     (double) ((*((real8 *)
 1485:                                     (*s_objet_argument_1).objet))));
 1486:                             break;
 1487:                         }
 1488: 
 1489:                         case 'Y' :
 1490:                         {
 1491:                             if (((*((real8 *) (*s_objet_argument_1).objet))
 1492:                                     <= 0) || ((*((real8 *)
 1493:                                     (*s_objet_argument_2).objet)) < 0))
 1494:                             {
 1495:                                 (*s_etat_processus).exception =
 1496:                                         d_ep_resultat_indefini;
 1497: 
 1498:                                 liberation(s_etat_processus,
 1499:                                         s_objet_argument_1);
 1500:                                 liberation(s_etat_processus,
 1501:                                         s_objet_argument_2);
 1502:                                 liberation(s_etat_processus,
 1503:                                         s_objet_argument_3);
 1504:                                 liberation(s_etat_processus,
 1505:                                         s_objet_resultat);
 1506: 
 1507:                                 return;
 1508:                             }
 1509: 
 1510:                             (*((real8 *) (*s_objet_resultat).objet)) =
 1511:                                     gsl_sf_bessel_Yn((double) ((*((real8 *)
 1512:                                     (*s_objet_argument_2).objet))),
 1513:                                     (double) ((*((real8 *)
 1514:                                     (*s_objet_argument_1).objet))));
 1515:                             break;
 1516:                         }
 1517: 
 1518:                         case 'I' :
 1519:                         {
 1520:                             if (((*((real8 *) (*s_objet_argument_1).objet))
 1521:                                     < 0) || ((*((real8 *)
 1522:                                     (*s_objet_argument_2).objet)) < 0))
 1523:                             {
 1524:                                 (*s_etat_processus).exception =
 1525:                                         d_ep_resultat_indefini;
 1526: 
 1527:                                 liberation(s_etat_processus,
 1528:                                         s_objet_argument_1);
 1529:                                 liberation(s_etat_processus,
 1530:                                         s_objet_argument_2);
 1531:                                 liberation(s_etat_processus,
 1532:                                         s_objet_argument_3);
 1533:                                 liberation(s_etat_processus,
 1534:                                         s_objet_resultat);
 1535: 
 1536:                                 return;
 1537:                             }
 1538: 
 1539:                             (*((real8 *) (*s_objet_resultat).objet)) =
 1540:                                     gsl_sf_bessel_In((double) ((*((real8 *)
 1541:                                     (*s_objet_argument_2).objet))),
 1542:                                     (double) ((*((real8 *)
 1543:                                     (*s_objet_argument_1).objet))));
 1544:                             break;
 1545:                         }
 1546: 
 1547:                         case 'K' :
 1548:                         {
 1549:                             if (((*((real8 *) (*s_objet_argument_1).objet))
 1550:                                     <= 0) || ((*((real8 *)
 1551:                                     (*s_objet_argument_2).objet)) < 0))
 1552:                             {
 1553:                                 (*s_etat_processus).exception =
 1554:                                         d_ep_resultat_indefini;
 1555: 
 1556:                                 liberation(s_etat_processus,
 1557:                                         s_objet_argument_1);
 1558:                                 liberation(s_etat_processus,
 1559:                                         s_objet_argument_2);
 1560:                                 liberation(s_etat_processus,
 1561:                                         s_objet_argument_3);
 1562:                                 liberation(s_etat_processus,
 1563:                                         s_objet_resultat);
 1564: 
 1565:                                 return;
 1566:                             }
 1567: 
 1568:                             (*((real8 *) (*s_objet_resultat).objet)) =
 1569:                                     gsl_sf_bessel_Kn((double) ((*((real8 *)
 1570:                                     (*s_objet_argument_2).objet))),
 1571:                                     (double) ((*((real8 *)
 1572:                                     (*s_objet_argument_1).objet))));
 1573:                             break;
 1574:                         }
 1575: 
 1576:                         default :
 1577:                         {
 1578:                             (*s_etat_processus).exception =
 1579:                                     d_ep_resultat_indefini;
 1580: 
 1581:                             liberation(s_etat_processus, s_objet_argument_1);
 1582:                             liberation(s_etat_processus, s_objet_argument_2);
 1583:                             liberation(s_etat_processus, s_objet_argument_3);
 1584:                             liberation(s_etat_processus, s_objet_resultat);
 1585: 
 1586:                             return;
 1587:                             break;
 1588:                         }
 1589:                     }
 1590:                 }
 1591:                 else
 1592:                 {
 1593:                     liberation(s_etat_processus, s_objet_argument_1);
 1594:                     liberation(s_etat_processus, s_objet_argument_2);
 1595:                     liberation(s_etat_processus, s_objet_argument_3);
 1596: 
 1597:                     (*s_etat_processus).erreur_execution =
 1598:                             d_ex_erreur_type_argument;
 1599:                     return;
 1600:                 }
 1601:             }
 1602:             else if (((*s_objet_argument_2).type == NOM) ||
 1603:                     ((*s_objet_argument_2).type == RPN) ||
 1604:                     ((*s_objet_argument_2).type == ALG))
 1605:             {
 1606:                 creation_expression = d_vrai;
 1607:             }
 1608:             else
 1609:             {
 1610:                 liberation(s_etat_processus, s_objet_argument_1);
 1611:                 liberation(s_etat_processus, s_objet_argument_2);
 1612:                 liberation(s_etat_processus, s_objet_argument_3);
 1613: 
 1614:                 (*s_etat_processus).erreur_execution =
 1615:                         d_ex_erreur_type_argument;
 1616:                 return;
 1617:             }
 1618:         }
 1619:         else
 1620:         {
 1621:             liberation(s_etat_processus, s_objet_argument_1);
 1622:             liberation(s_etat_processus, s_objet_argument_2);
 1623:             liberation(s_etat_processus, s_objet_argument_3);
 1624: 
 1625:             (*s_etat_processus).erreur_execution = d_ex_argument_invalide;
 1626:             return;
 1627:         }
 1628:     }
 1629:     else if (((*s_objet_argument_3).type == NOM) ||
 1630:             ((*s_objet_argument_3).type == RPN) ||
 1631:             ((*s_objet_argument_3).type == ALG))
 1632:     {
 1633:         creation_expression = d_vrai;
 1634:     }
 1635:     else
 1636:     {
 1637:         liberation(s_etat_processus, s_objet_argument_1);
 1638:         liberation(s_etat_processus, s_objet_argument_2);
 1639:         liberation(s_etat_processus, s_objet_argument_3);
 1640: 
 1641:         (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
 1642:         return;
 1643:     }
 1644: 
 1645:     if (creation_expression == d_vrai)
 1646:     {
 1647:         if ((s_copie_argument_1 = copie_objet(s_etat_processus,
 1648:                 s_objet_argument_1, 'N')) == NULL)
 1649:         {
 1650:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1651:             return;
 1652:         }
 1653: 
 1654:         if ((s_copie_argument_2 = copie_objet(s_etat_processus,
 1655:                 s_objet_argument_2, 'N')) == NULL)
 1656:         {
 1657:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1658:             return;
 1659:         }
 1660: 
 1661:         if ((s_copie_argument_3 = copie_objet(s_etat_processus,
 1662:                 s_objet_argument_3, 'N')) == NULL)
 1663:         {
 1664:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1665:             return;
 1666:         }
 1667: 
 1668:         if (((*s_copie_argument_1).type == RPN) ||
 1669:                 ((*s_copie_argument_2).type == RPN) ||
 1670:                 ((*s_copie_argument_3).type == RPN))
 1671:         {
 1672:             if ((s_objet_resultat = allocation(s_etat_processus, RPN))
 1673:                     == NULL)
 1674:             {
 1675:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1676:                 return;
 1677:             }
 1678:         }
 1679:         else
 1680:         {
 1681:             if ((s_objet_resultat = allocation(s_etat_processus, ALG))
 1682:                     == NULL)
 1683:             {
 1684:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1685:                 return;
 1686:             }
 1687:         }
 1688: 
 1689:         if (((*s_objet_resultat).objet =
 1690:                 allocation_maillon(s_etat_processus)) == NULL)
 1691:         {
 1692:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1693:             return;
 1694:         }
 1695: 
 1696:         l_element_courant = (*s_objet_resultat).objet;
 1697: 
 1698:         if (((*l_element_courant).donnee = allocation(s_etat_processus, FCT))
 1699:                 == NULL)
 1700:         {
 1701:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1702:             return;
 1703:         }
 1704: 
 1705:         (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1706:                 .nombre_arguments = 0;
 1707:         (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1708:                 .fonction = instruction_vers_niveau_superieur;
 1709: 
 1710:         if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1711:                 .nom_fonction = malloc(3 * sizeof(unsigned char))) == NULL)
 1712:         {
 1713:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1714:             return;
 1715:         }
 1716: 
 1717:         strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1718:                 .nom_fonction, "<<");
 1719: 
 1720:         if (((*s_copie_argument_3).type == ALG) ||
 1721:                 ((*s_copie_argument_3).type == RPN))
 1722:         {
 1723: 
 1724:             l_element_atome = (struct_liste_chainee *)
 1725:                     (*s_copie_argument_3).objet;
 1726: 
 1727:             i = 0;
 1728: 
 1729:             while(l_element_atome != NULL)
 1730:             {
 1731:                 i++;
 1732:                 l_element_atome = (*l_element_atome).suivant;
 1733:             }
 1734: 
 1735:             if (i < 3)
 1736:             {
 1737:                 if (((*l_element_courant).suivant =
 1738:                         allocation_maillon(s_etat_processus)) == NULL)
 1739:                 {
 1740:                     (*s_etat_processus).erreur_systeme =
 1741:                             d_es_allocation_memoire;
 1742:                     return;
 1743:                 }
 1744: 
 1745:                 l_element_courant = (*l_element_courant).suivant;
 1746:                 (*l_element_courant).donnee = s_copie_argument_3;
 1747:             }
 1748:             else
 1749:             {
 1750:                 (*l_element_courant).suivant = (*((struct_liste_chainee *)
 1751:                         (*s_copie_argument_3).objet)).suivant;
 1752: 
 1753:                 l_element_precedent = NULL;
 1754:                 l_element_courant = (*l_element_courant).suivant;
 1755: 
 1756:                 liberation(s_etat_processus,
 1757:                         (*((struct_liste_chainee *) (*s_copie_argument_3)
 1758:                         .objet)).donnee);
 1759:                 free((*s_copie_argument_3).objet);
 1760:                 free(s_copie_argument_3);
 1761: 
 1762:                 while((*l_element_courant).suivant != NULL)
 1763:                 {
 1764:                     l_element_precedent = l_element_courant;
 1765:                     l_element_courant = (*l_element_courant).suivant;
 1766:                 }
 1767: 
 1768:                 liberation(s_etat_processus, (*l_element_courant).donnee);
 1769:                 free(l_element_courant);
 1770: 
 1771:                 l_element_courant = l_element_precedent;
 1772:             }
 1773:         }
 1774:         else
 1775:         {
 1776:             if (((*l_element_courant).suivant =
 1777:                     allocation_maillon(s_etat_processus)) == NULL)
 1778:             {
 1779:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1780:                 return;
 1781:             }
 1782: 
 1783:             l_element_courant = (*l_element_courant).suivant;
 1784:             (*l_element_courant).donnee = s_copie_argument_3;
 1785:         }
 1786: 
 1787:         if (((*s_copie_argument_2).type == ALG) ||
 1788:                 ((*s_copie_argument_2).type == RPN))
 1789:         {
 1790:             l_element_atome = (struct_liste_chainee *)
 1791:                     (*s_copie_argument_2).objet;
 1792: 
 1793:             i = 0;
 1794: 
 1795:             while(l_element_atome != NULL)
 1796:             {
 1797:                 i++;
 1798:                 l_element_atome = (*l_element_atome).suivant;
 1799:             }
 1800: 
 1801:             if (i < 3)
 1802:             {
 1803:                 if (((*l_element_courant).suivant =
 1804:                         allocation_maillon(s_etat_processus)) == NULL)
 1805:                 {
 1806:                     (*s_etat_processus).erreur_systeme =
 1807:                             d_es_allocation_memoire;
 1808:                     return;
 1809:                 }
 1810: 
 1811:                 l_element_courant = (*l_element_courant).suivant;
 1812:                 (*l_element_courant).donnee = s_copie_argument_2;
 1813:             }
 1814:             else
 1815:             {
 1816:                 (*l_element_courant).suivant = (*((struct_liste_chainee *)
 1817:                         (*s_copie_argument_2).objet)).suivant;
 1818: 
 1819:                 l_element_courant = (*l_element_courant).suivant;
 1820:                 l_element_precedent = NULL;
 1821: 
 1822:                 liberation(s_etat_processus,
 1823:                         (*((struct_liste_chainee *) (*s_copie_argument_2)
 1824:                         .objet)).donnee);
 1825:                 free((*s_copie_argument_2).objet);
 1826:                 free(s_copie_argument_2);
 1827: 
 1828:                 while((*l_element_courant).suivant != NULL)
 1829:                 {
 1830:                     l_element_precedent = l_element_courant;
 1831:                     l_element_courant = (*l_element_courant).suivant;
 1832:                 }
 1833: 
 1834:                 liberation(s_etat_processus, (*l_element_courant).donnee);
 1835:                 free(l_element_courant);
 1836: 
 1837:                 l_element_courant = l_element_precedent;
 1838:             }
 1839:         }
 1840:         else
 1841:         {
 1842:             if (((*l_element_courant).suivant =
 1843:                     allocation_maillon(s_etat_processus)) == NULL)
 1844:             {
 1845:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1846:                 return;
 1847:             }
 1848: 
 1849:             l_element_courant = (*l_element_courant).suivant;
 1850:             (*l_element_courant).donnee = s_copie_argument_2;
 1851:         }
 1852: 
 1853:         if (((*s_copie_argument_1).type == ALG) ||
 1854:                 ((*s_copie_argument_1).type == RPN))
 1855:         {
 1856:             l_element_atome = (struct_liste_chainee *)
 1857:                     (*s_copie_argument_1).objet;
 1858: 
 1859:             i = 0;
 1860: 
 1861:             while(l_element_atome != NULL)
 1862:             {
 1863:                 i++;
 1864:                 l_element_atome = (*l_element_atome).suivant;
 1865:             }
 1866: 
 1867:             if (i < 3)
 1868:             {
 1869:                 if (((*l_element_courant).suivant =
 1870:                         allocation_maillon(s_etat_processus)) == NULL)
 1871:                 {
 1872:                     (*s_etat_processus).erreur_systeme =
 1873:                             d_es_allocation_memoire;
 1874:                     return;
 1875:                 }
 1876: 
 1877:                 l_element_courant = (*l_element_courant).suivant;
 1878:                 (*l_element_courant).donnee = s_copie_argument_1;
 1879:             }
 1880:             else
 1881:             {
 1882:                 (*l_element_courant).suivant = (*((struct_liste_chainee *)
 1883:                         (*s_copie_argument_1).objet)).suivant;
 1884: 
 1885:                 l_element_courant = (*l_element_courant).suivant;
 1886:                 l_element_precedent = NULL;
 1887: 
 1888:                 liberation(s_etat_processus,
 1889:                         (*((struct_liste_chainee *) (*s_copie_argument_1)
 1890:                         .objet)).donnee);
 1891:                 free((*s_copie_argument_1).objet);
 1892:                 free(s_copie_argument_1);
 1893: 
 1894:                 while((*l_element_courant).suivant != NULL)
 1895:                 {
 1896:                     l_element_precedent = l_element_courant;
 1897:                     l_element_courant = (*l_element_courant).suivant;
 1898:                 }
 1899: 
 1900:                 liberation(s_etat_processus, (*l_element_courant).donnee);
 1901:                 free(l_element_courant);
 1902: 
 1903:                 l_element_courant = l_element_precedent;
 1904:             }
 1905:         }
 1906:         else
 1907:         {
 1908:             if (((*l_element_courant).suivant =
 1909:                     allocation_maillon(s_etat_processus)) == NULL)
 1910:             {
 1911:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1912:                 return;
 1913:             }
 1914: 
 1915:             l_element_courant = (*l_element_courant).suivant;
 1916:             (*l_element_courant).donnee = s_copie_argument_1;
 1917:         }
 1918: 
 1919:         if (((*l_element_courant).suivant =
 1920:                 allocation_maillon(s_etat_processus)) == NULL)
 1921:         {
 1922:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1923:             return;
 1924:         }
 1925: 
 1926:         l_element_courant = (*l_element_courant).suivant;
 1927: 
 1928:         if (((*l_element_courant).donnee =
 1929:                 allocation(s_etat_processus, FCT)) == NULL)
 1930:         {
 1931:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1932:             return;
 1933:         }
 1934: 
 1935:         (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1936:                 .nombre_arguments = 3;
 1937:         (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1938:                 .fonction = instruction_bessel;
 1939: 
 1940:         if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1941:                 .nom_fonction = malloc(7 * sizeof(unsigned char))) == NULL)
 1942:         {
 1943:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1944:             return;
 1945:         }
 1946: 
 1947:         strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1948:                 .nom_fonction, "BESSEL");
 1949: 
 1950:         if (((*l_element_courant).suivant =
 1951:                 allocation_maillon(s_etat_processus)) == NULL)
 1952:         {
 1953:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1954:             return;
 1955:         }
 1956: 
 1957:         l_element_courant = (*l_element_courant).suivant;
 1958: 
 1959:         if (((*l_element_courant).donnee = (struct_objet *)
 1960:                 allocation(s_etat_processus, FCT)) == NULL)
 1961:         {
 1962:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1963:             return;
 1964:         }
 1965: 
 1966:         (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1967:                 .nombre_arguments = 0;
 1968:         (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1969:                 .fonction = instruction_vers_niveau_inferieur;
 1970: 
 1971:         if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1972:                 .nom_fonction = malloc(3 * sizeof(unsigned char))) == NULL)
 1973:         {
 1974:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1975:             return;
 1976:         }
 1977: 
 1978:         strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1979:                 .nom_fonction, ">>");
 1980: 
 1981:         (*l_element_courant).suivant = NULL;
 1982:     }
 1983: 
 1984:     if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
 1985:             s_objet_resultat) == d_erreur)
 1986:     {
 1987:         return;
 1988:     }
 1989: 
 1990:     liberation(s_etat_processus, s_objet_argument_1);
 1991:     liberation(s_etat_processus, s_objet_argument_2);
 1992:     liberation(s_etat_processus, s_objet_argument_3);
 1993: 
 1994:     return;
 1995: }
 1996: 
 1997: 
 1998: /*
 1999: ================================================================================
 2000:   Fonction 'backtrace'
 2001: ================================================================================
 2002:   Entrées :
 2003: --------------------------------------------------------------------------------
 2004:   Sorties :
 2005: --------------------------------------------------------------------------------
 2006:   Effets de bord : néant
 2007: ================================================================================
 2008: */
 2009: 
 2010: void
 2011: instruction_backtrace(struct_processus *s_etat_processus)
 2012: {
 2013:     (*s_etat_processus).erreur_execution = d_ex;
 2014: 
 2015:     if ((*s_etat_processus).affichage_arguments == 'Y')
 2016:     {
 2017:         printf("\n  BACKTRACE ");
 2018: 
 2019:         if ((*s_etat_processus).langue == 'F')
 2020:         {
 2021:             printf("(affichage de la pile système)\n\n");
 2022:             printf("  Aucun argument\n");
 2023:         }
 2024:         else
 2025:         {
 2026:             printf("(print system stack)\n\n");
 2027:             printf("  No argument\n");
 2028:         }
 2029: 
 2030:         return;
 2031:     }
 2032:     else if ((*s_etat_processus).test_instruction == 'Y')
 2033:     {
 2034:         (*s_etat_processus).nombre_arguments = -1;
 2035:         return;
 2036:     }
 2037: 
 2038:     if (test_cfsf(s_etat_processus, 31) == d_vrai)
 2039:     {
 2040:         if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 2041:         {
 2042:             return;
 2043:         }
 2044:     }
 2045: 
 2046:     trace(s_etat_processus, stdout);
 2047: 
 2048:     return;
 2049: }
 2050: 
 2051: // vim: ts=4

CVSweb interface <joel.bertrand@systella.fr>