📄 chat.c
字号:
/* 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,®,®);
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 + -