3
Copyright (C) 1999-2000 Maxximum Software
5
This program is free software; you can redistribute it and/or modify
6
it under the terms of the GNU General Public License as published by
7
the Free Software Foundation; either version 2 of the License, or
8
(at your option) any later version.
10
This program is distributed in the hope that it will be useful,
11
but WITHOUT ANY WARRANTY; without even the implied warranty of
12
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
GNU General Public License for more details.
15
You should have received a copy of the GNU General Public License
16
along with this program; if not, write to the Free Software
17
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20
#include <sys/types.h>
27
#include "fileops-helper.h"
28
#include "functions.h"
29
#include "comiclist.h"
32
const gchar *CO19Ident = "CO19_File";
33
const gchar *GCO_0_1_Ident = "GCO_0_1__";
34
const gchar *GCO_0_3_Ident = "GCO_0_3__";
36
GList *LoadCO19(GList *ComicList, FILE *fp)
43
while((c=my_getc())!=EOF)
46
TempComic = Init_Comic();
48
while((c=my_getc())!='\x00')
50
TempComic->CTitle = g_string_append_c(TempComic->CTitle, c);
52
while((c=my_getc())!='\x00')
54
TempComic->CPublisher = g_string_append_c(TempComic->CPublisher, c);
56
while((c=my_getc())!='\x00')
58
TempComic->CType = g_string_append_c(TempComic->CType, c);
60
while((c=my_getc())!='\x00')
62
TempComic->CVolume = g_string_append_c(TempComic->CVolume, c);
64
while((c=my_getc())!='\x00')
66
TempComic->CGroup = g_string_append_c(TempComic->CGroup, c);
68
while((c=my_getc())!='\x00')
70
TempComic->Comment = g_string_append_c(TempComic->Comment, c);
72
while((c=my_getc())!='\x00')
74
TempComic->LinkFile = g_string_append_c(TempComic->LinkFile, c);
76
TempComic->IsLink = (TempComic->LinkFile->len>0);
78
/* Now load the Issues */
79
while((c=my_getc())!='\x00')
83
TempIssue = Init_Issue();
85
while((c=my_getc())!='\x01')
87
TempIssue->IssueNo = g_string_append_c(TempIssue->IssueNo, c);
89
while((c=my_getc())!='\x01')
92
TempString = g_string_new(NULL);
94
while((c=my_getc())!='\x02')
96
TempString = g_string_append_c(TempString, c);
98
TempIssue->Writer = g_list_append(TempIssue->Writer, TempString);
100
while((c=my_getc())!='\x01')
103
TempString = g_string_new(NULL);
105
while((c=my_getc())!='\x02')
107
TempString = g_string_append_c(TempString, c);
109
TempIssue->Penciller = g_list_append(TempIssue->Penciller, TempString);
111
while((c=my_getc())!='\x01')
114
TempString = g_string_new(NULL);
116
while((c=my_getc())!='\x02')
118
TempString = g_string_append_c(TempString, c);
120
TempIssue->Inker = g_list_append(TempIssue->Inker, TempString);
122
while((c=my_getc())!='\x01')
125
TempString = g_string_new(NULL);
127
while((c=my_getc())!='\x02')
129
TempString = g_string_append_c(TempString, c);
131
TempIssue->Title = g_list_append(TempIssue->Title, TempString);
133
while((c=my_getc())!='\x01')
135
TempIssue->Location = g_string_append_c(TempIssue->Location, c);
137
while((c=my_getc())!='\x01')
139
TempIssue->Price = g_string_append_c(TempIssue->Price, c);
141
while((c=my_getc())!='\x01')
143
TempIssue->CurrentPrice = g_string_append_c(TempIssue->CurrentPrice, c);
145
while((c=my_getc())!='\x01')
147
TempIssue->Image = g_string_append_c(TempIssue->Image, c);
150
TempString = g_string_new(NULL);
151
while((c=my_getc())!='\x01')
153
TempString = g_string_append_c(TempString, c);
155
if (strcmp(TempString->str, "Poor (P)")==0)
156
TempIssue->Condition = 0;
157
if (strcmp(TempString->str, "Fair (FR)")==0)
158
TempIssue->Condition = 1;
159
if (strcmp(TempString->str, "Good (G)")==0)
160
TempIssue->Condition = 2;
161
if (strcmp(TempString->str, "Very Good (VG)")==0)
162
TempIssue->Condition = 3;
163
if (strcmp(TempString->str, "Fine (F)")==0)
164
TempIssue->Condition = 4;
165
if (strcmp(TempString->str, "Fine-Very Fine (VFV)")==0)
166
TempIssue->Condition = 5;
167
if (strcmp(TempString->str, "Very Fine (VF)")==0)
168
TempIssue->Condition = 6;
169
if (strcmp(TempString->str, "Near Mint (NM)")==0)
170
TempIssue->Condition = 7;
171
if (strcmp(TempString->str, "Mint (M)")==0)
172
TempIssue->Condition = 8;
175
while((c=my_getc())!='\x01')
177
TempIssue->Comment = g_string_append_c(TempIssue->Comment, c);
179
while((c=my_getc())!='\x01')
182
TempIssue->Date = g_string_append_c(TempIssue->Date, c);
185
/* FIXME - doesn't import dates... */
188
/* Now the TIssue structure is filled - then insert into list */
189
TempComic->IssueNumbers = g_list_insert_sorted(TempComic->IssueNumbers, TempIssue,
190
CompareTIssue_IssueNo);
193
/* Now the TComic structure is filled - then insert into list */
194
ComicList = g_list_insert_sorted(ComicList, TempComic, CompareTComic_Title);
200
GList *LoadGCO_0_1(GList *ComicList, FILE *fp)
202
/* Read largest used UID and set it using SetUID() */
203
/* Read ComicList (remember to read the UIDs of the individual Comics and Issues, etc.) */
208
GString * TempString;
210
TempString = g_string_new(NULL);
211
while((c=my_getc())!='\x00')
213
TempString = g_string_append_c(TempString, c);
215
LargestUID = atof(TempString->str);
216
g_string_free(TempString, TRUE);
218
while((c=my_getc())!=EOF)
221
TempComic = Init_Comic();
223
while((c=my_getc())!='\x00')
225
TempComic->CTitle = g_string_append_c(TempComic->CTitle, c);
227
while((c=my_getc())!='\x00')
229
TempComic->CPublisher = g_string_append_c(TempComic->CPublisher, c);
231
while((c=my_getc())!='\x00')
233
TempComic->CType = g_string_append_c(TempComic->CType, c);
235
while((c=my_getc())!='\x00')
237
TempComic->CVolume = g_string_append_c(TempComic->CVolume, c);
239
while((c=my_getc())!='\x00')
241
TempComic->CGroup = g_string_append_c(TempComic->CGroup, c);
243
while((c=my_getc())!='\x00')
245
TempComic->Comment = g_string_append_c(TempComic->Comment, c);
247
while((c=my_getc())!='\x00')
249
TempComic->LinkFile = g_string_append_c(TempComic->LinkFile, c);
251
TempComic->IsLink = (TempComic->LinkFile->len>0);
252
TempString = g_string_new(NULL);
253
while((c=my_getc())!='\x00')
255
TempString = g_string_append_c(TempString, c);
257
TempComic->UID = atof(TempString->str);
258
g_string_free(TempString, TRUE);
260
/* Now load the Issues */
261
while((c=my_getc())!='\x00')
264
TempIssue = Init_Issue();
266
while((c=my_getc())!='\x01')
268
TempIssue->IssueNo = g_string_append_c(TempIssue->IssueNo, c);
270
while((c=my_getc())!='\x01')
273
TempString = g_string_new(NULL);
275
while((c=my_getc())!='\x02')
277
TempString = g_string_append_c(TempString, c);
279
TempIssue->Writer = g_list_append(TempIssue->Writer, TempString);
281
while((c=my_getc())!='\x01')
284
TempString = g_string_new(NULL);
286
while((c=my_getc())!='\x02')
288
TempString = g_string_append_c(TempString, c);
290
TempIssue->Penciller = g_list_append(TempIssue->Penciller, TempString);
292
while((c=my_getc())!='\x01')
295
TempString = g_string_new(NULL);
297
while((c=my_getc())!='\x02')
299
TempString = g_string_append_c(TempString, c);
301
TempIssue->Inker = g_list_append(TempIssue->Inker, TempString);
303
while((c=my_getc())!='\x01')
306
TempString = g_string_new(NULL);
308
while((c=my_getc())!='\x02')
310
TempString = g_string_append_c(TempString, c);
312
TempIssue->Title = g_list_append(TempIssue->Title, TempString);
314
while((c=my_getc())!='\x01')
316
TempIssue->Location = g_string_append_c(TempIssue->Location, c);
318
while((c=my_getc())!='\x01')
320
TempIssue->Price = g_string_append_c(TempIssue->Price, c);
322
while((c=my_getc())!='\x01')
324
TempIssue->CurrentPrice = g_string_append_c(TempIssue->CurrentPrice, c);
326
while((c=my_getc())!='\x01')
328
TempIssue->Image = g_string_append_c(TempIssue->Image, c);
330
TempString = g_string_new(NULL);
331
while((c=my_getc())!='\x01')
333
TempString = g_string_append_c(TempString, c);
335
TempIssue->Condition = atof(TempString->str);
336
g_string_free(TempString, TRUE);
337
while((c=my_getc())!='\x01')
339
TempIssue->Comment = g_string_append_c(TempIssue->Comment, c);
341
TempString = g_string_new(NULL);
342
while((c=my_getc())!='\x01')
344
TempString = g_string_append_c(TempString, c);
346
TempIssue->Date = atof(TempString->str);
347
g_string_free(TempString, TRUE);
348
TempString = g_string_new(NULL);
349
while((c=my_getc())!='\x01')
351
TempString = g_string_append_c(TempString, c);
353
TempIssue->UID = atof(TempString->str);
354
g_string_free(TempString, TRUE);
356
/* Now the TIssue structure is filled - then insert into list */
357
TempComic->IssueNumbers = g_list_insert_sorted(TempComic->IssueNumbers, TempIssue,
358
CompareTIssue_IssueNo);
360
/* Now the TComic structure is filled - then insert into list */
361
ComicList = g_list_insert_sorted(ComicList, TempComic, CompareTComic_Title);
368
GList *LoadGCO_0_3(GList *ComicList, FILE *fp)
370
/* Read largest used UID and set it using SetUID() */
371
/* Read ComicList (remember to read the UIDs of the individual Comics and Issues, etc.) */
376
GString * TempString;
378
TempString = g_string_new(NULL);
379
while((c=my_getc())!='\x00')
381
TempString = g_string_append_c(TempString, c);
383
LargestUID = atof(TempString->str);
384
g_string_free(TempString, TRUE);
386
while((c=my_getc())!=EOF)
389
TempComic = Init_Comic();
391
while((c=my_getc())!='\x00')
393
TempComic->CTitle = g_string_append_c(TempComic->CTitle, c);
395
while((c=my_getc())!='\x00')
397
TempComic->CPublisher = g_string_append_c(TempComic->CPublisher, c);
399
while((c=my_getc())!='\x00')
401
TempComic->CType = g_string_append_c(TempComic->CType, c);
403
while((c=my_getc())!='\x00')
405
TempComic->CVolume = g_string_append_c(TempComic->CVolume, c);
407
while((c=my_getc())!='\x00')
409
TempComic->CGroup = g_string_append_c(TempComic->CGroup, c);
411
while((c=my_getc())!='\x00')
413
TempComic->Comment = g_string_append_c(TempComic->Comment, c);
415
while((c=my_getc())!='\x00')
417
TempComic->LinkFile = g_string_append_c(TempComic->LinkFile, c);
419
TempComic->IsLink = (TempComic->LinkFile->len>0);
420
TempString = g_string_new(NULL);
421
while((c=my_getc())!='\x00')
423
TempString = g_string_append_c(TempString, c);
425
TempComic->UID = atof(TempString->str);
426
g_string_free(TempString, TRUE);
428
/* Now load the Issues */
429
while((c=my_getc())!='\x00')
432
TempIssue = Init_Issue();
434
while((c=my_getc())!='\x01')
436
TempIssue->IssueNo = g_string_append_c(TempIssue->IssueNo, c);
438
while((c=my_getc())!='\x01')
441
TempString = g_string_new(NULL);
443
while((c=my_getc())!='\x02')
445
TempString = g_string_append_c(TempString, c);
447
TempIssue->Writer = g_list_append(TempIssue->Writer, TempString);
449
while((c=my_getc())!='\x01')
452
TempString = g_string_new(NULL);
454
while((c=my_getc())!='\x02')
456
TempString = g_string_append_c(TempString, c);
458
TempIssue->Penciller = g_list_append(TempIssue->Penciller, TempString);
460
while((c=my_getc())!='\x01')
463
TempString = g_string_new(NULL);
465
while((c=my_getc())!='\x02')
467
TempString = g_string_append_c(TempString, c);
469
TempIssue->Inker = g_list_append(TempIssue->Inker, TempString);
471
while((c=my_getc())!='\x01')
474
TempString = g_string_new(NULL);
476
while((c=my_getc())!='\x02')
478
TempString = g_string_append_c(TempString, c);
480
TempIssue->Title = g_list_append(TempIssue->Title, TempString);
482
while((c=my_getc())!='\x01')
484
TempIssue->Location = g_string_append_c(TempIssue->Location, c);
486
while((c=my_getc())!='\x01')
488
TempIssue->Price = g_string_append_c(TempIssue->Price, c);
490
while((c=my_getc())!='\x01')
492
TempIssue->CurrentPrice = g_string_append_c(TempIssue->CurrentPrice, c);
494
while((c=my_getc())!='\x01')
496
TempIssue->PurchasePrice = g_string_append_c(TempIssue->PurchasePrice, c);
498
while((c=my_getc())!='\x01')
500
TempIssue->Image = g_string_append_c(TempIssue->Image, c);
502
TempString = g_string_new(NULL);
503
while((c=my_getc())!='\x01')
505
TempString = g_string_append_c(TempString, c);
507
TempIssue->Condition = atof(TempString->str);
508
g_string_free(TempString, TRUE);
509
while((c=my_getc())!='\x01')
511
TempIssue->Comment = g_string_append_c(TempIssue->Comment, c);
513
TempString = g_string_new(NULL);
514
while((c=my_getc())!='\x01')
516
TempString = g_string_append_c(TempString, c);
518
TempIssue->Date = atof(TempString->str);
519
g_string_free(TempString, TRUE);
520
TempString = g_string_new(NULL);
521
while((c=my_getc())!='\x01')
523
TempString = g_string_append_c(TempString, c);
525
TempIssue->UID = atof(TempString->str);
526
g_string_free(TempString, TRUE);
528
/* Now the TIssue structure is filled - then insert into list */
529
TempComic->IssueNumbers = g_list_insert_sorted(TempComic->IssueNumbers, TempIssue,
530
CompareTIssue_IssueNo);
532
/* Now the TComic structure is filled - then insert into list */
533
ComicList = g_list_insert_sorted(ComicList, TempComic, CompareTComic_Title);
540
GList *LoadFile(GList *ComicList, FILE *fp)
542
switch (FileCheck(fp))
545
return LoadCO19(ComicList, fp);
548
return LoadGCO_0_1(ComicList, fp);
551
return LoadGCO_0_3(ComicList, fp);
554
dprintf("File is not a recognized filetype...\n");
557
dprintf("Something unexpected happened...\n");
562
void SaveFile(GList *ComicList, FILE *fp)
564
/* Write GCO_0_3_Ident */
565
/* Write largest used UID */
566
/* Write ComicList (remember to save the UIDs of the individual Comics and Issues, etc.) */
567
int i, j, k, l, m, n;
570
GString * TempString;
573
my_puts(GCO_0_3_Ident, fp);
575
my_puts(itoa(GetUID()+1), fp);
578
j = g_list_length(ComicList);
581
/* Save the Comic info */
582
TempComic = (g_list_nth(ComicList,i))->data;
583
my_puts(TempComic->CTitle->str, fp);
585
my_puts(TempComic->CPublisher->str, fp);
587
my_puts(TempComic->CType->str, fp);
589
my_puts(TempComic->CVolume->str, fp);
591
my_puts(TempComic->CGroup->str, fp);
593
my_puts(TempComic->Comment->str, fp);
595
my_puts(TempComic->LinkFile->str, fp);
597
my_puts(itoa(TempComic->UID), fp);
600
/* Now save the Issues */
601
k = g_list_length(TempComic->IssueNumbers);
604
TempIssue = (g_list_nth(TempComic->IssueNumbers,l))->data;
605
my_puts(TempIssue->IssueNo->str, fp);
608
m = g_list_length(TempIssue->Writer);
611
TempString = (g_list_nth(TempIssue->Writer, n)->data);
612
my_puts(TempString->str, fp);
617
m = g_list_length(TempIssue->Penciller);
620
TempString = (g_list_nth(TempIssue->Penciller, n)->data);
621
my_puts(TempString->str, fp);
626
m = g_list_length(TempIssue->Inker);
629
TempString = (g_list_nth(TempIssue->Inker, n)->data);
630
my_puts(TempString->str, fp);
635
m = g_list_length(TempIssue->Title);
638
TempString = (g_list_nth(TempIssue->Title, n)->data);
639
my_puts(TempString->str, fp);
644
my_puts(TempIssue->Location->str, fp);
646
my_puts(TempIssue->Price->str, fp);
648
my_puts(TempIssue->CurrentPrice->str, fp);
650
my_puts(TempIssue->PurchasePrice->str, fp);
652
my_puts(TempIssue->Image->str, fp);
654
my_puts(itoa(TempIssue->Condition), fp);
656
my_puts(TempIssue->Comment->str, fp);
658
my_puts(itoa(TempIssue->Date), fp);
660
my_puts(itoa(TempIssue->UID), fp);
668
TFileType FileCheck(FILE *fp)
674
s = g_string_new(NULL);
677
if ((c=my_getc())==EOF)
678
g_print("Error...\n");
679
if (c!=0) /* Idents are surrounded by #0's */
680
s = g_string_append_c(s, (gchar)c);
683
if (strcmp(s->str, CO19Ident)==0)
685
if (strcmp(s->str, GCO_0_1_Ident)==0)
687
if (strcmp(s->str, GCO_0_3_Ident)==0)
693
int ExportToASCIIFile(GList *clist, GString *fname)
701
fp = fopen (fname->str, "w");
704
/* Unable to open file */
708
fprintf(fp, "%i comic title(s)\n\n\n\n", j=g_list_length(clist));
711
TempComic = (g_list_nth(clist,i))->data;
712
fprintf(fp, "%s", TempComic->CTitle->str);
713
if(TempComic->IsLink)
714
fprintf(fp, " (is a link to %s)\n", TempComic->LinkFile->str);
716
fprintf(fp, " (Vol. %s, %s, %s)\n", TempComic->CVolume->str,
717
TempComic->CType->str, TempComic->CPublisher->str);
718
fprintf(fp, "Comment: %s\n", TempComic->Comment->str);
719
fprintf(fp, "Comic UID: %i\n", TempComic->UID);
721
if(TempComic->IssueNumbers!=NULL)
723
fprintf(fp, "%i issue(s)\n", l=g_list_length(TempComic->IssueNumbers));
727
TempIssue = (g_list_nth(TempComic->IssueNumbers,k))->data;
729
fprintf(fp, " Issue #%s:\n",TempIssue->IssueNo->str);
731
fprintf(fp, " Writer(s)\n");
732
n=g_list_length(TempIssue->Writer);
735
String = g_list_nth(TempIssue->Writer, m)->data;
736
fprintf(fp, " %s\n", String->str);
739
fprintf(fp, " Penciller(s)\n");
740
n=g_list_length(TempIssue->Penciller);
743
String = g_list_nth(TempIssue->Penciller, m)->data;
744
fprintf(fp, " %s\n", String->str);
747
fprintf(fp, " Inker(s)\n");
748
n=g_list_length(TempIssue->Inker);
751
String = g_list_nth(TempIssue->Inker, m)->data;
752
fprintf(fp, " %s\n", String->str);
755
fprintf(fp, " StoryTitle(s)\n");
756
n=g_list_length(TempIssue->Title);
759
String = g_list_nth(TempIssue->Title, m)->data;
760
fprintf(fp, " %s\n", String->str);
763
fprintf(fp, " Location: %s\n", TempIssue->Location->str);
764
fprintf(fp, " CoverPrice: %s\n", TempIssue->Price->str);
765
fprintf(fp, " Current Price: %s\n", TempIssue->CurrentPrice->str);
766
fprintf(fp, " Purchase Price: %s\n", TempIssue->PurchasePrice->str);
767
fprintf(fp, " Image: %s\n", TempIssue->Image->str);
768
fprintf(fp, " Condition: ");
770
switch (TempIssue->Condition)
773
fprintf(fp, "Mint\n");
776
fprintf(fp, "NearMint\n");
779
fprintf(fp, "VeryFine\n");
782
fprintf(fp, "FineVeryFine\n");
785
fprintf(fp, "Fine\n");
788
fprintf(fp, "VeryGood\n");
791
fprintf(fp, "Good\n");
794
fprintf(fp, "Fair\n");
797
fprintf(fp, "Poor\n");
800
fprintf(fp, "Unknown\n");
804
fprintf(fp, " Comment: %s\n", TempIssue->Comment->str);
805
fprintf(fp, " Issue UID: %i\n", TempIssue->UID);
810
fprintf(fp, "no issues\n");
819
void write_html_preamble (FILE *fp, char *title)
821
fprintf (fp, "<html>");
822
fprintf (fp, "<title>");
824
fprintf (fp, "</title>");
825
fprintf (fp, "<body bgcolor=\"white\">");
828
void write_html_end (FILE *fp)
830
fprintf (fp, "</body>");
831
fprintf (fp, "</html>");
834
void write_html_h1_start (FILE *fp)
836
fprintf (fp, "<h1>");
839
void write_html_h1_end (FILE *fp)
841
fprintf (fp, "</h1>");
844
void write_html_h2_start (FILE *fp)
846
fprintf (fp, "<h2>");
849
void write_html_h2_end (FILE *fp)
851
fprintf (fp, "</h2>");
854
void write_html_h3_start (FILE *fp)
856
fprintf (fp, "<h3>");
859
void write_html_h3_end (FILE *fp)
861
fprintf (fp, "</h3>");
864
void write_html_br (FILE *fp)
866
fprintf (fp, "<br>");
869
void write_html_p (FILE *fp)
874
void write_html_link (FILE *fp, GString *linkdest, GString *linkname)
876
fprintf (fp, "<a href=\"%s\">%s</a>", linkdest->str, linkname->str);
879
void write_html_ul_start (FILE *fp)
881
fprintf (fp, "<ul>");
884
void write_html_ul_end (FILE *fp)
886
fprintf (fp, "</ul>");
889
void write_html_li_start (FILE *fp)
891
fprintf (fp, "<li>");
894
void write_html_li_end (FILE *fp)
896
fprintf (fp, "</li>");
899
void write_html_table_start (FILE *fp)
901
fprintf (fp, "<table cellpadding=\"2\" cellspacing=\"2\" border=\"1\" width=\"75%%\">");
902
fprintf (fp, "<tbody>");
905
void write_html_table_end (FILE *fp)
907
fprintf (fp, "</table>");
910
void write_html_td_start (FILE *fp)
912
fprintf (fp, "<td>");
915
void write_html_td_end (FILE *fp)
917
fprintf (fp, "</td>");
920
void write_html_tr_start (FILE *fp)
922
fprintf (fp, "<tr>");
925
void write_html_tr_end (FILE *fp)
927
fprintf (fp, "</tr>");
930
void write_html_center_start (FILE *fp)
932
fprintf (fp, "<center>");
935
void write_html_center_end (FILE *fp)
937
fprintf (fp, "</center>");
940
void write_html_image (FILE *fp, GString *imgfile, GString *alt)
942
if (strcmp (imgfile->str, "")!=0)
944
fprintf (fp, "<img src=\"%s\" alt=\"%s\">", imgfile->str, alt->str);
948
gchar *generate_subdirname (GString *dirname, TComic *TempComic)
953
returnme = g_string_new (NULL);
955
g_string_append (returnme, dirname->str);
957
/* sanitize string */
958
/* g_string_append (returnme, TempComic->CTitle->str); */
959
for (i=0; i<strlen(TempComic->CTitle->str); i++)
961
if (TempComic->CTitle->str[i] == ':' ||
962
TempComic->CTitle->str[i] == '/' ||
963
TempComic->CTitle->str[i] == '\\' ||
964
TempComic->CTitle->str[i] == ';' ||
965
TempComic->CTitle->str[i] == '?' ||
966
TempComic->CTitle->str[i] == '&' ||
967
TempComic->CTitle->str[i] == ' ')
969
g_string_append_c (returnme, '_');
973
g_string_append_c (returnme, TempComic->CTitle->str[i]);
976
g_string_append (returnme, "_");
977
g_string_append (returnme, itoa (TempComic->UID));
979
return returnme->str;
982
gchar *generate_comic_filename (GString *dirname, TComic *TempComic)
984
/* The filename is generated from the subdirname by adding .html */
987
returnme = g_string_new (generate_subdirname (dirname, TempComic));
989
g_string_append (returnme, ".html");
991
return returnme->str;
994
gchar *generate_issue_filename (GString *dirname, TIssue *TempIssue)
999
returnme = g_string_new (NULL);
1001
g_string_append (returnme, dirname->str);
1002
g_string_append (returnme, "/");
1004
/* sanitize string */
1005
/* g_string_append (returnme, TempIssue->IssueNo->Str); */
1006
for (i=0; i<strlen(TempIssue->IssueNo->str); i++)
1008
if (TempIssue->IssueNo->str[i] == ':' ||
1009
TempIssue->IssueNo->str[i] == '/' ||
1010
TempIssue->IssueNo->str[i] == '\\' ||
1011
TempIssue->IssueNo->str[i] == ';' ||
1012
TempIssue->IssueNo->str[i] == '?' ||
1013
TempIssue->IssueNo->str[i] == '&' ||
1014
TempIssue->IssueNo->str[i] == ' ')
1016
g_string_append_c (returnme, '_');
1020
g_string_append_c (returnme, TempIssue->IssueNo->str[i]);
1023
g_string_append (returnme, "_");
1024
g_string_append (returnme, itoa (TempIssue->UID));
1025
g_string_append (returnme, ".html");
1027
return returnme->str;
1030
int ExportToHTMLFile(GList *clist, GString *dirname)
1034
guint32 i,j,k,l,m,n;
1035
GString *String, *indexname, *fname, *dname;
1036
FILE *indexfp = NULL;
1040
indexname = g_string_new (dirname->str);
1041
g_string_append (indexname, "index.html");
1042
indexfp = fopen (indexname->str, "w");
1043
if (indexfp == NULL)
1045
/* Unable to open file */
1049
j=g_list_length(clist);
1051
write_html_preamble (indexfp, "My Comics");
1052
write_html_h1_start (indexfp);
1053
fprintf(indexfp, "%i comic title(s)\n\n\n\n", j);
1054
write_html_h1_end (indexfp);
1055
write_html_br (indexfp);
1056
fprintf (indexfp, "\n");
1059
fname = g_string_new (NULL);
1060
dname = g_string_new (NULL);
1064
TempComic = (g_list_nth(clist,i))->data;
1066
/* Construct unique filename */
1067
g_string_assign (fname, "");
1068
g_string_append (fname, generate_comic_filename (dirname, TempComic));
1071
cfp = fopen (fname->str, "w");
1074
/* Unable to open file */
1078
write_html_preamble (cfp, TempComic->CTitle->str);
1080
String = g_string_new (TempComic->CTitle->str);
1081
g_string_append (String, " (Vol. ");
1082
g_string_append (String, TempComic->CVolume->str);
1083
g_string_append (String, ")");
1084
write_html_link (indexfp, fname, String);
1085
write_html_br (indexfp);
1086
fprintf (indexfp, "\n");
1088
write_html_h1_start (cfp);
1089
fprintf(cfp, "%s", TempComic->CTitle->str);
1090
if(TempComic->IsLink)
1091
fprintf(cfp, " (is a link to %s)\n", TempComic->LinkFile->str);
1093
fprintf(cfp, " (Vol. %s, %s, %s)\n", TempComic->CVolume->str,
1094
TempComic->CType->str, TempComic->CPublisher->str);
1095
write_html_h1_end (cfp);
1096
write_html_br (cfp);
1097
fprintf(cfp, "Comment: %s\n", TempComic->Comment->str);
1100
if(TempComic->IssueNumbers!=NULL)
1102
write_html_h2_start (cfp);
1103
fprintf(cfp, "%i issue(s)\n", l=g_list_length(TempComic->IssueNumbers));
1104
write_html_h2_end (cfp);
1105
write_html_br (cfp);
1107
g_string_assign (dname, "");
1108
g_string_append (dname, generate_subdirname (dirname, TempComic));
1109
mkdir (dname->str, 0755); /* read/write/execute by user, read/execute by anyone else - umask permitting */
1113
TempIssue = (g_list_nth(TempComic->IssueNumbers,k))->data;
1115
g_string_assign (fname, "");
1116
g_string_append (fname, generate_issue_filename (dname, TempIssue));
1120
ifp = fopen (fname->str, "w");
1123
/* Unable to open file */
1128
String = g_string_new ("#");
1129
g_string_append (String, TempIssue->IssueNo->str);
1130
write_html_link (cfp, fname, String);
1131
write_html_br (cfp);
1132
fprintf (cfp, "\n");
1135
g_string_assign (String, TempComic->CTitle->str);
1136
g_string_append (String, " - #");
1137
g_string_append (String, TempIssue->IssueNo->str);
1138
write_html_preamble (ifp, String->str);
1140
write_html_center_start (ifp);
1141
write_html_h3_start (ifp);
1142
fprintf(ifp, " Issue #%s:\n", TempIssue->IssueNo->str);
1143
write_html_h3_end (ifp);
1145
write_html_image (ifp, TempIssue->Image, TempIssue->IssueNo);
1147
write_html_table_start (ifp);
1149
write_html_tr_start (ifp);
1150
write_html_td_start (ifp);
1151
fprintf(ifp, "Writer(s)");
1152
write_html_td_end (ifp);
1153
write_html_td_start (ifp);
1154
n=g_list_length(TempIssue->Writer);
1157
String = g_list_nth(TempIssue->Writer, m)->data;
1158
fprintf(ifp, " %s\n", String->str);
1159
write_html_br (ifp);
1161
write_html_td_end (ifp);
1162
write_html_tr_end (ifp);
1164
write_html_tr_start (ifp);
1165
write_html_td_start (ifp);
1166
fprintf(ifp, "Penciller(s)");
1167
write_html_td_end (ifp);
1168
write_html_td_start (ifp);
1169
n=g_list_length(TempIssue->Penciller);
1172
String = g_list_nth(TempIssue->Penciller, m)->data;
1173
fprintf(ifp, " %s\n", String->str);
1174
write_html_br (ifp);
1176
write_html_td_end (ifp);
1177
write_html_tr_end (ifp);
1179
write_html_tr_start (ifp);
1180
write_html_td_start (ifp);
1181
fprintf(ifp, "Inker(s)");
1182
write_html_td_end (ifp);
1183
write_html_td_start (ifp);
1184
n=g_list_length(TempIssue->Inker);
1187
String = g_list_nth(TempIssue->Inker, m)->data;
1188
fprintf(ifp, " %s\n", String->str);
1189
write_html_br (ifp);
1191
write_html_td_end (ifp);
1192
write_html_tr_end (ifp);
1194
write_html_tr_start (ifp);
1195
write_html_td_start (ifp);
1196
fprintf(ifp, " StoryTitle(s)");
1197
write_html_td_end (ifp);
1198
write_html_td_start (ifp);
1199
n=g_list_length(TempIssue->Title);
1202
String = g_list_nth(TempIssue->Title, m)->data;
1203
fprintf(ifp, " %s\n", String->str);
1204
write_html_br (ifp);
1206
write_html_td_end (ifp);
1207
write_html_tr_end (ifp);
1209
write_html_tr_start (ifp);
1210
write_html_td_start (ifp);
1211
fprintf(ifp, "Location");
1212
write_html_td_end (ifp);
1213
write_html_td_start (ifp);
1214
fprintf (ifp, "%s", TempIssue->Location->str);
1215
write_html_td_end (ifp);
1216
write_html_tr_end (ifp);
1219
write_html_tr_start (ifp);
1220
write_html_td_start (ifp);
1221
fprintf(ifp, "CoverPrice");
1222
write_html_td_end (ifp);
1223
write_html_td_start (ifp);
1224
fprintf(ifp, "%s", TempIssue->Price->str);
1225
write_html_td_end (ifp);
1226
write_html_tr_end (ifp);
1228
write_html_tr_start (ifp);
1229
write_html_td_start (ifp);
1230
fprintf(ifp, "Current Price");
1231
write_html_td_end (ifp);
1232
write_html_td_start (ifp);
1233
fprintf(ifp, "%s", TempIssue->CurrentPrice->str);
1234
write_html_td_end (ifp);
1235
write_html_tr_end (ifp);
1237
write_html_tr_start (ifp);
1238
write_html_td_start (ifp);
1239
fprintf(ifp, "Purchase Price");
1240
write_html_td_end (ifp);
1241
write_html_td_start (ifp);
1242
fprintf(ifp, "%s", TempIssue->PurchasePrice->str);
1243
write_html_td_end (ifp);
1244
write_html_tr_end (ifp);
1246
write_html_tr_start (ifp);
1247
write_html_td_start (ifp);
1248
fprintf(ifp, "Condition");
1249
write_html_td_end (ifp);
1250
write_html_td_start (ifp);
1252
switch (TempIssue->Condition)
1255
fprintf(ifp, "Mint\n");
1258
fprintf(ifp, "NearMint\n");
1261
fprintf(ifp, "VeryFine\n");
1264
fprintf(ifp, "FineVeryFine\n");
1267
fprintf(ifp, "Fine\n");
1270
fprintf(ifp, "VeryGood\n");
1273
fprintf(ifp, "Good\n");
1276
fprintf(ifp, "Fair\n");
1279
fprintf(ifp, "Poor\n");
1282
fprintf(ifp, "Unknown\n");
1285
write_html_td_end (ifp);
1286
write_html_tr_end (ifp);
1288
write_html_tr_start (ifp);
1289
write_html_td_start (ifp);
1290
fprintf(ifp, "Comment");
1291
write_html_td_end (ifp);
1292
write_html_td_start (ifp);
1293
fprintf(ifp, "%s", TempIssue->Comment->str);
1294
write_html_td_end (ifp);
1295
write_html_tr_end (ifp);
1297
write_html_table_end (ifp);
1298
write_html_center_end (ifp);
1300
write_html_end (ifp);
1306
write_html_ul_start (cfp);
1307
write_html_li_start (cfp);
1308
fprintf(ifp, "no issues\n");
1309
write_html_li_end (cfp);
1310
write_html_ul_end (cfp);
1312
write_html_end (cfp);
1316
write_html_end (indexfp);