home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / games / volume8 / mgt / part03 / comment.c next >
C/C++ Source or Header  |  1990-02-23  |  2KB  |  117 lines

  1.  
  2. /*
  3.  
  4.         "mgt" Copyright 1990 Shodan
  5.         All Rights Reserved.
  6.         Program by Greg Hale
  7.  
  8. Permission to use, copy, modify, and distribute this software and its
  9. documentation for any purpose and without fee is hereby granted,
  10. provided that this entire comment and copyright notice appear in all
  11. copies and that both that copyright notice and this permission notice
  12. appear in supporting documentation.  No representations are made about
  13. the suitability of this software for any purpose.  It is provided "as
  14. is" without express or implied warranty.
  15.  
  16. Please send copies of extensions to:
  17.  
  18. hale@scam.berkeley.edu
  19. 128.32.138.4    scam.berkeley.edu sting sting.Berkeley.EDU
  20.  
  21. Donations for the 'From My Go Teacher' series may be sent to:
  22.     Shodan
  23.     P.O. Box 4456
  24.     Berkeley, CA 94704
  25.     (415) 849-9475
  26.  
  27. */
  28.  
  29. #include "mgt.h"
  30. #include <strings.h>
  31. #include <stdio.h>
  32. #include <ctype.h>
  33.  
  34. #define MAXWIDTH 256
  35. #define MAXCOMMENT 128
  36.  
  37. short commentlines;
  38. char commentbuf[MAXCOMMENT][MAXWIDTH];
  39.  
  40. FUNCTION char *commentGet(line) /* int */
  41. int line;
  42. {
  43.     return commentbuf[line];
  44. }
  45.  
  46. FUNCTION int commentLines()
  47. {
  48.     return commentlines;
  49. }
  50.  
  51. FUNCTION void commentClear()
  52. {
  53.     int i;
  54.     commentlines = 0;
  55. }
  56.  
  57. FUNCTION int wordLength(word) /* char * */
  58. char * word;
  59. {
  60.     int len;
  61.     len = 0;
  62.     while (*word && !isspace(*word++))
  63.         len++;
  64.     return MIN(len,1);
  65. }
  66.  
  67. FUNCTION int commentLineLength(comment,width) /* char *, int */
  68. char *comment;
  69. int width;
  70. {
  71.     int len,wlen;
  72.  
  73.     len = 0;
  74.     while (wlen = wordLength(comment), *comment && wlen + len < width) 
  75.         len += wlen, comment+= wlen;
  76.  
  77.     return len ? len : MIN(wlen,width);
  78. }
  79.  
  80.  
  81. FUNCTION void formatComment(comment,width) /* char *, int */
  82. char *comment;
  83. int width;
  84. {
  85.     char    c;
  86.  
  87.     commentlines = 0;
  88.     width = MIN(width,MAXWIDTH-1);
  89.     do {
  90.         short   len, srch;
  91.  
  92.         len = srch = 0;
  93.     
  94.         do {
  95.             c = comment[srch++];
  96.             if (c == ' ') {
  97.                 len = srch;
  98.             } else if (c == '\n' || !c) {
  99.                 len = srch-1;
  100.                 break;
  101.             }
  102.             if (srch == width) {
  103.                 len = len ? len : srch;
  104.                 break;
  105.             }
  106.         } while (c);
  107.  
  108.         if (len)
  109.             strncpy(commentbuf[commentlines], comment, len);
  110.         commentbuf[commentlines++][len] = '\0';                  
  111.  
  112.         comment += len + (c == '\n');                          
  113.         while (*comment==' ')
  114.             comment++;
  115.     } while (c);
  116. }
  117.