Annotation of rpl/src/instructions_c3.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 'clmf'
! 29: ================================================================================
! 30: Entrées : structure processus
! 31: --------------------------------------------------------------------------------
! 32: Sorties :
! 33: --------------------------------------------------------------------------------
! 34: Effets de bord : néant
! 35: ================================================================================
! 36: */
! 37:
! 38: void
! 39: instruction_clmf(struct_processus *s_etat_processus)
! 40: {
! 41: (*s_etat_processus).erreur_execution = d_ex;
! 42:
! 43: if ((*s_etat_processus).affichage_arguments == 'Y')
! 44: {
! 45: printf("\n CLMF ");
! 46:
! 47: if ((*s_etat_processus).langue == 'F')
! 48: {
! 49: printf("(affiche la pile opérationnelle)\n\n");
! 50: printf(" Aucun argument\n");
! 51: }
! 52: else
! 53: {
! 54: printf("(print stack)\n\n");
! 55: printf(" No argument\n");
! 56: }
! 57:
! 58: return;
! 59: }
! 60: else if ((*s_etat_processus).test_instruction == 'Y')
! 61: {
! 62: (*s_etat_processus).nombre_arguments = -1;
! 63: return;
! 64: }
! 65:
! 66: affichage_pile(s_etat_processus, (*s_etat_processus).l_base_pile, 1);
! 67:
! 68: return;
! 69: }
! 70:
! 71:
! 72: /*
! 73: ================================================================================
! 74: Fonction 'cont'
! 75: ================================================================================
! 76: Entrées :
! 77: --------------------------------------------------------------------------------
! 78: Sorties :
! 79: --------------------------------------------------------------------------------
! 80: Effets de bord : néant
! 81: ================================================================================
! 82: */
! 83:
! 84: void
! 85: instruction_cont(struct_processus *s_etat_processus)
! 86: {
! 87: (*s_etat_processus).erreur_execution = d_ex;
! 88:
! 89: if ((*s_etat_processus).affichage_arguments == 'Y')
! 90: {
! 91: printf("\n CONT ");
! 92:
! 93: if ((*s_etat_processus).langue == 'F')
! 94: {
! 95: printf("(continue un programme arrêté par HALT)\n\n");
! 96: printf(" Aucun argument\n");
! 97: }
! 98: else
! 99: {
! 100: printf("(continue a program stopped by HALT)\n\n");
! 101: printf(" No argument\n");
! 102: }
! 103:
! 104: return;
! 105: }
! 106: else if ((*s_etat_processus).test_instruction == 'Y')
! 107: {
! 108: (*s_etat_processus).nombre_arguments = -1;
! 109: return;
! 110: }
! 111:
! 112: (*s_etat_processus).debug_programme = d_faux;
! 113: (*s_etat_processus).execution_pas_suivant = d_vrai;
! 114:
! 115: return;
! 116: }
! 117:
! 118:
! 119: /*
! 120: ================================================================================
! 121: Fonction 'cnrm'
! 122: ================================================================================
! 123: Entrées : pointeur sur une structure struct_processus
! 124: --------------------------------------------------------------------------------
! 125: Sorties :
! 126: --------------------------------------------------------------------------------
! 127: Effets de bord : néant
! 128: ================================================================================
! 129: */
! 130:
! 131: void
! 132: instruction_cnrm(struct_processus *s_etat_processus)
! 133: {
! 134: integer8 cumul_entier;
! 135: integer8 entier_courant;
! 136: integer8 tampon;
! 137:
! 138: logical1 depassement;
! 139: logical1 erreur_memoire;
! 140:
! 141: real8 cumul_reel;
! 142:
! 143: struct_objet *s_objet_argument;
! 144: struct_objet *s_objet_resultat;
! 145:
! 146: unsigned long i;
! 147: unsigned long j;
! 148:
! 149: void *accumulateur;
! 150:
! 151: (*s_etat_processus).erreur_execution = d_ex;
! 152:
! 153: if ((*s_etat_processus).affichage_arguments == 'Y')
! 154: {
! 155: printf("\n CNRM ");
! 156:
! 157: if ((*s_etat_processus).langue == 'F')
! 158: {
! 159: printf("(norme de colonne)\n\n");
! 160: }
! 161: else
! 162: {
! 163: printf("(column norm)\n\n");
! 164: }
! 165:
! 166: printf(" 1: %s, %s\n", d_VIN, d_MIN);
! 167: printf("-> 1: %s, %s\n\n", d_INT, d_REL);
! 168:
! 169: printf(" 1: %s, %s, %s, %s\n", d_VRL, d_VCX, d_MRL, d_MCX);
! 170: printf("-> 1: %s\n", d_REL);
! 171:
! 172: return;
! 173: }
! 174: else if ((*s_etat_processus).test_instruction == 'Y')
! 175: {
! 176: (*s_etat_processus).nombre_arguments = -1;
! 177: return;
! 178: }
! 179:
! 180: if (test_cfsf(s_etat_processus, 31) == d_vrai)
! 181: {
! 182: if (empilement_pile_last(s_etat_processus, 1) == d_erreur)
! 183: {
! 184: return;
! 185: }
! 186: }
! 187:
! 188: if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
! 189: &s_objet_argument) == d_erreur)
! 190: {
! 191: (*s_etat_processus).erreur_execution = d_ex_manque_argument;
! 192: return;
! 193: }
! 194:
! 195: /*
! 196: --------------------------------------------------------------------------------
! 197: Traitement des vecteurs
! 198: --------------------------------------------------------------------------------
! 199: */
! 200:
! 201: if ((*s_objet_argument).type == VIN)
! 202: {
! 203: cumul_entier = 0;
! 204: depassement = d_faux;
! 205:
! 206: for(i = 0; i < (*((struct_vecteur *) (*s_objet_argument).objet)).taille;
! 207: i++)
! 208: {
! 209: entier_courant = abs(((integer8 *) (*((struct_vecteur *)
! 210: (*s_objet_argument).objet)).tableau)[i]);
! 211:
! 212: if (depassement_addition(&cumul_entier, &entier_courant,
! 213: &tampon) == d_erreur)
! 214: {
! 215: depassement = d_vrai;
! 216: break;
! 217: }
! 218:
! 219: cumul_entier = tampon;
! 220: }
! 221:
! 222: if (depassement == d_faux)
! 223: {
! 224: if ((s_objet_resultat = allocation(s_etat_processus, INT))
! 225: == NULL)
! 226: {
! 227: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 228: return;
! 229: }
! 230:
! 231: (*((integer8 *) (*s_objet_resultat).objet)) = cumul_entier;
! 232: }
! 233: else
! 234: {
! 235: cumul_reel = 0;
! 236:
! 237: for(i = 0; i < (*((struct_vecteur *) (*s_objet_argument).objet))
! 238: .taille; i++)
! 239: {
! 240: cumul_reel += (real8) abs(((integer8 *) (*((struct_vecteur *)
! 241: (*s_objet_argument).objet)).tableau)[i]);
! 242: }
! 243:
! 244: if ((s_objet_resultat = allocation(s_etat_processus, REL))
! 245: == NULL)
! 246: {
! 247: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 248: return;
! 249: }
! 250:
! 251: (*((real8 *) (*s_objet_resultat).objet)) = cumul_reel;
! 252: }
! 253: }
! 254: else if ((*s_objet_argument).type == VRL)
! 255: {
! 256: if ((s_objet_resultat = allocation(s_etat_processus, REL))
! 257: == NULL)
! 258: {
! 259: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 260: return;
! 261: }
! 262:
! 263: if ((accumulateur = malloc((*((struct_vecteur *)
! 264: (*s_objet_argument).objet)).taille * sizeof(real8))) == NULL)
! 265: {
! 266: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 267: return;
! 268: }
! 269:
! 270: for(i = 0; i < (*((struct_vecteur *) (*s_objet_argument).objet)).taille;
! 271: i++)
! 272: {
! 273: ((real8 *) accumulateur)[i] =
! 274: fabs(((real8 *) (*((struct_vecteur *)
! 275: (*s_objet_argument).objet)).tableau)[i]);
! 276: }
! 277:
! 278: (*((real8 *) (*s_objet_resultat).objet)) = sommation_vecteur_reel(
! 279: accumulateur, &((*((struct_vecteur *) (*s_objet_argument)
! 280: .objet)).taille), &erreur_memoire);
! 281:
! 282: if (erreur_memoire == d_vrai)
! 283: {
! 284: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 285: return;
! 286: }
! 287:
! 288: free(accumulateur);
! 289: }
! 290: else if ((*s_objet_argument).type == VCX)
! 291: {
! 292: if ((s_objet_resultat = allocation(s_etat_processus, REL))
! 293: == NULL)
! 294: {
! 295: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 296: return;
! 297: }
! 298:
! 299: if ((accumulateur = malloc((*((struct_vecteur *)
! 300: (*s_objet_argument).objet)).taille * sizeof(real8))) == NULL)
! 301: {
! 302: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 303: return;
! 304: }
! 305:
! 306: for(i = 0; i < (*((struct_vecteur *) (*s_objet_argument).objet)).taille;
! 307: i++)
! 308: {
! 309: f77absc_(&(((struct_complexe16 *) (*((struct_vecteur *)
! 310: (*s_objet_argument).objet)).tableau)[i]),
! 311: &(((real8 *) accumulateur)[i]));
! 312: }
! 313:
! 314: (*((real8 *) (*s_objet_resultat).objet)) = sommation_vecteur_reel(
! 315: accumulateur, &((*((struct_vecteur *) (*s_objet_argument)
! 316: .objet)).taille), &erreur_memoire);
! 317:
! 318: if (erreur_memoire == d_vrai)
! 319: {
! 320: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 321: return;
! 322: }
! 323:
! 324: free(accumulateur);
! 325: }
! 326:
! 327: /*
! 328: --------------------------------------------------------------------------------
! 329: Traitement des matrices
! 330: --------------------------------------------------------------------------------
! 331: */
! 332:
! 333: else if ((*s_objet_argument).type == MIN)
! 334: {
! 335: if ((s_objet_resultat = allocation(s_etat_processus, INT))
! 336: == NULL)
! 337: {
! 338: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 339: return;
! 340: }
! 341:
! 342: depassement = d_faux;
! 343: cumul_entier = 0;
! 344:
! 345: for(i = 0; i < (*((struct_matrice *) (*s_objet_argument).objet))
! 346: .nombre_lignes; i++)
! 347: {
! 348: entier_courant = abs(((integer8 **)
! 349: (*((struct_matrice *) (*s_objet_argument).objet))
! 350: .tableau)[i][0]);
! 351:
! 352: if (depassement_addition(&cumul_entier, &entier_courant,
! 353: &tampon) == d_erreur)
! 354: {
! 355: depassement = d_vrai;
! 356: break;
! 357: }
! 358:
! 359: cumul_entier = tampon;
! 360: }
! 361:
! 362: if (depassement == d_faux)
! 363: {
! 364: (*((integer8 *) (*s_objet_resultat).objet)) = cumul_entier;
! 365:
! 366: for(j = 1; j < (*((struct_matrice *) (*s_objet_argument).objet))
! 367: .nombre_colonnes; j++)
! 368: {
! 369: cumul_entier = 0;
! 370:
! 371: for(i = 0; i < (*((struct_matrice *) (*s_objet_argument).objet))
! 372: .nombre_lignes; i++)
! 373: {
! 374: entier_courant = abs(((integer8 **) (*((struct_matrice *)
! 375: (*s_objet_argument).objet)).tableau)[i][j]);
! 376:
! 377: if (depassement_addition(&cumul_entier, &entier_courant,
! 378: &tampon) == d_erreur)
! 379: {
! 380: depassement = d_vrai;
! 381: break;
! 382: }
! 383:
! 384: cumul_entier = tampon;
! 385: }
! 386:
! 387: if (depassement == d_vrai)
! 388: {
! 389: break;
! 390: }
! 391:
! 392: if (cumul_entier > (*((integer8 *) (*s_objet_resultat).objet)))
! 393: {
! 394: (*((integer8 *) (*s_objet_resultat).objet)) = cumul_entier;
! 395: }
! 396: }
! 397: }
! 398:
! 399: if (depassement == d_vrai)
! 400: {
! 401: /*
! 402: * Dépassement : il faut refaire le calcul en real*8...
! 403: */
! 404:
! 405: free((*s_objet_resultat).objet);
! 406: (*s_objet_resultat).type = REL;
! 407:
! 408: if (((*s_objet_resultat).objet = malloc(sizeof(real8))) == NULL)
! 409: {
! 410: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 411: return;
! 412: }
! 413:
! 414: if ((accumulateur = malloc((*((struct_matrice *)
! 415: (*s_objet_argument).objet)).nombre_lignes * sizeof(real8)))
! 416: == NULL)
! 417: {
! 418: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 419: return;
! 420: }
! 421:
! 422: (*((real8 *) (*s_objet_resultat).objet)) = 0;
! 423:
! 424: for(j = 0; j < (*((struct_matrice *) (*s_objet_argument).objet))
! 425: .nombre_colonnes; j++)
! 426: {
! 427: for(i = 0; i < (*((struct_matrice *) (*s_objet_argument).objet))
! 428: .nombre_lignes; i++)
! 429: {
! 430: ((real8 *) accumulateur)[i] = fabs((real8) ((integer8 **)
! 431: (*((struct_matrice *)
! 432: (*s_objet_argument).objet)).tableau)[i][j]);
! 433: }
! 434:
! 435: cumul_reel = sommation_vecteur_reel(accumulateur,
! 436: &((*((struct_matrice *) (*s_objet_argument).objet))
! 437: .nombre_lignes), &erreur_memoire);
! 438:
! 439: if (erreur_memoire == d_vrai)
! 440: {
! 441: (*s_etat_processus).erreur_systeme =
! 442: d_es_allocation_memoire;
! 443: return;
! 444: }
! 445:
! 446: if (cumul_reel > (*((real8 *) (*s_objet_resultat).objet)))
! 447: {
! 448: (*((real8 *) (*s_objet_resultat).objet)) = cumul_reel;
! 449: }
! 450: }
! 451:
! 452: free(accumulateur);
! 453: }
! 454: }
! 455: else if ((*s_objet_argument).type == MRL)
! 456: {
! 457: if ((s_objet_resultat = allocation(s_etat_processus, REL))
! 458: == NULL)
! 459: {
! 460: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 461: return;
! 462: }
! 463:
! 464: if ((accumulateur = malloc((*((struct_matrice *)
! 465: (*s_objet_argument).objet)).nombre_lignes * sizeof(real8)))
! 466: == NULL)
! 467: {
! 468: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 469: return;
! 470: }
! 471:
! 472: (*((real8 *) (*s_objet_resultat).objet)) = 0;
! 473:
! 474: for(j = 0; j < (*((struct_matrice *) (*s_objet_argument).objet))
! 475: .nombre_colonnes; j++)
! 476: {
! 477: for(i = 0; i < (*((struct_matrice *) (*s_objet_argument).objet))
! 478: .nombre_lignes; i++)
! 479: {
! 480: ((real8 *) accumulateur)[i] = fabs(((real8 **)
! 481: (*((struct_matrice *)
! 482: (*s_objet_argument).objet)).tableau)[i][j]);
! 483: }
! 484:
! 485: cumul_reel = sommation_vecteur_reel(accumulateur,
! 486: &((*((struct_matrice *) (*s_objet_argument).objet))
! 487: .nombre_lignes), &erreur_memoire);
! 488:
! 489: if (erreur_memoire == d_vrai)
! 490: {
! 491: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 492: return;
! 493: }
! 494:
! 495: if (cumul_reel > (*((real8 *) (*s_objet_resultat).objet)))
! 496: {
! 497: (*((real8 *) (*s_objet_resultat).objet)) = cumul_reel;
! 498: }
! 499: }
! 500:
! 501: free(accumulateur);
! 502: }
! 503: else if ((*s_objet_argument).type == MCX)
! 504: {
! 505: if ((s_objet_resultat = allocation(s_etat_processus, REL))
! 506: == NULL)
! 507: {
! 508: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 509: return;
! 510: }
! 511:
! 512: if ((accumulateur = malloc((*((struct_matrice *)
! 513: (*s_objet_argument).objet)).nombre_lignes * sizeof(real8)))
! 514: == NULL)
! 515: {
! 516: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 517: return;
! 518: }
! 519:
! 520: (*((real8 *) (*s_objet_resultat).objet)) = 0;
! 521:
! 522: for(j = 0; j < (*((struct_matrice *) (*s_objet_argument).objet))
! 523: .nombre_colonnes; j++)
! 524: {
! 525: for(i = 0; i < (*((struct_matrice *) (*s_objet_argument).objet))
! 526: .nombre_lignes; i++)
! 527: {
! 528: f77absc_(&(((struct_complexe16 **) (*((struct_matrice *)
! 529: (*s_objet_argument).objet)).tableau)[i][j]),
! 530: &(((real8 *) accumulateur)[i]));
! 531: }
! 532:
! 533: cumul_reel = sommation_vecteur_reel(accumulateur,
! 534: &((*((struct_matrice *) (*s_objet_argument).objet))
! 535: .nombre_lignes), &erreur_memoire);
! 536:
! 537: if (erreur_memoire == d_vrai)
! 538: {
! 539: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 540: return;
! 541: }
! 542:
! 543: if (cumul_reel > (*((real8 *) (*s_objet_resultat).objet)))
! 544: {
! 545: (*((real8 *) (*s_objet_resultat).objet)) = cumul_reel;
! 546: }
! 547: }
! 548:
! 549: free(accumulateur);
! 550: }
! 551:
! 552: /*
! 553: --------------------------------------------------------------------------------
! 554: Traitement impossible du fait du type de l'argument
! 555: --------------------------------------------------------------------------------
! 556: */
! 557:
! 558: else
! 559: {
! 560: liberation(s_etat_processus, s_objet_argument);
! 561:
! 562: (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
! 563: return;
! 564: }
! 565:
! 566: liberation(s_etat_processus, s_objet_argument);
! 567:
! 568: if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
! 569: s_objet_resultat) == d_erreur)
! 570: {
! 571: return;
! 572: }
! 573:
! 574: return;
! 575: }
! 576:
! 577:
! 578: /*
! 579: ================================================================================
! 580: Fonction 'chr'
! 581: ================================================================================
! 582: Entrées : structure processus
! 583: --------------------------------------------------------------------------------
! 584: Sorties :
! 585: --------------------------------------------------------------------------------
! 586: Effets de bord : néant
! 587: ================================================================================
! 588: */
! 589:
! 590: void
! 591: instruction_chr(struct_processus *s_etat_processus)
! 592: {
! 593: struct_objet *s_objet_argument;
! 594: struct_objet *s_objet_resultat;
! 595:
! 596: (*s_etat_processus).erreur_execution = d_ex;
! 597:
! 598: if ((*s_etat_processus).affichage_arguments == 'Y')
! 599: {
! 600: printf("\n CHR ");
! 601:
! 602: if ((*s_etat_processus).langue == 'F')
! 603: {
! 604: printf("(conversion d'un entier en caractère)\n\n");
! 605: }
! 606: else
! 607: {
! 608: printf("(integer to character conversion)\n\n");
! 609: }
! 610:
! 611: printf(" 1: 0 <= %s <= 255\n", d_INT);
! 612: printf("-> 1: %s\n", d_CHN);
! 613:
! 614: return;
! 615: }
! 616: else if ((*s_etat_processus).test_instruction == 'Y')
! 617: {
! 618: (*s_etat_processus).nombre_arguments = -1;
! 619: return;
! 620: }
! 621:
! 622: if (test_cfsf(s_etat_processus, 31) == d_vrai)
! 623: {
! 624: if (empilement_pile_last(s_etat_processus, 1) == d_erreur)
! 625: {
! 626: return;
! 627: }
! 628: }
! 629:
! 630: if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
! 631: &s_objet_argument) == d_erreur)
! 632: {
! 633: (*s_etat_processus).erreur_execution = d_ex_manque_argument;
! 634: return;
! 635: }
! 636:
! 637: /*
! 638: --------------------------------------------------------------------------------
! 639: Entier
! 640: --------------------------------------------------------------------------------
! 641: */
! 642:
! 643: if ((*s_objet_argument).type == INT)
! 644: {
! 645: if (((*((integer8 *) (*s_objet_argument).objet)) < 0) ||
! 646: ((*((integer8 *) (*s_objet_argument).objet)) > 255))
! 647: {
! 648: liberation(s_etat_processus, s_objet_argument);
! 649:
! 650: (*s_etat_processus).erreur_execution = d_ex_argument_invalide;
! 651: return;
! 652: }
! 653:
! 654: if ((s_objet_resultat = allocation(s_etat_processus, CHN)) == NULL)
! 655: {
! 656: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 657: return;
! 658: }
! 659:
! 660: if (((*s_objet_resultat).objet = malloc(2 * sizeof(unsigned char)))
! 661: == NULL)
! 662: {
! 663: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 664: return;
! 665: }
! 666:
! 667: ((unsigned char *) (*s_objet_resultat).objet)[0] = (*((integer8 *)
! 668: (*s_objet_argument).objet));
! 669: ((unsigned char *) (*s_objet_resultat).objet)[1] = d_code_fin_chaine;
! 670: }
! 671:
! 672: /*
! 673: --------------------------------------------------------------------------------
! 674: Type invalide
! 675: --------------------------------------------------------------------------------
! 676: */
! 677:
! 678: else
! 679: {
! 680: liberation(s_etat_processus, s_objet_argument);
! 681:
! 682: (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
! 683: return;
! 684: }
! 685:
! 686: liberation(s_etat_processus, s_objet_argument);
! 687:
! 688: if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
! 689: s_objet_resultat) == d_erreur)
! 690: {
! 691: return;
! 692: }
! 693:
! 694: return;
! 695: }
! 696:
! 697:
! 698: /*
! 699: ================================================================================
! 700: Fonction 'cr'
! 701: ================================================================================
! 702: Entrées : structure processus
! 703: --------------------------------------------------------------------------------
! 704: Sorties :
! 705: --------------------------------------------------------------------------------
! 706: Effets de bord : néant
! 707: ================================================================================
! 708: */
! 709:
! 710: void
! 711: instruction_cr(struct_processus *s_etat_processus)
! 712: {
! 713: struct_objet s_objet;
! 714:
! 715: unsigned char commande[] = "\\par";
! 716:
! 717: (*s_etat_processus).erreur_execution = d_ex;
! 718:
! 719: if ((*s_etat_processus).affichage_arguments == 'Y')
! 720: {
! 721: printf("\n CR ");
! 722:
! 723: if ((*s_etat_processus).langue == 'F')
! 724: {
! 725: printf("(retour à la ligne dans la sortie imprimée)\n\n");
! 726: printf(" Aucun argument\n");
! 727: }
! 728: else
! 729: {
! 730: printf("(carriage return in the printer output)\n\n");
! 731: printf(" No argument\n");
! 732: }
! 733:
! 734: return;
! 735: }
! 736: else if ((*s_etat_processus).test_instruction == 'Y')
! 737: {
! 738: (*s_etat_processus).nombre_arguments = -1;
! 739: return;
! 740: }
! 741:
! 742: if (test_cfsf(s_etat_processus, 31) == d_vrai)
! 743: {
! 744: if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
! 745: {
! 746: return;
! 747: }
! 748: }
! 749:
! 750: s_objet.objet = commande;
! 751: s_objet.type = CHN;
! 752:
! 753: formateur_tex(s_etat_processus, &s_objet, 'N');
! 754: return;
! 755: }
! 756:
! 757:
! 758: /*
! 759: ================================================================================
! 760: Fonction 'centr'
! 761: ================================================================================
! 762: Entrées : pointeur sur une structure struct_processus
! 763: --------------------------------------------------------------------------------
! 764: Sorties :
! 765: --------------------------------------------------------------------------------
! 766: Effets de bord : néant
! 767: ================================================================================
! 768: */
! 769:
! 770: void
! 771: instruction_centr(struct_processus *s_etat_processus)
! 772: {
! 773: real8 x_max;
! 774: real8 x_min;
! 775: real8 y_max;
! 776: real8 y_min;
! 777:
! 778: struct_objet *s_objet_argument;
! 779:
! 780: (*s_etat_processus).erreur_execution = d_ex;
! 781:
! 782:
! 783: if ((*s_etat_processus).affichage_arguments == 'Y')
! 784: {
! 785: printf("\n CENTR ");
! 786:
! 787: if ((*s_etat_processus).langue == 'F')
! 788: {
! 789: printf("(centre des graphiques)\n\n");
! 790: }
! 791: else
! 792: {
! 793: printf("(center of the graphics)\n\n");
! 794: }
! 795:
! 796: printf(" 1: %s\n", d_CPL);
! 797:
! 798: return;
! 799: }
! 800: else if ((*s_etat_processus).test_instruction == 'Y')
! 801: {
! 802: (*s_etat_processus).nombre_arguments = -1;
! 803: return;
! 804: }
! 805:
! 806: if (test_cfsf(s_etat_processus, 31) == d_vrai)
! 807: {
! 808: if (empilement_pile_last(s_etat_processus, 1) == d_erreur)
! 809: {
! 810: return;
! 811: }
! 812: }
! 813:
! 814: if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
! 815: &s_objet_argument) == d_erreur)
! 816: {
! 817: (*s_etat_processus).erreur_execution = d_ex_manque_argument;
! 818: return;
! 819: }
! 820:
! 821: if ((*s_objet_argument).type == CPL)
! 822: {
! 823: if ((*s_etat_processus).systeme_axes == 0)
! 824: {
! 825: x_min = (*s_etat_processus).x_min;
! 826: x_max = (*s_etat_processus).x_max;
! 827:
! 828: y_min = (*s_etat_processus).y_min;
! 829: y_max = (*s_etat_processus).y_max;
! 830:
! 831: (*s_etat_processus).x_min = (*((complex16 *)
! 832: (*s_objet_argument).objet))
! 833: .partie_reelle - ((x_max - x_min) / ((double) 2));
! 834: (*s_etat_processus).x_max = (*((complex16 *)
! 835: (*s_objet_argument).objet))
! 836: .partie_reelle + ((x_max - x_min) / ((double) 2));
! 837:
! 838: (*s_etat_processus).y_min = (*((complex16 *)
! 839: (*s_objet_argument).objet))
! 840: .partie_imaginaire - ((y_max - y_min) / ((double) 2));
! 841: (*s_etat_processus).y_max = (*((complex16 *)
! 842: (*s_objet_argument).objet))
! 843: .partie_imaginaire + ((y_max - y_min) / ((double) 2));
! 844: }
! 845: else
! 846: {
! 847: x_min = (*s_etat_processus).x2_min;
! 848: x_max = (*s_etat_processus).x2_max;
! 849:
! 850: y_min = (*s_etat_processus).y2_min;
! 851: y_max = (*s_etat_processus).y2_max;
! 852:
! 853: (*s_etat_processus).x2_min = (*((complex16 *)
! 854: (*s_objet_argument).objet))
! 855: .partie_reelle - ((x_max - x_min) / ((double) 2));
! 856: (*s_etat_processus).x2_max = (*((complex16 *)
! 857: (*s_objet_argument).objet))
! 858: .partie_reelle + ((x_max - x_min) / ((double) 2));
! 859:
! 860: (*s_etat_processus).y2_min = (*((complex16 *)
! 861: (*s_objet_argument).objet))
! 862: .partie_imaginaire - ((y_max - y_min) / ((double) 2));
! 863: (*s_etat_processus).y2_max = (*((complex16 *)
! 864: (*s_objet_argument).objet))
! 865: .partie_imaginaire + ((y_max - y_min) / ((double) 2));
! 866: }
! 867: }
! 868: else
! 869: {
! 870: liberation(s_etat_processus, s_objet_argument);
! 871:
! 872: (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
! 873: return;
! 874: }
! 875:
! 876: liberation(s_etat_processus, s_objet_argument);
! 877:
! 878: if (test_cfsf(s_etat_processus, 52) == d_faux)
! 879: {
! 880: if ((*s_etat_processus).fichiers_graphiques != NULL)
! 881: {
! 882: appel_gnuplot(s_etat_processus, 'N');
! 883: }
! 884: }
! 885:
! 886: return;
! 887: }
! 888:
! 889:
! 890: /*
! 891: ================================================================================
! 892: Fonction 'cls'
! 893: ================================================================================
! 894: Entrées : pointeur sur une structure struct_processus
! 895: --------------------------------------------------------------------------------
! 896: Sorties :
! 897: --------------------------------------------------------------------------------
! 898: Effets de bord : néant
! 899: ================================================================================
! 900: */
! 901:
! 902: void
! 903: instruction_cls(struct_processus *s_etat_processus)
! 904: {
! 905: (*s_etat_processus).erreur_execution = d_ex;
! 906:
! 907: if ((*s_etat_processus).affichage_arguments == 'Y')
! 908: {
! 909: printf("\n CLS ");
! 910:
! 911: if ((*s_etat_processus).langue == 'F')
! 912: {
! 913: printf("(effacement de la matrice statistique)\n\n");
! 914: printf(" Aucun argument\n");
! 915: }
! 916: else
! 917: {
! 918: printf("(purge of the statistical matrix)\n\n");
! 919: printf(" No argument\n");
! 920: }
! 921:
! 922: return;
! 923: }
! 924: else if ((*s_etat_processus).test_instruction == 'Y')
! 925: {
! 926: (*s_etat_processus).nombre_arguments = -1;
! 927: return;
! 928: }
! 929:
! 930: if (test_cfsf(s_etat_processus, 31) == d_vrai)
! 931: {
! 932: if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
! 933: {
! 934: return;
! 935: }
! 936: }
! 937:
! 938: if (retrait_variable(s_etat_processus, ds_sdat, 'G') == d_erreur)
! 939: {
! 940: (*s_etat_processus).erreur_systeme = d_es;
! 941: return;
! 942: }
! 943:
! 944: return;
! 945: }
! 946:
! 947:
! 948: /*
! 949: ================================================================================
! 950: Fonction 'comb'
! 951: ================================================================================
! 952: Entrées : structure processus
! 953: --------------------------------------------------------------------------------
! 954: Sorties :
! 955: --------------------------------------------------------------------------------
! 956: Effets de bord : néant
! 957: ================================================================================
! 958: */
! 959:
! 960: void
! 961: instruction_comb(struct_processus *s_etat_processus)
! 962: {
! 963: integer8 k;
! 964: integer8 n;
! 965: integer8 cint_max;
! 966:
! 967: real8 c;
! 968:
! 969: struct_objet *s_objet_argument_1;
! 970: struct_objet *s_objet_argument_2;
! 971: struct_objet *s_objet_resultat;
! 972:
! 973: unsigned long i;
! 974:
! 975: (*s_etat_processus).erreur_execution = d_ex;
! 976:
! 977: if ((*s_etat_processus).affichage_arguments == 'Y')
! 978: {
! 979: printf("\n COMB ");
! 980:
! 981: if ((*s_etat_processus).langue == 'F')
! 982: {
! 983: printf("(combinaison)\n\n");
! 984: }
! 985: else
! 986: {
! 987: printf("(combinaison)\n\n");
! 988: }
! 989:
! 990: printf(" 1: %s\n", d_INT);
! 991: printf("-> 1: %s, %s\n", d_INT, d_REL);
! 992:
! 993: return;
! 994: }
! 995: else if ((*s_etat_processus).test_instruction == 'Y')
! 996: {
! 997: (*s_etat_processus).nombre_arguments = 2;
! 998: return;
! 999: }
! 1000:
! 1001: if (test_cfsf(s_etat_processus, 31) == d_vrai)
! 1002: {
! 1003: if (empilement_pile_last(s_etat_processus, 2) == d_erreur)
! 1004: {
! 1005: return;
! 1006: }
! 1007: }
! 1008:
! 1009: if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
! 1010: &s_objet_argument_1) == d_erreur)
! 1011: {
! 1012: (*s_etat_processus).erreur_execution = d_ex_manque_argument;
! 1013: return;
! 1014: }
! 1015:
! 1016: if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
! 1017: &s_objet_argument_2) == d_erreur)
! 1018: {
! 1019: liberation(s_etat_processus, s_objet_argument_1);
! 1020:
! 1021: (*s_etat_processus).erreur_execution = d_ex_manque_argument;
! 1022: return;
! 1023: }
! 1024:
! 1025: if (((*s_objet_argument_1).type == INT) &&
! 1026: ((*s_objet_argument_2).type == INT))
! 1027: {
! 1028: n = (*((integer8 *) (*s_objet_argument_2).objet));
! 1029: k = (*((integer8 *) (*s_objet_argument_1).objet));
! 1030:
! 1031: if ((n < 0) || (k < 0) || (k > n))
! 1032: {
! 1033: liberation(s_etat_processus, s_objet_argument_1);
! 1034: liberation(s_etat_processus, s_objet_argument_2);
! 1035:
! 1036: (*s_etat_processus).erreur_execution = d_ex_argument_invalide;
! 1037: return;
! 1038: }
! 1039:
! 1040: f90combinaison(&n, &k, &c);
! 1041:
! 1042: for(i = 1, cint_max = 1; i < (8 * sizeof(integer8)) - 1; cint_max =
! 1043: (cint_max << 1) + 1, i++);
! 1044:
! 1045: if (c > cint_max)
! 1046: {
! 1047: if ((s_objet_resultat = allocation(s_etat_processus, REL))
! 1048: == NULL)
! 1049: {
! 1050: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1051: return;
! 1052: }
! 1053:
! 1054: (*((real8 *) (*s_objet_resultat).objet)) = c;
! 1055: }
! 1056: else
! 1057: {
! 1058: if ((s_objet_resultat = allocation(s_etat_processus, INT))
! 1059: == NULL)
! 1060: {
! 1061: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 1062: return;
! 1063: }
! 1064:
! 1065: if (fabs(c - floor(c)) < fabs(ceil(c) - c))
! 1066: {
! 1067: (*((integer8 *) (*s_objet_resultat).objet)) =
! 1068: (integer8) floor(c);
! 1069: }
! 1070: else
! 1071: {
! 1072: (*((integer8 *) (*s_objet_resultat).objet)) =
! 1073: 1 + (integer8) floor(c);
! 1074: }
! 1075: }
! 1076: }
! 1077: else
! 1078: {
! 1079: liberation(s_etat_processus, s_objet_argument_1);
! 1080: liberation(s_etat_processus, s_objet_argument_2);
! 1081:
! 1082: (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
! 1083: return;
! 1084: }
! 1085:
! 1086: liberation(s_etat_processus, s_objet_argument_1);
! 1087: liberation(s_etat_processus, s_objet_argument_2);
! 1088:
! 1089: if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
! 1090: s_objet_resultat) == d_erreur)
! 1091: {
! 1092: return;
! 1093: }
! 1094:
! 1095: return;
! 1096: }
! 1097:
! 1098:
! 1099: /*
! 1100: ================================================================================
! 1101: Fonction 'cols'
! 1102: ================================================================================
! 1103: Entrées : pointeur sur une structure struct_processus
! 1104: --------------------------------------------------------------------------------
! 1105: Sorties :
! 1106: --------------------------------------------------------------------------------
! 1107: Effets de bord : néant
! 1108: ================================================================================
! 1109: */
! 1110:
! 1111: void
! 1112: instruction_cols(struct_processus *s_etat_processus)
! 1113: {
! 1114: struct_objet *s_objet_argument_1;
! 1115: struct_objet *s_objet_argument_2;
! 1116:
! 1117: (*s_etat_processus).erreur_execution = d_ex;
! 1118:
! 1119: if ((*s_etat_processus).affichage_arguments == 'Y')
! 1120: {
! 1121: printf("\n COLS ");
! 1122:
! 1123: if ((*s_etat_processus).langue == 'F')
! 1124: {
! 1125: printf("(définition des colonnes X et Y de la matrice "
! 1126: "statistique)\n\n");
! 1127: }
! 1128: else
! 1129: {
! 1130: printf("(definition of X and Y columns in statistical matrix)\n\n");
! 1131: }
! 1132:
! 1133: printf(" 2: %s\n", d_INT);
! 1134: printf(" 1: %s\n", d_INT);
! 1135:
! 1136: return;
! 1137: }
! 1138: else if ((*s_etat_processus).test_instruction == 'Y')
! 1139: {
! 1140: (*s_etat_processus).nombre_arguments = -1;
! 1141: return;
! 1142: }
! 1143:
! 1144: if (test_cfsf(s_etat_processus, 31) == d_vrai)
! 1145: {
! 1146: if (empilement_pile_last(s_etat_processus, 2) == d_erreur)
! 1147: {
! 1148: return;
! 1149: }
! 1150: }
! 1151:
! 1152: if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
! 1153: &s_objet_argument_1) == d_erreur)
! 1154: {
! 1155: (*s_etat_processus).erreur_execution = d_ex_manque_argument;
! 1156: return;
! 1157: }
! 1158:
! 1159: if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
! 1160: &s_objet_argument_2) == d_erreur)
! 1161: {
! 1162: liberation(s_etat_processus, s_objet_argument_1);
! 1163:
! 1164: (*s_etat_processus).erreur_execution = d_ex_manque_argument;
! 1165: return;
! 1166: }
! 1167:
! 1168: if (((*s_objet_argument_1).type == INT) &&
! 1169: ((*s_objet_argument_2).type == INT))
! 1170: {
! 1171: if (((*((integer8 *) (*s_objet_argument_1).objet)) <= 0) ||
! 1172: ((*((integer8 *) (*s_objet_argument_2).objet)) <= 0))
! 1173: {
! 1174: liberation(s_etat_processus, s_objet_argument_1);
! 1175: liberation(s_etat_processus, s_objet_argument_2);
! 1176:
! 1177: (*s_etat_processus).erreur_execution = d_ex_argument_invalide;
! 1178: return;
! 1179: }
! 1180:
! 1181: (*s_etat_processus).colonne_statistique_1 =
! 1182: (*((integer8 *) (*s_objet_argument_2).objet));
! 1183: (*s_etat_processus).colonne_statistique_2 =
! 1184: (*((integer8 *) (*s_objet_argument_1).objet));
! 1185: }
! 1186: else
! 1187: {
! 1188: liberation(s_etat_processus, s_objet_argument_1);
! 1189: liberation(s_etat_processus, s_objet_argument_2);
! 1190:
! 1191: (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
! 1192: return;
! 1193: }
! 1194:
! 1195: liberation(s_etat_processus, s_objet_argument_1);
! 1196: liberation(s_etat_processus, s_objet_argument_2);
! 1197:
! 1198: return;
! 1199: }
! 1200:
! 1201: // vim: ts=4
CVSweb interface <joel.bertrand@systella.fr>