/*
                                Denise-MYTH Artificial Intelligence.

                                  Copyright (C) 2000 Szymon Jessa

                                         WERSJA ANGIELSKA:

This  program  is free software; you can redistribute it and/or modify it under the terms of the GNU
General  Public  License  as  published  by  the  Free  Software Foundation; either version 2 of the
License, or (at your option) any later version.

This  program  is  distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
even  the  implied  warranty  of  MERCHANTABILITY  or  FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.

You  should  have received a copy of the GNU General Public License along with this program; if not,
write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.

                                           WERSJA POLSKA:

Niniejszy   program   jest  oprogramowaniem  wolnodostëpnym;  moûesz  go  rozprowadzaê  dalej  i/lub
modyfikowaê na warunkach Powszechnej Licencji Publicznej GNU, wydanej przez Fundacjë Wolnodostëpnego
Oprogramowania - wedîug wersji 2-giej tej Licencji lub którejô z póúniejszych wersji.

Niniejszy   program  rozpowszechniany  jest  z  nadziejâ,  iû  bëdzie  on  uûyteczny  -  jednak  BEZ
JAKIEJKOLWIEK  GWARANCJI,  nawet  domyôlnej  gwarancji  PRZYDATNOÔCI  HANDLOWEJ albo PRZYDATNOÔCI DO
OKREÔLONYCH ZASTOSOWAÏ. W celu uzyskania bliûszych informacji - Powszechna Licencja Publiczna GNU.

Z  pewnoôciâ  wraz  z niniejszym programem otrzymaîeô teû egzemplarz Powszechnej Licencji Publicznej
GNU; jeôli nie - napisz do Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.

                                              KONTAKT:

snail: Szymon Jessa, ul. Warszawska 20/6, 89-600 Chojnice,
email: smoczek@ue.eti.pg.gda.pl (ew. noco@box43.gnet.pl)
phone: (052) 39-707-88

****************************************************************************************************
*/
/*
	funkcje odpowiedzialne za ustalanie DENISE, TEMAT, ROZMOWCA
*/

char FROM def_denise(void)
{
	// funkcja stara sië przypisaê wartoôci strukturze `denise` (dtr_struct)

	struct fakt_struct *fakt;
	char nr_grupy,podst[MAX_LINE_LENGHT];

    // jeôli baza pusta, to nic z tego
    if (fakt_head==NULL) return RESULT_NO_OK;

	for (fakt=fakt_head;fakt!=NULL;fakt=fakt->next)
	{
		// pobieramy numer grupy rdzenia
		nr_grupy=fakt->obiekt_head->ident_head->opis[0];
		// pobieramy grupë podstawowâ (bez zabezpieczeï - ta grupa MUSI byê)
		fgrupa_get_body(fakt->obiekt_head->podstawowe,nr_grupy,podst);
		// czy rdzeniem jest DENISE?
		if (strcmp(podst,"denise")==0)
		{
			denise.fakt=fakt;
			return RESULT_OK;
		}
	}

	return RESULT_NO_OK;
}

char FROM dtr_who(char *podst)
{
	char nr_grupy,txt[MAX_LINE_LENGHT];

    // jeôli baza faktów pusta to BÎÂD:
    if (fakt_head==NULL)
    {
    	con_put("bîâd: brak bazy faktów\n");
        return RESULT_NO_OK;
    }

	// czy DENISE?
	if (strcmp(podst,"denise")==0) return PODMIOT_DENISE;

	// czy ROZMOWCA?
	// pobieramy numer grupy rdzenia ROZMOWCY jesli istnieje
	if (rozmowca.fakt!=NULL)
	{
		nr_grupy=rozmowca.fakt->obiekt_head->ident_head->opis[0];
		// pobieramy grupë podstawowâ (bez zabezpieczeï - ta grupa MUSI byê)
		fgrupa_get_body(rozmowca.fakt->obiekt_head->podstawowe,nr_grupy,txt);
		// czy rdzenie te same?
		if (strcmp(podst,txt)==0) return PODMIOT_ROZMOWCA;
   }

	// czy TEMAT?
	// pobieramy numer grupy rdzenia TEMATU jesli istnieje
	if (temat.fakt!=NULL)
    {
		nr_grupy=temat.fakt->obiekt_head->ident_head->opis[0];
		// pobieramy grupë podstawowâ (bez zabezpieczeï - ta grupa MUSI byê)
		fgrupa_get_body(temat.fakt->obiekt_head->podstawowe,nr_grupy,txt);
		// czy rdzenie te same?
		if (strcmp(podst,txt)==0) return PODMIOT_TEMAT;

		return PODMIOT_TEMAT;
    }

   // jeôli podmiot nie zostaî rozpoznany, to musi byê nowym tematem
	return PODMIOT_TEMAT;
}

char FROM dtr_put_denise(char *string)
{
	// funkcja wpisuje do `string` wyraz podstawowy

	sprintf(string,"bez_imienia");
	// jeôli nie zdefiniowany to pa pa...
	if (denise.fakt==NULL || fakt_head==NULL) return RESULT_NO_OK;
	// pobieramy podstawowy i putujemy
	fgrupa_get_body(denise.fakt->obiekt_head->podstawowe,denise.fakt->obiekt_head->ident_head->opis[0],string);

	return RESULT_OK;
}

char FROM dtr_put_rozmowca(char *string)
{
	// funkcja wpisuje do `string` wyraz podstawowy

	sprintf(string,"bez_imienia");
	// jeôli nie zdefiniowany to pa pa...
	if (rozmowca.fakt==NULL || fakt_head==NULL) return RESULT_NO_OK;
	// pobieramy nazwë i putujemy
//	fgrupa_get_body(rozmowca.fakt->obiekt_head->podstawowe,rozmowca.fakt->obiekt_head->ident_head->opis[0],string);
   strcpy(string,rozmowca.name);

	return RESULT_OK;
}

char FROM dtr_put_temat(char *string)
{
	// funkcja wpisuje do `string` wyraz podstawowy

	sprintf(string,"nieznany");
	// jeôli nie zdefiniowany to pa pa...
	if (temat.fakt==NULL || fakt_head==NULL) return RESULT_NO_OK;
	// pobieramy podstawowy i putujemy
	fgrupa_get_body(temat.fakt->obiekt_head->podstawowe,temat.fakt->obiekt_head->ident_head->opis[0],string);

	return RESULT_OK;
}

char FROM dtr_defined(char who)
{
	// jeôli nie ma bazy faktów to nic nie moûe byê zdefiniowane
 	if (fakt_head==NULL)return RESULT_NO_OK;

	switch (who)
	{
		case PODMIOT_DENISE: if (denise.fakt!=NULL) return RESULT_OK; break;
		case PODMIOT_ROZMOWCA: if (rozmowca.fakt!=NULL) return RESULT_OK; break;
		case PODMIOT_TEMAT: if (temat.fakt!=NULL) return RESULT_OK; break;
	}

	return RESULT_NO_OK;
}
