Skip to content

Commit

Permalink
Merge remote-tracking branch 'upstream/master'
Browse files Browse the repository at this point in the history
  • Loading branch information
jrepan committed Oct 17, 2011
2 parents 98bea0f + ef70984 commit 5a6562c
Show file tree
Hide file tree
Showing 77 changed files with 1,227 additions and 1,204 deletions.
2 changes: 1 addition & 1 deletion TODO
Expand Up @@ -59,7 +59,7 @@ For 0.9 Alpha:

- pipes and shell improvements
+ pipe driver
- shell pipe support
+ shell pipe support
- stdio buffering
- user/password manager
- login shell
Expand Down
12 changes: 9 additions & 3 deletions daemon/init/main.c
Expand Up @@ -39,7 +39,7 @@ static uint64_t start(struct tar_file *file, char const **argv) {

if (pid < 0) {
execiv(file->start, file->size, argv);
for(;;);
abort();
}

mwait(PORT_CHILD, pid);
Expand Down Expand Up @@ -105,8 +105,8 @@ int main() {
temp = start(file, argv);

/* Link /dev and /sys and change root */
temp1 = fs_find("/dev");
temp2 = fs_find("/sys");
temp1 = fs_open("/dev", STAT_OPEN);
temp2 = fs_open("/sys", STAT_OPEN);
fs_root = temp;
fs_plink("/dev", temp1, NULL);
fs_plink("/sys", temp2, NULL);
Expand All @@ -131,6 +131,12 @@ int main() {
file = tar_find(boot_image, "sbin/time");
fs_plink("/dev/time", start(file, argv), NULL);

/* Pipe Driver */
argv[0] = "pipe";
argv[1] = NULL;
file = tar_find(boot_image, "sbin/pipe");
fs_plink("/sys/pipe", start(file, argv), NULL);

setname("init");

mwait(PORT_CHILD, 0);
Expand Down
34 changes: 16 additions & 18 deletions daemon/wmanager/main.c
Expand Up @@ -125,7 +125,7 @@ char *wmanager_rcall_unshare(struct robject *self, uint64_t source, int argc, ch
return strdup("T");
}

char *wmanager_rcall_register(struct robject *self, uint64_t source, int argc, char **argv) {
/*char *wmanager_rcall_register(struct robject *self, uint64_t source, int argc, char **argv) {
struct window_t *window;
window = find_window(self->index, RP_PID(source));
Expand All @@ -145,7 +145,7 @@ char *wmanager_rcall_deregister(struct robject *self, uint64_t source, int argc,
window->flags &= ~LISTEN_EVENTS;
return strdup("T");
}
} */

char *wmanager_rcall_getwindowflags(struct robject *self, uint64_t source, int argc, char **argv) {
struct window_t *window;
Expand Down Expand Up @@ -363,26 +363,24 @@ int main(int argc, char **argv) {
robject_set(0, root);
robject_root = root;
robject_set_data(root, "type", (void*) "wm");
robject_set_call(root, "createwindow", wmanager_rcall_createwindow);
robject_set_call(root, "cons", wmanager_rcall_cons);
robject_set_call(root, "createwindow", wmanager_rcall_createwindow, 0);
robject_set_call(root, "cons", wmanager_rcall_cons, 0);

class_window = robject_cons(0, rdi_class_core);

robject_set_data(class_window, "name", (void*) "class-window");
robject_set_data(class_window, "type", (void*) "window canvas share event");
robject_set_call(class_window, "listmodes", wmanager_rcall_listmodes);
robject_set_call(class_window, "setmode", wmanager_rcall_setmode);
robject_set_call(class_window, "getmode", wmanager_rcall_getmode);
robject_set_call(class_window, "unshare", wmanager_rcall_unshare);
robject_set_call(class_window, "getwindowflags", wmanager_rcall_getwindowflags);
robject_set_call(class_window, "setwindowflags", wmanager_rcall_setwindowflags);
robject_set_call(class_window, "syncrect", wmanager_rcall_syncrect);
robject_set_call(class_window, "getmouse", wmanager_rcall_getmouse);
robject_set_call(class_window, "setpanel", wmanager_rcall_setpanel);
robject_set_call(class_window, "settags", wmanager_rcall_settags);
robject_set_call(class_window, "register", wmanager_rcall_register);
robject_set_call(class_window, "deregister", wmanager_rcall_deregister);
robject_set_call(class_window, "subscribe", wmanager_rcall_register);
robject_set_call(class_window, "unsubscribe", wmanager_rcall_deregister);

robject_set_call(class_window, "listmodes", wmanager_rcall_listmodes, 0);
robject_set_call(class_window, "setmode", wmanager_rcall_setmode, 0);
robject_set_call(class_window, "getmode", wmanager_rcall_getmode, STAT_READER);
robject_set_call(class_window, "unshare", wmanager_rcall_unshare, STAT_WRITER);
robject_set_call(class_window, "getwindowflags", wmanager_rcall_getwindowflags, STAT_READER);
robject_set_call(class_window, "setwindowflags", wmanager_rcall_setwindowflags, STAT_READER);
robject_set_call(class_window, "syncrect", wmanager_rcall_syncrect, STAT_WRITER);
robject_set_call(class_window, "getmouse", wmanager_rcall_getmouse, STAT_READER);
robject_set_call(class_window, "setpanel", wmanager_rcall_setpanel, STAT_WRITER);
robject_set_call(class_window, "settags", wmanager_rcall_settags, STAT_WRITER);

rdi_global_share_hook = wmanager_share;

Expand Down
18 changes: 9 additions & 9 deletions driver/biterm/main.c
Expand Up @@ -19,6 +19,7 @@
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <natio.h>
#include <proc.h>
#include <exec.h>

Expand Down Expand Up @@ -153,8 +154,8 @@ int main(int argc, char **argv) {
}
}
else {
kbd_dev = fs_find(argv[1]);
fb_dev = fs_find(argv[2]);
kbd_dev = fs_open(argv[1], STAT_EVENT);
fb_dev = fs_open(argv[2], STAT_READER | STAT_WRITER | STAT_EVENT);

if (!kbd_dev) {
fprintf(stderr, "%s: %s: keyboard not found\n", argv[0], argv[1]);
Expand All @@ -176,17 +177,15 @@ int main(int argc, char **argv) {
screen_flip();

// listen to graphics events
event_subscribe(fb_dev);
event_hook("graph", fbterm_graph_event);

// set up keyboard
event_subscribe(kbd_dev);
event_hook("key", fbterm_key_event);

robject_set_call(term, "clear", fbterm_rcall_clear);
robject_set_call(term, "set_fgjob", fbterm_rcall_set_fgjob);
robject_set_call(term, "set_fgcolor", fbterm_rcall_set_fgcolor);
robject_set_call(term, "set_bgcolor", fbterm_rcall_set_bgcolor);
robject_set_call(term, "clear", fbterm_rcall_clear, STAT_WRITER);
robject_set_call(term, "set_fgjob", fbterm_rcall_set_fgjob, STAT_WRITER);
robject_set_call(term, "set_fgcolor", fbterm_rcall_set_fgcolor, STAT_WRITER);
robject_set_call(term, "set_bgcolor", fbterm_rcall_set_bgcolor, STAT_WRITER);
rdi_global_read_hook = fbterm_read;
rdi_global_write_hook = fbterm_write;

Expand All @@ -196,10 +195,11 @@ int main(int argc, char **argv) {
setenv("PATH", "/bin");
stdout = stderr = fdopen(RP_CONS(-pid, term->index), "w");
stdin = fdopen(RP_CONS(-pid, term->index), "r");
rp_open(RP_CONS(-pid, term->index), STAT_READER);
exec("/bin/fish");
}

msendb(RP_CONS(getppid(), 0), PORT_CHILD);
msendb(getppid(), PORT_CHILD);
_done();

return 0;
Expand Down
8 changes: 4 additions & 4 deletions driver/fbterm/main.c
Expand Up @@ -195,10 +195,10 @@ int main(int argc, char **argv) {
event_subscribe(kbd_dev);
event_hook("key", fbterm_key_event);

robject_set_call(term, "clear", fbterm_rcall_clear);
robject_set_call(term, "set_fgjob", fbterm_rcall_set_fgjob);
robject_set_call(term, "set_fgcolor", fbterm_rcall_set_fgcolor);
robject_set_call(term, "set_bgcolor", fbterm_rcall_set_bgcolor);
robject_set_call(term, "clear", fbterm_rcall_clear, STAT_WRITER);
robject_set_call(term, "set_fgjob", fbterm_rcall_set_fgjob, STAT_WRITER);
robject_set_call(term, "set_fgcolor", fbterm_rcall_set_fgcolor, STAT_WRITER);
robject_set_call(term, "set_bgcolor", fbterm_rcall_set_bgcolor, STAT_WRITER);
rdi_global_read_hook = fbterm_read;
rdi_global_write_hook = fbterm_write;

Expand Down
5 changes: 3 additions & 2 deletions driver/kbd/main.c
Expand Up @@ -20,8 +20,9 @@
#include <proc.h>

#include <rdi/core.h>
#include <rdi/vfs.h>
#include <rdi/arch.h>
#include <rdi/vfs.h>
#include <rdi/io.h>

#define ALT 0x00800000
#define CTRL 0x00800001
Expand Down Expand Up @@ -148,7 +149,7 @@ int main(int argc, char **argv) {
rdi_init();

// create device file
keyboard = rdi_event_cons(1, ACCS_READ);
keyboard = rdi_file_cons(1, ACCS_READ | ACCS_EVENT);

// set IRQ handler
rdi_set_irq(1, kbd_irq);
Expand Down
4 changes: 2 additions & 2 deletions driver/mouse/main.c
Expand Up @@ -21,7 +21,7 @@
#include <proc.h>

#include <rdi/core.h>
#include <rdi/vfs.h>
#include <rdi/io.h>
#include <rdi/arch.h>

#define USE_IRQ 0
Expand Down Expand Up @@ -139,7 +139,7 @@ int main(int argc, char **argv) {

rdi_init();

mouse = rdi_event_cons(robject_new_index(), ACCS_READ | ACCS_WRITE);
mouse = rdi_file_cons(robject_new_index(), ACCS_READ | ACCS_EVENT);

#if USE_IRQ
rdi_set_irq(12, mouse_irq);
Expand Down
33 changes: 13 additions & 20 deletions driver/pipe/main.c
Expand Up @@ -101,6 +101,10 @@ size_t pipe_read(struct robject *self, rp_t source, uint8_t *buffer, size_t size
datum = pipe_getc(pipe);

while (datum == ERR_EMPTY) {
if (!robject_count_status(self, STAT_WRITER)) {
datum = ERR_EOF;
break;
}
sleep();
datum = pipe_getc(pipe);
}
Expand Down Expand Up @@ -129,26 +133,17 @@ size_t pipe_write(struct robject *self, rp_t source, uint8_t *buffer, size_t siz
return size;
}

char *pipe_cons(struct robject *self, rp_t src, int argc, char **argv) {
struct robject *pipe_file_cons(rp_t source, int argc, char **argv) {
struct robject *new_r;
struct pipe *pipe;
struct robject *new_r = NULL;
char *type;

if (argc == 2) {
type = argv[1];
new_r = rdi_file_cons(robject_new_index(), ACCS_READ | ACCS_WRITE);
pipe = pipe_new();
robject_set_data(new_r, "pipe", pipe);

if (!strcmp(type, "file")) {
new_r = rdi_file_cons(robject_new_index(), ACCS_READ | ACCS_WRITE);
pipe = pipe_new();
robject_set_data(new_r, "pipe", pipe);
robject_open(new_r, source, STAT_OPEN | STAT_READER | STAT_WRITER);

return rtoa(RP_CONS(getpid(), new_r->index));
}

return strdup("! type");
}

return strdup("! arg");
return new_r;
}

int main(int argc, char **argv) {
Expand All @@ -157,12 +152,10 @@ int main(int argc, char **argv) {
rdi_init();

// create device file
root = rdi_core_cons(0, ACCS_READ | ACCS_WRITE);
robject_set(0, root);
robject_root = root;
root = rdi_core_cons(1, ACCS_READ | ACCS_WRITE);

// set interface functions
robject_set_call(rdi_class_core, "cons", pipe_cons);
rdi_global_cons_file_hook = pipe_file_cons;
rdi_global_write_hook = pipe_write;
rdi_global_read_hook = pipe_read;

Expand Down
16 changes: 8 additions & 8 deletions driver/svga/main.c
Expand Up @@ -23,8 +23,8 @@
#include <ipc.h>

#include <rdi/core.h>
#include <rdi/vfs.h>
#include <rdi/arch.h>
#include <rdi/vfs.h>
#include <rdi/io.h>

#include "svga.h"
Expand Down Expand Up @@ -121,7 +121,7 @@ int main(int argc, char **argv) {

rdi_init();

canvas = rdi_event_cons(robject_new_index(), ACCS_READ | ACCS_WRITE);
canvas = rdi_file_cons(robject_new_index(), ACCS_READ | ACCS_WRITE | ACCS_EVENT);
robject_set_data(canvas, "type", (void*) "canvas share");

svga_init();
Expand All @@ -140,12 +140,12 @@ int main(int argc, char **argv) {
buffer = malloc(svga.w * svga.h * 4);

/* set up driver interface */
robject_set_call(canvas, "getmode", svga_rcall_getmode);
robject_set_call(canvas, "listmodes", svga_rcall_listmodes);
robject_set_call(canvas, "unshare", svga_rcall_unshare);
robject_set_call(canvas, "setmode", svga_rcall_setmode);
robject_set_call(canvas, "syncrect", svga_rcall_syncrect);
robject_set_call(canvas, "sync", svga_rcall_sync);
robject_set_call(canvas, "getmode", svga_rcall_getmode, STAT_READER);
robject_set_call(canvas, "listmodes", svga_rcall_listmodes, STAT_READER);
robject_set_call(canvas, "unshare", svga_rcall_unshare, STAT_WRITER);
robject_set_call(canvas, "setmode", svga_rcall_setmode, STAT_WRITER);
robject_set_call(canvas, "syncrect", svga_rcall_syncrect, STAT_WRITER);
robject_set_call(canvas, "sync", svga_rcall_sync, STAT_WRITER);
rdi_global_share_hook = svga_share;

/* register the driver as /dev/svga0 */
Expand Down
1 change: 1 addition & 0 deletions driver/svga/svga.c
Expand Up @@ -16,6 +16,7 @@

#include "svga.h"

#include <robject.h>
#include <string.h>
#include <stdlib.h>
#include <graph.h>
Expand Down
24 changes: 3 additions & 21 deletions driver/tarfs/main.c
Expand Up @@ -66,26 +66,8 @@ static uintptr_t getvalue(char *field, size_t size) {
return sum;
}

char *tarfs_cons(struct robject *self, rp_t source, int argc, char **argv) {
struct robject *new_r = NULL;
char *type;

if (argc == 2) {
type = argv[1];

if (!strcmp(type, "link")) {
new_r = rdi_link_cons(robject_new_index(), ACCS_READ | ACCS_WRITE, NULL);
}
else {
return strdup("! type");
}

if (new_r) {
return rtoa(RP_CONS(getpid(), new_r->index));
}
}

return strdup("! arg");
struct robject *tarfs_link_cons(rp_t source, int argc, char **argv) {
return rdi_link_cons(robject_new_index(), ACCS_READ | ACCS_WRITE, NULL);
}

size_t tarfs_read(struct robject *self, rp_t source, uint8_t *buffer, size_t size, off_t offset) {
Expand Down Expand Up @@ -194,8 +176,8 @@ int main(int argc, char **argv) {
free(block);

/* set up interface */
robject_set_call(rdi_class_core, "cons", tarfs_cons);
rdi_global_read_hook = tarfs_read;
rdi_global_cons_link_hook = tarfs_link_cons;

/* daemonize */
msendb(RP_CONS(getppid(), 0), PORT_CHILD);
Expand Down

0 comments on commit 5a6562c

Please sign in to comment.