1583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o/*
2583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o
3583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o/usr/src/ext2ed/win.c
4583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o
5583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'oA part of the extended file system 2 disk editor.
6583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o
7583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o--------------------------------------------------------
8583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'oWindow management - Interfacing with the ncurses library
9583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o--------------------------------------------------------
10583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o
11583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'oFirst written on: April 17 1995
120f31c737dbf999c90a0842e6a499416b8e1f0cb4Theodore Ts'oModified on : April 05 2001 Christian.Bac@int-evry.fr
130f31c737dbf999c90a0842e6a499416b8e1f0cb4Theodore Ts'oit looks like readline does not like that initscr decides to set the tty to
140f31c737dbf999c90a0842e6a499416b8e1f0cb4Theodore Ts'onoecho.
15583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o
16583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'oCopyright (C) 1995 Gadi Oxman
17583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o
18583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o*/
19583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o
20583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o#include <stdio.h>
21583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o#include <stdlib.h>
22583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o#include <string.h>
230f31c737dbf999c90a0842e6a499416b8e1f0cb4Theodore Ts'o#include <termios.h>
240f31c737dbf999c90a0842e6a499416b8e1f0cb4Theodore Ts'o#include <unistd.h>
255e941d2979aeab97929de6c0682425dead3bae74Theodore Ts'o#include <sys/ioctl.h>
26583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o
27583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o#include "ext2ed.h"
287c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o#include "../version.h"
29583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o
30583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'ostruct struct_pad_info show_pad_info;
315e941d2979aeab97929de6c0682425dead3bae74Theodore Ts'oWINDOW *title_win,*show_win,*command_win,*mt_win1,*mt_win2,*show_pad;
32583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o
33efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o/* to remember configuration after initscr
340f31c737dbf999c90a0842e6a499416b8e1f0cb4Theodore Ts'o * and modify it
350f31c737dbf999c90a0842e6a499416b8e1f0cb4Theodore Ts'o */
365e941d2979aeab97929de6c0682425dead3bae74Theodore Ts'ostruct termios termioInit, termioCurrent;
370f31c737dbf999c90a0842e6a499416b8e1f0cb4Theodore Ts'o
385e941d2979aeab97929de6c0682425dead3bae74Theodore Ts'ovoid draw_title_win (void)
395e941d2979aeab97929de6c0682425dead3bae74Theodore Ts'o{
405e941d2979aeab97929de6c0682425dead3bae74Theodore Ts'o	char title_string [128];
41583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o
425e941d2979aeab97929de6c0682425dead3bae74Theodore Ts'o	werase(title_win);
435e941d2979aeab97929de6c0682425dead3bae74Theodore Ts'o	box (title_win,0,0);
445e941d2979aeab97929de6c0682425dead3bae74Theodore Ts'o	sprintf (title_string,"EXT2ED - Extended-2 File System editor ver %s (%s)", E2FSPROGS_VERSION, E2FSPROGS_DATE);
455e941d2979aeab97929de6c0682425dead3bae74Theodore Ts'o	wmove (title_win,TITLE_WIN_LINES/2,(COLS-strlen (title_string))/2);
465e941d2979aeab97929de6c0682425dead3bae74Theodore Ts'o	wprintw (title_win,title_string);
475e941d2979aeab97929de6c0682425dead3bae74Theodore Ts'o	wrefresh(title_win);
485e941d2979aeab97929de6c0682425dead3bae74Theodore Ts'o}
495e941d2979aeab97929de6c0682425dead3bae74Theodore Ts'o
505e941d2979aeab97929de6c0682425dead3bae74Theodore Ts'ovoid setup_show_win(void)
515e941d2979aeab97929de6c0682425dead3bae74Theodore Ts'o{
525e941d2979aeab97929de6c0682425dead3bae74Theodore Ts'o	wbkgdset (show_win,A_REVERSE);werase (show_win);
535e941d2979aeab97929de6c0682425dead3bae74Theodore Ts'o	show_pad_info.line=0;
545e941d2979aeab97929de6c0682425dead3bae74Theodore Ts'o	show_pad_info.col=0;
555e941d2979aeab97929de6c0682425dead3bae74Theodore Ts'o	show_pad_info.display_lines=LINES-TITLE_WIN_LINES-SHOW_WIN_LINES-COMMAND_WIN_LINES-2;
565e941d2979aeab97929de6c0682425dead3bae74Theodore Ts'o	show_pad_info.display_cols=COLS;
575e941d2979aeab97929de6c0682425dead3bae74Theodore Ts'o	show_pad_info.max_line=show_pad_info.display_lines-1;show_pad_info.max_col=show_pad_info.display_cols-1;
585e941d2979aeab97929de6c0682425dead3bae74Theodore Ts'o	show_pad_info.disable_output=0;
59efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o}
605e941d2979aeab97929de6c0682425dead3bae74Theodore Ts'o
615e941d2979aeab97929de6c0682425dead3bae74Theodore Ts'ovoid init_windows (void)
62583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o{
63583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o	initscr ();
640f31c737dbf999c90a0842e6a499416b8e1f0cb4Theodore Ts'o	tcgetattr(0,&termioInit); /* save initial config */
650f31c737dbf999c90a0842e6a499416b8e1f0cb4Theodore Ts'o	termioCurrent = termioInit;
660f31c737dbf999c90a0842e6a499416b8e1f0cb4Theodore Ts'o	termioCurrent.c_lflag |= ECHO; /* set echo on */
670f31c737dbf999c90a0842e6a499416b8e1f0cb4Theodore Ts'o	tcsetattr(0,TCSANOW,&termioCurrent);
68efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o
69583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o	if (LINES<TITLE_WIN_LINES+SHOW_WIN_LINES+COMMAND_WIN_LINES+3) {
70583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o		printf ("Sorry, your terminal screen is too small\n");
71583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o		printf ("Error - Can not initialize windows\n");
72583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o		exit (1);
73583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o	}
74583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o
75583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o	title_win=newwin (TITLE_WIN_LINES,COLS,0,0);
76583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o	show_win=newwin (SHOW_WIN_LINES,COLS,TITLE_WIN_LINES,0);
77583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o	show_pad=newpad (SHOW_PAD_LINES,SHOW_PAD_COLS);
785e941d2979aeab97929de6c0682425dead3bae74Theodore Ts'o	mt_win1=newwin (1,COLS,TITLE_WIN_LINES+SHOW_WIN_LINES,0);
795e941d2979aeab97929de6c0682425dead3bae74Theodore Ts'o	mt_win2=newwin (1,COLS,LINES-COMMAND_WIN_LINES-1,0);
80583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o	command_win=newwin (COMMAND_WIN_LINES,COLS,LINES-COMMAND_WIN_LINES,0);
81583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o
82583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o	if (title_win==NULL || show_win==NULL || show_pad==NULL || command_win==NULL) {
83583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o		printf ("Error - Not enough memory - Can not initialize windows\n");exit (1);
84583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o	}
85583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o
865e941d2979aeab97929de6c0682425dead3bae74Theodore Ts'o	draw_title_win();
875e941d2979aeab97929de6c0682425dead3bae74Theodore Ts'o
885e941d2979aeab97929de6c0682425dead3bae74Theodore Ts'o	setup_show_win();
89583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o
90583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o	scrollok (command_win,TRUE);
91583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o
925e941d2979aeab97929de6c0682425dead3bae74Theodore Ts'o	refresh_title_win ();
935e941d2979aeab97929de6c0682425dead3bae74Theodore Ts'o	refresh_show_win ();
945e941d2979aeab97929de6c0682425dead3bae74Theodore Ts'o	refresh_show_pad();
955e941d2979aeab97929de6c0682425dead3bae74Theodore Ts'o	refresh_command_win ();
965e941d2979aeab97929de6c0682425dead3bae74Theodore Ts'o	wrefresh(mt_win1);
975e941d2979aeab97929de6c0682425dead3bae74Theodore Ts'o	wrefresh(mt_win2);
98583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o}
99583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o
100583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'ovoid refresh_title_win (void)
101583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o{
102583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o	wrefresh (title_win);
103583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o}
104583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o
105583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'ovoid refresh_show_win (void)
106583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o{
107583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o	int current_page,total_pages;
108efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o
109583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o	current_page=show_pad_info.line/show_pad_info.display_lines+1;
110583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o	if (show_pad_info.line%show_pad_info.display_lines)
111583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o		current_page++;
112583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o	total_pages=show_pad_info.max_line/show_pad_info.display_lines+1;
113583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o
114583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o	wmove (show_win,2,COLS-18);
115583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o	wprintw (show_win,"Page %d of %d\n",current_page,total_pages);
116583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o
117583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o	wmove (show_win,2,COLS-18);
118583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o	wrefresh (show_win);
119583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o}
120583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o
121583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o
122583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'ovoid refresh_show_pad (void)
123583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o
124583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o{
125583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o	int left,top,right,bottom,i;
126efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o
127583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o	if (show_pad_info.disable_output)
128583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o		return;
129efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o
130583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o	if (show_pad_info.max_line < show_pad_info.display_lines-1) {
131583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o		for (i=show_pad_info.max_line+1;i<show_pad_info.display_lines;i++) {
132583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o			wmove (show_pad,i,0);wprintw (show_pad,"\n");
133583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o		}
134583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o	}
135583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o	left=0;right=show_pad_info.display_cols-1;
136583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o	top=TITLE_WIN_LINES+SHOW_WIN_LINES+1;bottom=top+show_pad_info.display_lines-1;
137583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o
138583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o	if (show_pad_info.line > show_pad_info.max_line-show_pad_info.display_lines+1)
139583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o		show_pad_info.line=show_pad_info.max_line-show_pad_info.display_lines+1;
140583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o
141583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o	if (show_pad_info.line < 0)
142583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o		show_pad_info.line=0;
143583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o
144583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o#ifdef OLD_NCURSES
145583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o	prefresh (show_pad,show_pad_info.line,show_pad_info.col,top,left,show_pad_info.display_lines-1,show_pad_info.display_cols-1);
146583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o#else
147583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o	prefresh (show_pad,show_pad_info.line,show_pad_info.col,top,left,top+show_pad_info.display_lines-1,left+show_pad_info.display_cols-1);
148583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o#endif
149583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o}
150583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o
151583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'ovoid refresh_command_win (void)
152583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o{
153583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o	wrefresh (command_win);
154583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o}
155583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o
156583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'ovoid close_windows (void)
157583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o{
1580f31c737dbf999c90a0842e6a499416b8e1f0cb4Theodore Ts'o//	echo ();
1590f31c737dbf999c90a0842e6a499416b8e1f0cb4Theodore Ts'o	tcsetattr(0,TCSANOW,&termioInit);
160efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o
161583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o	delwin (title_win);
162583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o	delwin (command_win);
163583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o	delwin (show_win);
164583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o	delwin (show_pad);
165efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o
166583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o	endwin ();
167583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o}
168583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o
169583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'ovoid show_info (void)
170583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o{
171583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o	int block_num,block_offset;
172efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o
173583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o	block_num=device_offset/file_system_info.block_size;
174583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o	block_offset=device_offset%file_system_info.block_size;
175583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o
176583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o	wmove (show_win,0,0);
177583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o	wprintw (show_win,"Offset %-3ld in block %ld. ",block_offset,block_num);
178583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o	if (current_type != NULL)
179583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o		wprintw (show_win,"Type: %s\n",current_type->name);
180583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o	else
181583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o		wprintw (show_win,"Type: %s\n","none");
182583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o
183583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o	refresh_show_win ();
184583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o}
185583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o
186583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o
187583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'ovoid redraw_all (void)
188583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o{
1895e941d2979aeab97929de6c0682425dead3bae74Theodore Ts'o	int min_lines = TITLE_WIN_LINES+SHOW_WIN_LINES+COMMAND_WIN_LINES+3;
1905e941d2979aeab97929de6c0682425dead3bae74Theodore Ts'o	struct winsize ws;
1915e941d2979aeab97929de6c0682425dead3bae74Theodore Ts'o	int	save_col, save_lines;
1925e941d2979aeab97929de6c0682425dead3bae74Theodore Ts'o
1935e941d2979aeab97929de6c0682425dead3bae74Theodore Ts'o	/* get the size of the terminal connected to stdout */
1945e941d2979aeab97929de6c0682425dead3bae74Theodore Ts'o	ioctl(1, TIOCGWINSZ, &ws);
1955e941d2979aeab97929de6c0682425dead3bae74Theodore Ts'o	/*
1965e941d2979aeab97929de6c0682425dead3bae74Theodore Ts'o	 * Do it again because GDB doesn't stop before the first ioctl
1975e941d2979aeab97929de6c0682425dead3bae74Theodore Ts'o	 * call, we want an up-to-date size when we're
1985e941d2979aeab97929de6c0682425dead3bae74Theodore Ts'o	 * single-stepping.
1995e941d2979aeab97929de6c0682425dead3bae74Theodore Ts'o	 */
2005e941d2979aeab97929de6c0682425dead3bae74Theodore Ts'o	if (ioctl(1, TIOCGWINSZ, &ws) == 0) {
2015e941d2979aeab97929de6c0682425dead3bae74Theodore Ts'o		if (ws.ws_row < min_lines)
2025e941d2979aeab97929de6c0682425dead3bae74Theodore Ts'o			ws.ws_row = min_lines;
2035e941d2979aeab97929de6c0682425dead3bae74Theodore Ts'o		if ((ws.ws_row != LINES) || (ws.ws_col != COLS)) {
2045e941d2979aeab97929de6c0682425dead3bae74Theodore Ts'o			wmove (show_win,2,COLS-18);
2055e941d2979aeab97929de6c0682425dead3bae74Theodore Ts'o			wclrtoeol(show_win);
2065e941d2979aeab97929de6c0682425dead3bae74Theodore Ts'o			wrefresh(show_win);
2075e941d2979aeab97929de6c0682425dead3bae74Theodore Ts'o			resizeterm(ws.ws_row, ws.ws_col);
2085e941d2979aeab97929de6c0682425dead3bae74Theodore Ts'o			wresize(title_win, TITLE_WIN_LINES,COLS);
2095e941d2979aeab97929de6c0682425dead3bae74Theodore Ts'o			wresize(show_win, SHOW_WIN_LINES,COLS);
2105e941d2979aeab97929de6c0682425dead3bae74Theodore Ts'o			wresize(command_win, COMMAND_WIN_LINES,COLS);
2115e941d2979aeab97929de6c0682425dead3bae74Theodore Ts'o			wresize(mt_win1, 1,COLS);
2125e941d2979aeab97929de6c0682425dead3bae74Theodore Ts'o			wresize(mt_win2, 1,COLS);
2135e941d2979aeab97929de6c0682425dead3bae74Theodore Ts'o			mvwin(mt_win2, LINES-COMMAND_WIN_LINES-1,0);
2145e941d2979aeab97929de6c0682425dead3bae74Theodore Ts'o			mvwin(command_win, LINES-COMMAND_WIN_LINES,0);
2155e941d2979aeab97929de6c0682425dead3bae74Theodore Ts'o			draw_title_win();
2165e941d2979aeab97929de6c0682425dead3bae74Theodore Ts'o			show_pad_info.display_lines=LINES-TITLE_WIN_LINES-SHOW_WIN_LINES-COMMAND_WIN_LINES-2;
2175e941d2979aeab97929de6c0682425dead3bae74Theodore Ts'o			show_pad_info.display_cols=COLS;
2185e941d2979aeab97929de6c0682425dead3bae74Theodore Ts'o		}
2195e941d2979aeab97929de6c0682425dead3bae74Theodore Ts'o	}
2205e941d2979aeab97929de6c0682425dead3bae74Theodore Ts'o	clearok(title_win, 1);
2215e941d2979aeab97929de6c0682425dead3bae74Theodore Ts'o	clearok(show_win, 1);
2225e941d2979aeab97929de6c0682425dead3bae74Theodore Ts'o	clearok(command_win, 1);
2235e941d2979aeab97929de6c0682425dead3bae74Theodore Ts'o	clearok(mt_win1, 1);
2245e941d2979aeab97929de6c0682425dead3bae74Theodore Ts'o	clearok(mt_win2, 1);
2255e941d2979aeab97929de6c0682425dead3bae74Theodore Ts'o	wrefresh(mt_win1);
2265e941d2979aeab97929de6c0682425dead3bae74Theodore Ts'o	wrefresh(mt_win2);
2275e941d2979aeab97929de6c0682425dead3bae74Theodore Ts'o	refresh_show_pad();
2285e941d2979aeab97929de6c0682425dead3bae74Theodore Ts'o	refresh_show_win();
2295e941d2979aeab97929de6c0682425dead3bae74Theodore Ts'o	refresh_title_win ();
2305e941d2979aeab97929de6c0682425dead3bae74Theodore Ts'o	refresh_command_win ();
2310f31c737dbf999c90a0842e6a499416b8e1f0cb4Theodore Ts'o}
232