示例#1
0
文件: edit.c 项目: phoenixgao/fdubbs
void msg() {
	int x, y;
	int tmpansi;

	tmpansi = showansi;
	showansi = 1;
	getyx(&x, &y);
	msgline();
	signal(SIGALRM, msg);
	move(x, y);
	refresh();
	alarm(60);
	showansi = tmpansi;
}
示例#2
0
static void near zuzeile (void)
//*************************************************************************
//
//*************************************************************************
{
  char linstr[12];
  int l;

  linstr[0] = 0;
  if (inputwin("Goto", "Line:", linstr, 10) != ESC)
    l = atoi(linstr);
  if (l > 0)
    gotoline(l-1, 0);
  else
    msgline("Invalid line number");
}
示例#3
0
static void near contsearch (void)
//*************************************************************************
//
//  Sucht nach 'searchstr' und baut den Bildschirm an der gefundenen
//  Position neu auf
//
//*************************************************************************
{
  int count = 0;
  int slines = e->curline;
  unsigned sindex = e->readindex;
  int found = 0;
  int size = strlen(searchstr);
  unsigned i = linelength(e->readindex);

  if (e->curcol > i)
    i += e->readindex - 1;
  else
    i = e->readindex + e->curcol + 1;
  while (i < e->maxbuf)
  {
    while (((buf[i+count] ^ searchstr[count]) & 0x5f) == 0) count++;
    if (count == size)
    {
      found++;
      break;
    }
    count = 0;
    if (buf[i++] == LF)
    {
      slines++;
      sindex = i;
    }
  }
  if (found)
  {
    e->curcol = i-sindex;
    gotoline(slines, 0);
    testxoffset();
  }
  else
    msgline("Pattern not found");
}
示例#4
0
static void near gotoline (int line, int immer)
//*************************************************************************
//
//  Springt zur angegebenen Zeilennummer
//
//  Dabei wird die momentane Cursorposition beruecksichtigt und der
//  Bildschirm nur neu aufgebaut, wenn die Position ausserhalb liegt.
//
//*************************************************************************
{ unsigned i = 0, ok = 1;
  unsigned max = e->maxbuf;
  unsigned zeilenzaehler = 0;
  unsigned yl = e->ylen-1;

  if (! immer)
  {
    if (line == e->curline);
      // **** Alte Zeile gleich neue Zeile -> nichts machen
    else if ((line > e->curline) && (line < (e->curline+(yl-1-e->readlines))))
      e->readlines += line-e->curline;
      // **** Neue Zeile unterhalb alter Zeile, aber am gleichen Bildschirm
    else if ((line < e->curline) && (line > (e->curline-e->readlines)))
      e->readlines -= e->curline-line;
      // **** Neue Zeile oberhalb alter Zeile, aber am gleichen Bildschirm
    else if (line < (yl-2))
    {
      e->index = 0;
      e->readlines = e->curline=line;
      // **** Neue Zeile auf der ersten Bildschirmseite im Buffer
    }
    else if ((line > (e->maxlines-yl-1)) && (line<e->maxlines))
    {
      e->readindex = e->index = e->maxbuf;
      e->curline = e->maxlines;
      lineminus(yl-2);
      e->readlines = (yl-2-(e->maxlines-line));
      // **** Neue Zeile auf der letzten Bildschirmseite im Buffer
    }
    else
      ok = 0;
  }
  if (immer || ! ok)
  { // **** Neue Zeile liegt ganz wo anders im Buffer, Zeile suchen
    while (i < max)
    {
      if (buf[i++] == LF)
      {
        zeilenzaehler++;
        if (zeilenzaehler == line)
          break;
      }
    }
    if (i >= max) // Zeilennummer nicht gefunden (zu hoch)
    {
      msgline("Line not found");
      line = zeilenzaehler; // go to last line
      while (i && buf[i] != LF) i--;
    }
    e->index = e->readindex = i; // zur gefundenen Stelle springen
    if (immer == 2)
    {
      e->readlines = yl-1;
    }
    else
    {
      e->curline = line+(yl/2); // BS-Start wird zurueckgesetzt
      lineminus(yl/2); // damit die Stelle in Bildmitte kommt
      e->readlines = yl/2; // Cursor in Bildmitte setzen
    }
  }
  e->curline=line; // Neue Zeile uebernehmen
  calcrlines(); // Zeiger reorganisieren
}