1 /*
2 * bekijk.c 1.4.0
3 *
4 * Copyright (C) 1997, 1998, 2000, 2001, 2002, 2003, 2006, 2007, 2015 Staf Wagemakers Belgium
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 General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License along
17 * with this program; if not, write to the Free Software Foundation, Inc.,
18 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19 *
20 */
21
22 #define TAB 9
23 #define TYPE_WIDTH 59
24 #include "common.h"
25 #include"ncurses_h.h"
26 #include <signal.h>
27 #include <errno.h>
28 #include <unistd.h>
29 #include <sys/types.h>
30
31 #if TIME_WITH_SYS_TIME
32 #include <sys/time.h>
33 #include <time.h>
34 #else
35 #if HAVE_SYS_TIME_H
36 #include <sys/time.h>
37 #else
38 #include <time.h>
39 #endif
40 #endif
41
42 #include "input.h"
43 #include "win.h"
44 #include "view.h"
45 #include "configfile.h"
46 #include "lookat_configfile.h"
47 #include "outofmemory.h"
48 #include "msg.h"
49 #include "color.h"
50 #ifdef _NED
51 #include "ned.h"
52 #endif
53 #ifdef _ENG
54 #include "eng.h"
55 #endif
56 WINDOW *win1,*win2,*w,*hm_win,*setcolors_w; /* Midden scherm, Onderscherm + alg. venster*/
57 MENU *hm_menup;
58 INPUT_STRING zoek_str;
59 char s[10]={'\0'}; /* String voor de te-zoeken-tekst */
60 char *ss=NULL;
61 chtype *kleur; /* Array voor het bewaren van de kleuren */
62 int color_mode;
63 struct color *colors;
64 struct color *color_array;
65 struct color *mono_array;
66 char txt_view[]="view";
67 char txt_view_found[]="view_found";
68 char txt_view_bold[]="view_bold";
69 char txt_view_italic[]="view_italic";
70 char txt_main_menu[]="main_menu";
71 char txt_main_menuhot[]="main_menuhot";
72 char txt_main_menusel[]="main_menusel";
73 char txt_main_menuhotsel[]="main_menuhotsel";
74 char txt_status_bar[]="status_bar";
75 char txt_win1[]="win1";
76 char txt_win1_edit[]="win1_edit";
77 char txt_win1_menu[]="win1_menu";
78 char txt_win1_menusel[]="win1_menusel";
79 char txt_win1_menuhot[]="win1_menuhot";
80 char txt_win1_menuhotsel[]="win1_menuhotsel";
81 char txt_win2[]="win2";
82 char txt_win2_edit[]="win2_edit";
83 char txt_win2_menu[]="win2_menu";
84 char txt_win2_menusel[]="win2_menusel";
85 char txt_win2_menuhot[]="win2_menuhot";
86 char txt_win2_menuhotsel[]="win2_menuhotsel";
87
88 char *color_vars[] = {
89 txt_view, /* 0 */
90 txt_view_bold, /* 1 */
91 txt_view_italic, /* 2 */
92 txt_main_menu, /* 3 */
93 txt_main_menusel, /* 4 */
94 txt_main_menuhot, /* 5 */
95 txt_main_menuhotsel, /* 6 */
96 txt_status_bar, /* 7 */
97 txt_win1, /* 8 */
98 txt_win1_edit, /* 9 */
99 txt_win1_menu, /* 10 */
100 txt_win1_menusel, /* 11 */
101 txt_win1_menuhot, /* 12 */
102 txt_win1_menuhotsel, /* 13 */
103 txt_win2, /* 14 */
104 txt_win2_edit, /* 15 */
105 txt_win2_menu, /* 16 */
106 txt_win2_menusel, /* 17 */
107 txt_win2_menuhot, /* 18 */
108 txt_win2_menuhotsel, /* 19 */
109 txt_view_found, /* 20 */
110 NULL
111 };
112
113 char free_vb=0;
114 unsigned brol,zoek_offset=0;
115 unsigned long zoek_y;
116 int zoek_mode; /* Ondersheid tussen G & k ????? */
117 MENU m_ok,m_jn;
118 VIEW_PAR bv;
119
120 /* -------------------------------------------
121 * Afsluiten van het prg
122 * ------------------------------------------- */
terminate(int sig)123 static void terminate (int sig)
124 {
125 endwin();
126 freopen("/dev/tty","w",stderr);
127 fprintf(stderr,"\n %s %d\n",txt_term,sig);
128 exit (0);
129 }
130
131 /* ------------------------------------------- */
132 /* Procedure voor het sluiten van menu venster */
133 /* ------------------------------------------- */
m_close(MENU * m)134 void m_close(MENU *m)
135 {
136 delwin(m->w);
137 touchwin(win1);
138 wrefresh(win1);
139 }
140
cm_close(MENU * m)141 void cm_close(MENU *m)
142 {
143 delwin(m->w);
144 touchwin(win1);
145 wrefresh(win1);
146 touchwin((m->parent)->w);
147 touchwin(setcolors_w);
148 wrefresh(setcolors_w);
149 wrefresh((m->parent)->w);
150 }
151
152 /* --------------------------------------------------- */
153 /* Procedure voor het openen van het bestandsmenu .... */
154 /* --------------------------------------------------- */
open_bm(MENU * m)155 void open_bm (MENU *m)
156 {
157 m->w=open_win(7,m->l+2,1,1);
158 m_open(m,win1);
159 mvwaddch(m->w,2,0,ACS_LTEE);
160 whline(m->w,ACS_HLINE,m->l);
161 mvwaddch(m->w,2,m->l+1,ACS_RTEE);
162 mvwaddch(m->w,4,0,ACS_LTEE);
163 whline(m->w,ACS_HLINE,m->l);
164 mvwaddch(m->w,4,m->l+1,ACS_RTEE);
165 }
166
167 /* ----------------------------------------- */
168 /* Procedure voor het openen van het ga-menu */
169 /* ----------------------------------------- */
open_gm(MENU * m)170 void open_gm (MENU *m)
171 {
172 m->w=open_win(7,m->l+2,1,(m->parent)->place[3]);
173 m_open(m,win1);
174 }
175
176 /* ------------------------------------------- */
177 /* Procedure voor het openen van het zoek-menu */
178 /* ------------------------------------------- */
open_zm(MENU * m)179 void open_zm (MENU *m)
180 {
181 m->w=open_win(5,m->l+2,1,(m->parent)->place[5]);
182 m_open(m,win1);
183 }
184
185 /* ------------------------------------------- */
186 /* Procedure voor het openen van het optie-menu*/
187 /* ------------------------------------------- */
open_om(MENU * m)188 void open_om (MENU *m)
189 {
190 m->w=open_win(9,m->l+2,1,(m->parent)->place[7]);
191 m_open(m,win1);
192 mvwaddch(m->w,3,0,ACS_LTEE);
193 whline(m->w,ACS_HLINE,m->l);
194 mvwaddch(m->w,3,m->l+1,ACS_RTEE);
195 mvwaddch(m->w,6,0,ACS_LTEE);
196 whline(m->w,ACS_HLINE,m->l);
197 mvwaddch(m->w,6,m->l+1,ACS_RTEE);
198 }
199
200 /* ------------------------------------------- */
201 /* Procedure voor het openen van het help-menu */
202 /* ------------------------------------------- */
open_hlpm(MENU * m)203 void open_hlpm (MENU *m)
204 {
205 m->w=open_win(5,m->l+2,1,COLS-m->l-2);
206 m_open(m,win1);
207 }
208
209 /* ----------------------------------------- */
210 /* Procedure voor het openen van het fg-menu */
211 /* ----------------------------------------- */
open_fg(MENU * m)212 void open_fg (MENU *m)
213 {
214 /* m->w=open_win(m->amount+2,m->l+2,2*(m->parent)->sel+9,37); */
215 m->w=open_win(m->amount+2,m->l+2,2*(m->parent)->sel+LINES/2-3,COLS/2-3);
216 m_open(m,setcolors_w);
217 }
218
219 /* ----------------------------------------- */
220 /* give_notice function */
221 /* ----------------------------------------- */
222
exit_lookat(WINDOW * rw)223 int exit_lookat(WINDOW *rw) {
224 if (txt_om2[1]==' ') return 1;
225 return(open_ynwin(6,43,&m_jn,txt_stop,rw));
226 }
227
228 /* ----------------------------------------- */
229 /* Open van best. selektie menu */
230 /* */
231 /* int ends(): exit function */
232 /* */
233 /* Geeft terug: 0 -> ok 1 -> ESC */
234 /* ----------------------------------------- */
open_best(int mode)235 int open_best(int mode)
236 {
237 char *vb;
238 int (*ends)(WINDOW *)=NULL;
239 chtype kl[4]={kleur[9],kleur[10],kleur[11],kleur[12]};
240 vb=bv.filename;
241 if(mode) ends=&exit_lookat;
242
243 bv.filename=open_filewin(win2,txt_bo,kl,win1,ends);
244 if (bv.filename) {
245 if (view_load()) {
246 xfree(bv.filename);
247 bv.filename=vb;
248 }
249 else {
250 if(free_vb) xfree(vb);
251 bv.y=0;bv.x=0;
252 view_refresh();
253 };
254 free_vb=1;
255 }
256 else {
257 bv.filename=vb;return(1);
258 }
259 return(0);
260 }
261
262 /* -------------------------------------------- */
263 /* Openen van het zoek venster */
264 /* */
265 /* char *s = pointer naar string */
266 /* char *titel = pointer naar venster-titel */
267 /* char *tekst = pointer naar info-tekst */
268 /* */
269 /* Geeft terug 0 -> geen onderscheid G & k */
270 /* 1 -> ondersheid G & k */
271 /* 2 -> break */
272 /* bit 1 -> set onderscheid G&K */
273 /* bit 2 -> set backwards */
274 /* 3 -> break */
275 /* -------------------------------------------- */
open_zoek_venster(char * titel,char * tekst)276 int open_zoek_venster (char *titel,char *tekst)
277 {
278 MENU m;
279 int brol;
280 int ret=0;
281 int toetsen[]={27,9,0};
282 unsigned pl_ok[]={4,7,4,26,6,15,6,35};
283 int key_m[]={0,9,'\n',' ','\n','\n'};
284 w=open_cwin(8,60);
285 m.w=w;
286 m.amount=4;
287 m.l=0;
288 m.txt=txt_m_zoek;
289 m.place=pl_ok;
290 m.color1=kleur[15];
291 m.color2=kleur[18];
292 m.color3=kleur[19];
293 m.color4=kleur[20];
294 m.sel=m.used=0;
295 m.key=key_m;
296 m.hkey=hkey_zoek;
297 m.hplace=hplace_zoek;
298 zoek_str.w=w;
299 zoek_str.yp=2;
300 zoek_str.xp=22;
301 zoek_str.key=toetsen;
302 wbkgd(w,kleur[15]);
303 box(w,0,0);
304 echo();
305 leaveok(w,FALSE);
306 curs_set(1);
307 mvwaddstr(w,0,2,titel);
308 mvwaddstr(w,2,2,tekst);
309 mvwaddstr(w,4,6,txt_ondersheid_g);
310 mvwaddstr(w,4,25,txt_search_back);
311 wmove (w,2,22);
312 wbkgdset(w,kleur[16]);
313 for (brol=0;brol<=32;brol++) waddch(w,' ');
314 m.sel=0;
315 do {
316 menu_print(&m);
317 wbkgdset(w,kleur[16]);
318
319 if (brol!=1) brol=input(&zoek_str);
320 else brol=2;
321
322 curs_set(0);
323 leaveok(w,TRUE);
324
325 if (!brol) {
326 if (m.txt[0]==txt_X) ret=ret | 1;
327 if (m.txt[1]==txt_X) ret=ret | 2;
328 return(ret);
329 };
330
331 if (brol!=2) return(3);
332
333 do {
334 brol=menu_key(&m);
335 if ((brol==2)&&(m.sel==0)) break;
336 } while(brol<3);
337
338 if ((m.sel<2)&&(brol>2)) {
339 if (m.txt[m.sel]==txt_spacie) m.txt[m.sel]=txt_X;
340 else m.txt[m.sel]=txt_spacie;
341 brol=1;
342 };
343
344 } while(brol<3);
345
346 if (m.sel==2) {
347
348 if (m.txt[0]==txt_X) ret=ret | 1;
349 if (m.txt[1]==txt_X) ret=ret | 2;
350 return(ret);
351
352 };
353 return (3);
354 }
355
356 /* -------------------------------------------- */
357 /* Konverteert een string naar grootte letters */
358 /* -------------------------------------------- */
str_toupper(char * c)359 void str_toupper (char *c)
360 {
361 int i=0;
362 if ((c!=NULL) && (*c!=0)) {
363
364 do {c[i]=toupper(c[i]);++i;} while (c[i]!=0);
365
366 }
367 }
368
369 /* -------------------------------------------- */
370 /* Print de gevonden tekst in de juiste kleur */
371 /* -------------------------------------------- */
print_zoek(char * c,char * cp,char * sp,char * rp,unsigned i)372 void print_zoek (char *c,char *cp,char *sp,char *rp,unsigned i)
373 {
374 int brol;
375 brol=cp-c;
376 cp=rp+brol;
377 strncpy(sp,cp,strlen(zoek_str.c));
378 zoek_y=i;
379 zoek_offset=cp-rp;
380 view_setx(zoek_offset);
381 if ((bv.sx+strlen(sp))>bv.cols) {
382 bv.x+=bv.sx+strlen(sp)-bv.cols;
383 bv.sx-=bv.sx+strlen(sp)-bv.cols;
384 }
385 if (((bv.x+bv.cols)>strlen(c))&&(strlen(c)>bv.cols)) {
386 bv.x=strlen(c)-bv.cols;
387 bv.sx=zoek_offset-bv.x;
388 }
389 view_sety(zoek_y);
390 view_refresh();
391 zoek_offset++;
392 wmove (bv.win,bv.sy,bv.sx);
393 wbkgdset(bv.win,kleur[21]);
394 view_addstr(sp);
395 wbkgdset(bv.win,kleur[1]);
396 wmove (bv.win,bv.sy,bv.sx);
397 wrefresh(bv.win);
398 xfree(rp);
399 }
400
401 /* -------------------------------------------- */
402 /* Funktie voor het zoeken van tekst ... */
403 /* */
404 /* unsigned long start = bestand te-zoeken-van */
405 /* int mode bit 1 = 0 -> geen ondersheid G & k */
406 /* = 1 -> ondersheid G & k */
407 /* bit 2 = backwards */
408 /* -------------------------------------------- */
zoek(unsigned long start,int mode)409 void zoek(unsigned long start,int mode)
410 {
411 char *cp,*rp;
412 char *c;
413 char *sp;
414 int add,e=0;
415 int i;
416 unsigned l;
417 int end;
418
419 do {
420 l=0;
421 sp=NULL;
422 c=NULL;
423 if (zoek_y!=start) zoek_offset=0;
424 if (view_par(NULL)->mode) {
425 getyx(bv.win,bv.sy,bv.sx);
426 zoek_offset=view_getx();
427 };
428 if (txt_m_zoek[1]==txt_spacie) {
429 end=bv.y_max;
430 add=1;
431 if ((start==0)&&(view_getx()==1)) e=1;
432 }
433 else {
434 if ((start==0)&&(view_getx()==1)) e=0;
435 end=-1;
436 add=-1;
437 }
438
439 for (i=start;i!=end;i+=add) {
440
441 if(i!=start) zoek_offset=0;
442
443 if(add==-1) if(i<0) {
444 cp=NULL;
445 i=0;
446 break;
447 }
448
449 rp=view_getstr(i);
450 c=xrealloc(c,strlen(rp)+1);
451 sp=xrealloc(sp,strlen(zoek_str.c)+1);
452 strcpy(c,rp);
453 strcpy(sp,zoek_str.c);
454
455 if (txt_m_zoek[0]==txt_spacie) {
456 str_toupper(sp);
457 str_toupper(c);
458 };
459
460 wrefresh(win2);
461
462 if(add==-1) {
463 char *cz,*cp2=NULL;
464 cp=NULL;
465 if(zoek_offset) c[zoek_offset-1]='\0';
466 cz=c;
467
468 for(;;) {
469 cp2=strstr(cz,sp);
470 if(cp2!=NULL) {
471 cz+=strlen(sp);
472 cp=cp2;
473 }
474 else break;
475 };
476 }
477 else {
478 cp=strstr(c+zoek_offset+l,sp);
479 }
480
481 if (cp!=NULL) break;
482 zoek_offset=0;
483 xfree(rp);
484 }
485
486 if(c!=NULL) {
487 if(cp!=NULL) {
488 print_zoek(c,cp,sp,rp,i);
489 e=0;
490 }
491 else {
492 if(!e) {
493 char **verder;
494 if(add==-1) verder=txt_verder_zoeken_begin;
495 else verder=txt_verder_zoeken_einde;
496 e=open_ynwin(6,55,&m_jn,verder,win1);
497 if(e) {
498 if(add==-1) {
499 bv.x=bv.sx=0;
500 start=bv.y_max-1;
501 wmove(bv.win,bv.sy,bv.sx);
502 }
503 else {
504 bv.x=bv.sx=start=0;wmove(bv.win,bv.sy,bv.sx);
505 }
506 }
507 }
508 else {
509 e=0;
510 open_okwin(6,40,&m_ok,txt_t_nt_gevonden,win1);
511 }
512 }
513 }
514 else {
515 e=0;
516 mvwprintw(win2,0,0," Internal Error!!!!!! Press a key to continue... ");
517 wrefresh(win2);
518 getchar();
519 }
520 xfree(c);
521 xfree(sp);
522 touchwin(win1);
523 wrefresh(win1);
524 } while (e);
525 }
526
527 /* -------------------------------------------- */
528 /* Funktie voor het inlezen van te-zoeken-tekst */
529 /* char mode : 0 -> huidige positie */
530 /* 1 -> van begin */
531 /* -------------------------------------------- */
zoek_tekst(char mode)532 void zoek_tekst (char mode)
533 {
534 zoek_mode=open_zoek_venster(txt_z_v_tekst,txt_geef_de_tekst);
535 delwin(w);
536 touchwin(win1);
537 wrefresh(win1);
538
539 if (zoek_mode<4) {
540 if (mode) zoek(0,zoek_mode);
541 else zoek(view_gety()-1,zoek_mode);
542 }
543 else zoek_mode=1;
544 ss=(char *) xrealloc(ss,strlen(zoek_str.c)+1);
545 strcpy(ss,zoek_str.c);
546 }
547
548 /* -------------------------------------------- */
549 /* Funktie om naar de lijnnr. te gaan ... */
550 /* -------------------------------------------- */
ga_lijn()551 void ga_lijn ()
552 {
553 MENU m;
554 int brol;
555 unsigned long y;
556 char *txt[]={txt_ga_lijn,txt_geef_lijnnr};
557 INPUT_STRING s;
558 m.txt=txt_ok_anu;
559 m.hkey=hkey_ok_anu;
560 m.hplace=hplace_ok_anu;
561 m.color1=kleur[15];
562 m.color2=kleur[18];
563 m.color3=kleur[19];
564 m.color4=kleur[20];
565 brol=open_inputwin(7,60,&m,kleur[16],&s,txt,1,win1);
566 curs_set(0);
567 if (strlen(s.c)&&!brol) {
568 sscanf(s.c,"%lu",&y);
569 if (y) --y;
570 else bv.y=0;
571 view_sety(y);
572 view_refresh();
573 }
574 xfree(s.c);
575 }
576
577 /* -------------------------------------------- */
578 /* Bijvoegen van een type ... */
579 /* -------------------------------------------- */
580
add_type(int * n,char * name,char * val)581 void add_type (int *n,char *name,char *val)
582 {
583 int i,max;
584 i=0;
585 while(bv.view_exec[i]!=NULL) ++i;
586 max=i+1;
587 bv.view_exec=xrealloc(bv.view_exec,sizeof(char **)*(max+1));
588 bv.view_exec[max]=NULL;
589 i=*n;
590 for (i=max;i>*n;i--) bv.view_exec[i]=bv.view_exec[i-1];
591
592 bv.view_exec[*n]=xmalloc(sizeof(char *)*2);
593 bv.view_exec[*n][0]=xmalloc(strlen(name)+1);
594 strcpy(bv.view_exec[*n][0],name);
595 bv.view_exec[*n][1]=xmalloc(strlen(val)+1);
596 strcpy(bv.view_exec[*n][1],val);
597 }
598
599 /* -------------------------------------------- */
600 /* char *s = pointer naar string */
601 /* char *titel = pointer naar venster-titel */
602 /* char *tekst = pointer naar info-tekst */
603 /* n = plaats */
604 /* mode = 0 -> bijvoegen */
605 /* 1 -> aanpassen */
606 /* -------------------------------------------- */
open_type_venster(char * titel,char * txt_typename,char * txt_typeval,int n,int mode)607 void open_type_venster (char *titel,char *txt_typename,char *txt_typeval,int n,int mode)
608 {
609 WINDOW *w;
610 MENU m;
611 INPUT_STRING ip_name,ip_val;
612 char ***ccc;
613 int brol;
614 int toetsen[]={27,9,0};
615 unsigned pl_ok[]={7,11,7,31};
616 int key_m[]={0,9,'\n',' ','\n',27};
617 w=open_cwin(10,50);
618 ccc=bv.view_exec;
619 m.w=w;
620 m.amount=2;
621 m.l=0;
622 m.txt=txt_m_type;
623 m.place=pl_ok;
624 m.color1=kleur[17];
625 m.color2=kleur[18];
626 m.color3=kleur[19];
627 m.color4=kleur[20];
628 m.sel=m.used=0;
629 m.key=key_m;
630 m.hkey=hkey_type;
631 m.hplace=hplace_type;
632 ip_val.w=ip_name.w=w;
633 ip_name.yp=2;ip_val.yp=4;
634 ip_val.xp=ip_name.xp=17;
635 if (mode!=0) {
636 ip_name.c=(char *) xmalloc(strlen(ccc[n][0]));
637 strcpy(ip_name.c,ccc[n][0]+1);
638 ip_val.c=(char *) xmalloc(strlen(ccc[n][1])+1);
639 strcpy(ip_val.c,ccc[n][1]);
640 }
641 else ip_name.c=ip_val.c=NULL;
642 ip_val.n=ip_name.n=29;
643 ip_val.m=ip_name.m=0;
644 ip_val.count=ip_name.count=0;
645 ip_val.mode=ip_name.mode=0;
646 ip_val.insert=ip_name.insert=1;
647 ip_val.ox=ip_name.ox=0;
648
649 ip_val.key=ip_name.key=toetsen;
650 wbkgd(w,kleur[15]);
651 box(w,0,0);
652 echo();
653 leaveok(w,FALSE);
654 curs_set(1);
655 mvwaddstr(w,0,2,titel);
656 mvwaddstr(w,2,2,txt_typename);
657 mvwaddstr(w,4,2,txt_typeval);
658 wmove (w,2,16);
659 waddch(w,'.');
660 wbkgdset(w,kleur[16]);
661 for (brol=0;brol<=ip_name.n;brol++) waddch(w,' ');
662 wmove (w,4,17);
663 for (brol=0;brol<=ip_val.n;brol++) waddch(w,' ');
664 input_show_string(&ip_val);
665 do {
666 menu_print(&m);
667 m.sel=0;
668 wbkgdset(w,kleur[16]);
669 if (brol!=1) brol=input(&ip_name);
670 else brol=2;
671 leaveok(w,TRUE);
672 curs_set(0);
673 if (brol==1) break;
674 brol=input(&ip_val);
675 leaveok(w,TRUE);
676 curs_set(0);
677 if (brol==1) break;
678 do {
679 brol=menu_key(&m);
680 if ((brol==2)&&(m.sel==0)) break;
681 } while(brol<3);
682 } while(brol<3);
683 if ((m.sel==0)&&(brol==3)) {
684 int t=n;
685 char *c;
686 if (mode!=0) {
687 t=n;
688 ccc[t][0]=xrealloc(ccc[t][0],strlen(ip_name.c)+2);
689 strcpy(ccc[t][0],".");
690 strcat(ccc[t][0],ip_name.c);
691 ccc[t][1]=xrealloc(ccc[t][1],strlen(ip_val.c)+1);
692 strcpy(ccc[t][1],ip_val.c);
693 }
694 else {
695 c=xmalloc(strlen(ip_name.c)+2);
696 strcpy(c,".");
697 strcat(c,ip_name.c);
698 add_type(&t,c,ip_val.c);
699 xfree(c);
700 }
701 }
702 xfree(ip_name.c);
703 xfree(ip_val.c);
704 delwin(w);
705 }
706
707 /* -------------------------------------------- */
708 /* wissen van een type ... */
709 /* -------------------------------------------- */
710
delete_type(unsigned * n)711 void delete_type(unsigned *n)
712 {
713 int i;
714 xfree(bv.view_exec[*n][1]);
715 xfree(bv.view_exec[*n][0]);
716 xfree(bv.view_exec[*n]);
717 i=*n+1;
718 while(bv.view_exec[i]!=NULL) {
719 bv.view_exec[i-1]=bv.view_exec[i];
720 i++;
721 }
722 bv.view_exec[i-1]=NULL;
723
724 bv.view_exec=xrealloc(bv.view_exec,(i+1)*sizeof(char **));
725 }
726
colors_2_str(struct color * colors,int * a)727 char **colors_2_str (struct color *colors,int *a) {
728 struct color *color_p=colors;
729 char ** ret=NULL;
730 int i=0;
731
732 *a=20;
733 ret=xcalloc(*a,sizeof(char *));
734 while(color_p->name!=NULL) {
735 if(i>*a-1) {
736 *a=*a+20;
737 ret=xrealloc(ret,(*a)*sizeof(char *));
738 }
739 ret[i]=xmalloc(strlen(color_p->name)+1);
740 strcpy(ret[i],color_p->name);
741 ++i;
742 ++color_p;
743 }
744 *a=i;
745 ret=xrealloc(ret,i*sizeof(char *));
746 return(ret);
747 }
748
749 /* -------------------------------------------- */
750 /* bv.view_exec omzetten naar een string... */
751 /* -------------------------------------------- */
view_exec_2_str(int * a)752 char **view_exec_2_str(int *a)
753 {
754 char ***ccc,**cc;
755 ccc=bv.view_exec;
756 cc=(char **) xmalloc(sizeof(char*));
757 *a=0;
758 while(*ccc) {
759 int l1,l0;
760 int n;
761 l0=strlen(ccc[0][0]);
762 l1=strlen(ccc[0][1]);
763 if (l0>((TYPE_WIDTH/2)-1)) l0=(TYPE_WIDTH/2)-1;
764 if (l1>((TYPE_WIDTH/2)-1)) l1=(TYPE_WIDTH/2)-1;
765 cc[*a]=(char *)xmalloc(TYPE_WIDTH+1);
766 strncpy(cc[*a],ccc[0][0],l0);
767 cc[*a][l0]='\0';
768 for(n=0;n<(TYPE_WIDTH-l0-l1);n++) strcat(cc[*a]," ");
769 strncat(cc[*a],ccc[0][1],l1);
770 cc[*a][TYPE_WIDTH]='\0';
771 ++ccc;
772 ++*a;
773 cc=(char **)xrealloc(cc,sizeof(char*)*(*a+1));
774 }
775 return(cc);
776 }
777 /* -------------------------------------------- */
778 /* type geheugen terug vrijgeven */
779 /* -------------------------------------------- */
780
free_type(char ** cc,int a)781 void free_type(char **cc,int a)
782 {
783 int i;
784 for (i=0;i<=a-1;i++) xfree(cc[i]);
785 xfree(cc);
786 *cc=NULL;
787 }
788 /* -------------------------------------------- */
789 /* Funktie voor types... */
790 /* -------------------------------------------- */
set_types()791 void set_types ()
792 {
793 MENU m,mm;
794 WINDOW *w;
795 int key_m[]={KEY_UP,KEY_DOWN,'\n',KEY_PPAGE,KEY_NPAGE,27,9};
796 int key_mm[]={0,9,'\n',' ',27,'\n'};
797 unsigned pl_m[]={2,5,3,5,4,5,5,5,6,5,7,5,8,5,9,5,10,5,11,5,12,5,13,5,14,5};
798 unsigned pl_mm[]={15,1,15,1,15,1,15,1,15,1,2,5};
799 int m_selected=0;
800 int s,i,brol=0;
801 char **cc=NULL;
802 unsigned u=0;
803 i=(TYPE_WIDTH+11-strlen(txt_typem[0])-strlen(txt_typem[1])-strlen(txt_typem[2])-strlen(txt_typem[3])-strlen(txt_typem[4]))/6;
804 pl_mm[1]=1+i;
805 pl_mm[3]=pl_mm[1]+i+strlen(txt_typem[0]);
806 pl_mm[5]=pl_mm[3]+i+strlen(txt_typem[1]);
807 pl_mm[7]=pl_mm[5]+i+strlen(txt_typem[2]);
808 pl_mm[9]=pl_mm[7]+i+strlen(txt_typem[3]);
809 cc=view_exec_2_str(&brol);
810 m.color1=kleur[11];
811 m.color2=kleur[12];
812 m.color3=kleur[13];
813 m.place=pl_m;
814 m.key=key_m;
815 m.l=TYPE_WIDTH;
816 m.hkey=NULL;
817 m.hplace=NULL;
818 w=open_cwin(18,TYPE_WIDTH+10);
819 m.w=w;
820 m.used=m.sel=0;
821 mm.w=w;
822 mm.l=0;
823 mm.place=pl_mm;
824 mm.sel=mm.used=0;
825 mm.txt=txt_typem;
826 mm.color1=kleur[11];
827 mm.color2=kleur[12];
828 mm.color3=kleur[13];
829 mm.color4=kleur[14];
830 mm.hkey=hkey_typem;
831 mm.hplace=hplace_typem;
832 mm.amount=6;
833 mm.key=key_mm;
834 leaveok(w,TRUE);
835 curs_set(0);
836 keypad(w,TRUE);
837 nodelay(w,FALSE);
838 wbkgdset(w,kleur[9]);
839 werase(w);
840 box(w,0,0);
841 win_box(w,12,TYPE_WIDTH+3,1,3);
842 m.txt=cc;
843 do {
844 if (brol<11) {
845 m.amount=brol;
846 wmove(w,brol+2,5);
847 wbkgdset(w,kleur[9]);
848 for(i=0;i<TYPE_WIDTH;i++) waddch(w,' ');
849 wrefresh(w);
850 }
851 else m.amount=11;
852
853 menu_print(&mm);
854 wrefresh(w);
855 if(u>brol-1) u=brol-1;
856 menu_print(&m);
857 if(brol) i=scroll_menu(&m,brol,NULL,&u);
858 else i=2;
859 mm.sel=0;
860 switch (i) {
861 case 0 : open_type_venster(txt_c_type,txt_typename,txt_typeval,m.sel,1);
862 touchwin(w);
863 wrefresh(w);
864 break;
865 case 1 : mm.sel=4;
866 break;
867 case 2 : do {
868 s=menu_key(&mm);
869 if ((s==2)&&(mm.sel==5)) break;
870 } while(s<3);
871 if (s==5) mm.sel=4;
872 break;
873 default: break;
874 }
875 if(i) {
876 switch(mm.sel) {
877 case 0 : open_type_venster(txt_n_type,txt_typename,txt_typeval,m.sel,0);
878 break;
879 case 1 : if (m.amount) open_type_venster(txt_n_type,txt_typename,txt_typeval,m.sel+1,0);
880 else open_type_venster(txt_n_type,txt_typename,txt_typeval,m.sel,0);
881 break;
882 case 2 : if (brol) open_type_venster(txt_c_type,txt_typename,txt_typeval,m.sel,1);
883 break;
884 case 3 : if (brol) {
885 delete_type(&m.sel);
886 }
887 break;
888 case 4 : break;
889 }
890 }
891 touchwin(w);
892 wrefresh(w);
893 m_selected=m.txt-cc;
894 free_type(cc,brol);
895 cc=view_exec_2_str(&brol);
896 if(m_selected>brol) m_selected=brol;
897 m.txt=cc+m_selected;
898 if((m_selected+m.amount)>brol) { --m.sel;--m.txt; };
899 } while ((mm.sel<4)||(mm.sel==5));
900 delwin(w);
901 free_type(cc,brol);
902 }
903
init_pullmenu_colors(MENU * m,chtype color1,chtype color2,chtype color3,chtype color4)904 void init_pullmenu_colors (MENU *m,chtype color1,chtype color2, chtype color3, chtype color4) {
905 MENU **mp;
906 int i,n;
907
908 if(m==NULL) return;
909 m->color1=color1;
910 m->color2=color2;
911 m->color3=color3;
912 m->color4=color4;
913
914 n=m->amount;
915 mp=m->next;
916
917 if(mp==NULL) return;
918
919 for(i=0;i<n;i++) {
920 if(mp[i]!=NULL) {
921 mp[i]->color1=color1;
922 mp[i]->color2=color2;
923 mp[i]->color3=color3;
924 mp[i]->color4=color4;
925 }
926 }
927 }
928
init_colors(struct color * colors)929 void init_colors (struct color *colors) {
930
931 int kleuren=30;
932 int i=1;
933 char **kleur_naam;
934 kleur=xcalloc(kleuren,sizeof(chtype));
935 kleur_naam=color_vars;
936 kleur[0]=COLOR_PAIR(0);
937
938 while(*kleur_naam) {
939 if(i>kleuren) {
940 kleuren+=20;
941 kleur=xrealloc(kleur,kleuren*sizeof(chtype));
942 }
943 kleur[i]=get_color(*kleur_naam,colors);
944 ++i;
945 ++kleur_naam;
946 }
947 bv.color=kleur;
948
949 m_jn.color1=kleur[15];
950 m_jn.color2=kleur[18];
951 m_jn.color3=kleur[19];
952 m_jn.color4=kleur[20];
953
954 m_ok.color1=kleur[15];
955 m_ok.color2=kleur[18];
956 m_ok.color3=kleur[19];
957 m_ok.color4=kleur[20];
958
959 }
960
set_main_colors()961 void set_main_colors() {
962 wbkgdset(bv.win,kleur[2]);
963 wbkgdset(win2,kleur[8]);
964 wbkgdset(hm_win,kleur[4]);
965 init_pullmenu_colors(hm_menup,kleur[4],kleur[5],kleur[6],kleur[7]);
966 menu_print(hm_menup);
967 touchwin(win2);
968 touchwin(hm_menup->w);
969 wrefresh(win2);
970 wrefresh(hm_menup->w);
971 bv.y-=(LINES-2);
972 wbkgdset(bv.win,kleur[1]);
973 view_refresh();
974 }
975
refresh_setcolors_win(WINDOW * w)976 void refresh_setcolors_win(WINDOW *w)
977 {
978
979 leaveok(w,TRUE);
980 curs_set(0);
981 keypad(w,TRUE);
982 nodelay(w,FALSE);
983 wbkgdset(w,kleur[9]);
984 werase(w);
985 box(w,0,0);
986 win_box(w,12,20,1,3);
987
988 }
989
open_color_venster(MENU * setcolors_m,struct color * colors,int p)990 void open_color_venster(MENU *setcolors_m, struct color *colors,int p) {
991
992 unsigned pl_cm_color[]={2,5,4,5,6,5,8,5,8,19,8,33};
993 unsigned pl_cm_mono[]={2,5,4,5,8,5,8,19,8,33};
994 unsigned pl_sc[]={1,1,2,1,3,1,4,1,5,1,6,1,7,1,8,1};
995 int key_cm[]={0,9,'\n',0,0,27};
996 int key_sub[]={KEY_UP,KEY_DOWN,'\n',0,0,27};
997 int x,y;
998 int cancel=0;
999 int try=0;
1000 int ok=0;
1001 int last_color=0;
1002 MENU *sub_NULL[]={NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL};
1003 MENU cm,fg_m,bg_m,attr_m;
1004 MENU *sub_cm_color[]={&fg_m,&bg_m,&attr_m,NULL,NULL,NULL};
1005 MENU *sub_cm_mono[]={&fg_m,&bg_m,NULL,NULL,NULL};
1006 struct color backup_color;
1007
1008 cp_color(&backup_color,&colors[p]);
1009
1010 /* cm.w init */
1011
1012 cm.w=open_cwin(10,48);
1013 leaveok(cm.w,TRUE);
1014 curs_set(0);
1015 keypad(cm.w,TRUE);
1016 nodelay(cm.w,FALSE);
1017 wbkgdset(cm.w,kleur[15]);
1018 werase(cm.w);
1019 box(cm.w,0,0);
1020 wrefresh(cm.w);
1021
1022 /* cm menu init */
1023
1024 cm.sel=0;
1025 cm.used=0;
1026
1027 if(!color_mode) {
1028
1029 cm.txt=txt_cm_color;
1030 cm.place=pl_cm_color;
1031 cm.hkey=hkey_cv_color;
1032 cm.hplace=hplace_cv_color;
1033 cm.next=sub_cm_color;
1034 last_color=2;
1035
1036 }
1037 else {
1038
1039 cm.txt=txt_cm_mono;
1040 cm.place=pl_cm_mono;
1041 cm.hkey=hkey_cv_mono;
1042 cm.hplace=hplace_cv_mono;
1043 cm.next=sub_cm_mono;
1044 last_color=1;
1045
1046 }
1047
1048 cm.amount=number_of_strings(cm.txt);
1049 cancel=cm.amount-1;
1050 try=cancel-1;
1051 ok=try-1;
1052
1053 cm.key=key_cm;
1054 cm.parent=NULL;
1055 cm.call_open=NULL;
1056 cm.call_close=NULL;
1057 cm.l=0;
1058 cm.call_close=NULL;
1059
1060 if (color_mode==0) {
1061
1062 fg_m.sel=color_to_number(colors[p].fg);
1063 bg_m.sel=color_to_number(colors[p].bg);
1064 attr_m.sel=attr_to_number(colors[p].attr);
1065 bg_m.txt=txt_kleuren;
1066 fg_m.txt=txt_kleuren;
1067 attr_m.txt=txt_attributen;
1068
1069 }
1070 else {
1071
1072 fg_m.sel=attr_to_number(colors[p].fg);
1073 bg_m.sel=attr_to_number(colors[p].bg);
1074 bg_m.txt=txt_attributen;
1075 fg_m.txt=txt_attributen;
1076 attr_m.txt=NULL;
1077
1078 }
1079
1080 bg_m.amount=number_of_strings(bg_m.txt);
1081 bg_m.place=pl_sc;
1082 bg_m.key=key_sub;
1083 bg_m.hkey=NULL;
1084 bg_m.hplace=NULL;
1085 bg_m.parent=&cm;
1086 bg_m.next=sub_NULL;
1087 bg_m.call_open=open_fg;
1088 bg_m.call_close=cm_close;
1089 bg_m.l=10;
1090
1091 fg_m.amount=number_of_strings(fg_m.txt);
1092 fg_m.place=pl_sc;
1093 fg_m.key=key_sub;
1094 fg_m.hkey=NULL;
1095 fg_m.hplace=NULL;
1096 fg_m.parent=&cm;
1097 fg_m.next=sub_NULL;
1098 fg_m.call_open=open_fg;
1099 fg_m.call_close=cm_close;
1100 fg_m.l=10;
1101
1102 attr_m.amount=number_of_strings(attr_m.txt);
1103 attr_m.place=pl_sc;
1104 attr_m.key=key_sub;
1105 attr_m.hkey=NULL;
1106 attr_m.hplace=NULL;
1107 attr_m.parent=&cm;
1108 attr_m.next=sub_NULL;
1109 attr_m.call_open=open_fg;
1110 attr_m.call_close=cm_close;
1111 attr_m.l=10;
1112
1113 init_pullmenu_colors(&cm,kleur[15],kleur[18],kleur[19],kleur[20]);
1114
1115 for(;;) {
1116
1117 char kar='A';
1118 wbkgdset(cm.w,kleur[15]);
1119 werase(cm.w);
1120 box(cm.w,0,0);
1121
1122 win_box(cm.w,2,27,1,4);
1123 win_box(cm.w,4,27,1,4);
1124 if(!color_mode) win_box(cm.w,6,27,1,4);
1125 win_box(cm.w,6,10,1,33);
1126
1127 wbkgdset(cm.w,kleur[15]);
1128 mvwaddstr(cm.w,2,17,">");
1129 mvwaddstr(cm.w,2,20,fg_m.txt[fg_m.sel]);
1130
1131 mvwaddstr(cm.w,1,34," Example ");
1132 wbkgdset(cm.w,colors[p].ch);
1133
1134 for(y=1;y<6;y++) {
1135 for(x=1;x<10;x++)
1136 mvwaddch(cm.w,y+1,x+33,kar++);
1137 }
1138
1139 wbkgdset(cm.w,kleur[15]);
1140 mvwaddstr(cm.w,4,17,">");
1141 mvwaddstr(cm.w,4,20,bg_m.txt[bg_m.sel]);
1142
1143 if(!color_mode) {
1144
1145 mvwaddstr(cm.w,6,17,">");
1146 mvwaddstr(cm.w,6,20,txt_attributen[attr_m.sel]);
1147
1148 }
1149
1150 wrefresh(cm.w);
1151 menu_pull(&cm,0);
1152
1153 if(cm.used==2) break;
1154 if(cm.sel>last_color) {
1155 if(cm.sel==cancel) {
1156 set_color(color_vars[p],
1157 colors,
1158 backup_color.fg,
1159 backup_color.bg,
1160 backup_color.attr,
1161 color_mode);
1162 }
1163 else {
1164 if(!color_mode) {
1165 set_color(color_vars[p],
1166 colors,number_to_color(fg_m.sel),
1167 number_to_color(bg_m.sel),
1168 number_to_attr(attr_m.sel),
1169 color_mode);
1170 }
1171 else {
1172 set_color(color_vars[p],
1173 colors,number_to_attr(fg_m.sel),
1174 number_to_attr(bg_m.sel),
1175 0,
1176 color_mode);
1177 }
1178 }
1179
1180 init_colors(colors);
1181 set_main_colors();
1182 init_pullmenu_colors(&cm,kleur[15],kleur[18],kleur[19],kleur[20]);
1183 refresh_setcolors_win(setcolors_m->w);
1184 setcolors_m->next[0]->color1=setcolors_m->color1=kleur[11];
1185 setcolors_m->next[0]->color2=setcolors_m->color2=kleur[12];
1186 setcolors_m->next[0]->color3=setcolors_m->color3=kleur[13];
1187 setcolors_m->next[0]->color4=setcolors_m->color4=kleur[14];
1188 menu_print(&cm);
1189 menu_print(setcolors_m);
1190 menu_print(setcolors_m->next[0]);
1191 touchwin(setcolors_m->w);
1192 touchwin(cm.w);
1193 wrefresh(setcolors_m->w);
1194
1195 if((cm.sel==ok)||(cm.sel==cancel)) break;
1196
1197 }
1198 }
1199 }
1200
1201 /* -------------------------------------------- */
1202 /* Funktie voor de kleuren... */
1203 /* -------------------------------------------- */
set_colors()1204 void set_colors ()
1205 {
1206
1207 MENU m,mm;
1208 MENU *m_sub[]={&mm};
1209 WINDOW *w;
1210 int key_m[]={KEY_UP,KEY_DOWN,'\n',KEY_PPAGE,KEY_NPAGE,27,9};
1211 int key_mm[]={0,9,'\n',' ',27,'\n'};
1212 unsigned pl_m[]={2,5,3,5,4,5,5,5,6,5,7,5,8,5,9,5,10,5,11,5,12,5,13,5,14,5};
1213 unsigned pl_mm[]={2,27,4,27,6,27,2,5};
1214 int s,i,brol=0;
1215 char **cc=NULL;
1216 unsigned u=0;
1217 struct color *backup_colors;
1218
1219 backup_colors=xcalloc(color_array_members(colors),sizeof(struct color));
1220 cp_color_array(backup_colors,colors);
1221 cc=colors_2_str(colors,&brol);
1222
1223 m.color1=kleur[11];
1224 m.color2=kleur[12];
1225 m.color3=kleur[13];
1226 m.place=pl_m;
1227 m.key=key_m;
1228 m.l=18;
1229 m.hkey=NULL;
1230 m.hplace=NULL;
1231
1232 w=open_cwin(15,42);
1233 setcolors_w=m.w=w;
1234 m.used=m.sel=0;
1235 m.next=m_sub;
1236
1237 mm.w=w;
1238 mm.l=0;
1239 mm.place=pl_mm;
1240 mm.sel=mm.used=0;
1241 mm.amount=number_of_strings(txt_colorm);
1242 mm.txt=xcalloc(mm.amount+2,sizeof(char *));
1243
1244 copy_string_array_pointers(mm.txt,txt_colorm);
1245
1246 mm.color1=kleur[11];
1247 mm.color2=kleur[12];
1248 mm.color3=kleur[13];
1249 mm.color4=kleur[14];
1250 mm.hkey=hkey_colorm;
1251 mm.hplace=hplace_colorm;
1252 mm.key=key_mm;
1253
1254 refresh_setcolors_win(w);
1255
1256 m.txt=cc;
1257 m.sel=u=0;
1258
1259 do {
1260 if (brol<11) {
1261 m.amount=brol;
1262 wmove(w,brol+2,5);
1263 wbkgdset(w,kleur[9]);
1264 for(i=0;i<TYPE_WIDTH;i++) waddch(w,' ');
1265 wrefresh(w);
1266 }
1267 else m.amount=11;
1268
1269 menu_print(&mm);
1270 wrefresh(w);
1271 if(u>brol-1) u=brol-1;
1272 menu_print(&m);
1273 if(brol) i=scroll_menu(&m,brol,NULL,&u);
1274 else i=2;
1275 mm.sel=0;
1276
1277 switch (i) {
1278 case 0 :
1279 open_color_venster(&m,colors,m.sel);
1280 touchwin(bv.win);
1281 wrefresh(bv.win);
1282 touchwin(w);
1283 wrefresh(w);
1284 break;
1285
1286 case 1 :
1287 mm.sel=4;
1288 break;
1289
1290 case 2 :
1291 do {
1292 s=menu_key(&mm);
1293 if ((s==2)&&(mm.sel==mm.amount-1)) break;
1294 } while(s<3);
1295
1296 if (s==4) mm.sel=mm.amount-1;
1297 break;
1298 default:
1299 break;
1300 }
1301
1302 if(i) {
1303 switch(mm.sel) {
1304 case 0 :
1305 open_color_venster(&m,colors,m.sel);
1306 touchwin(bv.win);
1307 wrefresh(bv.win);
1308 touchwin(w);
1309 wrefresh(w);
1310 break;
1311 case 1 :
1312 break;
1313 case 2 :
1314 cp_color_array(colors,backup_colors);
1315 init_colors(colors);
1316 reinit_color_table(colors,color_mode);
1317 set_main_colors();
1318 break;
1319 default:
1320 break;
1321 }
1322 }
1323 touchwin(w);
1324 wrefresh(w);
1325 } while ((mm.sel<1)||(mm.sel==mm.amount-1));
1326
1327 delwin(w);
1328 xfree(backup_colors);
1329 xfree(mm.txt);
1330 }
1331
cp2stdout(FILE * fp)1332 void cp2stdout(FILE *fp)
1333 {
1334 int c;
1335 while(1) {
1336 if ((c=getc(fp))==EOF) break;
1337 fputc(c,stdout);
1338 }
1339 fclose(fp);
1340 fclose(stdout);
1341 }
1342
get_config_file(const char * opentype)1343 FILE * get_config_file (const char *opentype)
1344 {
1345 FILE *fp;
1346 char *c,*file;
1347 if ((c=getenv("HOME"))==NULL) return(NULL);
1348 else {
1349 file=(char *) xmalloc (strlen(c)+strlen("/.lookat")+1);
1350 strcpy(file,c);
1351 strcat(file,"/.lookat");
1352 fp=fopen(file,opentype);
1353 xfree(file);
1354 }
1355 if (fp==NULL) {
1356 fp=fopen(CONFIGFILE,opentype);
1357 }
1358 return (fp);
1359 }
1360
1361 /* ---------------------------------------------------- */
1362 /* Hoofdprg ... */
1363 /* ---------------------------------------------------- */
main(int arg1,char * arg2[])1364 int main(int arg1,char *arg2[])
1365 {
1366 int i,c;
1367 int prev_lines=0;
1368 int prev_cols=0;
1369
1370 WINDOW *sub_win;
1371 char **cp,*sp;
1372 unsigned pl_hm[]={0,1,0,9,0,12,0,15,0,17};
1373 unsigned pl_bm[]={1,1,3,1,5,1};
1374 unsigned pl_gm[]={1,1,2,1,3,1,4,1,5,1,};
1375 unsigned pl_zm[]={1,1,2,1,3,1,};
1376 unsigned pl_om[]={1,1,2,1,4,1,5,1,7,1};
1377 unsigned pl_hlpm[]={1,1,2,1,3,1,};
1378 int key_sub[]={KEY_UP,KEY_DOWN,'\n',KEY_LEFT,KEY_RIGHT,27};
1379 int key_hm[]={KEY_LEFT,KEY_RIGHT,'\n',KEY_UP,KEY_DOWN,27};
1380 MENU hm,bm,gm,zm,om,hlpm;
1381 MENU *sub_hm[]={&bm,&gm,&zm,&om,&hlpm};
1382 MENU *sub_NULL[]={NULL,NULL,NULL,NULL,NULL,NULL};
1383 FILE *fp;
1384 char ***ccc;
1385 s[0]=0;
1386 {
1387 char *c;
1388 char **type=NULL;
1389 int tt=0;
1390 bv.view_exec=xmalloc(sizeof(char ***));
1391 *bv.view_exec=NULL;
1392 if ((fp=get_config_file("r"))==NULL) bv.mode=0;
1393 else {
1394 c=lookat_get_config(fp,"cursor");
1395 if (c!=NULL) {
1396 if (!strcmp(c,"on")) {txt_om1[1]='X';bv.mode=1;}
1397 else bv.mode=0;
1398 xfree(c);
1399 }
1400 c=lookat_get_config(fp,"give_notice");
1401
1402 if (c!=NULL) {
1403 if (!strcmp(c,"off")) txt_om2[1]=' ';
1404 xfree(c);
1405 }
1406
1407
1408 if(fp!=NULL) rewind(fp);
1409
1410 while ((type=lookat_get_next_config(fp))!=NULL) {
1411 if(type[0][0]=='.') {
1412 bv.view_exec=xrealloc(bv.view_exec,sizeof(char ***)*(tt+1));
1413 bv.view_exec[tt]=type;
1414 ++tt;
1415 }
1416 else {
1417
1418 free_string_array(type);
1419
1420 }
1421 }
1422 bv.view_exec=xrealloc(bv.view_exec,sizeof(char ***)*(tt+1));
1423 bv.view_exec[tt]=NULL;
1424 }
1425 }
1426 bv.file=NULL;
1427 bv.filename=NULL;
1428 bv.cmd=1;
1429 bv.load=0;
1430 bv.txt_f_open2=txt_f_open2;
1431 bv.txt_f_open1=txt_f_open1;
1432 bv.txt_f_load=txt_f_laden;
1433 bv.txt_f_fseek=txt_f_fseek;
1434 if (!(initscr())) {
1435 fprintf(stderr,"%s",txt_f_initscr);exit(1);
1436 }
1437
1438 set_memerr(outofmemory);
1439
1440 /*
1441 * Store the LINES and COLS for resize detect
1442 */
1443
1444 prev_lines=LINES;
1445 prev_cols=COLS;
1446
1447 bv.lines=LINES-2;
1448 bv.cols=COLS;
1449 bv.sx=bv.sy=0;
1450 view_par(&bv);
1451 if (!isatty(STDIN_FILENO)) {
1452 if (!isatty(STDOUT_FILENO)) {
1453 cp2stdout(stdin);
1454 fclose(stdin);
1455 fclose(stdout);
1456 wexit(0);
1457 }
1458 bv.cmd=2;
1459 bv.filename=(char *)xmalloc(strlen("STDIN"));
1460 strcpy(bv.filename,"STDIN");
1461 view_load();
1462 freopen("/dev/tty","r",stdin);
1463 arg1=2;
1464 }
1465 else {
1466 if (arg1>=2) {
1467 if (!strcmp(arg2[1],"--help")) {
1468 if(COLS) endwin();
1469 print_strs(stderr,txt_help);
1470 exit(0);
1471 };
1472 if (chdir(arg2[1])==-1) {
1473 bv.filename=(char *)xmalloc(strlen(arg2[1])+1);
1474 strcpy(bv.filename,arg2[1]);
1475 if (isatty(STDOUT_FILENO)) view_load();
1476 else {
1477 FILE *fp;
1478 if ((fp=fopen(bv.filename,"r"))==NULL) {
1479 fprintf(stderr,"%s %s %s",txt_f_open1,bv.filename,txt_f_open2);
1480 fclose(stdout);
1481 wexit(1);
1482 }
1483 cp2stdout(fp);
1484 wexit(0);
1485 }
1486 }
1487 else arg1=1;
1488 }
1489 }
1490
1491
1492 if (!isatty(STDOUT_FILENO)) wexit(1);
1493 bv.cmd=0;
1494 cp=bv.file;bv.x=0;s[0]=0;
1495 win1=open_win(LINES-2,COLS,1,0);
1496 win2=open_win(1,COLS,LINES-1,0);
1497 hm_win=open_win(1,COLS,0,0);
1498 hm.w=hm_win;
1499 keypad(hm.w,TRUE);
1500 start_color();
1501 {
1502 color_array=new_color_table(color_vars);
1503 mono_array=new_color_table(color_vars);
1504
1505 set_color(txt_view,mono_array,A_NORMAL,A_NORMAL,0,1);
1506 set_color(txt_view_bold,mono_array,A_BOLD,A_NORMAL,0,1);
1507 set_color(txt_view_italic,mono_array,A_BOLD,A_NORMAL,0,1);
1508 set_color(txt_main_menu,mono_array,A_REVERSE,A_NORMAL,0,1);
1509 set_color(txt_main_menusel,mono_array,A_NORMAL,A_NORMAL,0,1);
1510 set_color(txt_main_menuhot,mono_array,A_REVERSE,A_BOLD,0,1);
1511 set_color(txt_main_menuhotsel,mono_array,A_BOLD,A_NORMAL,0,1);
1512 set_color(txt_status_bar,mono_array,A_REVERSE,A_NORMAL,0,1);
1513 set_color(txt_win1,mono_array,A_REVERSE,A_NORMAL,0,1);
1514 set_color(txt_win1_edit,mono_array,A_NORMAL,A_NORMAL,0,1);
1515 set_color(txt_win1_menu,mono_array,A_REVERSE,A_NORMAL,0,1);
1516 set_color(txt_win1_menusel,mono_array,A_NORMAL,A_NORMAL,0,1);
1517 set_color(txt_win1_menuhot,mono_array,A_REVERSE,A_BOLD,0,1);
1518 set_color(txt_win1_menuhotsel,mono_array,A_NORMAL,A_BOLD,0,1);
1519 set_color(txt_win2,mono_array,A_REVERSE,A_NORMAL,0,1);
1520 set_color(txt_win2_edit,mono_array,A_NORMAL,A_NORMAL,0,1);
1521 set_color(txt_win2_menu,mono_array,A_REVERSE,A_NORMAL,0,1);
1522 set_color(txt_win2_menusel,mono_array,A_NORMAL,A_NORMAL,0,1);
1523 set_color(txt_win2_menuhot,mono_array,A_REVERSE,A_BOLD,0,1);
1524 set_color(txt_win2_menuhotsel,mono_array,A_NORMAL,A_BOLD,0,1);
1525 set_color(txt_view_found,mono_array,A_REVERSE,A_NORMAL,0,1);
1526
1527
1528
1529 set_color(txt_view,color_array,COLOR_WHITE,COLOR_BLUE,A_BOLD,color_mode);
1530 set_color(txt_view_bold,color_array,COLOR_YELLOW,COLOR_BLUE,A_BOLD,color_mode);
1531 set_color(txt_view_italic,color_array,COLOR_RED,COLOR_BLUE,A_BOLD,color_mode);
1532 set_color(txt_main_menu,color_array,COLOR_BLACK,COLOR_CYAN,A_NORMAL,color_mode);
1533 set_color(txt_main_menusel,color_array,COLOR_WHITE,COLOR_BLACK,A_BOLD,color_mode);
1534 set_color(txt_main_menuhot,color_array,COLOR_YELLOW,COLOR_CYAN,A_BOLD,color_mode);
1535 set_color(txt_main_menuhotsel,color_array,COLOR_YELLOW,COLOR_BLACK,A_BOLD,color_mode);
1536 set_color(txt_status_bar,color_array,COLOR_BLACK,COLOR_CYAN,A_NORMAL,color_mode);
1537 set_color(txt_win1,color_array,COLOR_BLACK,COLOR_CYAN,A_NORMAL,color_mode);
1538 set_color(txt_win1_edit,color_array,COLOR_BLACK,COLOR_WHITE,A_NORMAL,color_mode);
1539 set_color(txt_win1_menu,color_array,COLOR_BLACK,COLOR_CYAN,A_NORMAL,color_mode);
1540 set_color(txt_win1_menusel,color_array,COLOR_WHITE,COLOR_BLACK,A_BOLD,color_mode);
1541 set_color(txt_win1_menuhot,color_array,COLOR_YELLOW,COLOR_CYAN,A_BOLD,color_mode);
1542 set_color(txt_win1_menuhotsel,color_array,COLOR_YELLOW,COLOR_BLACK,A_BOLD,color_mode);
1543 set_color(txt_win2,color_array,COLOR_BLACK,COLOR_WHITE,A_NORMAL,color_mode);
1544 set_color(txt_win2_edit,color_array,COLOR_BLACK,COLOR_CYAN,A_NORMAL,color_mode);
1545 set_color(txt_win2_menu,color_array,COLOR_BLACK,COLOR_WHITE,A_NORMAL,color_mode);
1546 set_color(txt_win2_menusel,color_array,COLOR_WHITE,COLOR_BLACK,A_BOLD,color_mode);
1547 set_color(txt_win2_menuhot,color_array,COLOR_YELLOW,COLOR_WHITE,A_BOLD,color_mode);
1548 set_color(txt_win2_menuhotsel,color_array,COLOR_YELLOW,COLOR_BLACK,A_BOLD,color_mode);
1549 set_color(txt_view_found,color_array,COLOR_BLACK,COLOR_CYAN,A_BOLD,color_mode);
1550
1551 if(!has_colors()) {
1552 colors=mono_array;
1553 color_mode=1;
1554 }
1555 else {
1556 colors=color_array;
1557 color_mode=0;
1558 }
1559
1560 if (fp!=NULL) rewind(fp);
1561 read_config_colors(fp,colors,color_mode);
1562 init_colors(colors);
1563 wbkgd(win1,kleur[1]);
1564 };
1565 if(fp!=NULL) fclose(fp);
1566 wbkgd(win2,kleur[8]);
1567 wbkgd(hm_win,kleur[4]);
1568 signal(SIGINT,SIG_IGN);
1569 signal(SIGTERM,terminate);
1570 freopen("/dev/null","w",stderr);
1571
1572 /* ------------------------------------------------------------------------- */
1573 /* START MENU INIT */
1574 /* ------------------------------------------------------------------------- */
1575 m_jn.txt=txt_jn;
1576 m_jn.hkey=hkey_jn;
1577 m_jn.hplace=hplace_jn;
1578 m_ok.txt=txt_ok;
1579 m_ok.hkey=hkey_ok;
1580 m_ok.hplace=hplace_ok;
1581 hm.sel=0;
1582 hm.used=0;
1583 hm.amount=5;
1584 hm.place=pl_hm;
1585 hm.txt=txt_hm;
1586 hm.key=key_hm;
1587 hm.hkey=NULL;
1588 hm.next=sub_hm;
1589 hm.parent=NULL;
1590 hm.call_open=NULL;
1591 hm.call_close=NULL;
1592 init_pullmenu_colors(&hm,kleur[4],kleur[5],kleur[6],kleur[7]);
1593 hm_menup=&hm;
1594 bm.sel=gm.sel=zm.sel=om.sel=hlpm.sel=0;
1595 bm.place=pl_bm;
1596 gm.place=pl_gm;
1597 zm.place=pl_zm;
1598 om.place=pl_om;
1599 hlpm.place=pl_hlpm;
1600 bm.txt=txt_bm;
1601 gm.txt=txt_gm;
1602 zm.txt=txt_zm;
1603 om.txt=txt_om;
1604 hlpm.txt=txt_hlpm;
1605 bm.next=gm.next=zm.next=om.next=hlpm.next=sub_NULL;
1606 bm.parent=gm.parent=zm.parent=om.parent=hlpm.parent=&hm;
1607 bm.key=gm.key=zm.key=om.key=hlpm.key=key_sub;
1608 bm.call_open=open_bm;
1609 gm.call_open=open_gm;
1610 zm.call_open=open_zm;
1611 om.call_open=open_om;
1612 hlpm.call_open=open_hlpm;
1613 bm.call_close=gm.call_close=zm.call_close=om.call_close=hlpm.call_close=m_close;
1614 bm.w=gm.w=zm.w=om.w=hlpm.w=sub_win;
1615 bm.amount=3;
1616 hlpm.amount=3;
1617 zm.amount=3;
1618 om.amount=5;
1619 gm.amount=5;
1620 hm.l=bm.l=gm.l=zm.l=om.l=hlpm.l=0;
1621 bm.hkey=hkey_bm;
1622 gm.hkey=hkey_gm;
1623 zm.hkey=hkey_zm;
1624 om.hkey=hkey_om;
1625
1626 hlpm.hkey=hkey_hlp;
1627 hm.hplace=hplace_hm;
1628 bm.hplace=hplace_bm;
1629 gm.hplace=hplace_gm;
1630 om.hplace=hplace_om;
1631 zm.hplace=hplace_zm;
1632 hlpm.hplace=hplace_hlpm;
1633
1634 pl_hm[3]=strlen(txt_hm[0])+2;
1635 pl_hm[5]=strlen(txt_hm[0])+strlen(txt_hm[1])+3;
1636 pl_hm[7]=pl_hm[5]+strlen(txt_hm[2])+1;
1637 pl_hm[9]=COLS-strlen(txt_hm[3])-2;
1638 for (i=0;i<bm.amount;i++)
1639 if (strlen(bm.txt[i])>bm.l) bm.l=strlen(bm.txt[i]);
1640 for (i=0;i<gm.amount;i++)
1641 if (strlen(gm.txt[i])>gm.l) gm.l=strlen(gm.txt[i]);
1642 for (i=0;i<zm.amount;i++)
1643 if (strlen(zm.txt[i])>zm.l) zm.l=strlen(zm.txt[i]);
1644 for (i=0;i<om.amount;i++)
1645 if (strlen(om.txt[i])>om.l) om.l=strlen(om.txt[i]);
1646 for (i=0;i<hlpm.amount;i++)
1647 if (strlen(hlpm.txt[i])>hlpm.l) hlpm.l=strlen(hlpm.txt[i]);
1648 /* ------------------------------------------------------------------------- */
1649 /* EINDE MENU INIT */
1650 /* ------------------------------------------------------------------------- */
1651
1652 bv.m_ok=&m_ok;
1653 /* bv.color=kleur; */
1654 bv.win=win1;
1655 menu_print(&hm);
1656 meta(win1,TRUE);
1657 noecho();
1658 cbreak();
1659 leaveok(win1,TRUE);
1660 curs_set(0);
1661 keypad(win1,TRUE);
1662 nodelay(win1,FALSE);
1663 nodelay(hm_win,FALSE);
1664 leaveok(stdscr,TRUE);
1665 leaveok(hm_win,TRUE);
1666 curs_set(0);
1667 keypad(stdscr,TRUE);
1668 nodelay(stdscr,TRUE);
1669 keypad(hm_win,TRUE);
1670 wrefresh(win1);
1671 wrefresh(win2);
1672
1673 zoek_str.c=NULL;
1674 zoek_str.n=32;
1675 zoek_str.m=0;
1676 zoek_str.count=0;
1677 zoek_str.mode=0;
1678 zoek_str.insert=1;
1679
1680 if (arg1<2) {
1681 do {
1682 if ( open_best(1) ) {
1683 delwin(win1);
1684 delwin(win2);
1685 refresh();
1686 wexit(0);
1687 };
1688 } while (bv.file==NULL);
1689 };
1690 bv.y=0;view_refresh();
1691 touchwin(win1);
1692 touchwin(win2);
1693 wrefresh(win1);
1694 wrefresh(win2);
1695
1696 do {
1697 do {
1698 if (bv.mode) {
1699 leaveok(win1,FALSE);
1700 curs_set(1);
1701 }
1702 else {
1703 leaveok(win1,TRUE);
1704 curs_set(0);
1705 }
1706 werase(win2);
1707 mvwprintw(win2,0,0,"%s %4d / %4d %s %4d %s %ld",
1708 txt_lijn,view_gety(),bv.y_max,txt_kol,view_getx(),txt_Grootte,bv.size);
1709 mvwprintw(win2,0,COLS-strlen(bv.filename)-3,"%s",bv.filename);
1710 touchwin(win1);
1711 touchwin(win2);
1712 wrefresh(win2);
1713 wrefresh(win1);
1714
1715 if ( prev_cols != COLS && prev_lines != LINES ) {
1716
1717 c='r';
1718
1719 }
1720 else {
1721 c=wgetch(win1);
1722
1723 }
1724 if ((c==KEY_F(9))||(c==27)) {
1725 int m_sel=0;
1726 if (c==27) {
1727 nodelay(win1,TRUE);
1728 c=wgetch(win1);
1729 if (c==ERR) c=27;
1730 else c=tolower(c);
1731 nodelay(win1,FALSE);
1732 if (c==sel_bm) m_sel=1;
1733 else
1734 if (c==sel_gm) m_sel=2;
1735 else
1736 if (c==sel_zm) m_sel=3;
1737 else
1738 if (c==sel_om) m_sel=4;
1739 else
1740 if (c==sel_hm) m_sel=5;
1741 else m_sel=6;
1742 };
1743 if (m_sel<6) {
1744 c=0;
1745 werase(win2);
1746 mvwaddstr(win2,0,0,txt_maak_sel);
1747 wrefresh(win2);
1748 for (i=0;i<4;i++) sub_hm[i]->used=0;
1749 menu_pull(&hm,m_sel);
1750 for (i=0;i<hm.amount;i++) if (sub_hm[i]->used) break;
1751 menu_print(&hm);
1752 werase(win2);
1753 wrefresh(win2);
1754 if (hm.used==2) c=0;
1755 else {
1756 switch (hm.sel) {
1757 case 0: switch (sub_hm[i]->sel) {
1758 case 0: c='o';
1759 break;
1760 case 1: c='r';
1761 break;
1762 case 2: c='q';
1763 break;
1764 default: break;
1765 }
1766 break;
1767 case 1: switch (sub_hm[i]->sel) {
1768 case 0: c='t';
1769 break;
1770 case 1: c='e';
1771 break;
1772 case 2: ga_lijn();
1773 break;
1774 case 3: c=KEY_END;
1775 break;
1776 case 4: c=KEY_HOME;
1777 break;
1778 default: break;
1779 }
1780 break;
1781 case 2: switch (sub_hm[i]->sel) {
1782 case 0: c='z';
1783 break;
1784 case 1: zoek_tekst(1);
1785 c=0;
1786 break;
1787 case 2: c=KEY_F(3);
1788 break;
1789 }
1790 break;
1791 case 3: switch (sub_hm[i]->sel) {
1792 case 0: if (bv.mode) {
1793 bv.mode=0;
1794 txt_om1[1]=txt_spacie[0];
1795 }
1796 else {
1797 bv.mode=1;
1798 txt_om1[1]=txt_X[0];
1799 bv.y-=bv.lines;
1800 view_refresh();
1801 }
1802 break;
1803 case 1: if (txt_om2[1]==' ') txt_om2[1]='X';
1804 else txt_om2[1]=' ';
1805 break;
1806 case 2: set_types();
1807 break;
1808 case 3: set_colors();
1809 break;
1810 case 4: if ((fp=get_config_file("w"))==NULL) {
1811 #ifdef _NED
1812 open_okwin(7,40,&m_ok,txt_f_writecfg,win1);touchwin(win1);wrefresh(win1);
1813 #endif
1814 #ifdef _ENG
1815 open_okwin(6,40,&m_ok,txt_f_writecfg,win1);touchwin(win1);wrefresh(win1);
1816 #endif
1817
1818 break;
1819 }
1820 if (bv.mode) save_config(fp,"cursor","on");
1821 else save_config(fp,"cursor","off");
1822 if (txt_om2[1]=='X') save_config(fp,"give_notice","on");
1823 else save_config(fp,"give_notice","off");
1824 ccc=bv.view_exec;
1825 while(*ccc) {
1826 sp=xmalloc(strlen(ccc[0][1])+3);
1827 strcpy(sp,"\"");
1828 strcat(sp,ccc[0][1]);
1829 strcat(sp,"\"");
1830 save_config(fp,ccc[0][0],sp);
1831 ++ccc;
1832 }
1833 save_colors(fp,color_array,0);
1834 save_colors(fp,mono_array,1);
1835 fclose(fp);
1836 break;
1837 };
1838 break;
1839 case 4:
1840 switch (sub_hm[i]->sel) {
1841 case 0: c='?';
1842 break;
1843 case 1:
1844 open_okwin(22,60,&m_ok,txt_t,win1);
1845 break;
1846 case 2: open_animwin(12,60,&m_ok,txt_over,txt_bedank,win1,0);
1847 break;
1848 default:break;
1849 }
1850 break;
1851 default: c=0;
1852 break;
1853 }
1854 }
1855 }
1856 }
1857 switch (c) {
1858 case '<' :
1859 case 't' :
1860 case 'T' : bv.y=0;bv.x=0;view_refresh();
1861 break;
1862 case 'b' :
1863 case 'B' :
1864 case '>' :
1865 case 'E' :
1866 case 'e' : bv.y=bv.y_max;bv.x=0;view_refresh();break;
1867 case '\n' :
1868 case 14 :
1869 case 'j' :
1870 case KEY_DOWN : view_down();
1871 break;
1872 case 16 :
1873 case 'k' :
1874 case KEY_UP : view_up();
1875 break;
1876 case ' ' :
1877 case 'd' :
1878 case 'D' :
1879 case KEY_NPAGE: view_refresh();
1880 break;
1881 case 'u' :
1882 case 'U' :
1883 case KEY_PPAGE: view_previous();
1884 break;
1885 case 6 :
1886 case 'L' :
1887 case 'l' :
1888 case KEY_RIGHT: view_right();
1889 break;
1890 case 2 :
1891 case KEY_LEFT : view_left();
1892 break;
1893 case 'g' :
1894 case 'G' : ga_lijn();
1895 break;
1896 case KEY_F(7) :
1897 case '/' :
1898 case 'z' :
1899 case 'Z' :
1900 case 's' :
1901 case 'S' :
1902 case 'F' :
1903 case 'f' : zoek_tekst(0);
1904 break;
1905 case 'n' :
1906 case '\\' :
1907 case 'v' :
1908 case 'V' :
1909 case 'c' :
1910 case 'C' :
1911 case KEY_F(3) : if (zoek_str.c) zoek((view_gety()-1),1);
1912 else zoek_tekst(0);
1913 break;
1914 case '0' :
1915 case '^' :
1916 case KEY_HOME : bv.sx=bv.x=0;
1917 bv.y-=(LINES-2);
1918 view_refresh();
1919 break;
1920 case '$' :
1921 case KEY_END : bv.y-=(LINES-2);
1922 if (!bv.mode) bv.x=view_strlen(bv.file[bv.y]);
1923 else bv.x=view_strlen(bv.file[bv.y+bv.sy]);
1924 if (bv.x<COLS) bv.x=0;
1925 else bv.x-=COLS;
1926 bv.sx=view_strlen(bv.file[bv.y+bv.sy])-bv.x-1;
1927 view_refresh();
1928 break;
1929 case 'o' :
1930 case 'O' :
1931 open_best(0);
1932 cp=bv.file;bv.x=0;s[0]=0;
1933 break;
1934 case KEY_RESIZE:
1935 case 12 :
1936 case 'R' :
1937 case 'r' : {
1938
1939 int current_y=view_gety()-1;
1940
1941 /*
1942 * Reinit hm_win and hm_menu
1943 */
1944
1945 wresize(hm_win,1,COLS);
1946 werase(hm_win);
1947 pl_hm[9]=COLS-strlen(txt_hm[3])-2;
1948 menu_print(&hm);
1949 touchwin(hm_win);
1950 wrefresh(hm_win);
1951
1952 /*
1953 * Reinit win2
1954 */
1955
1956 wresize(win2,1,COLS);
1957 mvwin(win2,LINES-1,0);
1958 werase(win2);
1959 touchwin(win2);
1960 wrefresh(win2);
1961
1962 /*
1963 * Reinit & Refresh view
1964 */
1965
1966 wresize(win1,LINES-2,COLS);
1967 werase(win1);
1968
1969 bv.lines=LINES-2;
1970 bv.cols=COLS;
1971 view_refresh();
1972
1973 view_sety(current_y);
1974
1975 view_refresh();
1976
1977 /*
1978 * refresh curscr
1979 */
1980
1981 wrefresh(curscr);
1982
1983 /*
1984 * reset previous COLS and LINES
1985 */
1986
1987 prev_cols=COLS;
1988 prev_lines=LINES;
1989
1990 }
1991 break;
1992 case 'h' :
1993 case 'H' :
1994 case '?' :
1995 case KEY_F(1) : { char *vb;
1996 vb=bv.filename;
1997 bv.filename=xmalloc(strlen(DOCFILE)+1);
1998 strcpy(bv.filename,DOCFILE);
1999 if (view_load()) {
2000 xfree(bv.filename);
2001 bv.filename=vb;
2002 }
2003 else {
2004 view_refresh();
2005 if (free_vb) xfree(vb);
2006 }
2007 };
2008 break;
2009 }
2010 } while ((c!='Q')&&(c!='q')&&(c!=27)&&(c!=KEY_F(10)));
2011 } while (!exit_lookat(win1));
2012
2013
2014 view_free();
2015 touchwin(win1);
2016 touchwin(win2);
2017 wrefresh(win1);
2018 wrefresh(win2);
2019 delwin(win1);
2020 delwin(win2);
2021 endwin();
2022
2023 exit(0);
2024
2025 }
2026
2027