/* * (C) 1983 UniSoft Corp. of Berkeley CA * * UniPlus Source Code. This program is proprietary * with Unisoft Corporation and is not to be reproduced * or used in any manner except as authorized in * writing by Unisoft. */ #include #include #include #include #include #ifdef DEBUG int debug = 0; #endif main() { int fi; char buf[50]; char *p, *conv(); int from, to; printf("\nStandalone disk test\n\n"); finit(); do { printf("Device: "); gets(buf); fi = open(buf, 2); } while (fi < 0); loop: printf("Command: c(clear),r(read),w(write) "); gets(buf); switch (buf[0]) { case 'c': case 'r': case 'w': break; default: goto loop; } p = conv(&buf[1], &from); if (from < 0) goto loop; p = conv(p, &to); if (to < 0) goto loop; dtest(fi, buf[0], from, to); goto loop; } char * conv(p, v) register char *p; int *v; { register i = 0; while (*p && *p < '0' || *p > '9') p++; while (*p >= '0' && *p <= '9') i = i * 10 + *p++ - '0'; *v = i; return (p); } #define IBS (BSIZE>>2) #define IBS2 (BSIZE>>3) dtest(fi, op, from, to) { int buf[IBS]; register int i, bno; int a, b; lseek(fi, from*BSIZE, 0); switch(op) { case 'c': printf("CLEAR %d-%d\n", from, to); for (i = 0; i < IBS; i++) buf[i] = -1; for (bno = from; bno <= to; bno++) if (write(fi, buf, BSIZE) != BSIZE) printf("Bad write on block %d\n", bno); break; case 'w': printf("WRITE %d-%d\n", from, to); for (bno = from; bno <= to; bno++) { for (i = 0; i < IBS; i++) buf[i] = bno; if (write(fi, buf, BSIZE) != BSIZE) printf("Bad write on block %d\n", bno); } break; case 'r': printf("READ %d-%d\n", from, to); for (bno = from; bno <= to; bno++) { if (read(fi, buf, BSIZE) != BSIZE) { printf("Bad read on block %d\n", bno); break; } a = buf[0]; for (i = 1; i < IBS2; i++) if (a != buf[i]) { a = -2; break; } b = buf[IBS2]; for (i = IBS2+1; i < IBS; i++) if (b != buf[i]) { b = -2; break; } if (a == b) { if (a == -2) printf("%d=X ", bno); else if (a == -1) printf("%d=C ", bno); else if (a != bno) printf("%d=%d ", bno, a); } else { printf("%d=", bno); if (a == -2) printf("X,"); else if (a == -1) printf("C,"); else printf("%d,", bno, a); if (b == -2) printf("X "); else if (b == -1) printf("C "); else printf("%d ", bno, a); } } break; } }