Annotation of sbbs/src/sbbs3/ctrl/spyformunit.cpp, revision 1.1.1.1

1.1       root        1: /* Synchronet Control Panel (GUI Borland C++ Builder Project for Win32) */
                      2: 
                      3: /* $Id: SpyFormUnit.cpp,v 1.13 2003/05/10 03:19:03 rswindell Exp $ */
                      4: 
                      5: /****************************************************************************
                      6:  * @format.tab-size 4          (Plain Text/Source Code File Header)                    *
                      7:  * @format.use-tabs true       (see http://www.synchro.net/ptsc_hdr.html)              *
                      8:  *                                                                                                                                                     *
                      9:  * Copyright 2003 Rob Swindell - http://www.synchro.net/copyright.html         *
                     10:  *                                                                                                                                                     *
                     11:  * This program is free software; you can redistribute it and/or                       *
                     12:  * modify it under the terms of the GNU General Public License                         *
                     13:  * as published by the Free Software Foundation; either version 2                      *
                     14:  * of the License, or (at your option) any later version.                                      *
                     15:  * See the GNU General Public License for more details: gpl.txt or                     *
                     16:  * http://www.fsf.org/copyleft/gpl.html                                                                                *
                     17:  *                                                                                                                                                     *
                     18:  * Anonymous FTP access to the most recent released source is available at     *
                     19:  * ftp://vert.synchro.net, ftp://cvs.synchro.net and ftp://ftp.synchro.net     *
                     20:  *                                                                                                                                                     *
                     21:  * Anonymous CVS access to the development source and modification history     *
                     22:  * is available at cvs.synchro.net:/cvsroot/sbbs, example:                                     *
                     23:  * cvs -d :pserver:[email protected]:/cvsroot/sbbs login                       *
                     24:  *     (just hit return, no password is necessary)                                                     *
                     25:  * cvs -d :pserver:[email protected]:/cvsroot/sbbs checkout src                *
                     26:  *                                                                                                                                                     *
                     27:  * For Synchronet coding style and modification guidelines, see                                *
                     28:  * http://www.synchro.net/source.html                                                                          *
                     29:  *                                                                                                                                                     *
                     30:  * You are encouraged to submit any modifications (preferably in Unix diff     *
                     31:  * format) via e-mail to [email protected]                                                                      *
                     32:  *                                                                                                                                                     *
                     33:  * Note: If this box doesn't appear square, then you need to fix your tabs.    *
                     34:  ****************************************************************************/
                     35: 
                     36:  #include <vcl.h>
                     37: #pragma hdrstop
                     38: 
                     39: #include "MainFormUnit.h"
                     40: #include "SpyFormUnit.h"
                     41: #include "telnet.h"
                     42: 
                     43: #define SPYBUF_LEN  10000
                     44: //---------------------------------------------------------------------------
                     45: #pragma package(smart_init)
                     46: #pragma link "Emulvt"
                     47: #pragma resource "*.dfm"
                     48: TSpyForm *SpyForm;
                     49: //---------------------------------------------------------------------------
                     50: __fastcall TSpyForm::TSpyForm(TComponent* Owner)
                     51:     : TForm(Owner)
                     52: {
                     53:     Width=MainForm->SpyTerminalWidth;
                     54:     Height=MainForm->SpyTerminalHeight;
                     55:     Terminal = new TEmulVT(this);
                     56:     Terminal->Parent=this;
                     57:     Terminal->Align=alClient;
                     58:     Terminal->OnKeyPress=FormKeyPress;
                     59:     Terminal->OnMouseUp=FormMouseUp;
                     60:     Terminal->AutoWrap=true;
                     61:     ActiveControl=Terminal;
                     62: }
                     63: //---------------------------------------------------------------------------
                     64: __fastcall TSpyForm::~TSpyForm()
                     65: {
                     66:        delete Terminal;
                     67: }
                     68: //---------------------------------------------------------------------------
                     69: int __fastcall TSpyForm::strip_telnet(uchar *buf, int len)
                     70: {
                     71:     int i;
                     72:     int telnet_cmd=0;
                     73:     int newlen=0;
                     74: 
                     75:     for(i=0;i<len;i++) {
                     76:                if(buf[i]==FF) {
                     77:                        Terminal->Clear();
                     78:                        continue;
                     79:                }
                     80:         if(buf[i]==TELNET_IAC || telnet_cmd) {
                     81:             if(telnet_cmd==1 && buf[i]==TELNET_IAC) {
                     82:                 telnet_cmd=0;   /* escape IAC */
                     83:                 continue;
                     84:             }
                     85:             if(telnet_cmd==1 && buf[i]<TELNET_WILL) {
                     86:                 telnet_cmd=0;   /* single byte command */
                     87:                 continue;
                     88:             }
                     89:             if(telnet_cmd>=2) {
                     90:                 telnet_cmd=0;   /* two byte command */
                     91:                 continue;
                     92:             }
                     93:             telnet_cmd++;
                     94:             continue;
                     95:         }
                     96:         buf[newlen++]=buf[i];
                     97:     }
                     98:     return(newlen);
                     99: }
                    100: //---------------------------------------------------------------------------
                    101: void __fastcall TSpyForm::SpyTimerTick(TObject *Sender)
                    102: {
                    103:     uchar   buf[1024];
                    104:     int     rd;
                    105: 
                    106:     if(*outbuf==NULL)
                    107:         return;
                    108: 
                    109:     rd=RingBufRead(*outbuf,buf,sizeof(buf)-1);
                    110:     if(rd) {
                    111:         rd=strip_telnet(buf,rd);
                    112:         Terminal->WriteBuffer(buf,rd);
                    113:         Timer->Interval=1;
                    114:     } else
                    115:         Timer->Interval=250;
                    116: }
                    117: //---------------------------------------------------------------------------
                    118: void __fastcall TSpyForm::FormShow(TObject *Sender)
                    119: {
                    120:     if((*outbuf=(RingBuf*)malloc(sizeof(RingBuf)))==NULL) {
                    121:         Terminal->WriteStr("Malloc failure!");
                    122:         return;
                    123:     }
                    124:     RingBufInit(*outbuf,SPYBUF_LEN);
                    125: 
                    126:     Timer->Enabled=true;
                    127: 
                    128:     Terminal->Font=MainForm->SpyTerminalFont;
                    129:     Terminal->Clear();
                    130:     Terminal->WriteStr("*** Synchronet Local Spy ***\r\n\r\n");
                    131:     Terminal->WriteStr("ANSI Terminal Emulation:"+CopyRight+"\r\n\r\n");
                    132: 
                    133:     KeyboardActive->Checked=!MainForm->SpyTerminalKeyboardActive;
                    134:     KeyboardActiveClick(Sender);
                    135: }
                    136: //---------------------------------------------------------------------------
                    137: 
                    138: void __fastcall TSpyForm::FormClose(TObject *Sender, TCloseAction &Action)
                    139: {
                    140:     Timer->Enabled=false;
                    141:     if(*outbuf!=NULL) {
                    142:         RingBufDispose(*outbuf);
                    143:         free(*outbuf);
                    144:         *outbuf=NULL;
                    145:     }
                    146:     MainForm->SpyTerminalWidth=Width;
                    147:     MainForm->SpyTerminalHeight=Height;
                    148:     MainForm->SpyTerminalKeyboardActive=KeyboardActive->Checked;
                    149: }
                    150: //---------------------------------------------------------------------------
                    151: 
                    152: void __fastcall TSpyForm::ChangeFontClick(TObject *Sender)
                    153: {
                    154:        TFontDialog *FontDialog=new TFontDialog(this);
                    155: 
                    156:     FontDialog->Font=MainForm->SpyTerminalFont;
                    157:     FontDialog->Execute();
                    158:     MainForm->SpyTerminalFont->Assign(FontDialog->Font);
                    159:     Terminal->Font=MainForm->SpyTerminalFont;
                    160:     delete FontDialog;
                    161:     Terminal->UpdateScreen();
                    162: }
                    163: //---------------------------------------------------------------------------
                    164: 
                    165: void __fastcall TSpyForm::FormKeyPress(TObject *Sender, char &Key)
                    166: {
                    167:     if(KeyboardActive->Checked && inbuf!=NULL && *inbuf!=NULL)
                    168:         RingBufWrite(*inbuf,&Key,1);
                    169: 
                    170: }
                    171: //---------------------------------------------------------------------------
                    172: 
                    173: void __fastcall TSpyForm::KeyboardActiveClick(TObject *Sender)
                    174: {
                    175:     KeyboardActive->Checked=!KeyboardActive->Checked;
                    176:     if(KeyboardActive->Checked)
                    177:         Terminal->Cursor=crIBeam;
                    178:     else
                    179:         Terminal->Cursor=crDefault;
                    180: }
                    181: //---------------------------------------------------------------------------
                    182: 
                    183: void __fastcall TSpyForm::FormMouseUp(TObject *Sender, TMouseButton Button,
                    184:       TShiftState Shift, int X, int Y)
                    185: {
                    186:     if(Button==mbRight)
                    187:         PopupMenu->Popup(ClientOrigin.x+X,ClientOrigin.y+Y);
                    188: }
                    189: //---------------------------------------------------------------------------
                    190: 
                    191: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.