summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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];