diff options
author | Vanilla I. Shu <vanilla@FreeBSD.org> | 1998-12-09 05:44:06 +0000 |
---|---|---|
committer | Vanilla I. Shu <vanilla@FreeBSD.org> | 1998-12-09 05:44:06 +0000 |
commit | c0d9ddb36fae6d8e135fcc5d48c39ccc58504ac8 (patch) | |
tree | ec70f99c164f51f96eb30a693321b9638fc2568d /audio/wmcdplay | |
parent | Activate balsa. (diff) |
A dockable cd player designed for WindowMaker.
PR: ports/8996
Submitted by: Chia-liang Kao <clkao@CirX.ORG>
Notes
Notes:
svn path=/head/; revision=15219
Diffstat (limited to 'audio/wmcdplay')
-rw-r--r-- | audio/wmcdplay/Makefile | 22 | ||||
-rw-r--r-- | audio/wmcdplay/distinfo | 1 | ||||
-rw-r--r-- | audio/wmcdplay/files/patch-aa | 287 | ||||
-rw-r--r-- | audio/wmcdplay/pkg-comment | 1 | ||||
-rw-r--r-- | audio/wmcdplay/pkg-descr | 5 | ||||
-rw-r--r-- | audio/wmcdplay/pkg-plist | 1 |
6 files changed, 317 insertions, 0 deletions
diff --git a/audio/wmcdplay/Makefile b/audio/wmcdplay/Makefile new file mode 100644 index 000000000000..42586bfde266 --- /dev/null +++ b/audio/wmcdplay/Makefile @@ -0,0 +1,22 @@ +# New ports collection makefile for: wmcdplay +# Version required: 0.8 +# Date created: 7 December 1998 +# Whom: Chia-liang Kao <clkao@CirX.ORG> +# +# $Id$ +# + +DISTNAME= wmcdplay-0.8 +CATEGORIES= audio +MASTER_SITES= ftp://ftp.windowmaker.org/pub/contrib/srcs/apps/ + +MAINTAINER= clkao@CirX.ORG + +LIB_DEPENDS= Xpm.4:${PORTSDIR}/graphics/xpm + +WRKSRC= ${WRKDIR}/wmcdplay + +USE_IMAKE= yes +NO_INSTALL_MANPAGES= yes + +.include <bsd.port.mk> diff --git a/audio/wmcdplay/distinfo b/audio/wmcdplay/distinfo new file mode 100644 index 000000000000..deaf97b1853b --- /dev/null +++ b/audio/wmcdplay/distinfo @@ -0,0 +1 @@ +MD5 (wmcdplay-0.8.tar.gz) = c6c6ccf979e74b5f63e1551ba40dab7a diff --git a/audio/wmcdplay/files/patch-aa b/audio/wmcdplay/files/patch-aa new file mode 100644 index 000000000000..1ce21d1cb74b --- /dev/null +++ b/audio/wmcdplay/files/patch-aa @@ -0,0 +1,287 @@ +--- cdctl.h.orig Sat Dec 5 23:23:28 1998 ++++ cdctl.h Sat Dec 5 23:23:27 1998 +@@ -11,7 +11,7 @@ + // define these if you have troubles, otherwise they slow responses + // #define _CDCTL_STOP_BEFORE_PLAY + // #define _CDCTL_START_BEFORE_PLAY +-// #define _CDCTL_HARD_STOP ++#define _CDCTL_HARD_STOP + + #include <stdio.h> + #include <stdlib.h> +@@ -20,8 +20,7 @@ + #include <sys/stat.h> + #include <fcntl.h> + #include <unistd.h> +-#include <malloc.h> +-#include <linux/cdrom.h> ++#include <sys/cdio.h> + + // CD status values + #define ssData 0 +@@ -67,6 +66,9 @@ + #define FALSE 0 + #endif + ++#define CD_MSF_OFFSET 150 ++#define CDROM_DATA_TRACK 4 ++ + class CDCtl + { + public: +@@ -102,12 +104,11 @@ + case acStop: + + #ifdef _CDCTL_HARD_STOP +- ioctl(cdfd,CDROMSTOP); ++ ioctl(cdfd,CDIOCSTOP); + #endif + #ifndef _CDCTL_HARD_STOP +- ioctl(cdfd,CDROMSTART); ++ ioctl(cdfd,CDIOCSTART); + #endif +- + break; + case acPlay: + status_state=ssPlaying; +@@ -115,10 +116,10 @@ + tskOurPlay=TRUE; + break; + case acPause: +- ioctl(cdfd,CDROMPAUSE); ++ ioctl(cdfd,CDIOCPAUSE); + break; + case acResume: +- ioctl(cdfd,CDROMRESUME); ++ ioctl(cdfd,CDIOCRESUME); + break; + case acPrev: + newtrk--; +@@ -145,13 +146,13 @@ + } + break; + case acEject: +- if(ioctl(cdfd,CDROMEJECT)) ++ if(ioctl(cdfd,CDIOCEJECT)) + status_state=ssNoCD; + else + status_state=ssTrayOpen; + break; + case acClose: +- ioctl(cdfd,CDROMCLOSETRAY); ++ ioctl(cdfd,CDIOCCLOSE); + status_state=ssNoCD; + break; + } +@@ -160,9 +161,15 @@ + } + void doStatus(){ + if(cdfdopen){ +- struct cdrom_subchnl sc; +- sc.cdsc_format=CDROM_LBA; +- if(ioctl(cdfd, CDROMSUBCHNL, &sc)){ ++ struct ioc_read_subchannel irs; ++ struct cd_sub_channel_info csci; ++ ++ memset(&irs, 0, sizeof(irs)); ++ irs.data=&csci; ++ irs.data_len=sizeof(csci); ++ irs.address_format=CD_LBA_FORMAT; ++ irs.data_format=CD_MEDIA_CATALOG; ++ if(ioctl(cdfd, CDIOCREADSUBCHANNEL, &irs)){ + if(status_state!=ssNoCD) + status_state=ssTrayOpen; + status_track=0; +@@ -171,18 +178,18 @@ + else{ + if(status_state==ssNoCD || status_state==ssTrayOpen) + readTOC(); +- switch(sc.cdsc_audiostatus){ +- case CDROM_AUDIO_PLAY: ++ switch(csci.header.audio_status){ ++ case CD_AS_PLAY_IN_PROGRESS: + if(status_state==ssStopped) + tskOurPlay=FALSE; + status_state=ssPlaying; + break; +- case CDROM_AUDIO_PAUSED: ++ case CD_AS_PLAY_PAUSED: + if(status_state==ssStopped) + tskOurPlay=FALSE; + status_state=ssPaused; + break; +- case CDROM_AUDIO_COMPLETED: ++ case CD_AS_PLAY_COMPLETED: + if(tskOurPlay){ + selecttrack(); + doStatus(); +@@ -194,7 +201,7 @@ + default: + status_state=ssStopped; + } +- trackinfo(&sc); ++ trackinfo(&csci); + if(cd_trklist[status_track].track_data) + status_state=ssData; + } +@@ -202,19 +209,21 @@ + } + void setVolume(int l, int r){ + if(cdfdopen){ +- struct cdrom_volctrl vol; +- vol.channel0=l; +- vol.channel1=r; +- ioctl(cdfd,CDROMVOLCTRL,&vol); ++ struct ioc_vol vol; ++ vol.vol[0]=l; ++ vol.vol[1]=r; ++ vol.vol[2]=0; ++ vol.vol[3]=0; ++ ioctl(cdfd,CDIOCSETVOL,&vol); + readVolume(); + } + } + void readVolume(){ + if(cdfdopen){ +- struct cdrom_volctrl vol; +- ioctl(cdfd,CDROMVOLREAD,&vol); +- status_volumel=vol.channel0; +- status_volumer=vol.channel1; ++ struct ioc_vol vol; ++ ioctl(cdfd,CDIOCGETVOL,&vol); ++ status_volumel=vol.vol[0]; ++ status_volumer=vol.vol[1]; + } + } + int getVolumeL(){ +@@ -260,36 +269,67 @@ + return status_pos-cd_trklist[status_track].track_start; + } + private: ++#if 0 + void readTOC(){ + if(cd_trklist!=NULL) + free(cd_trklist); +- struct cdrom_tochdr hdr; +- ioctl(cdfd, CDROMREADTOCHDR, &hdr); +- cd_tracks=hdr.cdth_trk1; ++ struct ioc_toc_header hdr; ++ ioctl(cdfd, CDIOREADTOCHEADER, &hdr); ++ cd_tracks=hdr.ending_track - hdr.starting_track + 1; + cd_trklist=(struct CDTrack *)malloc(cd_tracks*sizeof(struct CDTrack)); +- struct cdrom_tocentry te; ++ struct ioc_read_toc_single_entry te; + int prev_addr=0; + for(int i=0;i<=cd_tracks;i++){ + if(i==cd_tracks) +- te.cdte_track=CDROM_LEADOUT; ++ te.track=CDROM_LEADOUT; + else +- te.cdte_track=i+1; +- te.cdte_format=CDROM_LBA; +- ioctl(cdfd, CDROMREADTOCENTRY, &te); ++ te.track=i+1; ++ te.address_format=CD_LBA_FORMAT; ++ ioctl(cdfd, CDIOREADTOCENTRY, &te); + if(i>0) +- cd_trklist[i-1].track_len = te.cdte_addr.lba - prev_addr; +- prev_addr=te.cdte_addr.lba; ++ cd_trklist[i-1].track_len = ntohl(te.entry.addr.lba) - prev_addr; ++ prev_addr=ntohl(te.entry.addr.lba); + if(i<cd_tracks){ +- cd_trklist[i].track_data = te.cdte_ctrl & CDROM_DATA_TRACK ? TRUE : FALSE; +- cd_trklist[i].track_start = te.cdte_addr.lba; ++ cd_trklist[i].track_data = te.entry.control & CDROM_DATA_TRACK ? TRUE : FALSE; ++ cd_trklist[i].track_start = ntohl(te.entry.addr.lba); + } + else +- cd_len = te.cdte_addr.lba; ++ cd_len = ntohl(te.entry.addr.lba); + } ++ + } +- void trackinfo(struct cdrom_subchnl *subchnl){ ++#else ++void readTOC(void) { ++ struct ioc_toc_header hdr; ++ struct ioc_read_toc_entry te; ++ int i; ++ ++ if(cdfd != -1) { ++ if(cd_trklist != NULL) free(cd_trklist); ++ ++ ioctl(cdfd, CDIOREADTOCHEADER, &hdr); ++ cd_tracks = hdr.ending_track; ++ cd_trklist = (struct CDTrack *)malloc(cd_tracks * sizeof(struct CDTrack)); ++ ++ te.data_len = (cd_tracks + 1) * sizeof(struct cd_toc_entry); ++ te.data = (struct cd_toc_entry *)malloc(te.data_len); ++ te.address_format = CD_LBA_FORMAT; ++ te.starting_track = 0; ++ ioctl(cdfd, CDIOREADTOCENTRYS, &te); ++ for(i = 0; i < cd_tracks; i++) { ++ cd_trklist[i].track_start = ntohl(te.data[i].addr.lba); ++ cd_trklist[i].track_len = ntohl(te.data[i + 1].addr.lba) - ++ cd_trklist[i].track_start; ++ cd_trklist[i].track_data = (te.data[i].control & 4); ++ } ++ free(te.data); ++ } ++} ++#endif ++ ++ void trackinfo(struct cd_sub_channel_info *subchnl){ + if(status_state==ssPlaying || status_state==ssPaused){ +- status_pos=subchnl->cdsc_absaddr.lba; ++ status_pos=ntohl(subchnl->what.position.absaddr.lba); + for(status_track=0;status_track<cd_tracks;status_track++){ + if(status_pos<cd_trklist[status_track].track_start+cd_trklist[status_track].track_len) + break; +@@ -297,24 +337,24 @@ + } + } + void play(){ +- struct cdrom_msf pmsf; ++ struct ioc_play_msf pmsf; + int abs0=status_pos+CD_MSF_OFFSET; + int abs1=cd_trklist[status_track].track_start+cd_trklist[status_track].track_len-1+CD_MSF_OFFSET; +- pmsf.cdmsf_min0=abs0/(75*60); +- pmsf.cdmsf_min1=abs1/(75*60); +- pmsf.cdmsf_sec0=(abs0%(75*60))/75; +- pmsf.cdmsf_sec1=(abs1%(75*60))/75; +- pmsf.cdmsf_frame0=abs0%75; +- pmsf.cdmsf_frame1=abs1%75; ++ pmsf.start_m=abs0/(75*60); ++ pmsf.end_m=abs1/(75*60); ++ pmsf.start_s=(abs0%(75*60))/75; ++ pmsf.end_s=(abs1%(75*60))/75; ++ pmsf.start_f=abs0%75; ++ pmsf.end_f=abs1%75; + + #ifdef _CDCTL_STOP_BEFORE_PLAY +- ioctl(cdfd,CDROMSTOP); ++ ioctl(cdfd,CDIOCSTOP); + #endif + #ifdef _CDCTL_START_BEFORE_PLAY +- ioctl(cdfd,CDROMSTART); ++ ioctl(cdfd,CDIOCSTART); + #endif + +- ioctl(cdfd,CDROMPLAYMSF,&pmsf); ++ ioctl(cdfd,CDIOCPLAYMSF,&pmsf); + } + void select(int trk){ + status_track=trk; +@@ -323,10 +363,10 @@ + if(cd_trklist[status_track].track_data){ + + #ifdef _CDCTL_HARD_STOP +- ioctl(cdfd,CDROMSTOP); ++ ioctl(cdfd,CDIOCSTOP); + #endif + #ifndef _CDCTL_HARD_STOP +- ioctl(cdfd,CDROMSTART); ++ ioctl(cdfd,CDIOCSTART); + #endif + + } diff --git a/audio/wmcdplay/pkg-comment b/audio/wmcdplay/pkg-comment new file mode 100644 index 000000000000..724544644dea --- /dev/null +++ b/audio/wmcdplay/pkg-comment @@ -0,0 +1 @@ +A CD player for the WindowMaker dock. diff --git a/audio/wmcdplay/pkg-descr b/audio/wmcdplay/pkg-descr new file mode 100644 index 000000000000..30766d7b53e0 --- /dev/null +++ b/audio/wmcdplay/pkg-descr @@ -0,0 +1,5 @@ +CD player designed for WindowMaker + +Author: Sam Hawker <shawkie@geocities.com> + +FreeBSD port patches contributed by Chia-hsing Yu <davidyu@ken.csie.ntu.edu.tw> diff --git a/audio/wmcdplay/pkg-plist b/audio/wmcdplay/pkg-plist new file mode 100644 index 000000000000..891d9d69f922 --- /dev/null +++ b/audio/wmcdplay/pkg-plist @@ -0,0 +1 @@ +bin/wmcdplay |