/****************************************************************************/ /* ** S A R J A _ A . C ** ** Sarja-ohjelman yleisi„ aliohjelmia. ** ** Aliohjelmat: ** 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_j - tulostaa viestin "Ei toimi" ja odottaa ** n„pp„imen painallusta. ** ei_toimi_p - kuten ei_toimi_j ** logo - tulostaa ohjelman logo-tekstin ** ** ** Tekij„t: Vesa Lappalainen ** Ohjelmointikurssi 1991 ** Tehty: 13.11.1991 ** Muutettu: 16.11.1991/vl ** Mit„ muutettu: siirretty logo-aliohjelma t„nne ** Muutettu: 05.12.1991/jaa ** Mit„ muutettu ei_toimi_j, ei_toimi_p ja logo ** */ #include #include #include #include "sarja.h" #include "mjonot.h" #ifdef TURBO_C #include #define GETCH #endif /****************************************************************************/ char lue_merkki(void) /* N„pp„imist”lt„ luettu merkki. */ /* Funktiolla luetaan n„pp„imist”lt„ yksi merkki. Mik„li ohjelmassa ** ei ole m„„ritelty vakiota GETCH, vaaditaan RET-n„pp„imen painallus. ** Globaalit: GETCH - m„„ritys ** Sy”tt”: N„pp„imist” ----------------------------------------------------------------------------*/ { /* Seuraava toimii Turbo C:ss„: */ #ifdef GETCH return getch(); #else /* Seuraava on standardin mukainen: */ char s[50]; fgets(s,50,stdin); return s[0]; #endif } /****************************************************************************/ char /* */ odota_nappain( /* = p„„tteelt„ luettu merkki */ char *kelpaavat, /* s Ne merkit, jotka hyv„ksyt„„n. */ char oletus, /* s Merkki joka palautetaan, mik„li pain. RET. */ int isot /* s Jos !=0 niin isot ja pienet samaistetaan. */ ) /* ** P„„tteelt„ luetaan merkki. Jos isot ja pienet kirjaimet halutaan ** samaistaa (isot!=0), niin muutetaan luettu merkki isoksi. ** Jos oletus ei ole 0-merkki ja ollaan kohdattu rivinvaihto ** tai return- n„pp„imen painallus palautetaan oletus. ** T„m„ operaatio toistuu kunnes ollaan luettu merkki joka kuuluu ** sallittuun joukkoon (kelpaavat). ** Jos sallittu joukko on NULL, niin kaikki painetut kelpaavat ----------------------------------------------------------------------------*/ { char painettu; do { while (!(painettu=lue_merkki())); /* Luetaan painettu n„pp„in. */ if (isot) painettu = isoksi(painettu); /* Jos tarvitsee muuttaa isoksi. */ if ( oletus && ((painettu=='\n') || (painettu=='\r')) ) return oletus; /* Pal. oletus jos painettu RET */ } while ( kelpaavat && !strchr(kelpaavat,painettu) ); return painettu; } /****************************************************************************/ void odota_jotakin(void) /* ** Aliohjelmalla odotetaan kunnes jotakin n„pp„int„ on painettu. ** Kutsuu: odota_nappain ** Algoritmi: ** odota_nappain aliohjelmalle sallitaan kaikki merkit (kelpaavat=NULL) ** ja oletusn„pp„int„ ei k„ytet„ (ei haittaisi vaikka k„ytett„isiinkin). ----------------------------------------------------------------------------*/ { printf("Paina jotakin!\n"); odota_nappain(NULL,0,VAIN_ISOT); } /****************************************************************************/ int kylla_vastaus(void) /* 1 jos painettiin K tai RET ja 0 jos E */ /* ** Funktiolla odotetaan kunnes painetaan K tai E tai RET ** Tulostus: N„yt”lle rivin vaihto. ----------------------------------------------------------------------------*/ { int palautus; palautus = (odota_nappain("KE",'K',VAIN_ISOT)=='K'); printf("\n"); return palautus; } /****************************************************************************/ void ei_toimi_j( /* */ Sarja_tyyppi *sarja /* s H„m„yst„ jottei valitusta k„ytt„m„tt”myydes*/ ) /* Funktiolla tulostetaan teksti "ei toimi" ja odotetaan n„pp„int„. ----------------------------------------------------------------------------*/ { printf("\nEi toimi viel„! "); if (sarja->joukkueita==0); odota_jotakin(); } /****************************************************************************/ void ei_toimi_p( /* */ Pelaajarekisteri_tyyppi *sarja_pelaajat /* s H„m„yst„ jottei val k„ytt„m*/ ) /* Funktiolla tulostetaan teksti "ei toimi" ja odotetaan n„pp„int„. ----------------------------------------------------------------------------*/ { printf("\nEi toimi viel„! "); if (sarja_pelaajat->pelaajia==0); odota_jotakin(); } /****************************************************************************/ void logo(void) /* Funktiolla tulostetaan ohjelman logo. ** Globaalit: VERSIO ** Tulostus: N„ytt””n ----------------------------------------------------------------------------*/ { printf("\n\n"); printf(" ###################################\n"); printf(" # JOUKKUE- JA OTTELUREKISTERI #\n"); printf(" # versio %10s" " #\n",VERSIO); printf(" # Juha Ala-Aho #\n"); printf(" ###################################\n"); printf("\n"); }