summaryrefslogtreecommitdiffstats
path: root/loader/cdrom.c
diff options
context:
space:
mode:
authorErik Troan <ewt@redhat.com>1999-08-08 14:31:40 +0000
committerErik Troan <ewt@redhat.com>1999-08-08 14:31:40 +0000
commit79b0b922a6ea711a1118a013ebba89651cf62518 (patch)
treea62f1b66b017f4e8aaa02981595d07e4e60ff398 /loader/cdrom.c
parent1d9d19780eb69a1a91f37d0e6308396978159c33 (diff)
downloadanaconda-79b0b922a6ea711a1118a013ebba89651cf62518.tar.gz
anaconda-79b0b922a6ea711a1118a013ebba89651cf62518.tar.xz
anaconda-79b0b922a6ea711a1118a013ebba89651cf62518.zip
*** empty log message ***
Diffstat (limited to 'loader/cdrom.c')
-rw-r--r--loader/cdrom.c94
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;
+}
+