diff options
| author | Matthias Melcher <github@matthiasm.com> | 2023-01-26 15:23:43 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-01-26 15:23:43 +0100 |
| commit | 179771acd25ee5ff8e36a5fd192682d4d55c52af (patch) | |
| tree | f7d32685bccef27e64a6f706e7c0e0c9d099c372 /fluid/code.h | |
| parent | f314ca75feab8c472a9b136fd25636d2d2da68a7 (diff) | |
Fixing FLUID file corruption from issue #653 (#662)
Removing all globals in file writer (#653 )
Fix some static analyser complaints
Valgrind: handle width==0 in GfxDrivers on Wayland and X11
Don't use `Fl_Input_::static_value`, it accesses previous
buffer that may be deleted
Project file write encapsulated, removing globals
Encapsulating project file reader, removing states in glbals
Project i/o increased source code readability
Diffstat (limited to 'fluid/code.h')
| -rw-r--r-- | fluid/code.h | 69 |
1 files changed, 50 insertions, 19 deletions
diff --git a/fluid/code.h b/fluid/code.h index 5e9a70216..1b596075c 100644 --- a/fluid/code.h +++ b/fluid/code.h @@ -20,28 +20,59 @@ #include <FL/fl_attr.h> #include <stdarg.h> +#include <stdio.h> -extern int indentation; -extern int write_number; -extern int write_sourceview; +class Fl_Type; +struct Fd_Identifier_Tree; +struct Fd_Text_Tree; +struct Fd_Pointer_Tree; int is_id(char c); -const char* unique_id(void* o, const char*, const char*, const char*); -const char *indent(); -const char *indent(int set); -const char *indent_plus(int offset); -int write_declare(const char *, ...) __fl_attr((__format__ (__printf__, 1, 2))); -void write_cstring(const char *,int length); -void write_cstring(const char *); -void write_cdata(const char *,int length); -void vwrite_c(const char* format, va_list args); -void write_c(const char*, ...) __fl_attr((__format__ (__printf__, 1, 2))); -void write_cc(const char *, int, const char*, const char*); -void write_h(const char*, ...) __fl_attr((__format__ (__printf__, 1, 2))); -void write_hc(const char *, int, const char*, const char*); -void write_c_indented(const char *textlines, int inIndent, char inTrailwWith); -int write_code(const char *cfile, const char *hfile); int write_strings(const char *sfile); -void write_public(int state); // writes pubic:/private: as needed + +class Fd_Code_Writer +{ +protected: + FILE *code_file; + FILE *header_file; + Fd_Identifier_Tree* id_root; + Fd_Text_Tree *text_in_header; + Fd_Text_Tree *text_in_code; + Fd_Pointer_Tree *ptr_in_code; + +public: + int indentation; + bool write_sourceview; + // silly thing to prevent declaring unused variables: + // When this symbol is on, all attempts to write code don't write + // anything, but set a variable if it looks like the variable "o" is used: + int varused_test; + int varused; + +public: + Fd_Code_Writer(); + ~Fd_Code_Writer(); + const char* unique_id(void* o, const char*, const char*, const char*); + void indent_more() { indentation++; } + void indent_less() { indentation--; } + const char *indent(); + const char *indent(int set); + const char *indent_plus(int offset); + int write_h_once(const char *, ...) __fl_attr((__format__ (__printf__, 2, 3))); + int write_c_once(const char *, ...) __fl_attr((__format__ (__printf__, 2, 3))); + bool c_contains(void* ptr); + void write_cstring(const char *,int length); + void write_cstring(const char *); + void write_cdata(const char *,int length); + void vwrite_c(const char* format, va_list args); + void write_c(const char*, ...) __fl_attr((__format__ (__printf__, 2, 3))); + void write_cc(const char *, int, const char*, const char*); + void write_h(const char*, ...) __fl_attr((__format__ (__printf__, 2, 3))); + void write_hc(const char *, int, const char*, const char*); + void write_c_indented(const char *textlines, int inIndent, char inTrailwWith); + Fl_Type* write_code(Fl_Type* p); + int write_code(const char *cfile, const char *hfile, bool to_sourceview=false); + void write_public(int state); // writes pubic:/private: as needed +}; #endif // _FLUID_CODE_H |
