Annotation of rpl/src/instructions_f4.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 '->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:
! 427: // vim: ts=4
CVSweb interface <joel.bertrand@systella.fr>