[Message Prev][Message Next][Thread Prev][Thread Next][Message Index][Thread Index]
Re: movemail patch for MS POP server
- X-ml-count: 167
- Subject: Re: movemail patch for MS POP server
- From: KUBO Takehiro <takehiro.kubo@xxxxxxxxxxxxxxxxx>
- Date: 27 Jun 1998 14:45:25 +0900
- X-mailer: Semi-gnus 6.3.0 (based on Gnus 5.6.9; for SEMI 1.4)
久保@伊勢原市です。
KUBO Takehiro <takehiro.kubo@xxxxxxxxxxxxxxxxx> writes:
> Tatsuya Ichikawa <ichikawa@xxxxxxxxxxxxxx> writes:
>
> > >>>>> In [meadow-users-jp : No.164]
> > >>>>> 小関 吉則 (KOSEKI Yoshinori) <kose@xxxxxxxxxxxxxxxxxx> wrote:
> > こ> Emacsから以下のように設定できる環境変数設定がよいかもしれません。
> > こ> (setenv "MOVEMAIL" "-pu")
> >
> > そうですね。
> > オプションで変更できる方がいいと思います。
>
> うーむ。来週の月曜までにはパッチをつくりましょう。
> #早ければ、明日。
つくりました。
-s
で CONVERT_SJIS_TO_JIS が ON になります。
ところで自分で作っといて変ですが、レジストリによる指定はどうすれば良い
のでしょうか?
regedit を起動して、HKEY_USERS\\.Default\\Software で、
[新規作成]->[キー] "GNU"、
[新規作成]->[キー] "Mule"、
[新規作成]->[キー] "Movemail"、
[新規作成]->[DWORD値] "CONVERT_SJIS_TO_JIS" 1
としてもレジストリが効きません。
REG_PROGDLG のコードをコピーして、一部修正しただけだから、間違いはない
と思うのだが....。
------------------ ここから ------------------
*** movemail.meadow.c Wed Feb 04 01:52:29 1998
--- movemail.c Sat Jun 27 14:18:19 1998
***************
*** 222,227 ****
--- 222,230 ----
#ifdef PROGRESS_DIALOG
#define POP_PROGDLG (1 << 4) /* display progress dialog */
#endif /* PROGRESS_DIALOG */
+ #ifdef CONVERT_SJIS_TO_JIS
+ #define POP_CONVERT_SJIS_TO_JIS (1 << 7) /* convert charset from sjis to jis */
+ #endif /* CONVERT_SJIS_TO_JIS */
#ifdef WINDOWSNT
#define REG_STRMAX 256
***************
*** 236,241 ****
--- 239,247 ----
#define REG_OUTNAME "OUTNAME"
#define REG_PASSWD "PASSWORD"
#define REG_MAILHOST "MAILHOST"
+ #ifdef CONVERT_SJIS_TO_JIS
+ #define REG_CONVERT_SJIS_TO_JIS "CONVERT_SJIS_TO_JIS"
+ #endif /* CONVERT_SJIS_TO_JIS */
#endif /* WINDOWSNT */
/* Command name and default options */
***************
*** 998,1015 ****
--- 1004,1116 ----
&& (a[3] == 'm') \
&& (a[4] == ' '))
+ #ifdef CONVERT_SJIS_TO_JIS
+ /* copy from nkf.c */
+ #define SP 0x20
+ #define DEL 0x7f
+ #define SJ0162 0x00e1 /* 01 - 62 ku offset */
+ #define SJ6394 0x0161 /* 63 - 94 ku offset */
+
+ #define ASCII 0
+ #define JISX0201KANA 1
+ #define JISX0208 2
+ #define TO_ASCII "\x1b(B"
+ #define TO_JISX0201KANA "\x1b(I"
+ #define TO_JISX0208 "\x1b$B"
+ #define CHAR_SET(a) ((((a >= 0x81) && (a <= 0xa0)) \
+ || ((a >= 0xe0) && (a <= 0xfc))) ? JISX0208 : \
+ ((a >= 0xa1) && (a <= 0xdf)) ? JISX0201KANA : \
+ ASCII)
+ #endif /* CONVERT_SJIS_TO_JIS */
+
int
mbx_write (line, mbf)
+ #ifdef CONVERT_SJIS_TO_JIS
+ unsigned char *line;
+ #else /* CONVERT_SJIS_TO_JIS */
char *line;
+ #endif /* CONVERT_SJIS_TO_JIS */
FILE *mbf;
{
+ #ifdef CONVERT_SJIS_TO_JIS
+ int i;
+ int status;
+ unsigned char c1;
+ unsigned char c2;
+ #endif /* CONVERT_SJIS_TO_JIS */
+
if (IS_FROM_LINE (line))
{
if (fputc ('>', mbf) == EOF)
return (NOTOK);
}
+ #ifdef CONVERT_SJIS_TO_JIS
+ if (popoption & POP_CONVERT_SJIS_TO_JIS)
+ {
+ status = ASCII;
+ for (i = 0;i < strlen(line);i++)
+ {
+ switch (CHAR_SET(line[i]))
+ {
+ case ASCII:
+ if (status != ASCII)
+ {
+ if (fputs (TO_ASCII, mbf) == EOF)
+ return (NOTOK);
+ status = ASCII;
+ }
+ if (fputc (line[i], mbf) == EOF)
+ return (NOTOK);
+ break;
+ case JISX0201KANA:
+ if (status != JISX0201KANA)
+ {
+ if (fputs (TO_JISX0201KANA, mbf) == EOF)
+ return (NOTOK);
+ status = JISX0201KANA;
+ }
+ if (fputc (line[i] - 0x80, mbf) == EOF)
+ return (NOTOK);
+ break;
+ case JISX0208:
+ if (status != JISX0208)
+ {
+ if (fputs (TO_JISX0208, mbf) == EOF)
+ return (NOTOK);
+ status = JISX0208;
+ }
+ c2 = line[i];
+ c1 = line[++i];
+ /* copy from nkf.c */
+ c2 = c2 + c2 - ((c2 <= 0x9f) ? SJ0162 : SJ6394);
+ if(c1 < 0x9f)
+ c1 = c1 - ((c1 > DEL) ? SP : 0x1f);
+ else {
+ c1 = c1 - 0x7e;
+ c2++;
+ }
+ if (fputc (c2, mbf) == EOF)
+ return (NOTOK);
+ if (fputc (c1, mbf) == EOF)
+ return (NOTOK);
+ break;
+ }
+ }
+ if (status != ASCII)
+ {
+ if (fputs (TO_ASCII, mbf) == EOF)
+ return (NOTOK);
+ }
+ }
+ else
+ {
+ if (fputs (line, mbf) == EOF)
+ return (NOTOK);
+ }
+ #else /* CONVERT_SJIS_TO_JIS */
if (fputs (line, mbf) == EOF)
return (NOTOK);
+ #endif /* CONVERT_SJIS_TO_JIS */
if (fputc (0x0a, mbf) == EOF)
return (NOTOK);
return (OK);
***************
*** 1107,1113 ****
usage ()
{
fprintf (stderr,
! "Usage: movemail [-cCkKuafFpP] inbox destfile [POP-password]\n");
exit (1);
}
--- 1208,1214 ----
usage ()
{
fprintf (stderr,
! "Usage: movemail [-cCkKuafFpPsS] inbox destfile [POP-password]\n");
exit (1);
}
***************
*** 1165,1170 ****
--- 1266,1279 ----
case 'P': /* don't display progress dialog */
*option &= ~POP_PROGDLG;
break;
+ #ifdef CONVERT_SJIS_TO_JIS
+ case 's': /* convert sjis to jis */
+ *option |= POP_CONVERT_SJIS_TO_JIS;
+ break;
+ case 'S': /* don't convert sjis to jis */
+ *option &= ~POP_CONVERT_SJIS_TO_JIS;
+ break;
+ #endif /* CONVERT_SJIS_TO_JIS */
default:
usage ();
break;
***************
*** 1367,1372 ****
--- 1476,1504 ----
putenv (mailhost);
}
}
+
+ #ifdef CONVERT_SJIS_TO_JIS
+ /* REG_CONVERT_SJIS_TO_JIS */
+ type = REG_DWORD;
+ length = sizeof(dvalue);
+ ret = RegQueryValueEx (hkey, REG_CONVERT_SJIS_TO_JIS, NULL,
+ &type, (LPBYTE) &dvalue, &length);
+ if (ret == ERROR_SUCCESS)
+ {
+ switch (dvalue)
+ {
+ case 1:
+ *option |= POP_CONVERT_SJIS_TO_JIS;
+ break;
+ case 0:
+ *option &= ~POP_CONVERT_SJIS_TO_JIS;
+ break;
+ default:
+ fatal ("Registry error!", 0);
+ break;
+ }
+ }
+ #endif /* CONVERT_SJIS_TO_JIS */
RegCloseKey(hkey);
}
------------------ ここまで ------------------
では、再見
--
神奈川県伊勢原市在住
久保 健洋
takehiro.kubo@xxxxxxxxxxxxxxxxx