1 /*
2  *  Copyright 2000-2001: Sergio Rua
3  *  Copyright 2008 Joop Stakenborg <pg4i@amsat.org>
4  *  Copyright 2008 Anibal Avelar <aavelar@cofradia.org>
5  *
6  *  This program is free software; you can redistribute it and/or modify
7  *  it under the terms of the GNU General Public License as published by
8  *  the Free Software Foundation; either version 2 of the License, or
9  *  (at your option) any later version.
10  *
11  *  This program is distributed in the hope that it will be useful,
12  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  *  GNU Library General Public License for more details.
15  *
16  *  You should have received a copy of the GNU Library General Public License
17  *  along with this program; if not, write to the Free Software Foundation,
18  *  Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1307, USA.
19  */
20 
21 #include <stdio.h>
22 #include <errno.h>
23 #include <string.h>
24 #include <unistd.h>
25 #include <stdlib.h>
26 #include <time.h>
27 #include <zlib.h>
28 #include <sys/types.h>
29 #include <signal.h>
30 #include <unistd.h>
31 #include <sys/wait.h>
32 
33 #include <gtk/gtk.h>
34 
35 #include "callbacks.h"
36 #include "interface.h"
37 #include "support.h"
38 
39 #define BUFFER_SIZE 131072
40 
41 extern GtkWidget *wprincipal;
42 GtkWidget *open_file=NULL;
43 GtkWidget *save_file=NULL;
44 GtkWidget *buscar=NULL;
45 GtkWidget *about=NULL;
46 GtkWidget *exit_dialog=NULL;
47 GtkWidget *prefs=NULL;
48 GtkWidget *wizard=NULL;
49 
50 gchar *filename=NULL;
51 gint in_gzip=0;
52 
53 /* Funciones */
54 static void save_as(gchar *name);
55 static void mensaje (gchar *msg,gint tipo);
56 static gchar *ReadConfFromFile(gchar *variable);
57 static void insert_label(const gchar *base,const gchar *text_info);
58 static void help_without_gnome(GtkWidget *wid);
59 static void open_man_file(gchar *manfile);
60 
61 
62 /* Eventos */
63 void
on_wprincipal_delete(GtkObject * object,gpointer user_data)64 on_wprincipal_delete                  (GtkObject       *object,
65                                         gpointer         user_data)
66 {
67 	if (exit_dialog==NULL)
68 		exit_dialog=create_exit_dialog();
69 
70 	gtk_widget_show(exit_dialog);
71 }
72 
73 void
on_cortar1_activate(GtkMenuItem * menuitem,gpointer user_data)74 on_cortar1_activate                    (GtkMenuItem     *menuitem,
75                                         gpointer         user_data)
76 {
77 	GtkWidget *text,*statusbar;
78 
79 	text = lookup_widget (GTK_WIDGET (wprincipal), "text");
80 	GtkTextBuffer *b = gtk_text_view_get_buffer (GTK_TEXT_VIEW(text));
81 	gtk_text_buffer_cut_clipboard (b, gtk_clipboard_get(GDK_SELECTION_CLIPBOARD), TRUE);
82 	statusbar = lookup_widget (GTK_WIDGET (wprincipal), "statusbar1");
83 	gtk_statusbar_pop (GTK_STATUSBAR (statusbar), 1);
84 	gtk_statusbar_push (GTK_STATUSBAR (statusbar), 1, _("Text cut."));
85 }
86 
87 
88 void
on_copiar1_activate(GtkMenuItem * menuitem,gpointer user_data)89 on_copiar1_activate                    (GtkMenuItem     *menuitem,
90                                         gpointer         user_data)
91 {
92 	GtkWidget *text,*statusbar;
93 
94 	text = lookup_widget (GTK_WIDGET (wprincipal), "text");
95 	GtkTextBuffer *b = gtk_text_view_get_buffer (GTK_TEXT_VIEW(text));
96 	gtk_text_buffer_copy_clipboard (b,  gtk_clipboard_get(GDK_SELECTION_CLIPBOARD));
97 	statusbar = lookup_widget (GTK_WIDGET (wprincipal), "statusbar1");
98 	gtk_statusbar_pop (GTK_STATUSBAR (statusbar), 1);
99 	gtk_statusbar_push (GTK_STATUSBAR (statusbar), 1, _("Text copied."));
100 
101 }
102 
103 
104 void
on_pegar1_activate(GtkMenuItem * menuitem,gpointer user_data)105 on_pegar1_activate                     (GtkMenuItem     *menuitem,
106                                         gpointer         user_data)
107 {
108 	GtkWidget *text,*statusbar;
109 
110 	text = lookup_widget (GTK_WIDGET (wprincipal), "text");
111 	GtkTextBuffer *b = gtk_text_view_get_buffer (GTK_TEXT_VIEW(text));
112 	gtk_text_buffer_paste_clipboard (b, gtk_clipboard_get(GDK_SELECTION_CLIPBOARD), NULL, TRUE);
113 
114 	statusbar = lookup_widget (GTK_WIDGET (wprincipal), "statusbar1");
115 	gtk_statusbar_pop (GTK_STATUSBAR (statusbar), 1);
116 	gtk_statusbar_push (GTK_STATUSBAR (statusbar), 1, _("Text pasted."));
117 }
118 
119 
120 void
on_pagina_base1_activate(GtkMenuItem * menuitem,gpointer user_data)121 on_pagina_base1_activate               (GtkMenuItem     *menuitem,
122                                         gpointer         user_data)
123 {
124     const gchar *base=_(
125     ".\\\"Created with GNOME Manpages Editor\n"
126 	".\\\"http://sourceforge.net/projects/gmanedit2\n\n"
127 	".\\\"Replace <program> with the program name, x with the Section Number\n"
128 	".TH <program> x \"<date>\" \"\" \"Linux User\'s Manual\"\n\n"
129 	".SH NAME\n<program> \\- program for...\n\n."
130 	".SH SYNOPSIS\n.B <program>\n.RI [ options ]\n.br\n\n"
131 	".SH DESCRIPTION\nThis manual page explains the \\fB<program>\\fP program."
132 	" The \\fB<program>\\fP program is for...\n\n"
133 	".SH OPTIONS\n.IP \\fB\\-OPTION\\fP\nThis option...\n\n"
134 	".SH NOTES\n\n"
135 	".SH \"SEE ALSO\"\n");
136 
137 	insert_label(base,"Page created.");
138 }
139 
140 
141 void
on_novo1_activate(GtkMenuItem * menuitem,gpointer user_data)142 on_novo1_activate                      (GtkMenuItem     *menuitem,
143                                         gpointer         user_data)
144 {
145 	GtkWidget *text,*statusbar;
146 
147 	text=lookup_widget(GTK_WIDGET(wprincipal),"text");
148 	GtkTextBuffer *b = gtk_text_view_get_buffer (GTK_TEXT_VIEW(text));
149 	gtk_text_buffer_set_text (b, "", -1);
150 	statusbar = lookup_widget(GTK_WIDGET(wprincipal),"statusbar1");
151 	gtk_statusbar_pop (GTK_STATUSBAR (statusbar), 1);
152 	gtk_statusbar_push (GTK_STATUSBAR (statusbar), 1, _("New file."));
153 	in_gzip=0;
154 }
155 
156 
157 void
on_abrir1_activate(GtkMenuItem * menuitem,gpointer user_data)158 on_abrir1_activate                     (GtkMenuItem     *menuitem,
159                                         gpointer         user_data)
160 {
161 	const gchar *temp;
162 
163 	open_file = create_fileselection (GTK_WIDGET(wprincipal));
164 	gtk_widget_show (open_file);
165 	if (gtk_dialog_run (GTK_DIALOG (open_file)) == GTK_RESPONSE_ACCEPT)
166 	{
167 		temp = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (open_file));
168 		filename = g_strdup(temp);
169 		gtk_widget_hide(open_file);
170 		open_man_file(filename);
171 	}
172 	else
173 		gtk_widget_destroy (open_file);
174 }
175 
176 
177 void
on_gardar1_activate(GtkMenuItem * menuitem,gpointer user_data)178 on_gardar1_activate                    (GtkMenuItem     *menuitem,
179                                         gpointer         user_data)
180 {
181         const gchar *temp;
182 	if (filename!=NULL)
183 		save_as(filename);
184 	else
185 	{
186 		save_file=create_save_file(GTK_WIDGET(wprincipal));
187 		gtk_widget_show(save_file);
188                 if (gtk_dialog_run (GTK_DIALOG (save_file)) == GTK_RESPONSE_ACCEPT)
189                 {
190                  temp = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (save_file));
191                  filename = g_strdup(temp);
192                  gtk_widget_hide(save_file);
193                  save_as(filename);
194                 }else{
195                  gtk_widget_destroy (save_file);
196                 }
197 	}
198 }
199 
200 
201 void
on_gardar_como1_activate(GtkMenuItem * menuitem,gpointer user_data)202 on_gardar_como1_activate               (GtkMenuItem     *menuitem,
203                                         gpointer         user_data)
204 {
205         const gchar *temp;
206 	save_file=create_save_file(GTK_WIDGET(wprincipal));
207         gtk_widget_show(save_file);
208         if (gtk_dialog_run (GTK_DIALOG (save_file)) == GTK_RESPONSE_ACCEPT)
209                 {
210                  temp = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (save_file));
211                  filename = g_strdup(temp);
212                  gtk_widget_hide(save_file);
213                  save_as(filename);
214         }else{
215                  gtk_widget_destroy (save_file);
216         }
217 }
218 
219 
220 void
on_sair4_activate(GtkMenuItem * menuitem,gpointer user_data)221 on_sair4_activate                      (GtkMenuItem     *menuitem,
222                                         gpointer         user_data)
223 {
224 	if (exit_dialog==NULL)
225 		exit_dialog=create_exit_dialog();
226 
227 	gtk_widget_show(exit_dialog);
228 }
229 
save_as(gchar * name)230 static void save_as(gchar *name)
231 {
232 	GtkWidget *text,*statusbar;
233 	FILE *f;
234 	gchar *datos;
235 	gint bytes_written;
236 	char extension[5];
237 	int n;
238 
239 /* Esta comprabaci�n se hace para permitir guardar un fichero comprimido */
240 /* sin comprimir */
241 	n = strlen(name)-3;
242         strncpy(extension,name+n,3);
243         if (!strncmp(extension,".gz",3))
244             in_gzip=1;
245         else
246             in_gzip=0;
247 
248 	text=lookup_widget(GTK_WIDGET(wprincipal),"text");
249 
250 /* Barra de estado */
251 	statusbar=lookup_widget(GTK_WIDGET(wprincipal),"statusbar1");
252 	gtk_statusbar_pop(GTK_STATUSBAR(statusbar),1);
253 
254 	GtkTextBuffer *b = gtk_text_view_get_buffer (GTK_TEXT_VIEW(text));
255 	GtkTextIter startiter, enditer;
256 	gtk_text_buffer_get_start_iter (b, &startiter);
257 	gtk_text_buffer_get_end_iter (b, &enditer);
258 	datos=gtk_text_buffer_get_text (b, &startiter, &enditer, FALSE);
259 
260 	if (in_gzip)
261 		f=gzopen(name,"wb");
262 	else
263 		f=fopen(name,"w");
264 
265 	if ((f!=NULL) && (f!=Z_NULL))
266 	{
267 	  if (!in_gzip)
268 		bytes_written=fwrite(datos,sizeof(gchar),strlen(datos),f);
269 	  else
270 	  	bytes_written=gzwrite(f,datos,strlen(datos));
271   	  gtk_statusbar_push(GTK_STATUSBAR(statusbar),1,_("File saved."));
272 	}
273 	else
274 	{
275   	  gtk_statusbar_push(GTK_STATUSBAR(statusbar),1,_("File NOT saved."));
276   	  mensaje(strerror(errno),GTK_MESSAGE_ERROR);
277 	}
278 	if (in_gzip)
279 	    gzclose(f);
280         else
281 	    fclose(f);
282 }
283 
284 void
on_titulo_activate(GtkMenuItem * menuitem,gpointer user_data)285 on_titulo_activate                     (GtkMenuItem     *menuitem,
286                                         gpointer         user_data)
287 {
288 	const gchar *base=_(".TH <program> <section number> \"<date>\" \"\" \"Linux User\'s Manual\"\n\n");
289 
290 	insert_label(base,"Title written.");
291 }
292 
293 
294 void
on_nome1_activate(GtkMenuItem * menuitem,gpointer user_data)295 on_nome1_activate                      (GtkMenuItem     *menuitem,
296                                         gpointer         user_data)
297 {
298 	const gchar *base=_(".SH NAME\n<program> \\- program for... \n");
299 
300         insert_label(base,"Section name written.");
301 }
302 
303 
304 void
on_sinopsis1_activate(GtkMenuItem * menuitem,gpointer user_data)305 on_sinopsis1_activate                  (GtkMenuItem     *menuitem,
306                                         gpointer         user_data)
307 {
308 	const gchar *base=_(".SH SYNOPSIS\n");
309 
310  	insert_label(base,"Section synopsis written.");
311 }
312 
313 
314 void
on_configuration_activate(GtkMenuItem * menuitem,gpointer user_data)315 on_configuration_activate                  (GtkMenuItem     *menuitem,
316                                         gpointer         user_data)
317 {
318 	const gchar *base=_(".SH CONFIGURATION\n");
319 
320  	insert_label(base,"Section configuration written.");
321 }
322 
323 void
on_descripcion1_activate(GtkMenuItem * menuitem,gpointer user_data)324 on_descripcion1_activate               (GtkMenuItem     *menuitem,
325                                         gpointer         user_data)
326 {
327 	const gchar *base=_(".SH DESCRIPTION\n");
328 
329 	insert_label(base,"Section description written.");
330 }
331 
332 
333 void
on_opcions1_activate(GtkMenuItem * menuitem,gpointer user_data)334 on_opcions1_activate                   (GtkMenuItem     *menuitem,
335                                         gpointer         user_data)
336 {
337 	const gchar *base=_(".SH OPTIONS\n");
338 
339  	insert_label(base,"Section options written.");
340 }
341 
342 
343 void
on_valores_retornados1_activate(GtkMenuItem * menuitem,gpointer user_data)344 on_valores_retornados1_activate        (GtkMenuItem     *menuitem,
345                                         gpointer         user_data)
346 {
347 	const gchar *base=_(".SH \"RETURN VALUE\"\n");
348 
349  	insert_label(base,"Section return value written.");
350 }
351 
352 
353 void
on_estados_de_saida1_activate(GtkMenuItem * menuitem,gpointer user_data)354 on_estados_de_saida1_activate          (GtkMenuItem     *menuitem,
355                                         gpointer         user_data)
356 {
357 	const gchar *base=_(".SH \"EXIT STATUS\"\n");
358  	insert_label(base,"Section exit status written.");
359 }
360 
361 
362 void
on_errors_activate(GtkMenuItem * menuitem,gpointer user_data)363 on_errors_activate                       (GtkMenuItem     *menuitem,
364                                         gpointer         user_data)
365 {
366 	const gchar *base=_(".SH ERRORS\n");
367 
368  	insert_label(base,"Section errors written.");
369 }
370 
371 
372 void
on_ficheiro1_activate(GtkMenuItem * menuitem,gpointer user_data)373 on_ficheiro1_activate                  (GtkMenuItem     *menuitem,
374                                         gpointer         user_data)
375 {
376 	const gchar *base=_(".SH FILES\n");
377  	insert_label(base,"Section files written.");
378 }
379 
380 
381 void
on_entorno1_activate(GtkMenuItem * menuitem,gpointer user_data)382 on_entorno1_activate                   (GtkMenuItem     *menuitem,
383                                         gpointer         user_data)
384 {
385 	const gchar *base=_(".SH ENVIRONMENT\n");
386  	insert_label(base,"Section environment written.");
387 }
388 
389 
390 void
on_versions_activate(GtkMenuItem * menuitem,gpointer user_data)391 on_versions_activate               (GtkMenuItem     *menuitem,
392                                         gpointer         user_data)
393 {
394 	const gchar *base=_(".SH VERSIONS\n");
395  	insert_label(base,"Section versions written.");
396 }
397 
398 
399 void
on_notas1_activate(GtkMenuItem * menuitem,gpointer user_data)400 on_notas1_activate                     (GtkMenuItem     *menuitem,
401                                         gpointer         user_data)
402 {
403 	const gchar *base=_(".SH NOTES\n");
404  	insert_label(base,"Section notes written.");
405 }
406 
407 
408 void
on_bugs1_activate(GtkMenuItem * menuitem,gpointer user_data)409 on_bugs1_activate                      (GtkMenuItem     *menuitem,
410                                         gpointer         user_data)
411 {
412 	const gchar *base=_(".SH BUGS\n");
413  	insert_label(base,"Section bugs written.");
414 }
415 
416 
417 void
on_exemplos1_activate(GtkMenuItem * menuitem,gpointer user_data)418 on_exemplos1_activate                  (GtkMenuItem     *menuitem,
419                                         gpointer         user_data)
420 {
421 	const gchar *base=_(".SH EXAMPLE\n");
422 
423  	insert_label(base,"Section examples written.");
424 }
425 
426 
427 void
on_ver_tamen1_activate(GtkMenuItem * menuitem,gpointer user_data)428 on_ver_tamen1_activate                 (GtkMenuItem     *menuitem,
429                                         gpointer         user_data)
430 {
431 	const gchar *base=_(".SH \"SEE ALSO\"\n");
432  	insert_label(base,"Section see also written.");
433 }
434 
435 
436 void
on_conforme_a1_activate(GtkMenuItem * menuitem,gpointer user_data)437 on_conforme_a1_activate                (GtkMenuItem     *menuitem,
438                                         gpointer         user_data)
439 {
440 	const gchar *base=_(".SH \"CONFORMING TO\"\n");
441  	insert_label(base,"Section conforming to written.");
442 }
443 
444 
445 void
on__1_activate(GtkMenuItem * menuitem,gpointer user_data)446 on__1_activate                         (GtkMenuItem     *menuitem,
447                                         gpointer         user_data)
448 {
449 
450 }
451 
452 
453 void
on_otro1_activate(GtkMenuItem * menuitem,gpointer user_data)454 on_otro1_activate                      (GtkMenuItem     *menuitem,
455                                         gpointer         user_data)
456 {
457 	const gchar *base=_(".SH \"<SECTION NAME>\"\n");
458  	insert_label(base,"Section other written.");
459 }
460 
461 
462 void
on_ambas1_activate(GtkMenuItem * menuitem,gpointer user_data)463 on_ambas1_activate                     (GtkMenuItem     *menuitem,
464                                         gpointer         user_data)
465 {
466 	const gchar *base=".AD B\n";
467  	insert_label(base,"Right and left justify.");
468 }
469 
470 
471 void
on_activar1_activate(GtkMenuItem * menuitem,gpointer user_data)472 on_activar1_activate                   (GtkMenuItem     *menuitem,
473                                         gpointer         user_data)
474 {
475 	const gchar *base=".FI\n";
476  	insert_label(base,"Filling enabled.");
477 }
478 
479 
480 void
on_desactivar1_activate(GtkMenuItem * menuitem,gpointer user_data)481 on_desactivar1_activate                (GtkMenuItem     *menuitem,
482                                         gpointer         user_data)
483 {
484 	const gchar *base=".NF\n";
485  	insert_label(base,"Filling disabled.");
486 }
487 
488 
489 void
on_bold1_activate(GtkMenuItem * menuitem,gpointer user_data)490 on_bold1_activate                      (GtkMenuItem     *menuitem,
491                                         gpointer         user_data)
492 {
493 	const gchar *base=".B\n";
494  	insert_label(base,"Font Bold selected.");
495 }
496 
497 
498 void
on_bold_roman1_activate(GtkMenuItem * menuitem,gpointer user_data)499 on_bold_roman1_activate                (GtkMenuItem     *menuitem,
500                                         gpointer         user_data)
501 {
502 	const gchar *base=".BR\n";
503  	insert_label(base,"Font Bold-Roman selected.");
504 }
505 
506 
507 void
on_italica1_activate(GtkMenuItem * menuitem,gpointer user_data)508 on_italica1_activate                   (GtkMenuItem     *menuitem,
509                                         gpointer         user_data)
510 {
511 	const gchar *base=".I\n";
512  	insert_label(base,"Font Italic selected.");
513 }
514 
515 
516 void
on_italica_bold1_activate(GtkMenuItem * menuitem,gpointer user_data)517 on_italica_bold1_activate              (GtkMenuItem     *menuitem,
518                                         gpointer         user_data)
519 {
520 	const gchar *base=".IB\n";
521  	insert_label(base,"Font Italic-Bold selected.");
522 }
523 
524 
525 void
on_italica_roman1_activate(GtkMenuItem * menuitem,gpointer user_data)526 on_italica_roman1_activate             (GtkMenuItem     *menuitem,
527                                         gpointer         user_data)
528 {
529 	const gchar *base=".IR\n";
530  	insert_label(base,"Font Italic-Roman selected.");
531 }
532 
533 
534 void
on_roman_bold1_activate(GtkMenuItem * menuitem,gpointer user_data)535 on_roman_bold1_activate                (GtkMenuItem     *menuitem,
536                                         gpointer         user_data)
537 {
538 	const gchar *base=".RB\n";
539  	insert_label(base,"Font Roman-Bold selected.");
540 }
541 
542 
543 void
on_roman_italic1_activate(GtkMenuItem * menuitem,gpointer user_data)544 on_roman_italic1_activate              (GtkMenuItem     *menuitem,
545                                         gpointer         user_data)
546 {
547 	const gchar *base=".RI\n";
548  	insert_label(base,"Font Roman-Italic selected.");
549 }
550 
551 
552 void
on_small_bold1_activate(GtkMenuItem * menuitem,gpointer user_data)553 on_small_bold1_activate                (GtkMenuItem     *menuitem,
554                                         gpointer         user_data)
555 {
556 	const gchar *base=".SB\n";
557  	insert_label(base,"Font Small-Bold selected.");
558 }
559 
560 
561 void
on_small1_activate(GtkMenuItem * menuitem,gpointer user_data)562 on_small1_activate                     (GtkMenuItem     *menuitem,
563                                         gpointer         user_data)
564 {
565 	const gchar *base=".SM\n";
566  	insert_label(base,"Font Small selected.");
567 }
568 
569 
570 void
on_novo_parrafo1_activate(GtkMenuItem * menuitem,gpointer user_data)571 on_novo_parrafo1_activate              (GtkMenuItem     *menuitem,
572                                         gpointer         user_data)
573 {
574 	const gchar *base=".LP\n";
575  	insert_label(base,"New paragraph.");
576 }
577 
578 
579 void
on_comezo_parrafo1_activate(GtkMenuItem * menuitem,gpointer user_data)580 on_comezo_parrafo1_activate            (GtkMenuItem     *menuitem,
581                                         gpointer         user_data)
582 {
583 	const gchar *base=".PP\n";
584  	insert_label(base,"Paragraph start.");
585 }
586 
587 
588 void
on_comezo_marxen1_activate(GtkMenuItem * menuitem,gpointer user_data)589 on_comezo_marxen1_activate             (GtkMenuItem     *menuitem,
590                                         gpointer         user_data)
591 {
592 	const gchar *base=_(".RS <margin position>\n");
593  	insert_label(base,"Margin position.");
594 }
595 
596 
597 void
on_finaliza_marxen1_activate(GtkMenuItem * menuitem,gpointer user_data)598 on_finaliza_marxen1_activate           (GtkMenuItem     *menuitem,
599                                         gpointer         user_data)
600 {
601 	const gchar *base=".RE\n";
602  	insert_label(base,"Relative margin end.");
603 }
604 
605 
606 void
on_tabulador_por_defecto1_activate(GtkMenuItem * menuitem,gpointer user_data)607 on_tabulador_por_defecto1_activate     (GtkMenuItem     *menuitem,
608                                         gpointer         user_data)
609 {
610 	const gchar *base=".DT\n";
611  	insert_label(base,"Default tab.");
612  }
613 
614 
615 void
on_subcabeceira1_activate(GtkMenuItem * menuitem,gpointer user_data)616 on_subcabeceira1_activate              (GtkMenuItem     *menuitem,
617                                         gpointer         user_data)
618 {
619 	const gchar *base=_(".SS \"<NAME>\"\n");
620  	insert_label(base,"Subheader inserted.");
621 }
622 
623 void
on_xustificacion_a_esquerda1_activate(GtkMenuItem * menuitem,gpointer user_data)624 on_xustificacion_a_esquerda1_activate  (GtkMenuItem     *menuitem,
625                                         gpointer         user_data)
626 {
627 	const gchar *base=".AD L\n";
628  	insert_label(base,"Left justifier.");
629 
630 }
631 
632 void
on_paxina_creada1_activate(GtkMenuItem * menuitem,gpointer user_data)633 on_paxina_creada1_activate             (GtkMenuItem     *menuitem,
634                                         gpointer         user_data)
635 {
636 	GtkWidget *text,*statusbar;
637 	FILE *f;
638 	gint bytes_written=0;
639 	gchar temp[30];
640 	gchar command[50],*datos;
641 	gint exitstatus;
642 
643 /* I read conf file ~/.gmaneditrc */
644 
645 	strcpy(temp, "/tmp/gmanedit.XXXXXX");
646 	mkstemp (temp);
647 	datos=ReadConfFromFile("COMMAND");
648 
649 	if (datos==NULL)
650 		snprintf(command, sizeof command, "xterm -e man -l %s", temp);
651 	else
652 		snprintf(command, sizeof command, "%s -l %s", datos, temp);
653 
654 	text=lookup_widget(wprincipal,"text");
655 
656 /* Barra de estado */
657 	statusbar=lookup_widget(wprincipal,"statusbar1");
658 	gtk_statusbar_pop(GTK_STATUSBAR(statusbar),1);
659 	gtk_statusbar_push(GTK_STATUSBAR(statusbar),1,_("Page preview."));
660 
661 	GtkTextBuffer *b = gtk_text_view_get_buffer (GTK_TEXT_VIEW(text));
662 	GtkTextIter startiter, enditer;
663 	gtk_text_buffer_get_start_iter (b, &startiter);
664 	gtk_text_buffer_get_end_iter (b, &enditer);
665 	datos=gtk_text_buffer_get_text (b, &startiter, &enditer, FALSE);
666 	if ((f=fopen(temp,"w"))!=NULL)
667 	{
668  	     bytes_written=fwrite(datos,sizeof(gchar),strlen(datos),f);
669 	     fclose(f);
670 	}
671 	else
672 	     mensaje(strerror(errno),GTK_MESSAGE_ERROR);
673 
674 
675 	if (bytes_written>0)
676 		g_spawn_command_line_sync(command, NULL, NULL, &exitstatus, NULL);
677 	unlink(temp);
678 }
679 
680 void
on_buscar_e_reemprazar1_activate(GtkMenuItem * menuitem,gpointer user_data)681 on_buscar_e_reemprazar1_activate        (GtkMenuItem     *menuitem,
682                                         gpointer         user_data)
683 {
684      if (buscar == NULL)
685             buscar = create_wbuscar();
686 
687      gtk_widget_show(buscar);
688 }
689 
690 void
on_opcions_programa1_activate(GtkMenuItem * menuitem,gpointer user_data)691 on_opcions_programa1_activate        (GtkMenuItem     *menuitem,
692                                         gpointer         user_data)
693 {
694 	gchar *aux;
695 	GtkWidget *obj;
696 	gchar datos[255];
697 
698 	prefs=create_wpreferences();
699 	aux=ReadConfFromFile("COMMAND");
700 	if (aux != NULL)
701 	{
702 		strncpy(datos,aux, sizeof datos - 1);
703 		datos[sizeof(datos) - 1] = 0;
704 		obj=lookup_widget(GTK_WIDGET(prefs),"entry_command");
705 		gtk_entry_set_text(GTK_ENTRY(obj),datos);
706 	}
707 	aux=ReadConfFromFile("INTERNET_BROWSER");
708 	if (aux != NULL)
709 	{
710 		strncpy(datos,aux, sizeof(datos) - 1);
711 		datos[sizeof(datos) - 1] = 0;
712 		obj=lookup_widget(GTK_WIDGET(prefs),"combo2");
713 		if (!strcmp(datos, "mozilla"))
714 			 gtk_combo_box_set_active (GTK_COMBO_BOX(obj), 0);
715 		else if (!strcmp(datos, "firefox"))
716 			 gtk_combo_box_set_active (GTK_COMBO_BOX(obj), 1);
717 		else if (!strcmp(datos, "galeon"))
718 			 gtk_combo_box_set_active (GTK_COMBO_BOX(obj), 2);
719 		else if (!strcmp(datos, "epiphany"))
720 			 gtk_combo_box_set_active (GTK_COMBO_BOX(obj), 3);
721 		else if (!strcmp(datos, "konqueror"))
722 			 gtk_combo_box_set_active (GTK_COMBO_BOX(obj), 4);
723 	}
724 	gtk_widget_show(prefs);
725 }
726 
727 
728 void
on_bbuscar_clicked(GtkButton * button,gpointer user_data)729 on_bbuscar_clicked                     (GtkButton       *button,
730                                         gpointer         user_data)
731 {
732 
733 }
734 
735 
736 void
on_breemprazar_clicked(GtkButton * button,gpointer user_data)737 on_breemprazar_clicked                 (GtkButton       *button,
738                                         gpointer         user_data)
739 {
740 
741 }
742 
743 
744 void
on_bpechar_clicked(GtkButton * button,gpointer user_data)745 on_bpechar_clicked                     (GtkButton       *button,
746                                         gpointer         user_data)
747 {
748 	gtk_widget_hide(buscar);
749 }
750 
751 
752 void
on_data1_activate(GtkMenuItem * menuitem,gpointer user_data)753 on_data1_activate                      (GtkMenuItem     *menuitem,
754                                         gpointer         user_data)
755 {
756      GtkWidget *text,*statusbar;
757      GtkTextBuffer*  buffer;
758      time_t fech;
759      struct tm *fecha;
760      gchar cad[30];
761      gchar *meses[]={_("January"),_("February"),_("March"),_("April"),
762         		_("May"),_("June"),_("July"),_("August"),
763         		_("September"),_("October"),_("November"),_("December")};
764 
765 
766      time(&fech);
767      fecha=localtime(&fech);
768 
769 	if (fecha!=NULL)
770 	{
771 		sprintf(cad,"%d %s %d",fecha->tm_mday,meses[fecha->tm_mon],fecha->tm_year+1900);
772 		text=lookup_widget(wprincipal,"text");
773 		if (GTK_IS_TEXT_VIEW (text)){
774                   buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text));
775                   gtk_text_buffer_insert_at_cursor( buffer, cad ,strlen(cad));
776 	        }
777 		statusbar = lookup_widget(wprincipal,"statusbar1");
778 		gtk_statusbar_pop (GTK_STATUSBAR (statusbar), 1);
779 		gtk_statusbar_push (GTK_STATUSBAR (statusbar), 1, _("Date inserted."));
780 	}
781 	else
782 		mensaje(_("Cannot get system date!"),GTK_MESSAGE_ERROR);
783 }
784 
785 void
on_about2_activate(GtkMenuItem * menuitem,gpointer user_data)786 on_about2_activate                     (GtkMenuItem     *menuitem,
787                                         gpointer         user_data)
788 {
789      create_about();
790 }
791 
792 static void
mensaje(gchar * msg,gint tipo)793 mensaje (gchar *msg,gint tipo)
794 {
795 	GtkWidget *msgbox;
796 
797 	msgbox=gtk_message_dialog_new(GTK_WINDOW(wprincipal),GTK_DIALOG_MODAL,tipo, GTK_BUTTONS_OK, msg,NULL);
798 	gtk_dialog_run (GTK_DIALOG (msgbox));
799     gtk_widget_destroy (msgbox);
800 }
801 
802 void
on_bdialog_yes_clicked(GtkButton * button,gpointer user_data)803 on_bdialog_yes_clicked                 (GtkButton       *button,
804                                         gpointer         user_data)
805 {
806 	gtk_main_quit();
807 }
808 
809 
810 void
on_bdialog_no_clicked(GtkButton * button,gpointer user_data)811 on_bdialog_no_clicked                  (GtkButton       *button,
812                                         gpointer         user_data)
813 {
814 	gtk_widget_hide(exit_dialog);
815 }
816 
817 void
on_bpok_clicked(GtkButton * button,gpointer user_data)818 on_bpok_clicked                        (GtkButton       *button,
819                                         gpointer         user_data)
820 {
821 	FILE *p;
822 	GtkWidget *entry,*ch;
823 	const gchar *entry_text=NULL;
824 	gchar buf[1024];
825 	gchar *rcname, *browser;
826 
827 	rcname = g_build_filename (g_get_home_dir(), G_DIR_SEPARATOR_S, ".gmaneditrc", NULL );
828 
829 	entry=lookup_widget(prefs,"entry_command");
830 	entry_text=gtk_entry_get_text(GTK_ENTRY(entry));
831 	ch = lookup_widget(prefs, "combo2");
832 	browser = gtk_combo_box_get_active_text (GTK_COMBO_BOX (ch));
833 	snprintf(buf, sizeof buf, "# File created by gmanedit preferences option\n\nCOMMAND=%s\nINTERNET_BROWSER=%s", entry_text, browser);
834 	g_free(browser);
835 
836 	if ((p=fopen(rcname,"w"))!=NULL)
837 	{
838 		fprintf(p,"%s\n",buf);
839 		fclose(p);
840 	}
841 	else
842 		mensaje(strerror(errno),GTK_MESSAGE_ERROR);
843 	g_free (rcname);
844 	gtk_widget_destroy(prefs);
845 }
846 
847 
848 void
on_bpcancel_clicked(GtkButton * button,gpointer user_data)849 on_bpcancel_clicked                    (GtkButton       *button,
850                                         gpointer         user_data)
851 {
852 	gtk_widget_destroy(prefs);
853 }
854 
ReadConfFromFile(gchar * variable)855 static gchar *ReadConfFromFile(gchar *variable)
856 {
857   FILE *f;
858   gchar *rcname;
859   gchar *tok;
860   gchar buf[1024];
861 
862   rcname = g_build_filename (g_get_home_dir(), G_DIR_SEPARATOR_S, ".gmaneditrc", NULL );
863   f = fopen(rcname,"r");
864   g_free (rcname);
865 
866   if (f == NULL) return((gchar *)NULL);
867 
868   while (fgets(buf,80,f) != NULL)
869   {
870      if (buf[strlen(buf)-1] == '\n')
871      	buf[strlen(buf)-1] = '\0';
872 
873      if ((buf[0] != '#') && (!strncmp(variable,buf,strlen(variable))))
874      {
875         tok = strtok(buf,"=");
876         tok = strtok(NULL,"=");
877         fclose(f);
878         return(tok);
879      }
880   }
881   fclose(f);
882   return((gchar *)NULL);
883 }
884 
885 void
on_help1_activate(GtkMenuItem * menuitem,gpointer user_data)886 on_help1_activate                      (GtkMenuItem     *menuitem,
887                                         gpointer         user_data)
888 {
889 	help_without_gnome(wprincipal);
890 }
891 
892 
893 void
on_select_all1_activate(GtkMenuItem * menuitem,gpointer user_data)894 on_select_all1_activate                (GtkMenuItem     *menuitem,
895                                         gpointer         user_data)
896 {
897     GtkWidget *text,*statusbar;
898     gchar *datos;
899 
900 	text = lookup_widget (GTK_WIDGET (wprincipal), "text");
901 
902 	GtkTextBuffer *b = gtk_text_view_get_buffer (GTK_TEXT_VIEW(text));
903 	GtkTextIter startiter, enditer;
904 	gtk_text_buffer_get_start_iter (b, &startiter);
905 	gtk_text_buffer_get_end_iter (b, &enditer);
906 	datos=gtk_text_buffer_get_text (b, &startiter, &enditer, FALSE);
907 
908 	if (strlen(datos)>0)
909 	{
910 	gtk_text_buffer_select_range (b, &startiter, &enditer);
911 	statusbar = lookup_widget (GTK_WIDGET (wprincipal), "statusbar1");
912 	gtk_statusbar_pop (GTK_STATUSBAR (statusbar), 1);
913 	gtk_statusbar_push (GTK_STATUSBAR (statusbar), 1, _("Text selected."));
914 	}
915 }
916 
917 
918 void
on_new_wizard_page1_activate(GtkMenuItem * menuitem,gpointer user_data)919 on_new_wizard_page1_activate           (GtkMenuItem     *menuitem,
920                                         gpointer         user_data)
921 {
922 	if (wizard == NULL)
923 		wizard=create_wizard();
924 	gtk_widget_show(wizard);
925 }
926 
927 void
on_assistant_cancel(GtkAssistant * assistant,gpointer user_data)928 on_assistant_cancel                    (GtkAssistant *assistant,
929                                         gpointer         user_data)
930 {
931 	gtk_widget_destroy (GTK_WIDGET(assistant));
932 	wizard = NULL;
933 }
934 
935 
936 void
on_dthe_end_finish(GtkAssistant * assistant,gpointer user_data)937 on_dthe_end_finish                     (GtkAssistant *assistant,
938                                         gpointer         user_data)
939 {
940    GtkWidget *ch,*text,*druid;
941    gchar *nombre,*snumber,*date,*title;
942    gchar cadena[500];
943    gint number;
944 
945 /* Init for main_window */
946    druid = gtk_widget_get_toplevel (GTK_WIDGET (assistant));
947 
948 /* First, I get man page name from step 1 */
949    text = lookup_widget(GTK_WIDGET(assistant), "mname");
950    nombre = gtk_editable_get_chars(GTK_EDITABLE(text),0,-1);
951 
952 /* Date from step 1 */
953    text = lookup_widget(GTK_WIDGET(assistant), "mdate");
954    date = gtk_editable_get_chars(GTK_EDITABLE(text),0,-1);
955 
956 /* Title from step 1 */
957    text = lookup_widget(GTK_WIDGET(assistant), "mtitle");
958    title = gtk_editable_get_chars(GTK_EDITABLE(text),0,-1);
959 
960 /* Section number from combo */
961    ch = lookup_widget(GTK_WIDGET(assistant), "combo1");
962    number = gtk_combo_box_get_active (GTK_COMBO_BOX(ch));
963    snumber = g_strdup_printf ("%d", number+1);
964 
965 /* Page Start */
966    strcpy(cadena,
967    ".\\\"Created with GNOME Manpages Editor Wizard\n"
968    ".\\\"http://sourceforge.net/projects/gmanedit2\n");
969    strcat(cadena,".TH ");
970    strcat(cadena,nombre);
971    strcat(cadena," ");
972    strcat(cadena,snumber);
973    strcat(cadena," \"");
974    strcat(cadena,date);
975    strcat(cadena,"\" ");
976    strcat(cadena,"\"\" ");
977    strcat(cadena,"\"");
978    strcat(cadena,title);
979    strcat(cadena,"\"\n\n");
980 
981 /* Section NAME */
982    ch = lookup_widget (GTK_WIDGET (assistant), "chname");
983    if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ch))==TRUE)
984    {
985 	strcat(cadena,_(".SH NAME\n"));
986 	strcat(cadena,nombre);
987 	strcat(cadena,_(" \\- program for...\n\n"));
988    }
989 /* Section SYNOPSIS */
990    ch = lookup_widget (GTK_WIDGET (assistant), "chsynopsis");
991    if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ch))==TRUE)
992    {
993 	strcat(cadena,_(".SH SYNOPSIS\n.B "));
994 	strcat(cadena,nombre);
995 	strcat(cadena,_("\n.RI [ options ]\n.br\n\n"));
996    }
997 /* Section CONFIGURATION */
998    ch = lookup_widget (GTK_WIDGET (assistant), "chconfiguration");
999    if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ch))==TRUE)
1000 	strcat(cadena,_(".SH CONFIGURATION\n\n"));
1001 /* Section DESCRIPTION */
1002    ch = lookup_widget (GTK_WIDGET (assistant), "chdescription");
1003    if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ch))==TRUE)
1004    {
1005 	strcat(cadena,_(".SH DESCRIPTION\nThis manual page explains the\n.B "));
1006 	strcat(cadena,nombre);
1007 	strcat(cadena,_("\nprogram. This program...\n.PP\n\\fB"));
1008 	strcat(cadena,nombre);
1009 	strcat(cadena,_("\\fP is for...\n\n"));
1010    }
1011 /* Section OPTIONS */
1012    ch = lookup_widget (GTK_WIDGET (assistant), "choptions");
1013    if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ch))==TRUE)
1014 	strcat(cadena,_(".SH OPTIONS\n.B\n.IP -OPTION\nThis option...\n\n"));
1015 /* Section EXIT STATUS */
1016    ch = lookup_widget (GTK_WIDGET (assistant), "chexitstatus");
1017    if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ch))==TRUE)
1018 	strcat(cadena,_(".SH \"EXIT STATUS\"\n\n"));
1019 
1020 
1021 /* Section RETURN VALUE */
1022    ch = lookup_widget (GTK_WIDGET (assistant), "chreturnvalues");
1023    if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ch))==TRUE)
1024 	strcat(cadena,".SH \"RETURN VALUE\"\n\n");
1025 /* Section ERRORS */
1026    ch = lookup_widget (GTK_WIDGET (assistant), "cherrors");
1027    if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ch))==TRUE)
1028 	strcat(cadena,_(".SH ERRORS\n\n"));
1029 /* Section ENVIRONMENT */
1030    ch = lookup_widget (GTK_WIDGET (assistant), "chenvironment");
1031    if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ch))==TRUE)
1032 	strcat(cadena,_(".SH ENVIRONMENT\n\n"));
1033 /* Section FILES */
1034    ch = lookup_widget (GTK_WIDGET (assistant), "chfiles");
1035    if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ch))==TRUE)
1036 	strcat(cadena,_(".SH FILES\n\n"));
1037 /* Section VERSIONS */
1038    ch = lookup_widget (GTK_WIDGET (assistant), "chversions");
1039    if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ch))==TRUE)
1040 	strcat(cadena,_(".SH VERSIONS\n\n"));
1041 
1042 /* Section CONFORMING TO */
1043    ch = lookup_widget (GTK_WIDGET (assistant), "chconformingto");
1044    if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ch))==TRUE)
1045 	strcat(cadena,_(".SH \"CONFORMING TO\"\n\n"));
1046 /* Section NOTES */
1047    ch = lookup_widget (GTK_WIDGET (assistant), "chnotes");
1048    if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ch))==TRUE)
1049 	strcat(cadena,_(".SH NOTES\n\n"));
1050 /* Section BUGS */
1051    ch = lookup_widget (GTK_WIDGET (assistant), "chbugs");
1052    if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ch))==TRUE)
1053 	strcat(cadena,_(".SH BUGS\n\n"));
1054 /* Section EXAMPLE */
1055    ch = lookup_widget (GTK_WIDGET (assistant), "chexample");
1056    if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ch))==TRUE)
1057 	strcat(cadena,_(".SH EXAMPLE\n\n"));
1058 /* Section SEE ALSO */
1059    ch = lookup_widget (GTK_WIDGET (assistant), "chseealso");
1060    if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ch))==TRUE)
1061 	strcat(cadena,_(".SH \"SEE ALSO\"\n\n"));
1062 
1063 /* Hide wizard */
1064    gtk_widget_hide(wizard);
1065 
1066 /* Insert all into gmanedit */
1067    insert_label(cadena,_("Wizard page created."));
1068 
1069 /* Wizard closed */
1070    gtk_widget_destroy(wizard);
1071    wizard=NULL;
1072 }
1073 
1074 static
insert_label(const gchar * base,const gchar * text_info)1075 void insert_label(const gchar *base,const gchar *text_info)
1076 {
1077 	GtkWidget *text,*statusbar;
1078         GtkTextBuffer *buffer;
1079 
1080 	text=lookup_widget(GTK_WIDGET(wprincipal),"text");
1081         buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text));
1082         gtk_text_buffer_insert_at_cursor(buffer, base, -1);
1083 
1084 	statusbar = lookup_widget(GTK_WIDGET(wprincipal),"statusbar1");
1085 	gtk_statusbar_pop (GTK_STATUSBAR (statusbar), 1);
1086 	gtk_statusbar_push (GTK_STATUSBAR (statusbar), 1, text_info);
1087 }
1088 
1089 void
on_home_page1_activate(GtkMenuItem * menuitem,gpointer user_data)1090 on_home_page1_activate                 (GtkMenuItem     *menuitem,
1091                                         gpointer         user_data)
1092 {
1093 	gchar *browser;
1094 	gchar buf[1024];
1095 	gint exitstatus;
1096 
1097 	browser=ReadConfFromFile("INTERNET_BROWSER");
1098 	if (browser==NULL)
1099 		browser="mozilla";
1100 	snprintf(buf, sizeof buf, "%s http://sourceforge.net/projects/gmanedit2", browser);
1101 
1102 	g_spawn_command_line_sync(buf, NULL, NULL, &exitstatus, NULL);
1103 }
1104 
help_without_gnome(GtkWidget * wid)1105 static void help_without_gnome(GtkWidget *wid)
1106 {
1107 	GtkWidget *statusbar;
1108 	gchar *datos;
1109 	gchar temp[10],command[1024];
1110 	gint exitstatus;
1111 
1112 	strcpy(temp," 7 man");
1113 	datos=ReadConfFromFile("COMMAND");
1114 
1115 	if (datos==NULL)
1116 		snprintf(command, sizeof command, "xterm -e man %s", temp);
1117 	else
1118 		snprintf(command, sizeof command, "%s %s", datos, temp);
1119 
1120 	g_spawn_command_line_sync(command, NULL, NULL, &exitstatus, NULL);
1121 
1122 /* Barra de estado */
1123 	statusbar=lookup_widget(GTK_WIDGET(wprincipal),"statusbar1");
1124 	gtk_statusbar_pop(GTK_STATUSBAR(statusbar),1);
1125 	gtk_statusbar_push(GTK_STATUSBAR(statusbar),1,_("Man help."));
1126 }
1127 
open_man_file(gchar * manfile)1128 static void open_man_file(gchar *manfile)
1129 {
1130 	GtkWidget *statusbar,*text;
1131 	GtkTextBuffer *tb;
1132 	gzFile *f;
1133 	gint bytes_read;
1134 	int n;
1135 	char extension[10];
1136 	gchar *utf8;
1137 	gchar * buffer = (gchar*)malloc(BUFFER_SIZE);
1138 
1139 
1140 	text=lookup_widget(GTK_WIDGET(wprincipal),"text");
1141 	tb = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text));
1142 	gtk_text_buffer_set_text (tb, "", 0);
1143 
1144 /* Barra de estado */
1145 	statusbar=lookup_widget(GTK_WIDGET(wprincipal),"statusbar1");
1146 	gtk_statusbar_pop(GTK_STATUSBAR(statusbar),1);
1147 	gtk_statusbar_push(GTK_STATUSBAR(statusbar),1,_("File opened."));
1148 
1149 /* Ahora abro el fichero */
1150 
1151 	n = strlen(manfile)-3;
1152 	strncpy(extension,manfile+n,3);
1153 	if (!strncmp(extension,".gz",3))
1154 	    in_gzip=1;
1155 	else
1156 	    in_gzip=0;
1157 
1158 
1159 	if ((f=gzopen((gchar *)manfile,"rb"))!=NULL)
1160 	{
1161 	  while(!gzeof(f))
1162 	  {
1163 		bytes_read=gzread(f,buffer,BUFFER_SIZE);
1164 		if (bytes_read>0)
1165 		{
1166 			utf8 = NULL;
1167 			if (g_utf8_validate(buffer, -1, NULL) == FALSE)
1168 			{
1169 				utf8 = g_locale_to_utf8(buffer, -1, NULL, NULL, NULL);
1170 			}
1171 			if (utf8 != NULL){
1172 				strncpy(buffer,utf8, BUFFER_SIZE - 1);
1173 				buffer[BUFFER_SIZE - 1] = 0;
1174 			}
1175 			gtk_text_buffer_insert_at_cursor(tb, buffer ,bytes_read);
1176 		}
1177 	  }
1178   	  gzclose(f);
1179 	}
1180 	else
1181 		mensaje(strerror(errno),GTK_MESSAGE_ERROR);
1182 	if (open_file) gtk_widget_destroy (open_file);
1183 }
1184 
1185 void
on_text_drag_data_received(GtkWidget * widget,GdkDragContext * drag_context,gint x,gint y,GtkSelectionData * data,guint info,guint time,gpointer user_data)1186 on_text_drag_data_received             (GtkWidget       *widget,
1187                                         GdkDragContext  *drag_context,
1188                                         gint             x,
1189                                         gint             y,
1190                                         GtkSelectionData *data,
1191                                         guint            info,
1192                                         guint            time,
1193                                         gpointer         user_data)
1194 {
1195 	if (data->length >= 0)
1196 	{
1197 	    if (!strncmp((gchar *)data->data,"file:",4))
1198 	    {
1199 		filename=(gchar *)data->data+5;
1200 		filename[strlen(filename)-2]='\0';
1201 		open_man_file(filename);
1202 	    }
1203 
1204 	}
1205 	gtk_drag_finish(drag_context, TRUE, FALSE, time);
1206 }
1207 
1208 
1209 void
on_comments1_activate(GtkMenuItem * menuitem,gpointer user_data)1210 on_comments1_activate                  (GtkMenuItem     *menuitem,
1211                                         gpointer         user_data)
1212 {
1213 	const gchar *comm=".\\\" ";
1214 
1215 	insert_label(comm,"Label Comments Inserted.");
1216 }
1217