/**********************************************************************/ /* ** B R I E F E . C */ #include #include #include #include #include "dhk.h" /**********************************************************************/ char erotinmerkki[2]; /* Erotinmerkki tiedostossa BRIEFE.DHK */ /**********************************************************************/ /* Aliohjelma lukee parametrina tuodusta tiedostosta rivej„ seuraavaan*/ /* tyhj„„n riviin saakka. Rivit yhdistet„„n yhteen merkkitaulukkoon */ /* jonka loppuun lis„t„„n erotinmerkki. */ void lue_patka(FILE *kt,pitka_merkkijono pmjono) { rivityyppi rivi; int rpituus; erotinmerkki[0] = EROTINMERKKI; erotinmerkki[1] = 0; do { fgets(rivi,RIVINPITUUS,kt); rpituus=strlen(rivi); if (feof(kt)) goto loppu; } while (rpituus <= 1); /* Tyhj„t rivit pois */ while ((rpituus > 1) && (!feof(kt))) { /* Rivinloppumerkit pois ennen yhdist„mist„ */ if ( rivi[--rpituus] == '\n' ) rivi[rpituus] = 0; strcat(pmjono,rivi); fgets(rivi,RIVINPITUUS,kt); rpituus=strlen(rivi); } loppu: strcat(pmjono,erotinmerkki); /* Erotinmerkki my”s jonon loppuun */ } /**********************************************************************/ /* Aliohjelma antaa parametrina tuodulla erottimella erotetun alkion */ /* merkkijonosta, jonka alkuun funktion 1. parametri osoittaa */ tlista_os osa_mjono(char **alku, char erotin) { char *loppu; rivityyppi alkio; loppu = strchr(*alku,erotin); if (loppu) { strncpy(alkio,*alku,(loppu-(*alku))); /* Lis„t„„n merkkijonon loppumerkki */ alkio[(loppu-*alku)] = '\0'; *alku = loppu+1; return(strdup(alkio)); } else return(NULL); } /**********************************************************************/ /* Aliohjelma lukee KIRJE_TIEDOSTO tiedostosta eri kirjetyyppien */ /* nimet ja niit„ vastaavien fraasitiedostojen nimet. */ void lue_kirjetyypit( tiedostolista ttaulu, /* Taulukko luokkanimikkeist„ ja niit„ */ /* vastavaavista tiedostonimist„ */ tlista_os_taulu ttaulu_os /* Osoitintaulukko yo. taululon alkioihin*/ ) { FILE *kt; pitka_merkkijono pmjono; /* V„liaikaismuuttuja tiedostolistan */ /* tallettamiseen */ char *alku; /* Osoitin haluttuun kohtaan pmjono:ssa */ int i = 0; /* Apumuuttuja */ int j = 0; /* Apumuuttuja */ int eka_alkion_indeksi; /* Luokkanimikkeen indeksi taulukossa */ /* ttaulu */ kt = fopen(KIRJE_TIEDOSTO,"rt"); if (!kt) { printf("Tiedostoa %s ei l”ydy oletushakemistosta.\n",KIRJE_TIEDOSTO); printf("Katso k„ytt”ohjeiden kohta 3.3. Ajo keskeytetty.\n"); clearerr(kt); exit(0); } strcpy(pmjono,'\0'); lue_patka(kt,pmjono); while (!feof(kt)) { eka_alkion_indeksi=i; alku = pmjono; while ( (ttaulu[i++] = osa_mjono(&alku,EROTINMERKKI)) !=0); /* Listan viimeiseksi alkioksi NULL-osoitin */ /* Luokkanimikkeen alkukohta muistiin ttaulu_os-taulukkoon */ ttaulu_os[j++] = &ttaulu[eka_alkion_indeksi]; strcpy(pmjono,'\0'); lue_patka(kt,pmjono); } ttaulu_os[j] = NULL; fclose(kt); } /**********************************************************************/