MacroEnv.cs
上传用户:szltgg
上传日期:2019-05-16
资源大小:604k
文件大小:6k
源码类别:

Telnet服务器

开发平台:

C#

  1. /*
  2. * Copyright (c) 2005 Poderosa Project, All Rights Reserved.
  3. * $Id: MacroEnv.cs,v 1.2 2005/04/20 08:45:45 okajima Exp $
  4. */
  5. using System;
  6. using System.Diagnostics;
  7. using System.Windows.Forms;
  8. using System.Collections;
  9. using Poderosa.Macro;
  10. using Poderosa.Config;
  11. using Poderosa.Terminal;
  12. using Poderosa.Communication;
  13. using Poderosa.Connection;
  14. using Poderosa.ConnectionParam;
  15. using PConnection = Poderosa.Macro.Connection;
  16. namespace Poderosa.MacroEnv
  17. {
  18. internal class ConnectionListImpl : ConnectionList {
  19. public override int Count {
  20. get {
  21. return GEnv.Connections.Count;
  22. }
  23. }
  24. public override IEnumerator GetEnumerator() {
  25. return new EnumeratorWrapper(GEnv.Connections.GetEnumerator());
  26. }
  27. public override PConnection ActiveConnection {
  28. get {
  29. return GEnv.Connections.ActiveConnection==null? null : new ConnectionImpl(GEnv.Connections.ActiveTag);
  30. }
  31. }
  32. public override PConnection Open(TerminalParam param) {
  33. ConnectionTag con = GApp.InterThreadUIService.OpenConnection(param);
  34. return con==null? null : new ConnectionImpl(con);
  35. }
  36. public override PConnection OpenShortcutFile(string filename) {
  37. ConnectionTag con = GApp.InterThreadUIService.OpenShortcut(filename);
  38. return con==null? null : new ConnectionImpl(con);
  39. }
  40. }
  41. internal class EnumeratorWrapper : IEnumerator {
  42. private IEnumerator _inner;
  43. public EnumeratorWrapper(IEnumerator i) {
  44. _inner = i;
  45. }
  46. public void Reset() {
  47. _inner.Reset();
  48. }
  49. public bool MoveNext() {
  50. return _inner.MoveNext();
  51. }
  52. public object Current {
  53. get {
  54. return new ConnectionImpl((ConnectionTag)_inner.Current);
  55. }
  56. }
  57. }
  58. internal class ConnectionImpl : PConnection {
  59. private ConnectionTag _tag;
  60. public ConnectionImpl(ConnectionTag t) {
  61. _tag = t;
  62. }
  63. public override int TerminalWidth {
  64. get {
  65. return _tag.Connection.TerminalWidth;
  66. }
  67. }
  68. public override int TerminalHeight {
  69. get {
  70. return _tag.Connection.TerminalHeight;
  71. }
  72. }
  73. public override void Activate() {
  74. GApp.InterThreadUIService.ActivateConnection(_tag);
  75. }
  76. public override void Activate(PanePosition pos) {
  77. GApp.InterThreadUIService.SetPanePosition(_tag, pos);
  78. }
  79. public override void Close() {
  80. GApp.InterThreadUIService.CloseConnection(_tag);
  81. }
  82. public override void Transmit(string data) {
  83. _tag.Connection.WriteChars(data.ToCharArray());
  84. }
  85. public override void TransmitLn(string data) {
  86. data += new string(TerminalUtil.NewLineChars(_tag.Connection.Param.TransmitNL));
  87. _tag.Connection.WriteChars(data.ToCharArray());
  88. }
  89. public override void SendBreak() {
  90. _tag.Connection.SendBreak();
  91. }
  92. public override string ReceiveLine() {
  93. return _tag.Terminal.ReadLineFromMacroBuffer();
  94. }
  95. public override string ReceiveData() {
  96. return _tag.Terminal.ReadAllFromMacroBuffer();
  97. }
  98. public override void WriteComment(string comment) {
  99. _tag.Terminal.Logger.Comment(comment);
  100. }
  101. }
  102. internal class FrameImpl : Frame {
  103. public override GFrameStyle FrameStyle {
  104. get {
  105. return GApp.Options.FrameStyle;
  106. }
  107. set{
  108. GApp.InterThreadUIService.SetFrameStyle(value, -1, -1, -1, -1);
  109. }
  110. }
  111. public override void SetStyleS(int width, int height) {
  112. if(width<=0 || width>=256) throw new ArgumentException(GApp.Strings.GetString("Message.MacroEnv.WidthIsOutOfRange"));
  113. if(height<=0 || height>=256) throw new ArgumentException(GApp.Strings.GetString("Message.MacroEnv.HeightIsOutOfRange"));
  114. GApp.InterThreadUIService.SetFrameStyle(GFrameStyle.Single, width, height, -1, -1);
  115. }
  116. public override void SetStyleH(int width, int height1, int height2) {
  117. if(width<=0 || width>=256) throw new ArgumentException(GApp.Strings.GetString("Message.MacroEnv.WidthIsOutOfRange"));
  118. if(height1<=0 || height1>=256) throw new ArgumentException(GApp.Strings.GetString("Message.MacroEnv.HeightIsOutOfRange"));
  119. if(height2<=0 || height2>=256) throw new ArgumentException(GApp.Strings.GetString("Message.MacroEnv.HeightIsOutOfRange"));
  120. GApp.InterThreadUIService.SetFrameStyle(GFrameStyle.DivHorizontal, width, height1, width, height2);
  121. }
  122. public override void SetStyleV(int width1, int width2, int height) {
  123. if(width1<=0 || width1>=256) throw new ArgumentException(GApp.Strings.GetString("Message.MacroEnv.WidthIsOutOfRange"));
  124. if(width2<=0 || width2>=256) throw new ArgumentException(GApp.Strings.GetString("Message.MacroEnv.WidthIsOutOfRange"));
  125. if(height<=0 || height>=256) throw new ArgumentException(GApp.Strings.GetString("Message.MacroEnv.HeightIsOutOfRange"));
  126. GApp.InterThreadUIService.SetFrameStyle(GFrameStyle.DivVertical, width1, height, width2, height);
  127. }
  128. }
  129. internal class UtilImpl : Util {
  130. public override void MessageBox(string msg) {
  131. GApp.InterThreadUIService.Warning(msg);
  132. }
  133. public override void ShellExecute(string verb, string filename) {
  134. int r = Win32.ShellExecute(Win32.GetDesktopWindow(), verb, filename, "", "", 1).ToInt32(); //1偼SW_SHOWNORMAL
  135. if(r<=31) 
  136. throw new ArgumentException(String.Format(GApp.Strings.GetString("Message.MacroEnv.ShellExecuteError"), verb, filename));
  137. }
  138. public override void Exec(string command) {
  139. int r = Win32.WinExec(command, 1);
  140. if(r<=31) 
  141. throw new ArgumentException(String.Format(GApp.Strings.GetString("Message.MacroEnv.ExecError"), command));
  142. }
  143. }
  144. internal class DebugServiceImpl : DebugService {
  145. private MacroTraceWindow _debugWindow;
  146. public DebugServiceImpl(MacroTraceWindow dw) {
  147. _debugWindow = dw;
  148. }
  149. public override void Trace(string msg) {
  150. if(_debugWindow==null || _debugWindow.IsDisposed) return;
  151. _debugWindow.AddLine(msg);
  152. }
  153. public override void PrintStackTrace() {
  154. if(_debugWindow==null || _debugWindow.IsDisposed) return;
  155. string[] s = System.Environment.StackTrace.Split(new char[] { 'n','r' });
  156. //偙偺PrintStackTrace偐傜愭偑昁梫
  157. bool f = false;
  158. foreach(string l in s) {
  159. if(f && l.Length>0) _debugWindow.AddLine(l);
  160. if(!f && l.IndexOf("PrintStackTrace")!=-1) f = true;
  161. }
  162. }
  163. }
  164. }