home *** CD-ROM | disk | FTP | other *** search
/ Amiga ACS 1998 #6 / amigaacscoverdisc1998-061998.iso / games / descent / source / bios / cdrom.c next >
Text File  |  1998-06-08  |  2KB  |  85 lines

  1. /*
  2. THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX
  3. SOFTWARE CORPORATION ("PARALLAX").  PARALLAX, IN DISTRIBUTING THE CODE TO
  4. END-USERS, AND SUBJECT TO ALL OF THE TERMS AND CONDITIONS HEREIN, GRANTS A
  5. ROYALTY-FREE, PERPETUAL LICENSE TO SUCH END-USERS FOR USE BY SUCH END-USERS
  6. IN USING, DISPLAYING,  AND CREATING DERIVATIVE WORKS THEREOF, SO LONG AS
  7. SUCH USE, DISPLAY OR CREATION IS FOR NON-COMMERCIAL, ROYALTY OR REVENUE
  8. FREE PURPOSES.  IN NO EVENT SHALL THE END-USER USE THE COMPUTER CODE
  9. CONTAINED HEREIN FOR REVENUE-BEARING PURPOSES.  THE END-USER UNDERSTANDS
  10. AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE.  
  11. COPYRIGHT 1993-1998 PARALLAX SOFTWARE CORPORATION.  ALL RIGHTS RESERVED.
  12. */
  13. #include <stdio.h>
  14. #include <stdlib.h>
  15.  
  16. #include "dpmi.h"
  17.  
  18. typedef struct {
  19.     char unit;
  20.     short dev_offset;
  21.     short dev_segment;
  22. } dev_list;
  23.  
  24. typedef struct _Dev_Hdr {
  25.     struct _Dev_Hdr far *dev_next;
  26.     unsigned short dev_att;
  27.     ushort dev_stat;
  28.     ushort dev_int;
  29.     char dev_name[8];
  30.     short dev_resv;
  31.     char dev_letr;
  32.     char dev_units;
  33. } dev_header;
  34.     
  35.  
  36. void find_cdrom()
  37. {
  38.     dpmi_real_regs rregs;
  39.         
  40.     // Get dos memory for call...
  41.     dev_list * buf;
  42.     dev_header *device;
  43.     int num_drives, i;
  44.     unsigned cur_drive, cdrom_drive;
  45.     FILE *fp;
  46.  
  47.  
  48.     memset(&rregs,0,sizeof(dpmi_real_regs));
  49.     rregs.eax = 0x1500;
  50.     rregs.ebx = 0;
  51.     dpmi_real_int386x( 0x2f, &rregs );
  52.     if ((rregs.ebx & 0xffff) == 0) {
  53.         printf ("Error: no cd-rom driver detected.");
  54.         exit(1);
  55.     }
  56.     num_drives = rregs.ebx;
  57.  
  58.     buf = (dev_list *)dpmi_get_temp_low_buffer( sizeof(dev_list)*26 );    
  59.  
  60.     rregs.es = DPMI_real_segment(buf);
  61.     rregs.ebx = DPMI_real_offset(buf);
  62.     rregs.eax = 0x1501;
  63.     dpmi_real_int386x( 0x2f, &rregs );
  64.     cdrom_drive = 0;
  65.     for (i = 0; i < num_drives; i++) {
  66.         device = (dev_header *)((buf[i].dev_segment<<4)+ buf[i].dev_offset);
  67.         _dos_setdrive(device->dev_letr);
  68.         _dos_getdrive(&cur_drive);
  69.         if (cur_drive == device->dev_letr) {
  70.             //if (!chdir("\\descent")) {
  71.             //if (pig_found)
  72.             cdrom_drive = device->dev_letr;
  73.             printf( "Found cd-rom drive %c:\n", cdrom_drive + 'A' -1 );
  74.         }                
  75.     }
  76.     if (cdrom_drive == 0)
  77.         printf("Descent CD not detected in any connected CDROM device\n");
  78. }
  79.  
  80. void main()
  81. {
  82.     find_cdrom();
  83. }
  84. 
  85.