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

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

?? pager.java

?? java telnet 服務器實現 .
?? JAVA
字號:
//License/*** * Java TelnetD library (embeddable telnet daemon) * Copyright (c) 2000-2005 Dieter Wimberger  * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are * met: * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the author nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. *   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS ``AS * IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE  * POSSIBILITY OF SUCH DAMAGE. ***/
package net.wimpi.telnetd.io.toolkit;

import net.wimpi.telnetd.io.BasicTerminalIO;
import net.wimpi.telnetd.io.terminal.ColorHelper;

import java.io.IOException;
import java.io.InputStream;
import java.io.StringReader;
import java.util.Vector;


/**
 * Class implementing a pager.
 *
 * @author Dieter Wimberger
 * @version 2.0 (16/07/2006);
 */
public class Pager {

  //Associations
  private BasicTerminalIO m_IO;
  //Members
  private StringReader m_Source;
  private String m_Prompt;
  private int m_StopKey;
  private Vector m_Chunks;
  private int m_ChunkPos;
  private int m_LastNewChunk;
  private boolean m_EOS;
  private int m_TermRows;
  private int m_TermCols;
  private boolean m_NoPrompt;
  private boolean m_ShowPos;
  private Statusbar m_Status;

  /**
   * Constructor method
   */
  public Pager(BasicTerminalIO io) {
    m_IO = io;
    setPrompt(DEFAULT_PROMPT);
    setStopKey(DEFAULT_STOPKEY);
    m_TermRows = m_IO.getRows();
    m_TermCols = m_IO.getColumns();
    m_Status = new Statusbar(m_IO, "Pager Status");
    m_Status.setAlignment(Statusbar.ALIGN_LEFT);
  }//constructor


  /**
   * Constructor method for a pager with a prompt set and a default
   * stop key.
   *
   * @param prompt  String that represents the paging prompt.
   * @param stopKey String that represents the stop key.
   */
  public Pager(BasicTerminalIO io, String prompt, char stopKey) {
    m_IO = io;
    setPrompt(prompt);
    m_StopKey = stopKey;
    m_TermRows = m_IO.getRows();
    m_TermCols = m_IO.getColumns();
    m_Status.setAlignment(Statusbar.ALIGN_LEFT);
  }//constructor

  /**
   * Mutator method for the pagers stop key.
   *
   * @param key char that represents the new stop key.
   */
  public void setStopKey(char key) {
    m_StopKey = (int) key;
  }//setStopKey

  /**
   * Mutator method for the pagers prompt.
   *
   * @param prompt String that represents the new promptkey.
   */
  public void setPrompt(String prompt) {
    m_Prompt = prompt;
  }//setPrompt

  private void updateStatus() {
    if (m_ShowPos) {
      m_Status.setStatusText(m_Prompt + " [" + (m_ChunkPos + 1) + "/" + m_Chunks.size() + "]");
    } else {
      m_Status.setStatusText(m_Prompt);
    }
  }//updateStatus

  /**
   * Method to make the pager add pager postion to the prompt.
   */
  public void setShowPosition(boolean b) {
    m_ShowPos = b;
  }//setShowPosition

  /**
   * Method that pages the String to the client terminal,
   * being aware of its geometry, and its geometry changes.
   *
   * @param str String to be paged.
   */
  public void page(String str) throws IOException {
    terminalGeometryChanged();
    boolean autoflush = m_IO.isAutoflushing();
    m_IO.setAutoflushing(true);
    //store raw
    m_Source = new StringReader(str);
    //do renderchunks
    m_ChunkPos = 0;
    m_LastNewChunk = 0;
    m_EOS = false;
    m_NoPrompt = false;

    renderChunks();
    if (m_Chunks.size() == 1) {
      m_IO.write((String) m_Chunks.elementAt(0));
    } else {
      m_IO.homeCursor();
      m_IO.eraseScreen();
      m_IO.write((String) m_Chunks.elementAt(m_ChunkPos));
      updateStatus();
      m_Status.draw();
      //storage for read byte
      int in = 0;
      do {
        m_NoPrompt = false;

        //get next key
        in = m_IO.read();
        if (terminalGeometryChanged()) {
          try {
            m_Source.reset();
          } catch (Exception ex) {
          }
          renderChunks();
          m_ChunkPos = 0;
          m_LastNewChunk = 0;
          m_EOS = false;
          m_NoPrompt = false;
          m_IO.homeCursor();
          m_IO.eraseScreen();
          m_IO.write((String) m_Chunks.elementAt(m_ChunkPos));
          updateStatus();
          m_Status.draw();
          continue;
        }
        switch (in) {
          case BasicTerminalIO.UP:
            drawPreviousPage();
            break;
          case BasicTerminalIO.DOWN:
            drawNextPage();
            break;
          case SPACE:
            drawNextPage();
            break;
          default:
            //test for stopkey, cant be switched because not constant
            if (in == m_StopKey) {
              //flag loop over
              in = -1;
              continue; //so that we omit prompt and return
            } else {
              m_IO.bell();
              continue;
            }
        }
        if (m_EOS) {
          in = -1;
          continue;
        }
        //prompt
        if (!m_NoPrompt) {
          updateStatus();
          m_Status.draw();
        }
      } while (in != -1);
      m_IO.eraseToEndOfLine();

    }
    m_IO.write("\n");
    m_Source.close();
    m_IO.setAutoflushing(autoflush);
  }//page(String)

  /**
   * Method that pages text read from an InputStream.
   *
   * @param in InputStream representing a source for paging.
   */
  public void page(InputStream in)
      throws IOException {

    //buffer prepared for about 3k
    StringBuffer inbuf = new StringBuffer(3060);

    //int buffering read
    int b = 0;

    while (b != -1) {
      b = in.read();
      if (b != -1) {
        inbuf.append((char) b);
      }
    }

    //now page the string
    page(inbuf.toString());
  }//page(InputStream)


  private void drawNextPage() throws IOException {
    //System.out.println("drawing next page");
    if (m_ChunkPos == m_LastNewChunk) {
      drawNewPage();
    } else {
      m_IO.homeCursor();
      m_IO.eraseScreen();
      m_IO.write((String) m_Chunks.elementAt(++m_ChunkPos));
    }
  }//drawNextPage


  private void drawPreviousPage() throws IOException {
    //System.out.println("drawing previous page");
    if (m_ChunkPos > 0) {
      m_IO.homeCursor();
      m_IO.eraseScreen();
      m_IO.write((String) m_Chunks.elementAt(--m_ChunkPos));
    } else {
      m_IO.bell();
      m_NoPrompt = true;
    }
  }//drawPreviousPage

  private void drawNewPage() throws IOException {

    //increase counters
    m_ChunkPos++;
    m_LastNewChunk++;
    //System.out.println("drawing new page chunkpos="+chunkpos+" lastnewchunk="+lastnewchunk);
    if (m_ChunkPos < m_Chunks.size()) {
      m_IO.homeCursor();
      m_IO.eraseScreen();
      m_IO.write((String) m_Chunks.elementAt(m_ChunkPos));
      //if(chunkpos==chunks.size()-1) {
      //	eos=true;
      //	noprompt=true;
      //}
    } else {
      //flag end
      m_EOS = true;
      m_NoPrompt = true;
    }
  }//drawNewPage

  private void renderChunks() {
    //System.out.println("Rendering Chunks");
    //System.out.println("Rows = " + m_TermRows + "::Columns = " + m_TermCols);
    //prepare with 10 as default, shouldnt be much larger normally
    m_Chunks = new Vector(20);
    //prepare a buffer the size of cols + security span
    StringBuffer sbuf = new StringBuffer((m_TermCols + 25) * 25);
    int b = 0;
    int cols = 0;
    int rows = 0;
    boolean colorskip = false;

    do {
      //System.out.println("LoopRows=" + rows + "LoopColumns=" + cols);
      //check rows to advance chunks
      if (rows == m_TermRows - 1) {
        //System.out.println("New page");
        //add chunk to vector
        m_Chunks.addElement(sbuf.toString());
        //replace for new buffer
        sbuf = new StringBuffer((m_TermCols + 25) * 25);
        //reset counters
        cols = 0;
        rows = 0;
      }
      //try read next byte
      try {
        b = m_Source.read();
      } catch (IOException ioex) {
        b = -1;
      }
      if (b == -1) {
        m_Chunks.addElement(sbuf.toString());
        continue; //will end the loop
      } else if (b == ColorHelper.MARKER_CODE || colorskip) {
        //add it, flag right for next byte and skip counting
        sbuf.append((char) b);
        if (!colorskip) {
          colorskip = true;
        } else {
          colorskip = false;
        }
        continue;
      } else if (b == 13) {
        //advance a row
        rows++;
        //reset cols
        cols = 0;
        //append a newline char
        sbuf.append("\n");
        //skip newline if given
        try {
          b = m_Source.read();
        } catch (IOException ex) {
          b = -1;
        }
        if (b == -1) {
          continue;
        }
        if (b != 10) {
          sbuf.append((char) b);
        }
        //System.out.println("Advancing a row (Newline).");
        //go into next loop run
        continue;
      } else if (b == 10) {
        //advance a row
        rows++;
        //reset cols
        cols = 0;
        //append a newline char
        sbuf.append("\n");
        continue;
      } else {
        sbuf.append((char) b);
        cols++;
      }

      //check cols to advance rows
      if (cols == m_TermCols) {
        rows++;
        //append a newline
        sbuf.append("\n");
        //reset cols!!!
        cols = 0;
        //System.out.println("Advancing a row (COLS).");
      }
    } while (b != -1);
    //System.out.println("renderChunks()::Done #="+ m_Chunks.size());
  }//renderChunks


  private boolean terminalGeometryChanged() {
    if (m_TermRows != m_IO.getRows() || m_TermCols != m_IO.getColumns()) {
      m_TermRows = m_IO.getRows();
      m_TermCols = m_IO.getColumns();
      return true;
    } else {
      return false;
    }
  }//terminalGeometryChanged

  /**
   * Constant definitions
   */
  private static final char DEFAULT_STOPKEY = 's';
  private static final String DEFAULT_PROMPT = "[Cursor Up,Cursor Down,Space,s (stop)] ";
  private static final int SPACE = 32;


}//class Pager

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩av一区二区在线影视| 欧美日韩三级在线| 欧美日韩国产天堂| 欧美激情在线一区二区三区| 亚洲制服丝袜av| 国产精品99久| 91精品国产一区二区三区| 国产精品国产三级国产有无不卡| 紧缚捆绑精品一区二区| 欧美日韩久久久| 亚洲丝袜美腿综合| 国产成人a级片| 精品福利二区三区| 蜜臀91精品一区二区三区 | 91精品久久久久久久99蜜桃| 国产精品久久久久久户外露出| 国产中文字幕一区| 日韩欧美的一区| 天天操天天干天天综合网| 91国偷自产一区二区开放时间 | 亚洲成人av一区二区三区| 91亚洲精品久久久蜜桃网站| 国产亚洲欧洲997久久综合| 久草在线在线精品观看| 欧美一区二区福利视频| 日韩av在线播放中文字幕| 91精品午夜视频| 日韩av中文字幕一区二区三区| 欧美欧美午夜aⅴ在线观看| 亚洲电影在线免费观看| 色哟哟一区二区在线观看 | 免费精品视频在线| 欧美日韩精品一区二区| 亚洲国产精品久久不卡毛片| 欧美视频你懂的| 日韩专区欧美专区| 91精品国产手机| 麻豆精品一区二区| 久久久噜噜噜久噜久久综合| 国产91丝袜在线播放0| 国产欧美精品一区| hitomi一区二区三区精品| 亚洲天天做日日做天天谢日日欢 | 国产美女在线精品| 国产欧美日韩在线| 成人黄色片在线观看| 国产精品美女久久久久久2018 | 一区二区三区在线免费观看| 欧美午夜理伦三级在线观看| 亚洲一级在线观看| 日韩欧美视频一区| 成人aa视频在线观看| 亚洲美女屁股眼交| 欧美剧在线免费观看网站| 久久99在线观看| 国产精品美女久久久久久2018| 91久久精品国产91性色tv| 午夜成人免费视频| 国产日韩av一区| 欧美日韩一区三区| 国产精品一区二区黑丝| 一区二区三区四区精品在线视频| 91精品欧美一区二区三区综合在 | 国产精品毛片大码女人| 欧美综合亚洲图片综合区| 蜜臀av在线播放一区二区三区| 欧美激情中文字幕一区二区| 欧美特级限制片免费在线观看| 久久99精品一区二区三区三区| 日韩一区欧美一区| 欧美一区二区日韩一区二区| 不卡视频免费播放| 美腿丝袜亚洲三区| 亚洲精品国产精华液| 亚洲精品一区二区三区香蕉| 日本乱码高清不卡字幕| 国内不卡的二区三区中文字幕| 亚洲欧美日韩中文字幕一区二区三区 | 亚洲欧美一区二区三区国产精品 | 欧美视频在线观看一区二区| 国产不卡视频一区二区三区| 日产精品久久久久久久性色| 欧美激情在线一区二区三区| 日韩欧美国产一区在线观看| 色婷婷一区二区三区四区| 国产一区 二区| 麻豆精品视频在线| 亚洲h动漫在线| 亚洲男同性恋视频| 国产精品视频yy9299一区| 精品国产麻豆免费人成网站| 欧美日韩高清一区二区| 日本韩国一区二区| eeuss影院一区二区三区 | 91国偷自产一区二区开放时间 | 亚洲视频狠狠干| 欧美国产日韩亚洲一区| 欧美成人一区二区三区| 欧美精品自拍偷拍动漫精品| 91豆麻精品91久久久久久| 成人黄色网址在线观看| 高清不卡在线观看av| 国产精品一区专区| 国产精品一区二区无线| 国产一区二区在线视频| 久久国内精品自在自线400部| 丝袜国产日韩另类美女| 亚洲成人精品影院| 五月天久久比比资源色| 亚洲高清免费一级二级三级| 亚洲国产一区二区视频| 亚洲电影视频在线| 日韩精品电影一区亚洲| 午夜久久久久久久久| 日韩电影在线一区| 另类中文字幕网| 国产精品一二三在| 高清av一区二区| 99re热这里只有精品视频| 94色蜜桃网一区二区三区| 色婷婷综合久色| 欧美美女网站色| 日韩免费高清视频| 久久亚洲捆绑美女| 欧美国产日韩a欧美在线观看 | 国产人伦精品一区二区| 亚洲国产精品99久久久久久久久| 国产精品天美传媒| 亚洲黄一区二区三区| 亚洲电影激情视频网站| 人人超碰91尤物精品国产| 亚洲图片欧美色图| 一区二区三区精密机械公司| 午夜免费久久看| 久久精品国产秦先生| 岛国一区二区在线观看| 色视频一区二区| 欧美夫妻性生活| 国产亚洲精品中文字幕| 亚洲黄网站在线观看| 日日夜夜免费精品| 国产成人啪免费观看软件 | 日韩一区二区视频在线观看| 国产日韩欧美不卡| 一二三区精品福利视频| 男男视频亚洲欧美| 9i看片成人免费高清| 欧美精品aⅴ在线视频| 久久美女艺术照精彩视频福利播放| 国产精品国产三级国产普通话蜜臀| 亚洲一区在线观看免费观看电影高清| 日本欧美一区二区在线观看| 成人亚洲一区二区一| 91麻豆精品91久久久久久清纯| 中文字幕欧美日韩一区| 日韩av网站在线观看| 成人91在线观看| 精品国产百合女同互慰| 伊人色综合久久天天| 国产一区二区美女| 欧美日韩国产综合一区二区三区| 久久久久久一级片| 日韩精品国产欧美| 91污片在线观看| 国产香蕉久久精品综合网| 午夜一区二区三区在线观看| 国产+成+人+亚洲欧洲自线| 555夜色666亚洲国产免| 亚洲男人天堂av网| 国产精品一区二区在线看| 91精品蜜臀在线一区尤物| 亚洲精品免费看| 懂色av一区二区三区免费观看| 欧美一区永久视频免费观看| 亚洲人精品一区| 成人短视频下载| 久久婷婷综合激情| 六月丁香综合在线视频| 欧美高清精品3d| 亚洲精品国产品国语在线app| 成人美女在线视频| 国产日韩欧美综合一区| 久久av中文字幕片| 日韩一区二区中文字幕| 天天影视涩香欲综合网| 在线亚洲欧美专区二区| 亚洲欧美电影院| 91在线视频播放| 亚洲欧洲日韩av| av激情综合网| 国产精品麻豆网站| a级高清视频欧美日韩| 国产视频911| 丁香激情综合五月| 国产精品久线在线观看| caoporn国产精品| 亚洲婷婷综合久久一本伊一区| thepron国产精品| 亚洲美女电影在线| 在线免费观看日韩欧美|