File:  [CSRG BSD Unix] / 43BSD / contrib / icon / functions / reverse.c
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs
Tue Apr 24 16:12:55 2018 UTC (8 years, 1 month ago) by root
Branches: MAIN, BSD
CVS tags: HEAD, BSD43
BSD 4.3

#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)

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.