⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chat.c

📁 ipx协议聊天程序
💻 C
📖 第 1 页 / 共 4 页
字号:

     /* Input will be send filename */
   int input_filename(char *buf2)
     {
      int ky;

       textbackground(12);
       textcolor(WHITE);
       window(1,24,79,25);
       gotoxy(2,1);
	cprintf("please input the transfer file_name[<25]:\n\r");
       textbackground(2);
       textcolor(0);
       window(8,25,78,25);
       clrscr();
       gotoxy(1,1);
       ky=win_gets(8,78,&buf2[0]);
       clrscr();
       return ky;
     }

     /* Cursor up move 1 line */
   int cursor_upline(int curx,int cury)
     {
       if(cury>1) {
		    cury--;
		    gotoxy(curx,cury);
		    return 1;
		  }
       return 0;
     }

    /* Cursor down 1 line */
   int cursor_downline(int curx,int cury,int starty,int endy)
     {
       if(cury<(endy-starty)+1){
				cury++;
				gotoxy(curx,cury);
				return 1;
			       }
       return 0;
     }

     /* Erase one char in the front of custor */
   void cursor_backspace(int curx,int cury,int startx,int endx)
     {
       if(curx>1) {
		    curx--;
		    gotoxy(curx,cury);
		    putch(' ');
		    gotoxy(curx,cury);
		  }
	else if(cury>1){
			curx=(endx-startx)+1;
			cury--;
			gotoxy(curx,cury);
			putch(' ');
			gotoxy(curx,cury);
		       }
		else{
		      curx=1;
		      gotoxy(curx,cury);
		    }
    }

    /* Show diffent information remain window */
   void information_win(char *buf3)
     {
       highvideo();
       textbackground(5);
       textcolor(5);                   /* iron out cursor display */
       window(1,25,80,25);
       clrscr();
       textcolor(15);             /* magenta background & white foreground */
       gotoxy(1,1);
       cprintf("%s",buf3);
       normvideo();
     }

     /* Username or Filename window accept char limit rule */
   void win_limit(int startx,int endx,int ch)
     {
       int curx,cury;

	 curx=wherex();
	 cury=wherey();
	 switch(ch) {
		     case KEY_BACKSPACE:
					cursor_backspace(curx,cury,startx,endx);
					break;
		     case KEY_UP:
		     case KEY_DOWN: gotoxy(curx,cury);
				    break;
		     case KEY_LEFT:
				  if(curx>1){
					     curx--;
					     gotoxy(curx,cury);
					     break;
					    }
				     else {
					    curx=1;
					    gotoxy(curx,cury);
					    break;
					  }
		     case KEY_RIGHT:
				    if(curx<(endx-startx)+1)
					{
					  curx++;
					  gotoxy(curx,cury);
					}
				      else {
					     curx=(endx-startx)+1;
					     gotoxy(curx,cury);
					    }
				     break;
		      case KEY_SPACE:
				      if(curx<(endx-startx)+1)
					 {
					   curx++;
					   gotoxy(curx,cury);
					   break;
					  }
					else{
					     curx=(endx-startx)+1;
					     gotoxy(curx,cury);
					     break;
					    }
		    }
      }

      /* Send message window accept char limit rule */
   void window_limit(int startx,int starty,int endx,int endy,int ch)
     {
       int curx,cury;

	 curx=wherex();
	 cury=wherey();
	 switch(ch) {
		     case KEY_ENTER:
				    if(cury<(endy-starty)+1)
				       {
					 curx=1;
					 cury++;
					 gotoxy(curx,cury);
				       }
				     else {
					   curx=(endx-startx)+1;
					   cury=(endy-starty)+1;
					   gotoxy(curx,cury);
					  }
				     break;
		     case KEY_BACKSPACE:
					cursor_backspace(curx,cury,startx,endx);
					break;
		     case KEY_LEFT:
				      if(curx>1) {
						  curx--;
						  gotoxy(curx,cury);
						 }
				       else if(cury>1) {
							curx=(endx-startx)+1;
							cury--;
							gotoxy(curx,cury);
						       }
					     else {
						    curx=1;
						    gotoxy(curx,1);
						  }
				       break;
		     case KEY_SPACE:
				    if(curx<(endx-startx)+1)
					{
					 curx++;
					 gotoxy(curx,cury);
					 break;
					}
				      else {
					    if(cury<(endy-starty)+1){
								     curx=1;
								     cury++;
								     gotoxy(curx,cury);
								     break;
								    }
					       else{
						     curx=(endx-startx)+1;
						     cury=(endy-starty)+1;
						     gotoxy(curx,cury);
						     break;
						   }
					    }
		     case KEY_RIGHT:
				    if(curx<(endx-startx)+1)
					 {
					   curx++;
					   gotoxy(curx,cury);
					 }
				     else if(cury<(endy-starty)+1)
					       {
						 curx=1;
						 cury++;
						 gotoxy(curx,cury);
					       }
					    else {
						   curx=(endx-startx)+1;
						   cury=(endy-starty)+1;
						   gotoxy(curx,cury);
						 }
				    break;
		     case KEY_UP:
				 if(cury>1){
					    cursor_upline(wherex(),wherey());
					   }
				  else
					gotoxy(curx,1);
				 break;
		      case KEY_DOWN:
				    if(cury<(endy-starty)+1)
					    {
					      cursor_downline(curx,cury,starty,endy);
					    }
				       else {
					      cury=(endy-starty)+1;
					      gotoxy(curx,cury);
					    }
				    break;
		    }
     }

    /* Send message window accept string rule */
  int  window_gets(int startx,int starty,int endx,int endy,unsigned char *s)
      {
	char ch=' ',*temp;
	int curx,cury,ky;

	    temp=s;
	    while(ch!='@'){
			     ky=in_key();
			     ch=ky;
			     curx=wherex();
			     cury=wherey();
			     switch(ky) {
					  case KEY_ESC:
							 return 0;
					  case KEY_SPACE:
							  *s=ch;
							  s++;
							  break;
					  case KEY_ENTER:
							  *s='\n';
							  s++;
							  break;
					  case KEY_BACKSPACE:
							     if(s>temp){
									s--;
									}
							     break;
					  default:
						  if(ch=='@'){
							      *s='\0';
							      break;
							     }
						    else if(ch!=0){
								   gotoxy(curx,cury);
								   cprintf("%c",ch);
								   *s=ch;
								   s++;
								  }
					}
			     window_limit(startx,starty,endx,endy,ky); /* Call accept char limit rule */
			  }
	    return 1;
       }

     /* Username or Filename window accept string rule */
   int  win_gets(int startx,int endx,unsigned char *s)
	{
	  char ch,*temp;
	  int  ky,curx,cury;

	     temp=s;
	      while(1){
			  ky=in_key();
			  ch=ky;
			  curx=wherex();
			  cury=wherey();
			  switch(ky) {
					case KEY_ESC:
						       return 0;
					case KEY_SPACE:
							*s=ch;
							s++;
							break;
					case KEY_ENTER:
							*s='\0';
							 return 1;
					case KEY_BACKSPACE:
							  if(s>temp){
								     s--;
								    }
							  break;
					default:
						if(ch!=0){
							   gotoxy(curx,cury);
							   cprintf("%c",ch);
							   *s=ch;
							   s++;
							  }
				     }
			  win_limit(startx,endx,ky);  /* Call accept char rule */
		      }
	}

   /* Mouse status infomation program segment */
 int InitMouse() /* Initialize mouse */
 {
   union REGS r;

    r.x.ax=0;
    int86(0x33,&r,&r);
    if(r.x.ax==0xffff)
      mouse_installed=TRUE;
    else
      mouse_installed=FALSE;
    return(r.x.bx);
 }

  /* Show mouse pointer */
 int ShowMouse()
 {
   union REGS r;

    if(mouse_installed==FALSE) return(-1);
    r.x.ax=0x0001;
    int86(0x33,&r,&r);
    return(0);
 }

  /* Hide mouse pointer */
 int HideMouse()
 {
  union REGS r;

   if(mouse_installed==FALSE) return(-1);
   r.x.ax=0x0002;
   int86(0x33,&r,&r);
   return(0);
 }

  /* Get mouse move range */
 int GetMouseXY(int *x,int *y)
 {
   union REGS r;

    if(mouse_installed==FALSE) return(-1);
    r.x.ax=0x0003;
    int86(0x33,&r,&r);
    *x=r.x.cx;
    *y=r.x.dx;
    return(0);
 }

  /* Set mouse move range */
 int SetMouseXY(int x,int y)
 {
  union REGS r;

   if(mouse_installed==FALSE) return(-1);
   r.x.ax=0x0004;
   r.x.cx=x;
   r.x.dx=y;
   int86(0x33,&r,&r);
   return(0);
 }

   /* Mouse key pressed status infomation(1=Pressed,0=not Pressed) */
 int GetPressInfo(int button)
 {
  union REGS r;

   if(mouse_installed==FALSE) return(-1);
   r.x.ax=0x0005;
   r.x.bx=button;
   int86(0x33,&r,&r);
   return(r.x.bx);
 }

   /* Mouse key released status infomation(1==Released,0=not Released) */
 int GetReleaseInfo(int button)
 {
  union REGS r;

   if(mouse_installed==FALSE) return(-1);
   r.x.ax=0x0006;
   r.x.bx=button;
   int86(0x33,&r,&r);
   return(r.x.bx);
 }

  /* Set mouse X axis move range */
 int SetXRange(int minimum,int maximum)
 {
  union REGS r;

   if(mouse_installed==FALSE) return(-1);
   r.x.ax=0x0007;
   r.x.cx=minimum;
   r.x.dx=maximum;
   int86(0x33,&r,&r);
   return(0);
 }

  /* Set mouse Y axis move range */
 int SetYRange(int minimum,int maximum)
 {
  union REGS r;

   if(mouse_installed==FALSE) return(-1);
   r.x.ax=0x0008;
   r.x.cx=minimum;
   r.x.dx=maximum;
   int86(0x33,&r,&r);
   return(0);
 }

    /* Screen direct up or down  scroll LineNum */
 void scroll_screen(int startx,int starty,int endx,int endy,int k,int m)
     {
       union REGS r;

	r.h.ah=m;
	r.h.al=k;
	r.h.ch=startx;
	r.h.cl=starty;
	r.h.dh=endx;
	r.h.dl=endy;
	r.h.bh=7;
	int86(0x10,&r,&r);

     }

  void cls_screen1()  /* Center to round extend */
     {
       int i;

	for(i=0;i<14;i++)
	 {
	  scroll_screen(13-i,39-3*i,13+i,40+3*i,0,7);
	  delay(80);
	 }
     }

  void cls_screen2()    /* Left to right extend */
    {
      int i;

       for(i=0;i<13;i++)
       {
	scroll_screen(i,0,i,79,i+1,6);
	scroll_screen(25-i,0,25-i,79,i+1,7);
	delay(120);
       }
    }

  void cls_screen3() /* Top to bottom extend */
    {
      int i;

       for(i=0;i<40;i++)
       {
	scroll_screen(0,i,25,i,0,6);
	scroll_screen(0,79-i,25,79-i,0,6);
	delay(120);
      }
   }

  void cls_screen4() /* Block windows extend */
   {
     int i,j,k=0;

      for(i=0;i<10;i++)
       {
	for(j=0;j<8;j++)
	 {
	  scroll_screen(0,i+k,25,i+k,0,6);
	  k=k+10;
	 }
	 k=0;
	 delay(40);
       }
   }

    /* Select one clean screen method */
  void Select_ScrCls(int cls_key)
    {
	switch(cls_key)
	{
	  case 0:
		 cls_screen1();
		 break;
	  case 1:
		 cls_screen2();
		 break;
	  case 2:
		 cls_screen3();
		 break;
	  case 3:
		 cls_screen4();
		 break;
	}
   }

  /*  Detect press key on keyboard */
  int in_key()
     {
       union REGS reg;

       reg.h.ah=0;
       int86(0x16,&reg,&reg);
       return reg.x.ax;
     }

  

     /* Move the custor to assign X axis,Y axis */
   void goto_xy(int x,int y)
     {
       union REGS r;

	 r.h.ah=2;      /* custor address function */
	 r.h.dl=x;      /* column coordinate */
	 r.h.dh=y;      /*  line  coordinate */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -