亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? telnet.pas

?? 提供串行口存取的 Object Pascal 類 ( 1.2 版
?? PAS
?? 第 1 頁 / 共 2 頁
字號:
unit TELNET;
{$h-}
(*
**
** Serial and TCP/IP communication routines for DOS, OS/2 and Win9x/NT.
** Tested with: TurboPascal   v7.0,    (DOS)
**              VirtualPascal v2.1,    (OS/2, Win32)
**              FreePascal    v0.99.12 (DOS, Win32)
**              Delphi        v4.0.    (Win32)
**
** Version : 1.01
** Created : 21-May-1998
** Last update : 04-Apr-1999
**
** Note: (c) 1998-1999 by Maarten Bekers
**
*)

(*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-*)
 INTERFACE
(*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-*)

uses SockFunc, SockDef, Combase, BufUnit, Threads

     {$IFDEF WIN32}
       ,Windows
     {$ENDIF}

     {$IFDEF OS2}
       ,Os2Base
     {$ENDIF}

     {$IFDEF VirtualPascal}
       ,Use32
     {$ENDIF};

Const WriteTimeout   = 20000;                             { Wait max. 20 secs }
      ReadTimeOut    = 20000;                   { General event, 20 secs max }

      InBufSize      = 1024 * 32;
      OutBufSize     = 1024 * 32;


type TTelnetObj = Object(TCommObj)
        ReadProcPtr: Pointer;             { Pointer to TX/RX handler (thread) }
        WriteProcPtr: Pointer;            { Pointer to TX/RX handler (thread) }
        ThreadsInitted : Boolean;
        NeedNewCarrier : Boolean;
        TelnetCarrier  : Boolean;

        ClientRC      : Longint;

        InBuffer      : ^BufArrayObj;             { Buffer system internally used }
        OutBuffer     : ^BufArrayObj;

        DoTxEvent     : PSysEventObj; { Event manually set when we have to transmit }
        DoRxEvent     : PSysEventObj;      { Event manually set when we need data }

        TxClosedEvent : PSysEventObj;    { Event set when the Tx thread is closed }
        RxClosedEvent : PSysEventObj;    { Event set when the Rx thread is closed }

        CriticalTx    : PExclusiveObj;                        { Critical sections }
        CriticalRx    : PExclusiveObj;

        TxThread      : PThreadsObj;           { The Transmit and Receive threads }
        RxThread      : PThreadsObj;

        EndThreads    : Boolean;    { Set to true when we have to end the threads }

        constructor Init;
        destructor Done;

        function  Com_Open(Comport: Byte; BaudRate: Longint; DataBits: Byte;
                           Parity: Char; StopBits: Byte): Boolean; virtual;
        function  Com_OpenKeep(Comport: Byte): Boolean; virtual;
        function  Com_GetChar: Char; virtual;
        function  Com_CharAvail: Boolean; virtual;
        function  Com_Carrier: Boolean; virtual;
        function  Com_SendChar(C: Char): Boolean; virtual;
        function  Com_ReadyToSend(BlockLen: Longint): Boolean; virtual;
        function  Com_GetBPSrate: Longint; virtual;
        function  Com_GetHandle: Longint; virtual;

        procedure Com_OpenQuick(Handle: Longint); virtual;
        procedure Com_Close; virtual;
        procedure Com_SendBlock(var Block; BlockLen: Longint; var Written: Longint); virtual;
        procedure Com_ReadBlock(var Block; BlockLen: Longint; var Reads: Longint); virtual;
        procedure Com_GetBufferStatus(var InFree, OutFree, InUsed, OutUsed: Longint); virtual;
        procedure Com_SetDtr(State: Boolean); virtual;
        procedure Com_GetModemStatus(var LineStatus, ModemStatus: Byte); virtual;
        procedure Com_SetLine(BpsRate: longint; Parity: Char; DataBits, Stopbits: Byte); virtual;
        procedure Com_PurgeInBuffer; virtual;
        procedure Com_PurgeOutBuffer; virtual;

        procedure Com_PauseCom(CloseCom: Boolean); virtual;
        procedure Com_ResumeCom(OpenCom: Boolean); virtual;

        procedure Com_ReadProc(var TempPtr: Pointer);
        procedure Com_WriteProc(var TempPtr: Pointer);

        procedure Com_SetDataProc(ReadPtr, WritePtr: Pointer); virtual;

        function  Com_StartThread: Boolean;
        procedure Com_InitVars;
        procedure Com_StopThread;

        function  Com_SendWill(Option: Char): String;
        function  Com_SendWont(Option: Char): String;
        procedure Com_SendRawStr(TempStr: String);
        procedure Com_PrepareBufferRead(var CurBuffer: CharBufType; var TempOut: BufArrayObj; BlockLen: Longint);
        procedure Com_PrepareBufferWrite(var CurBuffer, TmpOutBuffer: CharBufType; var BlockLen: Longint);
     end; { object TTelnetObj }

Type PTelnetObj = ^TTelnetObj;

(*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-*)
 IMPLEMENTATION
(*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-*)

uses SysUtils;

(*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-*)

Const
  { Telnet Options }
  TELNET_IAC   = #255;                                 { Interpret as Command }
  TELNET_DONT  = #254;     { Stop performing, or not expecting him to perform }
  TELNET_DO    = #253;                    { Perform, or expect him to perform }
  TELNET_WONT  = #252;                                   { Refusal to perform }
  TELNET_WILL  = #251;                                    { Desire to perform }

  TELNET_SB    = #250;   { What follow is sub-negotiation of indicated option }
  TELNET_GA    = #249;                                      { Go ahead signal }
  TELNET_EL    = #248;                                  { Erase Line function }
  TELNET_EC    = #247;                             { Erase Character function }
  TELNET_AYT   = #246;                               { Are You There function }
  TELNET_AO    = #245;                                { Abort Output function }
  TELNET_IP    = #244;                           { Interrupt Process function }
  TELNET_BRK   = #243;                                  { NVT break character }
  TELNET_DM    = #242;                       { Data stream portion of a Synch }
  TELNET_NOP   = #241;                                         { No operation }
  TELNET_SE    = #240;                    { End of sub-negotiation parameters }
  TELNET_EOR   = #239;                                        { End of record }
  TELNET_ABORT = #238;                                        { Abort process }
  TELNET_SUSP  = #237;                              { Suspend current process }
  TELNET_EOF   = #236;                                          { End of file }

  TELNETOPT_BINARY = #0;                                    { Transmit binary }
  TELNETOPT_ECHO   = #1;                                          { Echo mode }
  TELNETOPT_SUPGA  = #3;                                  { Suppress Go-Ahead }
  TELNETOPT_TERM   = #24;                                     { Terminal Type }
  TELNETOPT_SPEED  = #32;                                    { Terminal Speed }

(*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-*)

constructor TTelnetObj.Init;
begin
  inherited Init;

  ThreadsInitted := false;
  NeedNewCarrier := true;
  TelnetCarrier := TRUE;
  Com_InitVars;
end; { constructor Init }

(*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-*)

destructor TTelnetObj.Done;
begin
  inherited done;
end; { destructor Done }

(*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-*)

procedure TTelnetObj.Com_SendRawStr(TempStr: String);
begin
  SockSend(ClientRC,
           @TempStr[1],
           Length(TempStr),
           0);
end; { proc. Com_SendRawStr }

(*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-*)

function TTelnetObj.Com_SendWill(Option: Char): String;
begin
  Result[1] := TELNET_IAC;
  Result[2] := TELNET_WILL;
  Result[3] := Option;
  SetLength(Result, 3);
end; { func. Com_SendWill }

(*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-*)

function TTelnetObj.Com_SendWont(Option: Char): String;
begin
  Result[1] := TELNET_IAC;
  Result[2] := TELNET_WONT;
  Result[3] := Option;
  SetLength(Result, 3);
end; { func. Com_SendWont }

(*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-*)

procedure TTelnetObj.Com_PrepareBufferRead(var CurBuffer: CharBufType; var TempOut: BufArrayObj; BlockLen: Longint);
var Counter   : Longint;
begin
  Counter := 00;
  if BlockLen = 0 then EXIT;

  While Counter <= (Blocklen - 01) do
    begin
      Case CurBuffer[Counter] of
        TELNET_IAC : begin                      { Escape command character }
                       Inc(Counter);

                       if CurBuffer[Counter] = TELNET_IAC then
                         begin
                           TempOut.Put(CurBuffer[Counter], 1);
                         end
                          else Case CurBuffer[Counter] of
                                  TELNET_DONT,
                                  TELNET_DO   : begin
                                                  Inc(Counter);

                                                  Case CurBuffer[Counter] of
                                                    TELNETOPT_BINARY,
                                                    TELNETOPT_ECHO   : begin
                                                                         Com_SendRawStr(Com_SendWill(CurBuffer[Counter]));
                                                                       end
                                                       else begin
                                                              Com_SendRawStr(Com_SendWont(CurBuffer[Counter]));
                                                            end; { if }
                                                  end; { case }
                                                end;
                               end; { case }

                     end; { if }
          else begin
                 TempOut.Put(CurBuffer[Counter], 1);
               end; { if }
      end; { case }

      Inc(Counter);
    end; { while }

end; { proc. Com_PrepareBufferRead }

(*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-*)

procedure TTelnetObj.Com_PrepareBufferWrite(var CurBuffer, TmpOutBuffer: CharBufType; var BlockLen: Longint);
var Counter   : Longint;
    TempStr   : String;
    NewCounter: Longint;
begin
  Counter := 00;
  NewCounter := 00;
  if BlockLen = 0 then EXIT;

  While Counter <= Blocklen do
    begin
      Case CurBuffer[Counter] of
        TELNET_IAC : begin                        { Escape command character }
                       TempStr := TELNET_IAC + TELNET_IAC;

                       TmpOutBuffer[NewCounter] := TELNET_IAC;
                       Inc(NewCounter);
                       TmpOutBuffer[NewCounter] := TELNET_IAC;
                       Inc(NewCounter);
                     end; { if }
          else begin
                 TmpOutBuffer[NewCounter] := CurBuffer[Counter];
                 Inc(NewCounter);
               end; { if }
      end; { case }

      Inc(Counter);
    end; { while }

  BlockLen := NewCounter - 1;
end; { proc. Com_PrepareBufferWrite }

(*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-*)

procedure TTelnetObj.Com_ReadProc(var TempPtr: Pointer);
var Available : Boolean;
    BytesRead : Longint;
    BlockLen  : Longint;
    ReturnCode: Longint;
begin
  repeat
     if DoRxEvent^.WaitForEvent(ReadTimeOut) then
      if NOT EndThreads then
       begin
         CriticalRx^.EnterExclusive;
         Available := (SockSelect(ClientRC) > 00);

         DoRxEvent^.ResetEvent;

         if (Available) OR (NeedNewCarrier) then
          begin
            {----------- Start reading the gathered date -------------------}
            NeedNewCarrier := false;

            if InBuffer^.BufRoom > 0 then
              begin
                BlockLen := InBuffer^.BufRoom;
                if BlockLen > 1024 then
                  BlockLen := 1024;

                if BlockLen > 00 then
                 begin
                   BytesRead := SockRecv(ClientRC,
                                         InBuffer^.TmpBuf,
                                         BlockLen,
                                         0);

                   if BytesRead = 0 then
                     begin
                       TelnetCarrier := false;

                       ReturnCode := SockErrorNo;

                       ErrorStr := 'Error in communications(1), #'+IntToStr(Returncode)+ ' / '+SysErrorMessage(Returncode);
                     end; { if }

                   if BytesRead = -1 then
                    begin
                       ReturnCode := SockErrorNo;

                       if ReturnCode <> WSAEWOULDBLOCK then
                         begin
                           TelnetCarrier := false;

                           ErrorStr := 'Error in communications(2), #'+IntToStr(ReturnCode)+ ' / '+SysErrorMessage(ReturnCode);
                           EndThreads := true;
                         end; { if }
                    end; { error }

                  if BytesRead > 00 then
                    begin
                      Com_PrepareBufferRead(InBuffer^.TmpBuf^, InBuffer^, BytesRead);
                    end; { if }
                 end; { if }
              end; { if }
          end; { if available }

         CriticalRx^.LeaveExclusive;
       end; { if RxEvent }
  until EndThreads;

  RxClosedEvent^.SignalEvent;
  ExitThisThread;
end; { proc. Com_ReadProc }

(*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-*)

procedure TTelnetObj.Com_WriteProc(var TempPtr: Pointer);
var BlockLen    : Longint;
    Written     : Longint;
    ReturnCode  : Longint;
    TempBuf     : ^CharBufType;
begin
  New(TempBuf);

  repeat
     if DoTxEvent^.WaitForEvent(WriteTimeOut) then
      if NOT EndThreads then
       begin
         CriticalTx^.EnterExclusive;
         DoTxEvent^.ResetEvent;

         if OutBuffer^.BufUsed > 00 then
           begin
             Written := 00;
             BlockLen := OutBuffer^.Get(OutBuffer^.TmpBuf^, OutBuffer^.BufUsed, false);

             Com_PrepareBufferWrite(OutBuffer^.TmpBuf^, TempBuf^, BlockLen);
             Written := SockSend(ClientRC,
                                 TempBuf,
                                 BlockLen,
                                 0);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
26uuu久久综合| 亚洲精品一区二区三区99| 理论片日本一区| 国产欧美日产一区| 欧美日韩一区二区在线视频| 精品亚洲aⅴ乱码一区二区三区| 亚洲欧美怡红院| 精品日韩成人av| 欧美亚洲禁片免费| 成人永久看片免费视频天堂| 日韩精品亚洲一区二区三区免费| 国产精品少妇自拍| 精品精品欲导航| 欧美日韩国产高清一区二区| www.久久精品| 国产成人免费xxxxxxxx| 久久精品国产99| 日本女优在线视频一区二区| 亚洲欧美日韩国产综合在线| 精品国产一区二区三区四区四| 欧美午夜影院一区| 色综合久久久久综合| 国产99久久久国产精品免费看| 麻豆精品在线看| 日韩中文字幕区一区有砖一区| 亚洲乱码国产乱码精品精98午夜| 亚洲国产成人午夜在线一区| 精品粉嫩aⅴ一区二区三区四区| 欧美精品v国产精品v日韩精品 | 精品少妇一区二区三区在线播放| 国产日产欧美精品一区二区三区| 欧美久久久久中文字幕| 欧美伊人精品成人久久综合97| 99久久国产综合精品麻豆| 国产高清不卡一区| 国产一本一道久久香蕉| 久久99国产精品麻豆| 美女视频一区二区三区| 免费三级欧美电影| 日韩av高清在线观看| 日韩精品亚洲专区| 日本在线不卡视频| 美女在线视频一区| 激情小说亚洲一区| 国产麻豆成人传媒免费观看| 久久精品72免费观看| 久久99久久久久久久久久久| 美女免费视频一区| 精品在线播放午夜| 国产露脸91国语对白| 国产精品538一区二区在线| 国产成人免费高清| 91影视在线播放| 色播五月激情综合网| 欧美三级韩国三级日本三斤| 8v天堂国产在线一区二区| 制服视频三区第一页精品| 337p亚洲精品色噜噜噜| 日韩欧美国产电影| 久久久久久久久久久99999| 国产欧美精品日韩区二区麻豆天美| 久久精品综合网| 亚洲日穴在线视频| 亚洲va韩国va欧美va| 毛片av中文字幕一区二区| 国产呦精品一区二区三区网站 | 欧美亚洲国产bt| 日韩限制级电影在线观看| 精品欧美乱码久久久久久1区2区| 久久久777精品电影网影网| 国产色91在线| 亚洲激情第一区| 麻豆久久久久久| 99re成人精品视频| 欧美区一区二区三区| 久久综合久久久久88| 亚洲欧美一区二区三区国产精品| 亚洲成av人片一区二区| 国产一本一道久久香蕉| 在线观看视频一区二区| 日韩视频免费观看高清在线视频| 国产日韩欧美在线一区| 午夜精品久久久久影视| 国产激情视频一区二区在线观看 | 日韩久久久精品| 亚洲天天做日日做天天谢日日欢 | 国产永久精品大片wwwapp | 色综合天天性综合| 538prom精品视频线放| 国产清纯白嫩初高生在线观看91 | 国产精品99久| 欧美亚洲国产一区在线观看网站| 久久先锋资源网| 亚洲成人一区二区| 国产一区二区三区观看| 欧美色手机在线观看| 久久久激情视频| 香蕉久久夜色精品国产使用方法 | 国产精品白丝在线| 蜜桃精品视频在线| 91久久精品网| 中文欧美字幕免费| 麻豆精品一二三| 在线一区二区三区四区五区| 精品国精品自拍自在线| 亚洲一区二区av在线| 成人小视频免费在线观看| 337p亚洲精品色噜噜| 亚洲欧美日韩综合aⅴ视频| 国内精品久久久久影院薰衣草| 色综合天天综合网国产成人综合天 | 国产精品久久久久久久久果冻传媒| 日本一道高清亚洲日美韩| 色av综合在线| 国产精品高潮呻吟| 国产精品一区二区男女羞羞无遮挡| 欧美日韩三级视频| 亚洲欧美韩国综合色| 国产91丝袜在线18| ww亚洲ww在线观看国产| 日产欧产美韩系列久久99| 在线精品视频一区二区三四| 中文字幕日本不卡| 成人在线综合网| 国产午夜精品一区二区三区视频 | 成人av网在线| 亚洲国产电影在线观看| 懂色中文一区二区在线播放| 精品福利在线导航| 激情综合网天天干| 精品久久国产老人久久综合| 蜜臀精品久久久久久蜜臀 | 亚洲精品久久7777| 91片在线免费观看| 亚洲人成网站影音先锋播放| 99视频超级精品| 亚洲日本乱码在线观看| 国产亚洲综合av| 激情偷乱视频一区二区三区| 欧美大片拔萝卜| 激情五月婷婷综合网| 久久这里只有精品首页| 国产一区二区三区在线观看精品| 日韩美女一区二区三区四区| 久久99热这里只有精品| 国产日产精品一区| av动漫一区二区| 亚洲视频 欧洲视频| 在线观看一区不卡| 日韩精品亚洲一区| 久久综合九色综合欧美就去吻| 国产精品原创巨作av| 中文成人av在线| 色婷婷综合久久久中文一区二区 | 国产伦精品一区二区三区免费迷 | 91女人视频在线观看| 一区二区三区免费观看| 欧美视频完全免费看| 青青草97国产精品免费观看| 欧美tickle裸体挠脚心vk| 国产成+人+日韩+欧美+亚洲| 成人欧美一区二区三区小说| 在线观看一区日韩| 免费观看日韩电影| 国产色婷婷亚洲99精品小说| 色网站国产精品| 日韩高清中文字幕一区| 欧美精品一区二区三区久久久| 国产不卡视频一区| 一区二区三区在线高清| 91精品国产色综合久久ai换脸 | 国产精品综合在线视频| 自拍视频在线观看一区二区| 在线成人免费视频| 国产iv一区二区三区| 一区二区三区免费网站| 日韩女同互慰一区二区| 99在线精品一区二区三区| 日韩精品一级二级| 国产精品国产三级国产三级人妇| 日本精品裸体写真集在线观看| 男人的天堂亚洲一区| 国产精品美女久久久久久| 欧美美女黄视频| 成人免费高清在线观看| 石原莉奈一区二区三区在线观看| 久久久噜噜噜久久中文字幕色伊伊| 91麻豆免费看片| 国产制服丝袜一区| 亚洲夂夂婷婷色拍ww47| 欧美精品一区二区三区蜜臀| 在线精品视频一区二区| 国产真实乱偷精品视频免| 亚洲bt欧美bt精品777| 国产欧美日产一区| 日韩欧美国产精品一区| 欧美性一区二区| 国产色91在线| 日韩欧美成人一区| 精品视频1区2区|