Annotation of rpl/src/instructions_n2.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 '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: logical1 presence_variable;
! 153:
! 154: long i;
! 155:
! 156: struct_objet *s_objet_resultat;
! 157:
! 158: (*s_etat_processus).erreur_execution = d_ex;
! 159:
! 160: if ((*s_etat_processus).affichage_arguments == 'Y')
! 161: {
! 162: printf("\n NS ");
! 163:
! 164: if ((*s_etat_processus).langue == 'F')
! 165: {
! 166: printf("(nombre de données dans la matrice statistique\n\n");
! 167: }
! 168: else
! 169: {
! 170: printf("(number of data elements in statistical matrix)\n\n");
! 171: }
! 172:
! 173: printf("-> 1: %s\n", d_INT);
! 174:
! 175: return;
! 176: }
! 177: else if ((*s_etat_processus).test_instruction == 'Y')
! 178: {
! 179: (*s_etat_processus).nombre_arguments = -1;
! 180: return;
! 181: }
! 182:
! 183: if (test_cfsf(s_etat_processus, 31) == d_vrai)
! 184: {
! 185: if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
! 186: {
! 187: return;
! 188: }
! 189: }
! 190:
! 191: if ((s_objet_resultat = allocation(s_etat_processus, INT)) == NULL)
! 192: {
! 193: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 194: return;
! 195: }
! 196:
! 197: if (recherche_variable(s_etat_processus, ds_sdat) == d_faux)
! 198: {
! 199: /*
! 200: * Aucune variable SIGMA
! 201: */
! 202:
! 203: (*s_etat_processus).erreur_systeme = d_es;
! 204: (*((integer8 *) (*s_objet_resultat).objet)) = 0;
! 205: }
! 206: else
! 207: {
! 208: /*
! 209: * Il existe une variable locale SIGMA. Reste à vérifier l'existence
! 210: * d'une variable SIGMA globale...
! 211: */
! 212:
! 213: i = (*s_etat_processus).position_variable_courante;
! 214: presence_variable = d_faux;
! 215:
! 216: while(i >= 0)
! 217: {
! 218: if ((strcmp((*s_etat_processus).s_liste_variables[i].nom,
! 219: ds_sdat) == 0) && ((*s_etat_processus)
! 220: .s_liste_variables[i].niveau == 1))
! 221: {
! 222: presence_variable = d_vrai;
! 223: break;
! 224: }
! 225:
! 226: i--;
! 227: }
! 228:
! 229: if (presence_variable == d_faux)
! 230: {
! 231: (*((integer8 *) (*s_objet_resultat).objet)) = 0;
! 232: }
! 233: else
! 234: {
! 235: (*s_etat_processus).position_variable_courante = i;
! 236:
! 237: if (((*s_etat_processus).s_liste_variables[i]).objet == NULL)
! 238: {
! 239: liberation(s_etat_processus, s_objet_resultat);
! 240:
! 241: (*s_etat_processus).erreur_execution = d_ex_variable_partagee;
! 242: return;
! 243: }
! 244:
! 245: if (((*((*s_etat_processus).s_liste_variables
! 246: [(*s_etat_processus).position_variable_courante].objet))
! 247: .type != MIN) && ((*((*s_etat_processus)
! 248: .s_liste_variables[(*s_etat_processus)
! 249: .position_variable_courante].objet)).type != MRL))
! 250: {
! 251: liberation(s_etat_processus, s_objet_resultat);
! 252:
! 253: (*s_etat_processus).erreur_execution =
! 254: d_ex_matrice_statistique_invalide;
! 255: return;
! 256: }
! 257:
! 258: (*((integer8 *) (*s_objet_resultat).objet)) =
! 259: (*((struct_matrice *) (*((*s_etat_processus)
! 260: .s_liste_variables[(*s_etat_processus)
! 261: .position_variable_courante].objet)).objet))
! 262: .nombre_lignes;
! 263: }
! 264: }
! 265:
! 266: if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
! 267: s_objet_resultat) == d_erreur)
! 268: {
! 269: return;
! 270: }
! 271:
! 272: return;
! 273: }
! 274:
! 275:
! 276: /*
! 277: ================================================================================
! 278: Fonction 'newplane'
! 279: ================================================================================
! 280: Entrées : structure processus
! 281: --------------------------------------------------------------------------------
! 282: Sorties :
! 283: --------------------------------------------------------------------------------
! 284: Effets de bord : néant
! 285: ================================================================================
! 286: */
! 287:
! 288: void
! 289: instruction_newplane(struct_processus *s_etat_processus)
! 290: {
! 291: (*s_etat_processus).erreur_execution = d_ex;
! 292:
! 293: if ((*s_etat_processus).affichage_arguments == 'Y')
! 294: {
! 295: printf("\n NEWPLANE ");
! 296:
! 297: if ((*s_etat_processus).langue == 'F')
! 298: {
! 299: printf("(nouveau plan graphique)\n\n");
! 300: printf(" Aucun argument\n");
! 301: }
! 302: else
! 303: {
! 304: printf("(new graphic plane)\n\n");
! 305: printf(" No argument\n");
! 306: }
! 307:
! 308: return;
! 309: }
! 310: else if ((*s_etat_processus).test_instruction == 'Y')
! 311: {
! 312: (*s_etat_processus).nombre_arguments = -1;
! 313: return;
! 314: }
! 315:
! 316: if (test_cfsf(s_etat_processus, 31) == d_vrai)
! 317: {
! 318: if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
! 319: {
! 320: return;
! 321: }
! 322: }
! 323:
! 324: (*s_etat_processus).requete_nouveau_plan = d_vrai;
! 325:
! 326: return;
! 327: }
! 328:
! 329:
! 330: /*
! 331: ================================================================================
! 332: Fonction 'nrproc'
! 333: ================================================================================
! 334: Entrées : structure processus
! 335: --------------------------------------------------------------------------------
! 336: Sorties :
! 337: --------------------------------------------------------------------------------
! 338: Effets de bord : néant
! 339: ================================================================================
! 340: */
! 341:
! 342: void
! 343: instruction_nrproc(struct_processus *s_etat_processus)
! 344: {
! 345: (*s_etat_processus).erreur_execution = d_ex;
! 346:
! 347: if ((*s_etat_processus).affichage_arguments == 'Y')
! 348: {
! 349: printf("\n NRPROC ");
! 350:
! 351: if ((*s_etat_processus).langue == 'F')
! 352: {
! 353: printf("(nouvelle racine des processus)\n\n");
! 354: printf(" Aucun argument\n");
! 355: }
! 356: else
! 357: {
! 358: printf("(new root process)\n\n");
! 359: printf(" No argument\n");
! 360: }
! 361:
! 362: return;
! 363: }
! 364: else if ((*s_etat_processus).test_instruction == 'Y')
! 365: {
! 366: (*s_etat_processus).nombre_arguments = -1;
! 367: return;
! 368: }
! 369:
! 370: if (test_cfsf(s_etat_processus, 31) == d_vrai)
! 371: {
! 372: if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
! 373: {
! 374: return;
! 375: }
! 376: }
! 377:
! 378: (*s_etat_processus).var_volatile_processus_pere = -1;
! 379: (*s_etat_processus).pid_processus_pere = getpid();
! 380: (*s_etat_processus).tid_processus_pere = pthread_self();
! 381:
! 382: return;
! 383: }
! 384:
! 385: // vim: ts=4
CVSweb interface <joel.bertrand@systella.fr>