425 lines
19 KiB
C
425 lines
19 KiB
C
/*****************************************************************************
|
|
*
|
|
* File ..................: charset.c
|
|
* Purpose ...............: Common utilities
|
|
* Last modification date : 09-Sep-2000
|
|
*
|
|
*****************************************************************************
|
|
* Copyright (C) 1997-2000
|
|
*
|
|
* Michiel Broek FIDO: 2:280/2802
|
|
* Beekmansbos 10
|
|
* 1971 BV IJmuiden
|
|
* the Netherlands
|
|
*
|
|
* This file is part of MBSE BBS.
|
|
*
|
|
* This BBS is free software; you can redistribute it and/or modify it
|
|
* under the terms of the GNU General Public License as published by the
|
|
* Free Software Foundation; either version 2, or (at your option) any
|
|
* later version.
|
|
*
|
|
* MBSE BBS is distributed in the hope that it will be useful, but
|
|
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with MBSE BBS; see the file COPYING. If not, write to the Free
|
|
* Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
|
|
*****************************************************************************/
|
|
|
|
#include "libs.h"
|
|
#include "structs.h"
|
|
#include "common.h"
|
|
#include "clcomm.h"
|
|
|
|
|
|
/* ### Created by P.Saratxaga on 7 Nov 1995 ###
|
|
* Functions for charset reading
|
|
* - bugfix for bad Content-Type lines lacking ";". By Marc Schaeffer.
|
|
*/
|
|
|
|
int defaultrfcchar = CHRS_DEFAULT_RFC;
|
|
int defaultftnchar = CHRS_DEFAULT_FTN;
|
|
int toftnchar = CHRS_NOTSET;
|
|
|
|
|
|
//#ifndef HAVE_STRCASESTR
|
|
//char *strcasestr(char *, char *);
|
|
//#endif
|
|
|
|
|
|
/* tailor getoutcode() and getincode() to show your transcodage preferences */
|
|
|
|
int getoutcode(int code) /* rfc -> FTN */
|
|
{
|
|
if ((code==CHRS_MACINTOSH) && (toftnchar!=CHRS_NOTSET))
|
|
return toftnchar;
|
|
else if (code==CHRS_MACINTOSH) return CHRS_ISO_8859_1;
|
|
else if ((toftnchar!=CHRS_NOTSET) && (code==defaultrfcchar))
|
|
return toftnchar;
|
|
else if (code==CHRS_UTF_7||code==CHRS_UTF_8) return CHRS_AUTODETECT;
|
|
else if (code==CHRS_ZW) return CHRS_GB;
|
|
else return code;
|
|
}
|
|
|
|
|
|
|
|
int getincode(int code) /* FTN -> rfc */
|
|
{
|
|
if (code==CHRS_CP437) return CHRS_ISO_8859_1;
|
|
else if (code==CHRS_CP850) return CHRS_ISO_8859_1;
|
|
else if (code==CHRS_CP852) return CHRS_ISO_8859_2;
|
|
else if (code==CHRS_CP862) return CHRS_ISO_8859_8;
|
|
else if (code==CHRS_CP866) return CHRS_KOI8_R;
|
|
else if (code==CHRS_CP895) return CHRS_ISO_8859_2;
|
|
else if (code==CHRS_EUC_JP) return CHRS_ISO_2022_JP;
|
|
/* else if (code==CHRS_EUC_KR) return CHRS_ISO_2022_KR; */
|
|
else if (code==CHRS_FIDOMAZOVIA) return CHRS_ISO_8859_2;
|
|
else if (code==CHRS_ISO_11) return CHRS_ISO_8859_1;
|
|
else if (code==CHRS_ISO_4) return CHRS_ISO_8859_1;
|
|
else if (code==CHRS_ISO_60) return CHRS_ISO_8859_1;
|
|
else if (code==CHRS_ISO_8859_1_QP) return CHRS_ISO_8859_1_QP;
|
|
else if (code==CHRS_MACINTOSH) return CHRS_ISO_8859_1;
|
|
else if (code==CHRS_MIK_CYR) return CHRS_ISO_8859_5;
|
|
else if (code==CHRS_SJIS) return CHRS_ISO_2022_JP;
|
|
else if (code==defaultftnchar) return CHRS_AUTODETECT;
|
|
else return code;
|
|
}
|
|
|
|
|
|
|
|
char *getcharset(int code)
|
|
{
|
|
char *charset;
|
|
|
|
if (code==CHRS_ASCII) charset=(char *)"us-ascii";
|
|
else if (code==CHRS_BIG5) charset=(char *)"x-CN-Big5";
|
|
else if (code==CHRS_CP424) charset=(char *)"x-cp424";
|
|
else if (code==CHRS_CP437) charset=(char *)"x-cp437";
|
|
else if (code==CHRS_CP850) charset=(char *)"x-cp850";
|
|
else if (code==CHRS_CP852) charset=(char *)"x-cp852";
|
|
else if (code==CHRS_CP862) charset=(char *)"x-cp862";
|
|
else if (code==CHRS_CP866) charset=(char *)"x-cp866";
|
|
else if (code==CHRS_CP895) charset=(char *)"x-cp895";
|
|
else if (code==CHRS_EUC_JP) charset=(char *)"EUC-jp";
|
|
else if (code==CHRS_EUC_KR) charset=(char *)"EUC-kr";
|
|
else if (code==CHRS_FIDOMAZOVIA) charset=(char *)"x-FIDOMAZOVIA";
|
|
else if (code==CHRS_GB) charset=(char *)"x-CN-GB";
|
|
else if (code==CHRS_HZ) charset=(char *)"x-HZ";
|
|
else if (code==CHRS_ISO_2022_CN) charset=(char *)"iso-2022-cn";
|
|
else if (code==CHRS_ISO_2022_JP) charset=(char *)"iso-2022-jp";
|
|
else if (code==CHRS_ISO_2022_KR) charset=(char *)"iso-2022-kr";
|
|
else if (code==CHRS_ISO_2022_TW) charset=(char *)"iso-2022-tw";
|
|
else if (code==CHRS_ISO_8859_1) charset=(char *)"iso-8859-1";
|
|
else if (code==CHRS_ISO_8859_1_QP) charset=(char *)"iso-8859-1";
|
|
else if (code==CHRS_ISO_8859_2) charset=(char *)"iso-8859-2";
|
|
else if (code==CHRS_ISO_8859_3) charset=(char *)"iso-8859-3";
|
|
else if (code==CHRS_ISO_8859_4) charset=(char *)"iso-8859-4";
|
|
else if (code==CHRS_ISO_8859_5) charset=(char *)"iso-8859-5";
|
|
else if (code==CHRS_ISO_8859_6) charset=(char *)"iso-8859-6";
|
|
else if (code==CHRS_ISO_8859_7) charset=(char *)"iso-8859-7";
|
|
else if (code==CHRS_ISO_8859_8) charset=(char *)"iso-8859-8";
|
|
else if (code==CHRS_ISO_8859_9) charset=(char *)"iso-8859-5";
|
|
else if (code==CHRS_ISO_8859_10) charset=(char *)"iso-8859-10";
|
|
else if (code==CHRS_ISO_8859_11) charset=(char *)"iso-8859-11";
|
|
else if (code==CHRS_ISO_8859_15) charset=(char *)"iso-8859-15";
|
|
else if (code==CHRS_KOI8_R) charset=(char *)"koi8-r";
|
|
else if (code==CHRS_KOI8_U) charset=(char *)"koi8-u";
|
|
else if (code==CHRS_MACINTOSH) charset=(char *)"x-mac-roman";
|
|
else if (code==CHRS_MIK_CYR) charset=(char *)"x-mik-cyr";
|
|
else if (code==CHRS_NEC) charset=(char *)"x-NEC-JIS";
|
|
else if (code==CHRS_SJIS) charset=(char *)"x-sjis";
|
|
else if (code==CHRS_UTF_7) charset=(char *)"utf-7";
|
|
else if (code==CHRS_UTF_8) charset=(char *)"utf-8";
|
|
else if (code==CHRS_VISCII_11) charset=(char *)"viscii";
|
|
else if (code==CHRS_ZW) charset=(char *)"x-zW";
|
|
else charset=(char *)"us-ascii"; /* mime default */
|
|
|
|
return charset;
|
|
}
|
|
|
|
|
|
|
|
int getcode(char *p)
|
|
{
|
|
int code;
|
|
|
|
while (*p && isspace(*p)) p++;
|
|
if (strncmp(p,"\"",1) == 0) p++;
|
|
/* if (strncasecmp(p,"us-ascii",8) == 0) code=CHRS_ASCII; */
|
|
/* most newsreaders/mail user agents are misconfigured and put "us-ascii" when
|
|
in fact they use the local charset. */
|
|
if (strncasecmp(p,"us-ascii",8) == 0) code=defaultrfcchar;
|
|
else if (strncasecmp(p,"CN-GB",5) == 0) code=CHRS_GB;
|
|
else if (strncasecmp(p,"CN-Big5",7) == 0) code=CHRS_BIG5;
|
|
else if (strncasecmp(p,"EUC-jp",6) == 0) code=CHRS_EUC_JP;
|
|
else if (strncasecmp(p,"EUC-kr",6) == 0) code=CHRS_EUC_KR;
|
|
else if (strncasecmp(p,"iso-2022-cn",11) == 0) code=CHRS_ISO_2022_CN;
|
|
else if (strncasecmp(p,"iso-2022-jp",11) == 0) code=CHRS_ISO_2022_JP;
|
|
else if (strncasecmp(p,"iso-2022-kr",11) == 0) code=CHRS_ISO_2022_KR;
|
|
else if (strncasecmp(p,"iso-2022-tw",11) == 0) code=CHRS_ISO_2022_TW;
|
|
else if (strncasecmp(p,"iso8859-1",9) == 0) code = CHRS_ISO_8859_1; /* erroneous iso8859-1 */
|
|
else if (strncasecmp(p,"iso-8859-10",11) == 0) code=CHRS_ISO_8859_10;
|
|
else if (strncasecmp(p,"iso-8859-11",11) == 0) code=CHRS_ISO_8859_11;
|
|
else if (strncasecmp(p,"iso-8859-15",11) == 0) code=CHRS_ISO_8859_15;
|
|
else if (strncasecmp(p,"iso-8859-1",10) == 0) code = CHRS_ISO_8859_1;
|
|
else if (strncasecmp(p,"iso-8859-2",10) == 0) code=CHRS_ISO_8859_2;
|
|
else if (strncasecmp(p,"iso-8859-3",10) == 0) code=CHRS_ISO_8859_3;
|
|
else if (strncasecmp(p,"iso-8859-4",10) == 0) code=CHRS_ISO_8859_4;
|
|
else if (strncasecmp(p,"iso-8859-5",10) == 0) code=CHRS_ISO_8859_5;
|
|
else if (strncasecmp(p,"iso-8859-6",10) == 0) code=CHRS_ISO_8859_6;
|
|
else if (strncasecmp(p,"iso-8859-7",10) == 0) code=CHRS_ISO_8859_7;
|
|
else if (strncasecmp(p,"iso-8859-8",10) == 0) code=CHRS_ISO_8859_8;
|
|
else if (strncasecmp(p,"iso-8859-9",10) == 0) code=CHRS_ISO_8859_9;
|
|
else if (strncasecmp(p,"koi8-r",6) == 0) code=CHRS_KOI8_R;
|
|
else if (strncasecmp(p,"koi8-u",6) == 0) code=CHRS_KOI8_U;
|
|
else if (strncasecmp(p,"macintosh",9) == 0) code=CHRS_MACINTOSH;
|
|
else if (strncasecmp(p,"Shift_JIS",9) == 0) code=CHRS_SJIS;
|
|
else if (strncasecmp(p,"utf-7",5) == 0) code=CHRS_UTF_7;
|
|
else if (strncasecmp(p,"utf-8",5) == 0) code=CHRS_UTF_8;
|
|
else if (strncasecmp(p,"viscii",6) == 0) code=CHRS_VISCII_11;
|
|
else if (strncasecmp(p,"x-cp424",7) == 0) code=CHRS_CP424;
|
|
else if (strncasecmp(p,"x-cp437",7) == 0) code=CHRS_CP437;
|
|
else if (strncasecmp(p,"x-cp850",7) == 0) code=CHRS_CP850;
|
|
else if (strncasecmp(p,"x-cp852",7) == 0) code=CHRS_CP852;
|
|
else if (strncasecmp(p,"x-cp862",7) == 0) code=CHRS_CP862;
|
|
else if (strncasecmp(p,"x-cp866",7) == 0) code=CHRS_CP866;
|
|
else if (strncasecmp(p,"x-cp895",7) == 0) code=CHRS_CP895;
|
|
else if (strncasecmp(p,"x-CN-GB",7) == 0) code=CHRS_GB;
|
|
else if (strncasecmp(p,"x-CN-Big5",9) == 0) code=CHRS_BIG5;
|
|
else if (strncasecmp(p,"x-EUC-jp",8) == 0) code=CHRS_EUC_JP;
|
|
else if (strncasecmp(p,"x-FIDOMAZ",9) == 0) code=CHRS_FIDOMAZOVIA;
|
|
else if (strncasecmp(p,"x-gb2312",8) == 0) code=CHRS_GB;
|
|
else if (strncasecmp(p,"x-HZ",4) == 0) code=CHRS_HZ;
|
|
else if (strncasecmp(p,"x-mac-roman",11) == 0) code=CHRS_MACINTOSH;
|
|
else if (strncasecmp(p,"x-MAZOVIA",9) == 0) code=CHRS_FIDOMAZOVIA;
|
|
else if (strncasecmp(p,"x-mik",5) == 0) code=CHRS_MIK_CYR;
|
|
else if (strncasecmp(p,"x-NEC-JIS",9) == 0) code=CHRS_NEC;
|
|
else if (strncasecmp(p,"x-Shift-JIS",11) == 0) code=CHRS_SJIS;
|
|
else if (strncasecmp(p,"x-sjis",6) == 0) code=CHRS_SJIS;
|
|
else if (strncasecmp(p,"x-tis620",8) == 0) code=CHRS_ISO_8859_11;
|
|
else if (strncasecmp(p,"x-x-big5",8) == 0) code=CHRS_BIG5;
|
|
else if (strncasecmp(p,"x-zW",4) == 0) code=CHRS_ZW;
|
|
/* only intended to be in Areas file. So we can try to found the
|
|
* from the values of chars in message itself */
|
|
else if (strncasecmp(p,"AUTODETECT",10) == 0) code=CHRS_AUTODETECT;
|
|
else if (strncasecmp(p,"default",7) == 0) code=CHRS_NOTSET;
|
|
else { code=CHRS_NOTSET; Syslog('+', "Unknown charset: %s",p); }
|
|
return code;
|
|
}
|
|
|
|
|
|
|
|
int readcharset(char *p)
|
|
{
|
|
int code;
|
|
|
|
if (!strchr(p, ';')) /* foolproof MSC96 */
|
|
return CHRS_NOTSET;
|
|
else if ((strcasestr(p,(char *)"text/plain")) && (strcasestr(p,(char *)"charset=")))
|
|
code=getcode(strcasestr(strchr(p,';'),(char *)"charset=")+8);
|
|
else if ((strcasestr(p,(char *)"text/html")) && (strcasestr(p,(char *)"charset=")))
|
|
code=getcode(strcasestr(strchr(p,';'),(char *)"charset=")+8);
|
|
else code=CHRS_NOTSET;
|
|
return code;
|
|
}
|
|
|
|
|
|
|
|
/* readchrs() is also used to read outcode in Areas file (if JE defined) */
|
|
|
|
int readchrs(char *p)
|
|
{
|
|
int code;
|
|
|
|
while (*p && isspace(*p)) p++;
|
|
if (strncasecmp(p,"8859",4) == 0) code=CHRS_ISO_8859_1;
|
|
/* for X-FTN-CODEPAGE: */
|
|
else if (strncasecmp(p,"437",3) == 0) code=CHRS_CP437;
|
|
else if (strncasecmp(p,"850",3) == 0) code=CHRS_CP850;
|
|
else if (strncasecmp(p,"Arabic",6) == 0) code=CHRS_ISO_8859_6;
|
|
else if (strncasecmp(p,"ASCII",5) == 0) code=CHRS_ASCII;
|
|
else if (strncasecmp(p,"BIG",3) == 0) code=CHRS_BIG5;
|
|
else if (strncasecmp(p,"CP 852",6) == 0) code=CHRS_CP852;
|
|
else if (strncasecmp(p,"CP424",5) == 0) code=CHRS_CP424;
|
|
else if (strncasecmp(p,"CP437",5) == 0) code=CHRS_CP437;
|
|
else if (strncasecmp(p,"CP850",5) == 0) code=CHRS_CP850;
|
|
else if (strncasecmp(p,"CP852",5) == 0) code=CHRS_CP852;
|
|
else if (strncasecmp(p,"CP862",5) == 0) code=CHRS_CP862;
|
|
else if (strncasecmp(p,"CP866",5) == 0) code=CHRS_CP866; /* ??? */
|
|
else if (strncasecmp(p,"CP895",5) == 0) code=CHRS_CP895;
|
|
else if (strncasecmp(p,"CP932",5) == 0) code=CHRS_SJIS;
|
|
else if (strncasecmp(p,"CP942",5) == 0) code=CHRS_SJIS;
|
|
else if (strncasecmp(p,"Cyrillic",8) == 0) code=CHRS_ISO_8859_5;
|
|
else if (strncasecmp(p,"EUC-JP",6) == 0) code=CHRS_EUC_JP;
|
|
else if (strncasecmp(p,"EUC-KR",6) == 0) code=CHRS_EUC_KR;
|
|
else if (strncasecmp(p,"EUC",3) == 0) code=CHRS_EUC_JP;
|
|
else if (strncasecmp(p,"FIDOMAZ",7) == 0) code=CHRS_FIDOMAZOVIA;
|
|
else if (strncasecmp(p,"GB",2) == 0) code=CHRS_GB;
|
|
else if (strncasecmp(p,"Greek",5) == 0) code=CHRS_ISO_8859_7;
|
|
else if (strncasecmp(p,"Hebrew",6) == 0) code=CHRS_ISO_8859_8;
|
|
else if (strncasecmp(p,"HZ",2) == 0) code=CHRS_HZ;
|
|
/* Some FTN programs are misconfigured and use "IBMPC 2" kludge
|
|
* for the local DOS charset, even if it is DOS cyrillic or other
|
|
* so we will assume defaultftnchar here
|
|
*/
|
|
else if (strncasecmp(p,"IBMPC",5) == 0) code=defaultftnchar;
|
|
else if (strncasecmp(p,"IBM",3) == 0) code=CHRS_CP437; /* "IBMPC 1" "IBMPC 2" "IBM CMP" */
|
|
else if (strncasecmp(p,"ISO-11",6) == 0) code=CHRS_ISO_11;
|
|
else if (strncasecmp(p,"ISO-2022-CN",11) == 0) code=CHRS_ISO_2022_CN;
|
|
else if (strncasecmp(p,"ISO-2022-KR",11) == 0) code=CHRS_ISO_2022_KR;
|
|
else if (strncasecmp(p,"ISO-2022-TW",11) == 0) code=CHRS_ISO_2022_TW;
|
|
else if (strncasecmp(p,"ISO-4",5) == 0) code=CHRS_ISO_4;
|
|
else if (strncasecmp(p,"ISO-60",6) == 0) code=CHRS_ISO_60;
|
|
else if (strncasecmp(p,"ISO-8859",8) == 0) code=CHRS_ISO_8859_1;
|
|
else if (strncasecmp(p,"JIS",3) == 0) code=CHRS_ISO_2022_JP; /* ??? - JE */
|
|
else if (strncasecmp(p,"Kanji",5) == 0) code=CHRS_ISO_2022_JP;
|
|
else if (strncasecmp(p,"KOI8-R",6) == 0) code=CHRS_KOI8_R;
|
|
else if (strncasecmp(p,"KOI8-U",6) == 0) code=CHRS_KOI8_U;
|
|
else if (strncasecmp(p,"KOI8",4) == 0) code=CHRS_KOI8_R;
|
|
else if (strncasecmp(p,"LATIN-0",7) == 0) code=CHRS_ISO_8859_15;
|
|
else if (strncasecmp(p,"LATIN1QP",8) == 0) code=CHRS_ISO_8859_1_QP;
|
|
else if (strncasecmp(p,"LATIN-1",7) == 0) code=CHRS_ISO_8859_1;
|
|
else if (strncasecmp(p,"Latin-2",7) == 0) code=CHRS_ISO_8859_2;
|
|
else if (strncasecmp(p,"Latin-3",7) == 0) code=CHRS_ISO_8859_3;
|
|
else if (strncasecmp(p,"Latin-4",7) == 0) code=CHRS_ISO_8859_4;
|
|
else if (strncasecmp(p,"Latin-5",7) == 0) code=CHRS_ISO_8859_9;
|
|
else if (strncasecmp(p,"Latin-6",7) == 0) code=CHRS_ISO_8859_10;
|
|
else if (strncasecmp(p,"MAC",3) == 0) code=CHRS_MACINTOSH;
|
|
else if (strncasecmp(p,"MIK",3) == 0) code=CHRS_MIK_CYR;
|
|
else if (strncasecmp(p,"MAZOVIA",7) == 0) code=CHRS_FIDOMAZOVIA;
|
|
else if (strncasecmp(p,"NEC",3) == 0) code=CHRS_NEC; /* ??? - JE */
|
|
else if (strncasecmp(p,"PC-8",4) == 0) code=CHRS_CP437;
|
|
else if (strncasecmp(p,"SJIS",4) == 0) code=CHRS_SJIS; /* ??? - JE */
|
|
else if (strncasecmp(p,"Thai",4) == 0) code=CHRS_ISO_8859_11;
|
|
else if (strncasecmp(p,"UJIS",4) == 0) code=CHRS_EUC_JP;
|
|
else if (strncasecmp(p,"UTF-7",5) == 0) code=CHRS_UTF_7;
|
|
else if (strncasecmp(p,"UTF-8",5) == 0) code=CHRS_UTF_8;
|
|
else if (strncasecmp(p,"VISCII",6) == 0) code=CHRS_VISCII_11;
|
|
else if (strncasecmp(p,"ZW",2) == 0) code=CHRS_ZW;
|
|
/* only intended to be in Areas file. So we can try to found the
|
|
* from the values of chars in message itself */
|
|
else if (strncasecmp(p,"AUTODETECT",10) == 0) code=CHRS_AUTODETECT;
|
|
else if (strncasecmp(p,"default",7) == 0) code=CHRS_NOTSET;
|
|
else { code=CHRS_NOTSET; Syslog('+', "Unknown CHRS: %s",p); }
|
|
return code;
|
|
/* if you know of other CHRS: values which are in use, let me know so I can
|
|
include them. Mail me to srtxg@chanae.alphanet.ch or srtxg (2:293/2219) */
|
|
}
|
|
|
|
|
|
|
|
|
|
char *getchrs(int code)
|
|
{
|
|
char *chrs=NULL;
|
|
|
|
if (code == CHRS_ASCII) chrs=(char *)"ASCII 2";
|
|
else if (code == CHRS_BIG5) chrs=(char *)"BIG5"; /* ??? */
|
|
else if (code == CHRS_CP424) chrs=(char *)"CP424"; /* ??? */
|
|
else if (code == CHRS_CP437) chrs=(char *)"IBMPC 2";
|
|
else if (code == CHRS_CP850) chrs=(char *)"CP850 2";
|
|
else if (code == CHRS_CP852) chrs=(char *)"CP852"; /* ??? */
|
|
else if (code == CHRS_CP862) chrs=(char *)"CP862"; /* ??? */
|
|
else if (code == CHRS_CP866) chrs=(char *)"CP866";
|
|
else if (code == CHRS_CP895) chrs=(char *)"CP895 2";
|
|
else if (code == CHRS_EUC_JP) chrs=(char *)"UJIS"; /* ??? */
|
|
else if (code == CHRS_EUC_KR) chrs=(char *)"EUC-KR"; /* ??? */
|
|
else if (code == CHRS_FIDOMAZOVIA) chrs=(char *)"FIDOMAZ 2";
|
|
else if (code == CHRS_GB) chrs=(char *)"GB"; /* ??? */
|
|
else if (code == CHRS_HZ) chrs=(char *)"HZ 2"; /* ??? */
|
|
else if (code == CHRS_ISO_2022_CN) chrs=(char *)"ISO-2022-CN"; /* ??? */
|
|
else if (code == CHRS_ISO_2022_JP) chrs=(char *)"JIS";
|
|
else if (code == CHRS_ISO_2022_KR) chrs=(char *)"ISO-2022-KR"; /* ??? */
|
|
else if (code == CHRS_ISO_2022_TW) chrs=(char *)"ISO-2022-TW"; /* ??? */
|
|
else if (code == CHRS_ISO_8859_1) chrs=(char *)"LATIN-1 2";
|
|
else if (code == CHRS_ISO_8859_1_QP) chrs=(char *)"LATIN-1 2";
|
|
else if (code == CHRS_ISO_8859_2) chrs=(char *)"Latin-2 3";
|
|
else if (code == CHRS_ISO_8859_3) chrs=(char *)"Latin-3 3";
|
|
else if (code == CHRS_ISO_8859_4) chrs=(char *)"Latin-4 3";
|
|
else if (code == CHRS_ISO_8859_5) chrs=(char *)"Cyrillic 3"; /* ??? */
|
|
else if (code == CHRS_ISO_8859_6) chrs=(char *)"Arabic 3"; /* ??? */
|
|
else if (code == CHRS_ISO_8859_7) chrs=(char *)"Greek 3"; /* ??? */
|
|
else if (code == CHRS_ISO_8859_8) chrs=(char *)"Hebrew 3"; /* ??? */
|
|
else if (code == CHRS_ISO_8859_9) chrs=(char *)"Latin-5 3";
|
|
else if (code == CHRS_ISO_8859_10) chrs=(char *)"Latin-6 3";
|
|
else if (code == CHRS_ISO_8859_11) chrs=(char *)"Thai 3";
|
|
else if (code == CHRS_ISO_8859_15) chrs=(char *)"LATIN-0 2";
|
|
else if (code == CHRS_KOI8_R) chrs=(char *)"KOI8-R"; /* ??? */
|
|
else if (code == CHRS_KOI8_U) chrs=(char *)"KOI8-U"; /* ??? */
|
|
else if (code == CHRS_MACINTOSH) chrs=(char *)"MAC 2";
|
|
else if (code == CHRS_MIK_CYR) chrs=(char *)"MIK-CYR";
|
|
else if (code == CHRS_NEC) chrs=(char *)"NEC-JIS"; /* ??? */
|
|
else if (code == CHRS_SJIS) chrs=(char *)"SJIS"; /* ??? */
|
|
else if (code == CHRS_UTF_7) chrs=(char *)"UTF-7";
|
|
else if (code == CHRS_UTF_8) chrs=(char *)"UTF-8";
|
|
else if (code == CHRS_VISCII_11) chrs=(char *)"VISCII 3";
|
|
else if (code == CHRS_ZW) chrs=(char *)"ZW"; /* ??? */
|
|
else chrs=NULL;
|
|
|
|
return chrs;
|
|
}
|
|
|
|
|
|
|
|
void writechrs(int code, FILE *pkt, int ispkt)
|
|
{
|
|
char *akludge,*endline,*chrs=NULL;
|
|
|
|
akludge = endline = NULL;
|
|
|
|
if (ispkt==0) {
|
|
akludge=(char *)"X-FTN-"; endline=(char *)"\n";
|
|
} else if (ispkt==1) {
|
|
akludge=(char *)"\1"; endline=(char *)"\r";
|
|
} else if (ispkt==2) {
|
|
akludge=(char *)"X-FTN-ORIG"; endline=(char *)"\n";
|
|
} else if (ispkt==3) {
|
|
akludge=(char *)"\1"; endline=(char *)"\n";
|
|
}
|
|
chrs=getchrs(code);
|
|
if (chrs) fprintf(pkt,"%sCHRS: %s%s",akludge,chrs,endline);
|
|
}
|
|
|
|
|
|
// WORDT NIET GEBRUIKT ??
|
|
void writecharset(int code, FILE *pip, rfcmsg *msg, rfcmsg *kmsg)
|
|
{
|
|
char *p, *charset=NULL;
|
|
|
|
charset=getcharset(code);
|
|
|
|
if ((p=hdr((char *)"Mime-Version",msg))) fprintf(pip,(char *)"Mime-Version:%s",p);
|
|
else if ((p=hdr((char *)"RFC-Mime-Version",kmsg))) fprintf(pip,(char *)"Mime-Version: %s",p);
|
|
else if ((p=hdr((char *)"Mime-Version",kmsg))) fprintf(pip,(char *)"Mime-Version: %s",p);
|
|
else if ((charset) && (code != CHRS_NOTSET)) fprintf(pip,"Mime-Version: 1.0\n");
|
|
|
|
if ((p=hdr((char *)"Content-Type",msg))) fprintf(pip,"Content-Type:%s",p);
|
|
else if ((p=hdr((char *)"RFC-Content-Type",kmsg))) fprintf(pip,"Content-Type: %s",p);
|
|
else if ((p=hdr((char *)"Content-Type",kmsg))) fprintf(pip,"Content-Type: %s",p);
|
|
else if ((charset) && (code != CHRS_NOTSET))
|
|
{
|
|
if ((p=hdr((char *)"FSCHTML",kmsg)) || (p=hdr((char *)"HTML",kmsg)))
|
|
fprintf(pip,"Content-Type: text/html; charset=%s\n",charset);
|
|
else
|
|
fprintf(pip,"Content-Type: text/plain; charset=%s\n",charset);
|
|
}
|
|
|
|
if ((p=hdr((char *)"Content-Length",msg))) fprintf(pip,"Content-Length%s",p);
|
|
else if ((p=hdr((char *)"RFC-Content-Length",kmsg))) fprintf(pip,"Content-Length: %s",p);
|
|
else if ((p=hdr((char *)"Content-Length",kmsg))) fprintf(pip,"Content-Length: %s",p);
|
|
|
|
if ((p=hdr((char *)"Content-Transfer-Encoding",msg))) fprintf(pip,"Content-Transfer-Encoding:%s",p);
|
|
else if ((p=hdr((char *)"RFC-Content-Transfer-Encoding",kmsg))) fprintf(pip,"Content-Transfer-Encoding: %s",p);
|
|
else if ((p=hdr((char *)"Content-Transfer-Encoding",kmsg))) fprintf(pip,"Content-Transfer-Encoding: %s",p);
|
|
else if ((charset) && (code == CHRS_ISO_8859_1_QP)) fprintf(pip,"Content-Transfer-Encoding: quoted-printable\n");
|
|
else if ((charset) && (code != CHRS_NOTSET)) { fprintf(pip,"Content-Transfer-Encoding: ");
|
|
if ((code == CHRS_ASCII || code == CHRS_UTF_7)) fprintf(pip,"7bit\n");
|
|
else if (strncasecmp(charset,"iso-2022-",9) == 0) fprintf(pip,"7bit\n");
|
|
else fprintf(pip,"8bit\n"); /* all others are 8 bit */
|
|
}
|
|
}
|
|
|