⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ecda.h

📁 DOS下CD播放程序: 1.0.32.MSDOS.WATCOM.C
💻 H
📖 第 1 页 / 共 2 页
字号:
// 哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪
ulong CDAudio::getTrackLength(short track) {
    ulong start, finish;
    ushort CT;

  CT = CDROMData.currentTrack;
  setTrack(track);
  start = CDROMData.trackPosition;
  if (track < CDROMData.highAudio) {
    setTrack (track + 1);
    finish = CDROMData.trackPosition;
  } else finish = CDROMData.endOfDisk;
  setTrack(CT);
  finish -= start;
  return(finish);
}
// 哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪
void CDAudio::setTrack(short track) {
  typedef struct trackData {
    uchar  mode;
    uchar  track;
    ulong  address;
    uchar  control;
  } headData;
    static struct IOCTLI           * trayRequestPointers;
    static struct trackData        * trackDataPointers;
    trayRequestPointers  = (struct IOCTLI *)     (CDDeviceReq.segment*16);
    trackDataPointers    = (struct trackData *)       (CDDeviceExtra.segment*16);

  memset (trayRequestPointers, 0, sizeof (struct IOCTLI));
  memset (trackDataPointers, 0, sizeof (struct trackData));
  trayRequestPointers->length   = sizeof (struct IOCTLI);
  trayRequestPointers->comcode  = 3;
  trayRequestPointers->address  = CDDeviceExtra.segment<<16;
  trayRequestPointers->bytes    = 7;
  trackDataPointers->mode       = 0x0B;
  trackDataPointers->track      = track;
  CDDeviceRequest();
  CDROMData.error         = trayRequestPointers->status;
  CDROMData.trackPosition = HSG (trackDataPointers->address);
  CDROMData.currentTrack  = track;
  CDROMData.trackType     = trackDataPointers->control & TRACK_MASK;
}
// 哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪
void CDAudio::CDSeek (ulong location) {
  typedef struct playRequest {
    uchar  length;
    uchar  subunit;
    uchar  comcode;
    ushort status;
    uchar  unused[8];
    uchar  addressMode;
    ulong  transfer;
    ushort sector;
    ulong  seekPos;
  } playRequest;
    uchar min, sec, frame;
    static struct playRequest      * playRequestPointers;
    playRequestPointers  = (struct playRequest *)     (CDDeviceReq.segment*16);

  memset (playRequestPointers, 0, sizeof (struct playRequest));
  playRequestPointers->length   = sizeof (struct playRequest);
  playRequestPointers->comcode  = 131;
  playRequestPointers->seekPos  = location;
  CDDeviceRequest();
  CDROMData.error = playRequestPointers->status;
}
// 哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪
void CDAudio::playAudio(ulong begin, ulong end) {
  typedef struct playRequest {
    uchar  length;
    uchar  subunit;
    uchar  comcode;
    ushort status;
    uchar  unused[8];
    uchar  addressMode;
    ulong  start;
    ulong  playLength;
  } playRequest;
    static struct playRequest      * playRequestPointers;
    playRequestPointers  = (struct playRequest *)     (CDDeviceReq.segment*16);

  memset (playRequestPointers, 0, sizeof (struct playRequest));
  playRequestPointers->length     = sizeof (struct playRequest);
  playRequestPointers->comcode    = 132;
  playRequestPointers->start      = begin;
  playRequestPointers->playLength = end-begin;
  CDDeviceRequest();
  CDROMData.error      = playRequestPointers->status;
}
// 哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪
void CDAudio::stop (void) {
  typedef struct stopRequest {
    uchar  length;
    uchar  subunit;
    uchar  comcode;
    ushort status;
    uchar  unused[8];
  } stopRequest;
    static struct stopRequest      * stopRequestPointers;
    stopRequestPointers  = (struct stopRequest *)     (CDDeviceReq.segment*16);

  memset (stopRequestPointers, 0, sizeof (struct stopRequest));
  stopRequestPointers->length   = sizeof (struct stopRequest);
  stopRequestPointers->comcode  = 133;
  CDDeviceRequest();
  CDROMData.error      = stopRequestPointers->status;
}
// 哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪
void CDAudio::play(int track, int fullCD) {
  setTrack(track);
  CDSeek(CDROMData.trackPosition);
  if ((fullCD == WHOLE_CD)&&(track<CDROMData.highAudio)) {
    playAudio(CDROMData.trackPosition, CDROMData.endOfDisk);
  } else {
    // A crude hack.. ;-)
    setTrack(fullCD);
    long end   = CDROMData.trackPosition;
    setTrack(track);
    playAudio(CDROMData.trackPosition, end);
  }
}
// 哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪
void CDAudio::CDStatus(void) {
  typedef struct CDData {
    uchar  mode;
    ulong  status;
  } CDData;
    static struct IOCTLI      * trayRequestPointers;
    static struct CDData           * CDDataPointers;
    trayRequestPointers  = (struct IOCTLI *)     (CDDeviceReq.segment*16);
    CDDataPointers       = (struct CDData *)          (CDDeviceExtra.segment*16);

  memset (trayRequestPointers, 0, sizeof (struct IOCTLI));
  memset (CDDataPointers, 0, sizeof (struct CDData));
  trayRequestPointers->length   = sizeof (struct IOCTLI);
  trayRequestPointers->comcode  = 3;
  trayRequestPointers->address  = CDDeviceExtra.segment<<16;
  trayRequestPointers->bytes    = 5;
  CDDataPointers->mode          = 0x06;
  CDDeviceRequest();
  CDROMData.error      = trayRequestPointers->status;
  CDROMData.status     = CDDataPointers->status;
}
// 哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪
ulong CDAudio::headPosition(void) {
  typedef struct headData {
    uchar  mode;
    uchar  adrMode;
    ulong  address;
  } headData;
    static struct IOCTLI           * trayRequestPointers;
    static struct headData        * headDataPointers;
    trayRequestPointers = (struct IOCTLI *)  (CDDeviceReq.segment*16);
    headDataPointers    = (struct headData *)     (CDDeviceExtra.segment*16);

  memset (trayRequestPointers, 0, sizeof (struct IOCTLI));
  memset (headDataPointers, 0, sizeof (struct headData));
  trayRequestPointers->length   = sizeof (struct IOCTLI);
  trayRequestPointers->comcode  = 3;
  trayRequestPointers->address  = CDDeviceExtra.segment<<16;
  trayRequestPointers->bytes    = 6;
  headDataPointers->mode        = 0x01;
  headDataPointers->adrMode    = 0x00;
  CDDeviceRequest();
  CDROMData.error      = trayRequestPointers->status;
  return (headDataPointers->address);
}
// 哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪
void CDAudio::getVolume(void) {
    static struct IOCTLI          * trayRequestPointers;
    static struct CDVolumeInfo    * CDVolumePointers;
    trayRequestPointers = (struct IOCTLI *)  (CDDeviceReq.segment*16);
    CDVolumePointers    = (struct CDVolumeInfo *) (CDDeviceExtra.segment*16);
                             
  memset (trayRequestPointers, 0, sizeof (struct IOCTLI));
  trayRequestPointers->length   = sizeof (struct IOCTLI);
  trayRequestPointers->comcode  = 3;
  trayRequestPointers->address  = CDDeviceExtra.segment<<16;
  trayRequestPointers->bytes    = 9;
  CDVolumePointers->mode        = 0x04;
  CDDeviceRequest();
  memcpy(&CDVolumeInfo, CDVolumePointers, sizeof(struct CDVolumeInfo));
  CDROMData.error      = trayRequestPointers->status;
}
// 哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪
void CDAudio::setVolume(uchar v1, uchar v2, uchar v3, uchar v4) {
    static struct IOCTLI          * trayRequestPointers;
    static struct CDVolumeInfo    * CDVolumePointers;
    trayRequestPointers = (struct IOCTLI *)  (CDDeviceReq.segment*16);
    CDVolumePointers    = (struct CDVolumeInfo *) (CDDeviceExtra.segment*16);

  CDVolumeInfo.volume0 = v1;
  CDVolumeInfo.volume1 = v2;
  CDVolumeInfo.volume2 = v3;
  CDVolumeInfo.volume3 = v4;
  memset (trayRequestPointers, 0, sizeof (struct IOCTLI));
  memcpy (CDVolumePointers, &CDVolumeInfo, sizeof(struct CDVolumeInfo));
  trayRequestPointers->length   = sizeof (struct IOCTLI);
  trayRequestPointers->comcode  = 12;
  trayRequestPointers->address  = CDDeviceExtra.segment<<16;
  trayRequestPointers->bytes    = 9;
  CDVolumePointers->mode        = 0x03;
  CDDeviceRequest();
  CDROMData.error      = trayRequestPointers->status;
}
// 哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪
short CDAudio::getUPC(void) {
  typedef struct UPCData {
    uchar mode;
    uchar adr;
    uchar UPC[17];
    uchar zero;
    uchar aFrame;
  } UPCData;
    static struct IOCTLI          * trayRequestPointers;
    static struct UPCData         * UPCDataPointers;
    trayRequestPointers = (struct IOCTLI *)   (CDDeviceReq.segment*16);
    UPCDataPointers     = (struct UPCData *)  (CDDeviceExtra.segment*16);
                             
  memset (trayRequestPointers, 0, sizeof (struct IOCTLI));
  memset (UPCDataPointers, 0, sizeof (struct UPCData));
  trayRequestPointers->length   = sizeof (struct IOCTLI);
  trayRequestPointers->comcode  = 3;
  trayRequestPointers->address  = CDDeviceExtra.segment<<16;
  trayRequestPointers->bytes    = 11;
  UPCDataPointers->mode         = 0x0E;
  UPCDataPointers->adr          = 0x02;
  CDDeviceRequest();
  CDROMData.error      = trayRequestPointers->status;
  if (UPCDataPointers->adr == 0)
    memset(&UPCDataPointers->UPC,0,7);
  memcpy(&CDROMData.UPC[0], &UPCDataPointers->UPC[0],7);
  return 1;
}
// 哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪
void CDAudio::info(void) {
  cout << "Endeavour CD-Audio INTERFACE\n";
  cout << "哪哪哪哪哪哪哪哪哪哪哪哪哪哪\n\n";
  cout << "Version: " << VERSION << "\n";
  cout << "Build:   " << BUILD << "\n";
}
// 哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -