aboutsummaryrefslogtreecommitdiff
path: root/audio/orpheus
diff options
context:
space:
mode:
Diffstat (limited to 'audio/orpheus')
-rw-r--r--audio/orpheus/Makefile78
-rw-r--r--audio/orpheus/distinfo2
-rw-r--r--audio/orpheus/files/patch-configure.in35
-rw-r--r--audio/orpheus/files/patch-src-abstract-track.h10
-rw-r--r--audio/orpheus/files/patch-src-cdtrack.cc359
-rw-r--r--audio/orpheus/files/patch-src-cdtrack.h20
-rw-r--r--audio/orpheus/files/patch-src-mixerctl.cc11
-rw-r--r--audio/orpheus/files/patch-src-orpheius.cc11
-rw-r--r--audio/orpheus/files/patch-src-uitext.cc31
-rw-r--r--audio/orpheus/pkg-descr4
-rw-r--r--audio/orpheus/pkg-plist3
11 files changed, 564 insertions, 0 deletions
diff --git a/audio/orpheus/Makefile b/audio/orpheus/Makefile
new file mode 100644
index 000000000000..a3780ac2687d
--- /dev/null
+++ b/audio/orpheus/Makefile
@@ -0,0 +1,78 @@
+# New ports collection Makefile for: orpheus
+# Date created: 9 December 2004
+# Whom: Andrej Zverev
+#
+# $FreeBSD$
+#
+
+PORTNAME= orpheus
+PORTVERSION= 1.5
+CATEGORIES= audio
+MASTER_SITES= http://thekonst.net/download/
+
+MAINTAINER= az@inec.ru
+COMMENT= Light-weight console UI audio player application
+
+BUILD_DEPENDS= mpg321:${PORTSDIR}/audio/mpg321
+
+USE_BZIP2= yes
+HAS_CONFIGURE= yes
+USE_GMAKE= yes
+USE_REINPLACE= yes
+USE_AUTOCONF_VER= 253
+
+CONFIGURE_ENV= LDFLAGS="-L${LOCALBASE}/lib"
+
+OPTIONS= NLS "Native language support" on \
+ CDDB "CDDB audio CD' auto fetch track info support" on \
+ VORBIS "Vorbis playing and tags edit support" off
+
+MAN1= orpheus.1
+
+.include <bsd.port.pre.mk>
+
+.if defined(WITH_CDDB)
+LIB_DEPENDS+= ghttp:${PORTSDIR}/www/libghttp
+CONFIGURE_ARGS+= --enable-ghttp
+.endif
+
+.if defined(WITH_VORBIS)
+RUN_DEPENDS= ogg123:${PORTSDIR}/audio/vorbis-tools
+LIB_DEPENDS+= vorbis:${PORTSDIR}/audio/libvorbis
+LIB_DEPENDS+= vorbisfile:${PORTSDIR}/audio/libvorbis
+CONFIGURE_ARGS+= --enable-vorbis
+CONFIGURE_ARGS+= --enable-vorbisfile
+.endif
+
+.if !defined(WITHOUT_NLS)
+USE_GETTEXT= yes
+PLIST_SUB+= NLS=""
+.else
+CONFIGURE_ARGS+= --disable-nls
+PLIST_SUB+= NLS="@comment "
+.endif
+
+.if !defined(NOPORTDOCS)
+PORTDOCS= FAQ README ChangeLog
+.endif
+
+pre-configure:
+ @cd ${WRKSRC}; ${AUTOCONF}
+ @cd ${WRKSRC}/kkconsui-0.1; ${AUTOCONF}
+ @cd ${WRKSRC}/kkstrtext-0.1; ${AUTOCONF}
+
+do-install:
+ ${INSTALL_PROGRAM} ${WRKSRC}/src/orpheus ${PREFIX}/bin
+ ${INSTALL_MAN} ${WRKSRC}/orpheus.1 ${MAN1PREFIX}/man/man1
+
+post-install:
+.if !defined(NOPORTDOCS)
+ @${MKDIR} ${DOCSDIR}
+ @${INSTALL_DATA} ${PORTDOCS:S|^|${WRKSRC}/|} ${DOCSDIR}
+.endif
+.if !defined(WITHOUT_NLS)
+ ${MKDIR} ${PREFIX}/share/locale/ru/LC_MESSAGES
+ @${INSTALL_DATA} ${WRKSRC}/po/ru.gmo ${PREFIX}/share/locale/ru/LC_MESSAGES/orpheus.mo
+.endif
+
+.include <bsd.port.post.mk>
diff --git a/audio/orpheus/distinfo b/audio/orpheus/distinfo
new file mode 100644
index 000000000000..59ed3b36d0f9
--- /dev/null
+++ b/audio/orpheus/distinfo
@@ -0,0 +1,2 @@
+MD5 (orpheus-1.5.tar.bz2) = 9613e6be14ba7a0ca5d42a88e6ed3516
+SIZE (orpheus-1.5.tar.bz2) = 256825
diff --git a/audio/orpheus/files/patch-configure.in b/audio/orpheus/files/patch-configure.in
new file mode 100644
index 000000000000..e7dbf4bcdd27
--- /dev/null
+++ b/audio/orpheus/files/patch-configure.in
@@ -0,0 +1,35 @@
+diff -Nru orpheus-1.5/configure.in orpheus-1.5.1/configure.in
+--- configure.in Wed Mar 10 22:48:14 2004
++++ configure.in Mon Apr 4 11:43:05 2005
+@@ -11,14 +11,24 @@
+
+ AC_CHECK_LIB(ncurses, main,, AC_CHECK_LIB(curses, main,, AC_MSG_ERROR(The ncurses terminal library is required in order to build the program)))
+
+-AC_CHECK_LIB(ghttp, ghttp_request_new,,
+- [AC_MSG_WARN(libghttp not found - the support for CDDB is be disabled)])
++AC_ARG_ENABLE(ghttp,
++ [ --enable-ghttp enable HTTP proxy support for CDDB],
++ [if test "$enableval" = yes; then
++ AC_CHECK_LIB(ghttp,ghttp_request_new,,AC_ERROR([cannot locate ghttp library]))
++ fi])
+
+-AC_CHECK_LIB(vorbis, vorbis_synthesis_headerin,,
+- AC_MSG_WARN(libvorbisfile not found - the support for OGG tags edit is disabled))
+-
+-AC_CHECK_LIB(vorbisfile, ov_open,,
+- AC_MSG_WARN(libvorbis not found - the support for OGG files is disabled))
++AC_ARG_ENABLE(vorbis,
++ [ --enable-vorbis enable OGG tags edit support],
++ [if test "$enableval" = yes; then
++ AC_CHECK_LIB(vorbis, vorbis_synthesis_headerin,,AC_ERROR([cannot locate vorbis library]))
++ AC_CHECK_LIB(vorbisfile, ov_open,,AC_ERROR([cannot locate vorbisfile library]))
++ fi])
++
++AC_ARG_ENABLE(vorbis,
++ [ --enable-vorbisfile enable OGG files support],
++ [if test "$enableval" = yes; then
++ AC_CHECK_LIB(vorbisfile, ov_open,,AC_ERROR([cannot locate vorbisfile library]))
++ fi])
+
+ AM_ICONV_LINK
+
diff --git a/audio/orpheus/files/patch-src-abstract-track.h b/audio/orpheus/files/patch-src-abstract-track.h
new file mode 100644
index 000000000000..dfbdc85d7a70
--- /dev/null
+++ b/audio/orpheus/files/patch-src-abstract-track.h
@@ -0,0 +1,10 @@
+--- src/abstract/track.h Sat Feb 14 15:51:46 2004
++++ src/abstract/track.h Tue Dec 14 01:03:50 2004
+@@ -5,6 +5,7 @@
+
+ #include <vector>
+ #include <fstream>
++#include <sys/types.h>
+
+ class track {
+ public:
diff --git a/audio/orpheus/files/patch-src-cdtrack.cc b/audio/orpheus/files/patch-src-cdtrack.cc
new file mode 100644
index 000000000000..9a171a279a7f
--- /dev/null
+++ b/audio/orpheus/files/patch-src-cdtrack.cc
@@ -0,0 +1,359 @@
+--- src/cdtrack.cc Sat Feb 14 20:11:05 2004
++++ src/cdtrack.cc Sun Dec 12 21:55:58 2004
+@@ -42,6 +42,7 @@
+ int cdfd = -1, numtracks;
+ string cddbquery, cdid, cdtitle;
+ bool ejected = false;
++#define CDROM_LEADOUT 0xAA
+
+ struct istracknumber: public binary_function<int, const track*, bool> {
+ public: bool operator()(int n, const track *c) const {
+@@ -58,51 +59,56 @@
+ // ----------------------------------------------------------------------------
+
+ void cdtrack::play() {
+- struct cdrom_ti n;
+- n.cdti_trk0 = number;
+- n.cdti_trk1 = number;
++ struct ioc_play_track n;
++ memset (&n, 0, sizeof (struct ioc_play_track));
++ n.start_track = number;
++ n.end_track = number;
+
+- if(!ioctl(cdfd, CDROMPLAYTRKIND, &n)) {
++ if(!ioctl(cdfd, CDIOCPLAYTRACKS, &n)) {
+ paused = false;
+- }
++ }
+ }
+
+ void cdtrack::pause() {
+ if(paused) {
+- ioctl(cdfd, CDROMRESUME);
++ ioctl(cdfd, CDIOCRESUME);
+ paused = false;
+
+- } else if(ioctl(cdfd, CDROMPAUSE) != -1) {
++ } else if(ioctl(cdfd, CDIOCPAUSE) != -1) {
+ paused = true;
+
+- }
++ }
+ }
+
+ void cdtrack::stop() {
+- if(ioctl(cdfd, CDROMSTOP) != -1) {
+- }
++ if(ioctl(cdfd, CDIOCSTOP) != -1) {
++ }
+ }
+
+ string cdtrack::getdescription() const {
+- return (string) "(cd) " + i2str(number) + ". " + title;
++ return (string) "(cd) " + i2str(number) + ". " + title;
+ }
+
+ vector<string> cdtrack::getstatus() const {
+ vector<string> r;
+- struct cdrom_subchnl subc;
++ struct ioc_read_subchannel subc;
++ struct cd_sub_channel_info data;
+ char buf[64];
+ OrpheusPlayList::iterator it;
+ string sb;
+
+- subc.cdsc_format = CDROM_MSF;
++ subc.address_format = CD_MSF_FORMAT;
++ subc.data = &data;
++ subc.data_len = sizeof(data);
++
+
+- if(ioctl(cdfd, CDROMSUBCHNL, &subc) != -1) {
++ if(ioctl(cdfd, CDIOCREADSUBCHANNEL, &subc) != -1) {
+ sprintf(buf, _("track %d [%02d:%02d]"), number,
+- subc.cdsc_reladdr.msf.minute, subc.cdsc_reladdr.msf.second);
++ subc.data->what.position.reladdr.msf.minute, subc.data->what.position.reladdr.msf.second);
+
+ r.push_back("CD: " + cdtitle + "; " + buf);
+
+- it = find_if(plist.begin(), plist.end(), bind1st(istracknumber(), subc.cdsc_trk));
++ it = find_if(plist.begin(), plist.end(), bind1st(istracknumber(), subc.data->what.position.track_number));
+
+ if(it != plist.end()) {
+ cdtrack *ct = static_cast<cdtrack *>(*it);
+@@ -112,92 +118,100 @@
+ }
+ }
+
+- return r;
++ return r;
+ }
+
+ bool cdtrack::terminated() const {
+ double nframes, lframe;
+- struct cdrom_subchnl subc;
++ struct ioc_read_subchannel subc;
++ struct cd_sub_channel_info data;
+ int ptime;
+
+- subc.cdsc_format = CDROM_MSF;
+-
+- if(ioctl(cdfd, CDROMSUBCHNL, &subc) != -1) {
+- return
+- subc.cdsc_audiostatus != CDROM_AUDIO_PLAY &&
+- subc.cdsc_audiostatus != CDROM_AUDIO_PAUSED;
++ subc.address_format = CD_MSF_FORMAT;
++ subc.data_format = CD_CURRENT_POSITION;
++ subc.data = &data;
++ subc.data_len= sizeof(data);
++
++ if(ioctl(cdfd, CDIOCREADSUBCHANNEL, &subc) != -1) {
++ return
++ subc.data->header.audio_status != CD_AS_PLAY_IN_PROGRESS &&
++ subc.data->header.audio_status != CD_AS_PLAY_PAUSED;
+ }
+
+ return true;
+ }
+
+ void cdtrack::fwd(bool big) {
+- playseconds(big ? 40 : 4);
++ playseconds(big ? 40 : 4);
+ }
+
+ void cdtrack::rwd(bool big) {
+- playseconds(big ? -40 : -4);
++ playseconds(big ? -40 : -4);
+ }
+
+ void cdtrack::playseconds(int offset) {
+- struct cdrom_msf msf;
+- struct cdrom_subchnl subc;
+-
+- subc.cdsc_format = CDROM_MSF;
+-
+- if(ioctl(cdfd, CDROMSUBCHNL, &subc) != -1) {
+- msf.cdmsf_sec0 = subc.cdsc_absaddr.msf.second+offset;
+- msf.cdmsf_min0 = subc.cdsc_absaddr.msf.minute;
+- msf.cdmsf_frame0 = subc.cdsc_absaddr.msf.frame;
+- msf.cdmsf_min1 = toc.cdte_addr.msf.minute;
+- msf.cdmsf_sec1 = toc.cdte_addr.msf.second;
+- msf.cdmsf_frame1 = toc.cdte_addr.msf.frame;
+-
+- if(msf.cdmsf_sec0 > 60 && (offset < 0)) {
+- msf.cdmsf_sec0 = 60-abs(offset);
+- msf.cdmsf_min0--;
++ struct ioc_play_msf msf;
++ struct ioc_read_subchannel subc;
++ struct cd_sub_channel_info data;
++
++ subc.address_format = CD_MSF_FORMAT;
++ subc.data = &data;
++ subc.data_len = sizeof(data);
++
++
++ if(ioctl(cdfd, CDIOCREADSUBCHANNEL, &subc) != -1) {
++ msf.start_s = subc.data->what.position.absaddr.msf.second+offset;
++ msf.start_m = subc.data->what.position.absaddr.msf.minute;
++ msf.start_f = subc.data->what.position.absaddr.msf.frame;
++ msf.end_m = toc.entry.addr.msf.minute;
++ msf.end_s = toc.entry.addr.msf.second;
++ msf.end_f = toc.entry.addr.msf.frame;
++
++ if(msf.start_s > 60 && (offset < 0)) {
++ msf.start_s = 60-abs(offset);
++ msf.start_m--;
+ }
+
+- if(ioctl(cdfd, CDROMPLAYMSF, &msf) != -1) {
++ if(ioctl(cdfd, CDIOCPLAYMSF, &msf) != -1) {
+ }
+- }
++ }
+ }
+
+ void cdtrack::readlength() {
+ signed int start_sec, start_min, end_min, end_sec;
+- struct cdrom_msf msf;
+- struct cdrom_tochdr toch;
++ struct ioc_play_msf msf;
++ struct ioc_toc_header toch;
+
+- toc.cdte_track = number;
+- toc.cdte_format = CDROM_MSF;
++ toc.track = number;
++ toc.address_format = CD_MSF_FORMAT;
+
+- if(ioctl(cdfd, CDROMREADTOCENTRY, &toc) != -1) {
+- start_sec = toc.cdte_addr.msf.second;
+- start_min = toc.cdte_addr.msf.minute;
+-
+- msf.cdmsf_min0 = toc.cdte_addr.msf.minute;
+- msf.cdmsf_sec0 = toc.cdte_addr.msf.second;
+- msf.cdmsf_frame0 = toc.cdte_addr.msf.frame;
+-
+- if(ioctl(cdfd, CDROMREADTOCHDR, &toch) != -1) {
+- if(toch.cdth_trk1 == number) {
+- toc.cdte_track = CDROM_LEADOUT;
++ if(ioctl(cdfd, CDIOREADTOCENTRY, &toc) != -1) {
++ start_sec = toc.entry.addr.msf.second;
++ start_min = toc.entry.addr.msf.minute;
++
++ msf.start_m = toc.entry.addr.msf.minute;
++ msf.start_s = toc.entry.addr.msf.second;
++ msf.start_f = toc.entry.addr.msf.frame;
++
++ if(ioctl(cdfd, CDIOREADTOCHEADER, &toch) != -1) {
++ if(toch.ending_track == number) {
++ toc.track = CDROM_LEADOUT;
+ } else {
+- toc.cdte_track = number+1;
++ toc.track = number+1;
+ }
+
+- if(ioctl(cdfd, CDROMREADTOCENTRY, &toc) != -1) {
+- msf.cdmsf_min1 = toc.cdte_addr.msf.minute;
+- msf.cdmsf_sec1 = toc.cdte_addr.msf.second;
+- msf.cdmsf_frame1 = toc.cdte_addr.msf.frame;
++ if(ioctl(cdfd, CDIOREADTOCENTRY, &toc) != -1) {
++ msf.end_m = toc.entry.addr.msf.minute;
++ msf.end_s = toc.entry.addr.msf.second;
++ msf.end_f = toc.entry.addr.msf.frame;
+
+- end_sec = toc.cdte_addr.msf.second;
+- end_min = toc.cdte_addr.msf.minute;
++ end_sec = toc.entry.addr.msf.second;
++ end_min = toc.entry.addr.msf.minute;
+
+ length = (end_min*60+end_sec)-(start_min*60+start_sec);
+ }
+ }
+- }
++ }
+ }
+
+ void cdtrack::toplaylist(ofstream &f) const {
+@@ -208,7 +222,7 @@
+
+ static bool isourtrack(const track *t) {
+ const cdtrack *cd = dynamic_cast<const cdtrack *>(t);
+- return (cd != 0);
++ return (cd != 0);
+ }
+
+ static int getdbsum(int val) {
+@@ -218,7 +232,7 @@
+ for(i = 0; i < buf.size(); i++)
+ ret += buf[i]-'0';
+
+- return ret;
++ return ret;
+ }
+
+ void cdtrack::cleartracks() {
+@@ -227,15 +241,17 @@
+ while((it = find_if(plist.begin(), plist.end(), isourtrack)) != plist.end()) {
+ delete *it;
+ plist.erase(it);
+- }
++ }
+ }
+
+ void cdtrack::readtracks() {
+ int st_track, lst_track, track, start_sec, start_min, end_sec, end_min;
+ int tracklen, tracksum, disklen, sframe;
+ unsigned int discid;
+- struct cdrom_tocentry toc;
+- struct cdrom_tochdr toch;
++ struct ioc_read_toc_single_entry toc;
++ struct ioc_toc_header toch;
++
++
+ cdtrack *ct;
+ char buf[64];
+
+@@ -248,32 +264,32 @@
+
+ cddbquery = "";
+
+- if(!ioctl(cdfd, CDROMSTART) && !ioctl(cdfd, CDROMREADTOCHDR, &toch)) {
+- st_track = toch.cdth_trk0;
+- lst_track = toch.cdth_trk1;
++ if(!ioctl(cdfd, CDIOCSTART) && !ioctl(cdfd, CDIOREADTOCHEADER, &toch)) {
++ st_track = toch.starting_track;
++ lst_track = toch.ending_track;
+
+- toc.cdte_format = CDROM_MSF;
++ toc.address_format = CD_MSF_FORMAT;
+ tracksum = 0;
+
+ for(track = 1; track <= lst_track; track++) {
+- toc.cdte_track = track;
++ toc.track = track;
+
+- if(ioctl(cdfd, CDROMREADTOCENTRY, &toc) != -1) {
+- start_sec = toc.cdte_addr.msf.second;
+- start_min = toc.cdte_addr.msf.minute;
++ if(ioctl(cdfd, CDIOREADTOCENTRY, &toc) != -1) {
++ start_sec = toc.entry.addr.msf.second;
++ start_min = toc.entry.addr.msf.minute;
+
+- if(toch.cdth_trk1 == track) {
+- toc.cdte_track = CDROM_LEADOUT;
++ if(toch.ending_track == track) {
++ toc.track = CDROM_LEADOUT;
+ } else {
+- toc.cdte_track = track + 1;
++ toc.track = track + 1;
+ }
+
+ sframe = (start_min * 60 + start_sec) * 75
+- + toc.cdte_addr.msf.frame;
++ + toc.entry.addr.msf.frame;
+
+- if(ioctl(cdfd, CDROMREADTOCENTRY, &toc) != -1) {
+- end_sec = toc.cdte_addr.msf.second;
+- end_min = toc.cdte_addr.msf.minute;
++ if(ioctl(cdfd, CDIOREADTOCENTRY, &toc) != -1) {
++ end_sec = toc.entry.addr.msf.second;
++ end_min = toc.entry.addr.msf.minute;
+
+ tracklen = (end_min * 60 + end_sec) - (start_min * 60 + start_sec);
+
+@@ -308,7 +324,7 @@
+ } else {
+ ui.status(_("No CD in the drive!"));
+
+- }
++ }
+ }
+
+ bool cdtrack::loadtracks(const string &fname) {
+@@ -388,7 +404,7 @@
+
+ #endif
+
+- return reply;
++ return reply;
+ }
+
+ void cdtrack::getcddb() {
+@@ -468,15 +484,15 @@
+ ui.update();
+ } else {
+ ui.status(_("Failed to fetch track titles"));
+- }
++ }
+ }
+
+ void cdtrack::eject() {
+ if(cdfd == -1)
+ cdfd = open(conf.getcddevice().c_str(), O_RDONLY | O_NONBLOCK);
+
+- if(ioctl(cdfd, ejected ? CDROMCLOSETRAY : CDROMEJECT) != -1)
+- ejected = !ejected;
++ if(ioctl(cdfd, ejected ? CDIOCALLOW : CDIOCEJECT) != -1)
++ ejected = !ejected;
+ }
+
+ string cdtrack::getcdid() {
diff --git a/audio/orpheus/files/patch-src-cdtrack.h b/audio/orpheus/files/patch-src-cdtrack.h
new file mode 100644
index 000000000000..5edb83d873a8
--- /dev/null
+++ b/audio/orpheus/files/patch-src-cdtrack.h
@@ -0,0 +1,20 @@
+--- src/cdtrack.h Sat Oct 18 14:51:26 2003
++++ src/cdtrack.h Sun Dec 12 18:40:09 2004
+@@ -5,7 +5,7 @@
+
+ #include <string>
+
+-#include <linux/cdrom.h>
++#include <sys/cdio.h>
+ #include <sys/ioctl.h>
+ #include <sys/types.h>
+ #include <sys/stat.h>
+@@ -15,7 +15,7 @@
+ class cdtrack : public track {
+ private:
+ int length, number;
+- struct cdrom_tocentry toc;
++ struct ioc_read_toc_single_entry toc;
+ string title;
+ bool paused;
+
diff --git a/audio/orpheus/files/patch-src-mixerctl.cc b/audio/orpheus/files/patch-src-mixerctl.cc
new file mode 100644
index 000000000000..0972f2ff901b
--- /dev/null
+++ b/audio/orpheus/files/patch-src-mixerctl.cc
@@ -0,0 +1,11 @@
+--- src/mixerctl.cc Sat Feb 14 20:11:05 2004
++++ src/mixerctl.cc Sun Dec 12 22:08:37 2004
+@@ -50,7 +50,7 @@
+
+ if((fd = ::open(devname.c_str(), O_RDWR)) != -1) {
+ if(ioctl(fd, SOUND_MIXER_READ_DEVMASK, &devmask) != -1) {
+- for(ct = ctVolume; ct != channeltype_end; (int) ct += 1) {
++ for(ct = ctVolume; ct != channeltype_end; ct = (mixerctl::channeltype) (ct + 1)) {
+ if((1 << (int) ct) & devmask) {
+ channels.insert(ct);
+ }
diff --git a/audio/orpheus/files/patch-src-orpheius.cc b/audio/orpheus/files/patch-src-orpheius.cc
new file mode 100644
index 000000000000..92d913b4571f
--- /dev/null
+++ b/audio/orpheus/files/patch-src-orpheius.cc
@@ -0,0 +1,11 @@
+--- src/orpheusconf.cc Sat Feb 14 20:11:05 2004
++++ src/orpheusconf.cc Sun Dec 12 16:03:16 2004
+@@ -34,7 +34,7 @@
+
+ OrpheusConfiguration::OrpheusConfiguration()
+ : dname((string) getenv("HOME") + "/.orpheus"),
+- oggplayer("ogg123 -v"), cddev("/dev/cdrom"),
++ oggplayer("ogg123 -v"), cddev("/cdrom"),
+ mixerdev("/dev/mixer"), cdautofetch(true), russian(false),
+ autosavepl(false), autoplay(true), playmode(Normal),
+ sortorder(noSort), sortasc(true)
diff --git a/audio/orpheus/files/patch-src-uitext.cc b/audio/orpheus/files/patch-src-uitext.cc
new file mode 100644
index 000000000000..72f1651dd0ca
--- /dev/null
+++ b/audio/orpheus/files/patch-src-uitext.cc
@@ -0,0 +1,31 @@
+--- src/uitext.cc Tue Feb 17 04:18:21 2004
++++ src/uitext.cc Sun Dec 12 22:12:41 2004
+@@ -577,14 +577,16 @@
+ autosavepl = !autosavepl;
+ break;
+ case 41:
+- if(++((int) playmode) == PlayMode_size)
++ playmode = (PlayMode) (playmode + 1);
++ if(playmode == PlayMode_size)
+ playmode = Normal;
+ break;
+ case 42:
+ autoplay = !autoplay;
+ break;
+ case 43:
+- if(++((int) sortorder) == SortOrder_size)
++ sortorder = (SortOrder) (sortorder + 1);
++ if(sortorder == SortOrder_size)
+ sortorder = byFileName;
+ break;
+ case 44:
+@@ -719,7 +721,8 @@
+ while(!finished) {
+ m.clear();
+
+- for(ct = mixerctl::ctVolume; ct != mixerctl::channeltype_end; (int) ct += 1) {
++ for(ct = mixerctl::ctVolume; ct != mixerctl::channeltype_end; ct = (mixerctl::channeltype) (ct + 1))
++ {
+ if(chavail.count(ct)) {
+ val = mix.readlevel(ct);
+ if(val >= 0) {
diff --git a/audio/orpheus/pkg-descr b/audio/orpheus/pkg-descr
new file mode 100644
index 000000000000..414cadf079f9
--- /dev/null
+++ b/audio/orpheus/pkg-descr
@@ -0,0 +1,4 @@
+Orpheus is a light-weight text mode menu- and window-driven audio player
+application for CDs and files in MP3 and Vorbis OGG format.
+
+WWW: http://thekonst.net/orpheus/
diff --git a/audio/orpheus/pkg-plist b/audio/orpheus/pkg-plist
new file mode 100644
index 000000000000..2f810213c465
--- /dev/null
+++ b/audio/orpheus/pkg-plist
@@ -0,0 +1,3 @@
+bin/orpheus
+%%NLS%%share/locale/ru/LC_MESSAGES/orpheus.mo
+%%NLS%%@unexec rmdir %D/share/locale/ru/LC_MESSAGES 2>/dev/null || true