source: trunk/stdcode/physdisk.c@ 3

Last change on this file since 3 was 3, checked in by erdmann, 8 years ago

fixing 2 bugs in mmi_customdll.c, unpacking STDCODE.RAR into its own directory, removing all binaries (.obj, .exe) from repo

  • Property svn:eol-style set to native
File size: 4.4 KB
Line 
1
2// ù Ä ÄÄÄÄÍÍ = Ä ù Ä = ÍÍÄÄÄÄ Ä ù
3// ³ ³
4// ÜÛÛÛÛÛÛÛÜ ÜÛÜ ÜÛÛÛÛÛÛÛÛÜ ú úÄÄÄÍÄÄÍÄÍÍÄÄÍÍÍÍÄÍÍÍÍÍÍÍÍÍÎÄ
5// ³ ÛÛÛÛßßßÛÛÛÛ ÛÛÛÛÛ ÛÛÛß ßÛÛÛ ³ AiR-BOOT - Installer/2 º
6// º ÛÛÛÛÜÜÜÛÛÛÛ ÛÛÛÛÛ ÛÛÛÜ ÜÛÛÛ º ú ÄÄÄÄÍÄÍÍÄÄÍÍÍÍÄÍÍÍÍÍÍÍÍÄÍÍÍÍÍÎÄ
7// º ÛÛÛÛÛÛÛÛÛÛÛ ÛÛÛÛÛ ÛÛÛÛÛÛÛÛÛß º Section: AiR-BOOTUP Package º
8// º ÛÛÛÛ ÛÛÛÛ ÛÛÛÛÛ ÛÛÛÛ ßÛÛÛÛÜ º ³ Created: 24/10/02 º
9// ³ ßÛÛß ßÛÛß ßÛß ßÛÛß ßÛÛß ³ ³ Last Modified: ³
10// ÜÜÜ ³ Number Of Modifications: 000 ³
11// ù ÜÛÛß ù ³ INCs required: *none* ³
12// ÄÄÄÄÄÄÄ ÜÛÛß º Written By: Martin Kiewitz ³
13// ³ Ú¿Ú¿³ÜÛÛÛÜÜÛÛÛÜ ³ º (c) Copyright by ³
14// º ÀÙ³ÀÙßÛÛÛßßÜÛÛß º º AiR ON-Line Software '02 ú
15// º ÄÄÄÄÄÄÄ ÜÛÛÝ º º All rights reserved.
16// º ÜÛÛÛÄÄÄÄÄÄÄÄÄ º ÄÎÍÍÍÄÍÍÍÍÍÄÍÍÍÍÄÍÍÄÄÍÄÄÍÄÄÄúÄÄ ú
17// º ÜÛÛÛݳ ³Ú¿³³Ä º
18// ³ ÜÛÛÛÛ Àij³ÀÙ³Ä ³
19// ßÛÛÛÛÝÄÄÄÄÄÄÄÄÄÄ
20// ³ ßß ³
21// ù ÄŽ-=’iç éï-Liïî SéŸâW’çî=-ÃÄÄ ù
22
23#define INCL_NOPMAPI
24#define INCL_DOS
25#define INCL_DOSDEVIOCTL
26#include <os2.h>
27#include <malloc.h>
28
29#include <global.h>
30
31USHORT PHYS_EnumeratePhysicalDisks (void) {
32 USHORT NumDrives = 0;
33
34 if (DosPhysicalDisk(INFO_COUNT_PARTITIONABLE_DISKS, &NumDrives, sizeof(NumDrives),NULL, 0) != 0)
35 return 0;
36 return NumDrives;
37 }
38
39USHORT PHYS_GetIOCTLHandle (PSZ DriveID) {
40 USHORT IOCTLHandle = 0;
41
42 if (DosPhysicalDisk(INFO_GETIOCTLHANDLE, &IOCTLHandle, sizeof(IOCTLHandle),DriveID, 3) != 0)
43 return 0;
44 return IOCTLHandle;
45 }
46
47VOID PHYS_FreeIOCTLHandle (USHORT IOCTLHandle) {
48 DosPhysicalDisk(INFO_FREEIOCTLHANDLE, NULL, 0, &IOCTLHandle, sizeof(IOCTLHandle));
49 return;
50 }
51
52BOOL PHYS_ReadPhysicalSector (USHORT IOCTLHandle, UCHAR Cylinder, UCHAR Head, UCHAR SectorCount, PBYTE BufferPtr) {
53 ULONG TrackLayoutLen = sizeof(TRACKLAYOUT)+sizeof(ULONG)*(SectorCount-1);
54 TRACKLAYOUT *TrackLayoutPtr = malloc(TrackLayoutLen);
55 ULONG cbParms = sizeof(TrackLayoutPtr);
56 ULONG cbData = 512;
57 INT i;
58
59 TrackLayoutPtr->bCommand = 0x01;
60 TrackLayoutPtr->usHead = Head;
61 TrackLayoutPtr->usCylinder = Cylinder;
62 TrackLayoutPtr->usFirstSector = 0;
63 TrackLayoutPtr->cSectors = SectorCount;
64
65 for (i=0; i<SectorCount; i++) {
66 TrackLayoutPtr->TrackTable[i].usSectorNumber = i+1;
67 TrackLayoutPtr->TrackTable[i].usSectorSize = 512;
68 }
69
70 i = 1;
71 if (DosDevIOCtl(IOCTLHandle, IOCTL_PHYSICALDISK, PDSK_READPHYSTRACK,
72 TrackLayoutPtr, cbParms, &cbParms, BufferPtr, cbData, &cbData))
73 i = 0;
74 free (TrackLayoutPtr);
75 return i;
76 }
77
78BOOL PHYS_WritePhysicalSector (USHORT IOCTLHandle, UCHAR Cylinder, UCHAR Head, UCHAR SectorCount, PBYTE BufferPtr) {
79 ULONG TrackLayoutLen = sizeof(TRACKLAYOUT)+sizeof(ULONG)*(SectorCount-1);
80 TRACKLAYOUT *TrackLayoutPtr = malloc(TrackLayoutLen);
81 ULONG cbParms = sizeof(TrackLayoutPtr);
82 ULONG cbData = 512;
83 INT i;
84
85 TrackLayoutPtr->bCommand = 0x01;
86 TrackLayoutPtr->usHead = Head;
87 TrackLayoutPtr->usCylinder = Cylinder;
88 TrackLayoutPtr->usFirstSector = 0;
89 TrackLayoutPtr->cSectors = SectorCount;
90
91 for (i=0; i<SectorCount; i++) {
92 TrackLayoutPtr->TrackTable[i].usSectorNumber = i+1;
93 TrackLayoutPtr->TrackTable[i].usSectorSize = 512;
94 }
95
96 i = 1;
97 if (DosDevIOCtl(IOCTLHandle, IOCTL_PHYSICALDISK, PDSK_WRITEPHYSTRACK,
98 TrackLayoutPtr, cbParms, &cbParms, BufferPtr, cbData, &cbData))
99 i = 0;
100 free (TrackLayoutPtr);
101 return i;
102 }
103
104USHORT PHYS_GetGeometrySectorsPerTrack (USHORT IOCTLHandle) {
105 DEVICEPARAMETERBLOCK DeviceParmBlock;
106 ULONG ulDataLength;
107
108 if (!DosDevIOCtl(IOCTLHandle, IOCTL_PHYSICALDISK, PDSK_GETPHYSDEVICEPARAMS,
109 NULL, 0, NULL, &DeviceParmBlock, sizeof(DeviceParmBlock), &ulDataLength))
110 return DeviceParmBlock.cSectorsPerTrack;
111 return 0;
112 }
113
114USHORT PHYS_GetGeometryHeadsPerCylinder (USHORT IOCTLHandle) {
115 DEVICEPARAMETERBLOCK DeviceParmBlock;
116 ULONG ulDataLength;
117
118 if (!DosDevIOCtl(IOCTLHandle, IOCTL_PHYSICALDISK, PDSK_GETPHYSDEVICEPARAMS,
119 NULL, 0, NULL, &DeviceParmBlock, sizeof(DeviceParmBlock), &ulDataLength))
120 return DeviceParmBlock.cHeads;
121 return 0;
122 }
Note: See TracBrowser for help on using the repository browser.