35 fprintf(stderr,
"ERROR : %s (%p)\n", s, t);
38 #define ERROR(s,t) error(s,t); exit(1)
49 if (
isNil(pl))
return false;
64 if (
left(
hd(pl)) == key)
return tl(pl);
81 ERROR(
"the node of the tree is not a symbol", k1);
84 ERROR(
"the node of the tree is not a symbol", k2);
88 return strcmp(
name(s1),
name(s2)) < 0;
94 if (
isNil(pl))
return false;
95 if (
left(
hd(pl)) == key) { val =
right(
hd(pl));
return true; }
123 if (
left(
hd(pl)) == key)
return tl(pl);
150 if ( !
isUiFolder(folder, label, content)) { fprintf(stderr,
"ERROR in addFolder : not a folder\n"); }
159 if ( !
isUiFolder(folder, label, content)) { fprintf(stderr,
"ERROR in addFolder : not a folder\n"); }
166 Tree flabel, content, item;
167 if (!
isUiFolder(folder, flabel, content)) { fprintf(stderr,
"ERROR in getFolder : not a folder\n"); }
168 if (
findKey(content, ilabel, item)) {
static Tree getFolder(Tree folder, Tree ilabel)
static void error(const char *s, Tree t)
Tree cons(Tree a, Tree b)
static Tree putFolder(Tree folder, Tree item)
A CTree = (Node x [CTree]) is a Node associated with a list of subtrees called branches.
const Node & node() const
return the content of the tree
static bool isBefore(Tree k1, Tree k2)
Tree uiWidget(Tree label, Tree varname, Tree sig)
Tree uiFolder(Tree label, Tree elements)
static Tree makeSubFolderChain(Tree path, Tree elem)
bool isSym(const Node &n)
bool isUiWidget(Tree t, Tree &label, Tree &varname, Tree &sig)
static Tree updateKey(Tree pl, Tree key, Tree val)
static bool findKey(Tree pl, Tree key, Tree &val)
const char * name(Symbol *sym)
Returns the name of a symbol.
static Tree removeKey(Tree pl, Tree key)
Symbols are unique objects with a name stored in a hash table.
bool isTree(const Tree &t, const Node &n)
Tree putSubFolder(Tree folder, Tree path, Tree item)
Symbol * symbol(const char *str)
Returns (and creates if new) the symbol of name str.
static Tree addKey(Tree pl, Tree key, Tree val)
Like updateKey but allow multiple items with same key.
Tree addToFolder(Tree folder, Tree item)