5 #include FORMS_H_LOCATION
7 #include "lyx_sendfax.h"
10 #include "filetools.h"
11 #include "lyx_gui_misc.h" // CancelCloseBoxCB
15 // $Id: lyx_sendfax_main.C,v 1.1 1999/09/27 18:44:37 larsbj Exp $
17 #if !defined(lint) && !defined(WITH_WARNINGS)
18 static char vcid[] = "$Id: lyx_sendfax_main.C,v 1.1 1999/09/27 18:44:37 larsbj Exp $";
23 bool sendfax(LString const &fname, LString const &sendcmd);
24 bool button_send(LString const &fname, LString const &sendcmd = LString());
25 void show_logfile(LString logfile, bool show_if_empty);
27 const int LEN_PHONE = 20;
28 const int LEN_NAME = 25;
30 /* Global Variables */
33 LString global_sendcmd;
36 FD_xsendfax *fd_xsendfax;
37 FD_phonebook *fd_phonebook;
38 FD_logfile *fd_logfile;
40 bool send_fax(LString const &fname, LString const &sendcmd)
42 // I put FAXCMD here to see if I can get rid of some strange errors. (Lgb)
43 LString FAXCMD = "sendfax -n -h '$$Host' -c '$$Comment' -x '$$Enterprise' -d '$$Name'@'$$Phone' '$$FName'";
44 LString title = _("Fax File: ");
50 if (path.empty() || path == "./")
51 filename = GetCWD() + "/" + fname;
56 global_sendcmd = FAXCMD;
58 global_sendcmd = sendcmd;
60 fd_xsendfax = create_form_xsendfax();
61 fd_phonebook = create_form_phonebook();
62 fd_logfile = create_form_logfile();
64 // Make sure the close box doesn't kill LyX when being pressed. (RvdK)
65 fl_set_form_atclose(fd_xsendfax->xsendfax, CancelCloseBoxCB, NULL);
66 fl_set_form_atclose(fd_phonebook->phonebook, CancelCloseBoxCB, NULL);
67 fl_set_form_atclose(fd_logfile->logfile, CancelCloseBoxCB, NULL);
70 LString phone_book_name;
71 if (lyxrc->phone_book.empty()) {
72 phone_book_name = "phonebook";
74 phone_book_name = lyxrc->phone_book;
75 phone_book=FileSearch(user_lyxdir,phone_book_name);
76 if (phone_book.empty())
77 phone_book = AddName(user_lyxdir,phone_book_name);
79 fl_set_browser_fontsize(fd_phonebook->browser, FL_NORMAL_SIZE);
80 fl_set_browser_fontstyle(fd_phonebook->browser, FL_FIXED_STYLE);
81 fl_load_browser(fd_phonebook->browser, phone_book.c_str());
83 title += OnlyFilename(fname);
85 /* show the first form */
86 fl_show_form(fd_xsendfax->xsendfax,FL_PLACE_MOUSE,FL_FULLBORDER,title.c_str());
90 if (obj==fd_xsendfax->Button_Cancel)
92 else if (obj==fd_xsendfax->Button_Send) {
93 if (button_send(fname,global_sendcmd))
95 } else if (obj==fd_xsendfax->Button_Apply) {
96 button_send(fname,global_sendcmd);
97 } else if (obj==fd_xsendfax->Button_SPhone) {
98 cb_select_phoneno(NULL,0);
101 fl_hide_form(fd_xsendfax->xsendfax);
107 bool button_send(LString const &fname, LString const &sendcmd)
110 name = fl_get_input(fd_xsendfax->Input_Name),
111 phone = fl_get_input(fd_xsendfax->Input_Phone),
112 enterprise = fl_get_input(fd_xsendfax->Input_Enterprise),
113 comment = fl_get_input(fd_xsendfax->Input_Comment),
114 host = getenv("FAX_SERVER"),
120 logfile = TmpFileName(OnlyPath(fname),"FAX");
121 cmd = sendcmd + " >";
122 cmd += logfile + " 2>";
124 cmd.subst("$$Host",host);
125 cmd.subst("$$Comment",comment);
126 cmd.subst("$$Enterprise",enterprise);
127 cmd.subst("$$Name",name);
128 cmd.subst("$$Phone",phone);
129 cmd.subst("$$FName",fname);
130 lyxerr.print("CMD: "+cmd);
131 Systemcalls one(Systemcalls::System, cmd);
132 show_logfile(logfile,false);
133 remove(logfile.c_str());
138 void cb_hide_form(FL_OBJECT *ob, long)
140 fl_hide_form(ob->form);
144 void cb_select_phoneno(FL_OBJECT *, long)
148 n=fl_get_browser_maxline(fd_phonebook->browser);
152 fl_hide_form(fd_phonebook->phonebook);
153 line = fl_get_browser_line(fd_phonebook->browser, 1);
154 if (!n || strstr(line,_("Empty Phonebook"))) {
155 fl_clear_browser(fd_phonebook->browser);
158 i = fl_get_browser(fd_phonebook->browser);
159 line = fl_get_browser_line(fd_phonebook->browser, i);
162 char *buf = new char [strlen(line)+1];
165 for(i = LEN_PHONE;(i>0) && (buf[i]==' ');i--)
168 for(i = LEN_PHONE+LEN_NAME+1;(i>LEN_PHONE) && (buf[i]==' ');i--)
171 fl_set_input(fd_xsendfax->Input_Phone,buf);
172 fl_set_input(fd_xsendfax->Input_Name,buf+LEN_PHONE+1);
173 fl_set_input(fd_xsendfax->Input_Enterprise,buf+LEN_PHONE+LEN_NAME+2);
178 void cb_add_phoneno(FL_OBJECT *, long )
183 *name = fl_get_input(fd_xsendfax->Input_Name),
184 *phone = fl_get_input(fd_xsendfax->Input_Phone),
185 *enterprise = fl_get_input(fd_xsendfax->Input_Enterprise);
192 char *buf = new char [50+strlen(enterprise)];
194 sprintf(buf,"%-*.*s %-*.*s %s",
195 LEN_PHONE,LEN_PHONE,phone,
196 LEN_NAME,LEN_NAME,name,
198 n = fl_get_browser_maxline(fd_phonebook->browser);
200 line = fl_get_browser_line(fd_phonebook->browser, 1);
201 if (strstr(line,_("Empty Phonebook"))) {
202 fl_clear_browser(fd_phonebook->browser);
206 for(i = 1; i <= n; i++) {
207 line = fl_get_browser_line(fd_phonebook->browser, i);
208 if (!strncmp(buf,line,46))
212 fl_addto_browser(fd_phonebook->browser,buf);
213 fl_set_object_label(fd_xsendfax->pb_save, _("Save (needed)"));
219 void cb_delete_phoneno(FL_OBJECT *, long )
224 *name = fl_get_input(fd_xsendfax->Input_Name),
225 *phone = fl_get_input(fd_xsendfax->Input_Phone),
226 *enterprise = fl_get_input(fd_xsendfax->Input_Enterprise);
232 char *buf = new char [50+strlen(enterprise)];
233 sprintf(buf,"%-*.*s %-*.*s %s",
234 LEN_PHONE,LEN_PHONE,phone,
235 LEN_NAME,LEN_NAME,name,
237 n = fl_get_browser_maxline(fd_phonebook->browser);
239 line = fl_get_browser_line(fd_phonebook->browser, 1);
240 if (strstr(line,_("Empty Phonebook"))) {
241 fl_clear_browser(fd_phonebook->browser);
246 line = fl_get_browser_line(fd_phonebook->browser, i);
247 if (!strncmp(buf,line,46))
251 fl_delete_browser_line(fd_phonebook->browser,i);
252 fl_set_object_label(fd_xsendfax->pb_save, _("Save (needed)"));
258 void cb_save_phoneno(FL_OBJECT *, long )
267 if (!(fp = fopen(phone_book.c_str(),"w"))) {
268 WriteAlert(_("Error!"),_("Cannot open phone book: "),phone_book);
271 n = fl_get_browser_maxline(fd_phonebook->browser);
273 line = fl_get_browser_line(fd_phonebook->browser, 1);
274 if (strstr(line,_("Empty Phonebook"))) {
275 fl_clear_browser(fd_phonebook->browser);
280 line = fl_get_browser_line(fd_phonebook->browser, i);
281 fprintf(fp,"%s\n",line);
284 fl_set_object_label(fd_xsendfax->pb_save, _("Save"));
285 fl_redraw_form(fd_xsendfax->xsendfax);
288 void show_logfile(LString logfile, bool show_if_empty)
292 if (!fl_load_browser(fd_logfile->browser,logfile.c_str())) {
295 fl_add_browser_line(fd_logfile->browser,
296 _("NO OR EMPTY LOGFILE!"));
298 if (fd_logfile->logfile->visible) {
299 fl_raise_form(fd_logfile->logfile);
301 fl_show_form(fd_logfile->logfile,
302 FL_PLACE_MOUSE | FL_FREE_SIZE,FL_FULLBORDER,
303 _("Message-Window"));
307 void FaxLogfileCloseCB(FL_OBJECT *, long)
309 fl_hide_form(fd_logfile->logfile);
312 void FaxCancelCB(FL_OBJECT *, long)
314 fl_hide_form(fd_xsendfax->xsendfax);
317 void FaxApplyCB(FL_OBJECT *, long)
319 button_send(filename,global_sendcmd);
322 void FaxSendCB(FL_OBJECT *, long)
324 if (button_send(filename,global_sendcmd))
328 void FaxOpenPhonebookCB(FL_OBJECT *, long)
331 n=fl_get_browser_maxline(fd_phonebook->browser);
334 fl_addto_browser(fd_phonebook->browser,_("@L@b@cEmpty Phonebook"));
335 fl_show_form(fd_phonebook->phonebook,FL_PLACE_MOUSE,FL_FULLBORDER,