Avustusta tarvitaan kahdenlaista:
Kirjoitamme yleiskäyttöisen aliohjelmakirjaston help.c, jolla molemmat edellä mainitut ominaisuudet voidaan toteuttaa. Koska käytännössä avustustietoutta on aina liian vähän ja siinä on kirjoitusvirheitä, pyrimme sijoittamaan avustuksen omaksi tiedostokseen, josta help.c- kirjaston on sitä helppo lukea. Olkoon avustustiedoston muoto vaikkapa seuraava:
[?] ? = Avustuksen avustus ====================== ?- merkillä saa yleensä joka paikassa avustusta! Jos avustuksessa kysytään aihetta, josta avustusta halutaan, voidaan vastata esimerkiksi: .... [Lisäys] Lisäys ====== Lisäystoiminolla lisätään uusia henkilöitä. Lisättävä henkilö ... Katso myös: Tietojen syöttö, Asetukset [Tietojen syöttö] Tietojen syöttö =============== Tietoja syötettäessä näytössä näkyy suluissa arvo, joka tulee kentän ... [t_sotu]# Sotuksi kelpaa... ... [SISÄLLYS] Sisällysluettelo: ================= ? Lisäys Etsiminen ...
Nyt esimerkiksi kutsulla
help(NULL);
päästäisiin avustuksen sisällysluetteloon, josta sitten käyttäjä voi tarvittaessa siirtyä haluamaansa kohtaan vaikka kirjoittamalla Tie*.
Sisältöriippuvassa avustuksessa kutsuttaisiin sitten suoraan haluttua kohtaa, esimerkiksi:
help("[Lisäys]");
Helpoimmin tämä kävisi esimerkiksi lisäämällä kysy_kentta - aliohjelmaan kutsu funktioon: char *avustus(int nro) , jonka mukaan avustusta pyydettäisiin halutusta kentästä jos käyttäjä painaisi ?.
Toisaalta avustusta tarvitaan ehkä mieluumminkin kentän tyypin mukaan, ei niinkään itse kentän mukaan (koska "Jäsenen nimi>" tai "Sotu>" sinänsä ovat jo itse selittäviä). Tällöin teemme tarkistusfunktion perusteella löytyvän avustuksen tarkistus_nimi(t_funk), joka palauttaa vastaavan nimen (esim. t_sotu =>"t_sotu"). Näin kysy_kentta voi funktion perusteella saada selville tarkistusfunktiota vastaavan nimen ja nimen perusteella voi kutsua avustusta. Avustukseen on kirjoitettu valmis funktio help_aihe(nimi), joka lisää sulut []nimen ympärille ( "t_sotu" => "[t_sotu]").
Toteutamme tämän vasta ohjelman viimeisessä versiossa.