diff options
author | Eduardo Chappa <chappa@washington.edu> | 2013-05-31 17:16:44 -0600 |
---|---|---|
committer | Eduardo Chappa <chappa@washington.edu> | 2013-05-31 17:16:44 -0600 |
commit | a46157ba61f2c65f88b42abb31db60c4a714f87b (patch) | |
tree | e37bc41ad2f57b3fd2bad310576cc155a58ca6b7 /pico/basic.c | |
parent | 81e994d7907f850506ddc248f84761a54995e58c (diff) | |
download | alpine-a46157ba61f2c65f88b42abb31db60c4a714f87b.tar.xz |
* somehow all.patch got here. Reversing.
Diffstat (limited to 'pico/basic.c')
-rw-r--r-- | pico/basic.c | 378 |
1 files changed, 27 insertions, 351 deletions
diff --git a/pico/basic.c b/pico/basic.c index 4479d099..49b04bd6 100644 --- a/pico/basic.c +++ b/pico/basic.c @@ -26,10 +26,9 @@ static char rcsid[] = "$Id: basic.c 831 2007-11-27 01:04:19Z hubert@u.washington * framing, are hard. */ #include "headers.h" -#include "../pith/osdep/color.h" + #include "osdep/terminal.h" -int indent_match(char **, LINE *, char *, int, int); /* * Move the cursor to the @@ -286,7 +285,7 @@ int gotobop(int f, int n) { int quoted, qlen; - char qstr[NLINE], qstr2[NLINE], ind_str[NLINE], pqstr[NLINE];; + UCS qstr[NLINE], qstr2[NLINE]; if (n < 0) /* the other way...*/ return(gotoeop(f, -n)); @@ -298,14 +297,6 @@ gotobop(int f, int n) curwp->w_dotp = lback(curwp->w_dotp); curwp->w_doto = 0; } - - if (indent_match(default_qstr(glo_quote_str, 1), curwp->w_dotp,ind_str, NLINE, 0)){ - if (n){ /* look for another paragraph ? */ - curwp->w_dotp = lback(curwp->w_dotp); - continue; - } - break; - } /* scan line by line until we come to a line ending with * a <NL><NL> or <NL><TAB> or <NL><SPACE> @@ -313,58 +304,20 @@ gotobop(int f, int n) * PLUS: if there's a quote string, a quoted-to-non-quoted * line transition. */ - quoted = quote_match(default_qstr(glo_quote_str, 1), curwp->w_dotp, qstr, NLINE, 0); - qlen = quoted ? strlen(qstr) : 0; + quoted = glo_quote_str ? quote_match(glo_quote_str, curwp->w_dotp, qstr, NLINE) : 0; + qlen = quoted ? ucs4_strlen(qstr) : 0; while(lback(curwp->w_dotp) != curbp->b_linep && llength(lback(curwp->w_dotp)) > qlen - && (quoted == quote_match(default_qstr(glo_quote_str, 1), - lback(curwp->w_dotp), qstr2, NLINE, 0)) - && !strcmp(qstr, qstr2) /* processed string */ - && (quoted == quote_match(default_qstr(glo_quote_str, 1), - lback(curwp->w_dotp), qstr2, NLINE, 1)) - && !strcmp(qstr, qstr2) /* raw string */ - && !indent_match(default_qstr(glo_quote_str, 1), - lback(curwp->w_dotp),ind_str, NLINE, 0) - && !ISspace(lgetc(curwp->w_dotp, qlen).c)) + && (glo_quote_str + ? (quoted == quote_match(glo_quote_str, + lback(curwp->w_dotp), + qstr2, NLINE) + && !ucs4_strcmp(qstr, qstr2)) + : 1) + && lgetc(curwp->w_dotp, qlen).c != TAB + && lgetc(curwp->w_dotp, qlen).c != ' ') curwp->w_dotp = lback(curwp->w_dotp); - /* - * Ok, we made it here and we assume that we are at the begining - * of the paragraph. Let's double check this now. In order to do - * so we shell check if the first line was indented in a special - * way. - */ - if(lback(curwp->w_dotp) == curbp->b_linep) - break; - else{ - int i, j; - - /* - * First we test if the preceding line is indented. - * for the following test we need to have the raw values, - * not the processed values - */ - quote_match(default_qstr(glo_quote_str, 1), curwp->w_dotp, qstr, NLINE, 1); - quote_match(default_qstr(glo_quote_str, 1), lback(curwp->w_dotp), qstr2, NLINE, 1); - for (i = 0, j = 0; - qstr[i] && qstr2[i] && (qstr[i] == qstr2[i]); i++, j++); - for (; ISspace(qstr2[i]); i++); - for (; ISspace(qstr[j]); j++); - if ((indent_match(default_qstr(glo_quote_str, 1), lback(curwp->w_dotp), - ind_str, NLINE, 1) - && (strlenis(qstr2) - + strlenis(ind_str) >= strlenis(qstr))) - || (lback(curwp->w_dotp) != curbp->b_linep - && llength(lback(curwp->w_dotp)) > qlen - && (quoted == quote_match(default_qstr(glo_quote_str, 1), - lback(curwp->w_dotp), pqstr, NLINE, 0)) - && !strcmp(qstr, pqstr) - && !ISspace(lgetc(curwp->w_dotp, qlen).c) - && (strlenis(qstr2) > strlenis(qstr))) - && !qstr2[i] && !qstr[j]) - curwp->w_dotp = lback(curwp->w_dotp); - } - if(n){ /* keep looking */ if(lback(curwp->w_dotp) == curbp->b_linep) @@ -377,7 +330,7 @@ gotobop(int f, int n) else{ /* leave cursor on first word in para */ curwp->w_doto = 0; - while(ISspace(lgetc(curwp->w_dotp, curwp->w_doto).c)) + while(ucs4_isspace(lgetc(curwp->w_dotp, curwp->w_doto).c)) if(++curwp->w_doto >= llength(curwp->w_dotp)){ curwp->w_doto = 0; curwp->w_dotp = lforw(curwp->w_dotp); @@ -391,189 +344,6 @@ gotobop(int f, int n) return(TRUE); } -unsigned char GetAccent() -{ - UCS c,d; - c = GetKey(); - if ((c == '?') || (c == '!')) { - d = c; - c = '\\'; - } - else - if ((c == 's') || (c == 'S')){ - c = d = 's'; - } - else - if ((c == 'l') || (c == 'L')){ - c = d = 'l'; - } - else - d = GetKey(); - return accent(c,d); -} - -int pineaccent(f,n) - int f,n; -{ unsigned char e; - - if (e = GetAccent()) - execute(e, 0, 1); - return 1; -} - -unsigned char accent(f,n) -UCS f,n; -{ UCS c,d; - - c = f; - d = n; - switch(c){ - case '~' : - switch(d){ - case 'a' : return '\343'; - case 'n' : return '\361'; - case 'o' : return '\365'; - case 'A' : return '\303'; - case 'N' : return '\321'; - case 'O' : return '\325'; - } - break; - case '\047' : - switch(d){ - case 'a' : return '\341'; - case 'e' : return '\351'; - case 'i' : return '\355'; - case 'o' : return '\363'; - case 'u' : return '\372'; - case 'y' : return '\375'; - case 'A' : return '\301'; - case 'E' : return '\311'; - case 'I' : return '\315'; - case 'O' : return '\323'; - case 'U' : return '\332'; - case 'Y' : return '\335'; - } - break; - case '"' : - switch(d){ - case 'a' : return '\344'; - case 'e' : return '\353'; - case 'i' : return '\357'; - case 'o' : return '\366'; - case 'u' : return '\374'; - case 'y' : return '\377'; - case 'A' : return '\304'; - case 'E' : return '\313'; - case 'I' : return '\317'; - case 'O' : return '\326'; - case 'U' : return '\334'; - } - break; - case '^' : - switch(d){ - case 'a' : return '\342'; - case 'e' : return '\352'; - case 'i' : return '\356'; - case 'o' : return '\364'; - case 'u' : return '\373'; - case 'A' : return '\302'; - case 'E' : return '\312'; - case 'I' : return '\316'; - case 'O' : return '\324'; - case 'U' : return '\333'; - case '0' : return '\260'; - case '1' : return '\271'; - case '2' : return '\262'; - case '3' : return '\263'; - } - break; - case '`' : - switch(d){ - case 'a' : return '\340'; - case 'e' : return '\350'; - case 'i' : return '\354'; - case 'o' : return '\362'; - case 'u' : return '\371'; - case 'A' : return '\300'; - case 'E' : return '\310'; - case 'I' : return '\314'; - case 'O' : return '\322'; - case 'U' : return '\331'; - } - break; - case 'o' : - switch(d){ - case 'a' : return '\345'; - case 'A' : return '\305'; - case '/' : return '\370'; - case 'r' : return '\256'; - case 'R' : return '\256'; - case 'c' : return '\251'; - case 'C' : return '\251'; - } - break; - case '-' : - switch(d){ - case 'o' : return '\272'; - case 'O' : return '\272'; - case '0' : return '\272'; - case 'a' : return '\252'; - case 'A' : return '\252'; - case 'l' : return '\243'; - case 'L' : return '\243'; - } - break; - case 'O' : - switch(d){ - case '/' : return '\330'; - case 'r' : return '\256'; - case 'R' : return '\256'; - case 'c' : return '\251'; - case 'C' : return '\251'; - } - case '/' : - switch(d){ - case 'o' : return '\370'; - case 'O' : return '\330'; - } - break; - case 'a' : - switch(d){ - case 'e' : return '\346'; - case 'E' : return '\346'; - } - break; - case 'A' : - switch(d){ - case 'E' : return '\306'; - case 'e' : return '\306'; - } - break; - case ',' : - switch(d){ - case 'c' : return '\347'; - case 'C' : return '\307'; - } - break; - case '\\' : - switch(d){ - case '?' : return '\277'; - case '!' : return '\241'; - } - break; - case 's' : - switch(d){ - case 's' : return '\337'; - } - break; - case 'l' : - switch(d){ - case 'l' : return '\243'; - } - break; - } - return '\0'; -} /* * go forword to the end of the current paragraph @@ -583,9 +353,8 @@ UCS f,n; int gotoeop(int f, int n) { - int quoted, qlen, indented, changeqstr = 0; - int i,j, fli = 0; /* fli = first line indented a boolean variable */ - char qstr[NLINE], qstr2[NLINE], ind_str[NLINE]; + int quoted, qlen; + UCS qstr[NLINE], qstr2[NLINE]; if (n < 0) /* the other way...*/ return(gotobop(f, -n)); @@ -598,70 +367,27 @@ gotoeop(int f, int n) break; } - /* - * We need to figure out if this line is the first line of - * a paragraph that has been indented in a special way. If this - * is the case, we advance one more line before we use the - * algorithm below - */ - - if(curwp->w_dotp != curbp->b_linep){ - quote_match(default_qstr(glo_quote_str, 1), curwp->w_dotp, qstr, NLINE, 1); - quote_match(default_qstr(glo_quote_str, 1), lforw(curwp->w_dotp), qstr2, NLINE, 1); - indented = indent_match(default_qstr(glo_quote_str, 1), curwp->w_dotp, ind_str, - NLINE, 1); - if (strlenis(qstr) - + strlenis(ind_str) < strlenis(qstr2)){ - curwp->w_doto = llength(curwp->w_dotp); - if(n){ /* this line is a paragraph by itself */ - curwp->w_dotp = lforw(curwp->w_dotp); - continue; - } - break; - } - for (i=0,j=0; qstr[i] && qstr2[i] && (qstr[i] == qstr2[i]);i++,j++); - for (; ISspace(qstr[i]); i++); - for (; ISspace(qstr2[j]); j++); - if (!qstr[i] && !qstr2[j] && indented){ - fli++; - if (indent_match(default_qstr(glo_quote_str, 1), lforw(curwp->w_dotp), - ind_str, NLINE, 0)){ - if (n){ /* look for another paragraph ? */ - curwp->w_dotp = lforw(curwp->w_dotp); - continue; - } - } - else{ - if (!lisblank(lforw(curwp->w_dotp))) - curwp->w_dotp = lforw(curwp->w_dotp); - } - } - } - /* scan line by line until we come to a line ending with * a <NL><NL> or <NL><TAB> or <NL><SPACE> * * PLUS: if there's a quote string, a quoted-to-non-quoted * line transition. */ - /* if the first line is indented (fli == 1), then the test below - is on the second line, and in that case we will need the raw - string, not the processed string - */ - quoted = quote_match(default_qstr(glo_quote_str, 1), curwp->w_dotp, qstr, NLINE, fli); - qlen = quoted ? strlen(qstr) : 0; + quoted = glo_quote_str + ? quote_match(glo_quote_str, + curwp->w_dotp, qstr, NLINE) : 0; + qlen = quoted ? ucs4_strlen(qstr) : 0; while(curwp->w_dotp != curbp->b_linep && llength(lforw(curwp->w_dotp)) > qlen - && (quoted == quote_match(default_qstr(glo_quote_str, 1), - lforw(curwp->w_dotp), qstr2, NLINE, fli)) - && !strcmp(qstr, qstr2) - && (quoted == quote_match(default_qstr(glo_quote_str, 1), - lforw(curwp->w_dotp), qstr2, NLINE, 1)) - && !strcmp(qstr, qstr2) - && !indent_match(default_qstr(glo_quote_str, 1), - lforw(curwp->w_dotp), ind_str, NLINE, 0) - && !ISspace(lgetc(lforw(curwp->w_dotp), qlen).c)) + && (glo_quote_str + ? (quoted == quote_match(glo_quote_str, + lforw(curwp->w_dotp), + qstr2, NLINE) + && !ucs4_strcmp(qstr, qstr2)) + : 1) + && lgetc(lforw(curwp->w_dotp), qlen).c != TAB + && lgetc(lforw(curwp->w_dotp), qlen).c != ' ') curwp->w_dotp = lforw(curwp->w_dotp); curwp->w_doto = llength(curwp->w_dotp); @@ -958,57 +684,7 @@ scrolldownline(int f, int n) return (scrollforw (1, FALSE)); } -/* deltext deletes from the specified position until the end of the file - * or until the signature (when called from Pine), whichever comes first. - */ -int -deltext (f,n) -int f,n; -{ - LINE *currline = curwp->w_dotp; - static int firsttime = 0; - - if ((lastflag&CFKILL) == 0) - kdelete(); - - curwp->w_markp = curwp->w_dotp; - curwp->w_marko = curwp->w_doto; - - while (curwp->w_dotp != curbp->b_linep){ - if ((Pmaster) - && (llength(curwp->w_dotp) == 3) - && (lgetc(curwp->w_dotp, 0).c == '-') - && (lgetc(curwp->w_dotp, 1).c == '-') - && (lgetc(curwp->w_dotp, 2).c == ' ')){ - if (curwp->w_dotp == currline){ - if (curwp->w_doto) - curwp->w_dotp = lforw(curwp->w_dotp); - else - break; - } - else{ - curwp->w_dotp = lback(curwp->w_dotp); - curwp->w_doto = llength(curwp->w_dotp); - break; - } - } - else{ - if(lforw(curwp->w_dotp) != curbp->b_linep) - curwp->w_dotp = lforw(curwp->w_dotp); - else{ - curwp->w_doto = llength(curwp->w_dotp); - break; - } - } - } - killregion(FALSE,1); - lastflag |= CFKILL; - if(firsttime == 0) - emlwrite("Deleted text can be recovered with the ^U command", NULL); - firsttime = 1; - return TRUE; -} /* * Scroll to a position. |