//
/* ---------------------------------------------------------------------------------------------- prn_head.java ドットインパクトプリンタ ver. 1.00 (JDK 1.02) ueyama@infonet.co.jp 1999.03.04 ---------------------------------------------------------------------------------------------- */ import java.applet.Applet; import java.awt.*; public class prn_head extends Applet implements Runnable { int Wait=128; // 待ち時間 (msec) int R,G,B; int Fx=126, Fy=13; // 文字表示位置 int Fc=1; // 文字表示色 0:淡灰 1:濃灰 2:赤 int Hx=0; // ヘッド位置 int Hp=1; // ヘッド移動ピッチ boolean Busy=false; Image Gif; Image buf=null; Thread th=null; Graphics gr; Button bt_slow, bt_fast, bt_pause, bt_reset, bt_run, bt_pitch; boolean T=true, F=false; boolean font[][]={{F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F}, // 「漢」データ {F,F,F,F,F,F,F,T,F,F,F,F,F,F,F,F,T,F,F,F,F,F,F,F}, {F,F,F,F,F,F,F,F,T,T,T,F,F,F,F,F,T,T,T,F,F,F,F,F}, {F,F,T,F,F,F,F,F,F,T,T,F,F,F,F,T,T,T,T,T,T,T,T,F}, {F,F,F,T,T,T,F,F,F,F,F,F,F,T,T,T,T,F,F,T,T,T,T,F}, {F,F,F,F,T,T,F,F,F,F,F,T,T,T,T,F,F,F,F,F,F,F,F,F}, {F,F,F,F,F,F,F,F,T,T,T,F,F,F,F,F,F,F,F,F,F,F,F,F}, {F,F,F,T,F,F,F,F,F,F,F,F,F,F,F,F,F,T,F,F,F,F,T,F}, {F,F,F,T,F,F,F,F,F,F,F,F,F,F,T,F,F,T,F,F,F,F,T,F}, {F,F,F,T,F,F,F,T,T,T,T,T,F,F,T,F,F,T,F,F,F,T,F,F}, {F,F,F,T,F,F,F,T,T,T,T,T,F,F,T,F,F,T,F,F,F,T,F,F}, {F,T,T,T,T,T,F,T,F,F,F,T,F,F,T,F,F,T,F,F,T,F,F,F}, {F,T,T,T,T,T,F,T,F,F,F,T,F,F,T,F,F,T,F,T,T,F,F,F}, {F,F,F,T,F,F,F,T,F,F,F,T,F,F,T,F,F,T,T,T,F,F,F,F}, {F,F,F,T,F,F,F,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,F,F}, {F,F,F,T,F,F,F,T,T,T,T,T,T,T,T,T,T,T,F,F,F,F,F,F}, {F,F,F,T,F,F,F,T,F,F,F,T,F,F,T,F,F,T,T,F,F,F,F,F}, {F,T,T,T,T,T,F,T,F,F,F,T,F,F,T,F,F,T,F,T,F,F,F,F}, {F,T,T,T,T,T,F,T,F,F,F,T,F,F,T,F,F,T,F,F,T,F,F,F}, {F,F,F,T,F,F,F,T,T,T,T,T,F,F,T,F,F,T,F,F,F,T,F,F}, {F,F,F,T,F,F,F,T,T,T,T,T,F,F,T,F,F,T,F,F,F,T,T,F}, {F,F,F,T,F,F,F,F,F,F,F,F,F,F,T,F,F,T,F,F,F,T,T,F}, {F,F,T,T,F,F,F,F,F,F,F,F,F,F,F,F,F,T,F,F,F,T,F,F}, {F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F}, {F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F}, {F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F}, {F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F}, // 「字」データ {F,F,F,F,F,F,F,T,T,F,F,F,F,T,F,F,F,F,F,F,F,F,F,F}, {F,F,F,F,F,T,T,T,T,F,F,F,F,T,F,F,F,F,F,F,F,F,F,F}, {F,F,F,T,T,T,T,F,F,F,F,F,F,T,F,F,F,F,F,F,F,F,F,F}, {F,F,F,F,T,F,F,F,F,F,F,F,F,T,F,F,F,F,F,F,F,F,F,F}, {F,F,F,F,T,F,F,T,F,F,F,F,F,T,F,F,F,F,F,F,F,F,F,F}, {F,F,F,F,T,F,F,T,F,F,F,F,F,T,F,F,F,F,F,F,F,F,F,F}, {F,F,F,F,T,F,F,T,F,F,F,F,F,T,F,F,F,F,F,F,F,F,F,F}, {F,F,F,F,T,F,F,T,F,F,F,F,F,T,F,F,F,F,F,F,F,T,F,F}, {F,F,F,F,T,F,F,T,F,F,F,F,F,T,F,F,F,F,F,F,F,T,F,F}, {F,F,F,F,T,F,F,T,F,F,F,F,F,T,F,F,F,F,F,F,F,T,T,F}, {F,T,T,T,T,F,F,T,F,F,F,T,T,T,T,T,T,T,T,T,T,T,T,F}, {F,T,T,T,T,F,F,T,F,F,F,T,T,T,T,T,T,T,T,T,T,T,F,F}, {F,T,F,F,T,F,F,T,F,F,F,T,F,T,F,F,F,F,F,F,F,F,F,F}, {F,F,F,F,T,F,F,T,F,F,T,F,F,T,F,F,F,F,F,F,F,F,F,F}, {F,F,F,F,T,F,F,T,F,T,T,F,F,T,F,F,F,F,F,F,F,F,F,F}, {F,F,F,F,T,F,F,T,T,T,F,F,F,T,F,F,F,F,F,F,F,F,F,F}, {F,F,F,F,T,F,F,F,T,T,F,F,F,T,F,F,F,F,F,F,F,F,F,F}, {F,F,F,F,T,F,F,F,F,F,F,F,F,T,F,F,F,F,F,F,F,F,F,F}, {F,F,F,F,T,F,F,T,F,F,F,F,F,T,F,F,F,F,F,F,F,F,F,F}, {F,F,F,T,T,F,T,T,F,F,F,F,F,T,F,F,F,F,F,F,F,F,F,F}, {F,F,F,F,T,T,T,F,F,F,F,F,T,T,F,F,F,F,F,F,F,F,F,F}, {F,F,F,F,F,T,T,F,F,F,F,F,F,T,F,F,F,F,F,F,F,F,F,F}, {F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F}}; public void init() { R=Integer.parseInt(getParameter("bg_red")); G=Integer.parseInt(getParameter("bg_green")); B=Integer.parseInt(getParameter("bg_blue")); setBackground(new Color(R,G,B)); buf=createImage(size().width,size().height); MediaTracker mt=new MediaTracker(this); Gif=getImage(getCodeBase(),"prn_head.gif"); mt.addImage(Gif, 0); try { mt.waitForID(0); } catch(InterruptedException e){}; Panel p=new Panel(); p.add(bt_slow =new Button("<<")); p.add(bt_reset =new Button("RESET")); p.add(bt_pitch =new Button("PITCH 7")); p.add(bt_run =new Button("RUN")); p.add(bt_pause =new Button("PAUSE")); p.add(bt_fast =new Button(">>")); setLayout(new BorderLayout()); add("South",p); gr=getGraphics(); } public void start() { if(th==null) { th=new Thread(this); th.start(); } } public void dsp_dot(int x, int y, int c, Graphics g) // ドットの表示 { Graphics gx=g.create(); gx.clipRect(x,y,7,7); gx.drawImage(Gif,x-105,y-7*c,this); gx.dispose(); } public void dsp_head(int x, Graphics g) // プリントヘッドの表示 { Graphics gx=g.create(); gx.clipRect(x,0,105,194); gx.drawImage(Gif,x,0,this); gx.dispose(); } public void dsp_font(int c, Graphics g) // 文字「漢字」の表示 { int x, y, m, n; m=c; for(y=0;y<24;y++) { for(x=0;x<50;x++) { if(((Fx+x*7-(Hx+77))==0 && y%2==0) || ((Fx+x*7-(Hx+21))==0 && y%2==1)) m=2; else if(((Fx+x*7-(Hx+77))<0 && y%2==0) || ((Fx+x*7-(Hx+21))<0 && y%2==1)) m=1; else m=c; if(font[x][y]) dsp_dot(Fx+x*7,Fy+y*7,m,g); } } } public void paint(Graphics g) { g.setColor(new Color(R,G,B)); g.fillRect(0,0,size().width,size().height); dsp_head(Hx, g); // 印字ヘッドを描く dsp_font(Fc, g); // 文字「漢字」を描く } public void run() { while(th!=null) { if(Busy) { Graphics offg=buf.getGraphics(); paint(offg); Graphics ong=getGraphics(); ong.drawImage(buf,0,0,this); Hx+=Hp; if(Hx>489) { Busy=false; bt_reset.enable(); } } try { th.sleep(Wait*Hp); } catch (InterruptedException e){}; } } public boolean mouseDown(Event e, int mx, int my) { if(my<194) { if(mx>110) { Busy=true; Fc=0; bt_reset.disable(); } else { Busy=false; Fc=1; bt_reset.enable(); } } return true; } public boolean action(Event e, Object o) { if(e.target==bt_slow) { Wait*=2; bt_fast.enable(); } else if(e.target==bt_fast) { Wait/=2; if(Wait==32) bt_fast.disable(); } else if(e.target==bt_pause) { Busy=false; bt_reset.enable(); } else if(e.target==bt_reset) { Busy=false; Hx=0; Fc=1; bt_reset.disable(); repaint(); } else if(e.target==bt_run) { Busy=true; Fc=0; if(Hx==490) Hx=0; bt_reset.disable(); } else if(e.target==bt_pitch) { bt_pitch.setLabel("PITCH "+Hp); if(Hp==1) { Hp=7; Hx/=7; Hx*=7; } else Hp=1; } return true; } public void stop() { if(th!=null) { th.stop(); th=null; } } } //戻る