Annotation of rpl/src/instructions_a3.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 'array->'
! 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_array_fleche(struct_processus *s_etat_processus)
! 40: {
! 41: struct_liste_chainee *l_element_courant;
! 42:
! 43: struct_objet *s_objet_source;
! 44: struct_objet *s_objet_elementaire;
! 45:
! 46: unsigned long i;
! 47: unsigned long j;
! 48:
! 49: (*s_etat_processus).erreur_execution = d_ex;
! 50:
! 51: if ((*s_etat_processus).affichage_arguments == 'Y')
! 52: {
! 53: printf("\n ARRAY-> [ARRY->] ");
! 54:
! 55: if ((*s_etat_processus).langue == 'F')
! 56: {
! 57: printf("(éclatement de vecteur ou de matrice)\n\n");
! 58: }
! 59: else
! 60: {
! 61: printf("(vector or matrix split)\n\n");
! 62: }
! 63:
! 64: printf(" 1: %s\n", d_VIN);
! 65: printf("-> n: %s\n", d_INT);
! 66: printf(" ...\n");
! 67: printf(" 1: %s\n\n", d_INT);
! 68:
! 69: printf(" 1: %s\n", d_VRL);
! 70: printf("-> n: %s\n", d_REL);
! 71: printf(" ...\n");
! 72: printf(" 1: %s\n\n", d_REL);
! 73:
! 74: printf(" 1: %s\n", d_VCX);
! 75: printf("-> n: %s\n", d_CPL);
! 76: printf(" ...\n");
! 77: printf(" 1: %s\n\n", d_CPL);
! 78:
! 79: printf(" 1: %s\n", d_MIN);
! 80: printf("-> nm: %s\n", d_INT);
! 81: printf(" ...\n");
! 82: printf(" 1: %s\n\n", d_INT);
! 83:
! 84: printf(" 1: %s\n", d_MRL);
! 85: printf("-> nm: %s\n", d_REL);
! 86: printf(" ...\n");
! 87: printf(" 1: %s\n\n", d_REL);
! 88:
! 89: printf(" 1: %s\n", d_MCX);
! 90: printf("-> nm: %s\n", d_CPL);
! 91: printf(" ...\n");
! 92: printf(" 1: %s\n", d_CPL);
! 93:
! 94: return;
! 95: }
! 96: else if ((*s_etat_processus).test_instruction == 'Y')
! 97: {
! 98: (*s_etat_processus).nombre_arguments = -1;
! 99: return;
! 100: }
! 101:
! 102: if (test_cfsf(s_etat_processus, 31) == d_vrai)
! 103: {
! 104: if (empilement_pile_last(s_etat_processus, 1) == d_erreur)
! 105: {
! 106: return;
! 107: }
! 108: }
! 109:
! 110: if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
! 111: &s_objet_source) == d_erreur)
! 112: {
! 113: (*s_etat_processus).erreur_execution = d_ex_manque_argument;
! 114: return;
! 115: }
! 116:
! 117: /*
! 118: --------------------------------------------------------------------------------
! 119: Cas des vecteurs
! 120: --------------------------------------------------------------------------------
! 121: */
! 122:
! 123: if ((*s_objet_source).type == VIN)
! 124: {
! 125: /*
! 126: * Traitement d'un vecteur d'entiers
! 127: */
! 128:
! 129: for(i = 0; i < (*((struct_vecteur *) (*s_objet_source).objet)).taille;
! 130: i++)
! 131: {
! 132: if ((s_objet_elementaire = allocation(s_etat_processus, INT))
! 133: == NULL)
! 134: {
! 135: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 136: return;
! 137: }
! 138:
! 139: (*((integer8 *) (*s_objet_elementaire).objet)) =
! 140: ((integer8 *) (*((struct_vecteur *)
! 141: (*s_objet_source).objet)).tableau)[i];
! 142:
! 143: if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
! 144: s_objet_elementaire) == d_erreur)
! 145: {
! 146: return;
! 147: }
! 148: }
! 149:
! 150: if ((s_objet_elementaire = allocation(s_etat_processus, LST))
! 151: == NULL)
! 152: {
! 153: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 154: return;
! 155: }
! 156:
! 157: if (((*s_objet_elementaire).objet =
! 158: allocation_maillon(s_etat_processus)) == NULL)
! 159: {
! 160: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 161: return;
! 162: }
! 163:
! 164: l_element_courant = (struct_liste_chainee *)
! 165: (*s_objet_elementaire).objet;
! 166:
! 167: (*l_element_courant).suivant = NULL;
! 168:
! 169: if (((*l_element_courant).donnee = allocation(s_etat_processus, INT))
! 170: == NULL)
! 171: {
! 172: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 173: return;
! 174: }
! 175:
! 176: (*((integer8 *) (*(*l_element_courant).donnee).objet)) =
! 177: (*((struct_vecteur *) (*s_objet_source).objet)).taille;
! 178:
! 179: if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
! 180: s_objet_elementaire) == d_erreur)
! 181: {
! 182: return;
! 183: }
! 184: }
! 185: else if ((*s_objet_source).type == VRL)
! 186: {
! 187: /*
! 188: * Traitement d'un vecteur de réels
! 189: */
! 190:
! 191: for(i = 0; i < (*((struct_vecteur *) (*s_objet_source).objet)).taille;
! 192: i++)
! 193: {
! 194: if ((s_objet_elementaire = allocation(s_etat_processus, REL))
! 195: == NULL)
! 196: {
! 197: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 198: return;
! 199: }
! 200:
! 201: (*((real8 *) (*s_objet_elementaire).objet)) =
! 202: ((real8 *) (*((struct_vecteur *)
! 203: (*s_objet_source).objet)).tableau)[i];
! 204:
! 205: if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
! 206: s_objet_elementaire) == d_erreur)
! 207: {
! 208: return;
! 209: }
! 210: }
! 211:
! 212: if ((s_objet_elementaire = allocation(s_etat_processus, LST))
! 213: == NULL)
! 214: {
! 215: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 216: return;
! 217: }
! 218:
! 219: if (((*s_objet_elementaire).objet =
! 220: allocation_maillon(s_etat_processus)) == NULL)
! 221: {
! 222: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 223: return;
! 224: }
! 225:
! 226: l_element_courant = (struct_liste_chainee *)
! 227: (*s_objet_elementaire).objet;
! 228:
! 229: (*l_element_courant).suivant = NULL;
! 230:
! 231: if (((*l_element_courant).donnee = allocation(s_etat_processus, INT))
! 232: == NULL)
! 233: {
! 234: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 235: return;
! 236: }
! 237:
! 238: (*((integer8 *) (*(*l_element_courant).donnee).objet)) =
! 239: (*((struct_vecteur *) (*s_objet_source).objet)).taille;
! 240:
! 241: if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
! 242: s_objet_elementaire) == d_erreur)
! 243: {
! 244: return;
! 245: }
! 246: }
! 247: else if ((*s_objet_source).type == VCX)
! 248: {
! 249: /*
! 250: * Traitement d'un vecteur de complexes
! 251: */
! 252:
! 253: for(i = 0; i < (*((struct_vecteur *) (*s_objet_source).objet)).taille;
! 254: i++)
! 255: {
! 256: if ((s_objet_elementaire = allocation(s_etat_processus, CPL))
! 257: == NULL)
! 258: {
! 259: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 260: return;
! 261: }
! 262:
! 263: (*((struct_complexe16 *) (*s_objet_elementaire).objet))
! 264: .partie_reelle = ((struct_complexe16 *)
! 265: (*((struct_vecteur *) (*s_objet_source).objet)).tableau)[i]
! 266: .partie_reelle;
! 267: (*((struct_complexe16 *) (*s_objet_elementaire).objet))
! 268: .partie_imaginaire = ((struct_complexe16 *)
! 269: (*((struct_vecteur *) (*s_objet_source).objet)).tableau)[i]
! 270: .partie_imaginaire;
! 271:
! 272: if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
! 273: s_objet_elementaire) == d_erreur)
! 274: {
! 275: return;
! 276: }
! 277: }
! 278:
! 279: if ((s_objet_elementaire = allocation(s_etat_processus, LST))
! 280: == NULL)
! 281: {
! 282: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 283: return;
! 284: }
! 285:
! 286: if (((*s_objet_elementaire).objet =
! 287: allocation_maillon(s_etat_processus)) == NULL)
! 288: {
! 289: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 290: return;
! 291: }
! 292:
! 293: l_element_courant = (struct_liste_chainee *)
! 294: (*s_objet_elementaire).objet;
! 295:
! 296: (*l_element_courant).suivant = NULL;
! 297:
! 298: if (((*l_element_courant).donnee = allocation(s_etat_processus, INT))
! 299: == NULL)
! 300: {
! 301: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 302: return;
! 303: }
! 304:
! 305: (*((integer8 *) (*(*l_element_courant).donnee).objet)) =
! 306: (*((struct_vecteur *) (*s_objet_source).objet)).taille;
! 307:
! 308: if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
! 309: s_objet_elementaire) == d_erreur)
! 310: {
! 311: return;
! 312: }
! 313: }
! 314:
! 315: /*
! 316: --------------------------------------------------------------------------------
! 317: Cas des matrices
! 318: --------------------------------------------------------------------------------
! 319: */
! 320:
! 321: else if ((*s_objet_source).type == MIN)
! 322: {
! 323: /*
! 324: * Traitement d'une matrice d'entiers
! 325: */
! 326:
! 327: for(i = 0; i < (*((struct_matrice *) (*s_objet_source).objet))
! 328: .nombre_lignes; i++)
! 329: {
! 330: for(j = 0; j < (*((struct_matrice *) (*s_objet_source).objet))
! 331: .nombre_colonnes; j++)
! 332: {
! 333: if ((s_objet_elementaire = allocation(s_etat_processus, INT))
! 334: == NULL)
! 335: {
! 336: (*s_etat_processus).erreur_systeme =
! 337: d_es_allocation_memoire;
! 338: return;
! 339: }
! 340:
! 341: (*((integer8 *) (*s_objet_elementaire).objet)) =
! 342: ((integer8 **) (*((struct_matrice *)
! 343: (*s_objet_source).objet)).tableau)[i][j];
! 344:
! 345: if (empilement(s_etat_processus, &((*s_etat_processus)
! 346: .l_base_pile), s_objet_elementaire) == d_erreur)
! 347: {
! 348: return;
! 349: }
! 350: }
! 351: }
! 352:
! 353: if ((s_objet_elementaire = allocation(s_etat_processus, LST))
! 354: == NULL)
! 355: {
! 356: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 357: return;
! 358: }
! 359:
! 360: if (((*s_objet_elementaire).objet =
! 361: allocation_maillon(s_etat_processus)) == NULL)
! 362: {
! 363: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 364: return;
! 365: }
! 366:
! 367: l_element_courant = (struct_liste_chainee *)
! 368: (*s_objet_elementaire).objet;
! 369:
! 370: if (((*l_element_courant).donnee = allocation(s_etat_processus, INT))
! 371: == NULL)
! 372: {
! 373: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 374: return;
! 375: }
! 376:
! 377: (*((integer8 *) (*(*l_element_courant).donnee).objet)) =
! 378: (*((struct_matrice *) (*s_objet_source).objet))
! 379: .nombre_lignes;
! 380:
! 381: if (((*l_element_courant).suivant =
! 382: allocation_maillon(s_etat_processus)) == NULL)
! 383: {
! 384: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 385: return;
! 386: }
! 387:
! 388: l_element_courant = (*l_element_courant).suivant;
! 389: (*l_element_courant).suivant = NULL;
! 390:
! 391: if (((*l_element_courant).donnee = allocation(s_etat_processus, INT))
! 392: == NULL)
! 393: {
! 394: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 395: return;
! 396: }
! 397:
! 398: (*((integer8 *) (*(*l_element_courant).donnee).objet)) =
! 399: (*((struct_matrice *) (*s_objet_source).objet))
! 400: .nombre_colonnes;
! 401:
! 402: if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
! 403: s_objet_elementaire) == d_erreur)
! 404: {
! 405: return;
! 406: }
! 407: }
! 408: else if ((*s_objet_source).type == MRL)
! 409: {
! 410: /*
! 411: * Traitement d'une matrice de réels
! 412: */
! 413:
! 414: for(i = 0; i < (*((struct_matrice *) (*s_objet_source).objet))
! 415: .nombre_lignes; i++)
! 416: {
! 417: for(j = 0; j < (*((struct_matrice *) (*s_objet_source).objet))
! 418: .nombre_colonnes; j++)
! 419: {
! 420: if ((s_objet_elementaire = allocation(s_etat_processus, REL))
! 421: == NULL)
! 422: {
! 423: (*s_etat_processus).erreur_systeme =
! 424: d_es_allocation_memoire;
! 425: return;
! 426: }
! 427:
! 428: (*((real8 *) (*s_objet_elementaire).objet)) =
! 429: ((real8 **) (*((struct_matrice *)
! 430: (*s_objet_source).objet)).tableau)[i][j];
! 431:
! 432: if (empilement(s_etat_processus, &((*s_etat_processus)
! 433: .l_base_pile), s_objet_elementaire) == d_erreur)
! 434: {
! 435: return;
! 436: }
! 437: }
! 438: }
! 439:
! 440: if ((s_objet_elementaire = allocation(s_etat_processus, LST))
! 441: == NULL)
! 442: {
! 443: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 444: return;
! 445: }
! 446:
! 447: if (((*s_objet_elementaire).objet =
! 448: allocation_maillon(s_etat_processus)) == NULL)
! 449: {
! 450: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 451: return;
! 452: }
! 453:
! 454: l_element_courant = (struct_liste_chainee *)
! 455: (*s_objet_elementaire).objet;
! 456:
! 457: if (((*l_element_courant).donnee = allocation(s_etat_processus, INT))
! 458: == NULL)
! 459: {
! 460: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 461: return;
! 462: }
! 463:
! 464: (*((integer8 *) (*(*l_element_courant).donnee).objet)) =
! 465: (*((struct_matrice *) (*s_objet_source).objet))
! 466: .nombre_lignes;
! 467:
! 468: if (((*l_element_courant).suivant =
! 469: allocation_maillon(s_etat_processus)) == NULL)
! 470: {
! 471: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 472: return;
! 473: }
! 474:
! 475: l_element_courant = (*l_element_courant).suivant;
! 476: (*l_element_courant).suivant = NULL;
! 477:
! 478: if (((*l_element_courant).donnee = allocation(s_etat_processus, INT))
! 479: == NULL)
! 480: {
! 481: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 482: return;
! 483: }
! 484:
! 485: (*((integer8 *) (*(*l_element_courant).donnee).objet)) =
! 486: (*((struct_matrice *) (*s_objet_source).objet))
! 487: .nombre_colonnes;
! 488:
! 489: if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
! 490: s_objet_elementaire) == d_erreur)
! 491: {
! 492: return;
! 493: }
! 494: }
! 495: else if ((*s_objet_source).type == MCX)
! 496: {
! 497: /*
! 498: * Traitement d'une matrice de complexes
! 499: */
! 500:
! 501: for(i = 0; i < (*((struct_matrice *) (*s_objet_source).objet))
! 502: .nombre_lignes; i++)
! 503: {
! 504: for(j = 0; j < (*((struct_matrice *) (*s_objet_source).objet))
! 505: .nombre_colonnes; j++)
! 506: {
! 507: if ((s_objet_elementaire = allocation(s_etat_processus, CPL))
! 508: == NULL)
! 509: {
! 510: (*s_etat_processus).erreur_systeme =
! 511: d_es_allocation_memoire;
! 512: return;
! 513: }
! 514:
! 515: (*((struct_complexe16 *) (*s_objet_elementaire).objet))
! 516: .partie_reelle = ((struct_complexe16 **)
! 517: (*((struct_matrice *) (*s_objet_source).objet))
! 518: .tableau)[i][j].partie_reelle;
! 519: (*((struct_complexe16 *) (*s_objet_elementaire).objet))
! 520: .partie_imaginaire = ((struct_complexe16 **)
! 521: (*((struct_matrice *) (*s_objet_source).objet))
! 522: .tableau)[i][j].partie_imaginaire;
! 523:
! 524: if (empilement(s_etat_processus, &((*s_etat_processus)
! 525: .l_base_pile), s_objet_elementaire) == d_erreur)
! 526: {
! 527: return;
! 528: }
! 529: }
! 530: }
! 531:
! 532: if ((s_objet_elementaire = allocation(s_etat_processus, LST))
! 533: == NULL)
! 534: {
! 535: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 536: return;
! 537: }
! 538:
! 539: if (((*s_objet_elementaire).objet =
! 540: allocation_maillon(s_etat_processus)) == NULL)
! 541: {
! 542: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 543: return;
! 544: }
! 545:
! 546: l_element_courant = (struct_liste_chainee *)
! 547: (*s_objet_elementaire).objet;
! 548:
! 549: if (((*l_element_courant).donnee = allocation(s_etat_processus, INT))
! 550: == NULL)
! 551: {
! 552: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 553: return;
! 554: }
! 555:
! 556: (*((integer8 *) (*(*l_element_courant).donnee).objet)) =
! 557: (*((struct_matrice *) (*s_objet_source).objet))
! 558: .nombre_lignes;
! 559:
! 560: if (((*l_element_courant).suivant =
! 561: allocation_maillon(s_etat_processus)) == NULL)
! 562: {
! 563: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 564: return;
! 565: }
! 566:
! 567: l_element_courant = (*l_element_courant).suivant;
! 568: (*l_element_courant).suivant = NULL;
! 569:
! 570: if (((*l_element_courant).donnee = allocation(s_etat_processus, INT))
! 571: == NULL)
! 572: {
! 573: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 574: return;
! 575: }
! 576:
! 577: (*((integer8 *) (*(*l_element_courant).donnee).objet)) =
! 578: (*((struct_matrice *) (*s_objet_source).objet))
! 579: .nombre_colonnes;
! 580:
! 581: if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
! 582: s_objet_elementaire) == d_erreur)
! 583: {
! 584: return;
! 585: }
! 586: }
! 587:
! 588: /*
! 589: --------------------------------------------------------------------------------
! 590: Réalisation impossible de la fonction ARRAY->
! 591: --------------------------------------------------------------------------------
! 592: */
! 593:
! 594: else
! 595: {
! 596: liberation(s_etat_processus, s_objet_source);
! 597:
! 598: (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
! 599: return;
! 600: }
! 601:
! 602: liberation(s_etat_processus, s_objet_source);
! 603:
! 604: return;
! 605: }
! 606:
! 607:
! 608: /*
! 609: ================================================================================
! 610: Fonction 'alog'
! 611: ================================================================================
! 612: Entrées : pointeur sur une struct_processus
! 613: --------------------------------------------------------------------------------
! 614: Sorties :
! 615: --------------------------------------------------------------------------------
! 616: Effets de bord : néant
! 617: ================================================================================
! 618: */
! 619:
! 620: void
! 621: instruction_alog(struct_processus *s_etat_processus)
! 622: {
! 623: integer8 base;
! 624: integer8 tampon;
! 625:
! 626: struct_liste_chainee *l_element_courant;
! 627: struct_liste_chainee *l_element_precedent;
! 628:
! 629: struct_objet *s_copie_argument;
! 630: struct_objet *s_objet_argument;
! 631: struct_objet *s_objet_resultat;
! 632:
! 633: (*s_etat_processus).erreur_execution = d_ex;
! 634:
! 635: if ((*s_etat_processus).affichage_arguments == 'Y')
! 636: {
! 637: printf("\n ALOG ");
! 638:
! 639: if ((*s_etat_processus).langue == 'F')
! 640: {
! 641: printf("(antilogarithme base 10)\n\n");
! 642: }
! 643: else
! 644: {
! 645: printf("(10-based antilogarithm)\n\n");
! 646: }
! 647:
! 648: printf(" 1: %s\n", d_INT);
! 649: printf("-> 1: %s, %s\n\n", d_INT, d_REL);
! 650:
! 651: printf(" 1: %s\n", d_REL);
! 652: printf("-> 1: %s\n", d_REL);
! 653:
! 654: printf(" 1: %s\n", d_CPL);
! 655: printf("-> 1: %s\n", d_CPL);
! 656:
! 657: printf(" 1: %s, %s\n", d_NOM, d_ALG);
! 658: printf("-> 1: %s\n\n", d_ALG);
! 659:
! 660: printf(" 1: %s\n", d_RPN);
! 661: printf("-> 1: %s\n", d_RPN);
! 662:
! 663: return;
! 664: }
! 665: else if ((*s_etat_processus).test_instruction == 'Y')
! 666: {
! 667: (*s_etat_processus).nombre_arguments = 1;
! 668: return;
! 669: }
! 670:
! 671: if (test_cfsf(s_etat_processus, 31) == d_vrai)
! 672: {
! 673: if (empilement_pile_last(s_etat_processus, 1) == d_erreur)
! 674: {
! 675: return;
! 676: }
! 677: }
! 678:
! 679: if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
! 680: &s_objet_argument) == d_erreur)
! 681: {
! 682: (*s_etat_processus).erreur_execution = d_ex_manque_argument;
! 683: return;
! 684: }
! 685:
! 686: /*
! 687: --------------------------------------------------------------------------------
! 688: Alog d'un entier
! 689: --------------------------------------------------------------------------------
! 690: */
! 691:
! 692: if ((*s_objet_argument).type == INT)
! 693: {
! 694: base = 10;
! 695:
! 696: if (depassement_puissance(&base, (integer8 *) (*s_objet_argument).objet,
! 697: &tampon) == d_absence_erreur)
! 698: {
! 699: if ((s_objet_resultat = allocation(s_etat_processus, INT))
! 700: == NULL)
! 701: {
! 702: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 703: return;
! 704: }
! 705:
! 706: (*((integer8 *) (*s_objet_resultat).objet)) = tampon;
! 707: }
! 708: else
! 709: {
! 710: if ((s_objet_resultat = allocation(s_etat_processus, REL))
! 711: == NULL)
! 712: {
! 713: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 714: return;
! 715: }
! 716:
! 717: (*((real8 *) (*s_objet_resultat).objet)) =
! 718: pow((real8) 10, (real8) (*((integer8 *)
! 719: (*s_objet_argument).objet)));
! 720: }
! 721: }
! 722:
! 723: /*
! 724: --------------------------------------------------------------------------------
! 725: Alog d'un réel
! 726: --------------------------------------------------------------------------------
! 727: */
! 728:
! 729: else if ((*s_objet_argument).type == REL)
! 730: {
! 731: if ((s_objet_resultat = allocation(s_etat_processus, REL))
! 732: == NULL)
! 733: {
! 734: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 735: return;
! 736: }
! 737:
! 738: (*((real8 *) (*s_objet_resultat).objet)) =
! 739: pow((real8) 10, ((*((real8 *) (*s_objet_argument).objet))));
! 740: }
! 741:
! 742: /*
! 743: --------------------------------------------------------------------------------
! 744: Alog d'un complexe
! 745: --------------------------------------------------------------------------------
! 746: */
! 747:
! 748: else if ((*s_objet_argument).type == CPL)
! 749: {
! 750: if ((s_objet_resultat = allocation(s_etat_processus, CPL))
! 751: == NULL)
! 752: {
! 753: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 754: return;
! 755: }
! 756:
! 757: f77alogc_(&((*((struct_complexe16 *) (*s_objet_argument).objet))),
! 758: (struct_complexe16 *) (*s_objet_resultat).objet);
! 759: }
! 760:
! 761: /*
! 762: --------------------------------------------------------------------------------
! 763: Alog d'un nom
! 764: --------------------------------------------------------------------------------
! 765: */
! 766:
! 767: else if ((*s_objet_argument).type == NOM)
! 768: {
! 769: if ((s_objet_resultat = allocation(s_etat_processus, ALG))
! 770: == NULL)
! 771: {
! 772: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 773: return;
! 774: }
! 775:
! 776: if (((*s_objet_resultat).objet =
! 777: allocation_maillon(s_etat_processus)) == NULL)
! 778: {
! 779: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 780: return;
! 781: }
! 782:
! 783: l_element_courant = (*s_objet_resultat).objet;
! 784:
! 785: if (((*l_element_courant).donnee =
! 786: allocation(s_etat_processus, FCT)) == NULL)
! 787: {
! 788: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 789: return;
! 790: }
! 791:
! 792: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 793: .nombre_arguments = 0;
! 794: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 795: .fonction = instruction_alog;
! 796:
! 797: if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 798: .nom_fonction = malloc(3 * sizeof(unsigned char))) == NULL)
! 799: {
! 800: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 801: return;
! 802: }
! 803:
! 804: strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 805: .nom_fonction, "<<");
! 806:
! 807: if (((*l_element_courant).suivant =
! 808: allocation_maillon(s_etat_processus)) == NULL)
! 809: {
! 810: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 811: return;
! 812: }
! 813:
! 814: l_element_courant = (*l_element_courant).suivant;
! 815: (*l_element_courant).donnee = s_objet_argument;
! 816:
! 817: if (((*l_element_courant).suivant =
! 818: allocation_maillon(s_etat_processus)) == NULL)
! 819: {
! 820: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 821: return;
! 822: }
! 823:
! 824: l_element_courant = (*l_element_courant).suivant;
! 825:
! 826: if (((*l_element_courant).donnee =
! 827: allocation(s_etat_processus, FCT)) == NULL)
! 828: {
! 829: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 830: return;
! 831: }
! 832:
! 833: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 834: .nombre_arguments = 1;
! 835: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 836: .fonction = instruction_alog;
! 837:
! 838: if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 839: .nom_fonction = malloc(5 * sizeof(unsigned char))) == NULL)
! 840: {
! 841: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 842: return;
! 843: }
! 844:
! 845: strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 846: .nom_fonction, "ALOG");
! 847:
! 848: if (((*l_element_courant).suivant =
! 849: allocation_maillon(s_etat_processus)) == NULL)
! 850: {
! 851: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 852: return;
! 853: }
! 854:
! 855: l_element_courant = (*l_element_courant).suivant;
! 856:
! 857: if (((*l_element_courant).donnee =
! 858: allocation(s_etat_processus, FCT)) == NULL)
! 859: {
! 860: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 861: return;
! 862: }
! 863:
! 864: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 865: .nombre_arguments = 0;
! 866: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 867: .fonction = instruction_vers_niveau_inferieur;
! 868:
! 869: if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 870: .nom_fonction = malloc(3 * sizeof(unsigned char))) == NULL)
! 871: {
! 872: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 873: return;
! 874: }
! 875:
! 876: strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 877: .nom_fonction, ">>");
! 878:
! 879: (*l_element_courant).suivant = NULL;
! 880: s_objet_argument = NULL;
! 881: }
! 882:
! 883: /*
! 884: --------------------------------------------------------------------------------
! 885: Alog d'une expression
! 886: --------------------------------------------------------------------------------
! 887: */
! 888:
! 889: else if (((*s_objet_argument).type == ALG) ||
! 890: ((*s_objet_argument).type == RPN))
! 891: {
! 892: if ((s_copie_argument = copie_objet(s_etat_processus,
! 893: s_objet_argument, 'N')) == NULL)
! 894: {
! 895: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 896: return;
! 897: }
! 898:
! 899: l_element_courant = (struct_liste_chainee *)
! 900: (*s_copie_argument).objet;
! 901: l_element_precedent = l_element_courant;
! 902:
! 903: while((*l_element_courant).suivant != NULL)
! 904: {
! 905: l_element_precedent = l_element_courant;
! 906: l_element_courant = (*l_element_courant).suivant;
! 907: }
! 908:
! 909: if (((*l_element_precedent).suivant =
! 910: allocation_maillon(s_etat_processus)) == NULL)
! 911: {
! 912: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 913: return;
! 914: }
! 915:
! 916: if (((*(*l_element_precedent).suivant).donnee =
! 917: allocation(s_etat_processus, FCT)) == NULL)
! 918: {
! 919: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 920: return;
! 921: }
! 922:
! 923: (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
! 924: .donnee).objet)).nombre_arguments = 1;
! 925: (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
! 926: .donnee).objet)).fonction = instruction_alog;
! 927:
! 928: if (((*((struct_fonction *) (*(*(*l_element_precedent)
! 929: .suivant).donnee).objet)).nom_fonction =
! 930: malloc(5 * sizeof(unsigned char))) == NULL)
! 931: {
! 932: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 933: return;
! 934: }
! 935:
! 936: strcpy((*((struct_fonction *) (*(*(*l_element_precedent)
! 937: .suivant).donnee).objet)).nom_fonction, "ALOG");
! 938:
! 939: (*(*l_element_precedent).suivant).suivant = l_element_courant;
! 940:
! 941: s_objet_resultat = s_copie_argument;
! 942: }
! 943:
! 944: /*
! 945: --------------------------------------------------------------------------------
! 946: Fonction alog impossible à réaliser
! 947: --------------------------------------------------------------------------------
! 948: */
! 949:
! 950: else
! 951: {
! 952: liberation(s_etat_processus, s_objet_argument);
! 953:
! 954: (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
! 955: return;
! 956: }
! 957:
! 958: liberation(s_etat_processus, s_objet_argument);
! 959:
! 960: if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
! 961: s_objet_resultat) == d_erreur)
! 962: {
! 963: return;
! 964: }
! 965:
! 966: return;
! 967: }
! 968:
! 969: // vim: ts=4
CVSweb interface <joel.bertrand@systella.fr>