vi_rc ChangeCase( range *r ) { linenum curr; vi_rc rc; long total; const char *msg; UndoReplaceLines( r->start.line, r->end.line ); if( r->start.line == r->end.line ) { rc = changeOneLine( r->start.line, r->start.column, r->end.column ); msg = MSG_CHARACTERS; total = r->end.column - r->start.column + 1; } else { rc = changeToEndOfLine( r->start.line, r->start.column ); if( rc != ERR_NO_ERR ) { return( rc ); } for( curr = r->start.line + 1; curr < r->end.line; curr++ ) { rc = changeToEndOfLine( curr, 0 ); if( rc != ERR_NO_ERR ) { return( rc ); } } rc = changeOneLine( r->end.line, 0, r->end.column ); msg = MSG_LINES; total = r->end.line - r->start.line + 1; } EditFlags.Dotable = true; DCDisplayAllLines(); Message1( "case toggled for %l %s", total, msg ); Modified( true ); return( DO_NOT_CLEAR_MESSAGE_WINDOW ); } /* ChangeCase */
/* * Shift - shove a tab in/out over a line range */ vi_rc Shift( linenum s, linenum e, char dir, bool msgflag ) { int shv; linenum fullcnt = 0; vi_rc rc; /* * set up undo */ if( rc = ModificationTest() ) { return( rc ); } rc = UndoReplaceLines( s, e ); if( rc != ERR_NO_ERR ) { return( rc ); } /* * now, point to start line */ rc = SaveAndResetFilePos( s ); if( rc != ERR_NO_ERR ) { return( rc ); } /* * process all lines */ for( CurrentPos.line = s; CurrentPos.line <= e; CurrentPos.line++ ) { /* * Add/Subtract leading tab space */ GetCurrentLine(); shv = ShiftWidth; if( dir != '>' ) { shv *= -1; } if( AddLeadingTabSpace( &WorkLine->len, WorkLine->data, shv ) ) { ++fullcnt; } ReplaceCurrentLine(); if( CurrentPos.line != e ) { rc = CGimmeNextLinePtr( &CurrentFcb, &CurrentLine ); if( rc != ERR_NO_ERR ) { RestoreCurrentFilePos(); return( rc ); } } } /* * done, say so and go back */ RestoreCurrentFilePos(); if( msgflag ) { Message1( "%l lines %c'ed", e - s + 1, dir ); if( fullcnt > 0 ) { Message2( "%l full lines not processed", fullcnt ); } } if( CurrentPos.line >= s && CurrentPos.line <= e ) { CheckCurrentColumn(); } DCDisplayAllLines(); SetWindowCursor(); Modified( TRUE ); return( DO_NOT_CLEAR_MESSAGE_WINDOW ); } /* Shift */