X-Originating-IP: [200.34.143.5] From: "J. L." To: Cc: References: Subject: Re: bit and bytes ... help [ biosdisk ] Date: Tue, 11 Jun 2002 17:55:37 -0500 MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit X-Priority: 3 X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook Express 5.50.4807.1700 X-MimeOLE: Produced By Microsoft MimeOLE V5.50.4807.1700 Message-ID: X-OriginalArrivalTime: 11 Jun 2002 22:55:31.0546 (UTC) FILETIME=[1688C3A0:01C2119B] Reply-To: djgpp AT delorie DOT com ----- Original Message ----- From: "Frank Troy Cook Jr." Newsgroups: comp.os.msdos.djgpp To: Sent: Tuesday, June 11, 2002 5:55 AM Subject: bit and bytes ... help [ biosdisk ] > i need to extract drive information returned from a biosdisk call. for > example: > > main() > { > int count; > char buffer[512]; > biosdisk(8, 0x80, 0, 0, 0, 1, buffer); > for(count=0; count < 4; count++) > { > printf("%u ", buffer[count]); > } > printf("\n"); > } > > i understandfrom the djgpp site that the first 4 bytes return: > byte 0 = sectors per track (bits 0..5) and top two bits of cylinder (in bits > 6..7) > byte 1 = cyliders (bits 0..7) > byte 2 = number of drives > byte 3 = number of heads > how do i convert this to integer numbers correctly? > If I understand the info of libgc... 8) You must mask, shift and reorder the byte 0 to 3. #include #include int main(void){ int dummy; int sect_per_trac, cylinders, num_drives, num_heads; char buffer[512]; biosdisk(8, 0x80, 0, 0, 0, 1, buffer); sec_per_tracks=buffer[0]&0x3C; dummy=(buffer[0]&0xC0 >> 5) << 8; cylinders=buffer[1]&0xFF + dummy; num_drives=buffer[2]&0xFF; num_heads=buffer[3]&0xFF; /* anything else ... */ return 0; } > please respond to fcook1SPAMBLOCK AT carolina DOT rr DOT com >