File:  [local] / rpl / src / instructions_c4.c
Revision 1.13: download - view: text, annotated - select for diffs - revision graph
Wed Jul 14 14:19:35 2010 UTC (13 years, 9 months ago) by bertrand
Branches: MAIN
CVS tags: HEAD
En route vers la 4.0.18 !

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

CVSweb interface <joel.bertrand@systella.fr>