File:  [local] / rpl / src / instructions_m1.c
Revision 1.8: download - view: text, annotated - select for diffs - revision graph
Mon May 24 10:58:33 2010 UTC (13 years, 11 months ago) by bertrand
Branches: MAIN
CVS tags: rpl-4_0_16, rpl-4_0_15, HEAD
En route pour la 4.0.16 !

    1: /*
    2: ================================================================================
    3:   RPL/2 (R) version 4.0.16
    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 '-'
   29: ================================================================================
   30:   Entrées : structure processus
   31: --------------------------------------------------------------------------------
   32:   Sorties :
   33: --------------------------------------------------------------------------------
   34:   Effets de bord : néant
   35: ================================================================================
   36: */
   37: 
   38: void
   39: instruction_moins(struct_processus *s_etat_processus)
   40: {
   41:     integer8                        tampon;
   42:     integer8                        tampon_2;
   43: 
   44:     logical1                        depassement;
   45:     logical1                        drapeau;
   46:     logical1                        drapeau_neg;
   47: 
   48:     struct_liste_chainee            *l_element_courant;
   49:     struct_liste_chainee            *l_element_precedent;
   50: 
   51:     struct_objet                    *s_copie_argument_1;
   52:     struct_objet                    *s_copie_argument_2;
   53:     struct_objet                    *s_objet_argument_1;
   54:     struct_objet                    *s_objet_argument_2;
   55:     struct_objet                    *s_objet_resultat;
   56: 
   57:     unsigned long                   i;
   58:     unsigned long                   j;
   59:     unsigned long                   nombre_elements;
   60: 
   61:     (*s_etat_processus).erreur_execution = d_ex;
   62: 
   63:     if ((*s_etat_processus).affichage_arguments == 'Y')
   64:     {
   65:         printf("\n  - ");
   66: 
   67:         if ((*s_etat_processus).langue == 'F')
   68:         {
   69:             printf("(soustraction)\n\n");
   70:         }
   71:         else
   72:         {
   73:             printf("(substraction)\n\n");
   74:         }
   75: 
   76:         printf("    2: %s, %s, %s\n", d_INT, d_REL, d_CPL);
   77:         printf("    1: %s, %s, %s\n", d_INT, d_REL, d_CPL);
   78:         printf("->  1: %s, %s, %s\n\n", d_INT, d_REL, d_CPL);
   79: 
   80:         printf("    2: %s, %s, %s\n", d_VIN, d_VRL, d_VCX);
   81:         printf("    1: %s, %s, %s\n", d_VIN, d_VRL, d_VCX);
   82:         printf("->  1: %s, %s, %s\n\n", d_VIN, d_VRL, d_VCX);
   83: 
   84:         printf("    2: %s, %s, %s\n", d_MIN, d_MRL, d_MCX);
   85:         printf("    1: %s, %s, %s\n", d_MIN, d_MRL, d_MCX);
   86:         printf("->  1: %s, %s, %s\n\n", d_MIN, d_MRL, d_MCX);
   87: 
   88:         printf("    2: %s, %s\n", d_BIN, d_INT);
   89:         printf("    1: %s, %s\n", d_BIN, d_INT);
   90:         printf("->  1: %s\n\n", d_BIN);
   91: 
   92:         printf("    2: %s, %s, %s, %s, %s, %s\n",
   93:                 d_INT, d_REL, d_CPL, d_NOM, d_ALG, d_RPN);
   94:         printf("    1: %s, %s, %s, %s, %s, %s\n",
   95:                 d_INT, d_REL, d_CPL, d_NOM, d_ALG, d_RPN);
   96:         printf("->  1: %s, %s\n", d_ALG, d_RPN);
   97: 
   98:         return;
   99:     }
  100:     else if ((*s_etat_processus).test_instruction == 'Y')
  101:     {
  102:         (*s_etat_processus).nombre_arguments = 0;
  103:         return;
  104:     }
  105:     
  106:     if (test_cfsf(s_etat_processus, 31) == d_vrai)
  107:     {
  108:         if (empilement_pile_last(s_etat_processus, 2) == d_erreur)
  109:         {
  110:             return;
  111:         }
  112:     }
  113: 
  114:     if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
  115:             &s_objet_argument_1) == d_erreur)
  116:     {
  117:         (*s_etat_processus).erreur_execution = d_ex_manque_argument;
  118:         return;
  119:     }
  120: 
  121:     if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
  122:             &s_objet_argument_2) == d_erreur)
  123:     {
  124:         liberation(s_etat_processus, s_objet_argument_1);
  125: 
  126:         (*s_etat_processus).erreur_execution = d_ex_manque_argument;
  127:         return;
  128:     }
  129: 
  130: /*
  131: --------------------------------------------------------------------------------
  132:   Soustraction de deux entiers
  133: --------------------------------------------------------------------------------
  134: */
  135: 
  136:     if (((*s_objet_argument_1).type == INT) &&
  137:             ((*s_objet_argument_2).type == INT))
  138:     {
  139:         tampon_2 = -(*((integer8 *) (*s_objet_argument_1).objet));
  140: 
  141:         if (depassement_addition(&tampon_2,
  142:                 (integer8 *) (*s_objet_argument_2).objet, &tampon) ==
  143:                 d_absence_erreur)
  144:         {
  145:             if ((s_objet_resultat = allocation(s_etat_processus, INT))
  146:                     == NULL)
  147:             {
  148:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  149:                 return;
  150:             }
  151: 
  152:             (*((integer8 *) (*s_objet_resultat).objet)) = tampon;
  153:         }
  154:         else
  155:         {
  156:             if ((s_objet_resultat = allocation(s_etat_processus, REL))
  157:                     == NULL)
  158:             {
  159:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  160:                 return;
  161:             }
  162: 
  163:             (*((real8 *) (*s_objet_resultat).objet)) = ((real8)
  164:                     (-(*((integer8 *) (*s_objet_argument_1).objet))))
  165:                     + ((real8) (*((integer8 *) (*s_objet_argument_2).objet)));
  166:         }
  167:     }
  168: 
  169: /*
  170: --------------------------------------------------------------------------------
  171:   Soustraction d'un entier et d'un réel
  172: --------------------------------------------------------------------------------
  173: */
  174: 
  175:     else if ((((*s_objet_argument_1).type == INT) &&
  176:             ((*s_objet_argument_2).type == REL)) ||
  177:             (((*s_objet_argument_1).type == REL) &&
  178:             ((*s_objet_argument_2).type == INT)))
  179:     {
  180:         if ((s_objet_resultat = allocation(s_etat_processus, REL))
  181:                 == NULL)
  182:         {
  183:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  184:             return;
  185:         }
  186: 
  187:         if ((*s_objet_argument_1).type == INT)
  188:         {
  189:             (*((real8 *) (*s_objet_resultat).objet)) = (*((real8 *)
  190:                     (*s_objet_argument_2).objet)) - (*((integer8 *)
  191:                     (*s_objet_argument_1).objet));
  192:         }
  193:         else
  194:         {
  195:             (*((real8 *) (*s_objet_resultat).objet)) = (*((integer8 *)
  196:                     (*s_objet_argument_2).objet)) - (*((real8 *)
  197:                     (*s_objet_argument_1).objet));
  198:         }
  199:     }
  200: 
  201: /*
  202: --------------------------------------------------------------------------------
  203:   Soustraction d'un entier et d'un complexe
  204: --------------------------------------------------------------------------------
  205: */
  206: 
  207:     else if ((((*s_objet_argument_1).type == INT) &&
  208:             ((*s_objet_argument_2).type == CPL)) ||
  209:             (((*s_objet_argument_1).type == CPL) &&
  210:             ((*s_objet_argument_2).type == INT)))
  211:     {
  212:         if ((s_objet_resultat = allocation(s_etat_processus, CPL))
  213:                 == NULL)
  214:         {
  215:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  216:             return;
  217:         }
  218: 
  219:         if ((*s_objet_argument_1).type == INT)
  220:         {
  221:             f77soustractionci_((struct_complexe16 *) (*s_objet_argument_2)
  222:                     .objet, (integer8 *) (*s_objet_argument_1).objet,
  223:                     (struct_complexe16 *) (*s_objet_resultat).objet);
  224:         }
  225:         else
  226:         {
  227:             f77soustractionic_((integer8 *) (*s_objet_argument_2).objet,
  228:                     (struct_complexe16 *) (*s_objet_argument_1).objet,
  229:                     (struct_complexe16 *) (*s_objet_resultat).objet);
  230:         }
  231:     }
  232: 
  233: /*
  234: --------------------------------------------------------------------------------
  235:   Soustraction de deux réels
  236: --------------------------------------------------------------------------------
  237: */
  238: 
  239:     else if (((*s_objet_argument_1).type == REL) &&
  240:             ((*s_objet_argument_2).type == REL))
  241:     {
  242:         if ((s_objet_resultat = allocation(s_etat_processus, REL))
  243:                 == NULL)
  244:         {
  245:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  246:             return;
  247:         }
  248: 
  249:         (*((real8 *) (*s_objet_resultat).objet)) = (*((real8 *)
  250:                 (*s_objet_argument_2).objet)) - (*((real8 *)
  251:                 (*s_objet_argument_1).objet));
  252:     }
  253: 
  254: /*
  255: --------------------------------------------------------------------------------
  256:   Soustraction d'un réel et d'un complexe
  257: --------------------------------------------------------------------------------
  258: */
  259: 
  260:     else if ((((*s_objet_argument_1).type == REL) &&
  261:             ((*s_objet_argument_2).type == CPL)) ||
  262:             (((*s_objet_argument_1).type == CPL) &&
  263:             ((*s_objet_argument_2).type == REL)))
  264:     {
  265:         if ((s_objet_resultat = allocation(s_etat_processus, CPL))
  266:                 == NULL)
  267:         {
  268:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  269:             return;
  270:         }
  271: 
  272:         if ((*s_objet_argument_1).type == REL)
  273:         {
  274:             f77soustractioncr_((struct_complexe16 *)
  275:                     (*s_objet_argument_2).objet,
  276:                     (real8 *) (*s_objet_argument_1).objet,
  277:                     (struct_complexe16 *) (*s_objet_resultat).objet);
  278:         }
  279:         else
  280:         {
  281:             f77soustractionrc_((real8 *) (*s_objet_argument_2).objet,
  282:                     (struct_complexe16 *) (*s_objet_argument_1).objet,
  283:                     (struct_complexe16 *) (*s_objet_resultat).objet);
  284:         }
  285:     }
  286: 
  287: /*
  288: --------------------------------------------------------------------------------
  289:   Soustraction de deux complexes
  290: --------------------------------------------------------------------------------
  291: */
  292: 
  293:     else if (((*s_objet_argument_1).type == CPL) &&
  294:             ((*s_objet_argument_2).type == CPL))
  295:     {
  296:         if ((s_objet_resultat = allocation(s_etat_processus, CPL))
  297:                 == NULL)
  298:         {
  299:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  300:             return;
  301:         }
  302: 
  303:         f77soustractioncc_((struct_complexe16 *) (*s_objet_argument_2).objet,
  304:                 (struct_complexe16 *) (*s_objet_argument_1).objet,
  305:                 (struct_complexe16 *) (*s_objet_resultat).objet);
  306:     }
  307: 
  308: /*
  309: --------------------------------------------------------------------------------
  310:   Soustraction de deux vecteurs
  311: --------------------------------------------------------------------------------
  312: */
  313:     /*
  314:      * Entier / Entier
  315:      */
  316: 
  317:     else if (((*s_objet_argument_1).type == VIN) &&
  318:             ((*s_objet_argument_2).type == VIN))
  319:     {
  320:         if ((s_objet_resultat = allocation(s_etat_processus, VIN))
  321:                 == NULL)
  322:         {
  323:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  324:             return;
  325:         }
  326: 
  327:         if ((*(((struct_vecteur *) (*s_objet_argument_1).objet))).taille !=
  328:                 (*(((struct_vecteur *) (*s_objet_argument_2).objet))).taille)
  329:         {
  330:             liberation(s_etat_processus, s_objet_argument_1);
  331:             liberation(s_etat_processus, s_objet_argument_2);
  332:             liberation(s_etat_processus, s_objet_resultat);
  333: 
  334:             (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
  335:             return;
  336:         }
  337: 
  338:         (*((struct_vecteur *) (*s_objet_resultat).objet)).taille =
  339:                 (*((struct_vecteur *) (*s_objet_argument_1).objet)).taille;
  340: 
  341:         if (((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau =
  342:                 malloc((*(((struct_vecteur *) (*s_objet_resultat)
  343:                 .objet))).taille * sizeof(integer8))) == NULL)
  344:         {
  345:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  346:             return;
  347:         }
  348: 
  349:         depassement = d_faux;
  350: 
  351:         for(i = 0; i < (*(((struct_vecteur *) (*s_objet_resultat)
  352:                 .objet))).taille; i++)
  353:         {
  354:             tampon = -((integer8 *) (*((struct_vecteur *) (*s_objet_argument_1)
  355:                     .objet)).tableau)[i];
  356: 
  357:             if (depassement_addition(&(((integer8 *) (*((struct_vecteur *)
  358:                     (*s_objet_argument_2).objet)).tableau)[i]), &tampon,
  359:                     &(((integer8 *) (*((struct_vecteur *)
  360:                     (*s_objet_resultat).objet)).tableau)[i])) == d_erreur)
  361:             {
  362:                 depassement = d_vrai;
  363:             }
  364:         }
  365: 
  366:         if (depassement == d_vrai)
  367:         {
  368:             free((*((struct_vecteur *) (*s_objet_argument_1).objet)).tableau);
  369: 
  370:             if (((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau =
  371:                     malloc((*(((struct_vecteur *) (*s_objet_resultat)
  372:                     .objet))).taille * sizeof(real8))) == NULL)
  373:             {
  374:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  375:                 return;
  376:             }
  377: 
  378:             (*s_objet_resultat).type = VRL;
  379:             (*((struct_vecteur *) (*s_objet_resultat).objet)).type = 'R';
  380: 
  381:             for(i = 0; i < (*(((struct_vecteur *) (*s_objet_resultat)
  382:                     .objet))).taille; i++)
  383:             {
  384:                 ((real8 *) (*((struct_vecteur *) (*s_objet_resultat).objet))
  385:                         .tableau)[i] = (real8) (((integer8 *)
  386:                         (*((struct_vecteur *) (*s_objet_argument_2).objet))
  387:                         .tableau)[i]) - (real8) (((integer8 *)
  388:                         (*((struct_vecteur *) (*s_objet_argument_1)
  389:                         .objet)).tableau)[i]);
  390:             }
  391:         }
  392:     }
  393: 
  394:     /*
  395:      * Entier / Réel
  396:      */
  397: 
  398:     else if ((((*s_objet_argument_1).type == VIN) &&
  399:             ((*s_objet_argument_2).type == VRL)) ||
  400:             (((*s_objet_argument_1).type == VRL) &&
  401:             ((*s_objet_argument_2).type == VIN)))
  402:     {
  403:         if ((s_objet_resultat = allocation(s_etat_processus, VRL))
  404:                 == NULL)
  405:         {
  406:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  407:             return;
  408:         }
  409: 
  410:         if ((*(((struct_vecteur *) (*s_objet_argument_1).objet))).taille !=
  411:                 (*(((struct_vecteur *) (*s_objet_argument_2).objet))).taille)
  412:         {
  413:             liberation(s_etat_processus, s_objet_argument_1);
  414:             liberation(s_etat_processus, s_objet_argument_2);
  415:             liberation(s_etat_processus, s_objet_resultat);
  416: 
  417:             (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
  418:             return;
  419:         }
  420: 
  421:         (*((struct_vecteur *) (*s_objet_resultat).objet)).taille =
  422:                 (*((struct_vecteur *) (*s_objet_argument_1).objet)).taille;
  423: 
  424:         if (((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau =
  425:                 malloc((*(((struct_vecteur *) (*s_objet_resultat)
  426:                 .objet))).taille * sizeof(real8))) == NULL)
  427:         {
  428:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  429:             return;
  430:         }
  431: 
  432:         for(i = 0; i < (*(((struct_vecteur *) (*s_objet_resultat)
  433:                 .objet))).taille; i++)
  434:         {
  435:             if ((*s_objet_argument_1).type == VIN)
  436:             {
  437:                 ((real8 *) (*((struct_vecteur *) (*s_objet_resultat).objet))
  438:                         .tableau)[i] = ((real8 *) (*((struct_vecteur *)
  439:                         (*s_objet_argument_2).objet)).tableau)[i]
  440:                         - ((integer8 *) (*((struct_vecteur *)
  441:                         (*s_objet_argument_1).objet)).tableau)[i];
  442:             }
  443:             else
  444:             {
  445:                 ((real8 *) (*((struct_vecteur *) (*s_objet_resultat).objet))
  446:                         .tableau)[i] = ((integer8 *) (*((struct_vecteur *)
  447:                         (*s_objet_argument_2).objet)).tableau)[i]
  448:                         - ((real8 *) (*((struct_vecteur *)
  449:                         (*s_objet_argument_1).objet)).tableau)[i];
  450:             }
  451:         }
  452:     }
  453: 
  454:     /*
  455:      * Réel / Réel
  456:      */
  457: 
  458:     else if (((*s_objet_argument_1).type == VRL) &&
  459:             ((*s_objet_argument_2).type == VRL))
  460:     {
  461:         if ((s_objet_resultat = allocation(s_etat_processus, VRL))
  462:                 == NULL)
  463:         {
  464:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  465:             return;
  466:         }
  467: 
  468:         if ((*(((struct_vecteur *) (*s_objet_argument_1).objet))).taille !=
  469:                 (*(((struct_vecteur *) (*s_objet_argument_2).objet))).taille)
  470:         {
  471:             liberation(s_etat_processus, s_objet_argument_1);
  472:             liberation(s_etat_processus, s_objet_argument_2);
  473:             liberation(s_etat_processus, s_objet_resultat);
  474: 
  475:             (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
  476:             return;
  477:         }
  478: 
  479:         (*((struct_vecteur *) (*s_objet_resultat).objet)).taille =
  480:                 (*((struct_vecteur *) (*s_objet_argument_1).objet)).taille;
  481: 
  482:         if (((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau =
  483:                 malloc((*(((struct_vecteur *) (*s_objet_resultat)
  484:                 .objet))).taille * sizeof(real8))) == NULL)
  485:         {
  486:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  487:             return;
  488:         }
  489: 
  490:         for(i = 0; i < (*(((struct_vecteur *) (*s_objet_resultat)
  491:                 .objet))).taille; i++)
  492:         {
  493:             ((real8 *) (*((struct_vecteur *) (*s_objet_resultat).objet))
  494:                     .tableau)[i] = ((real8 *) (*((struct_vecteur *)
  495:                     (*s_objet_argument_2).objet)).tableau)[i] -
  496:                     ((real8 *) (*((struct_vecteur *) (*s_objet_argument_1)
  497:                     .objet)).tableau)[i];
  498:         }
  499:     }
  500: 
  501:     /*
  502:      * Entier / Complexe
  503:      */
  504: 
  505:     else if ((((*s_objet_argument_1).type == VIN) &&
  506:             ((*s_objet_argument_2).type == VCX)) ||
  507:             (((*s_objet_argument_1).type == VCX) &&
  508:             ((*s_objet_argument_2).type == VIN)))
  509:     {
  510:         if ((s_objet_resultat = allocation(s_etat_processus, VCX))
  511:                 == NULL)
  512:         {
  513:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  514:             return;
  515:         }
  516: 
  517:         if ((*(((struct_vecteur *) (*s_objet_argument_1).objet))).taille !=
  518:                 (*(((struct_vecteur *) (*s_objet_argument_2).objet))).taille)
  519:         {
  520:             liberation(s_etat_processus, s_objet_argument_1);
  521:             liberation(s_etat_processus, s_objet_argument_2);
  522:             liberation(s_etat_processus, s_objet_resultat);
  523: 
  524:             (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
  525:             return;
  526:         }
  527: 
  528:         (*((struct_vecteur *) (*s_objet_resultat).objet)).taille =
  529:                 (*((struct_vecteur *) (*s_objet_argument_1).objet)).taille;
  530: 
  531:         if (((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau =
  532:                 malloc((*(((struct_vecteur *) (*s_objet_resultat)
  533:                 .objet))).taille * sizeof(struct_complexe16))) == NULL)
  534:         {
  535:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  536:             return;
  537:         }
  538: 
  539:         for(i = 0; i < (*(((struct_vecteur *) (*s_objet_resultat)
  540:                 .objet))).taille; i++)
  541:         {
  542:             if ((*s_objet_argument_1).type == VIN)
  543:             {
  544:                 f77soustractionci_(&(((struct_complexe16 *)
  545:                         (*((struct_vecteur *)
  546:                         (*s_objet_argument_2).objet)).tableau)[i]),
  547:                         &(((integer8 *) (*((struct_vecteur *)
  548:                         (*s_objet_argument_1).objet)).tableau)[i]),
  549:                         &(((struct_complexe16 *) (*((struct_vecteur *)
  550:                         (*s_objet_resultat).objet)).tableau)[i]));
  551:             }
  552:             else
  553:             {
  554:                 f77soustractionic_(&(((integer8 *) (*((struct_vecteur *)
  555:                         (*s_objet_argument_2).objet)).tableau)[i]),
  556:                         &(((struct_complexe16 *) (*((struct_vecteur *)
  557:                         (*s_objet_argument_1).objet)).tableau)[i]),
  558:                         &(((struct_complexe16 *) (*((struct_vecteur *)
  559:                         (*s_objet_resultat).objet)).tableau)[i]));
  560:             }
  561:         }
  562:     }
  563: 
  564:     /*
  565:      * Réel / Complexe
  566:      */
  567: 
  568:     else if ((((*s_objet_argument_1).type == VRL) &&
  569:             ((*s_objet_argument_2).type == VCX)) ||
  570:             (((*s_objet_argument_1).type == VCX) &&
  571:             ((*s_objet_argument_2).type == VRL)))
  572:     {
  573:         if ((s_objet_resultat = allocation(s_etat_processus, VCX))
  574:                 == NULL)
  575:         {
  576:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  577:             return;
  578:         }
  579: 
  580:         if ((*(((struct_vecteur *) (*s_objet_argument_1).objet))).taille !=
  581:                 (*(((struct_vecteur *) (*s_objet_argument_2).objet))).taille)
  582:         {
  583:             liberation(s_etat_processus, s_objet_argument_1);
  584:             liberation(s_etat_processus, s_objet_argument_2);
  585:             liberation(s_etat_processus, s_objet_resultat);
  586: 
  587:             (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
  588:             return;
  589:         }
  590: 
  591:         (*((struct_vecteur *) (*s_objet_resultat).objet)).taille =
  592:                 (*((struct_vecteur *) (*s_objet_argument_1).objet)).taille;
  593: 
  594:         if (((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau =
  595:                 malloc((*(((struct_vecteur *) (*s_objet_resultat)
  596:                 .objet))).taille * sizeof(struct_complexe16))) == NULL)
  597:         {
  598:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  599:             return;
  600:         }
  601: 
  602:         for(i = 0; i < (*(((struct_vecteur *) (*s_objet_resultat)
  603:                 .objet))).taille; i++)
  604:         {
  605:             if ((*s_objet_argument_1).type == VRL)
  606:             {
  607:                 f77soustractioncr_(&(((struct_complexe16 *)
  608:                         (*((struct_vecteur *)
  609:                         (*s_objet_argument_2).objet)).tableau)[i]),
  610:                         &(((real8 *) (*((struct_vecteur *)
  611:                         (*s_objet_argument_1).objet)).tableau)[i]),
  612:                         &(((struct_complexe16 *) (*((struct_vecteur *)
  613:                         (*s_objet_resultat).objet)).tableau)[i]));
  614:             }
  615:             else
  616:             {
  617:                 f77soustractionrc_(&(((real8 *) (*((struct_vecteur *)
  618:                         (*s_objet_argument_2).objet)).tableau)[i]),
  619:                         &(((struct_complexe16 *) (*((struct_vecteur *)
  620:                         (*s_objet_argument_1).objet)).tableau)[i]),
  621:                         &(((struct_complexe16 *) (*((struct_vecteur *)
  622:                         (*s_objet_resultat).objet)).tableau)[i]));
  623:             }
  624:         }
  625:     }
  626: 
  627:     /*
  628:      * Complexe / Complexe
  629:      */
  630: 
  631:     else if (((*s_objet_argument_1).type == VCX) &&
  632:             ((*s_objet_argument_2).type == VCX))
  633:     {
  634:         if ((s_objet_resultat = allocation(s_etat_processus, VCX))
  635:                 == NULL)
  636:         {
  637:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  638:             return;
  639:         }
  640: 
  641:         if ((*(((struct_vecteur *) (*s_objet_argument_1).objet))).taille !=
  642:                 (*(((struct_vecteur *) (*s_objet_argument_2).objet))).taille)
  643:         {
  644:             liberation(s_etat_processus, s_objet_argument_1);
  645:             liberation(s_etat_processus, s_objet_argument_2);
  646:             liberation(s_etat_processus, s_objet_resultat);
  647: 
  648:             (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
  649:             return;
  650:         }
  651: 
  652:         (*((struct_vecteur *) (*s_objet_resultat).objet)).taille =
  653:                 (*((struct_vecteur *) (*s_objet_argument_1).objet)).taille;
  654: 
  655:         if (((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau =
  656:                 malloc((*(((struct_vecteur *) (*s_objet_resultat)
  657:                 .objet))).taille * sizeof(struct_complexe16))) == NULL)
  658:         {
  659:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  660:             return;
  661:         }
  662: 
  663:         for(i = 0; i < (*(((struct_vecteur *) (*s_objet_resultat)
  664:                 .objet))).taille; i++)
  665:         {
  666:             f77soustractioncc_(&(((struct_complexe16 *) (*((struct_vecteur *)
  667:                     (*s_objet_argument_2).objet)).tableau)[i]),
  668:                     &(((struct_complexe16 *) (*((struct_vecteur *)
  669:                     (*s_objet_argument_1).objet)).tableau)[i]),
  670:                     &(((struct_complexe16 *) (*((struct_vecteur *)
  671:                     (*s_objet_resultat).objet)).tableau)[i]));
  672:         }
  673:     }
  674: 
  675: /*
  676: --------------------------------------------------------------------------------
  677:   Soustraction de deux matrices
  678: --------------------------------------------------------------------------------
  679: */
  680:     /*
  681:      * Entier / Entier
  682:      */
  683: 
  684:     else if (((*s_objet_argument_1).type == MIN) &&
  685:             ((*s_objet_argument_2).type == MIN))
  686:     {
  687:         if ((s_objet_resultat = allocation(s_etat_processus, MIN))
  688:                 == NULL)
  689:         {
  690:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  691:             return;
  692:         }
  693: 
  694:         if (((*(((struct_matrice *) (*s_objet_argument_1).objet)))
  695:                 .nombre_lignes != (*(((struct_matrice *) (*s_objet_argument_2)
  696:                 .objet))).nombre_lignes) || ((*(((struct_matrice *)
  697:                 (*s_objet_argument_1).objet))).nombre_colonnes !=
  698:                 (*(((struct_matrice *) (*s_objet_argument_2).objet)))
  699:                 .nombre_colonnes))
  700:         {
  701:             liberation(s_etat_processus, s_objet_argument_1);
  702:             liberation(s_etat_processus, s_objet_argument_2);
  703:             liberation(s_etat_processus, s_objet_resultat);
  704: 
  705:             (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
  706:             return;
  707:         }
  708: 
  709:         (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_lignes =
  710:                 (*((struct_matrice *) (*s_objet_argument_1).objet))
  711:                 .nombre_lignes;
  712:         (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_colonnes =
  713:                 (*((struct_matrice *) (*s_objet_argument_1).objet))
  714:                 .nombre_colonnes;
  715: 
  716:         if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau =
  717:                 malloc((*(((struct_matrice *) (*s_objet_resultat)
  718:                 .objet))).nombre_lignes * sizeof(integer8 *))) == NULL)
  719:         {
  720:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  721:             return;
  722:         }
  723: 
  724:         depassement = d_faux;
  725: 
  726:         for(i = 0; i < (*(((struct_matrice *) (*s_objet_resultat)
  727:                 .objet))).nombre_lignes; i++)
  728:         {
  729:             if ((((integer8 **) (*((struct_matrice *) (*s_objet_resultat)
  730:                     .objet)).tableau)[i] = malloc((*((
  731:                     (struct_matrice *) (*s_objet_resultat).objet)))
  732:                     .nombre_colonnes * sizeof(integer8))) == NULL)
  733:             {
  734:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  735:                 return;
  736:             }
  737: 
  738:             for(j = 0; j < (*(((struct_matrice *) (*s_objet_resultat).objet)))
  739:                     .nombre_colonnes; j++)
  740:             {
  741:                 tampon = -((integer8 **) (*((struct_matrice *)
  742:                         (*s_objet_argument_1).objet)).tableau)[i][j];
  743: 
  744:                 if (depassement_addition(&(((integer8 **) (*((struct_matrice *)
  745:                         (*s_objet_argument_2).objet)).tableau)[i][j]), &tampon,
  746:                         &(((integer8 **) (*((struct_matrice *)
  747:                         (*s_objet_resultat).objet)).tableau)[i][j]))
  748:                         == d_erreur)
  749:                 {
  750:                     depassement = d_vrai;
  751:                 }
  752:             }
  753:         }
  754: 
  755:         if (depassement == d_vrai)
  756:         {
  757:             (*s_objet_resultat).type = MRL;
  758:             (*((struct_matrice *) (*s_objet_resultat).objet)).type = 'R';
  759: 
  760:             for(i = 0; i < (*(((struct_matrice *) (*s_objet_resultat)
  761:                     .objet))).nombre_lignes; i++)
  762:             {
  763:                 free(((integer8 **) (*((struct_matrice *)
  764:                         (*s_objet_resultat).objet)).tableau)[i]);
  765: 
  766:                 if ((((real8 **) (*((struct_matrice *) (*s_objet_resultat)
  767:                         .objet)).tableau)[i] = malloc((*((
  768:                         (struct_matrice *) (*s_objet_resultat).objet)))
  769:                         .nombre_colonnes * sizeof(real8))) == NULL)
  770:                 {
  771:                     (*s_etat_processus).erreur_systeme =
  772:                             d_es_allocation_memoire;
  773:                     return;
  774:                 }
  775: 
  776:                 for(j = 0; j < (*(((struct_matrice *)
  777:                         (*s_objet_resultat).objet))).nombre_colonnes; j++)
  778:                 {
  779:                     ((real8 **) (*((struct_matrice *) (*s_objet_resultat)
  780:                             .objet)).tableau)[i][j] = ((real8) ((integer8 **)
  781:                             (*((struct_matrice *) (*s_objet_argument_2).objet))
  782:                             .tableau)[i][j]) - ((real8) ((integer8 **)
  783:                             (*((struct_matrice *) (*s_objet_argument_1).objet))
  784:                             .tableau)[i][j]);
  785:                 }
  786:             }
  787:         }
  788:     }
  789: 
  790:     /*
  791:      * Entier / Réel
  792:      */
  793: 
  794:     else if ((((*s_objet_argument_1).type == MIN) &&
  795:             ((*s_objet_argument_2).type == MRL)) ||
  796:             (((*s_objet_argument_1).type == MRL) &&
  797:             ((*s_objet_argument_2).type == MIN)))
  798:     {
  799:         if ((s_objet_resultat = allocation(s_etat_processus, MRL))
  800:                 == NULL)
  801:         {
  802:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  803:             return;
  804:         }
  805: 
  806:         if (((*(((struct_matrice *) (*s_objet_argument_1).objet)))
  807:                 .nombre_lignes != (*(((struct_matrice *) (*s_objet_argument_2)
  808:                 .objet))).nombre_lignes) || ((*(((struct_matrice *)
  809:                 (*s_objet_argument_1).objet))).nombre_colonnes !=
  810:                 (*(((struct_matrice *) (*s_objet_argument_2).objet)))
  811:                 .nombre_colonnes))
  812:         {
  813:             liberation(s_etat_processus, s_objet_argument_1);
  814:             liberation(s_etat_processus, s_objet_argument_2);
  815:             liberation(s_etat_processus, s_objet_resultat);
  816: 
  817:             (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
  818:             return;
  819:         }
  820: 
  821:         (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_lignes =
  822:                 (*((struct_matrice *) (*s_objet_argument_1).objet))
  823:                 .nombre_lignes;
  824:         (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_colonnes =
  825:                 (*((struct_matrice *) (*s_objet_argument_1).objet))
  826:                 .nombre_colonnes;
  827: 
  828:         if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau =
  829:                 malloc((*(((struct_matrice *) (*s_objet_resultat)
  830:                 .objet))).nombre_lignes * sizeof(real8 *))) == NULL)
  831:         {
  832:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  833:             return;
  834:         }
  835: 
  836:         for(i = 0; i < (*(((struct_matrice *) (*s_objet_resultat)
  837:                 .objet))).nombre_lignes; i++)
  838:         {
  839:             if ((((real8 **) (*((struct_matrice *) (*s_objet_resultat)
  840:                     .objet)).tableau)[i] = malloc((*((
  841:                     (struct_matrice *) (*s_objet_resultat).objet)))
  842:                     .nombre_colonnes * sizeof(real8))) == NULL)
  843:             {
  844:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  845:                 return;
  846:             }
  847: 
  848:             for(j = 0; j < (*(((struct_matrice *) (*s_objet_resultat).objet)))
  849:                     .nombre_colonnes; j++)
  850:             {
  851:                 if ((*s_objet_argument_1).type == MIN)
  852:                 {
  853:                     ((real8 **) (*((struct_matrice *) (*s_objet_resultat)
  854:                             .objet)).tableau)[i][j] = ((real8 **)
  855:                             (*((struct_matrice *) (*s_objet_argument_2).objet))
  856:                             .tableau)[i][j] - ((integer8 **)
  857:                             (*((struct_matrice *) (*s_objet_argument_1).objet))
  858:                             .tableau)[i][j];
  859:                 }
  860:                 else
  861:                 {
  862:                     ((real8 **) (*((struct_matrice *) (*s_objet_resultat)
  863:                             .objet)).tableau)[i][j] = ((integer8 **)
  864:                             (*((struct_matrice *) (*s_objet_argument_2)
  865:                             .objet)).tableau)[i][j] - ((real8 **)
  866:                             (*((struct_matrice *) (*s_objet_argument_1).objet))
  867:                             .tableau)[i][j];
  868:                 }
  869:             }
  870:         }
  871:     }
  872: 
  873:     /*
  874:      * Réel / Réel
  875:      */
  876: 
  877:     else if (((*s_objet_argument_1).type == MRL) &&
  878:             ((*s_objet_argument_2).type == MRL))
  879:     {
  880:         if ((s_objet_resultat = allocation(s_etat_processus, MRL))
  881:                 == NULL)
  882:         {
  883:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  884:             return;
  885:         }
  886: 
  887:         if (((*(((struct_matrice *) (*s_objet_argument_1).objet)))
  888:                 .nombre_lignes != (*(((struct_matrice *) (*s_objet_argument_2)
  889:                 .objet))).nombre_lignes) || ((*(((struct_matrice *)
  890:                 (*s_objet_argument_1).objet))).nombre_colonnes !=
  891:                 (*(((struct_matrice *) (*s_objet_argument_2).objet)))
  892:                 .nombre_colonnes))
  893:         {
  894:             liberation(s_etat_processus, s_objet_argument_1);
  895:             liberation(s_etat_processus, s_objet_argument_2);
  896:             liberation(s_etat_processus, s_objet_resultat);
  897: 
  898:             (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
  899:             return;
  900:         }
  901: 
  902:         (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_lignes =
  903:                 (*((struct_matrice *) (*s_objet_argument_1).objet))
  904:                 .nombre_lignes;
  905:         (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_colonnes =
  906:                 (*((struct_matrice *) (*s_objet_argument_1).objet))
  907:                 .nombre_colonnes;
  908: 
  909:         if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau =
  910:                 malloc((*(((struct_matrice *) (*s_objet_resultat)
  911:                 .objet))).nombre_lignes * sizeof(real8 *))) == NULL)
  912:         {
  913:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  914:             return;
  915:         }
  916: 
  917:         for(i = 0; i < (*(((struct_matrice *) (*s_objet_resultat)
  918:                 .objet))).nombre_lignes; i++)
  919:         {
  920:             if ((((real8 **) (*((struct_matrice *) (*s_objet_resultat)
  921:                     .objet)).tableau)[i] = malloc((*((
  922:                     (struct_matrice *) (*s_objet_resultat).objet)))
  923:                     .nombre_colonnes * sizeof(real8))) == NULL)
  924:             {
  925:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  926:                 return;
  927:             }
  928: 
  929:             for(j = 0; j < (*(((struct_matrice *) (*s_objet_resultat).objet)))
  930:                     .nombre_colonnes; j++)
  931:             {
  932:                 ((real8 **) (*((struct_matrice *) (*s_objet_resultat)
  933:                         .objet)).tableau)[i][j] = ((real8 **)
  934:                         (*((struct_matrice *) (*s_objet_argument_2).objet))
  935:                         .tableau)[i][j] - ((real8 **) (*((struct_matrice *)
  936:                         (*s_objet_argument_1).objet)).tableau)[i][j];
  937:             }
  938:         }
  939:     }
  940: 
  941:     /*
  942:      * Entier / Complexe
  943:      */
  944: 
  945:     else if ((((*s_objet_argument_1).type == MIN) &&
  946:             ((*s_objet_argument_2).type == MCX)) ||
  947:             (((*s_objet_argument_1).type == MCX) &&
  948:             ((*s_objet_argument_2).type == MIN)))
  949:     {
  950:         if ((s_objet_resultat = allocation(s_etat_processus, MCX))
  951:                 == NULL)
  952:         {
  953:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  954:             return;
  955:         }
  956: 
  957:         if (((*(((struct_matrice *) (*s_objet_argument_1).objet)))
  958:                 .nombre_lignes != (*(((struct_matrice *) (*s_objet_argument_2)
  959:                 .objet))).nombre_lignes) || ((*(((struct_matrice *)
  960:                 (*s_objet_argument_1).objet))).nombre_colonnes !=
  961:                 (*(((struct_matrice *) (*s_objet_argument_2).objet)))
  962:                 .nombre_colonnes))
  963:         {
  964:             liberation(s_etat_processus, s_objet_argument_1);
  965:             liberation(s_etat_processus, s_objet_argument_2);
  966:             liberation(s_etat_processus, s_objet_resultat);
  967: 
  968:             (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
  969:             return;
  970:         }
  971: 
  972:         (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_lignes =
  973:                 (*((struct_matrice *) (*s_objet_argument_1).objet))
  974:                 .nombre_lignes;
  975:         (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_colonnes =
  976:                 (*((struct_matrice *) (*s_objet_argument_1).objet))
  977:                 .nombre_colonnes;
  978: 
  979:         if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau =
  980:                 malloc((*(((struct_matrice *) (*s_objet_resultat)
  981:                 .objet))).nombre_lignes * sizeof(struct_complexe16 *))) == NULL)
  982:         {
  983:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  984:             return;
  985:         }
  986: 
  987:         for(i = 0; i < (*(((struct_matrice *) (*s_objet_resultat)
  988:                 .objet))).nombre_lignes; i++)
  989:         {
  990:             if ((((struct_complexe16 **) (*((struct_matrice *)
  991:                     (*s_objet_resultat).objet)).tableau)[i] = malloc((*((
  992:                     (struct_matrice *) (*s_objet_resultat).objet)))
  993:                     .nombre_colonnes * sizeof(struct_complexe16))) == NULL)
  994:             {
  995:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  996:                 return;
  997:             }
  998: 
  999:             for(j = 0; j < (*(((struct_matrice *) (*s_objet_resultat).objet)))
 1000:                     .nombre_colonnes; j++)
 1001:             {
 1002:                 if ((*s_objet_argument_1).type == MIN)
 1003:                 {
 1004:                     f77soustractionci_(&(((struct_complexe16 **)
 1005:                             (*((struct_matrice *)
 1006:                             (*s_objet_argument_2).objet)).tableau)[i][j]),
 1007:                             &(((integer8 **) (*((struct_matrice *)
 1008:                             (*s_objet_argument_1).objet)).tableau)[i][j]),
 1009:                             &(((struct_complexe16 **) (*((struct_matrice *)
 1010:                             (*s_objet_resultat).objet)).tableau)[i][j]));
 1011:                 }
 1012:                 else
 1013:                 {
 1014:                     f77soustractionic_(&(((integer8 **) (*((struct_matrice *)
 1015:                             (*s_objet_argument_2).objet)).tableau)[i][j]),
 1016:                             &(((struct_complexe16 **) (*((struct_matrice *)
 1017:                             (*s_objet_argument_1).objet)).tableau)[i][j]),
 1018:                             &(((struct_complexe16 **) (*((struct_matrice *)
 1019:                             (*s_objet_resultat).objet)).tableau)[i][j]));
 1020:                 }
 1021:             }
 1022:         }
 1023:     }
 1024: 
 1025:     /*
 1026:      * Réel / Complexe
 1027:      */
 1028: 
 1029:     else if ((((*s_objet_argument_1).type == MRL) &&
 1030:             ((*s_objet_argument_2).type == MCX)) ||
 1031:             (((*s_objet_argument_1).type == MCX) &&
 1032:             ((*s_objet_argument_2).type == MRL)))
 1033:     {
 1034:         if ((s_objet_resultat = allocation(s_etat_processus, MCX))
 1035:                 == NULL)
 1036:         {
 1037:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1038:             return;
 1039:         }
 1040: 
 1041:         if (((*(((struct_matrice *) (*s_objet_argument_1).objet)))
 1042:                 .nombre_lignes != (*(((struct_matrice *) (*s_objet_argument_2)
 1043:                 .objet))).nombre_lignes) || ((*(((struct_matrice *)
 1044:                 (*s_objet_argument_1).objet))).nombre_colonnes !=
 1045:                 (*(((struct_matrice *) (*s_objet_argument_2).objet)))
 1046:                 .nombre_colonnes))
 1047:         {
 1048:             liberation(s_etat_processus, s_objet_argument_1);
 1049:             liberation(s_etat_processus, s_objet_argument_2);
 1050:             liberation(s_etat_processus, s_objet_resultat);
 1051: 
 1052:             (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
 1053:             return;
 1054:         }
 1055: 
 1056:         (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_lignes =
 1057:                 (*((struct_matrice *) (*s_objet_argument_1).objet))
 1058:                 .nombre_lignes;
 1059:         (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_colonnes =
 1060:                 (*((struct_matrice *) (*s_objet_argument_1).objet))
 1061:                 .nombre_colonnes;
 1062: 
 1063:         if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau =
 1064:                 malloc((*(((struct_matrice *) (*s_objet_resultat)
 1065:                 .objet))).nombre_lignes * sizeof(struct_complexe16 *))) == NULL)
 1066:         {
 1067:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1068:             return;
 1069:         }
 1070: 
 1071:         for(i = 0; i < (*(((struct_matrice *) (*s_objet_resultat)
 1072:                 .objet))).nombre_lignes; i++)
 1073:         {
 1074:             if ((((struct_complexe16 **) (*((struct_matrice *)
 1075:                     (*s_objet_resultat).objet)).tableau)[i] = malloc((*((
 1076:                     (struct_matrice *) (*s_objet_resultat).objet)))
 1077:                     .nombre_colonnes * sizeof(struct_complexe16))) == NULL)
 1078:             {
 1079:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1080:                 return;
 1081:             }
 1082: 
 1083:             for(j = 0; j < (*(((struct_matrice *) (*s_objet_resultat).objet)))
 1084:                     .nombre_colonnes; j++)
 1085:             {
 1086:                 if ((*s_objet_argument_1).type == MRL)
 1087:                 {
 1088:                     f77soustractioncr_(&(((struct_complexe16 **)
 1089:                             (*((struct_matrice *)
 1090:                             (*s_objet_argument_2).objet)).tableau)[i][j]),
 1091:                             &(((real8 **) (*((struct_matrice *)
 1092:                             (*s_objet_argument_1).objet)).tableau)[i][j]),
 1093:                             &(((struct_complexe16 **) (*((struct_matrice *)
 1094:                             (*s_objet_resultat).objet)).tableau)[i][j]));
 1095:                 }
 1096:                 else
 1097:                 {
 1098:                     f77soustractionrc_(&(((real8 **) (*((struct_matrice *)
 1099:                             (*s_objet_argument_2).objet)).tableau)[i][j]),
 1100:                             &(((struct_complexe16 **) (*((struct_matrice *)
 1101:                             (*s_objet_argument_1).objet)).tableau)[i][j]),
 1102:                             &(((struct_complexe16 **) (*((struct_matrice *)
 1103:                             (*s_objet_resultat).objet)).tableau)[i][j]));
 1104:                 }
 1105:             }
 1106:         }
 1107:     }
 1108: 
 1109:     /*
 1110:      * Complexe / Complexe
 1111:      */
 1112: 
 1113:     else if (((*s_objet_argument_1).type == MCX) &&
 1114:             ((*s_objet_argument_2).type == MCX))
 1115:     {
 1116:         if ((s_objet_resultat = allocation(s_etat_processus, MCX))
 1117:                 == NULL)
 1118:         {
 1119:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1120:             return;
 1121:         }
 1122: 
 1123:         if (((*(((struct_matrice *) (*s_objet_argument_1).objet)))
 1124:                 .nombre_lignes != (*(((struct_matrice *) (*s_objet_argument_2)
 1125:                 .objet))).nombre_lignes) || ((*(((struct_matrice *)
 1126:                 (*s_objet_argument_1).objet))).nombre_colonnes !=
 1127:                 (*(((struct_matrice *) (*s_objet_argument_2).objet)))
 1128:                 .nombre_colonnes))
 1129:         {
 1130:             liberation(s_etat_processus, s_objet_argument_1);
 1131:             liberation(s_etat_processus, s_objet_argument_2);
 1132:             liberation(s_etat_processus, s_objet_resultat);
 1133: 
 1134:             (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
 1135:             return;
 1136:         }
 1137: 
 1138:         (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_lignes =
 1139:                 (*((struct_matrice *) (*s_objet_argument_1).objet))
 1140:                 .nombre_lignes;
 1141:         (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_colonnes =
 1142:                 (*((struct_matrice *) (*s_objet_argument_1).objet))
 1143:                 .nombre_colonnes;
 1144: 
 1145:         if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau =
 1146:                 malloc((*(((struct_matrice *) (*s_objet_resultat)
 1147:                 .objet))).nombre_lignes * sizeof(struct_complexe16 *))) == NULL)
 1148:         {
 1149:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1150:             return;
 1151:         }
 1152: 
 1153:         for(i = 0; i < (*(((struct_matrice *) (*s_objet_resultat)
 1154:                 .objet))).nombre_lignes; i++)
 1155:         {
 1156:             if ((((struct_complexe16 **) (*((struct_matrice *)
 1157:                     (*s_objet_resultat).objet)).tableau)[i] = malloc((*((
 1158:                     (struct_matrice *) (*s_objet_resultat).objet)))
 1159:                     .nombre_colonnes * sizeof(struct_complexe16))) == NULL)
 1160:             {
 1161:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1162:                 return;
 1163:             }
 1164: 
 1165:             for(j = 0; j < (*(((struct_matrice *) (*s_objet_resultat).objet)))
 1166:                     .nombre_colonnes; j++)
 1167:             {
 1168:                 f77soustractioncc_(&(((struct_complexe16 **)
 1169:                         (*((struct_matrice *)
 1170:                         (*s_objet_argument_2).objet)).tableau)[i][j]),
 1171:                         &(((struct_complexe16 **) (*((struct_matrice *)
 1172:                         (*s_objet_argument_1).objet)).tableau)[i][j]),
 1173:                         &(((struct_complexe16 **) (*((struct_matrice *)
 1174:                         (*s_objet_resultat).objet)).tableau)[i][j]));
 1175:             }
 1176:         }
 1177:     }
 1178: 
 1179: /*
 1180: --------------------------------------------------------------------------------
 1181:   Soustraction mettant en oeuvre des binaires
 1182: --------------------------------------------------------------------------------
 1183: */
 1184:     /*
 1185:      * Binaire / Binaire
 1186:      */
 1187: 
 1188:     else if (((*s_objet_argument_1).type == BIN) &&
 1189:             ((*s_objet_argument_2).type == BIN))
 1190:     {
 1191:         if ((s_objet_resultat = allocation(s_etat_processus, BIN))
 1192:                 == NULL)
 1193:         {
 1194:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1195:             return;
 1196:         }
 1197: 
 1198:         (*((logical8 *) (*s_objet_resultat).objet)) =
 1199:                 (*((logical8 *) (*s_objet_argument_2).objet))
 1200:                 - (*((logical8 *) (*s_objet_argument_1).objet));
 1201:     }
 1202: 
 1203:     /*
 1204:      * Binaire / Entier
 1205:      */
 1206: 
 1207:     else if ((((*s_objet_argument_1).type == BIN) &&
 1208:             ((*s_objet_argument_2).type == INT)) ||
 1209:             (((*s_objet_argument_1).type == INT) &&
 1210:             ((*s_objet_argument_2).type == BIN)))
 1211:     {
 1212:         if ((s_objet_resultat = allocation(s_etat_processus, BIN))
 1213:                 == NULL)
 1214:         {
 1215:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1216:             return;
 1217:         }
 1218: 
 1219:         if ((*s_objet_argument_1).type == BIN)
 1220:         {
 1221:             (*((logical8 *) (*s_objet_resultat).objet)) =
 1222:                     (*((integer8 *) (*s_objet_argument_2).objet))
 1223:                     - (*((logical8 *) (*s_objet_argument_1).objet));
 1224:         }
 1225:         else
 1226:         {
 1227:             (*((logical8 *) (*s_objet_resultat).objet)) =
 1228:                     (*((logical8 *) (*s_objet_argument_2).objet))
 1229:                     - (*((integer8 *) (*s_objet_argument_1).objet));
 1230:         }
 1231:     }
 1232: 
 1233: /*
 1234: --------------------------------------------------------------------------------
 1235:   Soustraction mettant en oeuvre un nom ou une expression algébrique
 1236: --------------------------------------------------------------------------------
 1237: */
 1238:     /*
 1239:      * Nom ou valeur numérique / Nom ou valeur numérique
 1240:      */
 1241: 
 1242:         else if ((((*s_objet_argument_1).type == NOM) &&
 1243:                 (((*s_objet_argument_2).type == NOM) ||
 1244:                 ((*s_objet_argument_2).type == INT) ||
 1245:                 ((*s_objet_argument_2).type == REL) ||
 1246:                 ((*s_objet_argument_2).type == CPL))) ||
 1247:                 (((*s_objet_argument_2).type == NOM) &&
 1248:                 (((*s_objet_argument_1).type == INT) ||
 1249:                 ((*s_objet_argument_1).type == REL) ||
 1250:                 ((*s_objet_argument_1).type == CPL))))
 1251:     {
 1252:         drapeau = d_vrai;
 1253:         drapeau_neg = d_faux;
 1254: 
 1255:         if ((*s_objet_argument_2).type == NOM)
 1256:         {
 1257:             if ((*s_objet_argument_1).type == INT)
 1258:             {
 1259:                 if ((*((integer8 *) (*s_objet_argument_1).objet)) == 0)
 1260:                 {
 1261:                     drapeau = d_faux;
 1262: 
 1263:                     s_objet_resultat = s_objet_argument_2;
 1264:                     s_objet_argument_2 = NULL;
 1265:                 }
 1266:             }
 1267:             else if ((*s_objet_argument_1).type == REL)
 1268:             {
 1269:                 if ((*((real8 *) (*s_objet_argument_1).objet)) == 0)
 1270:                 {
 1271:                     drapeau = d_faux;
 1272: 
 1273:                     s_objet_resultat = s_objet_argument_2;
 1274:                     s_objet_argument_2 = NULL;
 1275:                 }
 1276:             }
 1277:             else if ((*s_objet_argument_1).type == CPL)
 1278:             {
 1279:                 if (((*((complex16 *) (*s_objet_argument_1).objet))
 1280:                         .partie_reelle == 0) && ((*((complex16 *)
 1281:                         (*s_objet_argument_1).objet)).partie_imaginaire == 0))
 1282:                 {
 1283:                     drapeau = d_faux;
 1284: 
 1285:                     s_objet_resultat = s_objet_argument_2;
 1286:                     s_objet_argument_2 = NULL;
 1287:                 }
 1288:             }
 1289:         }
 1290:         else if ((*s_objet_argument_1).type == NOM)
 1291:         {
 1292:             if ((*s_objet_argument_2).type == INT)
 1293:             {
 1294:                 if ((*((integer8 *) (*s_objet_argument_2).objet)) == 0)
 1295:                 {
 1296:                     drapeau_neg = d_vrai;
 1297:                 }
 1298:             }
 1299:             else if ((*s_objet_argument_2).type == REL)
 1300:             {
 1301:                 if ((*((real8 *) (*s_objet_argument_2).objet)) == 0)
 1302:                 {
 1303:                     drapeau_neg = d_vrai;
 1304:                 }
 1305:             }
 1306:             else if ((*s_objet_argument_2).type == CPL)
 1307:             {
 1308:                 if (((*((complex16 *) (*s_objet_argument_2).objet))
 1309:                         .partie_reelle == 0) && ((*((complex16 *)
 1310:                         (*s_objet_argument_2).objet)).partie_imaginaire == 0))
 1311:                 {
 1312:                     drapeau_neg = d_vrai;
 1313:                 }
 1314:             }
 1315:         }
 1316: 
 1317:         if (drapeau == d_vrai)
 1318:         {
 1319:             if ((s_objet_resultat = allocation(s_etat_processus, ALG))
 1320:                     == NULL)
 1321:             {
 1322:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1323:                 return;
 1324:             }
 1325: 
 1326:             if (((*s_objet_resultat).objet =
 1327:                     allocation_maillon(s_etat_processus)) == NULL)
 1328:             {
 1329:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1330:                 return;
 1331:             }
 1332: 
 1333:             l_element_courant = (*s_objet_resultat).objet;
 1334: 
 1335:             if (((*l_element_courant).donnee = allocation(s_etat_processus,
 1336:                     FCT)) == NULL)
 1337:             {
 1338:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1339:                 return;
 1340:             }
 1341: 
 1342:             (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1343:                     .nombre_arguments = 0;
 1344:             (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1345:                     .fonction = instruction_vers_niveau_superieur;
 1346: 
 1347:             if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1348:                     .nom_fonction = malloc(3 * sizeof(unsigned char))) == NULL)
 1349:             {
 1350:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1351:                 return;
 1352:             }
 1353: 
 1354:             strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1355:                     .nom_fonction, "<<");
 1356: 
 1357:             if (drapeau_neg == d_faux)
 1358:             {
 1359:                 if (((*l_element_courant).suivant =
 1360:                         allocation_maillon(s_etat_processus)) == NULL)
 1361:                 {
 1362:                     (*s_etat_processus).erreur_systeme =
 1363:                             d_es_allocation_memoire;
 1364:                     return;
 1365:                 }
 1366: 
 1367:                 l_element_courant = (*l_element_courant).suivant;
 1368:                 (*l_element_courant).donnee = s_objet_argument_2;
 1369:             }
 1370:             else
 1371:             {
 1372:                 liberation(s_etat_processus, s_objet_argument_2);
 1373:             }
 1374: 
 1375:             if (((*l_element_courant).suivant =
 1376:                     allocation_maillon(s_etat_processus)) == NULL)
 1377:             {
 1378:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1379:                 return;
 1380:             }
 1381: 
 1382:             l_element_courant = (*l_element_courant).suivant;
 1383:             (*l_element_courant).donnee = s_objet_argument_1;
 1384: 
 1385:             if (((*l_element_courant).suivant =
 1386:                     allocation_maillon(s_etat_processus)) == NULL)
 1387:             {
 1388:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1389:                 return;
 1390:             }
 1391: 
 1392:             l_element_courant = (*l_element_courant).suivant;
 1393: 
 1394:             if (((*l_element_courant).donnee = allocation(s_etat_processus,
 1395:                     FCT)) == NULL)
 1396:             {
 1397:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1398:                 return;
 1399:             }
 1400: 
 1401:             if (drapeau_neg == d_faux)
 1402:             {
 1403:                 (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1404:                         .nombre_arguments = 0;
 1405:                 (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1406:                         .fonction = instruction_moins;
 1407: 
 1408:                 if (((*((struct_fonction *) (*(*l_element_courant)
 1409:                         .donnee).objet)).nom_fonction =
 1410:                         malloc(2 * sizeof(unsigned char))) == NULL)
 1411:                 {
 1412:                     (*s_etat_processus).erreur_systeme =
 1413:                             d_es_allocation_memoire;
 1414:                     return;
 1415:                 }
 1416: 
 1417:                 strcpy((*((struct_fonction *) (*(*l_element_courant).donnee)
 1418:                         .objet)).nom_fonction, "-");
 1419:             }
 1420:             else
 1421:             {
 1422:                 (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1423:                         .nombre_arguments = 1;
 1424:                 (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1425:                         .fonction = instruction_neg;
 1426: 
 1427:                 if (((*((struct_fonction *) (*(*l_element_courant)
 1428:                         .donnee).objet)).nom_fonction =
 1429:                         malloc(4 * sizeof(unsigned char))) == NULL)
 1430:                 {
 1431:                     (*s_etat_processus).erreur_systeme =
 1432:                             d_es_allocation_memoire;
 1433:                     return;
 1434:                 }
 1435: 
 1436:                 strcpy((*((struct_fonction *) (*(*l_element_courant).donnee)
 1437:                         .objet)).nom_fonction, "NEG");
 1438:             }
 1439: 
 1440:             if (((*l_element_courant).suivant =
 1441:                     allocation_maillon(s_etat_processus)) == NULL)
 1442:             {
 1443:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1444:                 return;
 1445:             }
 1446: 
 1447:             l_element_courant = (*l_element_courant).suivant;
 1448: 
 1449:             if (((*l_element_courant).donnee = allocation(s_etat_processus,
 1450:                     FCT)) == NULL)
 1451:             {
 1452:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1453:                 return;
 1454:             }
 1455: 
 1456:             (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1457:                     .nombre_arguments = 0;
 1458:             (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1459:                     .fonction = instruction_vers_niveau_inferieur;
 1460: 
 1461:             if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1462:                     .nom_fonction = malloc(3 * sizeof(unsigned char))) == NULL)
 1463:             {
 1464:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1465:                 return;
 1466:             }
 1467: 
 1468:             strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1469:                     .nom_fonction, ">>");
 1470: 
 1471:             (*l_element_courant).suivant = NULL;
 1472: 
 1473:             s_objet_argument_1 = NULL;
 1474:             s_objet_argument_2 = NULL;
 1475:         }
 1476:     }
 1477: 
 1478:     /*
 1479:      * Nom ou valeur numérique / Expression
 1480:      */
 1481: 
 1482:     else if ((((*s_objet_argument_1).type == ALG) ||
 1483:             ((*s_objet_argument_1).type == RPN)) &&
 1484:             (((*s_objet_argument_2).type == NOM) ||
 1485:             ((*s_objet_argument_2).type == INT) ||
 1486:             ((*s_objet_argument_2).type == REL) ||
 1487:             ((*s_objet_argument_2).type == CPL)))
 1488:     {
 1489:         drapeau_neg = d_faux;
 1490: 
 1491:         nombre_elements = 0;
 1492:         l_element_courant = (struct_liste_chainee *)
 1493:                 (*s_objet_argument_1).objet;
 1494: 
 1495:         while(l_element_courant != NULL)
 1496:         {
 1497:             nombre_elements++;
 1498:             l_element_courant = (*l_element_courant).suivant;
 1499:         }
 1500: 
 1501:         if (nombre_elements == 2)
 1502:         {
 1503:             liberation(s_etat_processus, s_objet_argument_1);
 1504:             liberation(s_etat_processus, s_objet_argument_2);
 1505: 
 1506:             (*s_etat_processus).erreur_execution = d_ex_argument_invalide;
 1507:             return;
 1508:         }
 1509: 
 1510:         if ((*s_objet_argument_2).type == INT)
 1511:         {
 1512:             if ((*((integer8 *) (*s_objet_argument_2).objet)) == 0)
 1513:             {
 1514:                 drapeau_neg = d_vrai;
 1515:             }
 1516:         }
 1517:         else if ((*s_objet_argument_2).type == REL)
 1518:         {
 1519:             if ((*((real8 *) (*s_objet_argument_2).objet)) == 0)
 1520:             {
 1521:                 drapeau_neg = d_vrai;
 1522:             }
 1523:         }
 1524:         else if ((*s_objet_argument_2).type == CPL)
 1525:         {
 1526:             if (((*((complex16 *) (*s_objet_argument_2).objet))
 1527:                     .partie_reelle == 0) && ((*((complex16 *)
 1528:                     (*s_objet_argument_2).objet)).partie_imaginaire == 0))
 1529:             {
 1530:                 drapeau_neg = d_vrai;
 1531:             }
 1532:         }
 1533: 
 1534:         if ((s_objet_resultat = copie_objet(s_etat_processus,
 1535:                 s_objet_argument_1, 'N')) == NULL)
 1536:         {
 1537:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1538:             return;
 1539:         }
 1540: 
 1541:         l_element_courant = (struct_liste_chainee *)
 1542:                 (*s_objet_resultat).objet;
 1543:         l_element_precedent = l_element_courant;
 1544:         l_element_courant = (*l_element_courant).suivant;
 1545: 
 1546:         if (drapeau_neg == d_faux)
 1547:         {
 1548:             if (((*l_element_precedent).suivant =
 1549:                     allocation_maillon(s_etat_processus)) == NULL)
 1550:             {
 1551:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1552:                 return;
 1553:             }
 1554: 
 1555:             (*(*l_element_precedent).suivant).donnee = s_objet_argument_2;
 1556:             (*(*l_element_precedent).suivant).suivant = l_element_courant;
 1557:         }
 1558:         else
 1559:         {
 1560:             liberation(s_etat_processus, s_objet_argument_2);
 1561:         }
 1562: 
 1563:         while((*l_element_courant).suivant != NULL)
 1564:         {
 1565:             l_element_precedent = l_element_courant;
 1566:             l_element_courant = (*l_element_courant).suivant;
 1567:         }
 1568: 
 1569:         if (((*l_element_precedent).suivant =
 1570:                 allocation_maillon(s_etat_processus)) == NULL)
 1571:         {
 1572:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1573:             return;
 1574:         }
 1575: 
 1576:         if (((*(*l_element_precedent).suivant).donnee =
 1577:                 allocation(s_etat_processus, FCT)) == NULL)
 1578:         {
 1579:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1580:             return;
 1581:         }
 1582: 
 1583:         if (drapeau_neg == d_faux)
 1584:         {
 1585:             (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
 1586:                     .donnee).objet)).nombre_arguments = 0;
 1587:             (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
 1588:                     .donnee).objet)).fonction = instruction_moins;
 1589: 
 1590:             if (((*((struct_fonction *) (*(*(*l_element_precedent)
 1591:                     .suivant).donnee).objet)).nom_fonction =
 1592:                     malloc(2 * sizeof(unsigned char))) == NULL)
 1593:             {
 1594:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1595:                 return;
 1596:             }
 1597: 
 1598:             strcpy((*((struct_fonction *) (*(*(*l_element_precedent)
 1599:                     .suivant).donnee).objet)).nom_fonction, "-");
 1600:         }
 1601:         else
 1602:         {
 1603:             (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
 1604:                     .donnee).objet)).nombre_arguments = 1;
 1605:             (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
 1606:                     .donnee).objet)).fonction = instruction_neg;
 1607: 
 1608:             if (((*((struct_fonction *) (*(*(*l_element_precedent)
 1609:                     .suivant).donnee).objet)).nom_fonction =
 1610:                     malloc(4 * sizeof(unsigned char))) == NULL)
 1611:             {
 1612:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1613:                 return;
 1614:             }
 1615: 
 1616:             strcpy((*((struct_fonction *) (*(*(*l_element_precedent)
 1617:                     .suivant).donnee).objet)).nom_fonction, "NEG");
 1618:         }
 1619: 
 1620:         (*(*l_element_precedent).suivant).suivant = l_element_courant;
 1621: 
 1622:         s_objet_argument_2 = NULL;
 1623:     }
 1624: 
 1625:     /*
 1626:      * Expression / Nom ou valeur numérique
 1627:      */
 1628: 
 1629:     else if ((((*s_objet_argument_1).type == NOM) ||
 1630:             ((*s_objet_argument_1).type == INT) ||
 1631:             ((*s_objet_argument_1).type == REL) ||
 1632:             ((*s_objet_argument_1).type == CPL)) &&
 1633:             (((*s_objet_argument_2).type == ALG) ||
 1634:             ((*s_objet_argument_2).type == RPN)))
 1635:     {
 1636:         drapeau = d_vrai;
 1637: 
 1638:         nombre_elements = 0;
 1639:         l_element_courant = (struct_liste_chainee *)
 1640:                 (*s_objet_argument_2).objet;
 1641: 
 1642:         while(l_element_courant != NULL)
 1643:         {
 1644:             nombre_elements++;
 1645:             l_element_courant = (*l_element_courant).suivant;
 1646:         }
 1647: 
 1648:         if (nombre_elements == 2)
 1649:         {
 1650:             liberation(s_etat_processus, s_objet_argument_1);
 1651:             liberation(s_etat_processus, s_objet_argument_2);
 1652: 
 1653:             (*s_etat_processus).erreur_execution = d_ex_argument_invalide;
 1654:             return;
 1655:         }
 1656: 
 1657:         if ((*s_objet_argument_1).type == INT)
 1658:         {
 1659:             if ((*((integer8 *) (*s_objet_argument_1).objet)) == 0)
 1660:             {
 1661:                 drapeau = d_faux;
 1662: 
 1663:                 s_objet_resultat = s_objet_argument_2;
 1664:                 s_objet_argument_2 = NULL;
 1665:             }
 1666:         }
 1667:         else if ((*s_objet_argument_1).type == REL)
 1668:         {
 1669:             if ((*((real8 *) (*s_objet_argument_1).objet)) == 0)
 1670:             {
 1671:                 drapeau = d_faux;
 1672: 
 1673:                 s_objet_resultat = s_objet_argument_2;
 1674:                 s_objet_argument_2 = NULL;
 1675:             }
 1676:         }
 1677:         else if ((*s_objet_argument_1).type == CPL)
 1678:         {
 1679:             if (((*((complex16 *) (*s_objet_argument_1).objet))
 1680:                     .partie_reelle == 0) && ((*((complex16 *)
 1681:                     (*s_objet_argument_1).objet)).partie_imaginaire == 0))
 1682:             {
 1683:                 drapeau = d_faux;
 1684: 
 1685:                 s_objet_resultat = s_objet_argument_2;
 1686:                 s_objet_argument_2 = NULL;
 1687:             }
 1688:         }
 1689: 
 1690:         if (drapeau == d_vrai)
 1691:         {
 1692:             if ((s_objet_resultat = copie_objet(s_etat_processus,
 1693:                     s_objet_argument_2, 'N')) == NULL)
 1694:             {
 1695:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1696:                 return;
 1697:             }
 1698: 
 1699:             l_element_courant = (struct_liste_chainee *)
 1700:                     (*s_objet_resultat).objet;
 1701:             l_element_precedent = l_element_courant;
 1702: 
 1703:             while((*l_element_courant).suivant != NULL)
 1704:             {
 1705:                 l_element_precedent = l_element_courant;
 1706:                 l_element_courant = (*l_element_courant).suivant;
 1707:             }
 1708: 
 1709:             if (((*l_element_precedent).suivant =
 1710:                     allocation_maillon(s_etat_processus)) == NULL)
 1711:             {
 1712:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1713:                 return;
 1714:             }
 1715: 
 1716:             (*(*l_element_precedent).suivant).donnee = s_objet_argument_1;
 1717:             l_element_precedent = (*l_element_precedent).suivant;
 1718: 
 1719:             if (((*l_element_precedent).suivant =
 1720:                     allocation_maillon(s_etat_processus)) == NULL)
 1721:             {
 1722:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1723:                 return;
 1724:             }
 1725: 
 1726:             if (((*(*l_element_precedent).suivant).donnee =
 1727:                     allocation(s_etat_processus, FCT)) == NULL)
 1728:             {
 1729:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1730:                 return;
 1731:             }
 1732: 
 1733:             (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
 1734:                     .donnee).objet)).nombre_arguments = 0;
 1735:             (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
 1736:                     .donnee).objet)).fonction = instruction_moins;
 1737: 
 1738:             if (((*((struct_fonction *) (*(*(*l_element_precedent)
 1739:                     .suivant).donnee).objet)).nom_fonction =
 1740:                     malloc(2 * sizeof(unsigned char))) == NULL)
 1741:             {
 1742:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1743:                 return;
 1744:             }
 1745: 
 1746:             strcpy((*((struct_fonction *) (*(*(*l_element_precedent)
 1747:                     .suivant).donnee).objet)).nom_fonction, "-");
 1748: 
 1749:             (*(*l_element_precedent).suivant).suivant = l_element_courant;
 1750: 
 1751:             s_objet_argument_1 = NULL;
 1752:         }
 1753:     }
 1754: 
 1755:     /*
 1756:      * Expression / Expression
 1757:      */
 1758: 
 1759:     else if ((((*s_objet_argument_1).type == ALG) &&
 1760:             ((*s_objet_argument_2).type == ALG)) ||
 1761:             (((*s_objet_argument_1).type == RPN) &&
 1762:             ((*s_objet_argument_2).type == RPN)))
 1763:     {
 1764:         nombre_elements = 0;
 1765:         l_element_courant = (struct_liste_chainee *)
 1766:                 (*s_objet_argument_1).objet;
 1767: 
 1768:         while(l_element_courant != NULL)
 1769:         {
 1770:             nombre_elements++;
 1771:             l_element_courant = (*l_element_courant).suivant;
 1772:         }
 1773: 
 1774:         if (nombre_elements == 2)
 1775:         {
 1776:             liberation(s_etat_processus, s_objet_argument_1);
 1777:             liberation(s_etat_processus, s_objet_argument_2);
 1778: 
 1779:             (*s_etat_processus).erreur_execution = d_ex_argument_invalide;
 1780:             return;
 1781:         }
 1782: 
 1783:         nombre_elements = 0;
 1784:         l_element_courant = (struct_liste_chainee *)
 1785:                 (*s_objet_argument_2).objet;
 1786: 
 1787:         while(l_element_courant != NULL)
 1788:         {
 1789:             nombre_elements++;
 1790:             l_element_courant = (*l_element_courant).suivant;
 1791:         }
 1792: 
 1793:         if (nombre_elements == 2)
 1794:         {
 1795:             liberation(s_etat_processus, s_objet_argument_1);
 1796:             liberation(s_etat_processus, s_objet_argument_2);
 1797: 
 1798:             (*s_etat_processus).erreur_execution = d_ex_argument_invalide;
 1799:             return;
 1800:         }
 1801: 
 1802:         if ((s_copie_argument_1 = copie_objet(s_etat_processus,
 1803:                 s_objet_argument_1, 'N')) == NULL)
 1804:         {
 1805:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1806:             return;
 1807:         }
 1808: 
 1809:         if ((s_copie_argument_2 = copie_objet(s_etat_processus,
 1810:                 s_objet_argument_2, 'N')) == NULL)
 1811:         {
 1812:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1813:             return;
 1814:         }
 1815: 
 1816:         l_element_courant = (struct_liste_chainee *)
 1817:                 (*s_copie_argument_1).objet;
 1818:         (*s_copie_argument_1).objet = (void *) (*((struct_liste_chainee *)
 1819:                 (*s_copie_argument_1).objet)).suivant;
 1820: 
 1821:         liberation(s_etat_processus, (*l_element_courant).donnee);
 1822:         free(l_element_courant);
 1823: 
 1824:         l_element_courant = (struct_liste_chainee *)
 1825:                 (*s_copie_argument_2).objet;
 1826:         l_element_precedent = l_element_courant;
 1827:         s_objet_resultat = s_copie_argument_2;
 1828: 
 1829:         while((*l_element_courant).suivant != NULL)
 1830:         {
 1831:             l_element_precedent = l_element_courant;
 1832:             l_element_courant = (*l_element_courant).suivant;
 1833:         }
 1834: 
 1835:         liberation(s_etat_processus, (*l_element_courant).donnee);
 1836:         free(l_element_courant);
 1837: 
 1838:         (*l_element_precedent).suivant = (struct_liste_chainee *)
 1839:                 (*s_copie_argument_1).objet;
 1840:         free(s_copie_argument_1);
 1841: 
 1842:         l_element_courant = (*l_element_precedent).suivant;
 1843:         while((*l_element_courant).suivant != NULL)
 1844:         {
 1845:             l_element_precedent = l_element_courant;
 1846:             l_element_courant = (*l_element_courant).suivant;
 1847:         }
 1848: 
 1849:         if (((*l_element_precedent).suivant =
 1850:                 allocation_maillon(s_etat_processus)) == NULL)
 1851:         {
 1852:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1853:             return;
 1854:         }
 1855: 
 1856:         (*(*l_element_precedent).suivant).suivant = l_element_courant;
 1857:         l_element_courant = (*l_element_precedent).suivant;
 1858: 
 1859:         if (((*l_element_courant).donnee = allocation(s_etat_processus, FCT))
 1860:                 == NULL)
 1861:         {
 1862:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1863:             return;
 1864:         }
 1865: 
 1866:         (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1867:                 .nombre_arguments = 0;
 1868:         (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1869:                 .fonction = instruction_moins;
 1870: 
 1871:         if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1872:                 .nom_fonction = malloc(2 * sizeof(unsigned char))) == NULL)
 1873:         {
 1874:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1875:             return;
 1876:         }
 1877: 
 1878:         strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 1879:                 .nom_fonction, "-");
 1880:     }
 1881: 
 1882: /*
 1883: --------------------------------------------------------------------------------
 1884:   Soustraction impossible
 1885: --------------------------------------------------------------------------------
 1886: */
 1887: 
 1888:     else
 1889:     {
 1890:         liberation(s_etat_processus, s_objet_argument_1);
 1891:         liberation(s_etat_processus, s_objet_argument_2);
 1892: 
 1893:         (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
 1894:         return;
 1895:     }
 1896: 
 1897:     liberation(s_etat_processus, s_objet_argument_1);
 1898:     liberation(s_etat_processus, s_objet_argument_2);
 1899: 
 1900:     if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
 1901:             s_objet_resultat) == d_erreur)
 1902:     {
 1903:         return;
 1904:     }
 1905: 
 1906:     return;
 1907: }
 1908: 
 1909: 
 1910: /*
 1911: ================================================================================
 1912:   Fonction '*'
 1913: ================================================================================
 1914:   Entrées : structure processus
 1915: --------------------------------------------------------------------------------
 1916:   Sorties :
 1917: --------------------------------------------------------------------------------
 1918:   Effets de bord : néant
 1919: ================================================================================
 1920: */
 1921: 
 1922: void
 1923: instruction_multiplication(struct_processus *s_etat_processus)
 1924: {
 1925:     integer8                        cumul;
 1926:     integer8                        tampon;
 1927: 
 1928:     logical1                        depassement;
 1929:     logical1                        drapeau;
 1930:     logical1                        erreur_memoire;
 1931: 
 1932:     struct_liste_chainee            *l_element_courant;
 1933:     struct_liste_chainee            *l_element_precedent;
 1934: 
 1935:     struct_objet                    *s_copie_argument_1;
 1936:     struct_objet                    *s_copie_argument_2;
 1937:     struct_objet                    *s_objet_argument_1;
 1938:     struct_objet                    *s_objet_argument_2;
 1939:     struct_objet                    *s_objet_resultat;
 1940: 
 1941:     unsigned long                   i;
 1942:     unsigned long                   j;
 1943:     unsigned long                   k;
 1944:     unsigned long                   nombre_elements;
 1945: 
 1946:     void                            *accumulateur;
 1947: 
 1948:     (*s_etat_processus).erreur_execution = d_ex;
 1949: 
 1950:     if ((*s_etat_processus).affichage_arguments == 'Y')
 1951:     {
 1952:         printf("\n  * ");
 1953: 
 1954:         if ((*s_etat_processus).langue == 'F')
 1955:         {
 1956:             printf("(multiplication)\n\n");
 1957:         }
 1958:         else
 1959:         {
 1960:             printf("(multiplication)\n\n");
 1961:         }
 1962: 
 1963:         printf("    2: %s, %s, %s\n", d_INT, d_REL, d_CPL);
 1964:         printf("    1: %s, %s, %s\n", d_INT, d_REL, d_CPL);
 1965:         printf("->  1: %s, %s, %s\n\n", d_INT, d_REL, d_CPL);
 1966: 
 1967:         printf("    2: %s, %s, %s\n", d_VIN, d_VRL, d_VCX);
 1968:         printf("    1: %s, %s, %s\n", d_INT, d_REL, d_CPL);
 1969:         printf("->  1: %s, %s, %s\n\n", d_VIN, d_VRL, d_VCX);
 1970: 
 1971:         printf("    2: %s, %s, %s\n", d_INT, d_REL, d_CPL);
 1972:         printf("    1: %s, %s, %s\n", d_VIN, d_VRL, d_VCX);
 1973:         printf("->  1: %s, %s, %s\n\n", d_VIN, d_VRL, d_VCX);
 1974: 
 1975:         printf("    2: %s, %s, %s\n", d_MIN, d_MRL, d_MCX);
 1976:         printf("    1: %s, %s, %s\n", d_INT, d_REL, d_CPL);
 1977:         printf("->  1: %s, %s, %s\n\n", d_MIN, d_MRL, d_MCX);
 1978: 
 1979:         printf("    2: %s, %s, %s\n", d_INT, d_REL, d_CPL);
 1980:         printf("    1: %s, %s, %s\n", d_MIN, d_MRL, d_MCX);
 1981:         printf("->  1: %s, %s, %s\n\n", d_MIN, d_MRL, d_MCX);
 1982: 
 1983:         printf("    2: %s, %s, %s\n", d_MIN, d_MRL, d_MCX);
 1984:         printf("    1: %s, %s, %s\n", d_VIN, d_VRL, d_VCX);
 1985:         printf("->  1: %s, %s, %s\n\n", d_VIN, d_VRL, d_VCX);
 1986: 
 1987:         printf("    2: %s, %s, %s\n", d_MIN, d_MRL, d_MCX);
 1988:         printf("    1: %s, %s, %s\n", d_MIN, d_MRL, d_MCX);
 1989:         printf("->  1: %s, %s, %s\n\n", d_MIN, d_MRL, d_MCX);
 1990: 
 1991:         printf("    2: %s, %s\n", d_BIN, d_INT);
 1992:         printf("    1: %s, %s\n", d_BIN, d_INT);
 1993:         printf("->  1: %s\n\n", d_BIN);
 1994: 
 1995:         printf("    2: %s, %s, %s, %s, %s, %s\n",
 1996:                 d_INT, d_REL, d_CPL, d_NOM, d_ALG, d_RPN);
 1997:         printf("    1: %s, %s, %s, %s, %s, %s\n",
 1998:                 d_INT, d_REL, d_CPL, d_NOM, d_ALG, d_RPN);
 1999:         printf("->  1: %s, %s\n", d_ALG, d_RPN);
 2000: 
 2001:         return;
 2002:     }
 2003:     else if ((*s_etat_processus).test_instruction == 'Y')
 2004:     {
 2005:         (*s_etat_processus).nombre_arguments = 0;
 2006:         return;
 2007:     }
 2008:     
 2009:     if (test_cfsf(s_etat_processus, 31) == d_vrai)
 2010:     {
 2011:         if (empilement_pile_last(s_etat_processus, 2) == d_erreur)
 2012:         {
 2013:             return;
 2014:         }
 2015:     }
 2016: 
 2017:     if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
 2018:             &s_objet_argument_1) == d_erreur)
 2019:     {
 2020:         (*s_etat_processus).erreur_execution = d_ex_manque_argument;
 2021:         return;
 2022:     }
 2023: 
 2024:     if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
 2025:             &s_objet_argument_2) == d_erreur)
 2026:     {
 2027:         liberation(s_etat_processus, s_objet_argument_1);
 2028: 
 2029:         (*s_etat_processus).erreur_execution = d_ex_manque_argument;
 2030:         return;
 2031:     }
 2032: 
 2033: /*
 2034: --------------------------------------------------------------------------------
 2035:   Multiplication de deux entiers
 2036: --------------------------------------------------------------------------------
 2037: */
 2038: 
 2039:     if (((*s_objet_argument_1).type == INT) &&
 2040:             ((*s_objet_argument_2).type == INT))
 2041:     {
 2042:         if (depassement_multiplication((integer8 *) (*s_objet_argument_1)
 2043:                 .objet, (integer8 *) (*s_objet_argument_2).objet, &tampon) ==
 2044:                 d_absence_erreur)
 2045:         {
 2046:             if ((s_objet_resultat = allocation(s_etat_processus, INT))
 2047:                     == NULL)
 2048:             {
 2049:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 2050:                 return;
 2051:             }
 2052: 
 2053:             (*((integer8 *) (*s_objet_resultat).objet)) = tampon;
 2054:         }
 2055:         else
 2056:         {
 2057:             if ((s_objet_resultat = allocation(s_etat_processus, REL))
 2058:                     == NULL)
 2059:             {
 2060:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 2061:                 return;
 2062:             }
 2063: 
 2064:             (*((real8 *) (*s_objet_resultat).objet)) = ((real8) (*((integer8 *)
 2065:                     (*s_objet_argument_2).objet))) * ((real8) (*((integer8 *)
 2066:                     (*s_objet_argument_1).objet)));
 2067:         }
 2068:     }
 2069: 
 2070: /*
 2071: --------------------------------------------------------------------------------
 2072:   Multiplication d'un entier et d'un réel
 2073: --------------------------------------------------------------------------------
 2074: */
 2075: 
 2076:     else if ((((*s_objet_argument_1).type == INT) &&
 2077:             ((*s_objet_argument_2).type == REL)) ||
 2078:             (((*s_objet_argument_1).type == REL) &&
 2079:             ((*s_objet_argument_2).type == INT)))
 2080:     {
 2081:         if ((s_objet_resultat = allocation(s_etat_processus, REL))
 2082:                 == NULL)
 2083:         {
 2084:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 2085:             return;
 2086:         }
 2087: 
 2088:         if ((*s_objet_argument_1).type == INT)
 2089:         {
 2090:             (*((real8 *) (*s_objet_resultat).objet)) = (*((real8 *)
 2091:                     (*s_objet_argument_2).objet)) * (*((integer8 *)
 2092:                     (*s_objet_argument_1).objet));
 2093:         }
 2094:         else
 2095:         {
 2096:             (*((real8 *) (*s_objet_resultat).objet)) = (*((integer8 *)
 2097:                     (*s_objet_argument_2).objet)) * (*((real8 *)
 2098:                     (*s_objet_argument_1).objet));
 2099:         }
 2100:     }
 2101: 
 2102: /*
 2103: --------------------------------------------------------------------------------
 2104:   Multiplication d'un entier et d'un complexe
 2105: --------------------------------------------------------------------------------
 2106: */
 2107: 
 2108:     else if ((((*s_objet_argument_1).type == INT) &&
 2109:             ((*s_objet_argument_2).type == CPL)) ||
 2110:             (((*s_objet_argument_1).type == CPL) &&
 2111:             ((*s_objet_argument_2).type == INT)))
 2112:     {
 2113:         if ((s_objet_resultat = allocation(s_etat_processus, CPL))
 2114:                 == NULL)
 2115:         {
 2116:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 2117:             return;
 2118:         }
 2119: 
 2120:         if ((*s_objet_argument_1).type == INT)
 2121:         {
 2122:             f77multiplicationci_((struct_complexe16 *) (*s_objet_argument_2)
 2123:                     .objet, (integer8 *) (*s_objet_argument_1).objet,
 2124:                     (struct_complexe16 *) (*s_objet_resultat).objet);
 2125:         }
 2126:         else
 2127:         {
 2128:             f77multiplicationci_((struct_complexe16 *) (*s_objet_argument_1)
 2129:                     .objet, (integer8 *) (*s_objet_argument_2).objet,
 2130:                     (struct_complexe16 *) (*s_objet_resultat).objet);
 2131:         }
 2132:     }
 2133: 
 2134: /*
 2135: --------------------------------------------------------------------------------
 2136:   Multiplication de deux réels
 2137: --------------------------------------------------------------------------------
 2138: */
 2139: 
 2140:     else if (((*s_objet_argument_1).type == REL) &&
 2141:             ((*s_objet_argument_2).type == REL))
 2142:     {
 2143:         if ((s_objet_resultat = allocation(s_etat_processus, REL))
 2144:                 == NULL)
 2145:         {
 2146:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 2147:             return;
 2148:         }
 2149: 
 2150:         (*((real8 *) (*s_objet_resultat).objet)) = (*((real8 *)
 2151:                 (*s_objet_argument_2).objet)) * (*((real8 *)
 2152:                 (*s_objet_argument_1).objet));
 2153:     }
 2154: 
 2155: /*
 2156: --------------------------------------------------------------------------------
 2157:   Multiplication d'un réel et d'un complexe
 2158: --------------------------------------------------------------------------------
 2159: */
 2160: 
 2161:     else if ((((*s_objet_argument_1).type == REL) &&
 2162:             ((*s_objet_argument_2).type == CPL)) ||
 2163:             (((*s_objet_argument_1).type == CPL) &&
 2164:             ((*s_objet_argument_2).type == REL)))
 2165:     {
 2166:         if ((s_objet_resultat = allocation(s_etat_processus, CPL))
 2167:                 == NULL)
 2168:         {
 2169:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 2170:             return;
 2171:         }
 2172: 
 2173:         if ((*s_objet_argument_1).type == REL)
 2174:         {
 2175:             f77multiplicationcr_((struct_complexe16 *)
 2176:                     (*s_objet_argument_2).objet,
 2177:                     (real8 *) (*s_objet_argument_1).objet,
 2178:                     (struct_complexe16 *) (*s_objet_resultat).objet);
 2179:         }
 2180:         else
 2181:         {
 2182:             f77multiplicationcr_((struct_complexe16 *) (*s_objet_argument_1)
 2183:                     .objet, (real8 *) (*s_objet_argument_2).objet,
 2184:                     (struct_complexe16 *) (*s_objet_resultat).objet);
 2185:         }
 2186:     }
 2187: 
 2188: /*
 2189: --------------------------------------------------------------------------------
 2190:   Multiplication de deux complexes
 2191: --------------------------------------------------------------------------------
 2192: */
 2193: 
 2194:     else if (((*s_objet_argument_1).type == CPL) &&
 2195:             ((*s_objet_argument_2).type == CPL))
 2196:     {
 2197:         if ((s_objet_resultat = allocation(s_etat_processus, CPL))
 2198:                 == NULL)
 2199:         {
 2200:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 2201:             return;
 2202:         }
 2203: 
 2204:         f77multiplicationcc_((struct_complexe16 *) (*s_objet_argument_2).objet,
 2205:                 (struct_complexe16 *) (*s_objet_argument_1).objet,
 2206:                 (struct_complexe16 *) (*s_objet_resultat).objet);
 2207:     }
 2208: 
 2209: /*
 2210: --------------------------------------------------------------------------------
 2211:   Multiplication d'un vecteur par un scalaire
 2212: --------------------------------------------------------------------------------
 2213: */
 2214:     /*
 2215:      * Vecteur d'entiers / Entier
 2216:      */
 2217: 
 2218:     else if ((((*s_objet_argument_1).type == VIN) &&
 2219:             ((*s_objet_argument_2).type == INT)) ||
 2220:             (((*s_objet_argument_1).type == INT) &&
 2221:             ((*s_objet_argument_2).type == VIN)))
 2222:     {
 2223:         if ((s_objet_resultat = allocation(s_etat_processus, VIN))
 2224:                 == NULL)
 2225:         {
 2226:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 2227:             return;
 2228:         }
 2229: 
 2230:         if ((*s_objet_argument_1).type == VIN)
 2231:         {
 2232:             (*((struct_vecteur *) (*s_objet_resultat).objet)).taille =
 2233:                     (*((struct_vecteur *) (*s_objet_argument_1).objet)).taille;
 2234:         }
 2235:         else
 2236:         {
 2237:             (*((struct_vecteur *) (*s_objet_resultat).objet)).taille =
 2238:                     (*((struct_vecteur *) (*s_objet_argument_2).objet)).taille;
 2239:         }
 2240: 
 2241:         if (((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau =
 2242:                 malloc((*(((struct_vecteur *) (*s_objet_resultat)
 2243:                 .objet))).taille * sizeof(integer8))) == NULL)
 2244:         {
 2245:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 2246:             return;
 2247:         }
 2248: 
 2249:         depassement = d_faux;
 2250: 
 2251:         for(i = 0; i < (*(((struct_vecteur *) (*s_objet_resultat)
 2252:                 .objet))).taille; i++)
 2253:         {
 2254:             if ((*s_objet_argument_1).type == VIN)
 2255:             {
 2256:                 if (depassement_multiplication((integer8 *)
 2257:                         (*s_objet_argument_2).objet, &(((integer8 *)
 2258:                         (*((struct_vecteur *) (*s_objet_argument_1).objet))
 2259:                         .tableau)[i]), &(((integer8 *) (*((struct_vecteur *)
 2260:                         (*s_objet_resultat).objet)).tableau)[i])) == d_erreur)
 2261:                 {
 2262:                     depassement = d_vrai;
 2263:                 }
 2264:             }
 2265:             else
 2266:             {
 2267:                 if (depassement_multiplication((integer8 *)
 2268:                         (*s_objet_argument_1).objet, &(((integer8 *)
 2269:                         (*((struct_vecteur *) (*s_objet_argument_2).objet))
 2270:                         .tableau)[i]), &(((integer8 *) (*((struct_vecteur *)
 2271:                         (*s_objet_resultat).objet)).tableau)[i])) == d_erreur)
 2272:                 {
 2273:                     depassement = d_vrai;
 2274:                 }
 2275:             }
 2276:         }
 2277: 
 2278:         if (depassement == d_vrai)
 2279:         {
 2280:             (*s_objet_resultat).type = VRL;
 2281:             (*((struct_vecteur *) (*s_objet_resultat).objet)).type = 'R';
 2282: 
 2283:             if (((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau =
 2284:                     malloc((*(((struct_vecteur *) (*s_objet_resultat)
 2285:                     .objet))).taille * sizeof(real8))) == NULL)
 2286:             {
 2287:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 2288:                 return;
 2289:             }
 2290: 
 2291:             for(i = 0; i < (*(((struct_vecteur *) (*s_objet_resultat)
 2292:                     .objet))).taille; i++)
 2293:             {
 2294:                 if ((*s_objet_argument_1).type == VIN)
 2295:                 {
 2296:                     ((real8 *) (*((struct_vecteur *) (*s_objet_resultat).objet))
 2297:                             .tableau)[i] = ((real8) (*((integer8 *)
 2298:                             (*s_objet_argument_2).objet))) * ((real8)
 2299:                             ((integer8 *) (*((struct_vecteur *)
 2300:                             (*s_objet_argument_1).objet)).tableau)[i]);
 2301:                 }
 2302:                 else
 2303:                 {
 2304:                     ((real8 *) (*((struct_vecteur *) (*s_objet_resultat).objet))
 2305:                             .tableau)[i] = ((real8) (*((integer8 *)
 2306:                             (*s_objet_argument_1).objet))) * ((real8)
 2307:                             ((integer8 *) (*((struct_vecteur *)
 2308:                             (*s_objet_argument_2).objet)).tableau)[i]);
 2309:                 }
 2310:             }
 2311:         }
 2312:     }
 2313: 
 2314:     /*
 2315:      * Vecteur de réels / Entier
 2316:      */
 2317: 
 2318:     else if ((((*s_objet_argument_1).type == VRL) &&
 2319:             ((*s_objet_argument_2).type == INT)) ||
 2320:             (((*s_objet_argument_1).type == INT) &&
 2321:             ((*s_objet_argument_2).type == VRL)))
 2322:     {
 2323:         if ((s_objet_resultat = allocation(s_etat_processus, VRL))
 2324:                 == NULL)
 2325:         {
 2326:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 2327:             return;
 2328:         }
 2329: 
 2330:         if ((*s_objet_argument_1).type == VRL)
 2331:         {
 2332:             (*((struct_vecteur *) (*s_objet_resultat).objet)).taille =
 2333:                     (*((struct_vecteur *) (*s_objet_argument_1).objet)).taille;
 2334:         }
 2335:         else
 2336:         {
 2337:             (*((struct_vecteur *) (*s_objet_resultat).objet)).taille =
 2338:                     (*((struct_vecteur *) (*s_objet_argument_2).objet)).taille;
 2339:         }
 2340: 
 2341:         if (((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau =
 2342:                 malloc((*(((struct_vecteur *) (*s_objet_resultat)
 2343:                 .objet))).taille * sizeof(real8))) == NULL)
 2344:         {
 2345:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 2346:             return;
 2347:         }
 2348: 
 2349:         for(i = 0; i < (*(((struct_vecteur *) (*s_objet_resultat)
 2350:                 .objet))).taille; i++)
 2351:         {
 2352:             if ((*s_objet_argument_1).type == VRL)
 2353:             {
 2354:                 ((real8 *) (*((struct_vecteur *) (*s_objet_resultat).objet))
 2355:                         .tableau)[i] = (*((integer8 *) (*s_objet_argument_2)
 2356:                         .objet)) * ((real8 *) (*((struct_vecteur *)
 2357:                         (*s_objet_argument_1).objet)).tableau)[i];
 2358:             }
 2359:             else
 2360:             {
 2361:                 ((real8 *) (*((struct_vecteur *) (*s_objet_resultat).objet))
 2362:                         .tableau)[i] = (*((integer8 *) (*s_objet_argument_1)
 2363:                         .objet)) * ((real8 *) (*((struct_vecteur *)
 2364:                         (*s_objet_argument_2).objet)).tableau)[i];
 2365:             }
 2366:         }
 2367:     }
 2368: 
 2369:     /*
 2370:      * Vecteur de complexes / Entier
 2371:      */
 2372: 
 2373:     else if ((((*s_objet_argument_1).type == VCX) &&
 2374:             ((*s_objet_argument_2).type == INT)) ||
 2375:             (((*s_objet_argument_1).type == INT) &&
 2376:             ((*s_objet_argument_2).type == VCX)))
 2377:     {
 2378:         if ((s_objet_resultat = allocation(s_etat_processus, VCX))
 2379:                 == NULL)
 2380:         {
 2381:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 2382:             return;
 2383:         }
 2384: 
 2385:         if ((*s_objet_argument_1).type == VCX)
 2386:         {
 2387:             (*((struct_vecteur *) (*s_objet_resultat).objet)).taille =
 2388:                     (*((struct_vecteur *) (*s_objet_argument_1).objet)).taille;
 2389:         }
 2390:         else
 2391:         {
 2392:             (*((struct_vecteur *) (*s_objet_resultat).objet)).taille =
 2393:                     (*((struct_vecteur *) (*s_objet_argument_2).objet)).taille;
 2394:         }
 2395: 
 2396:         if (((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau =
 2397:                 malloc((*(((struct_vecteur *) (*s_objet_resultat)
 2398:                 .objet))).taille * sizeof(struct_complexe16))) == NULL)
 2399:         {
 2400:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 2401:             return;
 2402:         }
 2403: 
 2404:         for(i = 0; i < (*(((struct_vecteur *) (*s_objet_resultat)
 2405:                 .objet))).taille; i++)
 2406:         {
 2407:             if ((*s_objet_argument_1).type == VCX)
 2408:             {
 2409:                 f77multiplicationci_(&(((struct_complexe16 *)
 2410:                         (*((struct_vecteur *)
 2411:                         (*s_objet_argument_1).objet)).tableau)[i]),
 2412:                         &((*((integer8 *) (*s_objet_argument_2).objet))),
 2413:                         &(((struct_complexe16 *) (*((struct_vecteur *)
 2414:                         (*s_objet_resultat).objet)).tableau)[i]));
 2415:             }
 2416:             else
 2417:             {
 2418:                 f77multiplicationci_(&(((struct_complexe16 *)
 2419:                         (*((struct_vecteur *)
 2420:                         (*s_objet_argument_2).objet)).tableau)[i]),
 2421:                         &((*((integer8 *) (*s_objet_argument_1).objet))),
 2422:                         &(((struct_complexe16 *) (*((struct_vecteur *)
 2423:                         (*s_objet_resultat).objet)).tableau)[i]));
 2424:             }
 2425:         }
 2426:     }
 2427: 
 2428:     /*
 2429:      * Vecteur d'entiers / Réel
 2430:      */
 2431: 
 2432:     else if ((((*s_objet_argument_1).type == VIN) &&
 2433:             ((*s_objet_argument_2).type == REL)) ||
 2434:             (((*s_objet_argument_1).type == REL) &&
 2435:             ((*s_objet_argument_2).type == VIN)))
 2436:     {
 2437:         if ((s_objet_resultat = allocation(s_etat_processus, VRL))
 2438:                 == NULL)
 2439:         {
 2440:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 2441:             return;
 2442:         }
 2443: 
 2444:         if ((*s_objet_argument_1).type == VIN)
 2445:         {
 2446:             (*((struct_vecteur *) (*s_objet_resultat).objet)).taille =
 2447:                     (*((struct_vecteur *) (*s_objet_argument_1).objet)).taille;
 2448:         }
 2449:         else
 2450:         {
 2451:             (*((struct_vecteur *) (*s_objet_resultat).objet)).taille =
 2452:                     (*((struct_vecteur *) (*s_objet_argument_2).objet)).taille;
 2453:         }
 2454: 
 2455:         if (((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau =
 2456:                 malloc((*(((struct_vecteur *) (*s_objet_resultat)
 2457:                 .objet))).taille * sizeof(real8))) == NULL)
 2458:         {
 2459:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 2460:             return;
 2461:         }
 2462: 
 2463:         for(i = 0; i < (*(((struct_vecteur *) (*s_objet_resultat)
 2464:                 .objet))).taille; i++)
 2465:         {
 2466:             if ((*s_objet_argument_1).type == VIN)
 2467:             {
 2468:                 ((real8 *) (*((struct_vecteur *) (*s_objet_resultat).objet))
 2469:                         .tableau)[i] = (*((real8 *) (*s_objet_argument_2)
 2470:                         .objet)) * ((integer8 *) (*((struct_vecteur *)
 2471:                         (*s_objet_argument_1).objet)).tableau)[i];
 2472:             }
 2473:             else
 2474:             {
 2475:                 ((real8 *) (*((struct_vecteur *) (*s_objet_resultat).objet))
 2476:                         .tableau)[i] = (*((real8 *) (*s_objet_argument_1)
 2477:                         .objet)) * ((integer8 *) (*((struct_vecteur *)
 2478:                         (*s_objet_argument_2).objet)).tableau)[i];
 2479:             }
 2480:         }
 2481:     }
 2482: 
 2483:     /*
 2484:      * Vecteur de réels / Réel
 2485:      */
 2486: 
 2487:     else if ((((*s_objet_argument_1).type == VRL) &&
 2488:             ((*s_objet_argument_2).type == REL)) ||
 2489:             (((*s_objet_argument_1).type == REL) &&
 2490:             ((*s_objet_argument_2).type == VRL)))
 2491:     {
 2492:         if ((s_objet_resultat = allocation(s_etat_processus, VRL))
 2493:                 == NULL)
 2494:         {
 2495:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 2496:             return;
 2497:         }
 2498: 
 2499:         if ((*s_objet_argument_1).type == VRL)
 2500:         {
 2501:             (*((struct_vecteur *) (*s_objet_resultat).objet)).taille =
 2502:                     (*((struct_vecteur *) (*s_objet_argument_1).objet)).taille;
 2503:         }
 2504:         else
 2505:         {
 2506:             (*((struct_vecteur *) (*s_objet_resultat).objet)).taille =
 2507:                     (*((struct_vecteur *) (*s_objet_argument_2).objet)).taille;
 2508:         }
 2509: 
 2510:         if (((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau =
 2511:                 malloc((*(((struct_vecteur *) (*s_objet_resultat)
 2512:                 .objet))).taille * sizeof(real8))) == NULL)
 2513:         {
 2514:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 2515:             return;
 2516:         }
 2517: 
 2518:         for(i = 0; i < (*(((struct_vecteur *) (*s_objet_resultat)
 2519:                 .objet))).taille; i++)
 2520:         {
 2521:             if ((*s_objet_argument_1).type == VRL)
 2522:             {
 2523:                 ((real8 *) (*((struct_vecteur *) (*s_objet_resultat).objet))
 2524:                         .tableau)[i] = (*((real8 *) (*s_objet_argument_2)
 2525:                         .objet)) * ((real8 *) (*((struct_vecteur *)
 2526:                         (*s_objet_argument_1).objet)).tableau)[i];
 2527:             }
 2528:             else
 2529:             {
 2530:                 ((real8 *) (*((struct_vecteur *) (*s_objet_resultat).objet))
 2531:                         .tableau)[i] = (*((real8 *) (*s_objet_argument_1)
 2532:                         .objet)) * ((real8 *) (*((struct_vecteur *)
 2533:                         (*s_objet_argument_2).objet)).tableau)[i];
 2534:             }
 2535:         }
 2536:     }
 2537: 
 2538:     /*
 2539:      * Vecteur de complexes / Réel
 2540:      */
 2541: 
 2542:     else if ((((*s_objet_argument_1).type == VCX) &&
 2543:             ((*s_objet_argument_2).type == REL)) ||
 2544:             (((*s_objet_argument_1).type == REL) &&
 2545:             ((*s_objet_argument_2).type == VCX)))
 2546:     {
 2547:         if ((s_objet_resultat = allocation(s_etat_processus, VCX))
 2548:                 == NULL)
 2549:         {
 2550:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 2551:             return;
 2552:         }
 2553: 
 2554:         if ((*s_objet_argument_1).type == VCX)
 2555:         {
 2556:             (*((struct_vecteur *) (*s_objet_resultat).objet)).taille =
 2557:                     (*((struct_vecteur *) (*s_objet_argument_1).objet)).taille;
 2558:         }
 2559:         else
 2560:         {
 2561:             (*((struct_vecteur *) (*s_objet_resultat).objet)).taille =
 2562:                     (*((struct_vecteur *) (*s_objet_argument_2).objet)).taille;
 2563:         }
 2564: 
 2565:         if (((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau =
 2566:                 malloc((*(((struct_vecteur *) (*s_objet_resultat)
 2567:                 .objet))).taille * sizeof(struct_complexe16))) == NULL)
 2568:         {
 2569:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 2570:             return;
 2571:         }
 2572: 
 2573:         for(i = 0; i < (*(((struct_vecteur *) (*s_objet_resultat)
 2574:                 .objet))).taille; i++)
 2575:         {
 2576:             if ((*s_objet_argument_1).type == VCX)
 2577:             {
 2578:                 f77multiplicationcr_(&(((struct_complexe16 *)
 2579:                         (*((struct_vecteur *)
 2580:                         (*s_objet_argument_1).objet)).tableau)[i]),
 2581:                         &((*((real8 *) (*s_objet_argument_2).objet))),
 2582:                         &(((struct_complexe16 *) (*((struct_vecteur *)
 2583:                         (*s_objet_resultat).objet)).tableau)[i]));
 2584:             }
 2585:             else
 2586:             {
 2587:                 f77multiplicationcr_(&(((struct_complexe16 *)
 2588:                         (*((struct_vecteur *)
 2589:                         (*s_objet_argument_2).objet)).tableau)[i]),
 2590:                         &((*((real8 *) (*s_objet_argument_1).objet))),
 2591:                         &(((struct_complexe16 *) (*((struct_vecteur *)
 2592:                         (*s_objet_resultat).objet)).tableau)[i]));
 2593:             }
 2594:         }
 2595:     }
 2596: 
 2597:     /*
 2598:      * Vecteur d'entiers / Complexe
 2599:      */
 2600: 
 2601:     else if ((((*s_objet_argument_1).type == VIN) &&
 2602:             ((*s_objet_argument_2).type == CPL)) ||
 2603:             (((*s_objet_argument_1).type == CPL) &&
 2604:             ((*s_objet_argument_2).type == VIN)))
 2605:     {
 2606:         if ((s_objet_resultat = allocation(s_etat_processus, VCX))
 2607:                 == NULL)
 2608:         {
 2609:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 2610:             return;
 2611:         }
 2612: 
 2613:         if ((*s_objet_argument_1).type == VIN)
 2614:         {
 2615:             (*((struct_vecteur *) (*s_objet_resultat).objet)).taille =
 2616:                     (*((struct_vecteur *) (*s_objet_argument_1).objet)).taille;
 2617:         }
 2618:         else
 2619:         {
 2620:             (*((struct_vecteur *) (*s_objet_resultat).objet)).taille =
 2621:                     (*((struct_vecteur *) (*s_objet_argument_2).objet)).taille;
 2622:         }
 2623: 
 2624:         if (((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau =
 2625:                 malloc((*(((struct_vecteur *) (*s_objet_resultat)
 2626:                 .objet))).taille * sizeof(struct_complexe16))) == NULL)
 2627:         {
 2628:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 2629:             return;
 2630:         }
 2631: 
 2632:         for(i = 0; i < (*(((struct_vecteur *) (*s_objet_resultat)
 2633:                 .objet))).taille; i++)
 2634:         {
 2635:             if ((*s_objet_argument_1).type == VIN)
 2636:             {
 2637:                 f77multiplicationci_(&((*((struct_complexe16 *)
 2638:                         (*s_objet_argument_2).objet))),
 2639:                         &(((integer8 *) (*((struct_vecteur *)
 2640:                         (*s_objet_argument_1).objet)).tableau)[i]),
 2641:                         &(((struct_complexe16 *) (*((struct_vecteur *)
 2642:                         (*s_objet_resultat).objet)).tableau)[i]));
 2643:             }
 2644:             else
 2645:             {
 2646:                 f77multiplicationci_(&((*((struct_complexe16 *)
 2647:                         (*s_objet_argument_1).objet))),
 2648:                         &(((integer8 *) (*((struct_vecteur *)
 2649:                         (*s_objet_argument_2).objet)).tableau)[i]),
 2650:                         &(((struct_complexe16 *) (*((struct_vecteur *)
 2651:                         (*s_objet_resultat).objet)).tableau)[i]));
 2652:             }
 2653:         }
 2654:     }
 2655: 
 2656:     /*
 2657:      * Vecteur de réels / Complexe
 2658:      */
 2659: 
 2660:     else if ((((*s_objet_argument_1).type == VRL) &&
 2661:             ((*s_objet_argument_2).type == CPL)) ||
 2662:             (((*s_objet_argument_1).type == CPL) &&
 2663:             ((*s_objet_argument_2).type == VRL)))
 2664:     {
 2665:         if ((s_objet_resultat = allocation(s_etat_processus, VCX))
 2666:                 == NULL)
 2667:         {
 2668:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 2669:             return;
 2670:         }
 2671: 
 2672:         if ((*s_objet_argument_1).type == VRL)
 2673:         {
 2674:             (*((struct_vecteur *) (*s_objet_resultat).objet)).taille =
 2675:                     (*((struct_vecteur *) (*s_objet_argument_1).objet)).taille;
 2676:         }
 2677:         else
 2678:         {
 2679:             (*((struct_vecteur *) (*s_objet_resultat).objet)).taille =
 2680:                     (*((struct_vecteur *) (*s_objet_argument_2).objet)).taille;
 2681:         }
 2682: 
 2683:         if (((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau =
 2684:                 malloc((*(((struct_vecteur *) (*s_objet_resultat)
 2685:                 .objet))).taille * sizeof(struct_complexe16))) == NULL)
 2686:         {
 2687:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 2688:             return;
 2689:         }
 2690: 
 2691:         for(i = 0; i < (*(((struct_vecteur *) (*s_objet_resultat)
 2692:                 .objet))).taille; i++)
 2693:         {
 2694:             if ((*s_objet_argument_1).type == VRL)
 2695:             {
 2696:                 f77multiplicationcr_(&((*((struct_complexe16 *)
 2697:                         (*s_objet_argument_2).objet))),
 2698:                         &(((real8 *) (*((struct_vecteur *)
 2699:                         (*s_objet_argument_1).objet)).tableau)[i]),
 2700:                         &(((struct_complexe16 *) (*((struct_vecteur *)
 2701:                         (*s_objet_resultat).objet)).tableau)[i]));
 2702:             }
 2703:             else
 2704:             {
 2705:                 f77multiplicationcr_(&((*((struct_complexe16 *)
 2706:                         (*s_objet_argument_1).objet))),
 2707:                         &(((real8 *) (*((struct_vecteur *)
 2708:                         (*s_objet_argument_2).objet)).tableau)[i]),
 2709:                         &(((struct_complexe16 *) (*((struct_vecteur *)
 2710:                         (*s_objet_resultat).objet)).tableau)[i]));
 2711:             }
 2712:         }
 2713:     }
 2714: 
 2715:     /*
 2716:      * Vecteur de complexes / Complexe
 2717:      */
 2718: 
 2719:     else if ((((*s_objet_argument_1).type == VCX) &&
 2720:             ((*s_objet_argument_2).type == CPL)) ||
 2721:             (((*s_objet_argument_1).type == CPL) &&
 2722:             ((*s_objet_argument_2).type == VCX)))
 2723:     {
 2724:         if ((s_objet_resultat = allocation(s_etat_processus, VCX))
 2725:                 == NULL)
 2726:         {
 2727:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 2728:             return;
 2729:         }
 2730: 
 2731:         if ((*s_objet_argument_1).type == VCX)
 2732:         {
 2733:             (*((struct_vecteur *) (*s_objet_resultat).objet)).taille =
 2734:                     (*((struct_vecteur *) (*s_objet_argument_1).objet)).taille;
 2735:         }
 2736:         else
 2737:         {
 2738:             (*((struct_vecteur *) (*s_objet_resultat).objet)).taille =
 2739:                     (*((struct_vecteur *) (*s_objet_argument_2).objet)).taille;
 2740:         }
 2741: 
 2742:         if (((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau =
 2743:                 malloc((*(((struct_vecteur *) (*s_objet_resultat)
 2744:                 .objet))).taille * sizeof(struct_complexe16))) == NULL)
 2745:         {
 2746:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 2747:             return;
 2748:         }
 2749: 
 2750:         for(i = 0; i < (*(((struct_vecteur *) (*s_objet_resultat)
 2751:                 .objet))).taille; i++)
 2752:         {
 2753:             if ((*s_objet_argument_1).type == VCX)
 2754:             {
 2755:                 f77multiplicationcc_(&(((struct_complexe16 *)
 2756:                         (*((struct_vecteur *)
 2757:                         (*s_objet_argument_1).objet)).tableau)[i]),
 2758:                         &((*((struct_complexe16 *)
 2759:                         (*s_objet_argument_2).objet))),
 2760:                         &(((struct_complexe16 *) (*((struct_vecteur *)
 2761:                         (*s_objet_resultat).objet)).tableau)[i]));
 2762:             }
 2763:             else
 2764:             {
 2765:                 f77multiplicationcc_(&(((struct_complexe16 *)
 2766:                         (*((struct_vecteur *)
 2767:                         (*s_objet_argument_2).objet)).tableau)[i]),
 2768:                         &((*((struct_complexe16 *)
 2769:                         (*s_objet_argument_1).objet))),
 2770:                         &(((struct_complexe16 *) (*((struct_vecteur *)
 2771:                         (*s_objet_resultat).objet)).tableau)[i]));
 2772:             }
 2773:         }
 2774:     }
 2775: 
 2776: /*
 2777: --------------------------------------------------------------------------------
 2778:   Multiplication d'une matrice par un scalaire
 2779: --------------------------------------------------------------------------------
 2780: */
 2781:     /*
 2782:      * Matrice d'entiers / Entier
 2783:      */
 2784: 
 2785:     else if ((((*s_objet_argument_1).type == MIN) &&
 2786:             ((*s_objet_argument_2).type == INT)) ||
 2787:             (((*s_objet_argument_1).type == INT) &&
 2788:             ((*s_objet_argument_2).type == MIN)))
 2789:     {
 2790:         if ((s_objet_resultat = allocation(s_etat_processus, MIN))
 2791:                 == NULL)
 2792:         {
 2793:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 2794:             return;
 2795:         }
 2796: 
 2797:         if ((*s_objet_argument_1).type == MIN)
 2798:         {
 2799:             (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_lignes =
 2800:                     (*((struct_matrice *) (*s_objet_argument_1).objet))
 2801:                     .nombre_lignes;
 2802:             (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_colonnes =
 2803:                     (*((struct_matrice *) (*s_objet_argument_1).objet))
 2804:                     .nombre_colonnes;
 2805:         }
 2806:         else
 2807:         {
 2808:             (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_lignes =
 2809:                     (*((struct_matrice *) (*s_objet_argument_2).objet))
 2810:                     .nombre_lignes;
 2811:             (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_colonnes =
 2812:                     (*((struct_matrice *) (*s_objet_argument_2).objet))
 2813:                     .nombre_colonnes;
 2814:         }
 2815: 
 2816:         if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau =
 2817:                 malloc((*(((struct_matrice *) (*s_objet_resultat)
 2818:                 .objet))).nombre_lignes * sizeof(integer8 *))) == NULL)
 2819:         {
 2820:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 2821:             return;
 2822:         }
 2823: 
 2824:         depassement = d_faux;
 2825: 
 2826:         for(i = 0; i < (*(((struct_matrice *) (*s_objet_resultat)
 2827:                 .objet))).nombre_lignes; i++)
 2828:         {
 2829:             if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau[i] =
 2830:                     malloc((*(((struct_matrice *) (*s_objet_resultat)
 2831:                     .objet))).nombre_colonnes * sizeof(integer8))) == NULL)
 2832:             {
 2833:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 2834:                 return;
 2835:             }
 2836: 
 2837:             for(j = 0; j < (*(((struct_matrice *) (*s_objet_resultat)
 2838:                     .objet))).nombre_colonnes; j++)
 2839:             {
 2840:                 if ((*s_objet_argument_1).type == MIN)
 2841:                 {
 2842:                     if (depassement_multiplication((integer8 *)
 2843:                             (*s_objet_argument_2).objet, &(((integer8 **)
 2844:                             (*((struct_matrice *) (*s_objet_argument_1).objet))
 2845:                             .tableau)[i][j]), &(((integer8 **)
 2846:                             (*((struct_matrice *) (*s_objet_resultat).objet))
 2847:                             .tableau)[i][j])) == d_erreur)
 2848:                     {
 2849:                         depassement = d_vrai;
 2850:                     }
 2851:                 }
 2852:                 else
 2853:                 {
 2854:                     if (depassement_multiplication((integer8 *)
 2855:                             (*s_objet_argument_1).objet, &(((integer8 **)
 2856:                             (*((struct_matrice *) (*s_objet_argument_2).objet))
 2857:                             .tableau)[i][j]), &(((integer8 **)
 2858:                             (*((struct_matrice *) (*s_objet_resultat).objet))
 2859:                             .tableau)[i][j])) == d_erreur)
 2860:                     {
 2861:                         depassement = d_vrai;
 2862:                     }
 2863:                 }
 2864:             }
 2865:         }
 2866: 
 2867:         if (depassement == d_vrai)
 2868:         {
 2869:             (*s_objet_resultat).type = MRL;
 2870:             (*((struct_matrice *) (*s_objet_resultat).objet)).type = 'R';
 2871: 
 2872:             for(i = 0; i < (*(((struct_matrice *) (*s_objet_resultat)
 2873:                     .objet))).nombre_lignes; i++)
 2874:             {
 2875:                 free(((integer8 **) (*((struct_matrice *)
 2876:                         (*s_objet_resultat).objet)).tableau)[i]);
 2877: 
 2878:                 if (((*((struct_matrice *) (*s_objet_resultat).objet))
 2879:                         .tableau[i] = malloc((*(((struct_matrice *)
 2880:                         (*s_objet_resultat).objet))).nombre_colonnes *
 2881:                         sizeof(real8))) == NULL)
 2882:                 {
 2883:                     (*s_etat_processus).erreur_systeme =
 2884:                             d_es_allocation_memoire;
 2885:                     return;
 2886:                 }
 2887: 
 2888:                 for(j = 0; j < (*(((struct_matrice *) (*s_objet_resultat)
 2889:                         .objet))).nombre_colonnes; j++)
 2890:                 {
 2891:                     if ((*s_objet_argument_1).type == MIN)
 2892:                     {
 2893:                         ((real8 **) (*((struct_matrice *)
 2894:                             (*s_objet_resultat).objet)).tableau)[i][j] =
 2895:                             ((real8) (*((integer8 *) (*s_objet_argument_2)
 2896:                             .objet))) * ((real8) ((integer8 **)
 2897:                             (*((struct_matrice *) (*s_objet_argument_1).objet))
 2898:                             .tableau)[i][j]);
 2899:                     }
 2900:                     else
 2901:                     {
 2902:                         ((real8 **) (*((struct_matrice *)
 2903:                             (*s_objet_resultat).objet)).tableau)[i][j] =
 2904:                             ((real8) (*((integer8 *) (*s_objet_argument_1)
 2905:                             .objet))) * ((real8) ((integer8 **)
 2906:                             (*((struct_matrice *) (*s_objet_argument_2).objet))
 2907:                             .tableau)[i][j]);
 2908:                     }
 2909:                 }
 2910:             }
 2911:         }
 2912:     }
 2913: 
 2914:     /*
 2915:      * Matrice de réels / Entier
 2916:      */
 2917: 
 2918:     else if ((((*s_objet_argument_1).type == MRL) &&
 2919:             ((*s_objet_argument_2).type == INT)) ||
 2920:             (((*s_objet_argument_1).type == INT) &&
 2921:             ((*s_objet_argument_2).type == MRL)))
 2922:     {
 2923:         if ((s_objet_resultat = allocation(s_etat_processus, MRL))
 2924:                 == NULL)
 2925:         {
 2926:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 2927:             return;
 2928:         }
 2929: 
 2930:         if ((*s_objet_argument_1).type == MRL)
 2931:         {
 2932:             (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_lignes =
 2933:                     (*((struct_matrice *) (*s_objet_argument_1).objet))
 2934:                     .nombre_lignes;
 2935:             (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_colonnes =
 2936:                     (*((struct_matrice *) (*s_objet_argument_1).objet))
 2937:                     .nombre_colonnes;
 2938:         }
 2939:         else
 2940:         {
 2941:             (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_lignes =
 2942:                     (*((struct_matrice *) (*s_objet_argument_2).objet))
 2943:                     .nombre_lignes;
 2944:             (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_colonnes =
 2945:                     (*((struct_matrice *) (*s_objet_argument_2).objet))
 2946:                     .nombre_colonnes;
 2947:         }
 2948: 
 2949:         if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau =
 2950:                 malloc((*(((struct_matrice *) (*s_objet_resultat)
 2951:                 .objet))).nombre_lignes * sizeof(real8 *))) == NULL)
 2952:         {
 2953:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 2954:             return;
 2955:         }
 2956: 
 2957:         for(i = 0; i < (*(((struct_matrice *) (*s_objet_resultat)
 2958:                 .objet))).nombre_lignes; i++)
 2959:         {
 2960:             if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau[i] =
 2961:                     malloc((*(((struct_matrice *) (*s_objet_resultat)
 2962:                     .objet))).nombre_colonnes * sizeof(real8))) == NULL)
 2963:             {
 2964:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 2965:                 return;
 2966:             }
 2967: 
 2968:             for(j = 0; j < (*(((struct_matrice *) (*s_objet_resultat)
 2969:                     .objet))).nombre_colonnes; j++)
 2970:             {
 2971:                 if ((*s_objet_argument_1).type == MRL)
 2972:                 {
 2973:                     ((real8 **) (*((struct_matrice *)
 2974:                         (*s_objet_resultat).objet)).tableau)[i][j] =
 2975:                         (*((integer8 *) (*s_objet_argument_2)
 2976:                         .objet)) * ((real8 **) (*((struct_matrice *)
 2977:                         (*s_objet_argument_1).objet)).tableau)[i][j];
 2978:                 }
 2979:                 else
 2980:                 {
 2981:                     ((real8 **) (*((struct_matrice *)
 2982:                         (*s_objet_resultat).objet)).tableau)[i][j] =
 2983:                         (*((integer8 *) (*s_objet_argument_1)
 2984:                         .objet)) * ((real8 **) (*((struct_matrice *)
 2985:                         (*s_objet_argument_2).objet)).tableau)[i][j];
 2986:                 }
 2987:             }
 2988:         }
 2989:     }
 2990: 
 2991:     /*
 2992:      * Matrice de complexes / Entier
 2993:      */
 2994: 
 2995:     else if ((((*s_objet_argument_1).type == MCX) &&
 2996:             ((*s_objet_argument_2).type == INT)) ||
 2997:             (((*s_objet_argument_1).type == INT) &&
 2998:             ((*s_objet_argument_2).type == MCX)))
 2999:     {
 3000:         if ((s_objet_resultat = allocation(s_etat_processus, MCX))
 3001:                 == NULL)
 3002:         {
 3003:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 3004:             return;
 3005:         }
 3006: 
 3007:         if ((*s_objet_argument_1).type == MCX)
 3008:         {
 3009:             (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_lignes =
 3010:                     (*((struct_matrice *) (*s_objet_argument_1).objet))
 3011:                     .nombre_lignes;
 3012:             (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_colonnes =
 3013:                     (*((struct_matrice *) (*s_objet_argument_1).objet))
 3014:                     .nombre_colonnes;
 3015:         }
 3016:         else
 3017:         {
 3018:             (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_lignes =
 3019:                     (*((struct_matrice *) (*s_objet_argument_2).objet))
 3020:                     .nombre_lignes;
 3021:             (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_colonnes =
 3022:                     (*((struct_matrice *) (*s_objet_argument_2).objet))
 3023:                     .nombre_colonnes;
 3024:         }
 3025: 
 3026:         if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau =
 3027:                 malloc((*(((struct_matrice *) (*s_objet_resultat)
 3028:                 .objet))).nombre_lignes * sizeof(struct_complexe16 *))) == NULL)
 3029:         {
 3030:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 3031:             return;
 3032:         }
 3033: 
 3034:         for(i = 0; i < (*(((struct_matrice *) (*s_objet_resultat)
 3035:                 .objet))).nombre_lignes; i++)
 3036:         {
 3037:             if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau[i] =
 3038:                     malloc((*(((struct_matrice *) (*s_objet_resultat)
 3039:                     .objet))).nombre_colonnes * sizeof(struct_complexe16)))
 3040:                     == NULL)
 3041:             {
 3042:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 3043:                 return;
 3044:             }
 3045: 
 3046:             for(j = 0; j < (*(((struct_matrice *) (*s_objet_resultat)
 3047:                     .objet))).nombre_colonnes; j++)
 3048:             {
 3049:                 if ((*s_objet_argument_1).type == MCX)
 3050:                 {
 3051:                     f77multiplicationci_(&(((struct_complexe16 **)
 3052:                             (*((struct_matrice *) (*s_objet_argument_1).objet))
 3053:                             .tableau)[i][j]), &((*((integer8 *)
 3054:                             (*s_objet_argument_2).objet))),
 3055:                             &(((struct_complexe16 **) (*((struct_matrice *)
 3056:                             (*s_objet_resultat).objet)).tableau)[i][j]));
 3057:                 }
 3058:                 else
 3059:                 {
 3060:                     f77multiplicationci_(&(((struct_complexe16 **)
 3061:                             (*((struct_matrice *) (*s_objet_argument_2).objet))
 3062:                             .tableau)[i][j]), &((*((integer8 *)
 3063:                             (*s_objet_argument_1).objet))),
 3064:                             &(((struct_complexe16 **) (*((struct_matrice *)
 3065:                             (*s_objet_resultat).objet)).tableau)[i][j]));
 3066:                 }
 3067:             }
 3068:         }
 3069:     }
 3070: 
 3071:     /*
 3072:      * Matrice d'entiers / Réel
 3073:      */
 3074: 
 3075:     else if ((((*s_objet_argument_1).type == MIN) &&
 3076:             ((*s_objet_argument_2).type == REL)) ||
 3077:             (((*s_objet_argument_1).type == REL) &&
 3078:             ((*s_objet_argument_2).type == MIN)))
 3079:     {
 3080:         if ((s_objet_resultat = allocation(s_etat_processus, MRL))
 3081:                 == NULL)
 3082:         {
 3083:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 3084:             return;
 3085:         }
 3086: 
 3087:         if ((*s_objet_argument_1).type == MIN)
 3088:         {
 3089:             (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_lignes =
 3090:                     (*((struct_matrice *) (*s_objet_argument_1).objet))
 3091:                     .nombre_lignes;
 3092:             (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_colonnes =
 3093:                     (*((struct_matrice *) (*s_objet_argument_1).objet))
 3094:                     .nombre_colonnes;
 3095:         }
 3096:         else
 3097:         {
 3098:             (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_lignes =
 3099:                     (*((struct_matrice *) (*s_objet_argument_2).objet))
 3100:                     .nombre_lignes;
 3101:             (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_colonnes =
 3102:                     (*((struct_matrice *) (*s_objet_argument_2).objet))
 3103:                     .nombre_colonnes;
 3104:         }
 3105: 
 3106:         if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau =
 3107:                 malloc((*(((struct_matrice *) (*s_objet_resultat)
 3108:                 .objet))).nombre_lignes * sizeof(real8 *))) == NULL)
 3109:         {
 3110:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 3111:             return;
 3112:         }
 3113: 
 3114:         for(i = 0; i < (*(((struct_matrice *) (*s_objet_resultat)
 3115:                 .objet))).nombre_lignes; i++)
 3116:         {
 3117:             if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau[i] =
 3118:                     malloc((*(((struct_matrice *) (*s_objet_resultat)
 3119:                     .objet))).nombre_colonnes * sizeof(real8))) == NULL)
 3120:             {
 3121:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 3122:                 return;
 3123:             }
 3124: 
 3125:             for(j = 0; j < (*(((struct_matrice *) (*s_objet_resultat)
 3126:                     .objet))).nombre_colonnes; j++)
 3127:             {
 3128:                 if ((*s_objet_argument_1).type == MIN)
 3129:                 {
 3130:                     ((real8 **) (*((struct_matrice *)
 3131:                         (*s_objet_resultat).objet)).tableau)[i][j] =
 3132:                         (*((real8 *) (*s_objet_argument_2)
 3133:                         .objet)) * ((integer8 **) (*((struct_matrice *)
 3134:                         (*s_objet_argument_1).objet)).tableau)[i][j];
 3135:                 }
 3136:                 else
 3137:                 {
 3138:                     ((real8 **) (*((struct_matrice *)
 3139:                         (*s_objet_resultat).objet)).tableau)[i][j] =
 3140:                         (*((real8 *) (*s_objet_argument_1)
 3141:                         .objet)) * ((integer8 **) (*((struct_matrice *)
 3142:                         (*s_objet_argument_2).objet)).tableau)[i][j];
 3143:                 }
 3144:             }
 3145:         }
 3146:     }
 3147: 
 3148:     /*
 3149:      * Matrice de réels / Réel
 3150:      */
 3151: 
 3152:     else if ((((*s_objet_argument_1).type == MRL) &&
 3153:             ((*s_objet_argument_2).type == REL)) ||
 3154:             (((*s_objet_argument_1).type == REL) &&
 3155:             ((*s_objet_argument_2).type == MRL)))
 3156:     {
 3157:         if ((s_objet_resultat = allocation(s_etat_processus, MRL))
 3158:                 == NULL)
 3159:         {
 3160:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 3161:             return;
 3162:         }
 3163: 
 3164:         if ((*s_objet_argument_1).type == MRL)
 3165:         {
 3166:             (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_lignes =
 3167:                     (*((struct_matrice *) (*s_objet_argument_1).objet))
 3168:                     .nombre_lignes;
 3169:             (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_colonnes =
 3170:                     (*((struct_matrice *) (*s_objet_argument_1).objet))
 3171:                     .nombre_colonnes;
 3172:         }
 3173:         else
 3174:         {
 3175:             (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_lignes =
 3176:                     (*((struct_matrice *) (*s_objet_argument_2).objet))
 3177:                     .nombre_lignes;
 3178:             (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_colonnes =
 3179:                     (*((struct_matrice *) (*s_objet_argument_2).objet))
 3180:                     .nombre_colonnes;
 3181:         }
 3182: 
 3183:         if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau =
 3184:                 malloc((*(((struct_matrice *) (*s_objet_resultat)
 3185:                 .objet))).nombre_lignes * sizeof(real8 *))) == NULL)
 3186:         {
 3187:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 3188:             return;
 3189:         }
 3190: 
 3191:         for(i = 0; i < (*(((struct_matrice *) (*s_objet_resultat)
 3192:                 .objet))).nombre_lignes; i++)
 3193:         {
 3194:             if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau[i] =
 3195:                     malloc((*(((struct_matrice *) (*s_objet_resultat)
 3196:                     .objet))).nombre_colonnes * sizeof(real8))) == NULL)
 3197:             {
 3198:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 3199:                 return;
 3200:             }
 3201: 
 3202:             for(j = 0; j < (*(((struct_matrice *) (*s_objet_resultat)
 3203:                     .objet))).nombre_colonnes; j++)
 3204:             {
 3205:                 if ((*s_objet_argument_1).type == MRL)
 3206:                 {
 3207:                     ((real8 **) (*((struct_matrice *)
 3208:                         (*s_objet_resultat).objet)).tableau)[i][j] =
 3209:                         (*((real8 *) (*s_objet_argument_2)
 3210:                         .objet)) * ((real8 **) (*((struct_matrice *)
 3211:                         (*s_objet_argument_1).objet)).tableau)[i][j];
 3212:                 }
 3213:                 else
 3214:                 {
 3215:                     ((real8 **) (*((struct_matrice *)
 3216:                         (*s_objet_resultat).objet)).tableau)[i][j] =
 3217:                         (*((real8 *) (*s_objet_argument_1)
 3218:                         .objet)) * ((real8 **) (*((struct_matrice *)
 3219:                         (*s_objet_argument_2).objet)).tableau)[i][j];
 3220:                 }
 3221:             }
 3222:         }
 3223:     }
 3224: 
 3225:     /*
 3226:      * Matrice de complexes / Réel
 3227:      */
 3228: 
 3229:     else if ((((*s_objet_argument_1).type == MCX) &&
 3230:             ((*s_objet_argument_2).type == REL)) ||
 3231:             (((*s_objet_argument_1).type == REL) &&
 3232:             ((*s_objet_argument_2).type == MCX)))
 3233:     {
 3234:         if ((s_objet_resultat = allocation(s_etat_processus, MCX))
 3235:                 == NULL)
 3236:         {
 3237:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 3238:             return;
 3239:         }
 3240: 
 3241:         if ((*s_objet_argument_1).type == MCX)
 3242:         {
 3243:             (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_lignes =
 3244:                     (*((struct_matrice *) (*s_objet_argument_1).objet))
 3245:                     .nombre_lignes;
 3246:             (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_colonnes =
 3247:                     (*((struct_matrice *) (*s_objet_argument_1).objet))
 3248:                     .nombre_colonnes;
 3249:         }
 3250:         else
 3251:         {
 3252:             (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_lignes =
 3253:                     (*((struct_matrice *) (*s_objet_argument_2).objet))
 3254:                     .nombre_lignes;
 3255:             (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_colonnes =
 3256:                     (*((struct_matrice *) (*s_objet_argument_2).objet))
 3257:                     .nombre_colonnes;
 3258:         }
 3259: 
 3260:         if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau =
 3261:                 malloc((*(((struct_matrice *) (*s_objet_resultat)
 3262:                 .objet))).nombre_lignes * sizeof(struct_complexe16 *))) == NULL)
 3263:         {
 3264:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 3265:             return;
 3266:         }
 3267: 
 3268:         for(i = 0; i < (*(((struct_matrice *) (*s_objet_resultat)
 3269:                 .objet))).nombre_lignes; i++)
 3270:         {
 3271:             if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau[i] =
 3272:                     malloc((*(((struct_matrice *) (*s_objet_resultat)
 3273:                     .objet))).nombre_colonnes * sizeof(struct_complexe16)))
 3274:                     == NULL)
 3275:             {
 3276:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 3277:                 return;
 3278:             }
 3279: 
 3280:             for(j = 0; j < (*(((struct_matrice *) (*s_objet_resultat)
 3281:                     .objet))).nombre_colonnes; j++)
 3282:             {
 3283:                 if ((*s_objet_argument_1).type == MCX)
 3284:                 {
 3285:                     f77multiplicationcr_(&(((struct_complexe16 **)
 3286:                             (*((struct_matrice *) (*s_objet_argument_1).objet))
 3287:                             .tableau)[i][j]), &((*((real8 *)
 3288:                             (*s_objet_argument_2).objet))),
 3289:                             &(((struct_complexe16 **) (*((struct_matrice *)
 3290:                             (*s_objet_resultat).objet)).tableau)[i][j]));
 3291:                 }
 3292:                 else
 3293:                 {
 3294:                     f77multiplicationcr_(&(((struct_complexe16 **)
 3295:                             (*((struct_matrice *) (*s_objet_argument_2).objet))
 3296:                             .tableau)[i][j]), &((*((real8 *)
 3297:                             (*s_objet_argument_1).objet))),
 3298:                             &(((struct_complexe16 **) (*((struct_matrice *)
 3299:                             (*s_objet_resultat).objet)).tableau)[i][j]));
 3300:                 }
 3301:             }
 3302:         }
 3303:     }
 3304: 
 3305:     /*
 3306:      * Matrice d'entiers / Complexe
 3307:      */
 3308: 
 3309:     else if ((((*s_objet_argument_1).type == MIN) &&
 3310:             ((*s_objet_argument_2).type == CPL)) ||
 3311:             (((*s_objet_argument_1).type == CPL) &&
 3312:             ((*s_objet_argument_2).type == MIN)))
 3313:     {
 3314:         if ((s_objet_resultat = allocation(s_etat_processus, MCX))
 3315:                 == NULL)
 3316:         {
 3317:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 3318:             return;
 3319:         }
 3320: 
 3321:         if ((*s_objet_argument_1).type == MIN)
 3322:         {
 3323:             (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_lignes =
 3324:                     (*((struct_matrice *) (*s_objet_argument_1).objet))
 3325:                     .nombre_lignes;
 3326:             (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_colonnes =
 3327:                     (*((struct_matrice *) (*s_objet_argument_1).objet))
 3328:                     .nombre_colonnes;
 3329:         }
 3330:         else
 3331:         {
 3332:             (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_lignes =
 3333:                     (*((struct_matrice *) (*s_objet_argument_2).objet))
 3334:                     .nombre_lignes;
 3335:             (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_colonnes =
 3336:                     (*((struct_matrice *) (*s_objet_argument_2).objet))
 3337:                     .nombre_colonnes;
 3338:         }
 3339: 
 3340:         if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau =
 3341:                 malloc((*(((struct_matrice *) (*s_objet_resultat)
 3342:                 .objet))).nombre_lignes * sizeof(struct_complexe16 *))) == NULL)
 3343:         {
 3344:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 3345:             return;
 3346:         }
 3347: 
 3348:         for(i = 0; i < (*(((struct_matrice *) (*s_objet_resultat)
 3349:                 .objet))).nombre_lignes; i++)
 3350:         {
 3351:             if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau[i] =
 3352:                     malloc((*(((struct_matrice *) (*s_objet_resultat)
 3353:                     .objet))).nombre_colonnes * sizeof(struct_complexe16)))
 3354:                     == NULL)
 3355:             {
 3356:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 3357:                 return;
 3358:             }
 3359: 
 3360:             for(j = 0; j < (*(((struct_matrice *) (*s_objet_resultat)
 3361:                     .objet))).nombre_colonnes; j++)
 3362:             {
 3363:                 if ((*s_objet_argument_1).type == MIN)
 3364:                 {
 3365:                     f77multiplicationci_(&((*((struct_complexe16 *)
 3366:                             (*s_objet_argument_2).objet))),
 3367:                             &(((integer8 **) (*((struct_matrice *)
 3368:                             (*s_objet_argument_1).objet)).tableau)[i][j]),
 3369:                             &(((struct_complexe16 **) (*((struct_matrice *)
 3370:                             (*s_objet_resultat).objet)).tableau)[i][j]));
 3371:                 }
 3372:                 else
 3373:                 {
 3374:                     f77multiplicationci_(&((*((struct_complexe16 *)
 3375:                             (*s_objet_argument_1).objet))),
 3376:                             &(((integer8 **) (*((struct_matrice *)
 3377:                             (*s_objet_argument_2).objet)).tableau)[i][j]),
 3378:                             &(((struct_complexe16 **) (*((struct_matrice *)
 3379:                             (*s_objet_resultat).objet)).tableau)[i][j]));
 3380:                 }
 3381:             }
 3382:         }
 3383:     }
 3384: 
 3385:     /*
 3386:      * Matrice de réels / Complexe
 3387:      */
 3388: 
 3389:     else if ((((*s_objet_argument_1).type == MRL) &&
 3390:             ((*s_objet_argument_2).type == CPL)) ||
 3391:             (((*s_objet_argument_1).type == CPL) &&
 3392:             ((*s_objet_argument_2).type == MRL)))
 3393:     {
 3394:         if ((s_objet_resultat = allocation(s_etat_processus, MCX))
 3395:                 == NULL)
 3396:         {
 3397:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 3398:             return;
 3399:         }
 3400: 
 3401:         if ((*s_objet_argument_1).type == MRL)
 3402:         {
 3403:             (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_lignes =
 3404:                     (*((struct_matrice *) (*s_objet_argument_1).objet))
 3405:                     .nombre_lignes;
 3406:             (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_colonnes =
 3407:                     (*((struct_matrice *) (*s_objet_argument_1).objet))
 3408:                     .nombre_colonnes;
 3409:         }
 3410:         else
 3411:         {
 3412:             (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_lignes =
 3413:                     (*((struct_matrice *) (*s_objet_argument_2).objet))
 3414:                     .nombre_lignes;
 3415:             (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_colonnes =
 3416:                     (*((struct_matrice *) (*s_objet_argument_2).objet))
 3417:                     .nombre_colonnes;
 3418:         }
 3419: 
 3420:         if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau =
 3421:                 malloc((*(((struct_matrice *) (*s_objet_resultat)
 3422:                 .objet))).nombre_lignes * sizeof(struct_complexe16 *))) == NULL)
 3423:         {
 3424:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 3425:             return;
 3426:         }
 3427: 
 3428:         for(i = 0; i < (*(((struct_matrice *) (*s_objet_resultat)
 3429:                 .objet))).nombre_lignes; i++)
 3430:         {
 3431:             if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau[i] =
 3432:                     malloc((*(((struct_matrice *) (*s_objet_resultat)
 3433:                     .objet))).nombre_colonnes * sizeof(struct_complexe16)))
 3434:                     == NULL)
 3435:             {
 3436:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 3437:                 return;
 3438:             }
 3439: 
 3440:             for(j = 0; j < (*(((struct_matrice *) (*s_objet_resultat)
 3441:                     .objet))).nombre_colonnes; j++)
 3442:             {
 3443:                 if ((*s_objet_argument_1).type == MRL)
 3444:                 {
 3445:                     f77multiplicationcr_(&((*((struct_complexe16 *)
 3446:                             (*s_objet_argument_2).objet))),
 3447:                             &(((real8 **) (*((struct_matrice *)
 3448:                             (*s_objet_argument_1).objet)).tableau)[i][j]),
 3449:                             &(((struct_complexe16 **) (*((struct_matrice *)
 3450:                             (*s_objet_resultat).objet)).tableau)[i][j]));
 3451:                 }
 3452:                 else
 3453:                 {
 3454:                     f77multiplicationcr_(&((*((struct_complexe16 *)
 3455:                             (*s_objet_argument_1).objet))),
 3456:                             &(((real8 **) (*((struct_matrice *)
 3457:                             (*s_objet_argument_2).objet)).tableau)[i][j]),
 3458:                             &(((struct_complexe16 **) (*((struct_matrice *)
 3459:                             (*s_objet_resultat).objet)).tableau)[i][j]));
 3460:                 }
 3461:             }
 3462:         }
 3463:     }
 3464: 
 3465:     /*
 3466:      * Matrice de complexes / Complexe
 3467:      */
 3468: 
 3469:     else if ((((*s_objet_argument_1).type == MCX) &&
 3470:             ((*s_objet_argument_2).type == CPL)) ||
 3471:             (((*s_objet_argument_1).type == CPL) &&
 3472:             ((*s_objet_argument_2).type == MCX)))
 3473:     {
 3474:         if ((s_objet_resultat = allocation(s_etat_processus, MCX))
 3475:                 == NULL)
 3476:         {
 3477:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 3478:             return;
 3479:         }
 3480: 
 3481:         if ((*s_objet_argument_1).type == MCX)
 3482:         {
 3483:             (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_lignes =
 3484:                     (*((struct_matrice *) (*s_objet_argument_1).objet))
 3485:                     .nombre_lignes;
 3486:             (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_colonnes =
 3487:                     (*((struct_matrice *) (*s_objet_argument_1).objet))
 3488:                     .nombre_colonnes;
 3489:         }
 3490:         else
 3491:         {
 3492:             (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_lignes =
 3493:                     (*((struct_matrice *) (*s_objet_argument_2).objet))
 3494:                     .nombre_lignes;
 3495:             (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_colonnes =
 3496:                     (*((struct_matrice *) (*s_objet_argument_2).objet))
 3497:                     .nombre_colonnes;
 3498:         }
 3499: 
 3500:         if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau =
 3501:                 malloc((*(((struct_matrice *) (*s_objet_resultat)
 3502:                 .objet))).nombre_lignes * sizeof(struct_complexe16 *))) == NULL)
 3503:         {
 3504:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 3505:             return;
 3506:         }
 3507: 
 3508:         for(i = 0; i < (*(((struct_matrice *) (*s_objet_resultat)
 3509:                 .objet))).nombre_lignes; i++)
 3510:         {
 3511:             if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau[i] =
 3512:                     malloc((*(((struct_matrice *) (*s_objet_resultat)
 3513:                     .objet))).nombre_colonnes * sizeof(struct_complexe16)))
 3514:                     == NULL)
 3515:             {
 3516:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 3517:                 return;
 3518:             }
 3519: 
 3520:             for(j = 0; j < (*(((struct_matrice *) (*s_objet_resultat)
 3521:                     .objet))).nombre_colonnes; j++)
 3522:             {
 3523:                 if ((*s_objet_argument_1).type == MCX)
 3524:                 {
 3525:                     f77multiplicationcc_(&((*((struct_complexe16 *)
 3526:                             (*s_objet_argument_2).objet))),
 3527:                             &(((struct_complexe16 **) (*((struct_matrice *)
 3528:                             (*s_objet_argument_1).objet)).tableau)[i][j]),
 3529:                             &(((struct_complexe16 **) (*((struct_matrice *)
 3530:                             (*s_objet_resultat).objet)).tableau)[i][j]));
 3531:                 }
 3532:                 else
 3533:                 {
 3534:                     f77multiplicationcc_(&((*((struct_complexe16 *)
 3535:                             (*s_objet_argument_1).objet))),
 3536:                             &(((struct_complexe16 **) (*((struct_matrice *)
 3537:                             (*s_objet_argument_2).objet)).tableau)[i][j]),
 3538:                             &(((struct_complexe16 **) (*((struct_matrice *)
 3539:                             (*s_objet_resultat).objet)).tableau)[i][j]));
 3540:                 }
 3541:             }
 3542:         }
 3543:     }
 3544: 
 3545: /*
 3546: --------------------------------------------------------------------------------
 3547:   Multiplication d'une matrice par un vecteur (résultat : vecteur)
 3548: --------------------------------------------------------------------------------
 3549: */
 3550:     /*
 3551:      * Matrice d'entiers / Vecteur d'entiers
 3552:      */
 3553: 
 3554:     else if (((*s_objet_argument_2).type == MIN) &&
 3555:             ((*s_objet_argument_1).type == VIN))
 3556:     {
 3557:         if ((s_objet_resultat = allocation(s_etat_processus, VIN))
 3558:                 == NULL)
 3559:         {
 3560:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 3561:             return;
 3562:         }
 3563: 
 3564:         (*((struct_vecteur *) (*s_objet_resultat).objet)).taille =
 3565:                 (*(((struct_matrice *) (*s_objet_argument_2)
 3566:                 .objet))).nombre_lignes;
 3567: 
 3568:         if ((*((struct_vecteur *) (*s_objet_argument_1).objet)).taille !=
 3569:                 (*((struct_matrice *) (*s_objet_argument_2).objet))
 3570:                 .nombre_colonnes)
 3571:         {
 3572:             liberation(s_etat_processus, s_objet_argument_1);
 3573:             liberation(s_etat_processus, s_objet_argument_2);
 3574:             liberation(s_etat_processus, s_objet_resultat);
 3575: 
 3576:             (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
 3577:             return;
 3578:         }
 3579: 
 3580:         if (((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau =
 3581:                 malloc((*(((struct_matrice *) (*s_objet_argument_2)
 3582:                 .objet))).nombre_lignes * sizeof(integer8))) == NULL)
 3583:         {
 3584:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 3585:             return;
 3586:         }
 3587: 
 3588:         depassement = d_faux;
 3589: 
 3590:         for(i = 0; i < (*(((struct_matrice *) (*s_objet_argument_2)
 3591:                 .objet))).nombre_lignes; i++)
 3592:         {
 3593:             ((integer8 *) (*((struct_vecteur *) (*s_objet_resultat).objet))
 3594:                     .tableau)[i] = 0;
 3595: 
 3596:             for(k = 0; k < (*(((struct_matrice *) (*s_objet_argument_2)
 3597:                     .objet))).nombre_colonnes; k++)
 3598:             {
 3599:                 if (depassement_multiplication(&(((integer8 **)
 3600:                         (*((struct_matrice *) (*s_objet_argument_2).objet))
 3601:                         .tableau)[i][k]), &(((integer8 *) (*((struct_vecteur *)
 3602:                         (*s_objet_argument_1).objet)).tableau)[k]), &tampon)
 3603:                         == d_erreur)
 3604:                 {
 3605:                     depassement = d_vrai;
 3606:                 }
 3607: 
 3608:                 if (depassement_addition(&(((integer8 *) (*((struct_vecteur *)
 3609:                         (*s_objet_resultat).objet)).tableau)[i]), &tampon,
 3610:                         &cumul) == d_erreur)
 3611:                 {
 3612:                     depassement = d_vrai;
 3613:                 }
 3614: 
 3615:                 ((integer8 *) (*((struct_vecteur *) (*s_objet_resultat).objet))
 3616:                         .tableau)[i] = cumul;
 3617:             }
 3618:         }
 3619: 
 3620:         if (depassement == d_vrai)
 3621:         {
 3622:             (*s_objet_resultat).type = VRL;
 3623:             (*((struct_vecteur *) (*s_objet_resultat).objet)).type = 'R';
 3624: 
 3625:             if (((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau =
 3626:                     malloc((*(((struct_matrice *) (*s_objet_argument_2)
 3627:                     .objet))).nombre_lignes * sizeof(real8))) == NULL)
 3628:             {
 3629:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 3630:                 return;
 3631:             }
 3632: 
 3633:             for(i = 0; i < (*(((struct_matrice *) (*s_objet_argument_2)
 3634:                     .objet))).nombre_lignes; i++)
 3635:             {
 3636:                 ((real8 *) (*((struct_vecteur *) (*s_objet_resultat).objet))
 3637:                         .tableau)[i] = 0;
 3638: 
 3639:                 for(k = 0; k < (*(((struct_matrice *) (*s_objet_argument_2)
 3640:                         .objet))).nombre_colonnes; k++)
 3641:                 {
 3642:                     ((real8 *) (*((struct_vecteur *) (*s_objet_resultat).objet))
 3643:                             .tableau)[i] = ((real8) ((integer8 *)
 3644:                             (*((struct_vecteur *) (*s_objet_resultat).objet))
 3645:                             .tableau)[i]) + ((real8) (((integer8 **)
 3646:                             (*((struct_matrice *) (*s_objet_argument_2).objet))
 3647:                             .tableau)[i][k]) * ((real8) ((integer8 *)
 3648:                             (*((struct_vecteur *) (*s_objet_argument_1).objet))
 3649:                             .tableau)[k]));
 3650:                 }
 3651:             }
 3652:         }
 3653:     }
 3654: 
 3655:     /*
 3656:      * Matrice d'entiers / Vecteur de réels
 3657:      */
 3658: 
 3659:     else if (((*s_objet_argument_2).type == MIN) &&
 3660:             ((*s_objet_argument_1).type == VRL))
 3661:     {
 3662:         if ((s_objet_resultat = allocation(s_etat_processus, VRL))
 3663:                 == NULL)
 3664:         {
 3665:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 3666:             return;
 3667:         }
 3668: 
 3669:         (*((struct_vecteur *) (*s_objet_resultat).objet)).taille =
 3670:                 (*(((struct_matrice *) (*s_objet_argument_2)
 3671:                 .objet))).nombre_lignes;
 3672: 
 3673:         if ((*((struct_vecteur *) (*s_objet_argument_1).objet)).taille !=
 3674:                 (*((struct_matrice *) (*s_objet_argument_2).objet))
 3675:                 .nombre_colonnes)
 3676:         {
 3677:             liberation(s_etat_processus, s_objet_argument_1);
 3678:             liberation(s_etat_processus, s_objet_argument_2);
 3679:             liberation(s_etat_processus, s_objet_resultat);
 3680: 
 3681:             (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
 3682:             return;
 3683:         }
 3684: 
 3685:         if (((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau =
 3686:                 malloc((*(((struct_matrice *) (*s_objet_argument_2)
 3687:                 .objet))).nombre_lignes * sizeof(real8))) == NULL)
 3688:         {
 3689:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 3690:             return;
 3691:         }
 3692: 
 3693:         if ((accumulateur = malloc((*(((struct_matrice *)
 3694:                 (*s_objet_argument_2).objet))).nombre_colonnes *
 3695:                 sizeof(real8))) == NULL)
 3696:         {
 3697:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 3698:             return;
 3699:         }
 3700: 
 3701:         for(i = 0; i < (*(((struct_matrice *) (*s_objet_argument_2)
 3702:                 .objet))).nombre_lignes; i++)
 3703:         {
 3704:             for(k = 0; k < (*(((struct_matrice *) (*s_objet_argument_2)
 3705:                     .objet))).nombre_colonnes; k++)
 3706:             {
 3707:                 ((real8 *) accumulateur)[k] = (((integer8 **)
 3708:                         (*((struct_matrice *) (*s_objet_argument_2).objet))
 3709:                         .tableau)[i][k] * ((real8 *) (*((struct_vecteur *)
 3710:                         (*s_objet_argument_1).objet)).tableau)[k]);
 3711:             }
 3712: 
 3713:             ((real8 *) (*((struct_vecteur *) (*s_objet_resultat).objet))
 3714:                     .tableau)[i] = sommation_vecteur_reel(accumulateur,
 3715:                     &((*(((struct_matrice *) (*s_objet_argument_2).objet)))
 3716:                     .nombre_colonnes), &erreur_memoire);
 3717: 
 3718:             if (erreur_memoire == d_vrai)
 3719:             {
 3720:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 3721:                 return;
 3722:             }
 3723:         }
 3724: 
 3725:         free(accumulateur);
 3726:     }
 3727: 
 3728:     /*
 3729:      * Matrice d'entiers / Vecteur de complexes
 3730:      */
 3731: 
 3732:     else if (((*s_objet_argument_2).type == MIN) &&
 3733:             ((*s_objet_argument_1).type == VCX))
 3734:     {
 3735:         if ((s_objet_resultat = allocation(s_etat_processus, VCX))
 3736:                 == NULL)
 3737:         {
 3738:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 3739:             return;
 3740:         }
 3741: 
 3742:         (*((struct_vecteur *) (*s_objet_resultat).objet)).taille =
 3743:                 (*(((struct_matrice *) (*s_objet_argument_2)
 3744:                 .objet))).nombre_lignes;
 3745: 
 3746:         if ((*((struct_vecteur *) (*s_objet_argument_1).objet)).taille !=
 3747:                 (*((struct_matrice *) (*s_objet_argument_2).objet))
 3748:                 .nombre_colonnes)
 3749:         {
 3750:             liberation(s_etat_processus, s_objet_argument_1);
 3751:             liberation(s_etat_processus, s_objet_argument_2);
 3752:             liberation(s_etat_processus, s_objet_resultat);
 3753: 
 3754:             (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
 3755:             return;
 3756:         }
 3757: 
 3758:         if (((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau =
 3759:                 malloc((*(((struct_matrice *) (*s_objet_argument_2)
 3760:                 .objet))).nombre_lignes * sizeof(struct_complexe16))) == NULL)
 3761:         {
 3762:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 3763:             return;
 3764:         }
 3765: 
 3766:         if ((accumulateur = malloc((*(((struct_matrice *)
 3767:                 (*s_objet_argument_2).objet))).nombre_colonnes *
 3768:                 sizeof(complex16))) == NULL)
 3769:         {
 3770:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 3771:             return;
 3772:         }
 3773: 
 3774:         for(i = 0; i < (*(((struct_matrice *) (*s_objet_argument_2)
 3775:                 .objet))).nombre_lignes; i++)
 3776:         {
 3777:             for(k = 0; k < (*(((struct_matrice *) (*s_objet_argument_2)
 3778:                     .objet))).nombre_colonnes; k++)
 3779:             {
 3780:                 f77multiplicationci_(&(((struct_complexe16 *)
 3781:                         (*((struct_vecteur *) (*s_objet_argument_1).objet))
 3782:                         .tableau)[k]), &(((integer8 **) (*((struct_matrice *)
 3783:                         (*s_objet_argument_2).objet)).tableau)[i][k]),
 3784:                         &(((complex16 *) accumulateur)[k]));
 3785:             }
 3786: 
 3787:             ((complex16 *) (*((struct_vecteur *) (*s_objet_resultat).objet))
 3788:                     .tableau)[i] = sommation_vecteur_complexe(accumulateur,
 3789:                     &((*(((struct_matrice *) (*s_objet_argument_2).objet)))
 3790:                     .nombre_colonnes), &erreur_memoire);
 3791: 
 3792:             if (erreur_memoire == d_vrai)
 3793:             {
 3794:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 3795:                 return;
 3796:             }
 3797:         }
 3798: 
 3799:         free(accumulateur);
 3800:     }
 3801: 
 3802:     /*
 3803:      * Matrice de réels / Vecteur d'entiers
 3804:      */
 3805: 
 3806:     else if (((*s_objet_argument_2).type == MRL) &&
 3807:             ((*s_objet_argument_1).type == VIN))
 3808:     {
 3809:         if ((s_objet_resultat = allocation(s_etat_processus, VRL))
 3810:                 == NULL)
 3811:         {
 3812:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 3813:             return;
 3814:         }
 3815: 
 3816:         (*((struct_vecteur *) (*s_objet_resultat).objet)).taille =
 3817:                 (*(((struct_matrice *) (*s_objet_argument_2)
 3818:                 .objet))).nombre_lignes;
 3819: 
 3820:         if ((*((struct_vecteur *) (*s_objet_argument_1).objet)).taille !=
 3821:                 (*((struct_matrice *) (*s_objet_argument_2).objet))
 3822:                 .nombre_colonnes)
 3823:         {
 3824:             liberation(s_etat_processus, s_objet_argument_1);
 3825:             liberation(s_etat_processus, s_objet_argument_2);
 3826:             liberation(s_etat_processus, s_objet_resultat);
 3827: 
 3828:             (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
 3829:             return;
 3830:         }
 3831: 
 3832:         if (((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau =
 3833:                 malloc((*(((struct_matrice *) (*s_objet_argument_2)
 3834:                 .objet))).nombre_lignes * sizeof(real8))) == NULL)
 3835:         {
 3836:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 3837:             return;
 3838:         }
 3839: 
 3840:         if ((accumulateur = malloc((*(((struct_matrice *)
 3841:                 (*s_objet_argument_2).objet))).nombre_colonnes *
 3842:                 sizeof(real8))) == NULL)
 3843:         {
 3844:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 3845:             return;
 3846:         }
 3847: 
 3848:         for(i = 0; i < (*(((struct_matrice *) (*s_objet_argument_2)
 3849:                 .objet))).nombre_lignes; i++)
 3850:         {
 3851:             for(k = 0; k < (*(((struct_matrice *) (*s_objet_argument_2)
 3852:                     .objet))).nombre_colonnes; k++)
 3853:             {
 3854:                 ((real8 *) accumulateur)[k] = (((real8 **) (*((struct_matrice *)
 3855:                         (*s_objet_argument_2).objet)).tableau)[i][k] *
 3856:                         ((integer8 *) (*((struct_vecteur *)
 3857:                         (*s_objet_argument_1).objet)).tableau)[k]);
 3858:             }
 3859: 
 3860:             ((real8 *) (*((struct_vecteur *) (*s_objet_resultat).objet))
 3861:                     .tableau)[i] = sommation_vecteur_reel(accumulateur,
 3862:                     &((*(((struct_matrice *) (*s_objet_argument_2).objet)))
 3863:                     .nombre_colonnes), &erreur_memoire);
 3864: 
 3865:             if (erreur_memoire == d_vrai)
 3866:             {
 3867:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 3868:                 return;
 3869:             }
 3870:         }
 3871: 
 3872:         free(accumulateur);
 3873:     }
 3874: 
 3875:     /*
 3876:      * Matrice de réels / Vecteur de réels
 3877:      */
 3878: 
 3879:     else if (((*s_objet_argument_2).type == MRL) &&
 3880:             ((*s_objet_argument_1).type == VRL))
 3881:     {
 3882:         if ((s_objet_resultat = allocation(s_etat_processus, VRL))
 3883:                 == NULL)
 3884:         {
 3885:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 3886:             return;
 3887:         }
 3888: 
 3889:         (*((struct_vecteur *) (*s_objet_resultat).objet)).taille =
 3890:                 (*(((struct_matrice *) (*s_objet_argument_2)
 3891:                 .objet))).nombre_lignes;
 3892: 
 3893:         if ((*((struct_vecteur *) (*s_objet_argument_1).objet)).taille !=
 3894:                 (*((struct_matrice *) (*s_objet_argument_2).objet))
 3895:                 .nombre_colonnes)
 3896:         {
 3897:             liberation(s_etat_processus, s_objet_argument_1);
 3898:             liberation(s_etat_processus, s_objet_argument_2);
 3899:             liberation(s_etat_processus, s_objet_resultat);
 3900: 
 3901:             (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
 3902:             return;
 3903:         }
 3904: 
 3905:         if (((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau =
 3906:                 malloc((*(((struct_matrice *) (*s_objet_argument_2)
 3907:                 .objet))).nombre_lignes * sizeof(real8))) == NULL)
 3908:         {
 3909:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 3910:             return;
 3911:         }
 3912: 
 3913:         if ((accumulateur = malloc((*(((struct_matrice *)
 3914:                 (*s_objet_argument_2).objet))).nombre_colonnes *
 3915:                 sizeof(real8))) == NULL)
 3916:         {
 3917:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 3918:             return;
 3919:         }
 3920: 
 3921:         for(i = 0; i < (*(((struct_matrice *) (*s_objet_argument_2)
 3922:                 .objet))).nombre_lignes; i++)
 3923:         {
 3924:             for(k = 0; k < (*(((struct_matrice *) (*s_objet_argument_2)
 3925:                     .objet))).nombre_colonnes; k++)
 3926:             {
 3927:                 ((real8 *) accumulateur)[k] = (((real8 **) (*((struct_matrice *)
 3928:                         (*s_objet_argument_2).objet)).tableau)[i][k] *
 3929:                         ((real8 *) (*((struct_vecteur *)
 3930:                         (*s_objet_argument_1).objet)).tableau)[k]);
 3931:             }
 3932: 
 3933:             ((real8 *) (*((struct_vecteur *) (*s_objet_resultat).objet))
 3934:                     .tableau)[i] = sommation_vecteur_reel(accumulateur,
 3935:                     &((*(((struct_matrice *) (*s_objet_argument_2).objet)))
 3936:                     .nombre_colonnes), &erreur_memoire);
 3937: 
 3938:             if (erreur_memoire == d_vrai)
 3939:             {
 3940:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 3941:                 return;
 3942:             }
 3943:         }
 3944: 
 3945:         free(accumulateur);
 3946:     }
 3947: 
 3948:     /*
 3949:      * Matrice de réels / Vecteur de complexes
 3950:      */
 3951: 
 3952:     else if (((*s_objet_argument_2).type == MRL) &&
 3953:             ((*s_objet_argument_1).type == VCX))
 3954:     {
 3955:         if ((s_objet_resultat = allocation(s_etat_processus, VCX))
 3956:                 == NULL)
 3957:         {
 3958:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 3959:             return;
 3960:         }
 3961: 
 3962:         (*((struct_vecteur *) (*s_objet_resultat).objet)).taille =
 3963:                 (*(((struct_matrice *) (*s_objet_argument_2)
 3964:                 .objet))).nombre_lignes;
 3965: 
 3966:         if ((*((struct_vecteur *) (*s_objet_argument_1).objet)).taille !=
 3967:                 (*((struct_matrice *) (*s_objet_argument_2).objet))
 3968:                 .nombre_colonnes)
 3969:         {
 3970:             liberation(s_etat_processus, s_objet_argument_1);
 3971:             liberation(s_etat_processus, s_objet_argument_2);
 3972:             liberation(s_etat_processus, s_objet_resultat);
 3973: 
 3974:             (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
 3975:             return;
 3976:         }
 3977: 
 3978:         if (((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau =
 3979:                 malloc((*(((struct_matrice *) (*s_objet_argument_2)
 3980:                 .objet))).nombre_lignes * sizeof(struct_complexe16))) == NULL)
 3981:         {
 3982:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 3983:             return;
 3984:         }
 3985: 
 3986:         if ((accumulateur = malloc((*(((struct_matrice *)
 3987:                 (*s_objet_argument_2).objet))).nombre_colonnes *
 3988:                 sizeof(complex16))) == NULL)
 3989:         {
 3990:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 3991:             return;
 3992:         }
 3993: 
 3994:         for(i = 0; i < (*(((struct_matrice *) (*s_objet_argument_2)
 3995:                 .objet))).nombre_lignes; i++)
 3996:         {
 3997:             for(k = 0; k < (*(((struct_matrice *) (*s_objet_argument_2)
 3998:                     .objet))).nombre_colonnes; k++)
 3999:             {
 4000:                 f77multiplicationcr_(&(((struct_complexe16 *)
 4001:                         (*((struct_vecteur *) (*s_objet_argument_1).objet))
 4002:                         .tableau)[k]), &(((real8 **) (*((struct_matrice *)
 4003:                         (*s_objet_argument_2).objet)).tableau)[i][k]),
 4004:                         &(((complex16 *) accumulateur)[k]));
 4005:             }
 4006: 
 4007:             ((struct_complexe16 *) (*((struct_vecteur *) (*s_objet_resultat)
 4008:                     .objet)).tableau)[i] = sommation_vecteur_complexe(
 4009:                     accumulateur, &((*(((struct_matrice *) (*s_objet_argument_2)
 4010:                     .objet))).nombre_colonnes), &erreur_memoire);
 4011: 
 4012:             if (erreur_memoire == d_vrai)
 4013:             {
 4014:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 4015:                 return;
 4016:             }
 4017:         }
 4018: 
 4019:         free(accumulateur);
 4020:     }
 4021: 
 4022:     /*
 4023:      * Matrice de complexes / Vecteur d'entiers
 4024:      */
 4025: 
 4026:     else if (((*s_objet_argument_2).type == MCX) &&
 4027:             ((*s_objet_argument_1).type == VIN))
 4028:     {
 4029:         if ((s_objet_resultat = allocation(s_etat_processus, VCX))
 4030:                 == NULL)
 4031:         {
 4032:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 4033:             return;
 4034:         }
 4035: 
 4036:         (*((struct_vecteur *) (*s_objet_resultat).objet)).taille =
 4037:                 (*(((struct_matrice *) (*s_objet_argument_2)
 4038:                 .objet))).nombre_lignes;
 4039: 
 4040:         if ((*((struct_vecteur *) (*s_objet_argument_1).objet)).taille !=
 4041:                 (*((struct_matrice *) (*s_objet_argument_2).objet))
 4042:                 .nombre_colonnes)
 4043:         {
 4044:             liberation(s_etat_processus, s_objet_argument_1);
 4045:             liberation(s_etat_processus, s_objet_argument_2);
 4046:             liberation(s_etat_processus, s_objet_resultat);
 4047: 
 4048:             (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
 4049:             return;
 4050:         }
 4051: 
 4052:         if (((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau =
 4053:                 malloc((*(((struct_matrice *) (*s_objet_argument_2)
 4054:                 .objet))).nombre_lignes * sizeof(struct_complexe16))) == NULL)
 4055:         {
 4056:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 4057:             return;
 4058:         }
 4059: 
 4060:         if ((accumulateur = malloc((*(((struct_matrice *)
 4061:                 (*s_objet_argument_2).objet))).nombre_colonnes *
 4062:                 sizeof(complex16))) == NULL)
 4063:         {
 4064:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 4065:             return;
 4066:         }
 4067: 
 4068:         for(i = 0; i < (*(((struct_matrice *) (*s_objet_argument_2)
 4069:                 .objet))).nombre_lignes; i++)
 4070:         {
 4071:             for(k = 0; k < (*(((struct_matrice *) (*s_objet_argument_2)
 4072:                     .objet))).nombre_colonnes; k++)
 4073:             {
 4074:                 f77multiplicationci_(&(((struct_complexe16 **)
 4075:                         (*((struct_matrice *) (*s_objet_argument_2).objet))
 4076:                         .tableau)[i][k]), &(((integer8 *)
 4077:                         (*((struct_vecteur *) (*s_objet_argument_1).objet))
 4078:                         .tableau)[k]), &(((complex16 *) accumulateur)[k]));
 4079:             }
 4080: 
 4081:             ((struct_complexe16 *) (*((struct_vecteur *) (*s_objet_resultat)
 4082:                     .objet)).tableau)[i] = sommation_vecteur_complexe(
 4083:                     accumulateur, &((*(((struct_matrice *) (*s_objet_argument_2)
 4084:                     .objet))).nombre_colonnes), &erreur_memoire);
 4085: 
 4086:             if (erreur_memoire == d_vrai)
 4087:             {
 4088:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 4089:                 return;
 4090:             }
 4091:         }
 4092: 
 4093:         free(accumulateur);
 4094:     }
 4095: 
 4096:     /*
 4097:      * Matrice de complexes / Vecteur de réels
 4098:      */
 4099: 
 4100:     else if (((*s_objet_argument_2).type == MCX) &&
 4101:             ((*s_objet_argument_1).type == VRL))
 4102:     {
 4103:         if ((s_objet_resultat = allocation(s_etat_processus, VCX))
 4104:                 == NULL)
 4105:         {
 4106:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 4107:             return;
 4108:         }
 4109: 
 4110:         (*((struct_vecteur *) (*s_objet_resultat).objet)).taille =
 4111:                 (*(((struct_matrice *) (*s_objet_argument_2)
 4112:                 .objet))).nombre_lignes;
 4113: 
 4114:         if ((*((struct_vecteur *) (*s_objet_argument_1).objet)).taille !=
 4115:                 (*((struct_matrice *) (*s_objet_argument_2).objet))
 4116:                 .nombre_colonnes)
 4117:         {
 4118:             liberation(s_etat_processus, s_objet_argument_1);
 4119:             liberation(s_etat_processus, s_objet_argument_2);
 4120:             liberation(s_etat_processus, s_objet_resultat);
 4121: 
 4122:             (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
 4123:             return;
 4124:         }
 4125: 
 4126:         if (((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau =
 4127:                 malloc((*(((struct_matrice *) (*s_objet_argument_2)
 4128:                 .objet))).nombre_lignes * sizeof(struct_complexe16))) == NULL)
 4129:         {
 4130:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 4131:             return;
 4132:         }
 4133: 
 4134:         if ((accumulateur = malloc((*(((struct_matrice *)
 4135:                 (*s_objet_argument_2).objet))).nombre_colonnes *
 4136:                 sizeof(complex16))) == NULL)
 4137:         {
 4138:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 4139:             return;
 4140:         }
 4141: 
 4142:         for(i = 0; i < (*(((struct_matrice *) (*s_objet_argument_2)
 4143:                 .objet))).nombre_lignes; i++)
 4144:         {
 4145:             for(k = 0; k < (*(((struct_matrice *) (*s_objet_argument_2)
 4146:                     .objet))).nombre_colonnes; k++)
 4147:             {
 4148:                 f77multiplicationcr_(&(((struct_complexe16 **)
 4149:                         (*((struct_matrice *) (*s_objet_argument_2).objet))
 4150:                         .tableau)[i][k]), &(((real8 *)
 4151:                         (*((struct_vecteur *) (*s_objet_argument_1).objet))
 4152:                         .tableau)[k]), &(((complex16 *) accumulateur)[k]));
 4153:             }
 4154: 
 4155:             ((struct_complexe16 *) (*((struct_vecteur *) (*s_objet_resultat)
 4156:                     .objet)).tableau)[i] = sommation_vecteur_complexe(
 4157:                     accumulateur, &((*(((struct_matrice *) (*s_objet_argument_2)
 4158:                     .objet))).nombre_colonnes), &erreur_memoire);
 4159: 
 4160:             if (erreur_memoire == d_vrai)
 4161:             {
 4162:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 4163:                 return;
 4164:             }
 4165:         }
 4166: 
 4167:         free(accumulateur);
 4168:     }
 4169: 
 4170:     /*
 4171:      * Matrice de complexes / Vecteur de complexes
 4172:      */
 4173: 
 4174:     else if (((*s_objet_argument_2).type == MCX) &&
 4175:             ((*s_objet_argument_1).type == VCX))
 4176:     {
 4177:         if ((s_objet_resultat = allocation(s_etat_processus, VCX))
 4178:                 == NULL)
 4179:         {
 4180:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 4181:             return;
 4182:         }
 4183: 
 4184:         (*((struct_vecteur *) (*s_objet_resultat).objet)).taille =
 4185:                 (*(((struct_matrice *) (*s_objet_argument_2)
 4186:                 .objet))).nombre_lignes;
 4187: 
 4188:         if ((*((struct_vecteur *) (*s_objet_argument_1).objet)).taille !=
 4189:                 (*((struct_matrice *) (*s_objet_argument_2).objet))
 4190:                 .nombre_colonnes)
 4191:         {
 4192:             liberation(s_etat_processus, s_objet_argument_1);
 4193:             liberation(s_etat_processus, s_objet_argument_2);
 4194:             liberation(s_etat_processus, s_objet_resultat);
 4195: 
 4196:             (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
 4197:             return;
 4198:         }
 4199: 
 4200:         if (((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau =
 4201:                 malloc((*(((struct_matrice *) (*s_objet_argument_2)
 4202:                 .objet))).nombre_lignes * sizeof(struct_complexe16))) == NULL)
 4203:         {
 4204:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 4205:             return;
 4206:         }
 4207: 
 4208:         if ((accumulateur = malloc((*(((struct_matrice *)
 4209:                 (*s_objet_argument_2).objet))).nombre_colonnes *
 4210:                 sizeof(complex16))) == NULL)
 4211:         {
 4212:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 4213:             return;
 4214:         }
 4215: 
 4216:         for(i = 0; i < (*(((struct_matrice *) (*s_objet_argument_2)
 4217:                 .objet))).nombre_lignes; i++)
 4218:         {
 4219:             for(k = 0; k < (*(((struct_matrice *) (*s_objet_argument_2)
 4220:                     .objet))).nombre_colonnes; k++)
 4221:             {
 4222:                 f77multiplicationcc_(&(((struct_complexe16 **)
 4223:                         (*((struct_matrice *) (*s_objet_argument_2).objet))
 4224:                         .tableau)[i][k]), &(((struct_complexe16 *)
 4225:                         (*((struct_vecteur *) (*s_objet_argument_1).objet))
 4226:                         .tableau)[k]), &(((complex16 *) accumulateur)[k]));
 4227:             }
 4228: 
 4229:             ((struct_complexe16 *) (*((struct_vecteur *) (*s_objet_resultat)
 4230:                     .objet)).tableau)[i] = sommation_vecteur_complexe(
 4231:                     accumulateur, &((*(((struct_matrice *) (*s_objet_argument_2)
 4232:                     .objet))).nombre_colonnes), &erreur_memoire);
 4233: 
 4234:             if (erreur_memoire == d_vrai)
 4235:             {
 4236:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 4237:                 return;
 4238:             }
 4239:         }
 4240: 
 4241:         free(accumulateur);
 4242:     }
 4243: 
 4244: /*
 4245: --------------------------------------------------------------------------------
 4246:   Multiplication d'une matrice par une autre matrice
 4247: --------------------------------------------------------------------------------
 4248: */
 4249:     /*
 4250:      * Matrice d'entiers / Matrice d'entiers
 4251:      */
 4252: 
 4253:     else if (((*s_objet_argument_2).type == MIN) &&
 4254:             ((*s_objet_argument_1).type == MIN))
 4255:     {
 4256:         if ((*((struct_matrice *) (*s_objet_argument_1).objet)).nombre_lignes !=
 4257:                 (*((struct_matrice *) (*s_objet_argument_2).objet))
 4258:                 .nombre_colonnes)
 4259:         {
 4260:             liberation(s_etat_processus, s_objet_argument_1);
 4261:             liberation(s_etat_processus, s_objet_argument_2);
 4262: 
 4263:             (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
 4264:             return;
 4265:         }
 4266: 
 4267:         if ((s_objet_resultat = allocation(s_etat_processus, MIN))
 4268:                 == NULL)
 4269:         {
 4270:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 4271:             return;
 4272:         }
 4273: 
 4274:         (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_lignes =
 4275:                 (*(((struct_matrice *) (*s_objet_argument_2)
 4276:                 .objet))).nombre_lignes;
 4277:         (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_colonnes =
 4278:                 (*(((struct_matrice *) (*s_objet_argument_1)
 4279:                 .objet))).nombre_colonnes;
 4280: 
 4281:         if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau =
 4282:                 malloc((*(((struct_matrice *) (*s_objet_resultat)
 4283:                 .objet))).nombre_lignes * sizeof(integer8 *))) == NULL)
 4284:         {
 4285:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 4286:             return;
 4287:         }
 4288: 
 4289:         depassement = d_faux;
 4290: 
 4291:         for(i = 0; i < (*(((struct_matrice *) (*s_objet_resultat)
 4292:                 .objet))).nombre_lignes; i++)
 4293:         {
 4294:             if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau[i] =
 4295:                     malloc((*(((struct_matrice *) (*s_objet_resultat)
 4296:                     .objet))).nombre_colonnes * sizeof(integer8))) == NULL)
 4297:             {
 4298:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 4299:                 return;
 4300:             }
 4301: 
 4302:             for(j = 0; j < (*(((struct_matrice *) (*s_objet_resultat)
 4303:                     .objet))).nombre_colonnes; j++)
 4304:             {
 4305:                 ((integer8 **) (*((struct_matrice *)
 4306:                         (*s_objet_resultat).objet)).tableau)[i][j] = 0;
 4307: 
 4308:                 for(k = 0; k < (*(((struct_matrice *) (*s_objet_argument_2)
 4309:                         .objet))).nombre_colonnes; k++)
 4310:                 {
 4311:                     if (depassement_multiplication(&(((integer8 **)
 4312:                             (*((struct_matrice *) (*s_objet_argument_2).objet))
 4313:                             .tableau)[i][k]), &(((integer8 **)
 4314:                             (*((struct_matrice *) (*s_objet_argument_1).objet))
 4315:                             .tableau)[k][j]), &tampon) == d_erreur)
 4316:                     {
 4317:                         depassement = d_vrai;
 4318:                     }
 4319: 
 4320:                     if (depassement_addition(&(((integer8 **)
 4321:                             (*((struct_matrice *) (*s_objet_resultat).objet))
 4322:                             .tableau)[i][j]), &tampon, &cumul) == d_erreur)
 4323:                     {
 4324:                         depassement = d_vrai;
 4325:                     }
 4326: 
 4327:                     ((integer8 **) (*((struct_matrice *) (*s_objet_resultat)
 4328:                             .objet)).tableau)[i][j] = cumul;
 4329:                 }
 4330:             }
 4331:         }
 4332: 
 4333:         if (depassement == d_vrai)
 4334:         {
 4335:             (*s_objet_resultat).type = MRL;
 4336:             (*((struct_matrice *) (*s_objet_resultat).objet)).type = 'R';
 4337: 
 4338:             if ((accumulateur = malloc((*(((struct_matrice *)
 4339:                     (*s_objet_argument_2).objet))).nombre_colonnes *
 4340:                     sizeof(real8))) == NULL)
 4341:             {
 4342:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 4343:                 return;
 4344:             }
 4345: 
 4346:             for(i = 0; i < (*(((struct_matrice *) (*s_objet_resultat)
 4347:                     .objet))).nombre_lignes; i++)
 4348:             {
 4349:                 free(((integer8 **) (*((struct_matrice *)
 4350:                         (*s_objet_resultat).objet)).tableau)[i]);
 4351: 
 4352:                 if (((*((struct_matrice *) (*s_objet_resultat).objet))
 4353:                         .tableau[i] = malloc((*(((struct_matrice *)
 4354:                         (*s_objet_resultat).objet))).nombre_colonnes *
 4355:                         sizeof(real8))) == NULL)
 4356:                 {
 4357:                     (*s_etat_processus).erreur_systeme =
 4358:                             d_es_allocation_memoire;
 4359:                     return;
 4360:                 }
 4361: 
 4362:                 for(j = 0; j < (*(((struct_matrice *) (*s_objet_resultat)
 4363:                         .objet))).nombre_colonnes; j++)
 4364:                 {
 4365:                     ((real8 **) (*((struct_matrice *)
 4366:                             (*s_objet_resultat).objet)).tableau)[i][j] = 0;
 4367: 
 4368:                     for(k = 0; k < (*(((struct_matrice *) (*s_objet_argument_2)
 4369:                             .objet))).nombre_colonnes; k++)
 4370:                     {
 4371:                         ((real8 *) accumulateur)[k] = ((real8)
 4372:                                 (((integer8 **) (*((struct_matrice *)
 4373:                                 (*s_objet_argument_2).objet)).tableau)[i][k]) *
 4374:                                 ((real8) ((integer8 **) (*((struct_matrice *)
 4375:                                 (*s_objet_argument_1).objet)).tableau)[k][j]));
 4376:                     }
 4377: 
 4378:                     ((real8 **) (*((struct_matrice *)
 4379:                             (*s_objet_resultat).objet)).tableau)[i][j] =
 4380:                             sommation_vecteur_reel(accumulateur,
 4381:                             &((*(((struct_matrice *) (*s_objet_argument_2)
 4382:                             .objet))).nombre_colonnes), &erreur_memoire);
 4383: 
 4384:                     if (erreur_memoire == d_vrai)
 4385:                     {
 4386:                         (*s_etat_processus).erreur_systeme =
 4387:                                 d_es_allocation_memoire;
 4388:                         return;
 4389:                     }
 4390:                 }
 4391:             }
 4392: 
 4393:             free(accumulateur);
 4394:         }
 4395:     }
 4396: 
 4397:     /*
 4398:      * Matrice d'entiers / Matrice de réels
 4399:      */
 4400: 
 4401:     else if ((((*s_objet_argument_2).type == MIN) &&
 4402:             ((*s_objet_argument_1).type == MRL)) ||
 4403:             (((*s_objet_argument_2).type == MRL) &&
 4404:             ((*s_objet_argument_1).type == MIN)))
 4405:     {
 4406:         if ((*((struct_matrice *) (*s_objet_argument_1).objet)).nombre_lignes !=
 4407:                 (*((struct_matrice *) (*s_objet_argument_2).objet))
 4408:                 .nombre_colonnes)
 4409:         {
 4410:             liberation(s_etat_processus, s_objet_argument_1);
 4411:             liberation(s_etat_processus, s_objet_argument_2);
 4412: 
 4413:             (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
 4414:             return;
 4415:         }
 4416: 
 4417:         if ((s_objet_resultat = allocation(s_etat_processus, MRL))
 4418:                 == NULL)
 4419:         {
 4420:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 4421:             return;
 4422:         }
 4423: 
 4424:         (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_lignes =
 4425:                 (*(((struct_matrice *) (*s_objet_argument_2)
 4426:                 .objet))).nombre_lignes;
 4427:         (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_colonnes =
 4428:                 (*(((struct_matrice *) (*s_objet_argument_1)
 4429:                 .objet))).nombre_colonnes;
 4430: 
 4431:         if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau =
 4432:                 malloc((*(((struct_matrice *) (*s_objet_resultat)
 4433:                 .objet))).nombre_lignes * sizeof(real8 *))) == NULL)
 4434:         {
 4435:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 4436:             return;
 4437:         }
 4438: 
 4439:         if ((accumulateur = malloc((*(((struct_matrice *)
 4440:                 (*s_objet_argument_2).objet))).nombre_colonnes *
 4441:                 sizeof(real8))) == NULL)
 4442:         {
 4443:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 4444:             return;
 4445:         }
 4446: 
 4447:         for(i = 0; i < (*(((struct_matrice *) (*s_objet_resultat)
 4448:                 .objet))).nombre_lignes; i++)
 4449:         {
 4450:             if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau[i] =
 4451:                     malloc((*(((struct_matrice *) (*s_objet_resultat)
 4452:                     .objet))).nombre_colonnes * sizeof(real8))) == NULL)
 4453:             {
 4454:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 4455:                 return;
 4456:             }
 4457: 
 4458:             for(j = 0; j < (*(((struct_matrice *) (*s_objet_resultat)
 4459:                     .objet))).nombre_colonnes; j++)
 4460:             {
 4461:                 for(k = 0; k < (*(((struct_matrice *) (*s_objet_argument_2)
 4462:                         .objet))).nombre_colonnes; k++)
 4463:                 {
 4464:                     if ((*s_objet_argument_1).type == MRL)
 4465:                     {
 4466:                         ((real8 *) accumulateur)[k] =
 4467:                                 (((integer8 **) (*((struct_matrice *)
 4468:                                 (*s_objet_argument_2).objet)).tableau)[i][k] *
 4469:                                 ((real8 **) (*((struct_matrice *)
 4470:                                 (*s_objet_argument_1).objet)).tableau)[k][j]);
 4471:                     }
 4472:                     else
 4473:                     {
 4474:                         ((real8 *) accumulateur)[k] =
 4475:                                 (((real8 **) (*((struct_matrice *)
 4476:                                 (*s_objet_argument_2).objet)).tableau)[i][k] *
 4477:                                 ((integer8 **) (*((struct_matrice *)
 4478:                                 (*s_objet_argument_1).objet)).tableau)[k][j]);
 4479:                     }
 4480:                 }
 4481: 
 4482:                 ((real8 **) (*((struct_matrice *)
 4483:                         (*s_objet_resultat).objet)).tableau)[i][j] =
 4484:                         sommation_vecteur_reel(accumulateur,
 4485:                         &((*(((struct_matrice *) (*s_objet_argument_2).objet)))
 4486:                         .nombre_colonnes), &erreur_memoire);
 4487: 
 4488:                 if (erreur_memoire == d_vrai)
 4489:                 {
 4490:                     (*s_etat_processus).erreur_systeme =
 4491:                             d_es_allocation_memoire;
 4492:                     return;
 4493:                 }
 4494:             }
 4495:         }
 4496: 
 4497:         free(accumulateur);
 4498:     }
 4499: 
 4500:     /*
 4501:      * Matrice d'entiers / Matrice de complexes
 4502:      */
 4503: 
 4504:     else if ((((*s_objet_argument_2).type == MIN) &&
 4505:             ((*s_objet_argument_1).type == MCX)) ||
 4506:             (((*s_objet_argument_2).type == MCX) &&
 4507:             ((*s_objet_argument_1).type == MIN)))
 4508:     {
 4509:         if ((*((struct_matrice *) (*s_objet_argument_1).objet)).nombre_lignes !=
 4510:                 (*((struct_matrice *) (*s_objet_argument_2).objet))
 4511:                 .nombre_colonnes)
 4512:         {
 4513:             liberation(s_etat_processus, s_objet_argument_1);
 4514:             liberation(s_etat_processus, s_objet_argument_2);
 4515: 
 4516:             (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
 4517:             return;
 4518:         }
 4519: 
 4520:         if ((s_objet_resultat = allocation(s_etat_processus, MCX))
 4521:                 == NULL)
 4522:         {
 4523:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 4524:             return;
 4525:         }
 4526: 
 4527:         (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_lignes =
 4528:                 (*(((struct_matrice *) (*s_objet_argument_2)
 4529:                 .objet))).nombre_lignes;
 4530:         (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_colonnes =
 4531:                 (*(((struct_matrice *) (*s_objet_argument_1)
 4532:                 .objet))).nombre_colonnes;
 4533: 
 4534:         if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau =
 4535:                 malloc((*(((struct_matrice *) (*s_objet_resultat)
 4536:                 .objet))).nombre_lignes * sizeof(struct_complexe16 *))) == NULL)
 4537:         {
 4538:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 4539:             return;
 4540:         }
 4541: 
 4542:         if ((accumulateur = malloc((*(((struct_matrice *)
 4543:                 (*s_objet_argument_2).objet))).nombre_colonnes *
 4544:                 sizeof(complex16))) == NULL)
 4545:         {
 4546:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 4547:             return;
 4548:         }
 4549: 
 4550:         for(i = 0; i < (*(((struct_matrice *) (*s_objet_resultat)
 4551:                 .objet))).nombre_lignes; i++)
 4552:         {
 4553:             if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau[i] =
 4554:                     malloc((*(((struct_matrice *) (*s_objet_resultat)
 4555:                     .objet))).nombre_colonnes * sizeof(struct_complexe16)))
 4556:                     == NULL)
 4557:             {
 4558:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 4559:                 return;
 4560:             }
 4561: 
 4562:             for(j = 0; j < (*(((struct_matrice *) (*s_objet_resultat)
 4563:                     .objet))).nombre_colonnes; j++)
 4564:             {
 4565:                 for(k = 0; k < (*(((struct_matrice *) (*s_objet_argument_2)
 4566:                         .objet))).nombre_colonnes; k++)
 4567:                 {
 4568:                     if ((*s_objet_argument_1).type == MCX)
 4569:                     {
 4570:                         f77multiplicationci_(&(((struct_complexe16 **)
 4571:                                 (*((struct_matrice *)(*s_objet_argument_1)
 4572:                                 .objet)).tableau)[k][j]), &(((integer8 **)
 4573:                                 (*((struct_matrice *) (*s_objet_argument_2)
 4574:                                 .objet)).tableau)[i][k]), &(((complex16 *)
 4575:                                 accumulateur)[k]));
 4576:                     }
 4577:                     else
 4578:                     {
 4579:                         f77multiplicationci_(&(((struct_complexe16 **)
 4580:                                 (*((struct_matrice *)(*s_objet_argument_2)
 4581:                                 .objet)).tableau)[i][k]), &(((integer8 **)
 4582:                                 (*((struct_matrice *) (*s_objet_argument_1)
 4583:                                 .objet)).tableau)[k][j]), &(((complex16 *)
 4584:                                 accumulateur)[k]));
 4585:                     }
 4586:                 }
 4587: 
 4588:                 ((struct_complexe16 **) (*((struct_matrice *)
 4589:                         (*s_objet_resultat).objet)).tableau)[i][j] =
 4590:                         sommation_vecteur_complexe(accumulateur,
 4591:                         &((*(((struct_matrice *) (*s_objet_argument_2).objet)))
 4592:                         .nombre_colonnes), &erreur_memoire);
 4593: 
 4594:                 if (erreur_memoire == d_vrai)
 4595:                 {
 4596:                     (*s_etat_processus).erreur_systeme =
 4597:                             d_es_allocation_memoire;
 4598:                     return;
 4599:                 }
 4600:             }
 4601:         }
 4602: 
 4603:         free(accumulateur);
 4604:     }
 4605: 
 4606:     /*
 4607:      * Matrice de réels / Matrice de réels
 4608:      */
 4609: 
 4610:     else if (((*s_objet_argument_2).type == MRL) &&
 4611:             ((*s_objet_argument_1).type == MRL))
 4612:     {
 4613:         if ((*((struct_matrice *) (*s_objet_argument_1).objet)).nombre_lignes !=
 4614:                 (*((struct_matrice *) (*s_objet_argument_2).objet))
 4615:                 .nombre_colonnes)
 4616:         {
 4617:             liberation(s_etat_processus, s_objet_argument_1);
 4618:             liberation(s_etat_processus, s_objet_argument_2);
 4619: 
 4620:             (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
 4621:             return;
 4622:         }
 4623: 
 4624:         if ((s_objet_resultat = allocation(s_etat_processus, MRL))
 4625:                 == NULL)
 4626:         {
 4627:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 4628:             return;
 4629:         }
 4630: 
 4631:         (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_lignes =
 4632:                 (*(((struct_matrice *) (*s_objet_argument_2)
 4633:                 .objet))).nombre_lignes;
 4634:         (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_colonnes =
 4635:                 (*(((struct_matrice *) (*s_objet_argument_1)
 4636:                 .objet))).nombre_colonnes;
 4637: 
 4638:         if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau =
 4639:                 malloc((*(((struct_matrice *) (*s_objet_resultat)
 4640:                 .objet))).nombre_lignes * sizeof(real8 *))) == NULL)
 4641:         {
 4642:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 4643:             return;
 4644:         }
 4645: 
 4646:         if ((accumulateur = malloc((*(((struct_matrice *)
 4647:                 (*s_objet_argument_2).objet))).nombre_colonnes *
 4648:                 sizeof(real8))) == NULL)
 4649:         {
 4650:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 4651:             return;
 4652:         }
 4653: 
 4654:         for(i = 0; i < (*(((struct_matrice *) (*s_objet_resultat)
 4655:                 .objet))).nombre_lignes; i++)
 4656:         {
 4657:             if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau[i] =
 4658:                     malloc((*(((struct_matrice *) (*s_objet_resultat)
 4659:                     .objet))).nombre_colonnes * sizeof(real8))) == NULL)
 4660:             {
 4661:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 4662:                 return;
 4663:             }
 4664: 
 4665:             for(j = 0; j < (*(((struct_matrice *) (*s_objet_resultat)
 4666:                     .objet))).nombre_colonnes; j++)
 4667:             {
 4668:                 for(k = 0; k < (*(((struct_matrice *) (*s_objet_argument_2)
 4669:                         .objet))).nombre_colonnes; k++)
 4670:                 {
 4671:                     ((real8 *) accumulateur)[k] =
 4672:                             (((real8 **) (*((struct_matrice *)
 4673:                             (*s_objet_argument_2).objet)).tableau)[i][k] *
 4674:                             ((real8 **) (*((struct_matrice *)
 4675:                             (*s_objet_argument_1).objet)).tableau)[k][j]);
 4676:                 }
 4677: 
 4678:                 ((real8 **) (*((struct_matrice *)
 4679:                         (*s_objet_resultat).objet)).tableau)[i][j] =
 4680:                         sommation_vecteur_reel(accumulateur,
 4681:                         &((*(((struct_matrice *) (*s_objet_argument_2).objet)))
 4682:                         .nombre_colonnes), &erreur_memoire);
 4683: 
 4684:                 if (erreur_memoire == d_vrai)
 4685:                 {
 4686:                     (*s_etat_processus).erreur_systeme =
 4687:                             d_es_allocation_memoire;
 4688:                     return;
 4689:                 }
 4690:             }
 4691:         }
 4692: 
 4693:         free(accumulateur);
 4694:     }
 4695: 
 4696:     /*
 4697:      * Matrice de réels / Matrice de complexes
 4698:      */
 4699: 
 4700:     else if ((((*s_objet_argument_2).type == MRL) &&
 4701:             ((*s_objet_argument_1).type == MCX)) ||
 4702:             (((*s_objet_argument_2).type == MCX) &&
 4703:             ((*s_objet_argument_1).type == MRL)))
 4704:     {
 4705:         if ((*((struct_matrice *) (*s_objet_argument_1).objet)).nombre_lignes !=
 4706:                 (*((struct_matrice *) (*s_objet_argument_2).objet))
 4707:                 .nombre_colonnes)
 4708:         {
 4709:             liberation(s_etat_processus, s_objet_argument_1);
 4710:             liberation(s_etat_processus, s_objet_argument_2);
 4711: 
 4712:             (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
 4713:             return;
 4714:         }
 4715: 
 4716:         if ((s_objet_resultat = allocation(s_etat_processus, MCX))
 4717:                 == NULL)
 4718:         {
 4719:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 4720:             return;
 4721:         }
 4722: 
 4723:         (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_lignes =
 4724:                 (*(((struct_matrice *) (*s_objet_argument_2)
 4725:                 .objet))).nombre_lignes;
 4726:         (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_colonnes =
 4727:                 (*(((struct_matrice *) (*s_objet_argument_1)
 4728:                 .objet))).nombre_colonnes;
 4729: 
 4730:         if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau =
 4731:                 malloc((*(((struct_matrice *) (*s_objet_resultat)
 4732:                 .objet))).nombre_lignes * sizeof(struct_complexe16 *))) == NULL)
 4733:         {
 4734:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 4735:             return;
 4736:         }
 4737: 
 4738:         if ((accumulateur = malloc((*(((struct_matrice *)
 4739:                 (*s_objet_argument_2).objet))).nombre_colonnes *
 4740:                 sizeof(complex16))) == NULL)
 4741:         {
 4742:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 4743:             return;
 4744:         }
 4745: 
 4746:         for(i = 0; i < (*(((struct_matrice *) (*s_objet_resultat)
 4747:                 .objet))).nombre_lignes; i++)
 4748:         {
 4749:             if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau[i] =
 4750:                     malloc((*(((struct_matrice *) (*s_objet_resultat)
 4751:                     .objet))).nombre_colonnes * sizeof(struct_complexe16)))
 4752:                     == NULL)
 4753:             {
 4754:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 4755:                 return;
 4756:             }
 4757: 
 4758:             for(j = 0; j < (*(((struct_matrice *) (*s_objet_resultat)
 4759:                     .objet))).nombre_colonnes; j++)
 4760:             {
 4761:                 for(k = 0; k < (*(((struct_matrice *) (*s_objet_argument_2)
 4762:                         .objet))).nombre_colonnes; k++)
 4763:                 {
 4764:                     if ((*s_objet_argument_1).type == MCX)
 4765:                     {
 4766:                         f77multiplicationcr_(&(((struct_complexe16 **)
 4767:                                 (*((struct_matrice *)(*s_objet_argument_1)
 4768:                                 .objet)).tableau)[k][j]), &(((real8 **)
 4769:                                 (*((struct_matrice *) (*s_objet_argument_2)
 4770:                                 .objet)).tableau)[i][k]), &(((complex16 *)
 4771:                                 accumulateur)[k]));
 4772:                     }
 4773:                     else
 4774:                     {
 4775:                         f77multiplicationcr_(&(((struct_complexe16 **)
 4776:                                 (*((struct_matrice *)(*s_objet_argument_2)
 4777:                                 .objet)).tableau)[i][k]), &(((real8 **)
 4778:                                 (*((struct_matrice *) (*s_objet_argument_1)
 4779:                                 .objet)).tableau)[k][j]), &(((complex16 *)
 4780:                                 accumulateur)[k]));
 4781:                     }
 4782:                 }
 4783: 
 4784:                 ((struct_complexe16 **) (*((struct_matrice *)
 4785:                         (*s_objet_resultat).objet)).tableau)[i][j] =
 4786:                         sommation_vecteur_complexe(accumulateur,
 4787:                         &((*(((struct_matrice *) (*s_objet_argument_2).objet)))
 4788:                         .nombre_colonnes), &erreur_memoire);
 4789: 
 4790:                 if (erreur_memoire == d_vrai)
 4791:                 {
 4792:                     (*s_etat_processus).erreur_systeme =
 4793:                             d_es_allocation_memoire;
 4794:                     return;
 4795:                 }
 4796:             }
 4797:         }
 4798: 
 4799:         free(accumulateur);
 4800:     }
 4801: 
 4802:     /*
 4803:      * Matrice de complexes / Matrice de complexes
 4804:      */
 4805: 
 4806:     else if (((*s_objet_argument_2).type == MCX) &&
 4807:             ((*s_objet_argument_1).type == MCX))
 4808:     {
 4809:         if ((*((struct_matrice *) (*s_objet_argument_1).objet)).nombre_lignes !=
 4810:                 (*((struct_matrice *) (*s_objet_argument_2).objet))
 4811:                 .nombre_colonnes)
 4812:         {
 4813:             liberation(s_etat_processus, s_objet_argument_1);
 4814:             liberation(s_etat_processus, s_objet_argument_2);
 4815: 
 4816:             (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
 4817:             return;
 4818:         }
 4819: 
 4820:         if ((s_objet_resultat = allocation(s_etat_processus, MCX))
 4821:                 == NULL)
 4822:         {
 4823:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 4824:             return;
 4825:         }
 4826: 
 4827:         (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_lignes =
 4828:                 (*(((struct_matrice *) (*s_objet_argument_2)
 4829:                 .objet))).nombre_lignes;
 4830:         (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_colonnes =
 4831:                 (*(((struct_matrice *) (*s_objet_argument_1)
 4832:                 .objet))).nombre_colonnes;
 4833: 
 4834:         if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau =
 4835:                 malloc((*(((struct_matrice *) (*s_objet_resultat)
 4836:                 .objet))).nombre_lignes * sizeof(struct_complexe16 *))) == NULL)
 4837:         {
 4838:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 4839:             return;
 4840:         }
 4841: 
 4842:         if ((accumulateur = malloc((*(((struct_matrice *)
 4843:                 (*s_objet_argument_2).objet))).nombre_colonnes *
 4844:                 sizeof(complex16))) == NULL)
 4845:         {
 4846:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 4847:             return;
 4848:         }
 4849: 
 4850:         for(i = 0; i < (*(((struct_matrice *) (*s_objet_resultat)
 4851:                 .objet))).nombre_lignes; i++)
 4852:         {
 4853:             if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau[i] =
 4854:                     malloc((*(((struct_matrice *) (*s_objet_resultat)
 4855:                     .objet))).nombre_colonnes * sizeof(struct_complexe16)))
 4856:                     == NULL)
 4857:             {
 4858:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 4859:                 return;
 4860:             }
 4861: 
 4862:             for(j = 0; j < (*(((struct_matrice *) (*s_objet_resultat)
 4863:                     .objet))).nombre_colonnes; j++)
 4864:             {
 4865:                 ((struct_complexe16 **) (*((struct_matrice *)
 4866:                         (*s_objet_resultat).objet)).tableau)[i][j]
 4867:                         .partie_reelle = 0;
 4868:                 ((struct_complexe16 **) (*((struct_matrice *)
 4869:                         (*s_objet_resultat).objet)).tableau)[i][j]
 4870:                         .partie_imaginaire = 0;
 4871: 
 4872:                 for(k = 0; k < (*(((struct_matrice *) (*s_objet_argument_2)
 4873:                         .objet))).nombre_colonnes; k++)
 4874:                 {
 4875:                     f77multiplicationcc_(&(((struct_complexe16 **)
 4876:                             (*((struct_matrice *)(*s_objet_argument_1)
 4877:                             .objet)).tableau)[k][j]), &(((struct_complexe16 **)
 4878:                             (*((struct_matrice *) (*s_objet_argument_2)
 4879:                             .objet)).tableau)[i][k]), &(((complex16 *)
 4880:                             accumulateur)[k]));
 4881:                 }
 4882: 
 4883:                 ((struct_complexe16 **) (*((struct_matrice *)
 4884:                         (*s_objet_resultat).objet)).tableau)[i][j] =
 4885:                         sommation_vecteur_complexe(accumulateur,
 4886:                         &((*(((struct_matrice *) (*s_objet_argument_2).objet)))
 4887:                         .nombre_colonnes), &erreur_memoire);
 4888: 
 4889:                 if (erreur_memoire == d_vrai)
 4890:                 {
 4891:                     (*s_etat_processus).erreur_systeme =
 4892:                             d_es_allocation_memoire;
 4893:                     return;
 4894:                 }
 4895:             }
 4896:         }
 4897: 
 4898:         free(accumulateur);
 4899:     }
 4900: 
 4901: /*
 4902: --------------------------------------------------------------------------------
 4903:   Multiplication mettant en oeuvre des binaires
 4904: --------------------------------------------------------------------------------
 4905: */
 4906:     /*
 4907:      * Binaire / Binaire
 4908:      */
 4909: 
 4910:     else if (((*s_objet_argument_1).type == BIN) &&
 4911:             ((*s_objet_argument_2).type == BIN))
 4912:     {
 4913:         if ((s_objet_resultat = allocation(s_etat_processus, BIN))
 4914:                 == NULL)
 4915:         {
 4916:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 4917:             return;
 4918:         }
 4919: 
 4920:         (*((logical8 *) (*s_objet_resultat).objet)) =
 4921:                 (*((logical8 *) (*s_objet_argument_2).objet))
 4922:                 * (*((logical8 *) (*s_objet_argument_1).objet));
 4923:     }
 4924: 
 4925:     /*
 4926:      * Binaire / Entier
 4927:      */
 4928: 
 4929:     else if ((((*s_objet_argument_1).type == BIN) &&
 4930:             ((*s_objet_argument_2).type == INT)) ||
 4931:             (((*s_objet_argument_1).type == INT) &&
 4932:             ((*s_objet_argument_2).type == BIN)))
 4933:     {
 4934:         if ((s_objet_resultat = allocation(s_etat_processus, BIN))
 4935:                 == NULL)
 4936:         {
 4937:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 4938:             return;
 4939:         }
 4940: 
 4941:         if ((*s_objet_argument_1).type == BIN)
 4942:         {
 4943:             (*((logical8 *) (*s_objet_resultat).objet)) =
 4944:                     (*((integer8 *) (*s_objet_argument_2).objet))
 4945:                     * (*((logical8 *) (*s_objet_argument_1).objet));
 4946:         }
 4947:         else
 4948:         {
 4949:             (*((logical8 *) (*s_objet_resultat).objet)) =
 4950:                     (*((logical8 *) (*s_objet_argument_2).objet))
 4951:                     * (*((integer8 *) (*s_objet_argument_1).objet));
 4952:         }
 4953:     }
 4954: 
 4955: /*
 4956: --------------------------------------------------------------------------------
 4957:   Multiplication mettant en oeuvre un nom ou une expression algébrique
 4958: --------------------------------------------------------------------------------
 4959: */
 4960:     /*
 4961:      * Nom ou valeur numérique / Nom ou valeur numérique
 4962:      */
 4963: 
 4964:     else if ((((*s_objet_argument_1).type == NOM) &&
 4965:             (((*s_objet_argument_2).type == NOM) ||
 4966:             ((*s_objet_argument_2).type == INT) ||
 4967:             ((*s_objet_argument_2).type == REL) ||
 4968:             ((*s_objet_argument_2).type == CPL))) ||
 4969:             (((*s_objet_argument_2).type == NOM) &&
 4970:             (((*s_objet_argument_1).type == INT) ||
 4971:             ((*s_objet_argument_1).type == REL) ||
 4972:             ((*s_objet_argument_1).type == CPL))))
 4973:     {
 4974:         drapeau = d_vrai;
 4975: 
 4976:         if ((*s_objet_argument_1).type == NOM)
 4977:         {
 4978:             if ((*s_objet_argument_2).type == INT)
 4979:             {
 4980:                 if ((*((integer8 *) (*s_objet_argument_2).objet)) == 0)
 4981:                 {
 4982:                     drapeau = d_faux;
 4983: 
 4984:                     if ((s_objet_resultat = allocation(s_etat_processus,
 4985:                             INT)) == NULL)
 4986:                     {
 4987:                         (*s_etat_processus).erreur_systeme =
 4988:                                 d_es_allocation_memoire;
 4989:                         return;
 4990:                     }
 4991: 
 4992:                     (*((integer8 *) (*s_objet_resultat).objet)) = 0;
 4993:                 }
 4994:                 else if ((*((integer8 *) (*s_objet_argument_2).objet)) == 1)
 4995:                 {
 4996:                     drapeau = d_faux;
 4997: 
 4998:                     s_objet_resultat = s_objet_argument_1;
 4999:                     s_objet_argument_1 = NULL;
 5000:                 }
 5001:             }
 5002:             else if ((*s_objet_argument_2).type == REL)
 5003:             {
 5004:                 if ((*((integer8 *) (*s_objet_argument_2).objet)) == 0)
 5005:                 {
 5006:                     drapeau = d_faux;
 5007: 
 5008:                     if ((s_objet_resultat = allocation(s_etat_processus,
 5009:                             REL)) == NULL)
 5010:                     {
 5011:                         (*s_etat_processus).erreur_systeme =
 5012:                                 d_es_allocation_memoire;
 5013:                         return;
 5014:                     }
 5015: 
 5016:                     (*((real8 *) (*s_objet_resultat).objet)) = 0;
 5017:                 }
 5018:                 else if ((*((real8 *) (*s_objet_argument_2).objet)) == 1)
 5019:                 {
 5020:                     drapeau = d_faux;
 5021: 
 5022:                     s_objet_resultat = s_objet_argument_1;
 5023:                     s_objet_argument_1 = NULL;
 5024:                 }
 5025:             }
 5026:             else if ((*s_objet_argument_2).type == CPL)
 5027:             {
 5028:                 if (((*((complex16 *) (*s_objet_argument_2).objet))
 5029:                         .partie_reelle == 0) && ((*((complex16 *)
 5030:                         (*s_objet_argument_2).objet)).partie_imaginaire == 0))
 5031:                 {
 5032:                     drapeau = d_faux;
 5033: 
 5034:                     if ((s_objet_resultat = allocation(s_etat_processus,
 5035:                             CPL)) == NULL)
 5036:                     {
 5037:                         (*s_etat_processus).erreur_systeme =
 5038:                                 d_es_allocation_memoire;
 5039:                         return;
 5040:                     }
 5041: 
 5042:                     (*((complex16 *) (*s_objet_resultat).objet))
 5043:                             .partie_reelle = 0;
 5044:                     (*((complex16 *) (*s_objet_resultat).objet))
 5045:                             .partie_imaginaire = 0;
 5046:                 }
 5047:                 else if (((*((complex16 *) (*s_objet_argument_2).objet))
 5048:                         .partie_reelle == 1) && ((*((complex16 *)
 5049:                         (*s_objet_argument_2).objet)).partie_imaginaire == 0))
 5050:                 {
 5051:                     drapeau = d_faux;
 5052: 
 5053:                     s_objet_resultat = s_objet_argument_1;
 5054:                     s_objet_argument_1 = NULL;
 5055:                 }
 5056:             }
 5057:         }
 5058:         else if ((*s_objet_argument_2).type == NOM)
 5059:         {
 5060:             if ((*s_objet_argument_1).type == INT)
 5061:             {
 5062:                 if ((*((integer8 *) (*s_objet_argument_1).objet)) == 0)
 5063:                 {
 5064:                     drapeau = d_faux;
 5065: 
 5066:                     if ((s_objet_resultat = allocation(s_etat_processus,
 5067:                             INT)) == NULL)
 5068:                     {
 5069:                         (*s_etat_processus).erreur_systeme =
 5070:                                 d_es_allocation_memoire;
 5071:                         return;
 5072:                     }
 5073: 
 5074:                     (*((integer8 *) (*s_objet_resultat).objet)) = 0;
 5075:                 }
 5076:                 else if ((*((integer8 *) (*s_objet_argument_1).objet)) == 1)
 5077:                 {
 5078:                     drapeau = d_faux;
 5079: 
 5080:                     s_objet_resultat = s_objet_argument_2;
 5081:                     s_objet_argument_2 = NULL;
 5082:                 }
 5083:             }
 5084:             else if ((*s_objet_argument_1).type == REL)
 5085:             {
 5086:                 if ((*((integer8 *) (*s_objet_argument_1).objet)) == 0)
 5087:                 {
 5088:                     drapeau = d_faux;
 5089: 
 5090:                     if ((s_objet_resultat = allocation(s_etat_processus,
 5091:                             REL)) == NULL)
 5092:                     {
 5093:                         (*s_etat_processus).erreur_systeme =
 5094:                                 d_es_allocation_memoire;
 5095:                         return;
 5096:                     }
 5097: 
 5098:                     (*((real8 *) (*s_objet_resultat).objet)) = 0;
 5099:                 }
 5100:                 else if ((*((real8 *) (*s_objet_argument_1).objet)) == 1)
 5101:                 {
 5102:                     drapeau = d_faux;
 5103: 
 5104:                     s_objet_resultat = s_objet_argument_2;
 5105:                     s_objet_argument_2 = NULL;
 5106:                 }
 5107:             }
 5108:             else if ((*s_objet_argument_1).type == CPL)
 5109:             {
 5110:                 if (((*((complex16 *) (*s_objet_argument_1).objet))
 5111:                         .partie_reelle == 0) && ((*((complex16 *)
 5112:                         (*s_objet_argument_1).objet)).partie_imaginaire == 0))
 5113:                 {
 5114:                     drapeau = d_faux;
 5115: 
 5116:                     if ((s_objet_resultat = allocation(s_etat_processus,
 5117:                             CPL)) == NULL)
 5118:                     {
 5119:                         (*s_etat_processus).erreur_systeme =
 5120:                                 d_es_allocation_memoire;
 5121:                         return;
 5122:                     }
 5123: 
 5124:                     (*((complex16 *) (*s_objet_resultat).objet))
 5125:                             .partie_reelle = 0;
 5126:                     (*((complex16 *) (*s_objet_resultat).objet))
 5127:                             .partie_imaginaire = 0;
 5128:                 }
 5129:                 else if (((*((complex16 *) (*s_objet_argument_1).objet))
 5130:                         .partie_reelle == 1) && ((*((complex16 *)
 5131:                         (*s_objet_argument_1).objet)).partie_imaginaire == 0))
 5132:                 {
 5133:                     drapeau = d_faux;
 5134: 
 5135:                     s_objet_resultat = s_objet_argument_2;
 5136:                     s_objet_argument_2 = NULL;
 5137:                 }
 5138:             }
 5139:         }
 5140: 
 5141:         if (drapeau == d_vrai)
 5142:         {
 5143:             if ((s_objet_resultat = allocation(s_etat_processus, ALG))
 5144:                     == NULL)
 5145:             {
 5146:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 5147:                 return;
 5148:             }
 5149: 
 5150:             if (((*s_objet_resultat).objet =
 5151:                     allocation_maillon(s_etat_processus)) == NULL)
 5152:             {
 5153:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 5154:                 return;
 5155:             }
 5156: 
 5157:             l_element_courant = (*s_objet_resultat).objet;
 5158: 
 5159:             if (((*l_element_courant).donnee = allocation(s_etat_processus,
 5160:                     FCT)) == NULL)
 5161:             {
 5162:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 5163:                 return;
 5164:             }
 5165: 
 5166:             (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 5167:                     .nombre_arguments = 0;
 5168:             (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 5169:                     .fonction = instruction_vers_niveau_superieur;
 5170: 
 5171:             if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 5172:                     .nom_fonction = malloc(3 * sizeof(unsigned char))) == NULL)
 5173:             {
 5174:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 5175:                 return;
 5176:             }
 5177: 
 5178:             strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 5179:                     .nom_fonction, "<<");
 5180: 
 5181:             if (((*l_element_courant).suivant =
 5182:                     allocation_maillon(s_etat_processus)) == NULL)
 5183:             {
 5184:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 5185:                 return;
 5186:             }
 5187: 
 5188:             l_element_courant = (*l_element_courant).suivant;
 5189:             (*l_element_courant).donnee = s_objet_argument_2;
 5190: 
 5191:             if (((*l_element_courant).suivant =
 5192:                     allocation_maillon(s_etat_processus)) == NULL)
 5193:             {
 5194:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 5195:                 return;
 5196:             }
 5197: 
 5198:             l_element_courant = (*l_element_courant).suivant;
 5199:             (*l_element_courant).donnee = s_objet_argument_1;
 5200: 
 5201:             if (((*l_element_courant).suivant =
 5202:                     allocation_maillon(s_etat_processus)) == NULL)
 5203:             {
 5204:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 5205:                 return;
 5206:             }
 5207: 
 5208:             l_element_courant = (*l_element_courant).suivant;
 5209: 
 5210:             if (((*l_element_courant).donnee = allocation(s_etat_processus,
 5211:                     FCT)) == NULL)
 5212:             {
 5213:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 5214:                 return;
 5215:             }
 5216: 
 5217:             (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 5218:                     .nombre_arguments = 0;
 5219:             (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 5220:                     .fonction = instruction_multiplication;
 5221: 
 5222:             if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 5223:                     .nom_fonction = malloc(2 * sizeof(unsigned char))) == NULL)
 5224:             {
 5225:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 5226:                 return;
 5227:             }
 5228: 
 5229:             strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 5230:                     .nom_fonction, "*");
 5231: 
 5232:             if (((*l_element_courant).suivant =
 5233:                     allocation_maillon(s_etat_processus)) == NULL)
 5234:             {
 5235:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 5236:                 return;
 5237:             }
 5238: 
 5239:             l_element_courant = (*l_element_courant).suivant;
 5240: 
 5241:             if (((*l_element_courant).donnee =
 5242:                     allocation(s_etat_processus, FCT)) == NULL)
 5243:             {
 5244:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 5245:                 return;
 5246:             }
 5247: 
 5248:             (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 5249:                     .nombre_arguments = 0;
 5250:             (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 5251:                     .fonction = instruction_vers_niveau_inferieur;
 5252: 
 5253:             if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 5254:                     .nom_fonction = malloc(3 * sizeof(unsigned char))) == NULL)
 5255:             {
 5256:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 5257:                 return;
 5258:             }
 5259: 
 5260:             strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 5261:                     .nom_fonction, ">>");
 5262: 
 5263:             (*l_element_courant).suivant = NULL;
 5264: 
 5265:             s_objet_argument_1 = NULL;
 5266:             s_objet_argument_2 = NULL;
 5267:         }
 5268:     }
 5269: 
 5270:     /*
 5271:      * Nom ou valeur numérique / Expression
 5272:      */
 5273: 
 5274:     else if ((((*s_objet_argument_1).type == ALG) ||
 5275:             ((*s_objet_argument_1).type == RPN)) &&
 5276:             (((*s_objet_argument_2).type == NOM) ||
 5277:             ((*s_objet_argument_2).type == INT) ||
 5278:             ((*s_objet_argument_2).type == REL) ||
 5279:             ((*s_objet_argument_2).type == CPL)))
 5280:     {
 5281:         drapeau = d_vrai;
 5282: 
 5283:         nombre_elements = 0;
 5284:         l_element_courant = (struct_liste_chainee *)
 5285:                 (*s_objet_argument_1).objet;
 5286: 
 5287:         while(l_element_courant != NULL)
 5288:         {
 5289:             nombre_elements++;
 5290:             l_element_courant = (*l_element_courant).suivant;
 5291:         }
 5292: 
 5293:         if (nombre_elements == 2)
 5294:         {
 5295:             liberation(s_etat_processus, s_objet_argument_1);
 5296:             liberation(s_etat_processus, s_objet_argument_2);
 5297: 
 5298:             (*s_etat_processus).erreur_execution = d_ex_argument_invalide;
 5299:             return;
 5300:         }
 5301: 
 5302:         if ((*s_objet_argument_2).type == INT)
 5303:         {
 5304:             if ((*((integer8 *) (*s_objet_argument_2).objet)) == 0)
 5305:             {
 5306:                 drapeau = d_faux;
 5307: 
 5308:                 if ((s_objet_resultat = allocation(s_etat_processus, INT))
 5309:                         == NULL)
 5310:                 {
 5311:                     (*s_etat_processus).erreur_systeme =
 5312:                             d_es_allocation_memoire;
 5313:                     return;
 5314:                 }
 5315: 
 5316:                 (*((integer8 *) (*s_objet_resultat).objet)) = 0;
 5317:             }
 5318:             else if ((*((integer8 *) (*s_objet_argument_2).objet)) == 1)
 5319:             {
 5320:                 drapeau = d_faux;
 5321: 
 5322:                 s_objet_resultat = s_objet_argument_1;
 5323:                 s_objet_argument_1 = NULL;
 5324:             }
 5325:         }
 5326:         else if ((*s_objet_argument_2).type == REL)
 5327:         {
 5328:             if ((*((integer8 *) (*s_objet_argument_2).objet)) == 0)
 5329:             {
 5330:                 drapeau = d_faux;
 5331: 
 5332:                 if ((s_objet_resultat = allocation(s_etat_processus, REL))
 5333:                         == NULL)
 5334:                 {
 5335:                     (*s_etat_processus).erreur_systeme =
 5336:                             d_es_allocation_memoire;
 5337:                     return;
 5338:                 }
 5339: 
 5340:                 (*((real8 *) (*s_objet_resultat).objet)) = 0;
 5341:             }
 5342:             else if ((*((real8 *) (*s_objet_argument_2).objet)) == 1)
 5343:             {
 5344:                 drapeau = d_faux;
 5345: 
 5346:                 s_objet_resultat = s_objet_argument_1;
 5347:                 s_objet_argument_1 = NULL;
 5348:             }
 5349:         }
 5350:         else if ((*s_objet_argument_2).type == CPL)
 5351:         {
 5352:             if (((*((complex16 *) (*s_objet_argument_2).objet))
 5353:                     .partie_reelle == 0) && ((*((complex16 *)
 5354:                     (*s_objet_argument_2).objet)).partie_imaginaire == 0))
 5355:             {
 5356:                 drapeau = d_faux;
 5357: 
 5358:                 if ((s_objet_resultat = allocation(s_etat_processus, CPL))
 5359:                         == NULL)
 5360:                 {
 5361:                     (*s_etat_processus).erreur_systeme =
 5362:                             d_es_allocation_memoire;
 5363:                     return;
 5364:                 }
 5365: 
 5366:                 (*((complex16 *) (*s_objet_resultat).objet))
 5367:                         .partie_reelle = 0;
 5368:                 (*((complex16 *) (*s_objet_resultat).objet))
 5369:                         .partie_imaginaire = 0;
 5370:             }
 5371:             else if (((*((complex16 *) (*s_objet_argument_2).objet))
 5372:                     .partie_reelle == 1) && ((*((complex16 *)
 5373:                     (*s_objet_argument_2).objet)).partie_imaginaire == 0))
 5374:             {
 5375:                 drapeau = d_faux;
 5376: 
 5377:                 s_objet_resultat = s_objet_argument_1;
 5378:                 s_objet_argument_1 = NULL;
 5379:             }
 5380:         }
 5381: 
 5382:         if (drapeau == d_vrai)
 5383:         {
 5384:             if ((s_objet_resultat = copie_objet(s_etat_processus,
 5385:                     s_objet_argument_1, 'N')) == NULL)
 5386:             {
 5387:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 5388:                 return;
 5389:             }
 5390: 
 5391:             l_element_courant = (struct_liste_chainee *)
 5392:                     (*s_objet_resultat).objet;
 5393:             l_element_precedent = l_element_courant;
 5394:             l_element_courant = (*l_element_courant).suivant;
 5395: 
 5396:             if (((*l_element_precedent).suivant =
 5397:                     allocation_maillon(s_etat_processus)) == NULL)
 5398:             {
 5399:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 5400:                 return;
 5401:             }
 5402: 
 5403:             (*(*l_element_precedent).suivant).donnee = s_objet_argument_2;
 5404:             (*(*l_element_precedent).suivant).suivant = l_element_courant;
 5405: 
 5406:             while((*l_element_courant).suivant != NULL)
 5407:             {
 5408:                 l_element_precedent = l_element_courant;
 5409:                 l_element_courant = (*l_element_courant).suivant;
 5410:             }
 5411: 
 5412:             if (((*l_element_precedent).suivant =
 5413:                     allocation_maillon(s_etat_processus)) == NULL)
 5414:             {
 5415:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 5416:                 return;
 5417:             }
 5418: 
 5419:             if (((*(*l_element_precedent).suivant).donnee =
 5420:                     allocation(s_etat_processus, FCT)) == NULL)
 5421:             {
 5422:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 5423:                 return;
 5424:             }
 5425: 
 5426:             (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
 5427:                     .donnee).objet)).nombre_arguments = 0;
 5428:             (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
 5429:                     .donnee).objet)).fonction = instruction_multiplication;
 5430: 
 5431:             if (((*((struct_fonction *) (*(*(*l_element_precedent)
 5432:                     .suivant).donnee).objet)).nom_fonction =
 5433:                     malloc(2 * sizeof(unsigned char))) == NULL)
 5434:             {
 5435:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 5436:                 return;
 5437:             }
 5438: 
 5439:             strcpy((*((struct_fonction *) (*(*(*l_element_precedent)
 5440:                     .suivant).donnee).objet)).nom_fonction, "*");
 5441: 
 5442:             (*(*l_element_precedent).suivant).suivant = l_element_courant;
 5443: 
 5444:             s_objet_argument_2 = NULL;
 5445:         }
 5446:     }
 5447: 
 5448:     /*
 5449:      * Expression / Nom ou valeur numérique
 5450:      */
 5451: 
 5452:     else if ((((*s_objet_argument_1).type == NOM) ||
 5453:             ((*s_objet_argument_1).type == INT) ||
 5454:             ((*s_objet_argument_1).type == REL) ||
 5455:             ((*s_objet_argument_1).type == CPL)) &&
 5456:             (((*s_objet_argument_2).type == ALG)||
 5457:             ((*s_objet_argument_2).type == RPN)))
 5458:     {
 5459:         drapeau = d_vrai;
 5460: 
 5461:         nombre_elements = 0;
 5462:         l_element_courant = (struct_liste_chainee *)
 5463:                 (*s_objet_argument_2).objet;
 5464: 
 5465:         while(l_element_courant != NULL)
 5466:         {
 5467:             nombre_elements++;
 5468:             l_element_courant = (*l_element_courant).suivant;
 5469:         }
 5470: 
 5471:         if (nombre_elements == 2)
 5472:         {
 5473:             liberation(s_etat_processus, s_objet_argument_1);
 5474:             liberation(s_etat_processus, s_objet_argument_2);
 5475: 
 5476:             (*s_etat_processus).erreur_execution = d_ex_argument_invalide;
 5477:             return;
 5478:         }
 5479: 
 5480:         if ((*s_objet_argument_1).type == INT)
 5481:         {
 5482:             if ((*((integer8 *) (*s_objet_argument_1).objet)) == 0)
 5483:             {
 5484:                 drapeau = d_faux;
 5485: 
 5486:                 if ((s_objet_resultat = allocation(s_etat_processus, INT))
 5487:                         == NULL)
 5488:                 {
 5489:                     (*s_etat_processus).erreur_systeme =
 5490:                             d_es_allocation_memoire;
 5491:                     return;
 5492:                 }
 5493: 
 5494:                 (*((integer8 *) (*s_objet_resultat).objet)) = 0;
 5495:             }
 5496:             else if ((*((integer8 *) (*s_objet_argument_1).objet)) == 1)
 5497:             {
 5498:                 drapeau = d_faux;
 5499: 
 5500:                 s_objet_resultat = s_objet_argument_2;
 5501:                 s_objet_argument_2 = NULL;
 5502:             }
 5503:         }
 5504:         else if ((*s_objet_argument_1).type == REL)
 5505:         {
 5506:             if ((*((integer8 *) (*s_objet_argument_1).objet)) == 0)
 5507:             {
 5508:                 drapeau = d_faux;
 5509: 
 5510:                 if ((s_objet_resultat = allocation(s_etat_processus, REL))
 5511:                         == NULL)
 5512:                 {
 5513:                     (*s_etat_processus).erreur_systeme =
 5514:                             d_es_allocation_memoire;
 5515:                     return;
 5516:                 }
 5517: 
 5518:                 (*((real8 *) (*s_objet_resultat).objet)) = 0;
 5519:             }
 5520:             else if ((*((real8 *) (*s_objet_argument_1).objet)) == 1)
 5521:             {
 5522:                 drapeau = d_faux;
 5523: 
 5524:                 s_objet_resultat = s_objet_argument_2;
 5525:                 s_objet_argument_2 = NULL;
 5526:             }
 5527:         }
 5528:         else if ((*s_objet_argument_1).type == CPL)
 5529:         {
 5530:             if (((*((complex16 *) (*s_objet_argument_1).objet))
 5531:                     .partie_reelle == 0) && ((*((complex16 *)
 5532:                     (*s_objet_argument_1).objet)).partie_imaginaire == 0))
 5533:             {
 5534:                 drapeau = d_faux;
 5535: 
 5536:                 if ((s_objet_resultat = allocation(s_etat_processus, CPL))
 5537:                         == NULL)
 5538:                 {
 5539:                     (*s_etat_processus).erreur_systeme =
 5540:                             d_es_allocation_memoire;
 5541:                     return;
 5542:                 }
 5543: 
 5544:                 (*((complex16 *) (*s_objet_resultat).objet))
 5545:                         .partie_reelle = 0;
 5546:                 (*((complex16 *) (*s_objet_resultat).objet))
 5547:                         .partie_imaginaire = 0;
 5548:             }
 5549:             else if (((*((complex16 *) (*s_objet_argument_1).objet))
 5550:                     .partie_reelle == 1) && ((*((complex16 *)
 5551:                     (*s_objet_argument_1).objet)).partie_imaginaire == 0))
 5552:             {
 5553:                 drapeau = d_faux;
 5554: 
 5555:                 s_objet_resultat = s_objet_argument_2;
 5556:                 s_objet_argument_2 = NULL;
 5557:             }
 5558:         }
 5559: 
 5560:         if (drapeau == d_vrai)
 5561:         {
 5562:             if ((s_objet_resultat = copie_objet(s_etat_processus,
 5563:                     s_objet_argument_2, 'N')) == NULL)
 5564:             {
 5565:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 5566:                 return;
 5567:             }
 5568: 
 5569:             l_element_courant = (struct_liste_chainee *)
 5570:                     (*s_objet_resultat).objet;
 5571:             l_element_precedent = l_element_courant;
 5572: 
 5573:             while((*l_element_courant).suivant != NULL)
 5574:             {
 5575:                 l_element_precedent = l_element_courant;
 5576:                 l_element_courant = (*l_element_courant).suivant;
 5577:             }
 5578: 
 5579:             if (((*l_element_precedent).suivant =
 5580:                     allocation_maillon(s_etat_processus)) == NULL)
 5581:             {
 5582:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 5583:                 return;
 5584:             }
 5585: 
 5586:             (*(*l_element_precedent).suivant).donnee = s_objet_argument_1;
 5587:             l_element_precedent = (*l_element_precedent).suivant;
 5588: 
 5589:             if (((*l_element_precedent).suivant =
 5590:                     allocation_maillon(s_etat_processus)) == NULL)
 5591:             {
 5592:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 5593:                 return;
 5594:             }
 5595: 
 5596:             if (((*(*l_element_precedent).suivant).donnee =
 5597:                     allocation(s_etat_processus, FCT)) == NULL)
 5598:             {
 5599:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 5600:                 return;
 5601:             }
 5602: 
 5603:             (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
 5604:                     .donnee).objet)).nombre_arguments = 0;
 5605:             (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
 5606:                     .donnee).objet)).fonction = instruction_multiplication;
 5607: 
 5608:             if (((*((struct_fonction *) (*(*(*l_element_precedent)
 5609:                     .suivant).donnee).objet)).nom_fonction =
 5610:                     malloc(2 * sizeof(unsigned char))) == NULL)
 5611:             {
 5612:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 5613:                 return;
 5614:             }
 5615: 
 5616:             strcpy((*((struct_fonction *) (*(*(*l_element_precedent)
 5617:                     .suivant).donnee).objet)).nom_fonction, "*");
 5618: 
 5619:             (*(*l_element_precedent).suivant).suivant = l_element_courant;
 5620: 
 5621:             s_objet_argument_1 = NULL;
 5622:         }
 5623:     }
 5624: 
 5625:     /*
 5626:      * Expression / Expression
 5627:      */
 5628: 
 5629:     else if ((((*s_objet_argument_1).type == ALG) &&
 5630:             ((*s_objet_argument_2).type == ALG)) ||
 5631:             (((*s_objet_argument_1).type == RPN) &&
 5632:             ((*s_objet_argument_2).type == RPN)))
 5633:     {
 5634:         nombre_elements = 0;
 5635:         l_element_courant = (struct_liste_chainee *)
 5636:                 (*s_objet_argument_1).objet;
 5637: 
 5638:         while(l_element_courant != NULL)
 5639:         {
 5640:             nombre_elements++;
 5641:             l_element_courant = (*l_element_courant).suivant;
 5642:         }
 5643: 
 5644:         if (nombre_elements == 2)
 5645:         {
 5646:             liberation(s_etat_processus, s_objet_argument_1);
 5647:             liberation(s_etat_processus, s_objet_argument_2);
 5648: 
 5649:             (*s_etat_processus).erreur_execution = d_ex_argument_invalide;
 5650:             return;
 5651:         }
 5652: 
 5653:         nombre_elements = 0;
 5654:         l_element_courant = (struct_liste_chainee *)
 5655:                 (*s_objet_argument_2).objet;
 5656: 
 5657:         while(l_element_courant != NULL)
 5658:         {
 5659:             nombre_elements++;
 5660:             l_element_courant = (*l_element_courant).suivant;
 5661:         }
 5662: 
 5663:         if (nombre_elements == 2)
 5664:         {
 5665:             liberation(s_etat_processus, s_objet_argument_1);
 5666:             liberation(s_etat_processus, s_objet_argument_2);
 5667: 
 5668:             (*s_etat_processus).erreur_execution = d_ex_argument_invalide;
 5669:             return;
 5670:         }
 5671: 
 5672:         if ((s_copie_argument_1 = copie_objet(s_etat_processus,
 5673:                 s_objet_argument_1, 'N')) == NULL)
 5674:         {
 5675:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 5676:             return;
 5677:         }
 5678: 
 5679:         if ((s_copie_argument_2 = copie_objet(s_etat_processus,
 5680:                 s_objet_argument_2, 'N')) == NULL)
 5681:         {
 5682:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 5683:             return;
 5684:         }
 5685: 
 5686:         l_element_courant = (struct_liste_chainee *)
 5687:                 (*s_copie_argument_1).objet;
 5688:         (*s_copie_argument_1).objet = (void *) (*((struct_liste_chainee *)
 5689:                 (*s_copie_argument_1).objet)).suivant;
 5690: 
 5691:         liberation(s_etat_processus, (*l_element_courant).donnee);
 5692:         free(l_element_courant);
 5693: 
 5694:         l_element_courant = (struct_liste_chainee *)
 5695:                 (*s_copie_argument_2).objet;
 5696:         l_element_precedent = l_element_courant;
 5697:         s_objet_resultat = s_copie_argument_2;
 5698: 
 5699:         while((*l_element_courant).suivant != NULL)
 5700:         {
 5701:             l_element_precedent = l_element_courant;
 5702:             l_element_courant = (*l_element_courant).suivant;
 5703:         }
 5704: 
 5705:         liberation(s_etat_processus, (*l_element_courant).donnee);
 5706:         free(l_element_courant);
 5707: 
 5708:         (*l_element_precedent).suivant = (struct_liste_chainee *)
 5709:                 (*s_copie_argument_1).objet;
 5710:         free(s_copie_argument_1);
 5711: 
 5712:         l_element_courant = (*l_element_precedent).suivant;
 5713:         while((*l_element_courant).suivant != NULL)
 5714:         {
 5715:             l_element_precedent = l_element_courant;
 5716:             l_element_courant = (*l_element_courant).suivant;
 5717:         }
 5718: 
 5719:         if (((*l_element_precedent).suivant =
 5720:                 allocation_maillon(s_etat_processus)) == NULL)
 5721:         {
 5722:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 5723:             return;
 5724:         }
 5725: 
 5726:         (*(*l_element_precedent).suivant).suivant = l_element_courant;
 5727:         l_element_courant = (*l_element_precedent).suivant;
 5728: 
 5729:         if (((*l_element_courant).donnee = allocation(s_etat_processus, FCT))
 5730:                 == NULL)
 5731:         {
 5732:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 5733:             return;
 5734:         }
 5735: 
 5736:         (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 5737:                 .nombre_arguments = 0;
 5738:         (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 5739:                 .fonction = instruction_multiplication;
 5740: 
 5741:         if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 5742:                 .nom_fonction = malloc(2 * sizeof(unsigned char))) == NULL)
 5743:         {
 5744:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 5745:             return;
 5746:         }
 5747: 
 5748:         strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 5749:                 .nom_fonction, "*");
 5750:     }
 5751: 
 5752: /*
 5753: --------------------------------------------------------------------------------
 5754:   Multiplication impossible
 5755: --------------------------------------------------------------------------------
 5756: */
 5757: 
 5758:     else
 5759:     {
 5760:         liberation(s_etat_processus, s_objet_argument_1);
 5761:         liberation(s_etat_processus, s_objet_argument_2);
 5762: 
 5763:         (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
 5764:         return;
 5765:     }
 5766: 
 5767:     liberation(s_etat_processus, s_objet_argument_1);
 5768:     liberation(s_etat_processus, s_objet_argument_2);
 5769: 
 5770:     if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
 5771:             s_objet_resultat) == d_erreur)
 5772:     {
 5773:         return;
 5774:     }
 5775: 
 5776:     return;
 5777: }
 5778: 
 5779: 
 5780: /*
 5781: ================================================================================
 5782:   Fonction 'mant'
 5783: ================================================================================
 5784:   Entrées :
 5785: --------------------------------------------------------------------------------
 5786:   Sorties :
 5787: --------------------------------------------------------------------------------
 5788:   Effets de bord : néant
 5789: ================================================================================
 5790: */
 5791: 
 5792: void
 5793: instruction_mant(struct_processus *s_etat_processus)
 5794: {
 5795:     real8                               base_reelle;
 5796:     real8                               reduction_reelle;
 5797: 
 5798:     integer4                            erreur;
 5799: 
 5800:     integer8                            base_entiere;
 5801:     integer8                            exposant;
 5802:     integer8                            reduction_entiere;
 5803: 
 5804:     struct_liste_chainee                *l_element_courant;
 5805:     struct_liste_chainee                *l_element_precedent;
 5806: 
 5807:     struct_objet                        *s_copie_argument;
 5808:     struct_objet                        *s_objet_argument;
 5809:     struct_objet                        *s_objet_resultat;
 5810: 
 5811:     (*s_etat_processus).erreur_execution = d_ex;
 5812: 
 5813:     if ((*s_etat_processus).affichage_arguments == 'Y')
 5814:     {
 5815:         printf("\n  MANT ");
 5816: 
 5817:         if ((*s_etat_processus).langue == 'F')
 5818:         {
 5819:             printf("(mantisse)\n\n");
 5820:         }
 5821:         else
 5822:         {
 5823:             printf("(mantissa)\n\n");
 5824:         }
 5825: 
 5826:         printf("    1: %s, %s\n", d_INT, d_REL);
 5827:         printf("->  1: %s\n\n", d_REL);
 5828: 
 5829:         printf("    1: %s, %s\n", d_NOM, d_ALG);
 5830:         printf("->  1: %s\n\n", d_ALG);
 5831: 
 5832:         printf("    1: %s\n", d_RPN);
 5833:         printf("->  1: %s\n", d_RPN);
 5834: 
 5835:         return;
 5836:     }
 5837:     else if ((*s_etat_processus).test_instruction == 'Y')
 5838:     {
 5839:         (*s_etat_processus).nombre_arguments = 1;
 5840:         return;
 5841:     }
 5842:     
 5843:     if (test_cfsf(s_etat_processus, 31) == d_vrai)
 5844:     {
 5845:         if (empilement_pile_last(s_etat_processus, 1) == d_erreur)
 5846:         {
 5847:             return;
 5848:         }
 5849:     }
 5850: 
 5851:     if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
 5852:             &s_objet_argument) == d_erreur)
 5853:     {
 5854:         (*s_etat_processus).erreur_execution = d_ex_manque_argument;
 5855:         return;
 5856:     }
 5857: 
 5858: /*
 5859: --------------------------------------------------------------------------------
 5860:   Mantisse d'un entier
 5861: --------------------------------------------------------------------------------
 5862: */
 5863: 
 5864:     if ((*s_objet_argument).type == INT)
 5865:     {
 5866:         if ((s_objet_resultat = allocation(s_etat_processus, REL)) == NULL)
 5867:         {
 5868:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 5869:             return;
 5870:         }
 5871: 
 5872:         exposant = (integer8) floor(log10((*((integer8 *)
 5873:                 (*s_objet_argument).objet))));
 5874: 
 5875:         base_entiere = 10;
 5876:         f77puissanceii_(&base_entiere, &exposant, &reduction_entiere);
 5877: 
 5878:         (*((real8 *) (*s_objet_resultat).objet)) = ((real8)
 5879:                 (*((integer8 *) (*s_objet_argument).objet))) /
 5880:                 reduction_entiere;
 5881:     }
 5882: 
 5883: /*
 5884: --------------------------------------------------------------------------------
 5885:   Mantisse d'un réel
 5886: --------------------------------------------------------------------------------
 5887: */
 5888: 
 5889:     else if ((*s_objet_argument).type == REL)
 5890:     {
 5891:         if ((s_objet_resultat = allocation(s_etat_processus, REL)) == NULL)
 5892:         {
 5893:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 5894:             return;
 5895:         }
 5896: 
 5897:         exposant = (integer8) floor(log10((*((real8 *)
 5898:                 (*s_objet_argument).objet))));
 5899: 
 5900:         base_reelle = 10;
 5901:         f77puissanceri_(&base_reelle, &exposant, &reduction_reelle, &erreur);
 5902: 
 5903:         if (erreur == -1)
 5904:         {
 5905:             if (test_cfsf(s_etat_processus, 59) == d_vrai)
 5906:             {
 5907:                 liberation(s_etat_processus, s_objet_argument);
 5908:                 liberation(s_etat_processus, s_objet_resultat);
 5909: 
 5910:                 (*s_etat_processus).exception = d_ep_overflow;
 5911:                 return;
 5912:             }
 5913:             else
 5914:             {
 5915:                 reduction_reelle = ((double) 1) / ((double) 0);
 5916:             }
 5917:         }
 5918: 
 5919:         (*((real8 *) (*s_objet_resultat).objet)) =
 5920:                 (*((real8 *) (*s_objet_argument).objet)) / reduction_reelle;
 5921:     }
 5922: 
 5923: /*
 5924: --------------------------------------------------------------------------------
 5925:   Mantisse d'un nom
 5926: --------------------------------------------------------------------------------
 5927: */
 5928: 
 5929:     else if ((*s_objet_argument).type == NOM)
 5930:     {
 5931:         if ((s_objet_resultat = allocation(s_etat_processus, ALG)) == NULL)
 5932:         {
 5933:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 5934:             return;
 5935:         }
 5936: 
 5937:         if (((*s_objet_resultat).objet =
 5938:                 allocation_maillon(s_etat_processus)) == NULL)
 5939:         {
 5940:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 5941:             return;
 5942:         }
 5943: 
 5944:         l_element_courant = (*s_objet_resultat).objet;
 5945: 
 5946:         if (((*l_element_courant).donnee = allocation(s_etat_processus, FCT))
 5947:                 == NULL)
 5948:         {
 5949:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 5950:             return;
 5951:         }
 5952: 
 5953:         (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 5954:                 .nombre_arguments = 0;
 5955:         (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 5956:                 .fonction = instruction_vers_niveau_superieur;
 5957: 
 5958:         if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 5959:                 .nom_fonction = malloc(3 * sizeof(unsigned char))) == NULL)
 5960:         {
 5961:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 5962:             return;
 5963:         }
 5964: 
 5965:         strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 5966:                 .nom_fonction, "<<");
 5967: 
 5968:         if (((*l_element_courant).suivant =
 5969:                 allocation_maillon(s_etat_processus)) == NULL)
 5970:         {
 5971:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 5972:             return;
 5973:         }
 5974: 
 5975:         l_element_courant = (*l_element_courant).suivant;
 5976:         (*l_element_courant).donnee = s_objet_argument;
 5977: 
 5978:         if (((*l_element_courant).suivant =
 5979:                 allocation_maillon(s_etat_processus)) == NULL)
 5980:         {
 5981:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 5982:             return;
 5983:         }
 5984: 
 5985:         l_element_courant = (*l_element_courant).suivant;
 5986: 
 5987:         if (((*l_element_courant).donnee = allocation(s_etat_processus, FCT))
 5988:                 == NULL)
 5989:         {
 5990:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 5991:             return;
 5992:         }
 5993: 
 5994:         (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 5995:                 .nombre_arguments = 1;
 5996:         (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 5997:                 .fonction = instruction_mant;
 5998: 
 5999:         if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 6000:                 .nom_fonction = malloc(5 * sizeof(unsigned char))) == NULL)
 6001:         {
 6002:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 6003:             return;
 6004:         }
 6005: 
 6006:         strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 6007:                 .nom_fonction, "MANT");
 6008: 
 6009:         if (((*l_element_courant).suivant =
 6010:                 allocation_maillon(s_etat_processus)) == NULL)
 6011:         {
 6012:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 6013:             return;
 6014:         }
 6015: 
 6016:         l_element_courant = (*l_element_courant).suivant;
 6017: 
 6018:         if (((*l_element_courant).donnee = allocation(s_etat_processus, FCT))
 6019:                 == NULL)
 6020:         {
 6021:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 6022:             return;
 6023:         }
 6024: 
 6025:         (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 6026:                 .nombre_arguments = 0;
 6027:         (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 6028:                 .fonction = instruction_vers_niveau_inferieur;
 6029: 
 6030:         if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 6031:                 .nom_fonction = malloc(3 * sizeof(unsigned char))) == NULL)
 6032:         {
 6033:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 6034:             return;
 6035:         }
 6036: 
 6037:         strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 6038:                 .nom_fonction, ">>");
 6039: 
 6040:         (*l_element_courant).suivant = NULL;
 6041:         s_objet_argument = NULL;
 6042:     }
 6043: 
 6044: /*
 6045: --------------------------------------------------------------------------------
 6046:   Mantisse d'une expression
 6047: --------------------------------------------------------------------------------
 6048: */
 6049: 
 6050:     else if (((*s_objet_argument).type == ALG) ||
 6051:             ((*s_objet_argument).type == RPN))
 6052:     {
 6053:         if ((s_copie_argument = copie_objet(s_etat_processus,
 6054:                 s_objet_argument, 'N')) == NULL)
 6055:         {
 6056:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 6057:             return;
 6058:         }
 6059: 
 6060:         l_element_courant = (struct_liste_chainee *)
 6061:                 (*s_copie_argument).objet;
 6062:         l_element_precedent = l_element_courant;
 6063: 
 6064:         while((*l_element_courant).suivant != NULL)
 6065:         {
 6066:             l_element_precedent = l_element_courant;
 6067:             l_element_courant = (*l_element_courant).suivant;
 6068:         }
 6069: 
 6070:         if (((*l_element_precedent).suivant =
 6071:                 allocation_maillon(s_etat_processus)) == NULL)
 6072:         {
 6073:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 6074:             return;
 6075:         }
 6076: 
 6077:         if (((*(*l_element_precedent).suivant).donnee =
 6078:                 allocation(s_etat_processus, FCT)) == NULL)
 6079:         {
 6080:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 6081:             return;
 6082:         }
 6083: 
 6084:         (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
 6085:                 .donnee).objet)).nombre_arguments = 1;
 6086:         (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
 6087:                 .donnee).objet)).fonction = instruction_mant;
 6088: 
 6089:         if (((*((struct_fonction *) (*(*(*l_element_precedent)
 6090:                 .suivant).donnee).objet)).nom_fonction =
 6091:                 malloc(5 * sizeof(unsigned char))) == NULL)
 6092:         {
 6093:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 6094:             return;
 6095:         }
 6096: 
 6097:         strcpy((*((struct_fonction *) (*(*(*l_element_precedent)
 6098:                 .suivant).donnee).objet)).nom_fonction, "MANT");
 6099: 
 6100:         (*(*l_element_precedent).suivant).suivant = l_element_courant;
 6101: 
 6102:         s_objet_resultat = s_copie_argument;
 6103:     }
 6104: 
 6105: /*
 6106: --------------------------------------------------------------------------------
 6107:   Fonction mantisse impossible à réaliser
 6108: --------------------------------------------------------------------------------
 6109: */
 6110: 
 6111:     else
 6112:     {
 6113:         liberation(s_etat_processus, s_objet_argument);
 6114: 
 6115:         (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
 6116:         return;
 6117:     }
 6118: 
 6119:     if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
 6120:             s_objet_resultat) == d_erreur)
 6121:     {
 6122:         return;
 6123:     }
 6124: 
 6125:     liberation(s_etat_processus, s_objet_argument);
 6126: 
 6127:     return;
 6128: }
 6129: 
 6130: 
 6131: /*
 6132: ================================================================================
 6133:   Fonction 'mod'
 6134: ================================================================================
 6135:   Entrées :
 6136: --------------------------------------------------------------------------------
 6137:   Sorties :
 6138: --------------------------------------------------------------------------------
 6139:   Effets de bord : néant
 6140: ================================================================================
 6141: */
 6142: 
 6143: void
 6144: instruction_mod(struct_processus *s_etat_processus)
 6145: {
 6146:     struct_liste_chainee        *l_element_courant;
 6147:     struct_liste_chainee        *l_element_precedent;
 6148: 
 6149:     struct_objet                *s_copie_argument_1;
 6150:     struct_objet                *s_copie_argument_2;
 6151:     struct_objet                *s_objet_argument_1;
 6152:     struct_objet                *s_objet_argument_2;
 6153:     struct_objet                *s_objet_resultat;
 6154: 
 6155:     unsigned long               i;
 6156:     unsigned long               j;
 6157:     unsigned long               nombre_elements;
 6158: 
 6159:     (*s_etat_processus).erreur_execution = d_ex;
 6160: 
 6161:     if ((*s_etat_processus).affichage_arguments == 'Y')
 6162:     {
 6163:         printf("\n  MOD ");
 6164: 
 6165:         if ((*s_etat_processus).langue == 'F')
 6166:         {
 6167:             printf("(modulo)\n\n");
 6168:         }
 6169:         else
 6170:         {
 6171:             printf("(modulo)\n\n");
 6172:         }
 6173: 
 6174:         printf("    2: %s, %s\n", d_INT, d_REL);
 6175:         printf("    1: %s, %s\n", d_INT, d_REL);
 6176:         printf("->  1: %s, %s\n\n", d_INT, d_REL);
 6177: 
 6178:         printf("    2: %s, %s, %s, %s, %s, %s\n",
 6179:                 d_INT, d_REL, d_CPL, d_NOM, d_ALG, d_RPN);
 6180:         printf("    1: %s, %s, %s, %s, %s, %s\n",
 6181:                 d_INT, d_REL, d_CPL, d_NOM, d_ALG, d_RPN);
 6182:         printf("->  1: %s, %s\n", d_ALG, d_RPN);
 6183: 
 6184:         return;
 6185:     }
 6186:     else if ((*s_etat_processus).test_instruction == 'Y')
 6187:     {
 6188:         (*s_etat_processus).nombre_arguments = 2;
 6189:         return;
 6190:     }
 6191:     
 6192:     if (test_cfsf(s_etat_processus, 31) == d_vrai)
 6193:     {
 6194:         if (empilement_pile_last(s_etat_processus, 2) == d_erreur)
 6195:         {
 6196:             return;
 6197:         }
 6198:     }
 6199: 
 6200:     if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
 6201:             &s_objet_argument_1) == d_erreur)
 6202:     {
 6203:         (*s_etat_processus).erreur_execution = d_ex_manque_argument;
 6204:         return;
 6205:     }
 6206: 
 6207:     if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
 6208:             &s_objet_argument_2) == d_erreur)
 6209:     {
 6210:         liberation(s_etat_processus, s_objet_argument_1);
 6211: 
 6212:         (*s_etat_processus).erreur_execution = d_ex_manque_argument;
 6213:         return;
 6214:     }
 6215: 
 6216: /*
 6217: --------------------------------------------------------------------------------
 6218:   MOD portant sur des valeurs numériques
 6219: --------------------------------------------------------------------------------
 6220: */
 6221: 
 6222:     if ((((*s_objet_argument_1).type == INT) ||
 6223:             ((*s_objet_argument_1).type == REL)) &&
 6224:             (((*s_objet_argument_2).type == INT) ||
 6225:             ((*s_objet_argument_2).type == REL)))
 6226:     {
 6227:         if ((*s_objet_argument_1).type == INT)
 6228:         {
 6229:             if ((*s_objet_argument_2).type == INT)
 6230:             {
 6231:                 if ((s_objet_resultat = allocation(s_etat_processus, INT))
 6232:                         == NULL)
 6233:                 {
 6234:                     (*s_etat_processus).erreur_systeme =
 6235:                             d_es_allocation_memoire;
 6236:                     return;
 6237:                 }
 6238: 
 6239:                 (*((integer8 *) (*s_objet_resultat).objet)) =
 6240:                         (*((integer8 *) (*s_objet_argument_2).objet)) -
 6241:                         ((*((integer8 *) (*s_objet_argument_1).objet)) *
 6242:                         floor(((real8) (*((integer8 *) (*s_objet_argument_2)
 6243:                         .objet))) / ((real8) (*((integer8 *)
 6244:                         (*s_objet_argument_1).objet)))));
 6245:             }
 6246:             else
 6247:             {
 6248:                 if ((s_objet_resultat = allocation(s_etat_processus, REL))
 6249:                         == NULL)
 6250:                 {
 6251:                     (*s_etat_processus).erreur_systeme =
 6252:                             d_es_allocation_memoire;
 6253:                     return;
 6254:                 }
 6255: 
 6256:                 (*((real8 *) (*s_objet_resultat).objet)) =
 6257:                         (*((real8 *) (*s_objet_argument_2).objet)) -
 6258:                         ((*((integer8 *) (*s_objet_argument_1).objet)) *
 6259:                         floor((*((real8 *) (*s_objet_argument_2)
 6260:                         .objet)) / ((real8) (*((integer8 *)
 6261:                         (*s_objet_argument_1).objet)))));
 6262:             }
 6263:         }
 6264:         else
 6265:         {
 6266:             if ((*s_objet_argument_2).type == INT)
 6267:             {
 6268:                 if ((s_objet_resultat = allocation(s_etat_processus, REL))
 6269:                         == NULL)
 6270:                 {
 6271:                     (*s_etat_processus).erreur_systeme =
 6272:                             d_es_allocation_memoire;
 6273:                     return;
 6274:                 }
 6275: 
 6276:                 (*((real8 *) (*s_objet_resultat).objet)) =
 6277:                         (*((integer8 *) (*s_objet_argument_2).objet)) -
 6278:                         ((*((real8 *) (*s_objet_argument_1).objet)) *
 6279:                         floor(((real8) (*((integer8 *) (*s_objet_argument_2)
 6280:                         .objet))) / (*((real8 *)
 6281:                         (*s_objet_argument_1).objet))));
 6282:             }
 6283:             else
 6284:             {
 6285:                 if ((s_objet_resultat = allocation(s_etat_processus, REL))
 6286:                         == NULL)
 6287:                 {
 6288:                     (*s_etat_processus).erreur_systeme =
 6289:                             d_es_allocation_memoire;
 6290:                     return;
 6291:                 }
 6292: 
 6293:                 (*((real8 *) (*s_objet_resultat).objet)) =
 6294:                         (*((real8 *) (*s_objet_argument_2).objet)) -
 6295:                         ((*((real8 *) (*s_objet_argument_1).objet)) *
 6296:                         floor((*((real8 *) (*s_objet_argument_2)
 6297:                         .objet)) / (*((real8 *)
 6298:                         (*s_objet_argument_1).objet))));
 6299:             }
 6300:         }
 6301:     }
 6302: 
 6303: /*
 6304: --------------------------------------------------------------------------------
 6305:   MOD portant sur des vecteurs
 6306: --------------------------------------------------------------------------------
 6307: */
 6308: 
 6309:     else if ((((*s_objet_argument_1).type == INT) ||
 6310:             ((*s_objet_argument_1).type == REL)) &&
 6311:             (((*s_objet_argument_2).type == VIN) ||
 6312:             ((*s_objet_argument_2).type == VRL)))
 6313:     {
 6314:         if ((*s_objet_argument_1).type == INT)
 6315:         {
 6316:             if ((*s_objet_argument_2).type == VIN)
 6317:             {
 6318:                 if ((s_objet_resultat = allocation(s_etat_processus, VIN))
 6319:                         == NULL)
 6320:                 {
 6321:                     (*s_etat_processus).erreur_systeme =
 6322:                             d_es_allocation_memoire;
 6323:                     return;
 6324:                 }
 6325: 
 6326:                 (*((struct_vecteur *) (*s_objet_resultat).objet)).taille =
 6327:                         (*((struct_vecteur *) (*s_objet_argument_2).objet))
 6328:                         .taille;
 6329: 
 6330:                 if (((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau =
 6331:                         malloc((*((struct_vecteur *) (*s_objet_resultat).objet))
 6332:                         .taille * sizeof(integer8))) == NULL)
 6333:                 {
 6334:                     (*s_etat_processus).erreur_systeme =
 6335:                             d_es_allocation_memoire;
 6336:                     return;
 6337:                 }
 6338: 
 6339:                 for(i = 0; i < (*((struct_vecteur *) (*s_objet_resultat).objet))
 6340:                         .taille; i++)
 6341:                 {
 6342:                     ((integer8 *) (*((struct_vecteur *) (*s_objet_resultat)
 6343:                             .objet)).tableau)[i] = ((integer8 *)
 6344:                             (*((struct_vecteur *) (*s_objet_argument_2).objet))
 6345:                             .tableau)[i] - ((*((integer8 *)
 6346:                             (*s_objet_argument_1).objet)) * floor(((real8)
 6347:                             ((integer8 *) (*((struct_vecteur *) 
 6348:                             (*s_objet_argument_2).objet)).tableau)[i]) /
 6349:                             ((real8) (*((integer8 *) (*s_objet_argument_1)
 6350:                             .objet)))));
 6351:                 }
 6352:             }
 6353:             else
 6354:             {
 6355:                 if ((s_objet_resultat = allocation(s_etat_processus, VRL))
 6356:                         == NULL)
 6357:                 {
 6358:                     (*s_etat_processus).erreur_systeme =
 6359:                             d_es_allocation_memoire;
 6360:                     return;
 6361:                 }
 6362: 
 6363:                 (*((struct_vecteur *) (*s_objet_resultat).objet)).taille =
 6364:                         (*((struct_vecteur *) (*s_objet_argument_2).objet))
 6365:                         .taille;
 6366: 
 6367:                 if (((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau =
 6368:                         malloc((*((struct_vecteur *) (*s_objet_resultat).objet))
 6369:                         .taille * sizeof(real8))) == NULL)
 6370:                 {
 6371:                     (*s_etat_processus).erreur_systeme =
 6372:                             d_es_allocation_memoire;
 6373:                     return;
 6374:                 }
 6375: 
 6376:                 for(i = 0; i < (*((struct_vecteur *) (*s_objet_resultat).objet))
 6377:                         .taille; i++)
 6378:                 {
 6379:                     ((real8 *) (*((struct_vecteur *) (*s_objet_resultat)
 6380:                             .objet)).tableau)[i] = ((real8 *)
 6381:                             (*((struct_vecteur *) (*s_objet_argument_2).objet))
 6382:                             .tableau)[i] - ((*((integer8 *)
 6383:                             (*s_objet_argument_1).objet)) * floor(
 6384:                             ((real8 *) (*((struct_vecteur *) 
 6385:                             (*s_objet_argument_2).objet)).tableau)[i] /
 6386:                             ((real8) (*((integer8 *) (*s_objet_argument_1)
 6387:                             .objet)))));
 6388:                 }
 6389:             }
 6390:         }
 6391:         else
 6392:         {
 6393:             if ((*s_objet_argument_2).type == VIN)
 6394:             {
 6395:                 if ((s_objet_resultat = allocation(s_etat_processus, VRL))
 6396:                         == NULL)
 6397:                 {
 6398:                     (*s_etat_processus).erreur_systeme =
 6399:                             d_es_allocation_memoire;
 6400:                     return;
 6401:                 }
 6402: 
 6403:                 (*((struct_vecteur *) (*s_objet_resultat).objet)).taille =
 6404:                         (*((struct_vecteur *) (*s_objet_argument_2).objet))
 6405:                         .taille;
 6406: 
 6407:                 if (((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau =
 6408:                         malloc((*((struct_vecteur *) (*s_objet_resultat).objet))
 6409:                         .taille * sizeof(real8))) == NULL)
 6410:                 {
 6411:                     (*s_etat_processus).erreur_systeme =
 6412:                             d_es_allocation_memoire;
 6413:                     return;
 6414:                 }
 6415: 
 6416:                 for(i = 0; i < (*((struct_vecteur *) (*s_objet_resultat).objet))
 6417:                         .taille; i++)
 6418:                 {
 6419:                     ((real8 *) (*((struct_vecteur *) (*s_objet_resultat)
 6420:                             .objet)).tableau)[i] = ((integer8 *)
 6421:                             (*((struct_vecteur *) (*s_objet_argument_2).objet))
 6422:                             .tableau)[i] - ((*((real8 *)
 6423:                             (*s_objet_argument_1).objet)) * floor(((real8)
 6424:                             ((integer8 *) (*((struct_vecteur *) 
 6425:                             (*s_objet_argument_2).objet)).tableau)[i]) /
 6426:                             (*((real8 *) (*s_objet_argument_1)
 6427:                             .objet))));
 6428:                 }
 6429:             }
 6430:             else
 6431:             {
 6432:                 if ((s_objet_resultat = allocation(s_etat_processus, VRL))
 6433:                         == NULL)
 6434:                 {
 6435:                     (*s_etat_processus).erreur_systeme =
 6436:                             d_es_allocation_memoire;
 6437:                     return;
 6438:                 }
 6439: 
 6440:                 (*((struct_vecteur *) (*s_objet_resultat).objet)).taille =
 6441:                         (*((struct_vecteur *) (*s_objet_argument_2).objet))
 6442:                         .taille;
 6443: 
 6444:                 if (((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau =
 6445:                         malloc((*((struct_vecteur *) (*s_objet_resultat).objet))
 6446:                         .taille * sizeof(real8))) == NULL)
 6447:                 {
 6448:                     (*s_etat_processus).erreur_systeme =
 6449:                             d_es_allocation_memoire;
 6450:                     return;
 6451:                 }
 6452: 
 6453:                 for(i = 0; i < (*((struct_vecteur *) (*s_objet_resultat).objet))
 6454:                         .taille; i++)
 6455:                 {
 6456:                     ((real8 *) (*((struct_vecteur *) (*s_objet_resultat)
 6457:                             .objet)).tableau)[i] = ((real8 *)
 6458:                             (*((struct_vecteur *) (*s_objet_argument_2).objet))
 6459:                             .tableau)[i] - ((*((real8 *)
 6460:                             (*s_objet_argument_1).objet)) * floor(
 6461:                             ((real8 *) (*((struct_vecteur *) 
 6462:                             (*s_objet_argument_2).objet)).tableau)[i] /
 6463:                             (*((real8 *) (*s_objet_argument_1)
 6464:                             .objet))));
 6465:                 }
 6466:             }
 6467:         }
 6468:     }
 6469: 
 6470: /*
 6471: --------------------------------------------------------------------------------
 6472:   MOD portant sur des matrices
 6473: --------------------------------------------------------------------------------
 6474: */
 6475: 
 6476:     else if ((((*s_objet_argument_1).type == INT) ||
 6477:             ((*s_objet_argument_1).type == REL)) &&
 6478:             (((*s_objet_argument_2).type == MIN) ||
 6479:             ((*s_objet_argument_2).type == MRL)))
 6480:     {
 6481:         if ((*s_objet_argument_1).type == INT)
 6482:         {
 6483:             if ((*s_objet_argument_2).type == MIN)
 6484:             {
 6485:                 if ((s_objet_resultat = allocation(s_etat_processus, MIN))
 6486:                         == NULL)
 6487:                 {
 6488:                     (*s_etat_processus).erreur_systeme =
 6489:                             d_es_allocation_memoire;
 6490:                     return;
 6491:                 }
 6492: 
 6493:                 (*((struct_matrice *) (*s_objet_resultat).objet))
 6494:                         .nombre_lignes = (*((struct_matrice *)
 6495:                         (*s_objet_argument_2).objet)).nombre_lignes;
 6496:                 (*((struct_matrice *) (*s_objet_resultat).objet))
 6497:                         .nombre_colonnes = (*((struct_matrice *)
 6498:                         (*s_objet_argument_2).objet)).nombre_colonnes;
 6499: 
 6500:                 if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau =
 6501:                         malloc((*((struct_matrice *) (*s_objet_resultat).objet))
 6502:                         .nombre_lignes * sizeof(integer8 *))) == NULL)
 6503:                 {
 6504:                     (*s_etat_processus).erreur_systeme =
 6505:                             d_es_allocation_memoire;
 6506:                     return;
 6507:                 }
 6508: 
 6509:                 for(i = 0; i < (*((struct_matrice *) (*s_objet_resultat).objet))
 6510:                         .nombre_lignes; i++)
 6511:                 {
 6512:                     if ((((integer8 **) (*((struct_matrice *)
 6513:                             (*s_objet_resultat).objet)).tableau)[i] =
 6514:                             malloc((*((struct_matrice *) (*s_objet_resultat)
 6515:                             .objet)).nombre_colonnes * sizeof(integer8)))
 6516:                             == NULL)
 6517:                     {
 6518:                         (*s_etat_processus).erreur_systeme =
 6519:                                 d_es_allocation_memoire;
 6520:                         return;
 6521:                     }
 6522: 
 6523:                     for(j = 0; j < (*((struct_matrice *) (*s_objet_resultat)
 6524:                             .objet)).nombre_colonnes; j++)
 6525:                     {
 6526:                         ((integer8 **) (*((struct_matrice *) (*s_objet_resultat)
 6527:                                 .objet)).tableau)[i][j] = ((integer8 **)
 6528:                                 (*((struct_matrice *) (*s_objet_argument_2)
 6529:                                 .objet)).tableau)[i][j] - ((*((integer8 *)
 6530:                                 (*s_objet_argument_1).objet)) * floor(((real8)
 6531:                                 ((integer8 **) (*((struct_matrice *) 
 6532:                                 (*s_objet_argument_2).objet)).tableau)[i][j]) /
 6533:                                 ((real8) (*((integer8 *) (*s_objet_argument_1)
 6534:                                 .objet)))));
 6535:                     }
 6536:                 }
 6537:             }
 6538:             else
 6539:             {
 6540:                 if ((s_objet_resultat = allocation(s_etat_processus, MRL))
 6541:                         == NULL)
 6542:                 {
 6543:                     (*s_etat_processus).erreur_systeme =
 6544:                             d_es_allocation_memoire;
 6545:                     return;
 6546:                 }
 6547: 
 6548:                 (*((struct_matrice *) (*s_objet_resultat).objet))
 6549:                         .nombre_lignes = (*((struct_matrice *)
 6550:                         (*s_objet_argument_2).objet)).nombre_lignes;
 6551:                 (*((struct_matrice *) (*s_objet_resultat).objet))
 6552:                         .nombre_colonnes = (*((struct_matrice *)
 6553:                         (*s_objet_argument_2).objet)).nombre_colonnes;
 6554: 
 6555:                 if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau =
 6556:                         malloc((*((struct_matrice *) (*s_objet_resultat).objet))
 6557:                         .nombre_lignes * sizeof(real8 *))) == NULL)
 6558:                 {
 6559:                     (*s_etat_processus).erreur_systeme =
 6560:                             d_es_allocation_memoire;
 6561:                     return;
 6562:                 }
 6563: 
 6564:                 for(i = 0; i < (*((struct_matrice *) (*s_objet_resultat).objet))
 6565:                         .nombre_lignes; i++)
 6566:                 {
 6567:                     if ((((real8 **) (*((struct_matrice *)
 6568:                             (*s_objet_resultat).objet)).tableau)[i] =
 6569:                             malloc((*((struct_matrice *) (*s_objet_resultat)
 6570:                             .objet)).nombre_colonnes * sizeof(real8)))
 6571:                             == NULL)
 6572:                     {
 6573:                         (*s_etat_processus).erreur_systeme =
 6574:                                 d_es_allocation_memoire;
 6575:                         return;
 6576:                     }
 6577: 
 6578:                     for(j = 0; j < (*((struct_matrice *) (*s_objet_resultat)
 6579:                             .objet)).nombre_colonnes; j++)
 6580:                     {
 6581:                         ((real8 **) (*((struct_matrice *) (*s_objet_resultat)
 6582:                                 .objet)).tableau)[i][j] = ((real8 **)
 6583:                                 (*((struct_matrice *) (*s_objet_argument_2)
 6584:                                 .objet)).tableau)[i][j] - ((*((integer8 *)
 6585:                                 (*s_objet_argument_1).objet)) * floor(
 6586:                                 ((real8 **) (*((struct_matrice *) 
 6587:                                 (*s_objet_argument_2).objet)).tableau)[i][j] /
 6588:                                 ((real8) (*((integer8 *) (*s_objet_argument_1)
 6589:                                 .objet)))));
 6590:                     }
 6591:                 }
 6592:             }
 6593:         }
 6594:         else
 6595:         {
 6596:             if ((*s_objet_argument_2).type == MIN)
 6597:             {
 6598:                 if ((s_objet_resultat = allocation(s_etat_processus, MRL))
 6599:                         == NULL)
 6600:                 {
 6601:                     (*s_etat_processus).erreur_systeme =
 6602:                             d_es_allocation_memoire;
 6603:                     return;
 6604:                 }
 6605: 
 6606:                 (*((struct_matrice *) (*s_objet_resultat).objet))
 6607:                         .nombre_lignes = (*((struct_matrice *)
 6608:                         (*s_objet_argument_2).objet)).nombre_lignes;
 6609:                 (*((struct_matrice *) (*s_objet_resultat).objet))
 6610:                         .nombre_colonnes = (*((struct_matrice *)
 6611:                         (*s_objet_argument_2).objet)).nombre_colonnes;
 6612: 
 6613:                 if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau =
 6614:                         malloc((*((struct_matrice *) (*s_objet_resultat).objet))
 6615:                         .nombre_lignes * sizeof(real8 *))) == NULL)
 6616:                 {
 6617:                     (*s_etat_processus).erreur_systeme =
 6618:                             d_es_allocation_memoire;
 6619:                     return;
 6620:                 }
 6621: 
 6622:                 for(i = 0; i < (*((struct_matrice *) (*s_objet_resultat).objet))
 6623:                         .nombre_lignes; i++)
 6624:                 {
 6625:                     if ((((real8 **) (*((struct_matrice *)
 6626:                             (*s_objet_resultat).objet)).tableau)[i] =
 6627:                             malloc((*((struct_matrice *) (*s_objet_resultat)
 6628:                             .objet)).nombre_colonnes * sizeof(real8)))
 6629:                             == NULL)
 6630:                     {
 6631:                         (*s_etat_processus).erreur_systeme =
 6632:                                 d_es_allocation_memoire;
 6633:                         return;
 6634:                     }
 6635: 
 6636:                     for(j = 0; j < (*((struct_matrice *) (*s_objet_resultat)
 6637:                             .objet)).nombre_colonnes; j++)
 6638:                     {
 6639:                         ((real8 **) (*((struct_matrice *) (*s_objet_resultat)
 6640:                                 .objet)).tableau)[i][j] = ((integer8 **)
 6641:                                 (*((struct_matrice *) (*s_objet_argument_2)
 6642:                                 .objet)).tableau)[i][j] - ((*((real8 *)
 6643:                                 (*s_objet_argument_1).objet)) * floor(((real8)
 6644:                                 ((integer8 **) (*((struct_matrice *) 
 6645:                                 (*s_objet_argument_2).objet)).tableau)[i][j]) /
 6646:                                 (*((real8 *) (*s_objet_argument_1)
 6647:                                 .objet))));
 6648:                     }
 6649:                 }
 6650:             }
 6651:             else
 6652:             {
 6653:                 if ((s_objet_resultat = allocation(s_etat_processus, MRL))
 6654:                         == NULL)
 6655:                 {
 6656:                     (*s_etat_processus).erreur_systeme =
 6657:                             d_es_allocation_memoire;
 6658:                     return;
 6659:                 }
 6660: 
 6661:                 (*((struct_matrice *) (*s_objet_resultat).objet))
 6662:                         .nombre_lignes = (*((struct_matrice *)
 6663:                         (*s_objet_argument_2).objet)).nombre_lignes;
 6664:                 (*((struct_matrice *) (*s_objet_resultat).objet))
 6665:                         .nombre_colonnes = (*((struct_matrice *)
 6666:                         (*s_objet_argument_2).objet)).nombre_colonnes;
 6667: 
 6668:                 if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau =
 6669:                         malloc((*((struct_matrice *) (*s_objet_resultat).objet))
 6670:                         .nombre_lignes * sizeof(real8 *))) == NULL)
 6671:                 {
 6672:                     (*s_etat_processus).erreur_systeme =
 6673:                             d_es_allocation_memoire;
 6674:                     return;
 6675:                 }
 6676: 
 6677:                 for(i = 0; i < (*((struct_matrice *) (*s_objet_resultat).objet))
 6678:                         .nombre_lignes; i++)
 6679:                 {
 6680:                     if ((((real8 **) (*((struct_matrice *)
 6681:                             (*s_objet_resultat).objet)).tableau)[i] =
 6682:                             malloc((*((struct_matrice *) (*s_objet_resultat)
 6683:                             .objet)).nombre_colonnes * sizeof(real8)))
 6684:                             == NULL)
 6685:                     {
 6686:                         (*s_etat_processus).erreur_systeme =
 6687:                                 d_es_allocation_memoire;
 6688:                         return;
 6689:                     }
 6690: 
 6691:                     for(j = 0; j < (*((struct_matrice *) (*s_objet_resultat)
 6692:                             .objet)).nombre_colonnes; j++)
 6693:                     {
 6694:                         ((real8 **) (*((struct_matrice *) (*s_objet_resultat)
 6695:                                 .objet)).tableau)[i][j] = ((real8 **)
 6696:                                 (*((struct_matrice *) (*s_objet_argument_2)
 6697:                                 .objet)).tableau)[i][j] - ((*((real8 *)
 6698:                                 (*s_objet_argument_1).objet)) * floor(
 6699:                                 ((real8 **) (*((struct_matrice *) 
 6700:                                 (*s_objet_argument_2).objet)).tableau)[i][j] /
 6701:                                 (*((real8 *) (*s_objet_argument_1)
 6702:                                 .objet))));
 6703:                     }
 6704:                 }
 6705:             }
 6706:         }
 6707:     }
 6708: 
 6709: /*
 6710: --------------------------------------------------------------------------------
 6711:    MOD entre des arguments complexes
 6712: --------------------------------------------------------------------------------
 6713: */
 6714: 
 6715:     /*
 6716:      * Nom ou valeur numérique / Nom ou valeur numérique
 6717:      */
 6718: 
 6719:     else if ((((*s_objet_argument_1).type == NOM) &&
 6720:             (((*s_objet_argument_2).type == NOM) ||
 6721:             ((*s_objet_argument_2).type == INT) ||
 6722:             ((*s_objet_argument_2).type == REL))) ||
 6723:             (((*s_objet_argument_2).type == NOM) &&
 6724:             (((*s_objet_argument_1).type == INT) ||
 6725:             ((*s_objet_argument_1).type == REL))))
 6726:     {
 6727:         if ((s_objet_resultat = allocation(s_etat_processus, ALG)) == NULL)
 6728:         {
 6729:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 6730:             return;
 6731:         }
 6732: 
 6733:         if (((*s_objet_resultat).objet =
 6734:                 allocation_maillon(s_etat_processus)) == NULL)
 6735:         {
 6736:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 6737:             return;
 6738:         }
 6739: 
 6740:         l_element_courant = (*s_objet_resultat).objet;
 6741: 
 6742:         if (((*l_element_courant).donnee = allocation(s_etat_processus, FCT))
 6743:                 == NULL)
 6744:         {
 6745:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 6746:             return;
 6747:         }
 6748: 
 6749:         (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 6750:                 .nombre_arguments = 0;
 6751:         (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 6752:                 .fonction = instruction_vers_niveau_superieur;
 6753: 
 6754:         if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 6755:                 .nom_fonction = malloc(3 * sizeof(unsigned char))) == NULL)
 6756:         {
 6757:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 6758:             return;
 6759:         }
 6760: 
 6761:         strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 6762:                 .nom_fonction, "<<");
 6763: 
 6764:         if (((*l_element_courant).suivant =
 6765:                 allocation_maillon(s_etat_processus)) == NULL)
 6766:         {
 6767:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 6768:             return;
 6769:         }
 6770: 
 6771:         l_element_courant = (*l_element_courant).suivant;
 6772:         (*l_element_courant).donnee = s_objet_argument_2;
 6773: 
 6774:         if (((*l_element_courant).suivant =
 6775:                 allocation_maillon(s_etat_processus)) == NULL)
 6776:         {
 6777:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 6778:             return;
 6779:         }
 6780: 
 6781:         l_element_courant = (*l_element_courant).suivant;
 6782:         (*l_element_courant).donnee = s_objet_argument_1;
 6783: 
 6784:         if (((*l_element_courant).suivant =
 6785:                 allocation_maillon(s_etat_processus)) == NULL)
 6786:         {
 6787:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 6788:             return;
 6789:         }
 6790: 
 6791:         l_element_courant = (*l_element_courant).suivant;
 6792: 
 6793:         if (((*l_element_courant).donnee = allocation(s_etat_processus, FCT))
 6794:                 == NULL)
 6795:         {
 6796:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 6797:             return;
 6798:         }
 6799: 
 6800:         (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 6801:                 .nombre_arguments = 2;
 6802:         (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 6803:                 .fonction = instruction_mod;
 6804: 
 6805:         if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 6806:                 .nom_fonction = malloc(4 * sizeof(unsigned char))) == NULL)
 6807:         {
 6808:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 6809:             return;
 6810:         }
 6811: 
 6812:         strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 6813:                 .nom_fonction, "MOD");
 6814: 
 6815:         if (((*l_element_courant).suivant =
 6816:                 allocation_maillon(s_etat_processus)) == NULL)
 6817:         {
 6818:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 6819:             return;
 6820:         }
 6821: 
 6822:         l_element_courant = (*l_element_courant).suivant;
 6823: 
 6824:         if (((*l_element_courant).donnee = allocation(s_etat_processus, FCT))
 6825:                 == NULL)
 6826:         {
 6827:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 6828:             return;
 6829:         }
 6830: 
 6831:         (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 6832:                 .nombre_arguments = 0;
 6833:         (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 6834:                 .fonction = instruction_vers_niveau_inferieur;
 6835: 
 6836:         if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 6837:                 .nom_fonction = malloc(3 * sizeof(unsigned char))) == NULL)
 6838:         {
 6839:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 6840:             return;
 6841:         }
 6842: 
 6843:         strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 6844:                 .nom_fonction, ">>");
 6845: 
 6846:         (*l_element_courant).suivant = NULL;
 6847: 
 6848:         s_objet_argument_1 = NULL;
 6849:         s_objet_argument_2 = NULL;
 6850:     }
 6851: 
 6852:     /*
 6853:      * Nom ou valeur numérique / Expression
 6854:      */
 6855: 
 6856:     else if (((((*s_objet_argument_1).type == ALG) ||
 6857:             ((*s_objet_argument_1).type == RPN))) &&
 6858:             (((*s_objet_argument_2).type == NOM) ||
 6859:             ((*s_objet_argument_2).type == INT) ||
 6860:             ((*s_objet_argument_2).type == REL)))
 6861:     {
 6862:         nombre_elements = 0;
 6863:         l_element_courant = (struct_liste_chainee *)
 6864:                 (*s_objet_argument_1).objet;
 6865: 
 6866:         while(l_element_courant != NULL)
 6867:         {
 6868:             nombre_elements++;
 6869:             l_element_courant = (*l_element_courant).suivant;
 6870:         }
 6871: 
 6872:         if (nombre_elements == 2)
 6873:         {
 6874:             liberation(s_etat_processus, s_objet_argument_1);
 6875:             liberation(s_etat_processus, s_objet_argument_2);
 6876: 
 6877:             (*s_etat_processus).erreur_execution = d_ex_argument_invalide;
 6878:             return;
 6879:         }
 6880: 
 6881:         if ((s_objet_resultat = copie_objet(s_etat_processus,
 6882:                 s_objet_argument_1, 'N')) == NULL)
 6883:         {
 6884:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 6885:             return;
 6886:         }
 6887: 
 6888:         l_element_courant = (struct_liste_chainee *)
 6889:                 (*s_objet_resultat).objet;
 6890:         l_element_precedent = l_element_courant;
 6891:         l_element_courant = (*l_element_courant).suivant;
 6892: 
 6893:         if (((*l_element_precedent).suivant =
 6894:                 allocation_maillon(s_etat_processus)) == NULL)
 6895:         {
 6896:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 6897:             return;
 6898:         }
 6899: 
 6900:         (*(*l_element_precedent).suivant).donnee = s_objet_argument_2;
 6901:         (*(*l_element_precedent).suivant).suivant = l_element_courant;
 6902: 
 6903:         while((*l_element_courant).suivant != NULL)
 6904:         {
 6905:             l_element_precedent = l_element_courant;
 6906:             l_element_courant = (*l_element_courant).suivant;
 6907:         }
 6908: 
 6909:         if (((*l_element_precedent).suivant =
 6910:                 allocation_maillon(s_etat_processus)) == NULL)
 6911:         {
 6912:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 6913:             return;
 6914:         }
 6915: 
 6916:         if (((*(*l_element_precedent).suivant).donnee =
 6917:                 allocation(s_etat_processus, FCT)) == NULL)
 6918:         {
 6919:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 6920:             return;
 6921:         }
 6922: 
 6923:         (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
 6924:                 .donnee).objet)).nombre_arguments = 2;
 6925:         (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
 6926:                 .donnee).objet)).fonction = instruction_mod;
 6927: 
 6928:         if (((*((struct_fonction *) (*(*(*l_element_precedent)
 6929:                 .suivant).donnee).objet)).nom_fonction =
 6930:                 malloc(4 * sizeof(unsigned char))) == NULL)
 6931:         {
 6932:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 6933:             return;
 6934:         }
 6935: 
 6936:         strcpy((*((struct_fonction *) (*(*(*l_element_precedent)
 6937:                 .suivant).donnee).objet)).nom_fonction, "MOD");
 6938: 
 6939:         (*(*l_element_precedent).suivant).suivant = l_element_courant;
 6940: 
 6941:         s_objet_argument_2 = NULL;
 6942:     }
 6943: 
 6944:     /*
 6945:      * Expression / Nom ou valeur numérique
 6946:      */
 6947: 
 6948:     else if ((((*s_objet_argument_1).type == NOM) ||
 6949:             ((*s_objet_argument_1).type == INT) ||
 6950:             ((*s_objet_argument_1).type == REL)) &&
 6951:             ((((*s_objet_argument_2).type == ALG) ||
 6952:             ((*s_objet_argument_2).type == RPN))))
 6953:     {
 6954:         nombre_elements = 0;
 6955:         l_element_courant = (struct_liste_chainee *)
 6956:                 (*s_objet_argument_2).objet;
 6957: 
 6958:         while(l_element_courant != NULL)
 6959:         {
 6960:             nombre_elements++;
 6961:             l_element_courant = (*l_element_courant).suivant;
 6962:         }
 6963: 
 6964:         if (nombre_elements == 2)
 6965:         {
 6966:             liberation(s_etat_processus, s_objet_argument_1);
 6967:             liberation(s_etat_processus, s_objet_argument_2);
 6968: 
 6969:             (*s_etat_processus).erreur_execution = d_ex_argument_invalide;
 6970:             return;
 6971:         }
 6972: 
 6973:         if ((s_objet_resultat = copie_objet(s_etat_processus,
 6974:                 s_objet_argument_2, 'N')) == NULL)
 6975:         {
 6976:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 6977:             return;
 6978:         }
 6979: 
 6980:         l_element_courant = (struct_liste_chainee *)
 6981:                 (*s_objet_resultat).objet;
 6982:         l_element_precedent = l_element_courant;
 6983: 
 6984:         while((*l_element_courant).suivant != NULL)
 6985:         {
 6986:             l_element_precedent = l_element_courant;
 6987:             l_element_courant = (*l_element_courant).suivant;
 6988:         }
 6989: 
 6990:         if (((*l_element_precedent).suivant =
 6991:                 allocation_maillon(s_etat_processus)) == NULL)
 6992:         {
 6993:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 6994:             return;
 6995:         }
 6996: 
 6997:         (*(*l_element_precedent).suivant).donnee = s_objet_argument_1;
 6998:         l_element_precedent = (*l_element_precedent).suivant;
 6999: 
 7000:         if (((*l_element_precedent).suivant =
 7001:                 allocation_maillon(s_etat_processus)) == NULL)
 7002:         {
 7003:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 7004:             return;
 7005:         }
 7006: 
 7007:         if (((*(*l_element_precedent).suivant).donnee =
 7008:                 allocation(s_etat_processus, FCT)) == NULL)
 7009:         {
 7010:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 7011:             return;
 7012:         }
 7013: 
 7014:         (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
 7015:                 .donnee).objet)).nombre_arguments = 2;
 7016:         (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
 7017:                 .donnee).objet)).fonction = instruction_mod;
 7018: 
 7019:         if (((*((struct_fonction *) (*(*(*l_element_precedent)
 7020:                 .suivant).donnee).objet)).nom_fonction =
 7021:                 malloc(4 * sizeof(unsigned char))) == NULL)
 7022:         {
 7023:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 7024:             return;
 7025:         }
 7026: 
 7027:         strcpy((*((struct_fonction *) (*(*(*l_element_precedent)
 7028:                 .suivant).donnee).objet)).nom_fonction, "MOD");
 7029: 
 7030:         (*(*l_element_precedent).suivant).suivant = l_element_courant;
 7031: 
 7032:         s_objet_argument_1 = NULL;
 7033:     }
 7034: 
 7035:     /*
 7036:      * Expression / Expression
 7037:      */
 7038: 
 7039:     else if ((((*s_objet_argument_1).type == ALG) &&
 7040:             ((*s_objet_argument_2).type == ALG)) ||
 7041:             (((*s_objet_argument_1).type == RPN) &&
 7042:             ((*s_objet_argument_2).type == RPN)))
 7043:     {
 7044:         nombre_elements = 0;
 7045:         l_element_courant = (struct_liste_chainee *)
 7046:                 (*s_objet_argument_1).objet;
 7047: 
 7048:         while(l_element_courant != NULL)
 7049:         {
 7050:             nombre_elements++;
 7051:             l_element_courant = (*l_element_courant).suivant;
 7052:         }
 7053: 
 7054:         if (nombre_elements == 2)
 7055:         {
 7056:             liberation(s_etat_processus, s_objet_argument_1);
 7057:             liberation(s_etat_processus, s_objet_argument_2);
 7058: 
 7059:             (*s_etat_processus).erreur_execution = d_ex_argument_invalide;
 7060:             return;
 7061:         }
 7062: 
 7063:         nombre_elements = 0;
 7064:         l_element_courant = (struct_liste_chainee *)
 7065:                 (*s_objet_argument_2).objet;
 7066: 
 7067:         while(l_element_courant != NULL)
 7068:         {
 7069:             nombre_elements++;
 7070:             l_element_courant = (*l_element_courant).suivant;
 7071:         }
 7072: 
 7073:         if (nombre_elements == 2)
 7074:         {
 7075:             liberation(s_etat_processus, s_objet_argument_1);
 7076:             liberation(s_etat_processus, s_objet_argument_2);
 7077: 
 7078:             (*s_etat_processus).erreur_execution = d_ex_argument_invalide;
 7079:             return;
 7080:         }
 7081: 
 7082:         if ((s_copie_argument_1 = copie_objet(s_etat_processus,
 7083:                 s_objet_argument_1, 'N')) == NULL)
 7084:         {
 7085:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 7086:             return;
 7087:         }
 7088: 
 7089:         if ((s_copie_argument_2 = copie_objet(s_etat_processus,
 7090:                 s_objet_argument_2, 'N')) == NULL)
 7091:         {
 7092:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 7093:             return;
 7094:         }
 7095: 
 7096:         l_element_courant = (struct_liste_chainee *)
 7097:                 (*s_copie_argument_1).objet;
 7098:         (*s_copie_argument_1).objet = (void *) (*((struct_liste_chainee *)
 7099:                 (*s_copie_argument_1).objet)).suivant;
 7100: 
 7101:         liberation(s_etat_processus, (*l_element_courant).donnee);
 7102:         free(l_element_courant);
 7103: 
 7104:         l_element_courant = (struct_liste_chainee *)
 7105:                 (*s_copie_argument_2).objet;
 7106:         l_element_precedent = l_element_courant;
 7107:         s_objet_resultat = s_copie_argument_2;
 7108: 
 7109:         while((*l_element_courant).suivant != NULL)
 7110:         {
 7111:             l_element_precedent = l_element_courant;
 7112:             l_element_courant = (*l_element_courant).suivant;
 7113:         }
 7114: 
 7115:         liberation(s_etat_processus, (*l_element_courant).donnee);
 7116:         free(l_element_courant);
 7117: 
 7118:         (*l_element_precedent).suivant = (struct_liste_chainee *)
 7119:                 (*s_copie_argument_1).objet;
 7120:         free(s_copie_argument_1);
 7121: 
 7122:         l_element_courant = (*l_element_precedent).suivant;
 7123:         while((*l_element_courant).suivant != NULL)
 7124:         {
 7125:             l_element_precedent = l_element_courant;
 7126:             l_element_courant = (*l_element_courant).suivant;
 7127:         }
 7128: 
 7129:         if (((*l_element_precedent).suivant =
 7130:                 allocation_maillon(s_etat_processus)) == NULL)
 7131:         {
 7132:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 7133:             return;
 7134:         }
 7135: 
 7136:         (*(*l_element_precedent).suivant).suivant = l_element_courant;
 7137:         l_element_courant = (*l_element_precedent).suivant;
 7138: 
 7139:         if (((*l_element_courant).donnee = allocation(s_etat_processus, FCT))
 7140:                 == NULL)
 7141:         {
 7142:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 7143:             return;
 7144:         }
 7145: 
 7146:         (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 7147:                 .nombre_arguments = 2;
 7148:         (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 7149:                 .fonction = instruction_mod;
 7150: 
 7151:         if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 7152:                 .nom_fonction = malloc(4 * sizeof(unsigned char))) == NULL)
 7153:         {
 7154:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 7155:             return;
 7156:         }
 7157: 
 7158:         strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
 7159:                 .nom_fonction, "MOD");
 7160:     }
 7161: 
 7162: /*
 7163: --------------------------------------------------------------------------------
 7164:   Arguments incorrects
 7165: --------------------------------------------------------------------------------
 7166: */
 7167: 
 7168:     else
 7169:     {
 7170:         liberation(s_etat_processus, s_objet_argument_1);
 7171:         liberation(s_etat_processus, s_objet_argument_2);
 7172: 
 7173:         (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
 7174:         return;
 7175:     }
 7176: 
 7177:     if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
 7178:             s_objet_resultat) == d_erreur)
 7179:     {
 7180:         return;
 7181:     }
 7182: 
 7183:     liberation(s_etat_processus, s_objet_argument_1);
 7184:     liberation(s_etat_processus, s_objet_argument_2);
 7185: 
 7186:     return;
 7187: }
 7188: 
 7189: // vim: ts=4

CVSweb interface <joel.bertrand@systella.fr>