Annotation of rpl/src/instructions_c1.c, revision 1.1
1.1 ! bertrand 1: /*
! 2: ================================================================================
! 3: RPL/2 (R) version 4.0.9
! 4: Copyright (C) 1989-2010 Dr. BERTRAND Joël
! 5:
! 6: This file is part of RPL/2.
! 7:
! 8: RPL/2 is free software; you can redistribute it and/or modify it
! 9: under the terms of the CeCILL V2 License as published by the french
! 10: CEA, CNRS and INRIA.
! 11:
! 12: RPL/2 is distributed in the hope that it will be useful, but WITHOUT
! 13: ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
! 14: FITNESS FOR A PARTICULAR PURPOSE. See the CeCILL V2 License
! 15: for more details.
! 16:
! 17: You should have received a copy of the CeCILL License
! 18: along with RPL/2. If not, write to info@cecill.info.
! 19: ================================================================================
! 20: */
! 21:
! 22:
! 23: #include "rpl.conv.h"
! 24:
! 25:
! 26: /*
! 27: ================================================================================
! 28: Fonction 'clear'
! 29: ================================================================================
! 30: Entrées : structure processus
! 31: --------------------------------------------------------------------------------
! 32: Sorties :
! 33: --------------------------------------------------------------------------------
! 34: Effets de bord : néant
! 35: ================================================================================
! 36: */
! 37:
! 38: void
! 39: instruction_clear(struct_processus *s_etat_processus)
! 40: {
! 41: struct_liste_chainee *l_element_courant;
! 42: struct_liste_chainee *l_element_suivant;
! 43:
! 44: (*s_etat_processus).erreur_execution = d_ex;
! 45:
! 46: if ((*s_etat_processus).affichage_arguments == 'Y')
! 47: {
! 48: printf("\n CLEAR ");
! 49:
! 50: if ((*s_etat_processus).langue == 'F')
! 51: {
! 52: printf("(efface la pile)\n\n");
! 53: printf(" Aucun argument\n");
! 54: }
! 55: else
! 56: {
! 57: printf("(clear stack)\n\n");
! 58: printf(" No argument\n");
! 59: }
! 60:
! 61: return;
! 62: }
! 63: else if ((*s_etat_processus).test_instruction == 'Y')
! 64: {
! 65: (*s_etat_processus).nombre_arguments = -1;
! 66: return;
! 67: }
! 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: l_element_courant = (*s_etat_processus).l_base_pile;
! 78: while(l_element_courant != NULL)
! 79: {
! 80: liberation(s_etat_processus, (*l_element_courant).donnee);
! 81: l_element_suivant = (*l_element_courant).suivant;
! 82:
! 83: // On ne libère le maillon de la chaîne. On le sauvegarde
! 84: // arbitrairement dans le tampon.
! 85:
! 86: (*l_element_courant).donnee = NULL;
! 87: (*l_element_courant).suivant = (*s_etat_processus).pile_tampon;
! 88: (*s_etat_processus).pile_tampon = l_element_courant;
! 89: (*s_etat_processus).taille_pile_tampon++;
! 90:
! 91: l_element_courant = l_element_suivant;
! 92: }
! 93:
! 94: (*s_etat_processus).l_base_pile = NULL;
! 95: (*s_etat_processus).hauteur_pile_operationnelle = 0;
! 96:
! 97: return;
! 98: }
! 99:
! 100:
! 101: /*
! 102: ================================================================================
! 103: Fonction 'cllcd' (efface la sortie graphique)
! 104: ================================================================================
! 105: Entrées : structure processus
! 106: --------------------------------------------------------------------------------
! 107: Sorties :
! 108: --------------------------------------------------------------------------------
! 109: Effets de bord : néant
! 110: ================================================================================
! 111: */
! 112:
! 113: void
! 114: instruction_cllcd(struct_processus *s_etat_processus)
! 115: {
! 116: struct_fichier_graphique *l_element_precedent;
! 117:
! 118: struct_marque *marque;
! 119: struct_marque *prochaine_marque;
! 120:
! 121: (*s_etat_processus).erreur_execution = d_ex;
! 122:
! 123: if ((*s_etat_processus).affichage_arguments == 'Y')
! 124: {
! 125: printf("\n CLLCD ");
! 126:
! 127: if ((*s_etat_processus).langue == 'F')
! 128: {
! 129: printf("(efface la file graphique)\n\n");
! 130: printf(" Aucun argument\n");
! 131: }
! 132: else
! 133: {
! 134: printf("(erase the graphical queue)\n\n");
! 135: printf(" No argument\n");
! 136: }
! 137:
! 138: return;
! 139: }
! 140: else if ((*s_etat_processus).test_instruction == 'Y')
! 141: {
! 142: (*s_etat_processus).nombre_arguments = -1;
! 143: return;
! 144: }
! 145:
! 146: if (test_cfsf(s_etat_processus, 31) == d_vrai)
! 147: {
! 148: if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
! 149: {
! 150: return;
! 151: }
! 152: }
! 153:
! 154: while((*s_etat_processus).fichiers_graphiques != NULL)
! 155: {
! 156: if (destruction_fichier((*(*s_etat_processus).fichiers_graphiques).nom)
! 157: == d_erreur)
! 158: {
! 159: (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
! 160: return;
! 161: }
! 162:
! 163: free((*(*s_etat_processus).fichiers_graphiques).nom);
! 164:
! 165: if ((*(*s_etat_processus).fichiers_graphiques).legende != NULL)
! 166: {
! 167: free((*(*s_etat_processus).fichiers_graphiques).legende);
! 168: }
! 169:
! 170: l_element_precedent = (*s_etat_processus).fichiers_graphiques;
! 171: (*s_etat_processus).fichiers_graphiques =
! 172: (*(*s_etat_processus).fichiers_graphiques).suivant;
! 173:
! 174: free(l_element_precedent);
! 175: }
! 176:
! 177: if ((*s_etat_processus).entree_standard != NULL)
! 178: {
! 179: if (fprintf((*s_etat_processus).entree_standard, "quit\n") < 0)
! 180: {
! 181: (*s_etat_processus).erreur_systeme = d_es_processus;
! 182: return;
! 183: }
! 184:
! 185: if (fflush((*s_etat_processus).entree_standard) != 0)
! 186: {
! 187: (*s_etat_processus).erreur_systeme = d_es_processus;
! 188: return;
! 189: }
! 190:
! 191: if (pclose((*s_etat_processus).entree_standard) == -1)
! 192: {
! 193: (*s_etat_processus).erreur_systeme = d_es_processus;
! 194: return;
! 195: }
! 196:
! 197: (*s_etat_processus).entree_standard = NULL;
! 198: }
! 199:
! 200: free((*s_etat_processus).titre);
! 201: free((*s_etat_processus).legende);
! 202: free((*s_etat_processus).label_x);
! 203: free((*s_etat_processus).label_y);
! 204: free((*s_etat_processus).label_z);
! 205:
! 206: (*s_etat_processus).titre = malloc(sizeof(unsigned char));
! 207: (*s_etat_processus).label_x = malloc(sizeof(unsigned char));
! 208: (*s_etat_processus).label_y = malloc(sizeof(unsigned char));
! 209: (*s_etat_processus).label_z = malloc(sizeof(unsigned char));
! 210: (*s_etat_processus).legende = malloc(sizeof(unsigned char));
! 211:
! 212: if (((*s_etat_processus).titre == NULL) ||
! 213: ((*s_etat_processus).legende == NULL) ||
! 214: ((*s_etat_processus).label_x == NULL) ||
! 215: ((*s_etat_processus).label_y == NULL) ||
! 216: ((*s_etat_processus).label_z == NULL))
! 217: {
! 218: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 219: return;
! 220: }
! 221:
! 222: (*s_etat_processus).titre[0] = d_code_fin_chaine;
! 223: (*s_etat_processus).label_x[0] = d_code_fin_chaine;
! 224: (*s_etat_processus).label_y[0] = d_code_fin_chaine;
! 225: (*s_etat_processus).label_z[0] = d_code_fin_chaine;
! 226: (*s_etat_processus).legende[0] = d_code_fin_chaine;
! 227:
! 228: marque = (*s_etat_processus).s_marques;
! 229:
! 230: while(marque != NULL)
! 231: {
! 232: free((*marque).position);
! 233: free((*marque).label);
! 234: prochaine_marque = (*marque).suivant;
! 235: free(marque);
! 236: marque = prochaine_marque;
! 237: }
! 238:
! 239: (*s_etat_processus).s_marques = NULL;
! 240:
! 241: return;
! 242: }
! 243:
! 244:
! 245: /*
! 246: ================================================================================
! 247: Fonction 'cf'
! 248: ================================================================================
! 249: Entrées : structure processus
! 250: --------------------------------------------------------------------------------
! 251: Sorties :
! 252: --------------------------------------------------------------------------------
! 253: Effets de bord : néant
! 254: ================================================================================
! 255: */
! 256:
! 257: void
! 258: instruction_cf(struct_processus *s_etat_processus)
! 259: {
! 260: struct_objet *s_objet;
! 261:
! 262: (*s_etat_processus).erreur_execution = d_ex;
! 263:
! 264: if ((*s_etat_processus).affichage_arguments == 'Y')
! 265: {
! 266: printf("\n CF ");
! 267:
! 268: if ((*s_etat_processus).langue == 'F')
! 269: {
! 270: printf("(efface un indicateur binaire)\n\n");
! 271: }
! 272: else
! 273: {
! 274: printf("(clear flag)\n\n");
! 275: }
! 276:
! 277: printf(" 1: 1 <= %s <= 64\n", d_INT);
! 278:
! 279: return;
! 280: }
! 281: else if ((*s_etat_processus).test_instruction == 'Y')
! 282: {
! 283: (*s_etat_processus).nombre_arguments = -1;
! 284: return;
! 285: }
! 286:
! 287: if (test_cfsf(s_etat_processus, 31) == d_vrai)
! 288: {
! 289: if (empilement_pile_last(s_etat_processus, 1) == d_erreur)
! 290: {
! 291: return;
! 292: }
! 293: }
! 294:
! 295: if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
! 296: &s_objet) == d_erreur)
! 297: {
! 298: (*s_etat_processus).erreur_execution = d_ex_manque_argument;
! 299: return;
! 300: }
! 301:
! 302: if ((*s_objet).type == INT)
! 303: {
! 304: if (((*((integer8 *) (*s_objet).objet)) < 1) || ((*((integer8 *)
! 305: (*s_objet).objet)) > 64))
! 306: {
! 307: liberation(s_etat_processus, s_objet);
! 308:
! 309: (*s_etat_processus).erreur_execution = d_ex_drapeau_inexistant;
! 310: return;
! 311: }
! 312:
! 313: cf(s_etat_processus, (unsigned char) (*((integer8 *)
! 314: (*s_objet).objet)));
! 315: }
! 316: else
! 317: {
! 318: liberation(s_etat_processus, s_objet);
! 319:
! 320: (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
! 321: return;
! 322: }
! 323:
! 324: liberation(s_etat_processus, s_objet);
! 325:
! 326: return;
! 327: }
! 328:
! 329:
! 330: /*
! 331: ================================================================================
! 332: Fonction 'ceil'
! 333: ================================================================================
! 334: Entrées :
! 335: --------------------------------------------------------------------------------
! 336: Sorties :
! 337: --------------------------------------------------------------------------------
! 338: Effets de bord : néant
! 339: ================================================================================
! 340: */
! 341:
! 342: void
! 343: instruction_ceil(struct_processus *s_etat_processus)
! 344: {
! 345: struct_liste_chainee *l_element_courant;
! 346: struct_liste_chainee *l_element_precedent;
! 347:
! 348: struct_objet *s_copie_argument;
! 349: struct_objet *s_objet_argument;
! 350: struct_objet *s_objet_resultat;
! 351:
! 352: (*s_etat_processus).erreur_execution = d_ex;
! 353:
! 354: if ((*s_etat_processus).affichage_arguments == 'Y')
! 355: {
! 356: printf("\n CEIL ");
! 357:
! 358: if ((*s_etat_processus).langue == 'F')
! 359: {
! 360: printf("(entier supérieur)\n\n");
! 361: }
! 362: else
! 363: {
! 364: printf("(ceil)\n\n");
! 365: }
! 366:
! 367: printf(" 1: %s\n", d_INT);
! 368: printf("-> 1: %s\n\n", d_INT);
! 369:
! 370: printf(" 1: %s\n", d_REL);
! 371: printf("-> 1: %s\n\n", d_REL);
! 372:
! 373: printf(" 1: %s, %s\n", d_NOM, d_ALG);
! 374: printf("-> 1: %s\n\n", d_ALG);
! 375:
! 376: printf(" 1: %s\n", d_RPN);
! 377: printf("-> 1: %s\n", d_RPN);
! 378:
! 379: return;
! 380: }
! 381: else if ((*s_etat_processus).test_instruction == 'Y')
! 382: {
! 383: (*s_etat_processus).nombre_arguments = 1;
! 384: return;
! 385: }
! 386:
! 387: if (test_cfsf(s_etat_processus, 31) == d_vrai)
! 388: {
! 389: if (empilement_pile_last(s_etat_processus, 1) == d_erreur)
! 390: {
! 391: return;
! 392: }
! 393: }
! 394:
! 395: if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
! 396: &s_objet_argument) == d_erreur)
! 397: {
! 398: (*s_etat_processus).erreur_execution = d_ex_manque_argument;
! 399: return;
! 400: }
! 401:
! 402: /*
! 403: --------------------------------------------------------------------------------
! 404: Plafond d'un entier
! 405: --------------------------------------------------------------------------------
! 406: */
! 407:
! 408: if ((*s_objet_argument).type == INT)
! 409: {
! 410: s_objet_resultat = s_objet_argument;
! 411: s_objet_argument = NULL;
! 412: }
! 413:
! 414: /*
! 415: --------------------------------------------------------------------------------
! 416: Plafond d'un réel
! 417: --------------------------------------------------------------------------------
! 418: */
! 419:
! 420: else if ((*s_objet_argument).type == REL)
! 421: {
! 422: if ((s_objet_resultat = allocation(s_etat_processus, INT)) == NULL)
! 423: {
! 424: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 425: return;
! 426: }
! 427:
! 428: (*((integer8 *) (*s_objet_resultat).objet)) =
! 429: ceil((*((real8 *) (*s_objet_argument).objet)));
! 430:
! 431: if (!(((((*((integer8 *) (*s_objet_resultat).objet)) - 1) <
! 432: (*((real8 *) (*s_objet_argument).objet))) && ((*((integer8 *)
! 433: (*s_objet_resultat).objet)) > (*((real8 *) (*s_objet_argument)
! 434: .objet))))))
! 435: {
! 436: free((*s_objet_resultat).objet);
! 437:
! 438: if (((*s_objet_resultat).objet = malloc(sizeof(real8))) == NULL)
! 439: {
! 440: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 441: return;
! 442: }
! 443:
! 444: (*s_objet_resultat).type = REL;
! 445: (*((real8 *) (*s_objet_resultat).objet)) =
! 446: ceil((*((real8 *) (*s_objet_argument).objet)));
! 447: }
! 448: }
! 449:
! 450: /*
! 451: --------------------------------------------------------------------------------
! 452: Plafond d'un nom
! 453: --------------------------------------------------------------------------------
! 454: */
! 455:
! 456: else if ((*s_objet_argument).type == NOM)
! 457: {
! 458: if ((s_objet_resultat = allocation(s_etat_processus, ALG)) == NULL)
! 459: {
! 460: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 461: return;
! 462: }
! 463:
! 464: if (((*s_objet_resultat).objet =
! 465: allocation_maillon(s_etat_processus)) == NULL)
! 466: {
! 467: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 468: return;
! 469: }
! 470:
! 471: l_element_courant = (*s_objet_resultat).objet;
! 472:
! 473: if (((*l_element_courant).donnee =
! 474: allocation(s_etat_processus, FCT)) == NULL)
! 475: {
! 476: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 477: return;
! 478: }
! 479:
! 480: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 481: .nombre_arguments = 0;
! 482: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 483: .fonction = instruction_vers_niveau_superieur;
! 484:
! 485: if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 486: .nom_fonction = malloc(3 * sizeof(unsigned char))) == NULL)
! 487: {
! 488: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 489: return;
! 490: }
! 491:
! 492: strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 493: .nom_fonction, "<<");
! 494:
! 495: if (((*l_element_courant).suivant =
! 496: allocation_maillon(s_etat_processus)) == NULL)
! 497: {
! 498: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 499: return;
! 500: }
! 501:
! 502: l_element_courant = (*l_element_courant).suivant;
! 503: (*l_element_courant).donnee = s_objet_argument;
! 504:
! 505: if (((*l_element_courant).suivant =
! 506: allocation_maillon(s_etat_processus)) == NULL)
! 507: {
! 508: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 509: return;
! 510: }
! 511:
! 512: l_element_courant = (*l_element_courant).suivant;
! 513:
! 514: if (((*l_element_courant).donnee =
! 515: allocation(s_etat_processus, FCT)) == NULL)
! 516: {
! 517: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 518: return;
! 519: }
! 520:
! 521: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 522: .nombre_arguments = 1;
! 523: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 524: .fonction = instruction_ceil;
! 525:
! 526: if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 527: .nom_fonction = malloc(5 * sizeof(unsigned char))) == NULL)
! 528: {
! 529: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 530: return;
! 531: }
! 532:
! 533: strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 534: .nom_fonction, "CEIL");
! 535:
! 536: if (((*l_element_courant).suivant =
! 537: allocation_maillon(s_etat_processus)) == NULL)
! 538: {
! 539: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 540: return;
! 541: }
! 542:
! 543: l_element_courant = (*l_element_courant).suivant;
! 544:
! 545: if (((*l_element_courant).donnee =
! 546: allocation(s_etat_processus, FCT)) == NULL)
! 547: {
! 548: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 549: return;
! 550: }
! 551:
! 552: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 553: .nombre_arguments = 0;
! 554: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 555: .fonction = instruction_vers_niveau_inferieur;
! 556:
! 557: if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 558: .nom_fonction = malloc(3 * sizeof(unsigned char))) == NULL)
! 559: {
! 560: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 561: return;
! 562: }
! 563:
! 564: strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 565: .nom_fonction, ">>");
! 566:
! 567: (*l_element_courant).suivant = NULL;
! 568: s_objet_argument = NULL;
! 569: }
! 570:
! 571: /*
! 572: --------------------------------------------------------------------------------
! 573: Plafond d'une expression
! 574: --------------------------------------------------------------------------------
! 575: */
! 576:
! 577: else if (((*s_objet_argument).type == ALG) ||
! 578: ((*s_objet_argument).type == RPN))
! 579: {
! 580: if ((s_copie_argument = copie_objet(s_etat_processus,
! 581: s_objet_argument, 'N')) == NULL)
! 582: {
! 583: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 584: return;
! 585: }
! 586:
! 587: l_element_courant = (struct_liste_chainee *)
! 588: (*s_copie_argument).objet;
! 589: l_element_precedent = l_element_courant;
! 590:
! 591: while((*l_element_courant).suivant != NULL)
! 592: {
! 593: l_element_precedent = l_element_courant;
! 594: l_element_courant = (*l_element_courant).suivant;
! 595: }
! 596:
! 597: if (((*l_element_precedent).suivant =
! 598: allocation_maillon(s_etat_processus)) == NULL)
! 599: {
! 600: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 601: return;
! 602: }
! 603:
! 604: if (((*(*l_element_precedent).suivant).donnee =
! 605: allocation(s_etat_processus, FCT)) == NULL)
! 606: {
! 607: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 608: return;
! 609: }
! 610:
! 611: (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
! 612: .donnee).objet)).nombre_arguments = 1;
! 613: (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
! 614: .donnee).objet)).fonction = instruction_ceil;
! 615:
! 616: if (((*((struct_fonction *) (*(*(*l_element_precedent)
! 617: .suivant).donnee).objet)).nom_fonction =
! 618: malloc(5 * sizeof(unsigned char))) == NULL)
! 619: {
! 620: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 621: return;
! 622: }
! 623:
! 624: strcpy((*((struct_fonction *) (*(*(*l_element_precedent)
! 625: .suivant).donnee).objet)).nom_fonction, "CEIL");
! 626:
! 627: (*(*l_element_precedent).suivant).suivant = l_element_courant;
! 628:
! 629: s_objet_resultat = s_copie_argument;
! 630: }
! 631:
! 632: /*
! 633: --------------------------------------------------------------------------------
! 634: Fonction ceil impossible à réaliser
! 635: --------------------------------------------------------------------------------
! 636: */
! 637:
! 638: else
! 639: {
! 640: liberation(s_etat_processus, s_objet_argument);
! 641:
! 642: (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
! 643: return;
! 644: }
! 645:
! 646: if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
! 647: s_objet_resultat) == d_erreur)
! 648: {
! 649: return;
! 650: }
! 651:
! 652: liberation(s_etat_processus, s_objet_argument);
! 653:
! 654: return;
! 655: }
! 656:
! 657:
! 658: /*
! 659: ================================================================================
! 660: Fonction 'case'
! 661: ================================================================================
! 662: Entrées :
! 663: --------------------------------------------------------------------------------
! 664: Sorties :
! 665: --------------------------------------------------------------------------------
! 666: Effets de bord : néant
! 667: ================================================================================
! 668: */
! 669:
! 670: void
! 671: instruction_case(struct_processus *s_etat_processus)
! 672: {
! 673: struct_objet *s_objet;
! 674:
! 675: (*s_etat_processus).erreur_execution = d_ex;
! 676:
! 677: if ((*s_etat_processus).affichage_arguments == 'Y')
! 678: {
! 679: printf("\n CASE ");
! 680:
! 681: if ((*s_etat_processus).langue == 'F')
! 682: {
! 683: printf("(structure de contrôle)\n\n");
! 684: printf(" Utilisation :\n\n");
! 685: }
! 686: else
! 687: {
! 688: printf("(control statement)\n\n");
! 689: printf(" Usage:\n\n");
! 690: }
! 691:
! 692: printf(" SELECT (expression test)\n");
! 693: printf(" CASE (clause 1) THEN (expression 1) END\n");
! 694: printf(" CASE (clause 2) THEN (expression 2) END\n");
! 695: printf(" ...\n");
! 696: printf(" CASE (clause n) THEN (expression n) END\n");
! 697: printf(" DEFAULT\n");
! 698: printf(" (expression)\n");
! 699: printf(" END\n\n");
! 700:
! 701: printf(" SELECT (expression test)\n");
! 702: printf(" CASE (clause 1) THEN (expression 1) END\n");
! 703: printf(" (expression)\n");
! 704: printf(" CASE (clause 2) THEN (expression 2) END\n");
! 705: printf(" END\n");
! 706:
! 707: return;
! 708: }
! 709: else if ((*s_etat_processus).test_instruction == 'Y')
! 710: {
! 711: (*s_etat_processus).nombre_arguments = -1;
! 712: return;
! 713: }
! 714:
! 715: if ((*(*s_etat_processus).l_base_pile_systeme).clause == 'S')
! 716: {
! 717:
! 718: /*
! 719: * Première apparition de l'instruction CASE dans la structure de test.
! 720: */
! 721:
! 722: if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
! 723: &s_objet) == d_erreur)
! 724: {
! 725: (*s_etat_processus).erreur_execution = d_ex_manque_argument;
! 726: return;
! 727: }
! 728:
! 729: (*(*s_etat_processus).l_base_pile_systeme).objet_de_test = s_objet;
! 730: (*(*s_etat_processus).l_base_pile_systeme).clause = 'K';
! 731: }
! 732:
! 733: if ((s_objet = copie_objet(s_etat_processus,
! 734: (*(*s_etat_processus).l_base_pile_systeme)
! 735: .objet_de_test, 'P')) == NULL)
! 736: {
! 737: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 738: return;
! 739: }
! 740:
! 741: if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
! 742: s_objet) == d_erreur)
! 743: {
! 744: return;
! 745: }
! 746:
! 747: return;
! 748: }
! 749:
! 750:
! 751: /*
! 752: ================================================================================
! 753: Fonction 'c->r'
! 754: ================================================================================
! 755: Entrées : structure processus
! 756: --------------------------------------------------------------------------------
! 757: Sorties :
! 758: --------------------------------------------------------------------------------
! 759: Effets de bord : néant
! 760: ================================================================================
! 761: */
! 762:
! 763: void
! 764: instruction_c_vers_r(struct_processus *s_etat_processus)
! 765: {
! 766: struct_objet *s_objet_argument;
! 767: struct_objet *s_objet_resultat_1;
! 768: struct_objet *s_objet_resultat_2;
! 769:
! 770: unsigned long i;
! 771: unsigned long j;
! 772:
! 773: (*s_etat_processus).erreur_execution = d_ex;
! 774:
! 775: if ((*s_etat_processus).affichage_arguments == 'Y')
! 776: {
! 777: printf("\n C->R ");
! 778:
! 779: if ((*s_etat_processus).langue == 'F')
! 780: {
! 781: printf("(complexe vers réel)\n\n");
! 782: }
! 783: else
! 784: {
! 785: printf("(complex to real)\n\n");
! 786: }
! 787:
! 788: printf(" 1: %s\n", d_CPL);
! 789: printf("-> 2: %s\n", d_REL);
! 790: printf(" 1: %s\n\n", d_REL);
! 791:
! 792: printf(" 1: %s\n", d_VCX);
! 793: printf("-> 2: %s\n", d_VRL);
! 794: printf(" 1: %s\n\n", d_VRL);
! 795:
! 796: printf(" 1: %s\n", d_MCX);
! 797: printf("-> 2: %s\n", d_MRL);
! 798: printf(" 1: %s\n", d_MRL);
! 799:
! 800: return;
! 801: }
! 802: else if ((*s_etat_processus).test_instruction == 'Y')
! 803: {
! 804: (*s_etat_processus).nombre_arguments = -1;
! 805: return;
! 806: }
! 807:
! 808: if (test_cfsf(s_etat_processus, 31) == d_vrai)
! 809: {
! 810: if (empilement_pile_last(s_etat_processus, 1) == d_erreur)
! 811: {
! 812: return;
! 813: }
! 814: }
! 815:
! 816: if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
! 817: &s_objet_argument) == d_erreur)
! 818: {
! 819: (*s_etat_processus).erreur_execution = d_ex_manque_argument;
! 820: return;
! 821: }
! 822:
! 823: /*
! 824: --------------------------------------------------------------------------------
! 825: Eclatement d'un complexe
! 826: --------------------------------------------------------------------------------
! 827: */
! 828:
! 829: if ((*s_objet_argument).type == CPL)
! 830: {
! 831: if ((s_objet_resultat_1 = allocation(s_etat_processus, REL))
! 832: == NULL)
! 833: {
! 834: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 835: return;
! 836: }
! 837:
! 838: if ((s_objet_resultat_2 = allocation(s_etat_processus, REL))
! 839: == NULL)
! 840: {
! 841: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 842: return;
! 843: }
! 844:
! 845: (*((real8 *) (*s_objet_resultat_1).objet)) =
! 846: (*((struct_complexe16 *) (*s_objet_argument).objet))
! 847: .partie_imaginaire;
! 848:
! 849: (*((real8 *) (*s_objet_resultat_2).objet)) =
! 850: (*((struct_complexe16 *) (*s_objet_argument).objet))
! 851: .partie_reelle;
! 852: }
! 853:
! 854: /*
! 855: --------------------------------------------------------------------------------
! 856: Eclatement d'un vecteur
! 857: --------------------------------------------------------------------------------
! 858: */
! 859:
! 860: else if ((*s_objet_argument).type == VCX)
! 861: {
! 862: if ((s_objet_resultat_1 = allocation(s_etat_processus, VRL))
! 863: == NULL)
! 864: {
! 865: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 866: return;
! 867: }
! 868:
! 869: if ((s_objet_resultat_2 = allocation(s_etat_processus, VRL))
! 870: == NULL)
! 871: {
! 872: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 873: return;
! 874: }
! 875:
! 876: if (((*((struct_vecteur *) (*s_objet_resultat_1).objet)).tableau =
! 877: malloc((*(((struct_vecteur *) (*s_objet_argument)
! 878: .objet))).taille * sizeof(real8))) == NULL)
! 879: {
! 880: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 881: return;
! 882: }
! 883:
! 884: if (((*((struct_vecteur *) (*s_objet_resultat_2).objet)).tableau =
! 885: malloc((*(((struct_vecteur *) (*s_objet_argument)
! 886: .objet))).taille * sizeof(real8))) == NULL)
! 887: {
! 888: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 889: return;
! 890: }
! 891:
! 892: (*((struct_vecteur *) (*s_objet_resultat_1).objet)).taille =
! 893: (*(((struct_vecteur *) (*s_objet_argument).objet))).taille;
! 894: (*((struct_vecteur *) (*s_objet_resultat_2).objet)).taille =
! 895: (*(((struct_vecteur *) (*s_objet_argument).objet))).taille;
! 896:
! 897: for(i = 0; i < (*(((struct_vecteur *) (*s_objet_argument).objet)))
! 898: .taille; i++)
! 899: {
! 900: ((real8 *) (*((struct_vecteur *) (*s_objet_resultat_1).objet))
! 901: .tableau)[i] = ((struct_complexe16 *) (*((struct_vecteur *)
! 902: (*s_objet_argument).objet)).tableau)[i].partie_imaginaire;
! 903:
! 904: ((real8 *) (*((struct_vecteur *) (*s_objet_resultat_2).objet))
! 905: .tableau)[i] = ((struct_complexe16 *) (*((struct_vecteur *)
! 906: (*s_objet_argument).objet)).tableau)[i].partie_reelle;
! 907: }
! 908: }
! 909:
! 910: /*
! 911: --------------------------------------------------------------------------------
! 912: Eclatement d'une matrice
! 913: --------------------------------------------------------------------------------
! 914: */
! 915:
! 916: else if ((*s_objet_argument).type == MCX)
! 917: {
! 918: if ((s_objet_resultat_1 = allocation(s_etat_processus, MRL))
! 919: == NULL)
! 920: {
! 921: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 922: return;
! 923: }
! 924:
! 925: if ((s_objet_resultat_2 = allocation(s_etat_processus, MRL))
! 926: == NULL)
! 927: {
! 928: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 929: return;
! 930: }
! 931:
! 932: if (((*((struct_matrice *) (*s_objet_resultat_1).objet)).tableau =
! 933: malloc((*(((struct_matrice *) (*s_objet_argument)
! 934: .objet))).nombre_lignes * sizeof(real8 *))) == NULL)
! 935: {
! 936: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 937: return;
! 938: }
! 939:
! 940: if (((*((struct_matrice *) (*s_objet_resultat_2).objet)).tableau =
! 941: malloc((*(((struct_matrice *) (*s_objet_argument)
! 942: .objet))).nombre_lignes * sizeof(real8 *))) == NULL)
! 943: {
! 944: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 945: return;
! 946: }
! 947:
! 948: (*((struct_matrice *) (*s_objet_resultat_1).objet)).nombre_lignes =
! 949: (*((struct_matrice *) (*s_objet_argument).objet)).nombre_lignes;
! 950: (*((struct_matrice *) (*s_objet_resultat_2).objet)).nombre_lignes =
! 951: (*((struct_matrice *) (*s_objet_argument).objet)).nombre_lignes;
! 952: (*((struct_matrice *) (*s_objet_resultat_1).objet)).nombre_colonnes =
! 953: (*((struct_matrice *) (*s_objet_argument).objet))
! 954: .nombre_colonnes;
! 955: (*((struct_matrice *) (*s_objet_resultat_2).objet)).nombre_colonnes =
! 956: (*((struct_matrice *) (*s_objet_argument).objet))
! 957: .nombre_colonnes;
! 958:
! 959: for(i = 0; i < (*(((struct_matrice *) (*s_objet_argument).objet)))
! 960: .nombre_lignes; i++)
! 961: {
! 962: if ((((real8 **) (*((struct_matrice *) (*s_objet_resultat_1)
! 963: .objet)).tableau)[i] = malloc(
! 964: (*(((struct_matrice *) (*s_objet_argument).objet)))
! 965: .nombre_colonnes * sizeof(real8))) == NULL)
! 966: {
! 967: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 968: return;
! 969: }
! 970:
! 971: if ((((real8 **) (*((struct_matrice *) (*s_objet_resultat_2)
! 972: .objet)).tableau)[i] = malloc(
! 973: (*(((struct_matrice *) (*s_objet_argument).objet)))
! 974: .nombre_colonnes * sizeof(real8))) == NULL)
! 975: {
! 976: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 977: return;
! 978: }
! 979:
! 980: for(j = 0; j < (*(((struct_matrice *) (*s_objet_argument).objet)))
! 981: .nombre_colonnes; j++)
! 982: {
! 983: ((real8 **) (*((struct_matrice *) (*s_objet_resultat_1).objet))
! 984: .tableau)[i][j] = ((struct_complexe16 **)
! 985: (*((struct_matrice *) (*s_objet_argument).objet))
! 986: .tableau)[i][j].partie_imaginaire;
! 987:
! 988: ((real8 **) (*((struct_matrice *) (*s_objet_resultat_2).objet))
! 989: .tableau)[i][j] = ((struct_complexe16 **)
! 990: (*((struct_matrice *) (*s_objet_argument).objet))
! 991: .tableau)[i][j].partie_reelle;
! 992: }
! 993: }
! 994: }
! 995:
! 996: /*
! 997: --------------------------------------------------------------------------------
! 998: Eclatement impossible
! 999: --------------------------------------------------------------------------------
! 1000: */
! 1001:
! 1002: else
! 1003: {
! 1004: liberation(s_etat_processus, s_objet_argument);
! 1005:
! 1006: (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
! 1007: return;
! 1008: }
! 1009:
! 1010: liberation(s_etat_processus, s_objet_argument);
! 1011:
! 1012: if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
! 1013: s_objet_resultat_2) == d_erreur)
! 1014: {
! 1015: return;
! 1016: }
! 1017:
! 1018: if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
! 1019: s_objet_resultat_1) == d_erreur)
! 1020: {
! 1021: return;
! 1022: }
! 1023:
! 1024: return;
! 1025: }
! 1026:
! 1027:
! 1028: /*
! 1029: ================================================================================
! 1030: Fonction 'conj'
! 1031: ================================================================================
! 1032: Entrées :
! 1033: --------------------------------------------------------------------------------
! 1034: Sorties :
! 1035: --------------------------------------------------------------------------------
! 1036: Effets de bord : néant
! 1037: ================================================================================
! 1038: */
! 1039:
! 1040: void
! 1041: instruction_conj(struct_processus *s_etat_processus)
! 1042: {
! 1043: struct_liste_chainee *l_element_courant;
! 1044: struct_liste_chainee *l_element_precedent;
! 1045:
! 1046: struct_objet *s_copie_argument;
! 1047: struct_objet *s_objet_argument;
! 1048: struct_objet *s_objet_resultat;
! 1049:
! 1050: unsigned long i;
! 1051: unsigned long j;
! 1052:
! 1053: (*s_etat_processus).erreur_execution = d_ex;
! 1054:
! 1055: if ((*s_etat_processus).affichage_arguments == 'Y')
! 1056: {
! 1057: printf("\n CONJ ");
! 1058:
! 1059: if ((*s_etat_processus).langue == 'F')
! 1060: {
! 1061: printf("(conjugaison)\n\n");
! 1062: }
! 1063: else
! 1064: {
! 1065: printf("(conjugated)\n\n");
! 1066: }
! 1067:
! 1068: printf(" 1: %s\n", d_INT);
! 1069: printf("-> 1: %s\n\n", d_INT);
! 1070:
! 1071: printf(" 1: %s\n", d_REL);
! 1072: printf("-> 1: %s\n\n", d_REL);
! 1073:
! 1074: printf(" 1: %s\n", d_CPL);
! 1075: printf("-> 1: %s\n\n", d_CPL);
! 1076:
! 1077: printf(" 1: %s\n", d_VIN);
! 1078: printf("-> 1: %s\n\n", d_VIN);
! 1079:
! 1080: printf(" 1: %s\n", d_VRL);
! 1081: printf("-> 1: %s\n\n", d_VRL);
! 1082:
! 1083: printf(" 1: %s\n", d_VCX);
! 1084: printf("-> 1: %s\n\n", d_VCX);
! 1085:
! 1086: printf(" 1: %s\n", d_MIN);
! 1087: printf("-> 1: %s\n\n", d_MIN);
! 1088:
! 1089: printf(" 1: %s\n", d_MRL);
! 1090: printf("-> 1: %s\n\n", d_MRL);
! 1091:
! 1092: printf(" 1: %s\n", d_MCX);
! 1093: printf("-> 1: %s\n\n", d_MCX);
! 1094:
! 1095: printf(" 1: %s, %s\n", d_NOM, d_ALG);
! 1096: printf("-> 1: %s\n\n", d_ALG);
! 1097:
! 1098: printf(" 1: %s\n", d_RPN);
! 1099: printf("-> 1: %s\n", d_RPN);
! 1100:
! 1101: return;
! 1102: }
! 1103: else if ((*s_etat_processus).test_instruction == 'Y')
! 1104: {
! 1105: (*s_etat_processus).nombre_arguments = 1;
! 1106: return;
! 1107: }
! 1108:
! 1109: if (test_cfsf(s_etat_processus, 31) == d_vrai)
! 1110: {
! 1111: if (empilement_pile_last(s_etat_processus, 1) == d_erreur)
! 1112: {
! 1113: return;
! 1114: }
! 1115: }
! 1116:
! 1117: if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
! 1118: &s_objet_argument) == d_erreur)
! 1119: {
! 1120: (*s_etat_processus).erreur_execution = d_ex_manque_argument;
! 1121: return;
! 1122: }
! 1123:
! 1124: /*
! 1125: --------------------------------------------------------------------------------
! 1126: Conjugué d'un entier ou d'un réel
! 1127: --------------------------------------------------------------------------------
! 1128: */
! 1129:
! 1130: if (((*s_objet_argument).type == INT) ||
! 1131: ((*s_objet_argument).type == REL))
! 1132: {
! 1133: s_objet_resultat = s_objet_argument;
! 1134: s_objet_argument = NULL;
! 1135: }
! 1136:
! 1137: /*
! 1138: --------------------------------------------------------------------------------
! 1139: Conjugué d'un complexe
! 1140: --------------------------------------------------------------------------------
! 1141: */
! 1142:
! 1143: else if ((*s_objet_argument).type == CPL)
! 1144: {
! 1145: (*((struct_complexe16 *) (*s_objet_argument).objet)).partie_reelle =
! 1146: (*((struct_complexe16 *) (*s_objet_argument).objet))
! 1147: .partie_reelle;
! 1148: (*((struct_complexe16 *) (*s_objet_argument).objet)).partie_imaginaire =
! 1149: -(*((struct_complexe16 *) (*s_objet_argument).objet))
! 1150: .partie_imaginaire;
! 1151:
! 1152: s_objet_resultat = s_objet_argument;
! 1153: s_objet_argument = NULL;
! 1154: }
! 1155:
! 1156: /*
! 1157: --------------------------------------------------------------------------------
! 1158: Conjugué d'un vecteur d'entiers ou de réels
! 1159: --------------------------------------------------------------------------------
! 1160: */
! 1161:
! 1162: else if (((*s_objet_argument).type == VIN) ||
! 1163: ((*s_objet_argument).type == VRL))
! 1164: {
! 1165: s_objet_resultat = s_objet_argument;
! 1166: s_objet_argument = NULL;
! 1167: }
! 1168:
! 1169: /*
! 1170: --------------------------------------------------------------------------------
! 1171: Conjugué d'un vecteur de complexes
! 1172: --------------------------------------------------------------------------------
! 1173: */
! 1174:
! 1175: else if ((*s_objet_argument).type == VCX)
! 1176: {
! 1177: for(i = 0; i < (*(((struct_vecteur *) (*s_objet_argument).objet)))
! 1178: .taille; i++)
! 1179: {
! 1180: ((struct_complexe16 *) (*(((struct_vecteur *) (*s_objet_argument)
! 1181: .objet))).tableau)[i].partie_reelle =
! 1182: ((struct_complexe16 *) (*(((struct_vecteur *)
! 1183: (*s_objet_argument).objet))).tableau)[i].partie_reelle;
! 1184: ((struct_complexe16 *) (*(((struct_vecteur *) (*s_objet_argument)
! 1185: .objet))).tableau)[i].partie_imaginaire =
! 1186: -((struct_complexe16 *) (*(((struct_vecteur *)
! 1187: (*s_objet_argument).objet))).tableau)[i].partie_imaginaire;
! 1188: }
! 1189:
! 1190: s_objet_resultat = s_objet_argument;
! 1191: s_objet_argument = NULL;
! 1192: }
! 1193:
! 1194: /*
! 1195: --------------------------------------------------------------------------------
! 1196: Conjuguée d'une matrice d'entiers ou de réels
! 1197: --------------------------------------------------------------------------------
! 1198: */
! 1199:
! 1200: else if (((*s_objet_argument).type == MIN) ||
! 1201: ((*s_objet_argument).type == MRL))
! 1202: {
! 1203: s_objet_resultat = s_objet_argument;
! 1204: s_objet_argument = NULL;
! 1205: }
! 1206:
! 1207: /*
! 1208: --------------------------------------------------------------------------------
! 1209: Conjuguée d'une matrice de complexes
! 1210: --------------------------------------------------------------------------------
! 1211: */
! 1212:
! 1213: else if ((*s_objet_argument).type == MCX)
! 1214: {
! 1215: for(i = 0; i < (*(((struct_matrice *) (*s_objet_argument).objet)))
! 1216: .nombre_lignes; i++)
! 1217: {
! 1218: for(j = 0; j < (*(((struct_matrice *) (*s_objet_argument).objet)))
! 1219: .nombre_colonnes; j++)
! 1220: {
! 1221: ((struct_complexe16 **) (*(((struct_matrice *)
! 1222: (*s_objet_argument).objet))).tableau)[i][j]
! 1223: .partie_reelle = ((struct_complexe16 **)
! 1224: (*(((struct_matrice *) (*s_objet_argument).objet)))
! 1225: .tableau)[i][j].partie_reelle;
! 1226: ((struct_complexe16 **) (*(((struct_matrice *)
! 1227: (*s_objet_argument).objet))).tableau)[i][j]
! 1228: .partie_imaginaire = -((struct_complexe16 **)
! 1229: (*(((struct_matrice *) (*s_objet_argument).objet)))
! 1230: .tableau)[i][j].partie_imaginaire;
! 1231: }
! 1232: }
! 1233:
! 1234: s_objet_resultat = s_objet_argument;
! 1235: s_objet_argument = NULL;
! 1236: }
! 1237:
! 1238: /*
! 1239: --------------------------------------------------------------------------------
! 1240: Conjugué d'un nom
! 1241: --------------------------------------------------------------------------------
! 1242: */
! 1243:
! 1244: else if ((*s_objet_argument).type == NOM)
! 1245: {
! 1246: if ((s_objet_resultat = allocation(s_etat_processus, ALG))
! 1247: == NULL)
! 1248: {
! 1249: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1250: return;
! 1251: }
! 1252:
! 1253: if (((*s_objet_resultat).objet =
! 1254: allocation_maillon(s_etat_processus)) == NULL)
! 1255: {
! 1256: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1257: return;
! 1258: }
! 1259:
! 1260: l_element_courant = (*s_objet_resultat).objet;
! 1261:
! 1262: if (((*l_element_courant).donnee =
! 1263: allocation(s_etat_processus, FCT)) == NULL)
! 1264: {
! 1265: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1266: return;
! 1267: }
! 1268:
! 1269: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 1270: .nombre_arguments = 0;
! 1271: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 1272: .fonction = instruction_vers_niveau_superieur;
! 1273:
! 1274: if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 1275: .nom_fonction = malloc(3 * sizeof(unsigned char))) == NULL)
! 1276: {
! 1277: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1278: return;
! 1279: }
! 1280:
! 1281: strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 1282: .nom_fonction, "<<");
! 1283:
! 1284: if (((*l_element_courant).suivant =
! 1285: allocation_maillon(s_etat_processus)) == NULL)
! 1286: {
! 1287: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1288: return;
! 1289: }
! 1290:
! 1291: l_element_courant = (*l_element_courant).suivant;
! 1292: (*l_element_courant).donnee = s_objet_argument;
! 1293:
! 1294: if (((*l_element_courant).suivant =
! 1295: allocation_maillon(s_etat_processus)) == NULL)
! 1296: {
! 1297: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1298: return;
! 1299: }
! 1300:
! 1301: l_element_courant = (*l_element_courant).suivant;
! 1302:
! 1303: if (((*l_element_courant).donnee =
! 1304: allocation(s_etat_processus, FCT)) == NULL)
! 1305: {
! 1306: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1307: return;
! 1308: }
! 1309:
! 1310: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 1311: .nombre_arguments = 1;
! 1312: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 1313: .fonction = instruction_conj;
! 1314:
! 1315: if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 1316: .nom_fonction = malloc(5 * sizeof(unsigned char))) == NULL)
! 1317: {
! 1318: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1319: return;
! 1320: }
! 1321:
! 1322: strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 1323: .nom_fonction, "CONJ");
! 1324:
! 1325: if (((*l_element_courant).suivant =
! 1326: allocation_maillon(s_etat_processus)) == NULL)
! 1327: {
! 1328: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1329: return;
! 1330: }
! 1331:
! 1332: l_element_courant = (*l_element_courant).suivant;
! 1333:
! 1334: if (((*l_element_courant).donnee =
! 1335: allocation(s_etat_processus, FCT)) == NULL)
! 1336: {
! 1337: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1338: return;
! 1339: }
! 1340:
! 1341: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 1342: .nombre_arguments = 0;
! 1343: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 1344: .fonction = instruction_vers_niveau_inferieur;
! 1345:
! 1346: if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 1347: .nom_fonction = malloc(3 * sizeof(unsigned char))) == NULL)
! 1348: {
! 1349: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1350: return;
! 1351: }
! 1352:
! 1353: strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 1354: .nom_fonction, ">>");
! 1355:
! 1356: (*l_element_courant).suivant = NULL;
! 1357: s_objet_argument = NULL;
! 1358: }
! 1359:
! 1360: /*
! 1361: --------------------------------------------------------------------------------
! 1362: Conjuguée d'une expression
! 1363: --------------------------------------------------------------------------------
! 1364: */
! 1365:
! 1366: else if (((*s_objet_argument).type == ALG) ||
! 1367: ((*s_objet_argument).type == RPN))
! 1368: {
! 1369: if ((s_copie_argument = copie_objet(s_etat_processus,
! 1370: s_objet_argument, 'N')) == NULL)
! 1371: {
! 1372: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1373: return;
! 1374: }
! 1375:
! 1376: l_element_courant = (struct_liste_chainee *)
! 1377: (*s_copie_argument).objet;
! 1378: l_element_precedent = l_element_courant;
! 1379:
! 1380: while((*l_element_courant).suivant != NULL)
! 1381: {
! 1382: l_element_precedent = l_element_courant;
! 1383: l_element_courant = (*l_element_courant).suivant;
! 1384: }
! 1385:
! 1386: if (((*l_element_precedent).suivant =
! 1387: allocation_maillon(s_etat_processus)) == NULL)
! 1388: {
! 1389: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1390: return;
! 1391: }
! 1392:
! 1393: if (((*(*l_element_precedent).suivant).donnee =
! 1394: allocation(s_etat_processus, FCT)) == NULL)
! 1395: {
! 1396: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1397: return;
! 1398: }
! 1399:
! 1400: (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
! 1401: .donnee).objet)).nombre_arguments = 1;
! 1402: (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
! 1403: .donnee).objet)).fonction = instruction_conj;
! 1404:
! 1405: if (((*((struct_fonction *) (*(*(*l_element_precedent)
! 1406: .suivant).donnee).objet)).nom_fonction =
! 1407: malloc(5 * sizeof(unsigned char))) == NULL)
! 1408: {
! 1409: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1410: return;
! 1411: }
! 1412:
! 1413: strcpy((*((struct_fonction *) (*(*(*l_element_precedent)
! 1414: .suivant).donnee).objet)).nom_fonction, "CONJ");
! 1415:
! 1416: (*(*l_element_precedent).suivant).suivant = l_element_courant;
! 1417:
! 1418: s_objet_resultat = s_copie_argument;
! 1419: }
! 1420:
! 1421: /*
! 1422: --------------------------------------------------------------------------------
! 1423: Conjugaison impossible
! 1424: --------------------------------------------------------------------------------
! 1425: */
! 1426:
! 1427: else
! 1428: {
! 1429: liberation(s_etat_processus, s_objet_argument);
! 1430:
! 1431: (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
! 1432: return;
! 1433: }
! 1434:
! 1435: liberation(s_etat_processus, s_objet_argument);
! 1436:
! 1437: if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
! 1438: s_objet_resultat) == d_erreur)
! 1439: {
! 1440: return;
! 1441: }
! 1442:
! 1443: return;
! 1444: }
! 1445:
! 1446:
! 1447: /*
! 1448: ================================================================================
! 1449: Fonction 'cos'
! 1450: ================================================================================
! 1451: Entrées : pointeur sur une structure struct_processus
! 1452: --------------------------------------------------------------------------------
! 1453: Sorties :
! 1454: --------------------------------------------------------------------------------
! 1455: Effets de bord : néant
! 1456: ================================================================================
! 1457: */
! 1458:
! 1459: void
! 1460: instruction_cos(struct_processus *s_etat_processus)
! 1461: {
! 1462: real8 angle;
! 1463:
! 1464: struct_liste_chainee *l_element_courant;
! 1465: struct_liste_chainee *l_element_precedent;
! 1466:
! 1467: struct_objet *s_copie_argument;
! 1468: struct_objet *s_objet_argument;
! 1469: struct_objet *s_objet_resultat;
! 1470:
! 1471: (*s_etat_processus).erreur_execution = d_ex;
! 1472:
! 1473: if ((*s_etat_processus).affichage_arguments == 'Y')
! 1474: {
! 1475: printf("\n COS ");
! 1476:
! 1477: if ((*s_etat_processus).langue == 'F')
! 1478: {
! 1479: printf("(cosinus)\n\n");
! 1480: }
! 1481: else
! 1482: {
! 1483: printf("(cosine)\n\n");
! 1484: }
! 1485:
! 1486: printf(" 1: %s, %s\n", d_INT, d_REL);
! 1487: printf("-> 1: %s\n\n", d_REL);
! 1488:
! 1489: printf(" 1: %s\n", d_CPL);
! 1490: printf("-> 1: %s\n\n", d_CPL);
! 1491:
! 1492: printf(" 1: %s, %s\n", d_NOM, d_ALG);
! 1493: printf("-> 1: %s\n\n", d_ALG);
! 1494:
! 1495: printf(" 1: %s\n", d_RPN);
! 1496: printf("-> 1: %s\n", d_RPN);
! 1497:
! 1498: return;
! 1499: }
! 1500: else if ((*s_etat_processus).test_instruction == 'Y')
! 1501: {
! 1502: (*s_etat_processus).nombre_arguments = 1;
! 1503: return;
! 1504: }
! 1505:
! 1506: if (test_cfsf(s_etat_processus, 31) == d_vrai)
! 1507: {
! 1508: if (empilement_pile_last(s_etat_processus, 1) == d_erreur)
! 1509: {
! 1510: return;
! 1511: }
! 1512: }
! 1513:
! 1514: if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
! 1515: &s_objet_argument) == d_erreur)
! 1516: {
! 1517: (*s_etat_processus).erreur_execution = d_ex_manque_argument;
! 1518: return;
! 1519: }
! 1520:
! 1521: /*
! 1522: --------------------------------------------------------------------------------
! 1523: Cosinus d'un entier ou d'un réel
! 1524: --------------------------------------------------------------------------------
! 1525: */
! 1526:
! 1527: if (((*s_objet_argument).type == INT) ||
! 1528: ((*s_objet_argument).type == REL))
! 1529: {
! 1530: if ((s_objet_resultat = allocation(s_etat_processus, REL))
! 1531: == NULL)
! 1532: {
! 1533: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1534: return;
! 1535: }
! 1536:
! 1537: if ((*s_objet_argument).type == INT)
! 1538: {
! 1539: angle = (real8) (*((integer8 *) (*s_objet_argument).objet));
! 1540: }
! 1541: else
! 1542: {
! 1543: angle = (*((real8 *) (*s_objet_argument).objet));
! 1544: }
! 1545:
! 1546: if (test_cfsf(s_etat_processus, 60) == d_faux)
! 1547: {
! 1548: conversion_degres_vers_radians(&angle);
! 1549: }
! 1550:
! 1551: (*((real8 *) (*s_objet_resultat).objet)) = cos(angle);
! 1552: }
! 1553:
! 1554: /*
! 1555: --------------------------------------------------------------------------------
! 1556: Cosinus d'un complexe
! 1557: --------------------------------------------------------------------------------
! 1558: */
! 1559:
! 1560: else if ((*s_objet_argument).type == CPL)
! 1561: {
! 1562: if ((s_objet_resultat = allocation(s_etat_processus, CPL))
! 1563: == NULL)
! 1564: {
! 1565: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1566: return;
! 1567: }
! 1568:
! 1569: f77cos_((struct_complexe16 *) (*s_objet_argument).objet,
! 1570: (struct_complexe16 *) (*s_objet_resultat).objet);
! 1571: }
! 1572:
! 1573: /*
! 1574: --------------------------------------------------------------------------------
! 1575: Cosinus d'un nom
! 1576: --------------------------------------------------------------------------------
! 1577: */
! 1578:
! 1579: else if ((*s_objet_argument).type == NOM)
! 1580: {
! 1581: if ((s_objet_resultat = allocation(s_etat_processus, ALG))
! 1582: == NULL)
! 1583: {
! 1584: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1585: return;
! 1586: }
! 1587:
! 1588: if (((*s_objet_resultat).objet =
! 1589: allocation_maillon(s_etat_processus)) == NULL)
! 1590: {
! 1591: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1592: return;
! 1593: }
! 1594:
! 1595: l_element_courant = (*s_objet_resultat).objet;
! 1596:
! 1597: if (((*l_element_courant).donnee =
! 1598: allocation(s_etat_processus, FCT)) == NULL)
! 1599: {
! 1600: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1601: return;
! 1602: }
! 1603:
! 1604: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 1605: .nombre_arguments = 0;
! 1606: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 1607: .fonction = instruction_vers_niveau_superieur;
! 1608:
! 1609: if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 1610: .nom_fonction = malloc(3 * sizeof(unsigned char))) == NULL)
! 1611: {
! 1612: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1613: return;
! 1614: }
! 1615:
! 1616: strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 1617: .nom_fonction, "<<");
! 1618:
! 1619: if (((*l_element_courant).suivant =
! 1620: allocation_maillon(s_etat_processus)) == NULL)
! 1621: {
! 1622: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1623: return;
! 1624: }
! 1625:
! 1626: l_element_courant = (*l_element_courant).suivant;
! 1627: (*l_element_courant).donnee = s_objet_argument;
! 1628:
! 1629: if (((*l_element_courant).suivant =
! 1630: allocation_maillon(s_etat_processus)) == NULL)
! 1631: {
! 1632: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1633: return;
! 1634: }
! 1635:
! 1636: l_element_courant = (*l_element_courant).suivant;
! 1637:
! 1638: if (((*l_element_courant).donnee =
! 1639: allocation(s_etat_processus, FCT)) == NULL)
! 1640: {
! 1641: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1642: return;
! 1643: }
! 1644:
! 1645: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 1646: .nombre_arguments = 1;
! 1647: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 1648: .fonction = instruction_cos;
! 1649:
! 1650: if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 1651: .nom_fonction = malloc(4 * sizeof(unsigned char))) == NULL)
! 1652: {
! 1653: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1654: return;
! 1655: }
! 1656:
! 1657: strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 1658: .nom_fonction, "COS");
! 1659:
! 1660: if (((*l_element_courant).suivant =
! 1661: allocation_maillon(s_etat_processus)) == NULL)
! 1662: {
! 1663: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1664: return;
! 1665: }
! 1666:
! 1667: l_element_courant = (*l_element_courant).suivant;
! 1668:
! 1669: if (((*l_element_courant).donnee =
! 1670: allocation(s_etat_processus, FCT)) == NULL)
! 1671: {
! 1672: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1673: return;
! 1674: }
! 1675:
! 1676: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 1677: .nombre_arguments = 0;
! 1678: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 1679: .fonction = instruction_vers_niveau_inferieur;
! 1680:
! 1681: if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 1682: .nom_fonction = malloc(3 * sizeof(unsigned char))) == NULL)
! 1683: {
! 1684: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1685: return;
! 1686: }
! 1687:
! 1688: strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 1689: .nom_fonction, ">>");
! 1690:
! 1691: (*l_element_courant).suivant = NULL;
! 1692: s_objet_argument = NULL;
! 1693: }
! 1694:
! 1695: /*
! 1696: --------------------------------------------------------------------------------
! 1697: Cosinus d'une expression
! 1698: --------------------------------------------------------------------------------
! 1699: */
! 1700:
! 1701: else if (((*s_objet_argument).type == ALG) ||
! 1702: ((*s_objet_argument).type == RPN))
! 1703: {
! 1704: if ((s_copie_argument = copie_objet(s_etat_processus,
! 1705: s_objet_argument, 'N')) == NULL)
! 1706: {
! 1707: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1708: return;
! 1709: }
! 1710:
! 1711: l_element_courant = (struct_liste_chainee *)
! 1712: (*s_copie_argument).objet;
! 1713: l_element_precedent = l_element_courant;
! 1714:
! 1715: while((*l_element_courant).suivant != NULL)
! 1716: {
! 1717: l_element_precedent = l_element_courant;
! 1718: l_element_courant = (*l_element_courant).suivant;
! 1719: }
! 1720:
! 1721: if (((*l_element_precedent).suivant =
! 1722: allocation_maillon(s_etat_processus)) == NULL)
! 1723: {
! 1724: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1725: return;
! 1726: }
! 1727:
! 1728: if (((*(*l_element_precedent).suivant).donnee =
! 1729: allocation(s_etat_processus, FCT)) == NULL)
! 1730: {
! 1731: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1732: return;
! 1733: }
! 1734:
! 1735: (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
! 1736: .donnee).objet)).nombre_arguments = 1;
! 1737: (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
! 1738: .donnee).objet)).fonction = instruction_cos;
! 1739:
! 1740: if (((*((struct_fonction *) (*(*(*l_element_precedent)
! 1741: .suivant).donnee).objet)).nom_fonction =
! 1742: malloc(4 * sizeof(unsigned char))) == NULL)
! 1743: {
! 1744: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1745: return;
! 1746: }
! 1747:
! 1748: strcpy((*((struct_fonction *) (*(*(*l_element_precedent)
! 1749: .suivant).donnee).objet)).nom_fonction, "COS");
! 1750:
! 1751: (*(*l_element_precedent).suivant).suivant = l_element_courant;
! 1752:
! 1753: s_objet_resultat = s_copie_argument;
! 1754: }
! 1755:
! 1756: /*
! 1757: --------------------------------------------------------------------------------
! 1758: Réalisation impossible de la fonction cosinus
! 1759: --------------------------------------------------------------------------------
! 1760: */
! 1761:
! 1762: else
! 1763: {
! 1764: liberation(s_etat_processus, s_objet_argument);
! 1765:
! 1766: (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
! 1767: return;
! 1768: }
! 1769:
! 1770: liberation(s_etat_processus, s_objet_argument);
! 1771:
! 1772: if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
! 1773: s_objet_resultat) == d_erreur)
! 1774: {
! 1775: return;
! 1776: }
! 1777:
! 1778: return;
! 1779: }
! 1780:
! 1781:
! 1782: /*
! 1783: ================================================================================
! 1784: Fonction 'cosh'
! 1785: ================================================================================
! 1786: Entrées : pointeur sur une structure struct_processus
! 1787: --------------------------------------------------------------------------------
! 1788: Sorties :
! 1789: --------------------------------------------------------------------------------
! 1790: Effets de bord : néant
! 1791: ================================================================================
! 1792: */
! 1793:
! 1794: void
! 1795: instruction_cosh(struct_processus *s_etat_processus)
! 1796: {
! 1797: real8 argument;
! 1798:
! 1799: struct_liste_chainee *l_element_courant;
! 1800: struct_liste_chainee *l_element_precedent;
! 1801:
! 1802: struct_objet *s_copie_argument;
! 1803: struct_objet *s_objet_argument;
! 1804: struct_objet *s_objet_resultat;
! 1805:
! 1806: (*s_etat_processus).erreur_execution = d_ex;
! 1807:
! 1808: if ((*s_etat_processus).affichage_arguments == 'Y')
! 1809: {
! 1810: printf("\n COSH ");
! 1811:
! 1812: if ((*s_etat_processus).langue == 'F')
! 1813: {
! 1814: printf("(cosinus hyperbolique)\n\n");
! 1815: }
! 1816: else
! 1817: {
! 1818: printf("(hyperbolic cosine)\n\n");
! 1819: }
! 1820:
! 1821: printf(" 1: %s, %s\n", d_INT, d_REL);
! 1822: printf("-> 1: %s\n\n", d_INT);
! 1823:
! 1824: printf(" 1: %s\n", d_CPL);
! 1825: printf("-> 1: %s\n\n", d_CPL);
! 1826:
! 1827: printf(" 1: %s, %s\n", d_NOM, d_ALG);
! 1828: printf("-> 1: %s\n\n", d_ALG);
! 1829:
! 1830: printf(" 1: %s\n", d_RPN);
! 1831: printf("-> 1: %s\n", d_RPN);
! 1832:
! 1833: return;
! 1834: }
! 1835: else if ((*s_etat_processus).test_instruction == 'Y')
! 1836: {
! 1837: (*s_etat_processus).nombre_arguments = 1;
! 1838: return;
! 1839: }
! 1840:
! 1841: if (test_cfsf(s_etat_processus, 31) == d_vrai)
! 1842: {
! 1843: if (empilement_pile_last(s_etat_processus, 1) == d_erreur)
! 1844: {
! 1845: return;
! 1846: }
! 1847: }
! 1848:
! 1849: if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
! 1850: &s_objet_argument) == d_erreur)
! 1851: {
! 1852: (*s_etat_processus).erreur_execution = d_ex_manque_argument;
! 1853: return;
! 1854: }
! 1855:
! 1856: /*
! 1857: --------------------------------------------------------------------------------
! 1858: Cosinus hyperbolique d'un entier ou d'un réel
! 1859: --------------------------------------------------------------------------------
! 1860: */
! 1861:
! 1862: if (((*s_objet_argument).type == INT) ||
! 1863: ((*s_objet_argument).type == REL))
! 1864: {
! 1865: if ((s_objet_resultat = allocation(s_etat_processus, REL))
! 1866: == NULL)
! 1867: {
! 1868: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1869: return;
! 1870: }
! 1871:
! 1872: if ((*s_objet_argument).type == INT)
! 1873: {
! 1874: argument = (real8) (*((integer8 *) (*s_objet_argument).objet));
! 1875: }
! 1876: else
! 1877: {
! 1878: argument = (*((real8 *) (*s_objet_argument).objet));
! 1879: }
! 1880:
! 1881: (*((real8 *) (*s_objet_resultat).objet)) = cosh(argument);
! 1882: }
! 1883:
! 1884: /*
! 1885: --------------------------------------------------------------------------------
! 1886: Cosinus hyperbolique d'un complexe
! 1887: --------------------------------------------------------------------------------
! 1888: */
! 1889:
! 1890: else if ((*s_objet_argument).type == CPL)
! 1891: {
! 1892: if ((s_objet_resultat = allocation(s_etat_processus, CPL))
! 1893: == NULL)
! 1894: {
! 1895: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1896: return;
! 1897: }
! 1898:
! 1899: f77cosh_((struct_complexe16 *) (*s_objet_argument).objet,
! 1900: (struct_complexe16 *) (*s_objet_resultat).objet);
! 1901: }
! 1902:
! 1903: /*
! 1904: --------------------------------------------------------------------------------
! 1905: Cosinus hyperbolique d'un nom
! 1906: --------------------------------------------------------------------------------
! 1907: */
! 1908:
! 1909: else if ((*s_objet_argument).type == NOM)
! 1910: {
! 1911: if ((s_objet_resultat = allocation(s_etat_processus, ALG))
! 1912: == NULL)
! 1913: {
! 1914: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1915: return;
! 1916: }
! 1917:
! 1918: if (((*s_objet_resultat).objet =
! 1919: allocation_maillon(s_etat_processus)) == NULL)
! 1920: {
! 1921: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1922: return;
! 1923: }
! 1924:
! 1925: l_element_courant = (*s_objet_resultat).objet;
! 1926:
! 1927: if (((*l_element_courant).donnee =
! 1928: allocation(s_etat_processus, FCT)) == NULL)
! 1929: {
! 1930: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1931: return;
! 1932: }
! 1933:
! 1934: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 1935: .nombre_arguments = 0;
! 1936: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 1937: .fonction = instruction_vers_niveau_superieur;
! 1938:
! 1939: if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 1940: .nom_fonction = malloc(3 * sizeof(unsigned char))) == NULL)
! 1941: {
! 1942: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1943: return;
! 1944: }
! 1945:
! 1946: strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 1947: .nom_fonction, "<<");
! 1948:
! 1949: if (((*l_element_courant).suivant =
! 1950: allocation_maillon(s_etat_processus)) == NULL)
! 1951: {
! 1952: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1953: return;
! 1954: }
! 1955:
! 1956: l_element_courant = (*l_element_courant).suivant;
! 1957: (*l_element_courant).donnee = s_objet_argument;
! 1958:
! 1959: if (((*l_element_courant).suivant =
! 1960: allocation_maillon(s_etat_processus)) == NULL)
! 1961: {
! 1962: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1963: return;
! 1964: }
! 1965:
! 1966: l_element_courant = (*l_element_courant).suivant;
! 1967:
! 1968: if (((*l_element_courant).donnee =
! 1969: allocation(s_etat_processus, FCT)) == NULL)
! 1970: {
! 1971: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1972: return;
! 1973: }
! 1974:
! 1975: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 1976: .nombre_arguments = 1;
! 1977: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 1978: .fonction = instruction_cosh;
! 1979:
! 1980: if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 1981: .nom_fonction = malloc(5 * sizeof(unsigned char))) == NULL)
! 1982: {
! 1983: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1984: return;
! 1985: }
! 1986:
! 1987: strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 1988: .nom_fonction, "COSH");
! 1989:
! 1990: if (((*l_element_courant).suivant =
! 1991: allocation_maillon(s_etat_processus)) == NULL)
! 1992: {
! 1993: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1994: return;
! 1995: }
! 1996:
! 1997: l_element_courant = (*l_element_courant).suivant;
! 1998:
! 1999: if (((*l_element_courant).donnee =
! 2000: allocation(s_etat_processus, FCT)) == NULL)
! 2001: {
! 2002: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 2003: return;
! 2004: }
! 2005:
! 2006: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 2007: .nombre_arguments = 0;
! 2008: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 2009: .fonction = instruction_vers_niveau_inferieur;
! 2010:
! 2011: if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 2012: .nom_fonction = malloc(3 * sizeof(unsigned char))) == NULL)
! 2013: {
! 2014: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 2015: return;
! 2016: }
! 2017:
! 2018: strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 2019: .nom_fonction, ">>");
! 2020:
! 2021: (*l_element_courant).suivant = NULL;
! 2022: s_objet_argument = NULL;
! 2023: }
! 2024:
! 2025: /*
! 2026: --------------------------------------------------------------------------------
! 2027: Cosinus hyperbolique d'une expression
! 2028: --------------------------------------------------------------------------------
! 2029: */
! 2030:
! 2031: else if (((*s_objet_argument).type == ALG) ||
! 2032: ((*s_objet_argument).type == RPN))
! 2033: {
! 2034: if ((s_copie_argument = copie_objet(s_etat_processus,
! 2035: s_objet_argument, 'N')) == NULL)
! 2036: {
! 2037: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 2038: return;
! 2039: }
! 2040:
! 2041: l_element_courant = (struct_liste_chainee *)
! 2042: (*s_copie_argument).objet;
! 2043: l_element_precedent = l_element_courant;
! 2044:
! 2045: while((*l_element_courant).suivant != NULL)
! 2046: {
! 2047: l_element_precedent = l_element_courant;
! 2048: l_element_courant = (*l_element_courant).suivant;
! 2049: }
! 2050:
! 2051: if (((*l_element_precedent).suivant =
! 2052: allocation_maillon(s_etat_processus)) == NULL)
! 2053: {
! 2054: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 2055: return;
! 2056: }
! 2057:
! 2058: if (((*(*l_element_precedent).suivant).donnee =
! 2059: allocation(s_etat_processus, FCT)) == NULL)
! 2060: {
! 2061: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 2062: return;
! 2063: }
! 2064:
! 2065: (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
! 2066: .donnee).objet)).nombre_arguments = 1;
! 2067: (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
! 2068: .donnee).objet)).fonction = instruction_cosh;
! 2069:
! 2070: if (((*((struct_fonction *) (*(*(*l_element_precedent)
! 2071: .suivant).donnee).objet)).nom_fonction =
! 2072: malloc(5 * sizeof(unsigned char))) == NULL)
! 2073: {
! 2074: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 2075: return;
! 2076: }
! 2077:
! 2078: strcpy((*((struct_fonction *) (*(*(*l_element_precedent)
! 2079: .suivant).donnee).objet)).nom_fonction, "COSH");
! 2080:
! 2081: (*(*l_element_precedent).suivant).suivant = l_element_courant;
! 2082:
! 2083: s_objet_resultat = s_copie_argument;
! 2084: }
! 2085:
! 2086: /*
! 2087: --------------------------------------------------------------------------------
! 2088: Réalisation impossible de la fonction cosinus hyperbolique
! 2089: --------------------------------------------------------------------------------
! 2090: */
! 2091:
! 2092: else
! 2093: {
! 2094: liberation(s_etat_processus, s_objet_argument);
! 2095:
! 2096: (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
! 2097: return;
! 2098: }
! 2099:
! 2100: liberation(s_etat_processus, s_objet_argument);
! 2101:
! 2102: if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
! 2103: s_objet_resultat) == d_erreur)
! 2104: {
! 2105: return;
! 2106: }
! 2107:
! 2108: return;
! 2109: }
! 2110:
! 2111: // vim: ts=4
CVSweb interface <joel.bertrand@systella.fr>