/***********************************************************************/ /* ** D H K . H ** ** Tiedosto sis„lt„„ dhk-ohjelman tarvitsemat yleiset ** vakiot ** tietotyypit ** globaalit vakiotyyliset muuttujat ** makrot ** aliohjelmien otsikot ** ** Tekij„: Erkki Mattila ** Tehty: 24.1.1992 ** Muutettu: ** */ /***********************************************************************/ /* ** V a k i o t */ #define LEFT_TOP 0xC9 #define RIGHT_TOP 0xBB #define HORIZ 0xCD #define VERT 0xBA #define LEFT_BOT 0xC8 #define RIGHT_BOT 0xBC #define RETURN 13 /* Valintan„pp„in menuissa */ #define ALT_X 45 /* Lopetus (Borland) */ #define F7 65 /* Lopetus (WP) */ #define F2 60 /* Talletus (Borland) */ #define F10 68 /* Talletus (WP) */ #define F1 59 /* Helppi */ #define F3 61 /* Helppi */ #define ESC 27 /* Poistuminen menusta */ #define NUOLI_YLOS 72 #define NUOLI_ALAS 80 #define VASEN_NUOLI 75 #define OIKEA_NUOLI 77 #define LOPETUS "AUFH™REN" /* Menuvalinta lopetus */ #define KYLLA "JjKk" /* Jaa/Kyll„ */ #define TARKENNIN ".brf" /* Tiedostonimen tarkennin */ #define VANHATARK ".bak" /* Tarkennin, kun .brf -> .bak */ #define TIEDOSTONIMENPITUUS 25 /* Tiedostonimen max.pituus polkuineen */ #define MAX_TIEDOSTOJA 50 /* Tiedostoja per kirjetyyppi */ #define MAX_TYYPPEJA 20 /* Kirjetyyppien maksimi lkm */ #define MAX_LUOKKANIMIKKEITA 500 /* Luokkanimikkeiden maksimim„„r„ */ #define MAX_RIVEJA 200 /* Rivien maksimim„„r„/kirje */ #define RIVINPITUUS 80 /* Tiedoston rivin maksimipituus */ #define KIRJE_TIEDOSTO "BRIEFE.DHK" /* Tiedosto, joka sis„lt„„ */ /* kirjetyypit ja niit„ vastaavien fraasitiedostojen nimet */ #define EROTINMERKKI ',' /* Erotinmerkki em. tiedostossa */ #define VALIMERKKI '|' /* Fraaseissa rivierotin */ /***********************************************************************/ /* ** T i e t o t y y p i t ** ** Tietorakenteiden kuvat ks. k„ytt”ohjeen liite 3 */ typedef char rivityyppi[RIVINPITUUS]; /* Kirjetyyppitiedoston rivi */ /* Osoitin merkkijonoon */ typedef char *tlista_os; /* Osoitintaulukko kirjetyyppitiedoston alkioihin (merkkijonoihin) */ typedef tlista_os tiedostolista[MAX_TIEDOSTOJA]; /* Taulukko, jonka alkiot ovat osoittimia edellisen taulukon alkioihin */ typedef tlista_os *tlista_os_taulu[MAX_TYYPPEJA]; /* Apumuuttuja, johon fraasi ensiksi luetaan */ typedef char pitka_merkkijono[600]; /* Fraasilistan alkio */ typedef struct a { struct a *seuraava; struct a *edellinen; int pituus; /* Fraasin pituus rivein„ */ char *mjono; /* Osoitin fraasiin */ } lista_alkio; /* Fraasilistan tunnussolmu */ typedef struct { lista_alkio *seuraava; /* Osoitin listan alkuun */ int vari; /* Fraasin tulostusv„ri */ lista_alkio *esivalittu; /* Valittu fraasi */ } tunnus_solmu; /* Taulukon alkio */ typedef struct { int r; /* rivi */ int p; /* pituus */ int s; /* sarake */ tunnus_solmu *tsolmu; /* osoitin tunnussolmuun */ } alkio_tyyppi; /* Taulukko, joka sis„lt„„ osoittimet fraasilistojen tunnussolmuihin */ typedef alkio_tyyppi fraasi_taulu[MAX_LUOKKANIMIKKEITA]; /***********************************************************************/ /* ** G l o b a a l i t (vakio) muuttujat */ extern char erotinmerkki[]; /* Erotinmerkki tiedostossa BRIEFE.DHK */ extern char valimerkki[]; /* Rivierotin fraaseissa */ /***********************************************************************/ /* ** M a k r o t */ #define T_ALLOC (tunnus_solmu *) malloc(sizeof(tunnus_solmu)); #define L_ALLOC (lista_alkio *) malloc(sizeof(lista_alkio)); /***********************************************************************/ /* ** A l i o h j e l m a t ** ** Aliohjelmia on seuraavissa tiedostoissa: ** ** briefe.c lue_patka - lukee tiedostosta rivej„ seuraavaan tyhj„„n riviin saakka ja yhdist„„ ne osa_mjono - katkoo merkkijonoa palasiin lue_kirjetyypit - lukee tiedoston KIRJE_TIEDOSTO (BRIEFE.DHK) ** ** fraasit.c alkumerkki - tutkii onko merkkijonossa annettu alkumerkki palanen - p„tkii merkkijonoa tee_tilaa - vieritt„„ taulukkoa eteenp„in hae_paikka - etsii lis„yspaikan taulukosta luokkanimikkeelle lue_luokkanimike - lukee tiedostosta luokkanimikkeen lue_1_fraasi - lukee yhden fraasin lue_fraasit - lukee yht„ luokkanimikett„ vastaavan fraasilistan aseta_rivinumerot - antaa rivinumerot fraaseille lue_fraasitiedosto - lukee fraasitiedostot ** ** menu.c tulosta_kehys - tulostaa menun kehyksen alkuinfo - tulostaa ohjelman nimen ja version tulosta_tyypit - tulostaa menuvalinnat menu - menutoiminnot ** ** naytto.c tulosta_fraasit - tulostaa kirjeen n„ytt””n laske_aloituskohta - laskee ylimm„n rivin indeksin fmenu - fraasivalikko fraasilista - tulostaa luokkanimikkeen ja fraasit talleta_kirje - kirjeen tallettaminen ohjeet - tulostaa ohjeet kirje - p„„silmukka ** ** dhk.c main - p„„ohjelma ** */ /*---------------------------------------------------------------------*/ /* briefe.c */ void lue_patka(FILE *, pitka_merkkijono); tlista_os osa_mjono(char **, char); void lue_kirjetyypit(tiedostolista, tlista_os_taulu); /*---------------------------------------------------------------------*/ /* fraasit.c */ int alkumerkki(char *, char); char *palanen(char *, char *, int *); int tee_tilaa(fraasi_taulu,int); int hae_paikka(fraasi_taulu, int *, int *, int); int lue_luokkanimike(FILE *ft, fraasi_taulu,int *,int *); int lue_1_fraasi(FILE *ft,pitka_merkkijono,int *); void lue_fraasit(FILE *ft,fraasi_taulu,int); void aseta_rivinumerot(fraasi_taulu, int); void lue_fraasitiedosto(tlista_os *, fraasi_taulu); /*---------------------------------------------------------------------*/ /* menu.c */ void tulosta_kehys(int, int, int, int); void alkuinfo(int, int); void tulosta_tyypit(tlista_os_taulu, int, int, int, int, int); tlista_os *menu(tlista_os_taulu); /*---------------------------------------------------------------------*/ /* naytto.c */ int tulosta_fraasit(fraasi_taulu, int, int, int); int laske_aloituskohta(fraasi_taulu, int); void fmenu(fraasi_taulu, int, int, int); void fraasilista(fraasi_taulu, int, lista_alkio *); int talleta_kirje(fraasi_taulu, int); void ohjeet(void); void kirje(fraasi_taulu); /*---------------------------------------------------------------------*/