summaryrefslogtreecommitdiff
path: root/lang/rexx-imc/files/patch-rexx.c
diff options
context:
space:
mode:
authorMark Linimon <linimon@FreeBSD.org>2003-11-02 05:32:24 +0000
committerMark Linimon <linimon@FreeBSD.org>2003-11-02 05:32:24 +0000
commitd6ce248fc88b58600e33174056c580af809df5ca (patch)
treee322f5a4f8e80e756c2b05cf0c31b1d006d67aa5 /lang/rexx-imc/files/patch-rexx.c
parentmaintainer 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.c42
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);