File:  [local] / rpl / src / instructions_c2.c
Revision 1.1: download - view: text, annotated - select for diffs - revision graph
Tue Jan 26 15:22:44 2010 UTC (14 years, 3 months ago) by bertrand
Branches: MAIN
CVS tags: HEAD
Initial revision

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

CVSweb interface <joel.bertrand@systella.fr>