/*
                                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

****************************************************************************************************
*/
// main.cpp
#ifdef AMIGA
void amiga_main_loop(void);
#endif
void main_start(void);
void clear_variable(void);
void safe_exit(void);
void error_exit(char err[]);
void delay(ULONG ms);
int drand(void);
#ifdef AMIGA
int min(int a,int b);
int max(int a,int b);
#endif
char *current_time(void);
char *create_array(char *txt,UBYTE ile);
char *create_string(char *txt,int lenght);
ULONG file_lenght(FILE *stream);
char pl_ascii(char znacek);
char *pl_ascii_exist(char znacek);
char sort_insert(char *txt1,char *txt2);
void actual_status(void);
void change_intelligence(void);
void config_load(void);
void config_save(void);
void help(void);
void first_run(void);
void about(void);
void gnu_start(void);
void gnu_start_pl(void);

// user.cpp
void save_talk(char *zdanie);
void save_with_identify(char who,char *tresc);
void save_talk_new_session(void);
void save_talk_end_session(void);
void save_brak_odmiany(char *slowo);
void save_nieznane_slowo(char *slowo);
void save_nielog_zdanie(char *zdanie);
char save_check_if_exist(char *filename,char *txt);

// inter.cpp
BYTE open_console(void);
void queue_read(UBYTE *whereto);
void open_interface(void);
void close_interface(void);
void con_put_komunikat(char txt[MAX_LINE_LENGHT]);
void con_put(char txt[]);
void con_get_line(char *line);
LONG con_get_char(UBYTE *whereto);
char con_get(char *txt);
void clear_sentence(void);
void oznajmujace_pytajace(struct sentence_struct *pointer);
void twierdzace_przeczace(struct sentence_struct *pointer);
void make_busy(char *orig,char *busy);
void get_words(struct sentence_struct *pointer);
void con_put_dialog(char who,char *txt,char priority);

// natural.cpp
char analiza_naturalna(struct sentence_struct *pointer);
void kasuj_wyraz(struct sentence_struct *pointer,char wyraz);
void wstaw_wyraz(struct sentence_struct *pointer,char pozycja,char *wyraz);
char filtruj_rozpoczecie(struct sentence_struct *pointer);
char filtruj_calosc(struct sentence_struct *pointer);
char tlumacz_zwroty(struct sentence_struct *pointer);
void wzbogacanie_zdania(struct sentence_struct *pointer);
void naturalizacja(char *zdanie,char oznajm_pyt,char *result);

// data.cpp
void load_data(void);
void save_data(void);
void erase_data(void);
char copy_and_remove(char *src,char *dst);
FILE *data_open(char *file,char *mode);

// data1.cpp
char fleksja_load(void);
char fleksja_save_klony(FILE *stream,struct klon_struct *klon);
char fleksja_save(void);
char fleksja_erase(void);
void fleksja_add_sort(struct fleksja_struct *new_word);
char fleksja_add(char *wyraz,char *podst,char *dane,char mode);
char fleksja_check_ascii_slowo(char *slowko);
char fleksja_check_ascii(char mode);
char fleksja_check_dane_slowo(struct fleksja_struct *word);
char fleksja_check_dane(char mode);
ULONG fleksja_memory_use(void);
ULONG fleksja_count(void);
ULONG fleksja_count_klony(void);

// data2.cpp
struct obiekt_struct *fakty_malloc_obiekt(void);
struct simple_struct *fakty_load_simple(FILE *stream,char *result);
void fakty_load_learn(char nr_bazy);
char fakty_load(void);
char fakty_save_simple(FILE *stream,struct simple_struct *simple);
char fakty_save_obiekt(FILE *stream,struct obiekt_struct *obiekt);
char fakty_save(void);
void fakty_erase_simple(struct simple_struct *simple);
void fakty_erase_obiekt(struct obiekt_struct *obiekt);
void fakty_erase(void);
ULONG fakty_memory_use(void);
ULONG fakty_count(void);
ULONG fakty_count_obiekt(struct fakt_struct *from_fakt);
ULONG fakty_count_simple(char mode,struct fakt_struct *from_fakt,struct obiekt_struct *from_obiekt);

// data3.cpp
char eliza_load(void);
char eliza_erase(void);
ULONG eliza_memory_use(void);
ULONG eliza_count(void);
ULONG eliza_count_ident(void);
ULONG eliza_count_funkc(void);
char eliza_check_lista(char *lista,ULONG linia);
char eliza_check_data(void);

// data4.cpp
char mapa_load(void);
char mapa_save(void);
char mapa_erase(void);
ULONG mapa_count_grupy(void);
ULONG mapa_count_podrzedne(void);
ULONG mapa_count_okreslane(void);
ULONG mapa_memory_use(void);

// extra.cpp
char extra_modyfikacje_ogolne(char zaimek_poz,struct sentence_struct *quest,struct wyrazy_struct *quest_wyr,struct sentence_struct *ans,struct wyrazy_struct *ans_wyr);
char extra_modyfikacje_szczeg(struct sentence_struct *quest,struct wyrazy_struct *quest_wyr,struct sentence_struct *ans,struct wyrazy_struct *ans_wyr);
char extra_stosowalnosc_ogolne(struct wyrazy_struct *quest_wyr,char zaimek_poz,struct wyrazy_struct *ans_wyr,char ans_ile_wyr);
char extra_stosowalnosc_szczeg(struct wyrazy_struct *quest_wyr,char quest_ile_wyr,struct wyrazy_struct *ans_wyr,char ans_ile_wyr);
void extra_tlumacz_zaimki(char podmiot,struct sentence_struct *sent,struct wyrazy_struct *wyr);
void extra_main(char *question_orig,char *answer_orig,char *result_orig);

// fleksja1.cpp
char fleksja_main(struct sentence_struct *pointer_sentence,struct wyrazy_struct *pointer_wyrazy);
struct fleksja_struct *fleksja_find(char *wyraz,char *podst,struct fleksja_struct *first,char mode);
char word_info(void);
char add_word(void);
struct fleksja_struct *del_word_from_base(struct fleksja_struct *word_prev,struct fleksja_struct *word);
char del_word(void);
struct fleksja_struct *fleksja_cmp_czesc_mowy(char *podst,char *odm,char czesc_mowy);
void flopti_podwojne_klony(void);
void flopti_wyraz_podstawowy(void);
char flopti_przymiotnik(struct fleksja_struct *word);
char flopti_rzeczownik(struct fleksja_struct *word);
void flopti_dodawanie_odmian(void);
void fleksja_optimize(void);

// fleksja2.cpp
char fleksja_data_maker(char *dane,char mode);
char def_select(char *data[],char ile,char type,char mode,char par);
void def_czesc_mowy(char *dane,char mode);
void def_przypadek(char *dane,char mode);
void def_przypadek_twierdzenie(char *dane,char mode);
void def_przypadek_przeczenie(char *dane,char mode);
void def_liczba(char *dane,char mode);
void def_rodzaj(char *dane,char mode);
void def_rodzaj_upr(char *dane,char mode);
void def_osoba_lp(char *dane,char mode);
void def_osoba_lmn(char *dane,char mode);
void def_osoba_czasownika_lp(char *dane,char mode);
void def_osoba_czasownika_lmn(char *dane,char mode);
void def_czas(char *dane,char mode);
void def_strona(char *dane,char mode);
void def_stopniowanie(char *dane,char mode);
void def_stopien(char *dane,char mode);
void def_tryb(char *dane,char mode);
void def_zywotnosc(char *dane,char mode);
void def_osobowosc(char *dane,char mode);
void def_pospolitosc(char *dane,char mode);
void def_aspekt(char *dane,char mode);
void def_przechodnosc(char *dane,char mode);
void def_zlozonosc(char *dane,char mode);
void def_czynnosc(char *dane,char mode);
void def_wspolczesnosc(char *dane,char mode);
void def_zaimek_funkcja(char *dane,char mode);
void def_typ_przyimka(char *dane,char mode);
void def_typ_spojnika(char *dane,char mode);
void def_typ_liczebnika(char *dane,char mode);
void def_typ_partykuly(char *dane,char mode);

// blisko.cpp
char blisko_cmp_words(char *odm1,char *podst1,char *odm2,char *podst2,char mode);

// grama1.cpp
char sprawdz_rozbior(void);
char spelnia_funkcje(char nr1);
char rozbior_kompletny(void);
char cmp_wyraz_podst(char nr_grupy,char *podst);
char cmp_wyraz_odm(char nr_grupy,char *odm);
char podmiot_okreslony_ident(void);
char podmiot_zaimkowy_ident(void);
char podmiot_pytanie_o_rdzen(void);
char podmiot_zaimkowy_domyslny_check(void);
char zwiazek_poprawny(register char podrz,register char nadrz,register char poziom);
char get_czesc_mowy_denise(void);
char get_liczba_denise(void);
char get_rodzaj_denise(void);
char get_czesc_mowy_rozmowca(void);
char get_liczba_rozmowca(void);
char get_rodzaj_rozmowca(void);
char get_czesc_mowy_temat(void);
char get_liczba_temat(void);
char get_rodzaj_temat(void);
char get_czesc_mowy_podmiot(void);
char get_przypadek_podmiot(void);
char get_liczba_podmiot(void);
char get_rodzaj_podmiot(void);
char get_liczba_orzeczenie(void);
char get_osoba_orzeczenie(void);
char get_czas_orzeczenie(void);
char get_rodzaj_orzeczenie(void);
char get_przyp_narzuc_orzeczenie(void);
char rodzaj_zgodny(char mowa1,char liczba1,char rodzaj1,char mowa2,char liczba2,char rodzaj2);
char *ptr_czesc_mowy(char *dane);
char *ptr_przypadek(char *dane);
char *ptr_przypadek_narzucony(char *dane,char twierdz_przecz);
char *ptr_liczba(char *dane);
char *ptr_rodzaj(char *dane);
char *ptr_osoba(char *dane);
char *ptr_czas(char *dane);
char *ptr_strona(char *dane);
char *ptr_tryb(char *dane);
char *ptr_zaimek_funkcja(char *dane);
char *ptr_partykula(char *dane);
char *ptr_typ_liczebnika(char *dane);
char *ptr_osobowosc(char *dane);
char *ptr_pospolitosc(char *dane);
char *ptr_stopien(char *dane);

// grama2.cpp
char czy_podmiot(char nr_grupy);
char podmiot(void);
char czy_lacznik(char nr_grupy);
char lacznik(void);
char czy_orzecznik(char nr_grupy);
char orzecznik(void);
char czy_orzeczenie_czasownikowe(char nr_grupy);
char orzeczenie_czasownikowe(void);

// grama3.cpp
char czy_dopelnienie(char nr_grupy);
char dopelnienie(void);
char czy_okolicznik(char nr_grupy);
char okolicznik(void);
char przydawka_przymiotnik(char nr_grupy);
char przydawka_imieslow(char nr_grupy);
char przydawka_liczebnik(char nr_grupy);
char przydawka_rzeczownik(char nr_grupy);
char czy_przydawka(char nr_grupy);
char przydawka(void);

// grupa.cpp
char grupy_main(void);
void kasuj_grupe(char gr);
void polacz_grupy(char gr1,char gr2,char nadrz);
char wyrazenie_przyimkowe(void);
char zaimek_zwrotny(void);
char partykula_przeczaca(void);
char partykula_rozkazujaca(void);
char stopniowanie_opisowe(void);
void check_zdanie_pytajace(void);

// skladnia.cpp
void rozbior_gotowy(void);
char rozbior_tozsamy(void);
void zapamietaj_rozbior(void);
void polacz_w_zwiazki(register char poziom,register char grupa0);
void wybierz_grupy(char ile_ustalic,char poziom,char ile_ustalonych,char ostatni);
void kombinuj_poziom(char poziom);
void drukuj_rozbior(void);
void wykres_zdania(char nadrzedny,char poziom);
void ustal_podmiot(void);
void analiza_zdania(void);
void dobierz_klony(char nr1);
char skladnia_main(void);

// fakty1.cpp
char fgrupa_get_body(char *ciag,char nr_grupy,char *wynik);
char fgrupa_pos_neg(char *grupa);
char fgrupa_cmp_body(char *grupa1,char *grupa2);
char fgrupa_cmp_funkcja(char funkcja1,char funkcja2);
char fgrupa_exist(struct obiekt_struct *obiekt,char *grupa,char funkcja,char *nr_grupy,char nr_start);
char flearn_obiekt_add(void);
char flearn_upgrade_this(struct obiekt_struct *obiekt);
void flearn_obiekt(void);
void fmain_oznajm(void);
void fmain_pyt(void);
char fakty_main_define(void);
char fakty_main(void);

// fakty2.cpp
char fident_cmp_fpf_result(char ile_cmp,char ile_dat,char ile_checked,char pos_neg_cmp,char pos_neg_dat);
char fident_cmp_fpf(struct obiekt_struct *obiekt1,struct simple_struct *simple1,struct obiekt_struct *obiekt2,struct simple_struct *simple2,char mode,char depth);
char fident_cmp_fpi(struct obiekt_struct *obiekt1,struct simple_struct *simple1,struct obiekt_struct *obiekt2,struct simple_struct *simple2,char depth);
char fident_cmp_fp(struct obiekt_struct *obiekt1,struct simple_struct *simple1,struct obiekt_struct *obiekt2,struct simple_struct *simple2,char mode,char depth);
char fident_obiekt_simple(struct fakt_struct *fakt,struct obiekt_struct *obiekt_spr,struct simple_struct *simple_param,char depth,char mode);
struct fakt_struct *fident_mother_fakt(struct obiekt_struct *obiekt_ident,char *rdzen);
char fident_cmp_rdzen_obiekt(struct obiekt_struct *obiekt1,struct obiekt_struct *obiekt2);
char fident_cmp_rdzen_podst(struct obiekt_struct *obiekt,char *rdzen);

// fakty3.cpp
void fakty_proste(char nadrzedny,char poziom,char mode);
void utworz_fakty_proste(void);
void utworz_ciag_odmieniony(char *txt);
void utworz_ciag_podstawowy(char *txt);
void pokaz_fakty_proste(void);
struct simple_struct *kopiuj_fakty_proste(struct simple_struct *src);
struct simple_struct *polacz_fakty_proste(char typ);
char utworz_obiekt_rozbioru(void);
void skasuj_obiekt_rozbioru(void);

// fakty4.cpp
char fniosk_przydawkowe_simple(struct obiekt_struct *obiekt_dat,struct simple_struct *simple_dat,struct obiekt_struct *obiekt_cmp,struct simple_struct *simple_cmp);
char fniosk_przydawkowe(struct obiekt_struct *obiekt_cmp,struct simple_struct *simple_param);
char fniosk_cmp_orzecz(struct obiekt_struct *obiekt_dat,struct obiekt_struct *obiekt_cmp,char pos_neg_cmp);
char fniosk_child(struct fakt_struct *parent_fakt,struct obiekt_struct *obiekt_cmp);

// mapa1.cpp
struct mapa_struct *mapa_add_orzecznik(char *orzecznik,char mode);
struct mapa_struct *mapa_find_orzecznik(char *orzecznik);
char mapa_exist_okreslany(struct mapa_struct *grupa,struct fakt_struct *fakt);
char mapa_exist_podrzedny(struct mapa_struct *grupa,char *orzecznik);
char mapa_add_okreslany(struct mapa_struct *grupa,char typ,struct fakt_struct *fakt);
char mapa_add_podrzedny(struct mapa_struct *grupa,char typ,char *orzecznik);
char mapa_create_glowne_okreslane(void);
char mapa_create_podrzedne(void);
char mapa_create(void);
char mapa_learn(struct fakt_struct *fakt,struct obiekt_struct *obiekt);

// mapa2.cpp
char mapa_exist_unknown(struct fakt_struct *about_fakt,struct fakt_struct *from_fakt);
ULONG mapa_count_unknown(struct fakt_struct *fakt);
char mapa_count_korelacja(struct fakt_struct *fakt_src,struct fakt_struct *fakt_dst);

// def_dtr.cpp
char def_denise();
char dtr_who(char *podst);
char dtr_put_denise(char *string);
char dtr_put_rozmowca(char *string);
char dtr_put_temat(char *string);
char dtr_defined(char who);

// odmiana.cpp
void odm_wyzeruj_zdanie(struct odmiana_struct *zdanie);
char fleksja_podmiot(struct odmiana_struct *zdanie,struct odmiana_grupy_struct *odm_grupa);
char fleksja_orzeczenie_czasownikowe(struct odmiana_struct *zdanie,struct odmiana_grupy_struct *odm_grupa);
char fleksja_lacznik(struct odmiana_struct *zdanie,struct odmiana_grupy_struct *odm_grupa);
char fleksja_orzecznik(struct odmiana_struct *zdanie,struct odmiana_grupy_struct *odm_grupa);
char fleksja_dopelnienie(struct odmiana_struct *zdanie,struct odmiana_grupy_struct *odm_grupa);
void fleksja_przydawka_przymiotnik(struct odmiana_struct *zdanie,struct odmiana_grupy_struct *odm_grupa);
void fleksja_przydawka_rzeczownik(struct odmiana_struct *zdanie,struct odmiana_grupy_struct *odm_grupa);
void fleksja_przydawka_liczebnik(struct odmiana_struct *zdanie,struct odmiana_grupy_struct *odm_grupa);
char fleksja_przydawka(struct odmiana_struct *zdanie,struct odmiana_grupy_struct *odm_grupa);
char fleksja_okolicznik(struct odmiana_struct *zdanie,struct odmiana_grupy_struct *odm_grupa);
char odm_odmien_zdanie(struct odmiana_struct *zdanie);
char odm_odmien_grupe(struct odmiana_struct *zdanie,char nr_grupy);
char odm_fleksja_znajdz(struct odmiana_struct *zdanie,char *wyraz,char *dane,char *res_wyraz,char *res_dane);
char odm_fleksja_quality(char *src,char *dst);
void odm_utworz_wynik(struct odmiana_struct *zdanie);
void odm_kolejnosc(struct odmiana_struct *zdanie);
void odm_naturalizacja_podmiotu(struct odmiana_struct *zdanie,char *gr_start);
char odmiana_main(struct odmiana_struct *zdanie);

// eliza1.cpp
char eliza_cmp_lista_lista(char *lista1,char *lista2);
char eliza_cmp_lista_czlon(char *lista,char *czlon);
char eliza_cmp_czlon_wyraz(char *czlon,char *wyraz);
char eliza_cmp_wyraz_wyraz(char *wyraz1,char *wyraz2);
char eliza_create_sentence(char *lista,char *zdanie);
char eliza_create_lista(char *zdanie,char oznajm_pyt,char twierdz_przecz,char *lista);
void eliza_memory_save(void);
char eliza_main(char *zdanie,char oznajm_pyt,char twierdz_przecz,char mode,char special_priority);

// eliza2.cpp
char trans_prepare_fleksja(char *param,char *dane,char czesc_mowy);
void trans_odmiana(char *var_name,char *var_param,char *result);
void trans_rozmowca(char *var_name,char *var_param,char *result);
void trans_temat(char *var_name,char *var_param,char *result);
void trans_ost_zdanie(char *var_name,char *var_param,char *result);
void trans_przed_ost_zdanie(char *var_name,char *var_param,char *result);
void trans_reszta_zdania(char *var_name,char *var_param,char *result);
char eliza_translate(char *variable,char *result);
char eliza_transform(char *lista_src,char *lista_dst);

// quest1.cpp
char czy_fp_klasyfikujacy(struct obiekt_struct *obiekt,struct simple_struct *simple);
struct fakt_struct * FROM get_from_fakt(char klas_cech,struct fakt_struct *about_fakt);
struct obiekt_struct * FROM get_from_obiekt(char klas_cech,struct fakt_struct *about_fakt,struct fakt_struct *from_fakt);
struct simple_struct * FROM get_from_simple(char klas_cech,struct fakt_struct *about_fakt,struct obiekt_struct *from_obiekt);
char exist_unknown_fp(char klas_cech,struct fakt_struct *about_fakt,struct fakt_struct *fakt);
struct fakt_struct *get_about_klas_baza(void);
char question_write(struct fakt_struct *about_fakt,struct obiekt_struct *from_obiekt,struct simple_struct *from_simple);
char question_depth(struct fakt_struct *about_fakt,struct obiekt_struct *from_obiekt,struct simple_struct *from_simple);
char question_create(char typ_about_fakt);
char question_main(void);

// guest2.cpp
char quest_ogolne_osoba(struct fakt_struct *fakt,struct fleksja_struct *word,char klas_cech);
char quest_ogolne_rzecz(struct fakt_struct *fakt,struct fleksja_struct *word,char klas_cech);
char question_ogolne_main(struct fakt_struct *fakt,char klas_cech);

// answer.cpp
char ans_ogolne(struct fakt_struct *fakt);
void ans_ogolne_show(struct obiekt_struct *obiekt,struct simple_struct *simple,char depth);
char ans_quality(struct obiekt_struct *obiekt,struct simple_struct *simple);
char ans_podmiotowe(void);
void ans_podmiotowe_show(struct fakt_struct *fakt);
char ans_szczegolowe(struct fakt_struct *fakt);
char answer_main(struct fakt_struct *fakt);

// myth.cpp
char program_command(void);
char analiza_logiczna(void);
char myth_main(void);

