home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / misc / volume6 / count < prev    next >
Text File  |  1989-05-14  |  6KB  |  244 lines

  1. Newsgroups: comp.sources.misc
  2. From: allbery@uunet.UU.NET (Brandon S. Allbery - comp.sources.misc)
  3. Subject: v06i100: Count program
  4. Sender: nobody@orca.wv.tek.com
  5. Reply-To: Jeff Beadles <jeff@quark.wv.tek.com>
  6. Organization: Tektronix, Inc., Wilsonville, OR
  7.  
  8. Posting-number: Volume 6, Issue 100
  9. Submitted-by: jeff@quark.wv.tek.com (Jeff Beadles)
  10. Archive-name: count
  11.  
  12.  
  13. This is something that I wrote a while back, and decided to clean-up and
  14. give to the world.  It's useful when you need to count in a shell script,
  15. when your system does not support it.  It can be called like:
  16.  
  17.     for num in `count 1 100`        # Counts from 1 to 100
  18.  
  19.  
  20. #--------------------------------CUT HERE-------------------------------------
  21. #! /bin/sh
  22. #
  23. # This is a shell archive.  Save this into a file, edit it
  24. # and delete all lines above this comment.  Then give this
  25. # file to sh by executing the command "sh file".  The files
  26. # will be extracted into the current directory owned by
  27. # you with default permissions.
  28. #
  29. # The files contained herein are:
  30. #
  31. # -rw-------  1 jeff          447 May  9 10:39 README
  32. # -rw-------  1 jeff          446 May  9 10:12 Makefile
  33. # -rw-------  1 jeff          533 May  9 09:58 count.1
  34. # -rw-------  1 jeff         2177 May  9 10:24 count.c
  35. #
  36. echo 'x - README'
  37. if test -f README; then echo 'shar: not overwriting README'; else
  38. sed 's/^X//' << '________This_Is_The_END________' > README
  39. X    count -  By:  Jeff Beadles    jeff@quark.WV.TEK.COM
  40. X
  41. X
  42. X    This program will count from the starting number to the stop
  43. X    number, using the character 'fs' as the field seperator.
  44. X
  45. X    Note, that fs may be in several forms:
  46. X    -A    will use the letter 'A'
  47. X    --    will use a '-' as fs, and
  48. X    -\011    will use a tab (Octal 011) as the fs.  (sh does the expansion.)
  49. X
  50. X    Bugs may be sent to me if desired.
  51. X    Please keep your flames to yourself.  What do you expect for free?
  52. ________This_Is_The_END________
  53. if test `wc -l < README` -ne 13; then
  54.     echo 'shar: README was damaged during transit (should have been 13 lines)'
  55. fi
  56. fi        ; : end of overwriting check
  57. echo 'x - Makefile'
  58. if test -f Makefile; then echo 'shar: not overwriting Makefile'; else
  59. sed 's/^X//' << '________This_Is_The_END________' > Makefile
  60. X#
  61. X# Makefile for count.  This is a little overkill, but what the heck.
  62. X# (This is public domain too!)
  63. X# Written by:  Jeff Beadles
  64. X# jeff@quark.WV.TEK.COM        ...tektronix!quark.wv!jeff
  65. X#
  66. X
  67. XCC = cc
  68. XCFLAGS =
  69. X
  70. X#For the executable file
  71. XBINDIR=/usr/bin
  72. X
  73. Xcount: count.c Makefile
  74. X    $(CC) $(CFLAGS) count.c -o count
  75. X
  76. Xinstall: count
  77. X    -strip count
  78. X    cp count ${BINDIR}/count
  79. X    chmod 755 ${BINDIR}/count
  80. X
  81. Xclean:
  82. X    rm -f *.o core a.out
  83. X
  84. Xclobber: clean
  85. X    rm -f count
  86. X
  87. ________This_Is_The_END________
  88. if test `wc -l < Makefile` -ne 27; then
  89.     echo 'shar: Makefile was damaged during transit (should have been 27 lines)'
  90. fi
  91. fi        ; : end of overwriting check
  92. echo 'x - count.1'
  93. if test -f count.1; then echo 'shar: not overwriting count.1'; else
  94. sed 's/^X//' << '________This_Is_The_END________' > count.1
  95. X.\"
  96. X.\" @(#)count        1.0    05/09/89
  97. X.\"
  98. X.TH COUNT 1 "09 MAY 1989"
  99. X.UC 4
  100. X.SH NAME
  101. Xcount \- count numbers from a start to a stop point.
  102. X.SH SYNOPSIS
  103. X.B count [-c] start stop
  104. X.SH DESCRIPTION
  105. X.I Count
  106. Xwill count thru an integer sequence of numbers from
  107. X.I Start
  108. Xto
  109. X.I Stop
  110. Xwith a newline after each number.
  111. X
  112. XOptionally,
  113. X.I -c
  114. Xmay be on the command line.  This may be in one of two forms.
  115. X.I -$
  116. Xwill put a 
  117. X.I $
  118. Xbetween each number.
  119. X.I -040
  120. Xwill put a space (Octal
  121. X.I 040
  122. X) between each number.
  123. X
  124. X.SH AUTHOR
  125. XJeff Beadles    jeff@quark.WV.TEK.COM
  126. ________This_Is_The_END________
  127. if test `wc -l < count.1` -ne 31; then
  128.     echo 'shar: count.1 was damaged during transit (should have been 31 lines)'
  129. fi
  130. fi        ; : end of overwriting check
  131. echo 'x - count.c'
  132. if test -f count.c; then echo 'shar: not overwriting count.c'; else
  133. sed 's/^X//' << '________This_Is_The_END________' > count.c
  134. X/*    Count.c  Released into the public domain on 05/09/89
  135. X *    Written by:  Jeff Beadles  jeff@quark.WV.TEK.COM
  136. X *      or ...!tektronix!quark.WV!jeff
  137. X *
  138. X *    NOTE:  This program is not supported by Tektronix, Inc.
  139. X *
  140. X *    This program will count from the starting number to the stop
  141. X *    number, using the character 'fs' as the field seperator.
  142. X *    Note, that fs may be in several forms:
  143. X *    -A    will use the letter 'A'
  144. X *    --    will use a '-' as fs, and
  145. X *    -\011    will use a tab (Octal 011) as the fs.  (sh does the expansion.)
  146. X *
  147. X *    Bugs may be sent to me if desired.
  148. X *    Please keep your flames to yourself.  What do you expect for free?
  149. X *
  150. X */
  151. X
  152. X
  153. X#include <stdio.h>
  154. X#include <ctype.h>
  155. X
  156. X/*
  157. X *    Default field seperator
  158. X */
  159. X
  160. X#ifndef FS
  161. X#define FS '\n'
  162. X#endif
  163. X
  164. Xint
  165. Xmain(argc,argv)
  166. Xint argc;
  167. Xchar **argv;
  168. X
  169. X{
  170. X    void usage();
  171. X    int oatc();
  172. X    int    start = 0;    /* Start count                */
  173. X    int    stop  = 0;    /* Stop  count                */
  174. X    int    pos   = 1;    /* Position in command line for parsing    */
  175. X    char    fs    = FS;    /* Field Separator            */
  176. X
  177. X    if ( argc < 2)
  178. X        usage(argv[0]);        /* Does not return */
  179. X
  180. X    if ( argv[1][0] == '-' ) {
  181. X        if ( (isdigit(argv[1][1])) && (strlen(argv[1]) == 4) )
  182. X            fs=oatc(argv[1] + 1);
  183. X            else
  184. X            fs = argv[1][1];
  185. X        pos++;        /* On to the next arg... */
  186. X    }
  187. X    start = atoi(argv[pos++]);    /* Start here, and... */
  188. X
  189. X    if ( argc <= pos)
  190. X        usage(argv[0]);        /* Does not return */
  191. X
  192. X    stop  = atoi(argv[pos]);     /* Stop here. */
  193. X    if ( start >= stop)        /* Are they brain damaged? */
  194. X    {
  195. X        fprintf(stderr,"Error:  START must be less than STOP\n");
  196. X        exit(-2);
  197. X    }
  198. X
  199. X/*
  200. X   Yes, this is it.  It even prints a '\n' when done, if the fs != '\n' (Wow)
  201. X */
  202. X    while ( start <= stop )
  203. X        printf("%d%c",start++,( (start != stop) ? fs : '\n' ) );
  204. X}
  205. X
  206. X/*
  207. X   Can you figure out this function with no comments?  Sure, you can.
  208. X*/
  209. Xvoid usage(program)
  210. Xchar *program;
  211. X
  212. X{
  213. X    fprintf(stderr,"Usage: %s [ -c] start stop\n",program);
  214. X    exit(-1);
  215. X}
  216. X
  217. X/*
  218. X *    octal ascii to char
  219. X */
  220. X
  221. Xint oatc(str)
  222. Xchar *str;
  223. X    {
  224. X    int retval=0;
  225. X    int pos=0;
  226. X    int tmp=0;
  227. X    int loop;
  228. X    static int table[] = { 1, 8, 64 };   /* Powers of 8, to avoid POW */
  229. X
  230. X
  231. X    for(loop=strlen(str) - 1; loop >= 0; loop--)
  232. X        retval += ( (str[loop] - '0') * table[pos++] );
  233. X
  234. X    return((char)retval);
  235. X}
  236. X
  237. ________This_Is_The_END________
  238. if test `wc -l < count.c` -ne 103; then
  239.     echo 'shar: count.c was damaged during transit (should have been 103 lines)'
  240. fi
  241. fi        ; : end of overwriting check
  242. exit 0
  243.  
  244.