\def\setprotcode#1{%
    \rpcode#1`\!=200
    \rpcode#1`\,=700
    \rpcode#1`\-=700
    \rpcode#1`\.=700
    \rpcode#1`\;=500
    \rpcode#1`\:=500
    \rpcode#1`\?=200
    \lpcode#1`\`=700
    \rpcode#1`\'=700
    \lpcode#1 92=500  % ``
    \rpcode#1 34=500  % ''
    \rpcode#1 123=300 % --
    \rpcode#1 124=200 % ---
    \rpcode#1`\)=50
    \rpcode#1`\A=50
    \rpcode#1`\F=50
    \rpcode#1`\K=50
    \rpcode#1`\L=50
    \rpcode#1`\T=50
    \rpcode#1`\V=50
    \rpcode#1`\W=50
    \rpcode#1`\X=50
    \rpcode#1`\Y=50
    \rpcode#1`\k=50
    \rpcode#1`\r=50
    \rpcode#1`\t=50
    \rpcode#1`\v=50
    \rpcode#1`\w=50
    \rpcode#1`\x=50
    \rpcode#1`\y=50
    \lpcode#1`\(=50
    \lpcode#1`\A=50
    \lpcode#1`\J=50
    \lpcode#1`\T=50
    \lpcode#1`\V=50
    \lpcode#1`\W=50
    \lpcode#1`\X=50
    \lpcode#1`\Y=50
    \lpcode#1`\v=50
    \lpcode#1`\w=50
    \lpcode#1`\x=50
    \lpcode#1`\y=50
    \adjustprotcode#1
}

\makeatletter
\newif\ifneedadjustprotcode
\def\adjustprotcode#1{%
    \needadjustprotcodefalse
    \ifnum\pdftexversion > 14
        \needadjustprotcodetrue
    \else\ifnum\pdftexversion > 13
        \ifnum \expandafter`\pdftexrevision > `g
            \needadjustprotcodetrue
	\fi
    \fi\fi
    \ifneedadjustprotcode
        \@tempcnta=0
        \loop
            \ifcase\lpcode#1\@tempcnta\else
                \adjustcp\lpcode#1\@tempcnta
            \fi
            \ifcase\rpcode#1\@tempcnta\else
                \adjustcp\rpcode#1\@tempcnta
            \fi
            \advance\@tempcnta 1
        \ifnum\@tempcnta < 256 \repeat
    \fi
}
\def\adjustcp#1#2#3{%
    \setbox0=\hbox{%
        \ifx#2\font\else#2\fi
        \char#3}%
    \@tempcntb=\wd0
    \multiply\@tempcntb #1#2#3%
    \divide\@tempcntb \fontdimen6 #2%
    #1#2#3=\@tempcntb
}
\makeatother
