home *** CD-ROM | disk | FTP | other *** search
/ Piper's Pit BBS/FTP: ibm 0020 - 0029 / ibm0020-0029 / ibm0028.tar / ibm0028 / GRLF-C-2.ZIP / GFUNC / STRWR.C < prev    next >
Encoding:
C/C++ Source or Header  |  1990-05-30  |  5.1 KB  |  204 lines

  1. /*
  2.  * strwr.c
  3.  * contains: strwr(),strwrlf(),strwrrt(),strwb(),strwblf(),strwbrt()
  4.  *
  5.  *   Copyright (C)1987-1990 Greenleaf Software Inc. All Rights Reserved.
  6.  */
  7.  
  8. #include <stdio.h>
  9. #include "gfuncts.h"
  10.  
  11. int GF_CONV strwc(),GF_CONV strwr(),GF_CONV strwrlf(),GF_CONV strwrrt();
  12.  
  13. /*
  14.  *  int
  15.  * strwr(ps,repl,start,num)
  16.  *
  17.  * ARGUMENT
  18.  *  (char *)    ps    -    pointer to string to operate on
  19.  *  (char)    repl    -    character to substitute in string
  20.  *  (int)    start    -    word position of first word to replace/blank
  21.  *  (int)    num    -    number of words to replace with "repl"
  22.  *
  23.  * DESCRIPTION
  24.  *  string word replace, the specified number or less of words are replaced
  25.  *  by a series of one or more characters "repl".  The string is not copied.
  26.  *  the actual number of words is the lesser of "num" or the actual
  27.  *  number of words found in the string.  The actual number of characters
  28.  *  is limited by the length of the string.
  29.  *
  30.  * RETURNS
  31.  *  Number of characters replaced
  32.  */
  33. int GF_CONV strwr(ps,repl,start,num)
  34. char *ps,repl;
  35. int start,num;
  36. {
  37.     int words,curword,chs,inword,stop,replon,min1;
  38.  
  39.     min1=xmin(num,strwc(ps));
  40.     words=xmax(0,min1);
  41.     if(!words) 
  42.         return 0;
  43.     stop=start+words-1;
  44.     inword=chs=curword=replon=0;
  45.     while (1) {
  46.         if(!*ps) 
  47.             return chs;
  48.         if (gisspace(*ps)) {
  49.             if(inword) 
  50.                 inword=0;
  51.             if(curword==stop) 
  52.                 return chs;
  53.             else 
  54.                 goto point1;
  55.         }
  56.         else if(!inword) {
  57.             inword=1;
  58.             ++curword;
  59.             if(curword==start) 
  60.                 replon=1;
  61.         }
  62. point1:
  63.         if (replon) {
  64.             *ps=repl;
  65.             ++chs;
  66.         }
  67.         ++ps;
  68.     }
  69. }
  70.  
  71. /*
  72.  *  int
  73.  * strwrlf(ps,repl,num)
  74.  *
  75.  * ARGUMENT
  76.  *  (char *)    ps    -    pointer to string to operate on
  77.  *  (char)    repl    -    character to substitute in string
  78.  *  (int)    num    -    number of words to replace with "repl"
  79.  *
  80.  * DESCRIPTION
  81.  *  replace leftmost "num" words in string, the specified number or less of
  82.  *  words are replaced by a series of one or more characters "repl".  The 
  83.  *  string is not copied.
  84.  *  The actual number of words is the lesser of "num" or the actual
  85.  *  number of words found in the string.  The actual number of characters
  86.  *  is limited by the length of the string.
  87.  *
  88.  * RETURNS
  89.  *  Number of characters replaced
  90.  */
  91. int GF_CONV strwrlf(ps,repl,num)
  92. char *ps,repl;
  93. int num;
  94. {
  95.     return(strwr(ps,repl,1,num));
  96. }
  97.  
  98. /*
  99.  *  int
  100.  * strwrrt(ps,repl,num)
  101.  *
  102.  * ARGUMENT
  103.  *  (char *)    ps    -    pointer to string to operate on
  104.  *  (char)    repl    -    character to substitute in string
  105.  *  (int)    num    -    number of words to replace with "repl"
  106.  *
  107.  * DESCRIPTION
  108.  *  replace rightmost "num" words in string, the specified number or less of
  109.  *  words are replaced by a series of one or more characters "repl".  The 
  110.  *  string is not copied.
  111.  *  The actual number of words is the lesser of "num" or the actual
  112.  *  number of words found in the string.  The actual number of characters
  113.  *  is limited by the length of the string.
  114.  *
  115.  * RETURNS
  116.  *  Number of characters replaced
  117.  */
  118. int GF_CONV strwrrt(ps,repl,num)
  119. char *ps,repl;
  120. int num;
  121. {
  122.     int skipto,nwords;
  123.  
  124.     nwords=strwc(ps);
  125.     skipto=nwords-num+1;
  126.     return(strwr(ps,repl,skipto,num));
  127. }
  128.  
  129. /*
  130.  *  int
  131.  * strwb(str,start,num)
  132.  *
  133.  * ARGUMENT
  134.  *  (char *)    str    -    pointer to string to operate on
  135.  *  (int)    start    -    word position to start blanking     
  136.  *  (int)    num    -    number of words to replace with "repl"
  137.  *
  138.  * DESCRIPTION
  139.  *  replace "num" words in string starting at "start", the specified number
  140.  *  or less of words are replaced by a series of BLANKS.
  141.  *  The actual number of words is the lesser of "num" or the actual
  142.  *  number of words found in the string.  The actual number of characters
  143.  *  is limited by the length of the string.
  144.  *
  145.  * RETURNS
  146.  *  Number of characters replaced
  147.  */
  148. int GF_CONV strwb(str,start,num)
  149. char *str;
  150. int start,num;
  151. {
  152.     return(strwr(str,' ',start,num));
  153. }
  154.  
  155. /*
  156.  *  int
  157.  * strwblf(str,num)
  158.  *
  159.  * ARGUMENT
  160.  *  (char *)    str    -    pointer to string to operate on
  161.  *  (int)    num    -    number of words to replace with "repl"
  162.  *
  163.  * DESCRIPTION
  164.  *  replace "num" words in string starting at the left position.  The
  165.  *  specified number or less of words are replaced by a series of BLANKS.
  166.  *  The actual number of words is the lesser of "num" or the actual
  167.  *  number of words found in the string.  The actual number of characters
  168.  *  is limited by the length of the string.
  169.  *
  170.  * RETURNS
  171.  *  Number of characters replaced
  172.  */
  173. int GF_CONV strwblf(str,num)
  174. char *str;
  175. int num;
  176. {
  177.     return strwrlf(str,' ',num);
  178. }
  179.  
  180. /*
  181.  *  int
  182.  * strwbrt(str,num)
  183.  *
  184.  * ARGUMENT
  185.  *  (char *)    str    -    pointer to string to operate on
  186.  *  (int)    num    -    number of words to replace with "repl"
  187.  *
  188.  * DESCRIPTION
  189.  *  replace "num" words in string starting at the right position.  The
  190.  *  specified number or less of words are replaced by a series of BLANKS.
  191.  *  The actual number of words is the lesser of "num" or the actual
  192.  *  number of words found in the string.  The actual number of characters
  193.  *  is limited by the length of the string.
  194.  *
  195.  * RETURNS
  196.  *  Number of characters replaced
  197.  */
  198. int GF_CONV strwbrt(str,num)
  199. char *str;
  200. int num;
  201. {
  202.     return(strwrrt(str,' ',num));
  203. }
  204.