/[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.31 by sysadm, Tue May 13 07:28:51 2025 UTC Revision 1.36 by sysadm, Wed May 28 10:26:21 2025 UTC
# Line 58  int prints(const char *format, ...) Line 58  int prints(const char *format, ...)
58                  {                  {
59                          errno = EAGAIN;                          errno = EAGAIN;
60                          ret = (BUFSIZ - stdout_buf_len - ret);                          ret = (BUFSIZ - stdout_buf_len - ret);
61                            log_error("Output buffer is full, additional %d is required\n", ret);
62                  }                  }
63          }          }
64    
# Line 276  int igetch(int timeout) Line 277  int igetch(int timeout)
277                                          {                                          {
278                                                  if (errno == EAGAIN || errno == EWOULDBLOCK)                                                  if (errno == EAGAIN || errno == EWOULDBLOCK)
279                                                  {                                                  {
280                                                            out = 0;
281                                                          loop = 0;                                                          loop = 0;
282                                                          break;                                                          break;
283                                                  }                                                  }
# Line 305  int igetch(int timeout) Line 307  int igetch(int timeout)
307                  }                  }
308    
309                  // For debug                  // For debug
310                  // for (j = 0; j < len; j++)                  // for (int j = pos; j < len; j++)
311                  //   log_std ("<--[%u]\n", (buf[j] + 256) % 256);                  // {
312                    //      log_std("Debug: <--[%u]\n", (buf[j] + 256) % 256);
313                    // }
314          }          }
315    
316          fcntl(STDIN_FILENO, F_SETFL, flags);          fcntl(STDIN_FILENO, F_SETFL, flags);
# Line 359  int igetch(int timeout) Line 363  int igetch(int timeout)
363                  if (in_ascii)                  if (in_ascii)
364                  {                  {
365                          tmp[i++] = c;                          tmp[i++] = c;
366                          if (c == 'm')                          if (i == 2 && (tmp[0] == 79 || tmp[0] == 91))
                         {  
                                 in_ascii = 0;  
                                 continue;  
                         }  
                         if (i == 2 && c >= 'A' && c <= 'D')  
367                          {                          {
368                                  in_ascii = 0;                                  in_ascii = 0;
369                                  switch (c)                                  switch (tmp[1])
370                                  {                                  {
371                                  case 'A':                                  case 65:
372                                          out = KEY_UP;                                          out = KEY_UP;
373                                          break;                                          break;
374                                  case 'B':                                  case 66:
375                                          out = KEY_DOWN;                                          out = KEY_DOWN;
376                                          break;                                          break;
377                                  case 'C':                                  case 67:
378                                          out = KEY_RIGHT;                                          out = KEY_RIGHT;
379                                          break;                                          break;
380                                  case 'D':                                  case 68:
381                                          out = KEY_LEFT;                                          out = KEY_LEFT;
382                                          break;                                          break;
383                                    default:
384                                            in_ascii = 1;
385                                    }
386                                    if (!in_ascii)
387                                    {
388                                            break;
389                                    }
390                            }
391                            if (i == 2 && tmp[0] == 91) // Fterm
392                            {
393                                    in_ascii = 0;
394                                    switch (tmp[1])
395                                    {
396                                    case 86:
397                                            out = KEY_SHIFT_F1;
398                                            break;
399                                    case 90:
400                                            out = KEY_SHIFT_F2;
401                                            break;
402                                    case 97:
403                                            out = KEY_SHIFT_F3;
404                                            break;
405                                    case 98:
406                                            out = KEY_SHIFT_F4;
407                                            break;
408                                    case 99:
409                                            out = KEY_SHIFT_F5;
410                                            break;
411                                    case 100:
412                                            out = KEY_SHIFT_F6;
413                                            break;
414                                    case 101:
415                                            out = KEY_SHIFT_F7;
416                                            break;
417                                    case 102:
418                                            out = KEY_SHIFT_F8;
419                                            break;
420                                    case 103:
421                                            out = KEY_SHIFT_F9;
422                                            break;
423                                    case 104:
424                                            out = KEY_SHIFT_F10;
425                                            break;
426                                    case 107:
427                                            out = KEY_CTRL_F1;
428                                            break;
429                                    case 108:
430                                            out = KEY_CTRL_F2;
431                                            break;
432                                    case 109:
433                                            out = KEY_CTRL_F3;
434                                            break;
435                                    case 112:
436                                            out = KEY_CTRL_F6;
437                                            break;
438                                    case 113:
439                                            out = KEY_CTRL_F7;
440                                            break;
441                                    case 114:
442                                            out = KEY_CTRL_F8;
443                                            break;
444                                    case 115:
445                                            out = KEY_CTRL_F9;
446                                            break;
447                                    case 116:
448                                            out = KEY_CTRL_F10;
449                                            break;
450                                    default:
451                                            in_ascii = 1;
452                                    }
453                                    if (!in_ascii)
454                                    {
455                                            break;
456                                    }
457                            }
458                            if (i == 2 && tmp[0] == 79) // Xterm
459                            {
460                                    in_ascii = 0;
461                                    switch (tmp[1])
462                                    {
463                                    case 80:
464                                            out = KEY_F1;
465                                            break;
466                                    case 81:
467                                            out = KEY_F2;
468                                            break;
469                                    case 82:
470                                            out = KEY_F3;
471                                            break;
472                                    case 83:
473                                            out = KEY_F4;
474                                            break;
475                                    default:
476                                            in_ascii = 1;
477                                    }
478                                    if (!in_ascii)
479                                    {
480                                            break;
481                                  }                                  }
                                 break;  
482                          }                          }
483                          if (i == 3 && tmp[0] == 91 && tmp[2] == 126)                          if (i == 3 && tmp[0] == 91 && tmp[2] == 126)
484                          {                          {
# Line 404  int igetch(int timeout) Line 500  int igetch(int timeout)
500                                  case 54:                                  case 54:
501                                          out = KEY_PGDN;                                          out = KEY_PGDN;
502                                          break;                                          break;
503                                    default:
504                                            in_ascii = 1;
505                                    }
506                                    if (!in_ascii)
507                                    {
508                                            break;
509                                  }                                  }
510                                  break;                          }
511                            if (i == 4 && tmp[0] == 91 && tmp[1] == 49 && tmp[3] == 126)  // Fterm
512                            {
513                                    in_ascii = 0;
514                                    switch (tmp[2])
515                                    {
516                                    case 49:
517                                            out = KEY_F1;
518                                            break;
519                                    case 50:
520                                            out = KEY_F2;
521                                            break;
522                                    case 51:
523                                            out = KEY_F3;
524                                            break;
525                                    case 52:
526                                            out = KEY_F4;
527                                            break;
528                                    case 53:
529                                            out = KEY_F5;
530                                            break;
531                                    case 55:
532                                            out = KEY_F6;
533                                            break;
534                                    case 56:
535                                            out = KEY_F7;
536                                            break;
537                                    case 57:
538                                            out = KEY_F8;
539                                            break;
540                                    default:
541                                            in_ascii = 1;
542                                    }
543                                    if (!in_ascii)
544                                    {
545                                            break;
546                                    }
547                            }
548                            if (i == 4 && tmp[0] == 91 && tmp[1] == 50 && tmp[3] == 126) // Fterm
549                            {
550                                    in_ascii = 0;
551                                    switch (tmp[2])
552                                    {
553                                    case 48:
554                                            out = KEY_F9;
555                                            break;
556                                    case 49:
557                                            out = KEY_F10;
558                                            break;
559                                    case 50:
560                                            out = KEY_F11; // Fterm
561                                            break;
562                                    case 51:
563                                            out = KEY_F11; // Xterm
564                                            break;
565                                    case 52:
566                                            out = KEY_F12; // Xterm
567                                            break;
568                                    default:
569                                            in_ascii = 1;
570                                    }
571                                    if (!in_ascii)
572                                    {
573                                            break;
574                                    }
575                            }
576                            if (i == 5 && tmp[0] == 91 && tmp[1] == 49 && tmp[2] == 59 && tmp[3] == 53) // Xterm
577                            {
578                                    in_ascii = 0;
579                                    switch (tmp[4])
580                                    {
581                                    case 80:
582                                            out = KEY_CTRL_F1;
583                                            break;
584                                    case 81:
585                                            out = KEY_CTRL_F2;
586                                            break;
587                                    case 82:
588                                            out = KEY_CTRL_F3;
589                                            break;
590                                    default:
591                                            in_ascii = 1;
592                                    }
593                                    if (!in_ascii)
594                                    {
595                                            break;
596                                    }
597                            }
598                            if (i == 6 && tmp[0] == 91 && tmp[1] == 49 && tmp[3] == 59 && tmp[4] == 53 && tmp[5] == 126) // Xterm
599                            {
600                                    in_ascii = 0;
601                                    switch (tmp[2])
602                                    {
603                                    case 53:
604                                            out = KEY_CTRL_F5;
605                                            break;
606                                    case 55:
607                                            out = KEY_CTRL_F6;
608                                            break;
609                                    case 56:
610                                            out = KEY_CTRL_F7;
611                                            break;
612                                    case 57:
613                                            out = KEY_CTRL_F8;
614                                            break;
615                                    default:
616                                            in_ascii = 1;
617                                    }
618                                    if (!in_ascii)
619                                    {
620                                            break;
621                                    }
622                            }
623                            if (i == 6 && tmp[0] == 91 && tmp[1] == 50 && tmp[3] == 59 && tmp[4] == 53 && tmp[5] == 126) // Xterm
624                            {
625                                    in_ascii = 0;
626                                    switch (tmp[2])
627                                    {
628                                    case 48:
629                                            out = KEY_CTRL_F9;
630                                            break;
631                                    case 49:
632                                            out = KEY_CTRL_F10;
633                                            break;
634                                    case 51:
635                                            out = KEY_CTRL_F11;
636                                            break;
637                                    case 52:
638                                            out = KEY_CTRL_F12;
639                                            break;
640                                    default:
641                                            in_ascii = 1;
642                                    }
643                                    if (!in_ascii)
644                                    {
645                                            break;
646                                    }
647                            }
648                            if (i == 5 && tmp[0] == 91 && tmp[1] == 49 && tmp[2] == 59 && tmp[3] == 50) // Xterm
649                            {
650                                    in_ascii = 0;
651                                    switch (tmp[4])
652                                    {
653                                    case 80:
654                                            out = KEY_SHIFT_F1;
655                                            break;
656                                    case 81:
657                                            out = KEY_SHIFT_F2;
658                                            break;
659                                    case 82:
660                                            out = KEY_SHIFT_F3;
661                                            break;
662                                    case 83:
663                                            out = KEY_SHIFT_F4;
664                                            break;
665                                    default:
666                                            in_ascii = 1;
667                                    }
668                                    if (!in_ascii)
669                                    {
670                                            break;
671                                    }
672                            }
673                            if (i == 6 && tmp[0] == 91 && tmp[1] == 49 && tmp[3] == 59 && tmp[4] == 50 && tmp[5] == 126) // Xterm
674                            {
675                                    in_ascii = 0;
676                                    switch (tmp[2])
677                                    {
678                                    case 53:
679                                            out = KEY_SHIFT_F5;
680                                            break;
681                                    case 55:
682                                            out = KEY_SHIFT_F6;
683                                            break;
684                                    case 56:
685                                            out = KEY_SHIFT_F7;
686                                            break;
687                                    case 57:
688                                            out = KEY_SHIFT_F8;
689                                            break;
690                                    default:
691                                            in_ascii = 1;
692                                    }
693                                    if (!in_ascii)
694                                    {
695                                            break;
696                                    }
697                            }
698                            if (i == 6 && tmp[0] == 91 && tmp[1] == 50 && tmp[3] == 59 && tmp[4] == 50 && tmp[5] == 126) // Xterm
699                            {
700                                    in_ascii = 0;
701                                    switch (tmp[2])
702                                    {
703                                    case 48:
704                                            out = KEY_SHIFT_F9;
705                                            break;
706                                    case 49:
707                                            out = KEY_SHIFT_F10;
708                                            break;
709                                    case 51:
710                                            out = KEY_SHIFT_F11;
711                                            break;
712                                    case 52:
713                                            out = KEY_SHIFT_F12;
714                                            break;
715                                    default:
716                                            in_ascii = 1;
717                                    }
718                                    if (!in_ascii)
719                                    {
720                                            break;
721                                    }
722                            }
723    
724                            if (c == 'm')
725                            {
726                                    in_ascii = 0;
727                          }                          }
728                          continue;                          continue;
729                  }                  }
# Line 414  int igetch(int timeout) Line 732  int igetch(int timeout)
732                  break;                  break;
733          }          }
734    
         // for debug  
         // log_std ("-->[%u]\n", out);  
   
735          if (close(epollfd) < 0)          if (close(epollfd) < 0)
736          {          {
737                  log_error("close(epoll) error (%d)\n");                  log_error("close(epoll) error (%d)\n");
738          }          }
739    
740            // For ESC key
741            if (out == 0 && in_esc)
742            {
743                    out = KEY_ESC;
744            }
745    
746            // for debug
747            // if (out != KEY_TIMEOUT && out != KEY_NULL)
748            // {
749            //      log_std ("Debug: -->[0x %x]\n", out);
750            // }
751    
752          return out;          return out;
753  }  }
754    


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

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