File:  [local] / rpl / src / instructions_s7.c
Revision 1.11: download - view: text, annotated - select for diffs - revision graph
Fri Aug 6 15:26:50 2010 UTC (13 years, 8 months ago) by bertrand
Branches: MAIN
CVS tags: HEAD
Ajout du support pour OS/2.

    1: /*
    2: ================================================================================
    3:   RPL/2 (R) version 4.0.18
    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 'slice'
   29: ================================================================================
   30:   Entrées :
   31: --------------------------------------------------------------------------------
   32:   Sorties :
   33: --------------------------------------------------------------------------------
   34:   Effets de bord : néant
   35: ================================================================================
   36: */
   37: 
   38: void
   39: instruction_slice(struct_processus *s_etat_processus)
   40: {
   41:     (*s_etat_processus).erreur_execution = d_ex;
   42: 
   43:     if ((*s_etat_processus).affichage_arguments == 'Y')
   44:     {
   45:         printf("\n  SLICE ");
   46: 
   47:         if ((*s_etat_processus).langue == 'F')
   48:         {
   49:             printf("(graphique tridimensionnel avec courbes de niveau)\n\n");
   50:             printf("  Aucun argument\n");
   51:         }
   52:         else
   53:         {
   54:             printf("(3D graph with contour lines)\n\n");
   55:             printf("  No argument\n");
   56:         }
   57: 
   58:         return;
   59:     }
   60:     else if ((*s_etat_processus).test_instruction == 'Y')
   61:     {
   62:         (*s_etat_processus).nombre_arguments = -1;
   63:         return;
   64:     }
   65: 
   66: #   ifndef GNUPLOT_SUPPORT
   67:         if ((*s_etat_processus).langue == 'F')
   68:         {
   69:             printf("+++Attention : Support de GnuPlot non compilé !\n");
   70:         }
   71:         else
   72:         {
   73:             printf("+++Warning : GnuPlot not available !\n");
   74:         }
   75: 
   76:         fflush(stdout);
   77: 
   78:         return;
   79: #   endif
   80: 
   81:     strcpy((*s_etat_processus).type_trace_eq, "COURBES DE NIVEAU");
   82: 
   83:     return;
   84: }
   85: 
   86: 
   87: /*
   88: ================================================================================
   89:   Fonction 'slicescale'
   90: ================================================================================
   91:   Entrées :
   92: --------------------------------------------------------------------------------
   93:   Sorties :
   94: --------------------------------------------------------------------------------
   95:   Effets de bord : néant
   96: ================================================================================
   97: */
   98: 
   99: void
  100: instruction_slicescale(struct_processus *s_etat_processus)
  101: {
  102:     int                         automatique;
  103:     int                         discret;
  104:     int                         incremental;
  105: 
  106:     long                        nombre_arguments;
  107: 
  108:     struct_liste_chainee        *l_element_courant;
  109:     struct_liste_chainee        *l_element_courant_resultat;
  110: 
  111:     struct_objet                *s_objet_argument;
  112:     struct_objet                *s_objet_auxiliaire;
  113:     struct_objet                *s_objet_resultat;
  114: 
  115:     unsigned char               *tampon;
  116: 
  117:     (*s_etat_processus).erreur_execution = d_ex;
  118: 
  119:     if ((*s_etat_processus).affichage_arguments == 'Y')
  120:     {
  121:         printf("\n  SLICESCALE ");
  122: 
  123:         if ((*s_etat_processus).langue == 'F')
  124:         {
  125:             printf("(définition des courbes de niveau)\n\n");
  126:         }
  127:         else
  128:         {
  129:             printf("(definition of contour lines)\n\n");
  130:         }
  131: 
  132:         printf("    1: %s\n\n", d_LST);
  133: 
  134:         if ((*s_etat_processus).langue == 'F')
  135:         {
  136:             printf("  Utilisation :\n\n");
  137:         }
  138:         else
  139:         {
  140:             printf("  Usage:\n\n");
  141:         }
  142: 
  143:         printf("    { { Xmin Xmax} { Ymin Ymax } { Zmin Zmax} } SCALE\n");
  144:         printf("    To be fixed!\n");
  145:         /*
  146:         AUTOMATIC
  147:         DISCRETE
  148:         INCREMENTAL
  149:         */
  150: 
  151:         return;
  152:     }
  153:     else if ((*s_etat_processus).test_instruction == 'Y')
  154:     {
  155:         (*s_etat_processus).nombre_arguments = -1;
  156:         return;
  157:     }
  158: 
  159:     if (test_cfsf(s_etat_processus, 31) == d_vrai)
  160:     {
  161:         if (empilement_pile_last(s_etat_processus, 1) == d_erreur)
  162:         {
  163:             return;
  164:         }
  165:     }
  166: 
  167:     if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
  168:             &s_objet_argument) == d_erreur)
  169:     {
  170:         (*s_etat_processus).erreur_execution = d_ex_manque_argument;
  171:         return;
  172:     }
  173: 
  174:     if ((*s_objet_argument).type == LST)
  175:     {
  176:         l_element_courant = (struct_liste_chainee *) (*s_objet_argument).objet;
  177: 
  178:         automatique = 0;
  179:         discret = 0;
  180:         incremental = 0;
  181: 
  182:         nombre_arguments = 0;
  183: 
  184:         while(l_element_courant != NULL)
  185:         {
  186:             if ((*(*l_element_courant).donnee).type == CHN)
  187:             {
  188:                 if ((tampon = conversion_majuscule((unsigned char *)
  189:                         (*(*l_element_courant).donnee).objet)) == NULL)
  190:                 {
  191:                     (*s_etat_processus).erreur_systeme =
  192:                             d_es_allocation_memoire;
  193:                     return;
  194:                 }
  195: 
  196:                 if (strcmp(tampon, "AUTOMATIC") == 0)
  197:                 {
  198:                     automatique++;
  199:                 }
  200:                 else if (strcmp(tampon, "DISCRETE") == 0)
  201:                 {
  202:                     discret++;
  203:                 }
  204:                 else if (strcmp(tampon, "INCREMENTAL") == 0)
  205:                 {
  206:                     incremental++;
  207:                 }
  208:                 else
  209:                 {
  210:                     free(tampon);
  211:                     liberation(s_etat_processus, s_objet_argument);
  212: 
  213:                     (*s_etat_processus).erreur_execution =
  214:                             d_ex_argument_invalide;
  215:                     return;
  216:                 }
  217: 
  218:                 free(tampon);
  219:             }
  220: 
  221:             l_element_courant = (*l_element_courant).suivant;
  222:             nombre_arguments++;
  223:         }
  224: 
  225:         if ((automatique + discret + incremental) == 1)
  226:         {
  227:             if (automatique == 1)
  228:             {
  229:                 if (nombre_arguments > 2)
  230:                 {
  231:                     liberation(s_etat_processus, s_objet_argument);
  232: 
  233:                     (*s_etat_processus).erreur_execution =
  234:                             d_ex_argument_invalide;
  235:                     return;
  236:                 }
  237:             }
  238:             else if (discret == 1)
  239:             {
  240:                 if (nombre_arguments < 2)
  241:                 {
  242:                     liberation(s_etat_processus, s_objet_argument);
  243: 
  244:                     (*s_etat_processus).erreur_execution =
  245:                             d_ex_argument_invalide;
  246:                     return;
  247:                 }
  248:             }
  249:             else if (incremental == 1)
  250:             {
  251:                 if ((nombre_arguments < 3) || (nombre_arguments > 4))
  252:                 {
  253:                     liberation(s_etat_processus, s_objet_argument);
  254: 
  255:                     (*s_etat_processus).erreur_execution =
  256:                             d_ex_argument_invalide;
  257:                     return;
  258:                 }
  259:             }
  260:             else
  261:             {
  262:                 liberation(s_etat_processus, s_objet_argument);
  263: 
  264:                 (*s_etat_processus).erreur_execution = d_ex_argument_invalide;
  265:                 return;
  266:             }
  267: 
  268:             if ((s_objet_resultat = allocation(s_etat_processus, LST))
  269:                     == NULL)
  270:             {
  271:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  272:                 return;
  273:             }
  274: 
  275:             if (((*s_objet_resultat).objet =
  276:                     allocation_maillon(s_etat_processus)) == NULL)
  277:             {
  278:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  279:                 return;
  280:             }
  281: 
  282:             l_element_courant_resultat = (*s_objet_resultat).objet;
  283:             (*l_element_courant_resultat).suivant = NULL;
  284: 
  285:             if (((*l_element_courant_resultat).donnee =
  286:                     allocation(s_etat_processus, CHN)) == NULL)
  287:             {
  288:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  289:                 return;
  290:             }
  291: 
  292:             if (automatique == 1)
  293:             {
  294:                 if (((*(*l_element_courant_resultat).donnee).objet = malloc(
  295:                         10 * sizeof(unsigned char))) == NULL)
  296:                 {
  297:                     (*s_etat_processus).erreur_systeme =
  298:                             d_es_allocation_memoire;
  299:                     return;
  300:                 }
  301: 
  302:                 strcpy((*(*l_element_courant_resultat).donnee).objet,
  303:                         "AUTOMATIC");
  304:             }
  305:             else if (discret == 1)
  306:             {
  307:                 if (((*(*l_element_courant_resultat).donnee).objet = malloc(
  308:                         9 * sizeof(unsigned char))) == NULL)
  309:                 {
  310:                     (*s_etat_processus).erreur_systeme =
  311:                             d_es_allocation_memoire;
  312:                     return;
  313:                 }
  314: 
  315:                 strcpy((*(*l_element_courant_resultat).donnee).objet,
  316:                         "DISCRETE");
  317:             }
  318:             else
  319:             {
  320:                 if (((*(*l_element_courant_resultat).donnee).objet = malloc(
  321:                         12 * sizeof(unsigned char))) == NULL)
  322:                 {
  323:                     (*s_etat_processus).erreur_systeme =
  324:                             d_es_allocation_memoire;
  325:                     return;
  326:                 }
  327: 
  328:                 strcpy((*(*l_element_courant_resultat).donnee).objet,
  329:                         "INCREMENTAL");
  330:             }
  331: 
  332:             // Récupération des paramètres numériques
  333: 
  334:             l_element_courant = (struct_liste_chainee *)
  335:                     (*s_objet_argument).objet;
  336: 
  337:             while(l_element_courant != NULL)
  338:             {
  339:                 if ((*(*l_element_courant).donnee).type != CHN)
  340:                 {
  341:                     if (((*(*l_element_courant).donnee).type == ALG) ||
  342:                             ((*(*l_element_courant).donnee).type == RPN) ||
  343:                             ((*(*l_element_courant).donnee).type == NOM))
  344:                     {
  345:                         if (evaluation(s_etat_processus,
  346:                                 (*l_element_courant).donnee, 'N')
  347:                                 == d_erreur)
  348:                         {
  349:                             liberation(s_etat_processus, s_objet_argument);
  350:                             liberation(s_etat_processus, s_objet_resultat);
  351: 
  352:                             return;
  353:                         }
  354: 
  355:                         if (depilement(s_etat_processus,
  356:                                 &((*s_etat_processus).l_base_pile),
  357:                                 &s_objet_auxiliaire) == d_erreur)
  358:                         {
  359:                             liberation(s_etat_processus, s_objet_argument);
  360:                             liberation(s_etat_processus, s_objet_resultat);
  361: 
  362:                             (*s_etat_processus).erreur_execution =
  363:                                     d_ex_manque_argument;
  364:                             return;
  365:                         }
  366: 
  367:                         liberation(s_etat_processus,
  368:                                 (*l_element_courant).donnee);
  369:                         (*l_element_courant).donnee = s_objet_auxiliaire;
  370:                     }
  371: 
  372:                     if (((*(*l_element_courant).donnee).type == INT) ||
  373:                             ((*(*l_element_courant).donnee).type == REL))
  374:                     {
  375:                         if (((*l_element_courant_resultat).suivant =
  376:                                 allocation_maillon(s_etat_processus)) == NULL)
  377:                         {
  378:                             (*s_etat_processus).erreur_systeme =
  379:                                     d_es_allocation_memoire;
  380:                             return;
  381:                         }
  382: 
  383:                         l_element_courant_resultat =
  384:                                 (*l_element_courant_resultat).suivant;
  385:                         (*l_element_courant_resultat).suivant = NULL;
  386: 
  387:                         if (((*l_element_courant_resultat).donnee =
  388:                                 copie_objet(s_etat_processus,
  389:                                 (*l_element_courant).donnee, 'O'))
  390:                                 == NULL)
  391:                         {
  392:                             (*s_etat_processus).erreur_systeme =
  393:                                     d_es_allocation_memoire;
  394:                             return;
  395:                         }
  396:                     }
  397:                     else
  398:                     {
  399:                         liberation(s_etat_processus, s_objet_argument);
  400:                         liberation(s_etat_processus, s_objet_resultat);
  401: 
  402:                         (*s_etat_processus).erreur_execution =
  403:                                 d_ex_erreur_type_argument;
  404:                         return;
  405:                     }
  406:                 }
  407: 
  408:                 l_element_courant = (*l_element_courant).suivant;
  409:             }
  410: 
  411:             liberation(s_etat_processus,
  412:                     (*s_etat_processus).parametres_courbes_de_niveau);
  413:             (*s_etat_processus).parametres_courbes_de_niveau =
  414:                     s_objet_resultat;
  415:         }
  416:         else
  417:         {
  418:             liberation(s_etat_processus, s_objet_argument);
  419: 
  420:             (*s_etat_processus).erreur_execution = d_ex_argument_invalide;
  421:             return;
  422:         }
  423:     }
  424:     else
  425:     {
  426:         liberation(s_etat_processus, s_objet_argument);
  427: 
  428:         (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
  429:         return;
  430:     }
  431: 
  432:     liberation(s_etat_processus, s_objet_argument);
  433: 
  434:     if (test_cfsf(s_etat_processus, 52) == d_faux)
  435:     {
  436:         if ((*s_etat_processus).fichiers_graphiques != NULL)
  437:         {
  438:             appel_gnuplot(s_etat_processus, 'N');
  439:         }
  440:     }
  441: 
  442:     return;
  443: }
  444: 
  445: 
  446: /*
  447: ================================================================================
  448:   Fonction 'sx'
  449: ================================================================================
  450:   Entrées : pointeur sur une structure struct_processus
  451: --------------------------------------------------------------------------------
  452:   Sorties :
  453: --------------------------------------------------------------------------------
  454:   Effets de bord : néant
  455: ================================================================================
  456: */
  457: 
  458: void
  459: instruction_sx(struct_processus *s_etat_processus)
  460: {
  461:     logical1                            presence_variable;
  462: 
  463:     long                                i;
  464: 
  465:     struct_objet                        *s_objet_statistique;
  466:     struct_objet                        *s_objet_resultat;
  467: 
  468:     struct_vecteur                      *resultat;
  469: 
  470:     unsigned long                       nombre_colonnes;
  471: 
  472:     (*s_etat_processus).erreur_execution = d_ex;
  473: 
  474:     if ((*s_etat_processus).affichage_arguments == 'Y')
  475:     {
  476:         printf("\n  SX ");
  477: 
  478:         if ((*s_etat_processus).langue == 'F')
  479:         {
  480:             printf("(somme sur la colonne X)\n\n");
  481:         }
  482:         else
  483:         {
  484:             printf("(sum on X column)\n\n");
  485:         }
  486: 
  487:         printf("->  1: %s, %s\n", d_INT, d_REL);
  488: 
  489:         return;
  490:     }
  491:     else if ((*s_etat_processus).test_instruction == 'Y')
  492:     {
  493:         (*s_etat_processus).nombre_arguments = -1;
  494:         return;
  495:     }
  496: 
  497:     if (test_cfsf(s_etat_processus, 31) == d_vrai)
  498:     {
  499:         if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
  500:         {
  501:             return;
  502:         }
  503:     }
  504: 
  505:     /*
  506:      * Recherche d'une variable globale référencée par SIGMA
  507:      */
  508: 
  509:     if (recherche_variable(s_etat_processus, ds_sdat) == d_faux)
  510:     {
  511:         /*
  512:          * Aucune variable SIGMA
  513:          */
  514: 
  515:         (*s_etat_processus).erreur_systeme = d_es;
  516:         (*s_etat_processus).erreur_execution = d_ex_absence_observations;
  517:         return;
  518:     }
  519:     else
  520:     {
  521:         /*
  522:          * Il existe une variable locale SIGMA. Reste à vérifier l'existence
  523:          * d'une variable SIGMA globale...
  524:          */
  525: 
  526:         i = (*s_etat_processus).position_variable_courante;
  527:         presence_variable = d_faux;
  528: 
  529:         while(i >= 0)
  530:         {
  531:             if ((strcmp((*s_etat_processus).s_liste_variables[i].nom,
  532:                     ds_sdat) == 0) && ((*s_etat_processus)
  533:                     .s_liste_variables[i].niveau == 1))
  534:             {
  535:                 presence_variable = d_vrai;
  536:                 break;
  537:             }
  538: 
  539:             i--;
  540:         }
  541: 
  542:         if (presence_variable == d_faux)
  543:         {
  544:             (*s_etat_processus).erreur_execution = d_ex_absence_observations;
  545:             return;
  546:         }
  547:         else
  548:         {
  549:             (*s_etat_processus).position_variable_courante = i;
  550: 
  551:             if ((*s_etat_processus).s_liste_variables[i].objet == NULL)
  552:             {
  553:                 (*s_etat_processus).erreur_execution = d_ex_variable_partagee;
  554:                 return;
  555:             }
  556: 
  557:             if (((*((*s_etat_processus).s_liste_variables
  558:                     [(*s_etat_processus).position_variable_courante].objet))
  559:                     .type != MIN) && ((*((*s_etat_processus)
  560:                     .s_liste_variables[(*s_etat_processus)
  561:                     .position_variable_courante].objet)).type != MRL))
  562:             {
  563:                 (*s_etat_processus).erreur_execution =
  564:                         d_ex_matrice_statistique_invalide;
  565:                 return;
  566:             }
  567: 
  568:             nombre_colonnes = (*((struct_matrice *) (*((*s_etat_processus)
  569:                     .s_liste_variables[(*s_etat_processus)
  570:                     .position_variable_courante].objet)).objet))
  571:                     .nombre_colonnes;
  572:         }
  573:     }
  574: 
  575:     if (((*s_etat_processus).colonne_statistique_1 < 1) ||
  576:             ((*s_etat_processus).colonne_statistique_1 > (integer8)
  577:             nombre_colonnes))
  578:     {
  579:         (*s_etat_processus).erreur_execution = d_ex_observations_inexistantes;
  580:         return;
  581:     }
  582: 
  583:     s_objet_statistique = ((*s_etat_processus).s_liste_variables
  584:             [(*s_etat_processus).position_variable_courante]).objet;
  585: 
  586:     if (((*s_objet_statistique).type == MIN) ||
  587:             ((*s_objet_statistique).type == MRL))
  588:     {
  589:         if ((s_objet_resultat = allocation(s_etat_processus, NON)) == NULL)
  590:         {
  591:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  592:             return;
  593:         }
  594: 
  595:         if ((resultat = sommation_colonne_statistique(
  596:                 (struct_matrice *) (*s_objet_statistique).objet,
  597:                 (*s_etat_processus).colonne_statistique_1)) == NULL)
  598:         {
  599:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  600:             return;
  601:         }
  602: 
  603:         if ((*resultat).type == 'I')
  604:         {
  605:             (*s_objet_resultat).type = INT;
  606: 
  607:             if (((*s_objet_resultat).objet = malloc(sizeof(integer8))) == NULL)
  608:             {
  609:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  610:                 return;
  611:             }
  612: 
  613:             (*((integer8 *) (*s_objet_resultat).objet)) = (*((integer8 *)
  614:                     (*resultat).tableau));
  615:         }
  616:         else
  617:         {
  618:             (*s_objet_resultat).type = REL;
  619: 
  620:             if (((*s_objet_resultat).objet = malloc(sizeof(real8))) == NULL)
  621:             {
  622:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  623:                 return;
  624:             }
  625: 
  626:             (*((real8 *) (*s_objet_resultat).objet)) = (*((real8 *)
  627:                     (*resultat).tableau));
  628:         }
  629: 
  630:         free((*resultat).tableau);
  631:         free(resultat);
  632: 
  633:         if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
  634:                 s_objet_resultat) == d_erreur)
  635:         {
  636:             return;
  637:         }
  638:     }
  639:     else
  640:     {
  641:         (*s_etat_processus).erreur_execution =
  642:                 d_ex_matrice_statistique_invalide;
  643:         return;
  644:     }
  645: 
  646:     return;
  647: }
  648: 
  649: 
  650: /*
  651: ================================================================================
  652:   Fonction 'sy'
  653: ================================================================================
  654:   Entrées : pointeur sur une structure struct_processus
  655: --------------------------------------------------------------------------------
  656:   Sorties :
  657: --------------------------------------------------------------------------------
  658:   Effets de bord : néant
  659: ================================================================================
  660: */
  661: 
  662: void
  663: instruction_sy(struct_processus *s_etat_processus)
  664: {
  665:     logical1                            presence_variable;
  666: 
  667:     long                                i;
  668: 
  669:     struct_objet                        *s_objet_statistique;
  670:     struct_objet                        *s_objet_resultat;
  671: 
  672:     struct_vecteur                      *resultat;
  673: 
  674:     unsigned long                       nombre_colonnes;
  675: 
  676:     (*s_etat_processus).erreur_execution = d_ex;
  677: 
  678:     if ((*s_etat_processus).affichage_arguments == 'Y')
  679:     {
  680:         printf("\n  SY ");
  681: 
  682:         if ((*s_etat_processus).langue == 'F')
  683:         {
  684:             printf("(somme sur la colonne Y)\n\n");
  685:         }
  686:         else
  687:         {
  688:             printf("(sum on Y column)\n\n");
  689:         }
  690: 
  691:         printf("->  1: %s, %s\n", d_INT, d_REL);
  692: 
  693:         return;
  694:     }
  695:     else if ((*s_etat_processus).test_instruction == 'Y')
  696:     {
  697:         (*s_etat_processus).nombre_arguments = -1;
  698:         return;
  699:     }
  700: 
  701:     if (test_cfsf(s_etat_processus, 31) == d_vrai)
  702:     {
  703:         if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
  704:         {
  705:             return;
  706:         }
  707:     }
  708: 
  709:     /*
  710:      * Recherche d'une variable globale référencée par SIGMA
  711:      */
  712: 
  713:     if (recherche_variable(s_etat_processus, ds_sdat) == d_faux)
  714:     {
  715:         /*
  716:          * Aucune variable SIGMA
  717:          */
  718: 
  719:         (*s_etat_processus).erreur_systeme = d_es;
  720:         (*s_etat_processus).erreur_execution = d_ex_absence_observations;
  721:         return;
  722:     }
  723:     else
  724:     {
  725:         /*
  726:          * Il existe une variable locale SIGMA. Reste à vérifier l'existence
  727:          * d'une variable SIGMA globale...
  728:          */
  729: 
  730:         i = (*s_etat_processus).position_variable_courante;
  731:         presence_variable = d_faux;
  732: 
  733:         while(i >= 0)
  734:         {
  735:             if ((strcmp((*s_etat_processus).s_liste_variables[i].nom,
  736:                     ds_sdat) == 0) && ((*s_etat_processus)
  737:                     .s_liste_variables[i].niveau == 1))
  738:             {
  739:                 presence_variable = d_vrai;
  740:                 break;
  741:             }
  742: 
  743:             i--;
  744:         }
  745: 
  746:         if (presence_variable == d_faux)
  747:         {
  748:             (*s_etat_processus).erreur_execution = d_ex_absence_observations;
  749:             return;
  750:         }
  751:         else
  752:         {
  753:             (*s_etat_processus).position_variable_courante = i;
  754: 
  755:             if ((*s_etat_processus).s_liste_variables[i].objet == NULL)
  756:             {
  757:                 (*s_etat_processus).erreur_execution = d_ex_variable_partagee;
  758:                 return;
  759:             }
  760: 
  761:             if (((*((*s_etat_processus).s_liste_variables
  762:                     [(*s_etat_processus).position_variable_courante].objet))
  763:                     .type != MIN) && ((*((*s_etat_processus)
  764:                     .s_liste_variables[(*s_etat_processus)
  765:                     .position_variable_courante].objet)).type != MRL))
  766:             {
  767:                 (*s_etat_processus).erreur_execution =
  768:                         d_ex_matrice_statistique_invalide;
  769:                 return;
  770:             }
  771: 
  772:             nombre_colonnes = (*((struct_matrice *) (*((*s_etat_processus)
  773:                     .s_liste_variables[(*s_etat_processus)
  774:                     .position_variable_courante].objet)).objet))
  775:                     .nombre_colonnes;
  776:         }
  777:     }
  778: 
  779:     if (((*s_etat_processus).colonne_statistique_2 < 1) ||
  780:             ((*s_etat_processus).colonne_statistique_2 > (integer8)
  781:             nombre_colonnes))
  782:     {
  783:         (*s_etat_processus).erreur_execution = d_ex_observations_inexistantes;
  784:         return;
  785:     }
  786: 
  787:     s_objet_statistique = ((*s_etat_processus).s_liste_variables
  788:             [(*s_etat_processus).position_variable_courante]).objet;
  789: 
  790:     if (((*s_objet_statistique).type == MIN) ||
  791:             ((*s_objet_statistique).type == MRL))
  792:     {
  793:         if ((s_objet_resultat = allocation(s_etat_processus, NON)) == NULL)
  794:         {
  795:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  796:             return;
  797:         }
  798: 
  799:         if ((resultat = sommation_colonne_statistique(
  800:                 (struct_matrice *) (*s_objet_statistique).objet,
  801:                 (*s_etat_processus).colonne_statistique_2)) == NULL)
  802:         {
  803:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  804:             return;
  805:         }
  806: 
  807:         if ((*resultat).type == 'I')
  808:         {
  809:             (*s_objet_resultat).type = INT;
  810: 
  811:             if (((*s_objet_resultat).objet = malloc(sizeof(integer8))) == NULL)
  812:             {
  813:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  814:                 return;
  815:             }
  816: 
  817:             (*((integer8 *) (*s_objet_resultat).objet)) = (*((integer8 *)
  818:                     (*resultat).tableau));
  819:         }
  820:         else
  821:         {
  822:             (*s_objet_resultat).type = REL;
  823: 
  824:             if (((*s_objet_resultat).objet = malloc(sizeof(real8))) == NULL)
  825:             {
  826:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  827:                 return;
  828:             }
  829: 
  830:             (*((real8 *) (*s_objet_resultat).objet)) = (*((real8 *)
  831:                     (*resultat).tableau));
  832:         }
  833: 
  834:         free((*resultat).tableau);
  835:         free(resultat);
  836: 
  837:         if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
  838:                 s_objet_resultat) == d_erreur)
  839:         {
  840:             return;
  841:         }
  842:     }
  843:     else
  844:     {
  845:         (*s_etat_processus).erreur_execution =
  846:                 d_ex_matrice_statistique_invalide;
  847:         return;
  848:     }
  849: 
  850:     return;
  851: }
  852: 
  853: 
  854: /*
  855: ================================================================================
  856:   Fonction 'sxy'
  857: ================================================================================
  858:   Entrées : pointeur sur une structure struct_processus
  859: --------------------------------------------------------------------------------
  860:   Sorties :
  861: --------------------------------------------------------------------------------
  862:   Effets de bord : néant
  863: ================================================================================
  864: */
  865: 
  866: void
  867: instruction_sxy(struct_processus *s_etat_processus)
  868: {
  869:     logical1                            presence_variable;
  870: 
  871:     long                                i;
  872: 
  873:     struct_objet                        *s_objet_statistique;
  874:     struct_objet                        *s_objet_resultat;
  875: 
  876:     struct_vecteur                      *resultat;
  877: 
  878:     unsigned long                       nombre_colonnes;
  879: 
  880:     (*s_etat_processus).erreur_execution = d_ex;
  881: 
  882:     if ((*s_etat_processus).affichage_arguments == 'Y')
  883:     {
  884:         printf("\n  SXY ");
  885: 
  886:         if ((*s_etat_processus).langue == 'F')
  887:         {
  888:             printf("(somme des produits des colonne X et Y)\n\n");
  889:         }
  890:         else
  891:         {
  892:             printf("(sum of X and Y colums products)\n\n");
  893:         }
  894: 
  895:         printf("->  1: %s, %s\n", d_INT, d_REL);
  896: 
  897:         return;
  898:     }
  899:     else if ((*s_etat_processus).test_instruction == 'Y')
  900:     {
  901:         (*s_etat_processus).nombre_arguments = -1;
  902:         return;
  903:     }
  904: 
  905:     if (test_cfsf(s_etat_processus, 31) == d_vrai)
  906:     {
  907:         if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
  908:         {
  909:             return;
  910:         }
  911:     }
  912: 
  913:     /*
  914:      * Recherche d'une variable globale référencée par SIGMA
  915:      */
  916: 
  917:     if (recherche_variable(s_etat_processus, ds_sdat) == d_faux)
  918:     {
  919:         /*
  920:          * Aucune variable SIGMA
  921:          */
  922: 
  923:         (*s_etat_processus).erreur_systeme = d_es;
  924:         (*s_etat_processus).erreur_execution = d_ex_absence_observations;
  925:         return;
  926:     }
  927:     else
  928:     {
  929:         /*
  930:          * Il existe une variable locale SIGMA. Reste à vérifier l'existence
  931:          * d'une variable SIGMA globale...
  932:          */
  933: 
  934:         i = (*s_etat_processus).position_variable_courante;
  935:         presence_variable = d_faux;
  936: 
  937:         while(i >= 0)
  938:         {
  939:             if ((strcmp((*s_etat_processus).s_liste_variables[i].nom,
  940:                     ds_sdat) == 0) && ((*s_etat_processus)
  941:                     .s_liste_variables[i].niveau == 1))
  942:             {
  943:                 presence_variable = d_vrai;
  944:                 break;
  945:             }
  946: 
  947:             i--;
  948:         }
  949: 
  950:         if (presence_variable == d_faux)
  951:         {
  952:             (*s_etat_processus).erreur_execution = d_ex_absence_observations;
  953:             return;
  954:         }
  955:         else
  956:         {
  957:             (*s_etat_processus).position_variable_courante = i;
  958: 
  959:             if ((*s_etat_processus).s_liste_variables[i].objet == NULL)
  960:             {
  961:                 (*s_etat_processus).erreur_execution = d_ex_variable_partagee;
  962:                 return;
  963:             }
  964: 
  965:             if (((*((*s_etat_processus).s_liste_variables
  966:                     [(*s_etat_processus).position_variable_courante].objet))
  967:                     .type != MIN) && ((*((*s_etat_processus)
  968:                     .s_liste_variables[(*s_etat_processus)
  969:                     .position_variable_courante].objet)).type != MRL))
  970:             {
  971:                 (*s_etat_processus).erreur_execution =
  972:                         d_ex_matrice_statistique_invalide;
  973:                 return;
  974:             }
  975: 
  976:             nombre_colonnes = (*((struct_matrice *) (*((*s_etat_processus)
  977:                     .s_liste_variables[(*s_etat_processus)
  978:                     .position_variable_courante].objet)).objet))
  979:                     .nombre_colonnes;
  980:         }
  981:     }
  982: 
  983:     if (((*s_etat_processus).colonne_statistique_1 < 1) ||
  984:             ((*s_etat_processus).colonne_statistique_1 > (integer8)
  985:             nombre_colonnes) || ((*s_etat_processus).colonne_statistique_2 < 1)
  986:             || ((*s_etat_processus).colonne_statistique_2 > (integer8)
  987:             nombre_colonnes))
  988:     {
  989:         (*s_etat_processus).erreur_execution = d_ex_observations_inexistantes;
  990:         return;
  991:     }
  992: 
  993:     s_objet_statistique = ((*s_etat_processus).s_liste_variables
  994:             [(*s_etat_processus).position_variable_courante]).objet;
  995: 
  996:     if (((*s_objet_statistique).type == MIN) ||
  997:             ((*s_objet_statistique).type == MRL))
  998:     {
  999:         if ((s_objet_resultat = allocation(s_etat_processus, NON)) == NULL)
 1000:         {
 1001:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1002:             return;
 1003:         }
 1004: 
 1005:         if ((resultat = sommation_produits_colonnes_statistiques(
 1006:                 (struct_matrice *) (*s_objet_statistique).objet,
 1007:                 (*s_etat_processus).colonne_statistique_1,
 1008:                 (*s_etat_processus).colonne_statistique_2)) == NULL)
 1009:         {
 1010:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1011:             return;
 1012:         }
 1013: 
 1014:         if ((*resultat).type == 'I')
 1015:         {
 1016:             (*s_objet_resultat).type = INT;
 1017: 
 1018:             if (((*s_objet_resultat).objet = malloc(sizeof(integer8))) == NULL)
 1019:             {
 1020:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1021:                 return;
 1022:             }
 1023: 
 1024:             (*((integer8 *) (*s_objet_resultat).objet)) = (*((integer8 *)
 1025:                     (*resultat).tableau));
 1026:         }
 1027:         else
 1028:         {
 1029:             (*s_objet_resultat).type = REL;
 1030: 
 1031:             if (((*s_objet_resultat).objet = malloc(sizeof(real8))) == NULL)
 1032:             {
 1033:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1034:                 return;
 1035:             }
 1036: 
 1037:             (*((real8 *) (*s_objet_resultat).objet)) = (*((real8 *)
 1038:                     (*resultat).tableau));
 1039:         }
 1040: 
 1041:         free((*resultat).tableau);
 1042:         free(resultat);
 1043: 
 1044:         if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
 1045:                 s_objet_resultat) == d_erreur)
 1046:         {
 1047:             return;
 1048:         }
 1049:     }
 1050:     else
 1051:     {
 1052:         (*s_etat_processus).erreur_execution =
 1053:                 d_ex_matrice_statistique_invalide;
 1054:         return;
 1055:     }
 1056: 
 1057:     return;
 1058: }
 1059: 
 1060: 
 1061: /*
 1062: ================================================================================
 1063:   Fonction 'sx2'
 1064: ================================================================================
 1065:   Entrées : pointeur sur une structure struct_processus
 1066: --------------------------------------------------------------------------------
 1067:   Sorties :
 1068: --------------------------------------------------------------------------------
 1069:   Effets de bord : néant
 1070: ================================================================================
 1071: */
 1072: 
 1073: void
 1074: instruction_sx2(struct_processus *s_etat_processus)
 1075: {
 1076:     logical1                            presence_variable;
 1077: 
 1078:     long                                i;
 1079: 
 1080:     struct_objet                        *s_objet_statistique;
 1081:     struct_objet                        *s_objet_resultat;
 1082: 
 1083:     struct_vecteur                      *resultat;
 1084: 
 1085:     unsigned long                       nombre_colonnes;
 1086: 
 1087:     (*s_etat_processus).erreur_execution = d_ex;
 1088: 
 1089:     if ((*s_etat_processus).affichage_arguments == 'Y')
 1090:     {
 1091:         printf("\n  SX2 ");
 1092: 
 1093:         if ((*s_etat_processus).langue == 'F')
 1094:         {
 1095:             printf("(somme des carrés de la colonne X)\n\n");
 1096:         }
 1097:         else
 1098:         {
 1099:             printf("(sum of column X squares)\n\n");
 1100:         }
 1101: 
 1102:         printf("->  1: %s, %s\n", d_INT, d_REL);
 1103: 
 1104:         return;
 1105:     }
 1106:     else if ((*s_etat_processus).test_instruction == 'Y')
 1107:     {
 1108:         (*s_etat_processus).nombre_arguments = -1;
 1109:         return;
 1110:     }
 1111: 
 1112:     if (test_cfsf(s_etat_processus, 31) == d_vrai)
 1113:     {
 1114:         if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 1115:         {
 1116:             return;
 1117:         }
 1118:     }
 1119: 
 1120:     /*
 1121:      * Recherche d'une variable globale référencée par SIGMA
 1122:      */
 1123: 
 1124:     if (recherche_variable(s_etat_processus, ds_sdat) == d_faux)
 1125:     {
 1126:         /*
 1127:          * Aucune variable SIGMA
 1128:          */
 1129: 
 1130:         (*s_etat_processus).erreur_systeme = d_es;
 1131:         (*s_etat_processus).erreur_execution = d_ex_absence_observations;
 1132:         return;
 1133:     }
 1134:     else
 1135:     {
 1136:         /*
 1137:          * Il existe une variable locale SIGMA. Reste à vérifier l'existence
 1138:          * d'une variable SIGMA globale...
 1139:          */
 1140: 
 1141:         i = (*s_etat_processus).position_variable_courante;
 1142:         presence_variable = d_faux;
 1143: 
 1144:         while(i >= 0)
 1145:         {
 1146:             if ((strcmp((*s_etat_processus).s_liste_variables[i].nom,
 1147:                     ds_sdat) == 0) && ((*s_etat_processus)
 1148:                     .s_liste_variables[i].niveau == 1))
 1149:             {
 1150:                 presence_variable = d_vrai;
 1151:                 break;
 1152:             }
 1153: 
 1154:             i--;
 1155:         }
 1156: 
 1157:         if (presence_variable == d_faux)
 1158:         {
 1159:             (*s_etat_processus).erreur_execution = d_ex_absence_observations;
 1160:             return;
 1161:         }
 1162:         else
 1163:         {
 1164:             (*s_etat_processus).position_variable_courante = i;
 1165: 
 1166:             if ((*s_etat_processus).s_liste_variables[i].objet == NULL)
 1167:             {
 1168:                 (*s_etat_processus).erreur_execution = d_ex_variable_partagee;
 1169:                 return;
 1170:             }
 1171: 
 1172:             if (((*((*s_etat_processus).s_liste_variables
 1173:                     [(*s_etat_processus).position_variable_courante].objet))
 1174:                     .type != MIN) && ((*((*s_etat_processus)
 1175:                     .s_liste_variables[(*s_etat_processus)
 1176:                     .position_variable_courante].objet)).type != MRL))
 1177:             {
 1178:                 (*s_etat_processus).erreur_execution =
 1179:                         d_ex_matrice_statistique_invalide;
 1180:                 return;
 1181:             }
 1182: 
 1183:             nombre_colonnes = (*((struct_matrice *) (*((*s_etat_processus)
 1184:                     .s_liste_variables[(*s_etat_processus)
 1185:                     .position_variable_courante].objet)).objet))
 1186:                     .nombre_colonnes;
 1187:         }
 1188:     }
 1189: 
 1190:     if (((*s_etat_processus).colonne_statistique_1 < 1) ||
 1191:             ((*s_etat_processus).colonne_statistique_1 > (integer8)
 1192:             nombre_colonnes))
 1193:     {
 1194:         (*s_etat_processus).erreur_execution = d_ex_observations_inexistantes;
 1195:         return;
 1196:     }
 1197: 
 1198:     s_objet_statistique = ((*s_etat_processus).s_liste_variables
 1199:             [(*s_etat_processus).position_variable_courante]).objet;
 1200: 
 1201:     if (((*s_objet_statistique).type == MIN) ||
 1202:             ((*s_objet_statistique).type == MRL))
 1203:     {
 1204:         if ((s_objet_resultat = allocation(s_etat_processus, NON)) == NULL)
 1205:         {
 1206:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1207:             return;
 1208:         }
 1209: 
 1210:         if ((resultat = sommation_produits_colonnes_statistiques(
 1211:                 (struct_matrice *) (*s_objet_statistique).objet,
 1212:                 (*s_etat_processus).colonne_statistique_1,
 1213:                 (*s_etat_processus).colonne_statistique_1)) == NULL)
 1214:         {
 1215:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1216:             return;
 1217:         }
 1218: 
 1219:         if ((*resultat).type == 'I')
 1220:         {
 1221:             (*s_objet_resultat).type = INT;
 1222: 
 1223:             if (((*s_objet_resultat).objet = malloc(sizeof(integer8))) == NULL)
 1224:             {
 1225:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1226:                 return;
 1227:             }
 1228: 
 1229:             (*((integer8 *) (*s_objet_resultat).objet)) = (*((integer8 *)
 1230:                     (*resultat).tableau));
 1231:         }
 1232:         else
 1233:         {
 1234:             (*s_objet_resultat).type = REL;
 1235: 
 1236:             if (((*s_objet_resultat).objet = malloc(sizeof(real8))) == NULL)
 1237:             {
 1238:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1239:                 return;
 1240:             }
 1241: 
 1242:             (*((real8 *) (*s_objet_resultat).objet)) = (*((real8 *)
 1243:                     (*resultat).tableau));
 1244:         }
 1245: 
 1246:         free((*resultat).tableau);
 1247:         free(resultat);
 1248: 
 1249:         if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
 1250:                 s_objet_resultat) == d_erreur)
 1251:         {
 1252:             return;
 1253:         }
 1254:     }
 1255:     else
 1256:     {
 1257:         (*s_etat_processus).erreur_execution =
 1258:                 d_ex_matrice_statistique_invalide;
 1259:         return;
 1260:     }
 1261: 
 1262:     return;
 1263: }
 1264: 
 1265: 
 1266: /*
 1267: ================================================================================
 1268:   Fonction 'sy2'
 1269: ================================================================================
 1270:   Entrées : pointeur sur une structure struct_processus
 1271: --------------------------------------------------------------------------------
 1272:   Sorties :
 1273: --------------------------------------------------------------------------------
 1274:   Effets de bord : néant
 1275: ================================================================================
 1276: */
 1277: 
 1278: void
 1279: instruction_sy2(struct_processus *s_etat_processus)
 1280: {
 1281:     logical1                            presence_variable;
 1282: 
 1283:     long                                i;
 1284: 
 1285:     struct_objet                        *s_objet_statistique;
 1286:     struct_objet                        *s_objet_resultat;
 1287: 
 1288:     struct_vecteur                      *resultat;
 1289: 
 1290:     unsigned long                       nombre_colonnes;
 1291: 
 1292:     (*s_etat_processus).erreur_execution = d_ex;
 1293: 
 1294:     if ((*s_etat_processus).affichage_arguments == 'Y')
 1295:     {
 1296:         printf("\n  SY2 ");
 1297: 
 1298:         if ((*s_etat_processus).langue == 'F')
 1299:         {
 1300:             printf("(somme des carrés de la colonne Y)\n\n");
 1301:         }
 1302:         else
 1303:         {
 1304:             printf("(sum of column Y squares)\n\n");
 1305:         }
 1306: 
 1307:         printf("->  1: %s, %s\n", d_INT, d_REL);
 1308: 
 1309:         return;
 1310:     }
 1311:     else if ((*s_etat_processus).test_instruction == 'Y')
 1312:     {
 1313:         (*s_etat_processus).nombre_arguments = -1;
 1314:         return;
 1315:     }
 1316: 
 1317:     if (test_cfsf(s_etat_processus, 31) == d_vrai)
 1318:     {
 1319:         if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 1320:         {
 1321:             return;
 1322:         }
 1323:     }
 1324: 
 1325:     /*
 1326:      * Recherche d'une variable globale référencée par SIGMA
 1327:      */
 1328: 
 1329:     if (recherche_variable(s_etat_processus, ds_sdat) == d_faux)
 1330:     {
 1331:         /*
 1332:          * Aucune variable SIGMA
 1333:          */
 1334: 
 1335:         (*s_etat_processus).erreur_systeme = d_es;
 1336:         (*s_etat_processus).erreur_execution = d_ex_absence_observations;
 1337:         return;
 1338:     }
 1339:     else
 1340:     {
 1341:         /*
 1342:          * Il existe une variable locale SIGMA. Reste à vérifier l'existence
 1343:          * d'une variable SIGMA globale...
 1344:          */
 1345: 
 1346:         i = (*s_etat_processus).position_variable_courante;
 1347:         presence_variable = d_faux;
 1348: 
 1349:         while(i >= 0)
 1350:         {
 1351:             if ((strcmp((*s_etat_processus).s_liste_variables[i].nom,
 1352:                     ds_sdat) == 0) && ((*s_etat_processus)
 1353:                     .s_liste_variables[i].niveau == 1))
 1354:             {
 1355:                 presence_variable = d_vrai;
 1356:                 break;
 1357:             }
 1358: 
 1359:             i--;
 1360:         }
 1361: 
 1362:         if (presence_variable == d_faux)
 1363:         {
 1364:             (*s_etat_processus).erreur_execution = d_ex_absence_observations;
 1365:             return;
 1366:         }
 1367:         else
 1368:         {
 1369:             (*s_etat_processus).position_variable_courante = i;
 1370: 
 1371:             if ((*s_etat_processus).s_liste_variables[i].objet == NULL)
 1372:             {
 1373:                 (*s_etat_processus).erreur_execution = d_ex_variable_partagee;
 1374:                 return;
 1375:             }
 1376: 
 1377:             if (((*((*s_etat_processus).s_liste_variables
 1378:                     [(*s_etat_processus).position_variable_courante].objet))
 1379:                     .type != MIN) && ((*((*s_etat_processus)
 1380:                     .s_liste_variables[(*s_etat_processus)
 1381:                     .position_variable_courante].objet)).type != MRL))
 1382:             {
 1383:                 (*s_etat_processus).erreur_execution =
 1384:                         d_ex_matrice_statistique_invalide;
 1385:                 return;
 1386:             }
 1387: 
 1388:             nombre_colonnes = (*((struct_matrice *) (*((*s_etat_processus)
 1389:                     .s_liste_variables[(*s_etat_processus)
 1390:                     .position_variable_courante].objet)).objet))
 1391:                     .nombre_colonnes;
 1392:         }
 1393:     }
 1394: 
 1395:     if (((*s_etat_processus).colonne_statistique_2 < 1) ||
 1396:             ((*s_etat_processus).colonne_statistique_2 > (integer8)
 1397:             nombre_colonnes))
 1398:     {
 1399:         (*s_etat_processus).erreur_execution = d_ex_observations_inexistantes;
 1400:         return;
 1401:     }
 1402: 
 1403:     s_objet_statistique = ((*s_etat_processus).s_liste_variables
 1404:             [(*s_etat_processus).position_variable_courante]).objet;
 1405: 
 1406:     if (((*s_objet_statistique).type == MIN) ||
 1407:             ((*s_objet_statistique).type == MRL))
 1408:     {
 1409:         if ((s_objet_resultat = allocation(s_etat_processus, NON)) == NULL)
 1410:         {
 1411:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1412:             return;
 1413:         }
 1414: 
 1415:         if ((resultat = sommation_produits_colonnes_statistiques(
 1416:                 (struct_matrice *) (*s_objet_statistique).objet,
 1417:                 (*s_etat_processus).colonne_statistique_2,
 1418:                 (*s_etat_processus).colonne_statistique_2)) == NULL)
 1419:         {
 1420:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1421:             return;
 1422:         }
 1423: 
 1424:         if ((*resultat).type == 'I')
 1425:         {
 1426:             (*s_objet_resultat).type = INT;
 1427: 
 1428:             if (((*s_objet_resultat).objet = malloc(sizeof(integer8))) == NULL)
 1429:             {
 1430:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1431:                 return;
 1432:             }
 1433: 
 1434:             (*((integer8 *) (*s_objet_resultat).objet)) = (*((integer8 *)
 1435:                     (*resultat).tableau));
 1436:         }
 1437:         else
 1438:         {
 1439:             (*s_objet_resultat).type = REL;
 1440: 
 1441:             if (((*s_objet_resultat).objet = malloc(sizeof(real8))) == NULL)
 1442:             {
 1443:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1444:                 return;
 1445:             }
 1446: 
 1447:             (*((real8 *) (*s_objet_resultat).objet)) = (*((real8 *)
 1448:                     (*resultat).tableau));
 1449:         }
 1450: 
 1451:         free((*resultat).tableau);
 1452:         free(resultat);
 1453: 
 1454:         if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
 1455:                 s_objet_resultat) == d_erreur)
 1456:         {
 1457:             return;
 1458:         }
 1459:     }
 1460:     else
 1461:     {
 1462:         (*s_etat_processus).erreur_execution =
 1463:                 d_ex_matrice_statistique_invalide;
 1464:         return;
 1465:     }
 1466: 
 1467:     return;
 1468: }
 1469: 
 1470: // vim: ts=4

CVSweb interface <joel.bertrand@systella.fr>