|
|
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.