[Message Prev][Message Next][Thread Prev][Thread Next][Message Index][Thread Index]

Re: movemail patch for MS POP server



久保@伊勢原市です。

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