#include #include #include #include #include #include #include #include #include #include typedef struct { char filename[100]; char mode[8]; char uid[8]; char gid[8]; char size[12]; char mtime[12]; char chksum[8]; char typeflag[1]; } tar_header; size_t getsize(const char *in) { size_t size=0; size_t j; size_t count=1; for (j=11;j>0;j--,count*=8) { size+=((in[j-1]-'0')*count); } return size; } size_t find_loc(char* name,char* initrd) { size_t pos=0; tar_header tar_hdr; for (int i=0;;i++) { char* tar_hdr_ptr=(char*)&tar_hdr; for (size_t i=0;i0) { pos=pheader.offset+datapos; for (size_t i=0;i0) { // fseek(initrd,pheader.offset+datapos,SEEK_SET); // fread(ptr,sizeof(char),pheader.filesz,initrd); // } // copy_data(address_space,ptr,pheader.memsz,(void*)pheader.vaddr); // } // create_proc((void*)header.entry,address_space,NULL,NULL); // } // return 1; // } void* thread_func(void* arg) { for (;;); return NULL; } int main() { serial_print("IN INIT\n"); long size=initrd_sz(); char* initrd=malloc(size); initrd_get(initrd); size_t datapos=find_loc("rpctest",initrd); load_proc(datapos,initrd); void* retbuf=rpc_call(2,"rpctestfunc","Buffer test\n",strlen("Buffer test\n")+1); serial_print(retbuf); rpc_deallocate_buf(retbuf,strlen(retbuf)+1); serial_print(retbuf); // yield(); // pthread_t thread; // pthread_create(&thread,NULL,thread_func,NULL); // blockThread(THREAD_BLOCKED); // for (int i=0;i<5;i++) { // serial_print("YIELDING\n"); // yield(); // serial_print("YIELDED\n"); // } // serial_print("EXITING\n"); exit(0); // long size=initrd_sz(); // char* initrd=malloc(size); // initrd_get(initrd); // exit(0); // size_t datapos=find_loc("vfs",initrd); // load_proc(datapos,initrd); // yield(); // Bochs fails here // rescan_vfs(); // datapos=find_loc("devfs",initrd); // load_proc(datapos,initrd); // yieldToPID(3); // datapos=find_loc("initrd_drv",initrd); // load_proc(datapos,initrd); // yieldToPID(4); // mount("","devfs","/dev/"); // datapos=find_loc("vga_drv",initrd); // serial_print("Making vga process\n"); // load_proc_devfs(datapos); // serial_print("Made vga process\n"); // yieldToPID(5); // FILE* file; // do { // file=fopen("/dev/vga","w"); // } while(file==NULL); // do { // file=fopen("/dev/vga","w"); // } while(file==NULL); // datapos=find_loc("pci",initrd); // load_proc(datapos,initrd); // free(initrd); // yieldToPID(4); // fputs("FPUTS String\n",file); // char str[3]={0,0,0}; // fgets(str,2,stdin); // char str2[3]={0,0,0}; // fgets(str2,2,stdin); // printf("Printf %s,%s\n",str,str2); }