File: param.h

package info (click to toggle)
tcng 10b-3
  • links: PTS, VCS
  • area: main
  • in suites: squeeze
  • size: 3,644 kB
  • ctags: 2,515
  • sloc: ansic: 19,040; pascal: 4,640; yacc: 2,619; sh: 1,914; perl: 1,546; lex: 772; makefile: 756
file content (68 lines) | stat: -rw-r--r-- 1,749 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
/*
 * param.h - Parameter handling
 *
 * Written 2001,2002 by Werner Almesberger
 * Copyright 2001 EPFL-ICA
 * Copyright 2002 Network Robots
 */


#ifndef PARAM_H
#define PARAM_H

#include <stdint.h>
#include <stdio.h>

#include "data.h"
#include "location.h"


typedef struct _param_dsc {
    const char *id;
    DATA_TYPE type;
    /* ---- the following field are set when evaluating parameter lists ----- */
    uint32_t v; /* value */
    int present;
} PARAM_DSC;

typedef struct _param {
    PARAM_DSC *dsc;	/* prm_... */
    DATA data;
    struct _param *next;
} PARAM;

typedef struct {
    const PARAM_DSC **required;
    const PARAM_DSC **optional;
} PARAM_DEF;


#include "param_decl.inc"


PARAM *param_make(PARAM_DSC *dsc,DATA data);
void param_add(PARAM **list,PARAM *param);
void param_get(const PARAM *params,LOCATION loc);

void check_required(const PARAM *params,const PARAM_DSC **required,
  LOCATION loc);
void check_optional(const PARAM *param,const PARAM_DSC **required,
  const PARAM_DSC **optional,LOCATION loc);
void check_params(const PARAM *params,const PARAM_DSC **required,
  const PARAM_DSC **optional,LOCATION loc);

int prm_present(const PARAM *params,const PARAM_DSC *dsc);
DATA *prm_data_ptr(PARAM *params,const PARAM_DSC *dsc);
DATA prm_data(PARAM *params,const PARAM_DSC *dsc);
uint32_t prm_unum(PARAM *params,const PARAM_DSC *dsc);

void param_push(void);
void param_pop(void);
void param_load(const PARAM *params,const PARAM_DEF *base,
  const PARAM_DEF *curr,LOCATION loc);
void param_print(FILE *file,const PARAM_DEF *base,const PARAM_DEF *child,
  const PARAM_DEF *curr,const PARAM_DSC **special,
  void (*special_fn)(FILE *file,const PARAM_DSC *param,void *arg),
  void *special_arg);

#endif /* PARAM_H */