Ignore:
Timestamp:
Aug 2, 2001, 10:36:35 PM (24 years ago)
Author:
umoeller
Message:

Misc changes

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/helpers/dosh.c

    r86 r91  
    375375 */
    376376
    377 APIRET doshIsFixedDisk(ULONG  ulLogicalDrive,   // in: 1 for A:, 2 for B:, 3 for C:, ...
    378                        PBOOL  pfFixed)          // out: TRUE for fixed disks
     377APIRET doshIsFixedDisk(ULONG ulLogicalDrive,   // in: 1 for A:, 2 for B:, 3 for C:, ...
     378                       PBOOL pfFixed)          // out: TRUE for fixed disks
    379379{
    380380    APIRET arc = ERROR_INVALID_DRIVE;
     
    505505             && (pdp->usSectorsPerTrack == (USHORT)-1)
    506506           );
     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
     521APIRET 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);
    507653}
    508654
     
    679825                       ULONG fl)                // in: ASSERTFL_* flags
    680826{
    681     HFILE   hfDrive = 0;
    682     ULONG   ulTemp = 0;
    683827    APIRET  arc = NO_ERROR;
    684828    BOOL    fFixed = FALSE,
     
    713857        }
    714858
    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)
    832868    }
    833869
     
    867903    }
    868904
    869     if (hfDrive)
    870         DosClose(hfDrive);
    871 
    872905    return (arc);
    873906}
     
    887920    CHAR    name[3] = "?:";
    888921    ULONG   fd = 0,
    889             action = 0,
    890             paramsize = 0,
    891             datasize = 0;
     922            action = 0;
     923//             paramsize = 0;
     924//             datasize = 0;
    892925    APIRET  rc = NO_ERROR;
    893926    USHORT  data,
     
    913946        param = 0;
    914947        data = (USHORT)ulLogicalDrive;
    915         paramsize = sizeof(param);
    916         datasize = sizeof(data);
     948        // paramsize = sizeof(param);
     949        // datasize = sizeof(data);
    917950        rc = doshDevIOCtl(fd,
    918951                          IOCTL_DISK, DSK_SETLOGICALMAP,
     
    941974    APIRET      arc = NO_ERROR;
    942975    FSALLOCATE  fsa;
    943     double      dbl = -1;
     976    // double      dbl = -1;
    944977
    945978    if (!(arc = DosQueryFSInfo(ulLogicalDrive, FSIL_ALLOC, &fsa, sizeof(fsa))))
     
    9671000    APIRET      arc = NO_ERROR;
    9681001    FSALLOCATE  fsa;
    969     double      dbl = -1;
     1002    // double      dbl = -1;
    9701003
    9711004    if (!(arc = DosQueryFSInfo(ulLogicalDrive, FSIL_ALLOC, &fsa, sizeof(fsa))))
     
    9831016 *
    9841017 *@@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
    9851019 */
    9861020
     
    10151049            // Each data field following fsqBuffer.szName begins
    10161050            // 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';
    10191055        }
    10201056    }
     
    24622498 ********************************************************************/
    24632499
    2464 static PVOID    G_pvGlobalInfoSeg = NULL,
     2500static PVOID    // G_pvGlobalInfoSeg = NULL,
    24652501                G_pvLocalInfoSeg = NULL;
    24662502
     
    24822518                    &LocalInfoSegSelector);
    24832519    // thunk
    2484     G_pvGlobalInfoSeg = (PVOID)(   (GlobalInfoSegSelector << 0x000D)
    2485                                  & 0x01fff0000);
     2520    /* G_pvGlobalInfoSeg = (PVOID)(   (GlobalInfoSegSelector << 0x000D)
     2521                                 & 0x01fff0000); */
    24862522    G_pvLocalInfoSeg  = (PVOID)(   (LocalInfoSegSelector << 0x000D)
    24872523                                 & 0x01fff0000);
Note: See TracChangeset for help on using the changeset viewer.