VirtualBox

source: vbox/trunk/src/VBox/Main/testcase/VBox.cpp@ 3392

Last change on this file since 3392 was 2981, checked in by vboxsync, 17 years ago

InnoTek -> innotek: all the headers and comments.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 4.4 KB
Line 
1/** @file
2 *
3 * VBox - Main Program.
4 *
5 */
6
7/*
8 * Copyright (C) 2006-2007 innotek GmbH
9 *
10 * This file is part of VirtualBox Open Source Edition (OSE), as
11 * available from http://www.virtualbox.org. This file is free software;
12 * you can redistribute it and/or modify it under the terms of the GNU
13 * General Public License as published by the Free Software Foundation,
14 * in version 2 as it comes in the "COPYING" file of the VirtualBox OSE
15 * distribution. VirtualBox OSE is distributed in the hope that it will
16 * be useful, but WITHOUT ANY WARRANTY of any kind.
17 *
18 * If you received this file as part of a commercial VirtualBox
19 * distribution, then only the terms of your commercial VirtualBox
20 * license agreement apply instead of the previous paragraph.
21 */
22
23/*******************************************************************************
24* Header Files *
25*******************************************************************************/
26#include <iprt/runtime.h>
27#include <VBox/vm.h>
28#include <VBox/err.h>
29#include <signal.h>
30#include <stdio.h>
31#ifdef _MSC_VER
32# include <stdlib.h>
33#else
34# include <unistd.h>
35#endif
36
37
38/*******************************************************************************
39* Internal Functions *
40*******************************************************************************/
41static void SignalInterrupt(int iSignalNo);
42
43
44int main(int argc, char **argv)
45{
46 int rc = -1;
47
48 /* todo: decide whether or not we're gonna have one executable
49 * which contains both GUI and VM backend or separate executables.
50 *
51 * In any case we're expecting this code to be rewritten as this is mostly
52 * a sketch of what we currently think is going to happen when a VM is started.
53 */
54
55 /*
56 * Init runtime.
57 */
58 rc = RTR3Init();
59 if (!VBOX_SUCCESS(rc))
60 {
61 printf("fatal error: failed to initialize runtime. (rc=%d)\n", rc);
62 return 1;
63 }
64
65 /*
66 * Parse arguments.
67 */
68 char *pszVMConfig = NULL;
69 for (int argi = 1; argi < argc; argi++)
70 {
71 if (argv[argi][0] == '-')
72 {
73 switch (argv[argi][1])
74 {
75 case '?':
76 case 'h':
77 case 'H':
78 printf("syntax: %s <VMConfig>\n", argv[0]);
79 return 1;
80
81 default:
82 printf("syntax error: Unknown option %s\n", argv[argi]);
83 return 1;
84 }
85 }
86 else
87 {
88 if (pszVMConfig)
89 {
90 printf("syntax error: Multiple VM configuration files specified!\n");
91 return 1;
92 }
93 pszVMConfig = argv[argi];
94 }
95 }
96
97 /*
98 * Create the VM from the given config file.
99 */
100 PVM pVM = NULL;
101 rc = VMR3Create(pszVMConfig, &pVM);
102 if (VBOX_SUCCESS(rc))
103 {
104 /*
105 * Run the VM.
106 */
107 rc = VMR3PowerOn(pVM);
108 if (VBOX_SUCCESS(rc))
109 {
110 /*
111 * Wait for user to press Control-C,
112 * (or Control-Break if signal is available).
113 */
114 signal(SIGINT, SignalInterrupt);
115 #ifdef SIGBREAK
116 signal(SIGBREAK, SignalInterrupt);
117 #endif
118 #ifdef _MSC_VER
119 _sleep(~0);
120 #else
121 pause();
122 #endif
123 rc = 0;
124 }
125 else
126 {
127 printf("fatal error: Failed to power on the VM! rc=%d\n", rc);
128 rc = 1;
129 }
130
131 /*
132 * Destroy the VM.
133 */
134 int rc2 = VMR3Destroy(pVM);
135 if (!VBOX_SUCCESS(rc2))
136 {
137 printf("warning: VMR3Destroy() failed with rc=%d\n", rc);
138 rc = 1;
139 }
140 }
141 else
142 {
143 printf("fatal error: failed to create VM from %s, rc=%d\n", pszVMConfig, rc);
144 rc = 1;
145 }
146 return rc;
147}
148
149
150/**
151 * Signal handler.
152 * @param iSignalNo Signal number.
153 */
154void SignalInterrupt(int iSignalNo)
155{
156 #ifdef SIGBREAK
157 if (iSignalNo == SIGBREAK)
158 printf("SIGBREAK!\n");
159 else
160 printf("SIGINT!\n");
161 #else
162 printf("SIGINT!\n");
163 #endif
164
165 /*
166 * assuming BSD style signals here, meaning that execution
167 * continues upon return....
168 * I've no clue how that works on Win32 and linux though.
169 */
170 #ifdef SIG_ACK
171 signal(iSignalNo, SIG_ACK);
172 #endif
173}
174
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette