Annotation of rpl/src/instructions_t1.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 'type'
! 29: ================================================================================
! 30: Entrées : structure processus
! 31: --------------------------------------------------------------------------------
! 32: Sorties :
! 33: --------------------------------------------------------------------------------
! 34: Effets de bord : néant
! 35: ================================================================================
! 36: */
! 37:
! 38: void
! 39: instruction_type(struct_processus *s_etat_processus)
! 40: {
! 41: struct_objet *s_objet_argument;
! 42: struct_objet *s_objet_resultat;
! 43:
! 44: (*s_etat_processus).erreur_execution = d_ex;
! 45:
! 46: if ((*s_etat_processus).affichage_arguments == 'Y')
! 47: {
! 48: printf("\n TYPE ");
! 49:
! 50: if ((*s_etat_processus).langue == 'F')
! 51: {
! 52: printf("(type d'objet)\n\n");
! 53: }
! 54: else
! 55: {
! 56: printf("(object type)\n\n");
! 57: }
! 58:
! 59: printf(" 1: %s, %s, %s, %s, %s, %s,\n"
! 60: " %s, %s, %s, %s, %s,\n"
! 61: " %s, %s, %s, %s, %s,\n"
! 62: " %s, %s, %s, %s\n",
! 63: d_INT, d_REL, d_CPL, d_VIN, d_VRL, d_VCX, d_MIN, d_MRL, d_MCX,
! 64: d_TAB,
! 65: d_BIN, d_NOM, d_CHN, d_LST, d_ALG, d_RPN, d_FCH, d_SLB, d_SCK,
! 66: d_PRC);
! 67: printf("-> 1: %s\n", d_INT);
! 68:
! 69: return;
! 70: }
! 71: else if ((*s_etat_processus).test_instruction == 'Y')
! 72: {
! 73: (*s_etat_processus).nombre_arguments = -1;
! 74: return;
! 75: }
! 76:
! 77: if (test_cfsf(s_etat_processus, 31) == d_vrai)
! 78: {
! 79: if (empilement_pile_last(s_etat_processus, 1) == d_erreur)
! 80: {
! 81: return;
! 82: }
! 83: }
! 84:
! 85: if (depilement(s_etat_processus, &((*s_etat_processus)
! 86: .l_base_pile), &s_objet_argument) == d_erreur)
! 87: {
! 88: (*s_etat_processus).erreur_execution = d_ex_manque_argument;
! 89: return;
! 90: }
! 91:
! 92: if ((s_objet_resultat = allocation(s_etat_processus, INT)) == NULL)
! 93: {
! 94: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 95: return;
! 96: }
! 97:
! 98: if (((*s_objet_argument).type == INT) ||
! 99: ((*s_objet_argument).type == REL))
! 100: {
! 101: (*((integer8 *) (*s_objet_resultat).objet)) = 0;
! 102: }
! 103: else if ((*s_objet_argument).type == CPL)
! 104: {
! 105: (*((integer8 *) (*s_objet_resultat).objet)) = 1;
! 106: }
! 107: else if ((*s_objet_argument).type == CHN)
! 108: {
! 109: (*((integer8 *) (*s_objet_resultat).objet)) = 2;
! 110: }
! 111: else if (((*s_objet_argument).type == VIN) ||
! 112: ((*s_objet_argument).type == VRL) ||
! 113: ((*s_objet_argument).type == MIN) ||
! 114: ((*s_objet_argument).type == MRL))
! 115: {
! 116: (*((integer8 *) (*s_objet_resultat).objet)) = 3;
! 117: }
! 118: else if (((*s_objet_argument).type == VCX) ||
! 119: ((*s_objet_argument).type == MCX))
! 120: {
! 121: (*((integer8 *) (*s_objet_resultat).objet)) = 4;
! 122: }
! 123: else if ((*s_objet_argument).type == LST)
! 124: {
! 125: (*((integer8 *) (*s_objet_resultat).objet)) = 5;
! 126: }
! 127: else if ((*s_objet_argument).type == ADR)
! 128: {
! 129: (*((integer8 *) (*s_objet_resultat).objet)) = 6;
! 130: }
! 131: else if ((*s_objet_argument).type == NOM)
! 132: {
! 133: (*((integer8 *) (*s_objet_resultat).objet)) = 7;
! 134: }
! 135: else if ((*s_objet_argument).type == RPN)
! 136: {
! 137: (*((integer8 *) (*s_objet_resultat).objet)) = 8;
! 138: }
! 139: else if ((*s_objet_argument).type == ALG)
! 140: {
! 141: (*((integer8 *) (*s_objet_resultat).objet)) = 9;
! 142: }
! 143: else if ((*s_objet_argument).type == BIN)
! 144: {
! 145: (*((integer8 *) (*s_objet_resultat).objet)) = 10;
! 146: }
! 147: else if ((*s_objet_argument).type == FCH)
! 148: {
! 149: (*((integer8 *) (*s_objet_resultat).objet)) = 11;
! 150: }
! 151: else if ((*s_objet_argument).type == SLB)
! 152: {
! 153: (*((integer8 *) (*s_objet_resultat).objet)) = 12;
! 154: }
! 155: else if ((*s_objet_argument).type == SCK)
! 156: {
! 157: (*((integer8 *) (*s_objet_resultat).objet)) = 13;
! 158: }
! 159: else if ((*s_objet_argument).type == PRC)
! 160: {
! 161: (*((integer8 *) (*s_objet_resultat).objet)) = 14;
! 162: }
! 163: else if ((*s_objet_argument).type == FCT)
! 164: {
! 165: (*((integer8 *) (*s_objet_resultat).objet)) = 15;
! 166: }
! 167: else if ((*s_objet_argument).type == TBL)
! 168: {
! 169: (*((integer8 *) (*s_objet_resultat).objet)) = 16;
! 170: }
! 171: else
! 172: {
! 173: /*
! 174: * Les autres types de données sont des types internes
! 175: */
! 176:
! 177: liberation(s_etat_processus, s_objet_argument);
! 178:
! 179: (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
! 180: return;
! 181: }
! 182:
! 183: if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
! 184: s_objet_resultat) == d_erreur)
! 185: {
! 186: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 187: return;
! 188: }
! 189:
! 190: liberation(s_etat_processus, s_objet_argument);
! 191:
! 192: return;
! 193: }
! 194:
! 195:
! 196: /*
! 197: ================================================================================
! 198: Fonction 'then'
! 199: ================================================================================
! 200: Entrées : structure processus
! 201: --------------------------------------------------------------------------------
! 202: Sorties :
! 203: --------------------------------------------------------------------------------
! 204: Effets de bord : néant
! 205: ================================================================================
! 206: */
! 207:
! 208: void
! 209: instruction_then(struct_processus *s_etat_processus)
! 210: {
! 211: logical1 condition;
! 212: logical1 drapeau_fin;
! 213: logical1 execution;
! 214:
! 215: struct_liste_chainee *s_registre;
! 216:
! 217: struct_objet *s_objet;
! 218:
! 219: unsigned char *instruction_majuscule;
! 220: unsigned char *tampon;
! 221:
! 222: unsigned long niveau;
! 223:
! 224: void (*fonction)();
! 225:
! 226: (*s_etat_processus).erreur_execution = d_ex;
! 227:
! 228: if ((*s_etat_processus).affichage_arguments == 'Y')
! 229: {
! 230: printf("\n THEN ");
! 231:
! 232: if ((*s_etat_processus).langue == 'F')
! 233: {
! 234: printf("(structure de contrôle)\n\n");
! 235: printf(" Utilisation :\n\n");
! 236: }
! 237: else
! 238: {
! 239: printf("(control statement)\n\n");
! 240: printf(" Usage:\n\n");
! 241: }
! 242:
! 243: printf(" IF(ERR)\n");
! 244: printf(" (expression test 1)\n");
! 245: printf(" THEN\n");
! 246: printf(" (expression 1)\n");
! 247: printf(" [ELSEIF\n");
! 248: printf(" (expression test 2)\n");
! 249: printf(" THEN\n");
! 250: printf(" (expression 2)]\n");
! 251: printf(" ...\n");
! 252: printf(" [ELSE\n");
! 253: printf(" (expression n)]\n");
! 254: printf(" END\n\n");
! 255:
! 256: printf(" SELECT (expression test)\n");
! 257: printf(" CASE (clause 1) THEN (expression 1) END\n");
! 258: printf(" CASE (clause 2) THEN (expression 2) END\n");
! 259: printf(" ...\n");
! 260: printf(" CASE (clause n) THEN (expression n) END\n");
! 261: printf(" DEFAULT\n");
! 262: printf(" (expression)\n");
! 263: printf(" END\n\n");
! 264:
! 265: printf(" SELECT (expression test)\n");
! 266: printf(" CASE (clause 1) THEN (expression 1) END\n");
! 267: printf(" (expression)\n");
! 268: printf(" CASE (clause 2) THEN (expression 2) END\n");
! 269: printf(" END\n");
! 270:
! 271: return;
! 272: }
! 273: else if ((*s_etat_processus).test_instruction == 'Y')
! 274: {
! 275: (*s_etat_processus).nombre_arguments = -1;
! 276: return;
! 277: }
! 278:
! 279: if (((*(*s_etat_processus).l_base_pile_systeme).clause != 'I') &&
! 280: ((*(*s_etat_processus).l_base_pile_systeme).clause != 'T') &&
! 281: ((*(*s_etat_processus).l_base_pile_systeme).clause != 'R') &&
! 282: ((*(*s_etat_processus).l_base_pile_systeme).clause != 'X') &&
! 283: ((*(*s_etat_processus).l_base_pile_systeme).clause != 'C') &&
! 284: ((*(*s_etat_processus).l_base_pile_systeme).clause != 'K'))
! 285: {
! 286: (*s_etat_processus).erreur_execution = d_ex_erreur_traitement_condition;
! 287: return;
! 288: }
! 289:
! 290: /*
! 291: * Traitement des erreurs
! 292: */
! 293:
! 294: if (((*(*s_etat_processus).l_base_pile_systeme).clause == 'R') ||
! 295: ((*(*s_etat_processus).l_base_pile_systeme).clause == 'X'))
! 296: {
! 297: if ((s_objet = allocation(s_etat_processus, INT)) == NULL)
! 298: {
! 299: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 300: return;
! 301: }
! 302:
! 303: if ((*(*s_etat_processus).l_base_pile_systeme).clause == 'R')
! 304: {
! 305:
! 306: /*
! 307: * Erreur à traiter : on saute jusques au ELSE ou au END
! 308: * correspondant.
! 309: */
! 310:
! 311: (*((integer8 *) (*s_objet).objet)) = 0;
! 312: }
! 313: else
! 314: {
! 315: (*((integer8 *) (*s_objet).objet)) = -1;
! 316: }
! 317:
! 318: if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
! 319: s_objet) == d_erreur)
! 320: {
! 321: return;
! 322: }
! 323:
! 324: (*s_etat_processus).arret_si_exception = (*(*s_etat_processus)
! 325: .l_base_pile_systeme).arret_si_exception;
! 326: }
! 327:
! 328: /*
! 329: * Traitement standard de l'instruction 'THEN'
! 330: */
! 331:
! 332: if (test_cfsf(s_etat_processus, 31) == d_vrai)
! 333: {
! 334: if (empilement_pile_last(s_etat_processus, 1) == d_erreur)
! 335: {
! 336: return;
! 337: }
! 338: }
! 339:
! 340: if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
! 341: &s_objet) == d_erreur)
! 342: {
! 343: return;
! 344: }
! 345:
! 346: if (((*s_objet).type == INT) ||
! 347: ((*s_objet).type == REL))
! 348: {
! 349: if ((*s_objet).type == INT)
! 350: {
! 351: condition = ((*((integer8 *) (*s_objet).objet)) == 0)
! 352: ? d_faux : d_vrai;
! 353: }
! 354: else
! 355: {
! 356: condition = ((*((real8 *) (*s_objet).objet)) == 0)
! 357: ? d_faux : d_vrai;
! 358: }
! 359:
! 360: if (condition == d_vrai)
! 361: {
! 362:
! 363: /*
! 364: * condition == d_vrai : exécution de ce qui se trouve entre
! 365: * THEN et ELSE ou END.
! 366: */
! 367:
! 368: if (((*(*s_etat_processus).l_base_pile_systeme).clause !=
! 369: 'K') && ((*(*s_etat_processus).l_base_pile_systeme)
! 370: .clause != 'C'))
! 371: {
! 372: (*(*s_etat_processus).l_base_pile_systeme).clause = 'T';
! 373: }
! 374: else
! 375: {
! 376: (*(*s_etat_processus).l_base_pile_systeme).clause = 'Q';
! 377: }
! 378: }
! 379: else
! 380: {
! 381: /*
! 382: * condition == d_faux : saut à END ou exécution de ce qui se
! 383: * trouve entre ELSE et END
! 384: */
! 385:
! 386: if ((*(*s_etat_processus).l_base_pile_systeme).clause != 'T')
! 387: {
! 388: /*
! 389: * Traitement de ELSEIF
! 390: */
! 391:
! 392: if (((*(*s_etat_processus).l_base_pile_systeme).clause !=
! 393: 'K') && ((*(*s_etat_processus).l_base_pile_systeme)
! 394: .clause != 'C'))
! 395: {
! 396: (*(*s_etat_processus).l_base_pile_systeme).clause = 'E';
! 397: }
! 398: }
! 399:
! 400: niveau = 0;
! 401: drapeau_fin = d_faux;
! 402:
! 403: if ((*s_etat_processus).mode_execution_programme == 'Y')
! 404: {
! 405: tampon = (*s_etat_processus).instruction_courante;
! 406:
! 407: do
! 408: {
! 409: if (recherche_instruction_suivante(s_etat_processus)
! 410: == d_erreur)
! 411: {
! 412: liberation(s_etat_processus, s_objet);
! 413:
! 414: if ((*s_etat_processus).instruction_courante != NULL)
! 415: {
! 416: free((*s_etat_processus).instruction_courante);
! 417: }
! 418:
! 419: (*s_etat_processus).instruction_courante = tampon;
! 420: (*s_etat_processus).erreur_execution =
! 421: d_ex_erreur_traitement_condition;
! 422: return;
! 423: }
! 424:
! 425: if ((instruction_majuscule = conversion_majuscule(
! 426: (*s_etat_processus).instruction_courante)) == NULL)
! 427: {
! 428: liberation(s_etat_processus, s_objet);
! 429:
! 430: free((*s_etat_processus).instruction_courante);
! 431: (*s_etat_processus).instruction_courante = tampon;
! 432: (*s_etat_processus).erreur_systeme =
! 433: d_es_allocation_memoire;
! 434: return;
! 435: }
! 436:
! 437: if (niveau == 0)
! 438: {
! 439: if (((*(*s_etat_processus).l_base_pile_systeme)
! 440: .clause != 'K') && ((*(*s_etat_processus)
! 441: .l_base_pile_systeme) .clause != 'C'))
! 442: {
! 443:
! 444: /*
! 445: * Traitement de IF/THEN/ELSEIF/THEN/ELSE/END
! 446: */
! 447:
! 448: if ((strcmp(instruction_majuscule, "END") == 0) ||
! 449: (strcmp(instruction_majuscule, "ELSE")
! 450: == 0) || (strcmp(instruction_majuscule,
! 451: "ELSEIF") == 0))
! 452: {
! 453: (*s_etat_processus).position_courante
! 454: -= (strlen(instruction_majuscule) + 1);
! 455: drapeau_fin = d_vrai;
! 456: }
! 457: else
! 458: {
! 459: drapeau_fin = d_faux;
! 460: }
! 461: }
! 462: else
! 463: {
! 464: /*
! 465: * Traitement de CASE/THEN/END
! 466: */
! 467:
! 468: if (strcmp(instruction_majuscule, "ELSE") == 0)
! 469: {
! 470: liberation(s_etat_processus, s_objet);
! 471:
! 472: free((*s_etat_processus).instruction_courante);
! 473: free(instruction_majuscule);
! 474:
! 475: (*s_etat_processus).instruction_courante =
! 476: tampon;
! 477: (*s_etat_processus).erreur_execution =
! 478: d_ex_erreur_traitement_condition;
! 479: return;
! 480: }
! 481: else if (strcmp(instruction_majuscule, "END") == 0)
! 482: {
! 483: drapeau_fin = d_vrai;
! 484: }
! 485: else
! 486: {
! 487: drapeau_fin = d_faux;
! 488: }
! 489: }
! 490: }
! 491: else
! 492: {
! 493: drapeau_fin = d_faux;
! 494: }
! 495:
! 496: if ((strcmp(instruction_majuscule, "CASE") == 0) ||
! 497: (strcmp(instruction_majuscule, "DO") == 0) ||
! 498: (strcmp(instruction_majuscule, "IF") == 0) ||
! 499: (strcmp(instruction_majuscule, "IFERR") == 0) ||
! 500: (strcmp(instruction_majuscule, "SELECT") == 0) ||
! 501: (strcmp(instruction_majuscule, "WHILE") == 0))
! 502: {
! 503: niveau++;
! 504: }
! 505: else if (strcmp(instruction_majuscule, "END") == 0)
! 506: {
! 507: niveau--;
! 508: }
! 509:
! 510: free(instruction_majuscule);
! 511: free((*s_etat_processus).instruction_courante);
! 512: } while(drapeau_fin == d_faux);
! 513:
! 514: (*s_etat_processus).instruction_courante = tampon;
! 515: }
! 516: else
! 517: {
! 518: /*
! 519: * Vérification du pointeur de prédiction de saut.
! 520: */
! 521:
! 522: if (pthread_mutex_lock(&((*(*(*s_etat_processus)
! 523: .expression_courante).donnee).mutex)) != 0)
! 524: {
! 525: (*s_etat_processus).erreur_systeme = d_es_processus;
! 526: return;
! 527: }
! 528:
! 529: if ((*((struct_fonction *) (*(*(*s_etat_processus)
! 530: .expression_courante).donnee).objet)).prediction_saut
! 531: != NULL)
! 532: {
! 533: s_registre = (*s_etat_processus).expression_courante;
! 534:
! 535: (*s_etat_processus).expression_courante =
! 536: (struct_liste_chainee *)
! 537: (*((struct_fonction *) (*(*(*s_etat_processus)
! 538: .expression_courante).donnee).objet))
! 539: .prediction_saut;
! 540: fonction = (*((struct_fonction *)
! 541: (*(*(*s_etat_processus).expression_courante)
! 542: .donnee).objet)).fonction;
! 543: execution = (*((struct_fonction *)
! 544: (*(*s_registre).donnee).objet))
! 545: .prediction_execution;
! 546:
! 547: if (pthread_mutex_unlock(&((*(*s_registre).donnee).mutex))
! 548: != 0)
! 549: {
! 550: (*s_etat_processus).erreur_systeme = d_es_processus;
! 551: return;
! 552: }
! 553:
! 554: if (execution == d_vrai)
! 555: {
! 556: fonction(s_etat_processus);
! 557: }
! 558: }
! 559: else
! 560: {
! 561: if (pthread_mutex_unlock(&((*(*(*s_etat_processus)
! 562: .expression_courante).donnee).mutex)) != 0)
! 563: {
! 564: (*s_etat_processus).erreur_systeme = d_es_processus;
! 565: return;
! 566: }
! 567:
! 568: s_registre = (*s_etat_processus).expression_courante;
! 569: execution = d_faux;
! 570:
! 571: do
! 572: {
! 573: if (((*s_etat_processus).expression_courante =
! 574: (*(*s_etat_processus).expression_courante)
! 575: .suivant) == NULL)
! 576: {
! 577: liberation(s_etat_processus, s_objet);
! 578: (*s_etat_processus).erreur_execution =
! 579: d_ex_erreur_traitement_condition;
! 580: return;
! 581: }
! 582:
! 583: if ((*(*(*s_etat_processus).expression_courante)
! 584: .donnee).type == FCT)
! 585: {
! 586: fonction = (*((struct_fonction *)
! 587: (*(*(*s_etat_processus).expression_courante)
! 588: .donnee).objet)).fonction;
! 589:
! 590: if (niveau == 0)
! 591: {
! 592: if (((*(*s_etat_processus).l_base_pile_systeme)
! 593: .clause != 'K') &&
! 594: ((*(*s_etat_processus)
! 595: .l_base_pile_systeme) .clause != 'C'))
! 596: {
! 597:
! 598: /*
! 599: * Traitement de IF/THEN/ELSEIF/THEN/
! 600: * ELSE/END
! 601: */
! 602:
! 603: if ((fonction == instruction_end) ||
! 604: (fonction == instruction_else) ||
! 605: (fonction == instruction_elseif))
! 606: {
! 607: fonction(s_etat_processus);
! 608: execution = d_vrai;
! 609: drapeau_fin = d_vrai;
! 610: }
! 611: else
! 612: {
! 613: drapeau_fin = d_faux;
! 614: }
! 615: }
! 616: else
! 617: {
! 618: /*
! 619: * Traitement de CASE/THEN/END
! 620: */
! 621:
! 622: if (fonction == instruction_else)
! 623: {
! 624: liberation(s_etat_processus, s_objet);
! 625:
! 626: if ((drapeau_fin == d_faux) &&
! 627: ((*s_etat_processus)
! 628: .expression_courante != NULL))
! 629: {
! 630: (*s_etat_processus)
! 631: .expression_courante
! 632: = (*(*s_etat_processus)
! 633: .expression_courante)
! 634: .suivant;
! 635: }
! 636:
! 637: (*s_etat_processus).erreur_execution =
! 638: d_ex_erreur_traitement_condition;
! 639: return;
! 640: }
! 641: else if (fonction == instruction_end)
! 642: {
! 643: drapeau_fin = d_vrai;
! 644: }
! 645: else
! 646: {
! 647: drapeau_fin = d_faux;
! 648: }
! 649: }
! 650: }
! 651: else
! 652: {
! 653: drapeau_fin = d_faux;
! 654: }
! 655:
! 656: if ((fonction == instruction_case) ||
! 657: (fonction == instruction_do) ||
! 658: (fonction == instruction_if) ||
! 659: (fonction == instruction_iferr) ||
! 660: (fonction == instruction_select) ||
! 661: (fonction == instruction_while))
! 662: {
! 663: niveau++;
! 664: }
! 665: else if (fonction == instruction_end)
! 666: {
! 667: niveau--;
! 668: }
! 669: }
! 670: } while(drapeau_fin == d_faux);
! 671:
! 672: if (pthread_mutex_lock(&((*(*(*s_etat_processus)
! 673: .expression_courante).donnee).mutex)) != 0)
! 674: {
! 675: (*s_etat_processus).erreur_systeme = d_es_processus;
! 676: return;
! 677: }
! 678:
! 679: (*((struct_fonction *) (*(*s_registre).donnee).objet))
! 680: .prediction_saut = (*s_etat_processus)
! 681: .expression_courante;
! 682: (*((struct_fonction *) (*(*s_registre).donnee).objet))
! 683: .prediction_execution = execution;
! 684:
! 685: if (pthread_mutex_unlock(&((*(*(*s_etat_processus)
! 686: .expression_courante).donnee).mutex)) != 0)
! 687: {
! 688: (*s_etat_processus).erreur_systeme = d_es_processus;
! 689: return;
! 690: }
! 691: }
! 692: }
! 693: }
! 694: }
! 695: else
! 696: {
! 697: (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
! 698: return;
! 699: }
! 700:
! 701: liberation(s_etat_processus, s_objet);
! 702:
! 703: return;
! 704: }
! 705:
! 706:
! 707: /*
! 708: ================================================================================
! 709: Fonction 'tan'
! 710: ================================================================================
! 711: Entrées : pointeur sur une structure struct_processus
! 712: --------------------------------------------------------------------------------
! 713: Sorties :
! 714: --------------------------------------------------------------------------------
! 715: Effets de bord : néant
! 716: ================================================================================
! 717: */
! 718:
! 719: void
! 720: instruction_tan(struct_processus *s_etat_processus)
! 721: {
! 722: real8 angle;
! 723:
! 724: integer4 erreur;
! 725:
! 726: struct_liste_chainee *l_element_courant;
! 727: struct_liste_chainee *l_element_precedent;
! 728:
! 729: struct_objet *s_copie_argument;
! 730: struct_objet *s_objet_argument;
! 731: struct_objet *s_objet_resultat;
! 732:
! 733: (*s_etat_processus).erreur_execution = d_ex;
! 734:
! 735: if ((*s_etat_processus).affichage_arguments == 'Y')
! 736: {
! 737: printf("\n TAN ");
! 738:
! 739: if ((*s_etat_processus).langue == 'F')
! 740: {
! 741: printf("(tangente)\n\n");
! 742: }
! 743: else
! 744: {
! 745: printf("(tangent)\n\n");
! 746: }
! 747:
! 748: printf(" 1: %s, %s\n", d_INT, d_REL);
! 749: printf("-> 1: %s\n\n", d_REL);
! 750:
! 751: printf(" 1: %s\n", d_CPL);
! 752: printf("-> 1: %s\n\n", d_CPL);
! 753:
! 754: printf(" 1: %s, %s\n", d_NOM, d_ALG);
! 755: printf("-> 1: %s\n\n", d_ALG);
! 756:
! 757: printf(" 1: %s\n", d_RPN);
! 758: printf("-> 1: %s\n", d_RPN);
! 759:
! 760: return;
! 761: }
! 762: else if ((*s_etat_processus).test_instruction == 'Y')
! 763: {
! 764: (*s_etat_processus).nombre_arguments = 1;
! 765: return;
! 766: }
! 767:
! 768: if (test_cfsf(s_etat_processus, 31) == d_vrai)
! 769: {
! 770: if (empilement_pile_last(s_etat_processus, 1) == d_erreur)
! 771: {
! 772: return;
! 773: }
! 774: }
! 775:
! 776: if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
! 777: &s_objet_argument) == d_erreur)
! 778: {
! 779: (*s_etat_processus).erreur_execution = d_ex_manque_argument;
! 780: return;
! 781: }
! 782:
! 783: /*
! 784: --------------------------------------------------------------------------------
! 785: Tangente d'un entier ou d'un réel
! 786: --------------------------------------------------------------------------------
! 787: */
! 788:
! 789: if (((*s_objet_argument).type == INT) ||
! 790: ((*s_objet_argument).type == REL))
! 791: {
! 792: if ((s_objet_resultat = allocation(s_etat_processus, REL)) == NULL)
! 793: {
! 794: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 795: return;
! 796: }
! 797:
! 798: if ((*s_objet_argument).type == INT)
! 799: {
! 800: angle = (real8) (*((integer8 *) (*s_objet_argument).objet));
! 801: }
! 802: else
! 803: {
! 804: angle = (*((real8 *) (*s_objet_argument).objet));
! 805: }
! 806:
! 807: if (test_cfsf(s_etat_processus, 60) == d_faux)
! 808: {
! 809: conversion_degres_vers_radians(&angle);
! 810: }
! 811:
! 812: if ((cos(angle) == 0) && (test_cfsf(s_etat_processus, 59) == d_vrai))
! 813: {
! 814: liberation(s_etat_processus, s_objet_argument);
! 815: liberation(s_etat_processus, s_objet_resultat);
! 816:
! 817: (*s_etat_processus).exception = d_ep_division_par_zero;
! 818: return;
! 819: }
! 820:
! 821: (*((real8 *) (*s_objet_resultat).objet)) = tan(angle);
! 822: }
! 823:
! 824: /*
! 825: --------------------------------------------------------------------------------
! 826: Tangente d'un complexe
! 827: --------------------------------------------------------------------------------
! 828: */
! 829:
! 830: else if ((*s_objet_argument).type == CPL)
! 831: {
! 832: if ((s_objet_resultat = allocation(s_etat_processus, CPL)) == NULL)
! 833: {
! 834: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 835: return;
! 836: }
! 837:
! 838: f77tan_((struct_complexe16 *) (*s_objet_argument).objet,
! 839: (struct_complexe16 *) (*s_objet_resultat).objet, &erreur);
! 840:
! 841: if (erreur != 0)
! 842: {
! 843: liberation(s_etat_processus, s_objet_argument);
! 844: liberation(s_etat_processus, s_objet_resultat);
! 845:
! 846: (*s_etat_processus).exception = d_ep_division_par_zero;
! 847: return;
! 848: }
! 849: }
! 850:
! 851: /*
! 852: --------------------------------------------------------------------------------
! 853: Tangente d'un nom
! 854: --------------------------------------------------------------------------------
! 855: */
! 856:
! 857: else if ((*s_objet_argument).type == NOM)
! 858: {
! 859: if ((s_objet_resultat = allocation(s_etat_processus, ALG)) == NULL)
! 860: {
! 861: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 862: return;
! 863: }
! 864:
! 865: if (((*s_objet_resultat).objet =
! 866: allocation_maillon(s_etat_processus)) == NULL)
! 867: {
! 868: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 869: return;
! 870: }
! 871:
! 872: l_element_courant = (*s_objet_resultat).objet;
! 873:
! 874: if (((*l_element_courant).donnee = allocation(s_etat_processus, FCT))
! 875: == NULL)
! 876: {
! 877: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 878: return;
! 879: }
! 880:
! 881: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 882: .nombre_arguments = 0;
! 883: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 884: .fonction = instruction_vers_niveau_superieur;
! 885:
! 886: if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 887: .nom_fonction = malloc(3 * sizeof(unsigned char))) == NULL)
! 888: {
! 889: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 890: return;
! 891: }
! 892:
! 893: strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 894: .nom_fonction, "<<");
! 895:
! 896: if (((*l_element_courant).suivant =
! 897: allocation_maillon(s_etat_processus)) == NULL)
! 898: {
! 899: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 900: return;
! 901: }
! 902:
! 903: l_element_courant = (*l_element_courant).suivant;
! 904: (*l_element_courant).donnee = s_objet_argument;
! 905:
! 906: if (((*l_element_courant).suivant =
! 907: allocation_maillon(s_etat_processus)) == NULL)
! 908: {
! 909: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 910: return;
! 911: }
! 912:
! 913: l_element_courant = (*l_element_courant).suivant;
! 914:
! 915: if (((*l_element_courant).donnee = allocation(s_etat_processus, FCT))
! 916: == NULL)
! 917: {
! 918: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 919: return;
! 920: }
! 921:
! 922: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 923: .nombre_arguments = 1;
! 924: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 925: .fonction = instruction_tan;
! 926:
! 927: if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 928: .nom_fonction = malloc(4 * sizeof(unsigned char))) == NULL)
! 929: {
! 930: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 931: return;
! 932: }
! 933:
! 934: strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 935: .nom_fonction, "TAN");
! 936:
! 937: if (((*l_element_courant).suivant =
! 938: allocation_maillon(s_etat_processus)) == NULL)
! 939: {
! 940: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 941: return;
! 942: }
! 943:
! 944: l_element_courant = (*l_element_courant).suivant;
! 945:
! 946: if (((*l_element_courant).donnee = allocation(s_etat_processus, FCT))
! 947: == NULL)
! 948: {
! 949: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 950: return;
! 951: }
! 952:
! 953: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 954: .nombre_arguments = 0;
! 955: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 956: .fonction = instruction_vers_niveau_inferieur;
! 957:
! 958: if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 959: .nom_fonction = malloc(3 * sizeof(unsigned char))) == NULL)
! 960: {
! 961: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 962: return;
! 963: }
! 964:
! 965: strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 966: .nom_fonction, ">>");
! 967:
! 968: (*l_element_courant).suivant = NULL;
! 969: s_objet_argument = NULL;
! 970: }
! 971:
! 972: /*
! 973: --------------------------------------------------------------------------------
! 974: Tangente d'une expression
! 975: --------------------------------------------------------------------------------
! 976: */
! 977:
! 978: else if (((*s_objet_argument).type == ALG) ||
! 979: ((*s_objet_argument).type == RPN))
! 980: {
! 981: if ((s_copie_argument = copie_objet(s_etat_processus, s_objet_argument,
! 982: 'N')) == NULL)
! 983: {
! 984: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 985: return;
! 986: }
! 987:
! 988: l_element_courant = (struct_liste_chainee *)
! 989: (*s_copie_argument).objet;
! 990: l_element_precedent = l_element_courant;
! 991:
! 992: while((*l_element_courant).suivant != NULL)
! 993: {
! 994: l_element_precedent = l_element_courant;
! 995: l_element_courant = (*l_element_courant).suivant;
! 996: }
! 997:
! 998: if (((*l_element_precedent).suivant =
! 999: allocation_maillon(s_etat_processus)) == NULL)
! 1000: {
! 1001: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1002: return;
! 1003: }
! 1004:
! 1005: if (((*(*l_element_precedent).suivant).donnee =
! 1006: allocation(s_etat_processus, FCT)) == NULL)
! 1007: {
! 1008: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1009: return;
! 1010: }
! 1011:
! 1012: (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
! 1013: .donnee).objet)).nombre_arguments = 1;
! 1014: (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
! 1015: .donnee).objet)).fonction = instruction_tan;
! 1016:
! 1017: if (((*((struct_fonction *) (*(*(*l_element_precedent)
! 1018: .suivant).donnee).objet)).nom_fonction =
! 1019: malloc(4 * sizeof(unsigned char))) == NULL)
! 1020: {
! 1021: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1022: return;
! 1023: }
! 1024:
! 1025: strcpy((*((struct_fonction *) (*(*(*l_element_precedent)
! 1026: .suivant).donnee).objet)).nom_fonction, "TAN");
! 1027:
! 1028: (*(*l_element_precedent).suivant).suivant = l_element_courant;
! 1029:
! 1030: s_objet_resultat = s_copie_argument;
! 1031: }
! 1032:
! 1033: /*
! 1034: --------------------------------------------------------------------------------
! 1035: Réalisation impossible de la fonction tangente
! 1036: --------------------------------------------------------------------------------
! 1037: */
! 1038:
! 1039: else
! 1040: {
! 1041: liberation(s_etat_processus, s_objet_argument);
! 1042:
! 1043: (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
! 1044: return;
! 1045: }
! 1046:
! 1047: liberation(s_etat_processus, s_objet_argument);
! 1048:
! 1049: if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
! 1050: s_objet_resultat) == d_erreur)
! 1051: {
! 1052: return;
! 1053: }
! 1054:
! 1055: return;
! 1056: }
! 1057:
! 1058:
! 1059: /*
! 1060: ================================================================================
! 1061: Fonction 'tanh'
! 1062: ================================================================================
! 1063: Entrées : pointeur sur une structure struct_processus
! 1064: --------------------------------------------------------------------------------
! 1065: Sorties :
! 1066: --------------------------------------------------------------------------------
! 1067: Effets de bord : néant
! 1068: ================================================================================
! 1069: */
! 1070:
! 1071: void
! 1072: instruction_tanh(struct_processus *s_etat_processus)
! 1073: {
! 1074: real8 argument;
! 1075:
! 1076: integer4 erreur;
! 1077:
! 1078: struct_liste_chainee *l_element_courant;
! 1079: struct_liste_chainee *l_element_precedent;
! 1080:
! 1081: struct_objet *s_copie_argument;
! 1082: struct_objet *s_objet_argument;
! 1083: struct_objet *s_objet_resultat;
! 1084:
! 1085: (*s_etat_processus).erreur_execution = d_ex;
! 1086:
! 1087: if ((*s_etat_processus).affichage_arguments == 'Y')
! 1088: {
! 1089: printf("\n TANH ");
! 1090:
! 1091: if ((*s_etat_processus).langue == 'F')
! 1092: {
! 1093: printf("(tangente hyperbolique)\n\n");
! 1094: }
! 1095: else
! 1096: {
! 1097: printf("(hyperbolic tangent)\n\n");
! 1098: }
! 1099:
! 1100: printf(" 1: %s, %s\n", d_INT, d_REL);
! 1101: printf("-> 1: %s\n\n", d_INT);
! 1102:
! 1103: printf(" 1: %s\n", d_CPL);
! 1104: printf("-> 1: %s\n\n", d_CPL);
! 1105:
! 1106: printf(" 1: %s, %s\n", d_NOM, d_ALG);
! 1107: printf("-> 1: %s\n\n", d_ALG);
! 1108:
! 1109: printf(" 1: %s\n", d_RPN);
! 1110: printf("-> 1: %s\n", d_RPN);
! 1111:
! 1112: return;
! 1113: }
! 1114: else if ((*s_etat_processus).test_instruction == 'Y')
! 1115: {
! 1116: (*s_etat_processus).nombre_arguments = 1;
! 1117: return;
! 1118: }
! 1119:
! 1120: if (test_cfsf(s_etat_processus, 31) == d_vrai)
! 1121: {
! 1122: if (empilement_pile_last(s_etat_processus, 1) == d_erreur)
! 1123: {
! 1124: return;
! 1125: }
! 1126: }
! 1127:
! 1128: if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
! 1129: &s_objet_argument) == d_erreur)
! 1130: {
! 1131: (*s_etat_processus).erreur_execution = d_ex_manque_argument;
! 1132: return;
! 1133: }
! 1134:
! 1135: /*
! 1136: --------------------------------------------------------------------------------
! 1137: Tangente hyperbolique d'un entier ou d'un réel
! 1138: --------------------------------------------------------------------------------
! 1139: */
! 1140:
! 1141: if (((*s_objet_argument).type == INT) ||
! 1142: ((*s_objet_argument).type == REL))
! 1143: {
! 1144: if ((s_objet_resultat = allocation(s_etat_processus, REL)) == NULL)
! 1145: {
! 1146: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1147: return;
! 1148: }
! 1149:
! 1150: if ((*s_objet_argument).type == INT)
! 1151: {
! 1152: argument = (real8) (*((integer8 *) (*s_objet_argument).objet));
! 1153: }
! 1154: else
! 1155: {
! 1156: argument = (*((real8 *) (*s_objet_argument).objet));
! 1157: }
! 1158:
! 1159: (*((real8 *) (*s_objet_resultat).objet)) = tanh(argument);
! 1160: }
! 1161:
! 1162: /*
! 1163: --------------------------------------------------------------------------------
! 1164: Tangente hyperbolique d'un complexe
! 1165: --------------------------------------------------------------------------------
! 1166: */
! 1167:
! 1168: else if ((*s_objet_argument).type == CPL)
! 1169: {
! 1170: if ((s_objet_resultat = allocation(s_etat_processus, CPL)) == NULL)
! 1171: {
! 1172: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1173: return;
! 1174: }
! 1175:
! 1176: f77tanh_((struct_complexe16 *) (*s_objet_argument).objet,
! 1177: (struct_complexe16 *) (*s_objet_resultat).objet, &erreur);
! 1178:
! 1179: if (erreur != 0)
! 1180: {
! 1181: liberation(s_etat_processus, s_objet_argument);
! 1182: liberation(s_etat_processus, s_objet_resultat);
! 1183:
! 1184: (*s_etat_processus).exception = d_ep_division_par_zero;
! 1185: return;
! 1186: }
! 1187: }
! 1188:
! 1189: /*
! 1190: --------------------------------------------------------------------------------
! 1191: Tangente hyperbolique d'un nom
! 1192: --------------------------------------------------------------------------------
! 1193: */
! 1194:
! 1195: else if ((*s_objet_argument).type == NOM)
! 1196: {
! 1197: if ((s_objet_resultat = allocation(s_etat_processus, ALG)) == NULL)
! 1198: {
! 1199: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1200: return;
! 1201: }
! 1202:
! 1203: if (((*s_objet_resultat).objet =
! 1204: allocation_maillon(s_etat_processus)) == NULL)
! 1205: {
! 1206: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1207: return;
! 1208: }
! 1209:
! 1210: l_element_courant = (*s_objet_resultat).objet;
! 1211:
! 1212: if (((*l_element_courant).donnee = allocation(s_etat_processus, FCT))
! 1213: == NULL)
! 1214: {
! 1215: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1216: return;
! 1217: }
! 1218:
! 1219: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 1220: .nombre_arguments = 0;
! 1221: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 1222: .fonction = instruction_vers_niveau_superieur;
! 1223:
! 1224: if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 1225: .nom_fonction = malloc(3 * sizeof(unsigned char))) == NULL)
! 1226: {
! 1227: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1228: return;
! 1229: }
! 1230:
! 1231: strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 1232: .nom_fonction, "<<");
! 1233:
! 1234: if (((*l_element_courant).suivant =
! 1235: allocation_maillon(s_etat_processus)) == NULL)
! 1236: {
! 1237: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1238: return;
! 1239: }
! 1240:
! 1241: l_element_courant = (*l_element_courant).suivant;
! 1242: (*l_element_courant).donnee = s_objet_argument;
! 1243:
! 1244: if (((*l_element_courant).suivant =
! 1245: allocation_maillon(s_etat_processus)) == NULL)
! 1246: {
! 1247: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1248: return;
! 1249: }
! 1250:
! 1251: l_element_courant = (*l_element_courant).suivant;
! 1252:
! 1253: if (((*l_element_courant).donnee = allocation(s_etat_processus, FCT))
! 1254: == NULL)
! 1255: {
! 1256: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1257: return;
! 1258: }
! 1259:
! 1260: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 1261: .nombre_arguments = 1;
! 1262: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 1263: .fonction = instruction_tanh;
! 1264:
! 1265: if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 1266: .nom_fonction = malloc(5 * sizeof(unsigned char))) == NULL)
! 1267: {
! 1268: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1269: return;
! 1270: }
! 1271:
! 1272: strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 1273: .nom_fonction, "TANH");
! 1274:
! 1275: if (((*l_element_courant).suivant =
! 1276: allocation_maillon(s_etat_processus)) == NULL)
! 1277: {
! 1278: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1279: return;
! 1280: }
! 1281:
! 1282: l_element_courant = (*l_element_courant).suivant;
! 1283:
! 1284: if (((*l_element_courant).donnee = allocation(s_etat_processus, FCT))
! 1285: == NULL)
! 1286: {
! 1287: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1288: return;
! 1289: }
! 1290:
! 1291: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 1292: .nombre_arguments = 0;
! 1293: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 1294: .fonction = instruction_vers_niveau_inferieur;
! 1295:
! 1296: if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 1297: .nom_fonction = malloc(3 * sizeof(unsigned char))) == NULL)
! 1298: {
! 1299: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1300: return;
! 1301: }
! 1302:
! 1303: strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 1304: .nom_fonction, ">>");
! 1305:
! 1306: (*l_element_courant).suivant = NULL;
! 1307: s_objet_argument = NULL;
! 1308: }
! 1309:
! 1310: /*
! 1311: --------------------------------------------------------------------------------
! 1312: Tangente hyperbolique d'une expression
! 1313: --------------------------------------------------------------------------------
! 1314: */
! 1315:
! 1316: else if (((*s_objet_argument).type == ALG) ||
! 1317: ((*s_objet_argument).type == RPN))
! 1318: {
! 1319: if ((s_copie_argument = copie_objet(s_etat_processus, s_objet_argument,
! 1320: 'N')) == NULL)
! 1321: {
! 1322: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1323: return;
! 1324: }
! 1325:
! 1326: l_element_courant = (struct_liste_chainee *)
! 1327: (*s_copie_argument).objet;
! 1328: l_element_precedent = l_element_courant;
! 1329:
! 1330: while((*l_element_courant).suivant != NULL)
! 1331: {
! 1332: l_element_precedent = l_element_courant;
! 1333: l_element_courant = (*l_element_courant).suivant;
! 1334: }
! 1335:
! 1336: if (((*l_element_precedent).suivant =
! 1337: allocation_maillon(s_etat_processus)) == NULL)
! 1338: {
! 1339: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1340: return;
! 1341: }
! 1342:
! 1343: if (((*(*l_element_precedent).suivant).donnee =
! 1344: allocation(s_etat_processus, FCT)) == NULL)
! 1345: {
! 1346: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1347: return;
! 1348: }
! 1349:
! 1350: (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
! 1351: .donnee).objet)).nombre_arguments = 1;
! 1352: (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
! 1353: .donnee).objet)).fonction = instruction_tanh;
! 1354:
! 1355: if (((*((struct_fonction *) (*(*(*l_element_precedent)
! 1356: .suivant).donnee).objet)).nom_fonction =
! 1357: malloc(5 * sizeof(unsigned char))) == NULL)
! 1358: {
! 1359: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1360: return;
! 1361: }
! 1362:
! 1363: strcpy((*((struct_fonction *) (*(*(*l_element_precedent)
! 1364: .suivant).donnee).objet)).nom_fonction, "TANH");
! 1365:
! 1366: (*(*l_element_precedent).suivant).suivant = l_element_courant;
! 1367:
! 1368: s_objet_resultat = s_copie_argument;
! 1369: }
! 1370:
! 1371: /*
! 1372: --------------------------------------------------------------------------------
! 1373: Réalisation impossible de la fonction tangente hyperbolique
! 1374: --------------------------------------------------------------------------------
! 1375: */
! 1376:
! 1377: else
! 1378: {
! 1379: liberation(s_etat_processus, s_objet_argument);
! 1380:
! 1381: (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
! 1382: return;
! 1383: }
! 1384:
! 1385: liberation(s_etat_processus, s_objet_argument);
! 1386:
! 1387: if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
! 1388: s_objet_resultat) == d_erreur)
! 1389: {
! 1390: return;
! 1391: }
! 1392:
! 1393: return;
! 1394: }
! 1395:
! 1396:
! 1397: /*
! 1398: ================================================================================
! 1399: Fonction 'true'
! 1400: ================================================================================
! 1401: Entrées : structure processus
! 1402: --------------------------------------------------------------------------------
! 1403: Sorties :
! 1404: --------------------------------------------------------------------------------
! 1405: Effets de bord : néant
! 1406: ================================================================================
! 1407: */
! 1408:
! 1409: void
! 1410: instruction_true(struct_processus *s_etat_processus)
! 1411: {
! 1412: struct_objet *s_objet;
! 1413:
! 1414: if ((*s_etat_processus).affichage_arguments == 'Y')
! 1415: {
! 1416: printf("\n TRUE ");
! 1417:
! 1418: if ((*s_etat_processus).langue == 'F')
! 1419: {
! 1420: printf("(valeur vraie)\n\n");
! 1421: }
! 1422: else
! 1423: {
! 1424: printf("(true value)\n\n");
! 1425: }
! 1426:
! 1427: printf("-> 1: %s\n", d_INT);
! 1428:
! 1429: return;
! 1430: }
! 1431: else if ((*s_etat_processus).test_instruction == 'Y')
! 1432: {
! 1433: (*s_etat_processus).nombre_arguments = -1;
! 1434: return;
! 1435: }
! 1436:
! 1437: if ((s_objet = allocation(s_etat_processus, INT)) == NULL)
! 1438: {
! 1439: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1440: return;
! 1441: }
! 1442:
! 1443: (*((integer8 *) (*s_objet).objet)) = -1;
! 1444:
! 1445: if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
! 1446: s_objet) == d_erreur)
! 1447: {
! 1448: return;
! 1449: }
! 1450:
! 1451: return;
! 1452: }
! 1453:
! 1454: // vim: ts=4
CVSweb interface <joel.bertrand@systella.fr>