Changeset 91 for trunk/src/helpers/dosh.c
- Timestamp:
- Aug 2, 2001, 10:36:35 PM (24 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/helpers/dosh.c
r86 r91 375 375 */ 376 376 377 APIRET doshIsFixedDisk(ULONG 378 PBOOL 377 APIRET doshIsFixedDisk(ULONG ulLogicalDrive, // in: 1 for A:, 2 for B:, 3 for C:, ... 378 PBOOL pfFixed) // out: TRUE for fixed disks 379 379 { 380 380 APIRET arc = ERROR_INVALID_DRIVE; … … 505 505 && (pdp->usSectorsPerTrack == (USHORT)-1) 506 506 ); 507 } 508 509 /* 510 *@@ doshHasAudioCD: 511 * sets *pfAudio to whether ulLogicalDrive 512 * currently has an audio CD inserted. 513 * 514 * Better call this only if you're sure that 515 * ulLogicalDrive is a CD-ROM drive. Use 516 * doshIsCDROM to check. 517 * 518 *@@added V0.9.14 (2001-08-01) [umoeller] 519 */ 520 521 APIRET doshHasAudioCD(ULONG ulLogicalDrive, 522 BOOL fMixedModeCD, 523 PBOOL pfAudio) 524 { 525 APIRET arc = NO_ERROR; 526 527 HFILE hfDrive = 0; 528 ULONG ulTemp = 0; 529 530 CHAR szDrive[3] = "C:"; 531 szDrive[0] = 'A' + ulLogicalDrive - 1; 532 533 *pfAudio = FALSE; 534 535 arc = DosOpen(szDrive, // "C:", "D:", ... 536 &hfDrive, 537 &ulTemp, 538 0, 539 FILE_NORMAL, 540 OPEN_ACTION_FAIL_IF_NEW 541 | OPEN_ACTION_OPEN_IF_EXISTS, 542 OPEN_FLAGS_DASD 543 | OPEN_FLAGS_FAIL_ON_ERROR 544 | OPEN_FLAGS_NOINHERIT // V0.9.6 (2000-11-25) [pr] 545 // | OPEN_ACCESS_READONLY // V0.9.13 (2001-06-14) [umoeller] 546 | OPEN_SHARE_DENYNONE, 547 NULL); 548 549 // _Pmpf((" DosOpen(OPEN_FLAGS_DASD) returned %d", arc)); 550 551 // this still returns NO_ERROR for audio CDs in a 552 // CD-ROM drive... 553 // however, the WPS then attempts to read in the 554 // root directory for audio CDs, which produces 555 // a "sector not found" error box... 556 557 if (!arc && hfDrive) // determined above 558 { 559 ULONG ulAudioTracks = 0, 560 ulDataTracks = 0; 561 562 CHAR cds1[4] = { 'C', 'D', '0', '1' }; 563 CHAR cds2[4]; 564 // check for proper driver signature 565 if (!(arc = doshDevIOCtl(hfDrive, 566 IOCTL_CDROMDISK, 567 CDROMDISK_GETDRIVER, 568 &cds1, sizeof(cds1), 569 &cds2, sizeof(cds2)))) 570 { 571 if (memcmp(&cds1, &cds2, 4)) 572 // this is not a CD-ROM then: 573 arc = NO_ERROR; 574 else 575 { 576 struct { 577 UCHAR ucFirstTrack, 578 ucLastTrack; 579 ULONG ulLeadOut; 580 } cdat; 581 582 // get track count 583 if (!(arc = doshDevIOCtl(hfDrive, 584 IOCTL_CDROMAUDIO, 585 CDROMAUDIO_GETAUDIODISK, 586 &cds1, sizeof(cds1), 587 &cdat, sizeof(cdat)))) 588 { 589 // still no error: build the audio TOC 590 ULONG i; 591 for (i = cdat.ucFirstTrack; 592 i <= cdat.ucLastTrack; 593 i++) 594 { 595 BYTE cdtp[5] = 596 { 'C', 'D', '0', '1', (UCHAR)i }; 597 598 struct { 599 ULONG ulTrackAddress; 600 BYTE bFlags; 601 } trackdata; 602 603 if (!(arc = doshDevIOCtl(hfDrive, 604 IOCTL_CDROMAUDIO, 605 CDROMAUDIO_GETAUDIOTRACK, 606 &cdtp, sizeof(cdtp), 607 &trackdata, sizeof(trackdata)))) 608 { 609 if (trackdata.bFlags & 64) 610 ulDataTracks++; 611 else 612 { 613 ulAudioTracks++; 614 615 if (!fMixedModeCD) 616 { 617 // caller doesn't want mixed mode: 618 // stop here 619 ulDataTracks = 0; 620 break; 621 } 622 } 623 } 624 } 625 626 // _Pmpf((" got %d audio, %d data tracks", 627 // ulAudioTracks, ulDataTracks)); 628 629 if (!ulDataTracks) 630 *pfAudio = TRUE; 631 } 632 else 633 { 634 // not audio disk: 635 // go on then 636 // _Pmpf((" CDROMAUDIO_GETAUDIODISK returned %d", arc)); 637 arc = NO_ERROR; 638 } 639 } 640 } 641 else 642 { 643 // not CD-ROM: go on then 644 // _Pmpf((" CDROMDISK_GETDRIVER returned %d", arc)); 645 arc = NO_ERROR; 646 } 647 } 648 649 if (hfDrive) 650 DosClose(hfDrive); 651 652 return (arc); 507 653 } 508 654 … … 679 825 ULONG fl) // in: ASSERTFL_* flags 680 826 { 681 HFILE hfDrive = 0;682 ULONG ulTemp = 0;683 827 APIRET arc = NO_ERROR; 684 828 BOOL fFixed = FALSE, … … 713 857 } 714 858 715 if (!arc) 716 { 717 CHAR szDrive[3] = "C:"; 718 szDrive[0] = 'A' + ulLogicalDrive - 1; 719 arc = DosOpen(szDrive, // "C:", "D:", ... 720 &hfDrive, 721 &ulTemp, 722 0, 723 FILE_NORMAL, 724 OPEN_ACTION_FAIL_IF_NEW 725 | OPEN_ACTION_OPEN_IF_EXISTS, 726 OPEN_FLAGS_DASD 727 | OPEN_FLAGS_FAIL_ON_ERROR 728 | OPEN_FLAGS_NOINHERIT // V0.9.6 (2000-11-25) [pr] 729 // | OPEN_ACCESS_READONLY // V0.9.13 (2001-06-14) [umoeller] 730 | OPEN_SHARE_DENYNONE, 731 NULL); 732 733 // _Pmpf((" DosOpen(OPEN_FLAGS_DASD) returned %d", arc)); 734 735 // this still returns NO_ERROR for audio CDs in a 736 // CD-ROM drive... 737 // however, the WPS then attempts to read in the 738 // root directory for audio CDs, which produces 739 // a "sector not found" error box... 740 741 if (!arc && hfDrive && fCDROM) // determined above 742 { 743 ULONG ulAudioTracks = 0, 744 ulDataTracks = 0; 745 746 CHAR cds1[4] = { 'C', 'D', '0', '1' }; 747 CHAR cds2[4]; 748 // check for proper driver signature 749 if (!(arc = doshDevIOCtl(hfDrive, 750 IOCTL_CDROMDISK, 751 CDROMDISK_GETDRIVER, 752 &cds1, sizeof(cds1), 753 &cds2, sizeof(cds2)))) 754 { 755 if (memcmp(&cds1, &cds2, 4)) 756 // this is not a CD-ROM then: 757 arc = NO_ERROR; 758 else 759 { 760 struct { 761 UCHAR ucFirstTrack, 762 ucLastTrack; 763 ULONG ulLeadOut; 764 } cdat; 765 766 // get track count 767 if (!(arc = doshDevIOCtl(hfDrive, 768 IOCTL_CDROMAUDIO, 769 CDROMAUDIO_GETAUDIODISK, 770 &cds1, sizeof(cds1), 771 &cdat, sizeof(cdat)))) 772 { 773 // still no error: build the audio TOC 774 ULONG i; 775 for (i = cdat.ucFirstTrack; 776 i <= cdat.ucLastTrack; 777 i++) 778 { 779 BYTE cdtp[5] = 780 { 'C', 'D', '0', '1', (UCHAR)i }; 781 782 struct { 783 ULONG ulTrackAddress; 784 BYTE bFlags; 785 } trackdata; 786 787 if (!(arc = doshDevIOCtl(hfDrive, 788 IOCTL_CDROMAUDIO, 789 CDROMAUDIO_GETAUDIOTRACK, 790 &cdtp, sizeof(cdtp), 791 &trackdata, sizeof(trackdata)))) 792 { 793 if (trackdata.bFlags & 64) 794 ulDataTracks++; 795 else 796 { 797 ulAudioTracks++; 798 799 if (!(fl & ASSERTFL_MIXEDMODECD)) 800 { 801 // caller doesn't want mixed mode: 802 // stop here 803 ulDataTracks = 0; 804 break; 805 } 806 } 807 } 808 } 809 810 // _Pmpf((" got %d audio, %d data tracks", 811 // ulAudioTracks, ulDataTracks)); 812 813 if (!ulDataTracks) 814 arc = ERROR_AUDIO_CD_ROM; // special private error code (10000) 815 } 816 else 817 { 818 // not audio disk: 819 // go on then 820 // _Pmpf((" CDROMAUDIO_GETAUDIODISK returned %d", arc)); 821 arc = NO_ERROR; 822 } 823 } 824 } 825 else 826 { 827 // not CD-ROM: go on then 828 // _Pmpf((" CDROMDISK_GETDRIVER returned %d", arc)); 829 arc = NO_ERROR; 830 } 831 } 859 if ((!arc) && (fCDROM)) 860 { 861 BOOL fAudio; 862 if ( (!(arc = doshHasAudioCD(ulLogicalDrive, 863 ((fl & ASSERTFL_MIXEDMODECD) != 0), 864 &fAudio))) 865 && (fAudio) 866 ) 867 arc = ERROR_AUDIO_CD_ROM; // special private error code (10000) 832 868 } 833 869 … … 867 903 } 868 904 869 if (hfDrive)870 DosClose(hfDrive);871 872 905 return (arc); 873 906 } … … 887 920 CHAR name[3] = "?:"; 888 921 ULONG fd = 0, 889 action = 0 ,890 paramsize = 0, 891 datasize = 0;922 action = 0; 923 // paramsize = 0; 924 // datasize = 0; 892 925 APIRET rc = NO_ERROR; 893 926 USHORT data, … … 913 946 param = 0; 914 947 data = (USHORT)ulLogicalDrive; 915 paramsize = sizeof(param);916 datasize = sizeof(data);948 // paramsize = sizeof(param); 949 // datasize = sizeof(data); 917 950 rc = doshDevIOCtl(fd, 918 951 IOCTL_DISK, DSK_SETLOGICALMAP, … … 941 974 APIRET arc = NO_ERROR; 942 975 FSALLOCATE fsa; 943 double dbl = -1;976 // double dbl = -1; 944 977 945 978 if (!(arc = DosQueryFSInfo(ulLogicalDrive, FSIL_ALLOC, &fsa, sizeof(fsa)))) … … 967 1000 APIRET arc = NO_ERROR; 968 1001 FSALLOCATE fsa; 969 double dbl = -1;1002 // double dbl = -1; 970 1003 971 1004 if (!(arc = DosQueryFSInfo(ulLogicalDrive, FSIL_ALLOC, &fsa, sizeof(fsa)))) … … 983 1016 * 984 1017 *@@changed V0.9.1 (99-12-12) [umoeller]: added cbBuf to prototype 1018 *@@changed V0.9.14 (2001-08-01) [umoeller]: fixed, this never respected cbBuf 985 1019 */ 986 1020 … … 1015 1049 // Each data field following fsqBuffer.szName begins 1016 1050 // immediately after the previous item. 1017 strcpy(pszBuf, 1018 (CHAR*)(&pfsqBuffer->szName) + pfsqBuffer->cbName + 1); 1051 strncpy(pszBuf, 1052 (CHAR*)(&pfsqBuffer->szName) + pfsqBuffer->cbName + 1, 1053 cbBuf); // V0.9.14 (2001-08-01) [umoeller] 1054 *(pszBuf + cbBuf) = '\0'; 1019 1055 } 1020 1056 } … … 2462 2498 ********************************************************************/ 2463 2499 2464 static PVOID G_pvGlobalInfoSeg = NULL,2500 static PVOID // G_pvGlobalInfoSeg = NULL, 2465 2501 G_pvLocalInfoSeg = NULL; 2466 2502 … … 2482 2518 &LocalInfoSegSelector); 2483 2519 // thunk 2484 G_pvGlobalInfoSeg = (PVOID)( (GlobalInfoSegSelector << 0x000D)2485 & 0x01fff0000); 2520 /* G_pvGlobalInfoSeg = (PVOID)( (GlobalInfoSegSelector << 0x000D) 2521 & 0x01fff0000); */ 2486 2522 G_pvLocalInfoSeg = (PVOID)( (LocalInfoSegSelector << 0x000D) 2487 2523 & 0x01fff0000);
Note:
See TracChangeset
for help on using the changeset viewer.