/* ** Command & Conquer Red Alert(tm) ** Copyright 2025 Electronic Arts Inc. ** ** This program is free software: you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program. If not, see . */ /*************************************************************************** ** C O N F I D E N T I A L --- W E S T W O O D A S S O C I A T E S ** *************************************************************************** * * * Project Name : WWLIB * * * * File Name : PLAYCD.H * * * * Programmer : STEVE WETHERILL * * * * Start Date : 5/13/94 * * * * Last Update : June 4, 1994 [SW] * * * *-------------------------------------------------------------------------*/ #ifndef PLAYCD_H #define PLAYCD_H /* ==================================================================== */ /* Defines */ /* ==================================================================== */ #define CHLEFT 0 #define CHRIGHT 1 #define CHBOTH 2 #define AUDIO_START_MIN 1 #define AUDIO_START_SEC 44 typedef struct { unsigned short seg ; unsigned short sel ; } SEGSEL ; extern "C" int DPMI_real_alloc ( UINT , SEGSEL * , USHORT * ) ; extern "C" int DPMI_real_free ( SEGSEL ) ; extern "C" void DPMI_real_intr ( int , union REGS * , struct SREGS * ); extern "C" void DPMI_real_call ( void * funct , union REGS * , struct SREGS * ); /* ==================================================================== */ /* Data structures */ /* ==================================================================== */ // Audio Track Info request block struct TinfoType { UBYTE Length; UBYTE SubCd; UBYTE Command; UWORD Status; UBYTE Rsvd[8]; UBYTE MDescr; UWORD TrnsAdOff; UWORD TrnsAdSeg; UWORD CntTrns; UWORD StSect; UWORD VolIDOff; UWORD VolIDSeg; UBYTE TrInfo; UBYTE Track; ULONG Start; UBYTE TrCtrl; }; // Audio Track Status Control Block struct StatType { UBYTE Length; UBYTE SubCd; UBYTE Command; UWORD Status; UBYTE Rsvd[8]; UBYTE MDescr; UWORD TrnsAdOff; UWORD TrnsAdSeg; UWORD CntTrns; UWORD StSect; UWORD VolIDOff; UWORD VolIDSeg; UBYTE StatInfo; UWORD Stat; ULONG Start; ULONG End; }; // Audio Track Volume control block struct VolmType { UBYTE Length; UBYTE SubCd; UBYTE Command; UWORD Status; UBYTE Rsvd[8]; UBYTE MDescr; UWORD TrnsAdOff; UWORD TrnsAdSeg; UWORD CntTrns; UWORD StSect; UWORD VolIDOff; UWORD VolIDSeg; UBYTE TrInfo; UBYTE In0; UBYTE Vol0; UBYTE In1; UBYTE Vol1; UBYTE In2; UBYTE Vol2; UBYTE In3; UBYTE Vol3; }; // Audio Track Play request block struct PlayType { UBYTE Length; UBYTE SubCd; UBYTE Command; UWORD Status; UBYTE Rsvd[8]; UBYTE AddrMd; ULONG Start; ULONG CntSect; }; // Audio Track Stop request block struct StopType { UBYTE Length; UBYTE SubCd; UBYTE Command; UWORD Status; UBYTE Rsvd[8]; }; /*************************************************************************** * GetCDClass -- object which will return logical CD drive * * * * HISTORY: * * 06/04/1994 SW : Created. * *=========================================================================*/ class GetCDClass { protected: union REGS regs; struct SREGS sregs; SEGSEL cdDrive_addrp; UWORD largestp; UBYTE cdDrive[26]; // CD Drive letters from MSCDEX public: GetCDClass(VOID); // This is the default constructor ~GetCDClass(VOID); // This is the destructor WORD GetCDDrive(VOID); }; /*************************************************************************** * RedBookClass -- adds red book functionality * * * * this class inherits from GetCDClass and adds red book play functionality* * * * * * HISTORY: * * 06/04/1994 SW : Created. * *=========================================================================*/ class RedBookClass : public GetCDClass { private: SEGSEL Tinfo_addrp; SEGSEL Stat_addrp; SEGSEL Stop_addrp; SEGSEL Volm_addrp; SEGSEL Play_addrp; StopType Stop; PlayType Play; VolmType Volm; StatType Stat; TinfoType Tinfo; public: RedBookClass(VOID); // This is the default constructor ~RedBookClass(VOID); // This is the destructor ULONG RedToHS(ULONG i); ULONG MSFtoRed(UBYTE m, UBYTE s, UBYTE f); VOID FullCDVolume(UBYTE chan); VOID PlayTrack(UWORD track); VOID Play_CD_MSL(UWORD min_sec, UWORD len); VOID PlayMSF(UBYTE startM, UBYTE startS, UBYTE startF, UBYTE endM, UBYTE endS, UBYTE endF, UBYTE chan); UWORD CheckCDMusic(VOID); VOID StopCDMusic(VOID); }; /***************************** End of Playcd.h ****************************/ #endif // PLAYCD_H