File:  [local] / rpl / src / instructions_c2.c
Revision 1.38: download - view: text, annotated - select for diffs - revision graph
Sat Sep 29 17:55:40 2012 UTC (11 years, 7 months ago) by bertrand
Branches: MAIN
CVS tags: HEAD
Mise à jour des fichiers d'aide.

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

CVSweb interface <joel.bertrand@systella.fr>