Example #1
0
static void change_sector(HWND dialog)
{
	struct sectorview_info *info;
	imgtoolerr_t err;
	TCHAR buf[32];
	UINT32 new_track, new_head, new_sector;

	info = get_sectorview_info(dialog);

	GetWindowText(GetDlgItem(dialog, IDC_TRACKEDIT), buf, sizeof(buf) / sizeof(buf[0]));
	new_track = (UINT32) _ttoi(buf);
	GetWindowText(GetDlgItem(dialog, IDC_HEADEDIT), buf, sizeof(buf) / sizeof(buf[0]));
	new_head = (UINT32) _ttoi(buf);
	GetWindowText(GetDlgItem(dialog, IDC_SECTOREDIT), buf, sizeof(buf) / sizeof(buf[0]));
	new_sector = (UINT32) _ttoi(buf);

	if ((info->track != new_track) || (info->head != new_head) || (info->sector != new_sector))
	{
		err = read_sector_data(dialog, new_track, new_head, new_sector);
		if (err)
			set_sector_text(dialog);
	}
}
Example #2
0
static INT_PTR CALLBACK win_sectorview_dialog_proc(HWND dialog, UINT message,
	WPARAM wparam, LPARAM lparam)
{
	imgtoolerr_t err;
	INT_PTR rc = 0;
	struct sectorview_info *info;
	RECT dialog_rect;

	switch(message)
	{
		case WM_INITDIALOG:
			info = (struct sectorview_info *) lparam;
			info->font = create_font();

			GetWindowRect(dialog, &dialog_rect);
			info->old_width = dialog_rect.right - dialog_rect.left;
			info->old_height = dialog_rect.bottom - dialog_rect.top;
			info->track = ~0;
			info->head = ~0;
			info->sector = ~0;

			SendMessage(GetDlgItem(dialog, IDC_HEXVIEW), WM_SETFONT, (WPARAM) info->font, (LPARAM) TRUE);
			SetWindowLongPtr(dialog, GWLP_USERDATA, lparam);

			setup_spin_control(dialog, IDC_TRACKSPIN, IDC_TRACKEDIT);
			setup_spin_control(dialog, IDC_HEADSPIN, IDC_HEADEDIT);
			setup_spin_control(dialog, IDC_SECTORSPIN, IDC_SECTOREDIT);

			err = read_sector_data(dialog, 0, 0, 0);
			if (err == IMGTOOLERR_SEEKERROR)
				err = read_sector_data(dialog, 0, 0, 1);
			if (!err)
				set_sector_text(dialog);
			break;

		case WM_DESTROY:
			info = get_sectorview_info(dialog);
			if (info->font)
			{
				DeleteObject(info->font);
				info->font = NULL;
			}
			break;

		case WM_SYSCOMMAND:
			if (wparam == SC_CLOSE)
				EndDialog(dialog, 0);
			break;

		case WM_COMMAND:
			switch(HIWORD(wparam))
			{
				case BN_CLICKED:
					switch(LOWORD(wparam))
					{
						case IDOK:
						case IDCANCEL:
							EndDialog(dialog, 0);
							break;
					}
					break;

				case EN_CHANGE:
					change_sector(dialog);
					break;
			}
			break;

		case WM_SIZE:
			info = get_sectorview_info(dialog);

			GetWindowRect(dialog, &dialog_rect);
			size_dialog(dialog, sectorview_anchor,
				(dialog_rect.right - dialog_rect.left) - info->old_width,
				(dialog_rect.bottom - dialog_rect.top) - info->old_height);

			info->old_width = dialog_rect.right - dialog_rect.left;
			info->old_height = dialog_rect.bottom - dialog_rect.top;
			break;

		case WM_MOUSEWHEEL:
			if (HIWORD(wparam) & 0x8000)
				SendMessage(GetDlgItem(dialog, IDC_HEXVIEW), WM_VSCROLL, SB_LINEDOWN, 0);
			else
				SendMessage(GetDlgItem(dialog, IDC_HEXVIEW), WM_VSCROLL, SB_LINEUP, 0);
			break;
	}

	return rc;
}
Example #3
0
File: read.c Project: doogle/vdf
LIBFUNC int vdf_read_sectors(vdf_drive *drv, sector_t sector, sectcnt_t cnt, void *buffer) {
	ssize_t want, rem;
	uint8_t *buff = buffer;

	if(!drive_is_valid(drv)) {
		errno = EINVAL;
		return -1;
	}
	if(cnt == 0)
		return 0;
	rem = cnt;
	cnt = 0;
	if(drv->flags & VDF_MBR) {
		if(sector == 0) {
			if(read_sector_mbr(drv, buff) == -1)
				return -1;
			if(--rem == 0)
				return 1;
			buff += drv->bps;
			cnt = 1;
			sector++;
		}
		if(sector < drv->mbr_sectors) {
			want = rem;
			if((sector + rem) >= drv->mbr_sectors)
				want = drv->mbr_sectors - sector;
			memset(buff, 0, drv->bps * want);
			rem -= want;
			cnt += want;
			if(rem == 0)
				return cnt;
			sector += want;
			buff += want * drv->bps;
		}
		sector -= drv->mbr_sectors;
	}
	if(sector < drv->fat1_start) {
		want = rem;
		if((sector + rem) >= drv->fat1_start)
			want = drv->fat1_start - sector;
		if(read_sector_boot(drv, sector, want, buff) == -1)
			return -1;
		rem -= want;
		cnt += want;
		if(rem == 0)
			return cnt;
		sector += want;
		buff += want * drv->bps;
	}
	if(sector < drv->fat2_start) {
		want = rem;
		if((sector + rem) >= drv->fat2_start)
			want = drv->fat2_start - sector;
#ifdef ENABLE_CLUSTER_LIST
		if(drv->flags & VDF_CLUSTERLIST) {
			if(read_sector_fat_clustlist(drv, sector - drv->fat1_start, want, buff) == -1)
				return -1;
		} else {
			if(read_sector_fat(drv, sector - drv->fat1_start, want, buff) == -1)
				return -1;
		}
#else
		if(read_sector_fat(drv, sector - drv->fat1_start, want, buff) == -1)
			return -1;
#endif
		rem -= want;
		cnt += want;
		if(rem == 0)
			return cnt;
		sector += want;
		buff += want * drv->bps;
	}
	if(sector < (drv->filesys == VDF_FAT32 ? drv->data_start : drv->root_start)) {
		want = rem;
		if(drv->filesys == VDF_FAT32) {
			if((sector + rem) >= drv->data_start)
				want = drv->data_start - sector;
		} else {
			if((sector + rem) >= drv->root_start)
				want = drv->root_start - sector;
		}
#ifdef ENABLE_CLUSTER_LIST
		if(drv->flags & VDF_CLUSTERLIST) {
			if(read_sector_fat_clustlist(drv, sector - drv->fat2_start, want, buff) == -1)
				return -1;
		} else {
			if(read_sector_fat(drv, sector - drv->fat2_start, want, buff) == -1)
				return -1;
		}
#else
		if(read_sector_fat(drv, sector - drv->fat2_start, want, buff) == -1)
			return -1;
#endif
		rem -= want;
		cnt += want;
		if(rem == 0)
			return cnt;
		sector += want;
		buff += want * drv->bps;
	}
	if((drv->filesys != VDF_FAT32) && (sector < drv->data_start)) {
		want = rem;
		if((sector + rem) >= drv->data_start)
			want = drv->data_start - sector;
		if(read_sector_dir(drv, sector - drv->root_start, want, buff, drv->root_dir) == -1)
			return -1;
		rem -= want;
		cnt += want;
		if(rem == 0)
			return cnt;
		sector += want;
		buff += want * drv->bps;
	}
	want = rem;
	if((sector + rem) >= drv->sectors)
		want = drv->sectors - sector;
#ifdef ENABLE_CLUSTER_LIST
	if(drv->flags & VDF_CLUSTERLIST) {
		if(read_sector_data_clustlist(drv, sector, want, buff) == -1)
			return -1;
	} else {
		if(read_sector_data(drv, sector, want, buff) == -1)
			return -1;
	}
#else
	if(read_sector_data(drv, sector, want, buff) == -1)
		return -1;
#endif
	cnt += want;
	return cnt;
}