Back to index

radiance  4R0+20100331
cnt.c
Go to the documentation of this file.
00001 #ifndef lint
00002 static const char    RCSid[] = "$Id: cnt.c,v 1.2 2003/06/08 12:03:09 schorsch Exp $";
00003 #endif
00004 /*
00005  *  cnt.c - simple counting program.
00006  *
00007  *     2/1/88
00008  */
00009 
00010 #include  <stdlib.h>
00011 #include  <stdio.h>
00012 
00013 
00014 int  n[50];
00015 char  buf[256];
00016 
00017 static void loop(int *n, char *b);
00018 
00019 int
00020 main(
00021 int  argc,
00022 char  *argv[]
00023 )
00024 {
00025        int  a;
00026 
00027        argv++; argc--;
00028        for (a = 0; a < argc; a++)
00029               n[a] = atoi(argv[a]);
00030        n[a] = 0;
00031        loop(n, buf);
00032 
00033        exit(0);
00034 }
00035 
00036 
00037 char *
00038 tack(
00039 register char  *b,
00040 register int  i
00041 )
00042 {
00043        register char  *cp;
00044        char  *res;
00045 
00046        *b++ = '\t';
00047        cp = b;
00048        if (i == 0)
00049               *cp++ = '0';
00050        else
00051               do {
00052                      *cp++ = i%10 + '0';
00053                      i /= 10;
00054               } while (i);
00055        res = cp--;
00056 #define c i
00057        while (cp > b) {            /* reverse string */
00058               c = *cp;
00059               *cp-- = *b;
00060               *b++ = c;
00061        }
00062 #undef c
00063        return(res);
00064 }
00065 
00066 
00067 static void
00068 loop(
00069 int  *n,
00070 char  *b
00071 )
00072 {
00073        int  i;
00074 
00075        if (n[0] == 0) {
00076               *b = '\0';
00077               puts(buf);
00078               return;
00079        }
00080        for (i = 0; i < n[0]; i++)
00081               loop(n+1, tack(b, i));
00082 }