cnet v3.1.4

home
FAQ

cmdline options
topology files
attributes

datatypes
data structures
core API
support API

download/install

cnet's support functions

NAME
Lexical support functions.

SYNOPSIS
#include <cnet.h>
#include <cnetsupport.h>

#define CHAR_COMMENT  '#'
#define CHAR_DQUOTE   '"'

extern char **tokenize(char *line, int *ntokens, const char *separators);
extern void free_tokens(char **tokens);
extern void remove_comment(char *line);
extern void remove_nl(char *line);

DESCRIPTION
While attributes to define cnet's simulations are provided in topology files, we often need to define the required execution of our own protocols as well. Command-line parameters may be passed to each node's EV_REBOOT event handler, but providing many parameters this way can be cumbersome. Instead, we often prefer to specify the parameters of a large protocol in an external configuration file that is initially read by each node. These lexical support functions assist with the basic parsing of such files.

tokenize accepts a line of characters and breaks that string into a number of tokens that were separated by any of a set of indicated characters. Any initial separators, at the beginning of the line, are first skipped. A token appearing within CHAR_QDUOTE characters may contain any of the separators.

tokenize returns a NULL-terminated vector of strings (tokens), with the number of tokens reported in ntokens. The result returned by tokenize should eventually be passed to free_tokens to deallocate memory.

The functions remove_comment and remove_nl simply replace the first instance of CHAR_COMMENT, or \n or \r, with the NUL byte.

EXAMPLE
A typical use of these functions is:
FILE  *fp = fopen(filename, "r");

if(fp) {
    char  line[BUFSIZE], **tokens;
    int   n, ntokens;

    for(;;) {
        fgets(line, sizeof(line), fp);
        if(feof(fp) || ferror(fp))
            break;

        remove_comment(line);
        tokens  = tokenize(line, &ntokens, " \t");
        for(n=0 ; n<ntokens ; ++n)
            // access or copy tokens[n] ...
        free_tokens(tokens);
    }
    fclose(fp);
}

cnet was written and is maintained by Chris McDonald (chris@csse.uwa.edu.au).

cnet development has been supported by an ACM-SIGCSE Special Project Grant, and an Australian Apple University Consortium Scholarship.