/[LeafOK_CVS]/lbbs/src/io.c
ViewVC logotype

Diff of /lbbs/src/io.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

Revision 1.1 by sysadm, Fri Oct 22 15:21:28 2004 UTC Revision 1.9 by sysadm, Tue Mar 22 08:19:11 2005 UTC
# Line 19  Line 19 
19  #include "common.h"  #include "common.h"
20  #include <stdio.h>  #include <stdio.h>
21  #include <stdarg.h>  #include <stdarg.h>
22    #include <time.h>
23    #include <fcntl.h>
24    #include <unistd.h>
25    #include <sys/ioctl.h>
26    
27  int  int
28  outc(char c)  outc (char c)
29  {  {
30    int retval;    int retval;
31    
32    retval = printf("%c",c);    retval = fprintf (stdout, "%c", c);
33    
34    return retval;    return retval;
35  }  }
36    
37  int  int
38  prints(const char * format, ...)  prints (const char *format, ...)
39  {  {
40    va_list args;    va_list args;
41    int retval;    int retval;
# Line 44  prints(const char * format, ...) Line 48  prints(const char * format, ...)
48  }  }
49    
50  int  int
51  iflush()  iflush ()
52  {  {
53    int retval;    int retval;
54      
55    retval = fflush (stdout);    retval = fflush (stdout);
     
   return retval;  
 }  
56    
57  int    return retval;
 Ctrl (char c)  
 {  
   return (c - 'A' + 1);  
58  }  }
59    
60  int  int
61  igetch ()  igetch ()
62  {  {
   char c, tmp[256];  
63    static char buf[256];    static char buf[256];
64    int out = 0, loop = 1, in_esc = 0, in_ascii = 0, i = 0;    unsigned char c, tmp[256];
65    static int len =0 , pos = 0;    int out = KEY_NULL, loop = 1, in_esc = 0, in_ascii = 0, in_control = 0, i =
66        0, j, result;
67      static int len = 0, pos = 0;
68      fd_set inputs, testfds;
69      struct timeval timeout;
70    
71    if (pos >= len)    if (pos >= len)
72    {      {
73      len = s_receive (socket_client, buf, 255, "");        pos = 0;
74      pos = 0;        len = 0;
75    }  
76          FD_ZERO (&inputs);
77          FD_SET (0, &inputs);
78    
79          testfds = inputs;
80          timeout.tv_sec = 1;
81          timeout.tv_usec = 0;
82    
83          result = select (FD_SETSIZE, &testfds, (fd_set *) NULL,
84                           (fd_set *) NULL, &timeout);
85    
86          switch (result)
87            {
88            case 0:
89              out = KEY_TIMEOUT;
90              break;
91            case -1:
92              log_error ("select() error!\n");
93              break;
94            default:
95              if (FD_ISSET (0, &testfds))
96                {
97                  len = read (0, buf, 255);
98                }
99              break;
100            }
101    
102          //For debug
103          //for (j = 0; j < len; j++)
104          //  log_std ("<--[%u]\n", (buf[j] + 256) % 256);
105        }
106    
107    while (pos < len)    while (pos < len)
108      {      {
109        c = buf[pos++];        c = buf[pos++];
110    
111        if (c == '\0')        if (c == '\0')
112        {          {
113          out = c;            out = c;
114          break;            break;
115        }          }
116    
117          if (c == KEY_CONTROL)
118            {
119              if (in_control == 0)
120                {
121                  in_control = 1;
122                  i = 0;
123                  continue;
124                }
125            }
126    
127          if (in_control)
128            {
129              tmp[i++] = c;
130              if (i >= 2)
131                {
132                  out = (int) tmp[0] * 256 + tmp[1];
133                  in_control = 0;
134                  break;
135                }
136              continue;
137            }
138    
139        if (c == ESC_KEY)        if (c == ESC_KEY)
140          {          {
# Line 122  igetch () Line 175  igetch ()
175                    out = KEY_DOWN;                    out = KEY_DOWN;
176                    break;                    break;
177                  case 'C':                  case 'C':
178                    out = KEY_LEFT;                    out = KEY_RIGHT;
179                    break;                    break;
180                  case 'D':                  case 'D':
181                    out = KEY_RIGHT;                    out = KEY_LEFT;
182                      break;
183                    }
184                  break;
185                }
186              if (i == 3 && tmp[0] == 91 && tmp[2] == 126)
187                {
188                  in_ascii = 0;
189                  switch (tmp[1])
190                    {
191                    case 49:
192                      out = KEY_HOME;
193                      break;
194                    case 51:
195                      out = KEY_DEL;
196                      break;
197                    case 52:
198                      out = KEY_END;
199                      break;
200                    case 53:
201                      out = KEY_PGUP;
202                      break;
203                    case 54:
204                      out = KEY_PGDN;
205                    break;                    break;
206                  }                  }
207                break;                break;
# Line 133  igetch () Line 209  igetch ()
209            continue;            continue;
210          }          }
211    
212        out = ((int)c + 256) % 256;        out = ((int) c + 256) % 256;
213        break;        break;
214      }      }
215    
216    //for debug    //for debug
217    //log_std ("[%d]\n", out);    //log_std ("-->[%u]\n", out);
218    
219    return out;    return out;
220  }  }
221    
222    int
223    igetch_t (long int sec)
224    {
225      int ch;
226      time_t t_begin = time(0);
227      
228      do {
229        ch = igetch ();
230      } while ((ch == KEY_TIMEOUT) && (time(0) - t_begin < sec));
231    
232      return ch;
233    }
234    
235    int
236    ikbhit ()
237    {
238      int len;
239    
240      ioctl (0, FIONREAD, &len);
241    
242      return len;
243    }


Legend:
Removed lines/characters  
Changed lines/characters
  Added lines/characters

webmaster@leafok.com
ViewVC Help
Powered by ViewVC 1.3.0-beta1