![]() ![]() | ![]() |
Passage de la branche 4.1 en branche stable.
1: /* 2: ================================================================================ 3: RPL/2 (R) version 4.1.0 4: Copyright (C) 1989-2011 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 'num' 29: ================================================================================ 30: Entrées : structure processus 31: -------------------------------------------------------------------------------- 32: Sorties : 33: -------------------------------------------------------------------------------- 34: Effets de bord : néant 35: ================================================================================ 36: */ 37: 38: void 39: instruction_num(struct_processus *s_etat_processus) 40: { 41: struct_objet *s_objet_argument; 42: struct_objet *s_objet_resultat; 43: 44: (*s_etat_processus).erreur_execution = d_ex; 45: 46: if ((*s_etat_processus).affichage_arguments == 'Y') 47: { 48: printf("\n NUM "); 49: 50: if ((*s_etat_processus).langue == 'F') 51: { 52: printf("(conversion d'un caractère en entier)\n\n"); 53: } 54: else 55: { 56: printf("(character to integer conversion)\n\n"); 57: } 58: 59: printf(" 1: %s\n", d_CHN); 60: printf("-> 1: 0 <= %s <= 255\n", d_INT); 61: 62: return; 63: } 64: else if ((*s_etat_processus).test_instruction == 'Y') 65: { 66: (*s_etat_processus).nombre_arguments = -1; 67: return; 68: } 69: 70: if (test_cfsf(s_etat_processus, 31) == d_vrai) 71: { 72: if (empilement_pile_last(s_etat_processus, 1) == d_erreur) 73: { 74: return; 75: } 76: } 77: 78: if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile), 79: &s_objet_argument) == d_erreur) 80: { 81: (*s_etat_processus).erreur_execution = d_ex_manque_argument; 82: return; 83: } 84: 85: /* 86: -------------------------------------------------------------------------------- 87: Chaîne de caractères 88: -------------------------------------------------------------------------------- 89: */ 90: 91: if ((*s_objet_argument).type == CHN) 92: { 93: if (strlen((unsigned char *) (*s_objet_argument).objet) != 1) 94: { 95: liberation(s_etat_processus, s_objet_argument); 96: 97: (*s_etat_processus).erreur_execution = d_ex_argument_invalide; 98: return; 99: } 100: 101: if ((s_objet_resultat = allocation(s_etat_processus, INT)) == NULL) 102: { 103: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; 104: return; 105: } 106: 107: (*((integer8 *) (*s_objet_resultat).objet)) = 108: (integer8) ((unsigned char *) (*s_objet_argument).objet)[0]; 109: } 110: 111: /* 112: -------------------------------------------------------------------------------- 113: Type invalide 114: -------------------------------------------------------------------------------- 115: */ 116: 117: else 118: { 119: liberation(s_etat_processus, s_objet_argument); 120: 121: (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument; 122: return; 123: } 124: 125: liberation(s_etat_processus, s_objet_argument); 126: 127: if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile), 128: s_objet_resultat) == d_erreur) 129: { 130: return; 131: } 132: 133: return; 134: } 135: 136: 137: /* 138: ================================================================================ 139: Fonction 'ns' 140: ================================================================================ 141: Entrées : structure processus 142: -------------------------------------------------------------------------------- 143: Sorties : 144: -------------------------------------------------------------------------------- 145: Effets de bord : néant 146: ================================================================================ 147: */ 148: 149: void 150: instruction_ns(struct_processus *s_etat_processus) 151: { 152: struct_objet *s_objet_resultat; 153: 154: (*s_etat_processus).erreur_execution = d_ex; 155: 156: if ((*s_etat_processus).affichage_arguments == 'Y') 157: { 158: printf("\n NS "); 159: 160: if ((*s_etat_processus).langue == 'F') 161: { 162: printf("(nombre de données dans la matrice statistique\n\n"); 163: } 164: else 165: { 166: printf("(number of data elements in statistical matrix)\n\n"); 167: } 168: 169: printf("-> 1: %s\n", d_INT); 170: 171: return; 172: } 173: else if ((*s_etat_processus).test_instruction == 'Y') 174: { 175: (*s_etat_processus).nombre_arguments = -1; 176: return; 177: } 178: 179: if (test_cfsf(s_etat_processus, 31) == d_vrai) 180: { 181: if (empilement_pile_last(s_etat_processus, 0) == d_erreur) 182: { 183: return; 184: } 185: } 186: 187: if ((s_objet_resultat = allocation(s_etat_processus, INT)) == NULL) 188: { 189: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; 190: return; 191: } 192: 193: if (recherche_variable_globale(s_etat_processus, ds_sdat) == d_faux) 194: { 195: /* 196: * Aucune variable SIGMA 197: */ 198: 199: (*s_etat_processus).erreur_systeme = d_es; 200: (*s_etat_processus).erreur_execution = d_ex; 201: 202: (*((integer8 *) (*s_objet_resultat).objet)) = 0; 203: } 204: else 205: { 206: if (((*(*(*s_etat_processus).pointeur_variable_courante).objet) 207: .type != MIN) && ((*(*(*s_etat_processus) 208: .pointeur_variable_courante).objet).type != MRL)) 209: { 210: liberation(s_etat_processus, s_objet_resultat); 211: 212: (*s_etat_processus).erreur_execution = 213: d_ex_matrice_statistique_invalide; 214: return; 215: } 216: 217: (*((integer8 *) (*s_objet_resultat).objet)) = 218: (*((struct_matrice *) (*(*(*s_etat_processus) 219: .pointeur_variable_courante).objet).objet)).nombre_lignes; 220: } 221: 222: if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile), 223: s_objet_resultat) == d_erreur) 224: { 225: return; 226: } 227: 228: return; 229: } 230: 231: 232: /* 233: ================================================================================ 234: Fonction 'newplane' 235: ================================================================================ 236: Entrées : structure processus 237: -------------------------------------------------------------------------------- 238: Sorties : 239: -------------------------------------------------------------------------------- 240: Effets de bord : néant 241: ================================================================================ 242: */ 243: 244: void 245: instruction_newplane(struct_processus *s_etat_processus) 246: { 247: (*s_etat_processus).erreur_execution = d_ex; 248: 249: if ((*s_etat_processus).affichage_arguments == 'Y') 250: { 251: printf("\n NEWPLANE "); 252: 253: if ((*s_etat_processus).langue == 'F') 254: { 255: printf("(nouveau plan graphique)\n\n"); 256: printf(" Aucun argument\n"); 257: } 258: else 259: { 260: printf("(new graphic plane)\n\n"); 261: printf(" No argument\n"); 262: } 263: 264: return; 265: } 266: else if ((*s_etat_processus).test_instruction == 'Y') 267: { 268: (*s_etat_processus).nombre_arguments = -1; 269: return; 270: } 271: 272: if (test_cfsf(s_etat_processus, 31) == d_vrai) 273: { 274: if (empilement_pile_last(s_etat_processus, 0) == d_erreur) 275: { 276: return; 277: } 278: } 279: 280: (*s_etat_processus).requete_nouveau_plan = d_vrai; 281: 282: return; 283: } 284: 285: 286: /* 287: ================================================================================ 288: Fonction 'nrproc' 289: ================================================================================ 290: Entrées : structure processus 291: -------------------------------------------------------------------------------- 292: Sorties : 293: -------------------------------------------------------------------------------- 294: Effets de bord : néant 295: ================================================================================ 296: */ 297: 298: void 299: instruction_nrproc(struct_processus *s_etat_processus) 300: { 301: (*s_etat_processus).erreur_execution = d_ex; 302: 303: if ((*s_etat_processus).affichage_arguments == 'Y') 304: { 305: printf("\n NRPROC "); 306: 307: if ((*s_etat_processus).langue == 'F') 308: { 309: printf("(nouvelle racine des processus)\n\n"); 310: printf(" Aucun argument\n"); 311: } 312: else 313: { 314: printf("(new root process)\n\n"); 315: printf(" No argument\n"); 316: } 317: 318: return; 319: } 320: else if ((*s_etat_processus).test_instruction == 'Y') 321: { 322: (*s_etat_processus).nombre_arguments = -1; 323: return; 324: } 325: 326: if (test_cfsf(s_etat_processus, 31) == d_vrai) 327: { 328: if (empilement_pile_last(s_etat_processus, 0) == d_erreur) 329: { 330: return; 331: } 332: } 333: 334: (*s_etat_processus).var_volatile_processus_pere = -1; 335: (*s_etat_processus).pid_processus_pere = getpid(); 336: (*s_etat_processus).tid_processus_pere = pthread_self(); 337: 338: return; 339: } 340: 341: // vim: ts=4