int make_interactive() { struct isiSession *ses; int i; if((i= isi_create_object(ISIT_SESSION, (struct objtype **)&ses))) { return i; } if(fcntl(0, F_SETFL, O_NONBLOCK) < 0) { isilogerr("fcntl"); return -1; } ses->sfd = 0; ses->Recv = handle_stdin; isi_pushses(ses); return 0; }
int isi_create_sync(struct isiNetSync **sync) { return isi_create_object(ISIT_NETSYNC, (struct objtype**)sync); }
int isi_createcpu(struct isiCPUInfo **ndev) { return isi_create_object(ISIT_CPU, (struct objtype**)ndev); }
int isi_createdev(struct isiInfo **ndev) { return isi_create_object(ISIT_HARDWARE, (struct objtype**)ndev); }
int isi_premake_object(int objtype, struct isiConstruct **outcon, struct objtype **out) { uint32_t x; int i; int rs = 0; struct isiConstruct *con = NULL; if(!objtype || !out) return ISIERR_INVALIDPARAM; for(x = 0; x < allcon.count; x++) { if(allcon.table[x]->objtype == objtype) { con = allcon.table[x]; break; } } if(!con) return ISIERR_NOTFOUND; *outcon = con; struct objtype *ndev; i = isi_create_object(objtype, &ndev); if(i) return i; struct isiInfo *info = (struct isiInfo*)ndev; if(objtype < 0x2f00) { *out = ndev; return 0; } info->meta = con; info->rvproto = con->rvproto; info->svproto = con->svproto; info->c = &emptyobject; if(con->PreInit) { rs = con->PreInit(info); if(rs) { isi_delete_object(ndev); *out = 0; return rs; } } if(objtype > 0x2f00 && con->QuerySize) { size_t sz = 0; con->QuerySize(0, &sz); if(sz) { info->rvstate = isi_alloc(sz); } sz = 0; con->QuerySize(1, &sz); if(sz) { info->svstate = isi_alloc(sz); } } else { if(con->rvproto && con->rvproto->length) { info->rvstate = isi_alloc(con->rvproto->length); } if(con->svproto && con->svproto->length) { info->svstate = isi_alloc(con->svproto->length); } } if(con->Init) { rs = con->Init(info); if(rs) { isi_delete_object(ndev); *out = 0; return rs; } } *out = ndev; return 0; }