diff options
author | Mark Linimon <linimon@FreeBSD.org> | 2003-11-02 05:32:24 +0000 |
---|---|---|
committer | Mark Linimon <linimon@FreeBSD.org> | 2003-11-02 05:32:24 +0000 |
commit | d6ce248fc88b58600e33174056c580af809df5ca (patch) | |
tree | e322f5a4f8e80e756c2b05cf0c31b1d006d67aa5 /lang/rexx-imc/files/patch-rexx.c | |
parent | maintainer to adam@redprince.net (diff) |
Fix handling of UPPER tag. PR: ports/42281. Approved by: maintainer.
Diffstat (limited to 'lang/rexx-imc/files/patch-rexx.c')
-rw-r--r-- | lang/rexx-imc/files/patch-rexx.c | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/lang/rexx-imc/files/patch-rexx.c b/lang/rexx-imc/files/patch-rexx.c new file mode 100644 index 000000000000..8d66b43ec373 --- /dev/null +++ b/lang/rexx-imc/files/patch-rexx.c @@ -0,0 +1,42 @@ +--- rexx.c.upper Tue Feb 26 12:29:20 2002 ++++ rexx.c Thu Jun 20 16:33:44 2002 +@@ -1366,6 +1366,39 @@ + if(write(rxstacksock,pull,8)<8|| + (len>0&&write(rxstacksock,exp,len)<len)) die(Esys); + break; ++ case UPPER: /* go along the list, find each variable and uppercase it */ ++ while (*lineptr) { ++ tmpchr = *lineptr==' '; ++ getvarname(lineptr,&tmpchr,varname,&varlen,maxvarname); ++ lineptr+=tmpchr; ++ if(!varname[0])die(Enosymbol); ++ exp=varget(varname,varlen,&len); ++ if (exp) { /* variable has a value - uppercase in place */ ++ int j; ++ for(j=0; j<len; j++) ++ exp[j]=uc(exp[j]); ++ } else { /* novalue */ ++ /* make a copy of the variable's value, i.e., its name */ ++ len=varlen; ++ mtest(workptr, worklen, len+2, len+2-worklen); ++ memcpy(workptr, varname, len); ++ /* undo the special rules for compound symbols */ ++ if (workptr[0]&128 && !memchr(workptr, '.', len)) ++ workptr[len++]='.'; ++ workptr[0] &= 127; ++ /* trap a novalue error */ ++ if(sgstack[interplev].bits&(1<<Inovalue)) { ++ workptr[len]=0; ++ errordata=workptr; ++ die(Enovalue); ++ } ++ /* if trap wasn't caught, set the variable */ ++ /* (it might not be in upper case if it was a compound) */ ++ for (i=0; i<len; i++) workptr[i]=uc(workptr[i]); ++ varset(varname, varlen, workptr, len); ++ } ++ } ++ break; + /* Anything else is a syntax error. However, under normal + circumstances we should never get here. */ + default:die(Esyntax); |