Annotation of rpl/src/interface_tex.c, revision 1.2

1.1       bertrand    1: /*
                      2: ================================================================================
1.2     ! bertrand    3:   RPL/2 (R) version 4.0.10
1.1       bertrand    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 "tex.conv.h"
                     25: 
                     26: 
                     27: /*
                     28: ================================================================================
                     29:   Fonction créant un fichier d'impression au format TeX
                     30: ================================================================================
                     31:   Entrées :
                     32: --------------------------------------------------------------------------------
                     33:   Sorties :
                     34: --------------------------------------------------------------------------------
                     35:   Effets de bord : néant
                     36: ================================================================================
                     37: */
                     38: 
                     39: file *
                     40: creation_fichier_tex(struct_processus *s_etat_processus)
                     41: {
                     42:    file                *fichier_impression;
                     43: 
                     44:    unsigned char       *nom_fichier_temporaire;
                     45: 
                     46:    if ((nom_fichier_temporaire = creation_nom_fichier(s_etat_processus,
                     47:            (*s_etat_processus).chemin_fichiers_temporaires)) == NULL)
                     48:    {
                     49:        (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                     50:        return(NULL);
                     51:    }
                     52: 
                     53:    if ((nom_fichier_temporaire = realloc(nom_fichier_temporaire,
                     54:            (strlen(nom_fichier_temporaire) + 5) *
                     55:            sizeof(unsigned char))) == NULL)
                     56:    {
                     57:        (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                     58:        return(NULL);
                     59:    }
                     60: 
                     61:    strcat(nom_fichier_temporaire, ".tex");
                     62:    (*s_etat_processus).nom_fichier_impression = nom_fichier_temporaire;
                     63: 
                     64:    if ((fichier_impression = fopen(nom_fichier_temporaire, "w+")) == NULL)
                     65:    {
                     66:        (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                     67:        return(NULL);
                     68:    }
                     69: 
                     70:    if (fprintf(fichier_impression, "\\documentclass[%s,%s]{%s}\n\n",
                     71:            (*s_etat_processus).format_papier, ds_tex_taille_corps,
                     72:            ds_tex_classe_document) < 0)
                     73:    {
                     74:        (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                     75:        return(NULL);
                     76:    }
                     77: 
                     78: 
                     79:    if (fprintf(fichier_impression, "\\usepackage[%s]{fontenc}\n",
                     80:            ds_tex_encodage_1) < 0)
                     81:    {
                     82:        (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                     83:        return(NULL);
                     84:    }
                     85: 
                     86:    if (fprintf(fichier_impression, "\\usepackage[%s]{inputenc}\n",
                     87:            ds_tex_encodage_2) < 0)
                     88:    {
                     89:        (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                     90:        return(NULL);
                     91:    }
                     92: 
                     93:    if (fprintf(fichier_impression, "\\usepackage[%s]{babel}\n\n",
                     94:            ds_tex_langue) < 0)
                     95:    {
                     96:        (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                     97:        return(NULL);
                     98:    }
                     99: 
                    100:    if (fprintf(fichier_impression, "\\usepackage{latexsym}\n") < 0)
                    101:    {
                    102:        (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                    103:        return(NULL);
                    104:    }
                    105: 
                    106:    if (fprintf(fichier_impression, "\\usepackage[dvips]{color}\n\n") < 0)
                    107:    {
                    108:        (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                    109:        return(NULL);
                    110:    }
                    111: 
                    112:    if (fprintf(fichier_impression, "\\usepackage{amsmath}\n") < 0)
                    113:    {
                    114:        (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                    115:        return(NULL);
                    116:    }
                    117: 
                    118:    if (fprintf(fichier_impression, "\\usepackage{amsfonts}\n") < 0)
                    119:    {
                    120:        (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                    121:        return(NULL);
                    122:    }
                    123: 
                    124:    if (fprintf(fichier_impression, "\\usepackage{amssymb}\n\n") < 0)
                    125:    {
                    126:        (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                    127:        return(NULL);
                    128:    }
                    129: 
                    130:    if (fprintf(fichier_impression, "\\title{Fichier d'impression}\n") < 0)
                    131:    {
                    132:        (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                    133:        return(NULL);
                    134:    }
                    135: 
                    136:    if (fprintf(fichier_impression, "\\author{RPL/2 Version %s}\n",
                    137:            d_version_rpl) < 0)
                    138:    {
                    139:        (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                    140:        return(NULL);
                    141:    }
                    142: 
                    143:    if (fprintf(fichier_impression, "\\date{}\n\n") < 0)
                    144:    {
                    145:        (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                    146:        return(NULL);
                    147:    }
                    148: 
                    149:    if (fprintf(fichier_impression, "\\begin{document}\n\n") < 0)
                    150:    {
                    151:        (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                    152:        return(NULL);
                    153:    }
                    154: 
                    155:    if (fprintf(fichier_impression, "\\thispagestyle{%s}\n", ds_tex_style) < 0)
                    156:    {
                    157:        (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                    158:        return(NULL);
                    159:    }
                    160: 
                    161:    if (fprintf(fichier_impression, "\\pagestyle{%s}\n\n", ds_tex_style) < 0)
                    162:    {
                    163:        (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                    164:        return(NULL);
                    165:    }
                    166: 
                    167:    return(fichier_impression);
                    168: }
                    169: 
                    170: 
                    171: /*
                    172: ================================================================================
                    173:   Fonction 'formateur_tex'
                    174: ================================================================================
                    175:   Entrées : environnement 'V' verbatim, 'N' normal
                    176: --------------------------------------------------------------------------------
                    177:   Sorties :
                    178: --------------------------------------------------------------------------------
                    179:   Effets de bord : néant
                    180: ================================================================================
                    181: */
                    182: 
                    183: void
                    184: formateur_tex(struct_processus *s_etat_processus, struct_objet *s_objet,
                    185:        unsigned char environnement)
                    186: {
                    187:    file                *fichier_impression;
                    188: 
                    189:    /*
                    190:     * Création, le cas échéant, du fichier d'impression
                    191:     */
                    192: 
                    193:    if ((*s_etat_processus).nom_fichier_impression == NULL)
                    194:    {
                    195:        if ((fichier_impression = creation_fichier_tex(s_etat_processus))
                    196:                == NULL)
                    197:        {
                    198:            return;
                    199:        }
                    200:    }
                    201:    else
                    202:    {
                    203:        if ((fichier_impression = fopen((*s_etat_processus)
                    204:                .nom_fichier_impression, "a")) == NULL)
                    205:        {
                    206:            (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                    207:            return;
                    208:        }
                    209:    }
                    210: 
                    211:    /*
                    212:     * Impression d'un entier binaire
                    213:     */
                    214: 
                    215:    if ((*s_objet).type == BIN)
                    216:    {
                    217:        if (fprintf(fichier_impression, "$$") < 0)
                    218:        {
                    219:            (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                    220:            return;
                    221:        }
                    222: 
                    223:        formateur_elementaire_tex(s_etat_processus, fichier_impression,
                    224:                s_objet, environnement);
                    225: 
                    226:        if (fprintf(fichier_impression, "$$\n") < 0)
                    227:        {
                    228:            (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                    229:            return;
                    230:        }
                    231:    }
                    232: 
                    233:    /*
                    234:     * Impression des chaînes de caractères
                    235:     */
                    236: 
                    237:    else if ((*s_objet).type == CHN)
                    238:    {
                    239:        formateur_elementaire_tex(s_etat_processus, fichier_impression,
                    240:                s_objet, environnement);
                    241: 
                    242:        if (fprintf(fichier_impression, "\n") < 0)
                    243:        {
                    244:            (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                    245:            return;
                    246:        }
                    247:    }
                    248: 
                    249:    /*
                    250:     * Impression d'un nombre
                    251:     */
                    252: 
                    253:    else if (((*s_objet).type == CPL) ||
                    254:            ((*s_objet).type == INT) ||
                    255:            ((*s_objet).type == REL))
                    256:    {
                    257:        if (fprintf(fichier_impression, "$$") < 0)
                    258:        {
                    259:            (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                    260:            return;
                    261:        }
                    262:        
                    263:        formateur_elementaire_tex(s_etat_processus, fichier_impression,
                    264:                s_objet, environnement);
                    265: 
                    266:        if (fprintf(fichier_impression, "$$\n") < 0)
                    267:        {
                    268:            (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                    269:            return;
                    270:        }
                    271:    }
                    272: 
                    273:    /*
                    274:     * Impression d'un nom
                    275:     */
                    276: 
                    277:    else if ((*s_objet).type == NOM)
                    278:    {
                    279:        if (fprintf(fichier_impression, "\\begin{center}\n") < 0)
                    280:        {
                    281:            (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                    282:            return;
                    283:        }
                    284: 
                    285:        formateur_elementaire_tex(s_etat_processus, fichier_impression,
                    286:                s_objet, environnement);
                    287: 
                    288:        if (fprintf(fichier_impression, "\\end{center}\n") < 0)
                    289:        {
                    290:            (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                    291:            return;
                    292:        }
                    293:    }
                    294: 
                    295:    /*
                    296:     * Impression d'un vecteur
                    297:     */
                    298: 
                    299:    else if (((*s_objet).type == VCX) ||
                    300:            ((*s_objet).type == VIN) ||
                    301:            ((*s_objet).type == VRL))
                    302:    {
                    303:        if (fprintf(fichier_impression, "\\begin{equation}\n") < 0)
                    304:        {
                    305:            (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                    306:            return;
                    307:        }
                    308: 
                    309:        formateur_elementaire_tex(s_etat_processus, fichier_impression,
                    310:                s_objet, environnement);
                    311: 
                    312:        if (fprintf(fichier_impression, "\\nonumber\n") < 0)
                    313:        {
                    314:            (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                    315:            return;
                    316:        }
                    317: 
                    318:        if (fprintf(fichier_impression, "\\end{equation}\n") < 0)
                    319:        {
                    320:            (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                    321:            return;
                    322:        }
                    323:    }
                    324: 
                    325:    /*
                    326:     * Impression d'une matrice d'entiers
                    327:     */
                    328: 
                    329:    else if (((*s_objet).type == MIN) ||
                    330:            ((*s_objet).type == MRL) ||
                    331:            ((*s_objet).type == MCX))
                    332:    {
                    333:        if (fprintf(fichier_impression, "\\begin{equation}\n") < 0)
                    334:        {
                    335:            (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                    336:            return;
                    337:        }
                    338: 
                    339:        formateur_elementaire_tex(s_etat_processus, fichier_impression,
                    340:                s_objet, environnement);
                    341:        
                    342:        if (fprintf(fichier_impression, "\\nonumber\n") < 0)
                    343:        {
                    344:            (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                    345:            return;
                    346:        }
                    347: 
                    348:        if (fprintf(fichier_impression, "\\end{equation}\n") < 0)
                    349:        {
                    350:            (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                    351:            return;
                    352:        }
                    353:    }
                    354: 
                    355:    /*
                    356:     * Impression d'une expression RPN ou d'une liste
                    357:     */
                    358: 
                    359:    else if (((*s_objet).type == RPN) ||
                    360:            ((*s_objet).type == LST))
                    361:    {
                    362:        if (fprintf(fichier_impression, "\\begin{center}\n") < 0)
                    363:        {
                    364:            (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                    365:            return;
                    366:        }
                    367: 
                    368:        formateur_elementaire_tex(s_etat_processus, fichier_impression,
                    369:                s_objet, environnement);
                    370: 
                    371:        if (fprintf(fichier_impression, "\\end{center}\n") < 0)
                    372:        {
                    373:            (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                    374:            return;
                    375:        }
                    376:    }
                    377: 
                    378:    /*
                    379:     * Impression d'une expression algébrique
                    380:     */
                    381: 
                    382:    else if ((*s_objet).type == ALG)
                    383:    {
                    384:        if (fprintf(fichier_impression, "\\begin{equation}\n") < 0)
                    385:        {
                    386:            (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                    387:            return;
                    388:        }
                    389: 
                    390:        formateur_elementaire_tex(s_etat_processus, fichier_impression,
                    391:                s_objet, environnement);
                    392: 
                    393:        if (fprintf(fichier_impression, "\\nonumber\n") < 0)
                    394:        {
                    395:            (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                    396:            return;
                    397:        }
                    398: 
                    399:        if (fprintf(fichier_impression, "\\end{equation}\n") < 0)
                    400:        {
                    401:            (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                    402:            return;
                    403:        }
                    404:    }
                    405: 
                    406:    /*
                    407:     * Objet invalide
                    408:     */
                    409: 
                    410:    else
                    411:    {
                    412:        if (fclose(fichier_impression) != 0)
                    413:        {
                    414:            (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                    415:            return;
                    416:        }
                    417: 
                    418:        (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
                    419:        return;
                    420:    }
                    421: 
                    422:    if (fclose(fichier_impression) != 0)
                    423:    {
                    424:        (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                    425:        return;
                    426:    }
                    427: 
                    428:    return;
                    429: }
                    430: 
                    431: 
                    432: /*
                    433: ================================================================================
                    434:   Formatage des fichiers TeX au niveau des types d'objets élémentaires
                    435: ================================================================================
                    436:   Entrées :
                    437: --------------------------------------------------------------------------------
                    438:   Sorties :
                    439: --------------------------------------------------------------------------------
                    440:   Effets de bord : néant
                    441: ================================================================================
                    442: */
                    443: 
                    444: void
                    445: formateur_elementaire_tex(struct_processus *s_etat_processus,
                    446:        file *fichier_impression, struct_objet *s_objet,
                    447:        unsigned char environnement)
                    448: {
                    449:    logical1                        fraction;
                    450:    logical1                        multiplication;
                    451:    logical1                        puissance;
                    452: 
                    453:    struct_liste_chainee            *l_element_courant;
                    454:    struct_liste_chainee            *l_liste1;
                    455:    struct_liste_chainee            *l_liste2;
                    456: 
                    457:    struct_objet                    *s_copie_objet;
                    458:    struct_objet                    s_objet_elementaire;
                    459:    struct_objet                    *s_sous_objet;
                    460:    struct_objet                    *s_sous_objet_1;
                    461:    struct_objet                    *s_sous_objet_2;
                    462: 
                    463:    unsigned char                   base;
                    464:    unsigned char                   *chaine;
                    465:    unsigned char                   *chaine_majuscule;
                    466:    unsigned char                   *chaine_parametre;
                    467:    unsigned char                   *chaine_sauvegarde;
                    468:    unsigned char                   *instruction_courante;
                    469:    unsigned char                   *instruction_majuscule;
                    470:    unsigned char                   instruction_valide;
                    471:    unsigned char                   *ligne;
                    472:    unsigned char                   *ptre;
                    473:    unsigned char                   *ptrl;
                    474:    unsigned char                   test_instruction;
                    475:    unsigned char                   *tampon;
                    476: 
                    477:    unsigned long                   i;
                    478:    unsigned long                   j;
                    479:    unsigned long                   niveau;
                    480:    unsigned long                   nombre_arguments;
                    481: 
                    482:    /*
                    483:     * Entier binaire
                    484:     */
                    485: 
                    486:    if ((*s_objet).type == BIN)
                    487:    {
                    488:        if ((ligne = formateur(s_etat_processus, 0, s_objet)) == NULL)
                    489:        {
                    490:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                    491:            return;
                    492:        }
                    493: 
                    494:        base = ligne[strlen(ligne) - 1];
                    495:        ligne[strlen(ligne) - 1] = d_code_fin_chaine;
                    496: 
                    497:        if (fprintf(fichier_impression, "\\#\\,%s\\text{%c}",
                    498:                &(ligne[1]), base) < 0)
                    499:        {
                    500:            (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                    501:            return;
                    502:        }
                    503: 
                    504:        free(ligne);
                    505:    }
                    506: 
                    507:    /*
                    508:     * Chaîne de caractères
                    509:     */
                    510: 
                    511:    else if ((*s_objet).type == CHN)
                    512:    {
                    513:        if ((ligne = formateur(s_etat_processus, 0, s_objet)) == NULL)
                    514:        {
                    515:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                    516:            return;
                    517:        }
                    518: 
                    519:        if (environnement == 'N')
                    520:        {
                    521:            correction_formateur_tex(s_etat_processus, &ligne);
                    522:        }
                    523: 
                    524:        if (fprintf(fichier_impression, "%s", ligne) < 0)
                    525:        {
                    526:            (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                    527:            return;
                    528:        }
                    529: 
                    530:        free(ligne);
                    531:    }
                    532: 
                    533:    /*
                    534:     * Nom
                    535:     */
                    536: 
                    537:    else if ((*s_objet).type == NOM)
                    538:    {
                    539:        if ((ligne = formateur(s_etat_processus, 0, s_objet)) == NULL)
                    540:        {
                    541:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                    542:            return;
                    543:        }
                    544: 
                    545:        if (environnement == 'N')
                    546:        {
                    547:            correction_formateur_tex(s_etat_processus, &ligne);
                    548:        }
                    549: 
                    550:        test_instruction = (*s_etat_processus).test_instruction;
                    551:        instruction_valide = (*s_etat_processus).instruction_valide;
                    552:        instruction_courante = (*s_etat_processus).instruction_courante;
                    553: 
                    554:        (*s_etat_processus).test_instruction = 'Y';
                    555:        (*s_etat_processus).instruction_courante =
                    556:                (*((struct_nom *) (*s_objet).objet)).nom;
                    557: 
                    558:        analyse(s_etat_processus, NULL);
                    559: 
                    560:        if ((*s_etat_processus).instruction_valide == 'Y')
                    561:        {
                    562:            if ((instruction_majuscule = conversion_majuscule(
                    563:                    (*s_etat_processus).instruction_courante)) == NULL)
                    564:            {
                    565:                (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                    566:                return;
                    567:            }
                    568: 
                    569:            if (strcmp(instruction_majuscule, "PI") == 0)
                    570:            {
                    571:                if (fprintf(fichier_impression, "$\\pi$") < 0)
                    572:                {
                    573:                    (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                    574:                    return;
                    575:                }
                    576:            }
                    577:            else
                    578:            {
                    579:                if (fprintf(fichier_impression, "\\textrm{%s}", ligne) < 0)
                    580:                {
                    581:                    (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                    582:                    return;
                    583:                }
                    584:            }
                    585: 
                    586:            free(instruction_majuscule);
                    587:        }
                    588:        else
                    589:        {
                    590:            if (fprintf(fichier_impression, "\\textit{%s}", ligne) < 0)
                    591:            {
                    592:                (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                    593:                return;
                    594:            }
                    595:        }
                    596: 
                    597:        (*s_etat_processus).instruction_courante = instruction_courante;
                    598:        (*s_etat_processus).test_instruction = test_instruction;
                    599:        (*s_etat_processus).instruction_valide = instruction_valide;
                    600: 
                    601:        free(ligne);
                    602:    }
                    603: 
                    604:    /*
                    605:     * Nombre complexe
                    606:     */
                    607: 
                    608:    else if ((*s_objet).type == CPL)
                    609:    {
                    610:        s_objet_elementaire.type = REL;
                    611: 
                    612:        if ((s_objet_elementaire.objet = malloc(sizeof(real8))) == NULL)
                    613:        {
                    614:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                    615:            return;
                    616:        }
                    617: 
                    618:        if (fprintf(fichier_impression, "\\left(") < 0)
                    619:        {
                    620:            (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                    621:            return;
                    622:        }
                    623: 
                    624:        (*((real8 *) (s_objet_elementaire.objet))) = (*((complex16 *)
                    625:                (*s_objet).objet)).partie_reelle;
                    626: 
                    627:        formateur_elementaire_tex(s_etat_processus, fichier_impression,
                    628:                &s_objet_elementaire, environnement);
                    629: 
                    630:        (*((real8 *) (s_objet_elementaire.objet))) = (*((complex16 *)
                    631:                (*s_objet).objet)).partie_imaginaire;
                    632: 
                    633:        if (test_cfsf(s_etat_processus, 48) == d_vrai)
                    634:        {
                    635:            if (fprintf(fichier_impression, ".\\,") < 0)
                    636:            {
                    637:                (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                    638:                return;
                    639:            }
                    640:        }
                    641:        else
                    642:        {
                    643:            if (fprintf(fichier_impression, ",") < 0)
                    644:            {
                    645:                (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                    646:                return;
                    647:            }
                    648:        }
                    649: 
                    650:        formateur_elementaire_tex(s_etat_processus, fichier_impression,
                    651:                &s_objet_elementaire, environnement);
                    652: 
                    653:        if (fprintf(fichier_impression, "\\right)") < 0)
                    654:        {
                    655:            (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                    656:            return;
                    657:        }
                    658: 
                    659:        free(s_objet_elementaire.objet);
                    660:    }
                    661: 
                    662:    /*
                    663:     * Entier
                    664:     */
                    665: 
                    666:    else if ((*s_objet).type == INT)
                    667:    {
                    668:        if ((ligne = formateur(s_etat_processus, 0, s_objet)) == NULL)
                    669:        {
                    670:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                    671:            return;
                    672:        }
                    673: 
                    674:        if (fprintf(fichier_impression, "%s", ligne) < 0)
                    675:        {
                    676:            (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                    677:            return;
                    678:        }
                    679: 
                    680:        free(ligne);
                    681:    }
                    682: 
                    683:    /*
                    684:     * Matrice de complexes
                    685:     */
                    686: 
                    687:    else if ((*s_objet).type == MCX)
                    688:    {
                    689:        if (fprintf(fichier_impression, "\\left(\\begin{array}{") < 0)
                    690:        {
                    691:            (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                    692:            return;
                    693:        }
                    694:    
                    695:        for(i = 0; i < (*((struct_matrice *) (*s_objet).objet))
                    696:                .nombre_colonnes; i++)
                    697:        {
                    698:            if (fprintf(fichier_impression, "c") < 0)
                    699:            {
                    700:                (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                    701:                return;
                    702:            }
                    703:        }
                    704: 
                    705:        if (fprintf(fichier_impression, "}\n") < 0)
                    706:        {
                    707:            (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                    708:            return;
                    709:        }
                    710: 
                    711:        if ((s_objet_elementaire.objet = (complex16 *) malloc(
                    712:                sizeof(complex16))) == NULL)
                    713:        {
                    714:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                    715:            return;
                    716:        }
                    717: 
                    718:        s_objet_elementaire.type = CPL;
                    719: 
                    720:        for(i = 0; i < (*((struct_matrice *) (*s_objet).objet)).nombre_lignes;
                    721:                i++)
                    722:        {
                    723:            for(j = 0; j < (*((struct_matrice *) (*s_objet).objet))
                    724:                    .nombre_colonnes; j++)
                    725:            {
                    726:                (*((complex16 *) (s_objet_elementaire.objet))).partie_reelle =
                    727:                        ((complex16 **) (*((struct_matrice *)
                    728:                        (*s_objet).objet)).tableau)[i][j].partie_reelle;
                    729:                (*((complex16 *) (s_objet_elementaire.objet)))
                    730:                        .partie_imaginaire = ((complex16 **)
                    731:                        (*((struct_matrice *) (*s_objet).objet)).tableau)[i][j]
                    732:                        .partie_imaginaire;
                    733: 
                    734:                formateur_elementaire_tex(s_etat_processus, fichier_impression,
                    735:                        &s_objet_elementaire, environnement);
                    736: 
                    737:                if (j == ((*((struct_matrice *) (*s_objet).objet))
                    738:                        .nombre_colonnes - 1))
                    739:                {
                    740:                    if (fprintf(fichier_impression, " \\\\\n") < 0)
                    741:                    {
                    742:                        (*s_etat_processus).erreur_systeme =
                    743:                                d_es_erreur_fichier;
                    744:                        return;
                    745:                    }
                    746:                }
                    747:                else
                    748:                {
                    749:                    if (fprintf(fichier_impression, " & ") < 0)
                    750:                    {
                    751:                        (*s_etat_processus).erreur_systeme =
                    752:                                d_es_erreur_fichier;
                    753:                        return;
                    754:                    }
                    755:                }
                    756:            }
                    757:        }
                    758: 
                    759:        free(s_objet_elementaire.objet);
                    760: 
                    761:        if (fprintf(fichier_impression, "\\end{array}\\right)\n") < 0)
                    762:        {
                    763:            (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                    764:            return;
                    765:        }
                    766:    }
                    767: 
                    768:    /*
                    769:     * Matrice d'entiers
                    770:     */
                    771: 
                    772:    else if ((*s_objet).type == MIN)
                    773:    {
                    774:        if (fprintf(fichier_impression, "\\left(\\begin{array}{") < 0)
                    775:        {
                    776:            (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                    777:            return;
                    778:        }
                    779:    
                    780:        for(i = 0; i < (*((struct_matrice *) (*s_objet).objet))
                    781:                .nombre_colonnes; i++)
                    782:        {
                    783:            if (fprintf(fichier_impression, "c") < 0)
                    784:            {
                    785:                (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                    786:                return;
                    787:            }
                    788:        }
                    789: 
                    790:        if (fprintf(fichier_impression, "}\n") < 0)
                    791:        {
                    792:            (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                    793:            return;
                    794:        }
                    795: 
                    796:        if ((s_objet_elementaire.objet = (integer8 *) malloc(sizeof(integer8)))
                    797:                == NULL)
                    798:        {
                    799:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                    800:            return;
                    801:        }
                    802: 
                    803:        s_objet_elementaire.type = INT;
                    804: 
                    805:        for(i = 0; i < (*((struct_matrice *) (*s_objet).objet)).nombre_lignes;
                    806:                i++)
                    807:        {
                    808:            for(j = 0; j < (*((struct_matrice *) (*s_objet).objet))
                    809:                    .nombre_colonnes; j++)
                    810:            {
                    811:                (*((integer8 *) (s_objet_elementaire.objet))) =
                    812:                        ((integer8 **) (*((struct_matrice *)
                    813:                        (*s_objet).objet)).tableau)[i][j];
                    814: 
                    815:                formateur_elementaire_tex(s_etat_processus, fichier_impression,
                    816:                        &s_objet_elementaire, environnement);
                    817: 
                    818:                if (j == ((*((struct_matrice *) (*s_objet).objet))
                    819:                        .nombre_colonnes - 1))
                    820:                {
                    821:                    if (fprintf(fichier_impression, " \\\\\n") < 0)
                    822:                    {
                    823:                        (*s_etat_processus).erreur_systeme =
                    824:                                d_es_erreur_fichier;
                    825:                        return;
                    826:                    }
                    827:                }
                    828:                else
                    829:                {
                    830:                    if (fprintf(fichier_impression, " & ") < 0)
                    831:                    {
                    832:                        (*s_etat_processus).erreur_systeme =
                    833:                                d_es_erreur_fichier;
                    834:                        return;
                    835:                    }
                    836:                }
                    837:            }
                    838:        }
                    839: 
                    840:        free(s_objet_elementaire.objet);
                    841: 
                    842:        if (fprintf(fichier_impression, "\\end{array}\\right)\n") < 0)
                    843:        {
                    844:            (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                    845:            return;
                    846:        }
                    847:    }
                    848: 
                    849:    /*
                    850:     * Matrice de réels
                    851:     */
                    852: 
                    853:    else if ((*s_objet).type == MRL)
                    854:    {
                    855:        if (fprintf(fichier_impression, "\\left(\\begin{array}{") < 0)
                    856:        {
                    857:            (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                    858:            return;
                    859:        }
                    860:    
                    861:        for(i = 0; i < (*((struct_matrice *) (*s_objet).objet))
                    862:                .nombre_colonnes; i++)
                    863:        {
                    864:            if (fprintf(fichier_impression, "c") < 0)
                    865:            {
                    866:                (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                    867:                return;
                    868:            }
                    869:        }
                    870: 
                    871:        if (fprintf(fichier_impression, "}\n") < 0)
                    872:        {
                    873:            (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                    874:            return;
                    875:        }
                    876: 
                    877:        if ((s_objet_elementaire.objet = (real8 *) malloc(sizeof(real8)))
                    878:                == NULL)
                    879:        {
                    880:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                    881:            return;
                    882:        }
                    883: 
                    884:        s_objet_elementaire.type = REL;
                    885: 
                    886:        for(i = 0; i < (*((struct_matrice *) (*s_objet).objet)).nombre_lignes;
                    887:                i++)
                    888:        {
                    889:            for(j = 0; j < (*((struct_matrice *) (*s_objet).objet))
                    890:                    .nombre_colonnes; j++)
                    891:            {
                    892:                (*((real8 *) (s_objet_elementaire.objet))) =
                    893:                        ((real8 **) (*((struct_matrice *)
                    894:                        (*s_objet).objet)).tableau)[i][j];
                    895: 
                    896:                formateur_elementaire_tex(s_etat_processus, fichier_impression,
                    897:                        &s_objet_elementaire, environnement);
                    898: 
                    899:                if (j == ((*((struct_matrice *) (*s_objet).objet))
                    900:                        .nombre_colonnes - 1))
                    901:                {
                    902:                    if (fprintf(fichier_impression, " \\\\\n") < 0)
                    903:                    {
                    904:                        (*s_etat_processus).erreur_systeme =
                    905:                                d_es_erreur_fichier;
                    906:                        return;
                    907:                    }
                    908:                }
                    909:                else
                    910:                {
                    911:                    if (fprintf(fichier_impression, " & ") < 0)
                    912:                    {
                    913:                        (*s_etat_processus).erreur_systeme =
                    914:                                d_es_erreur_fichier;
                    915:                        return;
                    916:                    }
                    917:                }
                    918:            }
                    919:        }
                    920: 
                    921:        free(s_objet_elementaire.objet);
                    922: 
                    923:        if (fprintf(fichier_impression, "\\end{array}\\right)\n") < 0)
                    924:        {
                    925:            (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                    926:            return;
                    927:        }
                    928:    }
                    929: 
                    930:    /*
                    931:     * Réel
                    932:     */
                    933: 
                    934:    else if ((*s_objet).type == REL)
                    935:    {
                    936:        if ((ligne = formateur(s_etat_processus, 0, s_objet)) == NULL)
                    937:        {
                    938:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                    939:            return;
                    940:        }
                    941: 
                    942:        for(i = 0; i < strlen(ligne); i++)
                    943:        {
                    944:            switch(ligne[i])
                    945:            {
                    946:                case 'e' :
                    947:                case 'E' :
                    948:                {
                    949:                    if ((tampon = (unsigned char *) malloc((strlen(ligne)
                    950:                            + 12) * sizeof(unsigned char))) == NULL)
                    951:                    {
                    952:                        (*s_etat_processus).erreur_systeme =
                    953:                                d_es_allocation_memoire;
                    954:                        return;
                    955:                    }
                    956: 
                    957:                    strncpy(tampon, ligne, i);
                    958:                    strcpy(&(tampon[i]), "\\times 10^{");
                    959:                    strcat(tampon, &(ligne[++i]));
                    960:                    strcat(tampon, "}");
                    961:                    i += 10;
                    962: 
                    963:                    free(ligne);
                    964:                    ligne = tampon;
                    965: 
                    966:                    break;
                    967:                }
                    968: 
                    969:                case ',' :
                    970:                {
                    971:                    if ((tampon = (unsigned char *) malloc((strlen(ligne)
                    972:                            + 3) * sizeof(unsigned char))) == NULL)
                    973:                    {
                    974:                        (*s_etat_processus).erreur_systeme =
                    975:                                d_es_allocation_memoire;
                    976:                        return;
                    977:                    }
                    978: 
                    979:                    strncpy(tampon, ligne, ++i);
                    980:                    strcpy(&(tampon[i]), "\\!");
                    981:                    strcat(tampon, &(ligne[i]));
                    982:                    i += 2;
                    983: 
                    984:                    free(ligne);
                    985:                    ligne = tampon;
                    986: 
                    987:                    break;
                    988:                }
                    989:            }
                    990:        }
                    991: 
                    992:        if (fprintf(fichier_impression, "%s", ligne) < 0)
                    993:        {
                    994:            (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                    995:            return;
                    996:        }
                    997:        
                    998:        free(ligne);
                    999:    }
                   1000: 
                   1001:    /*
                   1002:     * Vecteur de complexes
                   1003:     */
                   1004: 
                   1005:    else if ((*s_objet).type == VCX)
                   1006:    {
                   1007:        if (fprintf(fichier_impression, "\\left(\\begin{array}{c}\n") < 0)
                   1008:        {
                   1009:            (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                   1010:            return;
                   1011:        }
                   1012: 
                   1013:        if ((s_objet_elementaire.objet = (complex16 *) malloc(
                   1014:                sizeof(complex16))) == NULL)
                   1015:        {
                   1016:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   1017:            return;
                   1018:        }
                   1019: 
                   1020:        s_objet_elementaire.type = CPL;
                   1021: 
                   1022:        for(i = 0; i < (*((struct_vecteur *) (*s_objet).objet)).taille; i++)
                   1023:        {
                   1024:            (*((complex16 *) (s_objet_elementaire.objet))).partie_reelle =
                   1025:                    ((complex16 *) (*((struct_vecteur *)
                   1026:                    (*s_objet).objet)).tableau)[i].partie_reelle;
                   1027:            (*((complex16 *) (s_objet_elementaire.objet))).partie_imaginaire =
                   1028:                    ((complex16 *) (*((struct_vecteur *)
                   1029:                    (*s_objet).objet)).tableau)[i].partie_imaginaire;
                   1030: 
                   1031:            formateur_elementaire_tex(s_etat_processus, fichier_impression,
                   1032:                    &s_objet_elementaire, environnement);
                   1033: 
                   1034:            if (fprintf(fichier_impression, " \\\\\n") < 0)
                   1035:            {
                   1036:                (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                   1037:                return;
                   1038:            }
                   1039:        }
                   1040: 
                   1041:        free(s_objet_elementaire.objet);
                   1042: 
                   1043:        if (fprintf(fichier_impression, "\\end{array}\\right)\n") < 0)
                   1044:        {
                   1045:            (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                   1046:            return;
                   1047:        }
                   1048:    }
                   1049: 
                   1050:    /*
                   1051:     * Vecteur d'entiers
                   1052:     */
                   1053: 
                   1054:    else if ((*s_objet).type == VIN)
                   1055:    {
                   1056:        if (fprintf(fichier_impression, "\\left(\\begin{array}{c}\n") < 0)
                   1057:        {
                   1058:            (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                   1059:            return;
                   1060:        }
                   1061: 
                   1062:        if ((s_objet_elementaire.objet = (integer8 *) malloc(sizeof(integer8)))
                   1063:                == NULL)
                   1064:        {
                   1065:            (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                   1066:            return;
                   1067:        }
                   1068: 
                   1069:        s_objet_elementaire.type = INT;
                   1070: 
                   1071:        for(i = 0; i < (*((struct_vecteur *) (*s_objet).objet)).taille; i++)
                   1072:        {
                   1073:            (*((integer8 *) (s_objet_elementaire.objet))) =
                   1074:                    ((integer8 *) (*((struct_vecteur *)
                   1075:                    (*s_objet).objet)).tableau)[i];
                   1076: 
                   1077:            formateur_elementaire_tex(s_etat_processus, fichier_impression,
                   1078:                    &s_objet_elementaire, environnement);
                   1079: 
                   1080:            if (fprintf(fichier_impression, " \\\\\n") < 0)
                   1081:            {
                   1082:                (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                   1083:                return;
                   1084:            }
                   1085:        }
                   1086: 
                   1087:        free(s_objet_elementaire.objet);
                   1088: 
                   1089:        if (fprintf(fichier_impression, "\\end{array}\\right)\n") < 0)
                   1090:        {
                   1091:            (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                   1092:            return;
                   1093:        }
                   1094:    }
                   1095: 
                   1096:    /*
                   1097:     * Vecteur de réels
                   1098:     */
                   1099: 
                   1100:    else if ((*s_objet).type == VRL)
                   1101:    {
                   1102:        if (fprintf(fichier_impression, "\\left(\\begin{array}{c}\n") < 0)
                   1103:        {
                   1104:            (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                   1105:            return;
                   1106:        }
                   1107: 
                   1108:        if ((s_objet_elementaire.objet = (real8 *) malloc(sizeof(real8)))
                   1109:                == NULL)
                   1110:        {
                   1111:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   1112:            return;
                   1113:        }
                   1114: 
                   1115:        s_objet_elementaire.type = REL;
                   1116: 
                   1117:        for(i = 0; i < (*((struct_vecteur *) (*s_objet).objet)).taille; i++)
                   1118:        {
                   1119:            (*((real8 *) (s_objet_elementaire.objet))) =
                   1120:                    ((real8 *) (*((struct_vecteur *)
                   1121:                    (*s_objet).objet)).tableau)[i];
                   1122: 
                   1123:            formateur_elementaire_tex(s_etat_processus, fichier_impression,
                   1124:                    &s_objet_elementaire, environnement);
                   1125: 
                   1126:            if (fprintf(fichier_impression, " \\\\\n") < 0)
                   1127:            {
                   1128:                (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                   1129:                return;
                   1130:            }
                   1131:        }
                   1132: 
                   1133:        free(s_objet_elementaire.objet);
                   1134: 
                   1135:        if (fprintf(fichier_impression, "\\end{array}\\right)\n") < 0)
                   1136:        {
                   1137:            (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                   1138:            return;
                   1139:        }
                   1140:    }
                   1141: 
                   1142:    /*
                   1143:     * Fonction
                   1144:     */
                   1145: 
                   1146:    else if ((*s_objet).type == FCT)
                   1147:    {
                   1148:        if ((strcmp((*((struct_fonction *) (*s_objet).objet)).nom_fonction,
                   1149:                "+") == 0) || (strcmp((*((struct_fonction *) (*s_objet).objet))
                   1150:                .nom_fonction, "-") == 0) || (strcmp((*((struct_fonction *)
                   1151:                (*s_objet).objet)).nom_fonction, "/") == 0))
                   1152:        {
                   1153:            if (fprintf(fichier_impression, "$%s$", (*((struct_fonction *)
                   1154:                    (*s_objet).objet)).nom_fonction) < 0)
                   1155:            {
                   1156:                (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                   1157:                return;
                   1158:            }
                   1159:        }
                   1160:        else if (strcmp((*((struct_fonction *) (*s_objet).objet)).nom_fonction,
                   1161:                "*") == 0)
                   1162:        {
                   1163:            if (fprintf(fichier_impression, "$\\times$") < 0)
                   1164:            {
                   1165:                (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                   1166:                return;
                   1167:            }
                   1168:        }
                   1169:        else if (strcmp((*((struct_fonction *) (*s_objet).objet)).nom_fonction,
                   1170:                "^") == 0)
                   1171:        {
                   1172:            if (fprintf(fichier_impression, "$\\,\\hat{}\\,$") < 0)
                   1173:            {
                   1174:                (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                   1175:                return;
                   1176:            }
                   1177:        }
                   1178:        else if (strcmp((*((struct_fonction *) (*s_objet).objet)).nom_fonction,
                   1179:                "->") == 0)
                   1180:        {
                   1181:            if (fprintf(fichier_impression, "$\\rightarrow$") < 0)
                   1182:            {
                   1183:                (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                   1184:                return;
                   1185:            }
                   1186:        }
                   1187:        else
                   1188:        {
                   1189:            if ((ligne = (unsigned char *) malloc((strlen((*((struct_fonction *)
                   1190:                    (*s_objet).objet)).nom_fonction) + 1) *
                   1191:                    sizeof(unsigned char))) == NULL)
                   1192:            {
                   1193:                (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   1194:                return;
                   1195:            }
                   1196: 
                   1197:            strcpy(ligne, (*((struct_fonction *) (*s_objet).objet))
                   1198:                    .nom_fonction);
                   1199: 
                   1200:            correction_formateur_tex(s_etat_processus, &ligne);
                   1201:            
                   1202:            if (fprintf(fichier_impression, ligne) < 0)
                   1203:            {
                   1204:                (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                   1205:                return;
                   1206:            }
                   1207: 
                   1208:            free(ligne);
                   1209:        }
                   1210:    }
                   1211: 
                   1212:    /*
                   1213:     * Expression RPN ou liste
                   1214:     */
                   1215: 
                   1216:    else if (((*s_objet).type == RPN) ||
                   1217:            ((*s_objet).type == LST))
                   1218:    {
                   1219:        if ((*s_objet).type == LST)
                   1220:        {
                   1221:            if (fprintf(fichier_impression, "\\begin{equation}\n") < 0)
                   1222:            {
                   1223:                (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                   1224:                return;
                   1225:            }
                   1226: 
                   1227:            if (fprintf(fichier_impression, "\\left\\{\\text{%%\n") < 0)
                   1228:            {
                   1229:                (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                   1230:                return;
                   1231:            }
                   1232:        }
                   1233: 
                   1234:        l_element_courant = (struct_liste_chainee *) (*s_objet).objet;
                   1235: 
                   1236:        while(l_element_courant != NULL)
                   1237:        {
                   1238:            if (((*(*l_element_courant).donnee).type == INT) ||
                   1239:                    ((*(*l_element_courant).donnee).type == REL) ||
                   1240:                    ((*(*l_element_courant).donnee).type == CPL) ||
                   1241:                    ((*(*l_element_courant).donnee).type == VIN) ||
                   1242:                    ((*(*l_element_courant).donnee).type == VRL) ||
                   1243:                    ((*(*l_element_courant).donnee).type == MIN) ||
                   1244:                    ((*(*l_element_courant).donnee).type == MRL) ||
                   1245:                    ((*(*l_element_courant).donnee).type == MCX) ||
                   1246:                    ((*(*l_element_courant).donnee).type == BIN))
                   1247:            {
                   1248:                if (fprintf(fichier_impression, "$") < 0)
                   1249:                {
                   1250:                    (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                   1251:                    return;
                   1252:                }
                   1253: 
                   1254:                formateur_elementaire_tex(s_etat_processus, fichier_impression,
                   1255:                        (*l_element_courant).donnee, environnement);
                   1256: 
                   1257:                if (fprintf(fichier_impression, "$%%") < 0)
                   1258:                {
                   1259:                    (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                   1260:                    return;
                   1261:                }
                   1262:            }
                   1263:            else
                   1264:            {
                   1265:                formateur_elementaire_tex(s_etat_processus, fichier_impression,
                   1266:                        (*l_element_courant).donnee, environnement);
                   1267:            }
                   1268: 
                   1269:            if (fprintf(fichier_impression, "\n") < 0)
                   1270:            {
                   1271:                (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                   1272:                return;
                   1273:            }
                   1274: 
                   1275:            l_element_courant = (*l_element_courant).suivant;
                   1276:        }
                   1277: 
                   1278:        if ((*s_objet).type == LST)
                   1279:        {
                   1280:            if (fprintf(fichier_impression, "}\\right\\}\\nonumber\n") < 0)
                   1281:            {
                   1282:                (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                   1283:                return;
                   1284:            }
                   1285: 
                   1286:            if (fprintf(fichier_impression, "\\end{equation}\n") < 0)
                   1287:            {
                   1288:                (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                   1289:                return;
                   1290:            }
                   1291:        }
                   1292:    }
                   1293: 
                   1294:    /*
                   1295:     * Expression algébrique
                   1296:     */
                   1297: 
                   1298:    else if ((*s_objet).type == ALG)
                   1299:    {
                   1300:        if ((s_copie_objet = copie_objet(s_etat_processus, s_objet, 'N'))
                   1301:                == NULL)
                   1302:        {
                   1303:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   1304:            return;
                   1305:        }
                   1306: 
                   1307:        l_element_courant = (struct_liste_chainee *) (*s_copie_objet).objet;
                   1308: 
                   1309:        while(l_element_courant != NULL)
                   1310:        {
                   1311:            if ((*(*l_element_courant).donnee).type == FCT)
                   1312:            {
                   1313:                if ((strcmp((*((struct_fonction *) (*(*l_element_courant)
                   1314:                        .donnee).objet)).nom_fonction, "<<") != 0) &&
                   1315:                        (strcmp((*((struct_fonction *) (*(*l_element_courant)
                   1316:                        .donnee).objet)).nom_fonction, ">>") != 0))
                   1317:                {
                   1318:                    if ((strcmp((*((struct_fonction *) (*(*l_element_courant)
                   1319:                            .donnee).objet)).nom_fonction, "+") == 0) ||
                   1320:                            (strcmp((*((struct_fonction *)
                   1321:                            (*(*l_element_courant).donnee).objet))
                   1322:                            .nom_fonction, "-") == 0) || (strcmp(
                   1323:                            (*((struct_fonction *) (*(*l_element_courant)
                   1324:                            .donnee).objet)).nom_fonction, "*") == 0) ||
                   1325:                            (strcmp((*((struct_fonction *)
                   1326:                            (*(*l_element_courant).donnee).objet)).nom_fonction,
                   1327:                            "/") == 0) || (strcmp((*((struct_fonction *)
                   1328:                            (*(*l_element_courant).donnee).objet)).nom_fonction,
                   1329:                            "^") == 0) || (strcmp((*((struct_fonction *)
                   1330:                            (*(*l_element_courant).donnee).objet)).nom_fonction,
                   1331:                            "<") == 0) || (strcmp((*((struct_fonction *)
                   1332:                            (*(*l_element_courant).donnee).objet)).nom_fonction,
                   1333:                            "=") == 0) || (strcmp((*((struct_fonction *)
                   1334:                            (*(*l_element_courant).donnee).objet)).nom_fonction,
                   1335:                            ">") == 0) || (strcmp((*((struct_fonction *)
                   1336:                            (*(*l_element_courant).donnee).objet)).nom_fonction,
                   1337:                            "==") == 0) || (strcmp((*((struct_fonction *)
                   1338:                            (*(*l_element_courant).donnee).objet)).nom_fonction,
                   1339:                            "<>") == 0) || (strcmp((*((struct_fonction *)
                   1340:                            (*(*l_element_courant).donnee).objet)).nom_fonction,
                   1341:                            "<=") == 0) || (strcmp((*((struct_fonction *)
                   1342:                            (*(*l_element_courant).donnee).objet)).nom_fonction,
                   1343:                            "=<") == 0) || (strcmp((*((struct_fonction *)
                   1344:                            (*(*l_element_courant).donnee).objet)).nom_fonction,
                   1345:                            ">=") == 0) || (strcmp((*((struct_fonction *)
                   1346:                            (*(*l_element_courant).donnee).objet)).nom_fonction,
                   1347:                            "=>") == 0))
                   1348:                    {
                   1349:                        chaine_sauvegarde = (*((struct_fonction *)
                   1350:                                (*(*l_element_courant).donnee).objet))
                   1351:                                .nom_fonction;
                   1352: 
                   1353:                        fraction = d_faux;
                   1354:                        multiplication = d_faux;
                   1355:                        puissance = d_faux;
                   1356: 
                   1357:                        if ((strcmp(chaine_sauvegarde, "+") == 0) ||
                   1358:                                (strcmp(chaine_sauvegarde, "-") == 0) ||
                   1359:                                (strcmp(chaine_sauvegarde, "=") == 0) ||
                   1360:                                (strcmp(chaine_sauvegarde, "==") == 0))
                   1361:                        {
                   1362:                            /*
                   1363:                             * Il n'y a rien à faire
                   1364:                             */
                   1365:                        }
                   1366:                        else if (strcmp(chaine_sauvegarde, "*") == 0)
                   1367:                        {
                   1368:                            if (((*((struct_fonction *) (*(*l_element_courant)
                   1369:                                    .donnee).objet)).nom_fonction = malloc(
                   1370:                                    8 * sizeof(unsigned char))) == NULL)
                   1371:                            {
                   1372:                                (*s_etat_processus).erreur_systeme =
                   1373:                                        d_es_allocation_memoire;
                   1374:                                return;
                   1375:                            }
                   1376: 
                   1377:                            strcpy((*((struct_fonction *) (*(*l_element_courant)
                   1378:                                    .donnee).objet)).nom_fonction,
                   1379:                                    "\\times ");
                   1380:                            free(chaine_sauvegarde);
                   1381: 
                   1382:                            multiplication = d_vrai;
                   1383:                        }
                   1384:                        else if (strcmp(chaine_sauvegarde, "/") == 0)
                   1385:                        {
                   1386:                            fraction = d_vrai;
                   1387:                        }
                   1388:                        else if (strcmp(chaine_sauvegarde, "^") == 0)
                   1389:                        {
                   1390:                            puissance = d_vrai;
                   1391:                        }
                   1392:                        else if ((strcmp(chaine_sauvegarde, "<=") == 0) ||
                   1393:                                (strcmp(chaine_sauvegarde, "=<") == 0))
                   1394:                        {
                   1395:                            if (((*((struct_fonction *) (*(*l_element_courant)
                   1396:                                    .donnee).objet)).nom_fonction = malloc(
                   1397:                                    11 * sizeof(unsigned char))) == NULL)
                   1398:                            {
                   1399:                                (*s_etat_processus).erreur_systeme =
                   1400:                                        d_es_allocation_memoire;
                   1401:                                return;
                   1402:                            }
                   1403: 
                   1404:                            strcpy((*((struct_fonction *) (*(*l_element_courant)
                   1405:                                    .donnee).objet)).nom_fonction,
                   1406:                                    "\\leqslant ");
                   1407:                            free(chaine_sauvegarde);
                   1408:                        }
                   1409:                        else if ((strcmp(chaine_sauvegarde, ">=") == 0) ||
                   1410:                                (strcmp(chaine_sauvegarde, "=>") == 0))
                   1411:                        {
                   1412:                            if (((*((struct_fonction *) (*(*l_element_courant)
                   1413:                                    .donnee).objet)).nom_fonction = malloc(
                   1414:                                    11 * sizeof(unsigned char))) == NULL)
                   1415:                            {
                   1416:                                (*s_etat_processus).erreur_systeme =
                   1417:                                        d_es_allocation_memoire;
                   1418:                                return;
                   1419:                            }
                   1420: 
                   1421:                            strcpy((*((struct_fonction *) (*(*l_element_courant)
                   1422:                                    .donnee).objet)).nom_fonction,
                   1423:                                    "\\geqslant ");
                   1424:                            free(chaine_sauvegarde);
                   1425:                        }
                   1426:                        else if (strcmp(chaine_sauvegarde, "<>") == 0)
                   1427:                        {
                   1428:                            if (((*((struct_fonction *) (*(*l_element_courant)
                   1429:                                    .donnee).objet)).nom_fonction = malloc(
                   1430:                                    6 * sizeof(unsigned char))) == NULL)
                   1431:                            {
                   1432:                                (*s_etat_processus).erreur_systeme =
                   1433:                                        d_es_allocation_memoire;
                   1434:                                return;
                   1435:                            }
                   1436: 
                   1437:                            strcpy((*((struct_fonction *) (*(*l_element_courant)
                   1438:                                    .donnee).objet)).nom_fonction,
                   1439:                                    "\\neq ");
                   1440:                            free(chaine_sauvegarde);
                   1441:                        }
                   1442: 
                   1443:                        if (depilement(s_etat_processus, &((*s_etat_processus)
                   1444:                                .l_base_pile), &s_sous_objet_2) == d_erreur)
                   1445:                        {
                   1446:                            return;
                   1447:                        }
                   1448: 
                   1449:                        if (depilement(s_etat_processus, &((*s_etat_processus)
                   1450:                                .l_base_pile), &s_sous_objet_1) == d_erreur)
                   1451:                        {
                   1452:                            return;
                   1453:                        }
                   1454: 
                   1455:                        if ((s_sous_objet = allocation(s_etat_processus, CHN))
                   1456:                                == NULL)
                   1457:                        {
                   1458:                            return;
                   1459:                        }
                   1460: 
                   1461:                        if (fraction == d_vrai)
                   1462:                        {
                   1463:                            if (((*s_sous_objet).objet = (void *)
                   1464:                                    malloc((strlen(
                   1465:                                    (unsigned char *) (*s_sous_objet_1).objet) +
                   1466:                                    strlen((unsigned char *)
                   1467:                                    (*s_sous_objet_2).objet) + 12) *
                   1468:                                    sizeof(unsigned char))) == NULL)
                   1469:                            {
                   1470:                                return;
                   1471:                            }
                   1472: 
                   1473:                            sprintf((unsigned char *) (*s_sous_objet).objet,
                   1474:                                    "{\\frac{%s}{%s}}", (unsigned char *)
                   1475:                                    (*s_sous_objet_1).objet, (unsigned char *)
                   1476:                                    (*s_sous_objet_2).objet);
                   1477:                        }
                   1478:                        else if (puissance == d_vrai)
                   1479:                        {
                   1480:                            if (((unsigned char *)
                   1481:                                    strstr((unsigned char *) (*s_sous_objet_1)
                   1482:                                    .objet, "{\\frac{")) == ((unsigned char *)
                   1483:                                    (*s_sous_objet_1).objet))
                   1484:                            {
                   1485:                                niveau = 0;
                   1486: 
                   1487:                                for(i = 1; i < (strlen((unsigned char *)
                   1488:                                        (*s_sous_objet_1).objet) - 1); i++)
                   1489:                                {
                   1490:                                    if (((unsigned char *) (*s_sous_objet_1)
                   1491:                                            .objet)[i] == '{')
                   1492:                                    {
                   1493:                                        niveau++;
                   1494:                                    }
                   1495:                                    else if (((unsigned char *)
                   1496:                                            (*s_sous_objet_1).objet)[i] == '}')
                   1497:                                    {
                   1498:                                        niveau--;
                   1499: 
                   1500:                                        if (niveau == 0)
                   1501:                                        {
                   1502:                                            break;
                   1503:                                        }
                   1504:                                    }
                   1505:                                }
                   1506: 
                   1507:                                if (niveau == 0)
                   1508:                                {
                   1509:                                    sprintf((unsigned char *) (*s_sous_objet_1)
                   1510:                                            .objet, "%s", &(((unsigned char *) 
                   1511:                                            (*s_sous_objet_1).objet)[1]));
                   1512:                                    ((unsigned char *) (*s_sous_objet_1).objet)
                   1513:                                            [strlen((unsigned char *)
                   1514:                                            (*s_sous_objet_1).objet) - 1] =
                   1515:                                            d_code_fin_chaine;
                   1516:                                }
                   1517:                            }
                   1518: 
                   1519:                            chaine_parametre = (unsigned char *)
                   1520:                                    (*s_sous_objet_1).objet;
                   1521:                            conversion_element_tex(&chaine_parametre, "^");
                   1522: 
                   1523:                            if ((*s_sous_objet_1).objet == NULL)
                   1524:                            {
                   1525:                                (*s_etat_processus).erreur_systeme =
                   1526:                                        d_es_allocation_memoire;
                   1527:                                return;
                   1528:                            }
                   1529: 
                   1530:                            if (((*s_sous_objet).objet = (void *)
                   1531:                                    malloc((strlen(
                   1532:                                    (unsigned char *) (*s_sous_objet_1).objet) +
                   1533:                                    strlen((unsigned char *)
                   1534:                                    (*s_sous_objet_2).objet) + 8) *
                   1535:                                    sizeof(unsigned char))) == NULL)
                   1536:                            {
                   1537:                                return;
                   1538:                            }
                   1539: 
                   1540:                            sprintf((unsigned char *) (*s_sous_objet).objet,
                   1541:                                    "{{%s}^{%s}}",
                   1542:                                    (unsigned char *) (*s_sous_objet_1).objet,
                   1543:                                    (unsigned char *) (*s_sous_objet_2).objet);
                   1544:                        }
                   1545:                        else if (multiplication == d_vrai)
                   1546:                        {
                   1547:                            chaine_parametre = (unsigned char *)
                   1548:                                    (*s_sous_objet_1).objet;
                   1549:                            conversion_element_tex(&chaine_parametre,
                   1550:                                    (*((struct_fonction *)
                   1551:                                    (*(*l_element_courant).donnee).objet))
                   1552:                                    .nom_fonction);
                   1553: 
                   1554:                            if ((*s_sous_objet_1).objet == NULL)
                   1555:                            {
                   1556:                                (*s_etat_processus).erreur_systeme =
                   1557:                                        d_es_allocation_memoire;
                   1558:                                return;
                   1559:                            }
                   1560: 
                   1561:                            chaine_parametre = (unsigned char *)
                   1562:                                    (*s_sous_objet_2).objet;
                   1563:                            conversion_element_tex(&chaine_parametre,
                   1564:                                    (*((struct_fonction *)
                   1565:                                    (*(*l_element_courant).donnee).objet))
                   1566:                                    .nom_fonction);
                   1567: 
                   1568:                            if ((*s_sous_objet_2).objet == NULL)
                   1569:                            {
                   1570:                                (*s_etat_processus).erreur_systeme =
                   1571:                                        d_es_allocation_memoire;
                   1572:                                return;
                   1573:                            }
                   1574: 
                   1575:                            if ((((unsigned char *) (*s_sous_objet_2)
                   1576:                                    .objet)[0] == '+') || (((unsigned char *)
                   1577:                                    (*s_sous_objet_2).objet)[0] == '-'))
                   1578:                            {
                   1579:                                if (((*s_sous_objet).objet = (void *)
                   1580:                                        malloc((strlen((unsigned char *)
                   1581:                                        (*s_sous_objet_1).objet) +
                   1582:                                        strlen((*((struct_fonction *)
                   1583:                                        (*(*l_element_courant).donnee).objet))
                   1584:                                        .nom_fonction) +
                   1585:                                        strlen((unsigned char *)
                   1586:                                        (*s_sous_objet_2).objet) + 14) *
                   1587:                                        sizeof(unsigned char))) == NULL)
                   1588:                                {
                   1589:                                    return;
                   1590:                                }
                   1591: 
                   1592:                                sprintf((unsigned char *) (*s_sous_objet).objet,
                   1593:                                        "%s%s\\left(%s\\right)",
                   1594:                                        (unsigned char *) (*s_sous_objet_1)
                   1595:                                        .objet, (*((struct_fonction *)
                   1596:                                        (*(*l_element_courant).donnee).objet))
                   1597:                                        .nom_fonction, (unsigned char *)
                   1598:                                        (*s_sous_objet_2).objet);
                   1599:                            }
                   1600:                            else
                   1601:                            {
                   1602:                                if (((*s_sous_objet).objet = (void *)
                   1603:                                        malloc((strlen((unsigned char *)
                   1604:                                        (*s_sous_objet_1).objet) +
                   1605:                                        strlen((*((struct_fonction *)
                   1606:                                        (*(*l_element_courant).donnee).objet))
                   1607:                                        .nom_fonction) +
                   1608:                                        strlen((unsigned char *)
                   1609:                                        (*s_sous_objet_2).objet) + 1) *
                   1610:                                        sizeof(unsigned char))) == NULL)
                   1611:                                {
                   1612:                                    return;
                   1613:                                }
                   1614: 
                   1615:                                sprintf((unsigned char *) (*s_sous_objet).objet,
                   1616:                                        "%s%s%s", (unsigned char *)
                   1617:                                        (*s_sous_objet_1)
                   1618:                                        .objet, (*((struct_fonction *)
                   1619:                                        (*(*l_element_courant).donnee).objet))
                   1620:                                        .nom_fonction, (unsigned char *)
                   1621:                                        (*s_sous_objet_2).objet);
                   1622:                            }
                   1623:                        }
                   1624:                        else
                   1625:                        {
                   1626:                            if ((strcmp((*((struct_fonction *)
                   1627:                                    (*(*l_element_courant).donnee).objet))
                   1628:                                    .nom_fonction, "<") != 0) &&
                   1629:                                    (strcmp((*((struct_fonction *)
                   1630:                                    (*(*l_element_courant).donnee).objet))
                   1631:                                    .nom_fonction, ">") != 0) &&
                   1632:                                    (strcmp((*((struct_fonction *)
                   1633:                                    (*(*l_element_courant).donnee).objet))
                   1634:                                    .nom_fonction, "=") != 0) &&
                   1635:                                    (strcmp((*((struct_fonction *)
                   1636:                                    (*(*l_element_courant).donnee).objet))
                   1637:                                    .nom_fonction, "==") != 0) &&
                   1638:                                    (strcmp((*((struct_fonction *)
                   1639:                                    (*(*l_element_courant).donnee).objet))
                   1640:                                    .nom_fonction, "\\geqslant ") != 0) &&
                   1641:                                    (strcmp((*((struct_fonction *)
                   1642:                                    (*(*l_element_courant).donnee).objet))
                   1643:                                    .nom_fonction, "\\leqslant ") != 0))
                   1644:                            {
                   1645:                                chaine_parametre = (unsigned char *)
                   1646:                                        (*s_sous_objet_1).objet;
                   1647:                                conversion_element_tex(&chaine_parametre,
                   1648:                                        (*((struct_fonction *)
                   1649:                                        (*(*l_element_courant).donnee).objet))
                   1650:                                        .nom_fonction);
                   1651: 
                   1652:                                if ((*s_sous_objet_1).objet == NULL)
                   1653:                                {
                   1654:                                    (*s_etat_processus).erreur_systeme =
                   1655:                                            d_es_allocation_memoire;
                   1656:                                    return;
                   1657:                                }
                   1658: 
                   1659:                                chaine_parametre = (unsigned char *)
                   1660:                                        (*s_sous_objet_2).objet;
                   1661:                                conversion_element_tex(&chaine_parametre,
                   1662:                                        (*((struct_fonction *)
                   1663:                                        (*(*l_element_courant).donnee).objet))
                   1664:                                        .nom_fonction);
                   1665: 
                   1666:                                if ((*s_sous_objet_2).objet == NULL)
                   1667:                                {
                   1668:                                    (*s_etat_processus).erreur_systeme =
                   1669:                                            d_es_allocation_memoire;
                   1670:                                    return;
                   1671:                                }
                   1672:                            }
                   1673: 
                   1674:                            if ((((unsigned char *) (*s_sous_objet_2)
                   1675:                                    .objet)[0] == '+') || (((unsigned char *)
                   1676:                                    (*s_sous_objet_2).objet)[0] == '-'))
                   1677:                            {
                   1678:                                if (((*s_sous_objet).objet = (void *)
                   1679:                                        malloc((strlen((unsigned char *)
                   1680:                                        (*s_sous_objet_1).objet) +
                   1681:                                        strlen((*((struct_fonction *)
                   1682:                                        (*(*l_element_courant).donnee).objet))
                   1683:                                        .nom_fonction) +
                   1684:                                        strlen((unsigned char *)
                   1685:                                        (*s_sous_objet_2).objet) + 18) *
                   1686:                                        sizeof(unsigned char))) == NULL)
                   1687:                                {
                   1688:                                    return;
                   1689:                                }
                   1690: 
                   1691:                                sprintf((unsigned char *) (*s_sous_objet).objet,
                   1692:                                        "{%s}%s{\\left(%s\\right)}",
                   1693:                                        (unsigned char *) (*s_sous_objet_1)
                   1694:                                        .objet, (*((struct_fonction *)
                   1695:                                        (*(*l_element_courant).donnee).objet))
                   1696:                                        .nom_fonction, (unsigned char *)
                   1697:                                        (*s_sous_objet_2).objet);
                   1698:                            }
                   1699:                            else
                   1700:                            {
                   1701:                                if (((*s_sous_objet).objet = (void *)
                   1702:                                        malloc((strlen((unsigned char *)
                   1703:                                        (*s_sous_objet_1).objet) +
                   1704:                                        strlen((*((struct_fonction *)
                   1705:                                        (*(*l_element_courant).donnee).objet))
                   1706:                                        .nom_fonction) +
                   1707:                                        strlen((unsigned char *)
                   1708:                                        (*s_sous_objet_2).objet) + 5) *
                   1709:                                        sizeof(unsigned char))) == NULL)
                   1710:                                {
                   1711:                                    return;
                   1712:                                }
                   1713: 
                   1714:                                sprintf((unsigned char *) (*s_sous_objet).objet,
                   1715:                                        "{%s}%s{%s}", (unsigned char *)
                   1716:                                        (*s_sous_objet_1)
                   1717:                                        .objet, (*((struct_fonction *)
                   1718:                                        (*(*l_element_courant).donnee).objet))
                   1719:                                        .nom_fonction, (unsigned char *)
                   1720:                                        (*s_sous_objet_2).objet);
                   1721:                            }
                   1722:                        }
                   1723: 
                   1724:                        liberation(s_etat_processus, s_sous_objet_1);
                   1725:                        liberation(s_etat_processus, s_sous_objet_2);
                   1726: 
                   1727:                        if (empilement(s_etat_processus, &((*s_etat_processus)
                   1728:                                .l_base_pile), s_sous_objet) == d_erreur)
                   1729:                        {
                   1730:                            return;
                   1731:                        }
                   1732:                    }
                   1733:                    else if (strcmp((*((struct_fonction *)
                   1734:                            (*(*l_element_courant).donnee).objet)).nom_fonction,
                   1735:                            "NOT") == 0)
                   1736:                    {
                   1737:                        if (depilement(s_etat_processus, &((*s_etat_processus)
                   1738:                                .l_base_pile), &s_sous_objet_1) == d_erreur)
                   1739:                        {
                   1740:                            return;
                   1741:                        }
                   1742: 
                   1743:                        if ((s_sous_objet = allocation(s_etat_processus, CHN))
                   1744:                                == NULL)
                   1745:                        {
                   1746:                            return;
                   1747:                        }
                   1748: 
                   1749:                        if (((*s_sous_objet).objet = (unsigned char *) malloc(
                   1750:                                (strlen((unsigned char *) (*s_sous_objet_1)
                   1751:                                .objet) + 25) * sizeof(unsigned char))) ==
                   1752:                                NULL)
                   1753:                        {
                   1754:                            return;
                   1755:                        }
                   1756: 
                   1757:                        sprintf((unsigned char *) (*s_sous_objet).objet,
                   1758:                                "\\text{%s}\\left(%s\\right)",
                   1759:                                (*((struct_fonction *)
                   1760:                                (*(*l_element_courant).donnee).objet))
                   1761:                                .nom_fonction, (unsigned char *)
                   1762:                                (*s_sous_objet_1).objet);
                   1763: 
                   1764:                        liberation(s_etat_processus, s_sous_objet_1);
                   1765: 
                   1766:                        if (empilement(s_etat_processus, &((*s_etat_processus)
                   1767:                                .l_base_pile), s_sous_objet) == d_erreur)
                   1768:                        {
                   1769:                            return;
                   1770:                        }
                   1771:                    }
                   1772:                    else if ((strcmp((*((struct_fonction *)
                   1773:                            (*(*l_element_courant).donnee).objet)).nom_fonction,
                   1774:                            "OR") == 0) || (strcmp((*((struct_fonction *)
                   1775:                            (*(*l_element_courant).donnee).objet)).nom_fonction,
                   1776:                            "XOR") == 0) || (strcmp((*((struct_fonction *)
                   1777:                            (*(*l_element_courant).donnee).objet)).nom_fonction,
                   1778:                            "AND") == 0))
                   1779:                    {
                   1780:                        if (depilement(s_etat_processus, &((*s_etat_processus)
                   1781:                                .l_base_pile), &s_sous_objet_2) == d_erreur)
                   1782:                        {
                   1783:                            return;
                   1784:                        }
                   1785: 
                   1786:                        if (depilement(s_etat_processus, &((*s_etat_processus)
                   1787:                                .l_base_pile), &s_sous_objet_1) == d_erreur)
                   1788:                        {
                   1789:                            return;
                   1790:                        }
                   1791: 
                   1792:                        if ((s_sous_objet = allocation(s_etat_processus, CHN))
                   1793:                                == NULL)
                   1794:                        {
                   1795:                            return;
                   1796:                        }
                   1797: 
                   1798:                        if (((*s_sous_objet).objet = (void *) malloc((strlen(
                   1799:                                (unsigned char *) (*s_sous_objet_1).objet) +
                   1800:                                strlen((*((struct_fonction *)
                   1801:                                (*(*l_element_courant).donnee).objet))
                   1802:                                .nom_fonction) + strlen((unsigned char *)
                   1803:                                (*s_sous_objet_2).objet) + 10) *
                   1804:                                sizeof(unsigned char))) == NULL)
                   1805:                        {
                   1806:                            return;
                   1807:                        }
                   1808: 
                   1809:                        sprintf((unsigned char *) (*s_sous_objet).objet,
                   1810:                                "%s \\text{%s} %s", (unsigned char *)
                   1811:                                (*s_sous_objet_1)
                   1812:                                .objet, (*((struct_fonction *)
                   1813:                                (*(*l_element_courant).donnee).objet))
                   1814:                                .nom_fonction, (unsigned char *)
                   1815:                                (*s_sous_objet_2).objet);
                   1816: 
                   1817:                        liberation(s_etat_processus, s_sous_objet_1);
                   1818:                        liberation(s_etat_processus, s_sous_objet_2);
                   1819: 
                   1820:                        if (empilement(s_etat_processus, &((*s_etat_processus)
                   1821:                                .l_base_pile), s_sous_objet) == d_erreur)
                   1822:                        {
                   1823:                            return;
                   1824:                        }
                   1825:                    }
                   1826:                    else
                   1827:                    {
                   1828:                        nombre_arguments = (*((struct_fonction *)
                   1829:                                (*(*l_element_courant).donnee).objet))
                   1830:                                .nombre_arguments;
                   1831: 
                   1832:                        if ((chaine = (unsigned char *)
                   1833:                                malloc(sizeof(unsigned char))) == NULL)
                   1834:                        {
                   1835:                            return;
                   1836:                        }
                   1837:                        
                   1838:                        chaine[0] = d_code_fin_chaine;
                   1839: 
                   1840:                        for(i = 0; i < nombre_arguments; i++)
                   1841:                        {
                   1842:                            if ((nombre_arguments - i) > 1)
                   1843:                            {
                   1844:                                l_liste1 = (*s_etat_processus).l_base_pile;
                   1845: 
                   1846:                                for(j = 2; j < (nombre_arguments - i); j++)
                   1847:                                {
                   1848:                                    l_liste1 = (*l_liste1).suivant;
                   1849:                                }
                   1850: 
                   1851:                                l_liste2 = (*l_liste1).suivant;
                   1852:                                (*l_liste1).suivant = (*l_liste2).suivant;
                   1853:                                (*l_liste2).suivant = (*s_etat_processus)
                   1854:                                        .l_base_pile;
                   1855:                                (*s_etat_processus).l_base_pile = l_liste2;
                   1856:                            }
                   1857:                            
                   1858:                            if (depilement(s_etat_processus,
                   1859:                                    &((*s_etat_processus).l_base_pile),
                   1860:                                    &s_sous_objet) == d_erreur)
                   1861:                            {
                   1862:                                return;
                   1863:                            }
                   1864: 
                   1865:                            chaine_sauvegarde = chaine;
                   1866: 
                   1867:                            if (strlen(chaine_sauvegarde) == 0)
                   1868:                            {
                   1869:                                if ((chaine = (unsigned char *) malloc((strlen(
                   1870:                                        (unsigned char *) (*s_sous_objet).objet)
                   1871:                                        + 1) * sizeof(unsigned char))) == NULL)
                   1872:                                {
                   1873:                                    return;
                   1874:                                }
                   1875: 
                   1876:                                sprintf(chaine, "%s", (unsigned char *)
                   1877:                                        (*s_sous_objet).objet);
                   1878:                            }
                   1879:                            else
                   1880:                            {
                   1881:                                if ((chaine = (unsigned char *) malloc((strlen(
                   1882:                                        chaine_sauvegarde) + 1 + strlen(
                   1883:                                        (unsigned char *) (*s_sous_objet).objet)
                   1884:                                        + 1) * sizeof(unsigned char))) == NULL)
                   1885:                                {
                   1886:                                    return;
                   1887:                                }
                   1888: 
                   1889:                                sprintf(chaine, "%s,%s", chaine_sauvegarde,
                   1890:                                        (unsigned char *) (*s_sous_objet)
                   1891:                                        .objet);
                   1892:                            }
                   1893: 
                   1894:                            free(chaine_sauvegarde);
                   1895:                            liberation(s_etat_processus, s_sous_objet);
                   1896:                        }
                   1897: 
                   1898:                        chaine_sauvegarde = chaine;
                   1899: 
                   1900:                        if ((chaine = (unsigned char *) malloc((strlen(
                   1901:                                (*((struct_fonction *) (*(*l_element_courant)
                   1902:                                .donnee).objet)).nom_fonction) + 20 +
                   1903:                                strlen(chaine_sauvegarde) + 1) *
                   1904:                                sizeof(unsigned char))) == NULL)
                   1905:                        {
                   1906:                            return;
                   1907:                        }
                   1908: 
                   1909:                        sprintf(chaine, "\\text{%s}\\left(%s\\right)",
                   1910:                                (*((struct_fonction *)
                   1911:                                (*(*l_element_courant).donnee).objet))
                   1912:                                .nom_fonction, chaine_sauvegarde);
                   1913:                        free(chaine_sauvegarde);
                   1914: 
                   1915:                        instruction_courante = (*s_etat_processus)
                   1916:                                .instruction_courante;
                   1917:                        test_instruction = (*s_etat_processus).test_instruction;
                   1918:                        instruction_valide = (*s_etat_processus)
                   1919:                                .instruction_valide;
                   1920: 
                   1921:                        (*s_etat_processus).test_instruction = 'Y';
                   1922:                        (*s_etat_processus).instruction_courante =
                   1923:                                (*((struct_fonction *) (*(*l_element_courant)
                   1924:                                .donnee).objet)).nom_fonction;
                   1925: 
                   1926:                        analyse(s_etat_processus, NULL);
                   1927: 
                   1928:                        if ((*s_etat_processus).instruction_valide == 'Y')
                   1929:                        {
                   1930:                            for(i = 0; i < strlen(chaine); i++)
                   1931:                            {
                   1932:                                if ((chaine[i] >= 'A') && (chaine[i] <= 'Z'))
                   1933:                                {
                   1934:                                    chaine[i] += ('a' - 'A');
                   1935:                                }
                   1936:                            }
                   1937:                        }
                   1938: 
                   1939:                        (*s_etat_processus).instruction_courante =
                   1940:                                instruction_courante;
                   1941:                        (*s_etat_processus).test_instruction =
                   1942:                                instruction_valide;
                   1943:                        (*s_etat_processus).instruction_valide =
                   1944:                                instruction_valide;
                   1945: 
                   1946:                        if ((s_sous_objet = allocation(s_etat_processus, CHN))
                   1947:                                == NULL)
                   1948:                        {
                   1949:                            return;
                   1950:                        }
                   1951: 
                   1952:                        (*s_sous_objet).objet = (void *) chaine;
                   1953: 
                   1954:                        if (empilement(s_etat_processus, &((*s_etat_processus)
                   1955:                                .l_base_pile), s_sous_objet) == d_erreur)
                   1956:                        {
                   1957:                            return;
                   1958:                        }
                   1959:                    }
                   1960:                }
                   1961:            }
                   1962:            else
                   1963:            {
                   1964:                if ((s_sous_objet = allocation(s_etat_processus, CHN))
                   1965:                        == NULL)
                   1966:                {
                   1967:                    return;
                   1968:                }
                   1969: 
                   1970:                if (((*s_sous_objet).objet = (void *) formateur(
                   1971:                        s_etat_processus, 0, 
                   1972:                        (*l_element_courant).donnee)) == NULL)
                   1973:                {
                   1974:                    return;
                   1975:                }
                   1976: 
                   1977:                if ((*(*l_element_courant).donnee).type == NOM)
                   1978:                {
                   1979:                    chaine_sauvegarde = (unsigned char *) (*s_sous_objet).objet;
                   1980: 
                   1981:                    if (((*s_sous_objet).objet = malloc((strlen(
                   1982:                            chaine_sauvegarde) - 1) *
                   1983:                            sizeof(unsigned char))) == NULL)
                   1984:                    {
                   1985:                        return;
                   1986:                    }
                   1987: 
                   1988:                    ptrl = chaine_sauvegarde;
                   1989:                    ptre = (unsigned char *) (*s_sous_objet).objet;
                   1990: 
                   1991:                    for(ptrl++, i = strlen(chaine_sauvegarde) - 2; i > 0;
                   1992:                            i--, *ptre++ = *ptrl++);
                   1993: 
                   1994:                    (*ptre) = d_code_fin_chaine;
                   1995: 
                   1996:                    free(chaine_sauvegarde);
                   1997: 
                   1998:                    chaine_majuscule = conversion_majuscule((*((struct_nom *)
                   1999:                            (*(*l_element_courant).donnee).objet)).nom);
                   2000: 
                   2001:                    if (strcmp(chaine_majuscule, "PI") == 0)
                   2002:                    {
                   2003:                        free((unsigned char *) (*s_sous_objet).objet);
                   2004: 
                   2005:                        if (((*s_sous_objet).objet =
                   2006:                                malloc(5 * sizeof(unsigned char))) == NULL)
                   2007:                        {
                   2008:                            (*s_etat_processus).erreur_systeme =
                   2009:                                    d_es_allocation_memoire;
                   2010:                            return;
                   2011:                        }
                   2012: 
                   2013:                        strcpy((unsigned char *) (*s_sous_objet).objet,
                   2014:                                "\\pi ");
                   2015:                    }
                   2016:                    else if (strcmp((*((struct_nom *) (*(*l_element_courant)
                   2017:                            .donnee).objet)).nom, "i") == 0)
                   2018:                    {
                   2019:                        free((unsigned char *) (*s_sous_objet).objet);
                   2020: 
                   2021:                        if (((*s_sous_objet).objet =
                   2022:                                malloc(9 * sizeof(unsigned char))) == NULL)
                   2023:                        {
                   2024:                            (*s_etat_processus).erreur_systeme =
                   2025:                                    d_es_allocation_memoire;
                   2026:                            return;
                   2027:                        }
                   2028: 
                   2029:                        strcpy((unsigned char *) (*s_sous_objet).objet,
                   2030:                                "\\text{i}");
                   2031:                    }
                   2032:                    else if (strcmp((*((struct_nom *) (*(*l_element_courant)
                   2033:                            .donnee).objet)).nom, "e") == 0)
                   2034:                    {
                   2035:                        free((unsigned char *) (*s_sous_objet).objet);
                   2036: 
                   2037:                        if (((*s_sous_objet).objet =
                   2038:                                malloc(9 * sizeof(unsigned char))) == NULL)
                   2039:                        {
                   2040:                            (*s_etat_processus).erreur_systeme =
                   2041:                                    d_es_allocation_memoire;
                   2042:                            return;
                   2043:                        }
                   2044: 
                   2045:                        strcpy((unsigned char *) (*s_sous_objet).objet,
                   2046:                                "\\text{e}");
                   2047:                    }
                   2048: 
                   2049:                    free(chaine_majuscule);
                   2050:                }
                   2051: 
                   2052:                if (empilement(s_etat_processus, &((*s_etat_processus)
                   2053:                        .l_base_pile), s_sous_objet) == d_erreur)
                   2054:                {
                   2055:                    return;
                   2056:                }
                   2057:            }
                   2058: 
                   2059:            l_element_courant = (*l_element_courant).suivant;
                   2060:        }
                   2061: 
                   2062:        if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
                   2063:                &s_sous_objet) == d_erreur)
                   2064:        {
                   2065:            return;
                   2066:        }
                   2067: 
                   2068:        if (fprintf(fichier_impression, "%s",
                   2069:                (unsigned char *) (*s_sous_objet).objet) < 0)
                   2070:        {
                   2071:            (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                   2072:            return;
                   2073:        }
                   2074: 
                   2075: 
                   2076:        liberation(s_etat_processus, s_sous_objet);
                   2077:        liberation(s_etat_processus, s_copie_objet);
                   2078:    }
                   2079: 
                   2080:    return;
                   2081: }
                   2082: 
                   2083: 
                   2084: /*
                   2085: ================================================================================
                   2086:   Echappement des caractères spéciaux de TeX
                   2087: ================================================================================
                   2088:   Entrées : ligne d'instructions TeX
                   2089: --------------------------------------------------------------------------------
                   2090:   Sorties : ligne corrigée
                   2091: --------------------------------------------------------------------------------
                   2092:   Effets de bord : néant
                   2093: ================================================================================
                   2094: */
                   2095: 
                   2096: void
                   2097: correction_formateur_tex(struct_processus *s_etat_processus,
                   2098:        unsigned char **ligne)
                   2099: {
                   2100:    logical1                    mode_mathematique;
                   2101: 
                   2102:    unsigned char               *tampon;
                   2103:    unsigned long               i;
                   2104: 
                   2105:    mode_mathematique = d_faux;
                   2106: 
                   2107:    for(i = 0; i < strlen((*ligne)); i++)
                   2108:    {
                   2109:        switch((*ligne)[i])
                   2110:        {
                   2111:            /*
                   2112:             * Le caractère '_' est autorisé tel quel dans une expression
                   2113:             * mathématique. Il est protégé en mode normal.
                   2114:             */
                   2115: 
                   2116:            case '$' :
                   2117:            {
                   2118:                mode_mathematique = (mode_mathematique == d_faux)
                   2119:                        ? d_vrai : d_faux;
                   2120: 
                   2121:                if ((*ligne)[i + 1] == '$')
                   2122:                {
                   2123:                    i++;
                   2124:                }
                   2125: 
                   2126:                break;
                   2127:            }
                   2128: 
                   2129:            /*
                   2130:             * Les '$', '{' et '}' ne sont pas convertis pour pouvoir écrire
                   2131:             * du TeX dans le texte.
                   2132:             */
                   2133: 
                   2134:            case '#' :
                   2135:            case '_' :
                   2136:            {
                   2137:                if (mode_mathematique == d_vrai)
                   2138:                {
                   2139:                    break;
                   2140:                }
                   2141:            }
                   2142: 
                   2143:            case '%' :
                   2144:            case '&' :
                   2145:            {
                   2146:                if ((tampon = (unsigned char *) malloc((strlen((*ligne)) + 2) *
                   2147:                        sizeof(unsigned char))) == NULL)
                   2148:                {
                   2149:                    (*s_etat_processus).erreur_systeme =
                   2150:                            d_es_allocation_memoire;
                   2151:                    return;
                   2152:                }
                   2153: 
                   2154:                strncpy(tampon, (*ligne), i);
                   2155:                strcpy(&(tampon[i]), "\\");
                   2156:                strcat(tampon, &((*ligne)[i++]));
                   2157: 
                   2158:                free((*ligne));
                   2159:                (*ligne) = tampon;
                   2160: 
                   2161:                break;
                   2162:            }
                   2163: 
                   2164:            default :
                   2165:            {
                   2166:                break;
                   2167:            }
                   2168:        }
                   2169:    }
                   2170: 
                   2171:    return;
                   2172: }
                   2173: 
                   2174: 
                   2175: /*
                   2176: ================================================================================
                   2177:   Fonction 'impression_tex'
                   2178: ================================================================================
                   2179:   Entrées :
                   2180: --------------------------------------------------------------------------------
                   2181:   Sorties :
                   2182: --------------------------------------------------------------------------------
                   2183:   Effets de bord : néant
                   2184: ================================================================================
                   2185: */
                   2186: 
                   2187: void
                   2188: impression_tex(struct_processus *s_etat_processus)
                   2189: {
                   2190:    file                *fichier_impression;
                   2191: 
                   2192:    unsigned char       *commande;
                   2193:    unsigned char       *nom_fichier_aux;
                   2194:    unsigned char       *nom_fichier_dvi;
                   2195:    unsigned char       *nom_fichier_log;
                   2196:    unsigned char       *nom_fichier_tex;
                   2197:    unsigned char       *nom_fichier_ps;
                   2198: 
                   2199:    unsigned long       longueur_nom_base;
                   2200: 
                   2201:    longueur_nom_base = strlen((*s_etat_processus).nom_fichier_impression);
                   2202: 
                   2203:    if ((nom_fichier_tex = malloc((longueur_nom_base + 6) *
                   2204:            sizeof(unsigned char))) == NULL)
                   2205:    {
                   2206:        (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   2207:        return;
                   2208:    }
                   2209: 
                   2210:    if ((nom_fichier_log = malloc((longueur_nom_base + 6) *
                   2211:            sizeof(unsigned char))) == NULL)
                   2212:    {
                   2213:        (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   2214:        return;
                   2215:    }
                   2216: 
                   2217:    if ((nom_fichier_aux = malloc((longueur_nom_base + 6) *
                   2218:            sizeof(unsigned char))) == NULL)
                   2219:    {
                   2220:        (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   2221:        return;
                   2222:    }
                   2223: 
                   2224:    if ((nom_fichier_dvi = malloc((longueur_nom_base + 6) *
                   2225:            sizeof(unsigned char))) == NULL)
                   2226:    {
                   2227:        (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   2228:        return;
                   2229:    }
                   2230: 
                   2231:    if ((nom_fichier_ps = malloc((longueur_nom_base + 5) *
                   2232:            sizeof(unsigned char))) == NULL)
                   2233:    {
                   2234:        (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   2235:        return;
                   2236:    }
                   2237: 
                   2238:    strcpy(nom_fichier_tex, (*s_etat_processus).nom_fichier_impression)
                   2239:            [longueur_nom_base - 4] = d_code_fin_chaine;
                   2240:    strcat(nom_fichier_tex, ".conv.tex");
                   2241: 
                   2242:    strcpy(nom_fichier_aux, (*s_etat_processus).nom_fichier_impression)
                   2243:            [longueur_nom_base - 4] = d_code_fin_chaine;
                   2244:    strcat(nom_fichier_aux, ".conv.aux");
                   2245: 
                   2246:    strcpy(nom_fichier_log, (*s_etat_processus).nom_fichier_impression)
                   2247:            [longueur_nom_base - 4] = d_code_fin_chaine;
                   2248:    strcat(nom_fichier_log, ".conv.log");
                   2249: 
                   2250:    strcpy(nom_fichier_dvi, (*s_etat_processus).nom_fichier_impression)
                   2251:            [longueur_nom_base - 4] = d_code_fin_chaine;
                   2252:    strcat(nom_fichier_dvi, ".conv.dvi");
                   2253: 
                   2254:    strcpy(nom_fichier_ps, (*s_etat_processus).nom_fichier_impression)
                   2255:            [longueur_nom_base - 4] = d_code_fin_chaine;
                   2256:    strcat(nom_fichier_ps, ".conv.ps");
                   2257: 
                   2258:    if ((fichier_impression = fopen((*s_etat_processus).nom_fichier_impression,
                   2259:            "a")) == NULL)
                   2260:    {
                   2261:        (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                   2262:        return;
                   2263:    }
                   2264: 
                   2265:    if (fprintf(fichier_impression, "\\end{document}\n") < 0)
                   2266:    {
                   2267:        (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                   2268:        return;
                   2269:    }
                   2270: 
                   2271:    if (fclose(fichier_impression) != 0)
                   2272:    {
                   2273:        (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                   2274:        return;
                   2275:    }
                   2276: 
                   2277:    if ((commande = (unsigned char *) malloc(((strlen(ds_tex_commande) - 15)
                   2278:            + (2 * strlen((*s_etat_processus).chemin_fichiers_temporaires))
                   2279:            + strlen((*s_etat_processus).nom_fichier_impression)
                   2280:            + (2 * strlen(nom_fichier_tex))
                   2281:            + (3 * strlen(d_exec_path))
                   2282:            + strlen(nom_fichier_dvi) + strlen(nom_fichier_ps))
                   2283:            * sizeof(unsigned char))) == NULL)
                   2284:    {
                   2285:        (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   2286:        return;
                   2287:    }
                   2288: 
                   2289:    sprintf(commande, ds_tex_commande, d_exec_path, d_exec_path, d_exec_path,
                   2290:            (*s_etat_processus).nom_fichier_impression,
                   2291:            (*s_etat_processus).nom_fichier_impression, nom_fichier_tex,
                   2292:            (*s_etat_processus).chemin_fichiers_temporaires,
                   2293:            nom_fichier_tex, nom_fichier_dvi, nom_fichier_ps);
                   2294: 
                   2295:    if (system(commande) != 0)
                   2296:    {
                   2297:        (*s_etat_processus).erreur_execution = d_ex_erreur_impression;
                   2298:        free(commande);
                   2299:    }
                   2300:    else
                   2301:    {
                   2302:        free(commande);
                   2303: 
                   2304:        if ((commande = (unsigned char *) malloc((strlen(ds_tex_postscript)
                   2305:                + strlen(nom_fichier_ps) - 1) * sizeof(unsigned char))) == NULL)
                   2306:        {
                   2307:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   2308:            return;
                   2309:        }
                   2310: 
                   2311:        sprintf(commande, ds_tex_postscript, nom_fichier_ps);
                   2312: 
                   2313:        if (system(commande) != 0)
                   2314:        {
                   2315:            (*s_etat_processus).erreur_execution = d_ex_erreur_impression;
                   2316:        }
                   2317: 
                   2318:        free(commande);
                   2319: 
                   2320:        if (destruction_fichier(nom_fichier_ps) == d_erreur)
                   2321:        {
                   2322:            (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                   2323:            return;
                   2324:        }
                   2325:    }
                   2326: 
                   2327:    if (destruction_fichier((*s_etat_processus).nom_fichier_impression)
                   2328:            == d_erreur)
                   2329:    {
                   2330:        (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                   2331:        return;
                   2332:    }
                   2333: 
                   2334:    free((*s_etat_processus).nom_fichier_impression);
                   2335:    (*s_etat_processus).nom_fichier_impression = NULL;
                   2336: 
                   2337:    if (destruction_fichier(nom_fichier_tex) == d_erreur)
                   2338:    {
                   2339:        (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                   2340:        return;
                   2341:    }
                   2342: 
                   2343:    if (destruction_fichier(nom_fichier_aux) == d_erreur)
                   2344:    {
                   2345:        (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                   2346:        return;
                   2347:    }
                   2348: 
                   2349:    if (destruction_fichier(nom_fichier_dvi) == d_erreur)
                   2350:    {
                   2351:        (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                   2352:        return;
                   2353:    }
                   2354: 
                   2355:    if (destruction_fichier(nom_fichier_log) == d_erreur)
                   2356:    {
                   2357:        (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                   2358:        return;
                   2359:    }
                   2360: 
                   2361:    free(nom_fichier_aux);
                   2362:    free(nom_fichier_log);
                   2363:    free(nom_fichier_dvi);
                   2364:    free(nom_fichier_tex);
                   2365:    free(nom_fichier_ps);
                   2366: 
                   2367:    return;
                   2368: }
                   2369: 
                   2370: 
                   2371: /*
                   2372: ================================================================================
                   2373:   Conversion des éléments TeX par ajout si nécessaire de parenthèses
                   2374: ================================================================================
                   2375:   Entrées :
                   2376: --------------------------------------------------------------------------------
                   2377:   Sorties :
                   2378: --------------------------------------------------------------------------------
                   2379:   Effets de bord : néant
                   2380: ================================================================================
                   2381: */
                   2382: 
                   2383: void
                   2384: conversion_element_tex(unsigned char **element, unsigned char *fonction)
                   2385: {
                   2386:    unsigned char           *chaine;
                   2387:    unsigned char           *element_courant;
                   2388:    unsigned char           *extrait;
                   2389: 
                   2390:    unsigned long           debut_fonction;
                   2391:    unsigned long           i;
                   2392:    unsigned long           niveau;
                   2393:    unsigned long           nombre_passages_par_zero;
                   2394: 
                   2395:    element_courant = (*element);
                   2396:    niveau = 0;
                   2397:    nombre_passages_par_zero = 0;
                   2398:    i = 1;
                   2399:    debut_fonction = 1;
                   2400: 
                   2401:    while((*element_courant) != d_code_fin_chaine)
                   2402:    {
                   2403:        if ((*element_courant) == '{')
                   2404:        {
                   2405:            if (niveau == 0)
                   2406:            {
                   2407:                extrait = extraction_chaine((*element), debut_fonction, i - 1);
                   2408: 
                   2409:                if (strcmp(extrait, fonction) != 0)
                   2410:                {
                   2411:                    nombre_passages_par_zero++;
                   2412:                }
                   2413: 
                   2414:                free(extrait);
                   2415:            }
                   2416: 
                   2417:            niveau++;
                   2418:        }
                   2419:        else if ((*element_courant) == '}')
                   2420:        {
                   2421:            debut_fonction = i + 1;
                   2422:            niveau--;
                   2423:        }
                   2424: 
                   2425:        element_courant++;
                   2426:        i++;
                   2427:    }
                   2428: 
                   2429:    if (nombre_passages_par_zero > 1)
                   2430:    {
                   2431:        chaine = (*element);
                   2432: 
                   2433:        if (((*element) = (unsigned char *) malloc((strlen(chaine) + 14) *
                   2434:                sizeof(unsigned char))) == NULL)
                   2435:        {
                   2436:            return;
                   2437:        }
                   2438: 
                   2439:        sprintf((*element), "\\left(%s\\right)", chaine);
                   2440:        free(chaine);
                   2441:    }
                   2442: 
                   2443:    return;
                   2444: }
                   2445: 
                   2446: // vim: ts=4

CVSweb interface <joel.bertrand@systella.fr>