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
]);
121 fprintf (stdout
, "programs:");
122 for (i
= 0; i
< nb_programs
; i
++) {
123 fprintf (stdout
, " %d", programs
[i
]->id
);
125 fprintf (stdout
, "\n");
130 int n
= lookfor_program (id
);
132 VERBOSE (WARNING
, fprintf (stdout
, "error unknown program (%d)\n", id
));
136 /* set string program */
137 fprintf (stdout
, "edit: %s\n", programs
[n
]->string
);
140 void savestring (int id
, char *string
)
142 int n
= lookfor_program (id
);
144 /* unnecesary code */
146 // VERBOSE (WARNING, fprintf (stdout, "error unknown program (%d)\n", id));
149 //if (programs[n]->string) {
150 // free (programs[n]->string);
154 programs
[n
]->string
= strdup (string
);
160 int n
= lookfor_program (id
);
162 VERBOSE (WARNING
, fprintf (stdout
, "error unknown program (%d)\n", id
));
167 free_ws (programs
[n
]);
170 workspace_t
**tmp
= (workspace_t
**) callocordie (nb_programs
- 1, sizeof (workspace_t
*));
171 memcpy (tmp
, programs
, n
* sizeof (workspace_t
*));
172 memcpy (tmp
+ n
, programs
+ n
+ 1, (nb_programs
- n
- 1) * sizeof (workspace_t
*));
178 /* vim: set ts=4 sw=4 et: */