I have a homework to write First Come First Serve and Round Robin simulaion and compare them. I started of creating a linked list for making an event list. I have made insert and print_list functions, but couldn't make it work. My friend told me to use Doubly Linked List so I reacreated the linked list and am trying to make print function work. I had a question about my insertion function as I had mistake in order of statements in while loop. After fixing many errors, the print function prints the same node many times, instead of the whole list. I can't which part of the program is wrong. I think that I have error either in insert function and I point pointers wrong, so I get event pointed to itself or I have the error in print function.
When i deleted this line of the code the print function printed only the current node and nothing else.
newpointer->next = *eventlist;
I think that means that I have problem in this part, but I don't get why.
 if(prevptr == NULL)                  //if putting node at the beginning of the list
 {
     printf("DONEW\n");
     newpointer->next = *eventlist;                    
     *eventlist = newpointer;
 }
Can you please tell me what's wrong with the code?
#include <stdio.h>
#include <stdlib.h>
struct event {
       struct event *next;
       int processid;
       int arrivaltime;
       int cputime;
};
typedef struct event Event;
typedef Event *eventPtr;
Event create_node(int processid, int arrivaltime, int cputime);
void add_event(Event *newpointer, eventPtr *eventlist);
void print_node(Event node);
void print_eventlist(Event *eventlist);
Event get_nextevent(Event *eventlist);
int main(int argc, char* argv[])
{
    int sourcenum,a,b,c,i;
    Event tempevent;
    eventPtr eventlist = NULL;
    print_eventlist(eventlist);
    char* sources,timeSlice;
    if(argc != 3)
    printf("Proper usage is: main.c sources time-slice\n");
    else
    {
        sourcenum = atoi(argv[1]);
        timeSlice = atoi(argv[2]);
        for(i = 0; i < sourcenum ; i++)
        {
              //print_eventlist(&(*eventlist));
              printf("please enter the process-id, arrival-time and cpu-time.\n");
              scanf("%d %d %d",&a, &b, &c);
              printf("something\n");
              tempevent = create_node(a,b,c);
              printf("something\n");
              add_event(&tempevent, &eventlist);
              print_eventlist(eventlist);
        }
        print_eventlist(eventlist);    
    }
    return 0;
}
void add_event(Event *newpointer, eventPtr *eventlist)     //insert
{
     printf("DONE1\n");
     eventPtr currentptr, prevptr;
     printf("DONE2\n");
     prevptr = NULL;
     printf("DONE3\n");
     currentptr = *eventlist;
     printf("DONE4\n");
     while((currentptr != NULL && currentptr->arrivaltime < newpointer->arrivaltime))                  /*on every loop previous and current pointer gets upgraded*/
     {
             printf("DONEW\n");
             prevptr = currentptr;
             currentptr = currentptr->next;   
     }
     printf("DONEW\n");
     if(prevptr == NULL)                  //if putting node at the beginning of the list
     {
         printf("DONEW\n");
         newpointer->next = *eventlist;                    
         *eventlist = newpointer;
     }
     else //putting list between current and previous
     {
         printf("DONEW\n");
         prevptr->next = newpointer;
         newpointer->next = currentptr;
     }
     printf("DONE\n");
}
Event create_node(int processid, int arrivaltime, int cputime)
{
      Event *ptr;
      ptr = malloc(sizeof(Event));
      if(ptr != NULL)
      {
         ptr->processid = processid;       
         ptr->arrivaltime = arrivaltime;    
         ptr->cputime = cputime;
         ptr->next = NULL;
      }
      return *ptr;
}
void print_node(Event node)
{
  printf("process-id = %d\n",node.processid);
  printf("Arrival Time = %d\n",node.arrivaltime);
  printf("CPU time = %d\n",node.cputime);   
}
void print_eventlist(eventPtr currentPtr)                                           /*function receives an eventlist and prints all of the events*/
{
    if(currentPtr == NULL)
    {
        puts("List is empty\n");
    }
    else
    {
        puts("The List is:");
        while(currentPtr != NULL)
        {
            printf("==========================================\n");//list #%d\n",i);
            print_node(*currentPtr);
            printf("\n==========================================\n");
            currentPtr = currentPtr->next;
        }
        puts("NULL\n");
    }
}
    /*int i=0;                                     //This is what I had before
    eventPtr currentptr;
    *currentptr = *eventlist;
    printf("something!!!");
    while(currentptr != NULL)
    {
         i++;
         printf("==========================================\nlist #%d\n",i);
         print_node(*currentptr);
         printf("\n==========================================\n");
         currentptr = currentptr->next;            
    }
}*/
/*Event get_nextevent(Event *eventlist)
{    
    Event newstruct = create_node(eventlist->processid, eventlist->arrivaltime, eventlist->cputime);
    eventlist = eventlist->next;
    return newstruct;  
}*/
 
     
    