Описание формата JTV

Sh
Shu
ruN. Novgorod
Добрый день, коллеги!
Кто-нибудь может дать описание формата JTV для ТВ-программ (если конечно он не закрытый).
Cl
Clever
ruУсть-Илимск
Вот тебе генератор на С.
// Written by Dmitry <a7051999@mail.ru>
//

#include <fcntl.h>
#include <io.h>
#include <stdio.h>
#include <windows.h>
#include <sys/stat.h>

#define error(test,str) if(test){printf(str);return 1;}

int main(int argc, char* argv[])
{
FILETIME ft;
SYSTEMTIME st;
FILE *f1;
int f2,f3;
char name[5000];

printf("JTV 3.0 TVGuide generator v3 by Dmitry <a7051999@mail.ru>\n");
error(argc<2,"Usage: guidegen.exe filename_without_extension [/extract]\n");

char sf1[100];sprintf(sf1,"%s.txt",argv[1]);
char sf2[100];sprintf(sf2,"%s.ndx",argv[1]);
char sf3[100];sprintf(sf3,"%s.pdt",argv[1]);

if(argc==2){

f1=fopen(sf1,"rt");error(!f1,"Can't open file .txt!\n");
f2=open(sf2,O_RDWR|O_BINARY|O_CREAT|O_TRUNC,_S_IWRITE|_S_IREAD);
f3=open(sf3,O_RDWR|O_BINARY|O_CREAT|O_TRUNC,_S_IWRITE|_S_IREAD);
error(f2<0 || f3<0,"Can't open file .ndx or .pdt!\n");

int nelem=0;
error(write(f2,&nelem,2)<0,"Write error!\n");

char jtvsgn[]="JTV 3.x TV Program Data\x0a\x0a\x0a";
error(write(f3,jtvsgn,26)<0,"Write error!\n");

int offset=0x1a;

while(7==
fscanf(f1,"%hd %hd %hd %hd %hd %hd %[^\n]",
&st.wDay,
&st.wMonth,
&st.wYear,
&st.wHour,
&st.wMinute,
&st.wDayOfWeek,
name
)){

st.wSecond=0;
st.wMilliseconds=0;
SystemTimeToFileTime(&st,&ft);

int tmp=0;
write(f2,&tmp,2);

write(f2,&ft,8);

write(f2,&offset,2);

int len=strlen(name);
write(f3,&len,2);
write(f3,name,len);

offset+=len+2;
nelem++;

}

lseek(f2,0,SEEK_SET);
write(f2,&nelem,2);

printf(".ndx and .pdt files created success.\n");

}else{

error(stricmp(argv[2],"/extract"),"Incorrect option!\n");

f1=fopen(sf1,"wt");error(!f1,"Can't open file .txt!\n");
f2=open(sf2,_O_RDONLY|O_BINARY);
f3=open(sf3,_O_RDONLY|O_BINARY);
error(f2<0 || f3<0,"Can't open file .ndx or .pdt!\n");

int nelem=0;
error(read(f2,&nelem,2)<0,"Read error!\n");
for(int i=0;i<nelem;i++){
int tmp;
read(f2,&tmp,2);
read(f2,&ft,8);
FileTimeToSystemTime(&ft,&st);

fprintf(f1,"%d %d %d %d %d %d\n",
st.wDay,
st.wMonth,
st.wYear,
st.wHour,
st.wMinute,
st.wDayOfWeek?st.wDayOfWeek:7
);

long offset=0;
read(f2,&offset,2);
lseek(f3,offset,SEEK_SET);
int len=0;
read(f3,&len,2);
read(f3,name,len);name[len]=0;
fprintf(f1,"%s\n",name);
}

printf(".txt file created success.\n");

}

fclose(f1);
close(f2);
close(f3);

return 0;
}
Sh
Shu
ruN. Novgorod
Большое спасибо.
cellard
ruСанкт-Петербург
А можно все таки получить именно описание формата?

И еще вопрос - давно меня тревожит:
В формате JTV похоже только братья славяне программки распространяют. Буржуйские же программы поддерживают часто только XMLTV.
Никак не могу понять:
1. Почему в XMLTV нет поддержки Росии. Формат зело удобный, не в пример JTV. Никому не надо?
1.1. Почему, на худой конец, нет просто генераторов в формат файлов XMLTV.
2. Почему отечественные программы не имеют поддержки формата XMLTV.

Вопросы, конечно, из серии, что было раньше - курица или яйцо... :-(

PS Если кто изучал XMLTV, подтвердит, у него (у формата самого) и возможности побогаче будут, чем у JTV.
ro
rod20
ruMoscow
cellard : 1. Почему в XMLTV нет поддержки Росии. Формат зело удобный, не в пример JTV. Никому не надо?
1.1. Почему, на худой конец, нет просто генераторов в формат файлов XMLTV.
2. Почему отечественные программы не имеют поддержки формата XMLTV.

Обрати внимание на TVXB (www.tvxb.com) и TVGuru (www.tvguru.ru).
Обе делают экспорт в XMLTV
Lazy caT
ruМосква
Салют, Народ...

Кто может разъяснить поподробнее внутреннюю структуру базы данных JTV... Кто конверторы писал, помогите... Я, конечно, смогу попробовать разобраться в выше приведенном коде но, я уверен если кто-нибудь "ткнет пальцем" что, где и как, будет на много лучше и более нагляднее...
Vlafy
ruСосновый Бор
Lazy caT
Имхо, лучше как раз разбираться самому ;-)
Lazy caT
ruМосква
Vlafy :
Спасибо огромное за совет, я уже разобрался... Потратил пару часов и таки разобрался... Оказывается ничего сложно там нет.... :-)
Rumlin
cuSimferopol
Отсюда
В архиве ссылка есть исходник на С++, с помощью которого некто Oleg Antoshkiv разобрал следующее:
PDT:
Вначале файла всегда находится текст "JTV 3.x TV Program Data" за ним три символа с кодом 0Ah, дальше, начиная со смещения 01Ah повторяются записи
переменной длины:
* 2 байта на количество символов в названии
* Hазвание телепередачи

NDX:
первые два байта в файле - количество записей, дальше идут записи, каждая размером 12 байт:
* первые 2 байта в записи всегда равны 0
* восемь байт структуры FILETIME (дата и время начала телепередачи)
* два байта - смещение-указатель в файле PDT на количество символов вназвании телепередачи

Описания структуры FILETIME я не нашел, наверное это количество секунд, начиная с какой-то даты, но можно просто конвертировать эту структуру в
SYSTEMTIME функцией FileTimeToSystemTime и наоборот функцией
SystemTimeToFileTime (Win32 API).

Feci quod potui, faciant meliora potente
li
linl
00Неизвестно
The FILETIME structure is a 64-bit value representing the number of 100-nanosecond intervals since January 1, 1601.

typedef struct _FILETIME { // ft

DWORD dwLowDateTime;

DWORD dwHighDateTime;

} FILETIME;



Members

dwLowDateTime
Specifies the low-order 32 bits of the file time.
dwHighDateTime
Specifies the high-order 32 bits of the file time.

Remarks

It is not recommended that you add and subtract values from the FILETIME structure to obtain relative times. Instead, you should

* Copy the resulting FILETIME structure to a LARGE_INTEGER structure.

* Use normal 64-bit arithmetic on the LARGE_INTEGER value.

нашел тут
ссылка
RA Pafnuteus
ruНеизвестно
Апну тему, с вашего позволения...
Что-то не могу найти в этом формате названий каналов.
Предусматривается ли форматом такая в общем то логичная функциональность?

// Добавлено спустя 1 час 20 минут

По ходу никаких названий. Если только имя файла может содержать название. Но это на усмотрение того, кто генерит эти файлы.