diff options
author | Nick White <arch@njw.me.uk> | 2007-04-30 08:34:43 +0000 |
---|---|---|
committer | Nick White <arch@njw.me.uk> | 2007-04-30 08:34:43 +0000 |
commit | 1edf37e3b0ad7b0556ba0902b5880044933ced66 (patch) | |
tree | 13447080a2c59a6345fa26301e365fcbb7b8ad4d | |
parent | 1f0a1fd57bd1dbddab4ad189a721fbe67f59ca3a (diff) |
Removed last of static issue array code, added sorting
Removed defined constants from issue.h previously used to
determine size of static arrays
Removed unused separate show media structure function
Remove clean media & clean issue functions
Added issue sorting code
git-archimport-id: getht@sv.gnu.org/getht--mainline--0.1--patch-22
-rw-r--r-- | getht.c | 81 | ||||
-rw-r--r-- | issue.h | 13 | ||||
-rw-r--r-- | issuemem.c | 73 | ||||
-rw-r--r-- | mediarev.c | 29 | ||||
-rw-r--r-- | mediaxml.c | 52 | ||||
-rw-r--r-- | tocxml.c | 9 |
6 files changed, 126 insertions, 131 deletions
@@ -36,10 +36,6 @@ int update_contents_files(); med * findnewestmed(iss ** issue, int no_of_issues); void show_iss_struct(iss ** issue, int no_of_issues); -void show_med_struct(med * issue); - -void clearmed(med * cur_media); -void cleariss(iss * cur_issue); void showusage(); @@ -297,20 +293,10 @@ int update_contents_files() if(save_file(NULL, MEDIA_TOC_URL, media_rev)) return 1; - med temp_med[MED_NO]; - - clearmed(temp_med); - /* BUG: for no good reason, this resets title[] too... - * Until we can find why, just get the title again */ - - cur_identifiers(issue_xml, isstitle, &date); - + med ** temp_med; int med_no = -1; - if(parsemediagz(media_rev, temp_med, &med_no)) - return 1; - /* BUG: this blanks title too... strange - * Until we can find why, just get the title again */ - cur_identifiers(issue_xml, isstitle, &date); + + temp_med = parsemediagz(media_rev, &med_no); unlink(media_rev); @@ -325,7 +311,7 @@ void show_iss_struct(iss ** issue, int no_of_issues) { int iss_no, sec_no, med_no, it_no; printf("%i Issues\n",no_of_issues); - for(iss_no=0;iss_no<no_of_issues;iss_no++) + for(iss_no=0;iss_no<=no_of_issues;iss_no++) { printf("-Issue %i-\n", (iss_no+1)); printf("Title:\t'%s'\n", issue[iss_no]->title); @@ -366,65 +352,6 @@ void show_iss_struct(iss ** issue, int no_of_issues) } } -void show_med_struct(med * cur_media) -/* Prints media information */ -{ - int tmp; - for(tmp=0;tmp<MED_NO;cur_media++,tmp++) - { - printf("--Media item--\n"); - - printf("uri: '%s'\n", cur_media->uri); - printf("title: '%s'\n", cur_media->title); - printf("comment: '%s'\n", cur_media->comment); - printf("preview_uri: '%s'\n", cur_media->preview_uri); - printf("size: '%i'\n", cur_media->size); - - printf("\n"); - } -} - -void cleariss(iss * cur_issue) -/* turns off exist flags for all issue structures */ -{ - int tmp; - for(tmp=0; tmp<MAX_ISS; cur_issue++,tmp++) - { - cur_issue->preview_uri[0] = '\0'; - cur_issue->title[0] = '\0'; - cur_issue->size = 0; - cur_issue->no_of_sections = -1; - cur_issue->section = NULL; - cur_issue->no_of_media = -1; - cur_issue->media = NULL; - //clearmed(cur_issue->media); - } -} - -void clearmed(med * cur_media) -/* clears the members of a media array */ -{ - cur_media->uri[0] = '\0'; - cur_media->title[0] = '\0'; - cur_media->comment[0] = '\0'; - cur_media->preview_uri[0] = '\0'; - cur_media->size = 0; -} - -void clearsec(sec * cur_section) -/* clears all members of section arrays */ -{ - int tmp; - for(tmp=0; tmp<=SEC_NO; cur_section++,tmp++) - { - cur_section->uri[0] = '\0'; - cur_section->title[0] = '\0'; - cur_section->size = 0; - cur_section->number = 0; - cur_section->no_of_items = 0; - } -} - int findnewestiss(iss ** issue, int no_of_issues) /* returns newest issue indice */ { @@ -19,10 +19,6 @@ * */ -#define SEC_NO 5 -#define ITEM_NO 30 -#define MED_NO 2 - /* all sizes are in bytes and are child-inclusive */ typedef struct @@ -73,6 +69,9 @@ typedef struct iss ** parsetoc(char *filepath, int * iss_no, int * latest); iss ** parsemedia(char * filepath, iss ** issue, int * no_of_issues); -iss ** assignnew_iss(int *no_of_issues, iss ** issue); -sec ** assignnew_sec(int *no_of_sections, sec ** section); -it ** assignnew_it(int * no_of_items, it ** item); +med ** parsemediagz(char * media_path, int * no_of_media); + +iss ** assignnew_iss(iss ** issue, int *no_of_issues); +sec ** assignnew_sec(sec ** section, int * no_of_sections); +it ** assignnew_it(it ** item, int * no_of_items); +med ** assignnew_med(med ** media, int * no_of_media); @@ -21,6 +21,7 @@ #include <stdio.h> #include <stdlib.h> +#include <string.h> #include "issue.h" @@ -32,7 +33,7 @@ void nogo_mem() exit(1); } -iss ** assignnew_iss(int *no_of_issues, iss ** issue) +iss ** assignnew_iss(iss ** issue, int *no_of_issues) /* assign memory for new issue */ { iss ** tmp = NULL; @@ -57,7 +58,7 @@ iss ** assignnew_iss(int *no_of_issues, iss ** issue) return tmp; } -sec ** assignnew_sec(int *no_of_sections, sec ** section) +sec ** assignnew_sec(sec ** section, int *no_of_sections) /* assign memory for new section */ { sec ** tmp = NULL; @@ -82,7 +83,7 @@ sec ** assignnew_sec(int *no_of_sections, sec ** section) return tmp; } -it ** assignnew_it(int * no_of_items, it ** item) +it ** assignnew_it(it ** item, int * no_of_items) { it ** tmp = NULL; @@ -105,3 +106,69 @@ it ** assignnew_it(int * no_of_items, it ** item) return tmp; } + +med ** assignnew_med(med ** media, int * no_of_media) +{ + med ** tmp = NULL; + + if(*no_of_media < 0) + { /* make **section a new array of section pointers */ + if( (tmp = malloc(sizeof(med *))) == NULL ) + nogo_mem(); + } + else + { /* add a new pointer to media pointer list */ + if( (tmp = realloc(media, sizeof(med *) + (((*no_of_media)+1) * sizeof(med *)))) == NULL ) + nogo_mem(); + } + + (*no_of_media)++; + + /* make new array item a pointer to issue */ + if( (tmp[*no_of_media] = malloc(sizeof(med))) == NULL ) + nogo_mem(); + + return tmp; +} + +int issuesort(iss ** issue, int no_of_issues) +/* does a basic bubble sort, by date, returning sorted issue */ +{ + int sortindex[no_of_issues]; + + int count1, count2, temp; + + for(count1 = 0; count1 <= no_of_issues; count1++) + sortindex[count1] = count1; + + /* find correct order of issues using a bubble sort */ + for(count1 = 0; count1 <=no_of_issues; count1++) + { + for(count2 = 0; count2 < no_of_issues; count2++) + { + if(issue[sortindex[count2]]->date.year < issue[sortindex[count2+1]]->date.year) + { + temp = sortindex[count2]; + sortindex[count2] = sortindex[count2+1]; + sortindex[count2+1] = temp; + } + else if((issue[sortindex[count2]]->date.year == issue[sortindex[count2+1]]->date.year) && + (issue[sortindex[count2]]->date.firstmonth < issue[sortindex[count2+1]]->date.firstmonth)) + { + temp = sortindex[count2]; + sortindex[count2] = sortindex[count2+1]; + sortindex[count2+1] = temp; + } + } + } + + iss * sortedissue[no_of_issues]; + + for(count1 = 0; count1 <= no_of_issues; count1++) + sortedissue[count1] = issue[sortindex[count1]]; + + for(count1 = 0; count1 <= no_of_issues; count1++) + issue[count1] = sortedissue[count1]; + + return 0; +} @@ -30,17 +30,21 @@ int smilurl(char * smilurl, med * cur_media); void getquote(char * input, char * label); void removeleadingspace(char * cur_line); -int parsemediagz(char * media_path, med * cur_media, int * no_of_media) +med ** parsemediagz(char * media_path, int * no_of_media) /* Parses gzipped adobe pagemaker files for media urls and metadata, - * filling cur_media with the information. */ + * filling media with the information. */ { char cur_line[STR_MAX]; gzFile mediagz; + med ** media = NULL; + strcpy(cur_line,""); /* reset cur_line */ mediagz = gzopen(media_path, "r"); + med * cur_media; + while(gzeof(mediagz)==0) { gzgets(mediagz, cur_line, STR_MAX); @@ -49,6 +53,20 @@ int parsemediagz(char * media_path, med * cur_media, int * no_of_media) if(!strcmp(cur_line,"on mouseUp")) { strcpy(cur_line,""); /* reset cur_line */ + + /* assign memory for the new media */ + media = assignnew_med(media, no_of_media); + + cur_media = media[*no_of_media]; + + /* setup media globals */ + cur_media->uri[0] = '\0'; + cur_media->title[0] = '\0'; + cur_media->comment[0] = '\0'; + cur_media->preview_uri[0] = '\0'; + cur_media->size = 0; + + /* process rev file */ while(strcmp(cur_line,"end mouseUp") && gzeof(mediagz)==0) { strcpy(cur_line,""); /* reset cur_line */ @@ -72,16 +90,11 @@ int parsemediagz(char * media_path, med * cur_media, int * no_of_media) getquote(cur_line,cur_media->comment); } } - *cur_media++; - (*no_of_media)++; } strcpy(cur_line,""); /* reset cur_line */ } - if(*no_of_media == -1) - return 1; - - return 0; + return media; } int smilurl(char * smilurl, med * cur_media) @@ -66,7 +66,7 @@ int media_accounted_for(char * filepath, issdates * date) return found; } -int addmediaissue(char * filepath, char * title, issdates * date, med * media, int med_no) +int addmediaissue(char * filepath, char * title, issdates * date, med ** media, int med_no) /* Appends data from media structures to xml file. */ { xmlDocPtr media_file; @@ -99,17 +99,18 @@ int addmediaissue(char * filepath, char * title, issdates * date, med * media, i xmlNewProp(curissue, "lastmonth", tmp); xmlNodePtr curitem; - int i; - for(i = 0; i <= med_no; i++) + + int count; + for(count = 0; count <= med_no; count++) { - curitem = xmlNewTextChild(curissue, NULL, "item", media[i].title); + curitem = xmlNewTextChild(curissue, NULL, "item", media[count]->title); - xmlNewProp(curitem, "uri", media[i].uri); + xmlNewProp(curitem, "uri", media[count]->uri); - if(media[i].comment) - xmlNewProp(curitem, "comment", media[i].comment); - if(media[i].preview_uri) - xmlNewProp(curitem, "preview_uri", media[i].preview_uri); + if(media[count]->comment) + xmlNewProp(curitem, "comment", media[count]->comment); + if(media[count]->preview_uri) + xmlNewProp(curitem, "preview_uri", media[count]->preview_uri); } xmlKeepBlanksDefault(0); @@ -198,8 +199,6 @@ iss ** parsemedia(char * filepath, iss ** issue, int * no_of_issues) issue[tmp]->no_of_media = -1; - med ** tmpmed = NULL; - itnode = node->xmlChildrenNode; while (itnode != NULL) @@ -207,30 +206,17 @@ iss ** parsemedia(char * filepath, iss ** issue, int * no_of_issues) if(!xmlStrcmp(itnode->name,(char *) "item")) { - /* assign memory for new media */ - if(cur_issue->no_of_media < 0) - { /* make **section a new array of section pointers */ - if( (tmpmed = malloc(sizeof(med *))) == NULL ) - nogo_mem(); - } - else - { /* add a new pointer to media pointer list */ - if( (tmpmed = realloc(cur_issue->media, sizeof(med *) + ((cur_issue->no_of_media+1) * sizeof(med *)))) == NULL ) - nogo_mem(); - } - - cur_issue->no_of_media++; - - /* make new array item a pointer to issue */ - if( (tmpmed[cur_issue->no_of_media] = malloc(sizeof(med))) == NULL ) - nogo_mem(); - - cur_issue->media = tmpmed; - /* memory for seoction all dealt with */ + /* assign memory for the new media */ + cur_issue->media = assignnew_med(cur_issue->media, &(cur_issue->no_of_media)); + /* setup media globals */ cur_media = cur_issue->media[cur_issue->no_of_media]; - clearmed(cur_media); + cur_media->uri[0] = '\0'; + cur_media->title[0] = '\0'; + cur_media->comment[0] = '\0'; + cur_media->preview_uri[0] = '\0'; + cur_media->size = 0; /* add media info to cur_media */ if(xmlGetProp(itnode, "uri")) @@ -254,5 +240,7 @@ iss ** parsemedia(char * filepath, iss ** issue, int * no_of_issues) xmlFreeDoc(media_file); + issuesort(issue, no_of_issues); + return issue; } @@ -50,7 +50,6 @@ iss ** parsetoc(char *filepath, int * iss_no, int * latest) no_of_issues = -1; iss ** issue = NULL; - //iss ** tmp = NULL; int year; @@ -66,7 +65,7 @@ iss ** parsetoc(char *filepath, int * iss_no, int * latest) if(!xmlStrncmp(cnode->name,(char *) "issue",5)) { /* assign memory for the new issue */ - issue = assignnew_iss(&no_of_issues, issue); + issue = assignnew_iss(issue, &no_of_issues); /* setup issue globals */ issue[no_of_issues]->no_of_media = -1; @@ -91,6 +90,8 @@ iss ** parsetoc(char *filepath, int * iss_no, int * latest) *iss_no = no_of_issues; + issuesort(issue, no_of_issues); + return issue; } @@ -111,7 +112,7 @@ int parseissue(xmlDocPtr file, xmlNodePtr node, iss * cur_issue, int * latest) { /* assign memory for new section */ cur_issue->section = - assignnew_sec(&(cur_issue->no_of_sections), cur_issue->section); + assignnew_sec(cur_issue->section, &(cur_issue->no_of_sections)); /* setup section globals */ cur_issue->section[cur_issue->no_of_sections]->no_of_items = -1; @@ -153,7 +154,7 @@ void parsesection(xmlDocPtr file, xmlNodePtr node, sec * cur_section) { /* assign memory for new item */ cur_section->item = - assignnew_it( &(cur_section->no_of_items), cur_section->item); + assignnew_it( cur_section->item, &(cur_section->no_of_items)); cur_item = cur_section->item[cur_section->no_of_items]; |