jot.c (132240) | jot.c (164021) |
---|---|
1/*- 2 * Copyright (c) 1993 3 * The Regents of the University of California. All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 29 unchanged lines hidden (view full) --- 38#endif /* not lint */ 39 40#ifndef lint 41#if 0 42static char sccsid[] = "@(#)jot.c 8.1 (Berkeley) 6/6/93"; 43#endif 44#endif 45#include <sys/cdefs.h> | 1/*- 2 * Copyright (c) 1993 3 * The Regents of the University of California. All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 29 unchanged lines hidden (view full) --- 38#endif /* not lint */ 39 40#ifndef lint 41#if 0 42static char sccsid[] = "@(#)jot.c 8.1 (Berkeley) 6/6/93"; 43#endif 44#endif 45#include <sys/cdefs.h> |
46__FBSDID("$FreeBSD: head/usr.bin/jot/jot.c 132240 2004-07-16 05:10:46Z tjr $"); | 46__FBSDID("$FreeBSD: head/usr.bin/jot/jot.c 164021 2006-11-06 07:26:16Z dds $"); |
47 48/* 49 * jot - print sequential or random data 50 * 51 * Author: John Kunze, Office of Comp. Affairs, UCB 52 */ 53 54#include <ctype.h> --- 6 unchanged lines hidden (view full) --- 61#include <time.h> 62#include <unistd.h> 63 64#define REPS_DEF 100 65#define BEGIN_DEF 1 66#define ENDER_DEF 100 67#define STEP_DEF 1 68 | 47 48/* 49 * jot - print sequential or random data 50 * 51 * Author: John Kunze, Office of Comp. Affairs, UCB 52 */ 53 54#include <ctype.h> --- 6 unchanged lines hidden (view full) --- 61#include <time.h> 62#include <unistd.h> 63 64#define REPS_DEF 100 65#define BEGIN_DEF 1 66#define ENDER_DEF 100 67#define STEP_DEF 1 68 |
69#define HAVE_STEP 1 70#define HAVE_ENDER 2 71#define HAVE_BEGIN 4 72#define HAVE_REPS 8 73 |
|
69#define is_default(s) (strcmp((s), "-") == 0) 70 71double begin; 72double ender; 73double s; 74long reps; 75int randomize; 76int infinity; --- 57 unchanged lines hidden (view full) --- 134 argc -= optind; 135 argv += optind; 136 137 switch (argc) { /* examine args right to left, falling thru cases */ 138 case 4: 139 if (!is_default(argv[3])) { 140 if (!sscanf(argv[3], "%lf", &s)) 141 errx(1, "bad s value: %s", argv[3]); | 74#define is_default(s) (strcmp((s), "-") == 0) 75 76double begin; 77double ender; 78double s; 79long reps; 80int randomize; 81int infinity; --- 57 unchanged lines hidden (view full) --- 139 argc -= optind; 140 argv += optind; 141 142 switch (argc) { /* examine args right to left, falling thru cases */ 143 case 4: 144 if (!is_default(argv[3])) { 145 if (!sscanf(argv[3], "%lf", &s)) 146 errx(1, "bad s value: %s", argv[3]); |
142 mask |= 01; | 147 mask |= HAVE_STEP; |
143 } | 148 } |
149 /* FALLTHROUGH */ |
|
144 case 3: 145 if (!is_default(argv[2])) { 146 if (!sscanf(argv[2], "%lf", &ender)) 147 ender = argv[2][strlen(argv[2])-1]; | 150 case 3: 151 if (!is_default(argv[2])) { 152 if (!sscanf(argv[2], "%lf", &ender)) 153 ender = argv[2][strlen(argv[2])-1]; |
148 mask |= 02; | 154 mask |= HAVE_ENDER; |
149 if (!prec) 150 n = getprec(argv[2]); 151 } | 155 if (!prec) 156 n = getprec(argv[2]); 157 } |
158 /* FALLTHROUGH */ |
|
152 case 2: 153 if (!is_default(argv[1])) { 154 if (!sscanf(argv[1], "%lf", &begin)) 155 begin = argv[1][strlen(argv[1])-1]; | 159 case 2: 160 if (!is_default(argv[1])) { 161 if (!sscanf(argv[1], "%lf", &begin)) 162 begin = argv[1][strlen(argv[1])-1]; |
156 mask |= 04; | 163 mask |= HAVE_BEGIN; |
157 if (!prec) 158 prec = getprec(argv[1]); 159 if (n > prec) /* maximum precision */ 160 prec = n; 161 } | 164 if (!prec) 165 prec = getprec(argv[1]); 166 if (n > prec) /* maximum precision */ 167 prec = n; 168 } |
169 /* FALLTHROUGH */ |
|
162 case 1: 163 if (!is_default(argv[0])) { 164 if (!sscanf(argv[0], "%ld", &reps)) 165 errx(1, "bad reps value: %s", argv[0]); | 170 case 1: 171 if (!is_default(argv[0])) { 172 if (!sscanf(argv[0], "%ld", &reps)) 173 errx(1, "bad reps value: %s", argv[0]); |
166 mask |= 010; | 174 mask |= HAVE_REPS; |
167 } 168 break; 169 case 0: 170 usage(); 171 default: 172 errx(1, "too many arguments. What do you mean by %s?", 173 argv[4]); 174 } 175 getformat(); 176 while (mask) /* 4 bit mask has 1's where last 4 args were given */ 177 switch (mask) { /* fill in the 0's by default or computation */ | 175 } 176 break; 177 case 0: 178 usage(); 179 default: 180 errx(1, "too many arguments. What do you mean by %s?", 181 argv[4]); 182 } 183 getformat(); 184 while (mask) /* 4 bit mask has 1's where last 4 args were given */ 185 switch (mask) { /* fill in the 0's by default or computation */ |
178 case 001: | 186 case HAVE_STEP: |
179 reps = REPS_DEF; | 187 reps = REPS_DEF; |
180 mask = 011; | 188 mask = HAVE_REPS | HAVE_STEP; |
181 break; | 189 break; |
182 case 002: | 190 case HAVE_ENDER: |
183 reps = REPS_DEF; | 191 reps = REPS_DEF; |
184 mask = 012; | 192 mask = HAVE_REPS | HAVE_ENDER; |
185 break; | 193 break; |
186 case 003: | 194 case HAVE_ENDER | HAVE_STEP: |
187 reps = REPS_DEF; | 195 reps = REPS_DEF; |
188 mask = 013; | 196 mask = HAVE_REPS | HAVE_ENDER | HAVE_STEP; |
189 break; | 197 break; |
190 case 004: | 198 case HAVE_BEGIN: |
191 reps = REPS_DEF; | 199 reps = REPS_DEF; |
192 mask = 014; | 200 mask = HAVE_REPS | HAVE_BEGIN; |
193 break; | 201 break; |
194 case 005: | 202 case HAVE_BEGIN | HAVE_STEP: |
195 reps = REPS_DEF; | 203 reps = REPS_DEF; |
196 mask = 015; | 204 mask = HAVE_REPS | HAVE_BEGIN | HAVE_STEP; |
197 break; | 205 break; |
198 case 006: | 206 case HAVE_BEGIN | HAVE_ENDER: |
199 reps = REPS_DEF; | 207 reps = REPS_DEF; |
200 mask = 016; | 208 mask = HAVE_REPS | HAVE_BEGIN | HAVE_ENDER; |
201 break; | 209 break; |
202 case 007: | 210 case HAVE_BEGIN | HAVE_ENDER | HAVE_STEP: |
203 if (randomize) { 204 reps = REPS_DEF; 205 mask = 0; 206 break; 207 } 208 if (s == 0.0) { 209 reps = 0; 210 mask = 0; 211 break; 212 } 213 reps = (ender - begin + s) / s; 214 if (reps <= 0) 215 errx(1, "impossible stepsize"); 216 mask = 0; 217 break; | 211 if (randomize) { 212 reps = REPS_DEF; 213 mask = 0; 214 break; 215 } 216 if (s == 0.0) { 217 reps = 0; 218 mask = 0; 219 break; 220 } 221 reps = (ender - begin + s) / s; 222 if (reps <= 0) 223 errx(1, "impossible stepsize"); 224 mask = 0; 225 break; |
218 case 010: | 226 case HAVE_REPS: |
219 begin = BEGIN_DEF; | 227 begin = BEGIN_DEF; |
220 mask = 014; | 228 mask = HAVE_REPS | HAVE_BEGIN; |
221 break; | 229 break; |
222 case 011: | 230 case HAVE_REPS | HAVE_STEP: |
223 begin = BEGIN_DEF; | 231 begin = BEGIN_DEF; |
224 mask = 015; | 232 mask = HAVE_REPS | HAVE_BEGIN | HAVE_STEP; |
225 break; | 233 break; |
226 case 012: | 234 case HAVE_REPS | HAVE_ENDER: |
227 s = (randomize ? time(NULL) : STEP_DEF); | 235 s = (randomize ? time(NULL) : STEP_DEF); |
228 mask = 013; | 236 mask = HAVE_REPS | HAVE_ENDER | HAVE_STEP; |
229 break; | 237 break; |
230 case 013: | 238 case HAVE_REPS | HAVE_ENDER | HAVE_STEP: |
231 if (randomize) 232 begin = BEGIN_DEF; 233 else if (reps == 0) 234 errx(1, "must specify begin if reps == 0"); 235 begin = ender - reps * s + s; 236 mask = 0; 237 break; | 239 if (randomize) 240 begin = BEGIN_DEF; 241 else if (reps == 0) 242 errx(1, "must specify begin if reps == 0"); 243 begin = ender - reps * s + s; 244 mask = 0; 245 break; |
238 case 014: | 246 case HAVE_REPS | HAVE_BEGIN: |
239 s = (randomize ? -1.0 : STEP_DEF); | 247 s = (randomize ? -1.0 : STEP_DEF); |
240 mask = 015; | 248 mask = HAVE_REPS | HAVE_BEGIN | HAVE_STEP; |
241 break; | 249 break; |
242 case 015: | 250 case HAVE_REPS | HAVE_BEGIN | HAVE_STEP: |
243 if (randomize) 244 ender = ENDER_DEF; 245 else 246 ender = begin + reps * s - s; 247 mask = 0; 248 break; | 251 if (randomize) 252 ender = ENDER_DEF; 253 else 254 ender = begin + reps * s - s; 255 mask = 0; 256 break; |
249 case 016: | 257 case HAVE_REPS | HAVE_BEGIN | HAVE_ENDER: |
250 if (randomize) 251 s = -1.0; 252 else if (reps == 0) 253 errx(1, "infinite sequences cannot be bounded"); 254 else if (reps == 1) 255 s = 0.0; 256 else 257 s = (ender - begin) / (reps - 1); 258 mask = 0; 259 break; | 258 if (randomize) 259 s = -1.0; 260 else if (reps == 0) 261 errx(1, "infinite sequences cannot be bounded"); 262 else if (reps == 1) 263 s = 0.0; 264 else 265 s = (ender - begin) / (reps - 1); 266 mask = 0; 267 break; |
260 case 017: /* if reps given and implied, */ | 268 case HAVE_REPS | HAVE_BEGIN | HAVE_ENDER | HAVE_STEP: 269 /* if reps given and implied, */ |
261 if (!randomize && s != 0.0) { 262 long t = (ender - begin + s) / s; 263 if (t <= 0) 264 errx(1, "impossible stepsize"); 265 if (t < reps) /* take lesser */ 266 reps = t; 267 } 268 mask = 0; --- 182 unchanged lines hidden --- | 270 if (!randomize && s != 0.0) { 271 long t = (ender - begin + s) / s; 272 if (t <= 0) 273 errx(1, "impossible stepsize"); 274 if (t < reps) /* take lesser */ 275 reps = t; 276 } 277 mask = 0; --- 182 unchanged lines hidden --- |