|
DataMuseum.dkPresents historical artifacts from the history of: Commodore CBM-900 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Commodore CBM-900 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 1185 (0x4a1) Types: TextFile Notes: UNIX file Names: »from.c«
└─⟦f27320a65⟧ Bits:30001972 Commodore 900 hard disk image with partial source code └─⟦f4b8d8c84⟧ UNIX Filesystem └─⟦this⟧ »cmd/from.c«
/* * from - generate a list of numbers * usage - from number to number [ by number ] */ #include <stdio.h> #define sign(x) (x<0?-1:1) /* returns sign of number */ char usage[] = "Usage: from number to number [by number]\n"; char signmsg[] = "Increment has wrong sign\n"; main(argc, argv) char *argv[]; { int i; int start, end, incr; switch ( argc ) { case 4: incr = 1; break; case 6: if ( strcmp(argv[4], "by") ) error(usage); else if ( (incr = numeric(argv[5])) == 0 ) error("Increment must be non-zero\n"); break; default: error(usage); break; } if ( strcmp(argv[2], "to") ) error(usage); start = numeric(argv[1]); end = numeric(argv[3]); if ( sign(end-start) * sign(incr) < 0 ) error(signmsg); if ( incr > 0 ) for ( i = start; i <= end; i += incr ) printf("%d\n", i); else for ( i = start; i >= end; i += incr ) printf("%d\n", i); } /* * Return the value of a numeric arg; * otherwise, call usage(). */ numeric(s) register char *s; { register int n; n = atoi(s); if ( *s == '-' ) s++; for ( ; *s; s++) if (*s<'0' || *s>'9') error(usage); return(n); } error(x) { fprintf(stderr, "%r", &x); exit(1); }