| 1 |
#include <stdio.h> |
|---|
| 2 |
#include <stdlib.h> |
|---|
| 3 |
#include <string.h> |
|---|
| 4 |
|
|---|
| 5 |
#include "aribstr.h" |
|---|
| 6 |
#include "util.h" |
|---|
| 7 |
|
|---|
| 8 |
int strrep(char *buf, char *mae, char *ato) |
|---|
| 9 |
{ |
|---|
| 10 |
char *mitsuke, *findpos; |
|---|
| 11 |
size_t maelen, atolen; |
|---|
| 12 |
int shift; |
|---|
| 13 |
|
|---|
| 14 |
findpos = buf; |
|---|
| 15 |
maelen = strlen(mae); |
|---|
| 16 |
atolen = strlen(ato); |
|---|
| 17 |
shift = (int)(strlen(ato)-strlen(mae)); |
|---|
| 18 |
|
|---|
| 19 |
if (maelen == 0 || strstr(findpos, mae) == NULL) return 0; |
|---|
| 20 |
while ((mitsuke = strstr(findpos, mae)) != NULL) { |
|---|
| 21 |
if (shift > 0) { |
|---|
| 22 |
memmove(mitsuke + shift, mitsuke, strlen(mitsuke) + 1); |
|---|
| 23 |
} else if (shift < 0) { |
|---|
| 24 |
memmove(mitsuke, mitsuke - shift, strlen(mitsuke) + shift + 1); |
|---|
| 25 |
} |
|---|
| 26 |
memmove(mitsuke, ato, atolen); |
|---|
| 27 |
findpos = mitsuke + atolen; |
|---|
| 28 |
} |
|---|
| 29 |
return 1; |
|---|
| 30 |
} |
|---|
| 31 |
|
|---|
| 32 |
int getBit(unsigned char *byte, int *pbit, int gbit) { |
|---|
| 33 |
int pbyte = *pbit / 8; |
|---|
| 34 |
unsigned char *fbyte = byte + pbyte; |
|---|
| 35 |
|
|---|
| 36 |
int cutbit = *pbit - (pbyte * 8); |
|---|
| 37 |
int lcutbit = 32 - (cutbit + gbit); |
|---|
| 38 |
|
|---|
| 39 |
unsigned char tbuf[4]; |
|---|
| 40 |
unsigned int tnum; |
|---|
| 41 |
|
|---|
| 42 |
memcpy(tbuf, fbyte, sizeof(unsigned char) * 4); |
|---|
| 43 |
|
|---|
| 44 |
|
|---|
| 45 |
tbuf[0] = tbuf[0] << cutbit; |
|---|
| 46 |
tbuf[0] = tbuf[0] >> cutbit; |
|---|
| 47 |
|
|---|
| 48 |
|
|---|
| 49 |
tnum = tbuf[0] << 24 | tbuf[1] << 16 | tbuf[2] << 8 | tbuf[3]; |
|---|
| 50 |
|
|---|
| 51 |
|
|---|
| 52 |
tnum = tnum >> lcutbit; |
|---|
| 53 |
|
|---|
| 54 |
*pbit += gbit; |
|---|
| 55 |
|
|---|
| 56 |
return tnum; |
|---|
| 57 |
|
|---|
| 58 |
} |
|---|
| 59 |
|
|---|
| 60 |
void getStr(char *tostr, unsigned char *byte, int *pbit, int len) { |
|---|
| 61 |
char str[MAXSECLEN]; |
|---|
| 62 |
int pbyte = *pbit / 8; |
|---|
| 63 |
unsigned char *fbyte = byte + pbyte; |
|---|
| 64 |
|
|---|
| 65 |
memset(str, 0, sizeof(char) * MAXSECLEN); |
|---|
| 66 |
memcpy(str, fbyte, len); |
|---|
| 67 |
|
|---|
| 68 |
*pbit += (len * 8); |
|---|
| 69 |
|
|---|
| 70 |
AribToString(tostr, str, len); |
|---|
| 71 |
|
|---|
| 72 |
return; |
|---|
| 73 |
|
|---|
| 74 |
} |
|---|
| 75 |
|
|---|
| 76 |
int parseOTHERdesc(unsigned char *data) { |
|---|
| 77 |
int boff = 0; |
|---|
| 78 |
int descriptor_tag; |
|---|
| 79 |
int descriptor_length; |
|---|
| 80 |
|
|---|
| 81 |
descriptor_tag = getBit(data, &boff, 8); |
|---|
| 82 |
descriptor_length = getBit(data, &boff, 8); |
|---|
| 83 |
|
|---|
| 84 |
|
|---|
| 85 |
|
|---|
| 86 |
return descriptor_length + 2; |
|---|
| 87 |
} |
|---|