9b1f1487ccaaa522a5f9b47065479bdb2c82e605
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
48 else if (strnicmp(p
, "rdisk(", 6) == 0)
52 * multi(0)disk(0)rdisk(x)partition(y)\path
55 *BootDrive
= atoi(p
) + 0x80;
57 if ((p
== NULL
) || (strnicmp(p
, ")partition(", 11) != 0))
60 *BootPartition
= atoi(p
);
62 if ((p
== NULL
) || (*BootPartition
== 0))
76 void ConstructArcPath(PUCHAR ArcPath
, PUCHAR SystemFolder
, ULONG Disk
, ULONG Partition
)
80 strcpy(ArcPath
, "multi(0)disk(0)");
86 * multi(0)disk(0)fdisk(x)\path
88 sprintf(tmp
, "fdisk(%d)", (int) Disk
);
95 * multi(0)disk(0)rdisk(x)partition(y)\path
97 sprintf(tmp
, "rdisk(%d)partition(%d)", (int) (Disk
- 0x80), (int) Partition
);
101 if (SystemFolder
[0] == '\\' || SystemFolder
[0] == '/')
103 strcat(ArcPath
, SystemFolder
);
107 strcat(ArcPath
, "\\");
108 strcat(ArcPath
, SystemFolder
);
112 ULONG
ConvertArcNameToBiosDriveNumber(PUCHAR ArcPath
)
115 ULONG DriveNumber
= 0;
117 if (strnicmp(ArcPath
, "multi(0)disk(0)", 15) != 0)
121 if (strnicmp(p
, "fdisk(", 6) == 0)
125 * multi(0)disk(0)fdisk(x)\path
128 DriveNumber
= atoi(p
);
130 else if (strnicmp(p
, "rdisk(", 6) == 0)
134 * multi(0)disk(0)rdisk(x)partition(y)\path
137 DriveNumber
= atoi(p
) + 0x80;