File:  [local] / rpl / src / instructions_c2.c
Revision 1.41: download - view: text, annotated - select for diffs - revision graph
Thu Dec 13 16:59:41 2012 UTC (11 years, 4 months ago) by bertrand
Branches: MAIN
CVS tags: HEAD
Première série de patches pour inclure les variables partagées dans
l'arbre des variables. Attention, le résultat ne compile pas.

    1: /*
    2: ================================================================================
    3:   RPL/2 (R) version 4.1.11
    4:   Copyright (C) 1989-2012 Dr. BERTRAND Joël
    5: 
    6:   This file is part of RPL/2.
    7: 
    8:   RPL/2 is free software; you can redistribute it and/or modify it
    9:   under the terms of the CeCILL V2 License as published by the french
   10:   CEA, CNRS and INRIA.
   11:  
   12:   RPL/2 is distributed in the hope that it will be useful, but WITHOUT
   13:   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
   14:   FITNESS FOR A PARTICULAR PURPOSE.  See the CeCILL V2 License
   15:   for more details.
   16:  
   17:   You should have received a copy of the CeCILL License
   18:   along with RPL/2. If not, write to info@cecill.info.
   19: ================================================================================
   20: */
   21: 
   22: 
   23: #include "rpl-conv.h"
   24: 
   25: 
   26: /*
   27: ================================================================================
   28:   Fonction '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:     unsigned long                   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:     unsigned long                   i;
  443:     unsigned long                   j;
  444:     unsigned long                   nombre_colonnes;
  445:     unsigned long                   nombre_dimensions;
  446:     unsigned long                   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:                     == d_faux)
  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:     }
  592:     
  593: /*
  594: --------------------------------------------------------------------------------
  595:   Tableau créé à partir d'une spécification de dimension
  596: --------------------------------------------------------------------------------
  597: */
  598: 
  599:     if ((*s_objet_2).type == LST)
  600:     {
  601:         l_element_courant = (*s_objet_2).objet;
  602:         nombre_dimensions = 0;
  603: 
  604:         while(l_element_courant != NULL)
  605:         {
  606:             nombre_dimensions++;
  607:             l_element_courant = (*l_element_courant).suivant;
  608:         }
  609: 
  610:         if ((nombre_dimensions != 1) && (nombre_dimensions != 2))
  611:         {
  612:             liberation(s_etat_processus, s_objet_1);
  613: 
  614:             if (argument_nom == d_faux)
  615:             {
  616:                 liberation(s_etat_processus, s_objet_2);
  617:             }
  618:             else
  619:             {
  620:                 if (variable_partagee == d_vrai)
  621:                 {
  622:                     if (pthread_mutex_unlock(&((*(*s_etat_processus)
  623:                             .pointeur_variable_partagee_courante).mutex)) != 0)
  624:                     {
  625:                         (*s_etat_processus).erreur_systeme = d_es_processus;
  626:                         return;
  627:                     }
  628:                 }
  629:             }
  630: 
  631:             (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
  632:             return;
  633:         }
  634: 
  635:         nombre_colonnes = 0;
  636:         nombre_lignes = 0;
  637: 
  638:         l_element_courant = (*s_objet_2).objet;
  639: 
  640:         while(l_element_courant != NULL)
  641:         {
  642:             if ((*(*l_element_courant).donnee).type != INT)
  643:             {
  644:                 liberation(s_etat_processus, s_objet_1);
  645: 
  646:                 if (argument_nom == d_faux)
  647:                 {
  648:                     liberation(s_etat_processus, s_objet_2);
  649:                 }
  650:                 else
  651:                 {
  652:                     if (variable_partagee == d_vrai)
  653:                     {
  654:                         if (pthread_mutex_unlock(&((*(*s_etat_processus)
  655:                                 .pointeur_variable_partagee_courante).mutex))
  656:                                 != 0)
  657:                         {
  658:                             (*s_etat_processus).erreur_systeme = d_es_processus;
  659:                             return;
  660:                         }
  661:                     }
  662:                 }
  663: 
  664:                 (*s_etat_processus).erreur_execution =
  665:                         d_ex_erreur_type_argument;
  666:                 return;
  667:             }
  668: 
  669:             if ((*((integer8 *) (*(*l_element_courant).donnee).objet)) <= 0)
  670:             {
  671:                 liberation(s_etat_processus, s_objet_1);
  672: 
  673:                 if (argument_nom == d_faux)
  674:                 {
  675:                     liberation(s_etat_processus, s_objet_2);
  676:                 }
  677:                 else
  678:                 {
  679:                     if (variable_partagee == d_vrai)
  680:                     {
  681:                         if (pthread_mutex_unlock(&((*(*s_etat_processus)
  682:                                 .pointeur_variable_partagee_courante).mutex))
  683:                                 != 0)
  684:                         {
  685:                             (*s_etat_processus).erreur_systeme = d_es_processus;
  686:                             return;
  687:                         }
  688:                     }
  689:                 }
  690: 
  691:                 (*s_etat_processus).erreur_execution = d_ex_argument_invalide;
  692:                 return;
  693:             }
  694: 
  695:             if (nombre_lignes == 0)
  696:             {
  697:                 nombre_lignes = (*((integer8 *)
  698:                         (*(*l_element_courant).donnee).objet));
  699:             }
  700:             else
  701:             {
  702:                 nombre_colonnes = (*((integer8 *)
  703:                         (*(*l_element_courant).donnee).objet));
  704:             }
  705: 
  706:             l_element_courant = (*l_element_courant).suivant;
  707:         }
  708:     }
  709: 
  710: /*
  711: --------------------------------------------------------------------------------
  712:   Tableau créé à partir des dimensions d'un autre tableau
  713: --------------------------------------------------------------------------------
  714: */
  715: 
  716:     else if (((*s_objet_2).type == VIN) ||
  717:             ((*s_objet_2).type == VRL) ||
  718:             ((*s_objet_2).type == VCX))
  719:     {
  720:         nombre_dimensions = 1;
  721:         nombre_lignes = (*((struct_vecteur *) (*s_objet_2).objet)).taille;
  722:         nombre_colonnes = 0;
  723:     }
  724:     else if (((*s_objet_2).type == MIN) ||
  725:             ((*s_objet_2).type == MRL) ||
  726:             ((*s_objet_2).type == MCX))
  727:     {
  728:         nombre_dimensions = 2;
  729:         nombre_lignes = (*((struct_matrice *) (*s_objet_2).objet))
  730:                 .nombre_lignes;
  731:         nombre_colonnes = (*((struct_matrice *) (*s_objet_2).objet))
  732:                 .nombre_colonnes;
  733:     }
  734: 
  735: /*
  736: --------------------------------------------------------------------------------
  737:   Spécifications incorrectes
  738: --------------------------------------------------------------------------------
  739: */
  740: 
  741:     else
  742:     {
  743:         if (argument_nom == d_faux)
  744:         {
  745:             liberation(s_etat_processus, s_objet_2);
  746:         }
  747:         else
  748:         {
  749:             if (variable_partagee == d_vrai)
  750:             {
  751:                 if (pthread_mutex_unlock(&((*(*s_etat_processus)
  752:                         .pointeur_variable_partagee_courante).mutex)) != 0)
  753:                 {
  754:                     (*s_etat_processus).erreur_systeme = d_es_processus;
  755:                     return;
  756:                 }
  757:             }
  758:         }
  759: 
  760:         liberation(s_etat_processus, s_objet_1);
  761: 
  762:         (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
  763:         return;
  764:     }
  765: 
  766: /*
  767: --------------------------------------------------------------------------------
  768:   Création effective du tableau
  769: --------------------------------------------------------------------------------
  770: */
  771: 
  772:     if (((*s_objet_1).type != INT) &&
  773:             ((*s_objet_1).type != REL) &&
  774:             ((*s_objet_1).type != CPL))
  775:     {
  776:         if (argument_nom == d_faux)
  777:         {
  778:             liberation(s_etat_processus, s_objet_2);
  779:         }
  780:         else
  781:         {
  782:             if (variable_partagee == d_vrai)
  783:             {
  784:                 if (pthread_mutex_unlock(&((*(*s_etat_processus)
  785:                         .pointeur_variable_partagee_courante).mutex)) != 0)
  786:                 {
  787:                     (*s_etat_processus).erreur_systeme = d_es_processus;
  788:                     return;
  789:                 }
  790:             }
  791:         }
  792: 
  793:         liberation(s_etat_processus, s_objet_1);
  794: 
  795:         (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
  796:         return;
  797:     }
  798: 
  799:     if (nombre_dimensions == 1)
  800:     {
  801:         /*
  802:          * Vecteur
  803:          */
  804: 
  805:         if ((*s_objet_1).type == INT)
  806:         {
  807:             if ((s_objet_resultat = allocation(s_etat_processus, VIN))
  808:                     == NULL)
  809:             {
  810:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  811:                 return;
  812:             }
  813: 
  814:             (*((struct_vecteur *) (*s_objet_resultat).objet)).taille =
  815:                     nombre_lignes;
  816: 
  817:             if (((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau =
  818:                     malloc(nombre_lignes * sizeof(integer8))) == NULL)
  819:             {
  820:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  821:                 return;
  822:             }
  823: 
  824:             for(i = 0; i < nombre_lignes; i++)
  825:             {
  826:                 ((integer8 *) (*((struct_vecteur *) (*s_objet_resultat)
  827:                         .objet)).tableau)[i] = (*((integer8 *)
  828:                         (*s_objet_1).objet));
  829:             }
  830:         }
  831:         else if ((*s_objet_1).type == REL)
  832:         {
  833:             if ((s_objet_resultat = allocation(s_etat_processus, VRL))
  834:                     == NULL)
  835:             {
  836:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  837:                 return;
  838:             }
  839: 
  840:             (*((struct_vecteur *) (*s_objet_resultat).objet)).taille =
  841:                     nombre_lignes;
  842: 
  843:             if (((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau =
  844:                     malloc(nombre_lignes * sizeof(real8))) == NULL)
  845:             {
  846:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  847:                 return;
  848:             }
  849: 
  850:             for(i = 0; i < nombre_lignes; i++)
  851:             {
  852:                 ((real8 *) (*((struct_vecteur *) (*s_objet_resultat)
  853:                         .objet)).tableau)[i] = (*((real8 *)
  854:                         (*s_objet_1).objet));
  855:             }
  856:         }
  857:         else
  858:         {
  859:             if ((s_objet_resultat = allocation(s_etat_processus, VCX))
  860:                     == NULL)
  861:             {
  862:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  863:                 return;
  864:             }
  865: 
  866:             (*((struct_vecteur *) (*s_objet_resultat).objet)).taille =
  867:                     nombre_lignes;
  868: 
  869:             if (((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau =
  870:                     malloc(nombre_lignes * sizeof(struct_complexe16))) == NULL)
  871:             {
  872:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  873:                 return;
  874:             }
  875: 
  876:             for(i = 0; i < nombre_lignes; i++)
  877:             {
  878:                 ((struct_complexe16 *) (*((struct_vecteur *) (*s_objet_resultat)
  879:                         .objet)).tableau)[i].partie_reelle =
  880:                         (*((struct_complexe16 *)
  881:                         (*s_objet_1).objet)).partie_reelle;
  882:                 ((struct_complexe16 *) (*((struct_vecteur *) (*s_objet_resultat)
  883:                         .objet)).tableau)[i].partie_imaginaire =
  884:                         (*((struct_complexe16 *)
  885:                         (*s_objet_1).objet)).partie_imaginaire;
  886:             }
  887:         }
  888:     }
  889:     else
  890:     {
  891:         /*
  892:          * Matrice
  893:          */
  894: 
  895:         if ((*s_objet_1).type == INT)
  896:         {
  897:             if ((s_objet_resultat = allocation(s_etat_processus, MIN))
  898:                     == NULL)
  899:             {
  900:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  901:                 return;
  902:             }
  903: 
  904:             (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_lignes =
  905:                     nombre_lignes;
  906:             (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_colonnes =
  907:                     nombre_colonnes;
  908: 
  909:             if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau =
  910:                     malloc(nombre_lignes * sizeof(integer8 *))) == NULL)
  911:             {
  912:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  913:                 return;
  914:             }
  915: 
  916:             for(i = 0; i < nombre_lignes; i++)
  917:             {
  918:                 if ((((integer8 **) (*((struct_matrice *) (*s_objet_resultat)
  919:                         .objet)).tableau)[i] = malloc(
  920:                         nombre_colonnes * sizeof(integer8))) == NULL)
  921:                 {
  922:                     (*s_etat_processus).erreur_systeme =
  923:                             d_es_allocation_memoire;
  924:                     return;
  925:                 }
  926: 
  927:                 for(j = 0; j < nombre_colonnes; j++)
  928:                 {
  929:                     ((integer8 **) (*((struct_matrice *) (*s_objet_resultat)
  930:                             .objet)).tableau)[i][j] = (*((integer8 *)
  931:                             (*s_objet_1).objet));
  932:                 }
  933:             }
  934:         }
  935:         else if ((*s_objet_1).type == REL)
  936:         {
  937:             if ((s_objet_resultat = allocation(s_etat_processus, MRL))
  938:                     == NULL)
  939:             {
  940:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  941:                 return;
  942:             }
  943: 
  944:             (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_lignes =
  945:                     nombre_lignes;
  946:             (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_colonnes =
  947:                     nombre_colonnes;
  948: 
  949:             if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau =
  950:                     malloc(nombre_lignes * sizeof(real8 *))) == NULL)
  951:             {
  952:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  953:                 return;
  954:             }
  955: 
  956:             for(i = 0; i < nombre_lignes; i++)
  957:             {
  958:                 if ((((real8 **) (*((struct_matrice *) (*s_objet_resultat)
  959:                         .objet)).tableau)[i] = malloc(
  960:                         nombre_colonnes * sizeof(real8))) == NULL)
  961:                 {
  962:                     (*s_etat_processus).erreur_systeme =
  963:                             d_es_allocation_memoire;
  964:                     return;
  965:                 }
  966: 
  967:                 for(j = 0; j < nombre_colonnes; j++)
  968:                 {
  969:                     ((real8 **) (*((struct_matrice *) (*s_objet_resultat)
  970:                             .objet)).tableau)[i][j] = (*((real8 *)
  971:                             (*s_objet_1).objet));
  972:                 }
  973:             }
  974:         }
  975:         else
  976:         {
  977:             if ((s_objet_resultat = allocation(s_etat_processus, MCX))
  978:                     == NULL)
  979:             {
  980:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  981:                 return;
  982:             }
  983: 
  984:             (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_lignes =
  985:                     nombre_lignes;
  986:             (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_colonnes =
  987:                     nombre_colonnes;
  988: 
  989:             if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau =
  990:                     malloc(nombre_lignes * sizeof(struct_complexe16 *)))
  991:                     == NULL)
  992:             {
  993:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  994:                 return;
  995:             }
  996: 
  997:             for(i = 0; i < nombre_lignes; i++)
  998:             {
  999:                 if ((((struct_complexe16 **) (*((struct_matrice *)
 1000:                         (*s_objet_resultat).objet)).tableau)[i] =
 1001:                         malloc(nombre_colonnes *
 1002:                         sizeof(struct_complexe16))) == NULL)
 1003:                 {
 1004:                     (*s_etat_processus).erreur_systeme =
 1005:                             d_es_allocation_memoire;
 1006:                     return;
 1007:                 }
 1008: 
 1009:                 for(j = 0; j < nombre_colonnes; j++)
 1010:                 {
 1011:                     ((struct_complexe16 **) (*((struct_matrice *)
 1012:                             (*s_objet_resultat).objet)).tableau)[i][j]
 1013:                             .partie_reelle = (*((struct_complexe16 *)
 1014:                             (*s_objet_1).objet)).partie_reelle;
 1015:                     ((struct_complexe16 **) (*((struct_matrice *)
 1016:                             (*s_objet_resultat).objet)).tableau)[i][j]
 1017:                             .partie_imaginaire = (*((struct_complexe16 *)
 1018:                             (*s_objet_1).objet)).partie_imaginaire;
 1019:                 }
 1020:             }
 1021:         }
 1022:     }
 1023: 
 1024:     liberation(s_etat_processus, s_objet_1);
 1025:     liberation(s_etat_processus, s_objet_2);
 1026: 
 1027:     if (argument_nom == d_faux)
 1028:     {
 1029:         if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
 1030:                 s_objet_resultat) == d_erreur)
 1031:         {
 1032:             return;
 1033:         }
 1034:     }
 1035:     else
 1036:     {
 1037:         if (variable_partagee == d_vrai)
 1038:         {
 1039:             (*(*s_etat_processus).pointeur_variable_partagee_courante).objet =
 1040:                     s_objet_resultat;
 1041: 
 1042:             if (pthread_mutex_unlock(&((*(*s_etat_processus)
 1043:                     .pointeur_variable_partagee_courante).mutex)) != 0)
 1044:             {
 1045:                 (*s_etat_processus).erreur_systeme = d_es_processus;
 1046:                 return;
 1047:             }
 1048:         }
 1049:         else
 1050:         {
 1051:             (*(*s_etat_processus).pointeur_variable_courante).objet =
 1052:                     s_objet_resultat;
 1053:         }
 1054:     }
 1055: 
 1056:     return;
 1057: }
 1058: 
 1059: 
 1060: /*
 1061: ================================================================================
 1062:   Fonction 'cross'
 1063: ================================================================================
 1064:   Entrées : structure processus
 1065: --------------------------------------------------------------------------------
 1066:   Sorties :
 1067: --------------------------------------------------------------------------------
 1068:   Effets de bord : néant
 1069: ================================================================================
 1070: */
 1071: 
 1072: void
 1073: instruction_cross(struct_processus *s_etat_processus)
 1074: {
 1075:     integer8                        tampon_1;
 1076:     integer8                        tampon_2;
 1077: 
 1078:     logical1                        depassement;
 1079: 
 1080:     struct_complexe16               registre_a;
 1081:     struct_complexe16               registre_b;
 1082: 
 1083:     struct_objet                    *s_objet_argument_1;
 1084:     struct_objet                    *s_objet_argument_2;
 1085:     struct_objet                    *s_objet_resultat;
 1086: 
 1087:     (*s_etat_processus).erreur_execution = d_ex;
 1088: 
 1089:     if ((*s_etat_processus).affichage_arguments == 'Y')
 1090:     {
 1091:         printf("\n  CROSS ");
 1092: 
 1093:         if ((*s_etat_processus).langue == 'F')
 1094:         {
 1095:             printf("(produit vectoriel)\n\n");
 1096:         }
 1097:         else
 1098:         {
 1099:             printf("(product of vectors)\n\n");
 1100:         }
 1101: 
 1102:         printf("    2: %s, %s\n", d_VIN, d_VRL);
 1103:         printf("    1: %s, %s\n", d_VIN, d_VRL);
 1104:         printf("->  1: %s, %s\n\n", d_VIN, d_VRL);
 1105: 
 1106:         printf("    2: %s, %s, %s\n", d_VIN, d_VRL, d_VCX);
 1107:         printf("    1: %s\n", d_VCX);
 1108:         printf("->  1: %s\n\n", d_VCX);
 1109: 
 1110:         printf("    2: %s\n", d_VCX);
 1111:         printf("    1: %s, %s, %s\n", d_VIN, d_VRL, d_VCX);
 1112:         printf("->  1: %s\n", d_VCX);
 1113: 
 1114:         return;
 1115:     }
 1116:     else if ((*s_etat_processus).test_instruction == 'Y')
 1117:     {
 1118:         (*s_etat_processus).nombre_arguments = -1;
 1119:         return;
 1120:     }
 1121: 
 1122:     if (test_cfsf(s_etat_processus, 31) == d_vrai)
 1123:     {
 1124:         if (empilement_pile_last(s_etat_processus, 2) == d_erreur)
 1125:         {
 1126:             return;
 1127:         }
 1128:     }
 1129: 
 1130:     if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
 1131:             &s_objet_argument_1) == d_erreur)
 1132:     {
 1133:         (*s_etat_processus).erreur_execution = d_ex_manque_argument;
 1134:         return;
 1135:     }
 1136: 
 1137:     if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
 1138:             &s_objet_argument_2) == d_erreur)
 1139:     {
 1140:         liberation(s_etat_processus, s_objet_argument_1);
 1141: 
 1142:         (*s_etat_processus).erreur_execution = d_ex_manque_argument;
 1143:         return;
 1144:     }
 1145: 
 1146: /*
 1147: --------------------------------------------------------------------------------
 1148:   Résultat entier
 1149: --------------------------------------------------------------------------------
 1150: */
 1151: 
 1152:     if (((*s_objet_argument_1).type == VIN) &&
 1153:             ((*s_objet_argument_2).type == VIN))
 1154:     {
 1155:         if (((*((struct_vecteur *)  (*s_objet_argument_1).objet)).taille != 3)
 1156:                 || ((*((struct_vecteur *)  (*s_objet_argument_1).objet)).taille
 1157:                 != 3))
 1158:         {
 1159:             liberation(s_etat_processus, s_objet_argument_1);
 1160:             liberation(s_etat_processus, s_objet_argument_2);
 1161: 
 1162:             (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
 1163:             return;
 1164:         }
 1165: 
 1166:         if ((s_objet_resultat = allocation(s_etat_processus, VIN))
 1167:                 == NULL)
 1168:         {
 1169:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1170:             return;
 1171:         }
 1172: 
 1173:         (*((struct_vecteur *) (*s_objet_resultat).objet)).taille = 3;
 1174: 
 1175:         if (((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau =
 1176:                 malloc(3 * sizeof(integer8))) == NULL)
 1177:         {
 1178:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1179:             return;
 1180:         }
 1181: 
 1182:         depassement = depassement_multiplication(&(((integer8 *)
 1183:                 (*((struct_vecteur *) (*s_objet_argument_2).objet))
 1184:                 .tableau)[1]), &(((integer8 *) (*((struct_vecteur *)
 1185:                 (*s_objet_argument_1).objet)).tableau)[2]), &(tampon_1));
 1186: 
 1187:         depassement |= depassement_multiplication(&(((integer8 *)
 1188:                 (*((struct_vecteur *) (*s_objet_argument_2).objet))
 1189:                 .tableau)[2]), &(((integer8 *) (*((struct_vecteur *)
 1190:                 (*s_objet_argument_1).objet)).tableau)[1]), &(tampon_2));
 1191: 
 1192:         tampon_2 = -tampon_2;
 1193: 
 1194:         depassement |= depassement_addition(&(tampon_1), &(tampon_2),
 1195:                 &(((integer8 *) (*((struct_vecteur *) (*s_objet_resultat)
 1196:                 .objet)).tableau)[0]));
 1197: 
 1198:         depassement |= depassement_multiplication(&(((integer8 *)
 1199:                 (*((struct_vecteur *) (*s_objet_argument_2).objet))
 1200:                 .tableau)[2]), &(((integer8 *) (*((struct_vecteur *)
 1201:                 (*s_objet_argument_1).objet)).tableau)[0]), &(tampon_1));
 1202: 
 1203:         depassement |= depassement_multiplication(&(((integer8 *)
 1204:                 (*((struct_vecteur *) (*s_objet_argument_2).objet))
 1205:                 .tableau)[0]), &(((integer8 *) (*((struct_vecteur *)
 1206:                 (*s_objet_argument_1).objet)).tableau)[2]), &(tampon_2));
 1207: 
 1208:         tampon_2 = -tampon_2;
 1209: 
 1210:         depassement |= depassement_addition(&(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:         tampon_2 = -tampon_2;
 1225: 
 1226:         depassement |= depassement_addition(&(tampon_1), &(tampon_2),
 1227:                 &(((integer8 *) (*((struct_vecteur *) (*s_objet_resultat)
 1228:                 .objet)).tableau)[2]));
 1229: 
 1230:         if (depassement != d_absence_erreur)
 1231:         {
 1232:             (*s_objet_resultat).type = VRL;
 1233:             (*((struct_vecteur *) (*s_objet_resultat).objet)).type = 'R';
 1234:             free((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau);
 1235: 
 1236:             if (((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau =
 1237:                     malloc(3 * sizeof(real8))) == NULL)
 1238:             {
 1239:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1240:                 return;
 1241:             }
 1242: 
 1243:             ((real8 *) (*((struct_vecteur *) (*s_objet_resultat).objet))
 1244:                     .tableau)[0] = ((real8) ((integer8 *) (*((struct_vecteur *)
 1245:                     (*s_objet_argument_2).objet)).tableau)[1] * (real8)
 1246:                     ((integer8 *) (*((struct_vecteur *) (*s_objet_argument_1)
 1247:                     .objet)).tableau)[2]) - ((real8) ((integer8 *)
 1248:                     (*((struct_vecteur *) (*s_objet_argument_2).objet))
 1249:                     .tableau)[2] * (real8) ((integer8 *) (*((struct_vecteur *)
 1250:                     (*s_objet_argument_1).objet)).tableau)[1]);
 1251:             ((real8 *) (*((struct_vecteur *) (*s_objet_resultat).objet))
 1252:                     .tableau)[1] = ((real8) ((integer8 *) (*((struct_vecteur *)
 1253:                     (*s_objet_argument_2).objet)).tableau)[2] * (real8)
 1254:                     ((integer8 *) (*((struct_vecteur *) (*s_objet_argument_1)
 1255:                     .objet)).tableau)[0]) - ((real8) ((integer8 *)
 1256:                     (*((struct_vecteur *) (*s_objet_argument_2).objet))
 1257:                     .tableau)[0] * (real8) ((integer8 *) (*((struct_vecteur *)
 1258:                     (*s_objet_argument_1).objet)).tableau)[2]);
 1259:             ((real8 *) (*((struct_vecteur *) (*s_objet_resultat).objet))
 1260:                     .tableau)[2] = ((real8) ((integer8 *) (*((struct_vecteur *)
 1261:                     (*s_objet_argument_2).objet)).tableau)[0] * (real8)
 1262:                     ((integer8 *) (*((struct_vecteur *) (*s_objet_argument_1)
 1263:                     .objet)).tableau)[1]) - ((real8) ((integer8 *)
 1264:                     (*((struct_vecteur *) (*s_objet_argument_2)
 1265:                     .objet)).tableau)[1] * (real8) ((integer8 *)
 1266:                     (*((struct_vecteur *) (*s_objet_argument_1).objet))
 1267:                     .tableau)[0]);
 1268:         }
 1269:     }
 1270: 
 1271: /*
 1272: --------------------------------------------------------------------------------
 1273:   Résultat réel
 1274: --------------------------------------------------------------------------------
 1275: */
 1276: 
 1277:     else if (((*s_objet_argument_1).type == VRL) &&
 1278:             ((*s_objet_argument_2).type == VIN))
 1279:     {
 1280:         if (((*((struct_vecteur *)  (*s_objet_argument_1).objet)).taille != 3)
 1281:                 || ((*((struct_vecteur *)  (*s_objet_argument_1).objet)).taille
 1282:                 != 3))
 1283:         {
 1284:             liberation(s_etat_processus, s_objet_argument_1);
 1285:             liberation(s_etat_processus, s_objet_argument_2);
 1286: 
 1287:             (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
 1288:             return;
 1289:         }
 1290: 
 1291:         if ((s_objet_resultat = allocation(s_etat_processus, VRL))
 1292:                 == NULL)
 1293:         {
 1294:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1295:             return;
 1296:         }
 1297: 
 1298:         (*((struct_vecteur *) (*s_objet_resultat).objet)).taille = 3;
 1299: 
 1300:         if (((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau =
 1301:                 malloc(3 * sizeof(real8))) == NULL)
 1302:         {
 1303:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1304:             return;
 1305:         }
 1306: 
 1307:         ((real8 *) (*((struct_vecteur *) (*s_objet_resultat).objet))
 1308:                 .tableau)[0] = (((integer8 *) (*((struct_vecteur *)
 1309:                 (*s_objet_argument_2).objet)).tableau)[1] * ((real8 *)
 1310:                 (*((struct_vecteur *) (*s_objet_argument_1).objet)).tableau)[2])
 1311:                 - (((integer8 *) (*((struct_vecteur *) (*s_objet_argument_2)
 1312:                 .objet)).tableau)[2] * ((real8 *) (*((struct_vecteur *)
 1313:                 (*s_objet_argument_1).objet)).tableau)[1]);
 1314:         ((real8 *) (*((struct_vecteur *) (*s_objet_resultat).objet))
 1315:                 .tableau)[1] = (((integer8 *) (*((struct_vecteur *)
 1316:                 (*s_objet_argument_2).objet)).tableau)[2] * ((real8 *)
 1317:                 (*((struct_vecteur *) (*s_objet_argument_1).objet)).tableau)[0])
 1318:                 - (((integer8 *) (*((struct_vecteur *) (*s_objet_argument_2)
 1319:                 .objet)).tableau)[0] * ((real8 *) (*((struct_vecteur *)
 1320:                 (*s_objet_argument_1).objet)).tableau)[2]);
 1321:         ((real8 *) (*((struct_vecteur *) (*s_objet_resultat).objet))
 1322:                 .tableau)[2] = (((integer8 *) (*((struct_vecteur *)
 1323:                 (*s_objet_argument_2).objet)).tableau)[0] * ((real8 *)
 1324:                 (*((struct_vecteur *) (*s_objet_argument_1).objet)).tableau)[1])
 1325:                 - (((integer8 *) (*((struct_vecteur *) (*s_objet_argument_2)
 1326:                 .objet)).tableau)[1] * ((real8 *) (*((struct_vecteur *)
 1327:                 (*s_objet_argument_1).objet)).tableau)[0]);
 1328:     }
 1329:     else if (((*s_objet_argument_1).type == VIN) &&
 1330:             ((*s_objet_argument_2).type == VRL))
 1331:     {
 1332:         if (((*((struct_vecteur *)  (*s_objet_argument_1).objet)).taille != 3)
 1333:                 || ((*((struct_vecteur *)  (*s_objet_argument_1).objet)).taille
 1334:                 != 3))
 1335:         {
 1336:             liberation(s_etat_processus, s_objet_argument_1);
 1337:             liberation(s_etat_processus, s_objet_argument_2);
 1338: 
 1339:             (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
 1340:             return;
 1341:         }
 1342: 
 1343:         if ((s_objet_resultat = allocation(s_etat_processus, VRL))
 1344:                 == NULL)
 1345:         {
 1346:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1347:             return;
 1348:         }
 1349: 
 1350:         (*((struct_vecteur *) (*s_objet_resultat).objet)).taille = 3;
 1351: 
 1352:         if (((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau =
 1353:                 malloc(3 * sizeof(real8))) == NULL)
 1354:         {
 1355:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1356:             return;
 1357:         }
 1358: 
 1359:         ((real8 *) (*((struct_vecteur *) (*s_objet_resultat).objet))
 1360:                 .tableau)[0] = (((real8 *) (*((struct_vecteur *)
 1361:                 (*s_objet_argument_2).objet)).tableau)[1] * ((integer8 *)
 1362:                 (*((struct_vecteur *) (*s_objet_argument_1).objet)).tableau)[2])
 1363:                 - (((real8 *) (*((struct_vecteur *) (*s_objet_argument_2)
 1364:                 .objet)).tableau)[2] * ((integer8 *) (*((struct_vecteur *)
 1365:                 (*s_objet_argument_1).objet)).tableau)[1]);
 1366:         ((real8 *) (*((struct_vecteur *) (*s_objet_resultat).objet))
 1367:                 .tableau)[1] = (((real8 *) (*((struct_vecteur *)
 1368:                 (*s_objet_argument_2).objet)).tableau)[2] * ((integer8 *)
 1369:                 (*((struct_vecteur *) (*s_objet_argument_1).objet)).tableau)[0])
 1370:                 - (((real8 *) (*((struct_vecteur *) (*s_objet_argument_2)
 1371:                 .objet)).tableau)[0] * ((integer8 *) (*((struct_vecteur *)
 1372:                 (*s_objet_argument_1).objet)).tableau)[2]);
 1373:         ((real8 *) (*((struct_vecteur *) (*s_objet_resultat).objet))
 1374:                 .tableau)[2] = (((real8 *) (*((struct_vecteur *)
 1375:                 (*s_objet_argument_2).objet)).tableau)[0] * ((integer8 *)
 1376:                 (*((struct_vecteur *) (*s_objet_argument_1).objet)).tableau)[1])
 1377:                 - (((real8 *) (*((struct_vecteur *) (*s_objet_argument_2)
 1378:                 .objet)).tableau)[1] * ((integer8 *) (*((struct_vecteur *)
 1379:                 (*s_objet_argument_1).objet)).tableau)[0]);
 1380:     }
 1381:     else if (((*s_objet_argument_1).type == VRL) &&
 1382:             ((*s_objet_argument_2).type == VRL))
 1383:     {
 1384:         if (((*((struct_vecteur *)  (*s_objet_argument_1).objet)).taille != 3)
 1385:                 || ((*((struct_vecteur *)  (*s_objet_argument_1).objet)).taille
 1386:                 != 3))
 1387:         {
 1388:             liberation(s_etat_processus, s_objet_argument_1);
 1389:             liberation(s_etat_processus, s_objet_argument_2);
 1390: 
 1391:             (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
 1392:             return;
 1393:         }
 1394: 
 1395:         if ((s_objet_resultat = allocation(s_etat_processus, VRL))
 1396:                 == NULL)
 1397:         {
 1398:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1399:             return;
 1400:         }
 1401: 
 1402:         (*((struct_vecteur *) (*s_objet_resultat).objet)).taille = 3;
 1403: 
 1404:         if (((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau =
 1405:                 malloc(3 * sizeof(real8))) == NULL)
 1406:         {
 1407:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1408:             return;
 1409:         }
 1410: 
 1411:         ((real8 *) (*((struct_vecteur *) (*s_objet_resultat).objet))
 1412:                 .tableau)[0] = (((real8 *) (*((struct_vecteur *)
 1413:                 (*s_objet_argument_2).objet)).tableau)[1] * ((real8 *)
 1414:                 (*((struct_vecteur *) (*s_objet_argument_1).objet)).tableau)[2])
 1415:                 - (((real8 *) (*((struct_vecteur *) (*s_objet_argument_2)
 1416:                 .objet)).tableau)[2] * ((real8 *) (*((struct_vecteur *)
 1417:                 (*s_objet_argument_1).objet)).tableau)[1]);
 1418:         ((real8 *) (*((struct_vecteur *) (*s_objet_resultat).objet))
 1419:                 .tableau)[1] = (((real8 *) (*((struct_vecteur *)
 1420:                 (*s_objet_argument_2).objet)).tableau)[2] * ((real8 *)
 1421:                 (*((struct_vecteur *) (*s_objet_argument_1).objet)).tableau)[0])
 1422:                 - (((real8 *) (*((struct_vecteur *) (*s_objet_argument_2)
 1423:                 .objet)).tableau)[0] * ((real8 *) (*((struct_vecteur *)
 1424:                 (*s_objet_argument_1).objet)).tableau)[2]);
 1425:         ((real8 *) (*((struct_vecteur *) (*s_objet_resultat).objet))
 1426:                 .tableau)[2] = (((real8 *) (*((struct_vecteur *)
 1427:                 (*s_objet_argument_2).objet)).tableau)[0] * ((real8 *)
 1428:                 (*((struct_vecteur *) (*s_objet_argument_1).objet)).tableau)[1])
 1429:                 - (((real8 *) (*((struct_vecteur *) (*s_objet_argument_2)
 1430:                 .objet)).tableau)[1] * ((real8 *) (*((struct_vecteur *)
 1431:                 (*s_objet_argument_1).objet)).tableau)[0]);
 1432:     }
 1433: 
 1434: /*
 1435: --------------------------------------------------------------------------------
 1436:   Résultat complexe
 1437: --------------------------------------------------------------------------------
 1438: */
 1439: 
 1440:     else if (((*s_objet_argument_1).type == VIN) &&
 1441:             ((*s_objet_argument_2).type == VCX))
 1442:     {
 1443:         if (((*((struct_vecteur *)  (*s_objet_argument_1).objet)).taille != 3)
 1444:                 || ((*((struct_vecteur *)  (*s_objet_argument_1).objet)).taille
 1445:                 != 3))
 1446:         {
 1447:             liberation(s_etat_processus, s_objet_argument_1);
 1448:             liberation(s_etat_processus, s_objet_argument_2);
 1449: 
 1450:             (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
 1451:             return;
 1452:         }
 1453: 
 1454:         if ((s_objet_resultat = allocation(s_etat_processus, VCX))
 1455:                 == NULL)
 1456:         {
 1457:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1458:             return;
 1459:         }
 1460: 
 1461:         (*((struct_vecteur *) (*s_objet_resultat).objet)).taille = 3;
 1462: 
 1463:         if (((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau =
 1464:                 malloc(3 * sizeof(struct_complexe16))) == NULL)
 1465:         {
 1466:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1467:             return;
 1468:         }
 1469: 
 1470:         f77multiplicationci_((&((struct_complexe16 *) (*((struct_vecteur *)
 1471:                 (*s_objet_argument_2).objet)).tableau)[1]),
 1472:                 &(((integer8 *) (*((struct_vecteur *)
 1473:                 (*s_objet_argument_1).objet)).tableau)[2]), &registre_a);
 1474:         f77multiplicationci_((&((struct_complexe16 *) (*((struct_vecteur *)
 1475:                 (*s_objet_argument_2).objet)).tableau)[2]),
 1476:                 &(((integer8 *) (*((struct_vecteur *)
 1477:                 (*s_objet_argument_1).objet)).tableau)[1]), &registre_b);
 1478:         f77soustractioncc_(&registre_a, &registre_b, &(((struct_complexe16 *)
 1479:                 (*((struct_vecteur *) (*s_objet_resultat).objet)).tableau)[0]));
 1480: 
 1481:         f77multiplicationci_((&((struct_complexe16 *) (*((struct_vecteur *)
 1482:                 (*s_objet_argument_2).objet)).tableau)[2]),
 1483:                 &(((integer8 *) (*((struct_vecteur *)
 1484:                 (*s_objet_argument_1).objet)).tableau)[0]), &registre_a);
 1485:         f77multiplicationci_((&((struct_complexe16 *) (*((struct_vecteur *)
 1486:                 (*s_objet_argument_2).objet)).tableau)[0]),
 1487:                 &(((integer8 *) (*((struct_vecteur *)
 1488:                 (*s_objet_argument_1).objet)).tableau)[2]), &registre_b);
 1489:         f77soustractioncc_(&registre_a, &registre_b, &(((struct_complexe16 *)
 1490:                 (*((struct_vecteur *) (*s_objet_resultat).objet)).tableau)[1]));
 1491: 
 1492:         f77multiplicationci_((&((struct_complexe16 *) (*((struct_vecteur *)
 1493:                 (*s_objet_argument_2).objet)).tableau)[0]),
 1494:                 &(((integer8 *) (*((struct_vecteur *)
 1495:                 (*s_objet_argument_1).objet)).tableau)[1]), &registre_a);
 1496:         f77multiplicationci_((&((struct_complexe16 *) (*((struct_vecteur *)
 1497:                 (*s_objet_argument_2).objet)).tableau)[1]),
 1498:                 &(((integer8 *) (*((struct_vecteur *)
 1499:                 (*s_objet_argument_1).objet)).tableau)[0]), &registre_b);
 1500:         f77soustractioncc_(&registre_a, &registre_b, &(((struct_complexe16 *)
 1501:                 (*((struct_vecteur *) (*s_objet_resultat).objet)).tableau)[2]));
 1502:     }
 1503:     else if (((*s_objet_argument_1).type == VRL) &&
 1504:             ((*s_objet_argument_2).type == VCX))
 1505:     {
 1506:         if (((*((struct_vecteur *)  (*s_objet_argument_1).objet)).taille != 3)
 1507:                 || ((*((struct_vecteur *)  (*s_objet_argument_1).objet)).taille
 1508:                 != 3))
 1509:         {
 1510:             liberation(s_etat_processus, s_objet_argument_1);
 1511:             liberation(s_etat_processus, s_objet_argument_2);
 1512: 
 1513:             (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
 1514:             return;
 1515:         }
 1516: 
 1517:         if ((s_objet_resultat = allocation(s_etat_processus, VCX))
 1518:                 == NULL)
 1519:         {
 1520:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1521:             return;
 1522:         }
 1523: 
 1524:         (*((struct_vecteur *) (*s_objet_resultat).objet)).taille = 3;
 1525: 
 1526:         if (((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau =
 1527:                 malloc(3 * sizeof(struct_complexe16))) == NULL)
 1528:         {
 1529:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1530:             return;
 1531:         }
 1532: 
 1533:         f77multiplicationcr_((&((struct_complexe16 *) (*((struct_vecteur *)
 1534:                 (*s_objet_argument_2).objet)).tableau)[1]),
 1535:                 &(((real8 *) (*((struct_vecteur *)
 1536:                 (*s_objet_argument_1).objet)).tableau)[2]), &registre_a);
 1537:         f77multiplicationcr_((&((struct_complexe16 *) (*((struct_vecteur *)
 1538:                 (*s_objet_argument_2).objet)).tableau)[2]),
 1539:                 &(((real8 *) (*((struct_vecteur *)
 1540:                 (*s_objet_argument_1).objet)).tableau)[1]), &registre_b);
 1541:         f77soustractioncc_(&registre_a, &registre_b, &(((struct_complexe16 *)
 1542:                 (*((struct_vecteur *) (*s_objet_resultat).objet)).tableau)[0]));
 1543: 
 1544:         f77multiplicationcr_((&((struct_complexe16 *) (*((struct_vecteur *)
 1545:                 (*s_objet_argument_2).objet)).tableau)[2]),
 1546:                 &(((real8 *) (*((struct_vecteur *)
 1547:                 (*s_objet_argument_1).objet)).tableau)[0]), &registre_a);
 1548:         f77multiplicationcr_((&((struct_complexe16 *) (*((struct_vecteur *)
 1549:                 (*s_objet_argument_2).objet)).tableau)[0]),
 1550:                 &(((real8 *) (*((struct_vecteur *)
 1551:                 (*s_objet_argument_1).objet)).tableau)[2]), &registre_b);
 1552:         f77soustractioncc_(&registre_a, &registre_b, &(((struct_complexe16 *)
 1553:                 (*((struct_vecteur *) (*s_objet_resultat).objet)).tableau)[1]));
 1554: 
 1555:         f77multiplicationcr_((&((struct_complexe16 *) (*((struct_vecteur *)
 1556:                 (*s_objet_argument_2).objet)).tableau)[0]),
 1557:                 &(((real8 *) (*((struct_vecteur *)
 1558:                 (*s_objet_argument_1).objet)).tableau)[1]), &registre_a);
 1559:         f77multiplicationcr_((&((struct_complexe16 *) (*((struct_vecteur *)
 1560:                 (*s_objet_argument_2).objet)).tableau)[1]),
 1561:                 &(((real8 *) (*((struct_vecteur *)
 1562:                 (*s_objet_argument_1).objet)).tableau)[0]), &registre_b);
 1563:         f77soustractioncc_(&registre_a, &registre_b, &(((struct_complexe16 *)
 1564:                 (*((struct_vecteur *) (*s_objet_resultat).objet)).tableau)[2]));
 1565:     }
 1566:     else if (((*s_objet_argument_1).type == VCX) &&
 1567:             ((*s_objet_argument_2).type == VCX))
 1568:     {
 1569:         if (((*((struct_vecteur *)  (*s_objet_argument_1).objet)).taille != 3)
 1570:                 || ((*((struct_vecteur *)  (*s_objet_argument_1).objet)).taille
 1571:                 != 3))
 1572:         {
 1573:             liberation(s_etat_processus, s_objet_argument_1);
 1574:             liberation(s_etat_processus, s_objet_argument_2);
 1575: 
 1576:             (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
 1577:             return;
 1578:         }
 1579: 
 1580:         if ((s_objet_resultat = allocation(s_etat_processus, VCX))
 1581:                 == NULL)
 1582:         {
 1583:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1584:             return;
 1585:         }
 1586: 
 1587:         (*((struct_vecteur *) (*s_objet_resultat).objet)).taille = 3;
 1588: 
 1589:         if (((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau =
 1590:                 malloc(3 * sizeof(struct_complexe16))) == NULL)
 1591:         {
 1592:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1593:             return;
 1594:         }
 1595: 
 1596:         f77multiplicationcc_((&((struct_complexe16 *) (*((struct_vecteur *)
 1597:                 (*s_objet_argument_2).objet)).tableau)[1]),
 1598:                 &(((struct_complexe16 *) (*((struct_vecteur *)
 1599:                 (*s_objet_argument_1).objet)).tableau)[2]), &registre_a);
 1600:         f77multiplicationcc_((&((struct_complexe16 *) (*((struct_vecteur *)
 1601:                 (*s_objet_argument_2).objet)).tableau)[2]),
 1602:                 &(((struct_complexe16 *) (*((struct_vecteur *)
 1603:                 (*s_objet_argument_1).objet)).tableau)[1]), &registre_b);
 1604:         f77soustractioncc_(&registre_a, &registre_b, &(((struct_complexe16 *)
 1605:                 (*((struct_vecteur *) (*s_objet_resultat).objet)).tableau)[0]));
 1606: 
 1607:         f77multiplicationcc_((&((struct_complexe16 *) (*((struct_vecteur *)
 1608:                 (*s_objet_argument_2).objet)).tableau)[2]),
 1609:                 &(((struct_complexe16 *) (*((struct_vecteur *)
 1610:                 (*s_objet_argument_1).objet)).tableau)[0]), &registre_a);
 1611:         f77multiplicationcc_((&((struct_complexe16 *) (*((struct_vecteur *)
 1612:                 (*s_objet_argument_2).objet)).tableau)[0]),
 1613:                 &(((struct_complexe16 *) (*((struct_vecteur *)
 1614:                 (*s_objet_argument_1).objet)).tableau)[2]), &registre_b);
 1615:         f77soustractioncc_(&registre_a, &registre_b, &(((struct_complexe16 *)
 1616:                 (*((struct_vecteur *) (*s_objet_resultat).objet)).tableau)[1]));
 1617: 
 1618:         f77multiplicationcc_((&((struct_complexe16 *) (*((struct_vecteur *)
 1619:                 (*s_objet_argument_2).objet)).tableau)[0]),
 1620:                 &(((struct_complexe16 *) (*((struct_vecteur *)
 1621:                 (*s_objet_argument_1).objet)).tableau)[1]), &registre_a);
 1622:         f77multiplicationcc_((&((struct_complexe16 *) (*((struct_vecteur *)
 1623:                 (*s_objet_argument_2).objet)).tableau)[1]),
 1624:                 &(((struct_complexe16 *) (*((struct_vecteur *)
 1625:                 (*s_objet_argument_1).objet)).tableau)[0]), &registre_b);
 1626:         f77soustractioncc_(&registre_a, &registre_b, &(((struct_complexe16 *)
 1627:                 (*((struct_vecteur *) (*s_objet_resultat).objet)).tableau)[2]));
 1628:     }
 1629:     else if (((*s_objet_argument_2).type == VRL) &&
 1630:             ((*s_objet_argument_1).type == VCX))
 1631:     {
 1632:         if (((*((struct_vecteur *)  (*s_objet_argument_1).objet)).taille != 3)
 1633:                 || ((*((struct_vecteur *)  (*s_objet_argument_1).objet)).taille
 1634:                 != 3))
 1635:         {
 1636:             liberation(s_etat_processus, s_objet_argument_1);
 1637:             liberation(s_etat_processus, s_objet_argument_2);
 1638: 
 1639:             (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
 1640:             return;
 1641:         }
 1642: 
 1643:         if ((s_objet_resultat = allocation(s_etat_processus, VCX))
 1644:                 == NULL)
 1645:         {
 1646:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1647:             return;
 1648:         }
 1649: 
 1650:         (*((struct_vecteur *) (*s_objet_resultat).objet)).taille = 3;
 1651: 
 1652:         if (((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau =
 1653:                 malloc(3 * sizeof(struct_complexe16))) == NULL)
 1654:         {
 1655:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1656:             return;
 1657:         }
 1658: 
 1659:         f77multiplicationcr_((&((struct_complexe16 *) (*((struct_vecteur *)
 1660:                 (*s_objet_argument_1).objet)).tableau)[1]),
 1661:                 &(((real8 *) (*((struct_vecteur *)
 1662:                 (*s_objet_argument_2).objet)).tableau)[2]), &registre_b);
 1663:         f77multiplicationcr_((&((struct_complexe16 *) (*((struct_vecteur *)
 1664:                 (*s_objet_argument_1).objet)).tableau)[2]),
 1665:                 &(((real8 *) (*((struct_vecteur *)
 1666:                 (*s_objet_argument_2).objet)).tableau)[1]), &registre_a);
 1667:         f77soustractioncc_(&registre_a, &registre_b, &(((struct_complexe16 *)
 1668:                 (*((struct_vecteur *) (*s_objet_resultat).objet)).tableau)[0]));
 1669: 
 1670:         f77multiplicationcr_((&((struct_complexe16 *) (*((struct_vecteur *)
 1671:                 (*s_objet_argument_1).objet)).tableau)[2]),
 1672:                 &(((real8 *) (*((struct_vecteur *)
 1673:                 (*s_objet_argument_2).objet)).tableau)[0]), &registre_b);
 1674:         f77multiplicationcr_((&((struct_complexe16 *) (*((struct_vecteur *)
 1675:                 (*s_objet_argument_1).objet)).tableau)[0]),
 1676:                 &(((real8 *) (*((struct_vecteur *)
 1677:                 (*s_objet_argument_2).objet)).tableau)[2]), &registre_a);
 1678:         f77soustractioncc_(&registre_a, &registre_b, &(((struct_complexe16 *)
 1679:                 (*((struct_vecteur *) (*s_objet_resultat).objet)).tableau)[1]));
 1680: 
 1681:         f77multiplicationcr_((&((struct_complexe16 *) (*((struct_vecteur *)
 1682:                 (*s_objet_argument_1).objet)).tableau)[0]),
 1683:                 &(((real8 *) (*((struct_vecteur *)
 1684:                 (*s_objet_argument_2).objet)).tableau)[1]), &registre_b);
 1685:         f77multiplicationcr_((&((struct_complexe16 *) (*((struct_vecteur *)
 1686:                 (*s_objet_argument_1).objet)).tableau)[1]),
 1687:                 &(((real8 *) (*((struct_vecteur *)
 1688:                 (*s_objet_argument_2).objet)).tableau)[0]), &registre_a);
 1689:         f77soustractioncc_(&registre_a, &registre_b, &(((struct_complexe16 *)
 1690:                 (*((struct_vecteur *) (*s_objet_resultat).objet)).tableau)[2]));
 1691:     }
 1692:     else if (((*s_objet_argument_2).type == VIN) &&
 1693:             ((*s_objet_argument_1).type == VCX))
 1694:     {
 1695:         if (((*((struct_vecteur *)  (*s_objet_argument_1).objet)).taille != 3)
 1696:                 || ((*((struct_vecteur *)  (*s_objet_argument_1).objet)).taille
 1697:                 != 3))
 1698:         {
 1699:             liberation(s_etat_processus, s_objet_argument_1);
 1700:             liberation(s_etat_processus, s_objet_argument_2);
 1701: 
 1702:             (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
 1703:             return;
 1704:         }
 1705: 
 1706:         if ((s_objet_resultat = allocation(s_etat_processus, VCX))
 1707:                 == NULL)
 1708:         {
 1709:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1710:             return;
 1711:         }
 1712: 
 1713:         (*((struct_vecteur *) (*s_objet_resultat).objet)).taille = 3;
 1714: 
 1715:         if (((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau =
 1716:                 malloc(3 * sizeof(struct_complexe16))) == NULL)
 1717:         {
 1718:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1719:             return;
 1720:         }
 1721: 
 1722:         f77multiplicationci_((&((struct_complexe16 *) (*((struct_vecteur *)
 1723:                 (*s_objet_argument_1).objet)).tableau)[1]),
 1724:                 &(((integer8 *) (*((struct_vecteur *)
 1725:                 (*s_objet_argument_2).objet)).tableau)[2]), &registre_b);
 1726:         f77multiplicationci_((&((struct_complexe16 *) (*((struct_vecteur *)
 1727:                 (*s_objet_argument_1).objet)).tableau)[2]),
 1728:                 &(((integer8 *) (*((struct_vecteur *)
 1729:                 (*s_objet_argument_2).objet)).tableau)[1]), &registre_a);
 1730:         f77soustractioncc_(&registre_a, &registre_b, &(((struct_complexe16 *)
 1731:                 (*((struct_vecteur *) (*s_objet_resultat).objet)).tableau)[0]));
 1732: 
 1733:         f77multiplicationci_((&((struct_complexe16 *) (*((struct_vecteur *)
 1734:                 (*s_objet_argument_1).objet)).tableau)[2]),
 1735:                 &(((integer8 *) (*((struct_vecteur *)
 1736:                 (*s_objet_argument_2).objet)).tableau)[0]), &registre_b);
 1737:         f77multiplicationci_((&((struct_complexe16 *) (*((struct_vecteur *)
 1738:                 (*s_objet_argument_1).objet)).tableau)[0]),
 1739:                 &(((integer8 *) (*((struct_vecteur *)
 1740:                 (*s_objet_argument_2).objet)).tableau)[2]), &registre_a);
 1741:         f77soustractioncc_(&registre_a, &registre_b, &(((struct_complexe16 *)
 1742:                 (*((struct_vecteur *) (*s_objet_resultat).objet)).tableau)[1]));
 1743: 
 1744:         f77multiplicationci_((&((struct_complexe16 *) (*((struct_vecteur *)
 1745:                 (*s_objet_argument_1).objet)).tableau)[0]),
 1746:                 &(((integer8 *) (*((struct_vecteur *)
 1747:                 (*s_objet_argument_2).objet)).tableau)[1]), &registre_b);
 1748:         f77multiplicationci_((&((struct_complexe16 *) (*((struct_vecteur *)
 1749:                 (*s_objet_argument_1).objet)).tableau)[1]),
 1750:                 &(((integer8 *) (*((struct_vecteur *)
 1751:                 (*s_objet_argument_2).objet)).tableau)[0]), &registre_a);
 1752:         f77soustractioncc_(&registre_a, &registre_b, &(((struct_complexe16 *)
 1753:                 (*((struct_vecteur *) (*s_objet_resultat).objet)).tableau)[2]));
 1754:     }
 1755: 
 1756: /*
 1757: --------------------------------------------------------------------------------
 1758:   Types incompatibles avec la fonction CROSS
 1759: --------------------------------------------------------------------------------
 1760: */
 1761: 
 1762:     else
 1763:     {
 1764:         liberation(s_etat_processus, s_objet_argument_1);
 1765:         liberation(s_etat_processus, s_objet_argument_2);
 1766: 
 1767:         (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
 1768:         return;
 1769:     }
 1770: 
 1771:     liberation(s_etat_processus, s_objet_argument_1);
 1772:     liberation(s_etat_processus, s_objet_argument_2);
 1773: 
 1774:     if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
 1775:             s_objet_resultat) == d_erreur)
 1776:     {
 1777:         return;
 1778:     }
 1779: 
 1780:     return;
 1781: }
 1782: 
 1783: // vim: ts=4

CVSweb interface <joel.bertrand@systella.fr>