mTtyRec.sh 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. #!/bin/bash
  2. E='echo -e'; # -e включить поддержку вывода Escape последовательностей
  3. e='echo -en'; # -n не выводить перевод строки
  4. c="+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+"
  5. trap "R;exit" 2 #
  6. ESC=$( $e "\e")
  7. TPUT(){ $e "\e[${1};${2}H" ;}
  8. CLEAR(){ $e "\ec";}
  9. # 25 возможно это
  10. CIVIS(){ $e "\e[?25l";}
  11. # это цвет текста списка перед курсором при значении 0 в переменной UNMARK(){ $e "\e[0m";}
  12. MARK(){ $e "\e[1;45m";}
  13. # 0 это цвет списка
  14. UNMARK(){ $e "\e[0m";}
  15. # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Эти строки задают цвет фона ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  16. R(){ CLEAR ;stty sane;CLEAR;}; # в этом варианте фон прозрачный
  17. HEAD(){ for (( a=2; a<=21; a++ ))
  18. do
  19. TPUT $a 1
  20. $E "\033[1;35m\xE2\x94\x82 \xE2\x94\x82\033[0m";
  21. done
  22. TPUT 3 4
  23. $E "\033[1;36m*** Ttyrec ***\033[0m";
  24. TPUT 4 8
  25. $E "\033[90mtty рекордер\033[0m";
  26. TPUT 5 1
  27. $E "\033[35m$c\033[0m";
  28. TPUT 10 1
  29. $E "\033[35m+- Опции ------------------------------------- Options ------+\033[0m";
  30. TPUT 14 1
  31. $E "\033[35m+- Команды ----------------------------------- Commands -----+\033[0m";
  32. TPUT 18 1
  33. $E "\033[35m+- Up \xE2\x86\x91 \xE2\x86\x93 Down Select Enter ---------------------------------+\033[0m";
  34. MARK;TPUT 1 1
  35. $E "$c";UNMARK;}
  36. i=0; CLEAR; CIVIS;NULL=/dev/null
  37. # 32 это расстояние сверху и 48 это расстояние слева
  38. FOOT(){ MARK;TPUT 21 1
  39. $E "$c";UNMARK;}
  40. # это управляет кнопками ввер/хвниз
  41. i=0; CLEAR; CIVIS;NULL=/dev/null
  42. #
  43. ARROW(){ IFS= read -s -n1 key 2>/dev/null >&2
  44. if [[ $key = $ESC ]];then
  45. read -s -n1 key 2>/dev/null >&2;
  46. if [[ $key = \[ ]]; then
  47. read -s -n1 key 2>/dev/null >&2;
  48. if [[ $key = A ]]; then echo up;fi
  49. if [[ $key = B ]];then echo dn;fi
  50. fi
  51. fi
  52. if [[ "$key" == "$($e \\x0A)" ]];then echo enter;fi;}
  53. M0(){ TPUT 6 3; $e " Oбзор \033[32mSynopsis \033[0m";}
  54. M1(){ TPUT 7 3; $e " Описание \033[32mDescription \033[0m";}
  55. M2(){ TPUT 8 3; $e " Окружающая среда \033[32mEnvironment \033[0m";}
  56. M3(){ TPUT 9 3; $e " Смотрите также \033[32mSee Also \033[0m";}
  57. #
  58. M4(){ TPUT 11 3; $e " Добавьте вывод в файл или ttyrecord \033[32m-a \033[0m";}
  59. M5(){ TPUT 12 3; $e " Aвтоматически вызывает uudecode и сохраняет \033[32m-u \033[0m";}
  60. M6(){ TPUT 13 3; $e " Вызвать команду при запуске ttyrec \033[32m-e command \033[0m";}
  61. #
  62. M7(){ TPUT 15 3; $e " Запись сеанса в файл \033[32mttyrec \033[0m";}
  63. M8(){ TPUT 16 3; $e " Oстановить запись \033[32mexit \033[0m";}
  64. M9(){ TPUT 17 3; $e " Воспроизвести \033[32mttyplay \033[0m";}
  65. #
  66. M10(){ TPUT 19 3; $e " \033[32mExit \033[0m";}
  67. LM=10
  68. MENU(){ for each in $(seq 0 $LM);do M${each};done;}
  69. POS(){ if [[ $cur == up ]];then ((i--));fi
  70. if [[ $cur == dn ]];then ((i++));fi
  71. if [[ $i -lt 0 ]];then i=$LM;fi
  72. if [[ $i -gt $LM ]];then i=0;fi;}
  73. REFRESH(){ after=$((i+1)); before=$((i-1))
  74. if [[ $before -lt 0 ]];then before=$LM;fi
  75. if [[ $after -gt $LM ]];then after=0;fi
  76. if [[ $j -lt $i ]];then UNMARK;M$before;else UNMARK;M$after;fi
  77. if [[ $after -eq 0 ]] || [ $before -eq $LM ];then
  78. UNMARK; M$before; M$after;fi;j=$i;UNMARK;M$before;M$after;}
  79. INIT(){ R;HEAD;FOOT;MENU;}
  80. SC(){ REFRESH;MARK;$S;$b;cur=`ARROW`;}
  81. # Функция возвращения в меню
  82. ES(){ MARK;$e " ENTER = main menu ";$b;read;INIT;};INIT
  83. while [[ "$O" != " " ]]; do case $i in
  84. 0) S=M0;SC;if [[ $cur == enter ]];then R;echo " ttyrec [-a] [-u] [-e command] [file]";ES;fi;;
  85. 1) S=M1;SC;if [[ $cur == enter ]];then R;echo " Ttyrec — это tty-рекордер. Это производная команда script для записи информации о времени с микросекундной точностью. Он может записывать emacs -nw, vi, lynx или
  86. любые программы, работающие на tty.
  87. Ttyrec вызывает оболочку и записывает сеанс до выхода из оболочки. Записанные данные можно воспроизвести с помощью ttyplay. Если указан файл аргументов, сеанс
  88. будет записан в этот файл. В противном случае по умолчанию используется ttyrecord.
  89. Файл формата tty не содержит какой либо информации об используемой кодировке и размере эмулятора терминала необходимого для воспроизведения файла.";ES;fi;;
  90. 2) S=M2;SC;if [[ $cur == enter ]];then R;echo " SHELL Если переменная SHELL существует, оболочка, разветвленная ttyrec, будет этой оболочкой. Если он не установлен, предполагается оболочка Bourne.
  91. (Большинство оболочек устанавливают это переменная автоматически).";ES;fi;;
  92. 3) S=M3;SC;if [[ $cur == enter ]];then R;echo " script, ttyplay, ttytime, uuencode, uudecode";ES;fi;;
  93. 4) S=M4;SC;if [[ $cur == enter ]];then R;echo " Примените выход к файлу или ttyrecord, а не переписать его.";ES;fi;;
  94. 5) S=M5;SC;if [[ $cur == enter ]];then R;echo " С помощью этой опции ttyrec автоматически вызывает uudecode и сохраняет его вывод, когда закодированные данные появляются в сеансе. Позволит нам передавать
  95. файлы с удаленного хоста.";ES;fi;;
  96. 6) S=M6;SC;if [[ $cur == enter ]];then R;echo " Вызвать команду при запуске ttyrec.";ES;fi;;
  97. 7) S=M7;SC;if [[ $cur == enter ]];then R;echo " ttyrec -a file.tty";ES;fi;;
  98. 8) S=M8;SC;if [[ $cur == enter ]];then R;echo " Ctrl + D
  99. или
  100. exit";ES;fi;;
  101. #
  102. 9) S=M9;SC;if [[ $cur == enter ]];then R;echo "
  103. с помощью ttyplay запускается воспроизведение tty-файла в режиме "реального времени" (есть возможность
  104. изменения +/- скорости воспроизведения):
  105. ttyplay file.tty
  106. ";ES;fi;;
  107. 10) S=M10;SC;if [[ $cur == enter ]];then R;exit 0;fi;;
  108. esac;POS;done