Whamcloud - gitweb
Check in ext2ed version 0.1
[tools/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
13 Copyright (C) 1995 Gadi Oxman
14
15 */
16
17 #include <stdio.h>
18 #include <stdlib.h>
19 #include <string.h>
20
21 #include "ext2ed.h"
22
23 struct struct_pad_info show_pad_info;
24 WINDOW *title_win,*show_win,*command_win,*show_pad;
25
26 void init_windows (void)
27
28 {
29         char title_string [80];
30         
31         initscr ();
32         
33         if (LINES<TITLE_WIN_LINES+SHOW_WIN_LINES+COMMAND_WIN_LINES+3) {
34                 printf ("Sorry, your terminal screen is too small\n");
35                 printf ("Error - Can not initialize windows\n");
36                 exit (1);
37         }
38
39         title_win=newwin (TITLE_WIN_LINES,COLS,0,0);
40         show_win=newwin (SHOW_WIN_LINES,COLS,TITLE_WIN_LINES,0);
41         show_pad=newpad (SHOW_PAD_LINES,SHOW_PAD_COLS);
42         command_win=newwin (COMMAND_WIN_LINES,COLS,LINES-COMMAND_WIN_LINES,0);
43
44         if (title_win==NULL || show_win==NULL || show_pad==NULL || command_win==NULL) {
45                 printf ("Error - Not enough memory - Can not initialize windows\n");exit (1);
46         }
47
48         box (title_win,0,0);
49         sprintf (title_string,"EXT2ED - Extended-2 File System editor ver %d.%d (%s)",version_major,version_minor,revision_date);
50         wmove (title_win,TITLE_WIN_LINES/2,(COLS-strlen (title_string))/2);
51         wprintw (title_win,title_string);
52
53 #ifdef  OLD_NCURSES
54         wattrset (show_win,A_NORMAL);werase (show_win);
55 #else
56         wbkgdset (show_win,A_REVERSE);werase (show_win);
57 #endif
58         show_pad_info.line=0;show_pad_info.col=0;
59         show_pad_info.display_lines=LINES-TITLE_WIN_LINES-SHOW_WIN_LINES-COMMAND_WIN_LINES-2;
60         show_pad_info.display_cols=COLS;
61         show_pad_info.max_line=show_pad_info.display_lines-1;show_pad_info.max_col=show_pad_info.display_cols-1;
62         show_pad_info.disable_output=0;
63         
64         scrollok (command_win,TRUE);
65
66         refresh_title_win ();refresh_show_win ();refresh_show_pad ();refresh_command_win ();
67 }
68
69 void refresh_title_win (void)
70
71 {
72         wrefresh (title_win);
73 }
74
75 void refresh_show_win (void)
76
77 {
78         int current_page,total_pages;
79         
80         current_page=show_pad_info.line/show_pad_info.display_lines+1;
81         if (show_pad_info.line%show_pad_info.display_lines)
82                 current_page++;
83         total_pages=show_pad_info.max_line/show_pad_info.display_lines+1;
84
85         wmove (show_win,2,COLS-18);
86         wprintw (show_win,"Page %d of %d\n",current_page,total_pages);
87
88         wmove (show_win,2,COLS-18);
89         wrefresh (show_win);
90 }
91
92
93 void refresh_show_pad (void)
94
95 {
96         int left,top,right,bottom,i;
97         
98         if (show_pad_info.disable_output)
99                 return;
100                 
101         if (show_pad_info.max_line < show_pad_info.display_lines-1) {
102                 for (i=show_pad_info.max_line+1;i<show_pad_info.display_lines;i++) {
103                         wmove (show_pad,i,0);wprintw (show_pad,"\n");
104                 }
105         }
106         left=0;right=show_pad_info.display_cols-1;
107         top=TITLE_WIN_LINES+SHOW_WIN_LINES+1;bottom=top+show_pad_info.display_lines-1;
108
109         if (show_pad_info.line > show_pad_info.max_line-show_pad_info.display_lines+1)
110                 show_pad_info.line=show_pad_info.max_line-show_pad_info.display_lines+1;
111
112         if (show_pad_info.line < 0)
113                 show_pad_info.line=0;
114
115 #ifdef OLD_NCURSES
116         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);
117 #else
118         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);
119 #endif
120 }
121
122 void refresh_command_win (void)
123
124 {
125         wrefresh (command_win);
126 }
127
128 void close_windows (void)
129
130 {
131         echo ();
132         
133         delwin (title_win);
134         delwin (command_win);
135         delwin (show_win);
136         delwin (show_pad);
137         
138         endwin ();
139 }
140
141 void show_info (void)
142
143 {
144         int block_num,block_offset;
145         
146         block_num=device_offset/file_system_info.block_size;
147         block_offset=device_offset%file_system_info.block_size;
148
149         wmove (show_win,0,0);
150         wprintw (show_win,"Offset %-3ld in block %ld. ",block_offset,block_num);
151         if (current_type != NULL)
152                 wprintw (show_win,"Type: %s\n",current_type->name);
153         else
154                 wprintw (show_win,"Type: %s\n","none");
155
156         refresh_show_win ();
157 }
158
159
160 void redraw_all (void)
161
162 {
163         close_windows ();
164         init_windows ();
165         
166         wmove (command_win,0,0);
167         mvcur (-1,-1,LINES-COMMAND_WIN_LINES,0);
168         
169 }