Add 'fluid -u' command-line switch to upgrade fluid files in batch mode.

This option opens a fluid ('.fl') file and saves it overwriting the old
file with the current syntax and library version number.


git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3@10611 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
This commit is contained in:
Albrecht Schlosser 2015-03-09 20:37:45 +00:00
parent c9ff10d8f9
commit c96c4c35b0
4 changed files with 72 additions and 33 deletions

View File

@ -123,7 +123,8 @@ file from a <tt>.fl</tt> file. To do this type:
fluid -c filename.fl
\endcode
This will read the <tt>filename.fl</tt> file and write
This is the same as the menu 'File/Write Code...'.
It will read the <tt>filename.fl</tt> file and write
<tt>filename.cxx</tt> and <tt>filename.h</tt>. Any leading
directory on <tt>filename.fl</tt> 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

View File

@ -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);

View File

@ -167,7 +167,7 @@ static Fl_Round_Button_Type Fl_Round_Button_type;
////////////////////////////////////////////////////////////////
extern int compile_only;
extern int batch_mode;
#include <FL/Fl_Browser.H>
#include <FL/Fl_Check_Browser.H>
@ -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("<HTML><BODY><H1>Fl_Help_View Widget</H1>"
"<P>This is a Fl_Help_View widget.</P></BODY></HTML>");
}

View File

@ -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 <switches> 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 <name> : .cxx output filename, or extension if <name> 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);
}