diff --git a/documentation/src/fluid.dox b/documentation/src/fluid.dox index 35417eba4..a552769a2 100644 --- a/documentation/src/fluid.dox +++ b/documentation/src/fluid.dox @@ -123,7 +123,8 @@ file from a .fl file. To do this type: fluid -c filename.fl \endcode -This will read the filename.fl file and write +This is the same as the menu 'File/Write Code...'. +It will read the filename.fl file and write filename.cxx and filename.h. Any leading directory on filename.fl will be stripped, so they are always written to the current directory. If there are any errors @@ -146,6 +147,32 @@ files to be compiled: fluid -c $< \endcode +If you use + +\code +fluid -cs filename.fl +\endcode + +FLUID will also write the "strings" for internationalization in file +'filename.txt' (menu: 'File/Write Strings...'). + +Finally there is another option which is useful for program developers +who have many .fl files and want to upgrade them to the current FLUID +version. FLUID will read the \p filename.fl file, save it, and exit +immediately. This writes the file with current syntax and options and +the current FLTK version in the header of the file. Use + +\code +fluid -u filename.fl +\endcode + +to 'upgrade' \p filename.fl . You may combine this with '-c' or '-cs'. + +\note All these commands overwrite existing files w/o warning. You should +paticularly take care when running 'fluid -u' since this overwrites the +original .fl source file. + + \section fluid_tutorial A Short Tutorial FLUID is an amazingly powerful little program. However, this diff --git a/fluid/Fl_Function_Type.cxx b/fluid/Fl_Function_Type.cxx index a6991a6f8..5ca6c192c 100644 --- a/fluid/Fl_Function_Type.cxx +++ b/fluid/Fl_Function_Type.cxx @@ -33,7 +33,7 @@ extern const char* i18n_file; extern const char* i18n_set; extern char i18n_program[]; -extern int compile_only; +extern int batch_mode; extern void redraw_browser(); extern void goto_source_dir(); @@ -920,9 +920,9 @@ void Fl_Data_Type::write_code1() { } } // if we are in interactive mode, we pop up a warning dialog - // giving the error: (compile_only && !write_sourceview) + // giving the error: (batch_mode && !write_sourceview) ??? if (message && !write_sourceview) { - if (compile_only) + if (batch_mode) fprintf(stderr, "FLUID ERROR: %s %s\n", message, fn); else fl_alert("%s\n%s\n", message, fn); diff --git a/fluid/factory.cxx b/fluid/factory.cxx index a3503abef..a39e6448e 100644 --- a/fluid/factory.cxx +++ b/fluid/factory.cxx @@ -167,7 +167,7 @@ static Fl_Round_Button_Type Fl_Round_Button_type; //////////////////////////////////////////////////////////////// -extern int compile_only; +extern int batch_mode; #include #include @@ -201,7 +201,7 @@ public: Fl_Browser* b = new Fl_Browser(x,y,w,h); // Fl_Browser::add calls fl_height(), which requires the X display open. // Avoid this when compiling so it works w/o a display: - if (!compile_only) { + if (!batch_mode) { char buffer[20]; for (int i = 1; i <= 20; i++) { sprintf(buffer,"Browser Line %d",i); @@ -249,7 +249,7 @@ public: Fl_Check_Browser* b = new Fl_Check_Browser(x,y,w,h); // Fl_Check_Browser::add calls fl_height(), which requires the X display open. // Avoid this when compiling so it works w/o a display: - if (!compile_only) { + if (!batch_mode) { char buffer[20]; for (int i = 1; i <= 20; i++) { sprintf(buffer,"Browser Line %d",i); @@ -285,7 +285,7 @@ public: virtual const char *alt_type_name() {return "fltk::TreeBrowser";} Fl_Widget *widget(int x,int y,int w,int h) { Fl_Tree* b = new Fl_Tree(x,y,w,h); - if (!compile_only) { + if (!batch_mode) { b->add("/A1/B1/C1"); b->add("/A1/B1/C2"); b->add("/A1/B2/C1"); @@ -324,7 +324,7 @@ public: Fl_File_Browser* b = new Fl_File_Browser(x,y,w,h); // Fl_File_Browser::add calls fl_height(), which requires the X display open. // Avoid this when compiling so it works w/o a display: - if (!compile_only) { + if (!batch_mode) { b->load("."); } return b; @@ -640,7 +640,7 @@ public: virtual const char *alt_type_name() {return "fltk::HelpView";} Fl_Widget *widget(int x,int y,int w,int h) { Fl_Help_View *myo = new Fl_Help_View(x,y,w,h); - if (!compile_only) { + if (!batch_mode) { myo->value("

Fl_Help_View Widget

" "

This is a Fl_Help_View widget.

"); } diff --git a/fluid/fluid.cxx b/fluid/fluid.cxx index d0f1adc33..f6b1b43e0 100644 --- a/fluid/fluid.cxx +++ b/fluid/fluid.cxx @@ -634,8 +634,10 @@ void new_cb(Fl_Widget *, void *v) { } int exit_early = 0; -int compile_only = 0; -int compile_strings = 0; +int update_file = 0; // fluid -u +int compile_file = 0; // fluid -c +int compile_strings = 0; // fluic -cs +int batch_mode = 0; // if set (-c, -u) don't open display int header_file_set = 0; int code_file_set = 0; const char* header_file_name = ".h"; @@ -668,12 +670,12 @@ void write_cb(Fl_Widget *, void *) { } else { strlcpy(hname, header_file_name, sizeof(hname)); } - if (!compile_only) goto_source_dir(); + if (!batch_mode) goto_source_dir(); int x = write_code(cname,hname); - if (!compile_only) leave_source_dir(); + if (!batch_mode) leave_source_dir(); strlcat(cname, " and ", sizeof(cname)); strlcat(cname, hname, sizeof(cname)); - if (compile_only) { + if (batch_mode) { if (!x) {fprintf(stderr,"%s : %s\n",cname,strerror(errno)); exit(1);} } else { if (!x) { @@ -693,10 +695,10 @@ void write_strings_cb(Fl_Widget *, void *) { char sname[FL_PATH_MAX]; strlcpy(sname, fl_filename_name(filename), sizeof(sname)); fl_filename_setext(sname, sizeof(sname), exts[i18n_type]); - if (!compile_only) goto_source_dir(); + if (!batch_mode) goto_source_dir(); int x = write_strings(sname); - if (!compile_only) leave_source_dir(); - if (compile_only) { + if (!batch_mode) leave_source_dir(); + if (batch_mode) { if (x) {fprintf(stderr,"%s : %s\n",sname,strerror(errno)); exit(1);} } else { if (x) { @@ -1097,7 +1099,7 @@ Fl_Menu_Item Main_Menu[] = { extern void fill_in_New_Menu(); void scheme_cb(Fl_Choice *, void *) { - if (compile_only) + if (batch_mode) return; switch (scheme_choice->value()) { @@ -1169,7 +1171,7 @@ void toggle_sourceview_b_cb(Fl_Button*, void *) { } void make_main_window() { - if (!compile_only) { + if (!batch_mode) { fluid_prefs.get("snap", snap, 1); fluid_prefs.get("gridx", gridx, 5); fluid_prefs.get("gridy", gridy, 5); @@ -1200,7 +1202,7 @@ void make_main_window() { main_window->end(); } - if (!compile_only) { + if (!batch_mode) { load_history(); make_settings_window(); make_global_settings_window(); @@ -1420,14 +1422,14 @@ static bool prepare_shell_command(const char * &command) { // common pre-shell save_cb(0, 0); } if (shell_writecode_button->value()) { - compile_only = 1; + batch_mode = 1; write_cb(0, 0); - compile_only = 0; + batch_mode = 0; } if (shell_writemsgs_button->value()) { - compile_only = 1; + batch_mode = 1; write_strings_cb(0, 0); - compile_only = 0; + batch_mode = 0; } return true; } @@ -1510,7 +1512,7 @@ void set_filename(const char *c) { if (filename) free((void *)filename); filename = c ? strdup(c) : NULL; - if (filename && !compile_only) + if (filename && !batch_mode) update_history(filename); set_modflag(modflag); @@ -1647,7 +1649,7 @@ void set_modflag(int mf) { // if the UI was modified in any way, update the Source View panel if (sourceview_panel && sourceview_panel->visible() && sv_autorefresh->value()) { - // we will only update ealiest 0.5 seconds after the last change, and only + // we will only update earliest 0.5 seconds after the last change, and only // if no other change was made, so dragging a widget will not generate any // CPU load Fl::remove_timeout(update_sourceview_timer, 0); @@ -1662,8 +1664,9 @@ void set_modflag(int mf) { //////////////////////////////////////////////////////////////// static int arg(int argc, char** argv, int& i) { - if (argv[i][1] == 'c' && !argv[i][2]) {compile_only = 1; i++; return 1;} - if (argv[i][1] == 'c' && argv[i][2] == 's' && !argv[i][3]) {compile_only = 1; compile_strings = 1; i++; return 1;} + if (argv[i][1] == 'u' && !argv[i][2]) {update_file++; batch_mode++; i++; return 1;} + if (argv[i][1] == 'c' && !argv[i][2]) {compile_file++; batch_mode++; i++; return 1;} + if (argv[i][1] == 'c' && argv[i][2] == 's' && !argv[i][3]) {compile_file++; compile_strings++; batch_mode++; i++; return 1;} if (argv[i][1] == 'o' && !argv[i][2] && i+1 < argc) { code_file_name = argv[i+1]; code_file_set = 1; @@ -1715,6 +1718,7 @@ int main(int argc,char **argv) { if (!Fl::args(argc,argv,i,arg) || i < argc-1) { static const char *msg = "usage: %s name.fl\n" + " -u : update .fl file and exit (may be combined with '-c' or '-cs')\n" " -c : write .cxx and .h and exit\n" " -cs : write .cxx and .h and strings and exit\n" " -o : .cxx output filename, or extension if starts with '.'\n" @@ -1752,7 +1756,7 @@ int main(int argc,char **argv) { if (c) set_filename(c); - if (!compile_only) { + if (!batch_mode) { #ifdef __APPLE__ fl_open_callback(apple_open_cb); #endif // __APPLE__ @@ -1770,15 +1774,23 @@ int main(int argc,char **argv) { } undo_suspend(); if (c && !read_file(c,0)) { - if (compile_only) { + if (batch_mode) { fprintf(stderr,"%s : %s\n", c, strerror(errno)); exit(1); } fl_message("Can't read %s: %s", c, strerror(errno)); } undo_resume(); - if (compile_only) { - if (compile_strings) write_strings_cb(0,0); + + if (update_file) { // fluid -u + write_file(c,0); + if (!compile_file) + exit(0); + } + + if (compile_file) { // fluid -c[s] + if (compile_strings) + write_strings_cb(0,0); write_cb(0,0); exit(0); }