home *** CD-ROM | disk | FTP | other *** search
/ The UNIX CD Bookshelf / OREILLY_TUCB_UNIX_CD.iso / upt / examples / SOURCES / TWIN / TWIN. / illistn.c < prev    next >
Encoding:
C/C++ Source or Header  |  1998-07-24  |  1011 b   |  39 lines

  1. /* illistn.c */
  2. /********************************************************************
  3. *    Function      : create array of pointers to lines in buffer
  4. *    Author        : Istvan Mohos, 1987 --- in the Public Domain
  5. *********************************************************************/
  6.  
  7. #include "i.h"
  8.  
  9. int
  10. illistn(start, end, ptrlist)
  11. register char *start;
  12. register char *end;
  13. char **ptrlist;
  14. {
  15.     register int ri;
  16.     register char *rp;
  17.     char *savp, **work;
  18.  
  19.     *(end -1) = '\n'; /* just in case */
  20.     for (ri = 0, rp = end; --rp >= start;)
  21.         if (*rp == '\n')
  22.             ++ri;
  23.  
  24.     if (NULCHARP(savp=malloc((unsigned int)(ri*sizeof(char *)))))
  25.         return(ierror("illistn: can't allocate pointer array"));
  26.  
  27.     /* start one character to left of last byte in buffer */
  28.     *(end -1) = 0;
  29.     for (work=(char **)savp+ri, rp=end-1; --rp >= start;)
  30.         if (*rp == '\n')
  31.             *rp = 0, *--work = rp+1;
  32.  
  33.     /* rp == start-1 */
  34.     *--work = ++rp;
  35.  
  36.     *ptrlist = savp;
  37.     return(ri);
  38. }
  39.