#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<ctype.h>
#include<string.h>

///Peter Binamira
///peter@philskies.net




typedef struct FSIM r;
typedef struct ACARS l;

void DIR();
void FPLAN(l);
void NARROWS(l);
void JUNCTION(l);
void TIMO(l);
void FLAGS(l);

/////////

struct FSIM
{
int colin;
char wypt[20];
char vor[20];
char os[20];
struct FSIM *next;
}
;

struct ACARS{
struct FSIM *hpt;
struct FSIM *cpt;
struct FSIM *tpt;
}
;

	
int CONFIRMATION(l);
int CHECKLENGTH(l);

l IN(l);
l CREATE(l);
l INSERT(l);
l DELETE(l);
r *INPUT(l);
r *INPUT2(l);
r *TRAVEL(l);
r *TRAVEL2(l, int);


main()
{

int i, opctr=1, flag=0;
char choice, trash;

DIR ();
return 0;
		
}
l IN(l l)
{
l.hpt = NULL;
l.cpt = NULL;
l.tpt = NULL;
return l;
}




void DIR()
{
    l l;
    l = IN(l);
    char m[3];
    int x = 0;
    while(x != 6 && x >= 0)
    {
	system ("cls");

printf("version NS-02");	
printf("\n\n* * * * * * * * * * * * MAIN MENU * * * * * * * * * * * ");
printf("\n*                                                     *");
printf("\n*               (1)  ADD A GAME                       *");
printf("\n*               (2)  INSERT A GAME                    *");
printf("\n*               (3)  DELETE A GAME                    *");
printf("\n*               (4)  SEARCH GAMES                     *");
printf("\n*               (5)  LIST ALL GAMES                   *");
printf("\n*               (6)  TERMINATE                        *");
printf("\n*                                                     *");
printf("\n* * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\n");
		
printf("\nPls. ENTER CHOICE (1-6):  ");
	

gets (m);
x = atoi(m);
switch (x)
{

case 1:
printf("\n\n-You have chosen option (1)");
printf("\n\n-ADD A GAME\n\n");
l = CREATE(l);
break;

case 2:
l.tpt = l.hpt;
if(l.hpt == NULL)
{
printf("\n\nNO GAMES RECORDED YET\n\n");
system("PAUSE");}
		
else
{
printf("\n\n-You have chosen option (2)");
printf("\n\n-INSERT A GAME\n\n");
l = INSERT(l);
}
break;
	
case 3:
l.tpt = l.hpt;
if(l.hpt == NULL)
{
printf("\n\nWARNING: Unable to DELETE- NO RECORD FOUND\n\n");
system("PAUSE");
}
  
else
{
printf("\n\n-You have chosen option (3)");
printf("\n\nDELETE A GAME\n\n");
l = DELETE(l);
}
break;
	
		case 4:
		l.tpt = l.hpt;
		if(l.hpt == NULL)
  {
	
		printf("\n\nWARNING: Unable to SEARCH- NO RECORD FOUND\n\n");
		system("PAUSE");
  }
		else{FPLAN(l);
  }
		break;
		
		case 5:
		l.tpt = l.hpt;
		if(l.hpt == NULL)
  {
		printf("\n\nWARNING: Unable to list all games- NO RECORD(s) FOUND\n\n");
		system("PAUSE");}
		else{
		printf("\n\nLISTING ALL GAMES\n\n");
		NARROWS(l);
  }
		break;

		case 6:
		exit(0);
		
		default:
		printf("\n\nENTRY ACCEPTED\n\n");
		system("PAUSE");
	}
}
}

void FPLAN(l l)
{
	char m[3];
    int x = 0;
    while(x != 3 && x >= 0)
    {
	printf("\n\n///////////////");
	printf("\n\nSEARCH SUBMENU\n");
	printf("\n\n(1) SEARCH BY GAME TYPE");
	printf("\n(2) SEARCH BY GAME CONSOLE");
	printf("\n(3) BACK TO MAIN MENU\n\n");
    printf("\n\nENTER CHOICE: (1-3): ");
	gets (m);
	x = atoi(m);
	switch (x)
	{
		case 1:
		system("cls");
		printf("\n\nSEARCHING BY GAME TYPE\n\n");
		TIMO(l);
		break;

		case 2:
		system("cls");
		printf("\n\nSEARCHING BY GAME CONSOLE\n\n");
		FLAGS(l);
		break;
	
		case 3:
		break;

		default:
		printf("\n\nINVALID CHOICE\n\n");
		system("PAUSE");
	}
}
}
//////////////////////////////
void NARROWS(l l)
{
    int m = 1;
    while(l.tpt != NULL)
             {
             printf("\nGAMERECORD #%d", m);
			 printf("\n GAME NUMBER: %d", l.tpt->colin);
             printf("\n   GAME NAME: %s", l.tpt->wypt);
             printf("\n   GAME TYPE: %s", l.tpt->vor);
             printf("\nGAME CONSOLE: %s\n\n", l.tpt->os);
             l.tpt = l.tpt->next;
             system("PAUSE");
             m++;
             }
 }

void JUNCTION(l l)
{
    printf("\n\n GAME NUMBER: %d", l.tpt->colin);
    printf("\n   GAME NAME: %s", l.tpt->wypt);
    printf("\n   GAME TYPE: %s", l.tpt->vor);
    printf("\nGAME CONSOLE: %s\n\n", l.tpt->os);
    system("PAUSE");
}
/////////////////////////////////////
void TIMO(l l)
{
char ndb[20];
l.tpt = l.hpt;
printf("\nEnter game type: ");
scanf("%s", ndb);
	while(l.tpt != NULL)
	{
		if(strcmp(l.tpt->vor, ndb) == 0)
  		{
			JUNCTION(l);
			l.tpt = l.tpt -> next;
		}
		else
		{
		    l.tpt = l.tpt -> next;
		}
	}
	printf("\nNO RECORDS FOUND");
}

void FLAGS(l l)
{
char console2[20];
l.tpt = l.hpt;
printf("\nENTER GAME CONSOLE: ");
scanf("%s", console2);
	while(l.tpt != NULL)
	{
		if(strcmp(l.tpt->os, console2) == 0)
  		{
			JUNCTION(l);
			l.tpt = l.tpt -> next;
		}
		else
		{
		    l.tpt = l.tpt -> next;
		}
	}
	printf("\nNO GAME CONSOLE EXISTING");
}

int CHECKLENGTH(l l)
{
	int m = 1;
	while(l.tpt != NULL)
	{
		m  = m + 1;
		l.tpt = l.tpt -> next;
	}
return m;
}

int CONFIRMATION(l l)
{
	l.tpt = l.hpt;
	while(l.tpt != NULL)
	{
		if(l.tpt -> colin == l.cpt -> colin)
		{
		printf("\nGAME NUMBER ALREADY EXISTS! Please re-enter number:\n\n");
		system("PAUSE");
		return 0;
		}
		l.tpt = l.tpt -> next;
		}
return 1;
}

l CREATE(l l)
{
	l.tpt = l.cpt;
    if(l.hpt == NULL)
    {
    l.cpt=(r*)malloc(sizeof(r));
    l.cpt = INPUT(l);
    l.hpt = l.cpt;
	l.cpt->next = NULL;
    }
    else
    {
	l.tpt = l.hpt;
	l.tpt =  TRAVEL(l);
	l.cpt=(r*)malloc(sizeof(r));
	l.cpt = INPUT2(l);
	l.cpt -> next = NULL;
    l.tpt -> next = l.cpt;
	l.tpt = l.cpt;
    }
return l;
}

l INSERT(l l)
{
	int c, m;
	NARROWS(l);
	printf("\n\nENTER GAME NUMBER TO BE INSERTED: ");
	scanf("%d", &c);
	m = CHECKLENGTH(l) + 1;
		if(c < 1 || c > m)
		{
        printf("\nUNABLE TO PROCESS DUE TO INVALID NUMBER");
		printf("\n   Choose from 1 to %d", m);
		}
		else
		{
		if(c == 1)
		{
			l.cpt=(r*)malloc(sizeof(r));
			l.cpt = INPUT2(l);
			l.cpt -> next = l.hpt;
			l.hpt = l.cpt;
		}
		else
		{
			l.tpt = TRAVEL2(l, c - 1);
			l.cpt=(r*)malloc(sizeof(r));
			l.cpt = INPUT2(l);
			l.cpt -> next = l.tpt -> next;
			l.tpt -> next = l.cpt;
		}
		}
return l;
}

l DELETE(l l)
{
	int m;
	NARROWS(l);
	l.tpt = l.hpt;
	if(l.hpt != NULL)
	{
	printf("\n\nWhat GAME RECORD will be deleted? ");
	scanf("%d", &m);
	if(m == 1)
	{
	    l.cpt = l.hpt;
		l.hpt = l.cpt -> next;
		l.cpt -> next = NULL;
		free(l.cpt);
	}
 	else
	{
		l.tpt = TRAVEL2(l, m - 1);
		l.cpt = l.tpt -> next;
		l.tpt -> next = l.tpt -> next -> next;
		l.cpt -> next = NULL;
		free(l.cpt);
	}
	}
return l;
}

r *INPUT(l l)
{
	printf("\nEnter GAME NUMBER: ");
	scanf("%d", &l.cpt->colin);
	printf("\nEnter GAME NAME: ");
	scanf("%s", l.cpt->wypt);
	printf("\nEnter GAME TYPE: ");
	scanf("%s", l.cpt->vor);
	printf("\nEnter GAME CONSOLE: ");
	scanf("%s", l.cpt->os);
return l.cpt;
}

r *INPUT2(l l)
{
	int m;
	do{
	printf("\nENTER GAME NUMBER: ");
	scanf("%d", &l.cpt->colin);
	m = CONFIRMATION(l);
	}while(m == 0); 
	printf("\nENTER GAME NAME: ");
	scanf("%s", l.cpt->wypt);
	printf("\nENTER GAME TYPE: ");
	scanf("%s", l.cpt->vor);
    printf("\nENTER GAME CONSOLE: ");
	scanf("%s", l.cpt->os);

return l.cpt;
}

r *TRAVEL(l l)
{
while (l.tpt -> next != NULL)
    {
    l.tpt = l.tpt -> next;
    }
return l.tpt;
}

r *TRAVEL2(l l, int m)
{
l.tpt = l.hpt;
for(int i = 1; i < m; i++)
    {
    l.tpt = l.tpt -> next;
    }
return l.tpt;
}
//system("PAUSE");}

