File:  [local] / rpl / src / instructions_c2.c
Revision 1.57: download - view: text, annotated - select for diffs - revision graph
Mon Aug 4 06:59:17 2014 UTC (9 years, 8 months ago) by bertrand
Branches: MAIN
CVS tags: HEAD
Derniers patches pour le parser.

    1: /*
    2: ================================================================================
    3:   RPL/2 (R) version 4.1.19
    4:   Copyright (C) 1989-2014 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 'cycle'
   29: ================================================================================
   30:   Entrées : structure processus
   31: --------------------------------------------------------------------------------
   32:   Sorties :
   33: --------------------------------------------------------------------------------
   34:   Effets de bord : néant
   35: ================================================================================
   36: */
   37: 
   38: void
   39: instruction_cycle(struct_processus *s_etat_processus)
   40: {
   41:     logical1                        drapeau_presence_fin_boucle;
   42:     logical1                        erreur;
   43:     logical1                        presence_boucle;
   44: 
   45:     struct_liste_pile_systeme       *l_element_pile_systeme;
   46: 
   47:     unsigned char                   *instruction_majuscule;
   48:     unsigned char                   *tampon;
   49: 
   50:     integer8                        niveau;
   51: 
   52:     void                            (*fonction)();
   53: 
   54:     (*s_etat_processus).erreur_execution = d_ex;
   55: 
   56:     if ((*s_etat_processus).affichage_arguments == 'Y')
   57:     {
   58:         printf("\n  CYCLE ");
   59: 
   60:         if ((*s_etat_processus).langue == 'F')
   61:         {
   62:             printf("(structure de contrôle)\n\n");
   63:             printf("  Utilisation :\n\n");
   64:         }
   65:         else
   66:         {
   67:             printf("(control statement)\n\n");
   68:             printf("  Usage:\n\n");
   69:         }
   70: 
   71:         printf("    FOR (variable)\n");
   72:         printf("        ...\n");
   73:         printf("        CYCLE\n");
   74:         printf("        ...\n");
   75:         printf("    NEXT/STEP\n\n");
   76: 
   77:         printf("    FORALL (variable)\n");
   78:         printf("        ...\n");
   79:         printf("        CYCLE\n");
   80:         printf("        ...\n");
   81:         printf("    NEXT\n\n");
   82: 
   83:         printf("    START\n");
   84:         printf("        ...\n");
   85:         printf("        CYCLE\n");
   86:         printf("        ...\n");
   87:         printf("    NEXT/STEP\n");
   88: 
   89:         return;
   90:     }
   91:     else if ((*s_etat_processus).test_instruction == 'Y')
   92:     {
   93:         (*s_etat_processus).nombre_arguments = -1;
   94:         return;
   95:     }
   96: 
   97:     /*
   98:      * Test de la présence de l'instruction CYCLE dans une boucle définie
   99:      */
  100:     
  101:     l_element_pile_systeme = (*s_etat_processus).l_base_pile_systeme;
  102:     presence_boucle = d_faux;
  103: 
  104:     while((l_element_pile_systeme != NULL) && (presence_boucle == d_faux))
  105:     {
  106:         if (((*l_element_pile_systeme).type_cloture == 'S') ||
  107:                 ((*l_element_pile_systeme).type_cloture == 'F') ||
  108:                 ((*l_element_pile_systeme).type_cloture == 'A'))
  109:         {
  110:             presence_boucle = d_vrai;
  111:         }
  112: 
  113:         l_element_pile_systeme = (*l_element_pile_systeme).suivant;
  114:     }
  115: 
  116:     if (presence_boucle == d_faux)
  117:     {
  118:         (*s_etat_processus).erreur_execution = d_ex_cycle_hors_boucle;
  119:         return;
  120:     }
  121: 
  122:     if ((*s_etat_processus).mode_execution_programme == 'Y')
  123:     {
  124:         drapeau_presence_fin_boucle = d_vrai;
  125:         tampon = (*s_etat_processus).instruction_courante;
  126:         niveau = 1;
  127: 
  128:         instruction_majuscule = conversion_majuscule("");
  129: 
  130:         while(!(((strcmp(instruction_majuscule, "NEXT") == 0) ||
  131:                 (strcmp(instruction_majuscule, "STEP") == 0)) && (niveau == 0)))
  132:         {
  133:             free(instruction_majuscule);
  134: 
  135:             erreur = recherche_instruction_suivante(s_etat_processus);
  136: 
  137:             if (erreur == d_erreur)
  138:             {
  139:                 return;
  140:             }
  141: 
  142:             instruction_majuscule = conversion_majuscule(
  143:                     (*s_etat_processus).instruction_courante);
  144: 
  145:             if (instruction_majuscule == NULL)
  146:             {
  147:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  148:                 return;
  149:             }
  150: 
  151:             /*
  152:              * Traitement de la pile système par les
  153:              * différentes instructions.
  154:              */
  155: 
  156:             if ((strcmp(instruction_majuscule, "IF") == 0) ||
  157:                     (strcmp(instruction_majuscule, "IFERR") == 0) ||
  158:                     (strcmp(instruction_majuscule, "DO") == 0) ||
  159:                     (strcmp(instruction_majuscule, "WHILE") == 0) ||
  160:                     (strcmp(instruction_majuscule, "FOR") == 0) ||
  161:                     (strcmp(instruction_majuscule, "FORALL") == 0) ||
  162:                     (strcmp(instruction_majuscule, "START") == 0) ||
  163:                     (strcmp(instruction_majuscule, "SELECT") == 0)
  164:                     || (strcmp(instruction_majuscule, "CRITICAL") == 0)
  165:                     || (strcmp(instruction_majuscule, "CASE") == 0)
  166:                     || (strcmp(instruction_majuscule, "<<") == 0))
  167:             {
  168:                 if (strcmp(instruction_majuscule, "<<") == 0)
  169:                 {
  170:                     analyse(s_etat_processus, NULL);
  171:                 }
  172:                 else
  173:                 {
  174:                     if ((strcmp(instruction_majuscule, "FOR") == 0) ||
  175:                             (strcmp(instruction_majuscule, "FORALL") == 0) ||
  176:                             (strcmp(instruction_majuscule, "START") == 0))
  177:                     {
  178:                         niveau++;
  179:                     }
  180: 
  181:                     empilement_pile_systeme(s_etat_processus);
  182: 
  183:                     if ((*s_etat_processus).erreur_systeme != d_es)
  184:                     {
  185:                         return;
  186:                     }
  187:                 }
  188:             }
  189:             else if ((strcmp(instruction_majuscule, "END") == 0) ||
  190:                     (strcmp(instruction_majuscule, "NEXT") == 0) ||
  191:                     (strcmp(instruction_majuscule, "STEP") == 0) ||
  192:                     (strcmp(instruction_majuscule, ">>") == 0))
  193:             {
  194:                 if (strcmp(instruction_majuscule, ">>") == 0)
  195:                 {
  196:                     analyse(s_etat_processus, NULL);
  197: 
  198:                     if ((*s_etat_processus).retour_routine_evaluation
  199:                             == 'Y')
  200:                     {
  201:                         drapeau_presence_fin_boucle = d_faux;
  202:                         free((*s_etat_processus).instruction_courante);
  203: 
  204:                         break;
  205:                     }
  206:                 }
  207:                 else
  208:                 {
  209:                     if ((strcmp(instruction_majuscule, "NEXT") == 0) ||
  210:                             (strcmp(instruction_majuscule, "STEP") == 0))
  211:                     {
  212:                         niveau--;
  213: 
  214:                         if (niveau != 0)
  215:                         {
  216:                             depilement_pile_systeme(s_etat_processus);
  217:                         }
  218:                     }
  219:                     else
  220:                     {
  221:                         if ((*s_etat_processus).l_base_pile_systeme == NULL)
  222:                         {
  223:                             (*s_etat_processus).erreur_systeme =
  224:                                     d_es_processus;
  225:                             return;
  226:                         }
  227: 
  228:                         if ((*(*s_etat_processus).l_base_pile_systeme)
  229:                                 .type_cloture == 'Q')
  230:                         {
  231:                             if (pthread_mutex_unlock(
  232:                                     &mutex_sections_critiques) != 0)
  233:                             {
  234:                                 (*s_etat_processus).erreur_systeme =
  235:                                         d_es_processus;
  236:                                 return;
  237:                             }
  238: 
  239:                             (*s_etat_processus).sections_critiques--;
  240:                         }
  241: 
  242:                         depilement_pile_systeme(s_etat_processus);
  243:                     }
  244: 
  245:                     if ((*s_etat_processus).erreur_systeme != d_es)
  246:                     {
  247:                         return;
  248:                     }
  249:                 }
  250:             }
  251: 
  252:             free((*s_etat_processus).instruction_courante);
  253:         }
  254: 
  255:         free(instruction_majuscule);
  256:         (*s_etat_processus).instruction_courante = tampon;
  257: 
  258:         if (drapeau_presence_fin_boucle == d_faux)
  259:         {
  260:             (*s_etat_processus).traitement_cycle_exit = 'C';
  261:         }
  262:         else
  263:         {
  264:             (*s_etat_processus).traitement_cycle_exit = 'N';
  265:             (*s_etat_processus).position_courante -= 5;
  266:         }
  267:     }
  268:     else
  269:     {
  270:         /* CYCLE apparaissant dans l'évaluation d'une expression */
  271: 
  272:         drapeau_presence_fin_boucle = d_faux;
  273:         instruction_majuscule = NULL;
  274:         niveau = 1;
  275: 
  276:         while((*s_etat_processus).expression_courante != NULL)
  277:         {
  278:             while((*(*(*s_etat_processus).expression_courante).donnee)
  279:                     .type != FCT)
  280:             {
  281:                 if ((*s_etat_processus).expression_courante == NULL)
  282:                 {
  283:                     (*s_etat_processus).erreur_execution =
  284:                             d_ex_erreur_traitement_boucle;
  285:                     return;
  286:                 }
  287: 
  288:                 (*s_etat_processus).expression_courante = (*(*s_etat_processus)
  289:                         .expression_courante).suivant;
  290:             }
  291: 
  292:             BUG((*(*(*s_etat_processus).expression_courante).donnee).type
  293:                     != FCT, printf("Not a function\n"));
  294: 
  295:             fonction = (*((struct_fonction *) (*(*(*s_etat_processus)
  296:                     .expression_courante).donnee).objet)).fonction;
  297: 
  298:             if ((fonction == instruction_if) ||
  299:                     (fonction == instruction_iferr) ||
  300:                     (fonction == instruction_do) ||
  301:                     (fonction == instruction_while) ||
  302:                     (fonction == instruction_for) ||
  303:                     (fonction == instruction_forall) ||
  304:                     (fonction == instruction_start) ||
  305:                     (fonction == instruction_select) ||
  306:                     (fonction == instruction_case) ||
  307:                     (fonction == instruction_critical) ||
  308:                     (fonction == instruction_vers_niveau_superieur))
  309:             {
  310:                 if (fonction == instruction_vers_niveau_superieur)
  311:                 {
  312:                     analyse(s_etat_processus,
  313:                             instruction_vers_niveau_superieur);
  314:                 }
  315:                 else
  316:                 {
  317:                     if ((fonction == instruction_for) ||
  318:                             (fonction == instruction_start))
  319:                     {
  320:                         niveau++;
  321:                     }
  322: 
  323:                     empilement_pile_systeme(s_etat_processus);
  324: 
  325:                     if ((*s_etat_processus).erreur_systeme != d_es)
  326:                     {
  327:                         return;
  328:                     }
  329:                 }
  330:             }
  331:             else if ((fonction == instruction_end) ||
  332:                     (fonction == instruction_next) ||
  333:                     (fonction == instruction_step) ||
  334:                     (fonction == instruction_vers_niveau_inferieur))
  335:             {
  336:                 if (fonction == instruction_vers_niveau_inferieur)
  337:                 {
  338:                     analyse(s_etat_processus,
  339:                             instruction_vers_niveau_inferieur);
  340:                 }
  341:                 else
  342:                 {
  343:                     if ((fonction == instruction_next) ||
  344:                             (fonction == instruction_step))
  345:                     {
  346:                         niveau--;
  347: 
  348:                         if (niveau != 0)
  349:                         {
  350:                             depilement_pile_systeme(s_etat_processus);
  351:                         }
  352:                         else
  353:                         {
  354:                             drapeau_presence_fin_boucle = d_vrai;
  355:                             break;
  356:                         }
  357:                     }
  358:                     else
  359:                     {
  360:                         if ((*s_etat_processus).l_base_pile_systeme == NULL)
  361:                         {
  362:                             (*s_etat_processus).erreur_systeme =
  363:                                     d_es_processus;
  364:                             return;
  365:                         }
  366: 
  367:                         if ((*(*s_etat_processus).l_base_pile_systeme)
  368:                                 .type_cloture == 'Q')
  369:                         {
  370:                             if (pthread_mutex_unlock(&mutex_sections_critiques)
  371:                                     != 0)
  372:                             {
  373:                                 (*s_etat_processus).erreur_systeme =
  374:                                         d_es_processus;
  375:                                 return;
  376:                             }
  377: 
  378:                             (*s_etat_processus).sections_critiques--;
  379:                         }   
  380: 
  381:                         depilement_pile_systeme(s_etat_processus);
  382:                     }
  383: 
  384:                     if ((*s_etat_processus).erreur_systeme != d_es)
  385:                     {
  386:                         return;
  387:                     }
  388:                 }
  389:             }
  390: 
  391:             (*s_etat_processus).expression_courante = (*(*s_etat_processus)
  392:                     .expression_courante).suivant;
  393:         }
  394: 
  395:         if (drapeau_presence_fin_boucle == d_faux)
  396:         {
  397:             (*s_etat_processus).traitement_cycle_exit = 'C';
  398:         }
  399:         else
  400:         {
  401:             (*s_etat_processus).traitement_cycle_exit = 'N';
  402: 
  403:             if (fonction == instruction_next)
  404:             {
  405:                 instruction_next(s_etat_processus);
  406:             }
  407:             else
  408:             {
  409:                 instruction_step(s_etat_processus);
  410:             }
  411:         }
  412:     }
  413: 
  414:     return;
  415: }
  416: 
  417: 
  418: /*
  419: ================================================================================
  420:   Fonction 'con'
  421: ================================================================================
  422:   Entrées : structure processus
  423: --------------------------------------------------------------------------------
  424:   Sorties :
  425: --------------------------------------------------------------------------------
  426:   Effets de bord : néant
  427: ================================================================================
  428: */
  429: 
  430: void
  431: instruction_con(struct_processus *s_etat_processus)
  432: {
  433:     struct_liste_chainee            *l_element_courant;
  434: 
  435:     struct_objet                    *s_objet_1;
  436:     struct_objet                    *s_objet_2;
  437:     struct_objet                    *s_objet_resultat;
  438: 
  439:     logical1                        argument_nom;
  440:     logical1                        variable_partagee;
  441: 
  442:     integer8                        i;
  443:     integer8                        j;
  444:     integer8                        nombre_colonnes;
  445:     integer8                        nombre_dimensions;
  446:     integer8                        nombre_lignes;
  447: 
  448:     (*s_etat_processus).erreur_execution = d_ex;
  449: 
  450:     if ((*s_etat_processus).affichage_arguments == 'Y')
  451:     {
  452:         printf("\n  CON ");
  453: 
  454:         if ((*s_etat_processus).langue == 'F')
  455:         {
  456:             printf("(matrice constante)\n\n");
  457:         }
  458:         else
  459:         {
  460:             printf("(constant matrix)\n\n");
  461:         }
  462: 
  463:         printf("    2: %s, %s, %s, %s\n",
  464:                 d_LST, d_VIN, d_VRL, d_VCX);
  465:         printf("    1: %s\n", d_INT);
  466:         printf("->  1: %s\n\n", d_VIN);
  467: 
  468:         printf("    2: %s, %s, %s, %s\n",
  469:                 d_LST, d_VIN, d_VRL, d_VCX);
  470:         printf("    1: %s\n", d_REL);
  471:         printf("->  1: %s\n\n", d_VRL);
  472: 
  473:         printf("    2: %s, %s, %s, %s\n",
  474:                 d_LST, d_VIN, d_VRL, d_VCX);
  475:         printf("    1: %s\n", d_CPL);
  476:         printf("->  1: %s\n\n", d_VCX);
  477: 
  478:         printf("    2: %s, %s, %s, %s\n",
  479:                 d_LST, d_MIN, d_MRL, d_MCX);
  480:         printf("    1: %s\n", d_INT);
  481:         printf("->  1: %s\n\n", d_MIN);
  482: 
  483:         printf("    2: %s, %s, %s, %s\n",
  484:                 d_LST, d_MIN, d_MRL, d_MCX);
  485:         printf("    1: %s\n", d_REL);
  486:         printf("->  1: %s\n\n", d_MRL);
  487: 
  488:         printf("    2: %s, %s, %s, %s\n",
  489:                 d_LST, d_MIN, d_MRL, d_MCX);
  490:         printf("    1: %s\n", d_CPL);
  491:         printf("->  1: %s\n\n", d_MCX);
  492: 
  493:         printf("    2: %s\n", d_NOM);
  494:         printf("    1: %s, %s, %s\n", d_INT, d_REL, d_CPL);
  495:         return;
  496:     }
  497:     else if ((*s_etat_processus).test_instruction == 'Y')
  498:     {
  499:         (*s_etat_processus).nombre_arguments = -1;
  500:         return;
  501:     }
  502: 
  503:     if (test_cfsf(s_etat_processus, 31) == d_vrai)
  504:     {
  505:         if (empilement_pile_last(s_etat_processus, 2) == d_erreur)
  506:         {
  507:             return;
  508:         }
  509:     }
  510: 
  511:     if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
  512:             &s_objet_1) == d_erreur)
  513:     {
  514:         (*s_etat_processus).erreur_execution = d_ex_manque_argument;
  515:         return;
  516:     }
  517: 
  518:     if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
  519:             &s_objet_2) == d_erreur)
  520:     {
  521:         liberation(s_etat_processus, s_objet_1);
  522: 
  523:         (*s_etat_processus).erreur_execution = d_ex_manque_argument;
  524:         return;
  525:     }
  526: 
  527:     if ((*s_objet_2).type == NOM)
  528:     {
  529:         argument_nom = d_vrai;
  530: 
  531:         if (recherche_variable(s_etat_processus, (*((struct_nom *)
  532:                 (*s_objet_2).objet)).nom) == d_faux)
  533:         {
  534:             (*s_etat_processus).erreur_systeme = d_es;
  535:             (*s_etat_processus).erreur_execution = d_ex_variable_non_definie;
  536: 
  537:             liberation(s_etat_processus, s_objet_1);
  538:             liberation(s_etat_processus, s_objet_2);
  539: 
  540:             return;
  541:         }
  542: 
  543:         liberation(s_etat_processus, s_objet_2);
  544: 
  545:         if ((*(*s_etat_processus).pointeur_variable_courante)
  546:                 .variable_verrouillee == d_vrai)
  547:         {
  548:             liberation(s_etat_processus, s_objet_1);
  549: 
  550:             (*s_etat_processus).erreur_execution = d_ex_variable_verrouillee;
  551:             return;
  552:         }
  553: 
  554:         if ((*(*s_etat_processus).pointeur_variable_courante).objet == NULL)
  555:         {
  556:             // Variable partagée
  557: 
  558:             variable_partagee = d_vrai;
  559: 
  560:             if (recherche_variable_partagee(s_etat_processus,
  561:                     (*(*s_etat_processus).pointeur_variable_courante).nom,
  562:                     (*(*s_etat_processus).pointeur_variable_courante)
  563:                     .variable_partagee, (*(*s_etat_processus)
  564:                     .pointeur_variable_courante).origine)
  565:                     == NULL)
  566:             {
  567:                 (*s_etat_processus).erreur_systeme = d_es;
  568:                 (*s_etat_processus).erreur_execution =
  569:                         d_ex_variable_non_definie;
  570: 
  571:                 liberation(s_etat_processus, s_objet_1);
  572:                 liberation(s_etat_processus, s_objet_2);
  573: 
  574:                 return;
  575:             }
  576: 
  577:             s_objet_2 = (*(*s_etat_processus)
  578:                     .pointeur_variable_partagee_courante).objet;
  579:         }
  580:         else
  581:         {
  582:             // Variable privée
  583: 
  584:             s_objet_2 = (*(*s_etat_processus).pointeur_variable_courante).objet;
  585:             variable_partagee = d_faux;
  586:         }
  587:     }
  588:     else
  589:     {
  590:         argument_nom = d_faux;
  591:         variable_partagee = d_faux;
  592:     }
  593:     
  594: /*
  595: --------------------------------------------------------------------------------
  596:   Tableau créé à partir d'une spécification de dimension
  597: --------------------------------------------------------------------------------
  598: */
  599: 
  600:     if ((*s_objet_2).type == LST)
  601:     {
  602:         l_element_courant = (*s_objet_2).objet;
  603:         nombre_dimensions = 0;
  604: 
  605:         while(l_element_courant != NULL)
  606:         {
  607:             nombre_dimensions++;
  608:             l_element_courant = (*l_element_courant).suivant;
  609:         }
  610: 
  611:         if ((nombre_dimensions != 1) && (nombre_dimensions != 2))
  612:         {
  613:             liberation(s_etat_processus, s_objet_1);
  614: 
  615:             if (argument_nom == d_faux)
  616:             {
  617:                 liberation(s_etat_processus, s_objet_2);
  618:             }
  619:             else
  620:             {
  621:                 if (variable_partagee == d_vrai)
  622:                 {
  623:                     if (pthread_mutex_unlock(&((*(*s_etat_processus)
  624:                             .pointeur_variable_partagee_courante).mutex)) != 0)
  625:                     {
  626:                         (*s_etat_processus).erreur_systeme = d_es_processus;
  627:                         return;
  628:                     }
  629:                 }
  630:             }
  631: 
  632:             (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
  633:             return;
  634:         }
  635: 
  636:         nombre_colonnes = 0;
  637:         nombre_lignes = 0;
  638: 
  639:         l_element_courant = (*s_objet_2).objet;
  640: 
  641:         while(l_element_courant != NULL)
  642:         {
  643:             if ((*(*l_element_courant).donnee).type != INT)
  644:             {
  645:                 liberation(s_etat_processus, s_objet_1);
  646: 
  647:                 if (argument_nom == d_faux)
  648:                 {
  649:                     liberation(s_etat_processus, s_objet_2);
  650:                 }
  651:                 else
  652:                 {
  653:                     if (variable_partagee == d_vrai)
  654:                     {
  655:                         if (pthread_mutex_unlock(&((*(*s_etat_processus)
  656:                                 .pointeur_variable_partagee_courante).mutex))
  657:                                 != 0)
  658:                         {
  659:                             (*s_etat_processus).erreur_systeme = d_es_processus;
  660:                             return;
  661:                         }
  662:                     }
  663:                 }
  664: 
  665:                 (*s_etat_processus).erreur_execution =
  666:                         d_ex_erreur_type_argument;
  667:                 return;
  668:             }
  669: 
  670:             if ((*((integer8 *) (*(*l_element_courant).donnee).objet)) <= 0)
  671:             {
  672:                 liberation(s_etat_processus, s_objet_1);
  673: 
  674:                 if (argument_nom == d_faux)
  675:                 {
  676:                     liberation(s_etat_processus, s_objet_2);
  677:                 }
  678:                 else
  679:                 {
  680:                     if (variable_partagee == d_vrai)
  681:                     {
  682:                         if (pthread_mutex_unlock(&((*(*s_etat_processus)
  683:                                 .pointeur_variable_partagee_courante).mutex))
  684:                                 != 0)
  685:                         {
  686:                             (*s_etat_processus).erreur_systeme = d_es_processus;
  687:                             return;
  688:                         }
  689:                     }
  690:                 }
  691: 
  692:                 (*s_etat_processus).erreur_execution = d_ex_argument_invalide;
  693:                 return;
  694:             }
  695: 
  696:             if (nombre_lignes == 0)
  697:             {
  698:                 nombre_lignes = (*((integer8 *)
  699:                         (*(*l_element_courant).donnee).objet));
  700:             }
  701:             else
  702:             {
  703:                 nombre_colonnes = (*((integer8 *)
  704:                         (*(*l_element_courant).donnee).objet));
  705:             }
  706: 
  707:             l_element_courant = (*l_element_courant).suivant;
  708:         }
  709:     }
  710: 
  711: /*
  712: --------------------------------------------------------------------------------
  713:   Tableau créé à partir des dimensions d'un autre tableau
  714: --------------------------------------------------------------------------------
  715: */
  716: 
  717:     else if (((*s_objet_2).type == VIN) ||
  718:             ((*s_objet_2).type == VRL) ||
  719:             ((*s_objet_2).type == VCX))
  720:     {
  721:         nombre_dimensions = 1;
  722:         nombre_lignes = (*((struct_vecteur *) (*s_objet_2).objet)).taille;
  723:         nombre_colonnes = 0;
  724:     }
  725:     else if (((*s_objet_2).type == MIN) ||
  726:             ((*s_objet_2).type == MRL) ||
  727:             ((*s_objet_2).type == MCX))
  728:     {
  729:         nombre_dimensions = 2;
  730:         nombre_lignes = (*((struct_matrice *) (*s_objet_2).objet))
  731:                 .nombre_lignes;
  732:         nombre_colonnes = (*((struct_matrice *) (*s_objet_2).objet))
  733:                 .nombre_colonnes;
  734:     }
  735: 
  736: /*
  737: --------------------------------------------------------------------------------
  738:   Spécifications incorrectes
  739: --------------------------------------------------------------------------------
  740: */
  741: 
  742:     else
  743:     {
  744:         if (argument_nom == d_faux)
  745:         {
  746:             liberation(s_etat_processus, s_objet_2);
  747:         }
  748:         else
  749:         {
  750:             if (variable_partagee == d_vrai)
  751:             {
  752:                 if (pthread_mutex_unlock(&((*(*s_etat_processus)
  753:                         .pointeur_variable_partagee_courante).mutex)) != 0)
  754:                 {
  755:                     (*s_etat_processus).erreur_systeme = d_es_processus;
  756:                     return;
  757:                 }
  758:             }
  759:         }
  760: 
  761:         liberation(s_etat_processus, s_objet_1);
  762: 
  763:         (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
  764:         return;
  765:     }
  766: 
  767: /*
  768: --------------------------------------------------------------------------------
  769:   Création effective du tableau
  770: --------------------------------------------------------------------------------
  771: */
  772: 
  773:     if (((*s_objet_1).type != INT) &&
  774:             ((*s_objet_1).type != REL) &&
  775:             ((*s_objet_1).type != CPL))
  776:     {
  777:         if (argument_nom == d_faux)
  778:         {
  779:             liberation(s_etat_processus, s_objet_2);
  780:         }
  781:         else
  782:         {
  783:             if (variable_partagee == d_vrai)
  784:             {
  785:                 if (pthread_mutex_unlock(&((*(*s_etat_processus)
  786:                         .pointeur_variable_partagee_courante).mutex)) != 0)
  787:                 {
  788:                     (*s_etat_processus).erreur_systeme = d_es_processus;
  789:                     return;
  790:                 }
  791:             }
  792:         }
  793: 
  794:         liberation(s_etat_processus, s_objet_1);
  795: 
  796:         (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
  797:         return;
  798:     }
  799: 
  800:     if (nombre_dimensions == 1)
  801:     {
  802:         /*
  803:          * Vecteur
  804:          */
  805: 
  806:         if ((*s_objet_1).type == INT)
  807:         {
  808:             if ((s_objet_resultat = allocation(s_etat_processus, VIN))
  809:                     == NULL)
  810:             {
  811:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  812:                 return;
  813:             }
  814: 
  815:             (*((struct_vecteur *) (*s_objet_resultat).objet)).taille =
  816:                     nombre_lignes;
  817: 
  818:             if (((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau =
  819:                     malloc(((size_t) nombre_lignes) * sizeof(integer8)))
  820:                     == NULL)
  821:             {
  822:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  823:                 return;
  824:             }
  825: 
  826:             for(i = 0; i < nombre_lignes; i++)
  827:             {
  828:                 ((integer8 *) (*((struct_vecteur *) (*s_objet_resultat)
  829:                         .objet)).tableau)[i] = (*((integer8 *)
  830:                         (*s_objet_1).objet));
  831:             }
  832:         }
  833:         else if ((*s_objet_1).type == REL)
  834:         {
  835:             if ((s_objet_resultat = allocation(s_etat_processus, VRL))
  836:                     == NULL)
  837:             {
  838:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  839:                 return;
  840:             }
  841: 
  842:             (*((struct_vecteur *) (*s_objet_resultat).objet)).taille =
  843:                     nombre_lignes;
  844: 
  845:             if (((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau =
  846:                     malloc(((size_t) nombre_lignes) * sizeof(real8))) == NULL)
  847:             {
  848:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  849:                 return;
  850:             }
  851: 
  852:             for(i = 0; i < nombre_lignes; i++)
  853:             {
  854:                 ((real8 *) (*((struct_vecteur *) (*s_objet_resultat)
  855:                         .objet)).tableau)[i] = (*((real8 *)
  856:                         (*s_objet_1).objet));
  857:             }
  858:         }
  859:         else
  860:         {
  861:             if ((s_objet_resultat = allocation(s_etat_processus, VCX))
  862:                     == NULL)
  863:             {
  864:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  865:                 return;
  866:             }
  867: 
  868:             (*((struct_vecteur *) (*s_objet_resultat).objet)).taille =
  869:                     nombre_lignes;
  870: 
  871:             if (((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau =
  872:                     malloc(((size_t) nombre_lignes) *
  873:                     sizeof(struct_complexe16))) == NULL)
  874:             {
  875:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  876:                 return;
  877:             }
  878: 
  879:             for(i = 0; i < nombre_lignes; i++)
  880:             {
  881:                 ((struct_complexe16 *) (*((struct_vecteur *) (*s_objet_resultat)
  882:                         .objet)).tableau)[i].partie_reelle =
  883:                         (*((struct_complexe16 *)
  884:                         (*s_objet_1).objet)).partie_reelle;
  885:                 ((struct_complexe16 *) (*((struct_vecteur *) (*s_objet_resultat)
  886:                         .objet)).tableau)[i].partie_imaginaire =
  887:                         (*((struct_complexe16 *)
  888:                         (*s_objet_1).objet)).partie_imaginaire;
  889:             }
  890:         }
  891:     }
  892:     else
  893:     {
  894:         /*
  895:          * Matrice
  896:          */
  897: 
  898:         if ((*s_objet_1).type == INT)
  899:         {
  900:             if ((s_objet_resultat = allocation(s_etat_processus, MIN))
  901:                     == NULL)
  902:             {
  903:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  904:                 return;
  905:             }
  906: 
  907:             (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_lignes =
  908:                     nombre_lignes;
  909:             (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_colonnes =
  910:                     nombre_colonnes;
  911: 
  912:             if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau =
  913:                     malloc(((size_t) nombre_lignes) * sizeof(integer8 *)))
  914:                     == NULL)
  915:             {
  916:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  917:                 return;
  918:             }
  919: 
  920:             for(i = 0; i < nombre_lignes; i++)
  921:             {
  922:                 if ((((integer8 **) (*((struct_matrice *) (*s_objet_resultat)
  923:                         .objet)).tableau)[i] = malloc(((size_t)
  924:                         nombre_colonnes) * sizeof(integer8))) == NULL)
  925:                 {
  926:                     (*s_etat_processus).erreur_systeme =
  927:                             d_es_allocation_memoire;
  928:                     return;
  929:                 }
  930: 
  931:                 for(j = 0; j < nombre_colonnes; j++)
  932:                 {
  933:                     ((integer8 **) (*((struct_matrice *) (*s_objet_resultat)
  934:                             .objet)).tableau)[i][j] = (*((integer8 *)
  935:                             (*s_objet_1).objet));
  936:                 }
  937:             }
  938:         }
  939:         else if ((*s_objet_1).type == REL)
  940:         {
  941:             if ((s_objet_resultat = allocation(s_etat_processus, MRL))
  942:                     == NULL)
  943:             {
  944:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  945:                 return;
  946:             }
  947: 
  948:             (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_lignes =
  949:                     nombre_lignes;
  950:             (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_colonnes =
  951:                     nombre_colonnes;
  952: 
  953:             if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau =
  954:                     malloc(((size_t) nombre_lignes) * sizeof(real8 *))) == NULL)
  955:             {
  956:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  957:                 return;
  958:             }
  959: 
  960:             for(i = 0; i < nombre_lignes; i++)
  961:             {
  962:                 if ((((real8 **) (*((struct_matrice *) (*s_objet_resultat)
  963:                         .objet)).tableau)[i] = malloc(((size_t)
  964:                         nombre_colonnes) * sizeof(real8))) == NULL)
  965:                 {
  966:                     (*s_etat_processus).erreur_systeme =
  967:                             d_es_allocation_memoire;
  968:                     return;
  969:                 }
  970: 
  971:                 for(j = 0; j < nombre_colonnes; j++)
  972:                 {
  973:                     ((real8 **) (*((struct_matrice *) (*s_objet_resultat)
  974:                             .objet)).tableau)[i][j] = (*((real8 *)
  975:                             (*s_objet_1).objet));
  976:                 }
  977:             }
  978:         }
  979:         else
  980:         {
  981:             if ((s_objet_resultat = allocation(s_etat_processus, MCX))
  982:                     == NULL)
  983:             {
  984:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  985:                 return;
  986:             }
  987: 
  988:             (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_lignes =
  989:                     nombre_lignes;
  990:             (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_colonnes =
  991:                     nombre_colonnes;
  992: 
  993:             if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau =
  994:                     malloc(((size_t) nombre_lignes) *
  995:                     sizeof(struct_complexe16 *))) == NULL)
  996:             {
  997:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  998:                 return;
  999:             }
 1000: 
 1001:             for(i = 0; i < nombre_lignes; i++)
 1002:             {
 1003:                 if ((((struct_complexe16 **) (*((struct_matrice *)
 1004:                         (*s_objet_resultat).objet)).tableau)[i] =
 1005:                         malloc(((size_t) nombre_colonnes) *
 1006:                         sizeof(struct_complexe16))) == NULL)
 1007:                 {
 1008:                     (*s_etat_processus).erreur_systeme =
 1009:                             d_es_allocation_memoire;
 1010:                     return;
 1011:                 }
 1012: 
 1013:                 for(j = 0; j < nombre_colonnes; j++)
 1014:                 {
 1015:                     ((struct_complexe16 **) (*((struct_matrice *)
 1016:                             (*s_objet_resultat).objet)).tableau)[i][j]
 1017:                             .partie_reelle = (*((struct_complexe16 *)
 1018:                             (*s_objet_1).objet)).partie_reelle;
 1019:                     ((struct_complexe16 **) (*((struct_matrice *)
 1020:                             (*s_objet_resultat).objet)).tableau)[i][j]
 1021:                             .partie_imaginaire = (*((struct_complexe16 *)
 1022:                             (*s_objet_1).objet)).partie_imaginaire;
 1023:                 }
 1024:             }
 1025:         }
 1026:     }
 1027: 
 1028:     liberation(s_etat_processus, s_objet_1);
 1029:     liberation(s_etat_processus, s_objet_2);
 1030: 
 1031:     if (argument_nom == d_faux)
 1032:     {
 1033:         if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
 1034:                 s_objet_resultat) == d_erreur)
 1035:         {
 1036:             return;
 1037:         }
 1038:     }
 1039:     else
 1040:     {
 1041:         if (variable_partagee == d_vrai)
 1042:         {
 1043:             (*(*s_etat_processus).pointeur_variable_partagee_courante).objet =
 1044:                     s_objet_resultat;
 1045: 
 1046:             if (pthread_mutex_unlock(&((*(*s_etat_processus)
 1047:                     .pointeur_variable_partagee_courante).mutex)) != 0)
 1048:             {
 1049:                 (*s_etat_processus).erreur_systeme = d_es_processus;
 1050:                 return;
 1051:             }
 1052:         }
 1053:         else
 1054:         {
 1055:             (*(*s_etat_processus).pointeur_variable_courante).objet =
 1056:                     s_objet_resultat;
 1057:         }
 1058:     }
 1059: 
 1060:     return;
 1061: }
 1062: 
 1063: 
 1064: /*
 1065: ================================================================================
 1066:   Fonction 'cross'
 1067: ================================================================================
 1068:   Entrées : structure processus
 1069: --------------------------------------------------------------------------------
 1070:   Sorties :
 1071: --------------------------------------------------------------------------------
 1072:   Effets de bord : néant
 1073: ================================================================================
 1074: */
 1075: 
 1076: void
 1077: instruction_cross(struct_processus *s_etat_processus)
 1078: {
 1079:     integer8                        tampon_1;
 1080:     integer8                        tampon_2;
 1081: 
 1082:     logical1                        depassement;
 1083: 
 1084:     struct_complexe16               registre_a;
 1085:     struct_complexe16               registre_b;
 1086: 
 1087:     struct_objet                    *s_objet_argument_1;
 1088:     struct_objet                    *s_objet_argument_2;
 1089:     struct_objet                    *s_objet_resultat;
 1090: 
 1091:     (*s_etat_processus).erreur_execution = d_ex;
 1092: 
 1093:     if ((*s_etat_processus).affichage_arguments == 'Y')
 1094:     {
 1095:         printf("\n  CROSS ");
 1096: 
 1097:         if ((*s_etat_processus).langue == 'F')
 1098:         {
 1099:             printf("(produit vectoriel)\n\n");
 1100:         }
 1101:         else
 1102:         {
 1103:             printf("(product of vectors)\n\n");
 1104:         }
 1105: 
 1106:         printf("    2: %s, %s\n", d_VIN, d_VRL);
 1107:         printf("    1: %s, %s\n", d_VIN, d_VRL);
 1108:         printf("->  1: %s, %s\n\n", d_VIN, d_VRL);
 1109: 
 1110:         printf("    2: %s, %s, %s\n", d_VIN, d_VRL, d_VCX);
 1111:         printf("    1: %s\n", d_VCX);
 1112:         printf("->  1: %s\n\n", d_VCX);
 1113: 
 1114:         printf("    2: %s\n", d_VCX);
 1115:         printf("    1: %s, %s, %s\n", d_VIN, d_VRL, d_VCX);
 1116:         printf("->  1: %s\n", d_VCX);
 1117: 
 1118:         return;
 1119:     }
 1120:     else if ((*s_etat_processus).test_instruction == 'Y')
 1121:     {
 1122:         (*s_etat_processus).nombre_arguments = -1;
 1123:         return;
 1124:     }
 1125: 
 1126:     if (test_cfsf(s_etat_processus, 31) == d_vrai)
 1127:     {
 1128:         if (empilement_pile_last(s_etat_processus, 2) == d_erreur)
 1129:         {
 1130:             return;
 1131:         }
 1132:     }
 1133: 
 1134:     if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
 1135:             &s_objet_argument_1) == d_erreur)
 1136:     {
 1137:         (*s_etat_processus).erreur_execution = d_ex_manque_argument;
 1138:         return;
 1139:     }
 1140: 
 1141:     if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
 1142:             &s_objet_argument_2) == d_erreur)
 1143:     {
 1144:         liberation(s_etat_processus, s_objet_argument_1);
 1145: 
 1146:         (*s_etat_processus).erreur_execution = d_ex_manque_argument;
 1147:         return;
 1148:     }
 1149: 
 1150: /*
 1151: --------------------------------------------------------------------------------
 1152:   Résultat entier
 1153: --------------------------------------------------------------------------------
 1154: */
 1155: 
 1156:     if (((*s_objet_argument_1).type == VIN) &&
 1157:             ((*s_objet_argument_2).type == VIN))
 1158:     {
 1159:         if (((*((struct_vecteur *)  (*s_objet_argument_1).objet)).taille != 3)
 1160:                 || ((*((struct_vecteur *)  (*s_objet_argument_1).objet)).taille
 1161:                 != 3))
 1162:         {
 1163:             liberation(s_etat_processus, s_objet_argument_1);
 1164:             liberation(s_etat_processus, s_objet_argument_2);
 1165: 
 1166:             (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
 1167:             return;
 1168:         }
 1169: 
 1170:         if ((s_objet_resultat = allocation(s_etat_processus, VIN))
 1171:                 == NULL)
 1172:         {
 1173:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1174:             return;
 1175:         }
 1176: 
 1177:         (*((struct_vecteur *) (*s_objet_resultat).objet)).taille = 3;
 1178: 
 1179:         if (((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau =
 1180:                 malloc(3 * sizeof(integer8))) == NULL)
 1181:         {
 1182:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1183:             return;
 1184:         }
 1185: 
 1186:         depassement = depassement_multiplication(&(((integer8 *)
 1187:                 (*((struct_vecteur *) (*s_objet_argument_2).objet))
 1188:                 .tableau)[1]), &(((integer8 *) (*((struct_vecteur *)
 1189:                 (*s_objet_argument_1).objet)).tableau)[2]), &(tampon_1));
 1190: 
 1191:         depassement |= depassement_multiplication(&(((integer8 *)
 1192:                 (*((struct_vecteur *) (*s_objet_argument_2).objet))
 1193:                 .tableau)[2]), &(((integer8 *) (*((struct_vecteur *)
 1194:                 (*s_objet_argument_1).objet)).tableau)[1]), &(tampon_2));
 1195: 
 1196:         depassement |= depassement_soustraction(&(tampon_1), &(tampon_2),
 1197:                 &(((integer8 *) (*((struct_vecteur *) (*s_objet_resultat)
 1198:                 .objet)).tableau)[0]));
 1199: 
 1200:         depassement |= depassement_multiplication(&(((integer8 *)
 1201:                 (*((struct_vecteur *) (*s_objet_argument_2).objet))
 1202:                 .tableau)[2]), &(((integer8 *) (*((struct_vecteur *)
 1203:                 (*s_objet_argument_1).objet)).tableau)[0]), &(tampon_1));
 1204: 
 1205:         depassement |= depassement_multiplication(&(((integer8 *)
 1206:                 (*((struct_vecteur *) (*s_objet_argument_2).objet))
 1207:                 .tableau)[0]), &(((integer8 *) (*((struct_vecteur *)
 1208:                 (*s_objet_argument_1).objet)).tableau)[2]), &(tampon_2));
 1209: 
 1210:         depassement |= depassement_soustraction(&(tampon_1), &(tampon_2),
 1211:                 &(((integer8 *) (*((struct_vecteur *) (*s_objet_resultat)
 1212:                 .objet)).tableau)[1]));
 1213: 
 1214:         depassement |= depassement_multiplication(&(((integer8 *)
 1215:                 (*((struct_vecteur *) (*s_objet_argument_2).objet))
 1216:                 .tableau)[0]), &(((integer8 *) (*((struct_vecteur *)
 1217:                 (*s_objet_argument_1).objet)).tableau)[1]), &(tampon_1));
 1218: 
 1219:         depassement |= depassement_multiplication(&(((integer8 *)
 1220:                 (*((struct_vecteur *) (*s_objet_argument_2).objet))
 1221:                 .tableau)[1]), &(((integer8 *) (*((struct_vecteur *)
 1222:                 (*s_objet_argument_1).objet)).tableau)[0]), &(tampon_2));
 1223: 
 1224:         depassement |= depassement_soustraction(&(tampon_1), &(tampon_2),
 1225:                 &(((integer8 *) (*((struct_vecteur *) (*s_objet_resultat)
 1226:                 .objet)).tableau)[2]));
 1227: 
 1228:         if (depassement != d_absence_erreur)
 1229:         {
 1230:             (*s_objet_resultat).type = VRL;
 1231:             (*((struct_vecteur *) (*s_objet_resultat).objet)).type = 'R';
 1232:             free((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau);
 1233: 
 1234:             if (((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau =
 1235:                     malloc(3 * sizeof(real8))) == NULL)
 1236:             {
 1237:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1238:                 return;
 1239:             }
 1240: 
 1241:             ((real8 *) (*((struct_vecteur *) (*s_objet_resultat).objet))
 1242:                     .tableau)[0] = ((real8) ((integer8 *) (*((struct_vecteur *)
 1243:                     (*s_objet_argument_2).objet)).tableau)[1] * (real8)
 1244:                     ((integer8 *) (*((struct_vecteur *) (*s_objet_argument_1)
 1245:                     .objet)).tableau)[2]) - ((real8) ((integer8 *)
 1246:                     (*((struct_vecteur *) (*s_objet_argument_2).objet))
 1247:                     .tableau)[2] * (real8) ((integer8 *) (*((struct_vecteur *)
 1248:                     (*s_objet_argument_1).objet)).tableau)[1]);
 1249:             ((real8 *) (*((struct_vecteur *) (*s_objet_resultat).objet))
 1250:                     .tableau)[1] = ((real8) ((integer8 *) (*((struct_vecteur *)
 1251:                     (*s_objet_argument_2).objet)).tableau)[2] * (real8)
 1252:                     ((integer8 *) (*((struct_vecteur *) (*s_objet_argument_1)
 1253:                     .objet)).tableau)[0]) - ((real8) ((integer8 *)
 1254:                     (*((struct_vecteur *) (*s_objet_argument_2).objet))
 1255:                     .tableau)[0] * (real8) ((integer8 *) (*((struct_vecteur *)
 1256:                     (*s_objet_argument_1).objet)).tableau)[2]);
 1257:             ((real8 *) (*((struct_vecteur *) (*s_objet_resultat).objet))
 1258:                     .tableau)[2] = ((real8) ((integer8 *) (*((struct_vecteur *)
 1259:                     (*s_objet_argument_2).objet)).tableau)[0] * (real8)
 1260:                     ((integer8 *) (*((struct_vecteur *) (*s_objet_argument_1)
 1261:                     .objet)).tableau)[1]) - ((real8) ((integer8 *)
 1262:                     (*((struct_vecteur *) (*s_objet_argument_2)
 1263:                     .objet)).tableau)[1] * (real8) ((integer8 *)
 1264:                     (*((struct_vecteur *) (*s_objet_argument_1).objet))
 1265:                     .tableau)[0]);
 1266:         }
 1267:     }
 1268: 
 1269: /*
 1270: --------------------------------------------------------------------------------
 1271:   Résultat réel
 1272: --------------------------------------------------------------------------------
 1273: */
 1274: 
 1275:     else if (((*s_objet_argument_1).type == VRL) &&
 1276:             ((*s_objet_argument_2).type == VIN))
 1277:     {
 1278:         if (((*((struct_vecteur *)  (*s_objet_argument_1).objet)).taille != 3)
 1279:                 || ((*((struct_vecteur *)  (*s_objet_argument_1).objet)).taille
 1280:                 != 3))
 1281:         {
 1282:             liberation(s_etat_processus, s_objet_argument_1);
 1283:             liberation(s_etat_processus, s_objet_argument_2);
 1284: 
 1285:             (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
 1286:             return;
 1287:         }
 1288: 
 1289:         if ((s_objet_resultat = allocation(s_etat_processus, VRL))
 1290:                 == NULL)
 1291:         {
 1292:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1293:             return;
 1294:         }
 1295: 
 1296:         (*((struct_vecteur *) (*s_objet_resultat).objet)).taille = 3;
 1297: 
 1298:         if (((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau =
 1299:                 malloc(3 * sizeof(real8))) == NULL)
 1300:         {
 1301:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1302:             return;
 1303:         }
 1304: 
 1305:         ((real8 *) (*((struct_vecteur *) (*s_objet_resultat).objet))
 1306:                 .tableau)[0] = ((real8) ((integer8 *) (*((struct_vecteur *)
 1307:                 (*s_objet_argument_2).objet)).tableau)[1] * ((real8 *)
 1308:                 (*((struct_vecteur *) (*s_objet_argument_1).objet)).tableau)[2])
 1309:                 - ((real8) ((integer8 *) (*((struct_vecteur *)
 1310:                 (*s_objet_argument_2).objet)).tableau)[2] *
 1311:                 ((real8 *) (*((struct_vecteur *)
 1312:                 (*s_objet_argument_1).objet)).tableau)[1]);
 1313:         ((real8 *) (*((struct_vecteur *) (*s_objet_resultat).objet))
 1314:                 .tableau)[1] = ((real8) ((integer8 *) (*((struct_vecteur *)
 1315:                 (*s_objet_argument_2).objet)).tableau)[2] * ((real8 *)
 1316:                 (*((struct_vecteur *) (*s_objet_argument_1).objet)).tableau)[0])
 1317:                 - ((real8) ((integer8 *) (*((struct_vecteur *)
 1318:                 (*s_objet_argument_2) .objet)).tableau)[0] *
 1319:                 ((real8 *) (*((struct_vecteur *)
 1320:                 (*s_objet_argument_1).objet)).tableau)[2]);
 1321:         ((real8 *) (*((struct_vecteur *) (*s_objet_resultat).objet))
 1322:                 .tableau)[2] = ((real8) ((integer8 *) (*((struct_vecteur *)
 1323:                 (*s_objet_argument_2).objet)).tableau)[0] * ((real8 *)
 1324:                 (*((struct_vecteur *) (*s_objet_argument_1).objet)).tableau)[1])
 1325:                 - ((real8) ((integer8 *) (*((struct_vecteur *)
 1326:                 (*s_objet_argument_2).objet)).tableau)[1] *
 1327:                 ((real8 *) (*((struct_vecteur *)
 1328:                 (*s_objet_argument_1).objet)).tableau)[0]);
 1329:     }
 1330:     else if (((*s_objet_argument_1).type == VIN) &&
 1331:             ((*s_objet_argument_2).type == VRL))
 1332:     {
 1333:         if (((*((struct_vecteur *)  (*s_objet_argument_1).objet)).taille != 3)
 1334:                 || ((*((struct_vecteur *)  (*s_objet_argument_1).objet)).taille
 1335:                 != 3))
 1336:         {
 1337:             liberation(s_etat_processus, s_objet_argument_1);
 1338:             liberation(s_etat_processus, s_objet_argument_2);
 1339: 
 1340:             (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
 1341:             return;
 1342:         }
 1343: 
 1344:         if ((s_objet_resultat = allocation(s_etat_processus, VRL))
 1345:                 == NULL)
 1346:         {
 1347:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1348:             return;
 1349:         }
 1350: 
 1351:         (*((struct_vecteur *) (*s_objet_resultat).objet)).taille = 3;
 1352: 
 1353:         if (((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau =
 1354:                 malloc(3 * sizeof(real8))) == NULL)
 1355:         {
 1356:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1357:             return;
 1358:         }
 1359: 
 1360:         ((real8 *) (*((struct_vecteur *) (*s_objet_resultat).objet))
 1361:                 .tableau)[0] = (((real8 *) (*((struct_vecteur *)
 1362:                 (*s_objet_argument_2).objet)).tableau)[1] * (real8)
 1363:                 ((integer8 *) (*((struct_vecteur *)
 1364:                 (*s_objet_argument_1).objet)).tableau)[2])
 1365:                 - (((real8 *) (*((struct_vecteur *) (*s_objet_argument_2)
 1366:                 .objet)).tableau)[2] * (real8) ((integer8 *)
 1367:                 (*((struct_vecteur *)
 1368:                 (*s_objet_argument_1).objet)).tableau)[1]);
 1369:         ((real8 *) (*((struct_vecteur *) (*s_objet_resultat).objet))
 1370:                 .tableau)[1] = (((real8 *) (*((struct_vecteur *)
 1371:                 (*s_objet_argument_2).objet)).tableau)[2] * (real8)
 1372:                 ((integer8 *) (*((struct_vecteur *) (*s_objet_argument_1)
 1373:                 .objet)).tableau)[0]) - (((real8 *) (*((struct_vecteur *)
 1374:                 (*s_objet_argument_2) .objet)).tableau)[0] * (real8)
 1375:                 ((integer8 *) (*((struct_vecteur *)
 1376:                 (*s_objet_argument_1).objet)).tableau)[2]);
 1377:         ((real8 *) (*((struct_vecteur *) (*s_objet_resultat).objet))
 1378:                 .tableau)[2] = (((real8 *) (*((struct_vecteur *)
 1379:                 (*s_objet_argument_2).objet)).tableau)[0] * (real8)
 1380:                 ((integer8 *) (*((struct_vecteur *) (*s_objet_argument_1)
 1381:                 .objet)).tableau)[1]) - (((real8 *) (*((struct_vecteur *)
 1382:                 (*s_objet_argument_2) .objet)).tableau)[1] * (real8)
 1383:                 ((integer8 *) (*((struct_vecteur *)
 1384:                 (*s_objet_argument_1).objet)).tableau)[0]);
 1385:     }
 1386:     else if (((*s_objet_argument_1).type == VRL) &&
 1387:             ((*s_objet_argument_2).type == VRL))
 1388:     {
 1389:         if (((*((struct_vecteur *)  (*s_objet_argument_1).objet)).taille != 3)
 1390:                 || ((*((struct_vecteur *)  (*s_objet_argument_1).objet)).taille
 1391:                 != 3))
 1392:         {
 1393:             liberation(s_etat_processus, s_objet_argument_1);
 1394:             liberation(s_etat_processus, s_objet_argument_2);
 1395: 
 1396:             (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
 1397:             return;
 1398:         }
 1399: 
 1400:         if ((s_objet_resultat = allocation(s_etat_processus, VRL))
 1401:                 == NULL)
 1402:         {
 1403:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1404:             return;
 1405:         }
 1406: 
 1407:         (*((struct_vecteur *) (*s_objet_resultat).objet)).taille = 3;
 1408: 
 1409:         if (((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau =
 1410:                 malloc(3 * sizeof(real8))) == NULL)
 1411:         {
 1412:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1413:             return;
 1414:         }
 1415: 
 1416:         ((real8 *) (*((struct_vecteur *) (*s_objet_resultat).objet))
 1417:                 .tableau)[0] = (((real8 *) (*((struct_vecteur *)
 1418:                 (*s_objet_argument_2).objet)).tableau)[1] * ((real8 *)
 1419:                 (*((struct_vecteur *) (*s_objet_argument_1).objet)).tableau)[2])
 1420:                 - (((real8 *) (*((struct_vecteur *) (*s_objet_argument_2)
 1421:                 .objet)).tableau)[2] * ((real8 *) (*((struct_vecteur *)
 1422:                 (*s_objet_argument_1).objet)).tableau)[1]);
 1423:         ((real8 *) (*((struct_vecteur *) (*s_objet_resultat).objet))
 1424:                 .tableau)[1] = (((real8 *) (*((struct_vecteur *)
 1425:                 (*s_objet_argument_2).objet)).tableau)[2] * ((real8 *)
 1426:                 (*((struct_vecteur *) (*s_objet_argument_1).objet)).tableau)[0])
 1427:                 - (((real8 *) (*((struct_vecteur *) (*s_objet_argument_2)
 1428:                 .objet)).tableau)[0] * ((real8 *) (*((struct_vecteur *)
 1429:                 (*s_objet_argument_1).objet)).tableau)[2]);
 1430:         ((real8 *) (*((struct_vecteur *) (*s_objet_resultat).objet))
 1431:                 .tableau)[2] = (((real8 *) (*((struct_vecteur *)
 1432:                 (*s_objet_argument_2).objet)).tableau)[0] * ((real8 *)
 1433:                 (*((struct_vecteur *) (*s_objet_argument_1).objet)).tableau)[1])
 1434:                 - (((real8 *) (*((struct_vecteur *) (*s_objet_argument_2)
 1435:                 .objet)).tableau)[1] * ((real8 *) (*((struct_vecteur *)
 1436:                 (*s_objet_argument_1).objet)).tableau)[0]);
 1437:     }
 1438: 
 1439: /*
 1440: --------------------------------------------------------------------------------
 1441:   Résultat complexe
 1442: --------------------------------------------------------------------------------
 1443: */
 1444: 
 1445:     else if (((*s_objet_argument_1).type == VIN) &&
 1446:             ((*s_objet_argument_2).type == VCX))
 1447:     {
 1448:         if (((*((struct_vecteur *)  (*s_objet_argument_1).objet)).taille != 3)
 1449:                 || ((*((struct_vecteur *)  (*s_objet_argument_1).objet)).taille
 1450:                 != 3))
 1451:         {
 1452:             liberation(s_etat_processus, s_objet_argument_1);
 1453:             liberation(s_etat_processus, s_objet_argument_2);
 1454: 
 1455:             (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
 1456:             return;
 1457:         }
 1458: 
 1459:         if ((s_objet_resultat = allocation(s_etat_processus, VCX))
 1460:                 == NULL)
 1461:         {
 1462:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1463:             return;
 1464:         }
 1465: 
 1466:         (*((struct_vecteur *) (*s_objet_resultat).objet)).taille = 3;
 1467: 
 1468:         if (((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau =
 1469:                 malloc(3 * sizeof(struct_complexe16))) == NULL)
 1470:         {
 1471:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1472:             return;
 1473:         }
 1474: 
 1475:         f77multiplicationci_((&((struct_complexe16 *) (*((struct_vecteur *)
 1476:                 (*s_objet_argument_2).objet)).tableau)[1]),
 1477:                 &(((integer8 *) (*((struct_vecteur *)
 1478:                 (*s_objet_argument_1).objet)).tableau)[2]), &registre_a);
 1479:         f77multiplicationci_((&((struct_complexe16 *) (*((struct_vecteur *)
 1480:                 (*s_objet_argument_2).objet)).tableau)[2]),
 1481:                 &(((integer8 *) (*((struct_vecteur *)
 1482:                 (*s_objet_argument_1).objet)).tableau)[1]), &registre_b);
 1483:         f77soustractioncc_(&registre_a, &registre_b, &(((struct_complexe16 *)
 1484:                 (*((struct_vecteur *) (*s_objet_resultat).objet)).tableau)[0]));
 1485: 
 1486:         f77multiplicationci_((&((struct_complexe16 *) (*((struct_vecteur *)
 1487:                 (*s_objet_argument_2).objet)).tableau)[2]),
 1488:                 &(((integer8 *) (*((struct_vecteur *)
 1489:                 (*s_objet_argument_1).objet)).tableau)[0]), &registre_a);
 1490:         f77multiplicationci_((&((struct_complexe16 *) (*((struct_vecteur *)
 1491:                 (*s_objet_argument_2).objet)).tableau)[0]),
 1492:                 &(((integer8 *) (*((struct_vecteur *)
 1493:                 (*s_objet_argument_1).objet)).tableau)[2]), &registre_b);
 1494:         f77soustractioncc_(&registre_a, &registre_b, &(((struct_complexe16 *)
 1495:                 (*((struct_vecteur *) (*s_objet_resultat).objet)).tableau)[1]));
 1496: 
 1497:         f77multiplicationci_((&((struct_complexe16 *) (*((struct_vecteur *)
 1498:                 (*s_objet_argument_2).objet)).tableau)[0]),
 1499:                 &(((integer8 *) (*((struct_vecteur *)
 1500:                 (*s_objet_argument_1).objet)).tableau)[1]), &registre_a);
 1501:         f77multiplicationci_((&((struct_complexe16 *) (*((struct_vecteur *)
 1502:                 (*s_objet_argument_2).objet)).tableau)[1]),
 1503:                 &(((integer8 *) (*((struct_vecteur *)
 1504:                 (*s_objet_argument_1).objet)).tableau)[0]), &registre_b);
 1505:         f77soustractioncc_(&registre_a, &registre_b, &(((struct_complexe16 *)
 1506:                 (*((struct_vecteur *) (*s_objet_resultat).objet)).tableau)[2]));
 1507:     }
 1508:     else if (((*s_objet_argument_1).type == VRL) &&
 1509:             ((*s_objet_argument_2).type == VCX))
 1510:     {
 1511:         if (((*((struct_vecteur *)  (*s_objet_argument_1).objet)).taille != 3)
 1512:                 || ((*((struct_vecteur *)  (*s_objet_argument_1).objet)).taille
 1513:                 != 3))
 1514:         {
 1515:             liberation(s_etat_processus, s_objet_argument_1);
 1516:             liberation(s_etat_processus, s_objet_argument_2);
 1517: 
 1518:             (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
 1519:             return;
 1520:         }
 1521: 
 1522:         if ((s_objet_resultat = allocation(s_etat_processus, VCX))
 1523:                 == NULL)
 1524:         {
 1525:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1526:             return;
 1527:         }
 1528: 
 1529:         (*((struct_vecteur *) (*s_objet_resultat).objet)).taille = 3;
 1530: 
 1531:         if (((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau =
 1532:                 malloc(3 * sizeof(struct_complexe16))) == NULL)
 1533:         {
 1534:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1535:             return;
 1536:         }
 1537: 
 1538:         f77multiplicationcr_((&((struct_complexe16 *) (*((struct_vecteur *)
 1539:                 (*s_objet_argument_2).objet)).tableau)[1]),
 1540:                 &(((real8 *) (*((struct_vecteur *)
 1541:                 (*s_objet_argument_1).objet)).tableau)[2]), &registre_a);
 1542:         f77multiplicationcr_((&((struct_complexe16 *) (*((struct_vecteur *)
 1543:                 (*s_objet_argument_2).objet)).tableau)[2]),
 1544:                 &(((real8 *) (*((struct_vecteur *)
 1545:                 (*s_objet_argument_1).objet)).tableau)[1]), &registre_b);
 1546:         f77soustractioncc_(&registre_a, &registre_b, &(((struct_complexe16 *)
 1547:                 (*((struct_vecteur *) (*s_objet_resultat).objet)).tableau)[0]));
 1548: 
 1549:         f77multiplicationcr_((&((struct_complexe16 *) (*((struct_vecteur *)
 1550:                 (*s_objet_argument_2).objet)).tableau)[2]),
 1551:                 &(((real8 *) (*((struct_vecteur *)
 1552:                 (*s_objet_argument_1).objet)).tableau)[0]), &registre_a);
 1553:         f77multiplicationcr_((&((struct_complexe16 *) (*((struct_vecteur *)
 1554:                 (*s_objet_argument_2).objet)).tableau)[0]),
 1555:                 &(((real8 *) (*((struct_vecteur *)
 1556:                 (*s_objet_argument_1).objet)).tableau)[2]), &registre_b);
 1557:         f77soustractioncc_(&registre_a, &registre_b, &(((struct_complexe16 *)
 1558:                 (*((struct_vecteur *) (*s_objet_resultat).objet)).tableau)[1]));
 1559: 
 1560:         f77multiplicationcr_((&((struct_complexe16 *) (*((struct_vecteur *)
 1561:                 (*s_objet_argument_2).objet)).tableau)[0]),
 1562:                 &(((real8 *) (*((struct_vecteur *)
 1563:                 (*s_objet_argument_1).objet)).tableau)[1]), &registre_a);
 1564:         f77multiplicationcr_((&((struct_complexe16 *) (*((struct_vecteur *)
 1565:                 (*s_objet_argument_2).objet)).tableau)[1]),
 1566:                 &(((real8 *) (*((struct_vecteur *)
 1567:                 (*s_objet_argument_1).objet)).tableau)[0]), &registre_b);
 1568:         f77soustractioncc_(&registre_a, &registre_b, &(((struct_complexe16 *)
 1569:                 (*((struct_vecteur *) (*s_objet_resultat).objet)).tableau)[2]));
 1570:     }
 1571:     else if (((*s_objet_argument_1).type == VCX) &&
 1572:             ((*s_objet_argument_2).type == VCX))
 1573:     {
 1574:         if (((*((struct_vecteur *)  (*s_objet_argument_1).objet)).taille != 3)
 1575:                 || ((*((struct_vecteur *)  (*s_objet_argument_1).objet)).taille
 1576:                 != 3))
 1577:         {
 1578:             liberation(s_etat_processus, s_objet_argument_1);
 1579:             liberation(s_etat_processus, s_objet_argument_2);
 1580: 
 1581:             (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
 1582:             return;
 1583:         }
 1584: 
 1585:         if ((s_objet_resultat = allocation(s_etat_processus, VCX))
 1586:                 == NULL)
 1587:         {
 1588:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1589:             return;
 1590:         }
 1591: 
 1592:         (*((struct_vecteur *) (*s_objet_resultat).objet)).taille = 3;
 1593: 
 1594:         if (((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau =
 1595:                 malloc(3 * sizeof(struct_complexe16))) == NULL)
 1596:         {
 1597:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1598:             return;
 1599:         }
 1600: 
 1601:         f77multiplicationcc_((&((struct_complexe16 *) (*((struct_vecteur *)
 1602:                 (*s_objet_argument_2).objet)).tableau)[1]),
 1603:                 &(((struct_complexe16 *) (*((struct_vecteur *)
 1604:                 (*s_objet_argument_1).objet)).tableau)[2]), &registre_a);
 1605:         f77multiplicationcc_((&((struct_complexe16 *) (*((struct_vecteur *)
 1606:                 (*s_objet_argument_2).objet)).tableau)[2]),
 1607:                 &(((struct_complexe16 *) (*((struct_vecteur *)
 1608:                 (*s_objet_argument_1).objet)).tableau)[1]), &registre_b);
 1609:         f77soustractioncc_(&registre_a, &registre_b, &(((struct_complexe16 *)
 1610:                 (*((struct_vecteur *) (*s_objet_resultat).objet)).tableau)[0]));
 1611: 
 1612:         f77multiplicationcc_((&((struct_complexe16 *) (*((struct_vecteur *)
 1613:                 (*s_objet_argument_2).objet)).tableau)[2]),
 1614:                 &(((struct_complexe16 *) (*((struct_vecteur *)
 1615:                 (*s_objet_argument_1).objet)).tableau)[0]), &registre_a);
 1616:         f77multiplicationcc_((&((struct_complexe16 *) (*((struct_vecteur *)
 1617:                 (*s_objet_argument_2).objet)).tableau)[0]),
 1618:                 &(((struct_complexe16 *) (*((struct_vecteur *)
 1619:                 (*s_objet_argument_1).objet)).tableau)[2]), &registre_b);
 1620:         f77soustractioncc_(&registre_a, &registre_b, &(((struct_complexe16 *)
 1621:                 (*((struct_vecteur *) (*s_objet_resultat).objet)).tableau)[1]));
 1622: 
 1623:         f77multiplicationcc_((&((struct_complexe16 *) (*((struct_vecteur *)
 1624:                 (*s_objet_argument_2).objet)).tableau)[0]),
 1625:                 &(((struct_complexe16 *) (*((struct_vecteur *)
 1626:                 (*s_objet_argument_1).objet)).tableau)[1]), &registre_a);
 1627:         f77multiplicationcc_((&((struct_complexe16 *) (*((struct_vecteur *)
 1628:                 (*s_objet_argument_2).objet)).tableau)[1]),
 1629:                 &(((struct_complexe16 *) (*((struct_vecteur *)
 1630:                 (*s_objet_argument_1).objet)).tableau)[0]), &registre_b);
 1631:         f77soustractioncc_(&registre_a, &registre_b, &(((struct_complexe16 *)
 1632:                 (*((struct_vecteur *) (*s_objet_resultat).objet)).tableau)[2]));
 1633:     }
 1634:     else if (((*s_objet_argument_2).type == VRL) &&
 1635:             ((*s_objet_argument_1).type == VCX))
 1636:     {
 1637:         if (((*((struct_vecteur *)  (*s_objet_argument_1).objet)).taille != 3)
 1638:                 || ((*((struct_vecteur *)  (*s_objet_argument_1).objet)).taille
 1639:                 != 3))
 1640:         {
 1641:             liberation(s_etat_processus, s_objet_argument_1);
 1642:             liberation(s_etat_processus, s_objet_argument_2);
 1643: 
 1644:             (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
 1645:             return;
 1646:         }
 1647: 
 1648:         if ((s_objet_resultat = allocation(s_etat_processus, VCX))
 1649:                 == NULL)
 1650:         {
 1651:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1652:             return;
 1653:         }
 1654: 
 1655:         (*((struct_vecteur *) (*s_objet_resultat).objet)).taille = 3;
 1656: 
 1657:         if (((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau =
 1658:                 malloc(3 * sizeof(struct_complexe16))) == NULL)
 1659:         {
 1660:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1661:             return;
 1662:         }
 1663: 
 1664:         f77multiplicationcr_((&((struct_complexe16 *) (*((struct_vecteur *)
 1665:                 (*s_objet_argument_1).objet)).tableau)[1]),
 1666:                 &(((real8 *) (*((struct_vecteur *)
 1667:                 (*s_objet_argument_2).objet)).tableau)[2]), &registre_b);
 1668:         f77multiplicationcr_((&((struct_complexe16 *) (*((struct_vecteur *)
 1669:                 (*s_objet_argument_1).objet)).tableau)[2]),
 1670:                 &(((real8 *) (*((struct_vecteur *)
 1671:                 (*s_objet_argument_2).objet)).tableau)[1]), &registre_a);
 1672:         f77soustractioncc_(&registre_a, &registre_b, &(((struct_complexe16 *)
 1673:                 (*((struct_vecteur *) (*s_objet_resultat).objet)).tableau)[0]));
 1674: 
 1675:         f77multiplicationcr_((&((struct_complexe16 *) (*((struct_vecteur *)
 1676:                 (*s_objet_argument_1).objet)).tableau)[2]),
 1677:                 &(((real8 *) (*((struct_vecteur *)
 1678:                 (*s_objet_argument_2).objet)).tableau)[0]), &registre_b);
 1679:         f77multiplicationcr_((&((struct_complexe16 *) (*((struct_vecteur *)
 1680:                 (*s_objet_argument_1).objet)).tableau)[0]),
 1681:                 &(((real8 *) (*((struct_vecteur *)
 1682:                 (*s_objet_argument_2).objet)).tableau)[2]), &registre_a);
 1683:         f77soustractioncc_(&registre_a, &registre_b, &(((struct_complexe16 *)
 1684:                 (*((struct_vecteur *) (*s_objet_resultat).objet)).tableau)[1]));
 1685: 
 1686:         f77multiplicationcr_((&((struct_complexe16 *) (*((struct_vecteur *)
 1687:                 (*s_objet_argument_1).objet)).tableau)[0]),
 1688:                 &(((real8 *) (*((struct_vecteur *)
 1689:                 (*s_objet_argument_2).objet)).tableau)[1]), &registre_b);
 1690:         f77multiplicationcr_((&((struct_complexe16 *) (*((struct_vecteur *)
 1691:                 (*s_objet_argument_1).objet)).tableau)[1]),
 1692:                 &(((real8 *) (*((struct_vecteur *)
 1693:                 (*s_objet_argument_2).objet)).tableau)[0]), &registre_a);
 1694:         f77soustractioncc_(&registre_a, &registre_b, &(((struct_complexe16 *)
 1695:                 (*((struct_vecteur *) (*s_objet_resultat).objet)).tableau)[2]));
 1696:     }
 1697:     else if (((*s_objet_argument_2).type == VIN) &&
 1698:             ((*s_objet_argument_1).type == VCX))
 1699:     {
 1700:         if (((*((struct_vecteur *)  (*s_objet_argument_1).objet)).taille != 3)
 1701:                 || ((*((struct_vecteur *)  (*s_objet_argument_1).objet)).taille
 1702:                 != 3))
 1703:         {
 1704:             liberation(s_etat_processus, s_objet_argument_1);
 1705:             liberation(s_etat_processus, s_objet_argument_2);
 1706: 
 1707:             (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
 1708:             return;
 1709:         }
 1710: 
 1711:         if ((s_objet_resultat = allocation(s_etat_processus, VCX))
 1712:                 == NULL)
 1713:         {
 1714:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1715:             return;
 1716:         }
 1717: 
 1718:         (*((struct_vecteur *) (*s_objet_resultat).objet)).taille = 3;
 1719: 
 1720:         if (((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau =
 1721:                 malloc(3 * sizeof(struct_complexe16))) == NULL)
 1722:         {
 1723:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1724:             return;
 1725:         }
 1726: 
 1727:         f77multiplicationci_((&((struct_complexe16 *) (*((struct_vecteur *)
 1728:                 (*s_objet_argument_1).objet)).tableau)[1]),
 1729:                 &(((integer8 *) (*((struct_vecteur *)
 1730:                 (*s_objet_argument_2).objet)).tableau)[2]), &registre_b);
 1731:         f77multiplicationci_((&((struct_complexe16 *) (*((struct_vecteur *)
 1732:                 (*s_objet_argument_1).objet)).tableau)[2]),
 1733:                 &(((integer8 *) (*((struct_vecteur *)
 1734:                 (*s_objet_argument_2).objet)).tableau)[1]), &registre_a);
 1735:         f77soustractioncc_(&registre_a, &registre_b, &(((struct_complexe16 *)
 1736:                 (*((struct_vecteur *) (*s_objet_resultat).objet)).tableau)[0]));
 1737: 
 1738:         f77multiplicationci_((&((struct_complexe16 *) (*((struct_vecteur *)
 1739:                 (*s_objet_argument_1).objet)).tableau)[2]),
 1740:                 &(((integer8 *) (*((struct_vecteur *)
 1741:                 (*s_objet_argument_2).objet)).tableau)[0]), &registre_b);
 1742:         f77multiplicationci_((&((struct_complexe16 *) (*((struct_vecteur *)
 1743:                 (*s_objet_argument_1).objet)).tableau)[0]),
 1744:                 &(((integer8 *) (*((struct_vecteur *)
 1745:                 (*s_objet_argument_2).objet)).tableau)[2]), &registre_a);
 1746:         f77soustractioncc_(&registre_a, &registre_b, &(((struct_complexe16 *)
 1747:                 (*((struct_vecteur *) (*s_objet_resultat).objet)).tableau)[1]));
 1748: 
 1749:         f77multiplicationci_((&((struct_complexe16 *) (*((struct_vecteur *)
 1750:                 (*s_objet_argument_1).objet)).tableau)[0]),
 1751:                 &(((integer8 *) (*((struct_vecteur *)
 1752:                 (*s_objet_argument_2).objet)).tableau)[1]), &registre_b);
 1753:         f77multiplicationci_((&((struct_complexe16 *) (*((struct_vecteur *)
 1754:                 (*s_objet_argument_1).objet)).tableau)[1]),
 1755:                 &(((integer8 *) (*((struct_vecteur *)
 1756:                 (*s_objet_argument_2).objet)).tableau)[0]), &registre_a);
 1757:         f77soustractioncc_(&registre_a, &registre_b, &(((struct_complexe16 *)
 1758:                 (*((struct_vecteur *) (*s_objet_resultat).objet)).tableau)[2]));
 1759:     }
 1760: 
 1761: /*
 1762: --------------------------------------------------------------------------------
 1763:   Types incompatibles avec la fonction CROSS
 1764: --------------------------------------------------------------------------------
 1765: */
 1766: 
 1767:     else
 1768:     {
 1769:         liberation(s_etat_processus, s_objet_argument_1);
 1770:         liberation(s_etat_processus, s_objet_argument_2);
 1771: 
 1772:         (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
 1773:         return;
 1774:     }
 1775: 
 1776:     liberation(s_etat_processus, s_objet_argument_1);
 1777:     liberation(s_etat_processus, s_objet_argument_2);
 1778: 
 1779:     if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
 1780:             s_objet_resultat) == d_erreur)
 1781:     {
 1782:         return;
 1783:     }
 1784: 
 1785:     return;
 1786: }
 1787: 
 1788: // vim: ts=4

CVSweb interface <joel.bertrand@systella.fr>