/****************************************************************************/ /* ** K E R H O . H ** ** ** Tiedosto sis„lt„„ kerho-ohjelman tarvitsemat yleiset ** vakiot ** tietotyypit ** globaalit vakiotyyliset muuttujat ** makrot ** aliohjelmien otsikot ** ** Tekij„t: Vesa Lappalainen ** Ohjelmointikurssi 1991 ** Tehty: 20.12.1991 ** Muutettu: 21.12.1991 ** Mit„ muutettu: Lis„tty j„senen p„„tteelt„ lukemisessa ** tarvittavia osia ** Muutettu: 21.12.1991/vl ** Mit„ muutettu Tietojen oikeellisuustarkistukset ** kysy_jasenen_tiedot 2 uutta parametria ** Muutettu: 24.12.1991/vl ** Mit„ muutettu: Lis„tty etsimisess„ ja lajittelussa tarvittavia osia ** Muutettu: 26.12.1991/vl ** Mit„ muutettu: Rakenne toteutettu kentt„taulukon avulla ** Muutettu: 29.12.1991/vl ** j„senmaksujen kysyminen (tai vast.) ** kysy_kentat_ja_etsi, 1 lis„parametri ** Muutettu: 18.12.1992/vl ** Mit„ muutettu: vaihdettu Jarjestystyypin tietueen nimi„ ** kenttia -> indekseja ** kentat -> indeksit ** Muutettu: 1.2.1994/vl ** Mit„ muutettu: poistettavan j„senen tiedosto ** kokoja suurennettu ** Muutettu: 17.12.1995/vl ** Mit„ muutettu: valinnat pienill„ kirjaimilla (kent„t riitt„„) ** Editointi ** Hakuehdon t„ytt„minen ** ** */ #include /****************************************************************************/ /* ** V a k i o t */ #define MAX_KENTTIA 60 /* J„senen kenttien maksimim„„r„. */ #define MAX_RIVI 80 /* Maksimi rivin pituus. */ #define MAX_JASEN sizeof(Jasen_tyyppi) /* Suurin datarivin pituus */ #define MAX_RAKENNERIVI 400 /* Suurin rakennerivin pituus */ #define MAX_JASENIA 20 /* J„senist”n maksimi (oletus)koko. */ #define TARKENNIN ".dat" /* Tiedostonimen tarkennin. */ #define VANHATARK ".bak" /* Tarkennin kun .dat -> .bak */ #define POIS_NIMI "pois.dat" /* Poistettujen tiedoston nimi */ #define VAIN_ISOT 1 /* Muutetaan isot ja pienet isoiksi. */ #define MYOS_PIENET 0 /* Pienet ja isot kirjaimet on eri asia. */ #define EROTTIMET "|\t" /* Tiedostossa kent„t eroteltu n„ill„. */ #define POIS "q" /* Mill„ merkkijonolla sy”tt” katkaistaan. */ #define LOPUT_OLETUS ".|," /* Mill„ merkill„ loppuihin oletus. */ #define VAIHDA_RAK "$$" /* Mill„ jonolla vaihdetaan rakenne. */ #define PERUUTUS "^" /* Mill„ jonolla peruutetaan */ #define ALKUUN_SALLITUT "q.,$^?"/* Edelliset yhdess„ jonossa */ typedef enum { /* Vakiot eri tyyppisille sy”t”ille */ LISAYS , /* Tietueen lis„ys */ SYOTTO , /* Syotto hakuehtoon */ TULOSTUS , /* Tulostettavat kent„t ja j„rjestys */ PAIVITYS , /* Korjailu */ MUUTOS , /* Automaattimuutos */ SYOTTO_N , /* Sy”tt”tyyppien m„„r„ */ HAKU_MUUNNOS , /* Hakujonon muunnos */ } Syotto_tyyppi; #define NAP_VAIHD_RAK '$' /* N„pp„in jolla vaihdetaan rakenne */ #define NAP_KORJ 'k' /* N„pp„in jolla valitaan korjailu. */ #define NAP_POISTO 'p' /* N„pp„in jolla valitaan poisto. */ #define NAP_JA '&' /* N„pp„in jolla valitaan AND-etsiminen. */ #define NAP_TAI '|' /* N„pp„in jolla valitaan OR-etsiminen. */ #define NAP_KORJ_POISTO "kp" /* Edelliset merkkijonoksi. */ #define NAP_JA_TAI "&|" /* -"- */ #define NAP_AINA_SALLITUT "?$" /* -"- */ #define NAP_RET '\n' /* N„pp„in joka vastaa RET-n„pp„int„. */ #define NAP_SEURAAVA '+' /* N„pp„in jolla seuraava selauksessa */ #define NAP_EDELLINEN '-' /* N„pp„in jolla edellinen selauksessa */ #define NAP_SEUR_LOPPU "+*" /* N„pp„in jolla seuraava selauksessa */ #define NAP_EDEL_ALKU "-/" /* N„pp„in jolla edellinen selauksessa */ #define NAP_ALKUUN '/' /* N„pp„in jolla alkuun selauksessa */ #define NAP_LOPPUUN '*' /* N„pp„in jolla loppuun selauksessa */ #define NAP_RET '\n' /* N„pp„in joka vastaa RET-n„pp„int„. */ #define ETSI_AND -1 /* Kent„n numerona AND tarkoittaa AND-ets. */ #define ETSI_OR -2 /* Kent„n numerona OR tarkoittaa OR -ets. */ #define VAIN_ETSI 2 /* Selailulle vain etsiminen */ #define KORJAILU 1 /* Selatessa saa korjailla! */ #define EI_KORJAILUA 0 /* Selatessa EI saa korjailla! */ #define TYHJA_ARVO INT_MIN /* Arvo joka kuvastaa tyhj„„ num. kentt„„ */ #define TYHJENNA_ARVO (INT_MIN+1)/* Arvo joka kuvastaa kent„n tyhjennyst„ */ #define TYHJENNA_JONO "==" /* Jono, joka pakottaa kent„n tyhj„ksi */ #define AVAIMEN_KOKO 40 /* Lajitteluavaimelle varattu pituus */ #define PUH_MERKIT "0123456789- ()"/* Puhelinnumeroon sallitut merkit. */ /****************************************************************************/ /* ** T i e t o t y y p i t ** ** Tietorakenteen kuva ks. kerhorak.c */ typedef struct { /* Tietorakenteen tiedot: */ int kenttia; /* Kenttien lukum„„r„ tietueessa. */ struct Kentta_tyyppi *kentat; /* Kentt„taulukko */ char nimi[80]; /* Rakenteen nimi */ char *kenttavalinnat; /* Kenttien pikavalintakirjaimet */ char **mallitulostus; /* Tulostuksen malli */ char *mallirivi; /* Osoitin riviin jossa talletusmalli nimi| */ char *tiedoston_nimi; /* Tiedosto, josta rakenne on luettu. */ char *kommentti; /* 1. kommentti talletettuna */ char *paamenu; /* P„„menu + %s + %d */ char *menu_valinnat; /* Menun valintakirjaimet */ char *lisays_otsikko; /* Lis„yksen otsikko + %d */ char kas_kentat[SYOTTO_N][80];/* K„sitelt„v„t kent„t */ int muutettu; /* Onko rakenteen optioita muutettu? */ int olet_alku; /* Vasemman sulun paikka kysymyksess„. */ int vakanen; /* > -merkin paikka kysymyksess„. */ int rak_nro; /* Rakenteen numero, mik„li monta rak. k„yt.*/ int koko; /* Tietorakenteen kopioitava koko */ int poista_cr; /* Poistaa rivinvaihdot tulostuksessa */ } Rakenne_tyyppi; typedef struct { /* Yhden j„senen tyyppi: */ Rakenne_tyyppi *rakenne; /* Osoitin tyypin rakenteeseen */ char avain[AVAIMEN_KOKO]; /* Lajittelussa k„ytett„v„ avain */ /* Ylim. laskukent„t esitelt„v„ t„nne */ char nimi[40]; /* Nimi muodossa: Virtanen Ville Veikko */ char sotu[12]; /* Sotu muodossa: 121212-123K */ char katuosoite[40]; /* Katuosoite muodossa: Matinpolku 6 */ char postinumero[6]; /* Postinumero muodossa: 40100 */ char postiosoite[30]; /* Postiosoite muodossa: JYVŽSKYLŽ */ char kotipuhelin[15]; /* Puhelinnumerot muodossa: 941-123123 */ char tyopuhelin[15]; /* */ char autopuhelin[15]; /* */ int liittymisvuosi; /* Liittymisvuosi muodossa: 1979 */ double jmaksu; /* J„senmaksu, esim: 10 */ double maksu; /* Paljonko jmaksua maksettu : 10 */ char lisatietoja[80]; /* Vapaasti teksti„. */ char tila[200]; } Jasen_tyyppi; /* */ typedef enum { /* Kentill„ k„ytett„v„t tietotyypit: */ Tjono, /* Tyyppi string */ Tsotu, /* Tyyppi sotulle */ Tint, /* Tyyppi int */ Tdouble, /* Tyyppi double */ Tarvo /* Tyyppi arvo = double, 3.25 => 3+ */ } Tyypit; typedef char Haku_tyyppi[40]; typedef struct { /* Kerhon yleiset tiedot: */ Rakenne_tyyppi *rakenne; /* Osoitin tyypin rakenteeseen. */ char kerhon_nimi[40]; /* Kerhon t„ydellinen nimi. */ char tiedoston_nimi[100]; /* Nimi talletuksessa. */ int max_jasenia; /* Maksimi j„senm„„r„. */ int jasenia; /* J„seni„ t„ll„ hetkell„. */ int nykyjasen; /* Indeksi nyt k„sitelt„v„„n j„seneen. */ int malliriveja; /* Tiedostosta l”ytyineiden mallirivien lkm */ Haku_tyyppi *haku; /* Maski,jolla viimeksi haettu tiedostosta. */ int muutettu; /* Onko kerhoa muutettu, eli tarv. tallett. */ Jasen_tyyppi **jasenet; /* Osoitin j„senosoitintaulukon(dyn.) alkuun*/ } Kerho_tyyppi; /* */ typedef struct { /* Tietue jonka avulla voidaan pit„„ eri j„rjestyksi„. */ int max_koko; /* Indeksitaulukon maksimikoko. */ int indekseja; /* Taulukosta nyt k„ytetty indekseja. */ int jarjesta; /* J„rjestet„„nk” vai ei. */ int *indeksit; /* Osoitin indeksitaulukkoon (dynaaminen). */ } Jarjestys_tyyppi; /* */ typedef struct { /* Selauksessa apuna k„ytett„v„ tietue. */ char viesti[400]; /* N„yt”lle selausta varten tuleva viesti. */ char vali; /* V„limerkki, mik„li viesti joud. jatkam. */ char sallitut[80]; /* Kentt„listan sallitut valintakirjaimet. */ int kohdalla; /* selattavat-taulukon nyt kohd oleva alkio.*/ Jarjestys_tyyppi *selattavat; /* Taulukko jossa selattavat indeksit. */ } Selaus_tyyppi; typedef struct { /* Tietue, jolla v„litet„„n tietoa tarkistusaliohjelmalle*/ Kerho_tyyppi *kerho; /* Kerho, jonka tietoja tarkistetaan. */ Jasen_tyyppi *jasen; /* J„sen, jonka tietoja tarkistetaan. */ int kentta; /* Kentt„, jonka tietoja nyt tutkitaan. */ int seuraava_kentta; /* Kentt„, jonka tietoja tutkitaan seuraav. */ int syotto_tyyppi; /* Onko lis„ys vai p„ivitys? */ int muutettu; /* Onko muutettu sis„lt”„? */ char aihe[40]; /* Avustuksen aihe-teksti */ } Tarkistus_tyyppi; typedef enum { /* Tyyppi, jonka tarkistusaliohjelma palauttaa */ TARK_LOPETUS = -1, /* Tarkistus haluaa lopettaa koko kyselyn */ TARK_OK, /* Tarkistus on kunnossa */ TARK_TOISTA, /* Kysymys pit„„ toistaa */ TARK_PAL_OLET /* Kysymys pit„„ toistaa k„ytt„en olet.arvoa*/ } Tarkistus_tulos_tyyppi; /* Funktio-osoitin tarkistusfunktioon: */ typedef Tarkistus_tulos_tyyppi (*Tarkistus_funktio)(Tarkistus_tyyppi *, char *); typedef char *(*Muunnos_funktio)(char *); typedef struct Kentta_tyyppi{/* Tietorakenteen taulukointi, yhd. ken. tiedot*/ char *hopute; /* Mik„ kysymys kent„n tietojen sy”t”ss„. */ char *nimi; /* Kent„n nimi kentt„listassa. */ int koko; /* Kent„n maksimikoko */ int alku; /* Kent„n alkupaikan et„isyys tietueen alust*/ char *alustus; /* Kent„n alustuksessa k„ytett„v„ jono */ int mpit; /* Kent„n oletuspituus talletuksessa. */ Tyypit tyyppi; /* Kent„n tyyppi. */ char *format; /* Kent„n muotoilu tulostuksessa. */ Tarkistus_funktio tark_fun; /* Funktio, jolla kent„n oikeellisuus tark. */ char *rajat; /* Rajaehdot */ } Kentta_tyyppi; /* */ /****************************************************************************/ /* ** G l o b a a l i t (vakio!) muuttujat */ extern char TYHJA_JONO[]; /* Tyhj„ merkkijono apuosoittimeksi.*/ extern char *VERSIO; /* Ohjelman versionumero */ /****************************************************************************/ /* ** M A K R O T */ #define K_KENTTIA (kerho->rakenne->kenttia) /****************************************************************************/ /* ** A L I O H J E L M A T ** ** Aliohjelmia on seuraavissa tiedostoissa: ** makroina toteutetut funkiot: ** jokujono - onko jokin seuraavista jonoista ** kerhoali.c - yleisi„ aliohjelmia rekisteri„ varten ** onko_tyhjenna_jono - 1 = jos tutkittava jono on == ** erikoisarvo - muuttaa reaaliluvun merkkijonoksi jos ** kyseess„ on jokin erikoisarvoa kuvaava arvo ** erikoisjono - muuttaa jonon reaaliluvuksi, jos jono jokin ** erikoisjono (kuten "" tai "==") ** int_jonoksi - muuttaa kokonaisluvun mjonoksi, -1 -> "" ** double_jonoksi - muuttaa reaaliluvun mjonoksi, -1 -> "" ** jono_intiksi - muuttaa jonon kokonaisluvuksi, "" -> -1 ** jono_doubleksi - muuttaa jonon reaaliluvuksi, "" -> -1 ** lue_merkki - lukee yhden merkin n„pp„imist”lt„ ** (laiteriippuva) ** odota_nappain - odottaa yhden vain sallitussa joukossa olevan ** n„pp„imen painallusta ** odota_jotakin - odottaa mink„ tahansa n„pp„imen painamista ** kylla_vastaus - odottaa K tai E n„pp„imen painallusta ** ei_toimi - tulostaa viestin "Ei toimi" ja odottaa ** n„pp„imen painallusta. ** viiva - piirt„„ koko ruudun levyisen viivan ** ** kerhorak.c - kerhon rakennetta kovasti k„ytt„vi„ aliohjelmia ** alusta_kerho - alustaa tietorakenteen kerhoksi ** mallirivi - tekee mallirivin tallettamista varten ** kent„n indeksi - palauttaa annetun nimisen kent„n indeksin ** kentan_tyyppi - palauttaa kent„n tyypin ** kentan_osoite - palauttaa kent„n osoitteen ** kentan_koko - palauttaa kent„n koon tavuina ** kentta_jonoksi - palauttaa valitun kent„n merkkijonona ** kentta_tjonoksi - kuten edell„, mutta talletusta varten ** jono_kentaksi - muuttaa merkkijonon kent„ksi ** tulosta_jasen - tulostaa j„senen valittuun tiedostoon ** poista_NULL - poistaa osoitintaulukosta NULL-osoittimet ** tulosta_kenttalista - tulostaa valittavaksi kaikki j„sentietueen ** kent„t ** alusta_jasen - alustaa j„senen ** lisaa_jasen - lis„„ uuden j„senen rakenteeseen ** luo_jasentaulukko - luo j„senosoitintaulukon ** kysy_kentta - kysyy j„senen valitun kent„n tiedot ** kysy_jasenen_tiedot - kysyy j„senen kaikkien kenttien tiedot ** kysy_yksi_kentta - kysyy yhden kent„n tiedot ** poista_jasen - varmistaa ja poistaa valitun j„senen ** kysy_haku - kysyy yhden hakukent„n arvon ** kysy_hakutiedot - kysyy koko hakutaulukon tiedot ** sijoita_kentta - sijoittaa yhden kent„n j„senest„ toiseen ** ** kerhotal.c - kerhon lukeminen ja tallettaminen tiedostoon ** luo_kerho - kysyy kerhon t„ydellisen nimen ja alustaa ** ja luo tarvittavat rakenteet. ** lisaa_jasen_rivi - lis„„ uuden j„sen joka annettu muodossa ** Ankka Aku|12234-34|... ** lue_kerho - kysyy kerhon nimen ja lukee tiedot levylt„ ** mik„li kerhoa ei l”ydy, annetaan mahdollisuus ** uuden luomiseen ** jasen_riviksi - muuttuu j„sentietueen tiedot muotoon ** Ankka Aku|12234-34|... ** talleta_kerho - tallettaa kerhon tiedot levylle ** ja muuttaa vanhan tiedoston nimelle .BAK ** talleta_poistettu - tallettaa poistetun jasenen ** ** kerhoets.c - j„senist”st„ etsimiseen liittyvi„ aliohjelmia ** onko_rajoissa - tutkii onko kentt„ sallittujen rajojen sis„ll„ ** lajittele - tekee permutaatiotaulukon valitun kent„n ** mukaisesti ** etsi_kentat - etsii annetun maskin ehdon t„ytt„vi„ j„seni„ ** kysy_kentat_ja_etsi - interraktiivinen kysyminen, etsiminen, ** selaaminen, korjailu ja poisto ** laske_montako_muuta - etsii onko muita kuin valittua j„sent„ ** korjaile_kenttia - antaa mahdollisuuden korjailla valit.kentti„ ** ** kerhotar.c - oikeellisuustarkistukset ** tarkistus_nimi - palauttaa funktion nimen (avustusten tek.) ** tarkistus_fun - palauttaa funktion nimen perusteella ** ** t_ok - palauttaa aina 0 ** t_nimi - tarkistetaan l”ytyyk” nime„ ennest„„n ** t_sotu - hyv„ksyt„„n muodot ** tyhj„ ** ppkkvv (jos oikein) ** ppkkvv-nnnT (jos oikein) ** ppkkvv+nnnT (jos oikein) ** ennest„„n l”ytyv„„ sotua EI hyv„ksyt„! ** t_katu - pit„isi hoitaa c/o-toiminto ja ** saman osoitteen etsiminen ja t„ydent„minen ** muttei toistaiseksi tee muuta kuin ** muuttaa alkuisoiksi ** t_isoksi - muutaa jonon isoksi ** t_alku_isoksi - muuttaa jonon muotoon Aaaa Bbbb ** t_numeerinen - tarkistaa, ett„ jokainen jonon merkki on numero ** t_vuosi_1900 - tarkistaa sy”t”n olevan muotoa ** xx -xx 19xx ja muuttaa muotoon 19xx ** t_puh - sallii kaikki puhelinnumeroon sallitut merkit ** t_arvo - sallii sy”t”t 5 5.25 5+ 5.5 5« 5.75 6- ** ** kerholra.c - rakenteen lukeminen tiedostosta ** lue_rakennetiedosto - lukee annetun nimisest„ tiedostosta rakenteen ** kysy_rakenne - kysyy uuden rakenteen ** rakenteen_nro - rakenteen numero nimen perusteella ** talleta_kaikki_rakenne_optiot - optiotiedoston k„s. kutsu ** rakenteen_vaihto_sallittu - onko sallittua vaihtaa rakennetta? ** ** kerhoopt.c - asetusten k„sittely ** tarkista_kas_kentat - tarkistaa onko k„s. kenttien tunnukset oikein ** tee_asetukset - asetus-menu ** kentta_kysymys - palauttaa teksin, joka liittyy kent„n kysym. ** kas_rakenne - paluttaa kasitelt„v„n rakenteen ** kysy_kas_kentat - kysyy kenttien tunnukset, joita k„sitell„„n ** lue_rakenne_optiot - lukee optiotiedoston ** talleta_rakenne_optiot - tallettaa optiotiedoston ** */ /*--------------------------------------------------------------------------*/ /* makroina toteutetut: */ #define jokujono(s,m) joku_jono(s,m,EROTTIMET) /*--------------------------------------------------------------------------*/ /* kerhoali.c: */ int onko_tyhjenna_jono(const char *); char lue_merkki(void); char odota_nappain(char *, char, int); void odota_jotakin(void); int kylla_vastaus(void); void ei_toimi(Kerho_tyyppi *); void logo(void); int erikoisjono(const char *,double *arvo); int erikoisarvo(char *,int ,double); char *int_jonoksi(char *,int,int,char *); char *double_jonoksi(char *,int,double,char *); int jono_intiksi(char *,char *); double jono_doubleksi(char *,char *); void viiva(void); /*--------------------------------------------------------------------------*/ /* kerhorak.c: */ void alusta_kerho(Kerho_tyyppi *); char *mallirivi(Rakenne_tyyppi *); int kentan_indeksi(Jasen_tyyppi *,char *); Tyypit kentan_tyyppi(int ,Jasen_tyyppi *); void *kentan_osoite(int ,Jasen_tyyppi *); int kentan_koko(int ,Jasen_tyyppi *); char *kentta_jonoksi(int, Jasen_tyyppi *); char *kentta_tjonoksi(int, Jasen_tyyppi *); void jono_kentaksi(int ,Jasen_tyyppi *,char *); void tulosta_jasen(FILE *, Jasen_tyyppi *); int poista_NULL(Kerho_tyyppi *); void tulosta_kenttalista(Kerho_tyyppi *, char *); void alusta_jasen(Kerho_tyyppi *kerho,Jasen_tyyppi *jasen); int lisaa_jasen(Kerho_tyyppi *, Jasen_tyyppi *); char *luo_jasentaulukko(Kerho_tyyppi *, int); int kysy_jasenen_tiedot(Kerho_tyyppi *, Jasen_tyyppi *, int); int kysy_yksi_kentta(Kerho_tyyppi *, Jasen_tyyppi *, int, int, char *); int poista_jasen(Kerho_tyyppi *, int); int kysy_haku(Kerho_tyyppi *,Haku_tyyppi *, int); int kysy_hakutiedot(Kerho_tyyppi *,Haku_tyyppi *); int sijoita_kentta(Jasen_tyyppi *,Jasen_tyyppi *,int); /*--------------------------------------------------------------------------*/ /* kerhotal.c: */ char *lue_kerho(Kerho_tyyppi *); char *talleta_kerho(Kerho_tyyppi *); char *talleta_poistettu(Jasen_tyyppi *); /*--------------------------------------------------------------------------*/ /* kerhoets.c: */ int onko_rajoissa(Jasen_tyyppi *,char *,int); int etsi_kentat(Kerho_tyyppi *, int, Haku_tyyppi *, Jarjestys_tyyppi *); int kysy_kentat_ja_etsi(Kerho_tyyppi *, int, Jarjestys_tyyppi **,int); int laske_montako_muuta(Kerho_tyyppi *, int, char *, int , int *, int *); void korjaile_kenttia(Kerho_tyyppi *,Jarjestys_tyyppi **); /*--------------------------------------------------------------------------*/ /* kerhotar.c: */ char *tarkistus_nimi(Tarkistus_funktio); Muunnos_funktio muunnos_fun(Tarkistus_funktio f); Tarkistus_funktio tarkistus_fun(const char *); Tarkistus_tulos_tyyppi t_ok(Tarkistus_tyyppi *tarkistus, char *jono); Tarkistus_tulos_tyyppi t_nimi(Tarkistus_tyyppi *tarkistus, char *jono); Tarkistus_tulos_tyyppi t_sotu(Tarkistus_tyyppi *tarkistus, char *jono); Tarkistus_tulos_tyyppi t_katu(Tarkistus_tyyppi *tarkistus, char *jono); Tarkistus_tulos_tyyppi t_isoksi(Tarkistus_tyyppi *tark, char *jono); Tarkistus_tulos_tyyppi t_alku_isoksi(Tarkistus_tyyppi *tark, char *jono); Tarkistus_tulos_tyyppi t_numeerinen(Tarkistus_tyyppi *tark, char *jono); Tarkistus_tulos_tyyppi t_vuosi_1900(Tarkistus_tyyppi *tark, char *jono); Tarkistus_tulos_tyyppi t_puh(Tarkistus_tyyppi *tark, char *jono); Tarkistus_tulos_tyyppi t_arvo(Tarkistus_tyyppi *tark, char *jono); /*--------------------------------------------------------------------------*/ /* kerholra.c: */ char *lue_rakennetiedosto(Kerho_tyyppi *,char *); Rakenne_tyyppi *kysy_rakenne(void); int rakenteen_nro(char *); int talleta_kaikki_rakenne_optiot(void); int rakenteen_vaihto_sallittu(void); /*--------------------------------------------------------------------------*/ /* kerhoopt.c: */ int tarkista_kas_kentat(Rakenne_tyyppi *,int); int tee_asetukset(Kerho_tyyppi *); char* kentta_kysymys(int kentta); Rakenne_tyyppi *kas_rakenne(Kerho_tyyppi *); int kysy_kas_kentat(Kerho_tyyppi *,int); int lue_rakenne_optiot(Rakenne_tyyppi *); int talleta_rakenne_optiot(Rakenne_tyyppi *); const char *hakumuunnos(void); #include "kerholue.h"