Annotation of rpl/src/instructions_y1.c, revision 1.65

1.1       bertrand    1: /*
                      2: ================================================================================
1.64      bertrand    3:   RPL/2 (R) version 4.1.32
1.65    ! bertrand    4:   Copyright (C) 1989-2020 Dr. BERTRAND Joël
1.1       bertrand    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: 
1.11      bertrand   23: #include "rpl-conv.h"
1.1       bertrand   24: 
                     25: 
                     26: /*
                     27: ================================================================================
                     28:   Fonction 'ycol'
                     29: ================================================================================
                     30:   Entrées : pointeur sur une structure struct_processus
                     31: --------------------------------------------------------------------------------
                     32:   Sorties :
                     33: --------------------------------------------------------------------------------
                     34:   Effets de bord : néant
                     35: ================================================================================
                     36: */
                     37: 
                     38: void
                     39: instruction_ycol(struct_processus *s_etat_processus)
                     40: {
                     41:    struct_objet            *s_objet_argument;
                     42: 
                     43:    (*s_etat_processus).erreur_execution = d_ex;
                     44: 
                     45:    if ((*s_etat_processus).affichage_arguments == 'Y')
                     46:    {
                     47:        printf("\n  YCOL ");
                     48: 
                     49:        if ((*s_etat_processus).langue == 'F')
                     50:        {
                     51:            printf("(définition de la colonne statistique Y)\n\n");
                     52:        }
                     53:        else
                     54:        {
                     55:            printf("(definition of statistical Y column)\n\n");
                     56:        }
                     57: 
                     58:        printf("    1: %s\n", d_INT);
                     59: 
                     60:        return;
                     61:    }
                     62:    else if ((*s_etat_processus).test_instruction == 'Y')
                     63:    {
                     64:        (*s_etat_processus).nombre_arguments = -1;
                     65:        return;
                     66:    }
                     67: 
                     68:    if (test_cfsf(s_etat_processus, 31) == d_vrai)
                     69:    {
                     70:        if (empilement_pile_last(s_etat_processus, 1) == d_erreur)
                     71:        {
                     72:            return;
                     73:        }
                     74:    }
                     75: 
                     76:    if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
                     77:            &s_objet_argument) == d_erreur)
                     78:    {
                     79:        (*s_etat_processus).erreur_execution = d_ex_manque_argument;
                     80:        return;
                     81:    }
                     82: 
                     83:    if ((*s_objet_argument).type == INT)
                     84:    {
                     85:        if ((*((integer8 *) (*s_objet_argument).objet)) <= 0)
                     86:        {
                     87:            liberation(s_etat_processus, s_objet_argument);
                     88: 
                     89:            (*s_etat_processus).erreur_execution = d_ex_argument_invalide;
                     90:            return;
                     91:        }
                     92: 
                     93:        (*s_etat_processus).colonne_statistique_2 =
                     94:                (*((integer8 *) (*s_objet_argument).objet));
                     95:    }
                     96:    else
                     97:    {
                     98:        liberation(s_etat_processus, s_objet_argument);
                     99: 
                    100:        (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
                    101:        return;
                    102:    }
                    103: 
                    104:    liberation(s_etat_processus, s_objet_argument);
                    105: 
                    106:    return;
                    107: }
                    108: 
                    109: 
                    110: /*
                    111: ================================================================================
                    112:   Fonction 'yield'
                    113: ================================================================================
                    114:   Entrées : pointeur sur une structure struct_processus
                    115: --------------------------------------------------------------------------------
                    116:   Sorties :
                    117: --------------------------------------------------------------------------------
                    118:   Effets de bord : néant
                    119: ================================================================================
                    120: */
                    121: 
                    122: void
                    123: instruction_yield(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  YIELD ");
                    130: 
                    131:        if ((*s_etat_processus).langue == 'F')
                    132:        {
1.44      bertrand  133:            printf("(libération du processeur)\n\n");
1.1       bertrand  134:            printf("  Aucun argument\n");
                    135:        }
                    136:        else
                    137:        {
                    138:            printf("(yield the processor)\n\n");
                    139:            printf("  No argument\n");
                    140:        }
                    141: 
                    142:        return;
                    143:    }
                    144:    else if ((*s_etat_processus).test_instruction == 'Y')
                    145:    {
                    146:        (*s_etat_processus).nombre_arguments = -1;
                    147:        return;
                    148:    }
                    149: 
                    150:    if ((*s_etat_processus).profilage == d_vrai)
                    151:    {
                    152:        profilage(s_etat_processus, "YIELD");
                    153:    }
                    154: 
                    155:    if (test_cfsf(s_etat_processus, 31) == d_vrai)
                    156:    {
                    157:        if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
                    158:        {
                    159:            return;
                    160:        }
                    161:    }
                    162: 
                    163:    sched_yield();
                    164: 
                    165:    if ((*s_etat_processus).profilage == d_vrai)
                    166:    {
                    167:        profilage(s_etat_processus, NULL);
                    168:    }
                    169: 
                    170:    return;
                    171: }
                    172: // vim: ts=4

CVSweb interface <joel.bertrand@systella.fr>