8 int strrep(char *buf, char *mae, char *ato)
10 char *mitsuke, *findpos;
11 size_t maelen, atolen;
17 shift = (int)(strlen(ato)-strlen(mae));
19 if (maelen == 0 || strstr(findpos, mae) == NULL) return 0;
20 while ((mitsuke = strstr(findpos, mae)) != NULL) {
22 memmove(mitsuke + shift, mitsuke, strlen(mitsuke) + 1);
23 } else if (shift < 0) {
24 memmove(mitsuke, mitsuke - shift, strlen(mitsuke) + shift + 1);
26 memmove(mitsuke, ato, atolen);
27 findpos = mitsuke + atolen;
32 int getBit(unsigned char *byte, int *pbit, int gbit) {
33 int pbyte = *pbit / 8;
34 unsigned char *fbyte = byte + pbyte;
36 int cutbit = *pbit - (pbyte * 8);
37 int lcutbit = 32 - (cutbit + gbit);
39 unsigned char tbuf[4]; /* intの最大32bit */
42 memcpy(tbuf, fbyte, sizeof(unsigned char) * 4);
44 /* 先頭バイトから不要bitをカット */
45 tbuf[0] = tbuf[0] << cutbit;
46 tbuf[0] = tbuf[0] >> cutbit;
49 tnum = tbuf[0] << 24 | tbuf[1] << 16 | tbuf[2] << 8 | tbuf[3];
52 tnum = tnum >> lcutbit;
60 void getStr(char *tostr, unsigned char *byte, int *pbit, int len) {
62 int pbyte = *pbit / 8;
63 unsigned char *fbyte = byte + pbyte;
65 memset(str, 0, sizeof(char) * MAXSECLEN);
66 memcpy(str, fbyte, len);
70 AribToString(tostr, str, len);
76 int parseOTHERdesc(unsigned char *data) {
79 int descriptor_length;
81 descriptor_tag = getBit(data, &boff, 8);
82 descriptor_length = getBit(data, &boff, 8);
84 /* printf("other desc_tag:0x%x\n", descriptor_tag); */
86 return descriptor_length + 2;
89 void* allocCopy(void* src, int *boff, size_t size) {
91 if ( size == 0 ) return NULL;
94 memcpy(mem, src + *boff / 8, size);
99 time_t parseMJD( unsigned char *data ) {
100 int tnum, year, mon, mday;
103 tnum = (data[0] & 0xFF) << 8 | (data[1] & 0xFF);
104 year = (tnum - 15078.2) / 365.25;
105 mon = ((tnum - 14956.1) - (int)(year * 365.25)) / 30.6001;
106 mday = (tnum - 14956) - (int)(year * 365.25) - (int)(mon * 30.6001);
108 if(mon == 14 || mon == 15) {
115 memset( &MJD, 0, sizeof(MJD) );
117 MJD.tm_mon = mon - 1;
120 MJD.tm_hour = BCD(data[2]);
121 MJD.tm_min = BCD(data[3]);
122 MJD.tm_sec = BCD(data[4]);
123 return mktime( &MJD );