//
/* ----------------------------------------------------------------------------------------------
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;
}
}
}
//戻る