Display Curses Keys Responds to curses keys and mouse events, displaying the key code and description.
594 {
596 int c = -1;
598 uint key_id = 0;
600 while (!c) {
601 kstr[0] = '\0';
603 do {
609 if (c == 'q' || c == NCKEY_F09)
610 exit(EXIT_FAILURE);
611 continue;
612 }
613 } while (c == -1);
614 switch (c) {
615 case NCKEY_INVALID:
616 strcpy(kstr, "NCKEY_INVALID");
617 break;
618 case NCKEY_RESIZE:
619 strcpy(kstr, "NCKEY_RESIZE");
620 break;
621 case NCKEY_UP:
622 strcpy(kstr, "NCKEY_UP");
623 break;
624 case NCKEY_RIGHT:
625 strcpy(kstr, "NCKEY_RIGHT");
626 break;
627 case NCKEY_DOWN:
628 strcpy(kstr, "NCKEY_DOWN");
629 break;
630 case NCKEY_LEFT:
631 strcpy(kstr, "NCKEY_LEFT");
632 break;
633 case NCKEY_INS:
634 strcpy(kstr, "NCKEY_INS");
635 break;
636 case NCKEY_DEL:
637 strcpy(kstr, "NCKEY_DEL");
638 break;
639 case NCKEY_BACKSPACE:
640 strcpy(kstr, "NCKEY_BACKSPACE");
641 break;
642 case NCKEY_PGDOWN:
643 strcpy(kstr, "NCKEY_PGDOWN");
644 break;
645 case NCKEY_PGUP:
646 strcpy(kstr, "NCKEY_PGUP");
647 break;
648 case NCKEY_HOME:
649 strcpy(kstr, "NCKEY_HOME");
650 break;
651 case NCKEY_END:
652 strcpy(kstr, "NCKEY_END");
653 break;
654 case NCKEY_F00:
655 strcpy(kstr, "NCKEY_F00");
656 break;
657 case NCKEY_F01:
658 strcpy(kstr, "NCKEY_F01");
659 break;
660 case NCKEY_F02:
661 strcpy(kstr, "NCKEY_F02");
662 break;
663 case NCKEY_F03:
664 strcpy(kstr, "NCKEY_F03");
665 break;
666 case NCKEY_F04:
667 strcpy(kstr, "NCKEY_F04");
668 break;
669 case NCKEY_F05:
670 strcpy(kstr, "NCKEY_F05");
671 break;
672 case NCKEY_F06:
673 strcpy(kstr, "NCKEY_F06");
674 break;
675 case NCKEY_F07:
676 strcpy(kstr, "NCKEY_F07");
677 break;
678 case NCKEY_F08:
679 strcpy(kstr, "NCKEY_F08");
680 break;
681 case NCKEY_F09:
682 strcpy(kstr, "NCKEY_F09");
683 break;
684 case NCKEY_F10:
685 strcpy(kstr, "NCKEY_F10");
686 break;
687 case NCKEY_F11:
688 strcpy(kstr, "NCKEY_F11");
689 break;
690 case NCKEY_F12:
691 strcpy(kstr, "NCKEY_F12");
692 break;
693 case NCKEY_F13:
694 strcpy(kstr, "NCKEY_F13");
695 break;
696 case NCKEY_F14:
697 strcpy(kstr, "NCKEY_F14");
698 break;
699 case NCKEY_F15:
700 strcpy(kstr, "NCKEY_F15");
701 break;
702 case NCKEY_F16:
703 strcpy(kstr, "NCKEY_F16");
704 break;
705 case NCKEY_F17:
706 strcpy(kstr, "NCKEY_F17");
707 break;
708 case NCKEY_F18:
709 strcpy(kstr, "NCKEY_F18");
710 break;
711 case NCKEY_F19:
712 strcpy(kstr, "NCKEY_F19");
713 break;
714 case NCKEY_F20:
715 strcpy(kstr, "NCKEY_F20");
716 break;
717 case NCKEY_F21:
718 strcpy(kstr, "NCKEY_F21");
719 break;
720 case NCKEY_F22:
721 strcpy(kstr, "NCKEY_F22");
722 break;
723 case NCKEY_F23:
724 strcpy(kstr, "NCKEY_F23");
725 break;
726 case NCKEY_F24:
727 strcpy(kstr, "NCKEY_F24");
728 break;
729 case NCKEY_F25:
730 strcpy(kstr, "NCKEY_F25");
731 break;
732 case NCKEY_F26:
733 strcpy(kstr, "NCKEY_F26");
734 break;
735 case NCKEY_F27:
736 strcpy(kstr, "NCKEY_F27");
737 break;
738 case NCKEY_F28:
739 strcpy(kstr, "NCKEY_F28");
740 break;
741 case NCKEY_F29:
742 strcpy(kstr, "NCKEY_F29");
743 break;
744 case NCKEY_F30:
745 strcpy(kstr, "NCKEY_F30");
746 break;
747 case NCKEY_F31:
748 strcpy(kstr, "NCKEY_F31");
749 break;
750 case NCKEY_F32:
751 strcpy(kstr, "NCKEY_F32");
752 break;
753 case NCKEY_F33:
754 strcpy(kstr, "NCKEY_F33");
755 break;
756 case NCKEY_F34:
757 strcpy(kstr, "NCKEY_F34");
758 break;
759 case NCKEY_F35:
760 strcpy(kstr, "NCKEY_F35");
761 break;
762 case NCKEY_F36:
763 strcpy(kstr, "NCKEY_F36");
764 break;
765 case NCKEY_F37:
766 strcpy(kstr, "NCKEY_F37");
767 break;
768 case NCKEY_F38:
769 strcpy(kstr, "NCKEY_F38");
770 break;
771 case NCKEY_F39:
772 strcpy(kstr, "NCKEY_F39");
773 break;
774 case NCKEY_F40:
775 strcpy(kstr, "NCKEY_F40");
776 break;
777 case NCKEY_F41:
778 strcpy(kstr, "NCKEY_F41");
779 break;
780 case NCKEY_F42:
781 strcpy(kstr, "NCKEY_F42");
782 break;
783 case NCKEY_F43:
784 strcpy(kstr, "NCKEY_F43");
785 break;
786 case NCKEY_F44:
787 strcpy(kstr, "NCKEY_F44");
788 break;
789 case NCKEY_F45:
790 strcpy(kstr, "NCKEY_F45");
791 break;
792 case NCKEY_F46:
793 strcpy(kstr, "NCKEY_F46");
794 break;
795 case NCKEY_F47:
796 strcpy(kstr, "NCKEY_F47");
797 break;
798 case NCKEY_F48:
799 strcpy(kstr, "NCKEY_F48");
800 break;
801 case NCKEY_F49:
802 strcpy(kstr, "NCKEY_F49");
803 break;
804 case NCKEY_F50:
805 strcpy(kstr, "NCKEY_F50");
806 break;
807 case NCKEY_F51:
808 strcpy(kstr, "NCKEY_F51");
809 break;
810 case NCKEY_F52:
811 strcpy(kstr, "NCKEY_F52");
812 break;
813 case NCKEY_F53:
814 strcpy(kstr, "NCKEY_F53");
815 break;
816 case NCKEY_F54:
817 strcpy(kstr, "NCKEY_F54");
818 break;
819 case NCKEY_F55:
820 strcpy(kstr, "NCKEY_F55");
821 break;
822 case NCKEY_F56:
823 strcpy(kstr, "NCKEY_F56");
824 break;
825 case NCKEY_F57:
826 strcpy(kstr, "NCKEY_F57");
827 break;
828 case NCKEY_F58:
829 strcpy(kstr, "NCKEY_F58");
830 break;
831 case NCKEY_F59:
832 strcpy(kstr, "NCKEY_F59");
833 break;
834 case NCKEY_F60:
835 strcpy(kstr, "NCKEY_F60");
836 break;
837 case NCKEY_ENTER:
838 strcpy(kstr, "NCKEY_ENTER");
839 break;
840 case NCKEY_CLS:
841 strcpy(kstr, "NCKEY_CLS");
842 break;
843 case NCKEY_DLEFT:
844 strcpy(kstr, "NCKEY_DLEFT");
845 break;
846 case NCKEY_DRIGHT:
847 strcpy(kstr, "NCKEY_DRIGHT");
848 break;
849 case NCKEY_ULEFT:
850 strcpy(kstr, "NCKEY_ULEFT");
851 break;
852 case NCKEY_URIGHT:
853 strcpy(kstr, "NCKEY_URIGHT");
854 break;
855 case NCKEY_CENTER:
856 strcpy(kstr, "NCKEY_CENTER");
857 break;
858 case NCKEY_BEGIN:
859 strcpy(kstr, "NCKEY_BEGIN");
860 break;
861 case NCKEY_CANCEL:
862 strcpy(kstr, "NCKEY_CANCEL");
863 break;
864 case NCKEY_CLOSE:
865 strcpy(kstr, "NCKEY_CLOSE");
866 break;
867 case NCKEY_COMMAND:
868 strcpy(kstr, "NCKEY_COMMAND");
869 break;
870 case NCKEY_COPY:
871 strcpy(kstr, "NCKEY_COPY");
872 break;
873 case NCKEY_EXIT:
874 strcpy(kstr, "NCKEY_EXIT");
875 break;
876 case NCKEY_PRINT:
877 strcpy(kstr, "NCKEY_PRINT");
878 break;
879 case NCKEY_REFRESH:
880 strcpy(kstr, "NCKEY_REFRESH");
881 break;
882 case NCKEY_SEPARATOR:
883 strcpy(kstr, "NCKEY_SEPARATOR");
884 break;
885 case NCKEY_CAPS_LOCK:
886 strcpy(kstr, "NCKEY_CAPS_LOCK");
887 break;
888 case NCKEY_SCROLL_LOCK:
889 strcpy(kstr, "NCKEY_SCROLL_LOCK");
890 break;
891 case NCKEY_NUM_LOCK:
892 strcpy(kstr, "NCKEY_NUM_LOCK");
893 break;
894 case NCKEY_PRINT_SCREEN:
895 strcpy(kstr, "NCKEY_PRINT_SCREEN");
896 break;
897 case NCKEY_PAUSE:
898 strcpy(kstr, "NCKEY_PAUSE");
899 break;
900 case NCKEY_MENU:
901 strcpy(kstr, "NCKEY_MENU");
902 break;
903 case NCKEY_MEDIA_PLAY:
904 strcpy(kstr, "NCKEY_MEDIA_PLAY");
905 break;
906 case NCKEY_MEDIA_PAUSE:
907 strcpy(kstr, "NCKEY_MEDIA_PAUSE");
908 break;
909 case NCKEY_MEDIA_PPAUSE:
910 strcpy(kstr, "NCKEY_MEDIA_PPAUSE");
911 break;
912 case NCKEY_MEDIA_REV:
913 strcpy(kstr, "NCKEY_MEDIA_REV");
914 break;
915 case NCKEY_MEDIA_STOP:
916 strcpy(kstr, "NCKEY_MEDIA_STOP");
917 break;
918 case NCKEY_MEDIA_FF:
919 strcpy(kstr, "NCKEY_MEDIA_FF");
920 break;
921 case NCKEY_MEDIA_REWIND:
922 strcpy(kstr, "NCKEY_MEDIA_REWIND");
923 break;
924 case NCKEY_MEDIA_NEXT:
925 strcpy(kstr, "NCKEY_MEDIA_NEXT");
926 break;
927 case NCKEY_MEDIA_PREV:
928 strcpy(kstr, "NCKEY_MEDIA_PREV");
929 break;
930 case NCKEY_MEDIA_RECORD:
931 strcpy(kstr, "NCKEY_MEDIA_RECORD");
932 break;
933 case NCKEY_MEDIA_LVOL:
934 strcpy(kstr, "NCKEY_MEDIA_LVOL");
935 break;
936 case NCKEY_MEDIA_RVOL:
937 strcpy(kstr, "NCKEY_MEDIA_RVOL");
938 break;
939 case NCKEY_MEDIA_MUTE:
940 strcpy(kstr, "NCKEY_MEDIA_MUTE");
941 break;
942 case NCKEY_LSHIFT:
943 strcpy(kstr, "NCKEY_LSHIFT");
944 break;
945 case NCKEY_LCTRL:
946 strcpy(kstr, "NCKEY_LCTRL");
947 break;
948 case NCKEY_LALT:
949 strcpy(kstr, "NCKEY_LALT");
950 break;
951 case NCKEY_LSUPER:
952 strcpy(kstr, "NCKEY_LSUPER");
953 break;
954 case NCKEY_LHYPER:
955 strcpy(kstr, "NCKEY_LHYPER");
956 break;
957 case NCKEY_LMETA:
958 strcpy(kstr, "NCKEY_LMETA");
959 break;
960 case NCKEY_RSHIFT:
961 strcpy(kstr, "NCKEY_RSHIFT");
962 break;
963 case NCKEY_RCTRL:
964 strcpy(kstr, "NCKEY_RCTRL");
965 break;
966 case NCKEY_RALT:
967 strcpy(kstr, "NCKEY_RALT");
968 break;
969 case NCKEY_RSUPER:
970 strcpy(kstr, "NCKEY_RSUPER");
971 break;
972 case NCKEY_RHYPER:
973 strcpy(kstr, "NCKEY_RHYPER");
974 break;
975 case NCKEY_RMETA:
976 strcpy(kstr, "NCKEY_RMETA");
977 break;
978 case NCKEY_L3SHIFT:
979 strcpy(kstr, "NCKEY_L3SHIFT");
980 break;
981 case NCKEY_L5SHIFT:
982 strcpy(kstr, "NCKEY_L5SHIFT");
983 break;
984 case NCKEY_MOTION:
985 strcpy(kstr, "NCKEY_MOTION");
986 break;
987 case NCKEY_BUTTON1:
988 strcpy(kstr, "NCKEY_BUTTON1");
989 break;
990 case NCKEY_BUTTON2:
991 strcpy(kstr, "NCKEY_BUTTON2");
992 break;
993 case NCKEY_BUTTON3:
994 strcpy(kstr, "NCKEY_BUTTON3");
995 break;
996 case NCKEY_BUTTON4:
997 strcpy(kstr, "NCKEY_BUTTON4");
998 break;
999 case NCKEY_BUTTON5:
1000 strcpy(kstr, "NCKEY_BUTTON5");
1001 break;
1002 case NCKEY_BUTTON6:
1003 strcpy(kstr, "NCKEY_BUTTON6");
1004 break;
1005 case NCKEY_BUTTON7:
1006 strcpy(kstr, "NCKEY_BUTTON7");
1007 break;
1008 case NCKEY_BUTTON8:
1009 strcpy(kstr, "NCKEY_BUTTON8");
1010 break;
1011 case NCKEY_BUTTON9:
1012 strcpy(kstr, "NCKEY_BUTTON9");
1013 break;
1014 case NCKEY_BUTTON10:
1015 strcpy(kstr, "NCKEY_BUTTON10");
1016 break;
1017 case NCKEY_BUTTON11:
1018 strcpy(kstr, "NCKEY_BUTTON11");
1019 break;
1020 case NCKEY_SIGNAL:
1021 strcpy(kstr, "NCKEY_SIGNAL");
1022 break;
1023 case NCKEY_EOF:
1024 strcpy(kstr, "NCKEY_EOF");
1025 break;
1026 default:
1027 snprintf(kstr, 32, "NCKEY_%d", key_id);
1028 break;
1029 }
1035 sprintf(tmp,
_(
" Inside Win: y: %3d, x: %3d"),
1037 } else {
1038 sprintf(tmp,
_(
" stdwin: y: %3d, x: %3d"),
1040 }
1048 sprintf(tmp,
_(
" Octal: %3o"), c);
1051
1052 sprintf(tmp,
_(
" Decimal: %3d"), c);
1055
1056 sprintf(tmp,
_(
" Hex: %3x"), c);
1059
1060 if (kstr[0]) {
1061 sprintf(tmp,
_(
"Description: %s"), kstr);
1062 } else {
1063 sprintf(tmp,
_(
" ASCII: %c"), c);
1064 }
1068 }
1070 usleep(100000);
1071 break;
1072 }
1073 c = '\0';
1074 }
1075#endif
1076 return 0;
1077}
volatile sig_atomic_t sig_received
bool handle_signal(sig_atomic_t)
void ui_render()
Render the UI by updating panels and refreshing the display.
int ui_cursor_move(UiSurface *s, ss_t w, uint y, uint x)
Move the cursor to a specified position within a UiSurface.
int ui_wclrtoeol(UiSurface *s, ss_t w)
Clear to the end of the line in a surface window.
int ui_get_event(UiSurface *s, ss_t w, UiChyron *chyron, UiEvent *ev, int timeout_ms)
Read input events.
int ui_mvwaddstr(UiSurface *s, ss_t w, uint y, uint x, const char *text)
Draw a text string at a specific position in a surface window.
int ui_display_error(char *msg0, char *msg1, char *msg2, char *msg3)
Display an error message window or print to stderr.