void CDataBuffer::PutChar( DWORD dwVal ) { unsigned char pCur[2]; pCur[0] = (unsigned char)(dwVal & 0xff); pCur[1] = '\0'; PutBuffer(pCur, 1); }
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); }
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; }
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; }
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); }
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; }