summaryrefslogtreecommitdiffhomepage
path: root/mixlib/mix_vm.c
diff options
context:
space:
mode:
authorjaortega <jaortega>2001-03-01 23:56:08 +0000
committerjaortega <jaortega>2001-03-01 23:56:08 +0000
commit3cd180b262db4490f811aaa2f19ef7a4d00ce24f (patch)
tree95bba17660bd67204609f4916a64cb6c86f9122b /mixlib/mix_vm.c
parentf20d7ac8e744fde911545618e96d52c26f008910 (diff)
downloadmdk-3cd180b262db4490f811aaa2f19ef7a4d00ce24f.tar.gz
mdk-3cd180b262db4490f811aaa2f19ef7a4d00ce24f.tar.bz2
mix device operations handled via a vtable
Diffstat (limited to 'mixlib/mix_vm.c')
-rw-r--r--mixlib/mix_vm.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/mixlib/mix_vm.c b/mixlib/mix_vm.c
index 979d558..6da21e2 100644
--- a/mixlib/mix_vm.c
+++ b/mixlib/mix_vm.c
@@ -87,6 +87,8 @@ mix_vm_delete (mix_vm_t * vm)
{
int i;
+ g_return_if_fail (vm != NULL);
+
if (vm->line_table != NULL) g_tree_destroy (vm->line_table);
if (vm->address_table != NULL) g_tree_destroy (vm->address_table);
if (vm->symbol_table != NULL) mix_symbol_table_delete (vm->symbol_table);
@@ -97,6 +99,23 @@ mix_vm_delete (mix_vm_t * vm)
g_free (vm);
}
+/* connect devices to a virtual machine */
+mix_device_t *
+mix_vm_connect_device (mix_vm_t *vm, mix_device_t *device)
+{
+ mix_device_t *old;
+ mix_device_type_t type;
+
+ g_return_val_if_fail (vm != NULL, NULL);
+ g_return_val_if_fail (device != NULL, NULL);
+
+ type = mix_device_type (device);
+ old = vm->devices[type];
+ vm->devices[type] = device;
+
+ return old;
+}
+
/* Reset a vm (set state as of a newly created one) */
void
mix_vm_reset (mix_vm_t * vm)