diff options
-rw-r--r-- | src/PSEditModel.H | 6 | ||||
-rw-r--r-- | src/PSEditModel.cxx | 30 | ||||
-rw-r--r-- | src/PSEditor.cxx | 25 | ||||
-rw-r--r-- | src/flpsed.cxx | 87 |
4 files changed, 98 insertions, 50 deletions
diff --git a/src/PSEditModel.H b/src/PSEditModel.H index bfe1b98..f69bf1f 100644 --- a/src/PSEditModel.H +++ b/src/PSEditModel.H @@ -1,5 +1,5 @@ // -// "$Id: PSEditModel.H,v 1.5 2004/10/24 18:28:37 hofmann Exp $" +// "$Id: PSEditModel.H,v 1.6 2004/10/25 20:58:55 hofmann Exp $" // // X11 header file for the Fast Light Tool Kit (FLTK). // @@ -60,7 +60,9 @@ public: int ps_to_display_y(int y1); int ps_x(int x1); int ps_y(int y1); - int PSEditModel::load(char *f); + int PSEditModel::load(char *f); + int save(const char* savefile, int tmp_fd); + }; #endif diff --git a/src/PSEditModel.cxx b/src/PSEditModel.cxx index 75f96ee..b6bcbd2 100644 --- a/src/PSEditModel.cxx +++ b/src/PSEditModel.cxx @@ -1,5 +1,5 @@ // -// "$Id: PSEditModel.cxx,v 1.5 2004/10/24 18:28:37 hofmann Exp $" +// "$Id: PSEditModel.cxx,v 1.6 2004/10/25 20:58:55 hofmann Exp $" // // PSEditWidget routines. // @@ -259,3 +259,31 @@ int PSEditModel::load(char *f) { return tmp_fd; } + + + +int PSEditModel::save(const char* savefile, int tmp_fd) { + off_t pos = lseek(tmp_fd, 0, SEEK_CUR); // save current position + + if (pos == -1) { + perror("lseek"); + return 1; + } + + FILE *fp = fdopen(tmp_fd, "r"); + + rewind(fp); + FILE *sfp = fopen(savefile, "w"); + PSWriter *pw; + + pw = new PSLevel1Writer(this); + + pw->write(fp, sfp); + + delete(pw); + + fclose(sfp); + lseek(tmp_fd, pos, SEEK_SET); // restore current position + + return 0; +} diff --git a/src/PSEditor.cxx b/src/PSEditor.cxx index bc4541e..590a46f 100644 --- a/src/PSEditor.cxx +++ b/src/PSEditor.cxx @@ -1,5 +1,5 @@ // -// "$Id: PSEditor.cxx,v 1.15 2004/10/24 18:28:37 hofmann Exp $" +// "$Id: PSEditor.cxx,v 1.16 2004/10/25 20:58:55 hofmann Exp $" // // PSEditor routines. // @@ -32,6 +32,7 @@ PSEditor::PSEditor(int X,int Y,int W, int H) : PSEditWidget(X, Y, W, H) { ps_level = 1; } + int PSEditor::handle(int event) { int mark_x, mark_y; @@ -118,10 +119,10 @@ int PSEditor::handle(int event) { int PSEditor::load(char *f) { if (tmp_fd) { close(tmp_fd); - tmp_fd = -1; } tmp_fd = model->load(f); + if (tmp_fd < 0) { return 1; } else { @@ -132,28 +133,14 @@ int PSEditor::load(char *f) { } int PSEditor::save(const char* savefile) { - off_t pos = lseek(tmp_fd, 0, SEEK_CUR); // save current position - if (!file_loaded()) { return 1; } - FILE *fp = fdopen(tmp_fd, "r"); - rewind(fp); - FILE *sfp = fopen(savefile, "w"); - PSWriter *pw; - if (ps_level == 2) { - pw = new PSLevel2Writer(model); - } else { - pw = new PSLevel1Writer(model); + if (model->save(savefile, tmp_fd) != 0) { + return 1; } - - pw->write(fp, sfp); - - delete(pw); - - fclose(sfp); - lseek(tmp_fd, pos, SEEK_SET); // restore current position + mod = 0; return 0; } diff --git a/src/flpsed.cxx b/src/flpsed.cxx index 0b4d0c4..333f85c 100644 --- a/src/flpsed.cxx +++ b/src/flpsed.cxx @@ -1,5 +1,5 @@ // -// "$Id: flpsed.cxx,v 1.18 2004/10/21 21:02:05 hofmann Exp $" +// "$Id: flpsed.cxx,v 1.19 2004/10/25 20:58:55 hofmann Exp $" // // flpsed program. // @@ -201,36 +201,23 @@ Fl_Menu_Item menuitems[] = { { 0 } }; +#define TV_LEN 256 + int main(int argc, char** argv) { char c, *sep, *tmp; - int err; + int err, batch = 0; Fl_Window *win; Fl_Menu_Bar* m; Fl_Scroll *scroll; - - win = new Fl_Window(600,700); - m = new Fl_Menu_Bar(0, 0, 600, 30); - m->menu(menuitems); - scroll = new Fl_Scroll(0, 30, win->w(), win->h()-30); - gsw_p = new PSEditor(0, 0, 700, 900); - scroll->end(); - - fl_open_display(); - Fl::add_handler(xev_handler); - - win->resizable(scroll); - - win->end(); - win->callback((Fl_Callback *)quit_cb); - win->show(1, argv); - - if (argc > 1) { - gsw_p->load(argv[argc - 1]); - } + struct {char *tag; char *value;} tv[TV_LEN]; + int tv_idx = 0; err = 0; - while ((c = getopt(argc, argv, "t:")) != EOF) { - switch (c) { + while ((c = getopt(argc, argv, "bt:")) != EOF) { + switch (c) { + case 'b': + batch = 1; + break; case 't': tmp = strdup(optarg); if (!tmp) { @@ -244,7 +231,15 @@ int main(int argc, char** argv) { continue; } *sep = '\0'; - gsw_p->replace_tag(tmp, sep+1); + + if (tv_idx >= TV_LEN) { + fprintf(stderr, "More than %d tag/value pairs; ignoring %s->%s\n", + TV_LEN, tmp, sep+1); + } else { + tv[tv_idx].tag = strdup(tmp); + tv[tv_idx].value = strdup(sep+1); + tv_idx++; + } free(tmp); break; default: @@ -256,10 +251,46 @@ int main(int argc, char** argv) { exit(1); } + // argc -= optind; + // argv += optind; + if (batch) { + PSEditModel *m = new PSEditModel(594, 841, 75.0, 75.0); + int tmp_fd = m->load(argv[argc - 2]); + if (tmp_fd == -1) { + fprintf(stderr, "Could not load %s\n", argv[argc - 2]); + exit(1); + } + + for(int i=0; i<tv_idx; i++) { + m->replace_tag(tv[i].tag, tv[i].value); + free(tv[i].tag); + free(tv[i].value); + } + + m->save(argv[argc - 1], tmp_fd); + + exit(0); + } + + + + + win = new Fl_Window(600,700); + m = new Fl_Menu_Bar(0, 0, 600, 30); + m->menu(menuitems); + scroll = new Fl_Scroll(0, 30, win->w(), win->h()-30); + gsw_p = new PSEditor(0, 0, 700, 900); + scroll->end(); + + fl_open_display(); + Fl::add_handler(xev_handler); + + win->resizable(scroll); + + win->end(); + win->callback((Fl_Callback *)quit_cb); + win->show(1, argv); - argc -= optind; - argv += optind; - return Fl::run(); } |