⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 line.cc

📁 initial working phase of the design of said editor, featuring multicasting, advanced linux keyboard
💻 CC
字号:
#include <stdio.h>#include "line.h"#include "buffer.h"#include <unistd.h>//buffer( 20 );				// segfault if you use 'size'line::~line(){}line::line( atom* a ): atom( a ), buffer( 20 ){   id_mask = ID_LINE;   length = 0;   size = 20;   last = ( line* )NULL;   next = ( line* )NULL;   if( text != NULL ) text[ 0 ] = '\0';}line::line( line* here ): atom( *here ), buffer( ( buffer* )here ), last( here -> last ), next( here -> next ), length( here -> length ), size( here -> size ), owner( here -> owner ), rwx( here -> rwx ), color( here -> color ){   id_mask = ID_LINE;}void line::resize( int _size ){   char* _text = new char[ _size ];   int it = length;   for(;; --it )   {      _text[ it ] = text[ it ];      if( it == 0 ) break;   }   delete[] text;   text = _text;}#define Length length + 1void line::clear(){   if( text != NULL ) text[ 0 ] = '\0';   length = 0;   while( Length < size - 20 )      resize( size -= 20 );}void line::del( int pos, int delta ){   length -= delta;   for( ; pos < Length; pos++ )      text[ pos ] = text[ pos + delta ];   if( Length < size - 20 )      resize( size -= 20 );}void line::ins( int pos, int delta )	// bad code!  see ins() below.{   if( Length + delta > size )      resize( size += 20 );   for( ; pos < Length; pos++ )      text[ pos + delta ] = text[ pos ];   length += delta;}void line::del( int pos ){   for( ; pos < length; pos++ )      text[ pos ] = text[ pos + 1 ];   length--;   if( Length < size - 20 )      resize( size -= 20 );}void line::ins( int pos ){   int i;   if( Length + 1 > size )      resize( size += 20 );   for( i = ++length; i > pos; i-- )      text[ i ] = text[ i - 1 ];}void line::ins( int pos, char c ){   int i;   if( Length + 1 > size )      resize( size += 20 );   for( i = ++length; i > pos; i-- )      text[ i ] = text[ i - 1 ];   text[ pos ] = c;}void line::ins( int pos, char* s ){   int i, len = strlen( s );   if( Length + len > 40 ) return; // term should do this   length += len;   while( Length > size )      resize( size += 20 );//   printf( "\r\n%d\r\n%d", length, size );   for( i = length; i >= pos + len; i-- )      text[ i ] = text[ i - len ];   for(; i >= pos; i-- )      text[ i ] = s[ i - pos ];}void line::split( int col ){   int i = last -> length;//   length = i - col;   int new_length = i - col;   while( new_length + 1 > size )      resize( size += 20 );   length = new_length; // resize() uses length   for( ; i >= col; i-- )      text[ i - col ]      = last -> text[ i ];   last -> text[ col ] = '\0';   last -> length = col;   while( last -> Length < last -> size - 20 )      last -> resize( last -> size -= 20 );}// 360-896-9833 Wacom Technology// slashdot: sprite_22 user id 214134void line::merge( int col ){   int i = length + next -> length;   while( Length > size )      resize( size += 20 );   length = i; // resize() uses length   for( ; i >= col; i-- )		// this gives segfaults due to sizing?      text[ i ] = next -> text[ i - col ];}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -