K-Kieli Käyttäjän käsikirja


5. K-kielisen ohjelman suoritus (C-API)

Seuraavassa kuvattu ne funktiot, joiden avulla K-kielinen ohjelma suoritetaan C-kielellä.

        void K_init() 
______________________________________________________________________

K-kieltä kutsutaan funktiolla K_init() kerran, joka alustaa tarvittavat tietorakenteet (mm. symbolitaulu).

        int K_do(param-list,K-filename,value-list,debug-flg,reload) 
        ______________________________________________________________________ 
        CHAR *param-list;       /* parametrilista (SCREF-lista)*/ 
        CHAR *K-filename;       /* K-ohjelmatiedoston nimi */ 
        CHAR *value-list;       /* arvolista, jonne palauta laittaa arvot  
                                 * SCREF-lista */ 
        int debug-flg;          /* jos TRUE, niin tulostuu testilauseet */ 
        int reload;             /* jos TRUE, luetaan K-ohjelma uudelleen */ 

Varsinaisia K-ohjelmia suoritetaan ko. funktiolla. Palauttaa TRUE, jos suoritus OK. Jos suoritus päättyy virheeseen, niin funktiolla K_get_error() voi lukea virheilmoituksen.

K_do etsii ohjelmaa ko. hakemistosta ja hakemistosta $KPROGDIR, jos sellainen ympäristömuuttuja on määritelty. Jos tiedoston nimi alkaa . tai / merkillä, niin silloin ei haeta ympäristömuuttujan KPROGDIR perusteella, muuten haetaan ensin ko. muuttujan perusteella.

Esim: suoritetaan K-ohjelma nimeltä tarkista.k nykyisestä hakemistosta:

                extern CHAR *K_get_error(); 
                int ok; 

ok=K_do("","./tarkista.k","",FALSE,FALSE); if (!ok) ä fprintf(stderr,"VIRHE:%sÖn",K_get_error()); å

- ei parametri-, eikä arvolistaa, eikä haluta debug-toimintoja, eikä uudelleen lukua levyltä

K-tulkki lukee, selaa ja jäsentää vain kerran ko. ohjelman. Muilla kutsukerroilla K-tulkki suorittaa suoraan sen muistissa olevan pinon mukaisesti.

Parametrilista on muotoa:

        sarake-1        sarake-2                 
        nimi1           arvo             
        nimi2           arvo     

Esim: $a 100.00 $b "Kalle Kankkunen" $numero "100.00"

Arvolista on muotoa:

        sarake-1                sarake2 sarake3 ...               sarake4 
        palautteessa arvoja lkm arvo1   arvo2   arvo3   arvo4 ... arvo_n 
        palautteessa arvoja lkm arvo1   arvo2   arvo3   arvo4 ... arvo_n 
        palautteessa arvoja lkm arvo1   arvo2   arvo3   arvo4 ... arvo_n 
        palautteessa arvoja lkm arvo1   arvo2   ...               arvo_n 
        Esim: 
        1       1.00 
        3       2.00    Kankkunen Kalle         HELSINKI 
        1       K 
        4       1       2       3       4 
        ... 
        void K_get_var(variable_name,value) 
        ______________________________________________________________________ 
        CHAR *variable_name;    /* muuttujan nimi $xxxxx....*/ 
        CHAR *value;            /* mjan arvo */ 

Koska K käyttää globaalista symbolitaulua, voidaan symbolitaulun muuttujia katsoa ko. funktiolla suorituksen jälkeen. Variable_name osoittaa muuttujan nimeen, jonka arvo halutaan katsoa. Value osoittaa muuttujan arvoon. Arvo palautetaan aina merkkijonona. Katso myös K_set_var.

        Esim: Katsotaan muuttujan $HenkNimi arvo: 
                 
                unsigned char nimiÄ100Å; 

K_get_var("HenkNimi",nimi);

        void K_set_var(variable_name,value) 
        ______________________________________________________________________ 
        CHAR *variable_name;    /* muuttujan nimi $xxxxx....*/ 
        CHAR *value;            /* mjan arvo */ 

Koska K käyttää globaalista symbolitaulua, voidaan symbolitaulun muuttujien arvo asettaa funktiolla ennen K:n suoritusta. Variable_name osoittaa muuttujan nimeen, jonka arvo halutaan asettaa. Value osoittaa arvoon, joka muuttujalle annetaan. Arvo aina merkkijono. Katso myös K_get_var.

        CHAR *K_get_error() 
______________________________________________________________________

Palauttaa osoittimen virheilmoitukseen.

Muita funktioita ei ole K:n käsittelyyn.

        void K_use_symboltable(sym_table_name) 
        ______________________________________________________________________ 
        CHAR *sym_table_name;   /* käytettävän symbolitaulun nimi */ 

Muuttaa K:n käytössä olevaa symbolitaulua. Jos sym_table_name on NULL, niin käytetään oletus symbolitaulua.

        void K_set_user(username, password) 
        ______________________________________________________________________ 
        CHAR *username; /* käyttäjän nimi kannassa */ 
        CHAR *password; /* käyttäjän salasana kannassa */ 

Ilmoitetaan K-tulkille, mikä on käyttäjätunnus kantaan. Tarvitaan yhteys-funktioissa (kts.3.8.4).


Valitse:[Ens.sivu] [Sivun alkuun] [Sisällysluettelo] [Hakemisto] [Seuraava sivu]

© 1992-1996 Karjalan Tietovalta Oy, Karjalan ATK-Awot Oy, Computer Program Unit Oy