  E_dictionary-mini-HOWTO -Rs[^ŉpa&apTg-
  {Fu(g96p0935@mse.waseda.ac.jp)
  PONPPO(y) Mn

  1.  ͂߂

  1.1.   mini-HOWTO ɂ

  UNIX ̕}jÁApłBUNIXgȂ߂ɂ́Ap
  łȂł}jAAǂ݂ȂȂ΂Ȃ܂BX{
  lɂƂāAp̃}jÁA̖(2oCgł邱ƂƊ
  R[h)ƂƂɑ傫Ȋ֖ƂȂ܂BUNIXɌ炸Ap͐EW
  łAłtĂȂĂ͂Ȃ܂B

   mini-HOWTÓApǉ邽߁ARs[^ŉpaTg
  Ă܂ƂړIŏ܂BRs[^̉ɉpau
  lA炻ȂƂȂĂǂ̂łBȂǁAF͉p
  ꂩΉ{TȂ̂ARs[^ɂ点΂悢
  ̂łB

  KȂƂɁAC^[lbgɂ́At[Ȏf[^Lxɂ
  B܂AUNIX́AeLXg哾ӂƂĂ܂AUNIX̂
  ɂӂ邱ƂɂȂł傤B

  ĺALinuxĂ܂񂪁AFree-BSDȂǑUNIXnOSłg
  v܂B炱𑍏̂UNIXƕ\LĂ܂B

  1.2.  KvȂ

     Perl 5(UNIXfBXgr[VɕtĂ锤)
        eLXgn߁AoĂ邠ƂȒPɉ
        Ă܂֗ȌBC^v^Ȃ̂ŃRpCɑ邵A
        ̊ɓ삪BCƂƂUNIX̕W̒nʂz
        ܂BwԉlI

     nkf ({\z炠锤)
        {̊R[h́Au{EUC(UNIXŎgĂ)vA
        uMS(ʖ ushift-JISvB̖̒ʂAMS-DOS  Windows 
        gĂ)vAuJIS(internet mailŎgĂ)v3ނ
        ܂B̊R[h̑ݕϊsA{lKg̃c[
        BDebian LinuxȂJPpbP[W non-free ZNVɂ
        BLinuxȂAPJEpbP[WɓĂ܂B

     look (ʂUNIXCXg[炠锤)
        eLXg binary search R}hBbinary search ́A\[g
        ĂeLXgɌASYłB

  炪CXg[Ă邱Ƃ́A

  which perl
  which nkf
  which look

  ŊmFł܂B perl̃o[ẂA perl -v ŊmFł܂Bversion
  5. ƂĂ ok łB

  1.3.  Ɛ

  M҂́ÃhLgQlƂAȂ̍sׂɂĂȂPCA
  fBXNAAMOȂǂQ󂯂ꍇłA؂̐ӔC𕉂܂
  BׂẴXNłĂB܂AȂ͑SR
  ܂̂ŁA댯͊Fɋ߂łB

  2.  

  2.1.  f[^

  ftp://ring.aist.go.jp/pub/pack/data/writing/dic/translat/
  http://www-nagao.kuee.kyoto-u.ac.jp/member/tsuchiya/sdic

  ɂ gene95ƂuĂ܂B^ꐔ 55000 AptƏ\
  pxɒBĂ܂B

  ܂Aniftyserve ɉĂȂ΁AFENG ɁupYvƂ gene95
  Ƃׂ͔̂ɂȂȂقǑ傫Ȏ܂BݕM҂͉pYg
  Ă܂B

  $ cd /tmp

  /tmpɃ_E[hWJ܂B gq .lzh Ȃ̂ŁA

  lha x filename

  œWJł܂BȌAg gene95 邢͉pYł邱ƂO
  ɂ܂B

  2.2.  f[^̉H

  肵΂̎́AShift-JIS R[hŁAs CR+LF ƂȂ
  ܂B genepYȂĂ܂B dos & windows Ȃ炱ꂪ
  WłAUNIXŎg߂ɂ́AϊKvɂȂ܂BnkfŊR[h
  EUCR[hɂ܂B-eIvVw肵܂BpJi̕ϊ̂
  ɁA-X t܂BsR[h perl œǂݍ߂Ώɕϊ܂B
  > ̂Ƃɕϊ̎f[^̃t@C܂Bt@C
  ej.dic ƂĂ܂B

  ܂Ankf͊R[hʂĂ̂ŁAO̊R[h̊mF
  ͕Kv܂B

  ȏ܂Ƃ߂ gene95 ȂA

      nkf -SXe gene.txt | \
      perl -ne 'chop;chop; $_=" $_\n" if ($.%2 == 0);print;' | \
      perl -pe '$_="$_";' > ej.dic

  As܂BpYȂA

      nkf -SXe *[a-z].txt | \
      perl -pe '$_=substr($_,0,-2) . "\n";' > ej.dic

  łB

  2.3.  f[^̃CXg[

  ϊIA̎CXg[܂B̃R}hĂ
  Broot ɂȂčƂ܂̂ŁAӂăR}h͂Ă
  B

  $ su
  # mkdir /usr/local/lib/dictionary
  # mv /tmp/ej.dic /usr/local/lib/dictionary

  3.  R}h̍쐬

  3.1.  Ƃ肠gĂ݂܂傤

  ̎_ŁAlookR}hŎƂ\łBȉ̃R}hŁA
  ĂB

  look -f 'dog ' /usr/local/lib/dictionary/ej.dic

  ______________________________________________________________________
  dog 1.,2.ɂl(uglt person)(ʏ,ɑ΂ėp),uX,3.s
  dog days (the `)(Ă)yp,Ă̎,X(the Dog StarzƂƂɏG)
  dog eat dog ̏,ԑ,H,䂪̑
  dog fall (XO)
  (ȉȗ)
  ______________________________________________________________________

  paT̃f[^̓Rs[^炵Ă݂ΘapTɂȂ܂BP
  f[^SĂ܂΂悢łBRs[^Nď
  ߂ăANZXȂpY5bقǎԂ邩܂񂪁A2x
  ȍ~ȂułBLbVɂ܂邩łBɍ̃p\R̖{
  ̔\͂͂Ȃ̑z͂邩ɐ₷̂łB

  grep 'dCdqw' /usr/local/lib/dictionary/ej.dic

  ______________________________________________________________________
  institute of electrical and electronics engineers : sātdCdqwyzIEEE
  ______________________________________________________________________

  ǂłBł\g܂AP𒲂ׂx look  grep N
  ̂͂߂ǂłˁBC^[tF[X͎͂ō܂B

  3.2.  dic_look XNvg

  ܂́Apꂩ{(ʂ)ɂƂĎXNv
  g܂B dic_look ƂłBX̂߂ɁAp̊p͂
  @\tĂ܂B̃R}hŁA{̌ɂĂXNvg
  /usr/local/bin/dic_lookƂt@CŐ؂oĂB

  perl -ne 'print if ((/#\!.*perl/ .. /#end dic_look/) );' E_dictionary-mini-HOWTO.sgml > /usr/local/bin/dic_look

  3.3.  mF

  C-shell ngȂ

  $ rehash

  ƓāÃXNvgpXʂst@CƂĔFĂ
  B

  B-shell ngȂ炻̕Kv͂܂BāA

  $ dic_look looked

  ______________________________________________________________________
  look-ahead yRs[^z\(),(),\m\(̂)
  look-alike ,肳
  look-in (a `)1.ƌ邱,,2.ZK,3.st[]̌
  look-up bNAbv
  look 1.ڂ,O,lq,2.ɂӂ킵lqł,{,̖ڂ,̂悤ɂ݂,Ǝv,ӂ,,߂(),ׂ(),̌Xɂ / It does not taste as bad as it looks. ڂقǖ͈Ȃ
  look ~ in the face ̊ƌ
  look about 
  (ȉȗ)
  ______________________________________________________________________

  ǂłBŁAp͂Ă܂ˁB

  4.  R}hCŎg

  p̋ȏpVǂނƂ́Attyx[XŉxP𕷂Ă
  C^[tF[XԂłB

  ftp://ftp.u-aizu.ac.jp/pub/SciEng/nihongo/ftp.cc.monash.edu.au/00INDEX.html

  ɂ́AxjdicƂvO܂Ał͎ōĂ݂܂
  Bp̃vOɗȂĂ script œ̋@\ȒPɎł
  ̂́A UNIX݂̋̈łB

  4.1.  dictionary XNvg

  ̃R}hŁAXNvg/usr/local/bin/dictionaryƂt@C
  Ő؂oĂB dictionary XNvgłĂ邱Ƃ́Apꂩ
  {̓͂ dic_look XNvgɓnĂ邾łB

  perl -ne 'print if ((/#\!.*sh/ .. /#end dictionary/) );' E_dictionary-mini-HOWTO.sgml > /usr/local/bin/dictionary

  4.2.  AgĂ݂܂傤

  ŁAttyx[X̃R}hł܂BׂP͂ƈӖ
  oĂ܂BIƂ́Â܂܉sL[ĂB

  C-shell ngĂĺA߂dictionaryR}hsO
  rehash R}hs邱ƁB

  $ dictionary

  dictionary: free
  free-agent R_I
  free-fall (pV[gJO)R
  free-for-all 1.łRɎQo鋣Z,2.ꎩR,3.ÊȂc_,
  free-lance 1.(,oDȂǂ)R_(e),t[,t[T[,2.R_Ŏd,(,oDȂǂ)R_(e),()R_œ
  free-lance diplomat t[̊O
  free-spender ̍rl,܂蕨lɂl
  free-trade zone R`(free port),::FTZ
  free `̂Ȃ,R,Ђ܂,,,t[,ɂ,邭
  free Yen account yoρzR~a

  dictionary: ball
  ball ,{[,sty(sׂ܈ӂ鎖̂Œ),,啑,,̂,ۂ߂,ɂ,ɂȂ
  ball and chain ȕ(encumbrance),sgIt[
  ball cock t[g
  ball game 1.Z,싅̎,2.,,
  ball game +1 (the `)dvŌIȗvf(o),̒S(the main and decisive factor, event, etc.)
  ball park TZ
  ball point (pen) {[y
  ball position |[|WV

  dictionary: 
  cloud-to-ground discharge : o炭炢p
  coup de foudre : ڍoЂƂ߂ڂpAVoĂṕAo炭炢p
  death by lightning : 
  flash to ground : o炭炢p
  ground discharge : o炭炢p
  lightning damage : ɂQ
  Lightning Protection Institute : h쌤yzLPI
  lightning stoke : doł񂰂pAo炭炢p
  lightning strike : doł񂰂pXgAo炢pAo炭炢pAłXg
  stroke of lightning : o炭炢p
  struck by lightning, be : ɌA
  thunderbolt  {} : sCt
  thunderbolt flash to ground : o炭炢p
  United Lightning Protection Association : h~AyzULPA

  dictionary: (̂܂܉sL[ƏI)

  5.  Emacs Ŏg

  UNIXR}hƂĎpIɂ邽߂ɂ́A EmacsƂFBɂȂ̂Ԃ
  BEmacs͕ʂ̃GfB^ǂ납Ałł閜\Ił邱Ƃ͏
   UNIXlȂm̎łB{lpɔYނ݂̂͂ȓ
  Ȃ̂ŁAłɎ悤 Emacs Lisp ȉ URL ɂ܂Al
  Ă݂܂̂ŁAЉ܂B

      http://www-nagao.kuee.kyoto-u.ac.jp/member/tsuchiya/sdic

  5.1.  dictionary.el

  ̃R}hŁAemacs lispload-path ̒ʂfBNg(Ƃ
  /elisp) dictionary.elƂt@CŐ؂oĂB

  perl -ne 'print if ((/^ *;begin dictionary.el/ .. /;end dictionary.el/) );' E_dictionary-mini-HOWTO.sgml > ~/elisp/dictionary.el

  ̌A.emacs

  ______________________________________________________________________
  (load "dictionary")
  (define-key global-map "\C-z" 'gene-word)
  (define-key global-map "\M-\C-z" 'gene-string)
  ______________________________________________________________________

  ƓKȃL[Ɋ蓖ĂĂBR}h gene Ŏn܂̂́A
  M҂ gene gĂłBR dictionary.el ́ApY
  łg܂B Emacs suspend 邱Ƃ͂قƂǂ肦Ȃ̂ŁA
  ł Ctrl+Z ɊĂ̂ƂĘbi߂܂B

  kon gl͉𑜓x 800x600 ɂĂB 100 x 37s Ȃ
  ŁAVGA  kon gĂl猩ƂʂLȂ悤Ɋ
  ܂B 800x600  kon gɂ́A

  $ kon stealth

  Ă݂ĂBM҂̊ł͂܂܂A܂Ȃ
  Ƃ邩܂B

  ܂ȂƂ́Agene-word ֐

  ______________________________________________________________________
    (gene-string (downcase (buffer-substring beg end))))
     ^^^^^^^^^^^
  ______________________________________________________________________

  ̕ gene-string-1 ɕςĂB

  5.2.  AgĂ݂܂傤

  5.2.1.  b̊b

  man page łłAp Emacs ̃obt@ɓǂ݂ł
  BāAP̏ɃJ[\uāAC-z ĂBƁA
  ʂ2āA *GENE* Ƃobt@ɈӖoĂ邩Aʂȃt[
  ɕ\܂B

  łɊp͂鎫쐬܂̂ŁA擪啶ł
  Aߋ`낤Aݕ낤Ar낤Aƌ`
  Ă͂łB

  ܂A M-C-z Ńvvg\܂Bp(n)ꂽpa
  TƂċN܂A{ꂽapTƂċN܂B

  5.2.2.  *GENE* obt@ł̑

  *GENE* Ƃobt@(ŏɃXy[X邱Ƃɒ)ɈڂƓƓ̑
  삪\łB

  ʂĂԂ  *GENE* obt@ [RET] ƁA̍s
  ̃EBhE(ɂ 'C-u -1 C-x o' ŐؑւEBhE)
  ̃obt@ɑ}܂BpǂłāAPꃊXg肽Ƃ
  ֗łB

  ܂A  *GENE* obt@̒ŉpaTNƂ C-M-z ȗł
  ܂BAt@xbg a ƁA C-M-z a Ɖ̂ƓԂɂ
  ܂B܂A  *GENE* obt@̒ł͉pP͂ [RET] 
  ŉpaT̂łBAapTƂĎgƂ͂
  C-M-z ȂĂ͂Ȃ܂B

  5.3.  L[gĉKɉpǂ݂l(m[gp\R)

  M҂̂悤Ƀm[gp\RĂȂAL[̍ɂ Alt L
  [AEɂ Ctrl L[邱ƂłBpǂނƂ́AL[
  PageUp,PageDown,Space,geneL[(܂)Ύ܂B
  ́A}̂悤ɉEuďw Ctrl L[ gene-word N悤
  ɐݒ肵܂B

    +------+------+------+------+------+
    | Alt  |    |    |    | Ctrl |
    +------+------+------+------+------+
            lw  w   w   w

  EAltL[̃L[R[h100ŁAECtrlL[̃L[R[h97łBL[R[
  h showkey R}hŒׂ邱Ƃł܂BIvVȂ showkey
  R}hNĂ݂ĂB10b҂ĂΏɏIĂ܂BȂ
  Q Ƃ q ŏIȂ̂ƂƁAł Q Ƃ q g̃L[R[h
  ׂȂłB

  ȉ̋Lq  /mykeymap.map ɕۑ܂B

  ______________________________________________________________________
  keycode  97 = F20
  keycode 100 = space
  string F20 = "\033[34~"
  ______________________________________________________________________

  tcsh,csh gĂl .login ɁA bash gĂl
  .bash_profile 

  ______________________________________________________________________
  loadkeys ~/mykeymap.map
  ______________________________________________________________________

  ̋Lq܂傤B

  āA.emacs 

  ______________________________________________________________________
  (defun left-x ()
    (interactive)
    (if buffer-read-only (backward-word 1) (backward-char 1)))

  (defun right-x ()
    (interactive)
    (if buffer-read-only (forward-word 1) (forward-char 1)))
  (define-key global-map [f20] 'gene-word)
  (define-key global-map [left] 'left-x)
  (define-key global-map [right] 'right-x)
  ______________________________________________________________________

  ̋Lq܂BŁAobt@[hI[̂ƂɖL[
  ΁A[hPʂɃJ[\ړ܂BȂ̂悤ɐݒ肵Ƃ
  ƁA[hI[̂Ƃɂ̓bZ[WǂނƂÂ悤ȏ
  A1PʂɃJ[\ړĂ܂ẮAxăXgXɂȂ邩
  łB

  m[g[UȂ獡phLg͉E肾œǂ݂܂傤I

  5.4.  X [UȂp̓}EXœǂ݂܂傤B

  @ X gĂȂA}EXgł傤BÔ
  łA}EX̓}EXJ[\ʒ𑖂ARs[^Ɂu
  āvƖ߂鑕ułB̖߂𔭂̂23{^
  łB܂A}EXJ[\x̓L[{[hŃJ[\𓮂x
  Ƒ̂łA}EX̉ENbNŎ̃y[WɐiŁA
  킩ȂPꂪ_uNbNňӖ𒲂ׂ΂悢ł傤B
  ͕ʂȃt[(Emacs  X x̃EBhEBEmacs ̓EBhEƂ
  tʂ̈ӖɎg܂B)ɕ\܂Bꂼ̃t[d
  Ȃ悤ɒu΂悢̂łBɂA

  IIL[{[hɐGȂĂ}EXŉpǂ߂܂BII

  ̑쐫͈x͂܂L[{[h֖߂Ȃ炢̂̂łB
  ȂȂ̓}EXł}EX炵ggȂ̂łB

  ̂߂ɂ .emacs 

  ______________________________________________________________________
  (define-key global-map [down-mouse-1] nil)
  (define-key global-map [mouse-3] 'scroll-up)
  (define-key global-map [double-mouse-1] 'gene-word)
  ______________________________________________________________________

  ̋Lq܂BhbOƂA[W]\ȂȂ
  A}EXł copy & yank ł܂B

  Ȃ쐫ɂ́AȂL𑜓xKvłB 800x600
  xƖł傤BM҂̂悤Ƀm[gp\Rōő𑜓x
  800x600 Ȃ΁A X gƂ͂܂肨߂ł܂Bm[gp\R
   Windows gĂlĂĂA Word  Excel ő\
  āAgbN{[łȂ}EXJ[\𓮂Ăp͌ɑ
  ܂B window system ́AuL𑜓xʁvAugՂ}E
  XvAurfIJ[hv̂ǂłĂAĎg
  ͂܂BSĂ̑L[{[hł邭炢A
   kon g܂傤Bkon Ȃ̋߂Ă̂łB

  6.  

  M҂Linux(UNIX)͂4(1998N1)łBłEmacs
  Perl͑DłB̕ǂŁAp}jA|ȂȂl
  EmacsPerlƍDɂȂloĂΕM҂ƂĂȏȂ
  тłB

  LinuxȑOWindows95gĂ܂BWindowsłApaT͂܂
  A肷邵AEmacŝ悤Ȗ\Iŝ݂߁A܂肢
  ̂͂ȂƕM҂͎v܂BႦ΁Ap̃wvt@CǂނƂA
  킩ȂPꂪo邽тɂtH[JXpaT̐؂ւĒ
  ȂĂ͂ȂȂ̂ł́A\܂B}EXJ[\킹邾
  ňӖoĂ悤ȗD݂̂̑mĂ܂AWindows98Ŏg
  邩ǂ͒肩ł͂ȂAliłB̍̓vOԂ
  Ƃ̂Ƃ낾ƕM҂͍lĂ܂B[U[Rɋ@
  \g邱ƂłȂɑSĎł܂ȂāA܂
  ȂłB
  AUNIXȂAEmacsƂ\I肪āAHTML낤Agroff낤
  A`ꂽԂŎƂł܂BAuvŎg
  BƂ@\gȂȒPɂł܂BWindows̐EȂ獂Ȏs
  ̃\tgɗȂ΂ȂȂǖʂłAvOmǂ(shell
  scriptĂ݂΂悭킩)AłłEmacsĂAƂ
  Pɖ肪܂BvOԂ̋Ƃ̂ɏdv
  ̂킩ł傤B

  ̕^ĂꂽATagami.KAKURUMIɑϊ
  ӂĂ܂BTagami.Kɂ́At[ȉpaTf[^݂̑Ɗp@
  ĂAKURUMIɂ́Agene95 UNIXŎg߂̕
  Ă܂B2l̏Ȃ΁A̕͏܂łB

  ̕ɂvOXNvg̓o[WAbvĂ\
  Bo[WAbvAȂׂɔfĂłB

  ̕͏߂ JF ɏôłBLqeɊԈႢȂǂƂA
  ǂ肵Ƃɂ͕M҂Ƀ[Œm点Ă΍KłB
  {胁[͏oĂ\܂񂪁A/dev/null ɑł傤i΁j

  7.  

     PONPPO(y)
        Mn

     PONPQW()
        elispvŐAEŉpǂނ߂̐ݒ̒ǉ

     PONPQX()
        JFɃhtgƂēe

     PONPQPU()
        pY̋LqBvOǂB

     PPNRPX()
        gene.el ǁB

  8.  XNvgȂ

  #begin dic_look
  #!/usr/bin/perl
  ### dic_look     pΉ script
  ###  p̂Ƃp猴`𒲂ׂB܂Aꓪ̑啶ɂΉB
  ###  ɁA̎łłBʂ sort ꂽԂŕ\B
  ###  look R}hƒuĂB
  ###  gp@ : dic_look word
  ###
  ###  Ver. 1.0  97/11/28  2ԂŊ
  ###

  ##t@C̃pXƃt@C
  #$dic_path = '/usr/local/lib/dictionary';
  #@dic_file = ("$ENV{HOME}/words",'ej.dic');
  #@dic_file = ('gene.dic2','term95.dic','papadic5.dic');
  $dic_path = '/usr/dict';
  @dic_file = ('./eijirou.sdic');

  ###------------------------------------------------------------------
  ## main code
  #&debug;
  ($word=shift) || die "usage: dic_look word\n";
  #

  if($word =~ /^[0-9a-zA-Z]/){
      foreach $dic (@dic_file){
          &look_words($dic,&word_conv($word),&word_conv(&capital($word)));
      }
  #    print sort rule @output;
      print  @output;
  }else{
      chdir $dic_path;
      system('grep',$word,@dic_file);
  }

  ## sub routines

  sub rule{
      ##s̉p sort
      ($aa) = $a =~ /^([a-zA-Z ]+)/;
      ($bb) = $b =~ /^([a-zA-Z ]+)/;
      $aa cmp $bb;
  }

  sub look ($$){
      ##PŌ
      my $dic=shift; my $word=shift;
      ($word eq '') && return;
      chdir $dic_path;
  #    open(LOOK,qq?look -f "$word" $dic |?);
      open(LOOK,qq?sass "<K>$word</K>" $dic ; sass "<K>$word " $dic   |?);

      while(<LOOK>){
          s/^.+<K>(.+)<\/K>(.+)$/\1 :\2/;
          push (@output,$_);
          # push (@output,$_) if /^$word\b/i;
      }
      close LOOK;
  }

  sub look_words ($@){
      ##̒P
      my $dic=shift; my @words=@_;
      foreach (@words){
          &look($dic,$_);
      }
  }

  sub capital ($){
      ##擪啶Ȃ珬ɕς̂AłȂ '' Ԃ
      local $_ = shift;
      if (/^[A-Z]/){
          tr/A-Z/a-z/;
          return $_;
      }else{
          return '';
      }
  }
  sub word_conv ($){
      ##p`猴`Ƃčlׂ̂ĂƎgԂ
      local $_ = shift;
      ($_ eq '') && return '';

      $a='[a-zA-Z]'; $x='[aiueo]'; $y='[^aiueo]';

      #rAŏ㋉
      /^($a+(.))\2e(r|st)$/g && return ($&,"$1","$1$2");
      /^($a+)ie(r|st)$/g     && return ($&,"$1y","$1ie");
      /^($a+)e(r|st)$/g      && return ($&,"$1","$1e");

      #3PA`
      /^($a+)ses$/g   && return ($&,"$1s","$1se");
      /^($a+)xes$/g   && return ($&,"$1x","$1xe");
      /^($a+)shes$/g  && return ($&,"$1sh","$1she");
      /^($a+)ches$/g  && return ($&,"$1ch","$1che");
      /^($a+)zes$/g   && return ($&,"$1z","$1ze");
      /^($a+)ies$/g   && return ($&,"$1y","$1ie");
      #/^($a+$y)ies$/g && return ($&,"$1y","$1ie");
      #/^($a+$y)oes$/g && return ($&,"$1o","$1oe");
      /^($a+)oes$/g   && return ($&,"$1o","$1oe");
      /^($a+)ves$/g   && return ($&,"$1f","$1fe","$1ve");
      /^($a+)s$/g     && return ($&,"$1");

      #ߋ`Aߋ
      /^($a+)ied$/g     && return ($&,"$1y","$1ie","$1i");
      #/^($a+$y)ied$/g  && return ($&,"$1y","$1ie","$1i");
      /^($a+(.))\2ed$/g && return ($&,"$1","$1$2","$1$2e");
      /^($a+c)ked$/g    && return ($&,"$1","$1k","$1ke");
      /^($a+)ed$/g      && return ($&,"$1","$1e");

      #ݕ
      /^($a+(.))\2ing$/ && return ($&,"$1","$1$2","$1$2e");
      /^($a+c)king$/    && return ($&,"$1","$1k","$1ke");
      /^($a+)ying$/     && return ($&,"$1y","$1ye","$1ie");
      /^($a+)ing$/      && return ($&,"$1","$1e");

      # ly
      /^($a+)ly$/      && return ($&,"$1");

      #Ƃƌ`̂Ƃ
      $_;
  }

  sub debug {
      while(<DATA>){
          chomp;
          print join(',',&word_conv($_)),"\n";
      }
      exit;
  }

  __END__
  #end dic_look
  #begin dictionary
  #!/bin/sh
  while true;
  do
          echo -n "dictionary: ";
          read word;
          if test -z "$word"; then exit; fi
              dic_look "$word"
          echo;
  done;
  #end dictionary
  ;begin dictionary.el
  (defvar gene-window-height 5
    "*gene*EBhE̍s")
  (defvar gene-buffer " *GENE*"
    "gene \obt@")
  (defvar gene-frame-alist
    '((width . 70)                        ;\
      (height . 30)                       ;\s
      (menubar . nil)                  ;~jobt@Ȃ
      (title . "GENE dictionary")         ;^Cg
      )
    "gene \t[̃p[^(XgpL).
  DȂ悤ɏĂB")

  (setq truncate-partial-width-windows nil)

  (if (boundp 'MULE)
      (define-program-coding-system
        nil "dic_look" (cons *euc-japan*unix *euc-japan*unix))
    ;; in Emacs20
    (set-language-environment "Japanese")
    (set-terminal-coding-system 'euc-japan)
    (set-default-coding-systems 'euc-japan))

  (defvar gene-mode-map nil
    "gene\obt@ŎgL[}bv")
  (cond ((not gene-mode-map)
         (setq gene-mode-map (make-sparse-keymap))
         (let ((i ?a))
           (while (<= i ?z)
             (define-key gene-mode-map (char-to-string i) 'gene-string-in-gene-buffer)
             (setq i (1+ i))))
         (define-key gene-mode-map "\C-m" 'gene-insert-to-text)))

  (defun gene-mode ()
    "gene W[[h"
    (setq major-mode 'gene-mode
          mode-name  "GENE")
    (use-local-map gene-mode-map)
    (run-hooks 'gene-mode-hook))

  (defun gene-string-1 (string)
    "pP͂AӖ\(C^[tF[X1)
     KȃL[Ɋ蓖ĂĂB"
    (interactive "sEnglish word: ")
    (let (current-window)
      (setq current-window (selected-window))
      (save-excursion
        (set-buffer (get-buffer-create gene-buffer))
        (if (not (eq major-mode 'gene-mode)) (gene-mode))
        (erase-buffer)
        (call-process "dic_look" nil t nil string )
        (select-window (display-buffer gene-buffer))
        (shrink-window (- (window-height) gene-window-height))
        )
      (select-window current-window)
      )
    )

  (defun gene-display-buffer ()
    "gene obt@\"
      (if (and (>= (window-width) 82))
            (progn
              (split-window-horizontally 80)
              (other-window 1)
              (switch-to-buffer gene-buffer)
              (other-window -1)
              (display-buffer gene-buffer)
              )))

  (defun gene-string (string)
    "pP({)͂AӖ\(C^[tF[X2)
     {͂Ƃɂ́AgrepB
     KȃL[Ɋ蓖ĂĂB"
    (interactive "sEnglish(Japanese) word: ")
    (let (current-window)
      (setq current-window (selected-window))
      (save-excursion
        (set-buffer (get-buffer-create gene-buffer))
        (if (not (eq major-mode 'gene-mode)) (gene-mode))
        (erase-buffer)
        (call-process "dic_look" nil t nil string )
        (goto-char (point-min))
        (if (not (get-buffer-window " *GENE*" t)) (gene-display-buffer))
  ;      (set-buffer (get-buffer gene-buffer))
        )
      )
    )

  (defun gene-insert-to-text ()
    "̓e1s̃EBhẼobt@ɏo"
    (interactive)
    (beginning-of-line)
    (let* ((beg (point))
          (end (progn (next-line 1) (point)))
          (str (buffer-substring-no-properties beg end)))
      (other-window -1)
      (insert str)))

  (defun gene-word (ARG)
    "|Cg̑ỎpP̈Ӗ\BKȃL[Ɋ蓖ĂĂ"
    (interactive "p")
    (if (null ARG) 1)
    (save-excursion
      (if (not (looking-at "\\<"))
          (forward-word -1))
      (setq beg (point))
      (forward-word ARG)
      (setq end (point)))
    (gene-string (downcase (buffer-substring-no-properties beg end))))

  (defun gene-word2 ()
    "Print Japanese meaning of word at or before point."
    (interactive)
    (save-excursion
      (setq end (point))
      (if (not (looking-at "\\<"))
          (forward-word -1))
      (setq beg (point))
    (gene-string (downcase (buffer-substring beg end)))))
  ;; utility function
  (defun gene-string-in-gene-buffer ()
    "gene-mode ł́AAt@xbg͂Ƃ gene-string NB"
    (interactive)
    (gene-string (read-string "English word: " (this-command-keys))))

  ;end dictionary.el

