next up previous contents index
Next: Index Up: Tutorial Previous: Example 3   Contents   Index


Non interactive use of the command interpreter

The function prog_c is used to initialize the command interpreter. Recall the structure of this function :

void   prog_c(int argc, char *argv[], char *A, char B[], int n, char *pr, int
cas);

The last integer parameter must be 1 to tell the interpreter that it will be run non-interactively. If the string pr is not NULL, the interpreter will execute the command contained in it. It will then return. The functions load_cmd or loadcmd can be used to load programs contained in character strings or files in the command directory respectively. The function

void   Exec_interp_command(char *h);

executes the command contained in the string h. It can be for instance the name of a program.

We reproduce below the source file test_in.c (in the directory test) that is self-explanatory.

#include "interp.h"

FUNCTION *Funcs;

pfi *proc[]={
};


int
main(void)
{
    char            h[50],
                    h2[1000],
                   *k[3];
    
    
/*------ Initialization of the command interpreter ---------------*/
    Funcs = Funcs_interp;
    _NBFONC = _NBFONC0;
    prog_c(0, NULL, "interp.ini", NULL, 0, NULL, 1);
/*----------------------------------------------------------------*/


/*------ We load the program file 'magic' ------------------------*/
    if (loadcmd("magic") == 0) 
        printf("magic loaded\n");
    else
        return 1;
/*----------------------------------------------------------------*/


/*------ We run one of the programs ------------------------------*/
    sprintf(h, "magic x\n");
    Exec_interp_command(h);
/*----------------------------------------------------------------*/


/*------ We write a program ('example') in 
         the string h2 -------------------------------------------*/
    memset(h , 0, 50);
    memset(h2 , 0, 1000);
    sprintf(h, ":example\n");
    strcat(h2, h);
    memset(h , 0, 50);
    sprintf(h, "1\n");
    strcat(h2, h);
    memset(h , 0, 50);
    sprintf(h, "0\n");
    strcat(h2, h);
    memset(h , 0, 50);
    sprintf(h, "-1\n");
    strcat(h2, h);
    memset(h , 0, 50);
    sprintf(h, "mon test_x.out\n");
    strcat(h2, h);
    memset(h , 0, 50);
    sprintf(h, "magicb\n");
    strcat(h2, h);
    memset(h , 0, 50);
    sprintf(h, "end_mon\n");
    strcat(h2, h);
    k[0] = NULL;
    k[1] = h2;
/*----------------------------------------------------------------*/


/*------  We load this program in the command interpreter --------*/
    load_cmd(0, k);
/*----------------------------------------------------------------*/


/*------ We execute the program 'example' ------------------------*/
    sprintf(h, "example\n");
    Exec_interp_command(h);
/*----------------------------------------------------------------*/


/*------ We clean the memory used by the interpreter -------------*/
    clean_exit_interp(&flow_I[0]);
/*----------------------------------------------------------------*/

   return 0;
}

void
init_prog(flow_data *flow_interp)
{
}

void
exit_prog()
{
    exit(0);
}

void
dest_prop(int typ, int i0, flow_data *flow_interp)
{
}

void
init_thread_param(flow_data *flow_interp)
{
}

void
clean_thread_param(flow_data *flow_interp)
{
}



2009-11-12