//
/* ----------------------------------------------------------------------------------------------
chr_code.java キャラクタコード ver. 1.01 (JDK 1.02)
ueyama@infonet.co.jp 1999.10.01
---------------------------------------------------------------------------------------------- */
import java.applet.Applet;
import java.awt.*;
public class chr_code extends Applet
{
int X0=16,Y0=16, X1=38,Y1=38, X=999,Y=999,N=128;
int E[]={0,1,2,3,256,9,257,127,160,258,259,11,12,13,14,15, // EBCDIC Code data
16,17,18,260,261,262,8,263,24,25,264,265,266,267,268,269,
270,271,28,160,272,10,23,27,160,160,273,4,160,5,6,7,
160,160,22,160,275,30,276,4,160,160,160,277,20,21,160,26,
32,160,160,160,160,160,160,160,160,160,279,46,60,40,43,124,
38,160,160,160,160,160,160,160,160,160,33,36,42,41,59,280,
45,47,160,160,160,160,160,160,160,160,94,44,37,95,62,63,
160,160,160,160,160,160,160,160,160,160,58,35,64,39,61,34,
160,97,98,99,100,101,102,103,104,105,160,160,160,160,160,160,
160,106,107,108,109,110,111,112,113,114,160,160,160,160,160,160,
160,126,115,116,117,118,119,120,121,122,160,160,160,160,160,160,
160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,
160,65,66,67,68,69,70,71,72,73,160,160,160,160,160,160,
160,74,75,76,77,78,79,80,81,82,160,160,160,160,160,160,
160,160,83,84,85,86,87,88,89,90,160,160,160,160,160,160,
48,49,50,51,52,53,54,55,56,57,160,160,160,160,160,278};
int R,G,B;
boolean Jis=true; // true: JIS, false: EBCDIC
boolean Code=true; // true: Code, false: Number
boolean C[]=new boolean[256]; // true: Code, false: Number
Graphics gr;
Image Img;
public void init()
{
int r=Integer.parseInt(getParameter("bg_red"));
int g=Integer.parseInt(getParameter("bg_green"));
int b=Integer.parseInt(getParameter("bg_blue"));
setBackground(new Color(r,g,b));
R=Integer.parseInt(getParameter("tb_red"));
G=Integer.parseInt(getParameter("tb_green"));
B=Integer.parseInt(getParameter("tb_blue"));
MediaTracker mt=new MediaTracker(this);
Img=getImage(getCodeBase(), getParameter("figure"));
mt.addImage(Img, 0);
try
{
mt.waitForID(0);
}
catch(InterruptedException e){};
gr=getGraphics();
for(r=0;r<256;r++) C[r]=Code;
}
public void update(Graphics g)
{
paint(g);
}
public boolean inside(int x, int a, int b)
{
return (x<=Math.max(a,b) && x>=Math.min(a,b)) ? true:false;
}
public void dsp_g(int x, int y, int n, int c)
{
Graphics gx=gr.create();
int w=0, h=0, ox=0, oy=0;
switch(n)
{
case 0: w= 9; h= 9; ox= 0; oy= 0; break; // 16進数
case 1: w= 5; h= 9; ox=144; oy= 0; break; // 10進数
case 2: w=17; h= 9; ox= 0; oy= 9; break; // 制御コード
case 3: w=13; h=13; ox= 0; oy=18; break; // SP to ?
case 4: w=13; h=13; ox= 0; oy=31; break; // @ to _
case 5: w=13; h=13; ox= 0; oy=44; break; // ' to DEL
case 6: w=13; h=13; ox= 0; oy=57; break; // 未定義
case 7: w=13; h=13; ox= 0; oy=57; break; // 未 to ソ
case 8: w=13; h=13; ox= 0; oy=70; break; // タ to ゜
case 9: w=13; h=13; ox= 0; oy=57; break; // 未定義
case 10: w=17; h= 9; ox=194; oy= 0; break; // EBCDIC 制御コード
case 11: w=13; h=13; ox=416; oy=31; break; // EBCDIC 文字
case 12: w=56; h=24; ox= 0; oy=83; break; // "JIS 8"
case 13: w=76; h=24; ox=112; oy=83; break; // "EBCDIC"
case 14: w=46; h=24; ox=264; oy=83; break; // "数字"
case 15: w=46; h=24; ox=356; oy=83; break; // "文字"
case 16: w=64; h=13; ox=442; oy=31; break; // "CODE="
case 17: w=11; h=13; ox=416; oy=18; break; // 16進数
case 18: w=65; h=11; ox=506; oy=31; break; // "上位4ビット"
case 19: w=11; h=72; ox=580; oy=31; break; // "下位4ビット"
}
gx.clipRect(x,y,w,h);
gx.drawImage(Img,x-(ox+((n==6 || n==9)?0:c*w)),y-oy,this);
gx.dispose();
}
public void dsp_n(int n) // 数値の表示
{
int i=n/16, j=n%16, ox;
String dec,c;
gr.clearRect(i*22+X1+1,j*22+Y1+1,21,21);
if(n<10)
{
ox=9;
dsp_g(X1+i*22+ox,Y1+j*22+7,1,n);
}
else if(n<100)
{
ox=6;
dsp_g(X1+i*22+ox,Y1+j*22+7,1,n/10);
dsp_g(X1+i*22+ox+6,Y1+j*22+7,1,n%10);
}
else
{
ox=3;
dec=Integer.toString(n,10);
c=dec.substring(0,1);
dsp_g(X1+i*22+ox,Y1+j*22+7,1,Integer.parseInt(c));
c=dec.substring(1,2);
dsp_g(X1+i*22+ox+6,Y1+j*22+7,1,Integer.parseInt(c));
c=dec.substring(2,3);
dsp_g(X1+i*22+ox+12,Y1+j*22+7,1,Integer.parseInt(c));
}
}
public void dsp_c(int n) // コードの表示
{
int g=0, x=n/16, y=n%16;
if(!Jis) n=E[n];
gr.clearRect(x*22+X1+1,y*22+Y1+1,21,21);
if(n<256) g=n/32+2;
else if(n<279) g=10;
else if(n>278) {g=11; n-=279;}
dsp_g(x*22+X1+((g==2 || g==10)?3:5), y*22+Y1+((g==2 || g==10)?7:5), g, (n/16)%2*16+n%16);
}
public void paint(Graphics g)
{
int i,j;
g.setColor(new Color(R,G,B));
g.fillRect(39,17,351,21);
g.fillRect(17,39,21,351);
g.setColor(new Color(0,0,0));
dsp_g(38,0,18,0); dsp_g(0,38,19,0); // 上・下位4ビット
for(i=0;i<18;i++) g.drawLine(X0+i*22,(i==0)?Y1:Y0,X0+i*22,Y0+374); // 表の表示
for(j=0;j<18;j++) g.drawLine((j==0)?X1:X0,Y0+j*22,X0+374,Y0+j*22);
for(i=0;i<16;i++) dsp_g(X1+i*22+7,Y0+7,0,i); // 見出しの表示
for(j=0;j<16;j++) dsp_g(X0+7,Y1+j*22+7,0,j);
// 表中データの表示
for(i=0;i<16;i++) for(j=0;j<16;j++) if(C[i*16+j]) dsp_c(i*16+j); else dsp_n(i*16+j);
dsp_g(139,406,12,(Jis)?1:0); // "JIS 8"
dsp_g(197,406,13,(Jis)?0:1); // "EBCDIC"
dsp_g(283,406,14,(Code)?0:1); // "数字"
dsp_g(331,406,15,(Code)?1:0); // "文字"
}
public boolean mouseDown(Event e, int x, int y)
{
int mx=(x-X1), my=(y-Y1), n=0;
boolean b=false;
if(inside(mx,0,352) && inside(my,0,352)) // コード表
{
n=(x-X1)/22*16+(y-Y1)/22;
if(C[n]) {dsp_n(n); C[n]=false;}
else {dsp_c(n); C[n]=true;}
}
if(inside(y,406,430)) // ボタン
{
if(inside(x,139,195) || inside(x,197,273))
{
if(inside(x,139,195)) Jis=true; else Jis=false;
dsp_g(139,406,12,(Jis)?1:0); // "JIS 8"
dsp_g(197,406,13,(Jis)?0:1); // "EBCDIC"
b=true;
}
if(inside(x,283,429) || inside(x,331,391))
{
if(inside(x,331,391)) Code=true; else Code=false;
for(n=0;n<256;n++) C[n]=Code;
dsp_g(283,406,14,(Code)?0:1); // "数字"
dsp_g(331,406,15,(Code)?1:0); // "コード"
b=true;
}
if(b) repaint();
}
return true;
}
public boolean mouseMove(Event e, int x, int y)
{
int mx=(x-X1), my=(y-Y1), n=0;
gr.clearRect(X0+10,411,90,13);
if(inside(mx,0,351) && inside(my,0,351))
{
if(C[N]) dsp_c(N);
else dsp_n(N);
n=(x-X1)/22*16+(y-Y1)/22;
if(C[n]) dsp_n(n);
else dsp_c(n);
dsp_g(X0+10,411,16,0);
dsp_g(X0+74,411,17,n/16);
dsp_g(X0+87,411,17,n%16);
X=mx; Y=my;
N=n;
}
return true;
}
}
//戻る