1 /***************************************************************************
2 *
3 * $Header: /usr/local/cvsroot/utils/ytree/error.c,v 1.12 2003/06/06 19:47:26 werner Exp $
4 *
5 * Ausgabe von Fehlermeldungen
6 *
7 ***************************************************************************/
8
9
10 #include "ytree.h"
11
12
13
14
15 static void MapErrorWindow(char *header);
16 static void MapNoticeWindow(char *header);
17 static void UnmapErrorWindow(void);
18 static void PrintErrorLine(int y, char *str);
19 static void DisplayErrorMessage(char *msg);
20 static int PrintErrorMessage(char *msg);
21
22
23
Message(char * msg)24 void Message(char *msg)
25 {
26 MapErrorWindow( "E R R O R" );
27 (void) PrintErrorMessage( msg );
28 }
29
30
Notice(char * msg)31 void Notice(char *msg)
32 {
33 MapNoticeWindow( "N O T I C E" );
34 DisplayErrorMessage( msg );
35 RefreshWindow( error_window );
36 refresh();
37 }
38
39
Warning(char * msg)40 void Warning(char *msg)
41 {
42 MapErrorWindow( "W A R N I N G" );
43 (void) PrintErrorMessage( msg );
44 }
45
46
Error(char * msg,char * module,int line)47 void Error(char *msg, char *module, int line)
48 {
49 char buffer[MESSAGE_LENGTH + 1];
50
51 MapErrorWindow( "INTERNAL ERROR" );
52 (void) sprintf( buffer, "%s*In Module \"%s\"*Line %d",
53 msg, module, line
54 );
55 (void) PrintErrorMessage( buffer );
56 }
57
58
59
60
61
MapErrorWindow(char * header)62 static void MapErrorWindow(char *header)
63 {
64 werase( error_window );
65 box( error_window, 0, 0 );
66
67 PrintSpecialString( error_window,
68 ERROR_WINDOW_HEIGHT - 3,
69 0,
70 "6--------------------------------------7",
71 WINERR_COLOR
72 );
73 wattrset( error_window, A_REVERSE | A_BLINK );
74 MvWAddStr( error_window,
75 ERROR_WINDOW_HEIGHT - 2,
76 1,
77 " PRESS ENTER "
78 );
79 wattrset( error_window, 0 );
80 PrintErrorLine( 1, header );
81 }
82
83
MapNoticeWindow(char * header)84 static void MapNoticeWindow(char *header)
85 {
86 werase( error_window );
87 box( error_window, 0, 0 );
88
89 PrintSpecialString( error_window,
90 ERROR_WINDOW_HEIGHT - 3,
91 0,
92 "6--------------------------------------7",
93 WINERR_COLOR
94 );
95 wattrset( error_window, A_REVERSE | A_BLINK );
96 MvWAddStr( error_window,
97 ERROR_WINDOW_HEIGHT - 2,
98 1,
99 " PLEASE WAIT "
100 );
101 wattrset( error_window, 0 );
102 PrintErrorLine( 1, header );
103 }
104
105
UnmapErrorWindow(void)106 static void UnmapErrorWindow(void)
107 {
108 werase( error_window );
109 touchwin( stdscr );
110 doupdate();
111 }
112
113
UnmapNoticeWindow(void)114 void UnmapNoticeWindow(void)
115 {
116 werase( error_window );
117 touchwin( stdscr );
118 doupdate();
119 }
120
121
122
PrintErrorLine(int y,char * str)123 static void PrintErrorLine(int y, char *str)
124 {
125 int l;
126
127 l = strlen( str );
128
129 MvWAddStr( error_window, y, (ERROR_WINDOW_WIDTH - l) >> 1, str );
130 }
131
132
133
134
DisplayErrorMessage(char * msg)135 static void DisplayErrorMessage(char *msg)
136 {
137 int y, i, j, count;
138 char buffer[ERROR_WINDOW_WIDTH - 2 + 1];
139
140 for(i=0, count=0; msg[i]; i++)
141 if( msg[i] == '*' ) count++;
142
143 if( count > 3 ) y = 2;
144 else if( count > 1 ) y = 3;
145 else y = 4;
146
147
148 for( i=0,j=0; msg[i]; i++ )
149 {
150 if( msg[i] == '*' )
151 {
152 buffer[j] = '\0';
153 PrintErrorLine( y++, buffer );
154 j=0;
155 }
156 else
157 {
158 if( j < (int)((sizeof( buffer) - 1)) ) buffer[j++] = msg[i];
159 }
160 }
161 buffer[j] = '\0';
162 PrintErrorLine( y, buffer );
163 }
164
165
166
PrintErrorMessage(char * msg)167 static int PrintErrorMessage(char *msg)
168 {
169 int c;
170
171 DisplayErrorMessage( msg );
172 beep();
173 RefreshWindow( error_window );
174 doupdate();
175 c = wgetch(error_window);
176 UnmapErrorWindow();
177 touchwin( dir_window );
178 return( c );
179 }
180
181