OSDN Git Service

Checked in changes from ext2ed version 0.2.
[android-x86/external-e2fsprogs.git] / ext2ed / win.c
1 /*
2
3 /usr/src/ext2ed/win.c
4
5 A part of the extended file system 2 disk editor.
6
7 --------------------------------------------------------
8 Window management - Interfacing with the ncurses library
9 --------------------------------------------------------
10
11 First written on: April 17 1995
12 Modified on : April 05 2001 Christian.Bac@int-evry.fr
13 it looks like readline does not like that initscr decides to set the tty to
14 noecho.
15
16 Copyright (C) 1995 Gadi Oxman
17
18 */
19
20 #include <stdio.h>
21 #include <stdlib.h>
22 #include <string.h>
23 #include <termios.h>
24 #include <unistd.h>
25
26 #include "ext2ed.h"
27
28 struct struct_pad_info show_pad_info;
29 WINDOW *title_win,*show_win,*command_win,*show_pad;
30
31 /* to remember configuration after initscr 
32  * and modify it
33  */
34 struct termios termioInit, termioCurrent; 
35
36 void init_windows (void)
37
38 {
39         char title_string [80];
40         
41         initscr ();
42         tcgetattr(0,&termioInit); /* save initial config */
43         termioCurrent = termioInit;
44         termioCurrent.c_lflag |= ECHO; /* set echo on */
45         tcsetattr(0,TCSANOW,&termioCurrent);
46         
47         if (LINES<TITLE_WIN_LINES+SHOW_WIN_LINES+COMMAND_WIN_LINES+3) {
48                 printf ("Sorry, your terminal screen is too small\n");
49                 printf ("Error - Can not initialize windows\n");
50                 exit (1);
51         }
52
53         title_win=newwin (TITLE_WIN_LINES,COLS,0,0);
54         show_win=newwin (SHOW_WIN_LINES,COLS,TITLE_WIN_LINES,0);
55         show_pad=newpad (SHOW_PAD_LINES,SHOW_PAD_COLS);
56         command_win=newwin (COMMAND_WIN_LINES,COLS,LINES-COMMAND_WIN_LINES,0);
57
58         if (title_win==NULL || show_win==NULL || show_pad==NULL || command_win==NULL) {
59                 printf ("Error - Not enough memory - Can not initialize windows\n");exit (1);
60         }
61
62         box (title_win,0,0);
63         sprintf (title_string,"EXT2ED - Extended-2 File System editor ver %d.%d (%s)",version_major,version_minor,revision_date);
64         wmove (title_win,TITLE_WIN_LINES/2,(COLS-strlen (title_string))/2);
65         wprintw (title_win,title_string);
66
67 #ifdef  OLD_NCURSES
68         wattrset (show_win,A_NORMAL);werase (show_win);
69 #else
70         wbkgdset (show_win,A_REVERSE);werase (show_win);
71 #endif
72         show_pad_info.line=0;show_pad_info.col=0;
73         show_pad_info.display_lines=LINES-TITLE_WIN_LINES-SHOW_WIN_LINES-COMMAND_WIN_LINES-2;
74         show_pad_info.display_cols=COLS;
75         show_pad_info.max_line=show_pad_info.display_lines-1;show_pad_info.max_col=show_pad_info.display_cols-1;
76         show_pad_info.disable_output=0;
77         
78         scrollok (command_win,TRUE);
79
80         refresh_title_win ();refresh_show_win ();refresh_show_pad ();refresh_command_win ();
81 }
82
83 void refresh_title_win (void)
84
85 {
86         wrefresh (title_win);
87 }
88
89 void refresh_show_win (void)
90
91 {
92         int current_page,total_pages;
93         
94         current_page=show_pad_info.line/show_pad_info.display_lines+1;
95         if (show_pad_info.line%show_pad_info.display_lines)
96                 current_page++;
97         total_pages=show_pad_info.max_line/show_pad_info.display_lines+1;
98
99         wmove (show_win,2,COLS-18);
100         wprintw (show_win,"Page %d of %d\n",current_page,total_pages);
101
102         wmove (show_win,2,COLS-18);
103         wrefresh (show_win);
104 }
105
106
107 void refresh_show_pad (void)
108
109 {
110         int left,top,right,bottom,i;
111         
112         if (show_pad_info.disable_output)
113                 return;
114                 
115         if (show_pad_info.max_line < show_pad_info.display_lines-1) {
116                 for (i=show_pad_info.max_line+1;i<show_pad_info.display_lines;i++) {
117                         wmove (show_pad,i,0);wprintw (show_pad,"\n");
118                 }
119         }
120         left=0;right=show_pad_info.display_cols-1;
121         top=TITLE_WIN_LINES+SHOW_WIN_LINES+1;bottom=top+show_pad_info.display_lines-1;
122
123         if (show_pad_info.line > show_pad_info.max_line-show_pad_info.display_lines+1)
124                 show_pad_info.line=show_pad_info.max_line-show_pad_info.display_lines+1;
125
126         if (show_pad_info.line < 0)
127                 show_pad_info.line=0;
128
129 #ifdef OLD_NCURSES
130         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);
131 #else
132         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);
133 #endif
134 }
135
136 void refresh_command_win (void)
137
138 {
139         wrefresh (command_win);
140 }
141
142 void close_windows (void)
143
144 {
145 //      echo ();
146         tcsetattr(0,TCSANOW,&termioInit);
147         
148         delwin (title_win);
149         delwin (command_win);
150         delwin (show_win);
151         delwin (show_pad);
152         
153         endwin ();
154 }
155
156 void show_info (void)
157
158 {
159         int block_num,block_offset;
160         
161         block_num=device_offset/file_system_info.block_size;
162         block_offset=device_offset%file_system_info.block_size;
163
164         wmove (show_win,0,0);
165         wprintw (show_win,"Offset %-3ld in block %ld. ",block_offset,block_num);
166         if (current_type != NULL)
167                 wprintw (show_win,"Type: %s\n",current_type->name);
168         else
169                 wprintw (show_win,"Type: %s\n","none");
170
171         refresh_show_win ();
172 }
173
174
175 void redraw_all (void)
176
177 {
178         close_windows ();
179         init_windows ();
180         
181         wmove (command_win,0,0);
182         mvcur (-1,-1,LINES-COMMAND_WIN_LINES,0);
183         
184 }