📄 line.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 + -