File:  [local] / rpl / src / instructions_s6.c
Revision 1.17: download - view: text, annotated - select for diffs - revision graph
Sun Mar 6 16:44:13 2011 UTC (13 years, 1 month ago) by bertrand
Branches: MAIN
CVS tags: rpl-4_0_21, rpl-4_0, HEAD
En route pour la 4.0.21 !

    1: /*
    2: ================================================================================
    3:   RPL/2 (R) version 4.0.21
    4:   Copyright (C) 1989-2011 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 'sdev'
   29: ================================================================================
   30:   Entrées :
   31: --------------------------------------------------------------------------------
   32:   Sorties :
   33: --------------------------------------------------------------------------------
   34:   Effets de bord : néant
   35: ================================================================================
   36: */
   37: 
   38: void
   39: instruction_sdev(struct_processus *s_etat_processus)
   40: {
   41:     logical1                            presence_variable;
   42: 
   43:     long                                i;
   44: 
   45:     struct_objet                        *s_objet_statistique;
   46:     struct_objet                        *s_objet_resultat;
   47:     struct_objet                        *s_objet_temporaire;
   48: 
   49:     unsigned long                       nombre_colonnes;
   50: 
   51:     (*s_etat_processus).erreur_execution = d_ex;
   52: 
   53:     if ((*s_etat_processus).affichage_arguments == 'Y')
   54:     {
   55:         printf("\n  SDEV ");
   56: 
   57:         if ((*s_etat_processus).langue == 'F')
   58:         {
   59:             printf("(écart-type)\n\n");
   60:         }
   61:         else
   62:         {
   63:             printf("(standard deviation)\n\n");
   64:         }
   65: 
   66:         printf("->  1: %s, %s, %s, %s\n", d_INT, d_REL, d_VIN, d_VRL);
   67: 
   68:         return;
   69:     }
   70:     else if ((*s_etat_processus).test_instruction == 'Y')
   71:     {
   72:         (*s_etat_processus).nombre_arguments = -1;
   73:         return;
   74:     }
   75: 
   76:     if (test_cfsf(s_etat_processus, 31) == d_vrai)
   77:     {
   78:         if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
   79:         {
   80:             return;
   81:         }
   82:     }
   83: 
   84:     /*
   85:      * Recherche d'une variable globale référencée par SIGMA
   86:      */
   87: 
   88:     if (recherche_variable(s_etat_processus, ds_sdat) == d_faux)
   89:     {
   90:         /*
   91:          * Aucune variable SIGMA
   92:          */
   93: 
   94:         (*s_etat_processus).erreur_systeme = d_es;
   95:         (*s_etat_processus).erreur_execution = d_ex_absence_observations;
   96:         return;
   97:     }
   98:     else
   99:     {
  100:         /*
  101:          * Il existe une variable locale SIGMA. Reste à vérifier l'existence
  102:          * d'une variable SIGMA globale...
  103:          */
  104: 
  105:         i = (*s_etat_processus).position_variable_courante;
  106:         presence_variable = d_faux;
  107: 
  108:         while(i >= 0)
  109:         {
  110:             if ((strcmp((*s_etat_processus).s_liste_variables[i].nom,
  111:                     ds_sdat) == 0) && ((*s_etat_processus)
  112:                     .s_liste_variables[i].niveau == 1))
  113:             {
  114:                 presence_variable = d_vrai;
  115:                 break;
  116:             }
  117: 
  118:             i--;
  119:         }
  120: 
  121:         if (presence_variable == d_faux)
  122:         {
  123:             (*s_etat_processus).erreur_execution = d_ex_absence_observations;
  124:             return;
  125:         }
  126:         else
  127:         {
  128:             (*s_etat_processus).position_variable_courante = i;
  129: 
  130:             if ((*s_etat_processus).s_liste_variables[i].objet == NULL)
  131:             {
  132:                 (*s_etat_processus).erreur_execution = d_ex_variable_partagee;
  133:                 return;
  134:             }
  135: 
  136:             if (((*((*s_etat_processus).s_liste_variables
  137:                     [(*s_etat_processus).position_variable_courante].objet))
  138:                     .type != MIN) && ((*((*s_etat_processus)
  139:                     .s_liste_variables[(*s_etat_processus)
  140:                     .position_variable_courante].objet)).type != MRL))
  141:             {
  142:                 (*s_etat_processus).erreur_execution =
  143:                         d_ex_matrice_statistique_invalide;
  144:                 return;
  145:             }
  146: 
  147:             nombre_colonnes = (*((struct_matrice *) (*((*s_etat_processus)
  148:                     .s_liste_variables[(*s_etat_processus)
  149:                     .position_variable_courante].objet)).objet))
  150:                     .nombre_colonnes;
  151:         }
  152:     }
  153: 
  154:     s_objet_statistique = ((*s_etat_processus).s_liste_variables
  155:             [(*s_etat_processus).position_variable_courante]).objet;
  156: 
  157:     if (((*s_objet_statistique).type == MIN) ||
  158:             ((*s_objet_statistique).type == MRL))
  159:     {
  160:         if ((*((struct_matrice *) (*s_objet_statistique).objet)).nombre_lignes
  161:                 <= 1)
  162:         {
  163:             (*s_etat_processus).erreur_execution =
  164:                     d_ex_statistiques_echantillon;
  165:             return;
  166:         }
  167: 
  168:         if ((s_objet_resultat = allocation(s_etat_processus, NON)) == NULL)
  169:         {
  170:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  171:             return;
  172:         }
  173: 
  174:         if (((*s_objet_resultat).objet = ecart_type_statistique(
  175:                 (struct_matrice *) (*s_objet_statistique).objet, 'E')) == NULL)
  176:         {
  177:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  178:             return;
  179:         }
  180: 
  181:         if (nombre_colonnes == 1)
  182:         {
  183:             if ((*((struct_vecteur *) (*s_objet_resultat).objet)).type == 'I')
  184:             {
  185:                 (*s_objet_resultat).type = VIN;
  186:                 s_objet_temporaire = s_objet_resultat;
  187: 
  188:                 if ((s_objet_resultat = allocation(s_etat_processus, INT))
  189:                         == NULL)
  190:                 {
  191:                     (*s_etat_processus).erreur_systeme =
  192:                             d_es_allocation_memoire;
  193:                     return;
  194:                 }
  195: 
  196:                 (*((integer8 *) (*s_objet_resultat).objet)) =
  197:                         ((integer8 *) (*((struct_vecteur *)
  198:                         (*s_objet_temporaire).objet)).tableau)[0];
  199: 
  200:                 liberation(s_etat_processus, s_objet_temporaire);
  201:             }
  202:             else
  203:             {
  204:                 (*s_objet_resultat).type = VRL;
  205:                 s_objet_temporaire = s_objet_resultat;
  206: 
  207:                 if ((s_objet_resultat = allocation(s_etat_processus, REL))
  208:                         == NULL)
  209:                 {
  210:                     (*s_etat_processus).erreur_systeme =
  211:                             d_es_allocation_memoire;
  212:                     return;
  213:                 }
  214: 
  215:                 (*((real8 *) (*s_objet_resultat).objet)) =
  216:                         ((real8 *) (*((struct_vecteur *)
  217:                         (*s_objet_temporaire).objet)).tableau)[0];
  218: 
  219:                 liberation(s_etat_processus, s_objet_temporaire);
  220:             }
  221:         }
  222:         else
  223:         {
  224:             if ((*((struct_vecteur *) (*s_objet_resultat).objet)).type == 'I')
  225:             {
  226:                 (*s_objet_resultat).type = VIN;
  227:             }
  228:             else
  229:             {
  230:                 (*s_objet_resultat).type = VRL;
  231:             }
  232:         }
  233: 
  234:         if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
  235:                 s_objet_resultat) == d_erreur)
  236:         {
  237:             return;
  238:         }
  239:     }
  240:     else
  241:     {
  242:         (*s_etat_processus).erreur_execution =
  243:                 d_ex_matrice_statistique_invalide;
  244:         return;
  245:     }
  246: 
  247:     return;
  248: }
  249: 
  250: 
  251: /*
  252: ================================================================================
  253:   Fonction 'schur'
  254: ================================================================================
  255:   Entrées :
  256: --------------------------------------------------------------------------------
  257:   Sorties :
  258: --------------------------------------------------------------------------------
  259:   Effets de bord : néant
  260: ================================================================================
  261: */
  262: 
  263: void
  264: instruction_schur(struct_processus *s_etat_processus)
  265: {
  266:     struct_matrice              *s_matrice;
  267: 
  268:     struct_objet                *s_copie_argument;
  269:     struct_objet                *s_objet_argument;
  270:     struct_objet                *s_objet_resultat;
  271: 
  272:     (*s_etat_processus).erreur_execution = d_ex;
  273: 
  274:     if ((*s_etat_processus).affichage_arguments == 'Y')
  275:     {
  276:         printf("\n  SCHUR ");
  277: 
  278:         if ((*s_etat_processus).langue == 'F')
  279:         {
  280:             printf("(décomposition de Schur)\n\n");
  281:         }
  282:         else
  283:         {
  284:             printf("(Schur decomposition)\n\n");
  285:         }
  286: 
  287:         printf("    1: %s, %s, %s\n", d_MIN, d_MRL, d_MCX);
  288:         printf("->  2: %s, %s\n", d_MRL, d_MCX);
  289:         printf("    1: %s, %s\n", d_MRL, d_MCX);
  290: 
  291:         return;
  292:     }
  293:     else if ((*s_etat_processus).test_instruction == 'Y')
  294:     {
  295:         (*s_etat_processus).nombre_arguments = -1;
  296:         return;
  297:     }
  298: 
  299:     if (test_cfsf(s_etat_processus, 31) == d_vrai)
  300:     {
  301:         if (empilement_pile_last(s_etat_processus, 1) == d_erreur)
  302:         {
  303:             return;
  304:         }
  305:     }
  306: 
  307:     if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
  308:             &s_objet_argument) == d_erreur)
  309:     {
  310:         (*s_etat_processus).erreur_execution = d_ex_manque_argument;
  311:         return;
  312:     }
  313: 
  314: /*
  315: --------------------------------------------------------------------------------
  316:   Décomposition de Schur réelle
  317: --------------------------------------------------------------------------------
  318: */
  319: 
  320:     if (((*s_objet_argument).type == MIN) ||
  321:             ((*s_objet_argument).type == MRL))
  322:     {
  323:         if ((s_copie_argument = copie_objet(s_etat_processus,
  324:                 s_objet_argument, 'Q')) == NULL)
  325:         {
  326:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  327:             return;
  328:         }
  329: 
  330:         liberation(s_etat_processus, s_objet_argument);
  331:         s_objet_argument = s_copie_argument;
  332: 
  333:         if ((*((struct_matrice *) (*s_objet_argument).objet)).nombre_lignes !=
  334:                 (*((struct_matrice *) (*s_objet_argument).objet))
  335:                 .nombre_colonnes)
  336:         {
  337:             liberation(s_etat_processus, s_objet_argument);
  338: 
  339:             (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
  340:             return;
  341:         }
  342: 
  343:         if ((s_matrice = malloc(sizeof(struct_matrice)))
  344:                 == NULL)
  345:         {
  346:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  347:             return;
  348:         }
  349: 
  350:         factorisation_schur(s_etat_processus, (*s_objet_argument).objet,
  351:                 &s_matrice);
  352: 
  353:         if ((*s_etat_processus).erreur_systeme != d_es)
  354:         {
  355:             return;
  356:         }
  357: 
  358:         if (((*s_etat_processus).exception != d_ep) ||
  359:                 ((*s_etat_processus).erreur_execution != d_ex))
  360:         {
  361:             free(s_matrice);
  362:             liberation(s_etat_processus, s_objet_argument);
  363:             return;
  364:         }
  365: 
  366:         if ((s_objet_resultat = allocation(s_etat_processus, NON)) == NULL)
  367:         {
  368:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  369:             return;
  370:         }
  371: 
  372:         (*s_objet_resultat).objet = s_matrice;
  373:         (*s_objet_resultat).type = MRL;
  374:         (*s_objet_argument).type = MRL;
  375:     }
  376: 
  377: /*
  378: --------------------------------------------------------------------------------
  379:   Décomposition de Schur complexe
  380: --------------------------------------------------------------------------------
  381: */
  382: 
  383:     else if ((*s_objet_argument).type == MCX)
  384:     {
  385:         if ((s_copie_argument = copie_objet(s_etat_processus,
  386:                 s_objet_argument, 'Q')) == NULL)
  387:         {
  388:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  389:             return;
  390:         }
  391: 
  392:         liberation(s_etat_processus, s_objet_argument);
  393:         s_objet_argument = s_copie_argument;
  394: 
  395:         if ((*((struct_matrice *) (*s_objet_argument).objet)).nombre_lignes !=
  396:                 (*((struct_matrice *) (*s_objet_argument).objet))
  397:                 .nombre_colonnes)
  398:         {
  399:             liberation(s_etat_processus, s_objet_argument);
  400: 
  401:             (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
  402:             return;
  403:         }
  404: 
  405:         if ((s_matrice = malloc(sizeof(struct_matrice)))
  406:                 == NULL)
  407:         {
  408:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  409:             return;
  410:         }
  411: 
  412:         factorisation_schur(s_etat_processus, (*s_objet_argument).objet,
  413:                 &s_matrice);
  414: 
  415:         if ((*s_etat_processus).erreur_systeme != d_es)
  416:         {
  417:             return;
  418:         }
  419: 
  420:         if (((*s_etat_processus).exception != d_ep) ||
  421:                 ((*s_etat_processus).erreur_execution != d_ex))
  422:         {
  423:             free(s_matrice);
  424:             liberation(s_etat_processus, s_objet_argument);
  425:             return;
  426:         }
  427: 
  428:         if ((s_objet_resultat = allocation(s_etat_processus, NON)) == NULL)
  429:         {
  430:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  431:             return;
  432:         }
  433: 
  434:         (*s_objet_resultat).objet = s_matrice;
  435:         (*s_objet_resultat).type = MCX;
  436:     }
  437: 
  438: /*
  439: --------------------------------------------------------------------------------
  440:   Type d'argument invalide
  441: --------------------------------------------------------------------------------
  442: */
  443: 
  444:     else
  445:     {
  446:         liberation(s_etat_processus, s_objet_argument);
  447: 
  448:         (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
  449:         return;
  450:     }
  451: 
  452:     if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
  453:             s_objet_argument) == d_erreur)
  454:     {
  455:         return;
  456:     }
  457: 
  458:     if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
  459:             s_objet_resultat) == d_erreur)
  460:     {
  461:         return;
  462:     }
  463: 
  464:     return;
  465: }
  466: 
  467: 
  468: /*
  469: ================================================================================
  470:   Fonction 'sync'
  471: ================================================================================
  472:   Entrées :
  473: --------------------------------------------------------------------------------
  474:   Sorties :
  475: --------------------------------------------------------------------------------
  476:   Effets de bord : néant
  477: ================================================================================
  478: */
  479: 
  480: void
  481: instruction_sync(struct_processus *s_etat_processus)
  482: {
  483:     struct_descripteur_fichier  *descripteur;
  484: 
  485:     struct_objet                *s_objet_argument;
  486: 
  487:     (*s_etat_processus).erreur_execution = d_ex;
  488: 
  489:     if ((*s_etat_processus).affichage_arguments == 'Y')
  490:     {
  491:         printf("\n  SYNC ");
  492: 
  493:         if ((*s_etat_processus).langue == 'F')
  494:         {
  495:             printf("(synchronisation d'un fichier)\n\n");
  496:         }
  497:         else
  498:         {
  499:             printf("(synchronising a file)\n\n");
  500:         }
  501: 
  502:         printf("    1: %s\n", d_FCH);
  503: 
  504:         return;
  505:     }
  506:     else if ((*s_etat_processus).test_instruction == 'Y')
  507:     {
  508:         (*s_etat_processus).nombre_arguments = -1;
  509:         return;
  510:     }
  511: 
  512:     if (test_cfsf(s_etat_processus, 31) == d_vrai)
  513:     {
  514:         if (empilement_pile_last(s_etat_processus, 1) == d_erreur)
  515:         {
  516:             return;
  517:         }
  518:     }
  519: 
  520:     if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
  521:             &s_objet_argument) == d_erreur)
  522:     {
  523:         (*s_etat_processus).erreur_execution = d_ex_manque_argument;
  524:         return;
  525:     }
  526: 
  527:     if ((*s_objet_argument).type == FCH)
  528:     {
  529:         if ((descripteur = descripteur_fichier(s_etat_processus,
  530:                 (struct_fichier *) (*s_objet_argument).objet)) == NULL)
  531:         {
  532:             return;
  533:         }
  534: 
  535:         if ((*descripteur).type != 'C')
  536:         {
  537:             liberation(s_etat_processus, s_objet_argument);
  538: 
  539:             (*s_etat_processus).erreur_execution = d_ex_erreur_type_fichier;
  540:             return;
  541:         }
  542: 
  543:         if (fflush((*descripteur).descripteur_c) != 0)
  544:         {
  545:             liberation(s_etat_processus, s_objet_argument);
  546: 
  547:             (*s_etat_processus).erreur_execution =
  548:                     d_ex_erreur_acces_fichier;
  549:             return;
  550:         }
  551:     }
  552:     else
  553:     {
  554:         liberation(s_etat_processus, s_objet_argument);
  555: 
  556:         (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
  557:         return;
  558:     }
  559: 
  560:     liberation(s_etat_processus, s_objet_argument);
  561: 
  562:     return;
  563: }
  564: 
  565: 
  566: /*
  567: ================================================================================
  568:   Fonction 'scale'
  569: ================================================================================
  570:   Entrées :
  571: --------------------------------------------------------------------------------
  572:   Sorties :
  573: --------------------------------------------------------------------------------
  574:   Effets de bord : néant
  575: ================================================================================
  576: */
  577: 
  578: void
  579: instruction_scale(struct_processus *s_etat_processus)
  580: {
  581:     /*
  582:      * Prend comme argument une liste
  583:      */
  584: 
  585:     long                            nombre_arguments_principaux;
  586:     long                            nombre_arguments_auxiliaires;
  587: 
  588:     struct_liste_chainee            *l_element_courant;
  589:     struct_liste_chainee            *l_element_courant_auxiliaire;
  590: 
  591:     struct_objet                    *s_objet_argument;
  592:     struct_objet                    *s_objet_auxiliaire;
  593: 
  594:     unsigned char                   *tampon;
  595: 
  596:     (*s_etat_processus).erreur_execution = d_ex;
  597: 
  598:     if ((*s_etat_processus).affichage_arguments == 'Y')
  599:     {
  600:         printf("\n  SCALE ");
  601: 
  602:         if ((*s_etat_processus).langue == 'F')
  603:         {
  604:             printf("(définition de l'échelle)\n\n");
  605:         }
  606:         else
  607:         {
  608:             printf("(scale definition)\n\n");
  609:         }
  610: 
  611:         printf("    1: %s\n\n", d_LST);
  612: 
  613:         if ((*s_etat_processus).langue == 'F')
  614:         {
  615:             printf("  Utilisation :\n\n");
  616:         }
  617:         else
  618:         {
  619:             printf("  Usage:\n\n");
  620:         }
  621: 
  622:         printf("    { { Xmin Xmax } { Ymin Ymax } { Zmin Zmax } } SCALE\n");
  623:         printf("    { \"AUTOMATIC\" { Ymin Ymax } } SCALE\n");
  624: 
  625:         return;
  626:     }
  627:     else if ((*s_etat_processus).test_instruction == 'Y')
  628:     {
  629:         (*s_etat_processus).nombre_arguments = -1;
  630:         return;
  631:     }
  632: 
  633:     if (test_cfsf(s_etat_processus, 31) == d_vrai)
  634:     {
  635:         if (empilement_pile_last(s_etat_processus, 1) == d_erreur)
  636:         {
  637:             return;
  638:         }
  639:     }
  640: 
  641:     if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
  642:             &s_objet_argument) == d_erreur)
  643:     {
  644:         (*s_etat_processus).erreur_execution = d_ex_manque_argument;
  645:         return;
  646:     }
  647: 
  648:     if ((*s_objet_argument).type == LST)
  649:     {
  650:         l_element_courant = (struct_liste_chainee *) (*s_objet_argument).objet;
  651:         nombre_arguments_principaux = 0;
  652: 
  653:         while(l_element_courant != NULL)
  654:         {
  655:             nombre_arguments_principaux++;
  656:             l_element_courant = (*l_element_courant).suivant;
  657:         }
  658: 
  659:         if ((nombre_arguments_principaux != 2) &&
  660:                 (nombre_arguments_principaux != 3))
  661:         {
  662:             liberation(s_etat_processus, s_objet_argument);
  663: 
  664:             (*s_etat_processus).erreur_execution = d_ex_argument_invalide;
  665:             return;
  666:         }
  667: 
  668:         l_element_courant = (struct_liste_chainee *) (*s_objet_argument).objet;
  669:         nombre_arguments_principaux = 0;
  670: 
  671:         while(l_element_courant != NULL)
  672:         {
  673:             nombre_arguments_principaux++;
  674: 
  675:             if ((*(*l_element_courant).donnee).type == LST)
  676:             {
  677:                 l_element_courant_auxiliaire = (struct_liste_chainee *)
  678:                         (*(*l_element_courant).donnee).objet;
  679:                 nombre_arguments_auxiliaires = 0;
  680: 
  681:                 while(l_element_courant_auxiliaire != NULL)
  682:                 {
  683:                     l_element_courant_auxiliaire =
  684:                             (*l_element_courant_auxiliaire).suivant;
  685:                     nombre_arguments_auxiliaires++;
  686:                 }
  687: 
  688:                 if (nombre_arguments_auxiliaires != 2)
  689:                 {
  690:                     liberation(s_etat_processus, s_objet_argument);
  691: 
  692:                     (*s_etat_processus).erreur_execution =
  693:                             d_ex_argument_invalide;
  694:                     return;
  695:                 }
  696: 
  697:                 l_element_courant_auxiliaire = (struct_liste_chainee *)
  698:                         (*(*l_element_courant).donnee).objet;
  699:                 nombre_arguments_auxiliaires = 0;
  700: 
  701:                 while(l_element_courant_auxiliaire != NULL)
  702:                 {
  703:                     nombre_arguments_auxiliaires++;
  704: 
  705:                     if (((*(*l_element_courant_auxiliaire).donnee).type ==
  706:                             RPN) || (
  707:                             (*(*l_element_courant_auxiliaire).donnee)
  708:                             .type == ALG) ||
  709:                             ((*(*l_element_courant_auxiliaire).donnee)
  710:                             .type == NOM))
  711:                     {
  712:                         if (evaluation(s_etat_processus,
  713:                                 (*l_element_courant_auxiliaire).donnee, 'N')
  714:                                 == d_erreur)
  715:                         {
  716:                             liberation(s_etat_processus, s_objet_argument);
  717: 
  718:                             return;
  719:                         }
  720: 
  721:                         if (depilement(s_etat_processus,
  722:                                 &((*s_etat_processus).l_base_pile),
  723:                                 &s_objet_auxiliaire) == d_erreur)
  724:                         {
  725:                             liberation(s_etat_processus, s_objet_argument);
  726: 
  727:                             (*s_etat_processus).erreur_execution =
  728:                                     d_ex_manque_argument;
  729:                             return;
  730:                         }
  731: 
  732:                         liberation(s_etat_processus,
  733:                                 (*l_element_courant_auxiliaire).donnee);
  734:                         (*l_element_courant_auxiliaire).donnee =
  735:                                 s_objet_auxiliaire;
  736:                     }
  737: 
  738:                     if ((*(*l_element_courant_auxiliaire).donnee).type == INT)
  739:                     {
  740:                         switch(nombre_arguments_principaux)
  741:                         {
  742:                             case 1 :
  743:                             {
  744:                                 if (nombre_arguments_auxiliaires == 1)
  745:                                 {
  746:                                     if ((*s_etat_processus).systeme_axes == 0)
  747:                                     {
  748:                                         (*s_etat_processus).x_min = (real8)
  749:                                                 (*((integer8 *) (*
  750:                                                 (*l_element_courant_auxiliaire)
  751:                                                 .donnee).objet));
  752:                                     }
  753:                                     else
  754:                                     {
  755:                                         (*s_etat_processus).x2_min = (real8)
  756:                                                 (*((integer8 *) (*
  757:                                                 (*l_element_courant_auxiliaire)
  758:                                                 .donnee).objet));
  759:                                     }
  760:                                 }
  761:                                 else if (nombre_arguments_auxiliaires == 2)
  762:                                 {
  763:                                     if ((*s_etat_processus).systeme_axes == 0)
  764:                                     {
  765:                                         (*s_etat_processus).x_max = (real8)
  766:                                                 (*((integer8 *) (*
  767:                                                 (*l_element_courant_auxiliaire)
  768:                                                 .donnee).objet));
  769:                                         (*s_etat_processus)
  770:                                                 .echelle_automatique_x = d_faux;
  771:                                     }
  772:                                     else
  773:                                     {
  774:                                         (*s_etat_processus).x2_max = (real8)
  775:                                                 (*((integer8 *) (*
  776:                                                 (*l_element_courant_auxiliaire)
  777:                                                 .donnee).objet));
  778:                                         (*s_etat_processus)
  779:                                                 .echelle_automatique_x2
  780:                                                 = d_faux;
  781:                                     }
  782:                                 }
  783:                                 else
  784:                                 {
  785:                                     liberation(s_etat_processus,
  786:                                             s_objet_argument);
  787: 
  788:                                     (*s_etat_processus).erreur_execution =
  789:                                             d_ex_argument_invalide;
  790:                                     return;
  791:                                 }
  792: 
  793:                                 break;
  794:                             }
  795: 
  796:                             case 2 :
  797:                             {
  798:                                 if (nombre_arguments_auxiliaires == 1)
  799:                                 {
  800:                                     if ((*s_etat_processus).systeme_axes == 0)
  801:                                     {
  802:                                         (*s_etat_processus).y_min = (real8)
  803:                                                 (*((integer8 *) (*
  804:                                                 (*l_element_courant_auxiliaire)
  805:                                                 .donnee).objet));
  806:                                     }
  807:                                     else
  808:                                     {
  809:                                         (*s_etat_processus).y2_min = (real8)
  810:                                                 (*((integer8 *) (*
  811:                                                 (*l_element_courant_auxiliaire)
  812:                                                 .donnee).objet));
  813:                                     }
  814:                                 }
  815:                                 else if (nombre_arguments_auxiliaires == 2)
  816:                                 {
  817:                                     if ((*s_etat_processus).systeme_axes == 0)
  818:                                     {
  819:                                         (*s_etat_processus).y_max = (real8)
  820:                                                 (*((integer8 *) (*
  821:                                                 (*l_element_courant_auxiliaire)
  822:                                                 .donnee).objet));
  823: 
  824:                                         (*s_etat_processus)
  825:                                                 .echelle_automatique_y = d_faux;
  826:                                     }
  827:                                     else
  828:                                     {
  829:                                         (*s_etat_processus).y2_max = (real8)
  830:                                                 (*((integer8 *) (*
  831:                                                 (*l_element_courant_auxiliaire)
  832:                                                 .donnee).objet));
  833: 
  834:                                         (*s_etat_processus)
  835:                                                 .echelle_automatique_y2
  836:                                                 = d_faux;
  837:                                     }
  838:                                 }
  839:                                 else
  840:                                 {
  841:                                     liberation(s_etat_processus,
  842:                                             s_objet_argument);
  843: 
  844:                                     (*s_etat_processus).erreur_execution =
  845:                                             d_ex_argument_invalide;
  846:                                     return;
  847:                                 }
  848: 
  849:                                 break;
  850:                             }
  851: 
  852:                             case 3 :
  853:                             {
  854:                                 if (nombre_arguments_auxiliaires == 1)
  855:                                 {
  856:                                     if ((*s_etat_processus).systeme_axes == 0)
  857:                                     {
  858:                                         (*s_etat_processus).z_min = (real8)
  859:                                                 (*((integer8 *) (*
  860:                                                 (*l_element_courant_auxiliaire)
  861:                                                 .donnee).objet));
  862:                                     }
  863:                                     else
  864:                                     {
  865:                                         (*s_etat_processus).z2_min = (real8)
  866:                                                 (*((integer8 *) (*
  867:                                                 (*l_element_courant_auxiliaire)
  868:                                                 .donnee).objet));
  869:                                     }
  870:                                 }
  871:                                 else if (nombre_arguments_auxiliaires == 2)
  872:                                 {
  873:                                     if ((*s_etat_processus).systeme_axes == 0)
  874:                                     {
  875:                                         (*s_etat_processus).z_max = (real8)
  876:                                                 (*((integer8 *) (*
  877:                                                 (*l_element_courant_auxiliaire)
  878:                                                 .donnee).objet));
  879: 
  880:                                         (*s_etat_processus)
  881:                                                 .echelle_automatique_z = d_faux;
  882:                                     }
  883:                                     else
  884:                                     {
  885:                                         (*s_etat_processus).z2_max = (real8)
  886:                                                 (*((integer8 *) (*
  887:                                                 (*l_element_courant_auxiliaire)
  888:                                                 .donnee).objet));
  889: 
  890:                                         (*s_etat_processus)
  891:                                                 .echelle_automatique_z
  892:                                                 = d_faux;
  893:                                     }
  894:                                 }
  895:                                 else
  896:                                 {
  897:                                     liberation(s_etat_processus,
  898:                                             s_objet_argument);
  899: 
  900:                                     (*s_etat_processus).erreur_execution =
  901:                                             d_ex_argument_invalide;
  902:                                     return;
  903:                                 }
  904: 
  905:                                 break;
  906:                             }
  907: 
  908:                             default :
  909:                             {
  910:                                 liberation(s_etat_processus, s_objet_argument);
  911: 
  912:                                 (*s_etat_processus).erreur_execution =
  913:                                         d_ex_argument_invalide;
  914:                                 return;
  915:                             }
  916:                         }
  917:                     }
  918:                     else if ((*(*l_element_courant_auxiliaire)
  919:                             .donnee).type == REL)
  920:                     {
  921:                         switch(nombre_arguments_principaux)
  922:                         {
  923:                             case 1 :
  924:                             {
  925:                                 if (nombre_arguments_auxiliaires == 1)
  926:                                 {
  927:                                     if ((*s_etat_processus).systeme_axes == 0)
  928:                                     {
  929:                                         (*s_etat_processus).x_min =
  930:                                                 (*((real8 *) (*
  931:                                                 (*l_element_courant_auxiliaire)
  932:                                                 .donnee).objet));
  933:                                     }
  934:                                     else
  935:                                     {
  936:                                         (*s_etat_processus).x2_min =
  937:                                                 (*((real8 *) (*
  938:                                                 (*l_element_courant_auxiliaire)
  939:                                                 .donnee).objet));
  940:                                     }
  941:                                 }
  942:                                 else if (nombre_arguments_auxiliaires == 2)
  943:                                 {
  944:                                     if ((*s_etat_processus).systeme_axes == 0)
  945:                                     {
  946:                                         (*s_etat_processus).x_max =
  947:                                                 (*((real8 *) (*
  948:                                                 (*l_element_courant_auxiliaire)
  949:                                                 .donnee).objet));
  950:                                     
  951:                                         (*s_etat_processus)
  952:                                                 .echelle_automatique_x = d_faux;
  953:                                     }
  954:                                     else
  955:                                     {
  956:                                         (*s_etat_processus).x2_max =
  957:                                                 (*((real8 *) (*
  958:                                                 (*l_element_courant_auxiliaire)
  959:                                                 .donnee).objet));
  960: 
  961:                                         (*s_etat_processus)
  962:                                                 .echelle_automatique_x2
  963:                                                 = d_faux;
  964:                                     }
  965:                                 }
  966:                                 else
  967:                                 {
  968:                                     liberation(s_etat_processus,
  969:                                             s_objet_argument);
  970: 
  971:                                     (*s_etat_processus).erreur_execution =
  972:                                             d_ex_argument_invalide;
  973:                                     return;
  974:                                 }
  975: 
  976:                                 break;
  977:                             }
  978: 
  979:                             case 2 :
  980:                             {
  981:                                 if (nombre_arguments_auxiliaires == 1)
  982:                                 {
  983:                                     if ((*s_etat_processus).systeme_axes == 0)
  984:                                     {
  985:                                         (*s_etat_processus).y_min =
  986:                                                 (*((real8 *) (*
  987:                                                 (*l_element_courant_auxiliaire)
  988:                                                 .donnee).objet));
  989:                                     }
  990:                                     else
  991:                                     {
  992:                                         (*s_etat_processus).y2_min =
  993:                                                 (*((real8 *) (*
  994:                                                 (*l_element_courant_auxiliaire)
  995:                                                 .donnee).objet));
  996:                                     }
  997:                                 }
  998:                                 else if (nombre_arguments_auxiliaires == 2)
  999:                                 {
 1000:                                     if ((*s_etat_processus).systeme_axes == 0)
 1001:                                     {
 1002:                                         (*s_etat_processus).y_max =
 1003:                                                 (*((real8 *) (*
 1004:                                                 (*l_element_courant_auxiliaire)
 1005:                                                 .donnee).objet));
 1006: 
 1007:                                         (*s_etat_processus)
 1008:                                                 .echelle_automatique_y = d_faux;
 1009:                                     }
 1010:                                     else
 1011:                                     {
 1012:                                         (*s_etat_processus).y2_max =
 1013:                                                 (*((real8 *) (*
 1014:                                                 (*l_element_courant_auxiliaire)
 1015:                                                 .donnee).objet));
 1016: 
 1017:                                         (*s_etat_processus)
 1018:                                                 .echelle_automatique_y2
 1019:                                                 = d_faux;
 1020:                                     }
 1021:                                 }
 1022:                                 else
 1023:                                 {
 1024:                                     liberation(s_etat_processus,
 1025:                                             s_objet_argument);
 1026: 
 1027:                                     (*s_etat_processus).erreur_execution =
 1028:                                             d_ex_argument_invalide;
 1029:                                     return;
 1030:                                 }
 1031: 
 1032:                                 break;
 1033:                             }
 1034: 
 1035:                             case 3 :
 1036:                             {
 1037:                                 if (nombre_arguments_auxiliaires == 1)
 1038:                                 {
 1039:                                     if ((*s_etat_processus).systeme_axes == 0)
 1040:                                     {
 1041:                                         (*s_etat_processus).z_min =
 1042:                                                 (*((real8 *) (*
 1043:                                                 (*l_element_courant_auxiliaire)
 1044:                                                 .donnee).objet));
 1045:                                     }
 1046:                                     else
 1047:                                     {
 1048:                                         (*s_etat_processus).z2_min =
 1049:                                                 (*((real8 *) (*
 1050:                                                 (*l_element_courant_auxiliaire)
 1051:                                                 .donnee).objet));
 1052:                                     }
 1053:                                 }
 1054:                                 else if (nombre_arguments_auxiliaires == 2)
 1055:                                 {
 1056:                                     if ((*s_etat_processus).systeme_axes == 0)
 1057:                                     {
 1058:                                         (*s_etat_processus).z_max =
 1059:                                                 (*((real8 *) (*
 1060:                                                 (*l_element_courant_auxiliaire)
 1061:                                                 .donnee).objet));
 1062: 
 1063:                                         (*s_etat_processus)
 1064:                                                 .echelle_automatique_z = d_faux;
 1065:                                     }
 1066:                                     else
 1067:                                     {
 1068:                                         (*s_etat_processus).z2_max =
 1069:                                                 (*((real8 *) (*
 1070:                                                 (*l_element_courant_auxiliaire)
 1071:                                                 .donnee).objet));
 1072: 
 1073:                                         (*s_etat_processus)
 1074:                                                 .echelle_automatique_z2
 1075:                                                 = d_faux;
 1076:                                     }
 1077:                                 }
 1078:                                 else
 1079:                                 {
 1080:                                     liberation(s_etat_processus,
 1081:                                             s_objet_argument);
 1082: 
 1083:                                     (*s_etat_processus).erreur_execution =
 1084:                                             d_ex_argument_invalide;
 1085:                                     return;
 1086:                                 }
 1087: 
 1088:                                 break;
 1089:                             }
 1090: 
 1091:                             default :
 1092:                             {
 1093:                                 liberation(s_etat_processus, s_objet_argument);
 1094: 
 1095:                                 (*s_etat_processus).erreur_execution =
 1096:                                         d_ex_argument_invalide;
 1097:                                 return;
 1098:                             }
 1099:                         }
 1100:                     }
 1101: 
 1102:                     l_element_courant_auxiliaire =
 1103:                             (*l_element_courant_auxiliaire).suivant;
 1104:                 }
 1105:             }
 1106:             else if ((*(*l_element_courant).donnee).type == CHN)
 1107:             {
 1108:                 tampon = conversion_majuscule((unsigned char *)
 1109:                         (*(*l_element_courant).donnee).objet);
 1110: 
 1111:                 if (tampon == NULL)
 1112:                 {
 1113:                     (*s_etat_processus).erreur_systeme =
 1114:                             d_es_allocation_memoire;
 1115:                     return;
 1116:                 }
 1117: 
 1118:                 if (strcmp(tampon, "AUTOMATIC") == 0)
 1119:                 {
 1120:                     switch(nombre_arguments_principaux)
 1121:                     {
 1122:                         case 1 :
 1123:                         {
 1124:                             if ((*s_etat_processus).systeme_axes == 0)
 1125:                             {
 1126:                                 (*s_etat_processus).echelle_automatique_x
 1127:                                         = d_vrai;
 1128:                             }
 1129:                             else
 1130:                             {
 1131:                                 (*s_etat_processus).echelle_automatique_x2
 1132:                                         = d_vrai;
 1133:                             }
 1134: 
 1135:                             break;
 1136:                         }
 1137: 
 1138:                         case 2 :
 1139:                         {
 1140:                             if ((*s_etat_processus).systeme_axes == 0)
 1141:                             {
 1142:                                 (*s_etat_processus).echelle_automatique_y
 1143:                                         = d_vrai;
 1144:                             }
 1145:                             else
 1146:                             {
 1147:                                 (*s_etat_processus).echelle_automatique_y2
 1148:                                         = d_vrai;
 1149:                             }
 1150: 
 1151:                             break;
 1152:                         }
 1153: 
 1154:                         case 3 :
 1155:                         {
 1156:                             if ((*s_etat_processus).systeme_axes == 0)
 1157:                             {
 1158:                                 (*s_etat_processus).echelle_automatique_z
 1159:                                         = d_vrai;
 1160:                             }
 1161:                             else
 1162:                             {
 1163:                                 (*s_etat_processus).echelle_automatique_z2
 1164:                                         = d_vrai;
 1165:                             }
 1166: 
 1167:                             break;
 1168:                         }
 1169: 
 1170:                         default :
 1171:                         {
 1172:                             liberation(s_etat_processus, s_objet_argument);
 1173:                             free(tampon);
 1174: 
 1175:                             (*s_etat_processus).erreur_execution =
 1176:                                     d_ex_argument_invalide;
 1177:                             return;
 1178:                         }
 1179:                     }
 1180:                 }
 1181:                 else
 1182:                 {
 1183:                     liberation(s_etat_processus, s_objet_argument);
 1184:                     free(tampon);
 1185: 
 1186:                     (*s_etat_processus).erreur_execution =
 1187:                             d_ex_argument_invalide;
 1188:                     return;
 1189:                 }
 1190: 
 1191:                 free(tampon);
 1192:             }
 1193:             else
 1194:             {
 1195:                 liberation(s_etat_processus, s_objet_argument);
 1196: 
 1197:                 (*s_etat_processus).erreur_execution =
 1198:                         d_ex_erreur_type_argument;
 1199:                 return;
 1200:             }
 1201: 
 1202:             l_element_courant = (*l_element_courant).suivant;
 1203:         }
 1204:     }
 1205:     else
 1206:     {
 1207:         liberation(s_etat_processus, s_objet_argument);
 1208: 
 1209:         (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
 1210:         return;
 1211:     }
 1212: 
 1213:     liberation(s_etat_processus, s_objet_argument);
 1214: 
 1215:     if (test_cfsf(s_etat_processus, 52) == d_faux)
 1216:     {
 1217:         if ((*s_etat_processus).fichiers_graphiques != NULL)
 1218:         {
 1219:             appel_gnuplot(s_etat_processus, 'N');
 1220:         }
 1221:     }
 1222: 
 1223:     return;
 1224: }
 1225: 
 1226: 
 1227: /*
 1228: ================================================================================
 1229:   Fonction 'scls'
 1230: ================================================================================
 1231:   Entrées :
 1232: --------------------------------------------------------------------------------
 1233:   Sorties :
 1234: --------------------------------------------------------------------------------
 1235:   Effets de bord : néant
 1236: ================================================================================
 1237: */
 1238: 
 1239: void
 1240: instruction_scls(struct_processus *s_etat_processus)
 1241: {
 1242:     logical1                    presence_variable;
 1243:     logical1                    matrice_entiere;
 1244: 
 1245:     long                        i;
 1246: 
 1247:     real8                       valeur_courante;
 1248: 
 1249:     struct_objet                *s_objet_statistique;
 1250: 
 1251:     unsigned long               j;
 1252: 
 1253:     (*s_etat_processus).erreur_execution = d_ex;
 1254: 
 1255:     if ((*s_etat_processus).affichage_arguments == 'Y')
 1256:     {
 1257:         printf("\n  SCLS ");
 1258: 
 1259:         if ((*s_etat_processus).langue == 'F')
 1260:         {
 1261:             printf("(échelle automatique d'un nuage de points)\n\n");
 1262:             printf("  Aucun argument\n");
 1263:         }
 1264:         else
 1265:         {
 1266:             printf("(auto scale scatter plot)\n\n");
 1267:             printf("  No argument\n");
 1268:         }
 1269: 
 1270:         return;
 1271:     }
 1272:     else if ((*s_etat_processus).test_instruction == 'Y')
 1273:     {
 1274:         (*s_etat_processus).nombre_arguments = -1;
 1275:         return;
 1276:     }
 1277: 
 1278:     if (test_cfsf(s_etat_processus, 31) == d_vrai)
 1279:     {
 1280:         if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 1281:         {
 1282:             return;
 1283:         }
 1284:     }
 1285: 
 1286:     /*
 1287:      * Vérification de la présence de la matrice statistique
 1288:      */
 1289: 
 1290:     if (recherche_variable(s_etat_processus, ds_sdat) == d_faux)
 1291:     {
 1292:         /*
 1293:          * Aucune variable ds_sdat n'existe.
 1294:          */
 1295: 
 1296:         (*s_etat_processus).erreur_execution = d_ex_absence_observations;
 1297:         (*s_etat_processus).erreur_systeme = d_es;
 1298: 
 1299:         return;
 1300:     }
 1301: 
 1302:     i = (*s_etat_processus).position_variable_courante;
 1303:     presence_variable = d_faux;
 1304: 
 1305:     while(i >= 0)
 1306:     {
 1307:         if ((strcmp((*s_etat_processus).s_liste_variables[i].nom,
 1308:                 ds_sdat) == 0) && ((*s_etat_processus)
 1309:                 .s_liste_variables[i].niveau == 1))
 1310:         {
 1311:             presence_variable = d_vrai;
 1312:             break;
 1313:         }
 1314: 
 1315:         i--;
 1316:     }
 1317: 
 1318:     if (presence_variable == d_faux)
 1319:     {
 1320:         (*s_etat_processus).erreur_execution = d_ex_absence_observations;
 1321:         return;
 1322:     }
 1323: 
 1324:     if ((*s_etat_processus).s_liste_variables[i].objet == NULL)
 1325:     {
 1326:         (*s_etat_processus).erreur_execution = d_ex_variable_partagee;
 1327:         return;
 1328:     }
 1329: 
 1330:     s_objet_statistique = (*s_etat_processus).s_liste_variables[i].objet;
 1331: 
 1332:     if ((*s_objet_statistique).type == MIN)
 1333:     {
 1334:         matrice_entiere = d_vrai;
 1335:     }
 1336:     else if ((*s_objet_statistique).type == MRL)
 1337:     {
 1338:         matrice_entiere = d_faux;
 1339:     }
 1340:     else
 1341:     {
 1342:         (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
 1343:         return;
 1344:     }
 1345: 
 1346:     switch((*((struct_matrice *) (*s_objet_statistique).objet)).nombre_colonnes)
 1347:     {
 1348:         /*
 1349:          * Une colonne
 1350:          */
 1351: 
 1352:         case 1 :
 1353:         {
 1354:             (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
 1355:             break;
 1356:         }
 1357: 
 1358:         /*
 1359:          * Deux colonnes ou plus
 1360:          */
 1361: 
 1362:         default :
 1363:         {
 1364:             if (((*s_etat_processus).colonne_statistique_1 < 1) ||
 1365:                     ((*s_etat_processus).colonne_statistique_2 < 1) ||
 1366:                     ((*s_etat_processus).colonne_statistique_1 > (integer8)
 1367:                     (*((struct_matrice *) (*s_objet_statistique).objet))
 1368:                     .nombre_colonnes) ||
 1369:                     ((*s_etat_processus).colonne_statistique_2 > (integer8)
 1370:                     (*((struct_matrice *) (*s_objet_statistique).objet))
 1371:                     .nombre_colonnes))
 1372:             {
 1373:                 (*s_etat_processus).erreur_execution =
 1374:                         d_ex_observations_inexistantes;
 1375:                 return;
 1376:             }
 1377: 
 1378:             if (matrice_entiere == d_vrai)
 1379:             {
 1380:                 if ((*s_etat_processus).systeme_axes == 0)
 1381:                 {
 1382:                     (*s_etat_processus).x_min = (real8) ((integer8 **)
 1383:                             (*((struct_matrice *) (*s_objet_statistique).objet))
 1384:                             .tableau)[0][(*s_etat_processus)
 1385:                             .colonne_statistique_1 - 1];
 1386:                     (*s_etat_processus).x_max = (*s_etat_processus).x_min;
 1387:                 }
 1388:                 else
 1389:                 {
 1390:                     (*s_etat_processus).x2_min = (real8) ((integer8 **)
 1391:                             (*((struct_matrice *) (*s_objet_statistique).objet))
 1392:                             .tableau)[0][(*s_etat_processus)
 1393:                             .colonne_statistique_1 - 1];
 1394:                     (*s_etat_processus).x2_max = (*s_etat_processus).x2_min;
 1395:                 }
 1396: 
 1397:                 if ((*s_etat_processus).systeme_axes == 0)
 1398:                 {
 1399:                     (*s_etat_processus).y_min = (real8) ((integer8 **)
 1400:                             (*((struct_matrice *) (*s_objet_statistique).objet))
 1401:                             .tableau)[0][(*s_etat_processus)
 1402:                             .colonne_statistique_2 - 1];
 1403:                     (*s_etat_processus).y_max = (*s_etat_processus).y_min;
 1404:                 }
 1405:                 else
 1406:                 {
 1407:                     (*s_etat_processus).y2_min = (real8) ((integer8 **)
 1408:                             (*((struct_matrice *) (*s_objet_statistique).objet))
 1409:                             .tableau)[0][(*s_etat_processus)
 1410:                             .colonne_statistique_2 - 1];
 1411:                     (*s_etat_processus).y2_max = (*s_etat_processus).y2_min;
 1412:                 }
 1413:             }
 1414:             else
 1415:             {
 1416:                 if ((*s_etat_processus).systeme_axes == 0)
 1417:                 {
 1418:                     (*s_etat_processus).x_min = ((real8 **)
 1419:                             (*((struct_matrice *) (*s_objet_statistique).objet))
 1420:                             .tableau)[0][(*s_etat_processus)
 1421:                             .colonne_statistique_1 - 1];
 1422:                     (*s_etat_processus).x_max = (*s_etat_processus).x_min;
 1423:                 }
 1424:                 else
 1425:                 {
 1426:                     (*s_etat_processus).x2_min = ((real8 **)
 1427:                             (*((struct_matrice *) (*s_objet_statistique).objet))
 1428:                             .tableau)[0][(*s_etat_processus)
 1429:                             .colonne_statistique_1 - 1];
 1430:                     (*s_etat_processus).x2_max = (*s_etat_processus).x2_min;
 1431:                 }
 1432: 
 1433:                 if ((*s_etat_processus).systeme_axes == 0)
 1434:                 {
 1435:                     (*s_etat_processus).y_min = ((real8 **)
 1436:                             (*((struct_matrice *) (*s_objet_statistique).objet))
 1437:                             .tableau)[0][(*s_etat_processus)
 1438:                             .colonne_statistique_2 - 1];
 1439:                     (*s_etat_processus).y_max = (*s_etat_processus).y_min;
 1440:                 }
 1441:                 else
 1442:                 {
 1443:                     (*s_etat_processus).y2_min = ((real8 **)
 1444:                             (*((struct_matrice *) (*s_objet_statistique).objet))
 1445:                             .tableau)[0][(*s_etat_processus)
 1446:                             .colonne_statistique_2 - 1];
 1447:                     (*s_etat_processus).y2_max = (*s_etat_processus).y2_min;
 1448:                 }
 1449:             }
 1450: 
 1451:             for(j = 1; j < (*((struct_matrice *) (*s_objet_statistique).objet))
 1452:                     .nombre_lignes; j++)
 1453:             {
 1454:                 if (matrice_entiere == d_vrai)
 1455:                 {
 1456:                     valeur_courante = (real8) ((integer8 **)
 1457:                             (*((struct_matrice *) (*s_objet_statistique).objet))
 1458:                             .tableau)[j][(*s_etat_processus)
 1459:                             .colonne_statistique_1 - 1];
 1460: 
 1461:                     if ((*s_etat_processus).systeme_axes == 0)
 1462:                     {
 1463:                         if (valeur_courante < (*s_etat_processus).x_min)
 1464:                         {
 1465:                             (*s_etat_processus).x_min = valeur_courante;
 1466:                         }
 1467: 
 1468:                         if (valeur_courante > (*s_etat_processus).x_max)
 1469:                         {
 1470:                             (*s_etat_processus).x_max = valeur_courante;
 1471:                         }
 1472:                     }
 1473:                     else
 1474:                     {
 1475:                         if (valeur_courante < (*s_etat_processus).x2_min)
 1476:                         {
 1477:                             (*s_etat_processus).x2_min = valeur_courante;
 1478:                         }
 1479: 
 1480:                         if (valeur_courante > (*s_etat_processus).x2_max)
 1481:                         {
 1482:                             (*s_etat_processus).x2_max = valeur_courante;
 1483:                         }
 1484:                     }
 1485: 
 1486:                     valeur_courante = (real8) ((integer8 **)
 1487:                             (*((struct_matrice *) (*s_objet_statistique).objet))
 1488:                             .tableau)[j][(*s_etat_processus)
 1489:                             .colonne_statistique_2 - 1];
 1490: 
 1491:                     if ((*s_etat_processus).systeme_axes == 0)
 1492:                     {
 1493:                         if (valeur_courante < (*s_etat_processus).y_min)
 1494:                         {
 1495:                             (*s_etat_processus).y_min = valeur_courante;
 1496:                         }
 1497: 
 1498:                         if (valeur_courante > (*s_etat_processus).y_max)
 1499:                         {
 1500:                             (*s_etat_processus).y_max = valeur_courante;
 1501:                         }
 1502:                     }
 1503:                     else
 1504:                     {
 1505:                         if (valeur_courante < (*s_etat_processus).y2_min)
 1506:                         {
 1507:                             (*s_etat_processus).y2_min = valeur_courante;
 1508:                         }
 1509: 
 1510:                         if (valeur_courante > (*s_etat_processus).y2_max)
 1511:                         {
 1512:                             (*s_etat_processus).y2_max = valeur_courante;
 1513:                         }
 1514:                     }
 1515:                 }
 1516:                 else
 1517:                 {
 1518:                     valeur_courante = ((real8 **)
 1519:                             (*((struct_matrice *) (*s_objet_statistique).objet))
 1520:                             .tableau)[j][(*s_etat_processus)
 1521:                             .colonne_statistique_1 - 1];
 1522: 
 1523:                     if ((*s_etat_processus).systeme_axes == 0)
 1524:                     {
 1525:                         if (valeur_courante < (*s_etat_processus).x_min)
 1526:                         {
 1527:                             (*s_etat_processus).x_min = valeur_courante;
 1528:                         }
 1529: 
 1530:                         if (valeur_courante > (*s_etat_processus).x_max)
 1531:                         {
 1532:                             (*s_etat_processus).x_max = valeur_courante;
 1533:                         }
 1534:                     }
 1535:                     else
 1536:                     {
 1537:                         if (valeur_courante < (*s_etat_processus).x2_min)
 1538:                         {
 1539:                             (*s_etat_processus).x2_min = valeur_courante;
 1540:                         }
 1541: 
 1542:                         if (valeur_courante > (*s_etat_processus).x2_max)
 1543:                         {
 1544:                             (*s_etat_processus).x2_max = valeur_courante;
 1545:                         }
 1546:                     }
 1547: 
 1548:                     valeur_courante = ((real8 **)
 1549:                             (*((struct_matrice *) (*s_objet_statistique).objet))
 1550:                             .tableau)[j][(*s_etat_processus)
 1551:                             .colonne_statistique_2 - 1];
 1552: 
 1553:                     if ((*s_etat_processus).systeme_axes == 0)
 1554:                     {
 1555:                         if (valeur_courante < (*s_etat_processus).y_min)
 1556:                         {
 1557:                             (*s_etat_processus).y_min = valeur_courante;
 1558:                         }
 1559: 
 1560:                         if (valeur_courante > (*s_etat_processus).y_max)
 1561:                         {
 1562:                             (*s_etat_processus).y_max = valeur_courante;
 1563:                         }
 1564:                     }
 1565:                     else
 1566:                     {
 1567:                         if (valeur_courante < (*s_etat_processus).y2_min)
 1568:                         {
 1569:                             (*s_etat_processus).y2_min = valeur_courante;
 1570:                         }
 1571: 
 1572:                         if (valeur_courante > (*s_etat_processus).y2_max)
 1573:                         {
 1574:                             (*s_etat_processus).y2_max = valeur_courante;
 1575:                         }
 1576:                     }
 1577:                 }
 1578:             }
 1579: 
 1580:             break;
 1581:         }
 1582:     }
 1583: 
 1584:     return;
 1585: }
 1586: 
 1587: 
 1588: /*
 1589: ================================================================================
 1590:   Fonction 'spar'
 1591: ================================================================================
 1592:   Entrées :
 1593: --------------------------------------------------------------------------------
 1594:   Sorties :
 1595: --------------------------------------------------------------------------------
 1596:   Effets de bord : néant
 1597: ================================================================================
 1598: */
 1599: 
 1600: void
 1601: instruction_spar(struct_processus *s_etat_processus)
 1602: {
 1603:     logical1                        presence_matrice_statistique;
 1604:     logical1                        presence_variable;
 1605: 
 1606:     long                            i;
 1607: 
 1608:     struct_liste_chainee            *l_ancienne_base;
 1609:     struct_liste_chainee            *l_nouvelle_base;
 1610: 
 1611:     struct_objet                    *s_objet_resultat;
 1612: 
 1613:     /*
 1614:      * { { Dimensions de SIGMA } X Y }
 1615:      */
 1616:         
 1617:     (*s_etat_processus).erreur_execution = d_ex;
 1618: 
 1619:     if ((*s_etat_processus).affichage_arguments == 'Y')
 1620:     {
 1621:         printf("\n  SPAR ");
 1622: 
 1623:         if ((*s_etat_processus).langue == 'F')
 1624:         {
 1625:             printf("(paramètres statistiques)\n\n");
 1626:         }
 1627:         else
 1628:         {
 1629:             printf("(statistical parameters)\n\n");
 1630:         }
 1631: 
 1632:         printf("->  1: %s\n", d_LST);
 1633: 
 1634:         return;
 1635:     }
 1636:     else if ((*s_etat_processus).test_instruction == 'Y')
 1637:     {
 1638:         (*s_etat_processus).nombre_arguments = -1;
 1639:         return;
 1640:     }
 1641: 
 1642:     if (test_cfsf(s_etat_processus, 31) == d_vrai)
 1643:     {
 1644:         if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 1645:         {
 1646:             return;
 1647:         }
 1648:     }
 1649: 
 1650:     if ((s_objet_resultat = allocation(s_etat_processus, LST)) == NULL)
 1651:     {
 1652:         (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1653:         return;
 1654:     }
 1655: 
 1656:     (*s_objet_resultat).objet = NULL;
 1657:     l_ancienne_base = (*s_objet_resultat).objet;
 1658: 
 1659:     // Colonne 2
 1660: 
 1661:     if ((l_nouvelle_base = malloc(sizeof(struct_liste_chainee))) == NULL)
 1662:     {
 1663:         (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1664:         return;
 1665:     }
 1666: 
 1667:     if (((*l_nouvelle_base).donnee = allocation(s_etat_processus, INT))
 1668:             == NULL)
 1669:     {
 1670:         (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1671:         return;
 1672:     }
 1673: 
 1674:     (*l_nouvelle_base).suivant = l_ancienne_base;
 1675:     (*((integer8 *) (*(*l_nouvelle_base).donnee).objet)) =
 1676:             (*s_etat_processus).colonne_statistique_2;
 1677:     (*s_objet_resultat).objet = l_nouvelle_base;
 1678:     l_ancienne_base = (*s_objet_resultat).objet;
 1679: 
 1680:     // Colonne 1
 1681: 
 1682:     if ((l_nouvelle_base = allocation_maillon(s_etat_processus)) == NULL)
 1683:     {
 1684:         (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1685:         return;
 1686:     }
 1687: 
 1688:     if (((*l_nouvelle_base).donnee = allocation(s_etat_processus, INT))
 1689:             == NULL)
 1690:     {
 1691:         (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1692:         return;
 1693:     }
 1694: 
 1695:     (*l_nouvelle_base).suivant = l_ancienne_base;
 1696:     (*((integer8 *) (*(*l_nouvelle_base).donnee).objet)) =
 1697:             (*s_etat_processus).colonne_statistique_1;
 1698:     (*s_objet_resultat).objet = l_nouvelle_base;
 1699:     l_ancienne_base = (*s_objet_resultat).objet;
 1700: 
 1701:     // Dimensions de la matrice statistique
 1702: 
 1703:     if ((l_nouvelle_base = allocation_maillon(s_etat_processus)) == NULL)
 1704:     {
 1705:         (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1706:         return;
 1707:     }
 1708: 
 1709:     if (((*l_nouvelle_base).donnee = allocation(s_etat_processus, NON))
 1710:             == NULL)
 1711:     {
 1712:         (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1713:         return;
 1714:     }
 1715: 
 1716:     if (recherche_variable(s_etat_processus, ds_sdat) == d_faux)
 1717:     {
 1718:         /*
 1719:          * Aucune variable SIGMA
 1720:          */
 1721: 
 1722:         (*s_etat_processus).erreur_systeme = d_es;
 1723:         (*s_etat_processus).erreur_execution = d_ex;
 1724:         presence_matrice_statistique = d_faux;
 1725:     }
 1726:     else
 1727:     {
 1728:         /*
 1729:          * Il existe une variable locale SIGMA. Reste à vérifier l'existence
 1730:          * d'une variable SIGMA globale...
 1731:          */
 1732: 
 1733:         i = (*s_etat_processus).position_variable_courante;
 1734:         presence_variable = d_faux;
 1735: 
 1736:         while(i >= 0)
 1737:         {
 1738:             if ((strcmp((*s_etat_processus).s_liste_variables[i].nom,
 1739:                     ds_sdat) == 0) && ((*s_etat_processus)
 1740:                     .s_liste_variables[i].niveau == 1))
 1741:             {
 1742:                 presence_variable = d_vrai;
 1743:                 break;
 1744:             }
 1745: 
 1746:             i--;
 1747:         }
 1748: 
 1749:         if (presence_variable == d_faux)
 1750:         {
 1751:             presence_matrice_statistique = d_faux;
 1752:         }
 1753:         else
 1754:         {
 1755:             if ((*s_etat_processus).s_liste_variables[i].objet == NULL)
 1756:             {
 1757:                 (*s_etat_processus).erreur_execution = d_ex_variable_partagee;
 1758:                 return;
 1759:             }
 1760: 
 1761:             presence_matrice_statistique = d_vrai;
 1762:             (*s_etat_processus).position_variable_courante = i;
 1763:         }
 1764:     }
 1765: 
 1766:     if (presence_matrice_statistique == d_faux)
 1767:     {
 1768:         if (((*(*l_nouvelle_base).donnee).objet = malloc(12 *
 1769:                 sizeof(unsigned char))) == NULL)
 1770:         {
 1771:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1772:             return;
 1773:         }
 1774: 
 1775:         (*(*l_nouvelle_base).donnee).type = CHN;
 1776:         strcpy((unsigned char *) (*(*l_nouvelle_base).donnee).objet,
 1777:                 "UNAVAILABLE");
 1778:     }
 1779:     else
 1780:     {
 1781:         if (((*((*s_etat_processus).s_liste_variables
 1782:                 [(*s_etat_processus).position_variable_courante].objet))
 1783:                 .type != MIN) && ((*((*s_etat_processus)
 1784:                 .s_liste_variables[(*s_etat_processus)
 1785:                 .position_variable_courante].objet)).type != MRL))
 1786:         {
 1787:             if (((*(*l_nouvelle_base).donnee).objet = malloc(9 *
 1788:                     sizeof(unsigned char))) == NULL)
 1789:             {
 1790:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1791:                 return;
 1792:             }
 1793: 
 1794:             (*(*l_nouvelle_base).donnee).type = CHN;
 1795:             strcpy((unsigned char *) (*(*l_nouvelle_base).donnee).objet,
 1796:                     "DISABLED");
 1797:         }
 1798:         else
 1799:         {
 1800:             (*(*l_nouvelle_base).donnee).type = LST;
 1801: 
 1802:             if (((*(*l_nouvelle_base).donnee).objet =
 1803:                     allocation_maillon(s_etat_processus)) == NULL)
 1804:             {
 1805:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1806:                 return;
 1807:             }
 1808: 
 1809:             if (((*((struct_liste_chainee *) (*(*l_nouvelle_base).donnee)
 1810:                     .objet)).donnee = allocation(s_etat_processus, INT))
 1811:                     == NULL)
 1812:             {
 1813:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1814:                 return;
 1815:             }
 1816: 
 1817:             (*((integer8 *) (*((*((struct_liste_chainee *) (*(*l_nouvelle_base)
 1818:                     .donnee).objet)).donnee)).objet)) = (*((struct_matrice *)
 1819:                     (*((*s_etat_processus).s_liste_variables
 1820:                     [(*s_etat_processus).position_variable_courante].objet))
 1821:                     .objet)).nombre_lignes;
 1822: 
 1823:             if (((*((struct_liste_chainee *) (*(*l_nouvelle_base).donnee)
 1824:                     .objet)).suivant = allocation_maillon(s_etat_processus))
 1825:                     == NULL)
 1826:             {
 1827:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1828:                 return;
 1829:             }
 1830: 
 1831:             (*(*((struct_liste_chainee *) (*(*l_nouvelle_base).donnee).objet))
 1832:                     .suivant).suivant = NULL;
 1833: 
 1834:             if (((*(*((struct_liste_chainee *) (*(*l_nouvelle_base).donnee)
 1835:                     .objet)).suivant).donnee = allocation(s_etat_processus,
 1836:                     INT)) == NULL)
 1837:             {
 1838:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1839:                 return;
 1840:             }
 1841: 
 1842:             (*((integer8 *) (*((*(*((struct_liste_chainee *)
 1843:                     (*(*l_nouvelle_base).donnee).objet)).suivant).donnee))
 1844:                     .objet)) = (*((struct_matrice *) (*((*s_etat_processus)
 1845:                     .s_liste_variables[(*s_etat_processus)
 1846:                     .position_variable_courante].objet)).objet))
 1847:                     .nombre_colonnes;
 1848:         }
 1849:     }
 1850: 
 1851:     (*l_nouvelle_base).suivant = l_ancienne_base;
 1852:     (*s_objet_resultat).objet = l_nouvelle_base;
 1853: 
 1854:     if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
 1855:             s_objet_resultat) == d_erreur)
 1856:     {
 1857:         return;
 1858:     }
 1859: 
 1860:     return;
 1861: }
 1862: 
 1863: // vim: ts=4

CVSweb interface <joel.bertrand@systella.fr>