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

1.1     ! bertrand    1: /*
        !             2: ================================================================================
        !             3:   RPL/2 (R) version 4.0.9
        !             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>