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