Annotation of rpl/src/instructions_t3.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 'trnc'
! 29: ================================================================================
! 30: Entrées : pointeur sur une structure struct_processus
! 31: --------------------------------------------------------------------------------
! 32: Sorties :
! 33: --------------------------------------------------------------------------------
! 34: Effets de bord : néant
! 35: ================================================================================
! 36: */
! 37:
! 38: void
! 39: instruction_trnc(struct_processus *s_etat_processus)
! 40: {
! 41: int parametre;
! 42:
! 43: logical1 i43;
! 44: logical1 i44;
! 45: logical1 i49;
! 46: logical1 i50;
! 47: logical1 i53;
! 48: logical1 i54;
! 49: logical1 i55;
! 50: logical1 i56;
! 51:
! 52: struct_objet *s_objet_argument_1;
! 53: struct_objet *s_objet_argument_2;
! 54: struct_objet *s_objet_parametre;
! 55:
! 56: unsigned char *instruction_courante;
! 57: unsigned char *valeur_binaire;
! 58:
! 59: unsigned long i;
! 60: unsigned long j;
! 61:
! 62: (*s_etat_processus).erreur_execution = d_ex;
! 63:
! 64: if ((*s_etat_processus).affichage_arguments == 'Y')
! 65: {
! 66: printf("\n TRNC ");
! 67:
! 68: if ((*s_etat_processus).langue == 'F')
! 69: {
! 70: printf("(troncature)\n\n");
! 71: }
! 72: else
! 73: {
! 74: printf("(truncation)\n\n");
! 75: }
! 76:
! 77: printf(" 1: %s, %s, %s, %s, %s, %s,\n"
! 78: " %s, %s, %s\n",
! 79: d_INT, d_REL, d_CPL, d_VIN, d_VRL, d_VCX, d_MIN, d_MRL, d_MCX);
! 80: printf(" 1: %s\n", d_INT);
! 81: printf("-> 1: %s, %s, %s, %s, %s, %s,\n"
! 82: " %s, %s, %s\n",
! 83: d_INT, d_REL, d_CPL, d_VIN, d_VRL, d_VCX, d_MIN, d_MRL, d_MCX);
! 84:
! 85: return;
! 86: }
! 87: else if ((*s_etat_processus).test_instruction == 'Y')
! 88: {
! 89: (*s_etat_processus).nombre_arguments = -1;
! 90: return;
! 91: }
! 92:
! 93: if (test_cfsf(s_etat_processus, 31) == d_vrai)
! 94: {
! 95: if (empilement_pile_last(s_etat_processus, 2) == d_erreur)
! 96: {
! 97: return;
! 98: }
! 99: }
! 100:
! 101: if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
! 102: &s_objet_argument_1) == d_erreur)
! 103: {
! 104: (*s_etat_processus).erreur_execution = d_ex_manque_argument;
! 105: return;
! 106: }
! 107:
! 108: if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
! 109: &s_objet_argument_2) == d_erreur)
! 110: {
! 111: liberation(s_etat_processus, s_objet_argument_1);
! 112:
! 113: (*s_etat_processus).erreur_execution = d_ex_manque_argument;
! 114: return;
! 115: }
! 116:
! 117: if (((*s_objet_argument_1).type == INT) &&
! 118: (((*s_objet_argument_2).type == INT) ||
! 119: ((*s_objet_argument_2).type == REL) ||
! 120: ((*s_objet_argument_2).type == CPL) ||
! 121: ((*s_objet_argument_2).type == VIN) ||
! 122: ((*s_objet_argument_2).type == VRL) ||
! 123: ((*s_objet_argument_2).type == VCX) ||
! 124: ((*s_objet_argument_2).type == MIN) ||
! 125: ((*s_objet_argument_2).type == MRL) ||
! 126: ((*s_objet_argument_2).type == MCX)))
! 127: {
! 128: parametre = (*((integer8 *) (*s_objet_argument_1).objet));
! 129:
! 130: if ((parametre >= -15) && (parametre <= 15))
! 131: {
! 132: if ((s_objet_parametre = allocation(s_etat_processus, BIN))
! 133: == NULL)
! 134: {
! 135: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 136: return;
! 137: }
! 138:
! 139: (*((integer8 *) (*s_objet_parametre).objet)) =
! 140: abs((*((integer8 *) (*s_objet_argument_1).objet)));
! 141:
! 142: i43 = test_cfsf(s_etat_processus, 43);
! 143: i44 = test_cfsf(s_etat_processus, 44);
! 144:
! 145: sf(s_etat_processus, 44);
! 146: cf(s_etat_processus, 43);
! 147:
! 148: if ((valeur_binaire = formateur(s_etat_processus, 0,
! 149: s_objet_parametre)) == NULL)
! 150: {
! 151: liberation(s_etat_processus, s_objet_parametre);
! 152:
! 153: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 154: return;
! 155: }
! 156:
! 157: liberation(s_etat_processus, s_objet_parametre);
! 158:
! 159: if (i43 == d_vrai)
! 160: {
! 161: sf(s_etat_processus, 43);
! 162: }
! 163: else
! 164: {
! 165: cf(s_etat_processus, 43);
! 166: }
! 167:
! 168: if (i44 == d_vrai)
! 169: {
! 170: sf(s_etat_processus, 44);
! 171: }
! 172: else
! 173: {
! 174: cf(s_etat_processus, 44);
! 175: }
! 176:
! 177: i53 = test_cfsf(s_etat_processus, 53);
! 178: i54 = test_cfsf(s_etat_processus, 54);
! 179: i55 = test_cfsf(s_etat_processus, 55);
! 180: i56 = test_cfsf(s_etat_processus, 56);
! 181:
! 182: for(j = 53, i = strlen(valeur_binaire) - 2; i >= 2; i--)
! 183: {
! 184: if (valeur_binaire[i] == '0')
! 185: {
! 186: cf(s_etat_processus, j++);
! 187: }
! 188: else
! 189: {
! 190: sf(s_etat_processus, j++);
! 191: }
! 192: }
! 193:
! 194: for(; j <= 56; cf(s_etat_processus, j++));
! 195:
! 196: free(valeur_binaire);
! 197:
! 198: i49 = test_cfsf(s_etat_processus, 49);
! 199: i50 = test_cfsf(s_etat_processus, 50);
! 200:
! 201: if (parametre >= 0)
! 202: {
! 203: // Troncature FIX
! 204: sf(s_etat_processus, 49);
! 205: cf(s_etat_processus, 50);
! 206: }
! 207: else
! 208: {
! 209: // Troncature SCI
! 210: cf(s_etat_processus, 49);
! 211: sf(s_etat_processus, 50);
! 212: }
! 213:
! 214: instruction_courante = (*s_etat_processus).instruction_courante;
! 215:
! 216: if (((*s_etat_processus).instruction_courante =
! 217: formateur(s_etat_processus, 0, s_objet_argument_2)) == NULL)
! 218: {
! 219: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 220: (*s_etat_processus).instruction_courante = instruction_courante;
! 221: return;
! 222: }
! 223:
! 224: if (i49 == d_vrai)
! 225: {
! 226: sf(s_etat_processus, 49);
! 227: }
! 228: else
! 229: {
! 230: cf(s_etat_processus, 49);
! 231: }
! 232:
! 233: if (i50 == d_vrai)
! 234: {
! 235: sf(s_etat_processus, 50);
! 236: }
! 237: else
! 238: {
! 239: cf(s_etat_processus, 50);
! 240: }
! 241:
! 242: if (i53 == d_vrai)
! 243: {
! 244: sf(s_etat_processus, 53);
! 245: }
! 246: else
! 247: {
! 248: cf(s_etat_processus, 53);
! 249: }
! 250:
! 251: if (i54 == d_vrai)
! 252: {
! 253: sf(s_etat_processus, 54);
! 254: }
! 255: else
! 256: {
! 257: cf(s_etat_processus, 54);
! 258: }
! 259:
! 260: if (i55 == d_vrai)
! 261: {
! 262: sf(s_etat_processus, 55);
! 263: }
! 264: else
! 265: {
! 266: cf(s_etat_processus, 55);
! 267: }
! 268:
! 269: if (i56 == d_vrai)
! 270: {
! 271: sf(s_etat_processus, 56);
! 272: }
! 273: else
! 274: {
! 275: cf(s_etat_processus, 56);
! 276: }
! 277:
! 278: recherche_type(s_etat_processus);
! 279:
! 280: free((*s_etat_processus).instruction_courante);
! 281: (*s_etat_processus).instruction_courante = instruction_courante;
! 282:
! 283: if ((*s_etat_processus).erreur_systeme != d_es)
! 284: {
! 285: return;
! 286: }
! 287:
! 288: if ((*s_etat_processus).erreur_execution != d_ex)
! 289: {
! 290: liberation(s_etat_processus, s_objet_argument_1);
! 291: liberation(s_etat_processus, s_objet_argument_2);
! 292: return;
! 293: }
! 294: }
! 295: else
! 296: {
! 297: liberation(s_etat_processus, s_objet_argument_1);
! 298: liberation(s_etat_processus, s_objet_argument_2);
! 299:
! 300: (*s_etat_processus).erreur_execution = d_ex_argument_invalide;
! 301: return;
! 302: }
! 303: }
! 304:
! 305: /*
! 306: --------------------------------------------------------------------------------
! 307: Fonction troncature impossible à réaliser
! 308: --------------------------------------------------------------------------------
! 309: */
! 310:
! 311: else
! 312: {
! 313: liberation(s_etat_processus, s_objet_argument_1);
! 314: liberation(s_etat_processus, s_objet_argument_2);
! 315:
! 316: (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
! 317: return;
! 318: }
! 319:
! 320: liberation(s_etat_processus, s_objet_argument_1);
! 321: liberation(s_etat_processus, s_objet_argument_2);
! 322:
! 323: return;
! 324: }
! 325:
! 326:
! 327: /*
! 328: ================================================================================
! 329: Fonction 'table->'
! 330: ================================================================================
! 331: Entrées : structure processus
! 332: --------------------------------------------------------------------------------
! 333: Sorties :
! 334: --------------------------------------------------------------------------------
! 335: Effets de bord : néant
! 336: ================================================================================
! 337: */
! 338:
! 339: void
! 340: instruction_table_fleche(struct_processus *s_etat_processus)
! 341: {
! 342: struct_objet *s_objet;
! 343: struct_objet *s_objet_resultat;
! 344:
! 345: unsigned long i;
! 346:
! 347: (*s_etat_processus).erreur_execution = d_ex;
! 348:
! 349: if ((*s_etat_processus).affichage_arguments == 'Y')
! 350: {
! 351: printf("\n TABLE-> ");
! 352:
! 353: if ((*s_etat_processus).langue == 'F')
! 354: {
! 355: printf("(expansion d'une table)\n\n");
! 356: }
! 357: else
! 358: {
! 359: printf("(expand table)\n\n");
! 360: }
! 361:
! 362: printf(" 1: %s\n", d_TAB);
! 363: printf("-> n: %s, %s, %s, %s, %s, %s,\n"
! 364: " %s, %s, %s, %s, %s,\n"
! 365: " %s, %s, %s, %s, %s,\n"
! 366: " %s, %s\n",
! 367: d_INT, d_REL, d_CPL, d_VIN, d_VRL, d_VCX, d_MIN, d_MRL, d_MCX,
! 368: d_TAB, d_BIN, d_NOM, d_CHN, d_LST, d_ALG, d_RPN, d_FCH, d_SLB);
! 369: printf(" ...\n");
! 370: printf(" 2: %s, %s, %s, %s, %s, %s,\n"
! 371: " %s, %s, %s, %s, %s,\n"
! 372: " %s, %s, %s, %s, %s,\n"
! 373: " %s, %s\n",
! 374: d_INT, d_REL, d_CPL, d_VIN, d_VRL, d_VCX, d_MIN, d_MRL, d_MCX,
! 375: d_TAB, d_BIN, d_NOM, d_CHN, d_LST, d_ALG, d_RPN, d_FCH, d_SLB);
! 376: printf(" 1: %s\n", d_INT);
! 377:
! 378: return;
! 379: }
! 380: else if ((*s_etat_processus).test_instruction == 'Y')
! 381: {
! 382: (*s_etat_processus).nombre_arguments = -1;
! 383: return;
! 384: }
! 385:
! 386: if (test_cfsf(s_etat_processus, 31) == d_vrai)
! 387: {
! 388: if (empilement_pile_last(s_etat_processus, 1) == d_erreur)
! 389: {
! 390: return;
! 391: }
! 392: }
! 393:
! 394: if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
! 395: &s_objet) == d_erreur)
! 396: {
! 397: return;
! 398: }
! 399:
! 400: if ((*s_objet).type != TBL)
! 401: {
! 402: liberation(s_etat_processus, s_objet);
! 403:
! 404: (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
! 405: return;
! 406: }
! 407:
! 408: for(i = 0; i < (*((struct_tableau *) (*s_objet).objet))
! 409: .nombre_elements; i++)
! 410: {
! 411: if (((*((struct_tableau *) (*s_objet).objet)).elements[i] =
! 412: copie_objet(s_etat_processus, (*((struct_tableau *)
! 413: (*s_objet).objet)).elements[i], 'P')) == NULL)
! 414: {
! 415: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 416: return;
! 417: }
! 418:
! 419: if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
! 420: (*((struct_tableau *) (*s_objet).objet)).elements[i])
! 421: == d_erreur)
! 422: {
! 423: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 424: return;
! 425: }
! 426: }
! 427:
! 428: if ((s_objet_resultat = allocation(s_etat_processus, INT)) == NULL)
! 429: {
! 430: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 431: return;
! 432: }
! 433:
! 434: (*((integer8 *) ((*s_objet_resultat).objet))) = (integer8)
! 435: (*((struct_tableau *) (*s_objet).objet)).nombre_elements;
! 436:
! 437: liberation(s_etat_processus, s_objet);
! 438:
! 439: if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
! 440: s_objet_resultat) == d_erreur)
! 441: {
! 442: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 443: return;
! 444: }
! 445:
! 446: return;
! 447: }
! 448:
! 449:
! 450: /*
! 451: ================================================================================
! 452: Fonction 'trim'
! 453: ================================================================================
! 454: Entrées : pointeur sur une structure struct_processus
! 455: --------------------------------------------------------------------------------
! 456: Sorties :
! 457: --------------------------------------------------------------------------------
! 458: Effets de bord : néant
! 459: ================================================================================
! 460: */
! 461:
! 462: void
! 463: instruction_trim(struct_processus *s_etat_processus)
! 464: {
! 465: struct_objet *s_objet_argument;
! 466: struct_objet *s_objet_resultat;
! 467:
! 468: unsigned char *debut;
! 469: unsigned char *fin;
! 470:
! 471: (*s_etat_processus).erreur_execution = d_ex;
! 472:
! 473: if ((*s_etat_processus).affichage_arguments == 'Y')
! 474: {
! 475: printf("\n TRIM ");
! 476:
! 477: if ((*s_etat_processus).langue == 'F')
! 478: {
! 479: printf("(suppression des espaces initiaux et finaux d'une "
! 480: "chaîne)\n\n");
! 481: }
! 482: else
! 483: {
! 484: printf("(delete initial and final spaces from string)\n\n");
! 485: }
! 486:
! 487: printf(" 1: %s\n", d_CHN);
! 488: printf("-> 1: %s\n", d_CHN);
! 489:
! 490: return;
! 491: }
! 492: else if ((*s_etat_processus).test_instruction == 'Y')
! 493: {
! 494: (*s_etat_processus).nombre_arguments = -1;
! 495: return;
! 496: }
! 497:
! 498: if (test_cfsf(s_etat_processus, 31) == d_vrai)
! 499: {
! 500: if (empilement_pile_last(s_etat_processus, 1) == d_erreur)
! 501: {
! 502: return;
! 503: }
! 504: }
! 505:
! 506: if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
! 507: &s_objet_argument) == d_erreur)
! 508: {
! 509: (*s_etat_processus).erreur_execution = d_ex_manque_argument;
! 510: return;
! 511: }
! 512:
! 513: if ((*s_objet_argument).type == CHN)
! 514: {
! 515: debut = (unsigned char *) (*s_objet_argument).objet;
! 516:
! 517: while(((*debut) != d_code_fin_chaine) && ((*debut) == d_code_espace))
! 518: {
! 519: debut++;
! 520: }
! 521:
! 522: fin = &(((unsigned char *) (*s_objet_argument).objet)
! 523: [strlen((unsigned char *) (*s_objet_argument).objet) - 1]);
! 524:
! 525: while((fin > debut) && ((*fin) == d_code_espace))
! 526: {
! 527: fin--;
! 528: }
! 529:
! 530: (*(++fin)) = d_code_fin_chaine;
! 531:
! 532: if ((s_objet_resultat = allocation(s_etat_processus, CHN)) == NULL)
! 533: {
! 534: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 535: return;
! 536: }
! 537:
! 538: if (((*s_objet_resultat).objet = malloc((1 + fin - debut)
! 539: * sizeof(unsigned char))) == NULL)
! 540: {
! 541: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 542: return;
! 543: }
! 544:
! 545: strcpy((unsigned char *) (*s_objet_resultat).objet, debut);
! 546: }
! 547:
! 548: /*
! 549: --------------------------------------------------------------------------------
! 550: Fonction TRIM impossible à réaliser
! 551: --------------------------------------------------------------------------------
! 552: */
! 553:
! 554: else
! 555: {
! 556: liberation(s_etat_processus, s_objet_argument);
! 557:
! 558: (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
! 559: return;
! 560: }
! 561:
! 562: if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
! 563: s_objet_resultat) == d_erreur)
! 564: {
! 565: return;
! 566: }
! 567:
! 568: liberation(s_etat_processus, s_objet_argument);
! 569:
! 570: return;
! 571: }
! 572:
! 573:
! 574: /*
! 575: ================================================================================
! 576: Fonction 'tokenize'
! 577: ================================================================================
! 578: Entrées : pointeur sur une structure struct_processus
! 579: --------------------------------------------------------------------------------
! 580: Sorties :
! 581: --------------------------------------------------------------------------------
! 582: Effets de bord : néant
! 583: ================================================================================
! 584: */
! 585:
! 586: void
! 587: instruction_tokenize(struct_processus *s_etat_processus)
! 588: {
! 589: struct_objet *s_objet_argument;
! 590: struct_objet *s_objet_resultat;
! 591:
! 592: struct_liste_chainee *l_element_courant;
! 593:
! 594: unsigned char *registre_instruction_courante;
! 595: unsigned char *registre_definitions_chainees;
! 596:
! 597: unsigned long registre_longueur_definitions_chainees;
! 598: unsigned long registre_position_courante;
! 599:
! 600: (*s_etat_processus).erreur_execution = d_ex;
! 601:
! 602: if ((*s_etat_processus).affichage_arguments == 'Y')
! 603: {
! 604: printf("\n TOKENIZE ");
! 605:
! 606: if ((*s_etat_processus).langue == 'F')
! 607: {
! 608: printf("(extraction d'objets en sous-chaînes)\n\n");
! 609: }
! 610: else
! 611: {
! 612: printf("(extract objects in substrings)\n\n");
! 613: }
! 614:
! 615: printf(" 1: %s\n", d_CHN);
! 616: printf("-> 1: %s\n", d_LST);
! 617:
! 618: return;
! 619: }
! 620: else if ((*s_etat_processus).test_instruction == 'Y')
! 621: {
! 622: (*s_etat_processus).nombre_arguments = -1;
! 623: return;
! 624: }
! 625:
! 626: if (test_cfsf(s_etat_processus, 31) == d_vrai)
! 627: {
! 628: if (empilement_pile_last(s_etat_processus, 1) == d_erreur)
! 629: {
! 630: return;
! 631: }
! 632: }
! 633:
! 634: if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
! 635: &s_objet_argument) == d_erreur)
! 636: {
! 637: (*s_etat_processus).erreur_execution = d_ex_manque_argument;
! 638: return;
! 639: }
! 640:
! 641: if ((*s_objet_argument).type == CHN)
! 642: {
! 643: if ((s_objet_resultat = allocation(s_etat_processus, LST)) == NULL)
! 644: {
! 645: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 646: return;
! 647: }
! 648:
! 649: registre_instruction_courante = (*s_etat_processus)
! 650: .instruction_courante;
! 651: registre_definitions_chainees = (*s_etat_processus)
! 652: .definitions_chainees;
! 653: registre_longueur_definitions_chainees = (*s_etat_processus)
! 654: .longueur_definitions_chainees;
! 655: registre_position_courante = (*s_etat_processus).position_courante;
! 656:
! 657: (*s_etat_processus).definitions_chainees = (unsigned char *)
! 658: (*s_objet_argument).objet;
! 659: (*s_etat_processus).longueur_definitions_chainees =
! 660: strlen((*s_etat_processus).definitions_chainees);
! 661: (*s_etat_processus).position_courante = 0;
! 662:
! 663: l_element_courant = NULL;
! 664:
! 665: while((*s_etat_processus).position_courante
! 666: < (*s_etat_processus).longueur_definitions_chainees)
! 667: {
! 668: if (recherche_instruction_suivante(s_etat_processus) == d_erreur)
! 669: {
! 670: free((*s_etat_processus).instruction_courante);
! 671:
! 672: (*s_etat_processus).instruction_courante =
! 673: registre_instruction_courante;
! 674: (*s_etat_processus).definitions_chainees =
! 675: registre_definitions_chainees;
! 676: (*s_etat_processus).longueur_definitions_chainees =
! 677: registre_longueur_definitions_chainees;
! 678: (*s_etat_processus).position_courante =
! 679: registre_position_courante;
! 680:
! 681: liberation(s_etat_processus, s_objet_argument);
! 682: liberation(s_etat_processus, s_objet_resultat);
! 683:
! 684: return;
! 685: }
! 686:
! 687: if ((*s_etat_processus).instruction_courante[0] !=
! 688: d_code_fin_chaine)
! 689: {
! 690: if (l_element_courant == NULL)
! 691: {
! 692: if (((*s_objet_resultat).objet =
! 693: allocation_maillon(s_etat_processus)) == NULL)
! 694: {
! 695: (*s_etat_processus).erreur_systeme =
! 696: d_es_allocation_memoire;
! 697: return;
! 698: }
! 699:
! 700: l_element_courant = (*s_objet_resultat).objet;
! 701: }
! 702: else
! 703: {
! 704: if (((*l_element_courant).suivant =
! 705: allocation_maillon(s_etat_processus)) == NULL)
! 706: {
! 707: (*s_etat_processus).erreur_systeme =
! 708: d_es_allocation_memoire;
! 709: return;
! 710: }
! 711:
! 712: l_element_courant = (*l_element_courant).suivant;
! 713: }
! 714:
! 715: if (((*l_element_courant).donnee = allocation(s_etat_processus,
! 716: CHN)) == NULL)
! 717: {
! 718: (*s_etat_processus).erreur_systeme =
! 719: d_es_allocation_memoire;
! 720: return;
! 721: }
! 722:
! 723: (*(*l_element_courant).donnee).objet = (*s_etat_processus)
! 724: .instruction_courante;
! 725: (*l_element_courant).suivant = NULL;
! 726: }
! 727: else
! 728: {
! 729: free((*s_etat_processus).instruction_courante);
! 730: }
! 731: }
! 732:
! 733: (*s_etat_processus).instruction_courante =
! 734: registre_instruction_courante;
! 735: (*s_etat_processus).definitions_chainees =
! 736: registre_definitions_chainees;
! 737: (*s_etat_processus).longueur_definitions_chainees =
! 738: registre_longueur_definitions_chainees;
! 739: (*s_etat_processus).position_courante = registre_position_courante;
! 740: }
! 741:
! 742: /*
! 743: --------------------------------------------------------------------------------
! 744: Fonction TOKENIZE impossible à réaliser
! 745: --------------------------------------------------------------------------------
! 746: */
! 747:
! 748: else
! 749: {
! 750: liberation(s_etat_processus, s_objet_argument);
! 751:
! 752: (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
! 753: return;
! 754: }
! 755:
! 756: if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
! 757: s_objet_resultat) == d_erreur)
! 758: {
! 759: return;
! 760: }
! 761:
! 762: liberation(s_etat_processus, s_objet_argument);
! 763:
! 764: return;
! 765: }
! 766:
! 767: // vim: ts=4
CVSweb interface <joel.bertrand@systella.fr>