diff options
author | Erik Troan <ewt@redhat.com> | 1999-08-08 14:31:40 +0000 |
---|---|---|
committer | Erik Troan <ewt@redhat.com> | 1999-08-08 14:31:40 +0000 |
commit | 79b0b922a6ea711a1118a013ebba89651cf62518 (patch) | |
tree | a62f1b66b017f4e8aaa02981595d07e4e60ff398 /loader/cdrom.c | |
parent | 1d9d19780eb69a1a91f37d0e6308396978159c33 (diff) | |
download | anaconda-79b0b922a6ea711a1118a013ebba89651cf62518.tar.gz anaconda-79b0b922a6ea711a1118a013ebba89651cf62518.tar.xz anaconda-79b0b922a6ea711a1118a013ebba89651cf62518.zip |
*** empty log message ***
Diffstat (limited to 'loader/cdrom.c')
-rw-r--r-- | loader/cdrom.c | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/loader/cdrom.c b/loader/cdrom.c new file mode 100644 index 000000000..151dcd843 --- /dev/null +++ b/loader/cdrom.c @@ -0,0 +1,94 @@ +#include <stdlib.h> +#include <unistd.h> + +#include <newt.h> + +#include "cdrom.h" +#include "devices.h" +#include "lang.h" +#include "loader.h" +#include "windows.h" + +#define CD_SCSI 2 +#define CD_OTHER 3 + +static struct { char * modname, * devname; } transTable[] = { + { "cm206", "cm206cd" }, + { "sonycd535", "cdu535" }, + { NULL, NULL } +} ; + +static int setupCDdevicePanel(int * type) { + char * menuItems[3]; + int cdromType = 0, rc; + + menuItems[0] = "SCSI"; + menuItems[1] = _("Other CDROM"); + menuItems[2] = NULL; + + if (*type == CD_OTHER) + cdromType = 1; + + rc = newtWinMenu(_("CDROM type"), _("What type of CDROM do you have?"), + 30, 5, 5, 7, menuItems, + &cdromType, _("Ok"), _("Back"), NULL); + + if (rc == 2) return LOADER_BACK; + + if (cdromType == 0) + *type = CD_SCSI; + else + *type = CD_OTHER; + + return 0; +} + +int setupCDdevice(struct knownDevices * kd, moduleInfoSet modInfo, + moduleList modLoaded, moduleDeps modDeps, int flags) { + int type = 0, rc = 0; + int i; + int done = 0; + char * devName; + + while (!done) { + rc = setupCDdevicePanel(&type); + if (rc) return rc; + + switch (type) { + case CD_SCSI: + rc = devDeviceMenu(DRIVER_SCSI, modInfo, modLoaded, modDeps, + flags, NULL); + if (!rc) { + kdFindScsiList(kd); + /* we'll get called again if the scsi bus doesn't have a CDROM + drive on it */ + done = 1; + } + break; + + case CD_OTHER: + rc = devDeviceMenu(DRIVER_CDROM, modInfo, modLoaded, modDeps, + flags, &devName); + if (!rc) { + for (i = 0; transTable[i].modname; i++) { + if (!strcmp(devName, transTable[i].devname)) { + devName = transTable[i].devname; + break; + } + } + + kdAddDevice(kd, DEVICE_CDROM, devName, NULL); + + done = 1; + } + break; + } + } + + winStatus(35, 3, "CDROM", _("Initializing CDROM...")); + sleep(2); /* some drivers need time to initialize */ + newtPopWindow(); + + return 0; +} + |