#define TYPE_DECLARATION #include "src/rplexternals.h" #include "sets.h" // Les objets de type ensemble sont délimités par ([ ]) et ne contiennent // que des entiers. // Attention : ces fonctions sont à écrire directement en C et non // en RPL/C car elles interviennent dans le noyau RPL/2. declareTypeExtension(parse) if ((*rptr) == '(') { rptr++; if ((*rptr) == '[') { rptr++; while((*rptr) != 0) { switch (*rptr) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case ' ': { break; } case ']': { rptr++; if ((*rptr) == ')') { rptr++; return(sizeOfParse); } else { parseError; } } default: { parseError; } } rptr++; } } } endTypeExtension declareTypeExtension(new) // Si le premier caractère de la chaîne est '(' et que le dernier est ')', // on les retire. char *tmp; printf("<1>\n"); if (((*iptr) == '(') && ((*(iptr + strlen(iptr) - 1)) == ')')) { if ((tmp = malloc((strlen(iptr) + 1) * sizeof(unsigned char))) == NULL) { printf("<2>\n"); typeError; } printf("<3>\n"); // Sauvegarde de l'instruction courante. strcpy(tmp, iptr); // Création d'une nouvelle instruction courante amputée de ses premier // et dernier caractères. memmove(iptr, iptr + 1, strlen(iptr) - 2); *(iptr + strlen(iptr) - 2) = 0; printf("<4>\n"); searchType; printf("<5>\n"); // Restauration de l'instruction courante free(iptr); printf("<6>\n"); iptr = tmp; printf("<7>\n"); if (((*arg) = malloc(sizeof(integer8))) == NULL) { typeError; } (*((integer8 *) arg)) = 10; printf("<8>\n"); instruction_drop(s_etat_processus); printf("<9>\n"); typeFound(ISET); } printf("<10>\n"); typeError; endTypeExtension declareTypeExtension(disp) (*arg) = malloc(10); strcpy((*arg), "ici"); endTypeExtension declareTypeExtension(dup) endTypeExtension declareTypeExtension(drop) endTypeExtension