Annotation of rpl/modules/sets/types.rplc, revision 1.2

1.1       bertrand    1: #define TYPE_DECLARATION
                      2: #include "src/rplexternals.h"
                      3: #include "sets.h"
                      4: 
                      5: // Les objets de type ensemble sont délimités par ([ ]) et ne contiennent
                      6: // que des entiers.
                      7: 
1.2     ! bertrand    8: // Attention : ces fonctions sont à écrire directement en C et non
        !             9: // en RPL/C car elles interviennent dans le noyau RPL/2.
        !            10: 
1.1       bertrand   11: declareTypeExtension(parse)
                     12:    if ((*rptr) == '(')
                     13:    {
                     14:        rptr++;
                     15: 
                     16:        if ((*rptr) == '[')
                     17:        {
                     18:            rptr++;
                     19:            while((*rptr) != 0)
                     20:            {
                     21:                switch (*rptr)
                     22:                {
                     23:                    case '0':
                     24:                    case '1':
                     25:                    case '2':
                     26:                    case '3':
                     27:                    case '4':
                     28:                    case '5':
                     29:                    case '6':
                     30:                    case '7':
                     31:                    case '8':
                     32:                    case '9':
                     33:                    case ' ':
                     34:                    {
                     35:                        break;
                     36:                    }
                     37: 
                     38:                    case ']':
                     39:                    {
                     40:                        rptr++;
                     41: 
                     42:                        if ((*rptr) == ')')
                     43:                        {
                     44:                            rptr++;
                     45:                            return(sizeOfParse);
                     46:                        }
                     47:                        else
                     48:                        {
                     49:                            parseError;
                     50:                        }
                     51:                    }
                     52: 
                     53:                    default:
                     54:                    {
                     55:                        parseError;
                     56:                    }
                     57:                }
                     58: 
                     59:                rptr++;
                     60:            }
                     61:        }
                     62:    }
                     63: endTypeExtension
                     64: 
                     65: declareTypeExtension(new)
1.2     ! bertrand   66:    // Si le premier caractère de la chaîne est '(' et que le dernier est ')',
        !            67:    // on les retire.
        !            68: 
        !            69:    char *tmp;
        !            70: 
        !            71: printf("<1>\n");
        !            72:    if (((*iptr) == '(') && ((*(iptr + strlen(iptr) - 1)) == ')'))
        !            73:    {
        !            74:        if ((tmp = malloc((strlen(iptr) + 1) * sizeof(unsigned char)))
        !            75:                == NULL)
        !            76:        {
        !            77: printf("<2>\n");
        !            78:            typeError;
        !            79:        }
        !            80: printf("<3>\n");
        !            81: 
        !            82:        // Sauvegarde de l'instruction courante.
        !            83:        strcpy(tmp, iptr);
        !            84: 
        !            85:        // Création d'une nouvelle instruction courante amputée de ses premier
        !            86:        // et dernier caractères.
        !            87:        memmove(iptr, iptr + 1, strlen(iptr) - 2);
        !            88:        *(iptr + strlen(iptr) - 2) = 0;
        !            89: 
        !            90: printf("<4>\n");
        !            91:        searchType;
        !            92: printf("<5>\n");
        !            93: 
        !            94:        // Restauration de l'instruction courante
        !            95:        free(iptr);
        !            96: printf("<6>\n");
        !            97:        iptr = tmp;
        !            98: 
        !            99: printf("<7>\n");
        !           100:        if (((*arg) = malloc(sizeof(integer8))) == NULL)
        !           101:        {
        !           102:            typeError;
        !           103:        }
        !           104: 
        !           105:        (*((integer8 *) arg)) = 10;
        !           106: printf("<8>\n");
        !           107:        instruction_drop(s_etat_processus);
        !           108: printf("<9>\n");
        !           109:        typeFound(ISET);
        !           110:    }
        !           111: 
        !           112: printf("<10>\n");
        !           113:    typeError;
1.1       bertrand  114: endTypeExtension
                    115: 
1.2     ! bertrand  116: declareTypeExtension(disp)
        !           117:    (*arg) = malloc(10);
        !           118:    strcpy((*arg), "ici");
1.1       bertrand  119: endTypeExtension
                    120: 
1.2     ! bertrand  121: declareTypeExtension(dup)
1.1       bertrand  122: endTypeExtension
                    123: 
                    124: declareTypeExtension(drop)
                    125: endTypeExtension

CVSweb interface <joel.bertrand@systella.fr>