/[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.5 by sysadm, Thu Mar 17 10:48:46 2005 UTC Revision 1.13 by sysadm, Mon Mar 15 07:30:21 2010 UTC
# Line 17  Line 17 
17    
18  #include "io.h"  #include "io.h"
19  #include "common.h"  #include "common.h"
20    #include "tcplib.h"
21  #include <stdio.h>  #include <stdio.h>
22  #include <stdarg.h>  #include <stdarg.h>
23    #include <time.h>
24    #include <fcntl.h>
25    #include <unistd.h>
26  #include <sys/ioctl.h>  #include <sys/ioctl.h>
27    
28  int  int
29  outc(char c)  outc (char c)
30  {  {
31    int retval;    int retval;
32    
33    retval = fprintf(stdout, "%c", c);    retval = fprintf (stdout, "%c", c);
34    
35    return retval;    return retval;
36  }  }
37    
38  int  int
39  prints(const char * format, ...)  prints (const char *format, ...)
40  {  {
41    va_list args;    va_list args;
42    int retval;    int retval;
# Line 45  prints(const char * format, ...) Line 49  prints(const char * format, ...)
49  }  }
50    
51  int  int
52  iflush()  iflush ()
53  {  {
54    int retval;    int retval;
55      
56    retval = fflush (stdout);    retval = fflush (stdout);
57      
58    return retval;    return retval;
59  }  }
60    
# Line 59  igetch () Line 63  igetch ()
63  {  {
64    static char buf[256];    static char buf[256];
65    unsigned char c, tmp[256];    unsigned char c, tmp[256];
66    int out = 0, loop = 1, in_esc = 0, in_ascii = 0, in_control = 0, i = 0, j;    int out = KEY_NULL, loop = 1, in_esc = 0, in_ascii = 0, in_control = 0, i =
67    static int len = 0 , pos = 0;      0, j, result;
68      static int len = 0, pos = 0;
69      fd_set testfds;
70      struct timeval timeout;
71    
72      //Stop on system exit
73      if (SYS_exit)
74        return KEY_NULL;
75    
76    if (pos >= len)    if (pos >= len)
77    {      {
78      pos = 0;        pos = 0;
79          len = 0;
80    
81      //len = s_receive (socket_client, buf, 255, "");        FD_ZERO (&testfds);
82      len = read (0, buf, 255);        FD_SET (0, &testfds);
83    
84      //For debug        timeout.tv_sec = 1;
85      //for (j = 0; j < len; j++)        timeout.tv_usec = 0;
86      //  log_std ("<--[%u]\n", (buf[j] + 256) % 256);  
87    }        result = SignalSafeSelect (FD_SETSIZE, &testfds, (fd_set *) NULL,
88                           (fd_set *) NULL, &timeout);
89    
90          if (result == 0)
91            {
92              return KEY_TIMEOUT;
93            }
94          if (result < 0)
95            {
96              log_error ("select() error (%d) !\n", result);
97              return KEY_NULL;
98            }
99          if (result > 0)
100            {
101              if (FD_ISSET (0, &testfds))
102                {
103                  len = read (0, buf, 255);
104                }
105            }
106    
107          //For debug
108          //for (j = 0; j < len; j++)
109          //  log_std ("<--[%u]\n", (buf[j] + 256) % 256);
110        }
111    
112    while (pos < len)    while (pos < len)
113      {      {
114        c = buf[pos++];        c = buf[pos++];
115    
116        if (c == '\0')        if (c == '\0')
117        {          {
118          out = c;            out = c;
119          break;            break;
120        }          }
121    
122        if (c == KEY_CONTROL)        if (c == KEY_CONTROL)
123          {          {
124            if (in_control == 0)            if (in_control == 0)
125              {              {
126                in_control = 1;                in_control = 1;
127                i = 0;                i = 0;
128                continue;                continue;
129              }              }
130          }          }
131          
132        if (in_control)        if (in_control)
133        {          {
134          tmp[i++] = c;            tmp[i++] = c;
135          if (i >= 2)            if (i >= 2)
136          {              {
137            out = (int)tmp[0] * 256 + tmp[1];                out = (int) tmp[0] * 256 + tmp[1];
138            in_control = 0;                in_control = 0;
139            break;                break;
140          }              }
141          continue;            continue;
142        }          }
143    
144        if (c == ESC_KEY)        if (c == ESC_KEY)
145          {          {
# Line 171  igetch () Line 206  igetch ()
206                    out = KEY_PGUP;                    out = KEY_PGUP;
207                    break;                    break;
208                  case 54:                  case 54:
209                    out = KEY_PGDOWN;                    out = KEY_PGDN;
210                    break;                    break;
211                  }                  }
212                break;                break;
# Line 179  igetch () Line 214  igetch ()
214            continue;            continue;
215          }          }
216    
217        out = ((int)c + 256) % 256;        out = ((int) c + 256) % 256;
218        break;        break;
219      }      }
220    
# Line 190  igetch () Line 225  igetch ()
225  }  }
226    
227  int  int
228  ikbhit()  igetch_t (long int sec)
229    {
230      int ch;
231      time_t t_begin = time (0);
232    
233      do
234        {
235          ch = igetch ();
236        }
237      while ((ch == KEY_TIMEOUT || ch == 0xa) && (time (0) - t_begin < sec));
238    
239      return ch;
240    }
241    
242    int
243    ikbhit ()
244  {  {
245    int len;    int len;
246      
247    ioctl (0, FIONREAD, &len);    ioctl (0, FIONREAD, &len);
248      
249    return len;    return len;
250  }  }


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

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