| verzia 1.13, 2002/10/14 19:55:12 |
verzia 1.14, 2002/10/16 21:07:43 |
| Riadok 26 int strlenc(char *buffer, char c, char t |
|
| Riadok 26 int strlenc(char *buffer, char c, char t |
|
| */ |
*/ |
| int strlento(char *buffer, char to) |
int strlento(char *buffer, char to) |
| { |
{ |
| int i = 0; |
char *old = buffer; |
| while (*buffer && *buffer != to) { |
while (*buffer && *buffer != to) |
| i++; |
|
| buffer++; |
buffer++; |
| } |
return buffer - old; |
| return i; |
|
| } |
} |
| |
|
| /* convert hex to bin |
/* convert hex to bin |
| Riadok 87 char *name(char *buffer) |
|
| Riadok 85 char *name(char *buffer) |
|
| |
|
| char **array(char *buffer) |
char **array(char *buffer) |
| { |
{ |
| char **ret, *last; |
char **ret = NULL, *last; |
| int index = 1, end = 1; |
static char delim[4] = { '[','\0',']','\0' }; |
| ret = (char **) xmalloc(sizeof(char **)); |
int index = 0,len; |
| *ret = (char *) xmalloc(2 * sizeof(char)); |
last = buffer + 1; |
| strncpy(*ret, "[\0", 2 * sizeof(char)); |
do { |
| buffer++; |
ret = (char **) realloc(ret, (index + 1) * sizeof(char**)); |
| if (*buffer == ' ') |
if(*buffer == '[' || *buffer == ']') { |
| buffer++; |
if(*buffer == '[') |
| last = buffer; |
ret[index] = &delim[0]; |
| while (1) { |
else |
| if (*buffer == '[') |
ret[index] = &delim[2]; |
| end++; |
buffer++; |
| if (*buffer == ']') { |
index++; |
| end--; |
continue; |
| if (!end) |
|
| break; |
|
| } |
} |
| while (*buffer != ' ') |
while (*buffer != ' ' && *buffer != ']' && *buffer != '\n') |
| buffer++; |
buffer++; |
| ret = (char **) resize(ret, (index + 1) * sizeof(char **)); |
len = buffer - last; |
| ret[index] = (char *) xmalloc(buffer - last); |
ret[index] = (char *) xcalloc(len + 1,sizeof(char)); |
| strncpy(ret[index], last, buffer - last); |
strncpy(ret[index], last, len); |
| ret[index][buffer - last] = '\0'; |
index++; |
| last = ++buffer; |
if(*buffer != ']') |
| } |
last = ++buffer; |
| |
else |
| |
last = buffer; |
| |
} while (*buffer != '\n'); |
| return ret; |
return ret; |
| } |
} |
| |
|
| /* parse arrays |
|
| char **array(char *buffer) |
|
| { |
|
| char **ret; |
|
| int len, index, end; |
|
| if (*buffer != '[') |
|
| return NULL; |
|
| ret = (char **) xmalloc(1); |
|
| ret[0] = (char *) xmalloc(2); |
|
| strncpy(ret[0],"[\0",2); |
|
| if(*(buffer + 1) == ' ') |
|
| buffer += 2; |
|
| else |
|
| buffer++; |
|
| end = index = 1; |
|
| do { |
|
| if (*buffer == ']') |
|
| end--; |
|
| if (*buffer == '[') |
|
| end++; |
|
| ret = (char **) resize(et,index + 1); |
|
| len = strlento(buffer, ' '); |
|
| ret[index] = (char *) xmalloc(len + 1); |
|
| strncpy(ret[index], buffer, len); |
|
| ret[index][len] = '\0'; |
|
| buffer += len + 1; |
|
| index++; |
|
| } while (end > 0); |
|
| return ret; |
|
| }*/ |
|
| |
|
| #define BUFLEN 255 |
#define BUFLEN 255 |
| void read_obj(long offset) |
void read_obj(long offset) |
| Riadok 157 void read_obj(long offset) |
|
| Riadok 126 void read_obj(long offset) |
|
| fget(buffer, BUFLEN, fp); |
fget(buffer, BUFLEN, fp); |
| sscanf(buffer, "%d ", &obj_num); |
sscanf(buffer, "%d ", &obj_num); |
| fget(buffer, BUFLEN, fp); |
fget(buffer, BUFLEN, fp); |
| |
if(buffer[0] == '<' && buffer[1] == '<') |
| |
fget(buffer,BUFLEN,fp); |
| while (!strstr(buffer, "endobj")) { |
while (!strstr(buffer, "endobj")) { |
| size += strlen(buffer) + 1; |
size += strlen(buffer) + 1; |
| obj->unparsed = realloc(obj->unparsed, size); |
obj->unparsed = realloc(obj->unparsed, size); |
| Riadok 167 void read_obj(long offset) |
|
| Riadok 138 void read_obj(long offset) |
|
| return; |
return; |
| } |
} |
| |
|
| /* obj->type = UNKNOWN; |
|
| obj->obj = NULL; |
|
| if(!strstr(&buffer[0],"<<")) { |
|
| obj->type = NOTYPE; |
|
| obj->obj = fill_data(); |
|
| } |
|
| while (buffer[0] != '>' && buffer[1] != '>' |
|
| && obj->type == UNKNOWN) { |
|
| if (!strncmp(&buffer[0], "/Type", 5)) { |
|
| if (!strncmp(&buffer[7], "Page", 4)) { |
|
| obj->type = PAGE; |
|
| } |
|
| if (!strncmp(&buffer[7], "Pages", 5)) { |
|
| obj->type = PAGES; |
|
| } |
|
| if (!strncmp(&buffer[7], "Catalog", 7)) { |
|
| obj->type = CATALOG; |
|
| } |
|
| if (!strncmp(&buffer[7], "Encoding", 8)) { |
|
| obj->type = ENCODING; |
|
| } |
|
| if (!strncmp(&buffer[7], "XObject", 7)) { |
|
| obj->type = XOBJECT; |
|
| } |
|
| } |
|
| if (!strncmp(&buffer[0], "/Font", 5)) { |
|
| obj->type = FONT; |
|
| } |
|
| if (!strncmp(&buffer[0], "stream", 7)) { |
|
| obj->type = CONTENT; |
|
| } |
|
| fget(&buffer[0], BUFLEN, fp); |
|
| }*/ |
|
| |
|
| /* add object to object structure */ |
/* add object to object structure */ |
| void add_obj(char *s) |
void add_obj(char *s) |
| { |
{ |
| Riadok 234 long get_startxref(void) |
|
| Riadok 171 long get_startxref(void) |
|
| |
|
| void probe_ptree(int num) |
void probe_ptree(int num) |
| { |
{ |
| char *p, **kids; |
char *p, **kids, **old; |
| p = strstr(object[num]->unparsed, "/Page"); |
p = strstr(object[num]->unparsed, "/Page"); |
| if (!p) { |
if (!p) { |
| /* error */ |
/* error */ |
| return; |
return; |
| } |
} |
| if (*(p + 5) == 's') |
if (p[5] == 's') |
| object[num]->type = PAGES; |
object[num]->type = PAGES; |
| else { |
else { |
| page_tree[current_page] = num; |
page_tree[current_page] = num; |
| Riadok 252 void probe_ptree(int num) |
|
| Riadok 189 void probe_ptree(int num) |
|
| /* error */ |
/* error */ |
| return; |
return; |
| } |
} |
| kids = array(p + 6); |
old = kids = array(&p[6]); |
| for (kids++; **kids != ']'; kids += 2) |
for (kids++; **kids != ']'; kids += 3) { |
| probe_ptree(atoi(*kids)); |
probe_ptree(atoi(*kids)); |
| |
free(kids[0]); |
| |
free(kids[1]); |
| |
free(kids[2]); |
| |
} |
| |
free(old); |
| return; |
return; |
| } |
} |
| |
|
| Riadok 266 void xref(void) |
|
| Riadok 208 void xref(void) |
|
| offset = get_startxref(); |
offset = get_startxref(); |
| fseek(fp, offset, SEEK_SET); |
fseek(fp, offset, SEEK_SET); |
| fget(xref, XREFLINE, fp); |
fget(xref, XREFLINE, fp); |
| if (strstr(xref, "xref") == NULL) { |
if (!strstr(xref, "xref")) { |
| /* error */ |
/* error */ |
| return; |
return; |
| } |
} |
| object = (struct object **) xmalloc(sizeof(struct object *)); |
object = NULL; |
| obj_count = 1; |
obj_count = 0; |
| { |
{ |
| int entry[2]; |
int entry[2]; |
| do { |
do { |
| Riadok 280 void xref(void) |
|
| Riadok 222 void xref(void) |
|
| if (entry[0] + entry[1] > obj_count) { |
if (entry[0] + entry[1] > obj_count) { |
| object = (struct object **) |
object = (struct object **) |
| realloc(object, |
realloc(object, |
| entry[0] + entry[1] + 1); |
entry[0] + entry[1]); |
| obj_count = entry[0] + entry[1]; |
obj_count = entry[0] + entry[1]; |
| } |
} |
| if (!entry[0]) |
if (!entry[0]) |
| fseek(fp, 20, SEEK_CUR); |
fseek(fp, XREFLINE, SEEK_CUR); |
| fget(xref, XREFLINE, fp); |
fget(xref, XREFLINE, fp); |
| while (strncmp(xref, "trailer", 7)) { |
while (strncmp(xref, "trailer", 7)) { |
| add_obj(&xref[0]); |
add_obj(&xref[0]); |