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)