/**************************************************************************/ /* ** M E N U . C */ #include #include #include #include #include #include "dhk.h" /*------------------------------------------------------------------------*/ void tulosta_kehys( int leveys, /* Menun leveys ilman kehyksi„ */ int korkeus, /* Korkeus ilman kehyksi„ */ int x, /* Vasemman reunan x-koordinaatti */ int y /* Yl„reunan y-koordinaatti */ ) { int i,j; window(x,y,x+leveys+2,y+korkeus+2); textcolor(WHITE); /* yl„osa */ putch(LEFT_TOP); for (i=0; ii;j--) { delay(5); gotoxy(x+j-1,4); cprintf("%s",p); } } } /*------------------------------------------------------------------------*/ void tulosta_tyypit( tlista_os_taulu ttaulu_os, /* Osoitintaulukko kirjetyyppitiedoston alkioihin */ int valinta, /* Valitun kirjetyypin indeksi taulukossa */ int alkux, /* Tekstin aloituskohta */ int alkuy, /* Tekstin aloituskohta */ int leveys, /* Tulostusikkunan leveys */ int korkeus /* Tulostusikkunan korkeus */ ) { int i=0; window(alkux,alkuy,alkux+leveys-2,alkuy+korkeus-1); textcolor(WHITE); while (ttaulu_os[i] != NULL) { if (i==valinta) textcolor(YELLOW); cprintf("%s\r\n",*ttaulu_os[i]); textcolor(WHITE); i++; } if (i == valinta) textcolor(YELLOW); cprintf("%s\r",LOPETUS); gotoxy(1,valinta+1); textcolor(WHITE); } /*------------------------------------------------------------------------*/ tlista_os *menu( /* Palauttaa osoittimen valittuun kirjetyyppiin */ tlista_os_taulu ttaulu_os) { int leveys; /* Menun leveys */ int korkeus = 0; /* Menun korkeus */ int alkux=50; /* Menun paikka */ int alkuy=2; /* kuvaruudulla */ char c; /* Luettava n„pp„in */ int valinta=0; /* Valitun kirjetyypin j„rjestysnumero */ int minval, maxval; /* Valinta muuttujan sallittu vaihteluv„li */ leveys = strlen(LOPETUS); while ( ttaulu_os[korkeus] != NULL ) { if (strlen(*ttaulu_os[korkeus]) > leveys) leveys = strlen(*ttaulu_os[korkeus]); korkeus++; } leveys++; leveys++; korkeus++; /* Menun lopetus-toiminto */ textbackground(BLUE); clrscr(); alkuinfo(3,2); minval=0; maxval=korkeus-1; textbackground(BLACK); tulosta_kehys(leveys, korkeus, alkux, alkuy); tulosta_tyypit(ttaulu_os,valinta,alkux+2,alkuy+1,leveys,korkeus); do { c = getch(); switch (c) { case ESC: { window(1,1,80,25); textcolor(BLUE); textbackground(WHITE); clrscr(); exit(0); } case RETURN: { window(1,1,80,25); textbackground(BLACK); textcolor(WHITE); clrscr(); if (valinta==maxval) { exit(0); } else return ttaulu_os[valinta]; } case 0: { c = getch(); switch (c) { case NUOLI_YLOS: { if (valinta>minval) valinta--; else valinta = maxval; tulosta_tyypit(ttaulu_os,valinta,alkux+2,alkuy+1,leveys,korkeus); break; } case NUOLI_ALAS: { if (valinta