Ejemplo n.º 1
0
void CDataBuffer::PutChar( DWORD dwVal )
{
    unsigned char pCur[2];
    pCur[0] = (unsigned char)(dwVal & 0xff);
    pCur[1] = '\0';
    PutBuffer(pCur, 1);
}
Ejemplo n.º 2
0
STDMETHODIMP CDisk::ltrkid(IGeometry *g, long track, short *count, VARIANT *buffer)
{
	DSK_GEOMETRY geom;
	DSK_FORMAT *fmt;
	unsigned char *buf;
	dsk_err_t err;
	dsk_psect_t n, acount = 0;
	HRESULT hr;

	g_to_dg(g, &geom);
	err = dsk_ltrackids(m_driver, &geom, track, &acount, &fmt);
	if (acount)
	{
		if (count) *count = acount;
		buf = new unsigned char[4 * acount];
		for (n = 0; n < acount; n++)
		{
			buf[n*4  ] = fmt[n].fmt_cylinder;
			buf[n*4+1] = fmt[n].fmt_head;
			buf[n*4+2] = fmt[n].fmt_sector;
			buf[n*4+3] = dsk_get_psh(fmt[n].fmt_secsize);
		}
		hr = PutBuffer(buf, buffer, 4 * acount, err);
		delete buf;
		return hr;
	}
	return MapError(err);
}
Ejemplo n.º 3
0
STDMETHODIMP CDisk::ltread(IGeometry *g, long track, VARIANT *var)
{
	DSK_GEOMETRY geom;
	dsk_err_t err;
	HRESULT hr;

	g_to_dg(g, &geom);
	unsigned char *tmpbuf = (unsigned char *)dsk_malloc(geom.dg_secsize * geom.dg_sectors);
	if (!tmpbuf) return MapError(DSK_ERR_NOMEM);
	
	err = dsk_ltread(m_driver, &geom, tmpbuf, track);
	hr = PutBuffer(tmpbuf, var, geom.dg_secsize * geom.dg_sectors, err);
	dsk_free(tmpbuf);
	return hr;
}
Ejemplo n.º 4
0
STDMETHODIMP CDisk::pread(IGeometry *g, long cylinder, short head, short sector, VARIANT *var)
{
	DSK_GEOMETRY geom;
	HRESULT hr;
	dsk_err_t err;

	g_to_dg(g, &geom);
	unsigned char *tmpbuf = (unsigned char *)dsk_malloc(geom.dg_secsize);
	if (!tmpbuf) return MapError(DSK_ERR_NOMEM);
	
	err = dsk_pread(m_driver, &geom, tmpbuf, cylinder, head, sector);
	hr = PutBuffer(tmpbuf, var, geom.dg_secsize, err);
	dsk_free(tmpbuf);
	return hr;
}
Ejemplo n.º 5
0
STDMETHODIMP CDisk::lsecid(IGeometry *g, long track, VARIANT *buffer)
{
	DSK_GEOMETRY geom;
	DSK_FORMAT fmt;
	unsigned char buf[4];
	dsk_err_t err;

	g_to_dg(g, &geom);
	err = dsk_lsecid(m_driver, &geom, track, &fmt);
	buf[0] = fmt.fmt_cylinder;
	buf[1] = fmt.fmt_head;
	buf[2] = fmt.fmt_sector;
	buf[3] = dsk_get_psh(fmt.fmt_secsize);

	return PutBuffer(buf, buffer, 4, err);
}
Ejemplo n.º 6
0
STDMETHODIMP CDisk::xread(IGeometry *g, long cylinder, short head, 
						  long cyl_expected, short head_expected, short sector, long sector_len, short *deleted, VARIANT *var)
{
	DSK_GEOMETRY geom;
	dsk_err_t err;
	HRESULT hr;
	int del = deleted[0];

	g_to_dg(g, &geom);
	unsigned char *tmpbuf = (unsigned char *)dsk_malloc(sector_len);
	if (!tmpbuf) return MapError(DSK_ERR_NOMEM);
	
	err = dsk_xread(m_driver, &geom, tmpbuf, cylinder, head, cyl_expected, head_expected, sector, sector_len, &del);
	hr = PutBuffer(tmpbuf, var, sector_len, err);
	dsk_free(tmpbuf);
	deleted[0] = del;
	return hr;
}