//
/* ---------------------------------------------------------------------------------------------- charcode.java キャラクターコード ver. 1.20 2000.02.10 (JDK 1.02) ueyama@infonet.co.jp 1998.09.26 ---------------------------------------------------------------------------------------------- */ import java.applet.Applet; import java.awt.*; import java.lang.Math; public class charcode extends Applet { int Ofsx= 38, Ofsy= 38; // コード表の左上隅の座標 int Maxx=391, Maxy=391; // コード表の右下隅の座標 int Minx= 16, Miny= 16; // コード表の見出しの欄の左上隅の座標 int Tp=22; // コード表の1マスのサイズ int Mx = 99, My = 99; // マウスクリック値 (0 〜 15) int F_no=0; // 0: JIS 8 単位コード 1: EBCDIC コード int Ctl[][]={{3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,131}, // JIS 8 {7,7,15,3,15,15,15,15,2,3,7,15,11,15,7,15}}; // EBCDIC int Blk[][]={{50944,49920,49920,49920,49920,49920,49920,49920, 49920,49920,49920,49920,49920,49920,49920,49920}, // JIS 8 {32648,18616, 2288, 2300, 2288, 2288, 2288, 2288, 2301, 2300,65288,65280,65284,65280,65288,65280}}; // EBCDIC Checkbox cb_jis8, cb_ebcdic; Button bt_clear; Image fig[]= new Image[2]; Graphics gr; public void update(Graphics g) { paint(g); } public void init() { String bg=getParameter("BgColor"); int bc=Integer.valueOf(bg,16).intValue(); setBackground(new Color(bc)); gr=getGraphics(); MediaTracker mt=new MediaTracker(this); for(int i=0;i<2;i++) { fig[i]=getImage(getCodeBase(), getParameter("gif"+i)); mt.addImage(fig[i], 0); } try { mt.waitForID(0); } catch(InterruptedException e){}; CheckboxGroup cg=new CheckboxGroup(); Panel p=new Panel(); p.add(cb_jis8 =new Checkbox("JIS 8", cg,true)); p.add(cb_ebcdic =new Checkbox("EBCDIC",cg,false)); p.add(bt_clear =new Button("CLEAR")); setLayout(new BorderLayout()); add("South" ,p); } public boolean inside(int n, int a, int b) { return (n<=Math.max(a,b) && n>=Math.min(a,b)) ? true:false; } public boolean is_control(int c, int x, int y) // 制御コードなら true を返す { int m=1 << x; return ((Ctl[c][y] & m)==0)? false:true; } public boolean is_blank(int c, int x, int y) // 未定義コードなら true を返す { int m=1 << x; return ((Blk[c][y] & m)==0)? false:true; } public void dsp_code(int x, int y) // コードの表示 { int i; String bx,by, hx,hy; bx=Integer.toString(x,2); by=Integer.toString(y,2); for(i=bx.length(); i<4; i++) bx="0"+bx; for(i=by.length(); i<4; i++) by="0"+by; hx=Integer.toString(x,16); hx=hx.toUpperCase(); hy=Integer.toString(y,16); hy=hy.toUpperCase(); if(Mx==99) gr.setColor(new Color(153,153,153)); // Clear 時は灰色 else if(is_control(F_no, x, y)) gr.setColor(new Color(51,102,153)); // 制御コードは青く else if(is_blank(F_no, x, y)) gr.setColor(new Color(153,0,102)); // 未定義は赤く表示 else gr.setColor(new Color(102,102,51)); gr.clearRect(Ofsx,Maxy+1,Maxx-Ofsx,32); gr.setFont(new Font("Helvetica",Font.BOLD,22)); gr.drawString("CODE = "+hx+hy+" ( = "+bx+" "+by+" )",Ofsx,Maxy+28); } public void paint(Graphics g) { g.clearRect(0,0,size().width,size().height); g.setColor(new Color(247,247,208)); // 表の見出しの色を変える g.fillRect(Ofsx,Miny,Maxx-Ofsx,Tp); g.fillRect(Minx,Ofsy,Tp,Maxy-Ofsy); if(Mx<16 && My<16) { g.setColor(new Color(240,240,192)); // クリックされた行・列の色を変える g.fillRect(Minx,Ofsy+My*Tp,Maxx-Minx,Tp); g.fillRect(Ofsx+Mx*Tp,Miny,Tp,Maxy-Miny); g.setColor(new Color(224,224,176)); // 見出しの色を変える g.fillRect(Minx,Ofsy+My*Tp,Tp,Tp); g.fillRect(Ofsx+Mx*Tp,Miny,Tp,Tp); g.setColor(new Color(208,208,144)); // クリックされた行・列の色を変える g.fillRect(Ofsx+Mx*Tp,Ofsy+My*Tp,Tp,Tp); dsp_code(Mx,My); } g.drawImage(fig[F_no],0,0,this); } public boolean mouseDown(Event e, int mx, int my) { if(inside(mx,Ofsx,Maxx) && inside(my,Ofsy,Maxy)) { Mx=(mx-Ofsx)/Tp; My=(my-Ofsy)/Tp; } repaint(); return true; } public boolean mouseMove(Event e, int mx, int my) { if(inside(mx,Ofsx,Maxx-1) && inside(my,Ofsy,Maxy-1) && Mx==99) dsp_code((mx-Ofsx)/Tp,(my-Ofsy)/Tp); return true; } public boolean action(Event e, Object o) { if(e.target==cb_jis8) F_no=0; else if(e.target==cb_ebcdic) F_no=1; else if(e.target==bt_clear) Mx=My=99; repaint(); return true; } } //戻る