26f57548756ff81b5a89abafde0c1866a6098472
2 * FreeLoader - arcname.c
4 * Copyright (C) 2001 Brian Palmer <brianp@sginet.com>
5 * Copyright (C) 2001 Eric Kohl
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
24 BOOL
DissectArcPath(CHAR
*ArcPath
, CHAR
*BootPath
, ULONG
* BootDrive
, ULONG
* BootPartition
)
28 if (_strnicmp(ArcPath
, "multi(0)disk(0)", 15) != 0)
32 if (_strnicmp(p
, "fdisk(", 6) == 0)
36 * multi(0)disk(0)fdisk(x)\path
44 *BootPartition
= 0xff;
46 else if (_strnicmp(p
, "cdrom(", 6) == 0)
50 * multi(0)disk(0)cdrom(x)\path
58 *BootPartition
= 0xff;
60 else if (_strnicmp(p
, "rdisk(", 6) == 0)
64 * multi(0)disk(0)rdisk(x)partition(y)\path
67 *BootDrive
= atoi(p
) + 0x80;
69 if ((p
== NULL
) || (_strnicmp(p
, ")partition(", 11) != 0))
72 *BootPartition
= atoi(p
);
88 VOID
ConstructArcPath(PCHAR ArcPath
, PCHAR SystemFolder
, ULONG Disk
, ULONG Partition
)
92 strcpy(ArcPath
, "multi(0)disk(0)");
98 * multi(0)disk(0)fdisk(x)\path
100 sprintf(tmp
, "fdisk(%d)", (int) Disk
);
101 strcat(ArcPath
, tmp
);
107 * multi(0)disk(0)rdisk(x)partition(y)\path
109 sprintf(tmp
, "rdisk(%d)partition(%d)", (int) (Disk
- 0x80), (int) Partition
);
110 strcat(ArcPath
, tmp
);
113 if (SystemFolder
[0] == '\\' || SystemFolder
[0] == '/')
115 strcat(ArcPath
, SystemFolder
);
119 strcat(ArcPath
, "\\");
120 strcat(ArcPath
, SystemFolder
);
124 ULONG
ConvertArcNameToBiosDriveNumber(PCHAR ArcPath
)
127 ULONG DriveNumber
= 0;
129 if (_strnicmp(ArcPath
, "multi(0)disk(0)", 15) != 0)
133 if (_strnicmp(p
, "fdisk(", 6) == 0)
137 * multi(0)disk(0)fdisk(x)\path
140 DriveNumber
= atoi(p
);
142 else if (_strnicmp(p
, "rdisk(", 6) == 0)
146 * multi(0)disk(0)rdisk(x)partition(y)\path
149 DriveNumber
= atoi(p
) + 0x80;