120 lines
2.0 KiB
C
Raw Normal View History

2012-01-30 12:10:53 -06:00
/* vim: tabstop=4 shiftwidth=4 noexpandtab
*
* init
*
* Provides the standard boot routines and
* calls the user session (compositor / terminal)
2012-01-30 12:10:53 -06:00
*/
#include <stdio.h>
2012-01-30 12:13:11 -06:00
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
2012-01-30 12:10:53 -06:00
#include <syscall.h>
#define DEFAULT_HOSTNAME "toaru-test"
/* Set the hostname to whatever is in /etc/hostname */
void set_hostname() {
FILE * _host_file = fopen("/etc/hostname", "r");
if (!_host_file) {
/* No /etc/hostname, use the default */
syscall_sethostname(DEFAULT_HOSTNAME);
} else {
char buf[256];
fgets(buf, 255, _host_file);
2012-01-30 12:13:11 -06:00
if (buf[strlen(buf)-1] == '\n') {
buf[strlen(buf)-1] = '\0';
}
2012-01-30 12:10:53 -06:00
syscall_sethostname(buf);
setenv("HOST", buf, 1);
2012-01-30 12:10:53 -06:00
fclose(_host_file);
}
}
void start_terminal(char * arg) {
2012-01-30 12:10:53 -06:00
int pid = fork();
if (!pid) {
2012-03-23 17:44:37 -05:00
char * tokens[] = {
"/bin/terminal",
"-Fl",
arg,
2012-03-23 17:44:37 -05:00
NULL
};
int i = execvp(tokens[0], tokens);
exit(0);
} else {
syscall_wait(pid);
}
}
void start_terminal_no_freetype(char * arg) {
int pid = fork();
if (!pid) {
char * tokens[] = {
"/bin/terminal",
"-Fklb",
arg,
NULL
};
int i = execv(tokens[0], tokens);
exit(0);
} else {
syscall_wait(pid);
}
}
void start_vga_terminal(char * arg) {
int pid = fork();
if (!pid) {
char * tokens[] = {
"/bin/terminal",
"-Vl",
arg,
NULL
};
int i = execvp(tokens[0], tokens);
exit(0);
} else {
syscall_wait(pid);
}
}
void start_compositor() {
int pid = fork();
if (!pid) {
char * _tokens[] = {
"/bin/compositor",
2012-03-23 17:44:37 -05:00
NULL
};
execvp(_tokens[0], _tokens);
2012-03-23 17:44:37 -05:00
exit(0);
2012-02-12 16:45:23 -06:00
} else {
syscall_wait(pid);
2012-01-30 12:10:53 -06:00
}
}
int main(int argc, char * argv[]) {
2012-01-30 12:10:53 -06:00
/* Hostname */
set_hostname();
if (argc > 1) {
char * args = NULL;
if (argc > 2) {
args = argv[2];
}
if (!strcmp(argv[1],"--single")) {
start_terminal(args);
return 0;
} else if (!strcmp(argv[1], "--vga")) {
start_vga_terminal(args);
return 0;
} else if (!strcmp(argv[1], "--special")) {
start_terminal_no_freetype(args);
return 0;
}
}
start_compositor();
2012-01-30 12:10:53 -06:00
}