Annotation of rpl/src/instructions_n1.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 'neg'
! 29: ================================================================================
! 30: Entrées :
! 31: --------------------------------------------------------------------------------
! 32: Sorties :
! 33: --------------------------------------------------------------------------------
! 34: Effets de bord : néant
! 35: ================================================================================
! 36: */
! 37:
! 38: void
! 39: instruction_neg(struct_processus *s_etat_processus)
! 40: {
! 41: logical1 drapeau;
! 42:
! 43: struct_liste_chainee *l_element_courant;
! 44: struct_liste_chainee *l_element_precedent;
! 45: struct_liste_chainee *l_element_tampon;
! 46:
! 47: struct_objet *s_copie_argument;
! 48: struct_objet *s_objet_argument;
! 49: struct_objet *s_objet_resultat;
! 50:
! 51: unsigned long i;
! 52: unsigned long j;
! 53:
! 54: (*s_etat_processus).erreur_execution = d_ex;
! 55:
! 56: if ((*s_etat_processus).affichage_arguments == 'Y')
! 57: {
! 58: printf("\n NEG ");
! 59:
! 60: if ((*s_etat_processus).langue == 'F')
! 61: {
! 62: printf("(opposition)\n\n");
! 63: }
! 64: else
! 65: {
! 66: printf("(opposition)\n\n");
! 67: }
! 68:
! 69: printf(" 1: %s, %s, %s\n", d_INT, d_REL, d_CPL);
! 70: printf("-> 1: %s, %s, %s\n\n", d_INT, d_REL, d_CPL);
! 71:
! 72: printf(" 1: %s, %s, %s\n", d_VIN, d_VRL, d_VCX);
! 73: printf("-> 1: %s, %s, %s\n\n", d_VIN, d_VRL, d_VCX);
! 74:
! 75: printf(" 1: %s, %s, %s\n", d_MIN, d_MRL, d_MCX);
! 76: printf("-> 1: %s, %s, %s\n\n", d_MIN, d_MRL, d_MCX);
! 77:
! 78: printf(" 1: %s, %s\n", d_NOM, d_ALG);
! 79: printf("-> 1: %s\n\n", d_ALG);
! 80:
! 81: printf(" 1: %s\n", d_RPN);
! 82: printf("-> 1: %s\n", d_RPN);
! 83:
! 84: return;
! 85: }
! 86: else if ((*s_etat_processus).test_instruction == 'Y')
! 87: {
! 88: (*s_etat_processus).nombre_arguments = 1;
! 89: return;
! 90: }
! 91:
! 92: if (test_cfsf(s_etat_processus, 31) == d_vrai)
! 93: {
! 94: if (empilement_pile_last(s_etat_processus, 1) == d_erreur)
! 95: {
! 96: return;
! 97: }
! 98: }
! 99:
! 100: if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
! 101: &s_objet_argument) == d_erreur)
! 102: {
! 103: (*s_etat_processus).erreur_execution = d_ex_manque_argument;
! 104: return;
! 105: }
! 106:
! 107: /*
! 108: --------------------------------------------------------------------------------
! 109: Opposition d'un entier
! 110: --------------------------------------------------------------------------------
! 111: */
! 112:
! 113: if ((*s_objet_argument).type == INT)
! 114: {
! 115: if ((s_objet_resultat = copie_objet(s_etat_processus,
! 116: s_objet_argument, 'Q')) == NULL)
! 117: {
! 118: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 119: return;
! 120: }
! 121:
! 122: /*
! 123: * Permet d'éviter les résultats du type -0. Valable pour tous
! 124: * les types...
! 125: */
! 126:
! 127: if ((*((integer8 *) (*s_objet_argument).objet)) != 0)
! 128: {
! 129: (*((integer8 *) (*s_objet_resultat).objet)) =
! 130: -(*((integer8 *) (*s_objet_argument).objet));
! 131: }
! 132: }
! 133:
! 134: /*
! 135: --------------------------------------------------------------------------------
! 136: Opposition d'un réel
! 137: --------------------------------------------------------------------------------
! 138: */
! 139:
! 140: else if ((*s_objet_argument).type == REL)
! 141: {
! 142: if ((s_objet_resultat = copie_objet(s_etat_processus,
! 143: s_objet_argument, 'Q')) == NULL)
! 144: {
! 145: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 146: return;
! 147: }
! 148:
! 149: if ((*((real8 *) (*s_objet_argument).objet)) != 0)
! 150: {
! 151: (*((real8 *) (*s_objet_resultat).objet)) =
! 152: -(*((real8 *) (*s_objet_argument).objet));
! 153: }
! 154: }
! 155:
! 156: /*
! 157: --------------------------------------------------------------------------------
! 158: Opposition d'un complexe
! 159: --------------------------------------------------------------------------------
! 160: */
! 161:
! 162: else if ((*s_objet_argument).type == CPL)
! 163: {
! 164: if ((s_objet_resultat = copie_objet(s_etat_processus,
! 165: s_objet_argument, 'Q')) == NULL)
! 166: {
! 167: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 168: return;
! 169: }
! 170:
! 171: if ((*((struct_complexe16 *) (*s_objet_argument).objet)).partie_reelle
! 172: != 0)
! 173: {
! 174: (*((struct_complexe16 *) (*s_objet_resultat).objet)).partie_reelle =
! 175: -(*((struct_complexe16 *) (*s_objet_argument).objet))
! 176: .partie_reelle;
! 177: }
! 178:
! 179: if ((*((struct_complexe16 *) (*s_objet_argument).objet))
! 180: .partie_imaginaire != 0)
! 181: {
! 182: (*((struct_complexe16 *) (*s_objet_resultat).objet))
! 183: .partie_imaginaire =
! 184: -(*((struct_complexe16 *) (*s_objet_argument).objet))
! 185: .partie_imaginaire;
! 186: }
! 187: }
! 188:
! 189: /*
! 190: --------------------------------------------------------------------------------
! 191: Opposition d'un vecteur d'entiers
! 192: --------------------------------------------------------------------------------
! 193: */
! 194:
! 195: else if ((*s_objet_argument).type == VIN)
! 196: {
! 197: if ((s_objet_resultat = copie_objet(s_etat_processus,
! 198: s_objet_argument, 'Q')) == NULL)
! 199: {
! 200: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 201: return;
! 202: }
! 203:
! 204: for(i = 0; i < (*(((struct_vecteur *) (*s_objet_argument).objet)))
! 205: .taille; i++)
! 206: {
! 207: if (((integer8 *) (*(((struct_vecteur *)
! 208: (*s_objet_argument).objet))).tableau)[i] != 0)
! 209: {
! 210: ((integer8 *) (*(((struct_vecteur *) (*s_objet_resultat)
! 211: .objet))).tableau)[i] = -((integer8 *)
! 212: (*(((struct_vecteur *)
! 213: (*s_objet_argument).objet))).tableau)[i];
! 214: }
! 215: }
! 216: }
! 217:
! 218: /*
! 219: --------------------------------------------------------------------------------
! 220: Opposition d'un vecteur de réels
! 221: --------------------------------------------------------------------------------
! 222: */
! 223:
! 224: else if ((*s_objet_argument).type == VRL)
! 225: {
! 226: if ((s_objet_resultat = copie_objet(s_etat_processus,
! 227: s_objet_argument, 'Q')) == NULL)
! 228: {
! 229: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 230: return;
! 231: }
! 232:
! 233: for(i = 0; i < (*(((struct_vecteur *) (*s_objet_argument).objet)))
! 234: .taille; i++)
! 235: {
! 236: if (((real8 *) (*(((struct_vecteur *) (*s_objet_argument).objet)))
! 237: .tableau)[i] != 0)
! 238: {
! 239: ((real8 *) (*(((struct_vecteur *) (*s_objet_resultat)
! 240: .objet))).tableau)[i] = -((real8 *)
! 241: (*(((struct_vecteur *)
! 242: (*s_objet_argument).objet))).tableau)[i];
! 243: }
! 244: }
! 245: }
! 246:
! 247: /*
! 248: --------------------------------------------------------------------------------
! 249: Opposition d'un vecteur de complexes
! 250: --------------------------------------------------------------------------------
! 251: */
! 252:
! 253: else if ((*s_objet_argument).type == VCX)
! 254: {
! 255: if ((s_objet_resultat = copie_objet(s_etat_processus,
! 256: s_objet_argument, 'Q')) == NULL)
! 257: {
! 258: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 259: return;
! 260: }
! 261:
! 262: for(i = 0; i < (*(((struct_vecteur *) (*s_objet_argument).objet)))
! 263: .taille; i++)
! 264: {
! 265: if (((struct_complexe16 *) (*(((struct_vecteur *)
! 266: (*s_objet_argument).objet))).tableau)[i].partie_reelle != 0)
! 267: {
! 268: ((struct_complexe16 *) (*(((struct_vecteur *)
! 269: (*s_objet_resultat)
! 270: .objet))).tableau)[i].partie_reelle =
! 271: -((struct_complexe16 *) (*(((struct_vecteur *)
! 272: (*s_objet_argument).objet))).tableau)[i].partie_reelle;
! 273: }
! 274:
! 275: if (((struct_complexe16 *) (*(((struct_vecteur *)
! 276: (*s_objet_argument).objet))).tableau)[i].partie_imaginaire
! 277: != 0)
! 278: {
! 279: ((struct_complexe16 *) (*(((struct_vecteur *)
! 280: (*s_objet_resultat).objet))).tableau)[i]
! 281: .partie_imaginaire = -((struct_complexe16 *)
! 282: (*(((struct_vecteur *) (*s_objet_argument).objet)))
! 283: .tableau)[i].partie_imaginaire;
! 284: }
! 285: }
! 286: }
! 287:
! 288: /*
! 289: --------------------------------------------------------------------------------
! 290: Opposition d'une matrice d'entiers
! 291: --------------------------------------------------------------------------------
! 292: */
! 293:
! 294: else if ((*s_objet_argument).type == MIN)
! 295: {
! 296: if ((s_objet_resultat = copie_objet(s_etat_processus,
! 297: s_objet_argument, 'Q')) == NULL)
! 298: {
! 299: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 300: return;
! 301: }
! 302:
! 303: for(i = 0; i < (*(((struct_matrice *) (*s_objet_argument).objet)))
! 304: .nombre_lignes; i++)
! 305: {
! 306: for(j = 0; j < (*(((struct_matrice *) (*s_objet_argument).objet)))
! 307: .nombre_colonnes; j++)
! 308: {
! 309: if (((integer8 **) (*(((struct_matrice *) (*s_objet_argument)
! 310: .objet))).tableau)[i][j] != 0)
! 311: {
! 312: ((integer8 **) (*(((struct_matrice *) (*s_objet_resultat)
! 313: .objet))).tableau)[i][j] = -((integer8 **)
! 314: (*(((struct_matrice *)
! 315: (*s_objet_argument).objet))).tableau)[i][j];
! 316: }
! 317: }
! 318: }
! 319: }
! 320:
! 321: /*
! 322: --------------------------------------------------------------------------------
! 323: Opposition d'une matrice de réels
! 324: --------------------------------------------------------------------------------
! 325: */
! 326:
! 327: else if ((*s_objet_argument).type == MRL)
! 328: {
! 329: if ((s_objet_resultat = copie_objet(s_etat_processus,
! 330: s_objet_argument, 'Q')) == NULL)
! 331: {
! 332: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 333: return;
! 334: }
! 335:
! 336: for(i = 0; i < (*(((struct_matrice *) (*s_objet_argument).objet)))
! 337: .nombre_lignes; i++)
! 338: {
! 339: for(j = 0; j < (*(((struct_matrice *) (*s_objet_argument).objet)))
! 340: .nombre_colonnes; j++)
! 341: {
! 342: if (((real8 **) (*(((struct_matrice *) (*s_objet_argument)
! 343: .objet))).tableau)[i][j] != 0)
! 344: {
! 345: ((real8 **) (*(((struct_matrice *) (*s_objet_resultat)
! 346: .objet))).tableau)[i][j] = -((real8 **)
! 347: (*(((struct_matrice *)
! 348: (*s_objet_argument).objet))).tableau)[i][j];
! 349: }
! 350: }
! 351: }
! 352: }
! 353:
! 354: /*
! 355: --------------------------------------------------------------------------------
! 356: Opposition d'une matrice de complexes
! 357: --------------------------------------------------------------------------------
! 358: */
! 359:
! 360: else if ((*s_objet_argument).type == MCX)
! 361: {
! 362: if ((s_objet_resultat = copie_objet(s_etat_processus,
! 363: s_objet_argument, 'Q')) == NULL)
! 364: {
! 365: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 366: return;
! 367: }
! 368:
! 369: for(i = 0; i < (*(((struct_matrice *) (*s_objet_argument).objet)))
! 370: .nombre_lignes; i++)
! 371: {
! 372: for(j = 0; j < (*(((struct_matrice *) (*s_objet_argument).objet)))
! 373: .nombre_colonnes; j++)
! 374: {
! 375: if (((struct_complexe16 **) (*(((struct_matrice *)
! 376: (*s_objet_argument).objet))).tableau)[i][j]
! 377: .partie_reelle != 0)
! 378: {
! 379: ((struct_complexe16 **) (*(((struct_matrice *)
! 380: (*s_objet_resultat).objet))).tableau)[i][j]
! 381: .partie_reelle = -((struct_complexe16 **)
! 382: (*(((struct_matrice *) (*s_objet_argument).objet)))
! 383: .tableau)[i][j].partie_reelle;
! 384: }
! 385:
! 386: if (((struct_complexe16 **) (*(((struct_matrice *)
! 387: (*s_objet_argument).objet))).tableau)[i][j]
! 388: .partie_imaginaire != 0)
! 389: {
! 390: ((struct_complexe16 **) (*(((struct_matrice *)
! 391: (*s_objet_resultat).objet))).tableau)[i][j]
! 392: .partie_imaginaire = -((struct_complexe16 **)
! 393: (*(((struct_matrice *) (*s_objet_argument).objet)))
! 394: .tableau)[i][j].partie_imaginaire;
! 395: }
! 396: }
! 397: }
! 398: }
! 399:
! 400: /*
! 401: --------------------------------------------------------------------------------
! 402: Opposition d'un nom
! 403: --------------------------------------------------------------------------------
! 404: */
! 405:
! 406: else if ((*s_objet_argument).type == NOM)
! 407: {
! 408: if ((s_objet_resultat = allocation(s_etat_processus, ALG)) == NULL)
! 409: {
! 410: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 411: return;
! 412: }
! 413:
! 414: if (((*s_objet_resultat).objet =
! 415: allocation_maillon(s_etat_processus)) == NULL)
! 416: {
! 417: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 418: return;
! 419: }
! 420:
! 421: l_element_courant = (*s_objet_resultat).objet;
! 422:
! 423: if (((*l_element_courant).donnee = allocation(s_etat_processus, FCT))
! 424: == NULL)
! 425: {
! 426: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 427: return;
! 428: }
! 429:
! 430: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 431: .nombre_arguments = 0;
! 432: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 433: .fonction = instruction_vers_niveau_superieur;
! 434:
! 435: if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 436: .nom_fonction = malloc(3 * sizeof(unsigned char))) == NULL)
! 437: {
! 438: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 439: return;
! 440: }
! 441:
! 442: strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 443: .nom_fonction, "<<");
! 444:
! 445: if (((*l_element_courant).suivant =
! 446: allocation_maillon(s_etat_processus)) == NULL)
! 447: {
! 448: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 449: return;
! 450: }
! 451:
! 452: l_element_courant = (*l_element_courant).suivant;
! 453: (*l_element_courant).donnee = s_objet_argument;
! 454:
! 455: if (((*l_element_courant).suivant =
! 456: allocation_maillon(s_etat_processus)) == NULL)
! 457: {
! 458: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 459: return;
! 460: }
! 461:
! 462: l_element_courant = (*l_element_courant).suivant;
! 463:
! 464: if (((*l_element_courant).donnee = allocation(s_etat_processus, FCT))
! 465: == NULL)
! 466: {
! 467: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 468: return;
! 469: }
! 470:
! 471: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 472: .nombre_arguments = 1;
! 473: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 474: .fonction = instruction_neg;
! 475:
! 476: if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 477: .nom_fonction = malloc(4 * sizeof(unsigned char))) == NULL)
! 478: {
! 479: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 480: return;
! 481: }
! 482:
! 483: strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 484: .nom_fonction, "NEG");
! 485:
! 486: if (((*l_element_courant).suivant =
! 487: allocation_maillon(s_etat_processus)) == NULL)
! 488: {
! 489: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 490: return;
! 491: }
! 492:
! 493: l_element_courant = (*l_element_courant).suivant;
! 494:
! 495: if (((*l_element_courant).donnee = allocation(s_etat_processus, FCT))
! 496: == NULL)
! 497: {
! 498: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 499: return;
! 500: }
! 501:
! 502: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 503: .nombre_arguments = 0;
! 504: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 505: .fonction = instruction_vers_niveau_inferieur;
! 506:
! 507: if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 508: .nom_fonction = malloc(3 * sizeof(unsigned char))) == NULL)
! 509: {
! 510: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 511: return;
! 512: }
! 513:
! 514: strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 515: .nom_fonction, ">>");
! 516:
! 517: (*l_element_courant).suivant = NULL;
! 518: s_objet_argument = NULL;
! 519: }
! 520:
! 521: /*
! 522: --------------------------------------------------------------------------------
! 523: Opposition d'une expression
! 524: --------------------------------------------------------------------------------
! 525: */
! 526:
! 527: else if (((*s_objet_argument).type == ALG) ||
! 528: ((*s_objet_argument).type == RPN))
! 529: {
! 530: if ((s_copie_argument = copie_objet(s_etat_processus,
! 531: s_objet_argument, 'N')) == NULL)
! 532: {
! 533: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 534: return;
! 535: }
! 536:
! 537: liberation(s_etat_processus, s_objet_argument);
! 538: s_objet_argument = s_copie_argument;
! 539:
! 540: l_element_courant = (struct_liste_chainee *)
! 541: (*s_objet_argument).objet;
! 542: l_element_precedent = l_element_courant;
! 543:
! 544: while((*l_element_courant).suivant != NULL)
! 545: {
! 546: l_element_precedent = l_element_courant;
! 547: l_element_courant = (*l_element_courant).suivant;
! 548: }
! 549:
! 550: drapeau = d_vrai;
! 551:
! 552: if ((*(*l_element_precedent).donnee).type == FCT)
! 553: {
! 554: if (strcmp((*((struct_fonction *) (*(*l_element_precedent).donnee)
! 555: .objet)).nom_fonction, "NEG") == 0)
! 556: {
! 557: drapeau = d_faux;
! 558:
! 559: l_element_courant = (struct_liste_chainee *)
! 560: (*s_objet_argument).objet;
! 561:
! 562: while((*l_element_courant).suivant != l_element_precedent)
! 563: {
! 564: l_element_courant = (*l_element_courant).suivant;
! 565: }
! 566:
! 567: l_element_tampon = (*l_element_courant).suivant;
! 568: (*l_element_courant).suivant = (*l_element_precedent).suivant;
! 569:
! 570: liberation(s_etat_processus, (*l_element_tampon).donnee);
! 571: free(l_element_tampon);
! 572: }
! 573: }
! 574:
! 575: if (drapeau == d_vrai)
! 576: {
! 577: if (((*l_element_precedent).suivant =
! 578: allocation_maillon(s_etat_processus)) == NULL)
! 579: {
! 580: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 581: return;
! 582: }
! 583:
! 584: if (((*(*l_element_precedent).suivant).donnee =
! 585: allocation(s_etat_processus, FCT)) == NULL)
! 586: {
! 587: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 588: return;
! 589: }
! 590:
! 591: (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
! 592: .donnee).objet)).nombre_arguments = 1;
! 593: (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
! 594: .donnee).objet)).fonction = instruction_neg;
! 595:
! 596: if (((*((struct_fonction *) (*(*(*l_element_precedent)
! 597: .suivant).donnee).objet)).nom_fonction =
! 598: malloc(4 * sizeof(unsigned char))) == NULL)
! 599: {
! 600: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 601: return;
! 602: }
! 603:
! 604: strcpy((*((struct_fonction *) (*(*(*l_element_precedent)
! 605: .suivant).donnee).objet)).nom_fonction, "NEG");
! 606:
! 607: (*(*l_element_precedent).suivant).suivant = l_element_courant;
! 608: }
! 609:
! 610: s_objet_resultat = s_objet_argument;
! 611: s_objet_argument = NULL;
! 612: }
! 613:
! 614: /*
! 615: --------------------------------------------------------------------------------
! 616: Opposition impossible
! 617: --------------------------------------------------------------------------------
! 618: */
! 619:
! 620: else
! 621: {
! 622: liberation(s_etat_processus, s_objet_argument);
! 623:
! 624: (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
! 625: return;
! 626: }
! 627:
! 628: liberation(s_etat_processus, s_objet_argument);
! 629:
! 630: if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
! 631: s_objet_resultat) == d_erreur)
! 632: {
! 633: return;
! 634: }
! 635:
! 636: return;
! 637: }
! 638:
! 639:
! 640: /*
! 641: ================================================================================
! 642: Fonction 'not'
! 643: ================================================================================
! 644: Entrées : pointeur sur une struct_processus
! 645: --------------------------------------------------------------------------------
! 646: Sorties :
! 647: --------------------------------------------------------------------------------
! 648: Effets de bord : néant
! 649: ================================================================================
! 650: */
! 651:
! 652: void
! 653: instruction_not(struct_processus *s_etat_processus)
! 654: {
! 655: struct_liste_chainee *l_element_courant;
! 656: struct_liste_chainee *l_element_precedent;
! 657:
! 658: struct_objet *s_copie_argument;
! 659: struct_objet *s_objet_argument;
! 660: struct_objet *s_objet_resultat;
! 661:
! 662: (*s_etat_processus).erreur_execution = d_ex;
! 663:
! 664: if ((*s_etat_processus).affichage_arguments == 'Y')
! 665: {
! 666: printf("\n NOT ");
! 667:
! 668: if ((*s_etat_processus).langue == 'F')
! 669: {
! 670: printf("(complément)\n\n");
! 671: }
! 672: else
! 673: {
! 674: printf("(complement)\n\n");
! 675: }
! 676:
! 677: printf(" 1: %s, %s\n", d_INT, d_REL);
! 678: printf("-> 1: %s\n\n", d_INT);
! 679:
! 680: printf(" 1: %s\n", d_BIN);
! 681: printf("-> 1: %s\n\n", d_BIN);
! 682:
! 683: printf(" 1: %s, %s\n", d_NOM, d_ALG);
! 684: printf("-> 1: %s\n\n", d_ALG);
! 685:
! 686: printf(" 1: %s\n", d_RPN);
! 687: printf("-> 1: %s\n", d_RPN);
! 688:
! 689: return;
! 690: }
! 691: else if ((*s_etat_processus).test_instruction == 'Y')
! 692: {
! 693: (*s_etat_processus).nombre_arguments = 1;
! 694: return;
! 695: }
! 696:
! 697: if (test_cfsf(s_etat_processus, 31) == d_vrai)
! 698: {
! 699: if (empilement_pile_last(s_etat_processus, 1) == d_erreur)
! 700: {
! 701: return;
! 702: }
! 703: }
! 704:
! 705: if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
! 706: &s_objet_argument) == d_erreur)
! 707: {
! 708: (*s_etat_processus).erreur_execution = d_ex_manque_argument;
! 709: return;
! 710: }
! 711:
! 712: /*
! 713: --------------------------------------------------------------------------------
! 714: NOT logique
! 715: --------------------------------------------------------------------------------
! 716: */
! 717:
! 718: if (((*s_objet_argument).type == INT) ||
! 719: ((*s_objet_argument).type == REL))
! 720: {
! 721: if ((s_objet_resultat = allocation(s_etat_processus, INT)) == NULL)
! 722: {
! 723: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 724: return;
! 725: }
! 726:
! 727: if ((*s_objet_argument).type == INT)
! 728: {
! 729: if ((*((integer8 *) (*s_objet_argument).objet)) == 0)
! 730: {
! 731: (*((integer8 *) (*s_objet_resultat).objet)) = -1;
! 732: }
! 733: else
! 734: {
! 735: (*((integer8 *) (*s_objet_resultat).objet)) = 0;
! 736: }
! 737: }
! 738: else
! 739: {
! 740: if ((*((real8 *) (*s_objet_argument).objet)) == 0)
! 741: {
! 742: (*((integer8 *) (*s_objet_resultat).objet)) = -1;
! 743: }
! 744: else
! 745: {
! 746: (*((integer8 *) (*s_objet_resultat).objet)) = 0;
! 747: }
! 748: }
! 749: }
! 750:
! 751: /*
! 752: --------------------------------------------------------------------------------
! 753: NOT binaire
! 754: --------------------------------------------------------------------------------
! 755: */
! 756:
! 757: else if ((*s_objet_argument).type == BIN)
! 758: {
! 759: (*((logical8 *) (*s_objet_argument).objet)) =
! 760: ~(*((logical8 *) (*s_objet_argument).objet));
! 761:
! 762: s_objet_resultat = s_objet_argument;
! 763: s_objet_argument = NULL;
! 764: }
! 765:
! 766: /*
! 767: --------------------------------------------------------------------------------
! 768: NOT d'un nom
! 769: --------------------------------------------------------------------------------
! 770: */
! 771:
! 772: else if ((*s_objet_argument).type == NOM)
! 773: {
! 774: if ((s_objet_resultat = allocation(s_etat_processus, ALG)) == NULL)
! 775: {
! 776: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 777: return;
! 778: }
! 779:
! 780: if (((*s_objet_resultat).objet =
! 781: allocation_maillon(s_etat_processus)) == NULL)
! 782: {
! 783: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 784: return;
! 785: }
! 786:
! 787: l_element_courant = (*s_objet_resultat).objet;
! 788:
! 789: if (((*l_element_courant).donnee = allocation(s_etat_processus, FCT))
! 790: == NULL)
! 791: {
! 792: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 793: return;
! 794: }
! 795:
! 796: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 797: .nombre_arguments = 0;
! 798: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 799: .fonction = instruction_vers_niveau_superieur;
! 800:
! 801: if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 802: .nom_fonction = malloc(3 * sizeof(unsigned char))) == NULL)
! 803: {
! 804: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 805: return;
! 806: }
! 807:
! 808: strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 809: .nom_fonction, "<<");
! 810:
! 811: if (((*l_element_courant).suivant =
! 812: allocation_maillon(s_etat_processus)) == NULL)
! 813: {
! 814: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 815: return;
! 816: }
! 817:
! 818: l_element_courant = (*l_element_courant).suivant;
! 819: (*l_element_courant).donnee = s_objet_argument;
! 820:
! 821: if (((*l_element_courant).suivant =
! 822: allocation_maillon(s_etat_processus)) == NULL)
! 823: {
! 824: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 825: return;
! 826: }
! 827:
! 828: l_element_courant = (*l_element_courant).suivant;
! 829:
! 830: if (((*l_element_courant).donnee = allocation(s_etat_processus, FCT))
! 831: == NULL)
! 832: {
! 833: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 834: return;
! 835: }
! 836:
! 837: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 838: .nombre_arguments = 1;
! 839: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 840: .fonction = instruction_not;
! 841:
! 842: if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 843: .nom_fonction = malloc(4 * sizeof(unsigned char))) == NULL)
! 844: {
! 845: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 846: return;
! 847: }
! 848:
! 849: strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 850: .nom_fonction, "NOT");
! 851:
! 852: if (((*l_element_courant).suivant =
! 853: allocation_maillon(s_etat_processus)) == NULL)
! 854: {
! 855: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 856: return;
! 857: }
! 858:
! 859: l_element_courant = (*l_element_courant).suivant;
! 860:
! 861: if (((*l_element_courant).donnee = allocation(s_etat_processus, FCT))
! 862: == NULL)
! 863: {
! 864: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 865: return;
! 866: }
! 867:
! 868: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 869: .nombre_arguments = 0;
! 870: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 871: .fonction = instruction_vers_niveau_inferieur;
! 872:
! 873: if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 874: .nom_fonction = malloc(3 * sizeof(unsigned char))) == NULL)
! 875: {
! 876: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 877: return;
! 878: }
! 879:
! 880: strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 881: .nom_fonction, ">>");
! 882:
! 883: (*l_element_courant).suivant = NULL;
! 884: s_objet_argument = NULL;
! 885: }
! 886:
! 887: /*
! 888: --------------------------------------------------------------------------------
! 889: NOT d'une expression
! 890: --------------------------------------------------------------------------------
! 891: */
! 892:
! 893: else if (((*s_objet_argument).type == ALG) ||
! 894: ((*s_objet_argument).type == RPN))
! 895: {
! 896: if ((s_copie_argument = copie_objet(s_etat_processus,
! 897: s_objet_argument, 'N')) == NULL)
! 898: {
! 899: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 900: return;
! 901: }
! 902:
! 903: l_element_courant = (struct_liste_chainee *)
! 904: (*s_copie_argument).objet;
! 905: l_element_precedent = l_element_courant;
! 906:
! 907: while((*l_element_courant).suivant != NULL)
! 908: {
! 909: l_element_precedent = l_element_courant;
! 910: l_element_courant = (*l_element_courant).suivant;
! 911: }
! 912:
! 913: if (((*l_element_precedent).suivant =
! 914: allocation_maillon(s_etat_processus)) == NULL)
! 915: {
! 916: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 917: return;
! 918: }
! 919:
! 920: if (((*(*l_element_precedent).suivant).donnee =
! 921: allocation(s_etat_processus, FCT)) == NULL)
! 922: {
! 923: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 924: return;
! 925: }
! 926:
! 927: (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
! 928: .donnee).objet)).nombre_arguments = 1;
! 929: (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
! 930: .donnee).objet)).fonction = instruction_not;
! 931:
! 932: if (((*((struct_fonction *) (*(*(*l_element_precedent)
! 933: .suivant).donnee).objet)).nom_fonction =
! 934: malloc(4 * sizeof(unsigned char))) == NULL)
! 935: {
! 936: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 937: return;
! 938: }
! 939:
! 940: strcpy((*((struct_fonction *) (*(*(*l_element_precedent)
! 941: .suivant).donnee).objet)).nom_fonction, "NOT");
! 942:
! 943: (*(*l_element_precedent).suivant).suivant = l_element_courant;
! 944:
! 945: s_objet_resultat = s_copie_argument;
! 946: }
! 947:
! 948: /*
! 949: --------------------------------------------------------------------------------
! 950: NOT impossible
! 951: --------------------------------------------------------------------------------
! 952: */
! 953:
! 954: else
! 955: {
! 956: liberation(s_etat_processus, s_objet_argument);
! 957:
! 958: (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
! 959: return;
! 960: }
! 961:
! 962: liberation(s_etat_processus, s_objet_argument);
! 963:
! 964: if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
! 965: s_objet_resultat) == d_erreur)
! 966: {
! 967: return;
! 968: }
! 969:
! 970: return;
! 971: }
! 972:
! 973:
! 974: /*
! 975: ================================================================================
! 976: Fonction '<>'
! 977: ================================================================================
! 978: Entrées :
! 979: --------------------------------------------------------------------------------
! 980: Sorties :
! 981: --------------------------------------------------------------------------------
! 982: Effets de bord : néant
! 983: ================================================================================
! 984: */
! 985:
! 986: void
! 987: instruction_ne(struct_processus *s_etat_processus)
! 988: {
! 989: struct_liste_chainee *l_element_courant;
! 990: struct_liste_chainee *l_element_courant_1;
! 991: struct_liste_chainee *l_element_courant_2;
! 992: struct_liste_chainee *l_element_precedent;
! 993:
! 994: struct_objet *s_copie_argument_1;
! 995: struct_objet *s_copie_argument_2;
! 996: struct_objet *s_objet_argument_1;
! 997: struct_objet *s_objet_argument_2;
! 998: struct_objet *s_objet_resultat;
! 999: struct_objet *s_objet_resultat_intermediaire;
! 1000:
! 1001: logical1 difference;
! 1002:
! 1003: unsigned long i;
! 1004: unsigned long j;
! 1005: unsigned long nombre_elements;
! 1006:
! 1007: (*s_etat_processus).erreur_execution = d_ex;
! 1008:
! 1009: if ((*s_etat_processus).affichage_arguments == 'Y')
! 1010: {
! 1011: printf("\n <> ");
! 1012:
! 1013: if ((*s_etat_processus).langue == 'F')
! 1014: {
! 1015: printf("(opérateur différence)\n\n");
! 1016: }
! 1017: else
! 1018: {
! 1019: printf("(different)\n\n");
! 1020: }
! 1021:
! 1022: printf(" 2: %s, %s\n", d_INT, d_REL);
! 1023: printf(" 1: %s, %s\n", d_INT, d_REL);
! 1024: printf("-> 1: %s\n\n", d_INT);
! 1025:
! 1026: printf(" 2: %s\n", d_BIN);
! 1027: printf(" 1: %s\n", d_BIN);
! 1028: printf("-> 1: %s\n\n", d_INT);
! 1029:
! 1030: printf(" 2: %s\n", d_CHN);
! 1031: printf(" 1: %s\n", d_CHN);
! 1032: printf("-> 1: %s\n\n", d_INT);
! 1033:
! 1034: printf(" 2: %s\n", d_NOM);
! 1035: printf(" 1: %s, %s, %s, %s\n", d_NOM, d_ALG, d_INT, d_REL);
! 1036: printf("-> 1: %s\n\n", d_ALG);
! 1037:
! 1038: printf(" 2: %s, %s, %s, %s\n", d_NOM, d_ALG, d_INT, d_REL);
! 1039: printf(" 1: %s\n", d_NOM);
! 1040: printf("-> 1: %s\n\n", d_ALG);
! 1041:
! 1042: printf(" 2: %s\n", d_ALG);
! 1043: printf(" 1: %s\n", d_ALG);
! 1044: printf("-> 1: %s\n\n", d_ALG);
! 1045:
! 1046: printf(" 2: %s\n", d_RPN);
! 1047: printf(" 1: %s\n", d_RPN);
! 1048: printf("-> 1: %s\n", d_RPN);
! 1049:
! 1050: return;
! 1051: }
! 1052: else if ((*s_etat_processus).test_instruction == 'Y')
! 1053: {
! 1054: (*s_etat_processus).nombre_arguments = 0;
! 1055: return;
! 1056: }
! 1057:
! 1058: if (test_cfsf(s_etat_processus, 31) == d_vrai)
! 1059: {
! 1060: if (empilement_pile_last(s_etat_processus, 2) == d_erreur)
! 1061: {
! 1062: return;
! 1063: }
! 1064: }
! 1065:
! 1066: if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
! 1067: &s_objet_argument_1) == d_erreur)
! 1068: {
! 1069: (*s_etat_processus).erreur_execution = d_ex_manque_argument;
! 1070: return;
! 1071: }
! 1072:
! 1073: if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
! 1074: &s_objet_argument_2) == d_erreur)
! 1075: {
! 1076: liberation(s_etat_processus, s_objet_argument_1);
! 1077:
! 1078: (*s_etat_processus).erreur_execution = d_ex_manque_argument;
! 1079: return;
! 1080: }
! 1081:
! 1082: /*
! 1083: --------------------------------------------------------------------------------
! 1084: SAME NOT sur des valeurs numériques
! 1085: --------------------------------------------------------------------------------
! 1086: */
! 1087:
! 1088: if ((((*s_objet_argument_1).type == INT) ||
! 1089: ((*s_objet_argument_1).type == REL)) &&
! 1090: (((*s_objet_argument_2).type == INT) ||
! 1091: ((*s_objet_argument_2).type == REL)))
! 1092: {
! 1093: if ((s_objet_resultat = allocation(s_etat_processus, INT)) == NULL)
! 1094: {
! 1095: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1096: return;
! 1097: }
! 1098:
! 1099: if ((*s_objet_argument_1).type == INT)
! 1100: {
! 1101: if ((*s_objet_argument_2).type == INT)
! 1102: {
! 1103: (*((integer8 *) (*s_objet_resultat).objet)) =
! 1104: ((*((integer8 *) (*s_objet_argument_1).objet)) !=
! 1105: (*((integer8 *) (*s_objet_argument_2).objet)))
! 1106: ? -1 : 0;
! 1107: }
! 1108: else
! 1109: {
! 1110: (*((integer8 *) (*s_objet_resultat).objet)) =
! 1111: ((*((integer8 *) (*s_objet_argument_1).objet)) !=
! 1112: (*((real8 *) (*s_objet_argument_2).objet)))
! 1113: ? -1 : 0;
! 1114: }
! 1115: }
! 1116: else
! 1117: {
! 1118: if ((*s_objet_argument_2).type == INT)
! 1119: {
! 1120: (*((integer8 *) (*s_objet_resultat).objet)) =
! 1121: ((*((real8 *) (*s_objet_argument_1).objet)) !=
! 1122: (*((integer8 *) (*s_objet_argument_2).objet)))
! 1123: ? -1 : 0;
! 1124: }
! 1125: else
! 1126: {
! 1127: (*((integer8 *) (*s_objet_resultat).objet)) =
! 1128: ((*((real8 *) (*s_objet_argument_1).objet)) !=
! 1129: (*((real8 *) (*s_objet_argument_2).objet)))
! 1130: ? -1 : 0;
! 1131: }
! 1132: }
! 1133: }
! 1134:
! 1135: /*
! 1136: --------------------------------------------------------------------------------
! 1137: SAME NOT complexe
! 1138: --------------------------------------------------------------------------------
! 1139: */
! 1140:
! 1141: else if (((*s_objet_argument_1).type == CPL) &&
! 1142: ((*s_objet_argument_2).type == CPL))
! 1143: {
! 1144: if ((s_objet_resultat = allocation(s_etat_processus, INT)) == NULL)
! 1145: {
! 1146: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1147: return;
! 1148: }
! 1149:
! 1150: (*((integer8 *) (*s_objet_resultat).objet)) =
! 1151: (((*((struct_complexe16 *) (*s_objet_argument_1).objet))
! 1152: .partie_reelle != (*((struct_complexe16 *) (*s_objet_argument_2)
! 1153: .objet)).partie_reelle) || ((*((struct_complexe16 *)
! 1154: (*s_objet_argument_1).objet)).partie_imaginaire !=
! 1155: ((*((struct_complexe16 *) (*s_objet_argument_1).objet))
! 1156: .partie_imaginaire))) ? -1 : 0;
! 1157: }
! 1158:
! 1159: /*
! 1160: --------------------------------------------------------------------------------
! 1161: SAME NOT binaire
! 1162: --------------------------------------------------------------------------------
! 1163: */
! 1164:
! 1165: else if (((*s_objet_argument_1).type == BIN) &&
! 1166: ((*s_objet_argument_2).type == BIN))
! 1167: {
! 1168: if ((s_objet_resultat = allocation(s_etat_processus, INT)) == NULL)
! 1169: {
! 1170: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1171: return;
! 1172: }
! 1173:
! 1174: (*((integer8 *) (*s_objet_resultat).objet)) =
! 1175: ((*((logical8 *) (*s_objet_argument_1).objet)) !=
! 1176: (*((logical8 *) (*s_objet_argument_2).objet)))
! 1177: ? -1 : 0;
! 1178: }
! 1179:
! 1180: /*
! 1181: --------------------------------------------------------------------------------
! 1182: SAME NOT portant sur des chaînes de caractères
! 1183: --------------------------------------------------------------------------------
! 1184: */
! 1185:
! 1186: else if (((*s_objet_argument_1).type == CHN) &&
! 1187: ((*s_objet_argument_2).type == CHN))
! 1188: {
! 1189: if ((s_objet_resultat = allocation(s_etat_processus, INT)) == NULL)
! 1190: {
! 1191: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1192: return;
! 1193: }
! 1194:
! 1195: (*((integer8 *) (*s_objet_resultat).objet)) =
! 1196: (strcmp((unsigned char *) (*s_objet_argument_1).objet,
! 1197: (unsigned char *) (*s_objet_argument_2).objet) != 0) ? -1 : 0;
! 1198: }
! 1199:
! 1200: /*
! 1201: --------------------------------------------------------------------------------
! 1202: SAME NOT portant sur des listes
! 1203: --------------------------------------------------------------------------------
! 1204: */
! 1205: /*
! 1206: * Il y a de la récursivité dans l'air...
! 1207: */
! 1208:
! 1209: else if ((((*s_objet_argument_1).type == LST) &&
! 1210: ((*s_objet_argument_2).type == LST)) ||
! 1211: (((*s_objet_argument_1).type == ALG) &&
! 1212: ((*s_objet_argument_2).type == ALG)) ||
! 1213: (((*s_objet_argument_1).type == RPN) &&
! 1214: ((*s_objet_argument_2).type == RPN)))
! 1215: {
! 1216: if ((s_objet_resultat = allocation(s_etat_processus, INT)) == NULL)
! 1217: {
! 1218: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1219: return;
! 1220: }
! 1221:
! 1222: l_element_courant_1 = (struct_liste_chainee *)
! 1223: (*s_objet_argument_1).objet;
! 1224: l_element_courant_2 = (struct_liste_chainee *)
! 1225: (*s_objet_argument_2).objet;
! 1226:
! 1227: difference = d_faux;
! 1228:
! 1229: while((l_element_courant_1 != NULL) && (l_element_courant_2 != NULL)
! 1230: && (difference == d_faux))
! 1231: {
! 1232: if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
! 1233: (*l_element_courant_1).donnee) == d_erreur)
! 1234: {
! 1235: return;
! 1236: }
! 1237:
! 1238: if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
! 1239: (*l_element_courant_2).donnee) == d_erreur)
! 1240: {
! 1241: return;
! 1242: }
! 1243:
! 1244: instruction_same(s_etat_processus);
! 1245:
! 1246: (*l_element_courant_1).donnee = NULL;
! 1247: (*l_element_courant_2).donnee = NULL;
! 1248:
! 1249: if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
! 1250: &s_objet_resultat_intermediaire) == d_erreur)
! 1251: {
! 1252: liberation(s_etat_processus, s_objet_argument_1);
! 1253: liberation(s_etat_processus, s_objet_argument_2);
! 1254: liberation(s_etat_processus, s_objet_resultat);
! 1255:
! 1256: (*s_etat_processus).erreur_execution = d_ex_manque_argument;
! 1257: return;
! 1258: }
! 1259:
! 1260: if ((*s_objet_resultat_intermediaire).type != INT)
! 1261: {
! 1262: liberation(s_etat_processus, s_objet_argument_1);
! 1263: liberation(s_etat_processus, s_objet_argument_2);
! 1264: liberation(s_etat_processus, s_objet_resultat);
! 1265:
! 1266: return;
! 1267: }
! 1268:
! 1269: difference = (*(((integer8 *) (*s_objet_resultat_intermediaire)
! 1270: .objet)) == 0) ? d_vrai : d_faux;
! 1271:
! 1272: liberation(s_etat_processus, s_objet_resultat_intermediaire);
! 1273:
! 1274: l_element_courant_1 = (*l_element_courant_1).suivant;
! 1275: l_element_courant_2 = (*l_element_courant_2).suivant;
! 1276: }
! 1277:
! 1278: if (((l_element_courant_1 != NULL) && (l_element_courant_2 == NULL)) ||
! 1279: ((l_element_courant_1 == NULL) &&
! 1280: (l_element_courant_2 != NULL)))
! 1281: {
! 1282: (*((integer8 *) (*s_objet_resultat).objet)) = 0;
! 1283: }
! 1284: else
! 1285: {
! 1286: (*((integer8 *) (*s_objet_resultat).objet)) =
! 1287: (difference == d_vrai) ? -1 : 0;
! 1288: }
! 1289: }
! 1290:
! 1291: /*
! 1292: --------------------------------------------------------------------------------
! 1293: SAME NOT portant sur des vecteurs
! 1294: --------------------------------------------------------------------------------
! 1295: */
! 1296: /*
! 1297: * Vecteurs d'entiers
! 1298: */
! 1299:
! 1300: else if (((*s_objet_argument_1).type == VIN) &&
! 1301: ((*s_objet_argument_2).type == VIN))
! 1302: {
! 1303: if ((s_objet_resultat = allocation(s_etat_processus, INT)) == NULL)
! 1304: {
! 1305: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1306: return;
! 1307: }
! 1308:
! 1309: if ((*((struct_vecteur *) (*s_objet_argument_1).objet)).taille !=
! 1310: (*((struct_vecteur *) (*s_objet_argument_2).objet)).taille)
! 1311: {
! 1312: (*((integer8 *) (*s_objet_resultat).objet)) = -1;
! 1313: }
! 1314: else
! 1315: {
! 1316: difference = d_faux;
! 1317:
! 1318: for(i = 0; (i < (*((struct_vecteur *) (*s_objet_argument_1).objet))
! 1319: .taille) && (difference == d_faux); i++)
! 1320: {
! 1321: difference = (((integer8 *) (*((struct_vecteur *)
! 1322: (*s_objet_argument_1).objet)).tableau)[i] ==
! 1323: ((integer8 *) (*((struct_vecteur *)
! 1324: (*s_objet_argument_2).objet)).tableau)[i])
! 1325: ? d_faux : d_vrai;
! 1326: }
! 1327:
! 1328: (*((integer8 *) (*s_objet_resultat).objet)) = (difference ==
! 1329: d_vrai) ? -1 : 0;
! 1330: }
! 1331: }
! 1332:
! 1333: /*
! 1334: * Vecteurs de réels
! 1335: */
! 1336:
! 1337: else if (((*s_objet_argument_1).type == VRL) &&
! 1338: ((*s_objet_argument_2).type == VRL))
! 1339: {
! 1340: if ((s_objet_resultat = allocation(s_etat_processus, INT)) == NULL)
! 1341: {
! 1342: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1343: return;
! 1344: }
! 1345:
! 1346: if ((*((struct_vecteur *) (*s_objet_argument_1).objet)).taille !=
! 1347: (*((struct_vecteur *) (*s_objet_argument_2).objet)).taille)
! 1348: {
! 1349: (*((integer8 *) (*s_objet_resultat).objet)) = -1;
! 1350: }
! 1351: else
! 1352: {
! 1353: difference = d_faux;
! 1354:
! 1355: for(i = 0; (i < (*((struct_vecteur *) (*s_objet_argument_1).objet))
! 1356: .taille) && (difference == d_faux); i++)
! 1357: {
! 1358: difference = (((real8 *) (*((struct_vecteur *)
! 1359: (*s_objet_argument_1).objet)).tableau)[i] ==
! 1360: ((real8 *) (*((struct_vecteur *)
! 1361: (*s_objet_argument_2).objet)).tableau)[i])
! 1362: ? d_faux : d_vrai;
! 1363: }
! 1364:
! 1365: (*((integer8 *) (*s_objet_resultat).objet)) = (difference ==
! 1366: d_vrai) ? -1 : 0;
! 1367: }
! 1368: }
! 1369:
! 1370: /*
! 1371: * Vecteurs de complexes
! 1372: */
! 1373:
! 1374: else if (((*s_objet_argument_1).type == VCX) &&
! 1375: ((*s_objet_argument_2).type == VCX))
! 1376: {
! 1377: if ((s_objet_resultat = allocation(s_etat_processus, INT)) == NULL)
! 1378: {
! 1379: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1380: return;
! 1381: }
! 1382:
! 1383: if ((*((struct_vecteur *) (*s_objet_argument_1).objet)).taille !=
! 1384: (*((struct_vecteur *) (*s_objet_argument_2).objet)).taille)
! 1385: {
! 1386: (*((integer8 *) (*s_objet_resultat).objet)) = -1;
! 1387: }
! 1388: else
! 1389: {
! 1390: difference = d_faux;
! 1391:
! 1392: for(i = 0; (i < (*((struct_vecteur *) (*s_objet_argument_1).objet))
! 1393: .taille) && (difference == d_faux); i++)
! 1394: {
! 1395: difference = ((((struct_complexe16 *) (*((struct_vecteur *)
! 1396: (*s_objet_argument_1).objet)).tableau)[i].partie_reelle
! 1397: == ((struct_complexe16 *) (*((struct_vecteur *)
! 1398: (*s_objet_argument_2).objet)).tableau)[i].partie_reelle)
! 1399: && (((struct_complexe16 *) (*((struct_vecteur *)
! 1400: (*s_objet_argument_1).objet)).tableau)[i]
! 1401: .partie_imaginaire == ((struct_complexe16 *)
! 1402: (*((struct_vecteur *) (*s_objet_argument_2).objet))
! 1403: .tableau)[i].partie_imaginaire)) ? d_faux : d_vrai;
! 1404: }
! 1405:
! 1406: (*((integer8 *) (*s_objet_resultat).objet)) = (difference ==
! 1407: d_vrai) ? -1 : 0;
! 1408: }
! 1409: }
! 1410:
! 1411: /*
! 1412: --------------------------------------------------------------------------------
! 1413: SAME NOT portant sur des matrices
! 1414: --------------------------------------------------------------------------------
! 1415: */
! 1416: /*
! 1417: * Matrice d'entiers
! 1418: */
! 1419:
! 1420: else if (((*s_objet_argument_1).type == MIN) &&
! 1421: ((*s_objet_argument_2).type == MIN))
! 1422: {
! 1423: if ((s_objet_resultat = allocation(s_etat_processus, INT)) == NULL)
! 1424: {
! 1425: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1426: return;
! 1427: }
! 1428:
! 1429: if (((*((struct_matrice *) (*s_objet_argument_1).objet)).nombre_lignes
! 1430: != (*((struct_matrice *) (*s_objet_argument_2).objet))
! 1431: .nombre_lignes) || ((*((struct_matrice *) (*s_objet_argument_1)
! 1432: .objet)).nombre_colonnes != (*((struct_matrice *)
! 1433: (*s_objet_argument_2).objet)).nombre_colonnes))
! 1434: {
! 1435: (*((integer8 *) (*s_objet_resultat).objet)) = -1;
! 1436: }
! 1437: else
! 1438: {
! 1439: difference = d_faux;
! 1440:
! 1441: for(i = 0; (i < (*((struct_matrice *) (*s_objet_argument_1).objet))
! 1442: .nombre_lignes) && (difference == d_faux); i++)
! 1443: {
! 1444: for(j = 0; (j < (*((struct_matrice *) (*s_objet_argument_1)
! 1445: .objet)).nombre_colonnes) && (difference == d_faux);
! 1446: j++)
! 1447: {
! 1448: difference = (((integer8 **) (*((struct_matrice *)
! 1449: (*s_objet_argument_1).objet)).tableau)[i][j] ==
! 1450: ((integer8 **) (*((struct_matrice *)
! 1451: (*s_objet_argument_2).objet)).tableau)[i][j])
! 1452: ? d_faux : d_vrai;
! 1453: }
! 1454: }
! 1455:
! 1456: (*((integer8 *) (*s_objet_resultat).objet)) = (difference ==
! 1457: d_vrai) ? -1 : 0;
! 1458: }
! 1459: }
! 1460:
! 1461: /*
! 1462: * Matrice de réels
! 1463: */
! 1464:
! 1465: else if (((*s_objet_argument_1).type == MRL) &&
! 1466: ((*s_objet_argument_2).type == MRL))
! 1467: {
! 1468: if ((s_objet_resultat = allocation(s_etat_processus, INT)) == NULL)
! 1469: {
! 1470: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1471: return;
! 1472: }
! 1473:
! 1474: if (((*((struct_matrice *) (*s_objet_argument_1).objet)).nombre_lignes
! 1475: != (*((struct_matrice *) (*s_objet_argument_2).objet))
! 1476: .nombre_lignes) || ((*((struct_matrice *) (*s_objet_argument_1)
! 1477: .objet)).nombre_colonnes != (*((struct_matrice *)
! 1478: (*s_objet_argument_2).objet)).nombre_colonnes))
! 1479: {
! 1480: (*((integer8 *) (*s_objet_resultat).objet)) = -1;
! 1481: }
! 1482: else
! 1483: {
! 1484: difference = d_faux;
! 1485:
! 1486: for(i = 0; (i < (*((struct_matrice *) (*s_objet_argument_1).objet))
! 1487: .nombre_lignes) && (difference == d_faux); i++)
! 1488: {
! 1489: for(j = 0; (j < (*((struct_matrice *) (*s_objet_argument_1)
! 1490: .objet)).nombre_colonnes) && (difference == d_faux);
! 1491: j++)
! 1492: {
! 1493: difference = (((real8 **) (*((struct_matrice *)
! 1494: (*s_objet_argument_1).objet)).tableau)[i][j] ==
! 1495: ((real8 **) (*((struct_matrice *)
! 1496: (*s_objet_argument_2).objet)).tableau)[i][j])
! 1497: ? d_faux : d_vrai;
! 1498: }
! 1499: }
! 1500:
! 1501: (*((integer8 *) (*s_objet_resultat).objet)) = (difference ==
! 1502: d_vrai) ? -1 : 0;
! 1503: }
! 1504: }
! 1505:
! 1506: /*
! 1507: * Matrice de complexes
! 1508: */
! 1509:
! 1510: else if (((*s_objet_argument_1).type == MCX) &&
! 1511: ((*s_objet_argument_2).type == MCX))
! 1512: {
! 1513: if ((s_objet_resultat = allocation(s_etat_processus, INT)) == NULL)
! 1514: {
! 1515: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1516: return;
! 1517: }
! 1518:
! 1519: if (((*((struct_matrice *) (*s_objet_argument_1).objet)).nombre_lignes
! 1520: != (*((struct_matrice *) (*s_objet_argument_2).objet))
! 1521: .nombre_lignes) || ((*((struct_matrice *) (*s_objet_argument_1)
! 1522: .objet)).nombre_colonnes != (*((struct_matrice *)
! 1523: (*s_objet_argument_2).objet)).nombre_colonnes))
! 1524: {
! 1525: (*((integer8 *) (*s_objet_resultat).objet)) = -1;
! 1526: }
! 1527: else
! 1528: {
! 1529: difference = d_faux;
! 1530:
! 1531: for(i = 0; (i < (*((struct_matrice *) (*s_objet_argument_1).objet))
! 1532: .nombre_lignes) && (difference == d_faux); i++)
! 1533: {
! 1534: for(j = 0; (j < (*((struct_matrice *) (*s_objet_argument_1)
! 1535: .objet)).nombre_colonnes) && (difference == d_faux);
! 1536: j++)
! 1537: {
! 1538: difference = ((((struct_complexe16 **) (*((struct_matrice *)
! 1539: (*s_objet_argument_1).objet)).tableau)[i][j]
! 1540: .partie_reelle == ((struct_complexe16 **)
! 1541: (*((struct_matrice *) (*s_objet_argument_2).objet))
! 1542: .tableau)[i][j].partie_reelle) &&
! 1543: (((struct_complexe16 **) (*((struct_matrice *)
! 1544: (*s_objet_argument_1).objet)).tableau)[i][j]
! 1545: .partie_imaginaire == ((struct_complexe16 **)
! 1546: (*((struct_matrice *) (*s_objet_argument_2).objet))
! 1547: .tableau)[i][j].partie_imaginaire))
! 1548: ? d_faux : d_vrai;
! 1549: }
! 1550: }
! 1551:
! 1552: (*((integer8 *) (*s_objet_resultat).objet)) = (difference ==
! 1553: d_vrai) ? -1 : 0;
! 1554: }
! 1555: }
! 1556:
! 1557: /*
! 1558: --------------------------------------------------------------------------------
! 1559: SAME NOT entre des arguments complexes
! 1560: --------------------------------------------------------------------------------
! 1561: */
! 1562:
! 1563: /*
! 1564: * Nom ou valeur numérique / Nom ou valeur numérique
! 1565: */
! 1566:
! 1567: else if ((((*s_objet_argument_1).type == NOM) &&
! 1568: (((*s_objet_argument_2).type == NOM) ||
! 1569: ((*s_objet_argument_2).type == INT) ||
! 1570: ((*s_objet_argument_2).type == REL))) ||
! 1571: (((*s_objet_argument_2).type == NOM) &&
! 1572: (((*s_objet_argument_1).type == INT) ||
! 1573: ((*s_objet_argument_1).type == REL))))
! 1574: {
! 1575: if ((s_objet_resultat = allocation(s_etat_processus, ALG)) == NULL)
! 1576: {
! 1577: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1578: return;
! 1579: }
! 1580:
! 1581: if (((*s_objet_resultat).objet =
! 1582: allocation_maillon(s_etat_processus)) == NULL)
! 1583: {
! 1584: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1585: return;
! 1586: }
! 1587:
! 1588: l_element_courant = (*s_objet_resultat).objet;
! 1589:
! 1590: if (((*l_element_courant).donnee = allocation(s_etat_processus, FCT))
! 1591: == NULL)
! 1592: {
! 1593: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1594: return;
! 1595: }
! 1596:
! 1597: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 1598: .nombre_arguments = 0;
! 1599: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 1600: .fonction = instruction_vers_niveau_superieur;
! 1601:
! 1602: if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 1603: .nom_fonction = malloc(3 * sizeof(unsigned char))) == NULL)
! 1604: {
! 1605: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1606: return;
! 1607: }
! 1608:
! 1609: strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 1610: .nom_fonction, "<<");
! 1611:
! 1612: if (((*l_element_courant).suivant =
! 1613: allocation_maillon(s_etat_processus)) == NULL)
! 1614: {
! 1615: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1616: return;
! 1617: }
! 1618:
! 1619: l_element_courant = (*l_element_courant).suivant;
! 1620: (*l_element_courant).donnee = s_objet_argument_2;
! 1621:
! 1622: if (((*l_element_courant).suivant =
! 1623: allocation_maillon(s_etat_processus)) == NULL)
! 1624: {
! 1625: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1626: return;
! 1627: }
! 1628:
! 1629: l_element_courant = (*l_element_courant).suivant;
! 1630: (*l_element_courant).donnee = s_objet_argument_1;
! 1631:
! 1632: if (((*l_element_courant).suivant =
! 1633: allocation_maillon(s_etat_processus)) == NULL)
! 1634: {
! 1635: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1636: return;
! 1637: }
! 1638:
! 1639: l_element_courant = (*l_element_courant).suivant;
! 1640:
! 1641: if (((*l_element_courant).donnee = allocation(s_etat_processus, FCT))
! 1642: == NULL)
! 1643: {
! 1644: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1645: return;
! 1646: }
! 1647:
! 1648: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 1649: .nombre_arguments = 0;
! 1650: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 1651: .fonction = instruction_ne;
! 1652:
! 1653: if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 1654: .nom_fonction = malloc(3 * sizeof(unsigned char))) == NULL)
! 1655: {
! 1656: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1657: return;
! 1658: }
! 1659:
! 1660: strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 1661: .nom_fonction, "<>");
! 1662:
! 1663: if (((*l_element_courant).suivant =
! 1664: allocation_maillon(s_etat_processus)) == NULL)
! 1665: {
! 1666: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1667: return;
! 1668: }
! 1669:
! 1670: l_element_courant = (*l_element_courant).suivant;
! 1671:
! 1672: if (((*l_element_courant).donnee = allocation(s_etat_processus, FCT))
! 1673: == NULL)
! 1674: {
! 1675: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1676: return;
! 1677: }
! 1678:
! 1679: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 1680: .nombre_arguments = 0;
! 1681: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 1682: .fonction = instruction_ne;
! 1683:
! 1684: if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 1685: .nom_fonction = malloc(3 * sizeof(unsigned char))) == NULL)
! 1686: {
! 1687: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1688: return;
! 1689: }
! 1690:
! 1691: strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 1692: .nom_fonction, ">>");
! 1693:
! 1694: (*l_element_courant).suivant = NULL;
! 1695:
! 1696: s_objet_argument_1 = NULL;
! 1697: s_objet_argument_2 = NULL;
! 1698: }
! 1699:
! 1700: /*
! 1701: * Nom ou valeur numérique / Expression
! 1702: */
! 1703:
! 1704: else if (((((*s_objet_argument_1).type == ALG) ||
! 1705: ((*s_objet_argument_1).type == RPN))) &&
! 1706: (((*s_objet_argument_2).type == NOM) ||
! 1707: ((*s_objet_argument_2).type == INT) ||
! 1708: ((*s_objet_argument_2).type == REL)))
! 1709: {
! 1710: nombre_elements = 0;
! 1711: l_element_courant = (struct_liste_chainee *)
! 1712: (*s_objet_argument_1).objet;
! 1713:
! 1714: while(l_element_courant != NULL)
! 1715: {
! 1716: nombre_elements++;
! 1717: l_element_courant = (*l_element_courant).suivant;
! 1718: }
! 1719:
! 1720: if (nombre_elements == 2)
! 1721: {
! 1722: liberation(s_etat_processus, s_objet_argument_1);
! 1723: liberation(s_etat_processus, s_objet_argument_2);
! 1724:
! 1725: (*s_etat_processus).erreur_execution = d_ex_argument_invalide;
! 1726: return;
! 1727: }
! 1728:
! 1729: if ((s_objet_resultat = copie_objet(s_etat_processus,
! 1730: s_objet_argument_1, 'N')) == NULL)
! 1731: {
! 1732: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1733: return;
! 1734: }
! 1735:
! 1736: l_element_courant = (struct_liste_chainee *)
! 1737: (*s_objet_resultat).objet;
! 1738: l_element_precedent = l_element_courant;
! 1739: l_element_courant = (*l_element_courant).suivant;
! 1740:
! 1741: if (((*l_element_precedent).suivant =
! 1742: allocation_maillon(s_etat_processus)) == NULL)
! 1743: {
! 1744: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1745: return;
! 1746: }
! 1747:
! 1748: (*(*l_element_precedent).suivant).donnee = s_objet_argument_2;
! 1749: (*(*l_element_precedent).suivant).suivant = l_element_courant;
! 1750:
! 1751: while((*l_element_courant).suivant != NULL)
! 1752: {
! 1753: l_element_precedent = l_element_courant;
! 1754: l_element_courant = (*l_element_courant).suivant;
! 1755: }
! 1756:
! 1757: if (((*l_element_precedent).suivant =
! 1758: allocation_maillon(s_etat_processus)) == NULL)
! 1759: {
! 1760: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1761: return;
! 1762: }
! 1763:
! 1764: if (((*(*l_element_precedent).suivant).donnee =
! 1765: allocation(s_etat_processus, FCT)) == NULL)
! 1766: {
! 1767: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1768: return;
! 1769: }
! 1770:
! 1771: (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
! 1772: .donnee).objet)).nombre_arguments = 0;
! 1773: (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
! 1774: .donnee).objet)).fonction = instruction_ne;
! 1775:
! 1776: if (((*((struct_fonction *) (*(*(*l_element_precedent)
! 1777: .suivant).donnee).objet)).nom_fonction =
! 1778: malloc(3 * sizeof(unsigned char))) == NULL)
! 1779: {
! 1780: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1781: return;
! 1782: }
! 1783:
! 1784: strcpy((*((struct_fonction *) (*(*(*l_element_precedent)
! 1785: .suivant).donnee).objet)).nom_fonction, "<>");
! 1786:
! 1787: (*(*l_element_precedent).suivant).suivant = l_element_courant;
! 1788:
! 1789: s_objet_argument_2 = NULL;
! 1790: }
! 1791:
! 1792: /*
! 1793: * Expression / Nom ou valeur numérique
! 1794: */
! 1795:
! 1796: else if ((((*s_objet_argument_1).type == NOM) ||
! 1797: ((*s_objet_argument_1).type == INT) ||
! 1798: ((*s_objet_argument_1).type == REL)) &&
! 1799: ((((*s_objet_argument_2).type == ALG) ||
! 1800: ((*s_objet_argument_2).type == RPN))))
! 1801: {
! 1802: nombre_elements = 0;
! 1803: l_element_courant = (struct_liste_chainee *)
! 1804: (*s_objet_argument_2).objet;
! 1805:
! 1806: while(l_element_courant != NULL)
! 1807: {
! 1808: nombre_elements++;
! 1809: l_element_courant = (*l_element_courant).suivant;
! 1810: }
! 1811:
! 1812: if (nombre_elements == 2)
! 1813: {
! 1814: liberation(s_etat_processus, s_objet_argument_1);
! 1815: liberation(s_etat_processus, s_objet_argument_2);
! 1816:
! 1817: (*s_etat_processus).erreur_execution = d_ex_argument_invalide;
! 1818: return;
! 1819: }
! 1820:
! 1821: if ((s_objet_resultat = copie_objet(s_etat_processus,
! 1822: s_objet_argument_2, 'N')) == NULL)
! 1823: {
! 1824: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1825: return;
! 1826: }
! 1827:
! 1828: l_element_courant = (struct_liste_chainee *)
! 1829: (*s_objet_resultat).objet;
! 1830: l_element_precedent = l_element_courant;
! 1831:
! 1832: while((*l_element_courant).suivant != NULL)
! 1833: {
! 1834: l_element_precedent = l_element_courant;
! 1835: l_element_courant = (*l_element_courant).suivant;
! 1836: }
! 1837:
! 1838: if (((*l_element_precedent).suivant =
! 1839: allocation_maillon(s_etat_processus)) == NULL)
! 1840: {
! 1841: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1842: return;
! 1843: }
! 1844:
! 1845: (*(*l_element_precedent).suivant).donnee = s_objet_argument_1;
! 1846: l_element_precedent = (*l_element_precedent).suivant;
! 1847:
! 1848: if (((*l_element_precedent).suivant =
! 1849: allocation_maillon(s_etat_processus)) == NULL)
! 1850: {
! 1851: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1852: return;
! 1853: }
! 1854:
! 1855: if (((*(*l_element_precedent).suivant).donnee =
! 1856: allocation(s_etat_processus, FCT)) == NULL)
! 1857: {
! 1858: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1859: return;
! 1860: }
! 1861:
! 1862: (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
! 1863: .donnee).objet)).nombre_arguments = 0;
! 1864: (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
! 1865: .donnee).objet)).fonction = instruction_ne;
! 1866:
! 1867: if (((*((struct_fonction *) (*(*(*l_element_precedent)
! 1868: .suivant).donnee).objet)).nom_fonction =
! 1869: malloc(3 * sizeof(unsigned char))) == NULL)
! 1870: {
! 1871: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1872: return;
! 1873: }
! 1874:
! 1875: strcpy((*((struct_fonction *) (*(*(*l_element_precedent)
! 1876: .suivant).donnee).objet)).nom_fonction, "<>");
! 1877:
! 1878: (*(*l_element_precedent).suivant).suivant = l_element_courant;
! 1879:
! 1880: s_objet_argument_1 = NULL;
! 1881: }
! 1882:
! 1883: /*
! 1884: * Expression / Expression
! 1885: */
! 1886:
! 1887: else if ((((*s_objet_argument_1).type == ALG) &&
! 1888: ((*s_objet_argument_2).type == ALG)) ||
! 1889: (((*s_objet_argument_1).type == RPN) &&
! 1890: ((*s_objet_argument_2).type == RPN)))
! 1891: {
! 1892: nombre_elements = 0;
! 1893: l_element_courant = (struct_liste_chainee *)
! 1894: (*s_objet_argument_1).objet;
! 1895:
! 1896: while(l_element_courant != NULL)
! 1897: {
! 1898: nombre_elements++;
! 1899: l_element_courant = (*l_element_courant).suivant;
! 1900: }
! 1901:
! 1902: if (nombre_elements == 2)
! 1903: {
! 1904: liberation(s_etat_processus, s_objet_argument_1);
! 1905: liberation(s_etat_processus, s_objet_argument_2);
! 1906:
! 1907: (*s_etat_processus).erreur_execution = d_ex_argument_invalide;
! 1908: return;
! 1909: }
! 1910:
! 1911: nombre_elements = 0;
! 1912: l_element_courant = (struct_liste_chainee *)
! 1913: (*s_objet_argument_2).objet;
! 1914:
! 1915: while(l_element_courant != NULL)
! 1916: {
! 1917: nombre_elements++;
! 1918: l_element_courant = (*l_element_courant).suivant;
! 1919: }
! 1920:
! 1921: if (nombre_elements == 2)
! 1922: {
! 1923: liberation(s_etat_processus, s_objet_argument_1);
! 1924: liberation(s_etat_processus, s_objet_argument_2);
! 1925:
! 1926: (*s_etat_processus).erreur_execution = d_ex_argument_invalide;
! 1927: return;
! 1928: }
! 1929:
! 1930: if ((s_copie_argument_1 = copie_objet(s_etat_processus,
! 1931: s_objet_argument_1, 'N')) == NULL)
! 1932: {
! 1933: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1934: return;
! 1935: }
! 1936:
! 1937: if ((s_copie_argument_2 = copie_objet(s_etat_processus,
! 1938: s_objet_argument_2, 'N')) == NULL)
! 1939: {
! 1940: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1941: return;
! 1942: }
! 1943:
! 1944: l_element_courant = (struct_liste_chainee *)
! 1945: (*s_copie_argument_1).objet;
! 1946: (*s_copie_argument_1).objet = (void *) (*((struct_liste_chainee *)
! 1947: (*s_copie_argument_1).objet)).suivant;
! 1948:
! 1949: liberation(s_etat_processus, (*l_element_courant).donnee);
! 1950: free(l_element_courant);
! 1951:
! 1952: l_element_courant = (struct_liste_chainee *)
! 1953: (*s_copie_argument_2).objet;
! 1954: l_element_precedent = l_element_courant;
! 1955: s_objet_resultat = s_copie_argument_2;
! 1956:
! 1957: while((*l_element_courant).suivant != NULL)
! 1958: {
! 1959: l_element_precedent = l_element_courant;
! 1960: l_element_courant = (*l_element_courant).suivant;
! 1961: }
! 1962:
! 1963: liberation(s_etat_processus, (*l_element_courant).donnee);
! 1964: free(l_element_courant);
! 1965:
! 1966: (*l_element_precedent).suivant = (struct_liste_chainee *)
! 1967: (*s_copie_argument_1).objet;
! 1968: free(s_copie_argument_1);
! 1969:
! 1970: l_element_courant = (*l_element_precedent).suivant;
! 1971: while((*l_element_courant).suivant != NULL)
! 1972: {
! 1973: l_element_precedent = l_element_courant;
! 1974: l_element_courant = (*l_element_courant).suivant;
! 1975: }
! 1976:
! 1977: if (((*l_element_precedent).suivant =
! 1978: allocation_maillon(s_etat_processus)) == NULL)
! 1979: {
! 1980: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1981: return;
! 1982: }
! 1983:
! 1984: (*(*l_element_precedent).suivant).suivant = l_element_courant;
! 1985: l_element_courant = (*l_element_precedent).suivant;
! 1986:
! 1987: if (((*l_element_courant).donnee = allocation(s_etat_processus, FCT))
! 1988: == NULL)
! 1989: {
! 1990: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1991: return;
! 1992: }
! 1993:
! 1994: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 1995: .nombre_arguments = 0;
! 1996: (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
! 1997: .donnee).objet)).fonction = instruction_ne;
! 1998:
! 1999: if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 2000: .nom_fonction = malloc(3 * sizeof(unsigned char))) == NULL)
! 2001: {
! 2002: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 2003: return;
! 2004: }
! 2005:
! 2006: strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
! 2007: .nom_fonction, "<>");
! 2008: }
! 2009:
! 2010: /*
! 2011: --------------------------------------------------------------------------------
! 2012: SAME NOT nul
! 2013: --------------------------------------------------------------------------------
! 2014: */
! 2015:
! 2016: else
! 2017: {
! 2018: if ((s_objet_resultat = allocation(s_etat_processus, INT)) == NULL)
! 2019: {
! 2020: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 2021: return;
! 2022: }
! 2023:
! 2024: (*((integer8 *) (*s_objet_resultat).objet)) = -1;
! 2025: }
! 2026:
! 2027: liberation(s_etat_processus, s_objet_argument_1);
! 2028: liberation(s_etat_processus, s_objet_argument_2);
! 2029:
! 2030: if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
! 2031: s_objet_resultat) == d_erreur)
! 2032: {
! 2033: return;
! 2034: }
! 2035:
! 2036: return;
! 2037: }
! 2038:
! 2039:
! 2040: /*
! 2041: ================================================================================
! 2042: Fonction 'next'
! 2043: ================================================================================
! 2044: Entrées :
! 2045: --------------------------------------------------------------------------------
! 2046: Sorties :
! 2047: --------------------------------------------------------------------------------
! 2048: Effets de bord : néant
! 2049: ================================================================================
! 2050: */
! 2051:
! 2052: void
! 2053: instruction_next(struct_processus *s_etat_processus)
! 2054: {
! 2055: struct_objet *s_objet;
! 2056: struct_objet *s_copie_objet;
! 2057:
! 2058: logical1 presence_compteur;
! 2059:
! 2060: (*s_etat_processus).erreur_execution = d_ex;
! 2061:
! 2062: if ((*s_etat_processus).affichage_arguments == 'Y')
! 2063: {
! 2064: printf("\n NEXT ");
! 2065:
! 2066: if ((*s_etat_processus).langue == 'F')
! 2067: {
! 2068: printf("(fin d'une boucle définie)\n\n");
! 2069: }
! 2070: else
! 2071: {
! 2072: printf("(end of defined loop)\n\n");
! 2073: }
! 2074:
! 2075: if ((*s_etat_processus).langue == 'F')
! 2076: {
! 2077: printf(" Utilisation :\n\n");
! 2078: }
! 2079: else
! 2080: {
! 2081: printf(" Usage:\n\n");
! 2082: }
! 2083:
! 2084: printf(" %s/%s %s/%s START\n", d_INT, d_REL,
! 2085: d_INT, d_REL);
! 2086: printf(" (expression)\n");
! 2087: printf(" [EXIT]/[CYCLE]\n");
! 2088: printf(" ...\n");
! 2089: printf(" NEXT\n\n");
! 2090:
! 2091: printf(" %s/%s %s/%s FOR (variable)\n", d_INT, d_REL,
! 2092: d_INT, d_REL);
! 2093: printf(" (expression)\n");
! 2094: printf(" [EXIT]/[CYCLE]\n");
! 2095: printf(" ...\n");
! 2096: printf(" NEXT\n");
! 2097:
! 2098: return;
! 2099: }
! 2100: else if ((*s_etat_processus).test_instruction == 'Y')
! 2101: {
! 2102: (*s_etat_processus).nombre_arguments = -1;
! 2103: return;
! 2104: }
! 2105:
! 2106: presence_compteur = ((*(*s_etat_processus).l_base_pile_systeme)
! 2107: .type_cloture == 'F') ? d_vrai : d_faux;
! 2108:
! 2109: if (((*(*s_etat_processus).l_base_pile_systeme).type_cloture != 'S')
! 2110: && (presence_compteur == d_faux))
! 2111: {
! 2112: (*s_etat_processus).erreur_execution = d_ex_erreur_traitement_boucle;
! 2113: return;
! 2114: }
! 2115:
! 2116: /*
! 2117: * Pour une boucle avec indice, on fait pointer
! 2118: * (*(*s_etat_processus).l_base_pile_systeme).indice_boucle sur
! 2119: * la variable correspondante. Remarque, le contenu de la variable
! 2120: * est détruit au courant de l'opération.
! 2121: */
! 2122:
! 2123: if (presence_compteur == d_vrai)
! 2124: {
! 2125: if (recherche_variable(s_etat_processus, (*(*s_etat_processus)
! 2126: .l_base_pile_systeme).nom_variable) == d_faux)
! 2127: {
! 2128: (*s_etat_processus).erreur_execution = d_ex_variable_non_definie;
! 2129: return;
! 2130: }
! 2131:
! 2132: if (((*s_etat_processus).s_liste_variables[(*s_etat_processus)
! 2133: .position_variable_courante]).variable_verrouillee == d_vrai)
! 2134: {
! 2135: (*s_etat_processus).erreur_execution = d_ex_variable_verrouillee;
! 2136: return;
! 2137: }
! 2138:
! 2139: if (((*s_etat_processus).s_liste_variables[(*s_etat_processus)
! 2140: .position_variable_courante]).objet == NULL)
! 2141: {
! 2142: (*s_etat_processus).erreur_execution = d_ex_variable_partagee;
! 2143: return;
! 2144: }
! 2145:
! 2146: (*(*s_etat_processus).l_base_pile_systeme).indice_boucle =
! 2147: ((*s_etat_processus).s_liste_variables[(*s_etat_processus)
! 2148: .position_variable_courante]).objet;
! 2149: }
! 2150:
! 2151: /*
! 2152: * Empilement pour calculer le nouvel indice. Au passage, la
! 2153: * variable (*(*s_etat_processus).l_base_pile_systeme).indice_boucle
! 2154: * est libérée.
! 2155: */
! 2156:
! 2157: if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
! 2158: (*(*s_etat_processus).l_base_pile_systeme).indice_boucle)
! 2159: == d_erreur)
! 2160: {
! 2161: return;
! 2162: }
! 2163:
! 2164: if ((s_objet = allocation(s_etat_processus, INT)) == NULL)
! 2165: {
! 2166: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 2167: return;
! 2168: }
! 2169:
! 2170: (*((integer8 *) (*s_objet).objet)) = 1;
! 2171:
! 2172: if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
! 2173: s_objet) == d_erreur)
! 2174: {
! 2175: return;
! 2176: }
! 2177:
! 2178: instruction_plus(s_etat_processus);
! 2179:
! 2180: if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
! 2181: &s_objet) == d_erreur)
! 2182: {
! 2183: liberation(s_etat_processus, s_objet);
! 2184:
! 2185: (*s_etat_processus).erreur_execution = d_ex_manque_argument;
! 2186: return;
! 2187: }
! 2188:
! 2189: if (((*s_objet).type != INT) &&
! 2190: ((*s_objet).type != REL))
! 2191: {
! 2192: liberation(s_etat_processus, s_objet);
! 2193:
! 2194: (*s_etat_processus).erreur_execution = d_ex_erreur_traitement_boucle;
! 2195: return;
! 2196: }
! 2197:
! 2198: if (presence_compteur == d_vrai)
! 2199: {
! 2200: /*
! 2201: * L'addition crée si besoin une copie de l'objet
! 2202: */
! 2203:
! 2204: (*(*s_etat_processus).l_base_pile_systeme).indice_boucle = NULL;
! 2205: ((*s_etat_processus).s_liste_variables[(*s_etat_processus)
! 2206: .position_variable_courante]).objet = s_objet;
! 2207: }
! 2208: else
! 2209: {
! 2210: (*(*s_etat_processus).l_base_pile_systeme).indice_boucle = s_objet;
! 2211: }
! 2212:
! 2213: if ((s_copie_objet = copie_objet(s_etat_processus, s_objet, 'P')) == NULL)
! 2214: {
! 2215: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 2216: return;
! 2217: }
! 2218:
! 2219: if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
! 2220: s_copie_objet) == d_erreur)
! 2221: {
! 2222: return;
! 2223: }
! 2224:
! 2225: if ((s_copie_objet = copie_objet(s_etat_processus,
! 2226: (*(*s_etat_processus).l_base_pile_systeme)
! 2227: .limite_indice_boucle, 'P')) == NULL)
! 2228: {
! 2229: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 2230: return;
! 2231: }
! 2232:
! 2233: if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
! 2234: s_copie_objet) == d_erreur)
! 2235: {
! 2236: return;
! 2237: }
! 2238:
! 2239: instruction_le(s_etat_processus);
! 2240:
! 2241: if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
! 2242: &s_objet) == d_erreur)
! 2243: {
! 2244: (*s_etat_processus).erreur_execution = d_ex_manque_argument;
! 2245: return;
! 2246: }
! 2247:
! 2248: if ((*s_objet).type != INT)
! 2249: {
! 2250: liberation(s_etat_processus, s_objet);
! 2251:
! 2252: (*s_etat_processus).erreur_execution = d_ex_erreur_traitement_boucle;
! 2253: return;
! 2254: }
! 2255:
! 2256: if ((*((integer8 *) (*s_objet).objet)) != 0)
! 2257: {
! 2258: if ((*(*s_etat_processus).l_base_pile_systeme)
! 2259: .origine_routine_evaluation == 'N')
! 2260: {
! 2261: (*s_etat_processus).position_courante = (*(*s_etat_processus)
! 2262: .l_base_pile_systeme).adresse_retour;
! 2263: }
! 2264: else
! 2265: {
! 2266: (*s_etat_processus).expression_courante = (*(*s_etat_processus)
! 2267: .l_base_pile_systeme).pointeur_objet_retour;
! 2268: }
! 2269: }
! 2270: else
! 2271: {
! 2272: depilement_pile_systeme(s_etat_processus);
! 2273:
! 2274: if ((*s_etat_processus).erreur_systeme != d_es)
! 2275: {
! 2276: return;
! 2277: }
! 2278:
! 2279: if (presence_compteur == d_vrai)
! 2280: {
! 2281: (*s_etat_processus).niveau_courant--;
! 2282:
! 2283: if (retrait_variable_par_niveau(s_etat_processus) == d_erreur)
! 2284: {
! 2285: return;
! 2286: }
! 2287: }
! 2288: }
! 2289:
! 2290: liberation(s_etat_processus, s_objet);
! 2291:
! 2292: return;
! 2293: }
! 2294:
! 2295:
! 2296: /*
! 2297: ================================================================================
! 2298: Fonction 'nrand'
! 2299: ================================================================================
! 2300: Entrées : structure processus
! 2301: -------------------------------------------------------------------------------
! 2302: Sorties :
! 2303: --------------------------------------------------------------------------------
! 2304: Effets de bord : néant
! 2305: ================================================================================
! 2306: */
! 2307:
! 2308: void
! 2309: instruction_nrand(struct_processus *s_etat_processus)
! 2310: {
! 2311: struct_objet *s_objet;
! 2312:
! 2313: (*s_etat_processus).erreur_execution = d_ex;
! 2314:
! 2315: if ((*s_etat_processus).affichage_arguments == 'Y')
! 2316: {
! 2317: printf("\n NRAND ");
! 2318:
! 2319: if ((*s_etat_processus).langue == 'F')
! 2320: {
! 2321: printf("(valeur aléatoire gaussienne)\n\n");
! 2322: }
! 2323: else
! 2324: {
! 2325: printf("(normal random number)\n\n");
! 2326: }
! 2327:
! 2328: printf("-> 1: %s\n", d_REL);
! 2329:
! 2330: return;
! 2331: }
! 2332: else if ((*s_etat_processus).test_instruction == 'Y')
! 2333: {
! 2334: (*s_etat_processus).nombre_arguments = -1;
! 2335: return;
! 2336: }
! 2337:
! 2338: if (test_cfsf(s_etat_processus, 31) == d_vrai)
! 2339: {
! 2340: if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
! 2341: {
! 2342: return;
! 2343: }
! 2344: }
! 2345:
! 2346: if ((*s_etat_processus).generateur_aleatoire == NULL)
! 2347: {
! 2348: initialisation_generateur_aleatoire(s_etat_processus, d_vrai, 0);
! 2349: }
! 2350:
! 2351: if ((s_objet = allocation(s_etat_processus, REL)) == NULL)
! 2352: {
! 2353: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 2354: return;
! 2355: }
! 2356:
! 2357: (*((real8 *) (*s_objet).objet)) = gsl_ran_gaussian_ratio_method(
! 2358: (*s_etat_processus).generateur_aleatoire, 1.0);
! 2359:
! 2360: if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
! 2361: s_objet) == d_erreur)
! 2362: {
! 2363: return;
! 2364: }
! 2365:
! 2366: return;
! 2367: }
! 2368:
! 2369: // vim: ts=4
CVSweb interface <joel.bertrand@systella.fr>