Annotation of rpl/src/instructions_v1.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 'var'
! 29: ================================================================================
! 30: Entrées :
! 31: --------------------------------------------------------------------------------
! 32: Sorties :
! 33: --------------------------------------------------------------------------------
! 34: Effets de bord : néant
! 35: ================================================================================
! 36: */
! 37:
! 38: void
! 39: instruction_var(struct_processus *s_etat_processus)
! 40: {
! 41: logical1 presence_variable;
! 42:
! 43: long i;
! 44:
! 45: struct_objet *s_objet_statistique;
! 46: struct_objet *s_objet_resultat;
! 47: struct_objet *s_objet_temporaire;
! 48:
! 49: unsigned long nombre_colonnes;
! 50:
! 51: (*s_etat_processus).erreur_execution = d_ex;
! 52:
! 53: if ((*s_etat_processus).affichage_arguments == 'Y')
! 54: {
! 55: printf("\n VAR ");
! 56:
! 57: if ((*s_etat_processus).langue == 'F')
! 58: {
! 59: printf("(variance)\n\n");
! 60: }
! 61: else
! 62: {
! 63: printf("(variance)\n\n");
! 64: }
! 65:
! 66: printf("-> 1: %s, %s, %s, %s\n", d_INT, d_REL, d_VIN, d_VRL);
! 67:
! 68: return;
! 69: }
! 70: else if ((*s_etat_processus).test_instruction == 'Y')
! 71: {
! 72: (*s_etat_processus).nombre_arguments = -1;
! 73: return;
! 74: }
! 75:
! 76: if (test_cfsf(s_etat_processus, 31) == d_vrai)
! 77: {
! 78: if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
! 79: {
! 80: return;
! 81: }
! 82: }
! 83:
! 84: /*
! 85: * Recherche d'une variable globale référencée par SIGMA
! 86: */
! 87:
! 88: if (recherche_variable(s_etat_processus, ds_sdat) == d_faux)
! 89: {
! 90: /*
! 91: * Aucune variable SIGMA
! 92: */
! 93:
! 94: (*s_etat_processus).erreur_systeme = d_es;
! 95: (*s_etat_processus).erreur_execution = d_ex_absence_observations;
! 96: return;
! 97: }
! 98: else
! 99: {
! 100: /*
! 101: * Il existe une variable locale SIGMA. Reste à vérifier l'existence
! 102: * d'une variable SIGMA globale...
! 103: */
! 104:
! 105: i = (*s_etat_processus).position_variable_courante;
! 106: presence_variable = d_faux;
! 107:
! 108: while(i >= 0)
! 109: {
! 110: if ((strcmp((*s_etat_processus).s_liste_variables[i].nom,
! 111: ds_sdat) == 0) && ((*s_etat_processus)
! 112: .s_liste_variables[i].niveau == 1))
! 113: {
! 114: presence_variable = d_vrai;
! 115: break;
! 116: }
! 117:
! 118: i--;
! 119: }
! 120:
! 121: if (presence_variable == d_faux)
! 122: {
! 123: (*s_etat_processus).erreur_execution = d_ex_absence_observations;
! 124: return;
! 125: }
! 126: else
! 127: {
! 128: (*s_etat_processus).position_variable_courante = i;
! 129:
! 130: if ((*s_etat_processus).s_liste_variables[i].objet == NULL)
! 131: {
! 132: (*s_etat_processus).erreur_execution = d_ex_variable_partagee;
! 133: return;
! 134: }
! 135:
! 136: if (((*((*s_etat_processus).s_liste_variables
! 137: [(*s_etat_processus).position_variable_courante].objet))
! 138: .type != MIN) && ((*((*s_etat_processus)
! 139: .s_liste_variables[(*s_etat_processus)
! 140: .position_variable_courante].objet)).type != MRL))
! 141: {
! 142: (*s_etat_processus).erreur_execution =
! 143: d_ex_matrice_statistique_invalide;
! 144: return;
! 145: }
! 146:
! 147: nombre_colonnes = (*((struct_matrice *) (*((*s_etat_processus)
! 148: .s_liste_variables[(*s_etat_processus)
! 149: .position_variable_courante].objet)).objet))
! 150: .nombre_colonnes;
! 151: }
! 152: }
! 153:
! 154: s_objet_statistique = ((*s_etat_processus).s_liste_variables
! 155: [(*s_etat_processus).position_variable_courante]).objet;
! 156:
! 157: if (((*s_objet_statistique).type == MIN) ||
! 158: ((*s_objet_statistique).type == MRL))
! 159: {
! 160: if ((*((struct_matrice *) (*s_objet_statistique).objet)).nombre_lignes
! 161: <= 1)
! 162: {
! 163: (*s_etat_processus).erreur_execution =
! 164: d_ex_statistiques_echantillon;
! 165: return;
! 166: }
! 167:
! 168: if ((s_objet_resultat = allocation(s_etat_processus, NON)) == NULL)
! 169: {
! 170: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 171: return;
! 172: }
! 173:
! 174: if (((*s_objet_resultat).objet = variance_statistique((struct_matrice *)
! 175: (*s_objet_statistique).objet, 'E')) == NULL)
! 176: {
! 177: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 178: return;
! 179: }
! 180:
! 181: if (nombre_colonnes == 1)
! 182: {
! 183: if ((*((struct_vecteur *) (*s_objet_resultat).objet)).type == 'I')
! 184: {
! 185: (*s_objet_resultat).type = VIN;
! 186: s_objet_temporaire = s_objet_resultat;
! 187:
! 188: if ((s_objet_resultat = allocation(s_etat_processus, INT))
! 189: == NULL)
! 190: {
! 191: (*s_etat_processus).erreur_systeme =
! 192: d_es_allocation_memoire;
! 193: return;
! 194: }
! 195:
! 196: (*((integer8 *) (*s_objet_resultat).objet)) =
! 197: ((integer8 *) (*((struct_vecteur *)
! 198: (*s_objet_temporaire).objet)).tableau)[0];
! 199:
! 200: liberation(s_etat_processus, s_objet_temporaire);
! 201: }
! 202: else
! 203: {
! 204: (*s_objet_resultat).type = VRL;
! 205: s_objet_temporaire = s_objet_resultat;
! 206:
! 207: if ((s_objet_resultat = allocation(s_etat_processus, REL))
! 208: == NULL)
! 209: {
! 210: (*s_etat_processus).erreur_systeme =
! 211: d_es_allocation_memoire;
! 212: return;
! 213: }
! 214:
! 215: (*((real8 *) (*s_objet_resultat).objet)) =
! 216: ((real8 *) (*((struct_vecteur *)
! 217: (*s_objet_temporaire).objet)).tableau)[0];
! 218:
! 219: liberation(s_etat_processus, s_objet_temporaire);
! 220: }
! 221: }
! 222: else
! 223: {
! 224: if ((*((struct_vecteur *) (*s_objet_resultat).objet)).type == 'I')
! 225: {
! 226: (*s_objet_resultat).type = VIN;
! 227: }
! 228: else
! 229: {
! 230: (*s_objet_resultat).type = VRL;
! 231: }
! 232: }
! 233:
! 234: if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
! 235: s_objet_resultat) == d_erreur)
! 236: {
! 237: return;
! 238: }
! 239: }
! 240: else
! 241: {
! 242: (*s_etat_processus).erreur_execution =
! 243: d_ex_matrice_statistique_invalide;
! 244: return;
! 245: }
! 246:
! 247: return;
! 248: }
! 249:
! 250:
! 251: /*
! 252: ================================================================================
! 253: Fonction 'version'
! 254: ================================================================================
! 255: Entrées :
! 256: --------------------------------------------------------------------------------
! 257: Sorties :
! 258: --------------------------------------------------------------------------------
! 259: Effets de bord : néant
! 260: ================================================================================
! 261: */
! 262:
! 263: void
! 264: instruction_version(struct_processus *s_etat_processus)
! 265: {
! 266: int nombre_champs;
! 267:
! 268: integer8 i1;
! 269: integer8 i2;
! 270: integer8 i3;
! 271: integer8 i4;
! 272:
! 273: struct_liste_chainee *l_element_courant;
! 274: struct_liste_chainee *l_element_interne_courant;
! 275:
! 276: struct_objet *s_objet_resultat;
! 277:
! 278: unsigned char texte[] = "RPL/2 version ";
! 279:
! 280: (*s_etat_processus).erreur_execution = d_ex;
! 281:
! 282: if ((*s_etat_processus).affichage_arguments == 'Y')
! 283: {
! 284: printf("\n VERSION ");
! 285:
! 286: if ((*s_etat_processus).langue == 'F')
! 287: {
! 288: printf("(version du séquenceur)\n\n");
! 289: }
! 290: else
! 291: {
! 292: printf("(sequencer version)\n\n");
! 293: }
! 294:
! 295: printf("-> 1: %s\n", d_LST);
! 296:
! 297: return;
! 298: }
! 299: else if ((*s_etat_processus).test_instruction == 'Y')
! 300: {
! 301: (*s_etat_processus).nombre_arguments = -1;
! 302: return;
! 303: }
! 304:
! 305: if (test_cfsf(s_etat_processus, 31) == d_vrai)
! 306: {
! 307: if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
! 308: {
! 309: return;
! 310: }
! 311: }
! 312:
! 313: if ((s_objet_resultat = allocation(s_etat_processus, LST)) == NULL)
! 314: {
! 315: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 316: return;
! 317: }
! 318:
! 319: if (((*s_objet_resultat).objet = allocation_maillon(s_etat_processus))
! 320: == NULL)
! 321: {
! 322: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 323: return;
! 324: }
! 325:
! 326: l_element_courant = (struct_liste_chainee *) (*s_objet_resultat).objet;
! 327: (*l_element_courant).suivant = NULL;
! 328:
! 329: if (((*l_element_courant).donnee = allocation(s_etat_processus, CHN))
! 330: == NULL)
! 331: {
! 332: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 333: return;
! 334: }
! 335:
! 336: if (((*(*l_element_courant).donnee).objet = malloc((strlen(texte)
! 337: + strlen(d_version_rpl) + 1) * sizeof(unsigned char))) == NULL)
! 338: {
! 339: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 340: return;
! 341: }
! 342:
! 343: sprintf((unsigned char *) (*(*l_element_courant).donnee).objet, "%s%s",
! 344: texte, d_version_rpl);
! 345:
! 346: /*
! 347: * Ajout des versions X.Y.Z sous forme d'entiers
! 348: */
! 349:
! 350: i1 = 0;
! 351: i2 = 0;
! 352: i3 = 0;
! 353: i4 = 0;
! 354:
! 355: nombre_champs = sscanf(d_version_rpl, "%lld.%lld.%lld.prerelease.%lld",
! 356: &i1, &i2, &i3, &i4);
! 357:
! 358: if (((*l_element_courant).suivant =
! 359: allocation_maillon(s_etat_processus)) == NULL)
! 360: {
! 361: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 362: return;
! 363: }
! 364:
! 365: l_element_courant = (*l_element_courant).suivant;
! 366: (*l_element_courant).suivant = NULL;
! 367:
! 368: if (((*l_element_courant).donnee = allocation(s_etat_processus, LST))
! 369: == NULL)
! 370: {
! 371: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 372: return;
! 373: }
! 374:
! 375: if (((*(*l_element_courant).donnee).objet =
! 376: allocation_maillon(s_etat_processus)) == NULL)
! 377: {
! 378: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 379: return;
! 380: }
! 381:
! 382: l_element_interne_courant = (struct_liste_chainee *)
! 383: (*(*l_element_courant).donnee).objet;
! 384:
! 385: (*l_element_interne_courant).suivant = NULL;
! 386:
! 387: if (((*l_element_interne_courant).donnee =
! 388: allocation(s_etat_processus, INT)) == NULL)
! 389: {
! 390: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 391: return;
! 392: }
! 393:
! 394: (*((integer8 *) (*(*l_element_interne_courant).donnee).objet)) = i1;
! 395:
! 396: if (((*l_element_interne_courant).suivant =
! 397: allocation_maillon(s_etat_processus)) == NULL)
! 398: {
! 399: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 400: return;
! 401: }
! 402:
! 403: l_element_interne_courant = (*l_element_interne_courant).suivant;
! 404: (*l_element_interne_courant).suivant = NULL;
! 405:
! 406: if (((*l_element_interne_courant).donnee =
! 407: allocation(s_etat_processus, INT)) == NULL)
! 408: {
! 409: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 410: return;
! 411: }
! 412:
! 413: (*((integer8 *) (*(*l_element_interne_courant).donnee).objet)) = i2;
! 414:
! 415: if (((*l_element_interne_courant).suivant =
! 416: allocation_maillon(s_etat_processus)) == NULL)
! 417: {
! 418: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 419: return;
! 420: }
! 421:
! 422: l_element_interne_courant = (*l_element_interne_courant).suivant;
! 423: (*l_element_interne_courant).suivant = NULL;
! 424:
! 425: if (((*l_element_interne_courant).donnee =
! 426: allocation(s_etat_processus, INT)) == NULL)
! 427: {
! 428: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 429: return;
! 430: }
! 431:
! 432: (*((integer8 *) (*(*l_element_interne_courant).donnee).objet)) = i3;
! 433:
! 434: /*
! 435: * Ajout de "PRERELEASE" suivi d'un entier ou de "RELEASE"
! 436: */
! 437:
! 438: if (nombre_champs == 3)
! 439: {
! 440: // Version "RELEASE"
! 441:
! 442: if (((*l_element_interne_courant).suivant =
! 443: allocation_maillon(s_etat_processus)) == NULL)
! 444: {
! 445: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 446: return;
! 447: }
! 448:
! 449: l_element_interne_courant = (*l_element_interne_courant).suivant;
! 450: (*l_element_interne_courant).suivant = NULL;
! 451:
! 452: if (((*l_element_interne_courant).donnee =
! 453: allocation(s_etat_processus, CHN)) == NULL)
! 454: {
! 455: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 456: return;
! 457: }
! 458:
! 459: if (((*(*l_element_interne_courant).donnee).objet = malloc(8 *
! 460: sizeof(unsigned char))) == NULL)
! 461: {
! 462: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 463: return;
! 464: }
! 465:
! 466: strcpy((unsigned char *) (*(*l_element_interne_courant).donnee).objet,
! 467: "RELEASE");
! 468: }
! 469: else
! 470: {
! 471: // Version "PRERELEASE"
! 472:
! 473: if (((*l_element_interne_courant).suivant =
! 474: allocation_maillon(s_etat_processus)) == NULL)
! 475: {
! 476: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 477: return;
! 478: }
! 479:
! 480: l_element_interne_courant = (*l_element_interne_courant).suivant;
! 481: (*l_element_interne_courant).suivant = NULL;
! 482:
! 483: if (((*l_element_interne_courant).donnee =
! 484: allocation(s_etat_processus, CHN)) == NULL)
! 485: {
! 486: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 487: return;
! 488: }
! 489:
! 490: if (((*(*l_element_interne_courant).donnee).objet = malloc(11 *
! 491: sizeof(unsigned char))) == NULL)
! 492: {
! 493: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 494: return;
! 495: }
! 496:
! 497: strcpy((unsigned char *) (*(*l_element_interne_courant).donnee).objet,
! 498: "PRERELEASE");
! 499:
! 500: if (((*l_element_interne_courant).suivant =
! 501: allocation_maillon(s_etat_processus)) == NULL)
! 502: {
! 503: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 504: return;
! 505: }
! 506:
! 507: l_element_interne_courant = (*l_element_interne_courant).suivant;
! 508: (*l_element_interne_courant).suivant = NULL;
! 509:
! 510: if (((*l_element_interne_courant).donnee =
! 511: allocation(s_etat_processus, INT)) == NULL)
! 512: {
! 513: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 514: return;
! 515: }
! 516:
! 517: (*((integer8 *) (*(*l_element_interne_courant).donnee).objet)) = i4;
! 518: }
! 519:
! 520: /*
! 521: * Ajout de la date de compilation
! 522: */
! 523:
! 524: if (((*l_element_courant).suivant =
! 525: allocation_maillon(s_etat_processus)) == NULL)
! 526: {
! 527: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 528: return;
! 529: }
! 530:
! 531: l_element_courant = (*l_element_courant).suivant;
! 532: (*l_element_courant).suivant = NULL;
! 533:
! 534: if (((*l_element_courant).donnee = allocation(s_etat_processus, CHN))
! 535: == NULL)
! 536: {
! 537: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 538: return;
! 539: }
! 540:
! 541: if (((*(*l_element_courant).donnee).objet = malloc((strlen(d_date_en_rpl)
! 542: + 1) * sizeof(unsigned char))) == NULL)
! 543: {
! 544: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 545: return;
! 546: }
! 547:
! 548: strcpy((unsigned char *) (*(*l_element_courant).donnee).objet,
! 549: d_date_en_rpl);
! 550:
! 551: /*
! 552: * Ajout des options de compilation
! 553: */
! 554:
! 555: if (((*l_element_courant).suivant =
! 556: allocation_maillon(s_etat_processus)) == NULL)
! 557: {
! 558: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 559: return;
! 560: }
! 561:
! 562: l_element_courant = (*l_element_courant).suivant;
! 563: (*l_element_courant).suivant = NULL;
! 564:
! 565: if (((*l_element_courant).donnee = allocation(s_etat_processus, CHN))
! 566: == NULL)
! 567: {
! 568: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 569: return;
! 570: }
! 571:
! 572: if (((*(*l_element_courant).donnee).objet = malloc((strlen(d_exec_path)
! 573: + 1) * sizeof(unsigned char))) == NULL)
! 574: {
! 575: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 576: return;
! 577: }
! 578:
! 579: strcpy((unsigned char *) (*(*l_element_courant).donnee).objet,
! 580: d_exec_path);
! 581:
! 582: if (((*l_element_courant).suivant =
! 583: allocation_maillon(s_etat_processus)) == NULL)
! 584: {
! 585: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 586: return;
! 587: }
! 588:
! 589: l_element_courant = (*l_element_courant).suivant;
! 590: (*l_element_courant).suivant = NULL;
! 591:
! 592: if (((*l_element_courant).donnee = allocation(s_etat_processus, CHN))
! 593: == NULL)
! 594: {
! 595: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 596: return;
! 597: }
! 598:
! 599: #ifdef GNUPLOT_SUPPORT
! 600: if (((*(*l_element_courant).donnee).objet = malloc(8 *
! 601: sizeof(unsigned char))) == NULL)
! 602: {
! 603: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 604: return;
! 605: }
! 606:
! 607: strcpy((unsigned char *) (*(*l_element_courant).donnee).objet,
! 608: "GNUPLOT");
! 609: #else
! 610: if (((*(*l_element_courant).donnee).objet = malloc(17 *
! 611: sizeof(unsigned char))) == NULL)
! 612: {
! 613: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 614: return;
! 615: }
! 616:
! 617: strcpy((unsigned char *) (*(*l_element_courant).donnee).objet,
! 618: "GNUPLOT DISABLED");
! 619: #endif
! 620:
! 621: if (((*l_element_courant).suivant =
! 622: allocation_maillon(s_etat_processus)) == NULL)
! 623: {
! 624: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 625: return;
! 626: }
! 627:
! 628: l_element_courant = (*l_element_courant).suivant;
! 629: (*l_element_courant).suivant = NULL;
! 630:
! 631: if (((*l_element_courant).donnee = allocation(s_etat_processus, CHN))
! 632: == NULL)
! 633: {
! 634: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 635: return;
! 636: }
! 637:
! 638: #ifdef FORCE_GNUPLOT_PATH
! 639: if (((*(*l_element_courant).donnee).objet = malloc(19 *
! 640: sizeof(unsigned char))) == NULL)
! 641: {
! 642: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 643: return;
! 644: }
! 645:
! 646: strcpy((unsigned char *) (*(*l_element_courant).donnee).objet,
! 647: "FORCE GNUPLOT PATH");
! 648: #else
! 649: if (((*(*l_element_courant).donnee).objet = malloc(21 *
! 650: sizeof(unsigned char))) == NULL)
! 651: {
! 652: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 653: return;
! 654: }
! 655:
! 656: strcpy((unsigned char *) (*(*l_element_courant).donnee).objet,
! 657: "DEFAULT GNUPLOT PATH");
! 658: #endif
! 659:
! 660: if (((*l_element_courant).suivant =
! 661: allocation_maillon(s_etat_processus)) == NULL)
! 662: {
! 663: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 664: return;
! 665: }
! 666:
! 667: l_element_courant = (*l_element_courant).suivant;
! 668: (*l_element_courant).suivant = NULL;
! 669:
! 670: if (((*l_element_courant).donnee = allocation(s_etat_processus, CHN))
! 671: == NULL)
! 672: {
! 673: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 674: return;
! 675: }
! 676:
! 677: #ifdef POSTSCRIPT_SUPPORT
! 678: if (((*(*l_element_courant).donnee).objet = malloc(11 *
! 679: sizeof(unsigned char))) == NULL)
! 680: {
! 681: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 682: return;
! 683: }
! 684:
! 685: strcpy((unsigned char *) (*(*l_element_courant).donnee).objet,
! 686: "POSTSCRIPT");
! 687: #else
! 688: if (((*(*l_element_courant).donnee).objet = malloc(20 *
! 689: sizeof(unsigned char))) == NULL)
! 690: {
! 691: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 692: return;
! 693: }
! 694:
! 695: strcpy((unsigned char *) (*(*l_element_courant).donnee).objet,
! 696: "POSTSCRIPT DISABLED");
! 697: #endif
! 698:
! 699: if (((*l_element_courant).suivant =
! 700: allocation_maillon(s_etat_processus)) == NULL)
! 701: {
! 702: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 703: return;
! 704: }
! 705:
! 706: l_element_courant = (*l_element_courant).suivant;
! 707: (*l_element_courant).suivant = NULL;
! 708:
! 709: if (((*l_element_courant).donnee = allocation(s_etat_processus, CHN))
! 710: == NULL)
! 711: {
! 712: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 713: return;
! 714: }
! 715:
! 716: #ifdef VIM_SUPPORT
! 717: if (((*(*l_element_courant).donnee).objet = malloc(4 *
! 718: sizeof(unsigned char))) == NULL)
! 719: {
! 720: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 721: return;
! 722: }
! 723:
! 724: strcpy((unsigned char *) (*(*l_element_courant).donnee).objet,
! 725: "VIM");
! 726: #else
! 727: if (((*(*l_element_courant).donnee).objet = malloc(13 *
! 728: sizeof(unsigned char))) == NULL)
! 729: {
! 730: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 731: return;
! 732: }
! 733:
! 734: strcpy((unsigned char *) (*(*l_element_courant).donnee).objet,
! 735: "VIM DISABLED");
! 736: #endif
! 737:
! 738: if (((*l_element_courant).suivant =
! 739: allocation_maillon(s_etat_processus)) == NULL)
! 740: {
! 741: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 742: return;
! 743: }
! 744:
! 745: l_element_courant = (*l_element_courant).suivant;
! 746: (*l_element_courant).suivant = NULL;
! 747:
! 748: if (((*l_element_courant).donnee = allocation(s_etat_processus, CHN))
! 749: == NULL)
! 750: {
! 751: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 752: return;
! 753: }
! 754:
! 755: #ifdef MYSQL_SUPPORT
! 756: if (((*(*l_element_courant).donnee).objet = malloc(6 *
! 757: sizeof(unsigned char))) == NULL)
! 758: {
! 759: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 760: return;
! 761: }
! 762:
! 763: strcpy((unsigned char *) (*(*l_element_courant).donnee).objet,
! 764: "MYSQL");
! 765: #else
! 766: if (((*(*l_element_courant).donnee).objet = malloc(15 *
! 767: sizeof(unsigned char))) == NULL)
! 768: {
! 769: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 770: return;
! 771: }
! 772:
! 773: strcpy((unsigned char *) (*(*l_element_courant).donnee).objet,
! 774: "MYSQL DISABLED");
! 775: #endif
! 776:
! 777: if (((*l_element_courant).suivant =
! 778: allocation_maillon(s_etat_processus)) == NULL)
! 779: {
! 780: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 781: return;
! 782: }
! 783:
! 784: l_element_courant = (*l_element_courant).suivant;
! 785: (*l_element_courant).suivant = NULL;
! 786:
! 787: if (((*l_element_courant).donnee = allocation(s_etat_processus, CHN))
! 788: == NULL)
! 789: {
! 790: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 791: return;
! 792: }
! 793:
! 794: #ifdef POSTGRESQL_SUPPORT
! 795: if (((*(*l_element_courant).donnee).objet = malloc(11 *
! 796: sizeof(unsigned char))) == NULL)
! 797: {
! 798: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 799: return;
! 800: }
! 801:
! 802: strcpy((unsigned char *) (*(*l_element_courant).donnee).objet,
! 803: "POSTGRESQL");
! 804: #else
! 805: if (((*(*l_element_courant).donnee).objet = malloc(20 *
! 806: sizeof(unsigned char))) == NULL)
! 807: {
! 808: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 809: return;
! 810: }
! 811:
! 812: strcpy((unsigned char *) (*(*l_element_courant).donnee).objet,
! 813: "POSTGRESQL DISABLED");
! 814: #endif
! 815:
! 816: if (((*l_element_courant).suivant =
! 817: allocation_maillon(s_etat_processus)) == NULL)
! 818: {
! 819: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 820: return;
! 821: }
! 822:
! 823: l_element_courant = (*l_element_courant).suivant;
! 824: (*l_element_courant).suivant = NULL;
! 825:
! 826: if (((*l_element_courant).donnee = allocation(s_etat_processus, CHN))
! 827: == NULL)
! 828: {
! 829: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 830: return;
! 831: }
! 832:
! 833: #ifdef MOTIF_SUPPORT
! 834: if (((*(*l_element_courant).donnee).objet = malloc(6 *
! 835: sizeof(unsigned char))) == NULL)
! 836: {
! 837: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 838: return;
! 839: }
! 840:
! 841: strcpy((unsigned char *) (*(*l_element_courant).donnee).objet,
! 842: "MOTIF");
! 843: #else
! 844: if (((*(*l_element_courant).donnee).objet = malloc(15 *
! 845: sizeof(unsigned char))) == NULL)
! 846: {
! 847: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 848: return;
! 849: }
! 850:
! 851: strcpy((unsigned char *) (*(*l_element_courant).donnee).objet,
! 852: "MOTIF DISABLED");
! 853: #endif
! 854:
! 855: if (((*l_element_courant).suivant =
! 856: allocation_maillon(s_etat_processus)) == NULL)
! 857: {
! 858: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 859: return;
! 860: }
! 861:
! 862: l_element_courant = (*l_element_courant).suivant;
! 863: (*l_element_courant).suivant = NULL;
! 864:
! 865: if (((*l_element_courant).donnee = allocation(s_etat_processus, CHN))
! 866: == NULL)
! 867: {
! 868: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 869: return;
! 870: }
! 871:
! 872: #ifdef DEBUG
! 873: if (((*(*l_element_courant).donnee).objet = malloc(6 *
! 874: sizeof(unsigned char))) == NULL)
! 875: {
! 876: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 877: return;
! 878: }
! 879:
! 880: strcpy((unsigned char *) (*(*l_element_courant).donnee).objet,
! 881: "DEBUG");
! 882: #else
! 883: if (((*(*l_element_courant).donnee).objet = malloc(15 *
! 884: sizeof(unsigned char))) == NULL)
! 885: {
! 886: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 887: return;
! 888: }
! 889:
! 890: strcpy((unsigned char *) (*(*l_element_courant).donnee).objet,
! 891: "DEBUG DISABLED");
! 892: #endif
! 893:
! 894: if (((*l_element_courant).suivant =
! 895: allocation_maillon(s_etat_processus)) == NULL)
! 896: {
! 897: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 898: return;
! 899: }
! 900:
! 901: l_element_courant = (*l_element_courant).suivant;
! 902: (*l_element_courant).suivant = NULL;
! 903:
! 904: if (((*l_element_courant).donnee = allocation(s_etat_processus, CHN))
! 905: == NULL)
! 906: {
! 907: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 908: return;
! 909: }
! 910:
! 911: #ifdef EXPERIMENTAL_CODE
! 912: if (((*(*l_element_courant).donnee).objet = malloc(18 *
! 913: sizeof(unsigned char))) == NULL)
! 914: {
! 915: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 916: return;
! 917: }
! 918:
! 919: strcpy((unsigned char *) (*(*l_element_courant).donnee).objet,
! 920: "EXPERIMENTAL CODE");
! 921: #else
! 922: if (((*(*l_element_courant).donnee).objet = malloc(27 *
! 923: sizeof(unsigned char))) == NULL)
! 924: {
! 925: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 926: return;
! 927: }
! 928:
! 929: strcpy((unsigned char *) (*(*l_element_courant).donnee).objet,
! 930: "EXPERIMENTAL CODE DISABLED");
! 931: #endif
! 932:
! 933: /*
! 934: * Empilement du résultat
! 935: */
! 936:
! 937: if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
! 938: s_objet_resultat) == d_erreur)
! 939: {
! 940: return;
! 941: }
! 942:
! 943: return;
! 944: }
! 945:
! 946:
! 947: /*
! 948: ================================================================================
! 949: Fonction 'vars'
! 950: ================================================================================
! 951: Entrées :
! 952: --------------------------------------------------------------------------------
! 953: Sorties :
! 954: --------------------------------------------------------------------------------
! 955: Effets de bord : néant
! 956: ================================================================================
! 957: */
! 958:
! 959: void
! 960: instruction_vars(struct_processus *s_etat_processus)
! 961: {
! 962: logical1 variable_partagee;
! 963:
! 964: struct_liste_chainee *l_element_courant;
! 965: struct_liste_chainee *l_element_precedent;
! 966:
! 967: struct_objet *s_objet_resultat;
! 968:
! 969: unsigned long i;
! 970:
! 971: (*s_etat_processus).erreur_execution = d_ex;
! 972:
! 973: if ((*s_etat_processus).affichage_arguments == 'Y')
! 974: {
! 975: printf("\n VARS ");
! 976:
! 977: if ((*s_etat_processus).langue == 'F')
! 978: {
! 979: printf("(liste des variables)\n\n");
! 980: }
! 981: else
! 982: {
! 983: printf("(list of variables)\n\n");
! 984: }
! 985:
! 986: printf("-> 1: %s\n", d_LST);
! 987:
! 988: return;
! 989: }
! 990: else if ((*s_etat_processus).test_instruction == 'Y')
! 991: {
! 992: (*s_etat_processus).nombre_arguments = -1;
! 993: return;
! 994: }
! 995:
! 996: if (test_cfsf(s_etat_processus, 31) == d_vrai)
! 997: {
! 998: if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
! 999: {
! 1000: return;
! 1001: }
! 1002: }
! 1003:
! 1004: if ((s_objet_resultat = allocation(s_etat_processus, LST)) == NULL)
! 1005: {
! 1006: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1007: return;
! 1008: }
! 1009:
! 1010: (*s_objet_resultat).objet = NULL;
! 1011: l_element_precedent = NULL;
! 1012:
! 1013: for(i = 0; i < (*s_etat_processus).nombre_variables; i++)
! 1014: {
! 1015: if (l_element_precedent == NULL)
! 1016: {
! 1017: if (((*s_objet_resultat).objet =
! 1018: allocation_maillon(s_etat_processus)) == NULL)
! 1019: {
! 1020: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1021: return;
! 1022: }
! 1023:
! 1024: l_element_courant = (struct_liste_chainee *)
! 1025: (*s_objet_resultat).objet;
! 1026: (*l_element_courant).suivant = NULL;
! 1027: }
! 1028: else
! 1029: {
! 1030: if (((*l_element_precedent).suivant =
! 1031: allocation_maillon(s_etat_processus)) == NULL)
! 1032: {
! 1033: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1034: return;
! 1035: }
! 1036:
! 1037: l_element_courant = (*l_element_precedent).suivant;
! 1038: (*l_element_courant).suivant = NULL;
! 1039: }
! 1040:
! 1041: /*
! 1042: * Allocation de la liste incluse
! 1043: */
! 1044:
! 1045: if (((*l_element_courant).donnee = allocation(s_etat_processus, LST))
! 1046: == NULL)
! 1047: {
! 1048: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1049: return;
! 1050: }
! 1051:
! 1052: if (((*((struct_objet *) (*l_element_courant).donnee)).objet =
! 1053: allocation_maillon(s_etat_processus)) == NULL)
! 1054: {
! 1055: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1056: return;
! 1057: }
! 1058:
! 1059: /*
! 1060: * Mise en place d'un verrou si la variable est partagée.
! 1061: */
! 1062:
! 1063: if ((*s_etat_processus).s_liste_variables[i].objet == NULL)
! 1064: {
! 1065: if (pthread_mutex_lock(&((*(*s_etat_processus)
! 1066: .s_liste_variables_partagees).mutex)) != 0)
! 1067: {
! 1068: (*s_etat_processus).erreur_systeme = d_es_processus;
! 1069: return;
! 1070: }
! 1071:
! 1072: if (recherche_variable_partagee(s_etat_processus,
! 1073: ((*s_etat_processus).s_liste_variables[i]).nom,
! 1074: ((*s_etat_processus).s_liste_variables[i])
! 1075: .variable_partagee, ((*s_etat_processus)
! 1076: .s_liste_variables[i]).origine) == d_faux)
! 1077: {
! 1078: // La variable partagée n'existe plus.
! 1079:
! 1080: if (pthread_mutex_unlock(&((*(*s_etat_processus)
! 1081: .s_liste_variables_partagees).mutex)) != 0)
! 1082: {
! 1083: (*s_etat_processus).erreur_systeme = d_es_processus;
! 1084: return;
! 1085: }
! 1086:
! 1087: continue;
! 1088: }
! 1089:
! 1090: variable_partagee = d_vrai;
! 1091: }
! 1092: else
! 1093: {
! 1094: variable_partagee = d_faux;
! 1095: }
! 1096:
! 1097: /*
! 1098: * Mise en place du nom de la variable
! 1099: */
! 1100:
! 1101: if (((*((struct_liste_chainee *) (*((struct_objet *)
! 1102: (*l_element_courant).donnee)).objet)).donnee =
! 1103: allocation(s_etat_processus, NOM)) == NULL)
! 1104: {
! 1105: if (variable_partagee == d_vrai)
! 1106: {
! 1107: if (pthread_mutex_unlock(&((*(*s_etat_processus)
! 1108: .s_liste_variables_partagees).mutex)) != 0)
! 1109: {
! 1110: (*s_etat_processus).erreur_systeme = d_es_processus;
! 1111: return;
! 1112: }
! 1113: }
! 1114:
! 1115: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1116: return;
! 1117: }
! 1118:
! 1119: (*((struct_nom *) (*(*((struct_liste_chainee *) (*((struct_objet *)
! 1120: (*l_element_courant).donnee)).objet)).donnee).objet))
! 1121: .symbole = d_vrai;
! 1122:
! 1123: if (((*((struct_nom *) (*(*((struct_liste_chainee *) (*((struct_objet *)
! 1124: (*l_element_courant).donnee)).objet)).donnee).objet)).nom =
! 1125: malloc((strlen((*s_etat_processus).s_liste_variables[i].nom)
! 1126: + 1) * sizeof(unsigned char))) == NULL)
! 1127: {
! 1128: if (variable_partagee == d_vrai)
! 1129: {
! 1130: if (pthread_mutex_unlock(&((*(*s_etat_processus)
! 1131: .s_liste_variables_partagees).mutex)) != 0)
! 1132: {
! 1133: (*s_etat_processus).erreur_systeme = d_es_processus;
! 1134: return;
! 1135: }
! 1136: }
! 1137:
! 1138: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1139: return;
! 1140: }
! 1141:
! 1142: strcpy((*((struct_nom *) (*(*((struct_liste_chainee *)
! 1143: (*((struct_objet *) (*l_element_courant).donnee)).objet))
! 1144: .donnee).objet)).nom, (*s_etat_processus)
! 1145: .s_liste_variables[i].nom);
! 1146:
! 1147: /*
! 1148: * Préparation du niveau
! 1149: */
! 1150:
! 1151: if (((*((struct_liste_chainee *) (*((struct_objet *)
! 1152: (*l_element_courant).donnee)).objet)).suivant =
! 1153: allocation_maillon(s_etat_processus)) == NULL)
! 1154: {
! 1155: if (variable_partagee == d_vrai)
! 1156: {
! 1157: if (pthread_mutex_unlock(&((*(*s_etat_processus)
! 1158: .s_liste_variables_partagees).mutex)) != 0)
! 1159: {
! 1160: (*s_etat_processus).erreur_systeme = d_es_processus;
! 1161: return;
! 1162: }
! 1163: }
! 1164:
! 1165: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1166: return;
! 1167: }
! 1168:
! 1169: if (((*(*((struct_liste_chainee *) (*((struct_objet *)
! 1170: (*l_element_courant).donnee)).objet)).suivant).donnee =
! 1171: allocation(s_etat_processus, INT)) == NULL)
! 1172: {
! 1173: if (variable_partagee == d_vrai)
! 1174: {
! 1175: if (pthread_mutex_unlock(&((*(*s_etat_processus)
! 1176: .s_liste_variables_partagees).mutex)) != 0)
! 1177: {
! 1178: (*s_etat_processus).erreur_systeme = d_es_processus;
! 1179: return;
! 1180: }
! 1181: }
! 1182:
! 1183: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1184: return;
! 1185: }
! 1186:
! 1187: (*((integer8 *) (*(*(*((struct_liste_chainee *) (*((struct_objet *)
! 1188: (*l_element_courant).donnee)).objet)).suivant).donnee).objet)) =
! 1189: (integer8) (*s_etat_processus).s_liste_variables[i].niveau;
! 1190:
! 1191: /*
! 1192: * Préparation du contenu de la variable
! 1193: */
! 1194:
! 1195: if (((*(*((struct_liste_chainee *) (*((struct_objet *)
! 1196: (*l_element_courant).donnee)).objet)).suivant).suivant =
! 1197: allocation_maillon(s_etat_processus)) == NULL)
! 1198: {
! 1199: if (variable_partagee == d_vrai)
! 1200: {
! 1201: if (pthread_mutex_unlock(&((*(*s_etat_processus)
! 1202: .s_liste_variables_partagees).mutex)) != 0)
! 1203: {
! 1204: (*s_etat_processus).erreur_systeme = d_es_processus;
! 1205: return;
! 1206: }
! 1207: }
! 1208:
! 1209: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1210: return;
! 1211: }
! 1212:
! 1213: if ((*s_etat_processus).s_liste_variables[i].objet == NULL)
! 1214: {
! 1215: // Variable partagée
! 1216:
! 1217: if (((*(*(*((struct_liste_chainee *) (*((struct_objet *)
! 1218: (*l_element_courant).donnee)).objet)).suivant).suivant)
! 1219: .donnee = copie_objet(s_etat_processus,
! 1220: (*(*s_etat_processus)
! 1221: .s_liste_variables_partagees).table[(*(*s_etat_processus)
! 1222: .s_liste_variables_partagees).position_variable].objet,
! 1223: 'P')) == NULL)
! 1224: {
! 1225: if (pthread_mutex_unlock(&((*(*s_etat_processus)
! 1226: .s_liste_variables_partagees).mutex)) != 0)
! 1227: {
! 1228: (*s_etat_processus).erreur_systeme = d_es_processus;
! 1229: return;
! 1230: }
! 1231:
! 1232: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1233: return;
! 1234: }
! 1235:
! 1236: if (pthread_mutex_unlock(&((*(*s_etat_processus)
! 1237: .s_liste_variables_partagees).mutex)) != 0)
! 1238: {
! 1239: (*s_etat_processus).erreur_systeme = d_es_processus;
! 1240: return;
! 1241: }
! 1242: }
! 1243: else
! 1244: {
! 1245: // Variable privée
! 1246:
! 1247: if (((*(*(*((struct_liste_chainee *) (*((struct_objet *)
! 1248: (*l_element_courant).donnee)).objet)).suivant).suivant)
! 1249: .donnee = copie_objet(s_etat_processus, (*s_etat_processus)
! 1250: .s_liste_variables[i].objet, 'P')) == NULL)
! 1251: {
! 1252: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1253: return;
! 1254: }
! 1255: }
! 1256:
! 1257: /*
! 1258: * Préparation du drapeau STATIC/VOLATILE
! 1259: */
! 1260:
! 1261: if (((*(*(*((struct_liste_chainee *) (*((struct_objet *)
! 1262: (*l_element_courant).donnee)).objet)).suivant).suivant)
! 1263: .suivant = allocation_maillon(s_etat_processus)) == NULL)
! 1264: {
! 1265: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1266: return;
! 1267: }
! 1268:
! 1269: if (((*(*(*(*((struct_liste_chainee *) (*((struct_objet *)
! 1270: (*l_element_courant).donnee)).objet)).suivant).suivant).suivant)
! 1271: .donnee = allocation(s_etat_processus, CHN)) == NULL)
! 1272: {
! 1273: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1274: return;
! 1275: }
! 1276:
! 1277: if (((*s_etat_processus).s_liste_variables[i].origine == 'P')
! 1278: ? ((*s_etat_processus).s_liste_variables[i]
! 1279: .variable_statique.adresse != 0)
! 1280: : ((*s_etat_processus).s_liste_variables[i]
! 1281: .variable_statique.pointeur != NULL))
! 1282: {
! 1283: if (((*(*(*(*(*((struct_liste_chainee *) (*((struct_objet *)
! 1284: (*l_element_courant).donnee)).objet)).suivant).suivant)
! 1285: .suivant).donnee).objet = malloc(7 *
! 1286: sizeof(unsigned char))) == NULL)
! 1287: {
! 1288: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1289: return;
! 1290: }
! 1291:
! 1292: strcpy((unsigned char *) (*(*(*(*(*((struct_liste_chainee *)
! 1293: (*((struct_objet *) (*l_element_courant).donnee)).objet))
! 1294: .suivant).suivant) .suivant).donnee).objet, "STATIC");
! 1295: }
! 1296: else
! 1297: {
! 1298: if (((*(*(*(*(*((struct_liste_chainee *) (*((struct_objet *)
! 1299: (*l_element_courant).donnee)).objet)).suivant).suivant)
! 1300: .suivant).donnee).objet = malloc(9 *
! 1301: sizeof(unsigned char))) == NULL)
! 1302: {
! 1303: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1304: return;
! 1305: }
! 1306:
! 1307: strcpy((unsigned char *) (*(*(*(*(*((struct_liste_chainee *)
! 1308: (*((struct_objet *) (*l_element_courant).donnee)).objet))
! 1309: .suivant).suivant) .suivant).donnee).objet, "VOLATILE");
! 1310: }
! 1311:
! 1312: /*
! 1313: * Préparation du drapeau LOCKED/UNLOCKED
! 1314: */
! 1315:
! 1316: if (((*(*(*(*((struct_liste_chainee *) (*((struct_objet *)
! 1317: (*l_element_courant).donnee)).objet)).suivant).suivant)
! 1318: .suivant).suivant = allocation_maillon(s_etat_processus))
! 1319: == NULL)
! 1320: {
! 1321: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1322: return;
! 1323: }
! 1324:
! 1325: if (((*(*(*(*(*((struct_liste_chainee *) (*((struct_objet *)
! 1326: (*l_element_courant).donnee)).objet)).suivant).suivant).suivant)
! 1327: .suivant).donnee = allocation(s_etat_processus, CHN))
! 1328: == NULL)
! 1329: {
! 1330: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1331: return;
! 1332: }
! 1333:
! 1334: if ((*s_etat_processus).s_liste_variables[i].variable_verrouillee
! 1335: == d_vrai)
! 1336: {
! 1337: if (((*(*(*(*(*(*((struct_liste_chainee *) (*((struct_objet *)
! 1338: (*l_element_courant).donnee)).objet)).suivant).suivant)
! 1339: .suivant).suivant).donnee).objet = malloc(7 *
! 1340: sizeof(unsigned char))) == NULL)
! 1341: {
! 1342: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1343: return;
! 1344: }
! 1345:
! 1346: strcpy((unsigned char *) (*(*(*(*(*(*((struct_liste_chainee *)
! 1347: (*((struct_objet *) (*l_element_courant).donnee)).objet))
! 1348: .suivant).suivant).suivant).suivant).donnee).objet,
! 1349: "LOCKED");
! 1350: }
! 1351: else
! 1352: {
! 1353: if (((*(*(*(*(*(*((struct_liste_chainee *) (*((struct_objet *)
! 1354: (*l_element_courant).donnee)).objet)).suivant).suivant)
! 1355: .suivant).suivant).donnee).objet = malloc(9 *
! 1356: sizeof(unsigned char))) == NULL)
! 1357: {
! 1358: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1359: return;
! 1360: }
! 1361:
! 1362: strcpy((unsigned char *) (*(*(*(*(*(*((struct_liste_chainee *)
! 1363: (*((struct_objet *) (*l_element_courant).donnee)).objet))
! 1364: .suivant).suivant).suivant).suivant).donnee).objet,
! 1365: "UNLOCKED");
! 1366: }
! 1367:
! 1368: /*
! 1369: * Préparation du drapeau PRIVATE/SHARED
! 1370: */
! 1371:
! 1372: if (((*(*(*(*(*((struct_liste_chainee *) (*((struct_objet *)
! 1373: (*l_element_courant).donnee)).objet)).suivant).suivant)
! 1374: .suivant).suivant).suivant =
! 1375: allocation_maillon(s_etat_processus)) == NULL)
! 1376: {
! 1377: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1378: return;
! 1379: }
! 1380:
! 1381: if (((*(*(*(*(*(*((struct_liste_chainee *) (*((struct_objet *)
! 1382: (*l_element_courant).donnee)).objet)).suivant).suivant).suivant)
! 1383: .suivant).suivant).donnee = allocation(s_etat_processus,
! 1384: CHN)) == NULL)
! 1385: {
! 1386: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1387: return;
! 1388: }
! 1389:
! 1390: if (variable_partagee == d_vrai)
! 1391: {
! 1392: if (((*(*(*(*(*(*(*((struct_liste_chainee *) (*((struct_objet *)
! 1393: (*l_element_courant).donnee)).objet)).suivant).suivant)
! 1394: .suivant).suivant).suivant).donnee).objet = malloc(7 *
! 1395: sizeof(unsigned char))) == NULL)
! 1396: {
! 1397: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1398: return;
! 1399: }
! 1400:
! 1401: strcpy((unsigned char *) (*(*(*(*(*(*(*((struct_liste_chainee *)
! 1402: (*((struct_objet *) (*l_element_courant).donnee)).objet))
! 1403: .suivant).suivant).suivant).suivant).suivant).donnee).objet,
! 1404: "SHARED");
! 1405: }
! 1406: else
! 1407: {
! 1408: if (((*(*(*(*(*(*(*((struct_liste_chainee *) (*((struct_objet *)
! 1409: (*l_element_courant).donnee)).objet)).suivant).suivant)
! 1410: .suivant).suivant).suivant).donnee).objet = malloc(8 *
! 1411: sizeof(unsigned char))) == NULL)
! 1412: {
! 1413: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1414: return;
! 1415: }
! 1416:
! 1417: strcpy((unsigned char *) (*(*(*(*(*(*(*((struct_liste_chainee *)
! 1418: (*((struct_objet *) (*l_element_courant).donnee)).objet))
! 1419: .suivant).suivant).suivant).suivant).suivant).donnee).objet,
! 1420: "PRIVATE");
! 1421: }
! 1422:
! 1423: /*
! 1424: * Fermeture de la liste incluse
! 1425: */
! 1426:
! 1427: (*(*(*(*(*(*((struct_liste_chainee *) (*((struct_objet *)
! 1428: (*l_element_courant).donnee)).objet)).suivant).suivant)
! 1429: .suivant).suivant).suivant).suivant = NULL;
! 1430:
! 1431: l_element_precedent = l_element_courant;
! 1432: }
! 1433:
! 1434: if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
! 1435: s_objet_resultat) == d_erreur)
! 1436: {
! 1437: return;
! 1438: }
! 1439:
! 1440: return;
! 1441: }
! 1442:
! 1443:
! 1444: /*
! 1445: ================================================================================
! 1446: Fonction 'visit'
! 1447: ================================================================================
! 1448: Entrées :
! 1449: --------------------------------------------------------------------------------
! 1450: Sorties :
! 1451: --------------------------------------------------------------------------------
! 1452: Effets de bord : néant
! 1453: ================================================================================
! 1454: */
! 1455:
! 1456: void
! 1457: instruction_visit(struct_processus *s_etat_processus)
! 1458: {
! 1459: struct_liste_chainee *registre_pile_last;
! 1460:
! 1461: struct_objet *s_objet;
! 1462:
! 1463: unsigned long profondeur_initiale;
! 1464:
! 1465: (*s_etat_processus).erreur_execution = d_ex;
! 1466:
! 1467: if ((*s_etat_processus).affichage_arguments == 'Y')
! 1468: {
! 1469: printf("\n VISIT ");
! 1470:
! 1471: if ((*s_etat_processus).langue == 'F')
! 1472: {
! 1473: printf("(édition d'une variable)\n\n");
! 1474: }
! 1475: else
! 1476: {
! 1477: printf("(edit variable)\n\n");
! 1478: }
! 1479:
! 1480: printf(" 1: %s\n", d_NOM);
! 1481:
! 1482: return;
! 1483: }
! 1484: else if ((*s_etat_processus).test_instruction == 'Y')
! 1485: {
! 1486: (*s_etat_processus).nombre_arguments = -1;
! 1487: return;
! 1488: }
! 1489:
! 1490: registre_pile_last = NULL;
! 1491:
! 1492: if (test_cfsf(s_etat_processus, 31) == d_vrai)
! 1493: {
! 1494: if (empilement_pile_last(s_etat_processus, 1) == d_erreur)
! 1495: {
! 1496: return;
! 1497: }
! 1498:
! 1499: registre_pile_last = (*s_etat_processus).l_base_pile_last;
! 1500: (*s_etat_processus).l_base_pile_last = NULL;
! 1501: }
! 1502:
! 1503: if ((*s_etat_processus).l_base_pile == NULL)
! 1504: {
! 1505: (*s_etat_processus).l_base_pile_last = registre_pile_last;
! 1506: (*s_etat_processus).erreur_execution = d_ex_manque_argument;
! 1507: return;
! 1508: }
! 1509:
! 1510: if ((*(*(*s_etat_processus).l_base_pile).donnee).type != NOM)
! 1511: {
! 1512: if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
! 1513: &s_objet) == d_erreur)
! 1514: {
! 1515: (*s_etat_processus).erreur_execution = d_ex_manque_argument;
! 1516: return;
! 1517: }
! 1518:
! 1519: liberation(s_etat_processus, s_objet);
! 1520:
! 1521: (*s_etat_processus).l_base_pile_last = registre_pile_last;
! 1522: (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
! 1523: return;
! 1524: }
! 1525:
! 1526: profondeur_initiale = (*s_etat_processus).hauteur_pile_operationnelle;
! 1527: instruction_dup(s_etat_processus);
! 1528:
! 1529: if (((*s_etat_processus).erreur_systeme != d_es) ||
! 1530: ((*s_etat_processus).erreur_execution != d_ex) ||
! 1531: ((*s_etat_processus).exception != d_ep))
! 1532: {
! 1533: if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
! 1534: {
! 1535: return;
! 1536: }
! 1537:
! 1538: (*s_etat_processus).l_base_pile_last = registre_pile_last;
! 1539:
! 1540: return;
! 1541: }
! 1542:
! 1543: instruction_rcl(s_etat_processus);
! 1544:
! 1545: if (((*s_etat_processus).erreur_systeme != d_es) ||
! 1546: ((*s_etat_processus).erreur_execution != d_ex) ||
! 1547: ((*s_etat_processus).exception != d_ep))
! 1548: {
! 1549: if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
! 1550: &s_objet) == d_erreur)
! 1551: {
! 1552: (*s_etat_processus).erreur_execution = d_ex_manque_argument;
! 1553: return;
! 1554: }
! 1555:
! 1556: liberation(s_etat_processus, s_objet);
! 1557:
! 1558: if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
! 1559: {
! 1560: return;
! 1561: }
! 1562:
! 1563: (*s_etat_processus).l_base_pile_last = registre_pile_last;
! 1564:
! 1565: return;
! 1566: }
! 1567:
! 1568: instruction_edit(s_etat_processus);
! 1569:
! 1570: if (((*s_etat_processus).erreur_systeme != d_es) ||
! 1571: ((*s_etat_processus).erreur_execution != d_ex) ||
! 1572: ((*s_etat_processus).exception != d_ep))
! 1573: {
! 1574: if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
! 1575: {
! 1576: return;
! 1577: }
! 1578:
! 1579: (*s_etat_processus).l_base_pile_last = registre_pile_last;
! 1580:
! 1581: return;
! 1582: }
! 1583:
! 1584: while(profondeur_initiale != ((*s_etat_processus)
! 1585: .hauteur_pile_operationnelle - 1))
! 1586: {
! 1587: if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
! 1588: &s_objet) == d_erreur)
! 1589: {
! 1590: (*s_etat_processus).erreur_execution = d_ex_manque_argument;
! 1591: return;
! 1592: }
! 1593:
! 1594: liberation(s_etat_processus, s_objet);
! 1595: }
! 1596:
! 1597: instruction_swap(s_etat_processus);
! 1598:
! 1599: if (((*s_etat_processus).erreur_systeme != d_es) ||
! 1600: ((*s_etat_processus).erreur_execution != d_ex) ||
! 1601: ((*s_etat_processus).exception != d_ep))
! 1602: {
! 1603: if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
! 1604: {
! 1605: return;
! 1606: }
! 1607:
! 1608: (*s_etat_processus).l_base_pile_last = registre_pile_last;
! 1609:
! 1610: return;
! 1611: }
! 1612:
! 1613: instruction_sto(s_etat_processus);
! 1614:
! 1615: if (test_cfsf(s_etat_processus, 31) == d_vrai)
! 1616: {
! 1617: if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
! 1618: {
! 1619: return;
! 1620: }
! 1621:
! 1622: (*s_etat_processus).l_base_pile_last = registre_pile_last;
! 1623: }
! 1624:
! 1625: return;
! 1626: }
! 1627:
! 1628:
! 1629: /*
! 1630: ================================================================================
! 1631: Fonction 'variable'
! 1632: ================================================================================
! 1633: Entrées :
! 1634: --------------------------------------------------------------------------------
! 1635: Sorties :
! 1636: --------------------------------------------------------------------------------
! 1637: Effets de bord : néant
! 1638: ================================================================================
! 1639: */
! 1640:
! 1641: void
! 1642: instruction_variable(struct_processus *s_etat_processus)
! 1643: {
! 1644: logical1 presence_variable;
! 1645:
! 1646: long i;
! 1647:
! 1648: struct_liste_chainee *l_element_courant;
! 1649:
! 1650: struct_objet *s_objet;
! 1651:
! 1652: (*s_etat_processus).erreur_execution = d_ex;
! 1653:
! 1654: if ((*s_etat_processus).affichage_arguments == 'Y')
! 1655: {
! 1656: printf("\n VARIABLE ");
! 1657:
! 1658: if ((*s_etat_processus).langue == 'F')
! 1659: {
! 1660: printf("(déverrouille une variable globale)\n\n");
! 1661: }
! 1662: else
! 1663: {
! 1664: printf("(unlock a global variable)\n\n");
! 1665: }
! 1666:
! 1667: printf(" 1: %s, %s\n", d_NOM, d_LST);
! 1668:
! 1669: return;
! 1670: }
! 1671: else if ((*s_etat_processus).test_instruction == 'Y')
! 1672: {
! 1673: (*s_etat_processus).nombre_arguments = -1;
! 1674: return;
! 1675: }
! 1676:
! 1677: if (test_cfsf(s_etat_processus, 31) == d_vrai)
! 1678: {
! 1679: if (empilement_pile_last(s_etat_processus, 1) == d_erreur)
! 1680: {
! 1681: return;
! 1682: }
! 1683: }
! 1684:
! 1685: if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
! 1686: &s_objet) == d_erreur)
! 1687: {
! 1688: (*s_etat_processus).erreur_execution = d_ex_manque_argument;
! 1689: return;
! 1690: }
! 1691:
! 1692: if ((*s_objet).type == NOM)
! 1693: {
! 1694: if (recherche_variable(s_etat_processus, ((*((struct_nom *)
! 1695: (*s_objet).objet)).nom)) == d_faux)
! 1696: {
! 1697: liberation(s_etat_processus, s_objet);
! 1698:
! 1699: (*s_etat_processus).erreur_systeme = d_es;
! 1700: (*s_etat_processus).erreur_execution = d_ex_variable_non_definie;
! 1701: return;
! 1702: }
! 1703:
! 1704: i = (*s_etat_processus).position_variable_courante;
! 1705: presence_variable = d_faux;
! 1706:
! 1707: while(i >= 0)
! 1708: {
! 1709: if ((strcmp((*s_etat_processus).s_liste_variables[i].nom,
! 1710: (*((struct_nom *) (*s_objet).objet)).nom) == 0)
! 1711: && ((*s_etat_processus).s_liste_variables[i].niveau == 1))
! 1712: {
! 1713: presence_variable = d_vrai;
! 1714: break;
! 1715: }
! 1716:
! 1717: i--;
! 1718: }
! 1719:
! 1720: (*s_etat_processus).position_variable_courante = i;
! 1721:
! 1722: if (presence_variable == d_faux)
! 1723: {
! 1724: liberation(s_etat_processus, s_objet);
! 1725:
! 1726: (*s_etat_processus).erreur_execution = d_ex_variable_non_definie;
! 1727: return;
! 1728: }
! 1729:
! 1730: ((*s_etat_processus).s_liste_variables[(*s_etat_processus)
! 1731: .position_variable_courante]).variable_verrouillee = d_faux;
! 1732: }
! 1733: else if ((*s_objet).type == LST)
! 1734: {
! 1735: l_element_courant = (struct_liste_chainee *) (*s_objet).objet;
! 1736:
! 1737: while(l_element_courant != NULL)
! 1738: {
! 1739: if ((*(*l_element_courant).donnee).type != NOM)
! 1740: {
! 1741: liberation(s_etat_processus, s_objet);
! 1742:
! 1743: (*s_etat_processus).erreur_execution = d_ex_nom_invalide;
! 1744: return;
! 1745: }
! 1746:
! 1747: if (recherche_variable(s_etat_processus, (*((struct_nom *)
! 1748: (*(*l_element_courant).donnee).objet)).nom) == d_faux)
! 1749: {
! 1750: liberation(s_etat_processus, s_objet);
! 1751:
! 1752: (*s_etat_processus).erreur_systeme = d_es;
! 1753: (*s_etat_processus).erreur_execution =
! 1754: d_ex_variable_non_definie;
! 1755: return;
! 1756: }
! 1757:
! 1758: i = (*s_etat_processus).position_variable_courante;
! 1759: presence_variable = d_faux;
! 1760:
! 1761: while(i >= 0)
! 1762: {
! 1763: if ((strcmp((*s_etat_processus).s_liste_variables[i].nom,
! 1764: (*((struct_nom *) (*(*l_element_courant).donnee)
! 1765: .objet)).nom) == 0) && ((*s_etat_processus)
! 1766: .s_liste_variables[i].niveau == 1))
! 1767: {
! 1768: presence_variable = d_vrai;
! 1769: break;
! 1770: }
! 1771:
! 1772: i--;
! 1773: }
! 1774:
! 1775: (*s_etat_processus).position_variable_courante = i;
! 1776:
! 1777: if (presence_variable == d_faux)
! 1778: {
! 1779: liberation(s_etat_processus, s_objet);
! 1780:
! 1781: (*s_etat_processus).erreur_execution =
! 1782: d_ex_variable_non_definie;
! 1783: return;
! 1784: }
! 1785:
! 1786: ((*s_etat_processus).s_liste_variables[(*s_etat_processus)
! 1787: .position_variable_courante]).variable_verrouillee = d_faux;
! 1788:
! 1789: l_element_courant = (*l_element_courant).suivant;
! 1790: }
! 1791: }
! 1792: else
! 1793: {
! 1794: liberation(s_etat_processus, s_objet);
! 1795:
! 1796: (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
! 1797: return;
! 1798: }
! 1799:
! 1800: liberation(s_etat_processus, s_objet);
! 1801:
! 1802: return;
! 1803: }
! 1804:
! 1805: // vim: ts=4
CVSweb interface <joel.bertrand@systella.fr>