Annotation of rpl/src/instructions_f4.c, revision 1.36
1.1 bertrand 1: /*
2: ================================================================================
1.35 bertrand 3: RPL/2 (R) version 4.1.10
1.30 bertrand 4: Copyright (C) 1989-2012 Dr. BERTRAND Joël
1.1 bertrand 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:
1.11 bertrand 23: #include "rpl-conv.h"
1.1 bertrand 24:
25:
26: /*
27: ================================================================================
28: Fonction '->table'
29: ================================================================================
30: Entrées : structure processus
31: --------------------------------------------------------------------------------
32: Sorties :
33: --------------------------------------------------------------------------------
34: Effets de bord : néant
35: ================================================================================
36: */
37:
38: void
39: instruction_fleche_table(struct_processus *s_etat_processus)
40: {
41: struct_objet *s_objet;
42:
43: signed long i;
44: signed long nombre_elements;
45:
46: (*s_etat_processus).erreur_execution = d_ex;
47:
48: if ((*s_etat_processus).affichage_arguments == 'Y')
49: {
50: printf("\n ->TABLE ");
51:
52: if ((*s_etat_processus).langue == 'F')
53: {
54: printf("(création d'une table)\n\n");
55: }
56: else
57: {
58: printf("(create table)\n\n");
59: }
60:
61: printf(" n: %s, %s, %s, %s, %s, %s,\n"
62: " %s, %s, %s, %s, %s,\n"
63: " %s, %s, %s, %s, %s,\n"
64: " %s, %s\n",
65: d_INT, d_REL, d_CPL, d_VIN, d_VRL, d_VCX, d_MIN, d_MRL, d_MCX,
66: d_TAB, d_BIN, d_NOM, d_CHN, d_LST, d_ALG, d_RPN, d_FCH, d_SLB);
67: printf(" ...\n");
68: printf(" 2: %s, %s, %s, %s, %s, %s,\n"
69: " %s, %s, %s, %s, %s,\n"
70: " %s, %s, %s, %s, %s,\n"
71: " %s, %s\n",
72: d_INT, d_REL, d_CPL, d_VIN, d_VRL, d_VCX, d_MIN, d_MRL, d_MCX,
73: d_TAB, d_BIN, d_NOM, d_CHN, d_LST, d_ALG, d_RPN, d_FCH, d_SLB);
74: printf(" 1: %s\n", d_INT);
75: printf("-> 1: %s\n", d_TAB);
76:
77: return;
78: }
79: else if ((*s_etat_processus).test_instruction == 'Y')
80: {
81: (*s_etat_processus).nombre_arguments = -1;
82: return;
83: }
84:
85: if (test_cfsf(s_etat_processus, 31) == d_vrai)
86: {
87: if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
88: {
89: return;
90: }
91: }
92:
93: if ((*s_etat_processus).hauteur_pile_operationnelle == 0)
94: {
95: (*s_etat_processus).erreur_execution = d_ex_manque_argument;
96: return;
97: }
98:
99: if ((*(*(*s_etat_processus).l_base_pile).donnee).type != INT)
100: {
101: (*s_etat_processus).erreur_execution = d_ex_argument_invalide;
102: return;
103: }
104:
105: nombre_elements = (*((integer8 *) (*(*(*s_etat_processus).l_base_pile)
106: .donnee).objet));
107:
108: if (nombre_elements < 0)
109: {
110:
111: /*
112: -- Opération absurde autorisée sur le calculateur HP-28S -----------------------
113: */
114:
115: (*s_etat_processus).erreur_execution = d_ex_argument_invalide;
116: return;
117: }
118:
119: if ((unsigned long) nombre_elements >=
120: (*s_etat_processus).hauteur_pile_operationnelle)
121: {
122: (*s_etat_processus).erreur_execution = d_ex_manque_argument;
123: return;
124: }
125:
126: if (test_cfsf(s_etat_processus, 31) == d_vrai)
127: {
128: if (empilement_pile_last(s_etat_processus, nombre_elements + 1)
129: == d_erreur)
130: {
131: return;
132: }
133: }
134:
135: if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
136: &s_objet) == d_erreur)
137: {
138: return;
139: }
140:
141: liberation(s_etat_processus, s_objet);
142:
143: if ((s_objet = allocation(s_etat_processus, TBL)) == NULL)
144: {
145: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
146: return;
147: }
148:
149: (*((struct_tableau *) (*s_objet).objet)).nombre_elements =
150: nombre_elements;
151:
152: if (((*((struct_tableau *) (*s_objet).objet)).elements = malloc(
153: nombre_elements * sizeof(struct_objet *))) == NULL)
154: {
155: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
156: return;
157: }
158:
159: for(i = 0; i < nombre_elements; i++)
160: {
161: if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
162: &((*((struct_tableau *) (*s_objet).objet)).elements
163: [nombre_elements - (i + 1)])) == d_erreur)
164: {
165: return;
166: }
167: }
168:
169: if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
170: s_objet) == d_erreur)
171: {
172: return;
173: }
174:
175: return;
176: }
177:
178:
179: /*
180: ================================================================================
181: Fonction '->diag'
182: ================================================================================
183: Entrées : pointeur sur une structure struct_processus
184: --------------------------------------------------------------------------------
185: Sorties :
186: --------------------------------------------------------------------------------
187: Effets de bord : néant
188: ================================================================================
189: */
190:
191: void
192: instruction_fleche_diag(struct_processus *s_etat_processus)
193: {
194: struct_objet *s_objet_argument;
195: struct_objet *s_objet_resultat;
196:
197: unsigned long i;
198: unsigned long j;
199:
200: (*s_etat_processus).erreur_execution = d_ex;
201:
202: if ((*s_etat_processus).affichage_arguments == 'Y')
203: {
204: printf("\n ->DIAG ");
205:
206: if ((*s_etat_processus).langue == 'F')
207: {
208: printf("(conversion d'un vecteur en matrice diaginale)\n\n");
209: }
210: else
211: {
212: printf("(vector to diagonal matrix conversion)\n\n");
213: }
214:
215: printf("-> 1: %s, %s, %s\n", d_VIN, d_VRL, d_VCX);
216: printf(" 1: %s, %s, %s\n", d_MIN, d_MRL, d_MCX);
217:
218: return;
219: }
220: else if ((*s_etat_processus).test_instruction == 'Y')
221: {
222: (*s_etat_processus).nombre_arguments = -1;
223: return;
224: }
225:
226: if (test_cfsf(s_etat_processus, 31) == d_vrai)
227: {
228: if (empilement_pile_last(s_etat_processus, 1) == d_erreur)
229: {
230: return;
231: }
232: }
233:
234: if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
235: &s_objet_argument) == d_erreur)
236: {
237: (*s_etat_processus).erreur_execution = d_ex_manque_argument;
238: return;
239: }
240:
241: /*
242: * Conversion d'un vecteur
243: */
244:
245: if ((*s_objet_argument).type == VIN)
246: {
247: if ((s_objet_resultat = allocation(s_etat_processus, MIN)) == NULL)
248: {
249: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
250: return;
251: }
252:
253: (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_lignes =
254: (*((struct_vecteur *) (*s_objet_argument).objet)).taille;
255: (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_colonnes =
256: (*((struct_vecteur *) (*s_objet_argument).objet)).taille;
257:
258: if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau =
259: malloc((*((struct_matrice *) (*s_objet_resultat).objet))
260: .nombre_lignes * sizeof(integer8 *))) == NULL)
261: {
262: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
263: return;
264: }
265:
266: for(i = 0; i < (*((struct_matrice *) (*s_objet_resultat).objet))
267: .nombre_lignes; i++)
268: {
269: if ((((integer8 **) (*((struct_matrice *)
270: (*s_objet_resultat).objet)).tableau)[i] =
271: malloc((*((struct_matrice *)
272: (*s_objet_resultat).objet)).nombre_colonnes *
273: sizeof(integer8))) == NULL)
274: {
275: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
276: return;
277: }
278:
279: for(j = 0; j < (*((struct_matrice *) (*s_objet_resultat).objet))
280: .nombre_colonnes; j++)
281: {
282: if (i != j)
283: {
284: ((integer8 **) (*((struct_matrice *) (*s_objet_resultat)
285: .objet)).tableau)[i][j] = 0;
286: }
287: else
288: {
289: ((integer8 **) (*((struct_matrice *) (*s_objet_resultat)
290: .objet)).tableau)[i][j] = ((integer8 *)
291: (*((struct_vecteur *) (*s_objet_argument)
292: .objet)).tableau)[i];
293: }
294: }
295: }
296: }
297: else if ((*s_objet_argument).type == VRL)
298: {
299: if ((s_objet_resultat = allocation(s_etat_processus, MRL)) == NULL)
300: {
301: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
302: return;
303: }
304:
305: (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_lignes =
306: (*((struct_vecteur *) (*s_objet_argument).objet)).taille;
307: (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_colonnes =
308: (*((struct_vecteur *) (*s_objet_argument).objet)).taille;
309:
310: if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau =
311: malloc((*((struct_matrice *) (*s_objet_resultat).objet))
312: .nombre_lignes * sizeof(real8 *))) == NULL)
313: {
314: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
315: return;
316: }
317:
318: for(i = 0; i < (*((struct_matrice *) (*s_objet_resultat).objet))
319: .nombre_lignes; i++)
320: {
321: if ((((real8 **) (*((struct_matrice *)
322: (*s_objet_resultat).objet)).tableau)[i] =
323: malloc((*((struct_matrice *)
324: (*s_objet_resultat).objet)).nombre_colonnes *
325: sizeof(real8))) == NULL)
326: {
327: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
328: return;
329: }
330:
331: for(j = 0; j < (*((struct_matrice *) (*s_objet_resultat).objet))
332: .nombre_colonnes; j++)
333: {
334: if (i != j)
335: {
336: ((real8 **) (*((struct_matrice *) (*s_objet_resultat)
337: .objet)).tableau)[i][j] = 0;
338: }
339: else
340: {
341: ((real8 **) (*((struct_matrice *) (*s_objet_resultat)
342: .objet)).tableau)[i][j] = ((real8 *)
343: (*((struct_vecteur *) (*s_objet_argument)
344: .objet)).tableau)[i];
345: }
346: }
347: }
348: }
349: else if ((*s_objet_argument).type == VCX)
350: {
351: if ((s_objet_resultat = allocation(s_etat_processus, MCX)) == NULL)
352: {
353: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
354: return;
355: }
356:
357: (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_lignes =
358: (*((struct_vecteur *) (*s_objet_argument).objet)).taille;
359: (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_colonnes =
360: (*((struct_vecteur *) (*s_objet_argument).objet)).taille;
361:
362: if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau =
363: malloc((*((struct_matrice *) (*s_objet_resultat).objet))
364: .nombre_lignes * sizeof(complex16 *))) == NULL)
365: {
366: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
367: return;
368: }
369:
370: for(i = 0; i < (*((struct_matrice *) (*s_objet_resultat).objet))
371: .nombre_lignes; i++)
372: {
373: if ((((complex16 **) (*((struct_matrice *)
374: (*s_objet_resultat).objet)).tableau)[i] =
375: malloc((*((struct_matrice *)
376: (*s_objet_resultat).objet)).nombre_colonnes *
377: sizeof(complex16))) == NULL)
378: {
379: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
380: return;
381: }
382:
383: for(j = 0; j < (*((struct_matrice *) (*s_objet_resultat).objet))
384: .nombre_colonnes; j++)
385: {
386: if (i != j)
387: {
388: ((complex16 **) (*((struct_matrice *) (*s_objet_resultat)
389: .objet)).tableau)[i][j].partie_reelle = 0;
390: ((complex16 **) (*((struct_matrice *) (*s_objet_resultat)
391: .objet)).tableau)[i][j].partie_imaginaire = 0;
392: }
393: else
394: {
395: ((complex16 **) (*((struct_matrice *) (*s_objet_resultat)
396: .objet)).tableau)[i][j] = ((complex16 *)
397: (*((struct_vecteur *) (*s_objet_argument)
398: .objet)).tableau)[i];
399: }
400: }
401: }
402: }
403:
404: /*
405: * Conversion impossible impossible
406: */
407:
408: else
409: {
410: liberation(s_etat_processus, s_objet_argument);
411:
412: (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
413: return;
414: }
415:
416: liberation(s_etat_processus, s_objet_argument);
417:
418: if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
419: s_objet_resultat) == d_erreur)
420: {
421: return;
422: }
423:
424: return;
425: }
426:
1.36 ! bertrand 427:
! 428: /*
! 429: ================================================================================
! 430: Fonction 'forall'
! 431: ================================================================================
! 432: Entrées : structure processus
! 433: --------------------------------------------------------------------------------
! 434: Sorties :
! 435: --------------------------------------------------------------------------------
! 436: Effets de bord : néant
! 437: ================================================================================
! 438: */
! 439:
! 440: void
! 441: instruction_forall(struct_processus *s_etat_processus)
! 442: {
! 443: struct_objet *s_objet_1;
! 444: struct_objet *s_objet_2;
! 445:
! 446: struct_variable s_variable;
! 447:
! 448: unsigned char instruction_valide;
! 449: unsigned char *tampon;
! 450: unsigned char test_instruction;
! 451:
! 452: (*s_etat_processus).erreur_execution = d_ex;
! 453:
! 454: if ((*s_etat_processus).affichage_arguments == 'Y')
! 455: {
! 456: printf("\n FORALL ");
! 457:
! 458: if ((*s_etat_processus).langue == 'F')
! 459: {
! 460: printf("(boucle définie sur un objet)\n\n");
! 461: }
! 462: else
! 463: {
! 464: printf("(define a object-based loop)\n\n");
! 465: }
! 466:
! 467: if ((*s_etat_processus).langue == 'F')
! 468: {
! 469: printf(" Utilisation :\n\n");
! 470: }
! 471: else
! 472: {
! 473: printf(" Usage:\n\n");
! 474: }
! 475:
! 476: printf(" %s/%s FORALL (variable)\n", d_LST, d_TAB);
! 477: printf(" (expression)\n");
! 478: printf(" NEXT\n");
! 479: return;
! 480: }
! 481: else if ((*s_etat_processus).test_instruction == 'Y')
! 482: {
! 483: (*s_etat_processus).nombre_arguments = -1;
! 484: return;
! 485: }
! 486:
! 487: if ((*s_etat_processus).erreur_systeme != d_es)
! 488: {
! 489: return;
! 490: }
! 491:
! 492: if (test_cfsf(s_etat_processus, 31) == d_vrai)
! 493: {
! 494: if (empilement_pile_last(s_etat_processus, 1) == d_erreur)
! 495: {
! 496: return;
! 497: }
! 498: }
! 499:
! 500: if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
! 501: &s_objet_1) == d_erreur)
! 502: {
! 503: (*s_etat_processus).erreur_execution = d_ex_manque_argument;
! 504: return;
! 505: }
! 506:
! 507: if (((*s_objet_1).type != LST) && ((*s_objet_1).type != TBL))
! 508: {
! 509: liberation(s_etat_processus, s_objet_1);
! 510:
! 511: (*s_etat_processus).erreur_execution = d_ex_erreur_traitement_boucle;
! 512: return;
! 513: }
! 514:
! 515: tampon = (*s_etat_processus).instruction_courante;
! 516: test_instruction = (*s_etat_processus).test_instruction;
! 517: instruction_valide = (*s_etat_processus).instruction_valide;
! 518: (*s_etat_processus).test_instruction = 'Y';
! 519:
! 520: empilement_pile_systeme(s_etat_processus);
! 521:
! 522: if ((*s_etat_processus).erreur_systeme != d_es)
! 523: {
! 524: return;
! 525: }
! 526:
! 527: if ((*s_etat_processus).mode_execution_programme == 'Y')
! 528: {
! 529: if (recherche_instruction_suivante(s_etat_processus) == d_erreur)
! 530: {
! 531: return;
! 532: }
! 533:
! 534: analyse(s_etat_processus, NULL);
! 535:
! 536: if ((*s_etat_processus).instruction_valide == 'Y')
! 537: {
! 538: liberation(s_etat_processus, s_objet_1);
! 539: free((*s_etat_processus).instruction_courante);
! 540: (*s_etat_processus).instruction_courante = tampon;
! 541:
! 542: depilement_pile_systeme(s_etat_processus);
! 543:
! 544: (*s_etat_processus).erreur_execution = d_ex_nom_reserve;
! 545: return;
! 546: }
! 547:
! 548: recherche_type(s_etat_processus);
! 549:
! 550: free((*s_etat_processus).instruction_courante);
! 551: (*s_etat_processus).instruction_courante = tampon;
! 552:
! 553: if ((*s_etat_processus).erreur_execution != d_ex)
! 554: {
! 555: depilement_pile_systeme(s_etat_processus);
! 556: liberation(s_etat_processus, s_objet_1);
! 557: return;
! 558: }
! 559:
! 560: if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
! 561: &s_objet_2) == d_erreur)
! 562: {
! 563: liberation(s_etat_processus, s_objet_1);
! 564:
! 565: depilement_pile_systeme(s_etat_processus);
! 566: (*s_etat_processus).erreur_execution = d_ex_manque_argument;
! 567: return;
! 568: }
! 569:
! 570: (*(*s_etat_processus).l_base_pile_systeme)
! 571: .origine_routine_evaluation = 'N';
! 572: }
! 573: else
! 574: {
! 575: if ((*s_etat_processus).expression_courante == NULL)
! 576: {
! 577: depilement_pile_systeme(s_etat_processus);
! 578:
! 579: (*s_etat_processus).erreur_execution = d_ex_manque_argument;
! 580: return;
! 581: }
! 582:
! 583: (*s_etat_processus).expression_courante = (*(*s_etat_processus)
! 584: .expression_courante).suivant;
! 585:
! 586: if ((s_objet_2 = copie_objet(s_etat_processus,
! 587: (*(*s_etat_processus).expression_courante)
! 588: .donnee, 'P')) == NULL)
! 589: {
! 590: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 591: return;
! 592: }
! 593:
! 594: (*(*s_etat_processus).l_base_pile_systeme)
! 595: .origine_routine_evaluation = 'Y';
! 596: }
! 597:
! 598: if ((*s_objet_2).type != NOM)
! 599: {
! 600: liberation(s_etat_processus, s_objet_1);
! 601: depilement_pile_systeme(s_etat_processus);
! 602:
! 603: (*s_etat_processus).erreur_execution = d_ex_erreur_traitement_boucle;
! 604: return;
! 605: }
! 606: else if ((*((struct_nom *) (*s_objet_2).objet)).symbole == d_vrai)
! 607: {
! 608: liberation(s_etat_processus, s_objet_1);
! 609: depilement_pile_systeme(s_etat_processus);
! 610:
! 611: (*s_etat_processus).erreur_execution = d_ex_erreur_traitement_boucle;
! 612: return;
! 613: }
! 614:
! 615: (*s_etat_processus).niveau_courant++;
! 616: (*(*s_etat_processus).l_base_pile_systeme).type_cloture = 'A';
! 617:
! 618: if ((s_variable.nom = malloc((strlen(
! 619: (*((struct_nom *) (*s_objet_2).objet)).nom) + 1) *
! 620: sizeof(unsigned char))) == NULL)
! 621: {
! 622: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 623: return;
! 624: }
! 625:
! 626: strcpy(s_variable.nom, (*((struct_nom *) (*s_objet_2).objet)).nom);
! 627: s_variable.niveau = (*s_etat_processus).niveau_courant;
! 628:
! 629: if ((*s_objet_1).type == LST)
! 630: {
! 631: if ((*s_objet_1).objet == NULL)
! 632: {
! 633: // La liste est vide. On doit sauter au NEXT correspondant.
! 634: liberation(s_etat_processus, s_objet_1);
! 635: liberation(s_etat_processus, s_objet_2);
! 636: free(s_variable.nom);
! 637:
! 638: if (((*(*s_etat_processus).l_base_pile_systeme)
! 639: .limite_indice_boucle = allocation(s_etat_processus, NON))
! 640: == NULL)
! 641: {
! 642: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 643: return;
! 644: }
! 645:
! 646: (*s_etat_processus).test_instruction = test_instruction;
! 647: (*s_etat_processus).instruction_valide = instruction_valide;
! 648:
! 649: instruction_cycle(s_etat_processus);
! 650: return;
! 651: }
! 652:
! 653: if ((s_variable.objet = copie_objet(s_etat_processus,
! 654: (*((struct_liste_chainee *) (*s_objet_1).objet)).donnee, 'P'))
! 655: == NULL)
! 656: {
! 657: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 658: return;
! 659: }
! 660:
! 661: // Mémorisation de la position courante dans la liste
! 662:
! 663: if (((*(*s_etat_processus).l_base_pile_systeme).indice_boucle =
! 664: allocation(s_etat_processus, NON)) == NULL)
! 665: {
! 666: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 667: return;
! 668: }
! 669:
! 670: (*(*(*s_etat_processus).l_base_pile_systeme).indice_boucle).objet =
! 671: (struct_objet *) (*s_objet_1).objet;
! 672: }
! 673: else
! 674: {
! 675: if ((*((struct_tableau *) (*s_objet_1).objet)).nombre_elements == 0)
! 676: {
! 677: // La table est vide, il convient de sauter au NEXT correspondant.
! 678: liberation(s_etat_processus, s_objet_1);
! 679: liberation(s_etat_processus, s_objet_2);
! 680: free(s_variable.nom);
! 681:
! 682: if (((*(*s_etat_processus).l_base_pile_systeme)
! 683: .limite_indice_boucle = allocation(s_etat_processus, NON))
! 684: == NULL)
! 685: {
! 686: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 687: return;
! 688: }
! 689:
! 690: (*s_etat_processus).test_instruction = test_instruction;
! 691: (*s_etat_processus).instruction_valide = instruction_valide;
! 692:
! 693: instruction_cycle(s_etat_processus);
! 694: return;
! 695: }
! 696:
! 697: if ((s_variable.objet = copie_objet(s_etat_processus,
! 698: (*((struct_tableau *) (*s_objet_1).objet)).elements[0], 'P'))
! 699: == NULL)
! 700: {
! 701: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 702: return;
! 703: }
! 704:
! 705: // Création d'un objet de type entier contenant la position
! 706: // de l'élément courant dans la table.
! 707:
! 708: if (((*(*s_etat_processus).l_base_pile_systeme).indice_boucle =
! 709: allocation(s_etat_processus, INT)) == NULL)
! 710: {
! 711: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 712: return;
! 713: }
! 714:
! 715: (*((integer8 *) (*(*(*s_etat_processus).l_base_pile_systeme)
! 716: .indice_boucle).objet)) = 0;
! 717: }
! 718:
! 719: if (creation_variable(s_etat_processus, &s_variable, 'V', 'P') == d_erreur)
! 720: {
! 721: return;
! 722: }
! 723:
! 724: liberation(s_etat_processus, s_objet_2);
! 725:
! 726: (*s_etat_processus).test_instruction = test_instruction;
! 727: (*s_etat_processus).instruction_valide = instruction_valide;
! 728:
! 729: (*(*s_etat_processus).l_base_pile_systeme).limite_indice_boucle = s_objet_1;
! 730:
! 731: if ((*s_etat_processus).mode_execution_programme == 'Y')
! 732: {
! 733: (*(*s_etat_processus).l_base_pile_systeme).adresse_retour =
! 734: (*s_etat_processus).position_courante;
! 735: }
! 736: else
! 737: {
! 738: (*(*s_etat_processus).l_base_pile_systeme).pointeur_objet_retour =
! 739: (*s_etat_processus).expression_courante;
! 740: }
! 741:
! 742: if (((*(*s_etat_processus).l_base_pile_systeme).nom_variable =
! 743: malloc((strlen(s_variable.nom) + 1) *
! 744: sizeof(unsigned char))) == NULL)
! 745: {
! 746: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 747: return;
! 748: }
! 749:
! 750: strcpy((*(*s_etat_processus).l_base_pile_systeme).nom_variable,
! 751: s_variable.nom);
! 752:
! 753: return;
! 754: }
! 755:
1.1 bertrand 756: // vim: ts=4
CVSweb interface <joel.bertrand@systella.fr>