m3u.c
上传用户:wstnjxml
上传日期:2014-04-03
资源大小:7248k
文件大小:2k
源码类别:

Windows CE

开发平台:

C/C++

  1. /*****************************************************************************
  2.  *
  3.  * This program is free software ; you can redistribute it and/or modify
  4.  * it under the terms of the GNU General Public License as published by
  5.  * the Free Software Foundation; either version 2 of the License, or
  6.  * (at your option) any later version.
  7.  *
  8.  * This program is distributed in the hope that it will be useful,
  9.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  10.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  11.  * GNU General Public License for more details.
  12.  *
  13.  * You should have received a copy of the GNU General Public License
  14.  * along with this program; if not, write to the Free Software
  15.  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
  16.  *
  17.  * $Id: m3u.c 346 2005-11-21 22:20:40Z picard $
  18.  *
  19.  * The Core Pocket Media Player
  20.  * Copyright (c) 2004-2005 Gabor Kovacs
  21.  *
  22.  ****************************************************************************/
  23. #include "../common.h"
  24. #include "m3u.h"
  25. static int ReadList(playlist* p,tchar_t* Path,int PathLen,tchar_t* DispName,int DispNameLen,tick_t* Length)
  26. {
  27. tchar_t s[MAXLINE];
  28. DispName[0] = 0;
  29. *Length = -1;
  30. while (ParserLine(&p->Parser,s,MAXLINE))
  31. {
  32. if (s[0]=='#')
  33. {
  34. tcsuprto(s,':');
  35. if (stscanf(s,T("#EXTINF: %d ,"),Length)==1)
  36. {
  37. tchar_t* p = tcschr(s,',');
  38. if (p++)
  39. {
  40. while (IsSpace(*p)) ++p;
  41. tcscpy_s(DispName,DispNameLen,p);
  42. }
  43. if (*Length >= 0)
  44. *Length *= TICKSPERSEC;
  45. }
  46. }
  47. else
  48. if (s[0])
  49. {
  50. tcscpy_s(Path,PathLen,s);
  51. return ERR_NONE;
  52. }
  53. }
  54. return ERR_END_OF_FILE;
  55. }
  56. static int WriteList(playlist* p, const tchar_t* Path,const tchar_t* DispName,tick_t Length)
  57. {
  58. if (Path)
  59. {
  60. if (p->No++<0)
  61. StreamPrintf(p->Stream,T("#EXTM3Un"));
  62. if (Length >= 0 || DispName[0])
  63. StreamPrintf(p->Stream,T("#EXTINF:%d,%sn"),Length/TICKSPERSEC,DispName);
  64. StreamPrintf(p->Stream,T("%sn"),Path);
  65. }
  66. return ERR_NONE;
  67. }
  68. static int Create(playlist* p)
  69. {
  70. p->ReadList = (playreadlist)ReadList;
  71. p->WriteList = (playwritelist)WriteList;
  72. return ERR_NONE;
  73. }
  74. static const nodedef M3U =
  75. {
  76. sizeof(playlist),
  77. M3U_ID,
  78. PLAYLIST_CLASS,
  79. PRI_DEFAULT,
  80. (nodecreate)Create,
  81. NULL,
  82. };
  83. void M3U_Init()
  84. {
  85. NodeRegisterClass(&M3U);
  86. }
  87. void M3U_Done()
  88. {
  89. NodeUnRegisterClass(M3U_ID);
  90. }