void GetEITSDTInfo(FILE *infile, SECcache *secs, int count) { SECcache *bsecs; SVT_CONTROL *svtcur; int pid; while((bsecs = readTS(infile, secs, count)) != NULL) { pid = bsecs->pid & 0xFF; switch (pid) { case 0x11: // SDT dumpSDT(bsecs->buf, svttop); svtcur = svttop->next; while(svtcur) { if (svtcur->eit == NULL) { svtcur->eit = calloc(1, sizeof(EIT_CONTROL)); } svtcur = svtcur->next; } break; case 0x12: // EIT case 0x26: // EIT(地デジ) case 0x27: // EIT(地デジ) dumpEIT(bsecs->buf, svttop); break; } } }
void GetEIT(FILE *infile, FILE *outfile, STATION *psta, SECcache *secs, int count) { SECcache *bsecs; EIT_CONTROL *eitcur ; EIT_CONTROL *eitnext ; EIT_CONTROL *eittop = NULL; time_t l_time ; time_t end_time ; struct tm tl ; struct tm *endtl ; char cendtime[32]; char cstarttime[32]; eittop = calloc(1, sizeof(EIT_CONTROL)); eitcur = eittop ; fseek(infile, 0, SEEK_SET); while((bsecs = readTS(infile, secs, SECCOUNT)) != NULL) { /* EIT */ if((bsecs->pid & 0xFF) == 0x12) { dumpEIT(bsecs->buf, psta->svId, psta->onId, psta->tsId, eittop); }else if((bsecs->pid & 0xFF) == 0x26) { dumpEIT(bsecs->buf, psta->svId, psta->onId, psta->tsId, eittop); }else if((bsecs->pid & 0xFF) == 0x27) { dumpEIT(bsecs->buf, psta->svId, psta->onId, psta->tsId, eittop); } } eitcur = eittop ; while(eitcur != NULL){ if(!eitcur->servid){ eitcur = eitcur->next ; continue ; } if(eitcur->content_type > CAT_COUNT){ eitcur->content_type = CAT_COUNT -1 ; } memset(title, '\0', sizeof(title)); strcpy(title, eitcur->title); xmlspecialchars(title); memset(subtitle, '\0', sizeof(subtitle)); strcpy(subtitle, eitcur->subtitle); xmlspecialchars(subtitle); memset(Category, '\0', sizeof(Category)); strcpy(Category, ContentCatList[eitcur->content_type].japanese); xmlspecialchars(Category); tl.tm_sec = eitcur->ss ; tl.tm_min = eitcur->hm ; tl.tm_hour = eitcur->hh ; tl.tm_mday = eitcur->dd ; tl.tm_mon = (eitcur->mm - 1); tl.tm_year = (eitcur->yy - 1900); tl.tm_wday = 0; tl.tm_isdst = 0; tl.tm_yday = 0; l_time = mktime(&tl); if((eitcur->ehh == 0) && (eitcur->emm == 0) && (eitcur->ess == 0)){ (void)time(&l_time); end_time = l_time + (60 * 5); // 5分後に設定 endtl = localtime(&end_time); }else{ end_time = l_time + eitcur->ehh * 3600 + eitcur->emm * 60 + eitcur->ess; endtl = localtime(&end_time); } memset(cendtime, '\0', sizeof(cendtime)); memset(cstarttime, '\0', sizeof(cstarttime)); strftime(cendtime, (sizeof(cendtime) - 1), "%Y%m%d%H%M%S", endtl); strftime(cstarttime, (sizeof(cstarttime) - 1), "%Y%m%d%H%M%S", &tl); #if 1 fprintf(outfile, " <programme start=\"%s +0900\" stop=\"%s +0900\" channel=\"%s\">\n", cstarttime, cendtime, psta->ontv); fprintf(outfile, " <title lang=\"ja_JP\">%s</title>\n", title); fprintf(outfile, " <desc lang=\"ja_JP\">%s</desc>\n", subtitle); fprintf(outfile, " <category lang=\"ja_JP\">%s</category>\n", Category); fprintf(outfile, " <category lang=\"en\">%s</category>\n", ContentCatList[eitcur->content_type].english); fprintf(outfile, " </programme>\n"); #else fprintf(outfile, "(%x:%x:%x)%s,%s,%s,%s,%s,%s\n", eitcur->servid, eitcur->table_id, eitcur->event_id, cstarttime, cendtime, title, subtitle, Category, ContentCatList[eitcur->content_type].english); #endif #if 0 fprintf(outfile, "(%x:%x)%04d/%02d/%02d,%02d:%02d:%02d,%02d:%02d:%02d,%s,%s,%s,%s\n", eitcur->table_id, eitcur->event_id, eitcur->yy, eitcur->mm, eitcur->dd, eitcur->hh, eitcur->hm, eitcur->ss, eitcur->ehh, eitcur->emm, eitcur->ess, eitcur->title, eitcur->subtitle, ContentCatList[eitcur->content_type].japanese, ContentCatList[eitcur->content_type].english); #endif eitnext = eitcur->next ; free(eitcur->title); free(eitcur->subtitle); free(eitcur); eitcur = eitnext ; } free(eittop); eittop = NULL; }