www.pudn.com > jpeg1.zip > BUTTON.C


/* 按键控制函数 */ 
void select(int b[4]) 
   { mrectangle(b[0]-5,b[1]-5,b[2]+5,b[3]+5,0); 
     mrectangle(b[0]-6,b[1]-6,b[2]+6,b[3]+6,0); 
    } 
 
void bclose(int b[4]) 
   { mrectangle(b[0]-5,b[1]-5,b[2]+5,b[3]+5,255); 
     mrectangle(b[0]-6,b[1]-6,b[2]+6,b[3]+6,255); 
    } 
 
/* 按键作图 */ 
void button(int box[4]) 
   { mbar(box[0],box[1],box[2],box[3],253); 
     mline(box[2]+1,box[1]-1,box[2]+1,box[3]+2,254); 
     mline(box[0]-1,box[3]+1,box[2]+1,box[3]+2,254); 
     mline(box[2]+2,box[1]-2,box[2]+2,box[3]+3,254); 
     mline(box[0]-2,box[3]+2,box[2]+2,box[3]+3,254); 
     mline(box[2]+3,box[1]-3,box[2]+3,box[3]+4,254); 
     mline(box[0]-3,box[3]+3,box[2]+3,box[3]+3,254); 
     mrectangle(box[0]-4,box[1]-4,box[2]+4,box[3]+4,0); 
    } 
 
/* 位图写屏 */ 
int  draw_bmp256(int idx_num,int x,int y) 
   { unsigned char huge *dot,far *buf,huge *q; 
     unsigned int i,j,loc,block,ww; 
     unsigned long a; 
 
     if((idx_num>0)&&(idx_num<9)) { 
       dot=MK_FP(BitMap,11878+(idx_num-1)*1418+1078); 
       bmpinfo.Width=17; 
       bmpinfo.Heigth=17; 
      } 
      else if(idx_num==0) { 
       dot=MK_FP(BitMap,0+1078); 
       bmpinfo.Width=360; 
       bmpinfo.Heigth=30; 
      } 
      else { 
       dot=MK_FP(BitMap,11878+8*1418+1078); 
       bmpinfo.Width=32; 
       bmpinfo.Heigth=32; 
      } 
     ww=bmpinfo.Width; 
     if((bmpinfo.Width%4)!=0) bmpinfo.Width+=4-(bmpinfo.Width%4); 
     a=(unsigned long)y*DIMX+x; 
     block=(unsigned long)a>>16; 
     buf=MK_FP(0xA000,(unsigned int)(a&0xffff)); 
     a&=0xffff; 
     outportb(0x3c4,0x0e); 
     outportb(0x3c5,block^2); 
     for(i=0;i0) memcpy(buf,q,loc); 
	  buf=MK_FP(0xA000,a); 
	  q+=bmpinfo.Width; 
	 } 
	} 
    } 
 
/* 作系统标题 */ 
int  systemtitle() 
   { int file; 
     unsigned int seg; 
     char far * pointer; 
     unsigned long size; 
     char fname[MAXPATH],*filep; 
 
     seg=getpsp(); 
     filep=Search(seg); 
     strcpy(fname,filep); 
     fnsplit(fname,drive,dir,name,ext); 
     fnmerge(fname,drive,dir,"JPEG",".OV2"); 
     if((file=open(fname,O_RDWR|O_BINARY,S_IREAD))==-1) return -1; 
     lseek(file,0,SEEK_END); 
     size=tell(file); 
     lseek(file,0,SEEK_SET); 
     if(allocmem((long)size/16+1,&BitMap)!=-1) { 
       close(file); return -2; } 
     pointer=MK_FP(BitMap,0); 
     read(file,(void *)pointer,size); 
     close(file); 
     draw_bmp256(0,200,5); 
     return 1; 
    } 
 
void FormatHelp() 
  {  fseek(ovlp,284*72,SEEK_SET); 
     Hide(); 
     mbar(220,140,779,558,253); 
     mcrectangle(228,144,771,554,254,255); 
     mcrectangle(229,145,770,553,254,255); 
     title(250,155,18,3,249); 
     title(250,181,18,3,249); 
     title(250,207,5,3,249); 
     title(277,240,16,5,249); 
     title(250,268,18,5,249); 
     title(277,301,15,5,249); 
     title(250,330,17,5,249); 
     title(250,358,9,5,249); 
     fseek(ovlp,2*72,SEEK_CUR); 
     title(250,388,12,5,249); 
     title(277,418,8,5,249); 
     title(250,458,17,5,249); 
     title(250,488,10,5,249); 
     Show(); 
    } 
 
/* 子菜单主封面 */ 
int  format() 
  {  int i; 
 
     Hide(); mbar(200,48,799,90,253); 
     mcrectangle(205,51,794,87,0,255); 
     fseek(ovlp,38*72,SEEK_SET); 
     title(360,57,7,16,252); 
     for(i=0;i<4;i++) button(SUB_box[i]); 
     title(SUB_box[0][0]+6,SUB_box[0][1]+5,4,9,247); 
     title(SUB_box[1][0]+6,SUB_box[1][1]+5,4,9,247); 
     title(SUB_box[2][0]+6,SUB_box[2][1]+5,4,9,247); 
     title(SUB_box[3][0]+20,SUB_box[3][1]+5,2,45,247); 
     Show(); 
    } 
 
/* 主菜单封面 */ 
int  mainframe() 
  {  int i; 
     unsigned int seg; 
     char fname[MAXPATH],*filep; 
 
     mbar(0,0,800,39,253); 
     mcrectangle(5,3,794,36,254,255); 
     mbar(0,48,190,562,255); 
     mbar(200,48,799,562,255); 
     mbar(0,570,799,599,252); 
     seg=getpsp(); 
     filep=Search(seg); 
     strcpy(fname,filep); 
     fnsplit(fname,drive,dir,name,ext); 
     fnmerge(fname,drive,dir,"JPEG",".OV1"); 
     if((ovlp=fopen(fname,"rb"))==NULL) return(-1); 
     i=systemtitle(); 
     if(i!=1)  return i; 
     for(i=0;i<4;i++) { 
       button(box_box[i]); 
       title(box_box[i][0]+1,box_box[i][1]+10,6,1,247); 
      } 
     for(;i<7;i++) { 
       button(box_box[i]); 
       title(box_box[i][0]+13,box_box[i][1]+10,4,10,247); 
      } 
    fseek(ovlp,68*72,SEEK_SET); 
    mbar(220,52,779,558,253); 
    mcrectangle(228,56,771,554,254,255); 
    mcrectangle(229,57,770,553,254,255); 
    title(380,68,6,20,249); 
    fseek(ovlp,2*72,1); 
    title(298,108,16,5,249); 
    title(240,137,18,5,249); 
    title(240,166,14,5,249); 
    fseek(ovlp,2*72,1); 
    title(298,195,16,5,249); 
    title(240,224,12,5,249); 
    fseek(ovlp,2*72,1); 
    title(240,258,17,5,249); 
    fseek(ovlp,2*72,1); 
    title(298,287,15,5,249); 
    title(240,316,18,5,249); 
    fseek(ovlp,2*72,1); 
    title(298,345,15,5,249); 
    title(240,374,18,5,249); 
    title(240,403,3,5,249); 
    fseek(ovlp,2*72,1); 
    title(228,432,19,5,249); 
    fseek(ovlp,7*72,1); 
    title(478,480,3,10,249); 
    title(580,480,2,10,249); 
    title(660,480,3,10,249); 
    fseek(ovlp,-15*72,1); 
    title(518,514,7,6,249); 
   } 
 
/* 按键按下 */ 
int  box_down(int b[4]) 
  {  mline(b[0]-2,b[3]+2,b[2]+2,b[3]+2,253); 
     mline(b[2]+2,b[1]-2,b[2]+2,b[3]+4,253); 
     mline(b[0]-2,b[1]-2,b[0]-2,b[3]+4,254); 
     mline(b[0]-2,b[1]-2,b[2]+4,b[1]-2,254); 
     mline(b[0]-1,b[3]+1,b[2]+1,b[3]+1,253); 
     mline(b[2]+1,b[1]-1,b[2]+1,b[3]+4,253); 
     mline(b[0]-1,b[1]-1,b[0]-1,b[3]+4,254); 
     mline(b[0]-1,b[1]-1,b[2]+4,b[1]-1,254); 
     mrectangle(b[0]-3,b[1]-3,b[2]+3,b[3]+3,0); 
    } 
 
/* 按键弹出 */ 
int  box_up(int b[4]) 
  {  mline(b[0]-3,b[1]-3,b[0]-3,b[3]+3,255); 
     mline(b[0]-3,b[1]-3,b[2]+3,b[1]-3,255); 
     mline(b[0]-3,b[3]+3,b[2]+3,b[3]+3,254); 
     mline(b[2]+3,b[1]-3,b[2]+3,b[3]+4,254); 
     mline(b[0]-2,b[1]-2,b[0]-2,b[3]+2,255); 
     mline(b[0]-2,b[1]-2,b[2]+2,b[1]-2,255); 
     mline(b[0]-2,b[3]+2,b[2]+2,b[3]+2,254); 
     mline(b[2]+2,b[1]-2,b[2]+2,b[3]+4,254); 
     mline(b[0]-1,b[1]-1,b[0]-1,b[3]+1,255); 
     mline(b[0]-1,b[1]-1,b[2]+1,b[1]-1,255); 
     mline(b[0]-1,b[3]+1,b[2]+1,b[3]+1,254); 
     mline(b[2]+1,b[1]-1,b[2]+1,b[3]+4,254); 
    }