发信人: ycs830() 
整理人: yangcs(2000-04-08 08:50:21), 站内信件
 | 
 
 
    我正在改进,加一些注释,语句上也改进一下,过些天再说。
     你不妨现在还用功能5。
 
 # define M (long)0xffffl
 # define N 512
 # define N2 (N*2)
 # define N12 (N/2)
 # define CMOSN 1024
 # include <io.h>
 # include <bios.h>
 # include <dos.h>
 # include <conio.h>
 # include <stdio.h>
 unsigned char s[N2],t[N],ss[N2];
 unsigned int r[N],l[N],head,track,sec;
 static char *scr[]={"1--ycsread","2--ycswrite","3--ycsbf","4--ycssys", 
       "5--fdisk","6--fdisk1","7--cmosread","8--cmoswrite","9--PAT","0- -exit"};
 static char pwd[]={'y'-10,'t'-10,'s'-10,'h'-10,'o'-10};
 struct boot { char s1[28];long hidesec,totalsec;char s2[474];
 	      unsigned int flag0;} boot;
 main(n,c)
 int n;
 char *c[];
 {
 int i,j;
 char s[100];
 password();
 if(n==2)
   {
   i=c[1][0];
   ycs(i);
   exit(0);
   }
 
 while(1)
   {
   i=putscr();
   ycs(i);
   }
 }
 
 password()
 {
 int i;
 window(1,1,80,25);
 clrscr();
 gotoxy(20,15);
 cputs("passwd:(1999.04.26)");
 for(i=0;i<5;i++)
   if(getch()!=pwd[i]+10)
     i=0;
 }
 
 putscr()
 {
 int i,j,k;
 window(1,1,80,25);
 clrscr();
 window(20,10,60,21);
 for(j=0;j<10;j++)
   {
   gotoxy(1,j+1);
   cputs(scr[j]);
   }
 i=getch();
 window(1,1,80,25);
 clrscr();
 return(i);
 }
 
 ycs(int i)
 {
 switch(i)
   {
   case '1': ycsread();break;
   case '2': ycswrite();break;
   case '3': ycsbf();break;
   case '4': ycssys();break;
   case '5': find55aa();fdisk();break;
   case '6': fdisk1();break;
   case '7': cmosread();break;
   case '8': cmoswrite();break;
   case '9': readpat();break;
   case '0': exit(0);
   }
 }
 
 ycsbf()
 {
 int i,j,k;
 char f[100];
 f[0]=60;
 /*  read PAT  */
 if(biosdisk(2,0x80,0,0,1,1,s)!=0)
   {
   gotoxy(20,24);
   cputs("error read PAT");
   sleep(2);
   return;
   }
 
 /*  read ROOT  */
 findroot();
 if(biosdisk(2,0x80,head,track,sec,1,s+N)!=0)
   {
   gotoxy(20,24);
   cputs("read Boot error");
   sleep(2);
   return;
   }
 
 gotoxy(20,15);
 cputs("file name:");
 cgets(f);
 _creat(f+2,0x20);
 if((k=_open(f+2,2))==-1)
    {
    gotoxy(20,24);
    cputs("open file error");
    sleep(2);
    return;
    }
 if(_write(k,s,N2)==-1)
   {
   gotoxy(20,24);
   cputs("write file error ");
   sleep(2);
   return;
   }
 }
 
 ycssys()
 {
 int i,k;
 char f[100];
 f[0]=60;
 
 gotoxy(20,15);
 cputs("filename:");
 cgets(f);
 if((k=open(f+2,1))==-1)
   {
   gotoxy(20,24);
   cputs("file not find");
   sleep(2);
   return;
   }
 if(_read(k,s,N2)==-1)
   {
   gotoxy(20,24);
   cputs("read file error");
   sleep(2);
   return;
   }
 
 /*  write PAT  */
 if(biosdisk(3,0x80,0,0,1,1,s)!=0)
   {
   gotoxy(20,24);
   cputs("SYS error");
   sleep(2);
   return;
   }
 
 /*  write BOOT  */
 findroot();
 if(biosdisk(3,0x80,head,track,sec,1,s+N)!=0)
   {
   gotoxy(20,24);
   cputs("write Boot error");
   sleep(2);
   return;
   }
 }
 
 
 ycsread()
 {
 int i,j;
 
 if(biosdisk(2,0x80,0,0,1,2,s)!=0)
   {
   gotoxy(20,24);
   cputs("error sys");
   sleep(2);
   return(1);
   }
 
 for(i=0;i<6;i++)
    s[N+i]=i;
 
 if(biosdisk(3,0x80,0,0,2,1,s+N)!=0)
    {
    gotoxy(20,24);
    cputs("write flag error");
    sleep(2);
    return(1);
    }
 
 /*  read ROOT  */
 findroot();
 if(biosdisk(2,0x80,head,track,sec,1,s+N)!=0)
   {
   gotoxy(20,24);
   cputs("read Boot error");
   sleep(2);
   return(1);
   }
 
 
 if(biosdisk(3,0x80,0,0,3,2,s)!=0)
    {
    gotoxy(20,24);
    cputs("error write");
    sleep(2);
    return(1);
    }
 else
    {
    gotoxy(20,23);
    cputs("YCS tells you: Very good !");
    gotoxy(20,24);
    cputs("Telephone: 024-86908331,86892522");
    sleep(2);
    }
 
 }
 
 ycswrite()
 {
 int i=0;
 
 if(biosdisk(2,0x80,0,0,2,1,s)!=0)
   {
   gotoxy(20,24);
   cputs("read flag error");
   sleep(2);
   return(1);
   }
 
 for(i=0;i<6;i++)
    if(s[i]!=i)
        {
        gotoxy(20,24);
        cputs("flag error!");
        sleep(2);
        return(1);
        }
 
 if(biosdisk(2,0x80,0,0,3,2,s)!=0)
   {
   gotoxy(20,24);
   cputs("read PAT OR ROOT error");
   sleep(2);
   return(1);
   }
 
 for(i=0x1c2;i<N;i+=0x10)
    if((s[i]==1)||(s[i]==4)||(s[i]==6)||(s[i]==0x0b))
       {
       head=s[i-3];
       sec=s[i-2]&0x3f;
       track=(((int)(s[i-2]>>6))<<8)|s[i-1];
       }
 
 if(biosdisk(3,0x80,0,0,1,1,s)!=0)
   {
   gotoxy(20,24);
   cputs("SYS write error");
   sleep(2);
   return(1);
   }
 
 if(biosdisk(2,0x80,head,track,sec,1,s)!=0)
    {
    gotoxy(20,24);
    cputs("error");
    sleep(2);
    return(1);
    }
 
 if(biosdisk(3,0x80,0,0,5,1,s)!=0)
    {
    gotoxy(20,24);
    cputs("error");
    sleep(2);
    return(1);
    }
 
 if(biosdisk(3,0x80,head,track,sec,1,s+N)!=0)
    {
    gotoxy(20,24);
    cputs("Boot write error");
    sleep(2);
    return(1);
    }
 return(0);
 }
 
 findroot()
 {
 int i;
 for(i=0x1c2;i<N;i+=0x10)
    if((s[i]==1)||(s[i]==4)||(s[i]==6)||(s[i]==0x0b))
       {
       head=s[i-3];
       sec=s[i-2]&0x3f;
       track=(((int)(s[i-2]>>6))<<8)|s[i-1];
       }
 }
 
 find55aa()
 {
 int i,n;
 n=peek(peek(0,0x106),peek(0,0x104));
 for(i=1;i<n;i++)
   {
   biosdisk(2,0x80,0,i,1,1,r);
   if(r[N12-1]==0xaa55)
     cprintf("%5d",i-1);
   }
 }
 
 fdisk()
 {
 int ii,jj,fp;
 
 fp=_open("SYS",1);
 _read(fp,s,N);
 _close(fp);
 
 fdisk0(s);
 }
 
 fdisk0(s)
 struct word { unsigned sec:6;unsigned track:10;} ;
 struct fd {unsigned char bz0,head0;struct word word0;
 	   unsigned char bz1,head1;struct word word1;
 	   unsigned long int fd0,fd1;};
 struct s {unsigned char a[0x1be];struct fd bd[4];unsigned int bz;} *s; 
 {
 unsigned int s1,s2,head,track,sec;
 unsigned long i,j,k,fd0,fd1,jj,nn;
 
 int fp;
 s2=peek(0,0x104);  s1=peek(0,0x106);
 track=peek(s1,s2)-1;s2+=2;  head=peekb(s1,s2);s2+=12;  sec=peekb(s1,s2 );
 head &= 0xff;
 biosdisk(2,0x80,1,0,1,1,&boot);
 gotoxy(5,5);
 cprintf("track:%5d    head:%5d    sec:%5d",track,head,sec);
 
 i=sec*head;  k=M/i;  j= (k>track) ? track:k;
 nn=boot.hidesec+boot.totalsec;
 s1=(int)(nn/i);
 gotoxy(5,7);
 cprintf("MSDOS3.3 (C:32M) : %ld   \/   total : %d",j-1,track);
 /*
 cprintf("%ld %d %ld %4x",nn,s1,i,boot.flag0);
 */
 
 if((s1*i==nn)&&(boot.flag0==0xaa55))
   cprintf("   \/   default : %d",s1);
 gotoxy(5,9);
 cprintf("Please input a number (0 return) : ");
 cscanf("%ld",&jj);
 if(!jj)
   return;
 
 (*s).bd[0].bz0=0x80;
 (*s).bd[0].head0=1;
 (*s).bd[0].word0.sec=1;
 (*s).bd[0].word0.track=0;
 (*s).bd[0].bz1 = (jj<=j) ? 4:6;
 (*s).bd[0].head1=head-1;
 (*s).bd[0].word1.sec=sec;
 (*s).bd[0].word1.track=(jj<<2)+(jj>>8);
 (*s).bd[0].fd0=sec;
 (*s).bd[0].fd1=(jj*i)-(long)sec;
 
 if(jj<track)
    {
    jj++;
    (*s).bd[1].bz0=0;
    (*s).bd[1].head0=0;
    (*s).bd[1].word0.sec=1;
    (*s).bd[1].word0.track=(jj<<2)+(jj>>8);
    (*s).bd[1].bz1=5;
    (*s).bd[1].head1=head-1;
    (*s).bd[1].word1.sec=sec;
    (*s).bd[1].word1.track=(track<<2)+(track>>8);
    (*s).bd[1].fd0=i*jj;
    (*s).bd[1].fd1=(long)(track-jj)*i;
    }
 
 biosdisk(3,0x80,0,0,1,1,s);
 }
 
 cmosread()
 {
 int i,j;
 unsigned char s[N];
 char f[100];
 gotoxy(20,15);
 cputs("read CMOS Name:");
 f[0]=60;
 cgets(f);
 _creat(f+2,0x20);
 if((j=_open(f+2,4))==-1)
    {
    gotoxy(20,24);
    cputs("file open error");
    sleep(2);
    return(1);
    }
 for(i=0;i<CMOSN;i++)
    {
    outportb(0x70,i);
    s[i]=inportb(0x71);
    }
 if(_write(j,s,N)<=0)
    {
    gotoxy(20,24);
    cputs("file write error");
    sleep(2);
    return(1);
    }
 _close(j);
 gotoxy(20,24);
 cputs("yes");
 }
 
 cmoswrite()
 {
 int i,k,j;
 unsigned char s[N],f[100];
 f[0]=60;
 gotoxy(20,15);
 cputs("write CMOS name:");
 cgets(f);
 if((j=_open(f+2,4))==-1)
    {
    gotoxy(20,24);
    cputs("file not found");
    sleep(2);
    return(1);
    }
 if(_read(j,s,CMOSN)<CMOSN)
    {
    gotoxy(20,24);
    cputs("file not found");
    sleep(2);
    return(1);
    }
 for(i=N-1;i>=0;i--)
    {
    outportb(0x70,i);
    outportb(0x71,s[i]);
    }
 _close(j);
 gotoxy(20,16);
 cputs("yes");
 sleep(2);
 }
 
 fdisk1()
 {
 int i;
 char f[100];
 unsigned char s[N],t[N];
 
 i=_open("SYS",1);
 if(_read(i,s,N)==-1)
   {
   gotoxy(20,24);
   cputs("file not find");
   sleep(2);
   return(0);
   }
 
 if(biosdisk(2,0x80,0,0,1,1,t)!=0)
   {
   gotoxy(20,24);
   cputs("read PAT error");
   sleep(2);
   return(0);
   }
 
 for(i=0x1be;i<0x1fe;i++)
   s[i]=t[i];
 if(biosdisk(3,0x80,0,0,1,1,s)!=0)
   {
   gotoxy(20,24);
   cputs("write PAT error");
   sleep(2);
   return(0);
   }
 }
 
 readpat()
 {
 int i,j,k,k1,k2;
 struct word { unsigned sec:6;unsigned track:10;} ;
 struct fd {unsigned char bz0,head0;struct word word0;
 	   unsigned char bz1,head1;struct word word1;
 	   unsigned long int fd0,fd1;};
 struct s {unsigned char a[0x1be];struct fd bd[4];unsigned int bz;} ss; 
 window(1,1,80,25);
 clrscr();
 if(biosdisk(2,0x80,0,0,1,1,s)!=0)
   {
   gotoxy(20,24);
   cputs("error sys");
   sleep(2);
   return(1);
   }
 
    gotoxy(5,1);
    for(k=0,j=0;j<8;j++)
       {
       cprintf(" %2x",(k++)&0xf);
       cprintf("%2x",(k++)&0xf);
       cprintf("%2x",(k++)&0xf);
       cprintf("%2x",(k++)&0xf);
       }
 
 for(k=0,i=0;i<16;i++)
    {
    gotoxy(1,i+2);
    cprintf("%04x",i*32);
    for(j=0;j<8;j++)
       {
       cprintf(" %02x",s[k++]);
       cprintf("%02x",s[k++]);
       cprintf("%02x",s[k++]);
       cprintf("%02x",s[k++]);
       }
    }
 gotoxy(1,20);
 biosdisk(2,0x80,0,0,1,1,&ss);
 cprintf("System Boot Side0 Cylinder0 sector0 Side1 Cylinder1 sector1   sectors1  sectors2\r\n");
 for(i=0;i<4;i++)
    {
    switch((int)ss.bd[i].bz1)
       {
       case 0: continue;
       case 0x01: cputs("FAT-12");break;
       case 0x02: cputs(" Xenix");break;
       case 0x04: cputs("FAT-16");break;
       case 0x05: cputs("ExtDOS");break;
       case 0x06: cputs("BigDOS");break;
       case 0x0b: cputs("FAT-32");break;
       case 0x63: cputs("  unix");break;
       default:  cputs("   ?  ");
       }
    if (ss.bd[i].bz0==0x80) cputs("  Yes"); else cputs("   No");
    k1=((ss.bd[i].word0.track&3)<<8)|(ss.bd[i].word0.track>>2);
    k2=((ss.bd[i].word1.track&3)<<8)|(ss.bd[i].word1.track>>2);
    cprintf("%6d%10d%8d",ss.bd[i].head0,k1,ss.bd[i].word0.sec);
    cprintf("%6d%10d%8d",ss.bd[i].head1,k2,ss.bd[i].word1.sec);
    cprintf("%10ld%10ld\n\r",ss.bd[i].fd0,ss.bd[i].fd1);
    }
 bioskey(0);
 }
 
  -- ※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 210.72.45.12]
  | 
 
 
 |