Annotation of rpl/src/instructions_s2.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 'sin'
! 29: ================================================================================
! 30: Entrées : pointeur sur une structure struct_processus
! 31: --------------------------------------------------------------------------------
! 32: Sorties :
! 33: --------------------------------------------------------------------------------
! 34: Effets de bord : néant
! 35: ================================================================================
! 36: */
! 37:
! 38: void
! 39: instruction_sin(struct_processus *s_etat_processus)
! 40: {
! 41: real8 angle;
! 42:
! 43: struct_liste_chainee *l_element_courant;
! 44: struct_liste_chainee *l_element_precedent;
! 45:
! 46: struct_objet *s_copie_argument;
! 47: struct_objet *s_objet_argument;
! 48: struct_objet *s_objet_resultat;
! 49:
! 50: (*s_etat_processus).erreur_execution = d_ex;
! 51:
! 52: if ((*s_etat_processus).affichage_arguments == 'Y')
! 53: {
! 54: printf("\n SIN ");
! 55:
! 56: if ((*s_etat_processus).langue == 'F')
! 57: {
! 58: printf("(sinus)\n\n");
! 59: }
! 60: else
! 61: {
! 62: printf("(sine)\n\n");
! 63: }
! 64:
! 65: printf(" 1: %s, %s\n", d_INT, d_REL);
! 66: printf("-> 1: %s\n\n", d_REL);
! 67:
! 68: printf(" 1: %s\n", d_CPL);
! 69: printf("-> 1: %s\n\n", d_CPL);
! 70:
! 71: printf(" 1: %s, %s\n", d_NOM, d_ALG);
! 72: printf("-> 1: %s\n\n", d_ALG);
! 73:
! 74: printf(" 1: %s\n", d_RPN);
! 75: printf("-> 1: %s\n", d_RPN);
! 76:
! 77: return;
! 78: }
! 79: else if ((*s_etat_processus).test_instruction == 'Y')
! 80: {
! 81: (*s_etat_processus).nombre_arguments = 1;
! 82: return;
! 83: }
! 84:
! 85: if (test_cfsf(s_etat_processus, 31) == d_vrai)
! 86: {
! 87: if (empilement_pile_last(s_etat_processus, 1) == d_erreur)
! 88: {
! 89: return;
! 90: }
! 91: }
! 92:
! 93: if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
! 94: &s_objet_argument) == d_erreur)
! 95: {
! 96: (*s_etat_processus).erreur_execution = d_ex_manque_argument;
! 97: return;
! 98: }
! 99:
! 100: /*
! 101: --------------------------------------------------------------------------------
! 102: Sinus d'un entier ou d'un réel
! 103: --------------------------------------------------------------------------------
! 104: */
! 105:
! 106: if (((*s_objet_argument).type == INT) ||
! 107: ((*s_objet_argument).type == REL))
! 108: {
! 109: if ((s_objet_resultat = allocation(s_etat_processus, REL)) == NULL)
! 110: {
! 111: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 112: return;
! 113: }
! 114:
! 115: if ((*s_objet_argument).type == INT)
! 116: {
! 117: angle = (real8) (*((integer8 *) (*s_objet_argument).objet));
! 118: }
! 119: else
! 120: {
! 121: angle = (*((real8 *) (*s_objet_argument).objet));
! 122: }
! 123:
! 124: if (test_cfsf(s_etat_processus, 60) == d_faux)
! 125: {
! 126: conversion_degres_vers_radians(&angle);
! 127: }
! 128:
! 129: (*((real8 *) (*s_objet_resultat).objet)) = sin(angle);
! 130: }
! 131:
! 132: /*
! 133: --------------------------------------------------------------------------------
! 134: Sinus d'un complexe
! 135: --------------------------------------------------------------------------------
! 136: */
! 137:
! 138: else if ((*s_objet_argument).type == CPL)
! 139: {
! 140: if ((s_objet_resultat = allocation(s_etat_processus, CPL)) == NULL)
! 141: {
! 142: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 143: return;
! 144: }
! 145:
! 146: f77sin_((struct_complexe16 *) (*s_objet_argument).objet,
! 147: (struct_complexe16 *) (*s_objet_resultat).objet);
! 148: }
! 149:
! 150: /*
! 151: --------------------------------------------------------------------------------
! 152: Sinus d'un nom
! 153: --------------------------------------------------------------------------------
! 154: */
! 155:
! 156: else if ((*s_objet_argument).type == NOM)
! 157: {
! 158: if ((s_objet_resultat = allocation(s_etat_processus, ALG)) == NULL)
! 159: {
! 160: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 161: return;
! 162: }
! 163:
! 164: if (((*s_objet_resultat).objet =
! 165: allocation_maillon(s_etat_processus)) == NULL)
! 166: {
! 167: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 168: return;
! 169: }
! 170:
! 171: l_element_courant = (*s_objet_resultat).objet;
! 172:
! 173: if (((*l_element_courant).donnee = allocation(s_etat_processus, FCT))
! 174: == NULL)
! 175: {
! 176: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 177: return;
! 178: }
! 179:
! 180: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 181: .nombre_arguments = 0;
! 182: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 183: .fonction = instruction_vers_niveau_superieur;
! 184:
! 185: if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 186: .nom_fonction = malloc(3 * sizeof(unsigned char))) == NULL)
! 187: {
! 188: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 189: return;
! 190: }
! 191:
! 192: strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 193: .nom_fonction, "<<");
! 194:
! 195: if (((*l_element_courant).suivant =
! 196: allocation_maillon(s_etat_processus)) == NULL)
! 197: {
! 198: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 199: return;
! 200: }
! 201:
! 202: l_element_courant = (*l_element_courant).suivant;
! 203: (*l_element_courant).donnee = s_objet_argument;
! 204:
! 205: if (((*l_element_courant).suivant =
! 206: allocation_maillon(s_etat_processus)) == NULL)
! 207: {
! 208: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 209: return;
! 210: }
! 211:
! 212: l_element_courant = (*l_element_courant).suivant;
! 213:
! 214: if (((*l_element_courant).donnee = allocation(s_etat_processus, FCT))
! 215: == NULL)
! 216: {
! 217: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 218: return;
! 219: }
! 220:
! 221: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 222: .nombre_arguments = 1;
! 223: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 224: .fonction = instruction_sin;
! 225:
! 226: if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 227: .nom_fonction = malloc(4 * sizeof(unsigned char))) == NULL)
! 228: {
! 229: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 230: return;
! 231: }
! 232:
! 233: strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 234: .nom_fonction, "SIN");
! 235:
! 236: if (((*l_element_courant).suivant =
! 237: allocation_maillon(s_etat_processus)) == NULL)
! 238: {
! 239: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 240: return;
! 241: }
! 242:
! 243: l_element_courant = (*l_element_courant).suivant;
! 244:
! 245: if (((*l_element_courant).donnee = allocation(s_etat_processus, FCT))
! 246: == NULL)
! 247: {
! 248: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 249: return;
! 250: }
! 251:
! 252: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 253: .nombre_arguments = 0;
! 254: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 255: .fonction = instruction_vers_niveau_inferieur;
! 256:
! 257: if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 258: .nom_fonction = malloc(3 * sizeof(unsigned char))) == NULL)
! 259: {
! 260: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 261: return;
! 262: }
! 263:
! 264: strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 265: .nom_fonction, ">>");
! 266:
! 267: (*l_element_courant).suivant = NULL;
! 268: s_objet_argument = NULL;
! 269: }
! 270:
! 271: /*
! 272: --------------------------------------------------------------------------------
! 273: Sinus d'une expression
! 274: --------------------------------------------------------------------------------
! 275: */
! 276:
! 277: else if (((*s_objet_argument).type == ALG) ||
! 278: ((*s_objet_argument).type == RPN))
! 279: {
! 280: if ((s_copie_argument = copie_objet(s_etat_processus, s_objet_argument,
! 281: 'N')) == NULL)
! 282: {
! 283: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 284: return;
! 285: }
! 286:
! 287: l_element_courant = (struct_liste_chainee *)
! 288: (*s_copie_argument).objet;
! 289: l_element_precedent = l_element_courant;
! 290:
! 291: while((*l_element_courant).suivant != NULL)
! 292: {
! 293: l_element_precedent = l_element_courant;
! 294: l_element_courant = (*l_element_courant).suivant;
! 295: }
! 296:
! 297: if (((*l_element_precedent).suivant =
! 298: allocation_maillon(s_etat_processus)) == NULL)
! 299: {
! 300: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 301: return;
! 302: }
! 303:
! 304: if (((*(*l_element_precedent).suivant).donnee =
! 305: allocation(s_etat_processus, FCT)) == NULL)
! 306: {
! 307: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 308: return;
! 309: }
! 310:
! 311: (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
! 312: .donnee).objet)).nombre_arguments = 1;
! 313: (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
! 314: .donnee).objet)).fonction = instruction_sin;
! 315:
! 316: if (((*((struct_fonction *) (*(*(*l_element_precedent)
! 317: .suivant).donnee).objet)).nom_fonction =
! 318: malloc(4 * sizeof(unsigned char))) == NULL)
! 319: {
! 320: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 321: return;
! 322: }
! 323:
! 324: strcpy((*((struct_fonction *) (*(*(*l_element_precedent)
! 325: .suivant).donnee).objet)).nom_fonction, "SIN");
! 326:
! 327: (*(*l_element_precedent).suivant).suivant = l_element_courant;
! 328:
! 329: s_objet_resultat = s_copie_argument;
! 330: }
! 331:
! 332: /*
! 333: --------------------------------------------------------------------------------
! 334: Réalisation impossible de la fonction sinus
! 335: --------------------------------------------------------------------------------
! 336: */
! 337:
! 338: else
! 339: {
! 340: liberation(s_etat_processus, s_objet_argument);
! 341:
! 342: (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
! 343: return;
! 344: }
! 345:
! 346: liberation(s_etat_processus, s_objet_argument);
! 347:
! 348: if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
! 349: s_objet_resultat) == d_erreur)
! 350: {
! 351: return;
! 352: }
! 353:
! 354: return;
! 355: }
! 356:
! 357:
! 358: /*
! 359: ================================================================================
! 360: Fonction 'sinh'
! 361: ================================================================================
! 362: Entrées : pointeur sur une structure struct_processus
! 363: --------------------------------------------------------------------------------
! 364: Sorties :
! 365: --------------------------------------------------------------------------------
! 366: Effets de bord : néant
! 367: ================================================================================
! 368: */
! 369:
! 370: void
! 371: instruction_sinh(struct_processus *s_etat_processus)
! 372: {
! 373: real8 argument;
! 374:
! 375: struct_liste_chainee *l_element_courant;
! 376: struct_liste_chainee *l_element_precedent;
! 377:
! 378: struct_objet *s_copie_argument;
! 379: struct_objet *s_objet_argument;
! 380: struct_objet *s_objet_resultat;
! 381:
! 382: (*s_etat_processus).erreur_execution = d_ex;
! 383:
! 384: if ((*s_etat_processus).affichage_arguments == 'Y')
! 385: {
! 386: printf("\n SINH ");
! 387:
! 388: if ((*s_etat_processus).langue == 'F')
! 389: {
! 390: printf("(sinus hyperbolique)\n\n");
! 391: }
! 392: else
! 393: {
! 394: printf("(hyperbolic sine)\n\n");
! 395: }
! 396:
! 397: printf(" 1: %s, %s\n", d_INT, d_REL);
! 398: printf("-> 1: %s\n\n", d_INT);
! 399:
! 400: printf(" 1: %s\n", d_CPL);
! 401: printf("-> 1: %s\n\n", d_CPL);
! 402:
! 403: printf(" 1: %s, %s\n", d_NOM, d_ALG);
! 404: printf("-> 1: %s\n\n", d_ALG);
! 405:
! 406: printf(" 1: %s\n", d_RPN);
! 407: printf("-> 1: %s\n", d_RPN);
! 408:
! 409: return;
! 410: }
! 411: else if ((*s_etat_processus).test_instruction == 'Y')
! 412: {
! 413: (*s_etat_processus).nombre_arguments = 1;
! 414: return;
! 415: }
! 416:
! 417: if (test_cfsf(s_etat_processus, 31) == d_vrai)
! 418: {
! 419: if (empilement_pile_last(s_etat_processus, 1) == d_erreur)
! 420: {
! 421: return;
! 422: }
! 423: }
! 424:
! 425: if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
! 426: &s_objet_argument) == d_erreur)
! 427: {
! 428: (*s_etat_processus).erreur_execution = d_ex_manque_argument;
! 429: return;
! 430: }
! 431:
! 432: /*
! 433: --------------------------------------------------------------------------------
! 434: Sinus hyperbolique d'un entier ou d'un réel
! 435: --------------------------------------------------------------------------------
! 436: */
! 437:
! 438: if (((*s_objet_argument).type == INT) ||
! 439: ((*s_objet_argument).type == REL))
! 440: {
! 441: if ((s_objet_resultat = allocation(s_etat_processus, REL)) == NULL)
! 442: {
! 443: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 444: return;
! 445: }
! 446:
! 447: if ((*s_objet_argument).type == INT)
! 448: {
! 449: argument = (real8) (*((integer8 *) (*s_objet_argument).objet));
! 450: }
! 451: else
! 452: {
! 453: argument = (*((real8 *) (*s_objet_argument).objet));
! 454: }
! 455:
! 456: (*((real8 *) (*s_objet_resultat).objet)) = sinh(argument);
! 457: }
! 458:
! 459: /*
! 460: --------------------------------------------------------------------------------
! 461: Sinus hyperbolique d'un complexe
! 462: --------------------------------------------------------------------------------
! 463: */
! 464:
! 465: else if ((*s_objet_argument).type == CPL)
! 466: {
! 467: if ((s_objet_resultat = allocation(s_etat_processus, CPL)) == NULL)
! 468: {
! 469: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 470: return;
! 471: }
! 472:
! 473: f77sinh_((struct_complexe16 *) (*s_objet_argument).objet,
! 474: (struct_complexe16 *) (*s_objet_resultat).objet);
! 475: }
! 476:
! 477: /*
! 478: --------------------------------------------------------------------------------
! 479: Sinus hyperbolique d'un nom
! 480: --------------------------------------------------------------------------------
! 481: */
! 482:
! 483: else if ((*s_objet_argument).type == NOM)
! 484: {
! 485: if ((s_objet_resultat = allocation(s_etat_processus, ALG)) == NULL)
! 486: {
! 487: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 488: return;
! 489: }
! 490:
! 491: if (((*s_objet_resultat).objet =
! 492: allocation_maillon(s_etat_processus)) == NULL)
! 493: {
! 494: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 495: return;
! 496: }
! 497:
! 498: l_element_courant = (*s_objet_resultat).objet;
! 499:
! 500: if (((*l_element_courant).donnee = allocation(s_etat_processus, FCT))
! 501: == NULL)
! 502: {
! 503: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 504: return;
! 505: }
! 506:
! 507: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 508: .nombre_arguments = 0;
! 509: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 510: .fonction = instruction_vers_niveau_inferieur;
! 511:
! 512: if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 513: .nom_fonction = malloc(3 * sizeof(unsigned char))) == NULL)
! 514: {
! 515: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 516: return;
! 517: }
! 518:
! 519: strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 520: .nom_fonction, "<<");
! 521:
! 522: if (((*l_element_courant).suivant =
! 523: allocation_maillon(s_etat_processus)) == NULL)
! 524: {
! 525: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 526: return;
! 527: }
! 528:
! 529: l_element_courant = (*l_element_courant).suivant;
! 530: (*l_element_courant).donnee = s_objet_argument;
! 531:
! 532: if (((*l_element_courant).suivant =
! 533: allocation_maillon(s_etat_processus)) == NULL)
! 534: {
! 535: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 536: return;
! 537: }
! 538:
! 539: l_element_courant = (*l_element_courant).suivant;
! 540:
! 541: if (((*l_element_courant).donnee = allocation(s_etat_processus, FCT))
! 542: == NULL)
! 543: {
! 544: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 545: return;
! 546: }
! 547:
! 548: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 549: .nombre_arguments = 1;
! 550: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 551: .fonction = instruction_sinh;
! 552:
! 553: if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 554: .nom_fonction = malloc(5 * sizeof(unsigned char))) == NULL)
! 555: {
! 556: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 557: return;
! 558: }
! 559:
! 560: strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 561: .nom_fonction, "SINH");
! 562:
! 563: if (((*l_element_courant).suivant =
! 564: allocation_maillon(s_etat_processus)) == NULL)
! 565: {
! 566: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 567: return;
! 568: }
! 569:
! 570: l_element_courant = (*l_element_courant).suivant;
! 571:
! 572: if (((*l_element_courant).donnee = allocation(s_etat_processus, FCT))
! 573: == NULL)
! 574: {
! 575: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 576: return;
! 577: }
! 578:
! 579: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 580: .nombre_arguments = 0;
! 581: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 582: .fonction = instruction_vers_niveau_inferieur;
! 583:
! 584: if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 585: .nom_fonction = malloc(3 * sizeof(unsigned char))) == NULL)
! 586: {
! 587: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 588: return;
! 589: }
! 590:
! 591: strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 592: .nom_fonction, ">>");
! 593:
! 594: (*l_element_courant).suivant = NULL;
! 595: s_objet_argument = NULL;
! 596: }
! 597:
! 598: /*
! 599: --------------------------------------------------------------------------------
! 600: Sinus hyperbolique d'une expression
! 601: --------------------------------------------------------------------------------
! 602: */
! 603:
! 604: else if (((*s_objet_argument).type == ALG) ||
! 605: ((*s_objet_argument).type == RPN))
! 606: {
! 607: if ((s_copie_argument = copie_objet(s_etat_processus, s_objet_argument,
! 608: 'N')) == NULL)
! 609: {
! 610: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 611: return;
! 612: }
! 613:
! 614: l_element_courant = (struct_liste_chainee *)
! 615: (*s_copie_argument).objet;
! 616: l_element_precedent = l_element_courant;
! 617:
! 618: while((*l_element_courant).suivant != NULL)
! 619: {
! 620: l_element_precedent = l_element_courant;
! 621: l_element_courant = (*l_element_courant).suivant;
! 622: }
! 623:
! 624: if (((*l_element_precedent).suivant =
! 625: allocation_maillon(s_etat_processus)) == NULL)
! 626: {
! 627: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 628: return;
! 629: }
! 630:
! 631: if (((*(*l_element_precedent).suivant).donnee =
! 632: allocation(s_etat_processus, FCT)) == NULL)
! 633: {
! 634: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 635: return;
! 636: }
! 637:
! 638: (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
! 639: .donnee).objet)).nombre_arguments = 1;
! 640: (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
! 641: .donnee).objet)).fonction = instruction_sinh;
! 642:
! 643: if (((*((struct_fonction *) (*(*(*l_element_precedent)
! 644: .suivant).donnee).objet)).nom_fonction =
! 645: malloc(5 * sizeof(unsigned char))) == NULL)
! 646: {
! 647: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 648: return;
! 649: }
! 650:
! 651: strcpy((*((struct_fonction *) (*(*(*l_element_precedent)
! 652: .suivant).donnee).objet)).nom_fonction, "SINH");
! 653:
! 654: (*(*l_element_precedent).suivant).suivant = l_element_courant;
! 655:
! 656: s_objet_resultat = s_copie_argument;
! 657: }
! 658:
! 659: /*
! 660: --------------------------------------------------------------------------------
! 661: Réalisation impossible de la fonction sinus hyperbolique
! 662: --------------------------------------------------------------------------------
! 663: */
! 664:
! 665: else
! 666: {
! 667: liberation(s_etat_processus, s_objet_argument);
! 668:
! 669: (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
! 670: return;
! 671: }
! 672:
! 673: liberation(s_etat_processus, s_objet_argument);
! 674:
! 675: if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
! 676: s_objet_resultat) == d_erreur)
! 677: {
! 678: return;
! 679: }
! 680:
! 681: return;
! 682: }
! 683:
! 684:
! 685: /*
! 686: ================================================================================
! 687: Fonction 'size'
! 688: ================================================================================
! 689: Entrées : pointeur sur une structure struct_processus
! 690: --------------------------------------------------------------------------------
! 691: Sorties :
! 692: --------------------------------------------------------------------------------
! 693: Effets de bord : néant
! 694: ================================================================================
! 695: */
! 696:
! 697: void
! 698: instruction_size(struct_processus *s_etat_processus)
! 699: {
! 700: struct_liste_chainee *l_element_courant;
! 701:
! 702: struct_objet *s_objet_argument;
! 703: struct_objet *s_objet_resultat;
! 704:
! 705: (*s_etat_processus).erreur_execution = d_ex;
! 706:
! 707: if ((*s_etat_processus).affichage_arguments == 'Y')
! 708: {
! 709: printf("\n SIZE ");
! 710:
! 711: if ((*s_etat_processus).langue == 'F')
! 712: {
! 713: printf("(taille d'un objet)\n\n");
! 714: }
! 715: else
! 716: {
! 717: printf("(object size)\n\n");
! 718: }
! 719:
! 720: printf(" 1: %s, %s, %s, %s\n", d_CHN, d_LST, d_ALG, d_TAB);
! 721: printf("-> 1: %s\n\n", d_INT);
! 722:
! 723: printf(" 1: %s, %s, %s\n", d_VIN, d_VRL, d_VCX);
! 724: printf("-> 1: %s\n\n", d_LST);
! 725:
! 726: printf(" 1: %s, %s, %s\n", d_MIN, d_MRL, d_MCX);
! 727: printf("-> 1: %s\n", d_LST);
! 728:
! 729: return;
! 730: }
! 731: else if ((*s_etat_processus).test_instruction == 'Y')
! 732: {
! 733: (*s_etat_processus).nombre_arguments = -1;
! 734: return;
! 735: }
! 736:
! 737: if (test_cfsf(s_etat_processus, 31) == d_vrai)
! 738: {
! 739: if (empilement_pile_last(s_etat_processus, 1) == d_erreur)
! 740: {
! 741: return;
! 742: }
! 743: }
! 744:
! 745: if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
! 746: &s_objet_argument) == d_erreur)
! 747: {
! 748: (*s_etat_processus).erreur_execution = d_ex_manque_argument;
! 749: return;
! 750: }
! 751:
! 752: /*
! 753: --------------------------------------------------------------------------------
! 754: Chaîne de caractères
! 755: --------------------------------------------------------------------------------
! 756: */
! 757:
! 758: if ((*s_objet_argument).type == CHN)
! 759: {
! 760: if ((s_objet_resultat = allocation(s_etat_processus, INT)) == NULL)
! 761: {
! 762: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 763: return;
! 764: }
! 765:
! 766: (*((integer8 *) (*s_objet_resultat).objet)) =
! 767: strlen((unsigned char *) (*s_objet_argument).objet);
! 768: }
! 769:
! 770: /*
! 771: --------------------------------------------------------------------------------
! 772: Liste
! 773: --------------------------------------------------------------------------------
! 774: */
! 775:
! 776: else if ((*s_objet_argument).type == LST)
! 777: {
! 778: if ((s_objet_resultat = allocation(s_etat_processus, INT)) == NULL)
! 779: {
! 780: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 781: return;
! 782: }
! 783:
! 784: (*((integer8 *) (*s_objet_resultat).objet)) = 0;
! 785: l_element_courant = (*s_objet_argument).objet;
! 786:
! 787: while(l_element_courant != NULL)
! 788: {
! 789: (*((integer8 *) (*s_objet_resultat).objet))++;
! 790: l_element_courant = (*l_element_courant).suivant;
! 791: }
! 792: }
! 793:
! 794: /*
! 795: --------------------------------------------------------------------------------
! 796: Expression algébrique
! 797: --------------------------------------------------------------------------------
! 798: */
! 799:
! 800: else if ((*s_objet_argument).type == ALG)
! 801: {
! 802: if ((s_objet_resultat = allocation(s_etat_processus, INT)) == NULL)
! 803: {
! 804: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 805: return;
! 806: }
! 807:
! 808: (*((integer8 *) (*s_objet_resultat).objet)) = 0;
! 809: l_element_courant = (*s_objet_argument).objet;
! 810:
! 811: while(l_element_courant != NULL)
! 812: {
! 813: (*((integer8 *) (*s_objet_resultat).objet))++;
! 814: l_element_courant = (*l_element_courant).suivant;
! 815: }
! 816:
! 817: (*((integer8 *) (*s_objet_resultat).objet)) -= 2;
! 818: }
! 819:
! 820: /*
! 821: --------------------------------------------------------------------------------
! 822: Table
! 823: --------------------------------------------------------------------------------
! 824: */
! 825:
! 826: else if ((*s_objet_argument).type == TBL)
! 827: {
! 828: if ((s_objet_resultat = allocation(s_etat_processus, INT)) == NULL)
! 829: {
! 830: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 831: return;
! 832: }
! 833:
! 834: (*((integer8 *) (*s_objet_resultat).objet)) = (*((struct_tableau *)
! 835: (*s_objet_argument).objet)).nombre_elements;
! 836: }
! 837:
! 838: /*
! 839: --------------------------------------------------------------------------------
! 840: Vecteur
! 841: --------------------------------------------------------------------------------
! 842: */
! 843:
! 844: else if (((*s_objet_argument).type == VIN) ||
! 845: ((*s_objet_argument).type == VRL) ||
! 846: ((*s_objet_argument).type == VCX))
! 847: {
! 848: if ((s_objet_resultat = allocation(s_etat_processus, LST)) == NULL)
! 849: {
! 850: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 851: return;
! 852: }
! 853:
! 854: if (((*s_objet_resultat).objet =
! 855: allocation_maillon(s_etat_processus)) == NULL)
! 856: {
! 857: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 858: return;
! 859: }
! 860:
! 861: l_element_courant = (*s_objet_resultat).objet;
! 862: (*l_element_courant).suivant = NULL;
! 863:
! 864: if (((*l_element_courant).donnee = allocation(s_etat_processus, INT))
! 865: == NULL)
! 866: {
! 867: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 868: return;
! 869: }
! 870:
! 871: (*((integer8 *) (*(*l_element_courant).donnee).objet)) =
! 872: (*((struct_vecteur *) (*s_objet_argument).objet)).taille;
! 873: }
! 874:
! 875: /*
! 876: --------------------------------------------------------------------------------
! 877: Matrice
! 878: --------------------------------------------------------------------------------
! 879: */
! 880:
! 881: else if (((*s_objet_argument).type == MIN) ||
! 882: ((*s_objet_argument).type == MRL) ||
! 883: ((*s_objet_argument).type == MCX))
! 884: {
! 885: if ((s_objet_resultat = allocation(s_etat_processus, LST)) == NULL)
! 886: {
! 887: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 888: return;
! 889: }
! 890:
! 891: if (((*s_objet_resultat).objet =
! 892: allocation_maillon(s_etat_processus)) == NULL)
! 893: {
! 894: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 895: return;
! 896: }
! 897:
! 898: l_element_courant = (*s_objet_resultat).objet;
! 899:
! 900: if (((*l_element_courant).donnee = allocation(s_etat_processus, INT))
! 901: == NULL)
! 902: {
! 903: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 904: return;
! 905: }
! 906:
! 907: (*((integer8 *) (*(*l_element_courant).donnee).objet)) =
! 908: (*((struct_matrice *) (*s_objet_argument).objet)).nombre_lignes;
! 909:
! 910: if (((*l_element_courant).suivant =
! 911: allocation_maillon(s_etat_processus)) == NULL)
! 912: {
! 913: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 914: return;
! 915: }
! 916:
! 917: l_element_courant = (*l_element_courant).suivant;
! 918: (*l_element_courant).suivant = NULL;
! 919:
! 920: if (((*l_element_courant).donnee = allocation(s_etat_processus, INT))
! 921: == NULL)
! 922: {
! 923: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 924: return;
! 925: }
! 926:
! 927: (*((integer8 *) (*(*l_element_courant).donnee).objet)) =
! 928: (*((struct_matrice *) (*s_objet_argument).objet))
! 929: .nombre_colonnes;
! 930: }
! 931:
! 932: /*
! 933: --------------------------------------------------------------------------------
! 934: Type d'argument invalide
! 935: --------------------------------------------------------------------------------
! 936: */
! 937:
! 938: else
! 939: {
! 940: liberation(s_etat_processus, s_objet_argument);
! 941:
! 942: (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
! 943: return;
! 944: }
! 945:
! 946: liberation(s_etat_processus, s_objet_argument);
! 947:
! 948: if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
! 949: s_objet_resultat) == d_erreur)
! 950: {
! 951: return;
! 952: }
! 953:
! 954: return;
! 955: }
! 956:
! 957:
! 958: /*
! 959: ================================================================================
! 960: Fonction 'sst'
! 961: ================================================================================
! 962: Entrées : pointeur sur une structure struct_processus
! 963: --------------------------------------------------------------------------------
! 964: Sorties :
! 965: --------------------------------------------------------------------------------
! 966: Effets de bord : néant
! 967: ================================================================================
! 968: */
! 969:
! 970: void
! 971: instruction_sst(struct_processus *s_etat_processus)
! 972: {
! 973: (*s_etat_processus).erreur_execution = d_ex;
! 974:
! 975: if ((*s_etat_processus).affichage_arguments == 'Y')
! 976: {
! 977: printf("\n SST ");
! 978:
! 979: if ((*s_etat_processus).langue == 'F')
! 980: {
! 981: printf("(avance d'un pas)\n\n");
! 982: printf(" Aucun argument\n");
! 983: }
! 984: else
! 985: {
! 986: printf("(single step)\n\n");
! 987: printf(" No argument\n");
! 988: }
! 989:
! 990: return;
! 991: }
! 992: else if ((*s_etat_processus).test_instruction == 'Y')
! 993: {
! 994: (*s_etat_processus).nombre_arguments = -1;
! 995: return;
! 996: }
! 997:
! 998: if ((*s_etat_processus).traitement_instruction_halt == d_vrai)
! 999: {
! 1000: (*s_etat_processus).execution_pas_suivant = d_vrai;
! 1001: }
! 1002:
! 1003: return;
! 1004: }
! 1005:
! 1006:
! 1007: /*
! 1008: ================================================================================
! 1009: Fonction 'str->'
! 1010: ================================================================================
! 1011: Entrées : pointeur sur une structure struct_processus
! 1012: --------------------------------------------------------------------------------
! 1013: Sorties :
! 1014: --------------------------------------------------------------------------------
! 1015: Effets de bord : néant
! 1016: ================================================================================
! 1017: */
! 1018:
! 1019: void
! 1020: instruction_str_fleche(struct_processus *s_etat_processus)
! 1021: {
! 1022: struct_objet *s_objet;
! 1023: struct_objet *s_sous_objet;
! 1024:
! 1025: unsigned char *commande;
! 1026: unsigned char *registre_definitions_chainees;
! 1027: unsigned char *registre_instruction_courante;
! 1028: unsigned char registre_interruption;
! 1029:
! 1030: unsigned long position_courante;
! 1031:
! 1032: (*s_etat_processus).erreur_execution = d_ex;
! 1033:
! 1034: if ((*s_etat_processus).affichage_arguments == 'Y')
! 1035: {
! 1036: printf("\n STR-> ");
! 1037:
! 1038: if ((*s_etat_processus).langue == 'F')
! 1039: {
! 1040: printf("(conversion d'une chaîne)\n\n");
! 1041: }
! 1042: else
! 1043: {
! 1044: printf("(conversion from a string of chars)\n\n");
! 1045: }
! 1046:
! 1047: printf(" 1: %s\n", d_INT);
! 1048: printf("-> n: %s, %s, %s, %s, %s, %s,\n"
! 1049: " %s, %s, %s, %s, %s,\n"
! 1050: " %s, %s, %s, %s, %s,\n"
! 1051: " %s\n",
! 1052: d_INT, d_REL, d_CPL, d_VIN, d_VRL, d_VCX, d_MIN, d_MRL, d_MCX,
! 1053: d_BIN, d_NOM, d_CHN, d_LST, d_ALG, d_RPN, d_FCH, d_SLB);
! 1054: printf(" ...\n");
! 1055: printf("-> 1: %s, %s, %s, %s, %s, %s,\n"
! 1056: " %s, %s, %s, %s, %s,\n"
! 1057: " %s, %s, %s, %s, %s,\n"
! 1058: " %s\n",
! 1059: d_INT, d_REL, d_CPL, d_VIN, d_VRL, d_VCX, d_MIN, d_MRL, d_MCX,
! 1060: d_BIN, d_NOM, d_CHN, d_LST, d_ALG, d_RPN, d_FCH, d_SLB);
! 1061:
! 1062: return;
! 1063: }
! 1064: else if ((*s_etat_processus).test_instruction == 'Y')
! 1065: {
! 1066: (*s_etat_processus).nombre_arguments = -1;
! 1067: return;
! 1068: }
! 1069:
! 1070: if (test_cfsf(s_etat_processus, 31) == d_vrai)
! 1071: {
! 1072: if (empilement_pile_last(s_etat_processus, 1) == d_erreur)
! 1073: {
! 1074: return;
! 1075: }
! 1076: }
! 1077:
! 1078: if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
! 1079: &s_objet) == d_erreur)
! 1080: {
! 1081: (*s_etat_processus).erreur_execution = d_ex_manque_argument;
! 1082: return;
! 1083: }
! 1084:
! 1085: if ((*s_objet).type == CHN)
! 1086: {
! 1087: position_courante = (*s_etat_processus).position_courante;
! 1088: registre_definitions_chainees = (*s_etat_processus)
! 1089: .definitions_chainees;
! 1090: registre_instruction_courante = (*s_etat_processus)
! 1091: .instruction_courante;
! 1092:
! 1093: (*s_etat_processus).definitions_chainees = (unsigned char *)
! 1094: (*s_objet).objet;
! 1095:
! 1096: if (analyse_syntaxique(s_etat_processus) == d_absence_erreur)
! 1097: {
! 1098: if ((commande = malloc((strlen((unsigned char *)
! 1099: (*s_objet).objet) + 7) * sizeof(unsigned char))) == NULL)
! 1100: {
! 1101: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1102: return;
! 1103: }
! 1104:
! 1105: sprintf(commande, "<< %s >>", (unsigned char *) (*s_objet).objet);
! 1106: (*s_etat_processus).instruction_courante = commande;
! 1107:
! 1108: recherche_type(s_etat_processus);
! 1109:
! 1110: if ((*s_etat_processus).erreur_execution != d_ex)
! 1111: {
! 1112: liberation(s_etat_processus, s_objet);
! 1113:
! 1114: (*s_etat_processus).definitions_chainees =
! 1115: registre_definitions_chainees;
! 1116: (*s_etat_processus).instruction_courante =
! 1117: registre_instruction_courante;
! 1118: (*s_etat_processus).position_courante =
! 1119: position_courante;
! 1120:
! 1121: return;
! 1122: }
! 1123:
! 1124: if (depilement(s_etat_processus, &((*s_etat_processus)
! 1125: .l_base_pile), &s_sous_objet) == d_erreur)
! 1126: {
! 1127: liberation(s_etat_processus, s_objet);
! 1128:
! 1129: (*s_etat_processus).definitions_chainees =
! 1130: registre_definitions_chainees;
! 1131: (*s_etat_processus).instruction_courante =
! 1132: registre_instruction_courante;
! 1133: (*s_etat_processus).position_courante =
! 1134: position_courante;
! 1135:
! 1136: (*s_etat_processus).erreur_execution = d_ex_manque_argument;
! 1137: return;
! 1138: }
! 1139:
! 1140: registre_interruption = (*s_etat_processus)
! 1141: .traitement_interruptible;
! 1142: (*s_etat_processus).traitement_interruptible = 'N';
! 1143:
! 1144: if (evaluation(s_etat_processus, s_sous_objet, 'I') == d_erreur)
! 1145: {
! 1146: (*s_etat_processus).traitement_interruptible =
! 1147: registre_interruption;
! 1148:
! 1149: if ((*s_etat_processus).erreur_systeme == d_es)
! 1150: {
! 1151: liberation(s_etat_processus, s_objet);
! 1152:
! 1153: (*s_etat_processus).definitions_chainees =
! 1154: registre_definitions_chainees;
! 1155: (*s_etat_processus).instruction_courante =
! 1156: registre_instruction_courante;
! 1157: (*s_etat_processus).position_courante =
! 1158: position_courante;
! 1159:
! 1160: (*s_etat_processus).erreur_execution =
! 1161: d_ex_expression_invalide;
! 1162: return;
! 1163: }
! 1164: else
! 1165: {
! 1166: liberation(s_etat_processus, s_objet);
! 1167:
! 1168: (*s_etat_processus).definitions_chainees =
! 1169: registre_definitions_chainees;
! 1170: (*s_etat_processus).instruction_courante =
! 1171: registre_instruction_courante;
! 1172: (*s_etat_processus).position_courante =
! 1173: position_courante;
! 1174:
! 1175: (*s_etat_processus).erreur_systeme =
! 1176: d_es_allocation_memoire;
! 1177: return;
! 1178: }
! 1179: }
! 1180:
! 1181: (*s_etat_processus).traitement_interruptible =
! 1182: registre_interruption;
! 1183:
! 1184: liberation(s_etat_processus, s_sous_objet);
! 1185: free(commande);
! 1186: }
! 1187: else
! 1188: {
! 1189: (*s_etat_processus).definitions_chainees =
! 1190: registre_definitions_chainees;
! 1191: (*s_etat_processus).instruction_courante =
! 1192: registre_instruction_courante;
! 1193: (*s_etat_processus).position_courante =
! 1194: position_courante;
! 1195:
! 1196: (*s_etat_processus).erreur_execution = d_ex_argument_invalide;
! 1197:
! 1198: return;
! 1199: }
! 1200:
! 1201: (*s_etat_processus).definitions_chainees =
! 1202: registre_definitions_chainees;
! 1203: (*s_etat_processus).instruction_courante =
! 1204: registre_instruction_courante;
! 1205: (*s_etat_processus).position_courante =
! 1206: position_courante;
! 1207: }
! 1208: else
! 1209: {
! 1210: liberation(s_etat_processus, s_objet);
! 1211:
! 1212: (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
! 1213: return;
! 1214: }
! 1215:
! 1216: liberation(s_etat_processus, s_objet);
! 1217:
! 1218: return;
! 1219: }
! 1220:
! 1221: // vim: ts=4
CVSweb interface <joel.bertrand@systella.fr>