home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / unix / volume18 / geneal / part01 / strings.c < prev    next >
C/C++ Source or Header  |  1989-03-08  |  2KB  |  94 lines

  1. /* strings.c - some string manipulation routines
  2.  *
  3.  *  3.Feb.85  jimmc  Previous last edit
  4.  * 26.Oct.87  jimmc  Collect numerous small routines into strings.c
  5.  *  1.Jan.88  jimmc  Add freestr
  6.  *  8.Jan.88  jimmc  Lint cleanup
  7.  */
  8.  
  9. #include <ctype.h>
  10. #include <strings.h>
  11. #include "xalloc.h"
  12.  
  13. extern char end[];    /* for freestr */
  14.  
  15. /* Since index and rindex appear to be only in bsd4.2, these functions
  16.  * will have to be distributed to assure portability.
  17.  */
  18. char *
  19. index(str,ch)
  20. char *str;        /* string to look through */
  21. char ch;        /* char to look for */
  22. {
  23.     for ( ; *str; str++)
  24.         if (*str==ch) return str;
  25.     return 0;        /* not found */
  26. }
  27.  
  28. char *
  29. rindex(str,ch)
  30. char *str;
  31. char ch;
  32. {
  33.     char *ss;
  34.  
  35.     for (ss = str+strlen(str)-1; ss>=str; ss--)
  36.         if (*str==ch) return ss;
  37.     return 0;
  38. }
  39.  
  40. char *
  41. strcrep(str,cs,cd)    /* replace specified chars in a string */
  42. char *str;
  43. char cs;        /* char to look for */
  44. char cd;        /* char to replace it with */
  45. {
  46.     char *ss;
  47.  
  48.     for (ss=str; *ss; ss++)
  49.         if (*ss == cs) *ss = cd;
  50.     return str;
  51. }
  52.  
  53. /* strsav - make a copy of a string and return a pointer to it */
  54. char *
  55. strsav(ss)
  56. char *ss;
  57. {
  58.     char *dd;
  59.  
  60.     dd = XALLOCM(char,strlen(ss)+1,"strsav");
  61.     strcpy(dd,ss);        /* make a copy of the string */
  62.     return dd;            /* return the copy */
  63. }
  64.  
  65. strup(ss)        /* make a string all upper case */
  66. char *ss;
  67. {
  68.     for ( ; *ss; ss++)
  69.         if (islower(*ss)) *ss = toupper(*ss);
  70. }
  71.  
  72. /* tprintf - do a printf into a temp buffer, then make a copy of the
  73.  * string and return a pointer to the copy */
  74. /* VARARGS1 */
  75. char *
  76. tprintf(fmt,args)
  77. char *fmt;
  78. {
  79.     char buf[2050];
  80.  
  81.     vsprintf(buf,fmt,&args);    /* printf the string */
  82.     return strsav(buf);        /* return a copy */
  83. }
  84.  
  85. /* freestr - free up a string, but not if it's in program space or stack */
  86. freestr(s)
  87. char *s;
  88. {
  89.     if (s>=end && s<(char *)&s)
  90.         free(s);
  91. }
  92.  
  93. /* end */
  94.