X-Git-Url: http://git.osdn.net/view?p=rec10%2Frec10-git.git;a=blobdiff_plain;f=dist%2Ftrunk%2Ftstools%2Fepgdump%2Futil.c;h=a091c23dd4e57f300bf3c2bef338922ff06f6a67;hp=1dc39bbd3f56eb231cab456d01796e2949d4b2a8;hb=ebc039ea3003a5704829590dfaa87d8e1aee43e6;hpb=13e65e890a6dd60705bacc22b893ce5c899b7001 diff --git a/dist/trunk/tstools/epgdump/util.c b/dist/trunk/tstools/epgdump/util.c index 1dc39bb..a091c23 100755 --- a/dist/trunk/tstools/epgdump/util.c +++ b/dist/trunk/tstools/epgdump/util.c @@ -7,16 +7,28 @@ int strrep(char *buf, char *mae, char *ato) { - char *mituke; + char *mitsuke, *findpos; size_t maelen, atolen; + int shift; + findpos = buf; maelen = strlen(mae); atolen = strlen(ato); - if (maelen == 0 || (mituke = strstr(buf, mae)) == NULL) return 0; - memmove(mituke + atolen, mituke + maelen, strlen(buf) - (mituke + maelen - buf ) + 1); - memcpy(mituke, ato, atolen); + shift = (int)(strlen(ato)-strlen(mae)); + + if (maelen == 0 || strstr(findpos, mae) == NULL) return 0; + while ((mitsuke = strstr(findpos, mae)) != NULL) { + if (shift > 0) { + memmove(mitsuke + shift, mitsuke, strlen(mitsuke) + 1); + } else if (shift < 0) { + memmove(mitsuke, mitsuke - shift, strlen(mitsuke) + shift + 1); + } + memmove(mitsuke, ato, atolen); + findpos = mitsuke + atolen; + } return 1; } + int getBit(unsigned char *byte, int *pbit, int gbit) { int pbyte = *pbit / 8; unsigned char *fbyte = byte + pbyte; @@ -24,19 +36,19 @@ int getBit(unsigned char *byte, int *pbit, int gbit) { int cutbit = *pbit - (pbyte * 8); int lcutbit = 32 - (cutbit + gbit); - unsigned char tbuf[4]; /* int¤ÎºÇÂç32bit */ + unsigned char tbuf[4]; /* intの最大32bit */ unsigned int tnum; memcpy(tbuf, fbyte, sizeof(unsigned char) * 4); - /* ÀèƬ¥Ð¥¤¥È¤«¤éÉÔÍ×bit¤ò¥«¥Ã¥È */ + /* 先頭バイトから不要bitをカット */ tbuf[0] = tbuf[0] << cutbit; tbuf[0] = tbuf[0] >> cutbit; - /* int¤Ë¤·¤Æ¤·¤Þ¤¦ */ + /* intにしてしまう */ tnum = tbuf[0] << 24 | tbuf[1] << 16 | tbuf[2] << 8 | tbuf[3]; - /* ¸å¤í¤ÎÉÔÍץХ¤¥È¤ò¥«¥Ã¥È */ + /* 後ろの不要バイトをカット */ tnum = tnum >> lcutbit; *pbit += gbit; @@ -74,3 +86,40 @@ int parseOTHERdesc(unsigned char *data) { return descriptor_length + 2; } +void* allocCopy(void* src, int *boff, size_t size) { + void* mem = NULL; + if ( size == 0 ) return NULL; + + mem = malloc(size); + memcpy(mem, src + *boff / 8, size); + *boff += size * 8; + return mem; +} + +time_t parseMJD( unsigned char *data ) { + int tnum, year, mon, mday; + struct tm MJD; + + tnum = (data[0] & 0xFF) << 8 | (data[1] & 0xFF); + year = (tnum - 15078.2) / 365.25; + mon = ((tnum - 14956.1) - (int)(year * 365.25)) / 30.6001; + mday = (tnum - 14956) - (int)(year * 365.25) - (int)(mon * 30.6001); + + if(mon == 14 || mon == 15) { + year += 1; + mon -= 13; + } else { + mon -= 1; + } + + memset( &MJD, 0, sizeof(MJD) ); + MJD.tm_year = year; + MJD.tm_mon = mon - 1; + MJD.tm_mday = mday; + + MJD.tm_hour = BCD(data[2]); + MJD.tm_min = BCD(data[3]); + MJD.tm_sec = BCD(data[4]); + return mktime( &MJD ); +} +