<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">%%
%% jIEEEtran.bst
%% BibTeX Bibliography Style file for IEEE Journals and Conferences (unsorted) for Japanese users
%% 
%% Version 0.19 (2023/01/26)
%% 
%% Copyright (c) 2020-2023 Haruki Ejiri and Yoshi Ri 
%% 
%% Original starting code base and algorithms obtained from the output of
%% Patrick W. Daly's makebst package as well as from prior versions of
%% IEEE BibTeX styles:
%% 
%% 1. Howard Trickey and Oren Patashnik's ieeetr.bst  (1985/1988)
%% 2. Silvano Balemi and Richard H. Roy's IEEEbib.bst (1993)
%% 3. Michael Shell's IEEEtran.bst (2003-2015)
%% 
%% Support sites:
%% http://www.michaelshell.org/tex/ieeetran/
%% http://www.ctan.org/pkg/ieeetran
%% and/or
%% http://www.ieee.org/
%% and/or
%% https://github.com/ehki/jIEEEtran/
%% 
%% For use with pbibtex version 0.99d-j0.33 or later
%%
%% This is a numerical citation style.
%% 
%%*************************************************************************
%% Legal Notice:
%% This code is offered as-is without any warranty either expressed or
%% implied; without even the implied warranty of MERCHANTABILITY or
%% FITNESS FOR A PARTICULAR PURPOSE! 
%% User assumes all risk.
%% In no event shall the IEEE/IEEJ or any contributor to this code be liable for
%% any damages or losses, including, but not limited to, incidental,
%% consequential, or any other damages, resulting from the use or misuse
%% of any information contained here.
%%
%% All comments are the opinions of their respective authors and are not
%% necessarily endorsed by the IEEE/IEEJ.
%%
%% The original version of this code, i.e. IEEEtran.bst by, Michael Shell
%% was distributed under the LaTeX Project Public License (LPPL)
%% ( http://www.latex-project.org/ ) version 1.3, and may be freely used,
%% distributed and modified. A copy of the LPPL, version 1.3, is included
%% in the base LaTeX documentation of all distributions of LaTeX released
%% 2003/12/01 or later.
%% Retain all contribution notices and credits.
%% ** Modified files should be clearly indicated as such, including  **
%% ** renaming them and changing author support contact information. **
%%*************************************************************************
%%
%% 譌･譛ｬ莠ｺ縺ｮ髮ｻ豌礼ｳｻLaTeX繝ｦ繝ｼ繧ｶ縺ｮ縺溘ａ縺ｮBibTeX繧ｹ繧ｿ繧､繝ｫ繝輔ぃ繧､繝ｫ縺ｧ縺吶よ悽繝輔ぃ繧､繝ｫ
%% 縺ｯIEEE蠖｢蠑上〒縺ｮ蠑慕畑繧ｹ繧ｿ繧､繝ｫ縺ｧ縲√が繝励す繝ｧ繝ｳ繧貞､画峩縺吶ｋ縺薙→縺ｧ髮ｻ豌怜ｭｦ莨壼ｽ｢蠑上∈
%% 縺ｨ螟画峩縺吶ｋ縺薙→縺悟庄閭ｽ縺ｧ縺吶�
%% 髮ｻ豌怜ｭｦ莨壼ｽ｢蠑上�IEEJtran.bst/IEEE蠖｢蠑上�jIEEEtran.bst縺ｨ繧ゅ↓髱槫�蠑上〒縺吶�
%% 繝輔ぃ繧､繝ｫ縺ｮ遐ｴ謳阪√ョ繝ｼ繧ｿ縺ｮ謳榊､ｱ縲∵悽繧ｳ繝ｼ繝峨ｒ菴ｿ逕ｨ縺励◆縺薙→縺ｫ繧医ｋ繝ｪ繧ｸ繧ｧ繧ｯ繝医↑縺ｩ
%% 縺�°縺ｪ繧句撫鬘後′逕溘§縺溷�ｴ蜷医〒繧ゆｽ懆�ｉ縺ｯ雋ｬ莉ｻ繧定ｲ�縺�％縺ｨ縺後〒縺阪∪縺帙ｓ縲�
%% 繧ｳ繝ｼ繝峨�GitHub荳翫〒髢狗匱縺励※縺�∪縺吶�縺ｧ縲∝撫鬘後′縺ゅｊ縺ｾ縺励◆繧迂ssue繧堤ｫ九※縲�
%% 繧ｳ繝溘ャ繝医ｒ縺励√�繝ｫ繝ｪ繧ｯ繧ｨ繧ｹ繝医ｒ謚輔￡縺ｦ縺上□縺輔ｋ縺ｨ螫峨＠縺�〒縺吶�
%%



%
% Terminal縺ｫ陦ｨ遉ｺ縺輔ｌ繧九Ο繧ｰ繝｡繝�そ繝ｼ繧ｸ縺ｮ繝輔ぃ繧､繝ｫ蜷阪ｄURL縺ｮ險ｭ螳�
%

FUNCTION{bst.file.name} { "jIEEEtran.bst" }
FUNCTION{bst.file.version} { "0.19" }
FUNCTION{bst.file.date} { "2023/01/26" }
FUNCTION{bst.file.website} { "https://github.com/ehki/jIEEEtran/" }
FUNCTION{bst.file.author} { "Haruki Ejiri and Yoshi Ri" }


%% 繧ｪ繝励す繝ｧ繝ｳ &amp; 險ｭ螳�

% 髮ｻ豌怜ｭｦ莨壼ｽ｢蠑上�蠑慕畑繝輔か繝ｼ繝槭ャ繝医ｒ菴ｿ逕ｨ縺吶ｋ縺九�險ｭ螳�
% #0 : IEEE繝輔か繝ｼ繝槭ャ繝医〒蠑慕畑縺吶ｋ縲�
%      譌･譛ｬ隱槭′蜷ｫ縺ｾ繧後ｋ繧ｨ繝ｳ繝医Μ縺ｧ縺ｯ縲∵律譛ｬ隱槭�荳崎�辟ｶ縺ｪ謇ｱ縺�ｒ隗｣豸医☆繧九�
%      譌･譛ｬ隱槭′蜷ｫ縺ｾ繧後↑縺�お繝ｳ繝医Μ縺ｧ縺ｯ縲´anguage繝輔ぅ繝ｼ繝ｫ繝峨�蜿悶ｊ謇ｱ縺�ｒ髯､縺�
%      繧ｪ繝ｪ繧ｸ繝翫Ν縺ｮIEEEtran.bst騾壹ｊ縺ｮ蜃ｺ蜉帙→縺ｪ繧九�
% #1 : 髮ｻ豌怜ｭｦ莨壹ヵ繧ｩ繝ｼ繝槭ャ繝医〒蠑慕畑縺吶ｋ縲�
%      譌･譛ｬ隱槭′蜷ｫ縺ｾ繧後ｋ繧ｨ繝ｳ繝医Μ繧ゅ∵律譛ｬ隱槭′蜷ｫ縺ｾ繧後↑縺�お繝ｳ繝医Μ繧ゅ�
%      蜈ｨ縺ｦ縺ｮ譁�鍵縺ｫ髮ｻ豌怜ｭｦ莨壼ｽ｢蠑上↓蜷医ｏ縺帙※蠑慕畑縺吶ｋ縲�
FUNCTION {use.ieej.setting} { #0 }


% 髮ｻ豌怜ｭｦ莨壼ｽ｢蠑上�蝣ｴ蜷医↓遏ｭ邵ｮ陦ｨ險倥ｒ縺吶ｋ縺九←縺�°縺ｮ險ｭ螳�
% #0 : 遏ｭ邵ｮ縺励↑縺�
% #1 : 遏ｭ邵ｮ縺吶ｋ
FUNCTION {default.use.ieej.abbrev} { #0 }


% 髮ｻ豌怜ｭｦ莨壼ｽ｢蠑上�逋ｺ陦悟ｹｴ縺ｮ謖�ｮ�
% default: {bbl.ieej.jp.year.pre} { "��" }
%          {bbl.ieej.jp.year.aft} { "��" }
%          {bbl.ieej.en.year.pre} { "(" }
%          {bbl.ieej.en.year.aft} { ")" }
FUNCTION {bbl.ieej.jp.year.pre} { "��" }
FUNCTION {bbl.ieej.jp.year.aft} { "��" }
FUNCTION {bbl.ieej.en.year.pre} { "(" }
FUNCTION {bbl.ieej.en.year.aft} { ")" }


% 髮ｻ豌怜ｭｦ莨壼ｽ｢蠑上↓縺翫＞縺ｦ縲∫匱陦悟ｹｴ縺ｮ蜑阪↓繧ｫ繝ｳ繝槭ｒ謇薙▽縺九�謖�ｮ�
% #0 : 謇薙◆縺ｪ縺�
% #1 : 謇薙▽
% default: { #0 }
FUNCTION {ieej.setting.comma.year.pre} { #0 }


% 髮ｻ豌怜ｭｦ莨壼ｽ｢蠑上↓縺翫＞縺ｦ縲∫匱陦悟ｹｴ縺ｮ蠕後↓繝斐Μ繧ｪ繝峨ｒ謇薙▽縺九�謖�ｮ�
% #0 : 謇薙◆縺ｪ縺�
% #1 : 謇薙▽
% default: { #0 }
FUNCTION {ieej.setting.punct.year.aft} { #0 }


% 髮ｻ豌怜ｭｦ莨壼ｽ｢蠑上↓縺翫＞縺ｦ縲∬恭隱槭�譖ｸ邀榊錐縺ｨ髮題ｪ悟錐繧弾mphasize縺吶ｋ縺九�謖�ｮ�
% #0 : emphasize 縺励↑縺�
% #1 : emphasize 縺吶ｋ
% default: {ieej.en.setting.emph.journal} { #1 }
%        : {ieej.en.setting.emph.booktitle} { #0 }
FUNCTION {ieej.en.setting.emph.journal} { #1 }
FUNCTION {ieej.en.setting.emph.booktitle} { #0 }


% 髮ｻ豌怜ｭｦ莨壼ｽ｢蠑上↓縺翫＞縺ｦ縲∵律譛ｬ隱槭�譖ｸ邀榊錐縺ｨ髮題ｪ悟錐繧弾mphasize縺吶ｋ縺九�謖�ｮ�
% #0 : emphasize 縺励↑縺�
% #1 : emphasize 縺吶ｋ
% default: {ieej.jp.setting.emph.journal} { #0 }
%        : {ieej.jp.setting.emph.booktitle} { #0 }
FUNCTION {ieej.jp.setting.emph.journal} { #0 }
FUNCTION {ieej.jp.setting.emph.booktitle} { #0 }


% IEEE蠖｢蠑上↓縺翫＞縺ｦ縲∵律譛ｬ隱槭�譖ｸ邀榊錐縺ｨ髮題ｪ悟錐繧弾mphasize縺吶ｋ縺九�謖�ｮ�
% #0 : emphasize 縺励↑縺�
% #1 : emphasize 縺吶ｋ
% default: { #0 }
FUNCTION {ieee.jp.setting.emph.title} { #0 }


% 髮ｻ豌怜ｭｦ莨壼ｽ｢蠑上↓縺翫＞縺ｦ縲√ち繧､繝医Ν蜑榊ｾ後�譁�ｭ励ｒ謖�ｮ�
% default: {bbl.ieej.jp.title.pre} { "縲�" }
%          {bbl.ieej.jp.title.aft} { "縲�" }
%          {bbl.ieej.en.title.pre} { "``" }
%          {bbl.ieej.en.title.aft} { "''" }
FUNCTION {bbl.ieej.jp.title.pre} { "縲�" }
FUNCTION {bbl.ieej.jp.title.aft} { "縲�" }
FUNCTION {bbl.ieej.en.title.pre} { "``" }
FUNCTION {bbl.ieej.en.title.aft} { "''" }


% 髮ｻ豌怜ｭｦ莨壼ｽ｢蠑丞ｽ｢蠑上↓縺翫＞縺ｦ縲∬送閠�→繧ｿ繧､繝医Ν縺ｮ髢薙�譁�ｭ励�謖�ｮ�
% default: {bbl.ieej.jp.author.title.sep.F} { "��" }
%          {bbl.ieej.en.author.title.sep.F} { ":" }
%          {bbl.ieej.jp.author.title.sep.A} { "��" }
%          {bbl.ieej.en.author.title.sep.A} { "," }
FUNCTION {bbl.ieej.jp.author.title.sep.F} { "��" }
FUNCTION {bbl.ieej.en.author.title.sep.F} { ":" }
FUNCTION {bbl.ieej.jp.author.title.sep.A} { "��" }
FUNCTION {bbl.ieej.en.author.title.sep.A} { "," }


% 譌･譛ｬ隱樊枚迪ｮ縺ｫ縺翫＞縺ｦ縲」ol. 縺ｮ陦ｨ險俶ｳ輔�險ｭ螳�
% .F縺ｯ髱樒怐逡･陦ｨ險倥�.A縺ｯ逵∫払陦ｨ險�
% default: {bbl.ieej.vol.F} { "Vol." }
%          {bbl.ieej.vol.A} { "\textbf{" }
FUNCTION {bbl.ieej.vol.F} { "Vol." }
FUNCTION {bbl.ieej.vol.A} { "\textbf{" }


% 譌･譛ｬ隱樊枚迪ｮ縺ｫ縺翫＞縺ｦ縲」ol. 繧定ｨ倩ｼ峨＠縺溷ｾ後�
% 繧ｫ繝ｳ繝槭�蜑阪↓險倩ｼ峨☆繧区枚蟄怜�縺ｮ謖�ｮ�
% .F縺ｯ髱樒怐逡･陦ｨ險倥�.A縺ｯ逵∫払陦ｨ險�
% default: {bbl.ieej.vol.aft.F} { "" }
%          {bbl.ieej.vol.aft.A} { "}" }
FUNCTION {bbl.ieej.vol.aft.F} { "" }
FUNCTION {bbl.ieej.vol.aft.A} { "}" }


% 譌･譛ｬ隱樊枚迪ｮ縺ｫ縺翫＞縺ｦ縲］o. 縺ｮ陦ｨ險俶ｳ輔�險ｭ螳�
% .F縺ｯ髱樒怐逡･陦ｨ險倥�.A縺ｯ逵∫払陦ｨ險�
% default: {bbl.ieej.no.F} { "No." }
%          {bbl.ieej.no.A} { "(" }
FUNCTION {bbl.ieej.no.F} { "No." }
FUNCTION {bbl.ieej.no.A} { "(" }


% 譌･譛ｬ隱樊枚迪ｮ縺ｫ縺翫＞縺ｦ縲］o. 繧定ｨ倩ｼ峨＠縺溷ｾ後�
% 繧ｫ繝ｳ繝槭�蜑阪↓險倩ｼ峨☆繧区枚蟄怜�縺ｮ謖�ｮ�
% .F縺ｯ髱樒怐逡･陦ｨ險倥�.A縺ｯ逵∫払陦ｨ險�
% default: {bbl.ieej.no.aft.F} { "" }
%          {bbl.ieej.no.aft.A} { ")" }
FUNCTION {bbl.ieej.no.aft.F} { "" }
FUNCTION {bbl.ieej.no.aft.A} { ")" }


% 譌･譛ｬ隱樊枚迪ｮ縺ｫ縺翫￠繧九｝p. 縺ｮ陦ｨ險俶ｳ輔�險ｭ螳壹�
% .F縺ｯ髱樒怐逡･陦ｨ險倥�.A縺ｯ逵∫払陦ｨ險�
% default: {bbl.ieej.pages.F} { "pp." }
%          {bbl.ieej.pages.A} { "" }
FUNCTION {bbl.ieej.pages.F} { "pp." }
FUNCTION {bbl.ieej.pages.A} { "" }


% 譌･譛ｬ隱樊枚迪ｮ縺ｫ縺翫￠繧九｝. 縺ｮ陦ｨ險俶ｳ輔�險ｭ螳壹�
% .F縺ｯ髱樒怐逡･陦ｨ險倥�.A縺ｯ逵∫払陦ｨ險�
% default: {bbl.ieej.page.F} { "p." }
%          {bbl.ieej.page.A} { "" }
FUNCTION {bbl.ieej.page.F} { "p." }
FUNCTION {bbl.ieej.page.A} { "" }


% 譌･譛ｬ隱槭→闍ｱ隱槭� etal 縺ｮ陦ｨ險倥�險ｭ螳�
% default: {bbl.etal.jp} { "莉�" }
%          {bbl.etal.en} { "et~al." }
FUNCTION {bbl.etal.jp} { "莉�" }
FUNCTION {bbl.etal.en} { "et~al." }


% 髮ｻ豌怜ｭｦ莨壼ｽ｢蠑上↓縺翫＞縺ｦ縲∵律譛ｬ隱�/闍ｱ隱樊枚迪ｮ縺ｮ遶�逡ｪ蜿ｷ蜑榊ｾ梧枚蟄励√メ繝ｫ繝(~)繧剃ｽｿ逕ｨ縺吶ｋ縺九�險ｭ螳�
% default: {bbl.ieej.jp.chapter.pre} { "隨ｬ" }
%          {bbl.ieej.jp.chapter.aft} { "遶�" }
%          {bbl.ieej.jp.chapter.tie.pre} { #0 }
%          {bbl.ieej.jp.chapter.tie.aft} { #0 }
%          {bbl.ieej.en.chapter.pre} { "Chap." }
%          {bbl.ieej.en.chapter.aft} { "" }
%          {bbl.ieej.en.chapter.tie.pre} { #0 }
%          {bbl.ieej.en.chapter.tie.aft} { #0 }
FUNCTION {bbl.ieej.jp.chapter.pre} { "隨ｬ" }
FUNCTION {bbl.ieej.jp.chapter.aft} { "遶�" }
FUNCTION {bbl.ieej.jp.chapter.tie.pre} { #0 } % 遶�逡ｪ蜿ｷ蜑肴枚蟄励→遶�逡ｪ蜿ｷ縺ｮ髢薙↓繝√Ν繝繧呈諺蜈･縺励↑縺�
FUNCTION {bbl.ieej.jp.chapter.tie.aft} { #0 } % 遶�逡ｪ蜿ｷ縺ｨ遶�逡ｪ蜿ｷ蠕梧枚蟄励→縺ｮ髢薙↓繝√Ν繝繧呈諺蜈･縺励↑縺�
FUNCTION {bbl.ieej.en.chapter.pre} { "Chap." }
FUNCTION {bbl.ieej.en.chapter.aft} { "" }
FUNCTION {bbl.ieej.en.chapter.tie.pre} { #0 } % 遶�逡ｪ蜿ｷ蜑肴枚蟄励→遶�逡ｪ蜿ｷ縺ｮ髢薙↓繝√Ν繝繧呈諺蜈･縺吶ｋ
FUNCTION {bbl.ieej.en.chapter.tie.aft} { #0 } % 遶�逡ｪ蜿ｷ縺ｨ遶�逡ｪ蜿ｷ蠕梧枚蟄励→縺ｮ髢薙↓繝√Ν繝繧呈諺蜈･縺励↑縺�


% 譌･譛ｬ隱樊枚迪ｮ縺ｫ縺翫＞縺ｦ縲∬送閠�俣縺ｮ莉募�繧頑枚蟄励�險ｭ螳�
% default: {bbl.ieej.jp.author.sep} { "繝ｻ" }
%          {bbl.ieej.en.author.sep} { ", " }
FUNCTION {bbl.ieej.jp.author.sep} { "繝ｻ" }
FUNCTION {bbl.ieej.en.author.sep} { ", " }


% 髮ｻ豌怜ｭｦ莨壼ｽ｢蠑上↓縺翫＞縺ｦ縲∫匱陦悟ｹｴ縺ｨ逋ｺ陦梧怦縺ｮ蛹ｺ蛻�ｊ譁�ｭ励�謖�ｮ�
% default: { "-" }
FUNCTION {bbl.ieej.year.month.sep} { "-" }


% 髮ｻ豌怜ｭｦ莨壼ｽ｢蠑上↓縺翫＞縺ｦ縲∫匱陦梧怦縺ｮ陦ｨ遉ｺ蠖｢蠑上�謖�ｮ�
% #0 : "1", "2", ..., "12" 縺ｮ繧医≧縺ｫ謨ｰ蟄励〒陦ｨ遉ｺ
% #1 : "Jan", "Feb.", ..., "Dec." 縺ｮ繧医≧縺ｫ繧｢繝ｫ繝輔ぃ繝吶ャ繝医〒陦ｨ遉ｺ
% default: { #0 }
FUNCTION {format.month.ieej} { #0 }


% IEEE蠖｢蠑上↓縺翫＞縺ｦ縲∫匱陦梧怦縺ｮ陦ｨ遉ｺ蠖｢蠑上�謖�ｮ�
% #0 : "1", "2", ..., "12" 縺ｮ繧医≧縺ｫ謨ｰ蟄励〒陦ｨ遉ｺ
% #1 : "Jan", "Feb.", ..., "Dec." 縺ｮ繧医≧縺ｫ繧｢繝ｫ繝輔ぃ繝吶ャ繝医〒陦ｨ遉ｺ
% default: { #1 }
FUNCTION {format.month.ieee} { #1 }


% 髮ｻ豌怜ｭｦ莨壼ｽ｢蠑上↓縺翫＞縺ｦ縲�
% 縲梧焔豕柊縺ｨ謇区ｳ稗縲√←縺｡繧峨′豁｣縺励＞縺ｮ縺�?縲�
% "Method A and B - Which is correct?"
% 縺ｮ繧医≧縺ｫ縲�?繧�.縺ｪ縺ｩ譁�玄蛻�ｊ譁�ｭ励′繧ｿ繧､繝医Ν譛蠕後↓縺阪◆蝣ｴ蜷医〒繧�
% 縲梧焔豕柊縺ｨ謇区ｳ稗縲√←縺｡繧峨′豁｣縺励＞縺ｮ縺�?縲搾ｼ悟ｭｦ莨壼錐
% "Method A and B - Which is correct?", Journal title
% 縺ｮ繧医≧縺ｫ"縺ｮ蠕後↓繧ｫ繝ｳ繝槭ｒ謇薙▽縺九�險ｭ螳�
% #0: 繧ｫ繝ｳ繝槭ｒ謇薙◆縺ｪ縺�, #1: 繧ｫ繝ｳ繝槭ｒ謇薙▽
% default: { #1 }
FUNCTION { bbl.ieej.force.punct.aft.quote } { #1 }


% language縺ｫJapanese繧Ёrench縺ｮ謖�ｮ壹′縺ゅｋ蝣ｴ蜷医↓
% (in Language)繧定｡ｨ險倥☆繧九°縺ｮ險ｭ螳�
% #0 險隱櫁｡ｨ險倥＠縺ｪ縺�
% #1 IEEE-Reference-Guide縺ｮ騾壹ｊ縺ｫ險隱櫁｡ｨ險倥☆繧�
%    https://ieeeauthorcenter.ieee.org/wp-content/uploads/IEEE-Reference-Guide.pdf
% #2 譁�鍵譛ｫ蟆ｾ縺ｫ險隱櫁｡ｨ險倥☆繧�
% default : {bbl.format.language.ieej} { #2 }
%           {bbl.format.language.ieee} { #1 }
FUNCTION {bbl.format.language.ieej} { #2 }
FUNCTION {bbl.format.language.ieee} { #1 }
FUNCTION {bbl.format.language}
{ use.ieej.setting #1 =
    { bbl.format.language.ieej }
    { bbl.format.language.ieee }
  if$
}


% language陦ｨ險倥�蠕後↓繝斐Μ繧ｪ繝峨ｒ謇薙▽縺九�險ｭ螳�
% default : { #1 } % for jIEEEtran.bst (繝�ヵ繧ｩ繝ｫ繝磯壹ｊ縺ｧ蠑ｷ蛻ｶ縺励↑縺�)
%           { #0 } % for IEEJtran.bst (繝斐Μ繧ｪ繝峨ｒ蠑ｷ蛻ｶ逧�↓謇薙◆縺帙↑縺�)
FUNCTION {bbl.format.language.punct.ieej} { #0 }
FUNCTION {bbl.format.language.punct.ieee} { #1 }
FUNCTION {bbl.format.language.punct}
{ use.ieej.setting #1 =
    { bbl.format.language.punct.ieej }
    { bbl.format.language.punct.ieee }
  if$
}


% select.language髢｢謨ｰ繧堤畑縺�※繧ｿ繧､繝医Ν繧ｸ繝｣繝ｼ繝翫Ν蜷阪↓
% \BIBforeignlanguage{Japanese}
% 縺ｪ縺ｩ縺ｮhyphenation險ｭ螳壹�蜃ｦ逅�ｒ陦後≧縺九�險ｭ螳壹�
% { #1 } : hyphenation險ｭ螳壹ｒ陦後≧(險ｭ螳壹＠縺ｦ縺�↑縺�→WARNING縺悟�繧九�
% { #0 } : hyphenation險ｭ螳壹ｒ陦後ｏ縺ｪ縺�
% default : { #0 }
FUNCTION {bbl.use.select.language} { #0 }


% URL縺ｮ陦ｨ險倥ｒ縺吶ｋ縺九←縺�°縺ｮ險ｭ螳�
% default : {default.is.use.url.ieej} {#0} 髮ｻ豌怜ｭｦ莨壼ｽ｢蠑上〒縺ｯURL繧呈嶌縺九↑縺�
%           {default.is.use.url.ieee} {#1} IEEE蠖｢蠑上〒縺ｯURL縺後≠繧後�譖ｸ縺�
FUNCTION {default.is.use.url.ieej} {#0}
FUNCTION {default.is.use.url.ieee} {#1}


% 蜷御ｸ闡苓��譁�鍵縺碁｣邯壹＠縺溷�ｴ蜷医↓闡苓�錐繧帝聞繝繝�す繝･縺ｧ莉｣逕ｨ縺吶ｋ縺九�險ｭ螳�
% 髮ｻ豌怜ｭｦ莨壼ｽ｢蠑上〒縺ｯ髟ｷ繝繝�す繝･縺ｧ莉｣逕ｨ縺ｯ縺励↑縺�
% IEEE蠖｢蠑上〒縺ｯ髟ｷ繝繝�す繝･縺ｧ莉｣逕ｨ縺吶ｋ
% default : { default.is.dash.repeated.names.ieej } { #0 }
%           { default.is.dash.repeated.names.ieee } { #1 }
FUNCTION { default.is.dash.repeated.names.ieej } { #0 }
FUNCTION { default.is.dash.repeated.names.ieee } { #1 }


% IEEEtran.bst縺ｫ蜈�°繧峨≠繧九が繝励す繝ｧ繝ｳ鄒､

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% DEFAULTS FOR THE CONTROLS OF THE BST STYLE %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% These are the defaults for the user adjustable controls. The values used
% here can be overridden by the user via IEEEtranBSTCTL entry type.

% NOTE: The recommended LaTeX command to invoke a control entry type is:
% 
%\makeatletter
%\def\bstctlcite{\@ifnextchar[{\@bstctlcite}{\@bstctlcite[@auxout]}}
%\def\@bstctlcite[#1]#2{\@bsphack
%  \@for\@citeb:=#2\do{%
%    \edef\@citeb{\expandafter\@firstofone\@citeb}%
%    \if@filesw\immediate\write\csname #1\endcsname{\string\citation{\@citeb}}\fi}%
%  \@esphack}
%\makeatother
%
% It is called at the start of the document, before the first \cite, like:
% \bstctlcite{IEEEexample:BSTcontrol}
%
% IEEEtran.cls V1.6 and later does provide this command.


% #0 turns off the display of the number for articles.
% #1 enables
FUNCTION {default.is.use.number.for.article} { #1 }


% #0 turns off the display of the paper and type fields in @inproceedings.
% #1 enables
FUNCTION {default.is.use.paper} { #1 }


% #0 turns off the display of urls
% #1 enables
FUNCTION {default.is.use.url}
{ use.ieej.setting #1 =
    { default.is.use.url.ieej }
    { default.is.use.url.ieee }
  if$
}


% #0 turns off the forced use of "et al."
% #1 enables
FUNCTION {default.is.forced.et.al}
{ % Note: "and" function is not declared yet
  use.ieej.setting #1 =
    { default.use.ieej.abbrev #1 =
        { #1 }
        { #0 }
      if$
    }
    { #0 }
  if$
}


% The maximum number of names that can be present beyond which an "et al."
% usage is forced. Be sure that num.names.shown.with.forced.et.al (below)
% is not greater than this value!
% Note: There are many instances of references in IEEE journals which have
% a very large number of authors as well as instances in which "et al." is
% used profusely.
FUNCTION {default.max.num.names.before.forced.et.al}
{ % Note: "and" function is not declared yet
  use.ieej.setting #1 = 
    { default.use.ieej.abbrev #1 =
        { #2 } % two authors are shown without et al.
        { #10 }
      if$
    }
    { #10 }
  if$
}


% The number of names that will be shown with a forced "et al.".
% Must be less than or equal to max.num.names.before.forced.et.al
FUNCTION {default.num.names.shown.with.forced.et.al} { #1 }


% #0 turns off the alternate interword spacing for entries with URLs.
% #1 enables
FUNCTION {default.is.use.alt.interword.spacing} { #1 }


% If alternate interword spacing for entries with URLs is enabled, this is
% the interword spacing stretch factor that will be used. For example, the
% default "4" here means that the interword spacing in entries with URLs can
% stretch to four times normal. Does not have to be an integer. Note that
% the value specified here can be overridden by the user in their LaTeX
% code via a command such as: 
% "\providecommand\BIBentryALTinterwordstretchfactor{1.5}" in addition to
% that via the IEEEtranBSTCTL entry type.
FUNCTION {default.ALTinterwordstretchfactor} { "4" }


% #0 turns off the "dashification" of repeated (i.e., identical to those
% of the previous entry) names. The IEEE normally does this.
% #1 enables
FUNCTION {default.is.dash.repeated.names} {
  use.ieej.setting #1 =
    { default.is.dash.repeated.names.ieej }
    { default.is.dash.repeated.names.ieee }
  if$
}


% The default name format control string. %change based on japanese
FUNCTION {default.name.format.en.string}{ "{f.~}{vv~}{ll}{, jj}" }
FUNCTION {default.name.format.jp.string}{ "{ff}~{vv~}{ll}{, jj}" }


% The default LaTeX font command for the names.
FUNCTION {default.name.latex.cmd}{ "" }


% The default URL prefix.
FUNCTION {default.name.url.prefix}{ "[Online]. Available:" }


% Other controls that cannot be accessed via IEEEtranBSTCTL entry type.

% #0 turns off the terminal startup banner/completed message so as to
% operate more quietly.
% #1 enables
FUNCTION {is.print.banners.to.terminal} { #1 }




%%%%%%%%%%%%
%% BANNER %%
%%%%%%%%%%%%

FUNCTION {banner.message}
{ is.print.banners.to.terminal
     { "-- " bst.file.name * " " * bst.file.version *
       " (" * bst.file.date * ") " * "by " * bst.file.author * "." *
       top$
       "-- " bst.file.website *
       top$
       "-- See the " quote$ * "IEEEtran_bst_HOWTO.pdf" * quote$ *
       " manual for usage information for IEEEtran.bst." *
       top$
       "-- See also " quote$ * "howtouse.pdf" * quote$ *
       " manual for usase information for jIEEEtran.bst and IEEJtran.bst." *
       top$
     }
     { skip$ }
   if$
}

FUNCTION {completed.message}
{ is.print.banners.to.terminal
     { ""
       top$
       "Done."
       top$
     }
     { skip$ }
   if$
}




%%%%%%%%%%%%%%%%%%%%%%
%% STRING CONSTANTS %%
%%%%%%%%%%%%%%%%%%%%%%
FUNCTION {bbl.a}{ "A" }
FUNCTION {bbl.an}{ "An" }
FUNCTION {bbl.and}{ "and" }
%FUNCTION {bbl.etal}{ "et~al." }
FUNCTION {bbl.editors}{ "eds." }
FUNCTION {bbl.editor}{ "ed." }
FUNCTION {bbl.edition}{ "ed." }
FUNCTION {bbl.volume}{ "vol." }
FUNCTION {bbl.of}{ "of" }
FUNCTION {bbl.number}{ "no." }
FUNCTION {bbl.in}{ "in" }
FUNCTION {bbl.pages}{ "pp." }
FUNCTION {bbl.page}{ "p." }
FUNCTION {bbl.chapter}{ "ch." }
FUNCTION {bbl.paper}{ "paper" }
FUNCTION {bbl.part}{ "pt." }
FUNCTION {bbl.patent}{ "Patent" }
FUNCTION {bbl.patentUS}{ "U.S." }
FUNCTION {bbl.revision}{ "Rev." }
FUNCTION {bbl.series}{ "ser." }
FUNCTION {bbl.standard}{ "Std." }
FUNCTION {bbl.techrep}{ "Tech. Rep." }
FUNCTION {bbl.the}{ "The" }
FUNCTION {bbl.mthesis}{ "Master's thesis" }
FUNCTION {bbl.phdthesis}{ "Ph.D. dissertation" }
FUNCTION {bbl.st}{ "st" }
FUNCTION {bbl.nd}{ "nd" }
FUNCTION {bbl.rd}{ "rd" }
FUNCTION {bbl.th}{ "th" }


% This is the LaTeX spacer that is used when a larger than normal space
% is called for (such as just before the address:publisher).
FUNCTION {large.space} { "\hskip 1em plus 0.5em minus 0.4em\relax " }

% The LaTeX code for dashes that are used to represent repeated names.
% Note: Some older IEEE journals used something like
% "\rule{0.275in}{0.5pt}\," which is fairly thick and runs right along
% the baseline. However, the IEEE now uses a thinner, above baseline,
% six dash long sequence.
FUNCTION {repeated.name.dashes} { "------" }



%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% PREDEFINED STRING MACROS %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

MACRO {jan} {"Jan."}
MACRO {feb} {"Feb."}
MACRO {mar} {"Mar."}
MACRO {apr} {"Apr."}
MACRO {may} {"May"}
MACRO {jun} {"Jun."}
MACRO {jul} {"Jul."}
MACRO {aug} {"Aug."}
MACRO {sep} {"Sep."}
MACRO {oct} {"Oct."}
MACRO {nov} {"Nov."}
MACRO {dec} {"Dec."}



%%%%%%%%%%%%%%%%%%
%% ENTRY FIELDS %%
%%%%%%%%%%%%%%%%%%

ENTRY
  { address
    assignee
    author
    booktitle
    chapter
    day
    dayfiled
    edition
    editor
    howpublished
    institution
    intype
    journal
    key
    language
    month
    monthfiled
    nationality
    note
    number
    organization
    pages
    paper
    publisher
    school
    series
    revision
    title
    type
    url
    volume
    year
    yearfiled
    CTLuse_article_number
    CTLuse_paper
    CTLuse_url
    CTLuse_forced_etal
    CTLmax_names_forced_etal
    CTLnames_show_etal
    CTLuse_alt_spacing
    CTLalt_stretch_factor
    CTLdash_repeated_names
    CTLname_format_string
    CTLname_latex_cmd
    CTLname_url_prefix
    CTLuse_ieej_abbrev
  }
  {}
  { label }




%%%%%%%%%%%%%%%%%%%%%%%
%% INTEGER VARIABLES %%
%%%%%%%%%%%%%%%%%%%%%%%

INTEGERS { prev.status.punct this.status.punct punct.std
           punct.no punct.comma punct.period 
           prev.status.space this.status.space space.std
           space.no space.normal space.large
           prev.status.quote this.status.quote quote.std
           quote.no quote.close
           prev.status.nline this.status.nline nline.std
           nline.no nline.newblock 
           status.cap cap.std
           cap.no cap.yes
           japanese.flag}

INTEGERS { longest.label.width multiresult nameptr namesleft number.label numnames n}

INTEGERS { is.use.number.for.article
           is.use.paper
           is.use.url
           is.forced.et.al
           max.num.names.before.forced.et.al
           num.names.shown.with.forced.et.al
           is.use.alt.interword.spacing
           is.dash.repeated.names
           use.ieej.abbrev}


%%%%%%%%%%%%%%%%%%%%%%
%% STRING VARIABLES %%
%%%%%%%%%%%%%%%%%%%%%%

STRINGS { bibinfo
          longest.label
          oldname
          s
          t
          ALTinterwordstretchfactor
          name.format.string
          name.latex.cmd
          name.url.prefix}




%%%%%%%%%%%%%%%%%%%%%%%%%
%% LOW LEVEL FUNCTIONS %%
%%%%%%%%%%%%%%%%%%%%%%%%%

FUNCTION {initialize.controls}
{ default.is.use.number.for.article 'is.use.number.for.article :=
  default.is.use.paper 'is.use.paper :=
  default.is.use.url 'is.use.url :=
  default.is.forced.et.al 'is.forced.et.al :=
  default.max.num.names.before.forced.et.al 'max.num.names.before.forced.et.al :=
  default.num.names.shown.with.forced.et.al 'num.names.shown.with.forced.et.al :=
  default.is.use.alt.interword.spacing 'is.use.alt.interword.spacing :=
  default.is.dash.repeated.names 'is.dash.repeated.names :=
  default.ALTinterwordstretchfactor 'ALTinterwordstretchfactor :=
  default.name.format.en.string 'name.format.string :=
  default.name.latex.cmd 'name.latex.cmd :=
  default.name.url.prefix 'name.url.prefix :=
  default.use.ieej.abbrev 'use.ieej.abbrev :=
}


% This IEEEtran.bst features a very powerful and flexible mechanism for
% controlling the capitalization, punctuation, spacing, quotation, and
% newlines of the formatted entry fields. (Note: IEEEtran.bst does not need
% or use the newline/newblock feature, but it has been implemented for
% possible future use.) The output states of IEEEtran.bst consist of
% multiple independent attributes and, as such, can be thought of as being
% vectors, rather than the simple scalar values ("before.all", 
% "mid.sentence", etc.) used in most other .bst files.
% 
% The more flexible and complex design used here was motivated in part by
% the IEEE's rather unusual bibliography style. For example, the IEEE ends the
% previous field item with a period and large space prior to the publisher
% address; the @electronic entry types use periods as inter-item punctuation
% rather than the commas used by the other entry types; and URLs are never
% followed by periods even though they are the last item in the entry.
% Although it is possible to accommodate these features with the conventional
% output state system, the seemingly endless exceptions make for convoluted,
% unreliable and difficult to maintain code.
%
% IEEEtran.bst's output state system can be easily understood via a simple
% illustration of two most recently formatted entry fields (on the stack):
%
%               CURRENT_ITEM
%               "PREVIOUS_ITEM
%
% which, in this example, is to eventually appear in the bibliography as:
% 
%               "PREVIOUS_ITEM," CURRENT_ITEM
%
% It is the job of the output routine to take the previous item off of the
% stack (while leaving the current item at the top of the stack), apply its
% trailing punctuation (including closing quote marks) and spacing, and then
% to write the result to BibTeX's output buffer:
% 
%               "PREVIOUS_ITEM," 
% 
% Punctuation (and spacing) between items is often determined by both of the
% items rather than just the first one. The presence of quotation marks
% further complicates the situation because, in standard English, trailing
% punctuation marks are supposed to be contained within the quotes.
% 
% IEEEtran.bst maintains two output state (aka "status") vectors which
% correspond to the previous and current (aka "this") items. Each vector
% consists of several independent attributes which track punctuation,
% spacing, quotation, and newlines. Capitalization status is handled by a
% separate scalar because the format routines, not the output routine,
% handle capitalization and, therefore, there is no need to maintain the
% capitalization attribute for both the "previous" and "this" items.
% 
% When a format routine adds a new item, it copies the current output status
% vector to the previous output status vector and (usually) resets the
% current (this) output status vector to a "standard status" vector. Using a
% "standard status" vector in this way allows us to redefine what we mean by
% "standard status" at the start of each entry handler and reuse the same
% format routines under the various inter-item separation schemes. For
% example, the standard status vector for the @book entry type may use
% commas for item separators, while the @electronic type may use periods,
% yet both entry handlers exploit many of the exact same format routines.
% 
% Because format routines have write access to the output status vector of
% the previous item, they can override the punctuation choices of the
% previous format routine! Therefore, it becomes trivial to implement rules
% such as "Always use a period and a large space before the publisher." By
% pushing the generation of the closing quote mark to the output routine, we
% avoid all the problems caused by having to close a quote before having all
% the information required to determine what the punctuation should be.
%
% The IEEEtran.bst output state system can easily be expanded if needed.
% For instance, it is easy to add a "space.tie" attribute value if the
% bibliography rules mandate that two items have to be joined with an
% unbreakable space. 

FUNCTION {initialize.status.constants}
{ #0 'punct.no :=
  #1 'punct.comma :=
  #2 'punct.period :=
  #0 'space.no := 
  #1 'space.normal :=
  #2 'space.large :=
  #0 'quote.no :=
  #1 'quote.close :=
  #0 'cap.no :=
  #1 'cap.yes :=
  #0 'nline.no :=
  #1 'nline.newblock :=
  #0 'japanese.flag :=
}

FUNCTION {std.status.using.comma}
{ punct.comma 'punct.std :=
  space.normal 'space.std :=
  quote.no 'quote.std :=
  nline.no 'nline.std :=
  cap.no 'cap.std :=
}

FUNCTION {std.status.using.period}
{ punct.period 'punct.std :=
  space.normal 'space.std :=
  quote.no 'quote.std :=
  nline.no 'nline.std :=
  cap.yes 'cap.std :=
}

FUNCTION {initialize.prev.this.status}
{ punct.no 'prev.status.punct :=
  space.no 'prev.status.space :=
  quote.no 'prev.status.quote :=
  nline.no 'prev.status.nline :=
  punct.no 'this.status.punct :=
  space.no 'this.status.space :=
  quote.no 'this.status.quote :=
  nline.no 'this.status.nline :=
  cap.yes 'status.cap :=
}

FUNCTION {this.status.std}
{ punct.std 'this.status.punct :=
  space.std 'this.status.space :=
  quote.std 'this.status.quote :=
  nline.std 'this.status.nline :=
}

FUNCTION {cap.status.std}{ cap.std 'status.cap := }

FUNCTION {this.to.prev.status}
{ this.status.punct 'prev.status.punct :=
  this.status.space 'prev.status.space :=
  this.status.quote 'prev.status.quote :=
  this.status.nline 'prev.status.nline :=
}


FUNCTION {not}
{   { #0 }
    { #1 }
  if$
}

FUNCTION {and}
{   { skip$ }
    { pop$ #0 }
  if$
}

FUNCTION {or}
{   { pop$ #1 }
    { skip$ }
  if$
}


% convert the strings "yes" or "no" to #1 or #0 respectively
FUNCTION {yes.no.to.int}
{ "l" change.case$ duplicate$
    "yes" =
    { pop$  #1 }
    { duplicate$ "no" =
        { pop$ #0 }
        { "unknown boolean " quote$ * swap$ * quote$ *
          " in " * cite$ * warning$
          #0
        }
      if$
    }
  if$
}


% pushes true if the single char string on the stack is in the
% range of "0" to "9"
FUNCTION {is.num}
{ chr.to.int$
  duplicate$ "0" chr.to.int$ &lt; not
  swap$ "9" chr.to.int$ &gt; not and
}

% multiplies the integer on the stack by a factor of 10
FUNCTION {bump.int.mag}
{ #0 'multiresult :=
    { duplicate$ #0 &gt; }
    { #1 -
      multiresult #10 +
      'multiresult :=
    }
  while$
pop$
multiresult
}

% converts a single character string on the stack to an integer
FUNCTION {char.to.integer}
{ duplicate$ 
  is.num
    { chr.to.int$ "0" chr.to.int$ - }
    {"noninteger character " quote$ * swap$ * quote$ *
          " in integer field of " * cite$ * warning$
    #0
    }
  if$
}

% converts a string on the stack to an integer
FUNCTION {string.to.integer}
{ duplicate$ text.length$ 'namesleft :=
  #1 'nameptr :=
  #0 'numnames :=
    { nameptr namesleft &gt; not }
    { duplicate$ nameptr #1 substring$
      char.to.integer numnames bump.int.mag +
      'numnames :=
      nameptr #1 +
      'nameptr :=
    }
  while$
pop$
numnames
}


%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% JAPANESE WORD TOGGLER %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%


FUNCTION {bbl.ieej.year.pre}
{ japanese.flag #1 =
    { bbl.ieej.jp.year.pre }
    { bbl.ieej.en.year.pre }
  if$
}
FUNCTION {bbl.ieej.year.aft}
{ japanese.flag #1 =
    { bbl.ieej.jp.year.aft }
    { bbl.ieej.en.year.aft }
  if$
}
FUNCTION {bbl.ieej.title.pre}
{ japanese.flag #1 =
    { bbl.ieej.jp.title.pre }
    { bbl.ieej.en.title.pre }
  if$
}
FUNCTION {bbl.ieej.title.aft}
{ japanese.flag #1 =
    { bbl.ieej.jp.title.aft }
    { bbl.ieej.en.title.aft }
  if$
}
FUNCTION {bbl.ieej.chapter.pre}
{ japanese.flag #1 =
    { bbl.ieej.jp.chapter.pre }
    { bbl.ieej.en.chapter.pre }
  if$
}
FUNCTION {bbl.ieej.chapter.aft}
{ japanese.flag #1 =
    { bbl.ieej.jp.chapter.aft }
    { bbl.ieej.en.chapter.aft }
  if$
}
FUNCTION {bbl.ieej.chapter.tie.pre}
{ japanese.flag #1 =
    { bbl.ieej.jp.chapter.tie.pre }
    { bbl.ieej.en.chapter.tie.pre }
  if$
}
FUNCTION {bbl.ieej.chapter.tie.aft}
{ japanese.flag #1 =
    { bbl.ieej.jp.chapter.tie.aft }
    { bbl.ieej.en.chapter.tie.aft }
  if$
}
FUNCTION {bbl.etal}
{ japanese.flag #1 =
    { bbl.etal.jp }
    { bbl.etal.en }
  if$
}
FUNCTION {bbl.ieej.jp.author.title.sep}
{ use.ieej.abbrev #0 = 
    { bbl.ieej.jp.author.title.sep.F }
    { bbl.ieej.jp.author.title.sep.A }
  if$
}
FUNCTION {bbl.ieej.en.author.title.sep}
{ use.ieej.abbrev #0 = 
    { bbl.ieej.en.author.title.sep.F }
    { bbl.ieej.en.author.title.sep.A }
  if$
}
FUNCTION {bbl.ieej.author.title.sep}
{ japanese.flag #1 =
    { bbl.ieej.jp.author.title.sep }
    { bbl.ieej.en.author.title.sep }
  if$
}
FUNCTION {bbl.ieej.vol}
{ use.ieej.abbrev #0 =
    { bbl.ieej.vol.F }
    { bbl.ieej.vol.A }
  if$
}
FUNCTION {bbl.ieej.vol.aft}
{ use.ieej.abbrev #0 =
    { bbl.ieej.vol.aft.F }
    { bbl.ieej.vol.aft.A }
  if$
}
FUNCTION {bbl.ieej.no}
{ use.ieej.abbrev #0 =
    { bbl.ieej.no.F }
    { bbl.ieej.no.A }
  if$
}
FUNCTION {bbl.ieej.no.aft}
{ use.ieej.abbrev #0 =
    { bbl.ieej.no.aft.F }
    { bbl.ieej.no.aft.A }
  if$
}
FUNCTION {bbl.ieej.pages}
{ use.ieej.abbrev #0 =
    { bbl.ieej.pages.F }
    { bbl.ieej.pages.A }
  if$
}
FUNCTION {bbl.ieej.page}
{ use.ieej.abbrev #0 =
    { bbl.ieej.page.F }
    { bbl.ieej.page.A }
  if$
}



% The output routines write out the *next* to the top (previous) item on the
% stack, adding punctuation and such as needed. Since IEEEtran.bst maintains
% the output status for the top two items on the stack, these output
% routines have to consider the previous output status (which corresponds to
% the item that is being output). Full independent control of punctuation,
% closing quote marks, spacing, and newblock is provided.
% 
% "output.nonnull" does not check for the presence of a previous empty
% item.
% 
% "output" does check for the presence of a previous empty item and will
% remove an empty item rather than outputing it.
% 
% "output.warn" is like "output", but will issue a warning if it detects
% an empty item.

FUNCTION {output.nonnull}
{ swap$
  prev.status.quote quote.close = 
    { use.ieej.setting #1 =
        { bbl.ieej.title.aft * }
        { japanese.flag #1 = { "''" * } { skip$ } if$ }
      if$
    }
    { skip$ }
  if$
  prev.status.punct punct.comma =
    { japanese.flag #0 = { "," * } { "��" * } if$ }
    { skip$ }
  if$
  prev.status.punct punct.period =
    { japanese.flag #0 = { add.period$ } { "��" * } if$ }
    { skip$ }
  if$
  use.ieej.setting #0 = japanese.flag #0 = and
    { prev.status.quote quote.close = { "''" * } { skip$ } if$ }
    { skip$ }
  if$
  prev.status.space space.normal =
    { japanese.flag #0 = { " " * } { skip$ } if$ }
    { skip$ }
  if$
  prev.status.space space.large =
     { large.space * }
     { skip$ }
   if$
  write$
  prev.status.nline nline.newblock =
     { newline$ "\newblock " write$ }
     { skip$ }
   if$
}

FUNCTION {output}
{ duplicate$ empty$
    'pop$
    'output.nonnull
  if$
}

FUNCTION {output.warn}
{ 't :=
  duplicate$ empty$
    { pop$ "empty " t * " in " * cite$ * warning$ }
    'output.nonnull
  if$
}


% "fin.entry" is the output routine that handles the last item of the entry
% (which will be on the top of the stack when "fin.entry" is called).

FUNCTION {fin.entry}
{ this.status.punct punct.no =
    { skip$ }
    { japanese.flag #0 = { add.period$ } { "��" * } if$ }
  if$
  this.status.quote quote.close =
    { "''" * }
    { skip$ }
  if$
  write$
  newline$
  %% for JP setting
  #0 'japanese.flag :=
  default.name.format.en.string 'name.format.string :=
}


FUNCTION {is.last.char.not.punct}
{ duplicate$
   "}" * add.period$
   #-1 #1 substring$ "." =
}

FUNCTION {is.multiple.pages}
{ 't :=
  #0 'multiresult :=
    { multiresult not
      t empty$ not
      and
    }
    { t #1 #1 substring$
      duplicate$ "-" =
      swap$ duplicate$ "," =
      swap$ "+" =
      or or
        { #1 'multiresult := }
        { t #2 global.max$ substring$ 't := }
      if$
    }
  while$
  multiresult
}

FUNCTION {capitalize}{ "u" change.case$ "t" change.case$ }

FUNCTION {emphasize}
{ duplicate$ empty$
    { pop$ "" }
    { "\emph{" swap$ * "}" * }
  if$
}

FUNCTION {do.name.latex.cmd}
{ name.latex.cmd
  empty$
    { skip$ }
    { name.latex.cmd "{" * swap$ * "}" * }
  if$
}

% IEEEtran.bst uses its own \BIBforeignlanguage command which directly
% invokes the TeX hyphenation patterns without the need of the Babel
% package. Babel does a lot more than switch hyphenation patterns and
% its loading can cause unintended effects in many class files (such as
% IEEEtran.cls).
FUNCTION {select.language}
{ duplicate$ empty$ 'pop$
    { language empty$ bbl.use.select.language #0 = or 'skip$
        { "\BIBforeignlanguage{" language * "}{" * swap$ * "}" * }
      if$
    }
  if$
}

FUNCTION {tie.or.space.prefix}
{ duplicate$ text.length$ #3 &lt;
    { "~" }
    { " " }
  if$
  swap$
}

FUNCTION {get.bbl.editor}
{ editor num.names$ #1 &gt; 'bbl.editors 'bbl.editor if$ }

FUNCTION {space.word}
{ " " swap$ * " " * }


% Field Conditioners, Converters, Checkers and External Interfaces

FUNCTION {empty.field.to.null.string}
{ duplicate$ empty$
    { pop$ "" }
    { skip$ }
  if$
}

FUNCTION {either.or.check}
{ empty$
    { pop$ }
    { "can't use both " swap$ * " fields in " * cite$ * warning$ }
  if$
}

FUNCTION {empty.entry.warn}
{ author empty$ title empty$ howpublished empty$
  month empty$ year empty$ note empty$ url empty$
  and and and and and and
    { "all relevant fields are empty in " cite$ * warning$ }
    'skip$
  if$
}


% The bibinfo system provides a way for the electronic parsing/acquisition
% of a bibliography's contents as is done by ReVTeX. For example, a field
% could be entered into the bibliography as:
% \bibinfo{volume}{2}
% Only the "2" would show up in the document, but the LaTeX \bibinfo command
% could do additional things with the information. IEEEtran.bst does provide
% a \bibinfo command via "\providecommand{\bibinfo}[2]{#2}". However, it is
% currently not used as the bogus bibinfo functions defined here output the
% entry values directly without the \bibinfo wrapper. The bibinfo functions
% themselves (and the calls to them) are retained for possible future use.
% 
% bibinfo.check avoids acting on missing fields while bibinfo.warn will
% issue a warning message if a missing field is detected. Prior to calling
% the bibinfo functions, the user should push the field value and then its
% name string, in that order.

FUNCTION {bibinfo.check}
{ swap$ duplicate$ missing$
    { pop$ pop$ "" }
    { duplicate$ empty$
        { swap$ pop$ }
        { swap$ pop$ }
      if$
    }
  if$
}

FUNCTION {bibinfo.warn}
{ swap$ duplicate$ missing$
    { swap$ "missing " swap$ * " in " * cite$ * warning$ pop$ "" }
    { duplicate$ empty$
        { swap$ "empty " swap$ * " in " * cite$ * warning$ }
        { swap$ pop$ }
      if$
    }
  if$
}


% The IEEE separates large numbers with more than 4 digits into groups of
% three. The IEEE uses a small space to separate these number groups. 
% Typical applications include patent and page numbers.

% number of consecutive digits required to trigger the group separation.
FUNCTION {large.number.trigger}{ #5 }

% For numbers longer than the trigger, this is the blocksize of the groups.
% The blocksize must be less than the trigger threshold, and 2 * blocksize
% must be greater than the trigger threshold (can't do more than one
% separation on the initial trigger).
FUNCTION {large.number.blocksize}{ #3 }

% What is actually inserted between the number groups.
FUNCTION {large.number.separator}{ "\," }

% So as to save on integer variables by reusing existing ones, numnames
% holds the current number of consecutive digits read and nameptr holds
% the number that will trigger an inserted space.
FUNCTION {large.number.separate}
{ 't :=
  ""
  #0 'numnames :=
  large.number.trigger 'nameptr :=
  { t empty$ not }
  { t #-1 #1 substring$ is.num
      { numnames #1 + 'numnames := }
      { #0 'numnames := 
        large.number.trigger 'nameptr :=
      }
    if$
    t #-1 #1 substring$ swap$ *
    t #-2 global.max$ substring$ 't :=
    numnames nameptr =
      { duplicate$ #1 nameptr large.number.blocksize - substring$ swap$
        nameptr large.number.blocksize - #1 + global.max$ substring$
        large.number.separator swap$ * *
        nameptr large.number.blocksize - 'numnames :=
        large.number.blocksize #1 + 'nameptr :=
      }
      { skip$ }
    if$
  }
  while$
}

% Converts all single dashes "-" to double dashes "--".
FUNCTION {n.dashify}
{ large.number.separate
  't :=
  ""
    { t empty$ not }
    { t #1 #1 substring$ "-" =
        { t #1 #2 substring$ "--" = not
            { "--" *
              t #2 global.max$ substring$ 't :=
            }
            {   { t #1 #1 substring$ "-" = }
                { "-" *
                  t #2 global.max$ substring$ 't :=
                }
              while$
            }
          if$
        }
        { t #1 #1 substring$ *
          t #2 global.max$ substring$ 't :=
        }
      if$
    }
  while$
}


% This function detects entries with names that are identical to that of
% the previous entry and replaces the repeated names with dashes (if the
% "is.dash.repeated.names" user control is nonzero).
FUNCTION {name.or.dash}
{ 's :=
   oldname empty$
     { s 'oldname := s }
     { s oldname =
         { is.dash.repeated.names
              { repeated.name.dashes }
              { s 'oldname := s }
            if$
         }
         { s 'oldname := s }
       if$
     }
   if$
}

% Converts the number string on the top of the stack to
% "numerical ordinal form" (e.g., "7" to "7th"). There is
% no artificial limit to the upper bound of the numbers as the
% two least significant digits determine the ordinal form.
FUNCTION {num.to.ordinal}
{ duplicate$ #-2 #1 substring$ "1" =
      { bbl.th * }
      { duplicate$ #-1 #1 substring$ "1" =
          { bbl.st * }
          { duplicate$ #-1 #1 substring$ "2" =
              { bbl.nd * }
              { duplicate$ #-1 #1 substring$ "3" =
                  { bbl.rd * }
                  { bbl.th * }
                if$
              }
            if$
          }
        if$
      }
    if$
}

% If the string on the top of the stack begins with a number,
% (e.g., 11th) then replace the string with the leading number
% it contains. Otherwise retain the string as-is. s holds the
% extracted number, t holds the part of the string that remains
% to be scanned.
FUNCTION {extract.num}
{ duplicate$ 't :=
  "" 's :=
  { t empty$ not }
  { t #1 #1 substring$
    t #2 global.max$ substring$ 't :=
    duplicate$ is.num
      { s swap$ * 's := }
      { pop$ "" 't := }
    if$
  }
  while$
  s empty$
    'skip$
    { pop$ s }
  if$
}

% Converts the word number string on the top of the stack to
% Arabic string form. Will be successful up to "tenth".
FUNCTION {word.to.num}
{ duplicate$ "l" change.case$ 's :=
  s "first" =
    { pop$ "1" }
    { skip$ }
  if$
  s "second" =
    { pop$ "2" }
    { skip$ }
  if$
  s "third" =
    { pop$ "3" }
    { skip$ }
  if$
  s "fourth" =
    { pop$ "4" }
    { skip$ }
  if$
  s "fifth" =
    { pop$ "5" }
    { skip$ }
  if$
  s "sixth" =
    { pop$ "6" }
    { skip$ }
  if$
  s "seventh" =
    { pop$ "7" }
    { skip$ }
  if$
  s "eighth" =
    { pop$ "8" }
    { skip$ }
  if$
  s "ninth" =
    { pop$ "9" }
    { skip$ }
  if$
  s "tenth" =
    { pop$ "10" }
    { skip$ }
  if$
}


FUNCTION {month.word.to.num}
{ duplicate$ "l" change.case$ 's :=
  s "jan." = s "jan" = s "january" = or or { pop$ "1" } { skip$ } if$
  s "feb." = s "feb" = s "febuary" = or or { pop$ "2" } { skip$ } if$
  s "mar." = s "mar" = s "march" = or or { pop$ "3" } { skip$ } if$
  s "apr." = s "apr" = s "april" = or or { pop$ "4" } { skip$ } if$
  s "may." = s "may" = s "may" = or or { pop$ "5" } { skip$ } if$
  s "jun." = s "jun" = s "june" = or or { pop$ "6" } { skip$ } if$
  s "jul." = s "jul" = s "july" = or or { pop$ "7" } { skip$ } if$
  s "aug." = s "aug" = s "august" = or or { pop$ "8" } { skip$ } if$
  s "sep." = s "sep" = s "september" = or or { pop$ "9" } { skip$ } if$
  s "oct." = s "oct" = s "october" = or or { pop$ "10" } { skip$ } if$
  s "nov." = s "nov" = s "november" = or or { pop$ "11" } { skip$ } if$
  s "dec." = s "dec" = s "december" = or or { pop$ "12" } { skip$ } if$
}


FUNCTION {month.num.to.word}
{ duplicate$ "l" change.case$ 's :=
  s "1" = { pop$ "Jan." } { skip$ } if$
  s "2" = { pop$ "Feb." } { skip$ } if$
  s "3" = { pop$ "Mar." } { skip$ } if$
  s "4" = { pop$ "Apr." } { skip$ } if$
  s "5" = { pop$ "May" } { skip$ } if$
  s "6" = { pop$ "June" } { skip$ } if$
  s "7" = { pop$ "July" } { skip$ } if$
  s "8" = { pop$ "Aug." } { skip$ } if$
  s "9" = { pop$ "Sep." } { skip$ } if$
  s "10" = { pop$ "Oct." } { skip$ } if$
  s "11" = { pop$ "Nov." } { skip$ } if$
  s "12" = { pop$ "Dec." } { skip$ } if$
}

% Converts the string on the top of the stack to numerical
% ordinal (e.g., "11th") form.
FUNCTION {convert.edition}
{ duplicate$ empty$ 'skip$
    { duplicate$ #1 #1 substring$ is.num
        { extract.num
          num.to.ordinal
        }
        { word.to.num
          duplicate$ #1 #1 substring$ is.num
            { num.to.ordinal }
            { "edition ordinal word " quote$ * edition * quote$ *
              " may be too high (or improper) for conversion" * " in " * cite$ * warning$
            }
          if$
        }
      if$
    }
  if$
}


%%%%%%%%%%%%%%%%%%%%%%
%% JAPANESE HANDLER %%
%%%%%%%%%%%%%%%%%%%%%%

FUNCTION {chk.jp.kanji.str}
% pbibtex縺ｧ逕ｨ諢上＆繧後※縺�ｋ is.kanji.str$ 髢｢謨ｰ繧剃ｽｿ逕ｨ縺励※譌･譛ｬ隱槭お繝ｳ繝医Μ縺狗｢ｺ隱�
{ duplicate$ empty$
    { pop$ #0 } % 繝輔ぅ繝ｼ繝ｫ繝峨′遨ｺ縺ｪ繧峨メ繧ｧ繝�け縺帙★ #0 繧定ｿ斐☆
    { is.kanji.str$ #1 = { #1 } { #0 } if$ }
  if$
}


FUNCTION {chk.jp.entry.pbibtex}
% author, title, journal, publisher 縺ｮ繝輔ぅ繝ｼ繝ｫ繝峨↓縺､縺�※
% 譌･譛ｬ隱樊枚蟄励ｒ謗｢邏｢縺励√←繧後°荳縺､縺ｧ繧よ律譛ｬ隱槭′蜷ｫ縺ｾ繧後※縺�◆繧�
% japanese.flag 縺ｫ #1 繧剃ｻ｣蜈･縲∝錐蜑阪ヵ繧ｩ繝ｼ繝槭ャ繝医ｂ荳頑嶌縺�
{ author chk.jp.kanji.str #1 =
  title chk.jp.kanji.str #1 = or
  journal chk.jp.kanji.str #1 = or
  publisher chk.jp.kanji.str #1 = or
    { #1 'japanese.flag :=
      default.name.format.jp.string 'name.format.string := }
    { skip$ }
  if$
}


FUNCTION {emphasize.title}
% 繧ｿ繧､繝医Ν縺ｮ蠑ｷ隱ｿ陦ｨ遉ｺ險ｭ螳壹‘mphasize 縺吶ｋ縺ｨ \emph{} 蜀�↓蜈･繧後ｋ縺溘ａ縲∬恭隱槭〒縺ｯ譁應ｽ薙↓縺ｪ繧九�
% 譌･譛ｬ隱槭〒縺ｯ繧ｴ繧ｷ繝�け菴薙→縺ｪ繧九′縲∽ｸ崎�辟ｶ縺ｪ縺溘ａ繝�ヵ繧ｩ繝ｫ繝医〒縺ｯ \emph{} 縺ｫ蜈･繧後ｋ蜃ｦ逅�ｒ繧ｹ繧ｭ繝��縲�
{ 's := 
  use.ieej.setting #0 =
    { japanese.flag #1 =
        % IEEE/JP 縺ｯ 險ｭ螳壹↓繧医ｊ emphasize (譁應ｽ薙〒縺ｯ縺ｪ縺丞､ｪ蟄励↓縺ｪ繧贋ｸ崎�辟ｶ縺ｪ縺溘ａ)
        { ieee.jp.setting.emph.title #1 = { emphasize } { skip$ } if$ }
        % IEEE/EN 縺ｯ emphasize
        { emphasize }
      if$
    }
    { japanese.flag #1 =
        % 髮ｻ豌怜ｭｦ莨壹〒縺ｯ縲∵律譛ｬ隱槭ｂ闍ｱ隱槭ｂ險ｭ螳壹〒螟画峩縲�
        { ieej.jp.setting.emph.journal #1 = s "journal" = and { #1 } { #0 } if$
          ieej.jp.setting.emph.booktitle #1 = s "booktitle" = and { #1 } { #0 } if$
          or { emphasize } { skip$ } if$
        }
        { ieej.en.setting.emph.journal #1 = s "journal" = and { #1 } { #0 } if$
          ieej.en.setting.emph.booktitle #1 = s "booktitle" = and { #1 } { #0 } if$
          or { emphasize } { skip$ } if$
        }
      if$
    }
  if$
}


FUNCTION {format.jp.edition}
% 迚域ュ蝣ｱ縺ｮ謨ｴ蠖｢
% 譌･譛ｬ隱槭〒縺ｯ 隨ｬn迚� 縺ｨ縲∫ｬｬ縺ｨ迚医〒謖溘�縲らｬｬ1迚医�蛻晉沿縺ｸ縺ｨ螟画峩縺吶ｋ縲�
% 闍ｱ隱槭〒縺ｯ 1st ed. 2nd ed. 遲峨∈縺ｨ謨ｴ蠖｢縺吶ｋ縲�
{ use.ieej.setting #1 = japanese.flag #1 = and
    { duplicate$ "1" = { pop$ "蛻晉沿" * } { "隨ｬ" swap$ * * "迚�" * } if$ }
    { convert.edition "l" change.case$ * "~" * bbl.edition * }
  if$
}


FUNCTION {bbl.title.edition.sep}
% 譛ｬ縺ｮ繧ｿ繧､繝医Ν縺ｨ迚域ュ蝣ｱ縺ｮ髢薙�蛹ｺ蛻�ｊ譁�ｭ励ｒ蛻ｶ蠕｡縲�
{ japanese.flag #1 = { "��" * } { ", " * } if$ }


FUNCTION {format.jp.year}
% 髮ｻ豌怜ｭｦ莨壼ｽ｢蠑上〒縺ｯ縲∝�迚育､ｾ縺ｯ ( 縺ｨ ) 縺ｧ謖溘�
% 縺溘□縺励が繝励す繝ｧ繝ｳ縺ｧ螟画峩蜿ｯ
{ use.ieej.setting #1 = 
    { bbl.ieej.year.aft * bbl.ieej.year.pre swap$ * * }
    { * }
  if$
}


FUNCTION {format.jp.title}
% 髮ｻ豌怜ｭｦ莨壼ｽ｢蠑上°縺､譌･譛ｬ隱樊枚迪ｮ縺ｮ縺ｨ縺阪�縲√ち繧､繝医Ν繧� 縲� 縺ｨ 縲� 縺ｧ謖溘�
% 縺溘□縺励が繝励す繝ｧ繝ｳ縺ｧ螟画峩蜿ｯ
{ use.ieej.setting #1 = japanese.flag #1 = and
    { bbl.ieej.title.pre swap$ * bbl.ieej.title.aft * }
    { skip$ }
  if$
}


FUNCTION {author.sep}
% IEEE縺ｧ繧る崕豌怜ｭｦ莨壹〒繧ゅ∵怙蠕後�闡苓�ｻ･螟悶�
% 謇螳壽枚蟄励ｒ蝣ｴ蜷亥�縺代＠縺ｦ謖ｿ蜈･縺吶ｋ
{ use.ieej.setting #0 =
    { japanese.flag #1 = { "��" } { ", " } if$ }
    { japanese.flag #1 = { bbl.ieej.jp.author.sep } { bbl.ieej.en.author.sep } if$ }
  if$
}


FUNCTION {author.sep.last}
{ 'n :=
  use.ieej.setting #0 = 
    { japanese.flag #0 =              % IEEE 蠖｢蠑上�蝣ｴ蜷医∥nd縺ｮ蜿悶ｊ謇ｱ縺�↓豕ｨ諢�
        { n #2 &gt;
            { ", " * bbl.and space.word } % 闍ｱ隱槭〒闡苓�′2莠ｺ繧医ｊ螟壹＞蝣ｴ蜷医√き繝ｳ繝槭�蠕後↓ and 繧呈諺蜈･
            { "" * bbl.and space.word } % 闍ｱ隱槭〒闡苓�′2莠ｺ莉･荳九�蝣ｴ蜷医√き繝ｳ繝槭↑縺励〒 and 繧呈諺蜈･
          if$
        }
        { "��" }                      % 譌･譛ｬ隱槭〒縺ｯ莉悶→蜷梧ｧ倥↓蜈ｨ隗偵き繝ｳ繝槭�縺ｿ
      if$
    }
    { japanese.flag #0 =              % 髮ｻ豌怜ｭｦ莨壼ｽ｢蠑上�蝣ｴ蜷医∥nd 繧剃ｽｿ逕ｨ縺帙★縲∽ｺ医ａ險ｭ螳壹＠縺溘ｂ縺ｮ繧定ｿ斐☆
        { bbl.ieej.en.author.sep }
        { bbl.ieej.jp.author.sep }
      if$
    }
  if$
}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% LATEX BIBLIOGRAPHY CODE %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

FUNCTION {start.entry}
{ newline$
  "\bibitem{" write$
  cite$ write$
  "}" write$
  newline$
  ""
  initialize.prev.this.status
  chk.jp.entry.pbibtex
}

% Here we write out all the LaTeX code that we will need. The most involved
% code sequences are those that control the alternate interword spacing and
% foreign language hyphenation patterns. The heavy use of \providecommand
% gives users a way to override the defaults. Special thanks to Javier Bezos,
% Johannes Braams, Robin Fairbairns, Heiko Oberdiek, Donald Arseneau and all
% the other gurus on comp.text.tex for their help and advice on the topic of
% \selectlanguage, Babel and BibTeX.
FUNCTION {begin.bib}
{ "% Generated by " bst.file.name * ", version: " * 
  bst.file.version * " (" * bst.file.date * ")" *
  write$ newline$
  preamble$ empty$ 'skip$
    { preamble$ write$ newline$ }
  if$
  "\begin{thebibliography}{"  longest.label  * "}" *
  write$ newline$
  "\providecommand{\url}[1]{#1}"
  write$ newline$
  "\csname url@samestyle\endcsname"
  write$ newline$
  "\providecommand{\newblock}{\relax}"
  write$ newline$
  "\providecommand{\bibinfo}[2]{#2}"
  write$ newline$
  "\providecommand{\BIBentrySTDinterwordspacing}{\spaceskip=0pt\relax}"
  write$ newline$
  "\providecommand{\BIBentryALTinterwordstretchfactor}{"
  ALTinterwordstretchfactor * "}" *
  write$ newline$
  "\providecommand{\BIBentryALTinterwordspacing}{\spaceskip=\fontdimen2\font plus "
  write$ newline$
  "\BIBentryALTinterwordstretchfactor\fontdimen3\font minus \fontdimen4\font\relax}"
  write$ newline$
  "\providecommand{\BIBforeignlanguage}[2]{{%"
  write$ newline$
  "\expandafter\ifx\csname l@#1\endcsname\relax"
  write$ newline$
  "\typeout{** WARNING: " bst.file.name * ": No hyphenation pattern has been}%" *
  write$ newline$
  "\typeout{** loaded for the language `#1'. Using the pattern for}%"
  write$ newline$
  "\typeout{** the default language instead.}%"
  write$ newline$
  "\else"
  write$ newline$
  "\language=\csname l@#1\endcsname"
  write$ newline$
  "\fi"
  write$ newline$
  "#2}}"
  write$ newline$
  "\providecommand{\BIBdecl}{\relax}"
  write$ newline$
  "\BIBdecl"
  write$ newline$
}

FUNCTION {end.bib}
{ newline$ "\end{thebibliography}" write$ newline$ }

FUNCTION {if.url.alt.interword.spacing}
{ is.use.alt.interword.spacing
    { is.use.url
        { url empty$ 'skip$ {"\BIBentryALTinterwordspacing" write$ newline$} if$ }
        { skip$ }
      if$
    }
    { skip$ }
  if$
}

FUNCTION {if.url.std.interword.spacing}
{ is.use.alt.interword.spacing
    { is.use.url
        { url empty$ 'skip$ {"\BIBentrySTDinterwordspacing" write$ newline$} if$ }
        { skip$ }
      if$
    }
    { skip$ }
  if$
}




%%%%%%%%%%%%%%%%%%%%%%%%
%% LONGEST LABEL PASS %%
%%%%%%%%%%%%%%%%%%%%%%%%

FUNCTION {initialize.longest.label}
{ "" 'longest.label :=
  #1 'number.label :=
  #0 'longest.label.width :=
}

FUNCTION {longest.label.pass}
{ type$ "ieeetranbstctl" =
    { skip$ }
    { number.label int.to.str$ 'label :=
      number.label #1 + 'number.label :=
      label width$ longest.label.width &gt;
        { label 'longest.label :=
          label width$ 'longest.label.width :=
        }
        { skip$ }
      if$
    }
  if$
}



%%%%%%%%%%%%%%%%%%%%%
%% FORMAT HANDLERS %%
%%%%%%%%%%%%%%%%%%%%%

%% Lower Level Formats (used by higher level formats)

FUNCTION {format.pub}
{ 't :=
  ""
  t empty$
    { skip$ }
    { this.to.prev.status
      this.status.std
      cap.status.std
      t *
    }
  if$
}

FUNCTION {format.address.org.or.pub.date}
{ 't :=
  ""
  year empty$
    { "empty year in " cite$ * warning$ }
    { skip$ }
  if$
  address empty$ t empty$ and
  year empty$ and month empty$ and
    { skip$ }
    { this.to.prev.status
      this.status.std
      cap.status.std
      address "address" bibinfo.check *
      t empty$
        { skip$ }
        { japanese.flag #1 =
            { punct.no 'prev.status.punct := }
            { punct.period 'prev.status.punct := }
          if$
          space.large 'prev.status.space :=
          address empty$
            { skip$ }
            { ": " * }
          if$
          t *
        }
      if$
      language empty.field.to.null.string
      duplicate$ empty$ bbl.format.language #1 = not or
        { * }
        { capitalize " (in " swap$ * ")" * * }
      if$
      year empty$ month empty$ and
        { skip$ }
        { t empty$ address empty$ and
            { skip$ }
            { use.ieej.setting #1 = 
              { japanese.flag #1 = { skip$ } { " " * } if$ }
              { japanese.flag #1 = { "��" * } { ", " * } if$ }
              if$
            }
          if$
          month empty$
            { year empty$
                { skip$ }
                { year "year" bibinfo.check format.jp.year }
              if$
            }
            { month "month" bibinfo.check month.word.to.num
              use.ieej.setting #1 =
                { format.month.ieej #1 = { month.num.to.word } { skip$ } if$ }
                { format.month.ieee #1 = { month.num.to.word } { skip$ } if$ }
              if$
              *
              year empty$
                { skip$ }
                { " " * year "year" bibinfo.check * }
              if$
            }
          if$
        }
      if$
    }
  if$
}

FUNCTION {format.names}
{ 'bibinfo :=
  duplicate$ empty$ 'skip$ {
  this.to.prev.status
  this.status.std
  's :=
  japanese.flag #1 = { s purify$ 's := } { skip$ } if$
  "" 't :=
  #1 'nameptr :=
  s num.names$ 'numnames :=
  numnames 'namesleft :=
    { namesleft #0 &gt; }
    { s nameptr name.format.string format.name$
      s nameptr "~{ll}" format.name$ = % check for insititution(s) without space
        { s nameptr "{ll}" format.name$ } % for institution(s) without space
        { s nameptr name.format.string format.name$ } % for usual author(s)
      if$
      bibinfo bibinfo.check
      't :=
      nameptr #1 &gt;
        { nameptr num.names.shown.with.forced.et.al #1 + =
          numnames max.num.names.before.forced.et.al &gt;
          is.forced.et.al and and
            { "others" 't := #1 'namesleft := }
            { skip$ }
          if$
          namesleft #1 &gt;
            { author.sep * t do.name.latex.cmd * }
            { s nameptr "{ll}" format.name$ duplicate$ "others" =
                { 't := }
                { pop$ }
              if$
              t "others" =
                { japanese.flag #1 =
                    { "繝ｻ" * bbl.etal }
                    { " " * bbl.etal emphasize }
                  if$ *
                }
                { numnames author.sep.last * t do.name.latex.cmd * }
              if$
            }
          if$
        }
        { t do.name.latex.cmd }
      if$
      nameptr #1 + 'nameptr :=
      namesleft #1 - 'namesleft :=
    }
  while$
  cap.status.std
  } if$
}




%% Higher Level Formats

%% addresses/locations

FUNCTION {format.address}
{ address duplicate$ empty$ 'skip$
    { this.to.prev.status
      this.status.std
      cap.status.std
    }
  if$
}



%% author/editor names

FUNCTION {format.authors}
{ author "author" format.names
  use.ieej.setting #1 = 
    { bbl.ieej.author.title.sep *
      punct.no 'this.status.punct := }
    { skip$ }
  if$
}

FUNCTION {format.editors}
{ editor "editor" format.names duplicate$ empty$ 'skip$
    { ", " *
      get.bbl.editor
      capitalize
      *
    }
  if$
}



%% date

FUNCTION {format.date}
{ month "month" bibinfo.check month.word.to.num
  use.ieej.setting #1 =
    { format.month.ieej #1 = { month.num.to.word } { skip$ } if$ }
    { format.month.ieee #1 = { month.num.to.word } { skip$ } if$ }
  if$
  duplicate$ empty$
  year  "year" bibinfo.check duplicate$ empty$
    { swap$ 'skip$
        { this.to.prev.status
          this.status.std
          cap.status.std
         "there's a month but no year in " cite$ * warning$ }
      if$
      *
    }
    { this.to.prev.status
      this.status.std
      cap.status.std
      use.ieej.setting #1 =
                { swap$
            { * }
            { use.ieej.abbrev #1 =
                { swap$ pop$ }
                { bbl.ieej.year.month.sep * swap$ * }
              if$
             }
          if$
        }
        { swap$ 'skip$ { swap$ " " * swap$ } if$ * }
      if$
      use.ieej.setting #1 =
        { bbl.ieej.year.aft * bbl.ieej.year.pre swap$ *
          ieej.setting.punct.year.aft #0 = 
            { punct.no 'this.status.punct := }
            { skip$ }
          if$
          ieej.setting.comma.year.pre #0 = 
            { punct.no 'prev.status.punct := }
            { skip$ }
          if$
        }
        { skip$ }
      if$
    }
  if$
}

FUNCTION {format.date.electronic}
{ month "month" bibinfo.check duplicate$ empty$
  year  "year" bibinfo.check duplicate$ empty$
    { swap$ 
        { pop$ }
        { "there's a month but no year in " cite$ * warning$
        pop$ ")" * "(" swap$ *
        this.to.prev.status
        punct.no 'this.status.punct :=
        space.normal 'this.status.space :=
        quote.no 'this.status.quote :=
        cap.yes  'status.cap :=
        }
      if$
    }
    { swap$ 
        { swap$ pop$ ")" * "(" swap$ * }
        { "(" swap$ * ", " * swap$ * ")" * }
      if$
    this.to.prev.status
    punct.no 'this.status.punct :=
    space.normal 'this.status.space :=
    quote.no 'this.status.quote :=
    cap.yes  'status.cap :=
    }
  if$
}



%% edition/title

% Note: The IEEE considers the edition to be closely associated with
% the title of a book. So, in IEEEtran.bst the edition is normally handled 
% within the formatting of the title. The format.edition function is 
% retained here for possible future use.
FUNCTION {format.edition}
{ edition duplicate$ empty$ 'skip$
    { this.to.prev.status
      this.status.std
      convert.edition
      status.cap
        { "t" }
        { "l" }
      if$ change.case$
      "edition" bibinfo.check
      "~" * bbl.edition *
      cap.status.std
    }
  if$
}

% This is used to format the booktitle of a conference proceedings.
% Here we use the "intype" field to provide the user a way to 
% override the word "in" (e.g., with things like "presented at")
% Use of intype stops the emphasis of the booktitle to indicate that
% we no longer mean the written conference proceedings, but the
% conference itself.
FUNCTION {format.in.booktitle}
{ booktitle "booktitle" bibinfo.check duplicate$ empty$ 'skip$
    { this.to.prev.status
      this.status.std
      select.language
      intype missing$
        { japanese.flag #1 = 
            { "" }
            { "booktitle" emphasize.title bbl.in " " * }
          if$
        }
        { intype " " * }
      if$
      swap$ *
      cap.status.std
    }
  if$
}


% This is used to format the booktitle of collection.
% Here the "intype" field is not supported, but "edition" is.
FUNCTION {format.in.booktitle.edition}
{ booktitle "booktitle" bibinfo.check duplicate$ empty$ 'skip$
    { this.to.prev.status
      this.status.std
      select.language
      japanese.flag #1 = 
        { punct.comma 'prev.status.punct := }
        { skip$ }
      if$
      "booktitle" emphasize.title
      edition empty$
        { skip$ }
        { bbl.title.edition.sep edition format.jp.edition }
      if$
      japanese.flag #1 = 
        { space.normal 'prev.status.space := }
        { bbl.in " " * swap$ *}
      if$
      cap.status.std
    }
  if$
}

FUNCTION {format.article.title}
{ title duplicate$ empty$ 'skip$
    { this.to.prev.status
      this.status.std
      "t" change.case$
    }
  if$
  "title" bibinfo.check
  duplicate$ empty$ 'skip$
    { quote.close 'this.status.quote :=
      is.last.char.not.punct
        { punct.std 'this.status.punct := }
        { use.ieej.setting #1 = bbl.ieej.force.punct.aft.quote #1 = and
            { punct.std 'this.status.punct := }
            { punct.no 'this.status.punct := }
            if$
        }
      if$
      select.language
      use.ieej.setting #1 =
        { bbl.ieej.title.pre swap$ * }
        { "``" swap$ * }
      if$
      cap.status.std
    }
  if$
}

FUNCTION {format.article.title.electronic}
{ title duplicate$ empty$ 'skip$
    { this.to.prev.status
      this.status.std
      cap.status.std
      "t" change.case$ 
    }
  if$
  "title" bibinfo.check
  duplicate$ empty$ 
    { skip$ } 
    { select.language }
  if$
}

FUNCTION {format.book.title.edition}
{ title "title" bibinfo.check
  duplicate$ empty$
    { "empty title in " cite$ * warning$ }
    { this.to.prev.status
      this.status.std
      select.language
      format.jp.title
      "booktitle" emphasize.title
      edition empty$ 
        { skip$ }
        { bbl.title.edition.sep edition format.jp.edition }
      if$
      use.ieej.setting #1 = 
        { space.normal 'prev.status.space := }
        { skip$ }
      if$
      cap.status.std
      punct.comma 'this.status.punct :=
      use.ieej.setting #1 =
        { skip$ }
        { punct.comma 'prev.status.punct := }
      if$
    }
  if$
}

FUNCTION {format.book.title}
{ title "title" bibinfo.check
  duplicate$ empty$ 'skip$
    { this.to.prev.status
      this.status.std
      cap.status.std
      select.language
      format.jp.title
      "booktitle" emphasize.title
    }
  if$
}



%% journal

FUNCTION {format.journal}
{ journal duplicate$ empty$ 'skip$
    { this.to.prev.status
      this.status.std
      cap.status.std
      select.language
      "journal" emphasize.title
    }
  if$
}



%% how published

FUNCTION {format.howpublished}
{ howpublished duplicate$ empty$ 'skip$
    { this.to.prev.status
      this.status.std
      cap.status.std
    }
  if$
}



%% institutions/organization/publishers/school

FUNCTION {format.institution}
{ institution duplicate$ empty$ 'skip$
    { this.to.prev.status
      this.status.std
      cap.status.std
    }
  if$
}

FUNCTION {format.organization}
{ organization duplicate$ empty$ 'skip$
    { this.to.prev.status
      this.status.std
      cap.status.std
    }
  if$
}

FUNCTION {format.publisher}
{ publisher "publisher" bibinfo.warn format.pub }

FUNCTION {format.address.publisher.date}
{ publisher "publisher" bibinfo.warn format.address.org.or.pub.date }

FUNCTION {format.address.publisher.date.nowarn}
{ publisher "publisher" bibinfo.check format.address.org.or.pub.date }

FUNCTION {format.address.organization.date}
{ organization "organization" bibinfo.check format.address.org.or.pub.date }

FUNCTION {format.school}
{ school duplicate$ empty$ 'skip$
    { this.to.prev.status
      this.status.std
      cap.status.std
    }
  if$
}

FUNCTION {format.language}
{ language empty.field.to.null.string
  duplicate$ empty$ bbl.format.language #0 = or 'skip$
    { this.to.prev.status
      this.status.std
      capitalize
      punct.comma 'this.status.punct :=
      bbl.format.language.punct #0 =
        { punct.no 'this.status.punct := }
        { skip$ }
      if$
      "(in " swap$ * ")" *
      cap.status.std
    }
  if$
}


%% volume/number/series/chapter/pages

FUNCTION {format.volume}
{ volume empty.field.to.null.string
  duplicate$ empty$ 'skip$
    { this.to.prev.status
      this.status.std
      use.ieej.setting #1 =
        { bbl.ieej.vol swap$ "volume" bibinfo.check * bbl.ieej.vol.aft *
          use.ieej.abbrev #1 =
            { punct.no 'this.status.punct :=
              space.no 'this.status.space :=
            }
            { skip$ }
          if$
        }
        { bbl.volume 
          status.cap
            { capitalize }
            { skip$ }
          if$
          swap$ tie.or.space.prefix
          "volume" bibinfo.check
          * *
          cap.status.std
        }
      if$
    }
  if$
}

FUNCTION {format.number}
{ number empty.field.to.null.string
  duplicate$ empty$ 'skip$
    { this.to.prev.status
      this.status.std
      use.ieej.setting #1 =
        { bbl.ieej.no swap$ "number" bibinfo.check * bbl.ieej.no.aft * }
        { status.cap
            { bbl.number capitalize }
            { bbl.number }
          if$
          swap$ tie.or.space.prefix
          "number" bibinfo.check
          * *
          cap.status.std
        }
      if$
    }
  if$
}

FUNCTION {format.number.if.use.for.article}
{ is.use.number.for.article 
     { format.number }
     { "" }
   if$
}

% The IEEE does not seem to tie the series so closely with the volume
% and number as is done in other bibliography styles. Instead the
% series is treated somewhat like an extension of the title.
FUNCTION {format.series}
{ series empty$ 
   { "" }
   { this.to.prev.status
     this.status.std
     bbl.series " " *
     series "series" bibinfo.check *
     cap.status.std
   }
 if$
}


FUNCTION {format.chapter}
{ chapter empty$
    { "" }
    { this.to.prev.status
      this.status.std
      use.ieej.setting #0 = 
        { type empty$
            { bbl.chapter }
            { type "l" change.case$
              "type" bibinfo.check
            }
          if$
          chapter tie.or.space.prefix
          "chapter" bibinfo.check
          * *
          cap.status.std
        }
        { type empty$
            { bbl.ieej.chapter.pre }
            { type "l" change.case$
              "type" bibinfo.check
            }
          if$
          chapter
          bbl.ieej.chapter.tie.pre #1 =
            { tie.or.space.prefix }
            { "" }
          if$
          "chapter" bibinfo.check
          * *
          bbl.ieej.chapter.aft 
          bbl.ieej.chapter.tie.aft #1 =
            { tie.or.space.prefix }
            { "" }
          if$
          "chapter" bibinfo.check
          * *
          cap.status.std
        }
      if$
    }
  if$
}


% The intended use of format.paper is for paper numbers of inproceedings.
% The paper type can be overridden via the type field.
% We allow the type to be displayed even if the paper number is absent
% for things like "postdeadline paper"
FUNCTION {format.paper}
{ is.use.paper
     { paper empty$
        { type empty$
            { "" }
            { this.to.prev.status
              this.status.std
              type "type" bibinfo.check
              cap.status.std
            }
          if$
        }
        { this.to.prev.status
          this.status.std
          type empty$
            { bbl.paper }
            { type "type" bibinfo.check }
          if$
          " " * paper
          "paper" bibinfo.check
          *
          cap.status.std
        }
      if$
     }
     { "" } 
   if$
}


FUNCTION {format.pages}
{ pages duplicate$ empty$ 'skip$
    { this.to.prev.status
      this.status.std
      duplicate$ is.multiple.pages
        { use.ieej.setting #1 = 
            { bbl.ieej.pages swap$ }
            { bbl.pages swap$ }
          if$
          n.dashify
        }
        { use.ieej.setting #1 = 
            { bbl.ieej.page swap$ }
            { bbl.page swap$ }
          if$
        }
      if$
      use.ieej.setting #1 = { "" } { tie.or.space.prefix } if$
      "pages" bibinfo.check
      * *
      cap.status.std
    }
  if$
}



%% technical report number

FUNCTION {format.tech.report.number}
{ number "number" bibinfo.check
  this.to.prev.status
  this.status.std
  cap.status.std
  type duplicate$ empty$
    { pop$ 
      bbl.techrep
    }
    { skip$ }
  if$
  "type" bibinfo.check 
  swap$ duplicate$ empty$
    { pop$ }
    { tie.or.space.prefix * * }
  if$
}



%% note

FUNCTION {format.note}
{ note empty$
    { "" }
    { this.to.prev.status
      this.status.std
      punct.period 'this.status.punct :=
      note #1 #1 substring$
      duplicate$ "{" =
        { skip$ }
        { status.cap
          { "u" }
          { "l" }
        if$
        change.case$
        }
      if$
      note #2 global.max$ substring$ * "note" bibinfo.check
      cap.yes  'status.cap :=
    }
  if$
}



%% patent

FUNCTION {format.patent.date}
{ this.to.prev.status
  this.status.std
  year empty$
    { monthfiled duplicate$ empty$
        { "monthfiled" bibinfo.check pop$ "" }
        { "monthfiled" bibinfo.check }
      if$
      dayfiled duplicate$ empty$
        { "dayfiled" bibinfo.check pop$ "" * }
        { "dayfiled" bibinfo.check 
          monthfiled empty$ 
             { "dayfiled without a monthfiled in " cite$ * warning$
               * 
             }
             { " " swap$ * * }
           if$
        }
      if$
      yearfiled empty$
        { "no year or yearfiled in " cite$ * warning$ }
        { yearfiled "yearfiled" bibinfo.check 
          swap$
          duplicate$ empty$
             { pop$ }
             { ", " * swap$ * }
           if$
        }
      if$
    }
    { month duplicate$ empty$
        { "month" bibinfo.check pop$ "" }
        { "month" bibinfo.check }
      if$
      day duplicate$ empty$
        { "day" bibinfo.check pop$ "" * }
        { "day" bibinfo.check 
          month empty$ 
             { "day without a month in " cite$ * warning$
               * 
             }
             { " " swap$ * * }
           if$
        }
      if$
      year "year" bibinfo.check 
      swap$
      duplicate$ empty$
        { pop$ }
        { ", " * swap$ * }
      if$
    }
  if$
  cap.status.std
}

FUNCTION {format.patent.nationality.type.number}
{ this.to.prev.status
  this.status.std
  nationality duplicate$ empty$
    { "nationality" bibinfo.warn pop$ "" }
    { "nationality" bibinfo.check
      duplicate$ "l" change.case$ "united states" =
        { pop$ bbl.patentUS }
        { skip$ }
      if$
      " " *
    }
  if$
  type empty$
    { bbl.patent "type" bibinfo.check }
    { type "type" bibinfo.check }
  if$  
  *
  number duplicate$ empty$
    { "number" bibinfo.warn pop$ }
    { "number" bibinfo.check
      large.number.separate
      swap$ " " * swap$ *
    }
  if$ 
  cap.status.std
}



%% standard

FUNCTION {format.organization.institution.standard.type.number}
{ this.to.prev.status
  this.status.std
  organization duplicate$ empty$
    { pop$ 
      institution duplicate$ empty$
        { "institution" bibinfo.warn }
        { "institution" bibinfo.warn " " * }
      if$
    }
    { "organization" bibinfo.warn " " * }
  if$
  type empty$
    { bbl.standard "type" bibinfo.check }
    { type "type" bibinfo.check }
  if$  
  *
  number duplicate$ empty$
    { "number" bibinfo.check pop$ }
    { "number" bibinfo.check
      large.number.separate
      swap$ " " * swap$ *
    }
  if$ 
  cap.status.std
}

FUNCTION {format.revision}
{ revision empty$
    { "" }
    { this.to.prev.status
      this.status.std
      bbl.revision
      revision tie.or.space.prefix
      "revision" bibinfo.check
      * *
      cap.status.std
    }
  if$
}


%% thesis

FUNCTION {format.master.thesis.type}
{ this.to.prev.status
  this.status.std
  type empty$
    {
      bbl.mthesis
    }
    { 
      type "type" bibinfo.check
    }
  if$
cap.status.std
}

FUNCTION {format.phd.thesis.type}
{ this.to.prev.status
  this.status.std
  type empty$
    {
      bbl.phdthesis
    }
    { 
      type "type" bibinfo.check
    }
  if$
cap.status.std
}



%% URL

FUNCTION {format.url}
{ is.use.url
    { url empty$
      { "" }
      { this.to.prev.status
        this.status.std
        cap.yes 'status.cap :=
        name.url.prefix " " *
        "\url{" * url * "}" *
        punct.no 'this.status.punct :=
        punct.period 'prev.status.punct :=
        space.normal 'this.status.space :=
        space.normal 'prev.status.space :=
        quote.no 'this.status.quote :=
      }
    if$
    }
    { "" }
  if$
}




%%%%%%%%%%%%%%%%%%%%
%% ENTRY HANDLERS %%
%%%%%%%%%%%%%%%%%%%%


% Note: In many journals, the IEEE (or the authors) tend not to show the number
% for articles, so the display of the number is controlled here by the
% switch "is.use.number.for.article"
FUNCTION {article}
{ std.status.using.comma
  start.entry
  if.url.alt.interword.spacing
  format.authors "author" output.warn
  name.or.dash
  use.ieej.abbrev #1 =
    { skip$ }
    { format.article.title "title" output.warn }
  if$
  bbl.format.language #1 = { format.language output } 'skip$ if$
  format.journal "journal" bibinfo.check "journal" output.warn
  format.volume output
  format.number.if.use.for.article output
  format.pages output
  format.date "year" output.warn
  format.note output
  format.url output
  bbl.format.language #2 = { format.language output } 'skip$ if$
  fin.entry
  if.url.std.interword.spacing
}

FUNCTION {book}
{ std.status.using.comma
  start.entry
  if.url.alt.interword.spacing
  author empty$
    { format.editors "author and editor" output.warn }
    { format.authors output.nonnull }
  if$
  name.or.dash
  format.book.title.edition output
  format.series output
  author empty$
    { skip$ }
    { format.editors output }
  if$
  use.ieej.setting #1 = 
    { format.publisher output }
    { format.address.publisher.date output }
  if$
  format.volume output
  format.number output
  format.note output
  use.ieej.setting #0 = 'skip$ { format.date output } if$
  format.url output
  bbl.format.language #2 = { format.language output } 'skip$ if$
  fin.entry
  if.url.std.interword.spacing
}

FUNCTION {booklet}
{ std.status.using.comma
  start.entry
  if.url.alt.interword.spacing
  format.authors output
  name.or.dash
  format.article.title "title" output.warn
  format.howpublished "howpublished" bibinfo.check output
  format.organization "organization" bibinfo.check output
  format.address "address" bibinfo.check output
  format.date output
  format.note output
  format.url output
  fin.entry
  if.url.std.interword.spacing
}

FUNCTION {electronic}
{ std.status.using.period
  start.entry
  if.url.alt.interword.spacing
  format.authors output
  name.or.dash
  format.date.electronic output
  format.article.title.electronic output
  format.howpublished "howpublished" bibinfo.check output
  format.organization "organization" bibinfo.check output
  format.address "address" bibinfo.check output
  format.note output
  format.url output
  fin.entry
  empty.entry.warn
  if.url.std.interword.spacing
}

FUNCTION {inbook}
{ std.status.using.comma
  start.entry
  if.url.alt.interword.spacing
  author empty$
    { format.editors "author and editor" output.warn }
    { format.authors output.nonnull }
  if$
  name.or.dash
  format.book.title.edition output
  format.series output
  use.ieej.setting #1 = 
    { format.publisher output }
    { format.address.publisher.date output }
  if$
  format.volume output
  format.number output
  format.chapter output
  format.pages output
  format.note output
  use.ieej.setting #0 = 'skip$ { format.date output } if$
  format.url output
  fin.entry
  if.url.std.interword.spacing
}

FUNCTION {incollection}
{ std.status.using.comma
  start.entry
  if.url.alt.interword.spacing
  format.authors "author" output.warn
  name.or.dash
  format.article.title "title" output.warn
  format.in.booktitle.edition "booktitle" output.warn
  format.series output
  format.editors output
  use.ieej.setting #1 = 
    { format.publisher output }
    { format.address.publisher.date output }
  if$
  format.volume output
  format.number output
  format.chapter output
  format.pages output
  format.note output
  use.ieej.setting #0 = 'skip$ { format.date output } if$
  format.url output
  fin.entry
  if.url.std.interword.spacing
}

FUNCTION {inproceedings}
{ std.status.using.comma
  start.entry
  if.url.alt.interword.spacing
  format.authors "author" output.warn
  name.or.dash
  use.ieej.abbrev #1 =
    { skip$ }
    { format.article.title "title" output.warn }
  if$
  format.in.booktitle "booktitle" output.warn
  format.series output
  format.editors output
  format.volume output
  format.number output
  use.ieej.setting #1 = 
    { format.paper output
      format.pages output
      use.ieej.abbrev #1 =
        { skip$ }
        { format.address output }
      if$
    }
    { publisher empty$
        { format.address.organization.date output }
        { format.organization "organization" bibinfo.check output
          format.address.publisher.date output
        }
      if$
      format.paper output
      format.pages output
    }
  if$
  format.note output
  use.ieej.setting #0 = 'skip$ { format.date output } if$
  format.url output
  fin.entry
  if.url.std.interword.spacing
}

FUNCTION {manual}
{ std.status.using.comma
  start.entry
  if.url.alt.interword.spacing
  format.authors output
  name.or.dash
  format.book.title.edition "title" output.warn
  format.howpublished "howpublished" bibinfo.check output 
  format.organization "organization" bibinfo.check output
  format.address "address" bibinfo.check output
  format.date output
  format.note output
  format.url output
  fin.entry
  if.url.std.interword.spacing
}

FUNCTION {mastersthesis}
{ std.status.using.comma
  start.entry
  if.url.alt.interword.spacing
  format.authors "author" output.warn
  name.or.dash
  format.article.title "title" output.warn
  format.master.thesis.type output.nonnull
  format.school "school" bibinfo.warn output
  format.address "address" bibinfo.check output
  format.date "year" output.warn
  format.note output
  format.url output
  fin.entry
  if.url.std.interword.spacing
}

FUNCTION {misc}
{ std.status.using.comma
  start.entry
  if.url.alt.interword.spacing
  format.authors output
  name.or.dash
  format.article.title output
  format.howpublished "howpublished" bibinfo.check output 
  format.organization "organization" bibinfo.check output
  format.address "address" bibinfo.check output
  format.pages output
  format.date output
  format.note output
  format.url output
  fin.entry
  empty.entry.warn
  if.url.std.interword.spacing
}

FUNCTION {patent}
{ std.status.using.comma
  start.entry
  if.url.alt.interword.spacing
  format.authors output
  name.or.dash
  format.article.title output
  format.patent.nationality.type.number output
  format.patent.date output
  format.note output
  format.url output
  fin.entry
  empty.entry.warn
  if.url.std.interword.spacing
}

FUNCTION {periodical}
{ std.status.using.comma
  start.entry
  if.url.alt.interword.spacing
  format.editors output
  name.or.dash
  format.book.title "title" output.warn
  format.series output
  format.volume output
  format.number output
  format.organization "organization" bibinfo.check output
  format.date "year" output.warn
  format.note output
  format.url output
  fin.entry
  if.url.std.interword.spacing
}

FUNCTION {phdthesis}
{ std.status.using.comma
  start.entry
  if.url.alt.interword.spacing
  format.authors "author" output.warn
  name.or.dash
  format.article.title "title" output.warn
  format.phd.thesis.type output.nonnull
  format.school "school" bibinfo.warn output
  format.address "address" bibinfo.check output
  format.date "year" output.warn
  format.note output
  format.url output
  fin.entry
  if.url.std.interword.spacing
}

FUNCTION {proceedings}
{ std.status.using.comma
  start.entry
  if.url.alt.interword.spacing
  format.editors output
  name.or.dash
  format.book.title "title" output.warn
  format.series output
  format.volume output
  format.number output
  publisher empty$
    { format.address.organization.date output }
    { format.organization "organization" bibinfo.check output
      format.address.publisher.date output
    }
  if$
  format.note output
  format.url output
  fin.entry
  if.url.std.interword.spacing
}

FUNCTION {standard}
{ std.status.using.comma
  start.entry
  if.url.alt.interword.spacing
  format.authors output
  name.or.dash
  format.book.title "title" output.warn
  format.howpublished "howpublished" bibinfo.check output 
  format.organization.institution.standard.type.number output
  format.revision output
  format.date output
  format.note output
  format.url output
  fin.entry
  if.url.std.interword.spacing
}

FUNCTION {techreport}
{ std.status.using.comma
  start.entry
  if.url.alt.interword.spacing
  format.authors "author" output.warn
  name.or.dash
  format.article.title "title" output.warn
  format.howpublished "howpublished" bibinfo.check output 
  format.institution "institution" bibinfo.warn output
  format.address "address" bibinfo.check output
  format.tech.report.number output.nonnull
  format.date "year" output.warn
  format.note output
  format.url output
  fin.entry
  if.url.std.interword.spacing
}

FUNCTION {unpublished}
{ std.status.using.comma
  start.entry
  if.url.alt.interword.spacing
  format.authors "author" output.warn
  name.or.dash
  format.article.title "title" output.warn
  format.date output
  format.note "note" output.warn
  format.url output
  fin.entry
  if.url.std.interword.spacing
}


% The special entry type which provides the user interface to the
% BST controls
FUNCTION {IEEEtranBSTCTL}
{ is.print.banners.to.terminal
    { "** IEEEtran BST control entry " quote$ * cite$ * quote$ * " detected." *
      top$
    }
    { skip$ }
  if$
  CTLuse_article_number
  empty$
    { skip$ }
    { CTLuse_article_number
      yes.no.to.int
      'is.use.number.for.article :=
    }
  if$
  CTLuse_paper
  empty$
    { skip$ }
    { CTLuse_paper
      yes.no.to.int
      'is.use.paper :=
    }
  if$
  CTLuse_url
  empty$
    { skip$ }
    { CTLuse_url
      yes.no.to.int
      'is.use.url :=
    }
  if$
  CTLuse_forced_etal
  empty$
    { skip$ }
    { CTLuse_forced_etal
      yes.no.to.int
      'is.forced.et.al :=
    }
  if$
  CTLmax_names_forced_etal
  empty$
    { skip$ }
    { CTLmax_names_forced_etal
      string.to.integer
      'max.num.names.before.forced.et.al :=
    }
  if$
  CTLnames_show_etal
  empty$
    { skip$ }
    { CTLnames_show_etal
      string.to.integer
      'num.names.shown.with.forced.et.al :=
    }
  if$
  CTLuse_alt_spacing
  empty$
    { skip$ }
    { CTLuse_alt_spacing
      yes.no.to.int
      'is.use.alt.interword.spacing :=
    }
  if$
  CTLalt_stretch_factor
  empty$
    { skip$ }
    { CTLalt_stretch_factor
      'ALTinterwordstretchfactor :=
      "\renewcommand{\BIBentryALTinterwordstretchfactor}{"
      ALTinterwordstretchfactor * "}" *
      write$ newline$
    }
  if$
  CTLdash_repeated_names
  empty$
    { skip$ }
    { CTLdash_repeated_names
      yes.no.to.int
      'is.dash.repeated.names :=
    }
  if$
  CTLname_format_string
  empty$
    { skip$ }
    { CTLname_format_string
      'name.format.string :=
    }
  if$
  CTLname_latex_cmd
  empty$
    { skip$ }
    { CTLname_latex_cmd
      'name.latex.cmd :=
    }
  if$
  CTLname_url_prefix
  missing$
    { skip$ }
    { CTLname_url_prefix
      'name.url.prefix :=
    }
  if$
  CTLuse_ieej_abbrev
  empty$
    { skip$ }
    { CTLuse_ieej_abbrev
      yes.no.to.int
      'use.ieej.abbrev :=
      use.ieej.setting #1 =
        { use.ieej.abbrev 'is.forced.et.al := }
        { skip$ }
      if$
    }
  if$

  num.names.shown.with.forced.et.al max.num.names.before.forced.et.al &gt;
    { "CTLnames_show_etal cannot be greater than CTLmax_names_forced_etal in " cite$ * warning$ 
      max.num.names.before.forced.et.al 'num.names.shown.with.forced.et.al :=
    }
    { skip$ }
  if$
}


%%%%%%%%%%%%%%%%%%%
%% ENTRY ALIASES %%
%%%%%%%%%%%%%%%%%%%
FUNCTION {conference}{inproceedings}
FUNCTION {online}{electronic}
FUNCTION {internet}{electronic}
FUNCTION {webpage}{electronic}
FUNCTION {www}{electronic}
FUNCTION {default.type}{misc}



%%%%%%%%%%%%%%%%%%
%% MAIN PROGRAM %%
%%%%%%%%%%%%%%%%%%

READ

EXECUTE {initialize.controls}
EXECUTE {initialize.status.constants}
EXECUTE {banner.message}

EXECUTE {initialize.longest.label}
ITERATE {longest.label.pass}

EXECUTE {begin.bib}
ITERATE {call.type$}
EXECUTE {end.bib}

EXECUTE{completed.message}


%% That's all folks, mds.
</pre></body></html>