4.3BSD/usr/contrib/icon/functions/reverse.c
#include "../h/rt.h"
/*
* reverse(s) - reverse string s.
*/
Xreverse(nargs, arg1, arg0)
int nargs;
struct descrip arg1, arg0;
{
register char c, *floc, *lloc;
register int slen;
char sbuf[MAXSTRING];
extern char *alcstr();
/*
* Make sure that s is a string.
*/
if (cvstr(&arg1, sbuf) == NULL)
runerr(103, &arg1);
/*
* Ensure that there is enough room and allocate a copy of s.
*/
slen = STRLEN(arg1);
sneed(slen);
STRLEN(arg0) = slen;
STRLOC(arg0) = alcstr(STRLOC(arg1), slen);
/*
* Point floc at the start of s and lloc at the end of s. Work floc
* and sloc along s in opposite directions, swapping the characters
* at floc and lloc.
*/
floc = STRLOC(arg0);
lloc = floc + --slen;
while (floc < lloc) {
c = *floc;
*floc++ = *lloc;
*lloc-- = c;
}
}
Procblock(reverse,1)