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