when i tried to compile this program it showing

Linker Error: Undefined symbol _FILLBOX in module DR.C

the actual c program
Code:
//Save it as DR.C

#include<dos.h>
#include<dir.h>
#include<stdio.h>
#include<conio.h>
#include<string.h>
#include<ctype.h>
#include<alloc.h>
#include<mem.h>
#include<signal.h>
#include<io.h>
#include<errno.h>
#include<bios.h>
#include<process.h>
#include<sys\stat.h>
/*#include"tool.h"*/

char path[401],MaxLines=20,NORMTXT=(1<<4)|15,HLTXT=(3<<4),drives[26],sorttype=0;
char TITLETXT=7<<4,DEFTXT=7,MSGTXT=(4<<4)|15,HELPTXT=7<<4;
char TITLEHL=(7<<4)|2,pattern[14]="*.*",temp[401],SYSTXT=(1<<4)|14;
char SELTXT=(1<<4)|14;
int SND=700;

struct ffblk *flist=NULL;

int showfiles();
char *apath;

void main(int argc,char *argv[])
{
int i;
char buf[4],*ptrstr;
getcwd(path,400);
hidecursor();
textattr(DEFTXT);
clrscr();
ptrstr=strrchr(argv[0],'\\');
i=strlen(argv[0])-strlen(ptrstr)+1;
apath=(char *)malloc(i);
strncpy(apath,argv[0],i);
apath[i]='\0';
set_sighnd();
drives[0]=1;
drives[1]=1;
for(i=2;i<26;i++)
 {
 buf[0]=i+65;
 buf[1]=':';
 buf[2]='\\';
 buf[3]='\0';
 if(!chdir(buf))
  {
  drives[i]=1;
  }
 else
  drives[i]=0;
 }
chdir(path);
if(argc>1)
  {
  setdisk(toupper(argv[1][0])-65);
  chdir(argv[1]);
  }
gotoxy(1,25);
textattr(SYSTXT);
clreol();
cprintf("File Manager 1.0 ³ Done by : Jeyakumar M S ³ Year : 2003");
showfiles();
window(1,1,80,25);
textattr(7);
clrscr();
setdisk(toupper(path[0])-65);
chdir(path);
showcursor();
}



select_drive()
{
int i;
window(42,2,80,5);
textattr(DEFTXT);
clrscr();
getch();
}

void fn(int no)
{
char *err[]={"Abort","Floating Point Trap","Illegal Instruction",\
			 "Interrupted","Memory Access Violation","Terminate"};
gotoxy(1,25);
if(no<6)
 printf("Error Occured ( ERR# %u ) : %s",no,err[no]);
else
 printf("Error Occured ( ERR# %u ) : Unknown",no);
}

set_sighnd()
{
signal(SIGABRT,fn);
signal(SIGFPE,fn);
signal(SIGILL,fn);
signal(SIGINT,fn);
signal(SIGSEGV,fn);
signal(SIGTERM,fn);
}

hidecursor()
{
_AH=0x01;
_CH=15;
_CL=15;
geninterrupt(0x10);
}



showcursor()
{
_AH=0x01;
_CH=14;
_CL=15;
geninterrupt(0x10);
}

print_fileinfo(int row,char attr,struct ffblk *f)
{
char atb[5];
unsigned char cx;
if(f->ff_name[0]=='\0')
 return 0;
cx=(f->ff_reserved[0]=='\x1')?175:32;
if(cx==175 && attr!=HLTXT)
  attr=SELTXT;
gotoxy(1,row);
textattr(NORMTXT);
cprintf("³");
textattr(attr);
cprintf("%c%-19s",cx,f->ff_name);
textattr(NORMTXT);
cprintf("³");
textattr(attr);
cprintf("%02d-%02d-%02d %02d:%02d",f->ff_fdate&31,(f->ff_fdate>>5)&15,((f->ff_fdate>>9)+80)%100,(f->ff_ftime>>11)&31,(f->ff_ftime>>5)&63);
textattr(NORMTXT);
cprintf("³");
textattr(attr);
  if(f->ff_attrib & FA_DIREC)
   cprintf("%10s","<Dir>");
  else if(f->ff_attrib & FA_LABEL)
   cprintf("%10s","<Drive>");
  else
   cprintf("%10ld",f->ff_fsize);
  if(f->ff_attrib & FA_RDONLY)
	atb[0]='R';
  else
   atb[0]='-';
  if(f->ff_attrib & FA_HIDDEN)
	atb[1]='H';
  else
   atb[1]='-';
  if(f->ff_attrib & FA_SYSTEM)
	atb[2]='S';
  else
   atb[2]='-';
  if(f->ff_attrib & FA_ARCH)
	atb[3]='A';
  else
   atb[3]='-';
  atb[4]=0;

  textattr(NORMTXT);
  cprintf("³");
  textattr(attr);
  cprintf("%6s",atb);
  textattr(NORMTXT);
  cprintf("³");
  return 1;
}


showtitle()
{
window(1,1,80,24);
textattr(TITLETXT);
gotoxy(1,1);
clreol();
cprintf("³%-20s³%-14s³%-10s³%-6s³ Directory Information","Name","Date","Size","Attrib");


if(sorttype!=0)
 {
 textattr(TITLEHL);
 switch(sorttype)
 {
 case 1:
  gotoxy(2,1);
  cprintf("%-20s","Name");
  break;
 case 2:
  gotoxy(2,1);
  cprintf("%-20s","Name (.)");
  break;
 case 4:
  gotoxy(23,1);
  cprintf("%-14s","Date");
  break;
 case 3:
  gotoxy(38,1);
  cprintf("%-10s","Size");
  break;
 }
 }
window(1,2,80,24);
}


showmsg(char *msg)
{
 window(1,24,79,24);
 textattr(MSGTXT);
 clrscr();
 while(*msg)
  {
  if(*msg>=' ' && *msg<='~')
  cprintf("%c",*msg++);
  else
  msg++;
  }
  sound(SND);
  delay(100);
  nosound();
  getch();
  window(1,2,80,24);
}


showdirinfo(unsigned no)
{
unsigned i;
long sz=0;
char buf[400],*ptr,stype[][7]={"Unsort","Name","Ext","Size","Date"};
FILLBOX(56,1,80,10,NORMTXT>>4);
DRAWBOX(56,1,80,10,1,NORMTXT>>4,NORMTXT&15);
window(57,3,79,10);
ptr=strrchr(getcwd(buf,400),'\\');
ptr++;
gotoxy(1,1);
cprintf("Drive   : %c",buf[0]);
gotoxy(1,2);
cprintf("Dir     : %s",(*ptr=='\0')?"\\":ptr);
gotoxy(1,3);
cprintf("Pattern : %s",pattern);
gotoxy(1,4);
cprintf("Sort by : %s",stype[sorttype]);
gotoxy(1,5);
cprintf("Files   : %u",no+1);
for(i=0;i<=no;i++)
 {
 sz=sz+(flist[i].ff_fsize/1024L);
 }
gotoxy(1,6);
cprintf("Net Size: %uK",sz);
gotoxy(1,7);
cprintf("Memory  : %uK",biosmemory());
gotoxy(1,8);
cprintf("Free    : %luK",farcoreleft()/1024);
window(1,2,80,24);
}

showhelp()
{
/*gotoxy(1,22);
textattr(HELPTXT);
clreol();
cprintf("F1,F2,F3,F4-Sort ³ F5-Reverse ³ F6-Open ³ F7-Hidden ³ F11-Drive ³ F12-B/W");
gotoxy(56,12);*/
FILLBOX(56,11,80,21,NORMTXT>>4);
DRAWBOX(56,11,80,21,1,NORMTXT>>4,NORMTXT&15);
textattr(TITLETXT);
/*gotoxy(57,12);
cprintf("%9s Menu%9s","","");
textattr(NORMTXT);
gotoxy(57,15);
cprintf(" Press F10 to Activate");
gotoxy(67,16);
cprintf("Menu");*/
}

int showfiles()
{
int ans,psort=0;
unsigned  cnt=0,i,start,ch,lno=0,pstart=1,plno=1,selfiles=0,tu;
unsigned char fattr=FA_DIREC|FA_LABEL;
struct ffblk f;
LOADLIST:
textattr(DEFTXT);
start=0;
pstart=1;
/*if(flist!=NULL)
 free(flist);*/
ans=findfirst(pattern,&f,fattr);

while(!ans)
 {
 cnt++;
 ans=findnext(&f);
 }
flist=(struct ffblk *)realloc(flist,sizeof(struct ffblk )*(cnt+1));
if(flist==NULL)
 return 0;
memset(flist,0,sizeof(struct ffblk )*(cnt+1));
ans=findfirst(pattern,&f,fattr);
cnt=0;
while(!ans)
 {
 if(strcmp(f.ff_name,".")!=0)
 {
 memcpy(&flist[cnt],&f,sizeof(f));
 flist[cnt].ff_reserved[0]=0;
 cnt++;
 }
 ans=findnext(&f);
 }
 if(cnt==0)
  {
  showmsg("No Files Found!!!");
  strcpy(pattern,"*.*");
  goto LOADLIST;
  }
 cnt--;
 if(start>cnt-MaxLines-1)
 start=0;
 if(lno>MaxLines || lno>cnt)
 lno=0;
 showtitle();
 psort=!sorttype;
 shortlist(cnt);
while(1)
{
if(start>cnt-MaxLines+1)
 start=0;
if(lno>MaxLines || lno>cnt)
 lno=0;
if(sorttype!=psort)
 {
 showtitle();
 showdirinfo(cnt);
 showhelp();
 psort=sorttype;
 }
 print_fileinfo(lno+1,HLTXT,&flist[lno+start]);
 selfiles=0;
 for(i=start;i<start+MaxLines && start!=pstart;i++)
  {
  if(i>cnt)
   break;
  if(flist[i].ff_reserved[0]=='\x1')
   selfiles++;
  if(i-start!=lno)
  print_fileinfo(i-start+1,NORMTXT,&flist[i]);
  }

  textattr(NORMTXT);
  for(;i<start+MaxLines && start!=pstart;i++)
   {
   gotoxy(1,i-start+1);
   cprintf("³%-20s³%-14s³%-10s³%-6s³","","","","");
   }
  pstart=start;
  gotoxy(1,MaxLines+1);
  textattr(NORMTXT);
  if(start+MaxLines<cnt-1)
   cprintf("ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄ More ÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÙ");
  else
   cprintf("ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÙ");

  plno=lno;
  /*print_fileinfo(lno+1,HLTXT,&flist[lno+start]);*/
  gotoxy(1,23);
  textattr(DEFTXT);
  clreol();
  getcwd(temp,80);
  if(strlen(temp)==3)
   cprintf("%s%s",temp,flist[start+lno].ff_name);
  else
   cprintf("%s\\%s",temp,flist[start+lno].ff_name);
  showinfo();
  ch=getch();

  if(ch==0)
	ch=getch();
  else
   ch=tolower(ch);
  textattr(DEFTXT);
  switch(ch)
  {                                                 /*Space Bar*/
  case 32:
		  flist[start+lno].ff_reserved[0]=!flist[start+lno].ff_reserved[0];
          print_fileinfo(lno+1,HLTXT,&flist[lno+start]);
		  break;
  case 80:											/*Down Arrow*/
		  if(lno<MaxLines-1) lno++;
		  else if(start<cnt-MaxLines+1)
		  start++; break;
  case 72:                  						/*Up Arrow*/
		  if(lno>0) lno--;
		  else if(start>0)
		  start--;break;
  case 81:                                          /*Page Down*/
		  if((int)start+MaxLines-1<(int)cnt-MaxLines-1)
		  {
		  start=start+MaxLines-1;
		  }
		  else
		  {
		  if(start==cnt-MaxLines+1 || start==0)
		   {
		   sound(SND);
		   delay(100);
		   nosound();
		   }
		  if(cnt>MaxLines)
		   start=cnt-MaxLines+1;
		  else
		   start=0;
		  }
		  break;
  case 82:										/*Insert*/
		  close(creat(tmpnam(NULL),S_IFREG|S_IWRITE));
		  goto LOADLIST;
  case 73:                              		/* Page Up*/
		  if((int)start-MaxLines+1>1)
		  {
		  start=start-(MaxLines+1);
		  }
		  else
		  {
		  if(start==0)
		   lno=0;
		  start=0;
		  }
		  break;

  case 8:										/*BkSp - Key*/
		  if(!chdir(".."))
		  goto LOADLIST;
		  else
		  NOISE();
		  break;
  case 13:											/*Enter or Return Key*/
  case 10:
		  if(flist[lno+start].ff_attrib&FA_DIREC)
			{
			chdir(flist[lno+start].ff_name);
			psort=!sorttype;
			goto LOADLIST;
			}
		  else
		   {
		   char ext[4];
		   strcpy(ext,strrchr(flist[lno+start].ff_name,'.'));
		   if(stricmp(ext,".exe")==0 || stricmp(ext,".bat")==0 || stricmp(ext,".com")==0)
			 {
			 textattr(DEFTXT);
			 clrscr();
			 window(1,1,80,24);
			 textattr(7);
			 clrscr();
			 system(flist[lno+start].ff_name);
			 gotoxy(1,24);
			 hidecursor();
			 showmsg("Press any key...");
			 textattr(DEFTXT);
			 psort=!sorttype;
			 clrscr();
			 goto LOADLIST;
			 }
		   }
		  break;

  case 83:										/*Delele Key*/
		selfiles=0;
		for(tu=0;tu<=cnt;tu++)
		 if(flist[tu].ff_reserved[0]=='\x1')
		  selfiles++;
		if(selfiles>0)
		  {
		  int i;
		  for(i=0;i<=cnt;i++)
		  {
		  if(flist[i].ff_reserved[0]=='\x0')
		   continue;
          _chmod(flist[i].ff_name,1,0);
		   if(flist[i].ff_attrib&FA_DIREC)
		   {

			if(rmdir(flist[i].ff_name))
			{
			 gotoxy(1,23);
			 showmsg(strerror(errno));
			}
		   }
		   else
			{
			 if(unlink(flist[i].ff_name))
			  showmsg(strerror(errno));
			}
		   }
			goto LOADLIST;
		  }
		else
		 if(flist[lno+start].ff_attrib&FA_DIREC)
		  {
		  if(rmdir(flist[lno+start].ff_name))
		  {
		   gotoxy(1,23);
		   showmsg(strerror(errno));
		  }
		  }
		 else
		  {
		  _chmod(flist[lno+start].ff_name,1,0);
		  unlink(flist[lno+start].ff_name);
		  }
		 goto LOADLIST;
  case 71:                                      /*Home Key*/
		start=0;
		lno=0;
		break;
  case 79:										/*End Key*/
		if(cnt>MaxLines)
		start=cnt-MaxLines+1;
		lno=MaxLines-1;
		break;
												/* Function Keys F1-F12 */
  case 59:
			shortbyname(cnt);
			pstart=!start;
			break;
  case 60:
			shortbyext(cnt);
			pstart=!start;
			break;
  case 61:
			shortbydate(cnt);
			pstart=!start;
			break;
  case 62:
			shortbysize(cnt);
			pstart=!start;
			break;
  case 63:
			reverselist(cnt);
			pstart=!start;
			break;
  case 64:
			window(1,1,80,24);
			textattr(7);
			clrscr();
			strcpy(temp,"Edit ");
			strcat(temp,flist[start+lno].ff_name);
			system(temp);
			goto LOADLIST;
  case 65:
		   if(fattr==(FA_DIREC|FA_LABEL))
			 fattr=FA_DIREC|FA_SYSTEM|FA_HIDDEN|FA_LABEL;
		   else
			 fattr=FA_DIREC|FA_LABEL;
		   goto LOADLIST;
  case 66:
		   change_pattern();
		   psort=!sorttype;
		   pstart=!start;
		   goto LOADLIST;
  case 67:
		   window(1,1,80,25);
		   textattr(7);
		   clrscr();
		   showcursor();
		   printf("Type EXIT to Return Directory Browser...\n");
		   if(system(""))
			showmsg("Error Occured!!!");
		   hidecursor();
		   goto LOADLIST;
  case 68:
		  print_fileinfo(lno+1,NORMTXT,&flist[lno+start]);
		  ActivateMenu();
		  goto LOADLIST;
  case 133:													/*F11*/
			if(changedrive())
				{
				pstart=!start;
				goto LOADLIST;
				}
			else
				{
				pstart=!start;
				psort=!sorttype;
				}
			break;                                          /*F12*/
  case 134:
			switchcolors();
			pstart=!start;
			psort=!sorttype;
			break;
												/*Shift + Fn Key*/
  case 89:										/* Shift F6 */
		   window(1,1,80,25);
		   textattr((1<<4)|15);
		   clrscr();
		   show_file(flist[start+lno].ff_name);
		   showmsg("Press Any Key...");
		   goto LOADLIST;

  case 135:                                            /*Shift + F11*/
		  stopinfo();
		  gotoxy(1,23);
		  textattr(7);
		  clreol();
		  cprintf("Enter Path:");
		  scanf("%s",temp);
		  clrscr();
		  if(strchr(temp,':')!=NULL)
		  setdisk(toupper(temp[0])-65);
		  chdir(temp);
		  goto LOADLIST;
														/*CTRL+Fn*/
  case 94:												/*CTRL+F1*/
		   ShowKeyList();
		   goto LOADLIST;

  case 27:                                              /*Esc*/
			 free(flist);
			 return 0;
  default:
		 RECHECK:
		 if((ch>=32 && ch<=64) || (ch>=91 && ch<=126))
		  {
		  int sno;
		  sno=0;
		  for(i=start+lno+1;i<=cnt;i++)
		   {
			if(toupper(flist[i].ff_name[0])==toupper(ch))
				{
				if((int)i-MaxLines+1>0)
					{
					start=i-MaxLines+1;
					lno=MaxLines-1;
					}
				else
					{
					lno=i;
					}
				pstart=!start;
				sno=1;
				break;
			   }
		   }/*End of For*/
		 if(!sno && (int)lno!=-1)
		  {
		  lno=-1;
		  start=0;
		  plno=lno;
		  goto RECHECK;
		  }
		 else if((int)lno==-1)
		  lno=plno;
		 }
		 break;
  }/*end of Switch*/
  if(lno+start > cnt)
   lno=cnt-start;
  if(lno!=plno)
   print_fileinfo(plno+1,NORMTXT,&flist[plno+start]);

}/*end of while(1)*/
}

shortbyname(unsigned no)
{
unsigned i,j;
struct ffblk fl;
for(i=0;i<no;i++)
 for(j=i+1;j<=no;j++)
  {
  if(stricmp(flist[i].ff_name,flist[j].ff_name)>0 && !(flist[i].ff_attrib & (FA_DIREC|FA_LABEL)))
	{
	memcpy(&fl,&flist[i],sizeof(fl));
	memcpy(&flist[i],&flist[j],sizeof(fl));
	memcpy(&flist[j],&fl,sizeof(fl));
	}
  }
sorttype=1;
return 1;
}

shortbyext(unsigned no)
{
unsigned i,j;
struct ffblk fl;
for(i=0;i<no;i++)
 for(j=i+1;j<=no;j++)
  {
  if(stricmp(strrchr(flist[i].ff_name,'.'),strrchr(flist[j].ff_name,'.'))>0 && strcmp(flist[i].ff_name,"..")!=0 && !(flist[i].ff_attrib & (FA_DIREC|FA_LABEL)))
	{
	memcpy(&fl,&flist[i],sizeof(fl));
	memcpy(&flist[i],&flist[j],sizeof(fl));
	memcpy(&flist[j],&fl,sizeof(fl));
	}
  }
sorttype=2;
return 1;
}


shortbysize(unsigned no)
{
unsigned i,j;
struct ffblk fl;
for(i=0;i<no;i++)
 for(j=i+1;j<=no;j++)
  {
  if(flist[i].ff_fsize>flist[j].ff_fsize && strcmp(flist[i].ff_name,"..")!=0 && !(flist[i].ff_attrib & (FA_DIREC|FA_LABEL)))
	{
	memcpy(&fl,&flist[i],sizeof(fl));
	memcpy(&flist[i],&flist[j],sizeof(fl));
	memcpy(&flist[j],&fl,sizeof(fl));
	}
  }
sorttype=3;
return 1;
}



shortbydate(unsigned no)
{
unsigned i,j;
struct ffblk fl;
for(i=0;i<no;i++)
 for(j=i+1;j<=no;j++)
  {
  if(flist[i].ff_fdate>=flist[j].ff_fdate && strcmp(flist[i].ff_name,"..")!=0 && !(flist[i].ff_attrib & (FA_DIREC|FA_LABEL)))
	{
	if(flist[i].ff_fdate==flist[j].ff_fdate)
	 if(flist[i].ff_ftime<flist[j].ff_ftime)
	  continue;
	memcpy(&fl,&flist[i],sizeof(fl));
	memcpy(&flist[i],&flist[j],sizeof(fl));
	memcpy(&flist[j],&fl,sizeof(fl));
	}
  }
sorttype=4;
return 1;
}


reverselist(unsigned no)
{
struct ffblk fl;
unsigned i,j;
for(j=no,i=0;i<=no/2;i++,j--)
  {
   memcpy(&fl,&flist[i],sizeof(fl));
   memcpy(&flist[i],&flist[j],sizeof(fl));
   memcpy(&flist[j],&fl,sizeof(fl));
  }
return 1;
}

changedrive()
{
char ch;
gotoxy(67,2);
cprintf(" \b");
fflush(stdin);
ch=getche();
ch=toupper(ch);
window(1,1,80,24);
textattr(7);
clrscr();
setdisk(ch-65);
fflush(stdin);
return 1;
}

stopinfo()
{
window(1,1,80,25);
gotoxy(1,25);
textattr(SYSTXT);
clreol();
cprintf("File Manager 1.0 ³ Done by : Jeyakumar M S ³ Year : 2003   ");
gotoxy(1,23);
textattr(HELPTXT);
clreol();
window(1,2,80,24);
}

showinfo()
{
struct time t;
struct date d;
static unsigned char pt,ph,ilx;
static nx,pos=79;
char ch;
char skeys[]="F1-Sort by Name ³ F2-Sort by Ext ³ F3-Sort by Date ³ F4-Sort by Size ³ F5 - Reverse List ³ " \
			"F6-Open File ³ F7-Show / Hide System and Hidden Files ³ F8-Change Pattern ³ "\
			"F9-DOS Shell ³ F10-Menu Mode ³ " \
			"F11-Change Drive ³ F12-Color and B & W Mode Switch ³ Use ENTER key to run .BAT, .EXE, .COM Files ³ " \
			"BKSP[\x1B]-Previous Directory ³ DEL-Delete File ³ SPACE-Select File Dir. ";
char *hints[40]={
				 "                       ",
				 "                       ",
				 "                       ",
				 "                       ",
				 "                       ",
				 "                       ",
				 "                       ",
				 "ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ",
				 "   File Manager 1.0    ",
				 "ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ",
				 "                       ",
				 "   Developed by        ",
				 "   Jeyakumar MS        ",
				 "   9,Balarengapuram    ",
				 "   3rd cross street    ",
				 "   Madurai             ",
				 "   TamilNadu           ",
				 "   India               ",
				 "   Pincode-625009      ",
				 "                       ",
				 "  Email:               ",
				 "  jeyakumarms@yahoo.com",
				 "                       ",
				 "                       ",
				 "                       ",
				 "                       ",
				 "                       ",
				 "                       ",
				 "                       ",
				 "                       ",
				 "                       ",
                 "                       ",
				 "                       ",
				 "                       ",
				 "                       ",
				 "                       ",
				 "                       "};
while(kbhit())getch();
textattr(SYSTXT);
getdate(&d);
window(1,1,80,25);
gotoxy(1,25);
cprintf("File Manager 1.0 ³ Done by : Jeyakumar M S ³ Year : 2003   ");
do
 {
  gettime(&t);
  if(t.ti_sec!=pt)
   {
	gotoxy(60,25);
    textattr(SYSTXT);
	clreol();
	cprintf("³%02d-%02d-%04d %02d:%02d:%02d",d.da_day,d.da_mon,d.da_year,t.ti_hour,t.ti_min,t.ti_sec);
	pt=t.ti_sec;

	/*gotoxy(56,12);
	FILLBOX(56,11,80,21,NORMTXT>>4);
	DRAWBOX(56,11,80,21,1,NORMTXT>>4,NORMTXT&15);*/
	BOXMENU(hints,57,12,1,ilx,ilx+8,NORMTXT&15,NORMTXT>>4);
	ilx=(ilx+1)%29;
   }
  if(abs(t.ti_hund-ph)>15)
   {
	textattr(HELPTXT);
	gotoxy(1,23);
	clreol();
	gotoxy(1+pos,23);
	ch=skeys[nx+79-pos];
	skeys[nx+79-pos]=0;
	cprintf("%s",&skeys[nx]);
	skeys[nx+79-pos]=ch;
	if(nx==0)
	 {
	 pos=pos-1;
	 if(pos==0)
	  nx=2;
	 }
	else
	 {
	 nx=(nx+1) % strlen(skeys);
	 if(nx==0)
	  pos=79;
	 }

	ph=t.ti_hund;
   }
 }while(!kbhit());
window(1,2,80,24);
}


switchcolors()
{
static colset;
static pset[8];
if(colset==0)
{
pset[0]=TITLETXT;
pset[1]=TITLEHL;
pset[2]=NORMTXT;
pset[3]=HLTXT;
pset[4]=SYSTXT;
pset[5]=MSGTXT;
pset[6]=HELPTXT;
pset[7]=SELTXT;
TITLETXT=7<<4;
TITLEHL=(7<<4)|15;
NORMTXT=7;
HLTXT=7<<4;
SYSTXT=(7<<4)|15;
MSGTXT=7<<4;
HELPTXT=7<<4;
SELTXT=15;
colset=1;
}
else
 {
 TITLETXT=pset[0];
 TITLEHL=pset[1];
 NORMTXT=pset[2];
 HLTXT=pset[3];
 SYSTXT=pset[4];
 MSGTXT=pset[5];
 HELPTXT=pset[6];
 SELTXT=pset[7];
 colset=0;
 }
}

shortlist(unsigned no)
{
switch(sorttype)
{
case 1:
		shortbyname(no);break;
case 2:
		shortbyext(no);break;
case 3:
		shortbydate(no);break;
case 4:
		shortbysize(no);break;
}
}

ShowKeyList()
{
char file[]="Key.txt",*tmp;
tmp=(char *)malloc(strlen(apath)+strlen(file)+1);
strcpy(tmp,apath);
strcat(tmp,file);
/*show_file(tmp);*/
VIEWFILE(tmp);
}

ActivateMenu()
{
int no;
char *mnu[10]={ " File / Directory      ",\
				" Edit                  ",\
				" Settings              ",\
				" Tools                 ",\
				" System Information    ",\
				" Help                  "};
window(1,1,80,25);
gotoxy(1,25);
textattr(SYSTXT);
clreol();
cprintf("File Manager 1.0 ³ Done by : Jeyakumar M S ³ Year : 2003   ");
gotoxy(56,12);
FILLBOX(56,12,80,22,NORMTXT>>4);
DRAWBOX(56,12,80,22,1,NORMTXT>>4,NORMTXT&15);
BOXMENU(mnu,57,14,1,0,6,NORMTXT&15,NORMTXT>>4);
textattr(TITLETXT);
gotoxy(57,13);
cprintf("%9s Menu%9s","","");
gotoxy(1,23);
clreol();
cprintf("Use %c %c Arrows ³ F10/ESC - Exit ³ ENTER - Select", 24,25);

no=ITEMSELC(mnu,6,57,15,1,NORMTXT,HLTXT);

/*TODO:Menu and Options*/
gotoxy(1,23);
clreol();
cprintf("TODO:Menu and Option");
NOISE();
getch();
}

change_pattern()
{
char ch;
gotoxy(67,4);
window(67,5,79,5);
textattr(7);
clrscr();
cscanf("%s%c",pattern,&ch);
/*while(kbhit()) getch();*/
window(1,1,80,24);
return 1;
}

show_file(char *name)
{
VIEWFILE(name);
return 1;
}


fpmove(FILE *f,int no)
{
long lastp=0;
int ccnt=0;
char ch;
		   do
		   {
			 if(fseek(f,-1,SEEK_CUR))
				{
				fseek(f,0,SEEK_SET);
				break;
				}
			 ch=getc(f);
			 ccnt++;
			 if(ch=='\t')
			 ccnt+=8;
			 if(ch==13 || ch==10 || ccnt==80)
			 {
			  lastp++;
			  ccnt=0;
			  if(ch==13 || ch==10)
			   if(fseek(f,-1,SEEK_CUR)!=0)
				return 0;
			 }
			 fseek(f,-1,SEEK_CUR);
			}while(lastp<no);
			return 1;
}

and this is the header
TOOL.H


Code:
 #include<stdio.h>
#include<ctype.h>
#include<dos.h>

void MESG(int,int);
void DRAWBOX(int,int,int,int,int,int,int);
/*----------------------prjtool.c----------------------*/

typedef struct tagDList
{
int len;
char *buf;
struct tagDList *next;
struct tagDList *prev;
}DList;


void FILLBOX(int x1,int y1,int x2,int y2,int cr)
{
int i,j;
textcolor(cr);
for(i=x1;i<=x2;i++)
{
for(j=y1;j<=y2;j++)
{
gotoxy(i,j);
cprintf("%c",219);
}
}
}

void DRAWBOX(x1,y1,x2,y2,lt,bg,fg)
int x1,x2,y1,y2,lt,bg,fg;
{
int i,dd[6];
textbackground(bg);
textcolor(fg);
if(lt!=2)
{
dd[0]=196;
dd[1]=179;
dd[3]=217;
dd[2]=218;
dd[4]=192;
dd[5]=191;
}
else
{
dd[1]=186;
dd[0]=205;
dd[3]=188;
dd[2]=201;
dd[4]=200;
dd[5]=187;
}

for(i=x1;i<=x2;i++)
{
gotoxy(i,y1);
cprintf("%c",dd[0]);
gotoxy(i,y2);
cprintf("%c",dd[0]);
}
for(i=y1;i<=y2;i++)
{
gotoxy(x1,i);
cprintf("%c",dd[1]);
gotoxy(x2,i);
cprintf("%c",dd[1]);
}
gotoxy(x1,y1);
cprintf("%c",dd[2]);
gotoxy(x2,y2);
cprintf("%c",dd[3]);
gotoxy(x1,y2);
cprintf("%c",dd[4]);
gotoxy(x2,y1);
cprintf("%c",dd[5]);
}


ERR()
{
MESG(9,0);
getch();
clrscr();
return 1;
}

SMHORZ(char *arr[10],int x,int y,int dis,int no,int tc,int tb)
{
int i,bx=0;
textcolor(tc);
textbackground(tb);
for(i=0;i<no;i++)
{
gotoxy(x+bx,y);
cprintf("%s",arr[i]);
bx+=dis;
}
return 1;
}
SMVER(char *arr[20],int y,int dis,int from,int to,int tc,int tb)
{
int i;
textcolor(tc);
textbackground(tb);
for(i=from;i<to;i++)
{
gotoxy(20-strlen(arr[i]),y+=dis);
cprintf("%s",arr[i]);
}
return 1;
}


BOXMENU(char *arr[],int x,int y,int dis,int from,int to,int tc,int tb)
{
int i;
textcolor(tc);
textbackground(tb);
for(i=from;i<to;i++)
{
gotoxy(x,y+=dis);
cprintf("%s",arr[i]);
}
return 1;
}

ITEMSELC(char *gr[10],int max,int x,int y,int space,char attr,char hattr)
{
int hit=0,co=1;
textattr(hattr);
gotoxy(x,y);
cprintf("%s",gr[co-1]);
while(hit!=13)
{
hit=toascii(getch());
/*textcolor(15);
textbackground(1);*/
textattr(attr);
gotoxy(x,y);
cprintf("%s",gr[co-1]);
/*textcolor(0);
textbackground(15);*/
textattr(hattr);
switch(hit)
	{
	case 72:if(co==1)
			{
			co=max;
			y=y+space*(max-1);
			gotoxy(x,y);
			cprintf("%s",gr[co-1]);
			}
			else
			{
			co-=1;
			y-=space;
			gotoxy(x,y);
			cprintf("%s",gr[co-1]);
			}
			break;
	case 80:if(co==max)
			{
			co=1;
			y=y-space*(max-1);
			gotoxy(x,y);
			cprintf("%s",gr[co-1]);
			}
			else
			{
			co+=1;
			y+=space;
			gotoxy(x,y);
			cprintf("%s",gr[co-1]);
			}
			break;
	case 68:
		return -1;
	case 27:co=max;
		return(co);
	default:gotoxy(x,y);
		cprintf("%s",gr[co-1]);
		break;
	  }
	}
	return(co);
}

NOTFOUND()
{
MESG(7,0);
getch();
return 1;
}
FOUND(int no)
{
MESG(6,no);
getch();
return 1;
}
void DELT(int no)
{
DRAWBOX(15,10,40,12,2,0,6);
gotoxy(18,11);
textcolor(10);
cprintf("%d Recored(s) Deleted.",no);
getch();
}

void MESG(int i,int no)
{
/*TODO:Show  Message Window*/
}



NOISE()
{
sound(600);
delay(100);
nosound();
}

SCROLL_DOWN()
{
_AH=0x07;
_AL=1;
_BH=7;
_CH=0;
_CL=0;
_DH=24;
_DL=79;
geninterrupt(0x10);
}

SCROLL_UP()
{
_AH=0x06;
_AL=1;
_BH=7;
_CH=0;
_CL=0;
_DH=24;
_DL=79;
geninterrupt(0x10);
}

VIEWFILE(char *name)
{
FILE *f;
char str[80],ch,x=0,y=0;
DList *d;
f=fopen(name,"r");
if(f==NULL)
 return 0;
d=(DList*)malloc(sizeof(DList));
d->buf=(char *)malloc(80);
if(d==NULL)
 return 0;
d->next=NULL;
d->prev=NULL;
window(1,1,80,25);
sprintf(d->buf,"*** File : %s ***",name);
showcursor();
while(!feof(f))
  {
  fgets(str,79,f);
  str[strlen(str)-1]='\0';
  d->next=(DList*)malloc(sizeof(DList));
  if(d->next==NULL)
   break;
  d->next->prev=d;
  d->next->next=NULL;
  d=d->next;
  d->len=strlen(str);
  d->buf=(char*)malloc(d->len+1);
  if(d->buf==NULL)
   break;
  strcpy(d->buf,str);
  }
  d=d->prev;
  d->next=NULL;
while(d->prev!=NULL)
 d=d->prev;
for(y=1;y<=25;y++)
SCROLL_UP();
textattr(15);
for(y=1;y<25 && d!=NULL;y++)
 {
 gotoxy(1,y);
 printf("%s\r",d->buf);
 d=d->next;
 }
 y--;
 d=d->prev;
do
{
ch=getch();
if(ch==0)
ch=getch();
switch(ch)
 {
 case 72:
		if(y>1)
		 {
			d=d->prev;
			y--;
		 }
		else if(d->prev!=NULL)
		 {
			d=d->prev;
			SCROLL_DOWN();
		 }
		else
			NOISE();
		break;
 case 80:
		if(y<25 && d->next!=NULL)
		 {
			d=d->next;
			y++;
		 }
		else if(d->next!=NULL)
		 {
			d=d->next;
			SCROLL_UP();
		 }
		else
			NOISE();
		break;
 }
 gotoxy(1,y);
 printf("%s\r",d->buf);
}while(ch!=27);
fclose(f);
hidecursor();
return 1;
}


When i compiled it, it shows following errors

•Linking DR.EXE:
Linker Error: Undefined symbol _DRAWBOX in module DR.C
Linker Error: Undefined symbol _FILLBOX in module DR.C
Linker Error: Undefined symbol _NOISE in module DR.C
Linker Error: Undefined symbol _BOXMENU in module DR.C
Linker Error: Undefined symbol _VIEWFILE in module DR.C
Linker Error: Undefined symbol _ITEMSELC in module DR.C


Please tell me how to solve it