]> icculus.org git repositories - btb/d2x.git/blob - main/old/cdrom.c
use the orientation parameter of g3_draw_bitmap
[btb/d2x.git] / main / old / cdrom.c
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-1999 PARALLAX SOFTWARE CORPORATION.  ALL RIGHTS RESERVED.
12 */
13
14 #include <dos.h>
15 #include <stdio.h>
16 #include <stdlib.h>
17 #include <string.h>
18
19 #include "dpmi.h"
20
21 typedef struct {
22         char unit;
23         ushort dev_offset;
24         ushort dev_segment;
25 } dev_list;
26
27 typedef struct _Dev_Hdr {
28         unsigned int dev_next;
29         unsigned short dev_att;
30         ushort dev_stat;
31         ushort dev_int;
32         char dev_name[8];
33         short dev_resv;
34         char dev_letr;
35         char dev_units;
36 } dev_header;
37
38 int find_descent_cd()
39 {
40         dpmi_real_regs rregs;
41                 
42         // Get dos memory for call...
43         dev_list * buf;
44         dev_header *device;
45         int num_drives, i;
46         unsigned cdrive, cur_drive, cdrom_drive;
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                 return -1;                      // No cdrom
54         }
55         num_drives = rregs.ebx;
56
57         buf = (dev_list *)dpmi_get_temp_low_buffer( sizeof(dev_list)*26 );      
58         if (buf==NULL) {
59                 return -2;                      // Error getting memory!
60         }
61
62         memset(&rregs,0,sizeof(dpmi_real_regs));
63         rregs.es = DPMI_real_segment(buf);
64         rregs.ebx = DPMI_real_offset(buf);
65         rregs.eax = 0x1501;
66         dpmi_real_int386x( 0x2f, &rregs );
67         cdrom_drive = 0;
68         _dos_getdrive(&cdrive);
69         for (i = 0; i < num_drives; i++) {
70                 device = (dev_header *)((buf[i].dev_segment<<4)+ buf[i].dev_offset);
71                 _dos_setdrive(device->dev_letr,&cur_drive);
72                 _dos_getdrive(&cur_drive);
73                 if (cur_drive == device->dev_letr) {
74                         if (!chdir("\\descent")) {
75                                 FILE * fp;
76                                 fp = fopen( "saturn.hog", "rb" );       
77                                 if ( fp )       {
78                                         cdrom_drive = device->dev_letr;
79                                         fclose(fp);
80                                         break;
81                                 }
82                         }
83                 }                               
84         }
85         _dos_setdrive(cdrive,&cur_drive);
86         return cdrom_drive;
87 }
88