Hello all. I read information from a file and then I convert the times read in based on am/pm to 24 hour times. After that I am trying to sort the list based on time in ascending order. That is where the sort() comes in however I am not making any headway.

The file that I am reading from looks something like

"
TimeStamp: 1:00PM
Source : ADM51-28

TimeStamp: 11:00AM
Source : ADM51-28

TimeStamp: 10:59PM
Source : ADM51-28

TimeStamp: 11:58PM
Source : Internet Explorer
"

Any suggestions on correctings this sort function will be greatly appreciated. Thanks alot!



Code:
#include <stdio.h>
#include <string.h>
#include <conio.h>
#include <stdlib.h>

typedef struct Node
{
	fpos_t begin;
	fpos_t end;
	int t_hour;
	int t_mins;
	char t_meri[3];

	Node *next;
}Location;

Location *top , *ptr , *last;

void allmem();
void convtm();
void sort();

int main()
{
	clrscr();
	allmem();
	convtm();
	sort();
	getch();
	return 0;
}

void sort()
{
	Location *j;
	Location hold;

	ptr = top;

	while(ptr != NULL)
	{
		j = ptr->next;

		while(j != NULL)
		{
			if(j->t_hour < ptr->t_hour)
			{
				hold = *ptr;
				*ptr = *j;
				*j = hold;
			}
			j = j->next;
		}
		ptr = ptr->next;
	}


	ptr = top;

	while(ptr != NULL)
	{
		printf("%.2d:%.2d\n" , ptr->t_hour , ptr->t_mins , ptr->t_meri);
		ptr = ptr->next;
	}
}







void convtm()
{
	ptr = top;

	while(ptr != NULL)
	{
		if(strcmp(ptr->t_meri , "AM") == 0)
		{
			if(ptr->t_hour == 12)
				ptr->t_hour = 0;
		}
		else
		{
			if(ptr->t_hour == 12)
				ptr->t_hour = 12;
			else
				ptr->t_hour += 12;
		}
		ptr = ptr->next;
	}
}









void allmem()
{

	FILE *read;
	char str[20];
	int beginend = 2;
	read = fopen("spool.dat" , "r");
	top = NULL;

	while(feof(read) == 0)
	{
		fscanf(read , "%s" , str);

		if((strcmp(str , "TimeStamp:") == 0))
		{
			if(beginend % 2 == 0)
			{
				ptr = (Location *)malloc(sizeof(Location));
				fscanf(read , "%d:%d%s" , &ptr->t_hour , &ptr->t_mins , ptr->t_meri);
				fgetpos(read , &ptr->begin);
				ptr->next = NULL;
				beginend++;

				if(top == NULL)
				{
					top = ptr;
					last = ptr;
				}
				else
				{
					last->next = ptr;
					last = ptr;
				}
			}
			else
			{
				fseek(read , -14 , SEEK_CUR);
				fgetpos(read , &ptr->end);
				beginend++;
			}
		}
	}
	fclose(read);
}