//
/* ---------------------------------------------------------------------------------------------- filesystem.java ファイルシステム ver. 1.00 (JDK 1.02) ueyama@infonet.co.jp 2000.08.05 ---------------------------------------------------------------------------------------------- */ import java.applet.*; import java.awt.*; import java.lang.Math; import java.util.*; public class filesystem extends Applet { int Mx=340, My=5; // メモリデータ表示座標 int Dr=160; // ディスク半径 int Dl[]=new int[26]; // データの長さ int Dn[]=new int[26]; // データの順序 boolean W[] =new boolean[26]; // true; 保存 boolean F=false; // true; フォーマット済み int Fat[]=new int[90]; // FAT int Dc[]={0x00ff66, 0x00cc99, 0x00ffcc, 0x00ccff, 0x33ff66, 0x33cc99, 0x33ffcc, 0x33ccff, 0x66ff66, 0x66cc99, 0x66ffcc, 0x66ccff, 0x99ff66, 0x99cc99, 0x99ffcc, 0x99ccff, 0xccff66, 0xcccc99, 0xccffcc, 0xccccff, 0xffff66, 0xffcc99, 0xffffcc, 0xffccff, 0xff9966, 0xff99ff,0x666666, 0x999999}; // カラーテーブル int Bgc; Graphics gr; Image Img; Random Rnd=new Random(); public void init() { int i,j,k,d; int n[]=new int[26]; Random rnd=new Random(); String bg=getParameter("BgColor"); Bgc=Integer.valueOf(bg,16).intValue(); setBackground(new Color(Bgc)); gr=getGraphics(); MediaTracker mt=new MediaTracker(this); Img=getImage(getCodeBase(),"format.gif"); mt.addImage(Img, 0); try { mt.waitForID(0); } catch(InterruptedException e){}; k=0; for(i=0; i<26; i++) { Dl[i]=Math.abs(Rnd.nextInt())%350+10; n[i]=Math.abs(Rnd.nextInt()); W[i]=false; } for(i=0; i<26; i++) { d=0; for(j=0; j<26; j++) {if(n[j]>d) {d=n[j]; k=j;}} n[k]=0; Dn[i]=k; } } 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_d(int t, int s, int n) // 保存データの表示 { int d=Dr*2-t*24-6; gr.setColor(new Color(Dc[n])); for(double r=s*24+3.0; r<(s+1)*24-3.0; r+=1.0) { int x=t*12+3+(d+(int)(Math.cos(r*3.14159/180.0)*(d-10))-10)/2; int y=t*12+3+(d-(int)(Math.sin(r*3.14159/180.0)*(d-10))-10)/2; gr.fillOval(x,y,10,10); } } public void paint(Graphics g) { int i=0, j=0, x=0, y=0; g.setColor(new Color(Dc[27])); g.fillOval(0, 0, Dr*2, Dr*2); g.setColor(new Color(Bgc)); g.fillOval(Dr-50, Dr-50, 100, 100); g.drawImage(Img, Dr-23, Dr-6, this); if(F) for(i=0;i<90;i++) dsp_d(i/15, i%15, (Fat[i]<0)?26:Dn[Fat[i]]); for(i=0;i<26;i++) { g.setColor(new Color(Dc[(W[i])?27:Dn[i]])); g.fillRect(Mx, My+12*i, Dl[i], 10); } } public boolean mouseDown(Event e, int mx, int my) { int a,i,j,n,s,t,x,y; double r; int r2=(Dr-mx)*(Dr-mx)+(Dr-my)*(Dr-my); if(mx>Mx && inside(my, My, My+310) && F) // Write { i=(my-My)/12; if(inside(mx, Mx, Mx+Dl[i]) && !W[i]) { n=(int)Math.ceil((float)Dl[i]/48.0); for(j=0; j<90; j++) { if(Fat[j]<0 && n>0) { W[i]=true; gr.setColor(new Color(Dc[27])); gr.fillRect(Mx, My+12*i, Dl[i], 10); dsp_d(j/15, j%15, Dn[i]); Fat[j]=i; n--; } } } } if(mx<=Dr*2 && my<=Dr*2) // Delete or Format { if(inside(r2, 85*85, 157*157) && F) // Delete { r=Math.sqrt((float)r2); s=(int)(Math.asin((double)(Dr-my)/r)*180.0/3.14159); if(mx戻るDr) s=360+s; s/=24; t=(Dr-(int)r-85)/12+6; a=t*15+s; i=Fat[a]; if(i>=0) { W[i]=false; gr.setColor(new Color(Dc[Dn[i]])); gr.fillRect(Mx, My+12*i, Dl[i], 10); for(j=0; j<90; j++) { if(Fat[j]==i) { dsp_d(j/15, j%15, 26); Fat[j]=-1; } } } } if(r2<50*50) // Format { for(i=0;i<90;i++) { dsp_d(i/15, i%15, 26); Fat[i]=-1; } for(i=0; i<26; i++) { gr.setColor(new Color(Dc[Dn[i]])); gr.fillRect(Mx, My+12*i, Dl[i], 10); W[i]=false; } F=true; } } return true; } } //