libyasm
listfmt.h
Go to the documentation of this file.
1 
30 #ifndef YASM_LISTFMT_H
31 #define YASM_LISTFMT_H
32 
33 #ifndef YASM_DOXYGEN
34 
37 typedef struct yasm_listfmt_base {
39  const struct yasm_listfmt_module *module;
40 } yasm_listfmt_base;
41 #endif
42 
44 typedef struct yasm_listfmt_module {
46  const char *name;
47 
49  const char *keyword;
50 
58  /*@null@*/ /*@only@*/ yasm_listfmt * (*create)
59  (const char *in_filename, const char *obj_filename);
60 
64  void (*destroy) (/*@only@*/ yasm_listfmt *listfmt);
65 
69  void (*output) (yasm_listfmt *listfmt, FILE *f, yasm_linemap *linemap,
70  yasm_arch *arch);
72 
77 const char *yasm_listfmt_keyword(const yasm_listfmt *listfmt);
78 
87 /*@null@*/ /*@only@*/ yasm_listfmt *yasm_listfmt_create
88  (const yasm_listfmt_module *module, const char *in_filename,
89  const char *obj_filename);
90 
94 void yasm_listfmt_destroy(/*@only@*/ yasm_listfmt *listfmt);
95 
103 void yasm_listfmt_output(yasm_listfmt *listfmt, FILE *f,
104  yasm_linemap *linemap, yasm_arch *arch);
105 
106 #ifndef YASM_DOXYGEN
107 
108 /* Inline macro implementations for listfmt functions */
109 
110 #define yasm_listfmt_keyword(listfmt) \
111  (((yasm_listfmt_base *)listfmt)->module->keyword)
112 
113 #define yasm_listfmt_create(module, in_filename, obj_filename) \
114  module->create(in_filename, obj_filename)
115 
116 #define yasm_listfmt_destroy(listfmt) \
117  ((yasm_listfmt_base *)listfmt)->module->destroy(listfmt)
118 
119 #define yasm_listfmt_output(listfmt, f, linemap, a) \
120  ((yasm_listfmt_base *)listfmt)->module->output(listfmt, f, linemap, a)
121 
122 #endif
123 
124 #endif