Click here to Skip to main content
11,635,656 members (80,967 online)
Click here to Skip to main content

Terminal Control Library (C# VT100/ANSI/XTERM SSH Telnet)

, 2 Jan 2009 CPOL 182K 8.4K 67
Rate this:
Please Sign up or sign in to vote.
This is based on Poderosa Project http://sourceforge.net/projects/poderosa/

Introduction

My original project can be found here.

I've been trying for a while to come up with a .NET control that would handle VT100/ANSI formatting and connect to SSH2 servers.

I've been through the commercial ones and still haven't found one that suited me.

My last project was based on Granados SSH library (open source SSH .NET implementation) and AckTerm (open source partially completed VT100 control).

Background

This library is an attempt at creating a library based on the "Poderosa" project which can be found here.

Poderosa IMO is the best terminal emulator. It's open source, and is better than the commercial clients. Go check it out for yourself, it's worth it. You can find the original Poderosa CSV source there.

I tried for a couple of weeks to encapsulate components of Poderosa, but the code comments are all in Japanese and I couldn't find any good docs that described the source code. The developer community for Poderosa also appears to be all Japanese, so I felt pretty much on my own.

Using the Code

What I pretty much did here was encapsulate the entire Poderosa application into a library. Then I exposed certain elements so an application developer can simply drop the "Terminal Control.dll" into his/her app and have a control that acts like you would expect any .NET control to act.

This code was written using Visual Studio .NET 2005 Professional and requires .NET Framework 2.0.

Points of Interest

The Poderosa solution is made up of 5 projects:

  1. Container - This is the actual Poderosa application
  2. Terminal - A library providing Telnet capabilities as well as the Terminal Emulation
  3. Common - Code that is shared between the Poderosa application and the Port Forwarding Tool
  4. Granados - SSH library that supports just about every feature of SSH
  5. Portforwarding - A standalone application (uses Terminal, Common, and Granados libraries) that provides SSH portforwarding functionality

First Step

What I've done with my library, was to change "Container" into a Library output, and implement a public class based on System.Windows.Forms.Control.

Second Step

The first time my class ("WalburySoftware.TerminalControl") is instanced, it runs Poderosa code:

GApp.Run(args); GApp._frame._multiPaneControl.InitUI(null, GApp.Options);
GEnv.InterThreadUIService.MainFrameHandle = GApp._frame.Handle; 

Poderosa has lots and lots and lots of static variables. Until I can get the time and motivation to go through them and make the appropriate changes, these variables will need to be initialized before you can use any of Poderosa's classes.

Third Step

If you look at the method Poderosa.ConnectionCommandTarget.Resize, you'll see the line:

if(GEnv.Connections.FindTag(_connection).ModalTerminalTask!=null) 
	return CommandResult.Denied 

This throws an exception. I took it out because it doesn't do anything for my library. I'm not sure what the ModalTerminalTask variable is used for. If you include that line, the terminal will not resize properly.

Final Step

Now we are free to create and use TerminalPanes as we need.

You'll see the steps in WalburySoftware.TerminalControl.Connect() that connect the TerminalPane to an SSH2 connection.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

Share

About the Author

Columbus-MCSD
United States United States
No Biography provided

You may also be interested in...

Comments and Discussions

 
Question!!! http://dj9okeyxktdvd.cloudfront.net/script/Forums/Images/smiley_smile.gif !!! Pin
Member 1147611928-Feb-15 8:33
memberMember 1147611928-Feb-15 8:33 
QuestionHas anyone tried to implement this to serial port? Pin
ElectroMonster18-Dec-14 11:47
memberElectroMonster18-Dec-14 11:47 
QuestionMy vote of 5 Pin
Member 409630915-Dec-14 23:36
memberMember 409630915-Dec-14 23:36 
QuestionHTOP Fails? Pin
Taylor 1123666316-Nov-14 10:37
memberTaylor 1123666316-Nov-14 10:37 
QuestionQuestions: cant paste & errors Pin
sandaasu27-Jul-14 2:32
membersandaasu27-Jul-14 2:32 
AnswerRe: Questions: cant paste & errors Pin
Prashant. B. Chavan3-Aug-14 0:20
memberPrashant. B. Chavan3-Aug-14 0:20 
GeneralRe: Questions: cant paste & errors Pin
sandaasu11-Aug-14 0:50
membersandaasu11-Aug-14 0:50 
SuggestionRe: Questions: cant paste & errors Pin
Prashant. B. Chavan16-Aug-14 0:22
memberPrashant. B. Chavan16-Aug-14 0:22 
GeneralRe: Questions: cant paste & errors Pin
sandaasu11-Aug-14 8:30
membersandaasu11-Aug-14 8:30 
GeneralRe: Questions: cant paste & errors Pin
Prashant. B. Chavan16-Aug-14 0:39
memberPrashant. B. Chavan16-Aug-14 0:39 
GeneralRe: Questions: cant paste & errors Pin
sandaasu6-Oct-14 9:38
membersandaasu6-Oct-14 9:38 
GeneralRe: Questions: cant paste & errors Pin
Prashant. B. Chavan8-Oct-14 9:54
memberPrashant. B. Chavan8-Oct-14 9:54 
Questionproblem in getting text from terminalemulator Pin
maulik2915-Jul-14 19:25
membermaulik2915-Jul-14 19:25 
QuestionSSH PORT Pin
cavalin xucro29-Mar-14 7:31
membercavalin xucro29-Mar-14 7:31 
AnswerRe: SSH PORT Pin
Prashant. B. Chavan11-Apr-14 23:00
memberPrashant. B. Chavan11-Apr-14 23:00 
SuggestionSending an ArrowKey Press Pin
John Mansell28-Dec-13 7:38
memberJohn Mansell28-Dec-13 7:38 
QuestionThis application in asp.net(Web Application) Pin
wskumar3-Dec-13 4:10
memberwskumar3-Dec-13 4:10 
AnswerRe: This application in asp.net(Web Application) Pin
Prashant. B. Chavan2-Aug-14 23:58
memberPrashant. B. Chavan2-Aug-14 23:58 
Questionvi editor in Telnet mode Pin
lucaal14-Oct-13 20:58
memberlucaal14-Oct-13 20:58 
GeneralAWESOME! Pin
cavalin xucro18-Aug-13 10:00
membercavalin xucro18-Aug-13 10:00 
GeneralMy vote of 5 Pin
Member 1002960720-Jun-13 1:06
memberMember 1002960720-Jun-13 1:06 
Questionread from terminal Data(TerminalPane.ConnectionTag.Document.LastLineNumber using) Pin
Member 86027667-Jun-13 6:19
memberMember 86027667-Jun-13 6:19 
QuestionHow to refresh the data in the terminal control screen? Pin
JerryFinuliar5-May-13 20:13
memberJerryFinuliar5-May-13 20:13 
Questionhow to copy informations from terminal. Pin
dainu3-May-13 22:21
memberdainu3-May-13 22:21 
when i execute 'ls -al',
i want to copy the results from terminal.
is there something good ways?
tks
AnswerRe: how to copy informations from terminal. Pin
Columbus-MCSD4-May-13 3:27
memberColumbus-MCSD4-May-13 3:27 
GeneralRe: how to copy informations from terminal. Pin
dainu4-May-13 3:40
memberdainu4-May-13 3:40 
Questioncan you give me example for serial connect,,, Pin
tanjiejun19823-Feb-13 22:11
membertanjiejun19823-Feb-13 22:11 
QuestionGetting Exception Pin
SyedWaqas2959-Dec-12 23:17
memberSyedWaqas2959-Dec-12 23:17 
SuggestionFixed Telnet and added Serial connection metod Pin
cholegm28-Mar-12 1:56
membercholegm28-Mar-12 1:56 
NewsATTENTION: This project is outdated Pin
Elmue2-Nov-11 16:12
memberElmue2-Nov-11 16:12 
BugWhen i execute 2 doc commnds it work only for first... for second it always gives "More ?" kind of responce. Pin
prakash gajera17-Oct-11 3:12
memberprakash gajera17-Oct-11 3:12 
GeneralRe: When i execute 2 doc commnds it work only for first... for second it always gives "More ?" kind of responce. Pin
Member 440167625-Jan-13 10:37
memberMember 440167625-Jan-13 10:37 
QuestionDisconnect Pin
Member 42411152-Oct-11 11:31
memberMember 42411152-Oct-11 11:31 
AnswerRe: Disconnect Pin
Columbus-MCSD2-Oct-11 17:42
memberColumbus-MCSD2-Oct-11 17:42 
QuestionCapturing incoming data Pin
Columbus-MCSD16-Sep-11 5:25
memberColumbus-MCSD16-Sep-11 5:25 
QuestionMad props - a few questions. Pin
jtlutgen9-Sep-10 9:32
memberjtlutgen9-Sep-10 9:32 
AnswerRe: Mad props - a few questions. Pin
WuFei0727-Oct-10 10:25
memberWuFei0727-Oct-10 10:25 
GeneralRe: Mad props - a few questions. Pin
Columbus-MCSD2-Sep-11 0:30
memberColumbus-MCSD2-Sep-11 0:30 
QuestionHow to read output of command into some variable? Pin
Member 322335128-Jun-10 3:34
memberMember 322335128-Jun-10 3:34 
GeneralProblems with TerminalControl and Telnet Connection Pin
marcaurel198423-Jun-10 18:57
membermarcaurel198423-Jun-10 18:57 
GeneralRe: Problems with TerminalControl and Telnet Connection Pin
sdrey23-Jun-10 22:44
membersdrey23-Jun-10 22:44 
GeneralRe: Problems with TerminalControl and Telnet Connection Pin
marcaurel198423-Jun-10 23:39
membermarcaurel198423-Jun-10 23:39 
GeneralSerial Port Connection Pin
sdrey16-Jun-10 15:39
membersdrey16-Jun-10 15:39 
GeneralRe: Serial Port Connection Pin
Columbus-MCSD2-Sep-11 0:31
memberColumbus-MCSD2-Sep-11 0:31 
GeneralReading and hiding ansi escape sequence Pin
eldwinkhong12-May-10 20:59
membereldwinkhong12-May-10 20:59 
GeneralRe: Reading and hiding ansi escape sequence Pin
ElectroMonster26-Jan-15 8:37
memberElectroMonster26-Jan-15 8:37 
GeneralUse Terminal Emulator portion only Pin
Broncos-Freak5-Mar-10 4:36
memberBroncos-Freak5-Mar-10 4:36 
GeneralRe: Use Terminal Emulator portion only Pin
Columbus-MCSD2-Sep-11 0:32
memberColumbus-MCSD2-Sep-11 0:32 
Questiondo you have serial port and telnet example in C# ? Pin
brandnew1231-Mar-10 4:36
memberbrandnew1231-Mar-10 4:36 
AnswerRe: do you have serial port and telnet example in C# ? Pin
stuckne17-Apr-11 5:15
memberstuckne17-Apr-11 5:15 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Terms of Use | Mobile
Web03 | 2.8.150728.1 | Last Updated 2 Jan 2009
Article Copyright 2007 by Columbus-MCSD
Everything else Copyright © CodeProject, 1999-2015
Layout: fixed | fluid