summaryrefslogtreecommitdiff
path: root/audio
diff options
context:
space:
mode:
authorVanilla I. Shu <vanilla@FreeBSD.org>1998-12-09 05:44:06 +0000
committerVanilla I. Shu <vanilla@FreeBSD.org>1998-12-09 05:44:06 +0000
commitc0d9ddb36fae6d8e135fcc5d48c39ccc58504ac8 (patch)
treeec70f99c164f51f96eb30a693321b9638fc2568d /audio
parentActivate 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')
-rw-r--r--audio/wmcdplay/Makefile22
-rw-r--r--audio/wmcdplay/distinfo1
-rw-r--r--audio/wmcdplay/files/patch-aa287
-rw-r--r--audio/wmcdplay/pkg-comment1
-rw-r--r--audio/wmcdplay/pkg-descr5
-rw-r--r--audio/wmcdplay/pkg-plist1
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