summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick White <arch@njw.me.uk>2007-04-30 08:34:43 +0000
committerNick White <arch@njw.me.uk>2007-04-30 08:34:43 +0000
commit1edf37e3b0ad7b0556ba0902b5880044933ced66 (patch)
tree13447080a2c59a6345fa26301e365fcbb7b8ad4d
parent1f0a1fd57bd1dbddab4ad189a721fbe67f59ca3a (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.c81
-rw-r--r--issue.h13
-rw-r--r--issuemem.c73
-rw-r--r--mediarev.c29
-rw-r--r--mediaxml.c52
-rw-r--r--tocxml.c9
6 files changed, 126 insertions, 131 deletions
diff --git a/getht.c b/getht.c
index 8eb9445..34fde2f 100644
--- a/getht.c
+++ b/getht.c
@@ -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 */
{
diff --git a/issue.h b/issue.h
index 6c25ef0..d224dcf 100644
--- a/issue.h
+++ b/issue.h
@@ -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);
diff --git a/issuemem.c b/issuemem.c
index f915de7..3a40d7e 100644
--- a/issuemem.c
+++ b/issuemem.c
@@ -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;
+}
diff --git a/mediarev.c b/mediarev.c
index 777e786..e8dd3e6 100644
--- a/mediarev.c
+++ b/mediarev.c
@@ -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)
diff --git a/mediaxml.c b/mediaxml.c
index a86386a..bcb2da1 100644
--- a/mediaxml.c
+++ b/mediaxml.c
@@ -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;
}
diff --git a/tocxml.c b/tocxml.c
index f351bc0..3740326 100644
--- a/tocxml.c
+++ b/tocxml.c
@@ -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];