void __rdi_class_link_setup() { rdi_class_link = robject_cons(0, rdi_class_core); robject_set_call(rdi_class_link, "find", _find, AC_NULL); robject_set_call(rdi_class_link, "set-link", _set_link, AC_WRITE); robject_set_call(rdi_class_link, "get-link", _get_link, AC_READ); robject_set_data(rdi_class_link, "type", (void*) "link"); robject_set_data(rdi_class_link, "name", (void*) "RDI-class-link"); }
int main(int argc, char **argv) { struct robject *root; rdi_init(); // create root directory root = rdi_dir_cons(robject_new_index(), ACCS_READ | ACCS_WRITE); // set interface functions robject_set_call(rdi_class_file, "reset", tmpfs_reset, AC_WRITE); rdi_global_read_hook = tmpfs_read; rdi_global_write_hook = tmpfs_write; rdi_global_cons_file_hook = tmpfs_file_cons; rdi_global_cons_dir_hook = tmpfs_dir_cons; rdi_global_cons_link_hook = tmpfs_link_cons; // daemonize msendb(RP_CONS(getppid(), 0), ACTION_CHILD); _done(); return 0; }
int main(int argc, char **argv) { struct robject *canvas; char *modesstr0; char *modestr; int i; rdi_init(); canvas = rdi_file_cons(robject_new_index(), ACCS_READ | ACCS_WRITE | ACCS_EVENT); robject_set_data(canvas, "type", (void*) "canvas share"); svga_init(); // generate list of modes modesstr = strdup(""); for (i = 0; i < modelist_count; i++) { modesstr0 = modesstr; modestr = malloc(16); sprintf(modestr, "%d:%d:%d ", modelist[i].w, modelist[i].h, modelist[i].d); modesstr = strvcat(modesstr, modestr, NULL); free(modesstr0); } svga_set_mode(svga_find_mode(640, 480, 24)); buffer = malloc(svga.w * svga.h * 4); /* set up driver interface */ 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 */ fs_plink("/dev/svga0", RP_CONS(getpid(), canvas->index), NULL); msendb(RP_CONS(getppid(), 0), PORT_CHILD); _done(); return 0; }