From 32d1ab2ba49352348138296ad130f9c0f4e3ecbf Mon Sep 17 00:00:00 2001 From: Michiel Broek Date: Fri, 2 Mar 2007 21:28:28 +0000 Subject: [PATCH] Allfiles and newfiles list extended with UTF-8 encoded files --- ChangeLog | 5 ++ mbutils/mball.c | 155 +++++++++++++++++++++++++++++++----------------- mbutils/mball.h | 6 +- 3 files changed, 107 insertions(+), 59 deletions(-) diff --git a/ChangeLog b/ChangeLog index 93a4c5a2..6300e54e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -50,6 +50,11 @@ v0.91.5 18-Feb-2007 Reports will be converted to the selected charset. Origin characterset is CP437 for now. + mball: + Now also creates allfiles.utf and newfiles.utf with UTF-8 + encoded text. Noth new files will also be added to the zip + archives. + mbnntp: Reading news outputs UTF-8 coded articles. TODO: test posting and fix if needed. diff --git a/mbutils/mball.c b/mbutils/mball.c index 63518dd5..3ea805ec 100644 --- a/mbutils/mball.c +++ b/mbutils/mball.c @@ -4,7 +4,7 @@ * Purpose ...............: Creates allfiles listings * ***************************************************************************** - * Copyright (C) 1997-2005 + * Copyright (C) 1997-2007 * * Michiel Broek FIDO: 2:280/2802 * Beekmansbos 10 @@ -208,9 +208,9 @@ int main(int argc, char **argv) -void MidLine(char *txt, FILE *fp, int doit) +void MidLine(char *txt, FILE *fp, FILE *up, int doit) { - char temp[81]; + char temp[256]; int x, y, z; if (!doit) @@ -219,58 +219,62 @@ void MidLine(char *txt, FILE *fp, int doit) z = strlen(txt); x = 77 - z; x /= 2; - strcpy(temp, ""); + strcpy(temp, "\xB3"); for (y = 0; y < x; y++) strcat(temp, " "); - strcat(temp, txt); - z = strlen(temp); - x = 77 - z; + strncat(temp, txt, 255); - for (y = 0; y < x; y++) - strcat(temp, " "); + for (y = strlen(temp); y < 78; y++) + strncat(temp, " ", 255); - fprintf(fp, "%c", 179); - fprintf(fp, "%s", temp); - fprintf(fp, "%c\r\n", 179); + strncat(temp, "\xB3\r\n", 255); + fprintf(fp, temp); + fprintf(up, chartran(temp)); } -void TopBox(FILE *fp, int doit) +void TopBox(FILE *fp, FILE *up, int doit) { - int y; + int y; + char temp[256]; if (!doit) return; - fprintf(fp, "\r\n%c", 213); + strcpy(temp, "\r\n\xDA"); for(y = 0; y < 77; y++) - fprintf(fp, "%c", 205); - fprintf(fp, "%c\r\n", 184); + strncat(temp, "\xC4", 255); + strncat(temp, "\xBF\r\n", 255); + fprintf(fp, temp); + fprintf(up, chartran(temp)); } -void BotBox(FILE *fp, int doit) +void BotBox(FILE *fp, FILE *up, int doit) { - int y; + int y; + char temp[256]; if (!doit) return; - fprintf(fp, "%c", 212); + strcpy(temp, "\xC0"); for (y = 0; y < 77; y++) - fprintf(fp, "%c", 205); - fprintf(fp, "%c\r\n\r\n", 190); + strncat(temp, "\xC4", 255); + strncat(temp, "\xD9\r\n\r\n", 255); + fprintf(fp, temp); + fprintf(up, chartran(temp)); } void Masterlist() { - FILE *fp, *np, *pAreas, *pHeader; + FILE *fp, *np, *fu, *nu, *pAreas, *pHeader; int AreaNr = 0, z, x = 0, New; unsigned int AllFiles = 0, AllKBytes = 0, NewFiles = 0, NewKBytes = 0; unsigned int AllAreaFiles, AllAreaBytes, popdown, down, NewAreaFiles, NewAreaBytes; @@ -302,15 +306,30 @@ void Masterlist() fclose(fp); die(MBERR_GENERAL); } + if ((fu = fopen("allfiles.ump", "a+")) == NULL) { + WriteError("$Can't open allfiles.ump"); + fclose(fp); + fclose(np); + die(MBERR_GENERAL); + } + if ((nu = fopen("newfiles.ump", "a+")) == NULL) { + WriteError("$Can't open newfiles.ump"); + fclose(fp); + fclose(np); + fclose(fu); + die(MBERR_GENERAL); + } - TopBox(fp, TRUE); - TopBox(np, TRUE); + chartran_init((char *)"CP437", (char *)"UTF-8", 'B'); + + TopBox(fp, fu, TRUE); + TopBox(np, nu, TRUE); snprintf(temp, 81, "All available files at %s", CFG.bbs_name); - MidLine(temp, fp, TRUE); + MidLine(temp, fp, fu, TRUE); snprintf(temp, 81, "New available files since %d days at %s", CFG.newdays, CFG.bbs_name); - MidLine(temp, np, TRUE); - BotBox(fp, TRUE); - BotBox(np, TRUE); + MidLine(temp, np, nu, TRUE); + BotBox(fp, fu, TRUE); + BotBox(np, nu, TRUE); snprintf(temp, PATH_MAX, "%s/etc/header.txt", getenv("MBSE_ROOT")); if (( pHeader = fopen(temp, "r")) != NULL) { @@ -320,6 +339,8 @@ void Masterlist() Striplf(temp); fprintf(fp, "%s\r\n", temp); fprintf(np, "%s\r\n", temp); + fprintf(fu, "%s\r\n", chartran(temp)); + fprintf(nu, "%s\r\n", chartran(temp)); } fclose(pHeader); } @@ -370,28 +391,28 @@ void Masterlist() * If there are files to report do it. */ if (AllAreaFiles) { - TopBox(fp, TRUE); - TopBox(np, NewAreaFiles); + TopBox(fp, fu, TRUE); + TopBox(np, nu, NewAreaFiles); snprintf(temp, 81, "Area %d - %s", AreaNr, area.Name); - MidLine(temp, fp, TRUE); - MidLine(temp, np, NewAreaFiles); + MidLine(temp, fp, fu, TRUE); + MidLine(temp, np, nu, NewAreaFiles); snprintf(temp, 81, "File Requests allowed"); - MidLine(temp, fp, area.FileReq); - MidLine(temp, np, area.FileReq && NewAreaFiles); + MidLine(temp, fp, fu, area.FileReq); + MidLine(temp, np, nu, area.FileReq && NewAreaFiles); snprintf(temp, 81, "%d KBytes in %d files", AllAreaBytes / 1024, AllAreaFiles); - MidLine(temp, fp, TRUE); + MidLine(temp, fp, fu, TRUE); snprintf(temp, 81, "%d KBytes in %d files", NewAreaBytes / 1024, NewAreaFiles); - MidLine(temp, np, NewAreaFiles); + MidLine(temp, np, nu, NewAreaFiles); if (popdown) { snprintf(temp, 81, "Most popular file is %s", pop); - MidLine(temp, fp, TRUE); + MidLine(temp, fp, fu, TRUE); } - BotBox(fp, TRUE); - BotBox(np, NewAreaFiles); + BotBox(fp, fu, TRUE); + BotBox(np, nu, NewAreaFiles); fseek(fdb_area->fp, fdbhdr.hdrsize, SEEK_SET); while (fread(&fdb, fdbhdr.recsize, 1, fdb_area->fp) == 1) { @@ -401,26 +422,39 @@ void Masterlist() fdb.Name, (int)(fdb.Size / 1024), StrDateDMY(fdb.UploadDate), fdb.TimesDL, strlen(fdb.Uploader)?fdb.Uploader:""); fprintf(fp, "%s\r\n", temp); - if (New) + fprintf(fu, "%s\r\n", chartran(temp)); + if (New) { fprintf(np, "%s\r\n", temp); + fprintf(nu, "%s\r\n", chartran(temp)); + } + for (z = 0; z < 25; z++) { if (strlen(fdb.Desc[z])) { if ((fdb.Desc[z][0] == '@') && (fdb.Desc[z][1] == 'X')) { fprintf(fp, " %s\r\n",fdb.Desc[z]+4); - if (New) + fprintf(fu, " %s\r\n",chartran(fdb.Desc[z]+4)); + if (New) { fprintf(np, " %s\r\n",fdb.Desc[z]+4); + fprintf(nu, " %s\r\n",chartran(fdb.Desc[z]+4)); + } } else { fprintf(fp, " %s\r\n",fdb.Desc[z]); - if (New) + fprintf(fu, " %s\r\n",chartran(fdb.Desc[z])); + if (New) { fprintf(np, " %s\r\n",fdb.Desc[z]); + fprintf(nu, " %s\r\n",chartran(fdb.Desc[z])); + } } } } if (strlen(fdb.Magic)) { fprintf(fp, " Magic filerequest: %s\r\n", fdb.Magic); - if (New) + fprintf(fu, " Magic filerequest: %s\r\n", fdb.Magic); + if (New) { fprintf(np, " Magic filerequest: %s\r\n", fdb.Magic); + fprintf(nu, " Magic filerequest: %s\r\n", fdb.Magic); + } } } } @@ -432,22 +466,22 @@ void Masterlist() fclose(pAreas); - TopBox(fp, TRUE); - TopBox(np, TRUE); + TopBox(fp, fu, TRUE); + TopBox(np, nu, TRUE); snprintf(temp, 81, "Total %d files, %d KBytes", AllFiles, AllKBytes); - MidLine(temp, fp, TRUE); + MidLine(temp, fp, fu, TRUE); snprintf(temp, 81, "Total %d files, %d KBytes", NewFiles, NewKBytes); - MidLine(temp, np, TRUE); + MidLine(temp, np, nu, TRUE); - MidLine((char *)"", fp, TRUE); - MidLine((char *)"", np, TRUE); + MidLine((char *)"", fp, fu, TRUE); + MidLine((char *)"", np, nu, TRUE); snprintf(temp, 81, "Created by MBSE BBS v%s (%s-%s) at %s", VERSION, OsName(), OsCPU(), StrDateDMY(t_start)); - MidLine(temp, fp, TRUE); - MidLine(temp, np, TRUE); + MidLine(temp, fp, fu, TRUE); + MidLine(temp, np, nu, TRUE); - BotBox(fp, TRUE); - BotBox(np, TRUE); + BotBox(fp, fu, TRUE); + BotBox(np, nu, TRUE); snprintf(temp, PATH_MAX, "%s/etc/footer.txt", getenv("MBSE_ROOT")); if(( pHeader = fopen(temp, "r")) != NULL) { @@ -457,17 +491,26 @@ void Masterlist() Striplf(temp); fprintf(fp, "%s\r\n", temp); fprintf(np, "%s\r\n", temp); + fprintf(fu, "%s\r\n", chartran(temp)); + fprintf(nu, "%s\r\n", chartran(temp)); } fclose(pHeader); } fclose(fp); fclose(np); + fclose(fu); + fclose(nu); + chartran_close(); if ((rename("allfiles.tmp", "allfiles.txt")) == 0) unlink("allfiles.tmp"); if ((rename("newfiles.tmp", "newfiles.txt")) == 0) unlink("newfiles.tmp"); + if ((rename("allfiles.ump", "allfiles.utf")) == 0) + unlink("allfiles.ump"); + if ((rename("newfiles.ump", "newfiles.utf")) == 0) + unlink("newfiles.ump"); Syslog('+', "Allfiles: %ld, %ld MBytes", AllFiles, AllKBytes / 1024); Syslog('+', "Newfiles: %ld, %ld MBytes", NewFiles, NewKBytes / 1024); @@ -495,14 +538,14 @@ void MakeArc() Nopper(); if (!do_quiet) printf("Creating allfiles.zip\n"); - if (!execute_str(cmd, (char *)"allfiles.zip allfiles.txt", (char *)NULL, (char *)"/dev/null", + if (!execute_str(cmd, (char *)"allfiles.zip allfiles.txt allfiles.utf", (char *)NULL, (char *)"/dev/null", (char *)"/dev/null", (char *)"/dev/null") == 0) WriteError("Create allfiles.zip failed"); Nopper(); if (!do_quiet) printf("Creating newfiles.zip\n"); - if (!execute_str(cmd, (char *)"newfiles.zip newfiles.txt", (char *)NULL, (char *)"/dev/null", + if (!execute_str(cmd, (char *)"newfiles.zip newfiles.txt newfiles.utf", (char *)NULL, (char *)"/dev/null", (char *)"/dev/null", (char *)"/dev/null") == 0) WriteError("Create newfiles.zip failed"); diff --git a/mbutils/mball.h b/mbutils/mball.h index e8f05de4..7bef63de 100644 --- a/mbutils/mball.h +++ b/mbutils/mball.h @@ -6,9 +6,9 @@ void ProgName(void); void die(int); void Help(void); void MakeIndex(void); -void MidLine(char *, FILE *, int); -void TopBox(FILE *, int); -void BotBox(FILE *, int); +void MidLine(char *, FILE *, FILE *, int); +void TopBox(FILE *, FILE *, int); +void BotBox(FILE *, FILE *, int); void Masterlist(void); void MakeArc(void);