Beispiel #1
0
// Mark a block free in the bitmap
void
free_block(uint32_t blockno)
{
	// Blockno zero is the null pointer of block numbers.
	if (blockno == 0)
		panic("attempt to free zero block");
	bitmap[blockno/32] |= 1<<(blockno%32);
	
	//bitmap should be flushed - ren
	if(flush_bitmap())
		panic("flushing bitmap failed!");
}
Beispiel #2
0
// Search the bitmap for a free block and allocate it.
// 
// Return block number allocated on success,
// -E_NO_DISK if we are out of blocks.
int
alloc_block_num(void)
{
	// LAB 5: Your code here.
	int i;
	
	for(i=0; i < super->s_nblocks; i++)
		if (block_is_free(i)){
			bitmap[i/32] &= ~(1<<(i%32));	//fancy - ren
			if(flush_bitmap())
				panic("flushing bitmap failed!");				
			return i;
		}
			
	return -E_NO_DISK;
}
Beispiel #3
0
LRESULT window_visualisation::on_message(HWND wnd,UINT msg,WPARAM wp,LPARAM lp)
{
	if(msg == WM_CREATE)
	{
		m_wnd = wnd;
		long flags = WS_EX_CONTROLPARENT;
		if (m_frame == 1) flags |= WS_EX_CLIENTEDGE;
		if (m_frame == 2) flags |= WS_EX_STATICEDGE;
			
		uSetWindowLong(wnd, GWL_EXSTYLE, flags);
		SetWindowPos(wnd,0,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE|SWP_FRAMECHANGED);

		list_vis.add_item(this);
		initialised = true;

		ui_extension::visualisation::create_by_guid(get_visualisation_guid(), p_vis);
		if (p_vis.is_valid())
		{
			GetClientRect(wnd, &rc_client);
			window_visualisation_interface::g_create(m_interface, this);
			try{
			p_vis->set_config(&stream_reader_memblock_ref(m_data.get_ptr(), m_data.get_size()),m_data.get_size(),abort_callback_impl());
			}catch(const exception_io &){};
			p_vis->enable(ui_extension::visualisation_host_ptr(m_interface.get_ptr()));
		}
	}
	else if (msg == WM_DESTROY)
	{
		if (p_vis.is_valid())
			p_vis->disable();
		flush_bitmap();
		m_interface.release();
		initialised = false;
		list_vis.remove_item(this);
		m_wnd=0;
	}
	else if (msg == WM_PAINT)
	{
		if (p_vis.is_valid())
		{
			RECT rc_paint;
			if (!GetUpdateRect(wnd, &rc_paint, 0))
			{
				rc_paint = rc_client;
			}
			HDC dc = GetDC(wnd);
			HDC dc_bmp = CreateCompatibleDC(0);
			if (!bm_display) make_bitmap(dc);
			HGDIOBJ meh = SelectObject(dc_bmp,bm_display);
			BitBlt(dc,0,0,rc_client.right,rc_client.bottom,dc_bmp,0,0,SRCCOPY);
			SelectObject(dc_bmp,meh);
			DeleteDC(dc_bmp);
			ReleaseDC(wnd, dc);
			ValidateRect(wnd, &rc_paint);
		}
	}
	else if (msg == WM_WINDOWPOSCHANGED)
	{
		LPWINDOWPOS lpwp = (LPWINDOWPOS)lp;
		if (!(lpwp->flags & SWP_NOSIZE))
		{
			GetClientRect(wnd, &rc_client);
			flush_bitmap();
		}
	}
	else if (msg == WM_ERASEBKGND)
	{
		return FALSE;
	}

	return uDefWindowProc(wnd,msg,wp,lp);
}