OSDN Git Service

update epgdump for dist.
[rec10/rec10-git.git] / dist / trunk / tstools / epgdump / util.c
index 1dc39bb..a091c23 100755 (executable)
@@ -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 );
+}
+