#include <errno.h>
#include <stdio.h>
#include <string.h>
+#include <stdlib.h>
#include <sys/ioctl.h>
exit(127);
}
}
+
+unsigned long number(const char *a) {
+ unsigned long v;
+ char *ep;
+
+ v= strtoul(a,&ep,0);
+ if (*ep || ep==a) {
+ fprintf(stderr,"bad number `%s'\n",a);
+ exit(127);
+ }
+ return v;
+}
#include <assert.h>
#include <stdlib.h>
#include <unistd.h>
+#include <stdio.h>
#include <sys/ioctl.h>
#include <linux/ppdev.h>
#include "lib.h"
+static void badusage(void) {
+ fprintf(stderr,
+ "usage: siggen [m<mult>] item...\n"
+ "items:\n"
+ " k<value> PPWCONTROL value\n"
+ " t<value> PPWDATA value\n"
+ " w<value> usleep(value)\n"
+ "options:\n"
+ " m<value> do every item m times\n");
+}
+
int main(int argc, const char *const *argv) {
- unsigned char v[2];
- int wh=0, p;
-
- assert(argc==3 || argc==4);
+ int ii, io=0, m=1;
+ unsigned char v;
+ const char *a;
- v[0]= strtoul(argv[1],0,0);
- v[1]= strtoul(argv[2],0,0);
- p= argv[3] ? atoi(argv[3]) : -1;
- for (;;) {
- doioctl(PPWCONTROL, &v[wh], v[wh]);
- wh= !wh;
- if (p>=0) usleep(p);
+ argc--;
+ argv++;
+ if (argc>=1 && (a=argv[0]) && a[0]=='m') {
+ m= number(a+1);
+ argc--;
+ argv++;
+ }
+ if (argc<1) badusage();
+ for (ii=0; ; ii++, ii%=(argc*m)) {
+ a= argv[ii/m];
+ switch (a[0]) {
+ case 'k': io= PPWCONTROL; break;
+ case 't': io= PPWDATA; break;
+ case 'w': io= -1; break;
+ default: badusage();
+ }
+ v= number(a+1);
+ if (io==-1) {
+ usleep(v);
+ } else {
+ doioctl(io, &v, v);
+ }
}
}