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