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.
26 BOOL
DissectArcPath(CHAR
*ArcPath
, CHAR
*BootPath
, ULONG
* BootDrive
, ULONG
* BootPartition
)
30 if (strnicmp(ArcPath
, "multi(0)disk(0)", 15) != 0)
34 if (strnicmp(p
, "fdisk(", 6) == 0)
38 * multi(0)disk(0)fdisk(x)\path
46 *BootPartition
= 0xff;
48 else if (strnicmp(p
, "cdrom(", 6) == 0)
52 * multi(0)disk(0)cdrom(x)\path
60 *BootPartition
= 0xff;
62 else if (strnicmp(p
, "rdisk(", 6) == 0)
66 * multi(0)disk(0)rdisk(x)partition(y)\path
69 *BootDrive
= atoi(p
) + 0x80;
71 if ((p
== NULL
) || (strnicmp(p
, ")partition(", 11) != 0))
74 *BootPartition
= atoi(p
);
76 if ((p
== NULL
) || (*BootPartition
== 0))
90 VOID
ConstructArcPath(PCHAR ArcPath
, PCHAR SystemFolder
, ULONG Disk
, ULONG Partition
)
94 strcpy(ArcPath
, "multi(0)disk(0)");
100 * multi(0)disk(0)fdisk(x)\path
102 sprintf(tmp
, "fdisk(%d)", (int) Disk
);
103 strcat(ArcPath
, tmp
);
109 * multi(0)disk(0)rdisk(x)partition(y)\path
111 sprintf(tmp
, "rdisk(%d)partition(%d)", (int) (Disk
- 0x80), (int) Partition
);
112 strcat(ArcPath
, tmp
);
115 if (SystemFolder
[0] == '\\' || SystemFolder
[0] == '/')
117 strcat(ArcPath
, SystemFolder
);
121 strcat(ArcPath
, "\\");
122 strcat(ArcPath
, SystemFolder
);
126 ULONG
ConvertArcNameToBiosDriveNumber(PCHAR ArcPath
)
129 ULONG DriveNumber
= 0;
131 if (strnicmp(ArcPath
, "multi(0)disk(0)", 15) != 0)
135 if (strnicmp(p
, "fdisk(", 6) == 0)
139 * multi(0)disk(0)fdisk(x)\path
142 DriveNumber
= atoi(p
);
144 else if (strnicmp(p
, "rdisk(", 6) == 0)
148 * multi(0)disk(0)rdisk(x)partition(y)\path
151 DriveNumber
= atoi(p
) + 0x80;