Annotation of rpl/src/instructions_d1.c, revision 1.35

1.1       bertrand    1: /*
                      2: ================================================================================
1.35    ! bertrand    3:   RPL/2 (R) version 4.1.8
1.32      bertrand    4:   Copyright (C) 1989-2012 Dr. BERTRAND Joël
1.1       bertrand    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: 
1.12      bertrand   23: #include "rpl-conv.h"
1.1       bertrand   24: 
                     25: 
                     26: /*
                     27: ================================================================================
                     28:   Fonction 'dec'
                     29: ================================================================================
                     30:   Entrées : structure processus
                     31: --------------------------------------------------------------------------------
                     32:   Sorties :
                     33: --------------------------------------------------------------------------------
                     34:   Effets de bord : néant
                     35: ================================================================================
                     36: */
                     37: 
                     38: void
                     39: instruction_dec(struct_processus *s_etat_processus)
                     40: {
                     41:    (*s_etat_processus).erreur_execution = d_ex;
                     42: 
                     43:    if ((*s_etat_processus).affichage_arguments == 'Y')
                     44:    {
                     45:        printf("\n  DEC ");
                     46: 
                     47:        if ((*s_etat_processus).langue == 'F')
                     48:        {
                     49:            printf("(base 10)\n\n");
                     50:            printf("  Aucun argument\n");
                     51:        }
                     52:        else
                     53:        {
                     54:            printf("(decimal base)\n\n");
                     55:            printf("  No argument\n");
                     56:        }
                     57: 
                     58:        return;
                     59:    }
                     60:    else if ((*s_etat_processus).test_instruction == 'Y')
                     61:    {
                     62:        (*s_etat_processus).nombre_arguments = -1;
                     63:        return;
                     64:    }
                     65: 
                     66:    cf(s_etat_processus, 43);
                     67:    cf(s_etat_processus, 44);
                     68: 
                     69:    if (test_cfsf(s_etat_processus, 31) == d_vrai)
                     70:    {
                     71:        if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
                     72:        {
                     73:            return;
                     74:        }
                     75:    }
                     76: 
                     77:    return;
                     78: }
                     79: 
                     80: 
                     81: /*
                     82: ================================================================================
                     83:   Fonction 'deg'
                     84: ================================================================================
                     85:   Entrées : structure processus
                     86: --------------------------------------------------------------------------------
                     87:   Sorties :
                     88: --------------------------------------------------------------------------------
                     89:   Effets de bord : néant
                     90: ================================================================================
                     91: */
                     92: 
                     93: void
                     94: instruction_deg(struct_processus *s_etat_processus)
                     95: {
                     96:    (*s_etat_processus).erreur_execution = d_ex;
                     97: 
                     98:    if ((*s_etat_processus).affichage_arguments == 'Y')
                     99:    {
                    100:        printf("\n  DEG ");
                    101: 
                    102:        if ((*s_etat_processus).langue == 'F')
                    103:        {
                    104:            printf("(arguments en degres)\n\n");
                    105:            printf("  Aucun argument\n");
                    106:        }
                    107:        else
                    108:        {
                    109:            printf("(degrees)\n\n");
                    110:            printf("  No argument\n");
                    111:        }
                    112: 
                    113:        return;
                    114:    }
                    115:    else if ((*s_etat_processus).test_instruction == 'Y')
                    116:    {
                    117:        (*s_etat_processus).nombre_arguments = -1;
                    118:        return;
                    119:    }
                    120: 
                    121:    cf(s_etat_processus, 60);
                    122: 
                    123:    if (test_cfsf(s_etat_processus, 31) == d_vrai)
                    124:    {
                    125:        if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
                    126:        {
                    127:            return;
                    128:        }
                    129:    }
                    130: 
                    131:    return;
                    132: }
                    133: 
                    134: 
                    135: /*
                    136: ================================================================================
                    137:   Fonction 'depth'
                    138: ================================================================================
                    139:   Entrées : structure processus
                    140: --------------------------------------------------------------------------------
                    141:   Sorties :
                    142: --------------------------------------------------------------------------------
                    143:   Effets de bord : néant
                    144: ================================================================================
                    145: */
                    146: 
                    147: void
                    148: instruction_depth(struct_processus *s_etat_processus)
                    149: {
                    150:    struct_objet                    *s_objet;
                    151: 
                    152:     (*s_etat_processus).erreur_execution = d_ex;
                    153: 
                    154:    if ((*s_etat_processus).affichage_arguments == 'Y')
                    155:    {
                    156:        printf("\n  DEPTH ");
                    157: 
                    158:        if ((*s_etat_processus).langue == 'F')
                    159:        {
                    160:            printf("(profondeur de la pile)\n\n");
                    161:        }
                    162:        else
                    163:        {
                    164:            printf("(stack depth)\n\n");
                    165:        }
                    166: 
                    167:        printf("->  1: %s\n", d_INT);
                    168: 
                    169:        return;
                    170:    }
                    171:    else if ((*s_etat_processus).test_instruction == 'Y')
                    172:    {
                    173:        (*s_etat_processus).nombre_arguments = -1;
                    174:        return;
                    175:    }
                    176: 
                    177:    if (test_cfsf(s_etat_processus, 31) == d_vrai)
                    178:    {
                    179:        if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
                    180:        {
                    181:            return;
                    182:        }
                    183:    }
                    184: 
                    185:    if ((s_objet = allocation(s_etat_processus, INT)) == NULL)
                    186:    {
                    187:        (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                    188:        return;
                    189:    }
                    190: 
                    191:    (*((integer8 *) ((*s_objet).objet))) = (integer8)
                    192:            (*s_etat_processus).hauteur_pile_operationnelle;
                    193: 
                    194:    if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
                    195:            s_objet) == d_erreur)
                    196:    {
                    197:        (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                    198:        return;
                    199:    }
                    200: 
                    201:     return;
                    202: }
                    203: 
                    204: 
                    205: /*
                    206: ================================================================================
                    207:   Fonction 'disp'
                    208: ================================================================================
                    209:   Entrées : structure processus
                    210: --------------------------------------------------------------------------------
                    211:   Sorties :
                    212: --------------------------------------------------------------------------------
                    213:   Effets de bord : néant
                    214: ================================================================================
                    215: */
                    216: 
                    217: void
                    218: instruction_disp(struct_processus *s_etat_processus)
                    219: {
                    220:    struct_objet                    *s_objet;
                    221: 
                    222:    unsigned char                   *chaine;
                    223: 
                    224:    (*s_etat_processus).erreur_execution = d_ex;
                    225: 
                    226:    if ((*s_etat_processus).affichage_arguments == 'Y')
                    227:    {
                    228:        printf("\n  DISP ");
                    229: 
                    230:        if ((*s_etat_processus).langue == 'F')
                    231:        {
                    232:            printf("(affichage d'un objet)\n\n");
                    233:        }
                    234:        else
                    235:        {
                    236:            printf("(display object)\n\n");
                    237:        }
                    238: 
                    239:        printf("    1: %s, %s, %s, %s, %s, %s,\n"
                    240:                "       %s, %s, %s, %s, %s,\n"
                    241:                "       %s, %s, %s, %s, %s,\n"
                    242:                "       %s, %s, %s, %s,\n"
                    243:                "       %s, %s\n",
                    244:                d_INT, d_REL, d_CPL, d_VIN, d_VRL, d_VCX, d_MIN, d_MRL, d_MCX,
                    245:                d_TAB, d_BIN, d_NOM, d_CHN, d_LST, d_ALG, d_RPN, d_FCH, d_SCK,
                    246:                d_SQL, d_SLB, d_PRC, d_MTX);
                    247: 
                    248:        return;
                    249:    }
                    250:    else if ((*s_etat_processus).test_instruction == 'Y')
                    251:    {
                    252:        (*s_etat_processus).nombre_arguments = -1;
                    253:        return;
                    254:    }
                    255: 
                    256:    if (test_cfsf(s_etat_processus, 31) == d_vrai)
                    257:    {
                    258:        if (empilement_pile_last(s_etat_processus, 1) == d_erreur)
                    259:        {
                    260:            return;
                    261:        }
                    262:    }
                    263: 
                    264:    if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
                    265:            &s_objet) == d_erreur)
                    266:    {
                    267:        (*s_etat_processus).erreur_execution = d_ex_manque_argument;
                    268:        return;
                    269:    }
                    270: 
                    271:    chaine = formateur(s_etat_processus, 0, s_objet);
                    272: 
                    273:    if (chaine != NULL)
                    274:    {
                    275:        flockfile(stdout);
                    276:        fprintf(stdout, "%s", chaine);
                    277: 
                    278:        if (test_cfsf(s_etat_processus, 33) == d_faux)
                    279:        {
                    280:            fprintf(stdout, "\n");
                    281:        }
                    282: 
                    283:        funlockfile(stdout);
                    284: 
                    285:        if (test_cfsf(s_etat_processus, 32) == d_vrai)
                    286:        {
                    287:            formateur_tex(s_etat_processus, s_objet, 'N');
                    288:        }
                    289: 
                    290:        free(chaine);
                    291:    }
                    292:    else
                    293:    {
                    294:        (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                    295:        return;
                    296:    }
                    297: 
                    298:    liberation(s_etat_processus, s_objet);
                    299: 
                    300:    return;
                    301: }
                    302: 
                    303: 
                    304: /*
                    305: ================================================================================
                    306:   Fonction 'drop'
                    307: ================================================================================
                    308:   Entrées : structure processus
                    309: --------------------------------------------------------------------------------
                    310:   Sorties :
                    311: --------------------------------------------------------------------------------
                    312:   Effets de bord : néant
                    313: ================================================================================
                    314: */
                    315: 
                    316: void
                    317: instruction_drop(struct_processus *s_etat_processus)
                    318: {
                    319:    struct_objet                        *s_objet;
                    320: 
                    321:    (*s_etat_processus).erreur_execution = d_ex;
                    322: 
                    323:    if ((*s_etat_processus).affichage_arguments == 'Y')
                    324:    {
                    325:        printf("\n  DROP ");
                    326: 
                    327:        if ((*s_etat_processus).langue == 'F')
                    328:        {
                    329:            printf("(effacement d'un objet)\n\n");
                    330:        }
                    331:        else
                    332:        {
                    333:            printf("(drop object)\n\n");
                    334:        }
                    335: 
                    336:        printf("    n: %s, %s, %s, %s, %s, %s,\n"
                    337:                "       %s, %s, %s, %s, %s,\n"
                    338:                "       %s, %s, %s, %s, %s,\n"
                    339:                "       %s, %s, %s, %s,\n"
                    340:                "       %s, %s\n",
                    341:                d_INT, d_REL, d_CPL, d_VIN, d_VRL, d_VCX, d_MIN, d_MRL, d_MCX,
                    342:                d_TAB, d_BIN, d_NOM, d_CHN, d_LST, d_ALG, d_RPN, d_FCH, d_SCK,
                    343:                d_SQL, d_SLB, d_PRC, d_MTX);
                    344:        printf("    ...\n");
                    345:        printf("    1: %s, %s, %s, %s, %s, %s,\n"
                    346:                "       %s, %s, %s, %s, %s,\n"
                    347:                "       %s, %s, %s, %s, %s,\n"
                    348:                "       %s, %s, %s, %s,\n"
                    349:                "       %s, %s\n",
                    350:                d_INT, d_REL, d_CPL, d_VIN, d_VRL, d_VCX, d_MIN, d_MRL, d_MCX,
                    351:                d_TAB, d_BIN, d_NOM, d_CHN, d_LST, d_ALG, d_RPN, d_FCH, d_SCK,
                    352:                d_SQL, d_SLB, d_PRC, d_MTX);
                    353:        printf("->n-1: %s, %s, %s, %s, %s, %s,\n"
                    354:                "       %s, %s, %s, %s, %s,\n"
                    355:                "       %s, %s, %s, %s, %s,\n"
                    356:                "       %s, %s, %s, %s,\n"
                    357:                "       %s, %s\n",
                    358:                d_INT, d_REL, d_CPL, d_VIN, d_VRL, d_VCX, d_MIN, d_MRL, d_MCX,
                    359:                d_TAB, d_BIN, d_NOM, d_CHN, d_LST, d_ALG, d_RPN, d_FCH, d_SCK,
                    360:                d_SQL, d_SLB, d_PRC, d_MTX);
                    361:        printf("    ...\n");
                    362:        printf("    1: %s, %s, %s, %s, %s, %s,\n"
                    363:                "       %s, %s, %s, %s, %s,\n"
                    364:                "       %s, %s, %s, %s, %s,\n"
                    365:                "       %s, %s, %s, %s,\n"
                    366:                "       %s, %s\n",
                    367:                d_INT, d_REL, d_CPL, d_VIN, d_VRL, d_VCX, d_MIN, d_MRL, d_MCX,
                    368:                d_TAB, d_BIN, d_NOM, d_CHN, d_LST, d_ALG, d_RPN, d_FCH, d_SCK,
                    369:                d_SQL, d_SLB, d_PRC, d_MTX);
                    370: 
                    371:        return;
                    372:    }
                    373:    else if ((*s_etat_processus).test_instruction == 'Y')
                    374:    {
                    375:        (*s_etat_processus).nombre_arguments = -1;
                    376:        return;
                    377:    }
                    378: 
                    379:    if (test_cfsf(s_etat_processus, 31) == d_vrai)
                    380:    {
                    381:        if (empilement_pile_last(s_etat_processus, 1) == d_erreur)
                    382:        {
                    383:            return;
                    384:        }
                    385:    }
                    386: 
                    387:    if ((*s_etat_processus).l_base_pile == NULL)
                    388:    {
                    389:        (*s_etat_processus).erreur_execution = d_ex_manque_argument;
                    390:        return;
                    391:    }
                    392: 
                    393:    if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
                    394:            &s_objet) == d_erreur)
                    395:    {
                    396:        (*s_etat_processus).erreur_execution = d_ex_manque_argument;
                    397:        return;
                    398:    }
                    399: 
                    400:    liberation(s_etat_processus, s_objet);
                    401: 
                    402:    return;
                    403: }
                    404: 
                    405: 
                    406: /*
                    407: ================================================================================
                    408:   Fonction 'drop2'
                    409: ================================================================================
                    410:   Entrées : structure processus
                    411: --------------------------------------------------------------------------------
                    412:   Sorties :
                    413: --------------------------------------------------------------------------------
                    414:   Effets de bord : néant
                    415: ================================================================================
                    416: */
                    417: 
                    418: void
                    419: instruction_drop2(struct_processus *s_etat_processus)
                    420: {
                    421:    struct_objet                    *s_objet;
                    422: 
                    423:    (*s_etat_processus).erreur_execution = d_ex;
                    424: 
                    425:    if ((*s_etat_processus).affichage_arguments == 'Y')
                    426:    {
                    427:        printf("\n  DROP2 ");
                    428: 
                    429:        if ((*s_etat_processus).langue == 'F')
                    430:        {
                    431:            printf("(effacement de deux objets)\n\n");
                    432:        }
                    433:        else
                    434:        {
                    435:            printf("(drop two objects)\n\n");
                    436:        }
                    437: 
                    438:        printf("    n: %s, %s, %s, %s, %s, %s,\n"
                    439:                "       %s, %s, %s, %s, %s,\n"
                    440:                "       %s, %s, %s, %s, %s,\n"
                    441:                "       %s, %s, %s, %s,\n"
                    442:                "       %s, %s\n",
                    443:                d_INT, d_REL, d_CPL, d_VIN, d_VRL, d_VCX, d_MIN, d_MRL, d_MCX,
                    444:                d_TAB, d_BIN, d_NOM, d_CHN, d_LST, d_ALG, d_RPN, d_FCH, d_SCK,
                    445:                d_SQL, d_SLB, d_PRC, d_MTX);
                    446:        printf("    ...\n");
                    447:        printf("    1: %s, %s, %s, %s, %s, %s,\n"
                    448:                "       %s, %s, %s, %s, %s,\n"
                    449:                "       %s, %s, %s, %s, %s,\n"
                    450:                "       %s, %s, %s, %s,\n"
                    451:                "       %s, %s\n",
                    452:                d_INT, d_REL, d_CPL, d_VIN, d_VRL, d_VCX, d_MIN, d_MRL, d_MCX,
                    453:                d_TAB, d_BIN, d_NOM, d_CHN, d_LST, d_ALG, d_RPN, d_FCH, d_SCK,
                    454:                d_SQL, d_SLB, d_PRC, d_MTX);
                    455:        printf("->n-2: %s, %s, %s, %s, %s, %s,\n"
                    456:                "       %s, %s, %s, %s, %s,\n"
                    457:                "       %s, %s, %s, %s, %s,\n"
                    458:                "       %s, %s, %s, %s,\n"
                    459:                "       %s, %s\n",
                    460:                d_INT, d_REL, d_CPL, d_VIN, d_VRL, d_VCX, d_MIN, d_MRL, d_MCX,
                    461:                d_TAB, d_BIN, d_NOM, d_CHN, d_LST, d_ALG, d_RPN, d_FCH, d_SCK,
                    462:                d_SQL, d_SLB, d_PRC, d_MTX);
                    463:        printf("    ...\n");
                    464:        printf("    1: %s, %s, %s, %s, %s, %s,\n"
                    465:                "       %s, %s, %s, %s, %s,\n"
                    466:                "       %s, %s, %s, %s, %s,\n"
                    467:                "       %s, %s, %s, %s,\n"
                    468:                "       %s, %s\n",
                    469:                d_INT, d_REL, d_CPL, d_VIN, d_VRL, d_VCX, d_MIN, d_MRL, d_MCX,
                    470:                d_TAB, d_BIN, d_NOM, d_CHN, d_LST, d_ALG, d_RPN, d_FCH, d_SCK,
                    471:                d_SQL, d_SLB, d_PRC, d_MTX);
                    472: 
                    473:        return;
                    474:    }
                    475:    else if ((*s_etat_processus).test_instruction == 'Y')
                    476:    {
                    477:        (*s_etat_processus).nombre_arguments = -1;
                    478:        return;
                    479:    }
                    480: 
                    481:    if (test_cfsf(s_etat_processus, 31) == d_vrai)
                    482:    {
                    483:        if (empilement_pile_last(s_etat_processus, 2) == d_erreur)
                    484:        {
                    485:            return;
                    486:        }
                    487:    }
                    488: 
1.29      bertrand  489:    if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
                    490:            &s_objet) == d_erreur)
1.1       bertrand  491:    {
                    492:        (*s_etat_processus).erreur_execution = d_ex_manque_argument;
                    493:        return;
                    494:    }
                    495: 
                    496:    liberation(s_etat_processus, s_objet);
                    497: 
1.29      bertrand  498:    if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
                    499:            &s_objet) == d_erreur)
                    500:    {
                    501:        (*s_etat_processus).erreur_execution = d_ex_manque_argument;
                    502:        return;
                    503:    }
                    504: 
1.1       bertrand  505:    liberation(s_etat_processus, s_objet);
                    506: 
                    507:    return;
                    508: }
                    509: 
                    510: 
                    511: /*
                    512: ================================================================================
                    513:   Fonction 'dropn'
                    514: ================================================================================
                    515:   Entrées : structure processus
                    516: --------------------------------------------------------------------------------
                    517:   Sorties :
                    518: --------------------------------------------------------------------------------
                    519:   Effets de bord : néant
                    520: ================================================================================
                    521: */
                    522: 
                    523: void
                    524: instruction_dropn(struct_processus *s_etat_processus)
                    525: {
                    526:    struct_objet                    *s_objet;
                    527: 
                    528:    signed long                     nombre_suppressions;
                    529: 
                    530:    unsigned long                   i;
                    531: 
                    532:    (*s_etat_processus).erreur_execution = d_ex;
                    533: 
                    534:    if ((*s_etat_processus).affichage_arguments == 'Y')
                    535:    {
                    536:        printf("\n  DROPN ");
                    537: 
                    538:        if ((*s_etat_processus).langue == 'F')
                    539:        {
                    540:            printf("(effacement de n objets)\n\n");
                    541:        }
                    542:        else
                    543:        {
                    544:            printf("(drop n objects)\n\n");
                    545:        }
                    546: 
                    547:        printf("    m: %s, %s, %s, %s, %s, %s,\n"
                    548:                "       %s, %s, %s, %s, %s,\n"
                    549:                "       %s, %s, %s, %s, %s,\n"
                    550:                "       %s, %s, %s, %s,\n"
                    551:                "       %s, %s\n",
                    552:                d_INT, d_REL, d_CPL, d_VIN, d_VRL, d_VCX, d_MIN, d_MRL, d_MCX,
                    553:                d_TAB, d_BIN, d_NOM, d_CHN, d_LST, d_ALG, d_RPN, d_FCH, d_SCK,
                    554:                d_SQL, d_SLB, d_PRC, d_MTX);
                    555:        printf("    ...\n");
                    556:        printf("    2: %s, %s, %s, %s, %s, %s,\n"
                    557:                "       %s, %s, %s, %s, %s,\n"
                    558:                "       %s, %s, %s, %s, %s,\n"
                    559:                "       %s, %s, %s, %s,\n"
                    560:                "       %s, %s\n",
                    561:                d_INT, d_REL, d_CPL, d_VIN, d_VRL, d_VCX, d_MIN, d_MRL, d_MCX,
                    562:                d_TAB, d_BIN, d_NOM, d_CHN, d_LST, d_ALG, d_RPN, d_FCH, d_SCK,
                    563:                d_SQL, d_SLB, d_PRC, d_MTX);
                    564:        printf("    1: %s\n", d_INT);
                    565:        printf("->m-n: %s, %s, %s, %s, %s, %s,\n"
                    566:                "       %s, %s, %s, %s, %s,\n"
                    567:                "       %s, %s, %s, %s, %s,\n"
                    568:                "       %s, %s, %s, %s,\n"
                    569:                "       %s, %s\n",
                    570:                d_INT, d_REL, d_CPL, d_VIN, d_VRL, d_VCX, d_MIN, d_MRL, d_MCX,
                    571:                d_TAB, d_BIN, d_NOM, d_CHN, d_LST, d_ALG, d_RPN, d_FCH, d_SCK,
                    572:                d_SQL, d_SLB, d_PRC, d_MTX);
                    573:        printf("    ...\n");
                    574:        printf("    1: %s, %s, %s, %s, %s, %s,\n"
                    575:                "       %s, %s, %s, %s, %s,\n"
                    576:                "       %s, %s, %s, %s, %s,\n"
                    577:                "       %s, %s, %s, %s,\n"
                    578:                "       %s, %s\n",
                    579:                d_INT, d_REL, d_CPL, d_VIN, d_VRL, d_VCX, d_MIN, d_MRL, d_MCX,
                    580:                d_TAB, d_BIN, d_NOM, d_CHN, d_LST, d_ALG, d_RPN, d_FCH, d_SCK,
                    581:                d_SQL, d_SLB, d_PRC, d_MTX);
                    582: 
                    583:        return;
                    584:    }
                    585:    else if ((*s_etat_processus).test_instruction == 'Y')
                    586:    {
                    587:        (*s_etat_processus).nombre_arguments = -1;
                    588:        return;
                    589:    }
                    590: 
                    591:    if (test_cfsf(s_etat_processus, 31) == d_vrai)
                    592:    {
                    593:        if (empilement_pile_last(s_etat_processus, 1) == d_erreur)
                    594:        {
                    595:            return;
                    596:        }
                    597:    }
                    598: 
                    599:    if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
                    600:            &s_objet) == d_erreur)
                    601:    {
                    602:        return;
                    603:    }
                    604: 
                    605:    if ((*s_objet).type != INT)
                    606:    {
                    607:        liberation(s_etat_processus, s_objet);
                    608: 
                    609:        (*s_etat_processus).erreur_execution = d_ex_argument_invalide;
                    610:        return;
                    611:    }
                    612: 
                    613:    nombre_suppressions = (*((integer8 *) (*s_objet).objet));
                    614:    liberation(s_etat_processus, s_objet);
                    615: 
                    616:    if (nombre_suppressions < 0)
                    617:    {
                    618: 
                    619: /*
                    620: -- Opération absurde autorisée sur le calculateur HP-28S -----------------------
                    621: */
                    622: 
                    623:        (*s_etat_processus).erreur_execution = d_ex_argument_invalide;
                    624:        return;
                    625:    }
                    626: 
                    627:    if ((unsigned long) nombre_suppressions >
                    628:            (*s_etat_processus).hauteur_pile_operationnelle)
                    629:    {
                    630:        (*s_etat_processus).erreur_execution = d_ex_manque_argument;
                    631:        return;
                    632:    }
                    633: 
                    634:    for(i = 0; i < (unsigned long) nombre_suppressions; i++)
                    635:    {
                    636:        if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
                    637:                &s_objet) == d_erreur)
                    638:        {
                    639:            return;
                    640:        }
                    641: 
                    642:        liberation(s_etat_processus, s_objet);
                    643:    }
                    644: 
                    645:    return;
                    646: }
                    647: 
                    648: 
                    649: /*
                    650: ================================================================================
                    651:   Fonction 'dup'
                    652: ================================================================================
                    653:   Entrées : structure processus
                    654: --------------------------------------------------------------------------------
                    655:   Sorties :
                    656: --------------------------------------------------------------------------------
                    657:   Effets de bord : néant
                    658: ================================================================================
                    659: */
                    660: 
                    661: void
                    662: instruction_dup(struct_processus *s_etat_processus)
                    663: {
                    664:    struct_objet                    *s_objet;
                    665: 
                    666:    (*s_etat_processus).erreur_execution = d_ex;
                    667: 
                    668:    if ((*s_etat_processus).affichage_arguments == 'Y')
                    669:    {
                    670:        printf("\n  DUP ");
                    671: 
                    672:        if ((*s_etat_processus).langue == 'F')
                    673:        {
                    674:            printf("(duplication d'un objet)\n\n");
                    675:        }
                    676:        else
                    677:        {
                    678:            printf("(duplication of object)\n\n");
                    679:        }
                    680: 
                    681:        printf("    1: %s, %s, %s, %s, %s, %s,\n"
                    682:                "       %s, %s, %s, %s, %s,\n"
                    683:                "       %s, %s, %s, %s, %s,\n"
                    684:                "       %s, %s, %s, %s,\n"
                    685:                "       %s, %s\n",
                    686:                d_INT, d_REL, d_CPL, d_VIN, d_VRL, d_VCX, d_MIN, d_MRL, d_MCX,
                    687:                d_TAB, d_BIN, d_NOM, d_CHN, d_LST, d_ALG, d_RPN, d_FCH, d_SCK,
                    688:                d_SQL, d_SLB, d_PRC, d_MTX);
                    689:        printf("->  2: %s, %s, %s, %s, %s, %s,\n"
                    690:                "       %s, %s, %s, %s, %s,\n"
                    691:                "       %s, %s, %s, %s, %s,\n"
                    692:                "       %s, %s, %s, %s,\n"
                    693:                "       %s, %s\n",
                    694:                d_INT, d_REL, d_CPL, d_VIN, d_VRL, d_VCX, d_MIN, d_MRL, d_MCX,
                    695:                d_TAB, d_BIN, d_NOM, d_CHN, d_LST, d_ALG, d_RPN, d_FCH, d_SCK,
                    696:                d_SQL, d_SLB, d_PRC, d_MTX);
                    697:        printf("    1: %s, %s, %s, %s, %s, %s,\n"
                    698:                "       %s, %s, %s, %s, %s,\n"
                    699:                "       %s, %s, %s, %s, %s,\n"
                    700:                "       %s, %s, %s, %s,\n"
                    701:                "       %s, %s\n",
                    702:                d_INT, d_REL, d_CPL, d_VIN, d_VRL, d_VCX, d_MIN, d_MRL, d_MCX,
                    703:                d_TAB, d_BIN, d_NOM, d_CHN, d_LST, d_ALG, d_RPN, d_FCH, d_SCK,
                    704:                d_SQL, d_SLB, d_PRC, d_MTX);
                    705: 
                    706:        return;
                    707:    }
                    708:    else if ((*s_etat_processus).test_instruction == 'Y')
                    709:    {
                    710:        (*s_etat_processus).nombre_arguments = -1;
                    711:        return;
                    712:    }
                    713: 
                    714:    if (test_cfsf(s_etat_processus, 31) == d_vrai)
                    715:    {
                    716:        if (empilement_pile_last(s_etat_processus, 1) == d_erreur)
                    717:        {
                    718:            return;
                    719:        }
                    720:    }
                    721: 
                    722:    if ((*s_etat_processus).l_base_pile == NULL)
                    723:    {
                    724:        (*s_etat_processus).erreur_execution = d_ex_manque_argument;
                    725:        return;
                    726:    }
                    727: 
                    728:    s_objet = copie_objet(s_etat_processus,
                    729:            (*(*s_etat_processus).l_base_pile).donnee, 'P');
                    730: 
                    731:    if (s_objet == NULL)
                    732:    {
                    733:        (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                    734:        return;
                    735:    }
                    736: 
                    737:    if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
                    738:            s_objet) == d_erreur)
                    739:    {
                    740:        (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                    741:        return;
                    742:    }
                    743: 
                    744:    return;
                    745: }
                    746: 
                    747: 
                    748: /*
                    749: ================================================================================
                    750:   Fonction 'dup2'
                    751: ================================================================================
                    752:   Entrées : structure processus
                    753: --------------------------------------------------------------------------------
                    754:   Sorties :
                    755: --------------------------------------------------------------------------------
                    756:   Effets de bord : néant
                    757: ================================================================================
                    758: */
                    759: 
                    760: void
                    761: instruction_dup2(struct_processus *s_etat_processus)
                    762: {
                    763:    struct_objet                    *s_objet;
                    764: 
                    765:    unsigned long                   i;
                    766: 
                    767:    (*s_etat_processus).erreur_execution = d_ex;
                    768: 
                    769:    if ((*s_etat_processus).affichage_arguments == 'Y')
                    770:    {
                    771:        printf("\n  DUP2 ");
                    772: 
                    773:        if ((*s_etat_processus).langue == 'F')
                    774:        {
                    775:            printf("(duplication de deux objets)\n\n");
                    776:        }
                    777:        else
                    778:        {
                    779:            printf("(duplication of two objects)\n\n");
                    780:        }
                    781: 
                    782:        printf("    2: %s, %s, %s, %s, %s, %s,\n"
                    783:                "       %s, %s, %s, %s, %s,\n"
                    784:                "       %s, %s, %s, %s, %s,\n"
                    785:                "       %s, %s, %s, %s,\n"
                    786:                "       %s, %s\n",
                    787:                d_INT, d_REL, d_CPL, d_VIN, d_VRL, d_VCX, d_MIN, d_MRL, d_MCX,
                    788:                d_TAB, d_BIN, d_NOM, d_CHN, d_LST, d_ALG, d_RPN, d_FCH, d_SCK,
                    789:                d_SQL, d_SLB, d_PRC, d_MTX);
                    790:        printf("    1: %s, %s, %s, %s, %s, %s,\n"
                    791:                "       %s, %s, %s, %s, %s,\n"
                    792:                "       %s, %s, %s, %s, %s,\n"
                    793:                "       %s, %s, %s, %s,\n"
                    794:                "       %s, %s\n",
                    795:                d_INT, d_REL, d_CPL, d_VIN, d_VRL, d_VCX, d_MIN, d_MRL, d_MCX,
                    796:                d_TAB, d_BIN, d_NOM, d_CHN, d_LST, d_ALG, d_RPN, d_FCH, d_SCK,
                    797:                d_SQL, d_SLB, d_PRC, d_MTX);
                    798:        printf("->  4: %s, %s, %s, %s, %s, %s,\n"
                    799:                "       %s, %s, %s, %s, %s,\n"
                    800:                "       %s, %s, %s, %s, %s,\n"
                    801:                "       %s, %s, %s, %s,\n"
                    802:                "       %s, %s\n",
                    803:                d_INT, d_REL, d_CPL, d_VIN, d_VRL, d_VCX, d_MIN, d_MRL, d_MCX,
                    804:                d_TAB, d_BIN, d_NOM, d_CHN, d_LST, d_ALG, d_RPN, d_FCH, d_SCK,
                    805:                d_SQL, d_SLB, d_PRC, d_MTX);
                    806:        printf("    ...\n");
                    807:        printf("    1: %s, %s, %s, %s, %s, %s,\n"
                    808:                "       %s, %s, %s, %s, %s,\n"
                    809:                "       %s, %s, %s, %s, %s,\n"
                    810:                "       %s, %s, %s, %s,\n"
                    811:                "       %s, %s\n",
                    812:                d_INT, d_REL, d_CPL, d_VIN, d_VRL, d_VCX, d_MIN, d_MRL, d_MCX,
                    813:                d_TAB, d_BIN, d_NOM, d_CHN, d_LST, d_ALG, d_RPN, d_FCH, d_SCK,
                    814:                d_SQL, d_SLB, d_PRC, d_MTX);
                    815: 
                    816:        return;
                    817:    }
                    818:    else if ((*s_etat_processus).test_instruction == 'Y')
                    819:    {
                    820:        (*s_etat_processus).nombre_arguments = -1;
                    821:        return;
                    822:    }
                    823: 
                    824:    if (test_cfsf(s_etat_processus, 31) == d_vrai)
                    825:    {
                    826:        if (empilement_pile_last(s_etat_processus, 2) == d_erreur)
                    827:        {
                    828:            return;
                    829:        }
                    830:    }
                    831: 
                    832:    if ((*s_etat_processus).hauteur_pile_operationnelle < 2)
                    833:    {
                    834:        (*s_etat_processus).erreur_execution = d_ex_manque_argument;
                    835:        return;
                    836:    }
                    837: 
                    838:    for(i = 0; i < 2; i++)
                    839:    {
                    840:        s_objet = copie_objet(s_etat_processus,
                    841:                (*(*(*s_etat_processus).l_base_pile).suivant).donnee, 'P');
                    842: 
                    843:        if (s_objet == NULL)
                    844:        {
                    845:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                    846:            return;
                    847:        }
                    848: 
                    849:        if (empilement(s_etat_processus, &((*s_etat_processus)
                    850:                .l_base_pile), s_objet) == d_erreur)
                    851:        {
                    852:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                    853:            return;
                    854:        }
                    855:    }
                    856: 
                    857:    return;
                    858: }
                    859: 
                    860: 
                    861: /*
                    862: ================================================================================
                    863:   Fonction 'dupn'
                    864: ================================================================================
                    865:   Entrées : structure processus
                    866: --------------------------------------------------------------------------------
                    867:   Sorties :
                    868: --------------------------------------------------------------------------------
                    869:   Effets de bord : néant
                    870: ================================================================================
                    871: */
                    872: 
                    873: void
                    874: instruction_dupn(struct_processus *s_etat_processus)
                    875: {
                    876:    struct_liste_chainee                *l_base_pile;
                    877:    struct_liste_chainee                *l_element_courant;
                    878: 
                    879:    struct_objet                        *s_objet;
                    880:    struct_objet                        *s_nouvel_objet;
                    881: 
                    882:    signed long                         nombre_duplications;
                    883:    unsigned long                       i;
                    884: 
                    885:    (*s_etat_processus).erreur_execution = d_ex;
                    886: 
                    887:    if ((*s_etat_processus).affichage_arguments == 'Y')
                    888:    {
                    889:        printf("\n  DUPN ");
                    890: 
                    891:        if ((*s_etat_processus).langue == 'F')
                    892:        {
                    893:            printf("(duplication de n objets)\n\n");
                    894:        }
                    895:        else
                    896:        {
                    897:            printf("(duplication of n objects)\n\n");
                    898:        }
                    899: 
                    900:        printf("    m: %s, %s, %s, %s, %s, %s,\n"
                    901:                "       %s, %s, %s, %s, %s,\n"
                    902:                "       %s, %s, %s, %s, %s,\n"
                    903:                "       %s, %s, %s, %s,\n"
                    904:                "       %s, %s\n",
                    905:                d_INT, d_REL, d_CPL, d_VIN, d_VRL, d_VCX, d_MIN, d_MRL, d_MCX,
                    906:                d_TAB, d_BIN, d_NOM, d_CHN, d_LST, d_ALG, d_RPN, d_FCH, d_SCK,
                    907:                d_SQL, d_SLB, d_PRC, d_MTX);
                    908:        printf("    ...\n");
                    909:        printf("    2: %s, %s, %s, %s, %s, %s,\n"
                    910:                "       %s, %s, %s, %s, %s,\n"
                    911:                "       %s, %s, %s, %s, %s,\n"
                    912:                "       %s, %s, %s, %s,\n"
                    913:                "       %s, %s\n",
                    914:                d_INT, d_REL, d_CPL, d_VIN, d_VRL, d_VCX, d_MIN, d_MRL, d_MCX,
                    915:                d_TAB, d_BIN, d_NOM, d_CHN, d_LST, d_ALG, d_RPN, d_FCH, d_SCK,
                    916:                d_SQL, d_SLB, d_PRC, d_MTX);
                    917:        printf("    1: %s\n", d_INT);
                    918:        printf("->m+n: %s, %s, %s, %s, %s, %s,\n"
                    919:                "       %s, %s, %s, %s, %s,\n"
                    920:                "       %s, %s, %s, %s, %s,\n"
                    921:                "       %s, %s, %s, %s,\n"
                    922:                "       %s, %s\n",
                    923:                d_INT, d_REL, d_CPL, d_VIN, d_VRL, d_VCX, d_MIN, d_MRL, d_MCX,
                    924:                d_TAB, d_BIN, d_NOM, d_CHN, d_LST, d_ALG, d_RPN, d_FCH, d_SCK,
                    925:                d_SQL, d_SLB, d_PRC, d_MTX);
                    926:        printf("    ...\n");
                    927:        printf("    1: %s, %s, %s, %s, %s, %s,\n"
                    928:                "       %s, %s, %s, %s, %s,\n"
                    929:                "       %s, %s, %s, %s, %s,\n"
                    930:                "       %s, %s, %s, %s,\n"
                    931:                "       %s, %s\n",
                    932:                d_INT, d_REL, d_CPL, d_VIN, d_VRL, d_VCX, d_MIN, d_MRL, d_MCX,
                    933:                d_TAB, d_BIN, d_NOM, d_CHN, d_LST, d_ALG, d_RPN, d_FCH, d_SCK,
                    934:                d_SQL, d_SLB, d_PRC, d_MTX);
                    935: 
                    936:        return;
                    937:    }
                    938:    else if ((*s_etat_processus).test_instruction == 'Y')
                    939:    {
                    940:        (*s_etat_processus).nombre_arguments = -1;
                    941:        return;
                    942:    }
                    943: 
                    944:    if (test_cfsf(s_etat_processus, 31) == d_vrai)
                    945:    {
                    946:        if (empilement_pile_last(s_etat_processus, 1) == d_erreur)
                    947:        {
                    948:            return;
                    949:        }
                    950:    }
                    951: 
                    952:    if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
                    953:            &s_objet) == d_erreur)
                    954:    {
                    955:        return;
                    956:    }
                    957: 
                    958:    if ((*s_objet).type != INT)
                    959:    {
                    960:        liberation(s_etat_processus, s_objet);
                    961: 
                    962:        (*s_etat_processus).erreur_execution = d_ex_argument_invalide;
                    963:        return;
                    964:    }
                    965: 
                    966:    nombre_duplications = (*((integer8 *) (*s_objet).objet));
                    967:    liberation(s_etat_processus, s_objet);
                    968: 
                    969:    if (nombre_duplications < 0)
                    970:    {
                    971: 
                    972: /*
                    973: -- Opération absurde autorisée sur le calculateur HP-28S -----------------------
                    974: */
                    975: 
                    976:        (*s_etat_processus).erreur_execution = d_ex_argument_invalide;
                    977:        return;
                    978:    }
                    979: 
                    980:    l_element_courant = (*s_etat_processus).l_base_pile;
                    981: 
                    982:    for(i = 0; i < (unsigned long) nombre_duplications; i++)
                    983:    {
                    984:        if (l_element_courant == NULL)
                    985:        {
                    986:            (*s_etat_processus).erreur_execution = d_ex_manque_argument;
                    987:            return;
                    988:        }
                    989: 
                    990:        s_nouvel_objet = copie_objet(s_etat_processus,
                    991:                (*l_element_courant).donnee, 'P');
                    992: 
                    993:        if (s_nouvel_objet == NULL)
                    994:        {
                    995:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                    996:            return;
                    997:        }
                    998: 
                    999:        if (empilement(s_etat_processus, &l_base_pile, s_nouvel_objet)
                   1000:                == d_erreur)
                   1001:        {
                   1002:            return;
                   1003:        }
                   1004: 
                   1005:        l_element_courant = (*l_element_courant).suivant;
                   1006:    }
                   1007: 
                   1008:    for(i = 0; i < (unsigned long) nombre_duplications; i++)
                   1009:    {
                   1010:        if (depilement(s_etat_processus, &l_base_pile, &s_objet) == d_erreur)
                   1011:        {
                   1012:            return;
                   1013:        }
                   1014: 
                   1015:        if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
                   1016:                s_objet) == d_erreur)
                   1017:        {
                   1018:            return;
                   1019:        }
                   1020:    }
                   1021: 
                   1022:    return;
                   1023: }
                   1024: 
                   1025: 
                   1026: /*
                   1027: ================================================================================
                   1028:   Fonction '/'
                   1029: ================================================================================
                   1030:   Entrées : structure processus
                   1031: --------------------------------------------------------------------------------
                   1032:   Sorties :
                   1033: --------------------------------------------------------------------------------
                   1034:   Effets de bord : néant
                   1035: ================================================================================
                   1036: */
                   1037: 
                   1038: void
                   1039: instruction_division(struct_processus *s_etat_processus)
                   1040: {
                   1041:    integer8                        reste;
                   1042: 
                   1043:    real8                           dividende_reel;
                   1044:    real8                           diviseur_reel;
                   1045: 
                   1046:    logical1                        drapeau;
                   1047:    logical1                        resultat_entier;
                   1048: 
                   1049:    struct_complexe16               accumulateur;
                   1050: 
                   1051:    struct_liste_chainee            *l_element_courant;
                   1052:    struct_liste_chainee            *l_element_precedent;
                   1053: 
                   1054:    struct_objet                    *s_copie_argument_1;
                   1055:    struct_objet                    *s_copie_argument_2;
                   1056:    struct_objet                    *s_objet_argument_1;
                   1057:    struct_objet                    *s_objet_argument_2;
                   1058:    struct_objet                    *s_objet_resultat;
                   1059: 
                   1060:    unsigned long                   i;
                   1061:    unsigned long                   j;
                   1062:    unsigned long                   k;
                   1063:    unsigned long                   nombre_elements;
                   1064: 
                   1065:    (*s_etat_processus).erreur_execution = d_ex;
                   1066: 
                   1067:    if ((*s_etat_processus).affichage_arguments == 'Y')
                   1068:    {
                   1069:        printf("\n  / ");
                   1070: 
                   1071:        if ((*s_etat_processus).langue == 'F')
                   1072:        {
                   1073:            printf("(division)\n\n");
                   1074:        }
                   1075:        else
                   1076:        {
                   1077:            printf("(division)\n\n");
                   1078:        }
                   1079: 
                   1080:        printf("    2: %s, %s, %s\n", d_INT, d_REL, d_CPL);
                   1081:        printf("    1: %s, %s, %s\n", d_INT, d_REL, d_CPL);
                   1082:        printf("->  1: %s, %s, %s\n\n", d_INT, d_REL, d_CPL);
                   1083: 
                   1084:        printf("    2: %s, %s\n", d_NOM, d_ALG);
                   1085:        printf("    1: %s, %s, %s, %s, %s\n",
                   1086:                d_INT, d_REL, d_CPL, d_NOM, d_ALG);
                   1087:        printf("->  1: %s\n\n", d_ALG);
                   1088: 
                   1089:        printf("    2: %s, %s, %s, %s, %s\n",
                   1090:                d_INT, d_REL, d_CPL, d_NOM, d_ALG);
                   1091:        printf("    1: %s, %s\n", d_NOM, d_ALG);
                   1092:        printf("->  1: %s\n\n", d_ALG);
                   1093: 
                   1094:        printf("    2: %s\n", d_RPN);
                   1095:        printf("    1: %s, %s, %s, %s, %s\n",
                   1096:                d_INT, d_REL, d_CPL, d_NOM, d_RPN);
                   1097:        printf("->  1: %s\n\n", d_RPN);
                   1098: 
                   1099:        printf("    2: %s, %s, %s, %s, %s\n",
                   1100:                d_INT, d_REL, d_CPL, d_NOM, d_RPN);
                   1101:        printf("    1: %s\n", d_RPN);
                   1102:        printf("->  1: %s\n\n", d_RPN);
                   1103: 
                   1104:        printf("    2: %s, %s, %s\n", d_VIN, d_VRL, d_VCX);
                   1105:        printf("    1: %s, %s, %s\n", d_INT, d_REL, d_CPL);
                   1106:        printf("->  1: %s, %s, %s\n\n", d_VIN, d_VRL, d_VCX);
                   1107: 
                   1108:        printf("    2: %s, %s, %s\n", d_MIN, d_MRL, d_MCX);
                   1109:        printf("    1: %s, %s, %s\n", d_INT, d_REL, d_CPL);
                   1110:        printf("->  1: %s, %s, %s\n\n", d_MIN, d_MRL, d_MCX);
                   1111: 
                   1112:        printf("    2: %s, %s, %s\n", d_VIN, d_VRL, d_VCX);
                   1113:        printf("    1: %s, %s, %s\n", d_MIN, d_MRL, d_MCX);
                   1114:        printf("->  1: %s, %s\n\n", d_VRL, d_VCX);
                   1115: 
                   1116:        printf("    2: %s, %s, %s\n", d_MIN, d_MRL, d_MCX);
                   1117:        printf("    1: %s, %s, %s\n", d_MIN, d_MRL, d_MCX);
                   1118:        printf("->  1: %s, %s\n\n", d_MRL, d_MCX);
                   1119: 
                   1120:        printf("    2: %s, %s\n", d_BIN, d_INT);
                   1121:        printf("    1: %s, %s\n", d_BIN, d_INT);
                   1122:        printf("->  1: %s\n", d_BIN);
                   1123: 
                   1124:        return;
                   1125:    }
                   1126:    else if ((*s_etat_processus).test_instruction == 'Y')
                   1127:    {
                   1128:        (*s_etat_processus).nombre_arguments = 0;
                   1129:        return;
                   1130:    }
                   1131: 
                   1132:    if (test_cfsf(s_etat_processus, 31) == d_vrai)
                   1133:    {
                   1134:        if (empilement_pile_last(s_etat_processus, 2) == d_erreur)
                   1135:        {
                   1136:            return;
                   1137:        }
                   1138:    }
                   1139: 
                   1140:    if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
                   1141:            &s_objet_argument_1) == d_erreur)
                   1142:    {
                   1143:        (*s_etat_processus).erreur_execution = d_ex_manque_argument;
                   1144:        return;
                   1145:    }
                   1146: 
                   1147:    if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
                   1148:            &s_objet_argument_2) == d_erreur)
                   1149:    {
                   1150:        liberation(s_etat_processus, s_objet_argument_1);
                   1151: 
                   1152:        (*s_etat_processus).erreur_execution = d_ex_manque_argument;
                   1153:        return;
                   1154:    }
                   1155: 
                   1156: /*
                   1157: --------------------------------------------------------------------------------
                   1158:   Division donnant un résultat réel (ou entier si cela reste correct)
                   1159: --------------------------------------------------------------------------------
                   1160: */
                   1161: 
                   1162:    if ((((*s_objet_argument_1).type == INT) ||
                   1163:            ((*s_objet_argument_1).type == REL)) &&
                   1164:            (((*s_objet_argument_2).type == INT) ||
                   1165:            ((*s_objet_argument_2).type == REL)))
                   1166:    {
                   1167:        if (((*s_objet_argument_2).type == INT) &&
                   1168:                ((*s_objet_argument_1).type == INT))
                   1169:        {
                   1170:            if ((*((integer8 *) (*s_objet_argument_1).objet)) == 0)
                   1171:            {
                   1172:                reste = -1;
                   1173:            }
                   1174:            else
                   1175:            {
                   1176:                reste = (*((integer8 *) (*s_objet_argument_2).objet)) %
                   1177:                        (*((integer8 *) (*s_objet_argument_1).objet));
                   1178:            }
                   1179:        }
                   1180:        else
                   1181:        {
                   1182:            reste = -1;
                   1183:        }
                   1184: 
                   1185:        if (reste == 0)
                   1186:        {
                   1187:            /*
                   1188:             * Résultat entier
                   1189:             */
                   1190: 
                   1191:            if ((s_objet_resultat = allocation(s_etat_processus, INT))
                   1192:                    == NULL)
                   1193:            {
                   1194:                (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   1195:                return;
                   1196:            }
                   1197: 
                   1198:            (*((integer8 *) (*s_objet_resultat).objet)) = (*((integer8 *)
                   1199:                    (*s_objet_argument_2).objet)) / (*((integer8 *)
                   1200:                    (*s_objet_argument_1).objet));
                   1201:        }
                   1202:        else
                   1203:        {
                   1204:            /*
                   1205:             * Résultat réel
                   1206:             */
                   1207: 
                   1208:            if ((s_objet_resultat = allocation(s_etat_processus, REL))
                   1209:                    == NULL)
                   1210:            {
                   1211:                (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   1212:                return;
                   1213:            }
                   1214: 
                   1215:            if ((*s_objet_argument_1).type == INT)
                   1216:            {
                   1217:                diviseur_reel = (real8) (*((integer8 *)
                   1218:                        (*s_objet_argument_1).objet));
                   1219:            }
                   1220:            else
                   1221:            {
                   1222:                diviseur_reel = (*((real8 *) (*s_objet_argument_1).objet));
                   1223:            }
                   1224: 
                   1225:            if ((*s_objet_argument_2).type == INT)
                   1226:            {
                   1227:                dividende_reel = (real8) (*((integer8 *)
                   1228:                        (*s_objet_argument_2).objet));
                   1229:            }
                   1230:            else
                   1231:            {
                   1232:                dividende_reel = (*((real8 *) (*s_objet_argument_2).objet));
                   1233:            }
                   1234: 
                   1235:            if ((diviseur_reel == 0) && (test_cfsf(s_etat_processus, 59) ==
                   1236:                    d_vrai))
                   1237:            {
                   1238:                liberation(s_etat_processus, s_objet_argument_1);
                   1239:                liberation(s_etat_processus, s_objet_argument_2);
                   1240:                liberation(s_etat_processus, s_objet_resultat);
                   1241: 
                   1242:                (*s_etat_processus).exception = d_ep_division_par_zero;
                   1243:                return;
                   1244:            }
                   1245: 
                   1246:            (*((real8 *) (*s_objet_resultat).objet)) = dividende_reel /
                   1247:                    diviseur_reel;
                   1248:        }
                   1249:    }
                   1250: 
                   1251: /*
                   1252: --------------------------------------------------------------------------------
                   1253:   Division donnant un résultat complexe
                   1254: --------------------------------------------------------------------------------
                   1255: */
                   1256: 
                   1257:    else if ((((*s_objet_argument_1).type == CPL) &&
                   1258:            (((*s_objet_argument_2).type == INT) ||
                   1259:            ((*s_objet_argument_2).type == REL) ||
                   1260:            ((*s_objet_argument_2).type == CPL))) ||
                   1261:            (((*s_objet_argument_2).type == CPL) &&
                   1262:            (((*s_objet_argument_1).type == INT) ||
                   1263:            ((*s_objet_argument_1).type == REL) ||
                   1264:            ((*s_objet_argument_1).type == CPL))))
                   1265:    {
                   1266:        if ((s_objet_resultat = allocation(s_etat_processus, CPL)) == NULL)
                   1267:        {
                   1268:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   1269:            return;
                   1270:        }
                   1271: 
                   1272:        if ((*s_objet_argument_1).type == CPL)
                   1273:        {
                   1274:            if (((*((struct_complexe16 *) (*s_objet_argument_1).objet))
                   1275:                    .partie_reelle == 0) && ((*((struct_complexe16 *)
                   1276:                    (*s_objet_argument_1).objet)).partie_imaginaire == 0))
                   1277:            {
                   1278:                liberation(s_etat_processus, s_objet_argument_1);
                   1279:                liberation(s_etat_processus, s_objet_argument_2);
                   1280:                liberation(s_etat_processus, s_objet_resultat);
                   1281: 
                   1282:                (*s_etat_processus).exception = d_ep_division_par_zero;
                   1283:                return;
                   1284:            }
                   1285: 
                   1286:            if ((*s_objet_argument_2).type == INT)
                   1287:            {
                   1288:                f77divisionic_(&((*((integer8 *) (*s_objet_argument_2)
                   1289:                        .objet))), &((*((struct_complexe16 *)
                   1290:                        (*s_objet_argument_1).objet))),
                   1291:                        &((*((struct_complexe16 *)
                   1292:                        (*s_objet_resultat).objet))));
                   1293:            }
                   1294:            else if ((*s_objet_argument_2).type == REL)
                   1295:            {
                   1296:                f77divisionrc_(&((*((real8 *) (*s_objet_argument_2)
                   1297:                        .objet))), &((*((struct_complexe16 *)
                   1298:                        (*s_objet_argument_1).objet))),
                   1299:                        &((*((struct_complexe16 *)
                   1300:                        (*s_objet_resultat).objet))));
                   1301:            }
                   1302:            else
                   1303:            {
                   1304:                f77divisioncc_(&((*((struct_complexe16 *) (*s_objet_argument_2)
                   1305:                        .objet))), &((*((struct_complexe16 *)
                   1306:                        (*s_objet_argument_1).objet))),
                   1307:                        &((*((struct_complexe16 *)
                   1308:                        (*s_objet_resultat).objet))));
                   1309:            }
                   1310:        }
                   1311:        else
                   1312:        {
                   1313:            if ((*s_objet_argument_1).type == INT)
                   1314:            {
                   1315:                if ((*((integer8 *) (*s_objet_argument_1).objet)) == 0)
                   1316:                {
                   1317:                    liberation(s_etat_processus, s_objet_argument_1);
                   1318:                    liberation(s_etat_processus, s_objet_argument_2);
                   1319:                    liberation(s_etat_processus, s_objet_resultat);
                   1320: 
                   1321:                    (*s_etat_processus).exception = d_ep_division_par_zero;
                   1322:                    return;
                   1323:                }
                   1324: 
                   1325:                f77divisionci_(&((*((struct_complexe16 *) (*s_objet_argument_2)
                   1326:                        .objet))), &((*((integer8 *)
                   1327:                        (*s_objet_argument_1).objet))),
                   1328:                        &((*((struct_complexe16 *)
                   1329:                        (*s_objet_resultat).objet))));
                   1330:            }
                   1331:            else
                   1332:            {
                   1333:                if ((*((real8 *) (*s_objet_argument_1).objet)) == 0)
                   1334:                {
                   1335:                    liberation(s_etat_processus, s_objet_argument_1);
                   1336:                    liberation(s_etat_processus, s_objet_argument_2);
                   1337:                    liberation(s_etat_processus, s_objet_resultat);
                   1338: 
                   1339:                    (*s_etat_processus).exception = d_ep_division_par_zero;
                   1340:                    return;
                   1341:                }
                   1342: 
                   1343:                f77divisioncr_(&((*((struct_complexe16 *) (*s_objet_argument_2)
                   1344:                        .objet))), &((*((real8 *)
                   1345:                        (*s_objet_argument_1).objet))),
                   1346:                        &((*((struct_complexe16 *)
                   1347:                        (*s_objet_resultat).objet))));
                   1348:            }
                   1349:        }
                   1350:    }
                   1351: 
                   1352: /*
                   1353: --------------------------------------------------------------------------------
                   1354:   Division mettant en oeuvre un nom ou une expression algébrique
                   1355: --------------------------------------------------------------------------------
                   1356: */
                   1357:    /*
                   1358:     * Nom ou valeur numérique / Nom ou valeur numérique
                   1359:     */
                   1360: 
                   1361:    else if ((((*s_objet_argument_1).type == NOM) &&
                   1362:            (((*s_objet_argument_2).type == NOM) ||
                   1363:            ((*s_objet_argument_2).type == INT) ||
                   1364:            ((*s_objet_argument_2).type == REL) ||
                   1365:            ((*s_objet_argument_2).type == CPL))) ||
                   1366:            (((*s_objet_argument_2).type == NOM) &&
                   1367:            (((*s_objet_argument_1).type == INT) ||
                   1368:            ((*s_objet_argument_1).type == REL) ||
                   1369:            ((*s_objet_argument_1).type == CPL))))
                   1370:    {
                   1371:        drapeau = d_vrai;
                   1372: 
                   1373:        if ((*s_objet_argument_2).type == NOM)
                   1374:        {
                   1375:            if ((*s_objet_argument_1).type == INT)
                   1376:            {
                   1377:                if ((*((integer8 *) (*s_objet_argument_1).objet)) == 1)
                   1378:                { // Division par 1
                   1379:                    drapeau = d_faux;
                   1380: 
                   1381:                    s_objet_resultat = s_objet_argument_2;
                   1382:                    s_objet_argument_2 = NULL;
                   1383:                }
                   1384:            }
                   1385:            else if ((*s_objet_argument_1).type == REL)
                   1386:            {
                   1387:                if ((*((real8 *) (*s_objet_argument_1).objet)) == 1)
                   1388:                { // Division par 1.0
                   1389:                    drapeau = d_faux;
                   1390: 
                   1391:                    s_objet_resultat = s_objet_argument_2;
                   1392:                    s_objet_argument_2 = NULL;
                   1393:                }
                   1394:            }
                   1395:            else if ((*s_objet_argument_1).type == CPL)
                   1396:            {
                   1397:                if (((*((complex16 *) (*s_objet_argument_1).objet))
                   1398:                        .partie_reelle == 1) && ((*((complex16 *)
                   1399:                        (*s_objet_argument_1).objet)).partie_imaginaire == 0))
                   1400:                { // Division par (1.0,0.0)
                   1401:                    drapeau = d_faux;
                   1402: 
                   1403:                    s_objet_resultat = s_objet_argument_2;
                   1404:                    s_objet_argument_2 = NULL;
                   1405:                }
                   1406:            }
                   1407:        }
                   1408:        else if ((*s_objet_argument_1).type == NOM)
                   1409:        {
                   1410:            if ((*s_objet_argument_2).type == INT)
                   1411:            {
                   1412:                if ((*((integer8 *) (*s_objet_argument_2).objet)) == 0)
                   1413:                { // Dividende nul
                   1414:                    drapeau = d_faux;
                   1415: 
                   1416:                    if ((s_objet_resultat = allocation(s_etat_processus, INT))
                   1417:                            == NULL)
                   1418:                    {
                   1419:                        (*s_etat_processus).erreur_systeme =
                   1420:                                d_es_allocation_memoire;
                   1421:                        return;
                   1422:                    }
                   1423: 
                   1424:                    (*((integer8 *) (*s_objet_resultat).objet)) = 0;
                   1425:                }
                   1426:            }
                   1427:            else if ((*s_objet_argument_2).type == REL)
                   1428:            {
                   1429:                if ((*((real8 *) (*s_objet_argument_2).objet)) == 0)
                   1430:                { // Dividende nul
                   1431:                    drapeau = d_faux;
                   1432: 
                   1433:                    if ((s_objet_resultat = allocation(s_etat_processus, INT))
                   1434:                            == NULL)
                   1435:                    {
                   1436:                        (*s_etat_processus).erreur_systeme =
                   1437:                                d_es_allocation_memoire;
                   1438:                        return;
                   1439:                    }
                   1440: 
                   1441:                    (*((integer8 *) (*s_objet_resultat).objet)) = 0;
                   1442:                }
                   1443:            }
                   1444:            else if ((*s_objet_argument_2).type == CPL)
                   1445:            {
                   1446:                if (((*((complex16 *) (*s_objet_argument_2).objet))
                   1447:                        .partie_reelle == 0) && ((*((complex16 *)
                   1448:                        (*s_objet_argument_2).objet)).partie_imaginaire == 0))
                   1449:                { // Dividende nul
                   1450:                    drapeau = d_faux;
                   1451: 
                   1452:                    if ((s_objet_resultat = allocation(s_etat_processus, INT))
                   1453:                            == NULL)
                   1454:                    {
                   1455:                        (*s_etat_processus).erreur_systeme =
                   1456:                                d_es_allocation_memoire;
                   1457:                        return;
                   1458:                    }
                   1459: 
                   1460:                    (*((integer8 *) (*s_objet_resultat).objet)) = 0;
                   1461:                }
                   1462:            }
                   1463:        }
                   1464: 
                   1465:        if (drapeau == d_vrai)
                   1466:        {
                   1467:            if ((s_objet_resultat = allocation(s_etat_processus, ALG))
                   1468:                    == NULL)
                   1469:            {
                   1470:                (*s_etat_processus).erreur_systeme =
                   1471:                        d_es_allocation_memoire;
                   1472:                return;
                   1473:            }
                   1474: 
                   1475:            if (((*s_objet_resultat).objet =
                   1476:                    allocation_maillon(s_etat_processus)) == NULL)
                   1477:            {
                   1478:                (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   1479:                return;
                   1480:            }
                   1481: 
                   1482:            l_element_courant = (*s_objet_resultat).objet;
                   1483: 
                   1484:            if (((*l_element_courant).donnee =
                   1485:                    allocation(s_etat_processus, FCT)) == NULL)
                   1486:            {
                   1487:                (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   1488:                return;
                   1489:            }
                   1490: 
                   1491:            (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
                   1492:                    .nombre_arguments = 0;
                   1493:            (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
                   1494:                    .fonction = instruction_vers_niveau_superieur;
                   1495: 
                   1496:            if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
                   1497:                    .nom_fonction = malloc(3 * sizeof(unsigned char))) == NULL)
                   1498:            {
                   1499:                (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   1500:                return;
                   1501:            }
                   1502: 
                   1503:            strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
                   1504:                    .nom_fonction, "<<");
                   1505: 
                   1506:            if (((*l_element_courant).suivant =
                   1507:                    allocation_maillon(s_etat_processus)) == NULL)
                   1508:            {
                   1509:                (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   1510:                return;
                   1511:            }
                   1512: 
                   1513:            l_element_courant = (*l_element_courant).suivant;
                   1514:            (*l_element_courant).donnee = s_objet_argument_2;
                   1515: 
                   1516:            if (((*l_element_courant).suivant =
                   1517:                    allocation_maillon(s_etat_processus)) == NULL)
                   1518:            {
                   1519:                (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   1520:                return;
                   1521:            }
                   1522: 
                   1523:            l_element_courant = (*l_element_courant).suivant;
                   1524:            (*l_element_courant).donnee = s_objet_argument_1;
                   1525: 
                   1526:            if (((*l_element_courant).suivant =
                   1527:                    allocation_maillon(s_etat_processus)) == NULL)
                   1528:            {
                   1529:                (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   1530:                return;
                   1531:            }
                   1532: 
                   1533:            l_element_courant = (*l_element_courant).suivant;
                   1534: 
                   1535:            if (((*l_element_courant).donnee =
                   1536:                    allocation(s_etat_processus, FCT)) == NULL)
                   1537:            {
                   1538:                (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   1539:                return;
                   1540:            }
                   1541: 
                   1542:            (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
                   1543:                    .nombre_arguments = 0;
                   1544:            (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
                   1545:                    .fonction = instruction_division;
                   1546: 
                   1547:            if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
                   1548:                    .nom_fonction = malloc(2 * sizeof(unsigned char))) == NULL)
                   1549:            {
                   1550:                (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   1551:                return;
                   1552:            }
                   1553: 
                   1554:            strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
                   1555:                    .nom_fonction, "/");
                   1556: 
                   1557:            if (((*l_element_courant).suivant =
                   1558:                    allocation_maillon(s_etat_processus)) == NULL)
                   1559:            {
                   1560:                (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   1561:                return;
                   1562:            }
                   1563: 
                   1564:            l_element_courant = (*l_element_courant).suivant;
                   1565: 
                   1566:            if (((*l_element_courant).donnee =
                   1567:                    allocation(s_etat_processus, FCT)) == NULL)
                   1568:            {
                   1569:                (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   1570:                return;
                   1571:            }
                   1572: 
                   1573:            (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
                   1574:                    .nombre_arguments = 0;
                   1575:            (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
                   1576:                    .fonction = instruction_vers_niveau_inferieur;
                   1577: 
                   1578:            if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
                   1579:                    .nom_fonction = malloc(3 * sizeof(unsigned char))) == NULL)
                   1580:            {
                   1581:                (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   1582:                return;
                   1583:            }
                   1584: 
                   1585:            strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
                   1586:                    .nom_fonction, ">>");
                   1587: 
                   1588:            (*l_element_courant).suivant = NULL;
                   1589: 
                   1590:            s_objet_argument_1 = NULL;
                   1591:            s_objet_argument_2 = NULL;
                   1592:        }
                   1593:    }
                   1594: 
                   1595:    /*
                   1596:     * Nom ou valeur numérique / Expression
                   1597:     */
                   1598: 
                   1599:    else if ((((*s_objet_argument_1).type == ALG) ||
                   1600:            ((*s_objet_argument_1).type == RPN)) &&
                   1601:            (((*s_objet_argument_2).type == NOM) ||
                   1602:            ((*s_objet_argument_2).type == INT) ||
                   1603:            ((*s_objet_argument_2).type == REL) ||
                   1604:            ((*s_objet_argument_2).type == CPL)))
                   1605:    {
                   1606:        drapeau = d_vrai;
                   1607: 
                   1608:        nombre_elements = 0;
                   1609:        l_element_courant = (struct_liste_chainee *)
                   1610:                (*s_objet_argument_1).objet;
                   1611: 
                   1612:        while(l_element_courant != NULL)
                   1613:        {
                   1614:            nombre_elements++;
                   1615:            l_element_courant = (*l_element_courant).suivant;
                   1616:        }
                   1617: 
                   1618:        if (nombre_elements == 2)
                   1619:        {
                   1620:            liberation(s_etat_processus, s_objet_argument_1);
                   1621:            liberation(s_etat_processus, s_objet_argument_1);
                   1622: 
                   1623:            (*s_etat_processus).erreur_execution = d_ex_argument_invalide;
                   1624:            return;
                   1625:        }
                   1626: 
                   1627:        if ((*s_objet_argument_2).type == INT)
                   1628:        {
                   1629:            if ((*((integer8 *) (*s_objet_argument_2).objet)) == 0)
                   1630:            {
                   1631:                drapeau = d_faux;
                   1632: 
                   1633:                if ((s_objet_resultat = allocation(s_etat_processus, INT))
                   1634:                        == NULL)
                   1635:                {
                   1636:                    (*s_etat_processus).erreur_systeme =
                   1637:                            d_es_allocation_memoire;
                   1638:                    return;
                   1639:                }
                   1640: 
                   1641:                (*((integer8 *) (*s_objet_resultat).objet)) = 0;
                   1642:            }
                   1643:        }
                   1644:        else if ((*s_objet_argument_2).type == REL)
                   1645:        {
                   1646:            if ((*((real8 *) (*s_objet_argument_2).objet)) == 0)
                   1647:            {
                   1648:                drapeau = d_faux;
                   1649: 
                   1650:                if ((s_objet_resultat = allocation(s_etat_processus, INT))
                   1651:                        == NULL)
                   1652:                {
                   1653:                    (*s_etat_processus).erreur_systeme =
                   1654:                            d_es_allocation_memoire;
                   1655:                    return;
                   1656:                }
                   1657: 
                   1658:                (*((integer8 *) (*s_objet_resultat).objet)) = 0;
                   1659:            }
                   1660:        }
                   1661:        else if ((*s_objet_argument_2).type == CPL)
                   1662:        {
                   1663:            if (((*((complex16 *) (*s_objet_argument_2).objet))
                   1664:                    .partie_reelle == 0) && ((*((complex16 *)
                   1665:                    (*s_objet_argument_2).objet)).partie_imaginaire == 0))
                   1666:            {
                   1667:                drapeau = d_faux;
                   1668: 
                   1669:                if ((s_objet_resultat = allocation(s_etat_processus, INT))
                   1670:                        == NULL)
                   1671:                {
                   1672:                    (*s_etat_processus).erreur_systeme =
                   1673:                            d_es_allocation_memoire;
                   1674:                    return;
                   1675:                }
                   1676: 
                   1677:                (*((integer8 *) (*s_objet_resultat).objet)) = 0;
                   1678:            }
                   1679:        }
                   1680: 
                   1681:        if (drapeau == d_vrai)
                   1682:        {
                   1683:            if ((s_objet_resultat = copie_objet(s_etat_processus,
                   1684:                    s_objet_argument_1, 'N')) == NULL)
                   1685:            {
                   1686:                (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   1687:                return;
                   1688:            }
                   1689: 
                   1690:            l_element_courant = (struct_liste_chainee *)
                   1691:                    (*s_objet_resultat).objet;
                   1692:            l_element_precedent = l_element_courant;
                   1693:            l_element_courant = (*l_element_courant).suivant;
                   1694: 
                   1695:            if (((*l_element_precedent).suivant =
                   1696:                    allocation_maillon(s_etat_processus)) == NULL)
                   1697:            {
                   1698:                (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   1699:                return;
                   1700:            }
                   1701: 
                   1702:            (*(*l_element_precedent).suivant).donnee = s_objet_argument_2;
                   1703:            (*(*l_element_precedent).suivant).suivant = l_element_courant;
                   1704: 
                   1705:            while((*l_element_courant).suivant != NULL)
                   1706:            {
                   1707:                l_element_precedent = l_element_courant;
                   1708:                l_element_courant = (*l_element_courant).suivant;
                   1709:            }
                   1710: 
                   1711:            if (((*l_element_precedent).suivant =
                   1712:                    allocation_maillon(s_etat_processus)) == NULL)
                   1713:            {
                   1714:                (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   1715:                return;
                   1716:            }
                   1717: 
                   1718:            if (((*(*l_element_precedent).suivant).donnee =
                   1719:                    allocation(s_etat_processus, FCT)) == NULL)
                   1720:            {
                   1721:                (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   1722:                return;
                   1723:            }
                   1724: 
                   1725:            (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
                   1726:                    .donnee).objet)).nombre_arguments = 0;
                   1727:            (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
                   1728:                    .donnee).objet)).fonction = instruction_division;
                   1729: 
                   1730:            if (((*((struct_fonction *) (*(*(*l_element_precedent)
                   1731:                    .suivant).donnee).objet)).nom_fonction =
                   1732:                    malloc(2 * sizeof(unsigned char))) == NULL)
                   1733:            {
                   1734:                (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   1735:                return;
                   1736:            }
                   1737: 
                   1738:            strcpy((*((struct_fonction *) (*(*(*l_element_precedent)
                   1739:                    .suivant).donnee).objet)).nom_fonction, "/");
                   1740: 
                   1741:            (*(*l_element_precedent).suivant).suivant = l_element_courant;
                   1742: 
                   1743:            s_objet_argument_2 = NULL;
                   1744:        }
                   1745:    }
                   1746: 
                   1747:    /*
                   1748:     * Expression / Nom ou valeur numérique
                   1749:     */
                   1750: 
                   1751:    else if ((((*s_objet_argument_1).type == NOM) ||
                   1752:            ((*s_objet_argument_1).type == INT) ||
                   1753:            ((*s_objet_argument_1).type == REL) ||
                   1754:            ((*s_objet_argument_1).type == CPL)) &&
                   1755:            (((*s_objet_argument_2).type == ALG) ||
                   1756:            ((*s_objet_argument_2).type == RPN)))
                   1757:    {
                   1758:        drapeau = d_vrai;
                   1759: 
                   1760:        nombre_elements = 0;
                   1761:        l_element_courant = (struct_liste_chainee *)
                   1762:                (*s_objet_argument_2).objet;
                   1763: 
                   1764:        while(l_element_courant != NULL)
                   1765:        {
                   1766:            nombre_elements++;
                   1767:            l_element_courant = (*l_element_courant).suivant;
                   1768:        }
                   1769: 
                   1770:        if (nombre_elements == 2)
                   1771:        {
                   1772:            liberation(s_etat_processus, s_objet_argument_1);
                   1773:            liberation(s_etat_processus, s_objet_argument_2);
                   1774: 
                   1775:            (*s_etat_processus).erreur_execution = d_ex_argument_invalide;
                   1776:            return;
                   1777:        }
                   1778: 
                   1779:        if ((*s_objet_argument_1).type == INT)
                   1780:        {
                   1781:            if ((*((integer8 *) (*s_objet_argument_1).objet)) == 1)
                   1782:            {
                   1783:                drapeau = d_faux;
                   1784: 
                   1785:                s_objet_resultat = s_objet_argument_2;
                   1786:                s_objet_argument_2 = NULL;
                   1787:            }
                   1788:        }
                   1789:        else if ((*s_objet_argument_1).type == REL)
                   1790:        {
                   1791:            if ((*((real8 *) (*s_objet_argument_1).objet)) == 1)
                   1792:            {
                   1793:                drapeau = d_faux;
                   1794: 
                   1795:                s_objet_resultat = s_objet_argument_2;
                   1796:                s_objet_argument_2 = NULL;
                   1797:            }
                   1798:        }
                   1799:        else if ((*s_objet_argument_1).type == CPL)
                   1800:        {
                   1801:            if (((*((complex16 *) (*s_objet_argument_1).objet))
                   1802:                    .partie_reelle == 1) && ((*((complex16 *)
                   1803:                    (*s_objet_argument_1).objet)).partie_imaginaire == 0))
                   1804:            {
                   1805:                drapeau = d_faux;
                   1806: 
                   1807:                s_objet_resultat = s_objet_argument_2;
                   1808:                s_objet_argument_2 = NULL;
                   1809:            }
                   1810:        }
                   1811: 
                   1812:        if (drapeau == d_vrai)
                   1813:        {
                   1814:            if ((s_objet_resultat = copie_objet(s_etat_processus,
                   1815:                    s_objet_argument_2, 'N')) == NULL)
                   1816:            {
                   1817:                (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   1818:                return;
                   1819:            }
                   1820: 
                   1821:            l_element_courant = (struct_liste_chainee *)
                   1822:                    (*s_objet_resultat).objet;
                   1823:            l_element_precedent = l_element_courant;
                   1824: 
                   1825:            while((*l_element_courant).suivant != NULL)
                   1826:            {
                   1827:                l_element_precedent = l_element_courant;
                   1828:                l_element_courant = (*l_element_courant).suivant;
                   1829:            }
                   1830: 
                   1831:            if (((*l_element_precedent).suivant =
                   1832:                    allocation_maillon(s_etat_processus)) == NULL)
                   1833:            {
                   1834:                (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   1835:                return;
                   1836:            }
                   1837: 
                   1838:            (*(*l_element_precedent).suivant).donnee = s_objet_argument_1;
                   1839:            l_element_precedent = (*l_element_precedent).suivant;
                   1840: 
                   1841:            if (((*l_element_precedent).suivant =
                   1842:                    allocation_maillon(s_etat_processus)) == NULL)
                   1843:            {
                   1844:                (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   1845:                return;
                   1846:            }
                   1847: 
                   1848:            if (((*(*l_element_precedent).suivant).donnee =
                   1849:                    allocation(s_etat_processus, FCT)) == NULL)
                   1850:            {
                   1851:                (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   1852:                return;
                   1853:            }
                   1854: 
                   1855:            (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
                   1856:                    .donnee).objet)).nombre_arguments = 0;
                   1857:            (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
                   1858:                    .donnee).objet)).fonction = instruction_division;
                   1859: 
                   1860:            if (((*((struct_fonction *) (*(*(*l_element_precedent)
                   1861:                    .suivant).donnee).objet)).nom_fonction =
                   1862:                    malloc(2 * sizeof(unsigned char))) == NULL)
                   1863:            {
                   1864:                (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   1865:                return;
                   1866:            }
                   1867: 
                   1868:            strcpy((*((struct_fonction *) (*(*(*l_element_precedent)
                   1869:                    .suivant).donnee).objet)).nom_fonction, "/");
                   1870: 
                   1871:            (*(*l_element_precedent).suivant).suivant = l_element_courant;
                   1872: 
                   1873:            s_objet_argument_1 = NULL;
                   1874:        }
                   1875:    }
                   1876: 
                   1877:    /*
                   1878:     * Expression / Expression
                   1879:     */
                   1880: 
                   1881:    else if ((((*s_objet_argument_1).type == ALG) &&
                   1882:            ((*s_objet_argument_2).type == ALG)) ||
                   1883:            (((*s_objet_argument_1).type == RPN) &&
                   1884:            ((*s_objet_argument_2).type == RPN)))
                   1885:    {
                   1886:        nombre_elements = 0;
                   1887:        l_element_courant = (struct_liste_chainee *)
                   1888:                (*s_objet_argument_1).objet;
                   1889: 
                   1890:        while(l_element_courant != NULL)
                   1891:        {
                   1892:            nombre_elements++;
                   1893:            l_element_courant = (*l_element_courant).suivant;
                   1894:        }
                   1895: 
                   1896:        if (nombre_elements == 2)
                   1897:        {
                   1898:            liberation(s_etat_processus, s_objet_argument_1);
                   1899:            liberation(s_etat_processus, s_objet_argument_2);
                   1900: 
                   1901:            (*s_etat_processus).erreur_execution = d_ex_argument_invalide;
                   1902:            return;
                   1903:        }
                   1904: 
                   1905:        nombre_elements = 0;
                   1906:        l_element_courant = (struct_liste_chainee *)
                   1907:                (*s_objet_argument_2).objet;
                   1908: 
                   1909:        while(l_element_courant != NULL)
                   1910:        {
                   1911:            nombre_elements++;
                   1912:            l_element_courant = (*l_element_courant).suivant;
                   1913:        }
                   1914: 
                   1915:        if (nombre_elements == 2)
                   1916:        {
                   1917:            liberation(s_etat_processus, s_objet_argument_1);
                   1918:            liberation(s_etat_processus, s_objet_argument_2);
                   1919: 
                   1920:            (*s_etat_processus).erreur_execution = d_ex_argument_invalide;
                   1921:            return;
                   1922:        }
                   1923: 
                   1924:        if ((s_copie_argument_1 = copie_objet(s_etat_processus,
                   1925:                s_objet_argument_1, 'N')) == NULL)
                   1926:        {
                   1927:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   1928:            return;
                   1929:        }
                   1930: 
                   1931:        if ((s_copie_argument_2 = copie_objet(s_etat_processus,
                   1932:                s_objet_argument_2, 'N')) == NULL)
                   1933:        {
                   1934:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   1935:            return;
                   1936:        }
                   1937: 
                   1938:        l_element_courant = (struct_liste_chainee *)
                   1939:                (*s_copie_argument_1).objet;
                   1940:        (*s_copie_argument_1).objet = (*((struct_liste_chainee *)
                   1941:                (*s_copie_argument_1).objet)).suivant;
                   1942: 
                   1943:        liberation(s_etat_processus, (*l_element_courant).donnee);
                   1944:        free(l_element_courant);
                   1945: 
                   1946:        l_element_courant = (struct_liste_chainee *)
                   1947:                (*s_copie_argument_2).objet;
                   1948:        l_element_precedent = l_element_courant;
                   1949:        s_objet_resultat = s_copie_argument_2;
                   1950: 
                   1951:        while((*l_element_courant).suivant != NULL)
                   1952:        {
                   1953:            l_element_precedent = l_element_courant;
                   1954:            l_element_courant = (*l_element_courant).suivant;
                   1955:        }
                   1956: 
                   1957:        liberation(s_etat_processus, (*l_element_courant).donnee);
                   1958:        free(l_element_courant);
                   1959: 
                   1960:        (*l_element_precedent).suivant = (struct_liste_chainee *)
                   1961:                (*s_copie_argument_1).objet;
                   1962:        free(s_copie_argument_1);
                   1963: 
                   1964:        l_element_courant = (*l_element_precedent).suivant;
                   1965:        while((*l_element_courant).suivant != NULL)
                   1966:        {
                   1967:            l_element_precedent = l_element_courant;
                   1968:            l_element_courant = (*l_element_courant).suivant;
                   1969:        }
                   1970: 
                   1971:        if (((*l_element_precedent).suivant =
                   1972:                allocation_maillon(s_etat_processus)) == NULL)
                   1973:        {
                   1974:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   1975:            return;
                   1976:        }
                   1977: 
                   1978:        (*(*l_element_precedent).suivant).suivant = l_element_courant;
                   1979:        l_element_courant = (*l_element_precedent).suivant;
                   1980: 
                   1981:        if (((*l_element_courant).donnee = 
                   1982:                allocation(s_etat_processus, FCT)) == NULL)
                   1983:        {
                   1984:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   1985:            return;
                   1986:        }
                   1987: 
                   1988:        (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
                   1989:                .nombre_arguments = 0;
                   1990:        (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
                   1991:                .fonction = instruction_division;
                   1992: 
                   1993:        if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
                   1994:                .nom_fonction = malloc(2 * sizeof(unsigned char))) == NULL)
                   1995:        {
                   1996:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   1997:            return;
                   1998:        }
                   1999: 
                   2000:        strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
                   2001:                .nom_fonction, "/");
                   2002:    }
                   2003: 
                   2004: /*
                   2005: --------------------------------------------------------------------------------
                   2006:   Division d'un vecteur par un scalaire
                   2007: --------------------------------------------------------------------------------
                   2008: */
                   2009:    /*
                   2010:     * Vecteur d'entiers ou de réels / Entier ou réel
                   2011:     */
                   2012: 
                   2013:    else if ((((*s_objet_argument_1).type == INT) ||
                   2014:            ((*s_objet_argument_1).type == REL)) &&
                   2015:            (((*s_objet_argument_2).type == VIN) ||
                   2016:            ((*s_objet_argument_2).type == VRL)))
                   2017:    {
                   2018:        resultat_entier = d_faux;
                   2019: 
                   2020:        if (((*s_objet_argument_2).type == VIN) &&
                   2021:                ((*s_objet_argument_1).type == INT))
                   2022:        {
                   2023:            if ((*((integer8 *) (*s_objet_argument_1).objet)) == 0)
                   2024:            {
                   2025:                resultat_entier = d_faux;
                   2026:            }
                   2027:            else
                   2028:            {
                   2029:                resultat_entier = d_vrai;
                   2030: 
                   2031:                for(i = 0; i < (*(((struct_vecteur *) (*s_objet_argument_2)
                   2032:                        .objet))).taille; i++)
                   2033:                {
                   2034:                    if ((((integer8 *) (*((struct_vecteur *)
                   2035:                            (*s_objet_argument_2).objet)).tableau)[i] %
                   2036:                            (*((integer8 *) (*s_objet_argument_1).objet))) != 0)
                   2037:                    {
                   2038:                        resultat_entier = d_faux;
                   2039:                    }
                   2040:                }
                   2041:            }
                   2042:        }
                   2043: 
                   2044:        if (resultat_entier == d_vrai)
                   2045:        {
                   2046:            if ((s_objet_resultat = allocation(s_etat_processus, VIN))
                   2047:                    == NULL)
                   2048:            {
                   2049:                (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   2050:                return;
                   2051:            }
                   2052: 
                   2053:            (*((struct_vecteur *) (*s_objet_resultat).objet)).taille =
                   2054:                    (*((struct_vecteur *) (*s_objet_argument_2).objet)).taille;
                   2055: 
                   2056:            if (((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau =
                   2057:                     malloc((*(((struct_vecteur *) (*s_objet_resultat)
                   2058:                    .objet))).taille * sizeof(integer8))) == NULL)
                   2059:            {
                   2060:                (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   2061:                return;
                   2062:            }
                   2063: 
                   2064:            for(i = 0; i < (*(((struct_vecteur *) (*s_objet_resultat)
                   2065:                    .objet))).taille; i++)
                   2066:            {
                   2067:                ((integer8 *) (*((struct_vecteur *) (*s_objet_resultat).objet))
                   2068:                        .tableau)[i] = ((integer8 *)
                   2069:                        (*((struct_vecteur *) (*s_objet_argument_2).objet))
                   2070:                        .tableau)[i] / (*((integer8 *) (*s_objet_argument_1)
                   2071:                        .objet));
                   2072:            }
                   2073:        }
                   2074:        else
                   2075:        {
                   2076:            if ((s_objet_resultat = allocation(s_etat_processus, VRL))
                   2077:                    == NULL)
                   2078:            {
                   2079:                (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   2080:                return;
                   2081:            }
                   2082: 
                   2083:            (*((struct_vecteur *) (*s_objet_resultat).objet)).taille =
                   2084:                    (*((struct_vecteur *) (*s_objet_argument_2).objet)).taille;
                   2085: 
                   2086:            if (((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau =
                   2087:                    malloc((*(((struct_vecteur *) (*s_objet_resultat)
                   2088:                    .objet))).taille * sizeof(real8))) == NULL)
                   2089:            {
                   2090:                (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   2091:                return;
                   2092:            }
                   2093: 
                   2094:            if ((*s_objet_argument_1).type == INT)
                   2095:            {
                   2096:                diviseur_reel = (real8) (*((integer8 *)
                   2097:                        (*s_objet_argument_1).objet));
                   2098:            }
                   2099:            else
                   2100:            {
                   2101:                diviseur_reel = (*((real8 *) (*s_objet_argument_1).objet));
                   2102:            }
                   2103: 
                   2104:            if ((diviseur_reel == 0) && (test_cfsf(s_etat_processus, 59) ==
                   2105:                    d_vrai))
                   2106:            {
                   2107:                liberation(s_etat_processus, s_objet_argument_1);
                   2108:                liberation(s_etat_processus, s_objet_argument_2);
                   2109:                liberation(s_etat_processus, s_objet_resultat);
                   2110: 
                   2111:                (*s_etat_processus).exception = d_ep_division_par_zero;
                   2112:                return;
                   2113:            }
                   2114: 
                   2115:            for(i = 0; i < (*(((struct_vecteur *) (*s_objet_resultat)
                   2116:                    .objet))).taille; i++)
                   2117:            {
                   2118:                if ((*s_objet_argument_2).type == VIN)
                   2119:                {
                   2120:                    ((real8 *) (*((struct_vecteur *) (*s_objet_resultat).objet))
                   2121:                            .tableau)[i] = (real8) ((integer8 *)
                   2122:                            (*((struct_vecteur *) (*s_objet_argument_2).objet))
                   2123:                            .tableau)[i] / diviseur_reel;
                   2124:                }
                   2125:                else
                   2126:                {
                   2127:                    ((real8 *) (*((struct_vecteur *) (*s_objet_resultat).objet))
                   2128:                            .tableau)[i] = ((real8 *)
                   2129:                            (*((struct_vecteur *) (*s_objet_argument_2).objet))
                   2130:                            .tableau)[i] / diviseur_reel;
                   2131:                }
                   2132:            }
                   2133:        }
                   2134:    }
                   2135: 
                   2136:    /*
                   2137:     * Vecteur d'entiers ou de réels / Complexe
                   2138:     */
                   2139: 
                   2140:    else if (((*s_objet_argument_1).type == CPL) &&
                   2141:            (((*s_objet_argument_2).type == VIN) ||
                   2142:            ((*s_objet_argument_2).type == VRL)))
                   2143:    {
                   2144:        if ((s_objet_resultat = allocation(s_etat_processus, VCX)) == NULL)
                   2145:        {
                   2146:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   2147:            return;
                   2148:        }
                   2149: 
                   2150:        (*((struct_vecteur *) (*s_objet_resultat).objet)).taille =
                   2151:                (*((struct_vecteur *) (*s_objet_argument_2).objet)).taille;
                   2152: 
                   2153:        if (((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau =
                   2154:                malloc((*(((struct_vecteur *) (*s_objet_resultat)
                   2155:                .objet))).taille * sizeof(struct_complexe16))) == NULL)
                   2156:        {
                   2157:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   2158:            return;
                   2159:        }
                   2160: 
                   2161:        if (((*((struct_complexe16 *) (*s_objet_argument_1).objet))
                   2162:                .partie_reelle == 0) && (((*((struct_complexe16 *)
                   2163:                (*s_objet_argument_1).objet)).partie_imaginaire == 0)))
                   2164:        {
                   2165:            liberation(s_etat_processus, s_objet_argument_1);
                   2166:            liberation(s_etat_processus, s_objet_argument_2);
                   2167:            liberation(s_etat_processus, s_objet_resultat);
                   2168: 
                   2169:            (*s_etat_processus).exception = d_ep_division_par_zero;
                   2170:            return;
                   2171:        }
                   2172: 
                   2173:        for(i = 0; i < (*(((struct_vecteur *) (*s_objet_resultat)
                   2174:                .objet))).taille; i++)
                   2175:        {
                   2176:            if ((*s_objet_argument_2).type == VIN)
                   2177:            {
                   2178:                f77divisionic_(&(((integer8 *)
                   2179:                        (*((struct_vecteur *) (*s_objet_argument_2).objet))
                   2180:                        .tableau)[i]), &(*((struct_complexe16 *)
                   2181:                        (*s_objet_argument_1).objet)), &((struct_complexe16 *)
                   2182:                        (*((struct_vecteur *)
                   2183:                        (*s_objet_resultat).objet)).tableau)[i]);
                   2184:            }
                   2185:            else
                   2186:            {
                   2187:                f77divisionrc_(&(((real8 *)
                   2188:                        (*((struct_vecteur *) (*s_objet_argument_2).objet))
                   2189:                        .tableau)[i]), &(*((struct_complexe16 *)
                   2190:                        (*s_objet_argument_1).objet)), &((struct_complexe16 *)
                   2191:                        (*((struct_vecteur *)
                   2192:                        (*s_objet_resultat).objet)).tableau)[i]);
                   2193:            }
                   2194:        }
                   2195:    }
                   2196: 
                   2197:    /*
                   2198:     * Vecteur de complexes / Entier, réel
                   2199:     */
                   2200: 
                   2201:    else if ((((*s_objet_argument_1).type == INT) ||
                   2202:            ((*s_objet_argument_1).type == REL)) &&
                   2203:            ((*s_objet_argument_2).type == VCX))
                   2204:    {
                   2205:        if ((s_objet_resultat = allocation(s_etat_processus, VCX)) == NULL)
                   2206:        {
                   2207:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   2208:            return;
                   2209:        }
                   2210: 
                   2211:        (*((struct_vecteur *) (*s_objet_resultat).objet)).taille =
                   2212:                (*((struct_vecteur *) (*s_objet_argument_2).objet)).taille;
                   2213: 
                   2214:        if (((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau =
                   2215:                malloc((*(((struct_vecteur *) (*s_objet_resultat)
                   2216:                .objet))).taille * sizeof(struct_complexe16))) == NULL)
                   2217:        {
                   2218:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   2219:            return;
                   2220:        }
                   2221: 
                   2222:        if ((*s_objet_argument_1).type == INT)
                   2223:        {
                   2224:            diviseur_reel = (real8) (*((integer8 *)
                   2225:                    (*s_objet_argument_1).objet));
                   2226:        }
                   2227:        else
                   2228:        {
                   2229:            diviseur_reel = (*((real8 *) (*s_objet_argument_1).objet));
                   2230:        }
                   2231: 
                   2232:        if (diviseur_reel == 0)
                   2233:        {
                   2234:            liberation(s_etat_processus, s_objet_argument_1);
                   2235:            liberation(s_etat_processus, s_objet_argument_2);
                   2236:            liberation(s_etat_processus, s_objet_resultat);
                   2237: 
                   2238:            (*s_etat_processus).exception = d_ep_division_par_zero;
                   2239:            return;
                   2240:        }
                   2241: 
                   2242:        for(i = 0; i < (*(((struct_vecteur *) (*s_objet_resultat)
                   2243:                .objet))).taille; i++)
                   2244:        {
                   2245:            if ((*s_objet_argument_1).type == INT)
                   2246:            {
                   2247:                f77divisionci_(&(((struct_complexe16 *)
                   2248:                        (*((struct_vecteur *) (*s_objet_argument_2).objet))
                   2249:                        .tableau)[i]), &((*((integer8 *)
                   2250:                        (*s_objet_argument_1).objet))),
                   2251:                        &(((struct_complexe16 *) (*((struct_vecteur *)
                   2252:                        (*s_objet_resultat).objet)).tableau)[i]));
                   2253:            }
                   2254:            else
                   2255:            {
                   2256:                f77divisioncr_(&(((struct_complexe16 *)
                   2257:                        (*((struct_vecteur *) (*s_objet_argument_2).objet))
                   2258:                        .tableau)[i]), &((*((real8 *)
                   2259:                        (*s_objet_argument_1).objet))),
                   2260:                        &(((struct_complexe16 *) (*((struct_vecteur *)
                   2261:                        (*s_objet_resultat).objet)).tableau)[i]));
                   2262:            }
                   2263:        }
                   2264:    }
                   2265: 
                   2266:    /*
                   2267:     * Vecteur de complexes / Complexe
                   2268:     */
                   2269: 
                   2270:    else if (((*s_objet_argument_1).type == CPL) &&
                   2271:            ((*s_objet_argument_2).type == VCX))
                   2272:    {
                   2273:        if ((s_objet_resultat = allocation(s_etat_processus, VCX)) == NULL)
                   2274:        {
                   2275:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   2276:            return;
                   2277:        }
                   2278: 
                   2279:        (*((struct_vecteur *) (*s_objet_resultat).objet)).taille =
                   2280:                (*((struct_vecteur *) (*s_objet_argument_2).objet)).taille;
                   2281: 
                   2282:        if (((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau =
                   2283:                malloc((*(((struct_vecteur *) (*s_objet_resultat)
                   2284:                .objet))).taille * sizeof(struct_complexe16))) == NULL)
                   2285:        {
                   2286:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   2287:            return;
                   2288:        }
                   2289: 
                   2290:        if (((*((struct_complexe16 *) (*s_objet_argument_1).objet))
                   2291:                .partie_reelle == 0) && ((*((struct_complexe16 *)
                   2292:                (*s_objet_argument_1).objet)).partie_imaginaire == 0))
                   2293:        {
                   2294:            liberation(s_etat_processus, s_objet_argument_1);
                   2295:            liberation(s_etat_processus, s_objet_argument_2);
                   2296:            liberation(s_etat_processus, s_objet_resultat);
                   2297: 
                   2298:            (*s_etat_processus).exception = d_ep_division_par_zero;
                   2299:            return;
                   2300:        }
                   2301: 
                   2302:        for(i = 0; i < (*(((struct_vecteur *) (*s_objet_resultat)
                   2303:                .objet))).taille; i++)
                   2304:        {
                   2305:            f77divisioncc_(&(((struct_complexe16 *)
                   2306:                    (*((struct_vecteur *) (*s_objet_argument_2).objet))
                   2307:                    .tableau)[i]), &((*((struct_complexe16 *)
                   2308:                    (*s_objet_argument_1).objet))),
                   2309:                    &(((struct_complexe16 *) (*((struct_vecteur *)
                   2310:                    (*s_objet_resultat).objet)).tableau)[i]));
                   2311:        }
                   2312:    }
                   2313: 
                   2314: /*
                   2315: --------------------------------------------------------------------------------
                   2316:   Division d'une matrice par un scalaire
                   2317: --------------------------------------------------------------------------------
                   2318: */
                   2319:    /*
                   2320:     * Matrice d'entiers ou de réels / Entier ou réel
                   2321:     */
                   2322: 
                   2323:    else if ((((*s_objet_argument_1).type == INT) ||
                   2324:            ((*s_objet_argument_1).type == REL)) &&
                   2325:            (((*s_objet_argument_2).type == MIN) ||
                   2326:            ((*s_objet_argument_2).type == MRL)))
                   2327:    {
                   2328:        resultat_entier = d_faux;
                   2329: 
                   2330:        if (((*s_objet_argument_2).type == MIN) &&
                   2331:                ((*s_objet_argument_1).type == INT))
                   2332:        {
                   2333:            if ((*((integer8 *) (*s_objet_argument_1).objet)) == 0)
                   2334:            {
                   2335:                resultat_entier = d_faux;
                   2336:            }
                   2337:            else
                   2338:            {
                   2339:                resultat_entier = d_vrai;
                   2340: 
                   2341:                for(i = 0; i < (*(((struct_matrice *) (*s_objet_argument_2)
                   2342:                        .objet))).nombre_lignes; i++)
                   2343:                {
                   2344:                    for(j = 0; j < (*(((struct_matrice *) (*s_objet_argument_2)
                   2345:                            .objet))).nombre_colonnes; j++)
                   2346:                    {
                   2347:                        if ((((integer8 **) (*((struct_matrice *)
                   2348:                                (*s_objet_argument_2).objet)).tableau)[i][j] %
                   2349:                                (*((integer8 *) (*s_objet_argument_1).objet)))
                   2350:                                != 0)
                   2351:                        {
                   2352:                            resultat_entier = d_faux;
                   2353:                        }
                   2354:                    }
                   2355:                }
                   2356:            }
                   2357:        }
                   2358: 
                   2359:        if (resultat_entier == d_vrai)
                   2360:        {
                   2361:            if ((s_objet_resultat = allocation(s_etat_processus, MIN))
                   2362:                    == NULL)
                   2363:            {
                   2364:                (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   2365:                return;
                   2366:            }
                   2367: 
                   2368:            (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_lignes =
                   2369:                    (*((struct_matrice *) (*s_objet_argument_2).objet))
                   2370:                    .nombre_lignes;
                   2371:            (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_colonnes =
                   2372:                    (*((struct_matrice *) (*s_objet_argument_2).objet))
                   2373:                    .nombre_colonnes;
                   2374: 
                   2375:            if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau =
                   2376:                    malloc((*(((struct_matrice *) (*s_objet_resultat)
                   2377:                    .objet))).nombre_lignes * sizeof(integer8 *))) == NULL)
                   2378:            {
                   2379:                (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   2380:                return;
                   2381:            }
                   2382: 
                   2383:            for(i = 0; i < (*(((struct_matrice *) (*s_objet_resultat)
                   2384:                    .objet))).nombre_lignes; i++)
                   2385:            {
                   2386:                if ((((integer8 **) (*((struct_matrice *) (*s_objet_resultat)
                   2387:                        .objet)).tableau)[i] = malloc((*(((struct_matrice *)
                   2388:                        (*s_objet_resultat).objet))).nombre_colonnes *
                   2389:                        sizeof(integer8))) == NULL)
                   2390:                {
                   2391:                    (*s_etat_processus).erreur_systeme =
                   2392:                            d_es_allocation_memoire;
                   2393:                    return;
                   2394:                }
                   2395: 
                   2396:                for(j = 0; j < (*(((struct_matrice *) (*s_objet_resultat)
                   2397:                        .objet))).nombre_colonnes; j++)
                   2398:                {
                   2399:                    ((integer8 **) (*((struct_matrice *) (*s_objet_resultat)
                   2400:                            .objet)).tableau)[i][j] = ((integer8 **)
                   2401:                            (*((struct_matrice *) (*s_objet_argument_2)
                   2402:                            .objet)).tableau)[i][j] / (*((integer8 *)
                   2403:                            (*s_objet_argument_1).objet));
                   2404:                }
                   2405:            }
                   2406:        }
                   2407:        else
                   2408:        {
                   2409:            if ((s_objet_resultat = allocation(s_etat_processus, MRL))
                   2410:                    == NULL)
                   2411:            {
                   2412:                (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   2413:                return;
                   2414:            }
                   2415: 
                   2416:            (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_lignes =
                   2417:                    (*((struct_matrice *) (*s_objet_argument_2).objet))
                   2418:                    .nombre_lignes;
                   2419:            (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_colonnes =
                   2420:                    (*((struct_matrice *) (*s_objet_argument_2).objet))
                   2421:                    .nombre_colonnes;
                   2422: 
                   2423:            if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau =
                   2424:                    malloc((*(((struct_matrice *) (*s_objet_resultat)
                   2425:                    .objet))).nombre_lignes * sizeof(real8 *))) == NULL)
                   2426:            {
                   2427:                (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   2428:                return;
                   2429:            }
                   2430: 
                   2431:            if ((*s_objet_argument_1).type == INT)
                   2432:            {
                   2433:                diviseur_reel = (real8) (*((integer8 *)
                   2434:                        (*s_objet_argument_1).objet));
                   2435:            }
                   2436:            else
                   2437:            {
                   2438:                diviseur_reel = (*((real8 *) (*s_objet_argument_1).objet));
                   2439:            }
                   2440: 
                   2441:            if ((diviseur_reel == 0) && (test_cfsf(s_etat_processus, 59) ==
                   2442:                    d_vrai))
                   2443:            {
                   2444:                liberation(s_etat_processus, s_objet_argument_1);
                   2445:                liberation(s_etat_processus, s_objet_argument_2);
                   2446:                liberation(s_etat_processus, s_objet_resultat);
                   2447: 
                   2448:                (*s_etat_processus).exception = d_ep_division_par_zero;
                   2449:                return;
                   2450:            }
                   2451: 
                   2452:            for(i = 0; i < (*(((struct_matrice *) (*s_objet_resultat)
                   2453:                    .objet))).nombre_lignes; i++)
                   2454:            {
                   2455:                if ((((real8 **) (*((struct_matrice *) (*s_objet_resultat)
                   2456:                        .objet)).tableau)[i] = malloc((*(((struct_matrice *)
                   2457:                        (*s_objet_resultat).objet))).nombre_colonnes *
                   2458:                        sizeof(real8))) == NULL)
                   2459:                {
                   2460:                    (*s_etat_processus).erreur_systeme =
                   2461:                            d_es_allocation_memoire;
                   2462:                    return;
                   2463:                }
                   2464: 
                   2465:                for(j = 0; j < (*(((struct_matrice *) (*s_objet_resultat)
                   2466:                        .objet))).nombre_colonnes; j++)
                   2467:                {
                   2468:                    if ((*s_objet_argument_2).type == MIN)
                   2469:                    {
                   2470:                        ((real8 **) (*((struct_matrice *) (*s_objet_resultat)
                   2471:                                .objet)).tableau)[i][j] = (real8) ((integer8 **)
                   2472:                                (*((struct_matrice *) (*s_objet_argument_2)
                   2473:                                .objet)).tableau)[i][j] / diviseur_reel;
                   2474:                    }
                   2475:                    else
                   2476:                    {
                   2477:                        ((real8 **) (*((struct_matrice *) (*s_objet_resultat)
                   2478:                                .objet)).tableau)[i][j] = ((real8 **)
                   2479:                                (*((struct_matrice *) (*s_objet_argument_2)
                   2480:                                .objet)).tableau)[i][j] / diviseur_reel;
                   2481:                    }
                   2482:                }
                   2483:            }
                   2484:        }
                   2485:    }
                   2486: 
                   2487:    /*
                   2488:     * Matrice d'entiers ou de réels / Complexe
                   2489:     */
                   2490: 
                   2491:    else if (((*s_objet_argument_1).type == CPL) &&
                   2492:            (((*s_objet_argument_2).type == MIN) ||
                   2493:            ((*s_objet_argument_2).type == MRL)))
                   2494:    {
                   2495:        if ((s_objet_resultat = allocation(s_etat_processus, MCX)) == NULL)
                   2496:        {
                   2497:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   2498:            return;
                   2499:        }
                   2500: 
                   2501:        (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_lignes =
                   2502:                (*((struct_matrice *) (*s_objet_argument_2).objet))
                   2503:                .nombre_lignes;
                   2504:        (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_colonnes =
                   2505:                (*((struct_matrice *) (*s_objet_argument_2).objet))
                   2506:                .nombre_colonnes;
                   2507: 
                   2508:        if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau =
                   2509:                malloc((*(((struct_matrice *) (*s_objet_resultat)
                   2510:                .objet))).nombre_lignes * sizeof(struct_complexe16 *))) == NULL)
                   2511:        {
                   2512:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   2513:            return;
                   2514:        }
                   2515: 
                   2516:        if (((*((struct_complexe16 *) (*s_objet_argument_1).objet))
                   2517:                .partie_reelle == 0) && (((*((struct_complexe16 *)
                   2518:                (*s_objet_argument_1).objet)).partie_imaginaire == 0)))
                   2519:        {
                   2520:            liberation(s_etat_processus, s_objet_argument_1);
                   2521:            liberation(s_etat_processus, s_objet_argument_2);
                   2522:            liberation(s_etat_processus, s_objet_resultat);
                   2523: 
                   2524:            (*s_etat_processus).exception = d_ep_division_par_zero;
                   2525:            return;
                   2526:        }
                   2527: 
                   2528:        for(i = 0; i < (*(((struct_matrice *) (*s_objet_resultat)
                   2529:                .objet))).nombre_lignes; i++)
                   2530:        {
                   2531:            if ((((struct_complexe16 **) (*((struct_matrice *)
                   2532:                    (*s_objet_resultat).objet)).tableau)[i] =
                   2533:                    malloc((*(((struct_matrice *)
                   2534:                    (*s_objet_resultat).objet))).nombre_colonnes *
                   2535:                    sizeof(struct_complexe16))) == NULL)
                   2536:            {
                   2537:                (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   2538:                return;
                   2539:            }
                   2540: 
                   2541:            for(j = 0; j < (*(((struct_matrice *) (*s_objet_resultat)
                   2542:                    .objet))).nombre_colonnes; j++)
                   2543:            {
                   2544:                if ((*s_objet_argument_2).type == MIN)
                   2545:                {
                   2546:                    f77divisionic_(&(((integer8 **)
                   2547:                            (*((struct_matrice *) (*s_objet_argument_2).objet))
                   2548:                            .tableau)[i][j]), &(*((struct_complexe16 *)
                   2549:                            (*s_objet_argument_1).objet)),
                   2550:                            &((struct_complexe16 **) (*((struct_matrice *)
                   2551:                            (*s_objet_resultat).objet)).tableau)[i][j]);
                   2552:                }
                   2553:                else
                   2554:                {
                   2555:                    f77divisionrc_(&(((real8 **)
                   2556:                            (*((struct_matrice *) (*s_objet_argument_2).objet))
                   2557:                            .tableau)[i][j]), &(*((struct_complexe16 *)
                   2558:                            (*s_objet_argument_1).objet)),
                   2559:                            &((struct_complexe16 **) (*((struct_matrice *)
                   2560:                            (*s_objet_resultat).objet)).tableau)[i][j]);
                   2561:                }
                   2562:            }
                   2563:        }
                   2564:    }
                   2565: 
                   2566:    /*
                   2567:     * Matrice de complexes / Entier, réel
                   2568:     */
                   2569: 
                   2570:    else if ((((*s_objet_argument_1).type == INT) ||
                   2571:            ((*s_objet_argument_1).type == REL)) &&
                   2572:            ((*s_objet_argument_2).type == MCX))
                   2573:    {
                   2574:        if ((s_objet_resultat = allocation(s_etat_processus, MCX)) == NULL)
                   2575:        {
                   2576:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   2577:            return;
                   2578:        }
                   2579: 
                   2580:        (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_lignes =
                   2581:                (*((struct_matrice *) (*s_objet_argument_2).objet))
                   2582:                .nombre_lignes;
                   2583:        (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_colonnes =
                   2584:                (*((struct_matrice *) (*s_objet_argument_2).objet))
                   2585:                .nombre_colonnes;
                   2586: 
                   2587:        if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau =
                   2588:                malloc((*(((struct_matrice *) (*s_objet_resultat)
                   2589:                .objet))).nombre_lignes * sizeof(struct_complexe16 *))) == NULL)
                   2590:        {
                   2591:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   2592:            return;
                   2593:        }
                   2594: 
                   2595:        if ((*s_objet_argument_1).type == INT)
                   2596:        {
                   2597:            diviseur_reel = (real8) (*((integer8 *)
                   2598:                    (*s_objet_argument_1).objet));
                   2599:        }
                   2600:        else
                   2601:        {
                   2602:            diviseur_reel = (*((real8 *) (*s_objet_argument_1).objet));
                   2603:        }
                   2604: 
                   2605:        if (diviseur_reel == 0)
                   2606:        {
                   2607:            liberation(s_etat_processus, s_objet_argument_1);
                   2608:            liberation(s_etat_processus, s_objet_argument_2);
                   2609:            liberation(s_etat_processus, s_objet_resultat);
                   2610: 
                   2611:            (*s_etat_processus).exception = d_ep_division_par_zero;
                   2612:            return;
                   2613:        }
                   2614: 
                   2615:        for(i = 0; i < (*(((struct_matrice *) (*s_objet_resultat)
                   2616:                .objet))).nombre_lignes; i++)
                   2617:        {
                   2618:            if ((((struct_complexe16 **) (*((struct_matrice *)
                   2619:                    (*s_objet_resultat).objet)).tableau)[i] =
                   2620:                    malloc((*(((struct_matrice *)
                   2621:                    (*s_objet_resultat).objet))).nombre_colonnes *
                   2622:                    sizeof(struct_complexe16))) == NULL)
                   2623:            {
                   2624:                (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   2625:                return;
                   2626:            }
                   2627: 
                   2628:            for(j = 0; j < (*(((struct_matrice *) (*s_objet_resultat)
                   2629:                    .objet))).nombre_colonnes; j++)
                   2630:            {
                   2631:                if ((*s_objet_argument_1).type == INT)
                   2632:                {
                   2633:                    f77divisionci_(&(((struct_complexe16 **)
                   2634:                            (*((struct_matrice *) (*s_objet_argument_2).objet))
                   2635:                            .tableau)[i][j]), &((*((integer8 *)
                   2636:                            (*s_objet_argument_1).objet))),
                   2637:                            &(((struct_complexe16 **) (*((struct_matrice *)
                   2638:                            (*s_objet_resultat).objet)).tableau)[i][j]));
                   2639:                }
                   2640:                else
                   2641:                {
                   2642:                    f77divisioncr_(&(((struct_complexe16 **)
                   2643:                            (*((struct_matrice *) (*s_objet_argument_2).objet))
                   2644:                            .tableau)[i][j]), &((*((real8 *)
                   2645:                            (*s_objet_argument_1).objet))),
                   2646:                            &(((struct_complexe16 **) (*((struct_matrice *)
                   2647:                            (*s_objet_resultat).objet)).tableau)[i][j]));
                   2648:                }
                   2649:            }
                   2650:        }
                   2651:    }
                   2652: 
                   2653:    /*
                   2654:     * Matrice de complexes / Complexe
                   2655:     */
                   2656: 
                   2657:    else if (((*s_objet_argument_1).type == CPL) &&
                   2658:            ((*s_objet_argument_2).type == MCX))
                   2659:    {
                   2660:        if ((s_objet_resultat = allocation(s_etat_processus, MCX)) == NULL)
                   2661:        {
                   2662:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   2663:            return;
                   2664:        }
                   2665: 
                   2666:        (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_lignes =
                   2667:                (*((struct_matrice *) (*s_objet_argument_2).objet))
                   2668:                .nombre_lignes;
                   2669:        (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_colonnes =
                   2670:                (*((struct_matrice *) (*s_objet_argument_2).objet))
                   2671:                .nombre_colonnes;
                   2672: 
                   2673:        if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau =
                   2674:                malloc((*(((struct_matrice *) (*s_objet_resultat)
                   2675:                .objet))).nombre_lignes * sizeof(struct_complexe16 *))) == NULL)
                   2676:        {
                   2677:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   2678:            return;
                   2679:        }
                   2680: 
                   2681:        if (((*((struct_complexe16 *) (*s_objet_argument_1).objet))
                   2682:                .partie_reelle == 0) && ((*((struct_complexe16 *)
                   2683:                (*s_objet_argument_1).objet)).partie_imaginaire == 0))
                   2684:        {
                   2685:            liberation(s_etat_processus, s_objet_argument_1);
                   2686:            liberation(s_etat_processus, s_objet_argument_2);
                   2687:            liberation(s_etat_processus, s_objet_resultat);
                   2688: 
                   2689:            (*s_etat_processus).exception = d_ep_division_par_zero;
                   2690:            return;
                   2691:        }
                   2692: 
                   2693:        for(i = 0; i < (*(((struct_matrice *) (*s_objet_resultat)
                   2694:                .objet))).nombre_lignes; i++)
                   2695:        {
                   2696:            if ((((struct_complexe16 **) (*((struct_matrice *)
                   2697:                    (*s_objet_resultat).objet)).tableau)[i] =
                   2698:                    malloc((*(((struct_matrice *)
                   2699:                    (*s_objet_resultat).objet))).nombre_colonnes *
                   2700:                    sizeof(struct_complexe16))) == NULL)
                   2701:            {
                   2702:                (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   2703:                return;
                   2704:            }
                   2705: 
                   2706:            for(j = 0; j < (*(((struct_matrice *) (*s_objet_resultat)
                   2707:                    .objet))).nombre_colonnes; j++)
                   2708:            {
                   2709:                f77divisioncc_(&(((struct_complexe16 **)
                   2710:                        (*((struct_matrice *) (*s_objet_argument_2).objet))
                   2711:                        .tableau)[i][j]), &((*((struct_complexe16 *)
                   2712:                        (*s_objet_argument_1).objet))),
                   2713:                        &(((struct_complexe16 **) (*((struct_matrice *)
                   2714:                        (*s_objet_resultat).objet)).tableau)[i][j]));
                   2715:            }
                   2716:        }
                   2717:    }
                   2718: 
                   2719: /*
                   2720: --------------------------------------------------------------------------------
                   2721:   Division mettant en oeuvre une inversion de matrice
                   2722: --------------------------------------------------------------------------------
                   2723: */
                   2724:    /*
                   2725:     * Vecteur d'entiers ou de réels / Matrice d'entiers ou de réels
                   2726:     */
                   2727: 
                   2728:    else if ((((*s_objet_argument_1).type == MIN) ||
                   2729:            ((*s_objet_argument_1).type == MRL)) &&
                   2730:            (((*s_objet_argument_2).type == VIN) ||
                   2731:            ((*s_objet_argument_2).type == VRL)))
                   2732:    {
                   2733:        if ((*s_objet_argument_1).type == MIN)
                   2734:        {
                   2735:            (*s_objet_argument_1).type = MRL;
                   2736:        }
                   2737: 
                   2738:        if ((*(((struct_matrice *) (*s_objet_argument_1).objet)))
                   2739:                .nombre_colonnes != (*(((struct_vecteur *)
                   2740:                (*s_objet_argument_2).objet))).taille)
                   2741:        {
                   2742:            liberation(s_etat_processus, s_objet_argument_1);
                   2743:            liberation(s_etat_processus, s_objet_argument_2);
                   2744: 
                   2745:            (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
                   2746:            return;
                   2747:        }
                   2748: 
                   2749:        if ((s_objet_resultat = allocation(s_etat_processus, VRL)) == NULL)
                   2750:        {
                   2751:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   2752:            return;
                   2753:        }
                   2754: 
                   2755:        (*((struct_vecteur *) (*s_objet_resultat).objet)).taille =
                   2756:                (*(((struct_vecteur *) (*s_objet_argument_2)
                   2757:                .objet))).taille;
                   2758: 
                   2759:        if (((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau =
                   2760:                malloc((*((struct_vecteur *)
                   2761:                (*s_objet_resultat).objet)).taille * sizeof(real8))) == NULL)
                   2762:        {
                   2763:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   2764:            return;
                   2765:        }
                   2766: 
                   2767:        if ((*(((struct_matrice *) (*s_objet_argument_1).objet))).nombre_lignes
                   2768:                != (*(((struct_matrice *) (*s_objet_argument_1).objet)))
                   2769:                .nombre_colonnes)
                   2770:        {
                   2771:            liberation(s_etat_processus, s_objet_argument_1);
                   2772:            liberation(s_etat_processus, s_objet_argument_2);
                   2773:            liberation(s_etat_processus, s_objet_resultat);
                   2774: 
                   2775:            (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
                   2776:            return;
                   2777:        }
                   2778: 
                   2779:        inversion_matrice(s_etat_processus,
                   2780:                (struct_matrice *) (*s_objet_argument_1).objet);
                   2781: 
                   2782:        if (((*s_etat_processus).exception != d_ep) ||
                   2783:                ((*s_etat_processus).erreur_execution != d_ex))
                   2784:        {
                   2785:            liberation(s_etat_processus, s_objet_argument_1);
                   2786:            liberation(s_etat_processus, s_objet_argument_2);
                   2787:            liberation(s_etat_processus, s_objet_resultat);
                   2788:            return;
                   2789:        }
                   2790: 
                   2791:        if ((*s_etat_processus).erreur_systeme != d_es)
                   2792:        {
                   2793:            return;
                   2794:        }
                   2795: 
                   2796:        for(i = 0; i < (*((struct_vecteur *)
                   2797:                (*s_objet_resultat).objet)).taille; i++)
                   2798:        {
                   2799:            ((real8 *) (*((struct_vecteur *) (*s_objet_resultat).objet))
                   2800:                .tableau)[i] = 0;
                   2801: 
                   2802:            for(j = 0; j < (*((struct_matrice *) (*s_objet_argument_1).objet))
                   2803:                    .nombre_colonnes; j++)
                   2804:            {
                   2805:                if ((*s_objet_argument_2).type == VIN)
                   2806:                {
                   2807:                    ((real8 *) (*((struct_vecteur *)
                   2808:                            (*s_objet_resultat).objet))
                   2809:                            .tableau)[i] += ((real8 **) (*((struct_matrice *)
                   2810:                            (*s_objet_argument_1).objet)).tableau)[i][j] *
                   2811:                            ((integer8 *) (*((struct_vecteur *)
                   2812:                            (*s_objet_argument_2).objet)).tableau)[j];
                   2813:                }
                   2814:                else
                   2815:                {
                   2816:                    ((real8 *) (*((struct_vecteur *)
                   2817:                            (*s_objet_resultat).objet))
                   2818:                            .tableau)[i] += ((real8 **) (*((struct_matrice *)
                   2819:                            (*s_objet_argument_1).objet)).tableau)[i][j] *
                   2820:                            ((real8 *) (*((struct_vecteur *)
                   2821:                            (*s_objet_argument_2).objet)).tableau)[j];
                   2822:                }
                   2823:            }
                   2824:        }
                   2825:    }
                   2826: 
                   2827:    /*
                   2828:     * Vecteur d'entiers ou de réels / Matrice de complexes
                   2829:     */
                   2830: 
                   2831:    else if (((*s_objet_argument_1).type == MCX) &&
                   2832:            (((*s_objet_argument_2).type == VIN) ||
                   2833:            ((*s_objet_argument_2).type == VRL)))
                   2834:    {
                   2835:        if ((*(((struct_matrice *) (*s_objet_argument_1).objet)))
                   2836:                .nombre_colonnes != (*(((struct_vecteur *)
                   2837:                (*s_objet_argument_2).objet))).taille)
                   2838:        {
                   2839:            liberation(s_etat_processus, s_objet_argument_1);
                   2840:            liberation(s_etat_processus, s_objet_argument_2);
                   2841: 
                   2842:            (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
                   2843:            return;
                   2844:        }
                   2845: 
                   2846:        if ((s_objet_resultat = allocation(s_etat_processus, VCX)) == NULL)
                   2847:        {
                   2848:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   2849:            return;
                   2850:        }
                   2851: 
                   2852:        (*((struct_vecteur *) (*s_objet_resultat).objet)).type = 'C';
                   2853:        (*((struct_vecteur *) (*s_objet_resultat).objet)).taille =
                   2854:                (*(((struct_vecteur *) (*s_objet_argument_2)
                   2855:                .objet))).taille;
                   2856: 
                   2857:        if (((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau =
                   2858:                malloc((*((struct_vecteur *)
                   2859:                (*s_objet_resultat).objet)).taille * sizeof(struct_complexe16)))
                   2860:                == NULL)
                   2861:        {
                   2862:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   2863:            return;
                   2864:        }
                   2865: 
                   2866:        if ((*(((struct_matrice *) (*s_objet_argument_1).objet))).nombre_lignes
                   2867:                != (*(((struct_matrice *) (*s_objet_argument_1).objet)))
                   2868:                .nombre_colonnes)
                   2869:        {
                   2870:            liberation(s_etat_processus, s_objet_argument_1);
                   2871:            liberation(s_etat_processus, s_objet_argument_2);
                   2872:            liberation(s_etat_processus, s_objet_resultat);
                   2873: 
                   2874:            (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
                   2875:            return;
                   2876:        }
                   2877: 
                   2878:        inversion_matrice(s_etat_processus,
                   2879:                (struct_matrice *) (*s_objet_argument_1).objet);
                   2880: 
                   2881:        if (((*s_etat_processus).exception != d_ep) ||
                   2882:                ((*s_etat_processus).erreur_execution != d_ex))
                   2883:        {
                   2884:            liberation(s_etat_processus, s_objet_argument_1);
                   2885:            liberation(s_etat_processus, s_objet_argument_2);
                   2886:            liberation(s_etat_processus, s_objet_resultat);
                   2887:            return;
                   2888:        }
                   2889: 
                   2890:        if ((*s_etat_processus).erreur_systeme != d_es)
                   2891:        {
                   2892:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   2893:            return;
                   2894:        }
                   2895: 
                   2896:        for(i = 0; i < (*((struct_vecteur *)
                   2897:                (*s_objet_resultat).objet)).taille; i++)
                   2898:        {
                   2899:            (((struct_complexe16 *) (*((struct_vecteur *)
                   2900:                    (*s_objet_resultat).objet)).tableau)[i]).partie_reelle = 0;
                   2901:            (((struct_complexe16 *) (*((struct_vecteur *)
                   2902:                    (*s_objet_resultat).objet)).tableau)[i]).partie_imaginaire
                   2903:                    = 0;
                   2904: 
                   2905:            for(j = 0; j < (*((struct_matrice *) (*s_objet_argument_1).objet))
                   2906:                    .nombre_colonnes; j++)
                   2907:            {
                   2908:                if ((*s_objet_argument_2).type == VIN)
                   2909:                {
                   2910:                    f77multiplicationci_(&(((struct_complexe16 **)
                   2911:                            (*((struct_matrice *) (*s_objet_argument_1).objet))
                   2912:                            .tableau)[i][j]), &(((integer8 *)
                   2913:                            (*((struct_vecteur *) (*s_objet_argument_2).objet))
                   2914:                            .tableau)[j]), &accumulateur);
                   2915: 
                   2916:                    f77additioncc_(&(((struct_complexe16 *)
                   2917:                            (*((struct_vecteur *) (*s_objet_resultat).objet))
                   2918:                            .tableau)[i]), &accumulateur,
                   2919:                            &(((struct_complexe16 *)
                   2920:                            (*((struct_vecteur *) (*s_objet_resultat).objet))
                   2921:                            .tableau)[i]));
                   2922:                }
                   2923:                else
                   2924:                {
                   2925:                    f77multiplicationcr_(&(((struct_complexe16 **)
                   2926:                            (*((struct_matrice *) (*s_objet_argument_1).objet))
                   2927:                            .tableau)[i][j]), &(((real8 *)
                   2928:                            (*((struct_vecteur *) (*s_objet_argument_2).objet))
                   2929:                            .tableau)[j]), &accumulateur);
                   2930: 
                   2931:                    f77additioncc_(&(((struct_complexe16 *)
                   2932:                            (*((struct_vecteur *) (*s_objet_resultat).objet))
                   2933:                            .tableau)[i]), &accumulateur,
                   2934:                            &(((struct_complexe16 *)
                   2935:                            (*((struct_vecteur *) (*s_objet_resultat).objet))
                   2936:                            .tableau)[i]));
                   2937:                }
                   2938:            }
                   2939:        }
                   2940:    }
                   2941: 
                   2942:    /*
                   2943:     * Vecteur de complexes / Matrice de complexes
                   2944:     */
                   2945: 
                   2946:    else if (((*s_objet_argument_1).type == MCX) &&
                   2947:            ((*s_objet_argument_2).type == VCX))
                   2948:    {
                   2949:        if ((*(((struct_matrice *) (*s_objet_argument_1).objet)))
                   2950:                .nombre_colonnes != (*(((struct_vecteur *)
                   2951:                (*s_objet_argument_2).objet))).taille)
                   2952:        {
                   2953:            liberation(s_etat_processus, s_objet_argument_1);
                   2954:            liberation(s_etat_processus, s_objet_argument_2);
                   2955: 
                   2956:            (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
                   2957:            return;
                   2958:        }
                   2959: 
                   2960:        if ((s_objet_resultat = allocation(s_etat_processus, VCX)) == NULL)
                   2961:        {
                   2962:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   2963:            return;
                   2964:        }
                   2965: 
                   2966:        (*((struct_vecteur *) (*s_objet_resultat).objet)).taille =
                   2967:                (*(((struct_vecteur *) (*s_objet_argument_2)
                   2968:                .objet))).taille;
                   2969: 
                   2970:        if (((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau =
                   2971:                malloc((*((struct_vecteur *)
                   2972:                (*s_objet_resultat).objet)).taille * sizeof(struct_complexe16)))
                   2973:                == NULL)
                   2974:        {
                   2975:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   2976:            return;
                   2977:        }
                   2978: 
                   2979:        if ((*(((struct_matrice *) (*s_objet_argument_1).objet))).nombre_lignes
                   2980:                != (*(((struct_matrice *) (*s_objet_argument_1).objet)))
                   2981:                .nombre_colonnes)
                   2982:        {
                   2983:            liberation(s_etat_processus, s_objet_argument_1);
                   2984:            liberation(s_etat_processus, s_objet_argument_2);
                   2985:            liberation(s_etat_processus, s_objet_resultat);
                   2986: 
                   2987:            (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
                   2988:            return;
                   2989:        }
                   2990: 
                   2991:        inversion_matrice(s_etat_processus,
                   2992:                (struct_matrice *) (*s_objet_argument_1).objet);
                   2993: 
                   2994:        if (((*s_etat_processus).exception != d_ep) ||
                   2995:                ((*s_etat_processus).erreur_execution != d_ex))
                   2996:        {
                   2997:            liberation(s_etat_processus, s_objet_argument_1);
                   2998:            liberation(s_etat_processus, s_objet_argument_2);
                   2999:            liberation(s_etat_processus, s_objet_resultat);
                   3000:            return;
                   3001:        }
                   3002: 
                   3003:        if ((*s_etat_processus).erreur_systeme != d_es)
                   3004:        {
                   3005:            return;
                   3006:        }
                   3007: 
                   3008:        for(i = 0; i < (*((struct_vecteur *)
                   3009:                (*s_objet_resultat).objet)).taille; i++)
                   3010:        {
                   3011:            (((struct_complexe16 *) (*((struct_vecteur *)
                   3012:                    (*s_objet_resultat).objet)).tableau)[i]).partie_reelle = 0;
                   3013:            (((struct_complexe16 *) (*((struct_vecteur *)
                   3014:                    (*s_objet_resultat).objet)).tableau)[i]).partie_imaginaire
                   3015:                    = 0;
                   3016: 
                   3017:            for(j = 0; j < (*((struct_matrice *) (*s_objet_argument_1).objet))
                   3018:                    .nombre_colonnes; j++)
                   3019:            {
                   3020:                f77multiplicationcc_(&(((struct_complexe16 **)
                   3021:                        (*((struct_matrice *) (*s_objet_argument_1).objet))
                   3022:                        .tableau)[i][j]), &(((struct_complexe16 *)
                   3023:                        (*((struct_vecteur *) (*s_objet_argument_2).objet))
                   3024:                        .tableau)[j]), &accumulateur);
                   3025: 
                   3026:                f77additioncc_(&(((struct_complexe16 *)
                   3027:                        (*((struct_vecteur *) (*s_objet_resultat).objet))
                   3028:                        .tableau)[i]), &accumulateur,
                   3029:                        &(((struct_complexe16 *)
                   3030:                        (*((struct_vecteur *) (*s_objet_resultat).objet))
                   3031:                        .tableau)[i]));
                   3032:            }
                   3033:        }
                   3034:    }
                   3035: 
                   3036:    /*
                   3037:     * Vecteur de complexes / Matrice d'entiers ou de réels
                   3038:     */
                   3039: 
                   3040:    else if (((*s_objet_argument_2).type == VCX) &&
                   3041:            (((*s_objet_argument_1).type == MRL) ||
                   3042:            ((*s_objet_argument_1).type == MIN)))
                   3043:    {
                   3044:        if ((*s_objet_argument_1).type == MIN)
                   3045:        {
                   3046:            (*s_objet_argument_1).type = MRL;
                   3047:        }
                   3048: 
                   3049:        if ((*(((struct_matrice *) (*s_objet_argument_1).objet)))
                   3050:                .nombre_colonnes != (*(((struct_vecteur *)
                   3051:                (*s_objet_argument_2).objet))).taille)
                   3052:        {
                   3053:            liberation(s_etat_processus, s_objet_argument_1);
                   3054:            liberation(s_etat_processus, s_objet_argument_2);
                   3055: 
                   3056:            (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
                   3057:            return;
                   3058:        }
                   3059: 
                   3060:        if ((s_objet_resultat = allocation(s_etat_processus, VCX)) == NULL)
                   3061:        {
                   3062:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   3063:            return;
                   3064:        }
                   3065: 
                   3066:        (*((struct_vecteur *) (*s_objet_resultat).objet)).taille =
                   3067:                (*(((struct_vecteur *) (*s_objet_argument_2)
                   3068:                .objet))).taille;
                   3069: 
                   3070:        if (((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau =
                   3071:                malloc((*((struct_vecteur *)
                   3072:                (*s_objet_resultat).objet)).taille * sizeof(struct_complexe16)))
                   3073:                == NULL)
                   3074:        {
                   3075:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   3076:            return;
                   3077:        }
                   3078: 
                   3079:        if ((*(((struct_matrice *) (*s_objet_argument_1).objet))).nombre_lignes
                   3080:                != (*(((struct_matrice *) (*s_objet_argument_1).objet)))
                   3081:                .nombre_colonnes)
                   3082:        {
                   3083:            liberation(s_etat_processus, s_objet_argument_1);
                   3084:            liberation(s_etat_processus, s_objet_argument_2);
                   3085:            liberation(s_etat_processus, s_objet_resultat);
                   3086: 
                   3087:            (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
                   3088:            return;
                   3089:        }
                   3090: 
                   3091:        inversion_matrice(s_etat_processus,
                   3092:                (struct_matrice *) (*s_objet_argument_1).objet);
                   3093: 
                   3094:        if (((*s_etat_processus).exception != d_ep) ||
                   3095:                ((*s_etat_processus).erreur_execution != d_ex))
                   3096:        {
                   3097:            liberation(s_etat_processus, s_objet_argument_1);
                   3098:            liberation(s_etat_processus, s_objet_argument_2);
                   3099:            liberation(s_etat_processus, s_objet_resultat);
                   3100:            return;
                   3101:        }
                   3102: 
                   3103:        if ((*s_etat_processus).erreur_systeme != d_es)
                   3104:        {
                   3105:            return;
                   3106:        }
                   3107: 
                   3108:        for(i = 0; i < (*((struct_vecteur *)
                   3109:                (*s_objet_resultat).objet)).taille; i++)
                   3110:        {
                   3111:            (((struct_complexe16 *) (*((struct_vecteur *)
                   3112:                    (*s_objet_resultat).objet)).tableau)[i]).partie_reelle = 0;
                   3113:            (((struct_complexe16 *) (*((struct_vecteur *)
                   3114:                    (*s_objet_resultat).objet)).tableau)[i]).partie_imaginaire
                   3115:                    = 0;
                   3116: 
                   3117:            for(j = 0; j < (*((struct_matrice *) (*s_objet_argument_1).objet))
                   3118:                    .nombre_colonnes; j++)
                   3119:            {
                   3120:                f77multiplicationcr_(&(((struct_complexe16 *)
                   3121:                        (*((struct_vecteur *) (*s_objet_argument_2).objet))
                   3122:                        .tableau)[j]), &(((real8 **)
                   3123:                        (*((struct_matrice *) (*s_objet_argument_1).objet))
                   3124:                        .tableau)[i][j]), &accumulateur);
                   3125: 
                   3126:                f77additioncc_(&(((struct_complexe16 *)
                   3127:                        (*((struct_vecteur *) (*s_objet_resultat).objet))
                   3128:                        .tableau)[i]), &accumulateur,
                   3129:                        &(((struct_complexe16 *)
                   3130:                        (*((struct_vecteur *) (*s_objet_resultat).objet))
                   3131:                        .tableau)[i]));
                   3132:            }
                   3133:        }
                   3134:    }
                   3135:    
                   3136:    /*
                   3137:     * Matrice d'entiers ou de réels / Matrice d'entiers ou de réels
                   3138:     */
                   3139: 
                   3140:    else if ((((*s_objet_argument_1).type == MIN) ||
                   3141:            ((*s_objet_argument_1).type == MRL)) &&
                   3142:            (((*s_objet_argument_2).type == MIN) ||
                   3143:            ((*s_objet_argument_2).type == MRL)))
                   3144:    {
                   3145:        if ((*s_objet_argument_1).type == MIN)
                   3146:        {
                   3147:            (*s_objet_argument_1).type = MRL;
                   3148:        }
                   3149: 
                   3150:        if ((*(((struct_matrice *) (*s_objet_argument_1).objet)))
                   3151:                .nombre_colonnes != (*(((struct_matrice *)
                   3152:                (*s_objet_argument_2).objet))).nombre_lignes)
                   3153:        {
                   3154:            liberation(s_etat_processus, s_objet_argument_1);
                   3155:            liberation(s_etat_processus, s_objet_argument_2);
                   3156: 
                   3157:            (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
                   3158:            return;
                   3159:        }
                   3160: 
                   3161:        if ((s_objet_resultat = allocation(s_etat_processus, MRL)) == NULL)
                   3162:        {
                   3163:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   3164:            return;
                   3165:        }
                   3166: 
                   3167:        (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_lignes =
                   3168:                (*(((struct_matrice *) (*s_objet_argument_2)
                   3169:                .objet))).nombre_lignes;
                   3170:        (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_colonnes =
                   3171:                (*(((struct_matrice *) (*s_objet_argument_2)
                   3172:                .objet))).nombre_colonnes;
                   3173: 
                   3174:        if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau =
                   3175:                malloc((*((struct_matrice *)
                   3176:                (*s_objet_resultat).objet)).nombre_lignes * sizeof(real8 *)))
                   3177:                == NULL)
                   3178:        {
                   3179:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   3180:            return;
                   3181:        }
                   3182: 
                   3183:        if ((*(((struct_matrice *) (*s_objet_argument_1).objet))).nombre_lignes
                   3184:                != (*(((struct_matrice *) (*s_objet_argument_1).objet)))
                   3185:                .nombre_colonnes)
                   3186:        {
                   3187:            liberation(s_etat_processus, s_objet_argument_1);
                   3188:            liberation(s_etat_processus, s_objet_argument_2);
                   3189:            liberation(s_etat_processus, s_objet_resultat);
                   3190: 
                   3191:            (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
                   3192:            return;
                   3193:        }
                   3194: 
                   3195:        inversion_matrice(s_etat_processus,
                   3196:                (struct_matrice *) (*s_objet_argument_1).objet);
                   3197: 
                   3198:        if (((*s_etat_processus).exception != d_ep) ||
                   3199:                ((*s_etat_processus).erreur_execution != d_ex))
                   3200:        {
                   3201:            liberation(s_etat_processus, s_objet_argument_1);
                   3202:            liberation(s_etat_processus, s_objet_argument_2);
                   3203:            liberation(s_etat_processus, s_objet_resultat);
                   3204:            return;
                   3205:        }
                   3206: 
                   3207:        if ((*s_etat_processus).erreur_systeme != d_es)
                   3208:        {
                   3209:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   3210:            return;
                   3211:        }
                   3212: 
                   3213:        for(i = 0; i < (*((struct_matrice *)
                   3214:                (*s_objet_resultat).objet)).nombre_lignes; i++)
                   3215:        {
                   3216:            if ((((*((struct_matrice *) (*s_objet_resultat).objet)).tableau)[i]
                   3217:                    = malloc((*((struct_matrice *)
                   3218:                    (*s_objet_resultat).objet)).nombre_colonnes *
                   3219:                    sizeof(real8))) == NULL)
                   3220:            {
                   3221:                (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   3222:                return;
                   3223:            }
                   3224: 
                   3225:            for(j = 0; j < (*((struct_matrice *) (*s_objet_resultat).objet))
                   3226:                    .nombre_colonnes; j++)
                   3227:            {
                   3228:                ((real8 **) (*((struct_matrice *) (*s_objet_resultat).objet))
                   3229:                        .tableau)[i][j] = 0;
                   3230: 
                   3231:                for(k = 0; k < (*((struct_matrice *) (*s_objet_argument_2)
                   3232:                        .objet)).nombre_lignes; k++)
                   3233:                {
                   3234:                    if ((*s_objet_argument_2).type == MIN)
                   3235:                    {
                   3236:                        ((real8 **) (*((struct_matrice *)
                   3237:                                (*s_objet_resultat).objet))
                   3238:                                .tableau)[i][j] += ((real8 **)
                   3239:                                (*((struct_matrice *)
                   3240:                                (*s_objet_argument_1).objet)).tableau)[i][k] *
                   3241:                                ((integer8 **) (*((struct_matrice *)
                   3242:                                (*s_objet_argument_2).objet)).tableau)[k][j];
                   3243:                    }
                   3244:                    else
                   3245:                    {
                   3246:                        ((real8 **) (*((struct_matrice *)
                   3247:                                (*s_objet_resultat).objet))
                   3248:                                .tableau)[i][j] += ((real8 **)
                   3249:                                (*((struct_matrice *)
                   3250:                                (*s_objet_argument_1).objet)).tableau)[i][k] *
                   3251:                                ((real8 **) (*((struct_matrice *)
                   3252:                                (*s_objet_argument_2).objet)).tableau)[k][j];
                   3253:                    }
                   3254:                }
                   3255:            }
                   3256:        }
                   3257:    }
                   3258: 
                   3259:    /*
                   3260:     * Matrice d'entiers ou de réels / Matrice de complexes
                   3261:     */
                   3262: 
                   3263:    else if (((*s_objet_argument_1).type == MCX) &&
                   3264:            (((*s_objet_argument_2).type == MIN) ||
                   3265:            ((*s_objet_argument_2).type == MRL)))
                   3266:    {
                   3267:        if ((*(((struct_matrice *) (*s_objet_argument_1).objet)))
                   3268:                .nombre_colonnes != (*(((struct_matrice *)
                   3269:                (*s_objet_argument_2).objet))).nombre_lignes)
                   3270:        {
                   3271:            liberation(s_etat_processus, s_objet_argument_1);
                   3272:            liberation(s_etat_processus, s_objet_argument_2);
                   3273: 
                   3274:            (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
                   3275:            return;
                   3276:        }
                   3277: 
                   3278:        if ((s_objet_resultat = allocation(s_etat_processus, MCX)) == NULL)
                   3279:        {
                   3280:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   3281:            return;
                   3282:        }
                   3283: 
                   3284:        (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_lignes =
                   3285:                (*(((struct_matrice *) (*s_objet_argument_2)
                   3286:                .objet))).nombre_lignes;
                   3287:        (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_colonnes =
                   3288:                (*(((struct_matrice *) (*s_objet_argument_2)
                   3289:                .objet))).nombre_colonnes;
                   3290: 
                   3291:        if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau =
                   3292:                malloc((*((struct_matrice *)
                   3293:                (*s_objet_resultat).objet)).nombre_lignes *
                   3294:                sizeof(struct_complexe16))) == NULL)
                   3295:        {
                   3296:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   3297:            return;
                   3298:        }
                   3299: 
                   3300:        if ((*(((struct_matrice *) (*s_objet_argument_1).objet))).nombre_lignes
                   3301:                != (*(((struct_matrice *) (*s_objet_argument_1).objet)))
                   3302:                .nombre_colonnes)
                   3303:        {
                   3304:            liberation(s_etat_processus, s_objet_argument_1);
                   3305:            liberation(s_etat_processus, s_objet_argument_2);
                   3306:            liberation(s_etat_processus, s_objet_resultat);
                   3307: 
                   3308:            (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
                   3309:            return;
                   3310:        }
                   3311: 
                   3312:        inversion_matrice(s_etat_processus, 
                   3313:                (struct_matrice *) (*s_objet_argument_1).objet);
                   3314: 
                   3315:        if (((*s_etat_processus).exception != d_ep) ||
                   3316:                ((*s_etat_processus).erreur_execution != d_ex))
                   3317:        {
                   3318:            liberation(s_etat_processus, s_objet_argument_1);
                   3319:            liberation(s_etat_processus, s_objet_argument_2);
                   3320:            liberation(s_etat_processus, s_objet_resultat);
                   3321:            return;
                   3322:        }
                   3323: 
                   3324:        if ((*s_etat_processus).erreur_systeme != d_es)
                   3325:        {
                   3326:            return;
                   3327:        }
                   3328: 
                   3329:        for(i = 0; i < (*((struct_matrice *)
                   3330:                (*s_objet_resultat).objet)).nombre_lignes; i++)
                   3331:        {
                   3332:            if ((((*((struct_matrice *) (*s_objet_resultat).objet)).tableau)[i]
                   3333:                    = malloc((*((struct_matrice *)
                   3334:                    (*s_objet_resultat).objet)).nombre_colonnes *
                   3335:                    sizeof(struct_complexe16))) == NULL)
                   3336:            {
                   3337:                (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   3338:                return;
                   3339:            }
                   3340: 
                   3341:            for(j = 0; j < (*((struct_matrice *) (*s_objet_resultat).objet))
                   3342:                    .nombre_colonnes; j++)
                   3343:            {
                   3344:                (((struct_complexe16 **) (*((struct_matrice *)
                   3345:                        (*s_objet_resultat).objet)).tableau)[i][j])
                   3346:                        .partie_reelle = 0;
                   3347:                (((struct_complexe16 **) (*((struct_matrice *)
                   3348:                        (*s_objet_resultat).objet)).tableau)[i][j])
                   3349:                        .partie_imaginaire = 0;
                   3350: 
                   3351:                for(k = 0; k < (*((struct_matrice *) (*s_objet_argument_2)
                   3352:                        .objet)).nombre_lignes; k++)
                   3353:                {
                   3354:                    if ((*s_objet_argument_2).type == MIN)
                   3355:                    {
                   3356:                        f77multiplicationci_(&(((struct_complexe16 **)
                   3357:                                (*((struct_matrice *) (*s_objet_argument_1)
                   3358:                                .objet)).tableau)[i][k]), &(((integer8 **)
                   3359:                                (*((struct_matrice *) (*s_objet_argument_2)
                   3360:                                .objet)).tableau)[k][j]), &accumulateur);
                   3361: 
                   3362:                        f77additioncc_(&(((struct_complexe16 **)
                   3363:                                (*((struct_matrice *) (*s_objet_resultat)
                   3364:                                .objet)).tableau)[i][j]), &accumulateur,
                   3365:                                &(((struct_complexe16 **) (*((struct_matrice *)
                   3366:                                (*s_objet_resultat).objet)).tableau)[i][j]));
                   3367:                    }
                   3368:                    else
                   3369:                    {
                   3370:                        f77multiplicationcr_(&(((struct_complexe16 **)
                   3371:                                (*((struct_matrice *) (*s_objet_argument_1)
                   3372:                                .objet)).tableau)[i][k]), &(((real8 **)
                   3373:                                (*((struct_matrice *) (*s_objet_argument_2)
                   3374:                                .objet)).tableau)[k][j]), &accumulateur);
                   3375: 
                   3376:                        f77additioncc_(&(((struct_complexe16 **)
                   3377:                                (*((struct_matrice *) (*s_objet_resultat)
                   3378:                                .objet)).tableau)[i][j]), &accumulateur,
                   3379:                                &(((struct_complexe16 **) (*((struct_matrice *)
                   3380:                                (*s_objet_resultat).objet)).tableau)[i][j]));
                   3381:                    }
                   3382:                }
                   3383:            }
                   3384:        }
                   3385:    }
                   3386: 
                   3387:    /*
                   3388:     * Matrice de complexes / Matrice de complexes
                   3389:     */
                   3390: 
                   3391:    else if (((*s_objet_argument_1).type == MCX) &&
                   3392:            ((*s_objet_argument_2).type == MCX))
                   3393:    {
                   3394:        if ((*(((struct_matrice *) (*s_objet_argument_1).objet)))
                   3395:                .nombre_colonnes != (*(((struct_matrice *)
                   3396:                (*s_objet_argument_2).objet))).nombre_lignes)
                   3397:        {
                   3398:            liberation(s_etat_processus, s_objet_argument_1);
                   3399:            liberation(s_etat_processus, s_objet_argument_2);
                   3400: 
                   3401:            (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
                   3402:            return;
                   3403:        }
                   3404: 
                   3405:        if ((s_objet_resultat = allocation(s_etat_processus, MCX)) == NULL)
                   3406:        {
                   3407:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   3408:            return;
                   3409:        }
                   3410: 
                   3411:        (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_lignes =
                   3412:                (*(((struct_matrice *) (*s_objet_argument_2)
                   3413:                .objet))).nombre_lignes;
                   3414:        (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_colonnes =
                   3415:                (*(((struct_matrice *) (*s_objet_argument_2)
                   3416:                .objet))).nombre_colonnes;
                   3417: 
                   3418:        if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau =
                   3419:                malloc((*((struct_matrice *)
                   3420:                (*s_objet_resultat).objet)).nombre_lignes *
                   3421:                sizeof(struct_complexe16))) == NULL)
                   3422:        {
                   3423:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   3424:            return;
                   3425:        }
                   3426: 
                   3427:        if ((*(((struct_matrice *) (*s_objet_argument_1).objet))).nombre_lignes
                   3428:                != (*(((struct_matrice *) (*s_objet_argument_1).objet)))
                   3429:                .nombre_colonnes)
                   3430:        {
                   3431:            liberation(s_etat_processus, s_objet_argument_1);
                   3432:            liberation(s_etat_processus, s_objet_argument_2);
                   3433:            liberation(s_etat_processus, s_objet_resultat);
                   3434: 
                   3435:            (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
                   3436:            return;
                   3437:        }
                   3438: 
                   3439:        inversion_matrice(s_etat_processus,
                   3440:                (struct_matrice *) (*s_objet_argument_1).objet);
                   3441: 
                   3442:        if (((*s_etat_processus).exception != d_ep) ||
                   3443:                ((*s_etat_processus).erreur_execution != d_ex))
                   3444:        {
                   3445:            liberation(s_etat_processus, s_objet_argument_1);
                   3446:            liberation(s_etat_processus, s_objet_argument_2);
                   3447:            liberation(s_etat_processus, s_objet_resultat);
                   3448:            return;
                   3449:        }
                   3450: 
                   3451:        if ((*s_etat_processus).erreur_systeme != d_es)
                   3452:        {
                   3453:            return;
                   3454:        }
                   3455: 
                   3456:        for(i = 0; i < (*((struct_matrice *)
                   3457:                (*s_objet_resultat).objet)).nombre_lignes; i++)
                   3458:        {
                   3459:            if ((((*((struct_matrice *) (*s_objet_resultat).objet)).tableau)[i]
                   3460:                    = malloc((*((struct_matrice *)
                   3461:                    (*s_objet_resultat).objet)).nombre_colonnes *
                   3462:                    sizeof(struct_complexe16))) == NULL)
                   3463:            {
                   3464:                (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   3465:                return;
                   3466:            }
                   3467: 
                   3468:            for(j = 0; j < (*((struct_matrice *) (*s_objet_resultat).objet))
                   3469:                    .nombre_colonnes; j++)
                   3470:            {
                   3471:                (((struct_complexe16 **) (*((struct_matrice *)
                   3472:                        (*s_objet_resultat).objet)).tableau)[i][j])
                   3473:                        .partie_reelle = 0;
                   3474:                (((struct_complexe16 **) (*((struct_matrice *)
                   3475:                        (*s_objet_resultat).objet)).tableau)[i][j])
                   3476:                        .partie_imaginaire = 0;
                   3477: 
                   3478:                for(k = 0; k < (*((struct_matrice *) (*s_objet_argument_2)
                   3479:                        .objet)).nombre_lignes; k++)
                   3480:                {
                   3481:                    f77multiplicationcc_(&(((struct_complexe16 **)
                   3482:                            (*((struct_matrice *) (*s_objet_argument_1).objet))
                   3483:                            .tableau)[i][k]), &(((struct_complexe16 **)
                   3484:                            (*((struct_matrice *) (*s_objet_argument_2).objet))
                   3485:                            .tableau)[k][j]), &accumulateur);
                   3486: 
                   3487:                    f77additioncc_(&(((struct_complexe16 **)
                   3488:                            (*((struct_matrice *) (*s_objet_resultat).objet))
                   3489:                            .tableau)[i][j]), &accumulateur,
                   3490:                            &(((struct_complexe16 **)
                   3491:                            (*((struct_matrice *) (*s_objet_resultat).objet))
                   3492:                            .tableau)[i][j]));
                   3493:                }
                   3494:            }
                   3495:        }
                   3496:    }
                   3497: 
                   3498:    /*
                   3499:     * Matrice de complexes / Matrice d'entiers ou de réels
                   3500:     */
                   3501: 
                   3502:    else if (((*s_objet_argument_2).type == MCX) &&
                   3503:            (((*s_objet_argument_1).type == MRL) ||
                   3504:            ((*s_objet_argument_1).type == MIN)))
                   3505:    {
                   3506:        if ((*s_objet_argument_1).type == MIN)
                   3507:        {
                   3508:            (*s_objet_argument_1).type = MRL;
                   3509:        }
                   3510: 
                   3511:        if ((*(((struct_matrice *) (*s_objet_argument_1).objet)))
                   3512:                .nombre_colonnes != (*(((struct_matrice *)
                   3513:                (*s_objet_argument_2).objet))).nombre_lignes)
                   3514:        {
                   3515:            liberation(s_etat_processus, s_objet_argument_1);
                   3516:            liberation(s_etat_processus, s_objet_argument_2);
                   3517: 
                   3518:            (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
                   3519:            return;
                   3520:        }
                   3521: 
                   3522:        if ((s_objet_resultat = allocation(s_etat_processus, MCX)) == NULL)
                   3523:        {
                   3524:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   3525:            return;
                   3526:        }
                   3527: 
                   3528:        (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_lignes =
                   3529:                (*(((struct_matrice *) (*s_objet_argument_2)
                   3530:                .objet))).nombre_lignes;
                   3531:        (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_colonnes =
                   3532:                (*(((struct_matrice *) (*s_objet_argument_2)
                   3533:                .objet))).nombre_colonnes;
                   3534: 
                   3535:        if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau =
                   3536:                malloc((*((struct_matrice *)
                   3537:                (*s_objet_resultat).objet)).nombre_colonnes *
                   3538:                sizeof(struct_complexe16))) == NULL)
                   3539:        {
                   3540:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   3541:            return;
                   3542:        }
                   3543: 
                   3544:        if ((*(((struct_matrice *) (*s_objet_argument_1).objet))).nombre_lignes
                   3545:                != (*(((struct_matrice *) (*s_objet_argument_1).objet)))
                   3546:                .nombre_colonnes)
                   3547:        {
                   3548:            liberation(s_etat_processus, s_objet_argument_1);
                   3549:            liberation(s_etat_processus, s_objet_argument_2);
                   3550:            liberation(s_etat_processus, s_objet_resultat);
                   3551: 
                   3552:            (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
                   3553:            return;
                   3554:        }
                   3555: 
                   3556:        inversion_matrice(s_etat_processus,
                   3557:                (struct_matrice *) (*s_objet_argument_1).objet);
                   3558: 
                   3559:        if (((*s_etat_processus).exception != d_ep) ||
                   3560:                ((*s_etat_processus).erreur_execution != d_ex))
                   3561:        {
                   3562:            liberation(s_etat_processus, s_objet_argument_1);
                   3563:            liberation(s_etat_processus, s_objet_argument_2);
                   3564:            liberation(s_etat_processus, s_objet_resultat);
                   3565:            return;
                   3566:        }
                   3567: 
                   3568:        if ((*s_etat_processus).erreur_systeme != d_es)
                   3569:        {
                   3570:            return;
                   3571:        }
                   3572: 
                   3573:        for(i = 0; i < (*((struct_matrice *)
                   3574:                (*s_objet_resultat).objet)).nombre_lignes; i++)
                   3575:        {
                   3576:            if ((((*((struct_matrice *) (*s_objet_resultat).objet)).tableau)[i]
                   3577:                    = malloc((*((struct_matrice *)
                   3578:                    (*s_objet_resultat).objet)).nombre_colonnes *
                   3579:                    sizeof(struct_complexe16))) == NULL)
                   3580:            {
                   3581:                (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   3582:                return;
                   3583:            }
                   3584:            
                   3585:            for(j = 0; j < (*((struct_matrice *) (*s_objet_resultat).objet))
                   3586:                    .nombre_colonnes; j++)
                   3587:            {
                   3588:                (((struct_complexe16 **) (*((struct_matrice *)
                   3589:                        (*s_objet_resultat).objet)).tableau)[i][j])
                   3590:                        .partie_reelle = 0;
                   3591:                (((struct_complexe16 **) (*((struct_matrice *)
                   3592:                        (*s_objet_resultat).objet)).tableau)[i][j])
                   3593:                        .partie_imaginaire = 0;
                   3594: 
                   3595:                for(k = 0; k < (*((struct_matrice *) (*s_objet_argument_2)
                   3596:                        .objet)).nombre_lignes; k++)
                   3597:                {
                   3598:                    if ((*s_objet_argument_1).type == MIN)
                   3599:                    {
                   3600:                        f77multiplicationci_(&(((struct_complexe16 **)
                   3601:                                (*((struct_matrice *) (*s_objet_argument_2)
                   3602:                                .objet)).tableau)[k][j]), &(((integer8 **)
                   3603:                                (*((struct_matrice *) (*s_objet_argument_1)
                   3604:                                .objet)).tableau)[i][k]), &accumulateur);
                   3605: 
                   3606:                        f77additioncc_(&(((struct_complexe16 **)
                   3607:                                (*((struct_matrice *) (*s_objet_resultat)
                   3608:                                .objet)).tableau)[i][j]), &accumulateur,
                   3609:                                &(((struct_complexe16 **) (*((struct_matrice *)
                   3610:                                (*s_objet_resultat).objet))
                   3611:                                .tableau)[i][j]));
                   3612:                    }
                   3613:                    else
                   3614:                    {
                   3615:                        f77multiplicationcr_(&(((struct_complexe16 **)
                   3616:                                (*((struct_matrice *) (*s_objet_argument_2)
                   3617:                                .objet)).tableau)[k][j]), &(((real8 **)
                   3618:                                (*((struct_matrice *) (*s_objet_argument_1)
                   3619:                                .objet)).tableau)[i][k]), &accumulateur);
                   3620: 
                   3621:                        f77additioncc_(&(((struct_complexe16 **)
                   3622:                                (*((struct_matrice *) (*s_objet_resultat)
                   3623:                                .objet)).tableau)[i][j]), &accumulateur,
                   3624:                                &(((struct_complexe16 **) (*((struct_matrice *)
                   3625:                                (*s_objet_resultat).objet))
                   3626:                                .tableau)[i][j]));
                   3627:                    }
                   3628:                }
                   3629:            }
                   3630:        }
                   3631:    }
                   3632:    
                   3633: /*
                   3634: --------------------------------------------------------------------------------
                   3635:   Division mettant en oeuvre des binaires
                   3636: --------------------------------------------------------------------------------
                   3637: */
                   3638:    /*
                   3639:     * Binaire / Binaire
                   3640:     */
                   3641: 
                   3642:    else if (((*s_objet_argument_1).type == BIN) &&
                   3643:            ((*s_objet_argument_2).type == BIN))
                   3644:    {
                   3645:        if ((s_objet_resultat = allocation(s_etat_processus, BIN)) == NULL)
                   3646:        {
                   3647:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   3648:            return;
                   3649:        }
                   3650: 
                   3651:        (*((logical8 *) (*s_objet_resultat).objet)) =
                   3652:                (*((logical8 *) (*s_objet_argument_2).objet))
                   3653:                / (*((logical8 *) (*s_objet_argument_1).objet));
                   3654:    }
                   3655: 
                   3656:    /*
                   3657:     * Binaire / Entier
                   3658:     */
                   3659: 
                   3660:    else if ((((*s_objet_argument_1).type == BIN) &&
                   3661:            ((*s_objet_argument_2).type == INT)) ||
                   3662:            (((*s_objet_argument_1).type == INT) &&
                   3663:            ((*s_objet_argument_2).type == BIN)))
                   3664:    {
                   3665:        if ((s_objet_resultat = allocation(s_etat_processus, BIN)) == NULL)
                   3666:        {
                   3667:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   3668:            return;
                   3669:        }
                   3670: 
                   3671:        if ((*s_objet_argument_1).type == BIN)
                   3672:        {
                   3673:            (*((logical8 *) (*s_objet_resultat).objet)) =
                   3674:                    (*((integer8 *) (*s_objet_argument_2).objet))
                   3675:                    / (*((logical8 *) (*s_objet_argument_1).objet));
                   3676:        }
                   3677:        else
                   3678:        {
                   3679:            (*((logical8 *) (*s_objet_resultat).objet)) =
                   3680:                    (*((logical8 *) (*s_objet_argument_2).objet))
                   3681:                    / (*((integer8 *) (*s_objet_argument_1).objet));
                   3682:        }
                   3683:    }
                   3684: 
                   3685: /*
                   3686: --------------------------------------------------------------------------------
                   3687:   Division impossible
                   3688: --------------------------------------------------------------------------------
                   3689: */
                   3690: 
                   3691:    else
                   3692:    {
                   3693:        liberation(s_etat_processus, s_objet_argument_1);
                   3694:        liberation(s_etat_processus, s_objet_argument_2);
                   3695: 
                   3696:        (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
                   3697:        return;
                   3698:    }
                   3699: 
                   3700:    liberation(s_etat_processus, s_objet_argument_1);
                   3701:    liberation(s_etat_processus, s_objet_argument_2);
                   3702: 
                   3703:    if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
                   3704:            s_objet_resultat) == d_erreur)
                   3705:    {
                   3706:        return;
                   3707:    }
                   3708: 
                   3709:    return;
                   3710: }
                   3711: 
                   3712: 
                   3713: /*
                   3714: ================================================================================
                   3715:   Fonction 'do'
                   3716: ================================================================================
                   3717:   Entrées : structure processus
                   3718: --------------------------------------------------------------------------------
                   3719:   Sorties :
                   3720: --------------------------------------------------------------------------------
                   3721:   Effets de bord : néant
                   3722: ================================================================================
                   3723: */
                   3724: 
                   3725: void
                   3726: instruction_do(struct_processus *s_etat_processus)
                   3727: {
                   3728:    (*s_etat_processus).erreur_execution = d_ex;
                   3729: 
                   3730:    if ((*s_etat_processus).affichage_arguments == 'Y')
                   3731:    {
                   3732:        printf("\n  DO ");
                   3733: 
                   3734:        if ((*s_etat_processus).langue == 'F')
                   3735:        {
                   3736:            printf("(structure de contrôle)\n\n");
                   3737:            printf("  Utilisation :\n\n");
                   3738:        }
                   3739:        else
                   3740:        {
                   3741:            printf("(control statement)\n\n");
                   3742:            printf("  Usage:\n\n");
                   3743:        }
                   3744: 
                   3745:        printf("    DO\n");
                   3746:        printf("        (expression 1)\n");
                   3747:        printf("        EXIT\n");
                   3748:        printf("        (expression 2)\n");
                   3749:        printf("    UNTIL\n");
                   3750:        printf("        (clause)\n");
                   3751:        printf("    END\n\n");
                   3752: 
                   3753:        printf("    DO\n");
                   3754:        printf("        (expression)\n");
                   3755:        printf("    UNTIL\n");
                   3756:        printf("        (clause)\n");
                   3757:        printf("    END\n");
                   3758: 
                   3759:        return;
                   3760:    }
                   3761:    else if ((*s_etat_processus).test_instruction == 'Y')
                   3762:    {
                   3763:        (*s_etat_processus).nombre_arguments = -1;
                   3764:        return;
                   3765:    }
                   3766: 
                   3767:    empilement_pile_systeme(s_etat_processus);
                   3768: 
                   3769:    if ((*s_etat_processus).erreur_systeme != d_es)
                   3770:    {
                   3771:        return;
                   3772:    }
                   3773: 
                   3774:    (*(*s_etat_processus).l_base_pile_systeme).type_cloture = 'D';
                   3775:    (*(*s_etat_processus).l_base_pile_systeme).clause = 'D';
                   3776: 
                   3777:    if ((*s_etat_processus).mode_execution_programme == 'Y')
                   3778:    {
                   3779:        (*(*s_etat_processus).l_base_pile_systeme).adresse_retour =
                   3780:                (*s_etat_processus).position_courante;
                   3781:    }
                   3782:    else
                   3783:    {
                   3784:        if ((*s_etat_processus).expression_courante == NULL)
                   3785:        {
                   3786:            (*s_etat_processus).erreur_execution =
                   3787:                    d_ex_erreur_traitement_boucle;
                   3788:            return;
                   3789:        }
                   3790: 
                   3791:        (*(*s_etat_processus).l_base_pile_systeme).pointeur_objet_retour =
                   3792:                (*s_etat_processus).expression_courante;
                   3793:    }
                   3794: 
                   3795:    return;
                   3796: }
                   3797: 
                   3798: 
                   3799: /*
                   3800: ================================================================================
                   3801:   Fonction 'default'
                   3802: ================================================================================
                   3803:   Entrées : structure processus
                   3804: --------------------------------------------------------------------------------
                   3805:   Sorties :
                   3806: --------------------------------------------------------------------------------
                   3807:   Effets de bord : néant
                   3808: ================================================================================
                   3809: */
                   3810: 
                   3811: void
                   3812: instruction_default(struct_processus *s_etat_processus)
                   3813: {
                   3814:    logical1                        drapeau_fin;
                   3815:    logical1                        erreur;
                   3816: 
                   3817:    unsigned char                   *instruction_majuscule;
                   3818:    unsigned char                   *tampon;
                   3819: 
                   3820:    unsigned long                   niveau;
                   3821: 
                   3822:    (*s_etat_processus).erreur_execution = d_ex;
                   3823: 
                   3824:    if ((*s_etat_processus).affichage_arguments == 'Y')
                   3825:    {
                   3826:        printf("\n  DEFAULT ");
                   3827: 
                   3828:        if ((*s_etat_processus).langue == 'F')
                   3829:        {
                   3830:            printf("(structure de contrôle)\n\n");
                   3831:            printf("  Utilisation :\n\n");
                   3832:        }
                   3833:        else
                   3834:        {
                   3835:            printf("(control statement)\n\n");
                   3836:            printf("  Usage:\n\n");
                   3837:        }
                   3838: 
                   3839:        printf("    SELECT (expression test)\n");
                   3840:        printf("        CASE (clause 1) THEN (expression 1) END\n");
                   3841:        printf("        CASE (clause 2) THEN (expression 2) END\n");
                   3842:        printf("        ...\n");
                   3843:        printf("        CASE (clause n) THEN (expression n) END\n");
                   3844:        printf("    DEFAULT\n");
                   3845:        printf("        (expression)\n");
                   3846:        printf("    END\n");
                   3847: 
                   3848:        return;
                   3849:    }
                   3850:    else if ((*s_etat_processus).test_instruction == 'Y')
                   3851:    {
                   3852:        (*s_etat_processus).nombre_arguments = -1;
                   3853:        return;
                   3854:    }
                   3855: 
                   3856:    if ((*(*s_etat_processus).l_base_pile_systeme).type_cloture == 'C')
                   3857:    {
                   3858:        if ((*(*s_etat_processus).l_base_pile_systeme).clause == 'C')
                   3859:        {
                   3860:            /*
                   3861:             * Au moins un cas CASE a été traité et l'on saute au END
                   3862:             * correspondant.
                   3863:             */
                   3864: 
                   3865:            tampon = (*s_etat_processus).instruction_courante;
                   3866:            niveau = 0;
                   3867: 
                   3868:            do
                   3869:            {
                   3870:                if ((*s_etat_processus).mode_execution_programme == 'Y')
                   3871:                {
                   3872:                    erreur = recherche_instruction_suivante(s_etat_processus);
                   3873:                }
                   3874:                else
                   3875:                {
                   3876:                    erreur = d_absence_erreur;
                   3877: 
                   3878:                    if ((*s_etat_processus).expression_courante != NULL)
                   3879:                    {
                   3880:                        while(((*(*(*s_etat_processus)
                   3881:                                .expression_courante).donnee).type != FCT)
                   3882:                                && (erreur == d_absence_erreur))
                   3883:                        {
                   3884:                            if ((*s_etat_processus).expression_courante == NULL)
                   3885:                            {
                   3886:                                erreur = d_erreur;
                   3887:                            }
                   3888:                            else
                   3889:                            {
                   3890:                                (*s_etat_processus).expression_courante =
                   3891:                                        (*(*s_etat_processus)
                   3892:                                        .expression_courante).suivant;
                   3893:                            }
                   3894:                        }
                   3895:                    }
                   3896:                    else
                   3897:                    {
                   3898:                        erreur = d_erreur;
                   3899:                    }
                   3900: 
                   3901:                    if (erreur == d_absence_erreur)
                   3902:                    {
                   3903:                        if (((*s_etat_processus).instruction_courante =
                   3904:                                malloc((strlen(
                   3905:                                (*((struct_fonction *) (*(*(*s_etat_processus)
                   3906:                                .expression_courante).donnee).objet))
                   3907:                                .nom_fonction) + 1) * sizeof(unsigned char)))
                   3908:                                == NULL)
                   3909:                        {
                   3910:                            (*s_etat_processus).erreur_systeme =
                   3911:                                    d_es_allocation_memoire;
                   3912:                            return;
                   3913:                        }
                   3914: 
                   3915:                        strcpy((*s_etat_processus).instruction_courante,
                   3916:                                (*((struct_fonction *) (*(*(*s_etat_processus)
                   3917:                                .expression_courante).donnee).objet))
                   3918:                                .nom_fonction);
                   3919:                    }
                   3920:                }
                   3921: 
                   3922:                if (erreur != d_absence_erreur)
                   3923:                {
                   3924:                    if ((*s_etat_processus).instruction_courante != NULL)
                   3925:                    {
                   3926:                        free((*s_etat_processus).instruction_courante);
                   3927:                    }
                   3928: 
                   3929:                    (*s_etat_processus).instruction_courante = tampon;
                   3930:                    (*s_etat_processus).erreur_execution =
                   3931:                            d_ex_erreur_traitement_condition;
                   3932: 
                   3933:                    return;
                   3934:                }
                   3935: 
                   3936:                instruction_majuscule = conversion_majuscule(
                   3937:                        (*s_etat_processus).instruction_courante);
                   3938: 
                   3939:                if (niveau == 0)
                   3940:                {
                   3941:                    if (strcmp(instruction_majuscule, "END") == 0)
                   3942:                    {
                   3943:                        if ((*s_etat_processus).mode_execution_programme == 'Y')
                   3944:                        {
                   3945:                            (*s_etat_processus).position_courante -= (strlen(
                   3946:                                    instruction_majuscule) + 1);
                   3947:                        }
                   3948:                        else
                   3949:                        {
                   3950:                            instruction_end(s_etat_processus);
                   3951:                        }
                   3952: 
                   3953:                        drapeau_fin = d_vrai;
                   3954:                    }
                   3955:                    else
                   3956:                    {
                   3957:                        drapeau_fin = d_faux;
                   3958:                    }
                   3959:                }
                   3960:                else
                   3961:                {
                   3962:                    drapeau_fin = d_faux;
                   3963:                }
                   3964: 
                   3965:                if ((strcmp(instruction_majuscule, "CASE") == 0) ||
                   3966:                        (strcmp(instruction_majuscule, "DO") == 0) ||
                   3967:                        (strcmp(instruction_majuscule, "IF") == 0) ||
                   3968:                        (strcmp(instruction_majuscule, "IFERR") == 0) ||
                   3969:                        (strcmp(instruction_majuscule, "SELECT") == 0) ||
                   3970:                        (strcmp(instruction_majuscule, "WHILE") == 0))
                   3971:                {
                   3972:                    niveau++;
                   3973:                }
                   3974:                else if (strcmp(instruction_majuscule, "END") == 0)
                   3975:                {
                   3976:                    niveau--;
                   3977:                }
                   3978: 
                   3979:                free(instruction_majuscule);
                   3980:                free((*s_etat_processus).instruction_courante);
                   3981: 
                   3982:                if (((*s_etat_processus).mode_execution_programme != 'Y') &&
                   3983:                        (drapeau_fin == d_faux))
                   3984:                {
                   3985:                    (*s_etat_processus).expression_courante =
                   3986:                            (*(*s_etat_processus)
                   3987:                            .expression_courante).suivant;
                   3988:                }
                   3989:            } while(drapeau_fin == d_faux);
                   3990: 
                   3991:            (*s_etat_processus).instruction_courante = tampon;
                   3992:        }
                   3993:        else
                   3994:        {
                   3995:            if ((*(*s_etat_processus).l_base_pile_systeme).clause == 'F')
                   3996:            {
                   3997:                (*s_etat_processus).erreur_execution =
                   3998:                        d_ex_erreur_traitement_condition;
                   3999:                return;
                   4000:            }
                   4001: 
                   4002:            (*(*s_etat_processus).l_base_pile_systeme).clause = 'F';
                   4003:        }
                   4004:    }
                   4005:    else
                   4006:    {
                   4007:        (*s_etat_processus).erreur_execution = d_ex_erreur_traitement_condition;
                   4008:        return;
                   4009:    }
                   4010: 
                   4011:    return;
                   4012: }
                   4013: 
                   4014: // vim: ts=4

CVSweb interface <joel.bertrand@systella.fr>