Msf.cc
上传用户:weiliju62
上传日期:2007-01-06
资源大小:619k
文件大小:2k
源码类别:

SCSI/ASPI

开发平台:

MultiPlatform

  1. /*  cdrdao - write audio CD-Rs in disc-at-once mode
  2.  *
  3.  *  Copyright (C) 1998  Andreas Mueller <mueller@daneb.ping.de>
  4.  *
  5.  *  This program is free software; you can redistribute it and/or modify
  6.  *  it under the terms of the GNU General Public License as published by
  7.  *  the Free Software Foundation; either version 2 of the License, or
  8.  *  (at your option) any later version.
  9.  *
  10.  *  This program is distributed in the hope that it will be useful,
  11.  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13.  *  GNU General Public License for more details.
  14.  *
  15.  *  You should have received a copy of the GNU General Public License
  16.  *  along with this program; if not, write to the Free Software
  17.  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  18.  */
  19. static char rcsid[] = "$Id: Msf.cc,v 1.2 1998/05/22 18:33:19 mueller Exp $";
  20. #include <config.h>
  21. #include <stdio.h>
  22. #include <assert.h>
  23. #include "Msf.h"
  24. Msf::Msf()
  25. {
  26.   min_ = sec_ = frac_ = 0;
  27.   lba_ = 0;
  28. }
  29. Msf::Msf(int min, int sec, int frac)
  30. {
  31.   assert(frac >= 0 && frac < 75);
  32.   assert(sec >= 0 && sec < 60);
  33.   assert(min >= 0);
  34.   min_ = min;
  35.   sec_ = sec;
  36.   frac_ = frac;
  37.   lba_ = min_ * 4500 + sec_ * 75 + frac_;
  38. }
  39. Msf::Msf(long lba)
  40. {
  41.   assert(lba >= 0);
  42.   lba_ = lba;
  43.   lba2Msf();
  44. }
  45. void Msf::lba2Msf()
  46. {
  47.   long lba = lba_;
  48.   min_ = lba / 4500;
  49.   lba %= 4500;
  50.   sec_ = lba / 75;
  51.   lba %= 75;
  52.   frac_ = lba;
  53. }
  54. const char *Msf::str() const
  55. {
  56.   static char buf[20];
  57.   sprintf(buf, "%02d:%02d:%02d", min_, sec_, frac_);
  58.   return buf;
  59. }
  60. Msf operator+(const Msf &m1, const Msf &m2)
  61. {
  62.   return Msf(m1.lba() + m2.lba());
  63. }
  64. Msf operator-(const Msf &m1, const Msf &m2)
  65. {
  66.   return Msf(m1.lba() - m2.lba());
  67. }