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:
8: // Attention : ces fonctions sont à écrire directement en C et non
9: // en RPL/C car elles interviennent dans le noyau RPL/2.
10:
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)
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;
114: endTypeExtension
115:
116: declareTypeExtension(disp)
117: (*arg) = malloc(10);
118: strcpy((*arg), "ici");
119: endTypeExtension
120:
121: declareTypeExtension(dup)
122: endTypeExtension
123:
124: declareTypeExtension(drop)
125: endTypeExtension
CVSweb interface <joel.bertrand@systella.fr>