/**************/ /* laskurh3.c */ /****************************************************************************/ /* ** Ohjelma, jolla voidaan laskea autojen lukumääriä. ** ** ** Toimii sellaisenaan jos on kirjasto nappulat3. ** ** Näyttö muutettu graafisemman näköiseksi ja näytön osien ** hallintaa on parannettu. ** Näppäimet ja laskurit ovat taulukoissa, jotka loppuvat loppu ** näppäimeen ja laskuriin (tunnus, yleensä 0). ** Näppäimet siirretty omaksi kirjastokseen, josta on olemassa ** DOS-versio ja Windows-versio ** ** Ohjelman kääntämiseksi tarvitaan projekti, jossa on ** LASKURH3.C ** NAPPULA3.C (Windowsia varten voi vaihtaa myös uudemman version) ** LASKURI.DEF (Windows) ** HIIRU.C (DOS) ** ** Vesa Lappalainen ** 11.8.1992 ** ** Tehtäviä: 1) Lisää ohjelmaan polkupyörien laskeminen. ** Moneenko kohtaan tulee muutos? ** 2) Muuta ohjelmaa siten, että myös laskurin näytön painaminen ** lisää laskurin arvoa. Montako muutosta? ** 3) Lisää ohjelmaan HELP-näppäin, joka kertoo tietoja ohjelmasta ** Helpistä pois painamalla ESC! ** ** */ /****************************************************************************/ #include #include "nappula3.h" /****************************************************************************/ /* Globaalit näppäimet: */ typedef enum { /* Tunnetut komennot: */ TYHJA, /* Lopun tunniste */ POISTU, NOLLAA, LISAA } komento_tyyppi; typedef enum { /* Käytetyt laskurityypit ja niiden tunnisteet */ TYHJA_LASKURI, /* Lopun tunniste */ HENKILOAUTOJA, KUORMA_AUTOJA } laskuri_tunniste_tyyppi; static nappain_tyyppi nappaimet[] = { /* x y lev kork */ { 'X',"eXit" ,{{ 2, 2},{ 0, 0}}, POISTU , 0 }, { 'N',"Nollaa" ,{{30,13},{ 0, 0}}, NOLLAA , 0 }, { 'H',"Henkilöautoja" ,{{13, 5},{ 0, 0}}, LISAA , HENKILOAUTOJA }, { 'K',"Kuorma-autoja" ,{{38, 5},{ 0, 0}}, LISAA , KUORMA_AUTOJA }, { 0 ,NULL ,{{ 0, 0},{ 0, 0}}, TYHJA , 0 } }; /****************************************************************************/ /* Globaalit laskurit: */ static laskuri_tyyppi laskurit[] = { /* x y lev kork */ { HENKILOAUTOJA, 0 , "%19ld ",{{10, 8},{20, 1}} }, { KUORMA_AUTOJA, 0 , "%19ld ",{{35, 8},{20, 1}} }, { TYHJA_LASKURI, 0 , NULL ,{{ 0, 0},{ 0, 0}} } }; /****************************************************************************/ void piirra_naytto(nappain_tyyppi *nappaimet,laskuri_tyyppi *laskurit) { int i; tyhjenna_ruutu(); for (i=0; nappaimet[i].valinta_kirjain; i++) piirra_nappula(&nappaimet[i]); for (i=0; laskurit[i].tunnus; i++) piirra_laskuri(&laskurit[i]); } /****************************************************************************/ int laske(nappain_tyyppi *nappaimet,laskuri_tyyppi *laskurit) { komento_tyyppi komento; int lisa_viesti; while (1) { komento = lue_komento(nappaimet,laskurit,&lisa_viesti); switch (komento) { case LISAA : lisaa_laskuria(laskurit,lisa_viesti); break; case NOLLAA : nollaa_laskurit(laskurit); break; case PIIRRA : piirra_naytto(nappaimet,laskurit); break; case SYS_EXIT: case POISTU : return 0; } } } /****************************************************************************/ int laskin_main(void) { alusta_nappulat(nappaimet); piirra_naytto(nappaimet,laskurit); laske(nappaimet,laskurit); return 0; }