X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=device_win32.c;h=b8aef9b3e584d0eb98f96de5910a07ab766ecd61;hb=669a947da532682fcdb01a4fcbb0d9418206bcd0;hp=4ea90f8a4df0ff2a33e4cc9d3319b3e8dd37a54e;hpb=da79766c5b4c4bae50ddc7bd81b610d3a45c5899;p=debian%2Fcpmtools diff --git a/device_win32.c b/device_win32.c index 4ea90f8..b8aef9b 100644 --- a/device_win32.c +++ b/device_win32.c @@ -4,6 +4,7 @@ #include #include #include +#include #include "cpmdir.h" #include "cpmfs.h" @@ -20,10 +21,10 @@ #define USE_INT13 /* Windows 95 disk I/O functions - based on Stan Mitchell's DISKDUMP.C */ -#define VWIN32_DIOC_DOS_IOCTL 1 // DOS ioctl calls 4400h-4411h -#define VWIN32_DIOC_DOS_INT25 2 // absolute disk read, DOS int 25h -#define VWIN32_DIOC_DOS_INT26 3 // absolute disk write, DOS int 26h -#define VWIN32_DIOC_DOS_INT13 4 // BIOS INT13 functions +#define VWIN32_DIOC_DOS_IOCTL 1 /* DOS ioctl calls 4400h-4411h */ +#define VWIN32_DIOC_DOS_INT25 2 /* absolute disk read, DOS int 25h */ +#define VWIN32_DIOC_DOS_INT26 3 /* absolute disk write, DOS int 26h */ +#define VWIN32_DIOC_DOS_INT13 4 /* BIOS INT13 functions */ typedef struct _DIOC_REGISTERS { DWORD reg_EBX; @@ -52,17 +53,17 @@ typedef struct _DIOC_REGISTERS { #pragma pack(1) typedef struct _DISKIO { - DWORD diStartSector; // sector number to start at - WORD diSectors; // number of sectors - DWORD diBuffer; // address of buffer + DWORD diStartSector; /* sector number to start at */ + WORD diSectors; /* number of sectors */ + DWORD diBuffer; /* address of buffer */ } DISKIO, *PDISKIO; typedef struct MID { - WORD midInfoLevel; // information level, must be 0 - DWORD midSerialNum; // serial number for the medium - char midVolLabel[11]; // volume label for the medium - char midFileSysType[8]; // type of file system as 8-byte ASCII + WORD midInfoLevel; /* information level, must be 0 */ + DWORD midSerialNum; /* serial number for the medium */ + char midVolLabel[11]; /* volume label for the medium */ + char midFileSysType[8]; /* type of file system as 8-byte ASCII */ } MID, *PMID; @@ -99,7 +100,7 @@ static char *strwin32error(void) /*{{{*/ FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, GetLastError(), - MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language + MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), /* Default language */ (LPTSTR)buffer, 1023, NULL); return buffer; @@ -135,11 +136,11 @@ static int GetDriveParams( HANDLE hVWin32Device, int volume, DRIVEPARAMS* pParam BOOL bResult; DWORD cb; - reg.reg_EAX = 0x440d; // IOCTL for block device - reg.reg_EBX = volume; // one-based drive number - reg.reg_ECX = 0x0860; // Get Device params + reg.reg_EAX = 0x440d; /* IOCTL for block device */ + reg.reg_EBX = volume; /* one-based drive number */ + reg.reg_ECX = 0x0860; /* Get Device params */ reg.reg_EDX = (DWORD)pParam; - reg.reg_Flags = 1; // preset the carry flag + reg.reg_Flags = 1; /* preset the carry flag */ bResult = DeviceIoControl( hVWin32Device, VWIN32_DIOC_DOS_IOCTL, ®, sizeof( reg ), ®, sizeof( reg ), &cb, 0 ); @@ -156,11 +157,11 @@ static int SetDriveParams( HANDLE hVWin32Device, int volume, DRIVEPARAMS* pParam BOOL bResult; DWORD cb; - reg.reg_EAX = 0x440d; // IOCTL for block device - reg.reg_EBX = volume; // one-based drive number - reg.reg_ECX = 0x0840; // Set Device params + reg.reg_EAX = 0x440d; /* IOCTL for block device */ + reg.reg_EBX = volume; /* one-based drive number */ + reg.reg_ECX = 0x0840; /* Set Device params */ reg.reg_EDX = (DWORD)pParam; - reg.reg_Flags = 1; // preset the carry flag + reg.reg_Flags = 1; /* preset the carry flag */ bResult = DeviceIoControl( hVWin32Device, VWIN32_DIOC_DOS_IOCTL, ®, sizeof( reg ), ®, sizeof( reg ), &cb, 0 ); @@ -177,11 +178,11 @@ static int GetMediaID( HANDLE hVWin32Device, int volume, MID* pMid ) /*{{{*/ BOOL bResult; DWORD cb; - reg.reg_EAX = 0x440d; // IOCTL for block device - reg.reg_EBX = volume; // one-based drive number - reg.reg_ECX = 0x0866; // Get Media ID + reg.reg_EAX = 0x440d; /* IOCTL for block device */ + reg.reg_EBX = volume; /* one-based drive number */ + reg.reg_ECX = 0x0866; /* Get Media ID */ reg.reg_EDX = (DWORD)pMid; - reg.reg_Flags = 1; // preset the carry flag + reg.reg_Flags = 1; /* preset the carry flag */ bResult = DeviceIoControl( hVWin32Device, VWIN32_DIOC_DOS_IOCTL, ®, sizeof( reg ), ®, sizeof( reg ), &cb, 0 ); @@ -198,9 +199,9 @@ static int VolumeCheck(HANDLE hVWin32Device, int volume, WORD* flags ) /*{{{*/ BOOL bResult; DWORD cb; - reg.reg_EAX = 0x4409; // Is Drive Remote - reg.reg_EBX = volume; // one-based drive number - reg.reg_Flags = 1; // preset the carry flag + reg.reg_EAX = 0x4409; /* Is Drive Remote */ + reg.reg_EBX = volume; /* one-based drive number */ + reg.reg_Flags = 1; /* preset the carry flag */ bResult = DeviceIoControl( hVWin32Device, VWIN32_DIOC_DOS_IOCTL, ®, sizeof( reg ), ®, sizeof( reg ), &cb, 0 ); @@ -218,11 +219,11 @@ static int LockLogicalVolume(HANDLE hVWin32Device, int volume, int lock_level, i BOOL bResult; DWORD cb; - reg.reg_EAX = 0x440d; // generic IOCTL - reg.reg_ECX = 0x084a; // lock logical volume + reg.reg_EAX = 0x440d; /* generic IOCTL */ + reg.reg_ECX = 0x084a; /* lock logical volume */ reg.reg_EBX = volume | (lock_level << 8); reg.reg_EDX = permissions; - reg.reg_Flags = 1; // preset the carry flag + reg.reg_Flags = 1; /* preset the carry flag */ bResult = DeviceIoControl( hVWin32Device, VWIN32_DIOC_DOS_IOCTL, ®, sizeof( reg ), ®, sizeof( reg ), &cb, 0 ); @@ -240,9 +241,9 @@ static int UnlockLogicalVolume( HANDLE hVWin32Device, int volume ) /*{{{*/ DWORD cb; reg.reg_EAX = 0x440d; - reg.reg_ECX = 0x086a; // lock logical volume + reg.reg_ECX = 0x086a; /* lock logical volume */ reg.reg_EBX = volume; - reg.reg_Flags = 1; // preset the carry flag + reg.reg_Flags = 1; /* preset the carry flag */ bResult = DeviceIoControl( hVWin32Device, VWIN32_DIOC_DOS_IOCTL, ®, sizeof( reg ), ®, sizeof( reg ), &cb, 0 ); @@ -281,7 +282,7 @@ const char *Device_open(struct Device *sb, const char *filename, int mode, const MID media; vname[0] = toupper(filename[0]); - driveno = vname[0] - 'A' + 1; // 1=A: 2=B: + driveno = vname[0] - 'A' + 1; /* 1=A: 2=B: */ sb->drvtype = CPMDRV_WIN95; sb->hdisk = CreateFile( "\\\\.\\vwin32", 0, @@ -522,20 +523,20 @@ const char *Device_readSector(const struct Device *drive, int track, int sector, if (drive->tracks < 44) { cyl = track; head = 0; } else { cyl = track/2; head = track & 1; } - reg.reg_EAX = 0x0201; // Read 1 sector + reg.reg_EAX = 0x0201; /* Read 1 sector */ reg.reg_EBX = (DWORD)buf; reg.reg_ECX = (cyl << 8) | (sector + PHYSICAL_SECTOR_1); reg.reg_EDX = (head << 8) | (drive->fd - 1); - reg.reg_Flags = 1; // preset the carry flag + reg.reg_Flags = 1; /* preset the carry flag */ bResult = DeviceIoControl( drive->hdisk, VWIN32_DIOC_DOS_INT13, ®, sizeof( reg ), ®, sizeof( reg ), &cb, 0 ); #else DISKIO di; - reg.reg_EAX = drive->fd - 1; // zero-based volume number + reg.reg_EAX = drive->fd - 1; /* zero-based volume number */ reg.reg_EBX = (DWORD)&di; - reg.reg_ECX = 0xffff; // use DISKIO structure - reg.reg_Flags = 1; // preset the carry flag + reg.reg_ECX = 0xffff; /* use DISKIO structure */ + reg.reg_Flags = 1; /* preset the carry flag */ di.diStartSector = sector+track*drive->sectrk; di.diSectors = 1; di.diBuffer = (DWORD)buf; @@ -618,20 +619,20 @@ const char *Device_writeSector(const struct Device *drive, int track, int sector if (drive->tracks < 44) { cyl = track; head = 0; } else { cyl = track/2; head = track & 1; } - reg.reg_EAX = 0x0301; // Write 1 sector + reg.reg_EAX = 0x0301; /* Write 1 sector */ reg.reg_EBX = (DWORD)buf; reg.reg_ECX = (cyl << 8) | (sector + PHYSICAL_SECTOR_1); reg.reg_EDX = (head << 8) | (drive->fd - 1); - reg.reg_Flags = 1; // preset the carry flag + reg.reg_Flags = 1; /* preset the carry flag */ bResult = DeviceIoControl( drive->hdisk, VWIN32_DIOC_DOS_INT13, ®, sizeof( reg ), ®, sizeof( reg ), &cb, 0 ); #else DISKIO di; - reg.reg_EAX = drive->fd - 1; // zero-based volume number + reg.reg_EAX = drive->fd - 1; /* zero-based volume number */ reg.reg_EBX = (DWORD)&di; - reg.reg_ECX = 0xffff; // use DISKIO structure - reg.reg_Flags = 1; // preset the carry flag + reg.reg_ECX = 0xffff; /* use DISKIO structure */ + reg.reg_Flags = 1; /* preset the carry flag */ di.diStartSector = sector+track*drive->sectrk; di.diSectors = 1; di.diBuffer = (DWORD)buf;