referencia indefinida a gotoxy en C

Estoy tratando de escribir un programa en lenguaje C (código :: bloques en Windows). He agregado debajo de los archivos de encabezado, se compila sin errores, pero cuando se trata de ejecutar el código arroja un error de referencia indefinida a gotoxy. Encuentra el código completo. El error viene donde tengo declaraciones de gotoxy.

# include<stdio.h>
# include<conio.h>
# include<malloc.h>
# include<stdlib.h>
# include<windows.h>
#include<dos.h>
struct node
{  int data;
    struct node *link;
};
void append(struct node **,int);
void in_begin(struct node **,int);
void del(struct node **,int);
void in_middle(struct node **,int,int);
int count(struct node *);
void display(struct node *);
char ans;
int main()
{   struct node *p;  /* p can be said as the head or a start ptr */
     p=NULL;
     /* Printing the menu */
     int num,loc;
     char choice;
     do
     { //clrscr();
        printf("PROGRAM TO IMPLEMENT SINGLY LINKED LIST ");
        printf("\n=====================================");
        printf("\n\n1.Create \\ Appending The List");
        printf("\n2.Insert Node At Begining");
        printf("\n3.Insert Node In Middle");
        printf("\n4.Deleting a  Node");
        printf("\n5.Counting The No Of Nodes");
        printf("\n6.Displaying the list");
        printf("\n7.Exit");
        oper:
        gotoxy(1,15);printf("                                          ");
        gotoxy(1,11);printf("\n\nEnter ur Choice : ");
        choice=getch();
        switch(choice)
        {
            case '1':
            //  char ans;
              do
             {  printf("Enter any number : ");
                 scanf("%d",&num);
                 append(&p,num);
                 printf("Enter more (y/n) :");
                 fflush(stdin);
                 ans=getchar();
              }while(ans !='n');
             break;
             case '2':
             printf("Enter The Data : ");
             scanf("%d",&num);
             in_begin(&p,num);
             break;

             case '3':
             printf("\nEnter The Position :");
             scanf("%d",&loc);
             printf("\nEnter The Data : ");
             scanf("%d",&num);
             in_middle(&p,loc,num);
             break;

             case '4':
             printf("\nEnter The Data u Want To Delete : ");
             scanf("%d",&num);
             del(&p,num);
             break;

             case '5':
             printf("\nThe No Of Nodes Are %d",count(p));
             getch();
             break;

             case '6':
             display(p);
             getch();
             break;

             case '7':
             printf("\n\nQuiting.......");
             getch();
             exit(0);
             break;

             default:
             gotoxy(1,15);printf("Invalid choice.Please Enter Correct Choice");
             getch();
             goto oper;

        }

     }while(choice !=7);
return 0;
}

void append(struct node **q,int num)
{   struct node *temp,*r;
     temp = *q;
     if(*q==NULL)
     {   temp = (struct node *)malloc(sizeof(struct node));
          temp->data=num;
          temp->link=NULL;
          *q=temp;
     }
     else
     {  temp = *q;
         while(temp->link !=NULL)
         {  temp=temp->link;
         }
         r = (struct node *)malloc(sizeof(struct node));
         r->data=num;
         r->link=NULL;
         temp->link=r;
     }
}

void display(struct node *q)
{     if(q==NULL)
        {  printf("\n\nEmpty Link List.Can't Display The Data");
            getch();
            goto last;
        }
      while(q!=NULL)
        {  printf("\n%d",q->data);
            q=q->link;
        }
     last:
     ;
}

int count(struct node *q)
{  int c=0;
    if(q==NULL)
    { printf("Empty Link List.\n");
      getch();
      goto last;
    }
    while(q!=NULL)
    {   c++;
         q=q->link;
    }
    last:
    return c;

}

void in_begin(struct node **q,int num)
{  struct node *temp;
    if(*q==NULL)
    {  printf("Link List Is Empty.Can't Insert.");
        getch();
        goto last;
    }
    else
    {   temp=(struct node *)malloc(sizeof(struct node));
         temp->data=num;
         temp->link=*q;
         *q=temp;  /* pointing to the first node */
     }
     last:
     getch();
}

void in_middle(struct node **q,int loc,int num)
{  struct node *temp,*n;
    int c=1,flag=0;
    temp=*q;
    if(*q==NULL)
    {  printf("\n\nLink List Is Empty.Can't Insert.");
        getch();
        goto last;
    }
    else
    while(temp!=NULL)
    {  if(c==loc)
        {  n = (struct node *)malloc(sizeof(struct node));
            n->data=num;
            n->link=temp->link;
            temp->link=n;
            flag=1;
        }
        c++;
        temp=temp->link;
     }
     if(flag==0)
     { printf("\n\nNode Specified Doesn't Exist.Cant Enter The Data");
        getch();
     }
     else
     { printf("Data Inserted");
        getch();
     }
     last:
     getch();
}

void del(struct node**q,int num)
{    if(*q==NULL)
      {  printf("\n\nEmpty Linked List.Cant Delete The Data.");
          getch();
          goto last;
      }
      else
      {
      struct node *old,*temp;
      int flag=0;
      temp=*q;
      while(temp!=NULL)
      {  if(temp->data==num)
          {   if(temp==*q)         /* First Node case */
                *q=temp->link;  /* shifted the header node */
                else
                old->link=temp->link;

                free(temp);
                flag=1;
            }
            else
            {  old=temp;
                temp=temp->link;
            }
         }
         if(flag==0)
            printf("\nData Not Found...");
         else
              printf("\nData Deleted...Tap a key to continue");
              getch();
        }
        last:
        getch();
      }

Por favor, ayúdame

Respuestas a la pregunta(10)

Su respuesta a la pregunta