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

📄 function.c

📁 NETBIOS C程序源代码 用于网络通信
💻 C
字号:
/*============================================================*/
/*                       Function.C                           */
/*============================================================*/

#include "netbios.h"
#include "predef.h"

/*------------------------------------------------------------*/
static  char	StatusString[80];
static  BYTE	CurSLine,CurELine;
static  char	GotCurSet=FALSE;
/*------------------------------------------------------------*/
void  NetBios(NCB far *NcbPtr)
	{
	_ES=FP_SEG(NcbPtr);
	_BX=FP_OFF(NcbPtr);
	geninterrupt(0x5C);
	}
/*------------------------------------------------------------*/
void  Beep(void)
	{
	int i;

	for(i=0;i<4;i++)
		{
		sound(1500+80*i);
		delay(20);
		}
	nosound();
	}
/*------------------------------------------------------------*/
BOOL  EmptyStr(char far *str)
	{
	char far *ptr;

	if(str==NULL)	return(TRUE);
	for(ptr=str;*ptr;ptr++)
		{
		if(*ptr!=SPACE && *ptr!=TAB && ptr!=CR && ptr!=LF)
			{
			return(FALSE);
			}
		}
	return(TRUE);
	}
/*------------------------------------------------------------*/
/*       String Comparing. Trim Heading & Tailing Spaces,     */
/*                and with no cas sensitivity.                */
/*------------------------------------------------------------*/
BOOL  StrEqual(char far *src,char far *dest)
	{
	char  srcbuf[80];
	char  destbuf[80];
	char  far *ptr;

	ptr=src;
	while(*ptr==SPACE || *ptr==TAB)  ptr++;
	_fstrcpy(srcbuf,ptr);
	ptr=srcbuf+strlen(srcbuf)-1;
	while(*ptr==SPACE || *ptr==TAB)  ptr--;
	*(ptr+1)='\0';
	ptr=dest;
	while(*ptr==SPACE || *ptr==TAB)  ptr++;
	_fstrcpy(destbuf,ptr);
	ptr=destbuf+strlen(destbuf)-1;
	while(*ptr==SPACE || *ptr==TAB)  ptr--;
	*(ptr+1)='\0';

	if(strcmpi(srcbuf,destbuf)==0)
		{
		return(TRUE);
		}
	else    return(FALSE);
	}
/*------------------------------------------------------------*/
BOOL  NetBios_Exist(void)
	{
	void  interrupt(*int_5C_vector)();
	NCB   DetectNBNcb;

	int_5C_vector=getvect(0x5C);
	if(int_5C_vector==(void far *)NULL)
		{
		return(FALSE(;
		}
	MEMSET(&DetectNBNcb,0,sizeof(NCB));
	DetectNBNcb.NCB_COMMAND=0x7F;
	NetBios(&DetectNBNcb);
	if(DetectNBNcb.NCB_CMD_CPLT!=03)
		{
		return(FALSE);
		}
	return(TRUE);
	}
/*------------------------------------------------------------*/
void  Get_Status_Bar(char far *str)
	{
	_fstrcpy(Str,StatusString);
	}
/*------------------------------------------------------------*/
void  Set_Status_Bar(char far *str)
	{
	int i;
	for(i=0;i<80;i++)
	    {
	    Put_Char(i,0,SPACE,STATUS_FCOLOR,STATUS_BCOLOR);
	    }
	if(!EmptyStr(Str))
	    {
	    for(i=0;i<_fstrlen(Str);i++)
		{
		Put_Char(i+3,0,Str[i],STATUS_FCOLOR,STATUS_BCOLOR);
		}
	    _fstrcpy(StatusString,Str);
	    }
	else
	    {
	    for(i=0;i<strlen(StatusString);i++)
		{
		Put_Char(i+3,0,StatusString[i],STATUS_FCOLOR,STATUS_BCOLOR);
		}
	    }
	}
/*------------------------------------------------------------*/
void  GetCursorSet(void)
	{
	union REGS regs;
	
	regs.h.ah=0x03;
	regs.h.bh=0x00;
	int86(0x10,&regs,&regs);
	CurSLine=regs.h.ch;
	CurELine=regs.h.cl;
	}
/*------------------------------------------------------------*/
void  HideCursor(void)
	{
	union REGS regs;
	
	if(!GotCurSet)
		{
		GetCursorSet();
		GotCurSet=TRUE;
		}
	regs.h.ah=0x01;
	regs.h.ch=CurSLine|0x20;
	regs.h.cl=CurELine;
	int86(0x10,&regs,&regs);
	}
/*------------------------------------------------------------*/
void  ShowCursor(void)
	{
	union REGS regs;
	
	if(!GotCurSet)
		{
		GetCursorSet();
		GotCurSet=TRUE;
		}
	regs.h.ah=0x01;
	regs.h.ch=CurSLine|~(0x20);
	regs.h.cl=CurELine;
	int86(0x10,&regs,&regs);
	}
/*------------------------------------------------------------*/
/*   Get Current Video Segment Value...                       */
/*       Where Bye (0x00:0x449) is Current Video Mode:        */
/*          if Video Mode==2 or 3, Video_SEG=0xB800(Color)    */
/*          else (Video Mode==7), Video_SEG=0xB000(MDA)       */
/*------------------------------------------------------------*/
void  Locate_VideoSeg(WORD *Seg)
	{
	BYTE  far *VideoModePtr;

	VideoModePtr=(BYTE far *)MK_FP(0,0x449);
	if(*VideoModePtr==0x07)
		{
		*Seg=0xB000;
		}
	else
		{
		*Seg=0xB800;
		}
	}
/*------------------------------------------------------------*/
/* Put a char at Position (Sx,Sy),                            */
/*   with Foreground Color Fgcolor,Background Color Bgcolor.  */
/*------------------------------------------------------------*/
void  Put_Char(int Sx,int Sy,BYTE Char,BYTE Fgcolor,BYTE Bgcolor)
	{
	BYTE far *CharPtr;
	int  Offset;

	Offset-(80*Sy+Sx)*2;
	CharPtr=(BYTE far *)MK_FP(VideoSeg,Offset);
	*(CharPtr+0)=Char;
	*(CharPtr+1)=Fgcolor|(Bgcolor<<4);
	}
/*------------------------------------------------------------*/
void  Put_Str(int Sx,int Sy,char far *str,BYTE Fgcolor,BYTE Bgcolor)
	{
	BYTE far *CharPtr;
	char far *ptr;
	int  Offset;

	Offset-(80*Sy+Sx)*2;
	CharPtr=(BYTE far *)MK_FP(VideoSeg,Offset);
	ptr=str;
	while(*ptr)
		{
		*CharPtr++=*ptr++;
		*CharPtr++=Fgcolor|(Bgcolor<<4);
		}
	}
/*------------------------------------------------------------*/
void  Set_Color(int Sx,int Sy,int Ex,int Ey,BYTE Fgcolor,BYTE Bgcolor)
	{
	int i,j;
	
	for(i=Sy;i<=Ey;i++)
		{
		for(j=Sx;j<=Ey;j++)
			{
			Put_Char(j,i,SPACE,Fgcolor,Bgcolor);
			}
		}
	}
/*------------------------------------------------------------*/
/*  Redraw The User Screen                                    */
/*------------------------------------------------------------*/
void  Refresh_Screen(char far *Str)
	{
	int i;

	textcolor(LIGHTGRAY);
	textbackground(BLACK);
	clrscr();
	Set_Status_Bar(Str);
	Set_Color(0,20,79,24,PROMPT_FCOLOR,PROMPT_BCOLOR);
	Put_Str(23,20,"********  Online Help  ********",GOOD_FCOLOR,GOOD_BCOLOR);
	Put_Str(23,21,"  F1 --- Change User Name",PROMPT_FCOLOR,PROMPT_BCOLOR);
	Put_Str(23,22,"  F2 --- Phone Another",PROMPT_FCOLOR,PROMPT_BCOLOR);
	Put_Str(23,23,"  F3 --- Cancel Operation",PROMPT_FCOLOR,PROMPT_BCOLOR);
	Put_Str(23,24,"  ESC--- Return to DOS",PROMPT_FCOLOR,PROMPT_BCOLOR);
	for(i=1;i<=19;i++)
		{
		Put_Char( 0,i,'|',TITLE_FCOLOR,TITLE_BCOLOR);
		Put_Char(39,i,'|',TITLE_FCOLOR,TITLE_BCOLOR);
		Put_Char(79,i,'|',TITLE_FCOLOR,TITLE_BCOLOR);
		}
	Put_Str( 1,1,"OtherUser Name",GOOD_FCOLOR,GOOD_BCOLOR);
	Put_Str(40,1,"SelfUser Name",GOOD_FCOLOR,GOOD_BCOLOR);
	Put_Str(17,1,OtherName,TITLE_FCOLOR,TITLE_BCOLOR);
	Put_Str(55,1,SelfName,TITLE_FCOLOR,TITLE_BCOLOR);

	Self_Sx=Self_Sy=0;
	Other_sx=Other_Sy=0;
	}
/*------------------------------------------------------------*/
/*  Get Pressed Key, Filter Out Special or Normal Keys.       */
/*------------------------------------------------------------*/
void Get_Key(BOOL *Special,BYTE *KeyVal)
	{
	BYTE  Key;
	BOOL  Valid;
	BOOL  Status;

	Valid=FALSE;
	while(!Valid)
		{
		Key=getch();
		if(Key==0)
			{
			Key=getch();
			switch(Key)
			    {
			    case Key_F1:
			    case Key_F2:
			    case Key_F3:
				*KeyVal=Key;
				Valid=TRUE;
				Status=TRUE;
				break;
			    default:
				Beep();
				Valid=FALSE;
				break;
			    }
			}
		else
			{
			switch(Key)
			    {
			    case CR:
			    case LF:
			    case TAB:
			    case BACKSPACE:
			    case ESCAPE:
				*KeyVal=Key;
				Valid=TRUE;
				Status=TRUE;
				break;
			    default:
				*KeyVal=Key;
				Valid=TRUE;
				Status=FALSE;
				break;
			    }		
			}
		}
	*Special=Status;
	}	
/*------------------------------------------------------------*/

⌨️ 快捷键说明

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