Example #1
0
static void system_clock(PSW* m) {
    if (process_current() != NULL) {
        memcpy(&process_current()->cpu, m, sizeof (PSW));
    }

    memcpy(m, &process_next()->cpu, sizeof (PSW));

    DEBUG_PRINTF(DEBUG_T_SYSTEM, "Exécution processus : %d, state = %d\n", (int)process_current()->number, process_current()->state);
}
Example #2
0
static void system_sysc_sleep(PSW* m) {
    DEBUG_PRINTF(DEBUG_T_SYSC, "SYSCALL SLEEP(%d)\n", m->DR[m->RI.i]);
    
    process_current()->state = PROC_STATE_SLEEP;
    process_current()->waketime = time(NULL) + m->DR[m->RI.i];
    ++m->PC;

    system_clock(m); //Change de processus
}
Example #3
0
static int read_partition_table(const char* path) {
  mbr_t *mbr = (mbr_t*)█

  int fd = open(path, 0);
  if(fd == -1) {
    printf("error %d\n", fd);
    return 1;
  }
  
  device_t* device = devfs_device_from_file(process_current()->fd[fd]);
  int size = get_device_option(fd, "device_size");
  char model[100];
  get_device_option(fd, "model", model, sizeof(model));

  int human = size;
  char *suffix[] = {"", "k", "M", "G", "T", 0};
  int suffix_idx = 0;
  while(human >= 1024) {
    human /= 1024;
    suffix_idx++;
    if(suffix[suffix_idx] == 0)
      break;
  }
  printf("\nDisk %s: %d %sB, %d bytes\n", path, human, suffix[suffix_idx], size);
  printf("Model: '%s'\n\n", model);
  printf("Partition Boot    Start       End    Blocks   Id  System\n");
  
  invoke(device, device, read_blocks)(device, block, 0, 1);
  
  if(mbr->signature != 0xaa55)
    printf("invalid mbr signature\n");

  int i;
  for(i=0; i<4; i++) {
    if((mbr->pe[i].type == 0 ) && (mbr->pe[i].lba_sector == 0))
      continue;
    printf("%d        %c   %10d%10d%10d   %02x  %s\n",
	   i, 
	   mbr->pe[i].active ? '*' : ' ',
	   mbr->pe[i].lba_sector,
	   mbr->pe[i].lba_sector + mbr->pe[i].lba_len,
	   mbr->pe[i].lba_len,
	   mbr->pe[i].type,
	   part_type_name(mbr->pe[i].type));
  }
  int extid = 5;
  int j;
  for(j=0; j<4; j++) {
    if((mbr->pe[j].type == 0 ) && (mbr->pe[j].lba_sector == 0))
      continue;
    if(mbr->pe[j].type == DOS_PART_EXT) {
      printf("found an extended part table (starting at %d)\n", extid);
    }
  }
  
  printf("\n");
  
  return 0;
}
Example #4
0
int __syscall_getcwd(char *buf, size_t size) {
  char *cwd = process_current()->cwd;
  if(strlen(cwd) < size) {    
    strcpy(buf, cwd);
    return strlen(cwd);
  }
  return 0;
}
Example #5
0
void pcnet32_test_run() {
  xprintf("PCNET32 TEST\n");
  xprintf("root fnode %p\n", process_current()->root);
  xprintf("root filesystem name %s\n", process_current()->root->mounted->filesystem->name);
  xprintf("file id %d\n", process_current()->root->file_id);

  pci_init();
  //  ide_init();
  ether_init();
  ip_init();
  pcnet32_init();   //pcnet32 
  // mounting devfs
  devfs_mount();
  // registering devfs
  driver_register_devfs();

  // mounting tarfs at standard boot location
  tarfs_mount(multiboot_get_module(0), "/System/Startup");
  
  shell_run();

  xprintf("pcnet32_test end\n");
}
Example #6
0
static void system_sysc_getchar(PSW* m){
    DEBUG_PUTS(DEBUG_T_SYSC, "SYSCALL GETCHAR()");
    
    Process* proc = process_current();
    char c = system_io_getchar(proc);
    
    //Change de processus (en attente de caractère)
    if(proc->state == PROC_STATE_GETCHAR){
        system_clock(m);
        return;
    }
    
    m->DR[m->RI.i] = c;
    ++m->PC;
}
Example #7
0
static void system_sysc_exit(PSW* m) {
    DEBUG_PRINTF(DEBUG_T_SYSC, "SYSCALL EXIT()\n");
    
    Process* process = process_current();
    
    if(process == NULL){
        DEBUG_PUTS(DEBUG_T_SYSTEM, "Pas de processus courant");
        return;
    }
    
    DEBUG_PRINTF(DEBUG_T_SYSTEM, "Suppr. proc %d\n", (int)process->number);
    
    process_kill(process);
    system_clock(m);
}
Example #8
0
void Gobby::TaskSaveAll::on_document_removed(SessionView& view)
{
	std::list<TextSessionView*>::iterator iter = std::find(
		m_views.begin(), m_views.end(), &view);

	if(iter == m_current)
	{
		m_current = m_views.erase(m_current);
		// Go on with next
		process_current();
	}

	if(iter != m_views.end())
		m_views.erase(iter);
}
Example #9
0
static void system_sysc_fork(PSW* m) {
    DEBUG_PUTS(DEBUG_T_SYSC, "SYSCALL FORK()");
    
    Process* child = process_fork(process_current());
    
    if(child == NULL){
        ++m->PC;
        return;
    }

    m->AC = child->number;
    m->DR[m->RI.i] = child->number;
    ++m->PC;

    child->cpu.PC = m->PC;
    child->state = PROC_STATE_READY;
}
Example #10
0
/* Resolve an address space constant to a pointer */
static addrspace_t *resolve_addrspace(addrspace_t *addrspace)
{
	/* Current address space */
	if (addrspace == ADDRSPACE_CURRENT)
	{
		return &(process_current()->addrspace);
	}
	/* System address space */
	else if (addrspace == ADDRSPACE_SYSTEM)
	{
		return &system_addrspace;
	}
	/* Address space pointer */
	else
	{
		return addrspace;
	}
}
Example #11
0
void Gobby::TaskSaveAll::run()
{
	const unsigned int n_pages = get_folder().get_n_pages();
	for(unsigned int i = 0; i < n_pages; ++i)
	{
		SessionView& view = get_folder().get_document(i);
		TextSessionView* text_view =
			dynamic_cast<TextSessionView*>(&view);

		if(text_view)
			m_views.push_back(text_view);
	}

	get_folder().signal_document_removed().connect(
		sigc::mem_fun(*this, &TaskSaveAll::on_document_removed));

	m_current = m_views.begin();
	process_current();
}
Example #12
0
void Gobby::TaskSaveAll::process_current()
{
	m_task.reset(NULL);

	if(m_current == m_views.end())
	{
		finish();
	}
	else
	{
		TextSessionView& view = **m_current;

		const DocumentInfoStorage::Info* info =
			get_document_info_storage().get_info(
				view.get_info_storage_key());

		if(info != NULL && !info->uri.empty())
		{
			Glib::RefPtr<Gio::File> file =
				Gio::File::create_for_uri(info->uri);
			get_operations().save_document(
				view, file,
				info->encoding, info->eol_style);

			m_current = m_views.erase(m_current);
			process_current();
		}
		else
		{
			m_task.reset(new TaskSave(m_file_commands, view));

			m_task->signal_finished().connect(sigc::mem_fun(
				*this, &TaskSaveAll::on_finished));
			m_task->run();
		}
	}
}
Example #13
0
int32_t syscall_exit(uint32_t arg0, uint32_t arg1, uint32_t arg2, uint32_t arg3, uint32_t arg4) {
	process_exit(process_current(), arg0);
	return 0;
}
Example #14
0
void Gobby::TaskSaveAll::on_finished()
{
	m_current = m_views.erase(m_current);
	process_current();
}