From mux@qualys.com  Sun Apr 29 13:11:27 2001
Return-Path: <mux@qualys.com>
Received: from nebula.cybercable.fr (d217.dhcp212-126.cybercable.fr [212.198.126.217])
	by hub.freebsd.org (Postfix) with ESMTP id 66F3337B43C
	for <FreeBSD-gnats-submit@freebsd.org>; Sun, 29 Apr 2001 13:11:26 -0700 (PDT)
	(envelope-from mux@qualys.com)
Received: (from mux@localhost)
	by nebula.cybercable.fr (8.11.3/8.11.3) id f3TKBLY04836;
	Sun, 29 Apr 2001 22:11:21 +0200 (CEST)
	(envelope-from mux)
Message-Id: <200104292011.f3TKBLY04836@nebula.cybercable.fr>
Date: Sun, 29 Apr 2001 22:11:21 +0200 (CEST)
From: Maxime Henrion <mux@qualys.com>
Reply-To: mux@qualys.com
To: FreeBSD-gnats-submit@freebsd.org
Cc:
Subject: [PATCH] add ``next'' and ``previous'' commands to cdcontrol(1).
X-Send-Pr-Version: 3.113
X-GNATS-Notify:

>Number:         26962
>Category:       bin
>Synopsis:       Add ``next'' and ``previous'' commands to cdcontrol(1).
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-bugs
>State:          closed
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          change-request
>Submitter-Id:   current-users
>Arrival-Date:   Sun Apr 29 13:20:00 PDT 2001
>Closed-Date:    Fri May 25 02:25:01 PDT 2001
>Last-Modified:  Fri May 25 02:25:13 PDT 2001
>Originator:     Maxime Henrion
>Release:        FreeBSD 5.0-CURRENT i386
>Organization:
none
>Environment:
System: FreeBSD nebula.cybercable.fr 5.0-CURRENT FreeBSD 5.0-CURRENT #5: Sun Apr 29 02:10:15 CEST 2001 mux@nebula.cybercable.fr:/usr/src/sys/compile/NEBULA i386


>Description:

	This patch adds the ``next'' and ``previous'' commands to cdcontrol(1).
	After the last track, ``next'' loops back to the first one, and so
	on for ``previous''.

>How-To-Repeat:
>Fix:
	
	Reviewed by jkh on IRC.

*** cdcontrol.c.old	Sun Apr 29 21:33:09 2001
--- cdcontrol.c	Sun Apr 29 21:32:48 2001
***************
*** 69,74 ****
--- 69,76 ----
  #define CMD_SET         13
  #define CMD_STATUS      14
  #define CMD_CDID        15
+ #define CMD_NEXT	16
+ #define CMD_PREVIOUS	17
  #define STATUS_AUDIO    0x1
  #define STATUS_MEDIA    0x2
  #define STATUS_VOLUME   0x4
***************
*** 85,95 ****
--- 87,99 ----
  { CMD_HELP,     "?",            1, 0 },
  { CMD_HELP,     "help",         1, "" },
  { CMD_INFO,     "info",         1, "" },
+ { CMD_NEXT,	"next",		1, "" },
  { CMD_PAUSE,    "pause",        2, "" },
  { CMD_PLAY,     "play",         1, "min1:sec1[.fram1] [min2:sec2[.fram2]]" },
  { CMD_PLAY,     "play",         1, "track1[.index1] [track2[.index2]]" },
  { CMD_PLAY,     "play",         1, "tr1 m1:s1[.f1] [[tr2] [m2:s2[.f2]]]" },
  { CMD_PLAY,     "play",         1, "[#block [len]]" },
+ { CMD_PREVIOUS,	"previous",	2, "" },
  { CMD_QUIT,     "quit",         1, "" },
  { CMD_RESET,    "reset",        4, "" },
  { CMD_RESUME,   "resume",       1, "" },
***************
*** 115,120 ****
--- 119,126 ----
  int             get_vol __P((int *, int *));
  int             status __P((int *, int *, int *, int *));
  int             open_cd __P((void));
+ int		next __P((void));
+ int		previous __P((void));
  int             play __P((char *arg));
  int             info __P((char *arg));
  int             cdid __P((void));
***************
*** 287,298 ****
--- 293,316 ----
  
  		return pstatus (arg);
  
+ 	case CMD_NEXT:
+ 		if (fd < 0 && ! open_cd ())
+ 			return (0);
+ 
+ 		return next ();
+ 
  	case CMD_PAUSE:
  		if (fd < 0 && ! open_cd ())
  			return (0);
  
  		return ioctl (fd, CDIOCPAUSE);
  
+ 	case CMD_PREVIOUS:
+ 		if (fd < 0 && ! open_cd ())
+ 			return (0);
+ 
+ 		return previous ();
+ 
  	case CMD_RESUME:
  		if (fd < 0 && ! open_cd ())
  			return (0);
***************
*** 1180,1183 ****
--- 1198,1245 ----
  		err(1, "%s", devbuf);
  	}
  	return (1);
+ }
+ 
+ int
+ next()
+ {
+ 	int trk;
+ 	struct ioc_toc_header h;
+ 	int rc, n;
+ 
+ 	rc = ioctl(fd, CDIOREADTOCHEADER, &h);
+ 
+ 	if (rc < 0)
+ 		return (rc);
+ 
+ 	n = h.ending_track - h.starting_track + 1;
+ 
+ 	if (status(&trk, &rc, &rc, &rc) < 0)
+ 		return (-1);
+ 
+ 	if (++trk > h.ending_track)
+ 		trk = 1;
+ 	return play_track(trk, 1, n, 1);
+ }
+ 
+ int
+ previous()
+ {
+ 	int trk;
+ 	struct ioc_toc_header h;
+ 	int rc, n;
+ 
+ 	rc = ioctl(fd, CDIOREADTOCHEADER, &h);
+ 
+ 	if (rc < 0)
+ 		return (rc);
+ 
+ 	n = h.ending_track - h.starting_track + 1;
+ 
+ 	if (status(&trk, &rc, &rc, &rc) < 0)
+ 		return (-1);
+ 
+ 	if (--trk < 1)
+ 		trk = h.ending_track;
+ 	return play_track(trk, 1, n, 1);
  }

*** cdcontrol.1.old	Thu Feb  1 17:43:36 2001
--- cdcontrol.1	Sun Apr 29 21:18:28 2001
***************
*** 82,87 ****
--- 82,91 ----
  using
  .Ar length
  logical blocks.
+ .It Cm next
+ Play the next track.
+ .It Cm previous
+ Play the previous track.
  .It Cm pause
  Stop playing.
  Do not stop the disc.
>Release-Note:
>Audit-Trail:

From: Bill Fumerola <billf@mu.org>
To: Maxime Henrion <mux@qualys.com>
Cc: FreeBSD-gnats-submit@freebsd.org
Subject: Re: bin/26962: [PATCH] add ``next'' and ``previous'' commands to cdcontrol(1).
Date: Sun, 29 Apr 2001 16:43:14 -0500

 On Sun, Apr 29, 2001 at 10:11:21PM +0200, Maxime Henrion wrote:
 
 > ***************
 > *** 69,74 ****
 > --- 69,76 ----
 >   #define CMD_SET         13
 >   #define CMD_STATUS      14
 >   #define CMD_CDID        15
 > + #define CMD_NEXT	16
 > + #define CMD_PREVIOUS	17
 >   #define STATUS_AUDIO    0x1
 >   #define STATUS_MEDIA    0x2
 >   #define STATUS_VOLUME   0x4
 
 whitespace.
 
 > ***************
 > *** 85,95 ****
 > --- 87,99 ----
 >   { CMD_HELP,     "?",            1, 0 },
 >   { CMD_HELP,     "help",         1, "" },
 >   { CMD_INFO,     "info",         1, "" },
 > + { CMD_NEXT,	"next",		1, "" },
 >   { CMD_PAUSE,    "pause",        2, "" },
 >   { CMD_PLAY,     "play",         1, "min1:sec1[.fram1] [min2:sec2[.fram2]]" },
 >   { CMD_PLAY,     "play",         1, "track1[.index1] [track2[.index2]]" },
 >   { CMD_PLAY,     "play",         1, "tr1 m1:s1[.f1] [[tr2] [m2:s2[.f2]]]" },
 >   { CMD_PLAY,     "play",         1, "[#block [len]]" },
 > + { CMD_PREVIOUS,	"previous",	2, "" },
 >   { CMD_QUIT,     "quit",         1, "" },
 >   { CMD_RESET,    "reset",        4, "" },
 >   { CMD_RESUME,   "resume",       1, "" },
 
 whitespace.
 
 > ***************
 > *** 115,120 ****
 > --- 119,126 ----
 >   int             get_vol __P((int *, int *));
 >   int             status __P((int *, int *, int *, int *));
 >   int             open_cd __P((void));
 > + int		next __P((void));
 > + int		previous __P((void));
 >   int             play __P((char *arg));
 >   int             info __P((char *arg));
 >   int             cdid __P((void));
 
 whitespace.
 
 -- 
 Bill Fumerola - security yahoo         / Yahoo! inc.
               - fumerola@yahoo-inc.com / billf@FreeBSD.org
 
 
 

From: Maxime Henrion <mux@qualys.com>
To: FreeBSD-gnats-submit@freebsd.org
Cc: Bill Fumerola <billf@mu.org>
Subject: Re: bin/26962: [PATCH] add ``next'' and ``previous'' commands to cdcontrol(1).
Date: Sun, 29 Apr 2001 23:53:38 +0200

 Whitespace problems fixed in this patch.  Actually I used tabs as I
 think it should have been done, but the original source code was using
 spaces :/
 
 *** cdcontrol.c.old	Sun Apr 29 21:33:09 2001
 --- cdcontrol.c	Sun Apr 29 21:32:48 2001
 ***************
 *** 69,74 ****
 --- 69,76 ----
   #define CMD_SET         13
   #define CMD_STATUS      14
   #define CMD_CDID        15
 + #define CMD_NEXT        16
 + #define CMD_PREVIOUS    17
   #define STATUS_AUDIO    0x1
   #define STATUS_MEDIA    0x2
   #define STATUS_VOLUME   0x4
 ***************
 *** 85,95 ****
 --- 87,99 ----
   { CMD_HELP,     "?",            1, 0 },
   { CMD_HELP,     "help",         1, "" },
   { CMD_INFO,     "info",         1, "" },
 + { CMD_NEXT,     "next",         1, "" },
   { CMD_PAUSE,    "pause",        2, "" },
   { CMD_PLAY,     "play",         1, "min1:sec1[.fram1] [min2:sec2[.fram2]]" },
   { CMD_PLAY,     "play",         1, "track1[.index1] [track2[.index2]]" },
   { CMD_PLAY,     "play",         1, "tr1 m1:s1[.f1] [[tr2] [m2:s2[.f2]]]" },
   { CMD_PLAY,     "play",         1, "[#block [len]]" },
 + { CMD_PREVIOUS, "previous",     2, "" },
   { CMD_QUIT,     "quit",         1, "" },
   { CMD_RESET,    "reset",        4, "" },
   { CMD_RESUME,   "resume",       1, "" },
 ***************
 *** 115,120 ****
 --- 119,126 ----
   int             get_vol __P((int *, int *));
   int             status __P((int *, int *, int *, int *));
   int             open_cd __P((void));
 + int             next __P((void));
 + int             previous __P((void));
   int             play __P((char *arg));
   int             info __P((char *arg));
   int             cdid __P((void));
 ***************
 *** 287,298 ****
 --- 293,316 ----
   
   		return pstatus (arg);
   
 + 	case CMD_NEXT:
 + 		if (fd < 0 && ! open_cd ())
 + 			return (0);
 + 
 + 		return next ();
 + 
   	case CMD_PAUSE:
   		if (fd < 0 && ! open_cd ())
   			return (0);
   
   		return ioctl (fd, CDIOCPAUSE);
   
 + 	case CMD_PREVIOUS:
 + 		if (fd < 0 && ! open_cd ())
 + 			return (0);
 + 
 + 		return previous ();
 + 
   	case CMD_RESUME:
   		if (fd < 0 && ! open_cd ())
   			return (0);
 ***************
 *** 1180,1183 ****
 --- 1198,1245 ----
   		err(1, "%s", devbuf);
   	}
   	return (1);
 + }
 + 
 + int
 + next()
 + {
 + 	int trk;
 + 	struct ioc_toc_header h;
 + 	int rc, n;
 + 
 + 	rc = ioctl(fd, CDIOREADTOCHEADER, &h);
 + 
 + 	if (rc < 0)
 + 		return (rc);
 + 
 + 	n = h.ending_track - h.starting_track + 1;
 + 
 + 	if (status(&trk, &rc, &rc, &rc) < 0)
 + 		return (-1);
 + 
 + 	if (++trk > h.ending_track)
 + 		trk = 1;
 + 	return play_track(trk, 1, n, 1);
 + }
 + 
 + int
 + previous()
 + {
 + 	int trk;
 + 	struct ioc_toc_header h;
 + 	int rc, n;
 + 
 + 	rc = ioctl(fd, CDIOREADTOCHEADER, &h);
 + 
 + 	if (rc < 0)
 + 		return (rc);
 + 
 + 	n = h.ending_track - h.starting_track + 1;
 + 
 + 	if (status(&trk, &rc, &rc, &rc) < 0)
 + 		return (-1);
 + 
 + 	if (--trk < 1)
 + 		trk = h.ending_track;
 + 	return play_track(trk, 1, n, 1);
   }
State-Changed-From-To: open->closed 
State-Changed-By: kris 
State-Changed-When: Fri May 25 02:25:01 PDT 2001 
State-Changed-Why:  
A version of this patch has been committed, thanks! 

http://www.FreeBSD.org/cgi/query-pr.cgi?pr=26962 
>Unformatted:
