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