ga.tin 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. #nop vim: set filetype=tt:;
  2. /*
  3. 本文件属于 PaoTin++ 的一部分
  4. ===========
  5. PaoTin++ © 2020~2023 的所有版权均由担子炮(dzp <danzipao@gmail.com>) 享有并保留一切法律权利
  6. 你可以在遵照 GPLv3 协议的基础之上使用、修改及重新分发本程序。
  7. ===========
  8. */
  9. #var lib_ga[META] {
  10. {NAME} {GA}
  11. {DESC} {GA 处理。IAC GA 是服务器信息输出结尾符号}
  12. {AUTHOR} {担子炮}
  13. {NOTE} {本文件属于 PaoTin++ 的一部分}
  14. };
  15. #config {IAC GA} {ON};
  16. #func {lib_ga.Init} {
  17. #class data/lib/ga open;
  18. #list gXttPipeLine create {};
  19. #class data/lib/ga close;
  20. ttevent.Handle {SENT OUTPUT} {lib/ga} {lib/ga} {ga.send-output};
  21. ttevent.Handle {RECEIVED PROMPT} {lib/ga} {lib/ga} {ga.received-prompt};
  22. #return true;
  23. };
  24. load-lib telnet;
  25. event.Define {GA} {有参} {$MODULE} {接收到 IAC GA 时发射本事件,参数为造成本次输出的命令};
  26. #alias {ga.send-output} {
  27. #local cmd {$gTTEventArgZero};
  28. #replace cmd {{$TELNET[CR]?}$TELNET[LF]} {};
  29. #list gXttPipeLine add {$cmd};
  30. };
  31. #alias {ga.received-prompt} {
  32. #local line {$gTTEventArgv[1]};
  33. #if { "$line" == "== 未完继续 %*== (%*继续下一页%*)%*" } {
  34. #line gag; #cr; #return;
  35. };
  36. };
  37. #action {^> {$TELNET[GA]|$TELNET[EOR]}$} {
  38. #local line {%0};
  39. #replace line {{$TELNET[GA]|$TELNET[EOR]}$} {};
  40. #local cmd {};
  41. #if { &gXttPipeLine[] > 0 } {
  42. #local cmd {$gXttPipeLine[1]};
  43. #list gXttPipeLine delete {1};
  44. };
  45. event.Emit GA {} {$cmd};
  46. #line gag;
  47. } {1.000};
  48. #alias {ga.Off} {
  49. #send {$TELNET[IAC]$TELNET[WILL]$TELNET[LINEMODE]\};
  50. #send {$TELNET[IAC]$TELNET[DO]$TELNET[SGA]\};
  51. };
  52. #alias {ga.On} {
  53. #send {$TELNET[IAC]$TELNET[WILL]$TELNET[LINEMODE]\};
  54. #send {$TELNET[IAC]$TELNET[DONT]$TELNET[SGA]\};
  55. };
  56. #alias {ga.Sync} {
  57. sync.Wait {#0};
  58. };
  59. #alias {ga.Confirm} {
  60. #local cmd {%1};
  61. #if { &gXttPipeLine[] > 0 && {$gXttPipeLine[1]} !== {$cmd} } {
  62. dbgLog GA => GA 状态已失步,现在开始同步。;
  63. };
  64. #while { &gXttPipeLine[] > 0 && {$gXttPipeLine[1]} !== {$cmd} } {
  65. dbgLog GA => drop $gXttPipeLine[1];
  66. #list gXttPipeLine delete {1};
  67. };
  68. };
  69. #func {ga.ThisCmd} {
  70. #return {$gXttPipeLine[1]};
  71. };
  72. #func {ga.IsUnderway} {
  73. #if { &gXttPipeLine[] > 1 } {
  74. #return 1;
  75. };
  76. #else {
  77. #return 0;
  78. };
  79. };