12 #include "workspace.h"
16 /* global variables */
18 workspace_t
**programs
= NULL
;
21 /* lookfor program id */
23 int lookfor_program (int id
)
26 for (i
= 0; (programs
) && (i
< nb_programs
); i
++) {
27 if (programs
[i
]->id
== id
) {
34 /* program function */
36 void prog (int id
, element_t
*root
)
40 if (programs
== NULL
) {
42 /* initial memory allocation */
43 programs
= (workspace_t
**) callocordie (1, sizeof (workspace_t
*));
46 programs
[n
] = alloc_ws ();
50 /* look for existing program */
51 n
= lookfor_program (id
);
56 workspace_t
**tmp
= (workspace_t
**) callocordie (nb_programs
, sizeof (workspace_t
*));
57 memcpy (tmp
, programs
, (nb_programs
- 1) * sizeof (workspace_t
*));
60 programs
[n
] = alloc_ws ();
64 /* clean old program */
65 clean_ws(programs
[n
]);
71 programs
[n
]->root
= dupelement (root
);
74 double call (int id
, int nbargs
, element_t
**args
)
78 /* look for program */
79 int n
= lookfor_program (id
);
81 VERBOSE (WARNING
, fprintf (stdout
, "error unknown program (%d)\n", id
));
86 workspace_t
*tmp
= backup_ws (alloc_ws ());
87 restore_ws (programs
[n
]);
96 /* evaluate program */
98 element_t
*elements
= dupelement (programs
[n
]->root
);
99 ret
= evaluate_element (elements
, 0);
100 delelement (elements
);
102 /* clean arguments */
111 /* restore context */
112 backup_ws (programs
[n
]);
122 fprintf (stdout
, "programs:");
123 for (i
= 0; i
< nb_programs
; i
++) {
124 fprintf (stdout
, " %d", programs
[i
]->id
);
126 fprintf (stdout
, "\n");
131 int n
= lookfor_program (id
);
133 VERBOSE (WARNING
, fprintf (stdout
, "error unknown program (%d)\n", id
));
137 /* set string program */
138 fprintf (stdout
, "edit: %s\n", programs
[n
]->string
);
141 void savestring (int id
, char *string
)
143 int n
= lookfor_program (id
);
145 /* unnecesary code */
147 // VERBOSE (WARNING, fprintf (stdout, "error unknown program (%d)\n", id));
150 //if (programs[n]->string) {
151 // free (programs[n]->string);
155 programs
[n
]->string
= strdup (string
);
161 int n
= lookfor_program (id
);
163 VERBOSE (WARNING
, fprintf (stdout
, "error unknown program (%d)\n", id
));
168 free_ws (programs
[n
]);
171 workspace_t
**tmp
= (workspace_t
**) callocordie (nb_programs
- 1, sizeof (workspace_t
*));
172 memcpy (tmp
, programs
, n
* sizeof (workspace_t
*));
173 memcpy (tmp
+ n
, programs
+ n
+ 1, (nb_programs
- n
- 1) * sizeof (workspace_t
*));
179 /* vim: set ts=4 sw=4 et: */