1
0
mirror of https://github.com/rfivet/uemacs.git synced 2024-09-28 16:35:53 -04:00

Review ldelchar and ldelete.

This commit is contained in:
Renaud 2016-05-19 14:02:43 +08:00
parent a7c34c747d
commit d4b2a4c1aa
4 changed files with 52 additions and 54 deletions

10
line.c
View File

@ -532,8 +532,8 @@ int lgetchar(unicode_t *c)
*
* If you want to delete characters, use ldelchar().
*/
int ldelchar(long n, int kflag)
{
boolean ldelchar( long n, boolean kflag) {
/* testing for read only mode is done by ldelete() */
while (n-- > 0) {
unicode_t c;
if (!ldelete(lgetchar(&c), kflag))
@ -551,8 +551,7 @@ int ldelchar(long n, int kflag)
* long n; # of chars to delete
* int kflag; put killed text in kill buffer flag
*/
int ldelete(long n, int kflag)
{
boolean ldelete( long n, boolean kflag) {
char *cp1;
char *cp2;
struct line *dotp;
@ -562,7 +561,8 @@ int ldelete(long n, int kflag)
if (curbp->b_mode & MDVIEW) /* don't allow this command if */
return rdonly(); /* we are in read only mode */
while (n != 0) {
while( n > 0) {
dotp = curwp->w_dotp;
doto = curwp->w_doto;
if (dotp == curbp->b_linep) /* Hit end of buffer. */

4
line.h
View File

@ -40,8 +40,8 @@ int linstr( char *instr) ;
int linsert( int n, unicode_t c) ;
int lover( char *ostr) ;
int lnewline( void) ;
int ldelete( long n, int kflag) ;
int ldelchar( long n, int kflag) ;
boolean ldelete( long n, boolean kflag) ;
boolean ldelchar( long n, boolean kflag) ;
int lgetchar( unicode_t *) ;
char *getctext( void) ;
void kdelete( void) ;

View File

@ -191,7 +191,6 @@ int getccol(int bflg)
*/
int setccol(int pos)
{
int c; /* character being scanned */
int i; /* index into current line */
int col; /* current cursor column */
int llen; /* length of line in bytes */
@ -201,6 +200,8 @@ int setccol(int pos)
/* scan the line until we are at or past the target column */
for (i = 0; i < llen; ++i) {
int c; /* character being scanned */
/* upon reaching the target, drop out */
if (col >= pos)
break;
@ -260,7 +261,6 @@ int twiddle(int f, int n)
*/
int quote(int f, int n)
{
int s;
int c;
if (curbp->b_mode & MDVIEW) /* don't allow this command if */
@ -271,6 +271,8 @@ int quote(int f, int n)
if (n == 0)
return TRUE;
if (c == '\n') {
int s ;
do {
s = lnewline();
} while (s == TRUE && --n);
@ -355,9 +357,6 @@ int entab(int f, int n)
#define nextab(a) (a + tabwidth - a % tabwidth)
int inc; /* increment to next line [sgn(n)] */
int fspace; /* pointer to first space if in a run */
int ccol; /* current cursor column */
char cchar; /* current character */
if (curbp->b_mode & MDVIEW) /* don't allow this command if */
return rdonly(); /* we are in read only mode */
@ -368,6 +367,9 @@ int entab(int f, int n)
/* loop thru entabbing n lines */
inc = ((n > 0) ? 1 : -1);
while (n) {
int fspace ; /* pointer to first space if in a run */
int ccol ; /* current cursor column */
curwp->w_doto = 0; /* start at the beginning */
/* entab the entire current line */
@ -382,17 +384,14 @@ int entab(int f, int n)
/* there is a bug here dealing with mixed space/tabed
lines.......it will get fixed */
backchar(TRUE, ccol - fspace);
ldelete((long) (ccol - fspace),
FALSE);
ldelete( (long) (ccol - fspace), FALSE) ;
linsert(1, '\t');
fspace = -1;
}
}
/* get the current character */
cchar = lgetc(curwp->w_dotp, curwp->w_doto);
switch (cchar) {
switch( lgetc( curwp->w_dotp, curwp->w_doto)) {
case '\t': /* a tab...count em up */
ccol = nextab(ccol);
break;
@ -406,8 +405,8 @@ int entab(int f, int n)
default: /* any other char...just count */
ccol++;
fspace = -1;
break;
}
forwchar(FALSE, 1);
}
@ -428,9 +427,6 @@ int entab(int f, int n)
*/
int trim(int f, int n)
{
struct line *lp; /* current line pointer */
int offset; /* original line offset position */
int length; /* current length */
int inc; /* increment to next line [sgn(n)] */
if (curbp->b_mode & MDVIEW) /* don't allow this command if */
@ -442,17 +438,20 @@ int trim(int f, int n)
/* loop thru trimming n lines */
inc = ((n > 0) ? 1 : -1);
while (n) {
line_p lp ; /* current line pointer */
int offset ; /* original line offset position */
int length ; /* current length */
lp = curwp->w_dotp; /* find current line text */
offset = curwp->w_doto; /* save original offset */
length = lp->l_used; /* find current length */
/* trim the current line */
while (length > offset) {
if (lgetc(lp, length - 1) != ' ' &&
lgetc(lp, length - 1) != '\t')
break;
length--;
for( length = lp->l_used ; length > offset ; length--) {
char c = lgetc( lp, length - 1) ;
if( c != ' ' && c != '\t')
break ;
}
lp->l_used = length;
/* advance/or back to the next line */
@ -667,18 +666,22 @@ int indent( int f, int n) {
* If any argument is present, it kills rather than deletes, to prevent loss
* of text if typed with a big argument. Normally bound to "C-D".
*/
int forwdel(int f, int n)
{
if (curbp->b_mode & MDVIEW) /* don't allow this command if */
return rdonly(); /* we are in read only mode */
if (n < 0)
return backdel(f, -n);
int forwdel( int f, int n) {
if( curbp->b_mode & MDVIEW) /* don't allow this command if */
return rdonly() ; /* we are in read only mode */
if( n == 0)
return TRUE ;
else if( n < 0)
return backdel( f, -n) ;
if (f != FALSE) { /* Really a kill. */
if ((lastflag & CFKILL) == 0)
kdelete();
thisflag |= CFKILL;
}
return ldelchar((long) n, f);
return ldelchar( n, f != FALSE) ;
}
/*
@ -687,22 +690,22 @@ int forwdel(int f, int n)
* forward, this actually does a kill if presented with an argument. Bound to
* both "RUBOUT" and "C-H".
*/
int backdel(int f, int n)
{
int s;
int backdel( int f, int n) {
if( curbp->b_mode & MDVIEW) /* don't allow this command if */
return rdonly() ; /* we are in read only mode */
if( n == 0)
return TRUE ;
else if( n < 0)
return forwdel( f, -n) ;
if (curbp->b_mode & MDVIEW) /* don't allow this command if */
return rdonly(); /* we are in read only mode */
if (n < 0)
return forwdel(f, -n);
if (f != FALSE) { /* Really a kill. */
if ((lastflag & CFKILL) == 0)
kdelete();
thisflag |= CFKILL;
}
if ((s = backchar(f, n)) == TRUE)
s = ldelchar(n, f);
return s;
return (backchar( f, n) == TRUE) && ldelchar( n, f != FALSE) ;
}
/*

View File

@ -2,24 +2,19 @@
#define __RETCODE_H__
#ifdef FALSE
#error "FALSE shouldn't be defined"
#undef FALSE
#endif
#ifdef TRUE
#error "TRUE shouldn't be defined"
#undef TRUE
#endif
#if 0
#define FALSE 0 /* False, no, bad, etc. */
#define TRUE 1 /* True, yes, good, etc. */
#define ABORT 2 /* Death, ^G, abort, etc. */
#define FAILED 3 /* not-quite fatal false return */
#endif
typedef enum {
FALSE,
TRUE
FALSE, /* 0, false, no, bad, etc. */
TRUE /* 1, true, yes, good, etc. */
} boolean ;
#define ABORT 2
#define ABORT 2 /* 2, death, ^G, abort, etc. */
#endif