📄 function.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,®s,®s);
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,®s,®s);
}
/*------------------------------------------------------------*/
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,®s,®s);
}
/*------------------------------------------------------------*/
/* 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 + -