|
|
1.1 ! root 1: #include "../h/rt.h" ! 2: ! 3: /* ! 4: * reverse(s) - reverse string s. ! 5: */ ! 6: ! 7: Xreverse(nargs, arg1, arg0) ! 8: int nargs; ! 9: struct descrip arg1, arg0; ! 10: { ! 11: register char c, *floc, *lloc; ! 12: register int slen; ! 13: char sbuf[MAXSTRING]; ! 14: extern char *alcstr(); ! 15: ! 16: /* ! 17: * Make sure that s is a string. ! 18: */ ! 19: if (cvstr(&arg1, sbuf) == NULL) ! 20: runerr(103, &arg1); ! 21: ! 22: /* ! 23: * Ensure that there is enough room and allocate a copy of s. ! 24: */ ! 25: slen = STRLEN(arg1); ! 26: sneed(slen); ! 27: STRLEN(arg0) = slen; ! 28: STRLOC(arg0) = alcstr(STRLOC(arg1), slen); ! 29: ! 30: /* ! 31: * Point floc at the start of s and lloc at the end of s. Work floc ! 32: * and sloc along s in opposite directions, swapping the characters ! 33: * at floc and lloc. ! 34: */ ! 35: floc = STRLOC(arg0); ! 36: lloc = floc + --slen; ! 37: while (floc < lloc) { ! 38: c = *floc; ! 39: *floc++ = *lloc; ! 40: *lloc-- = c; ! 41: } ! 42: } ! 43: ! 44: Procblock(reverse,1)
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.