1 | #ifndef BLACKBOX_H |
---|
2 | #define BLACKBOX_H |
---|
3 | #include <omalloc.h> |
---|
4 | #include <kernel/structs.h> |
---|
5 | #include <kernel/febase.h> |
---|
6 | |
---|
7 | void removeBlackboxStuff(const int rt); |
---|
8 | |
---|
9 | struct blackbox_struct; |
---|
10 | |
---|
11 | typedef struct blackbox_struct blackbox; |
---|
12 | |
---|
13 | struct blackbox_struct |
---|
14 | { |
---|
15 | /// destroy the object: b points to blackbox_struct, d to data |
---|
16 | void (*blackbox_destroy)(blackbox *b, void *d); |
---|
17 | /// convert the object to a string (which should be freed by omFree) |
---|
18 | char *(*blackbox_String)(blackbox *b,void *d); |
---|
19 | /// print the object: default: use string representation |
---|
20 | void (*blackbox_Print)(blackbox *b,void *d); |
---|
21 | /// construct the default object |
---|
22 | void *(*blackbox_Init)(blackbox *b); |
---|
23 | /// copy the object: b points to blackbox_struct, d to data |
---|
24 | void *(*blackbox_Copy)(blackbox *b,void *d); |
---|
25 | /// interpreter assign: l:=r |
---|
26 | BOOLEAN (*blackbox_Assign)(leftv l, leftv r); |
---|
27 | /// interpreter: unary operations op(r), r(), ... |
---|
28 | BOOLEAN (*blackbox_Op1)(int op,leftv l, leftv r); |
---|
29 | /// interpreter: binary operations: op(r1,r2), r1 op r2,... |
---|
30 | BOOLEAN (*blackbox_Op2)(int op,leftv l, leftv r1,leftv r2); |
---|
31 | /// interpreter: tertiary op: op(r1,r2,r3) |
---|
32 | BOOLEAN (*blackbox_Op3)(int op,leftv l, leftv r1,leftv r2, leftv r3); |
---|
33 | /// interpreter: operations with undefined number of operands |
---|
34 | BOOLEAN (*blackbox_OpM)(int op,leftv l, leftv r); |
---|
35 | /// additional type info |
---|
36 | void *data; |
---|
37 | /// addtinional gneral properties |
---|
38 | char like_lists; // 1:blackbox is only a wrapper for lists |
---|
39 | } ; |
---|
40 | /// default procedure blackboxDefaultOp1, to be called as "default:" branch |
---|
41 | BOOLEAN blackboxDefaultOp1(int op,leftv l, leftv r); |
---|
42 | |
---|
43 | /// return the structure to the type given by t |
---|
44 | blackbox* getBlackboxStuff(const int t); |
---|
45 | /// return the name to the type given by t (r/o) |
---|
46 | const char * getBlackboxName(const int t); |
---|
47 | /// used by scanner: returns ROOTDECL for known types (and the type number in t) |
---|
48 | int blackboxIsCmd(const char *n, int & tok); |
---|
49 | /// define a new type |
---|
50 | int setBlackboxStuff(blackbox *bb,const char *name); |
---|
51 | |
---|
52 | /// list all defined type (for debugging) |
---|
53 | void printBlackboxTypes(); |
---|
54 | |
---|
55 | #endif |
---|