V10/cmd/smash.c

Compare this file to the similar file:
Show the results in this format:

#include "stdio.h"
extern int errno;

char buf[512];

main(argc, argv)
char **argv;
{	int fd, n, i, j;
	short *p = (short *) buf;
	if(argc != 3) {
		fprintf(stderr, "%s raw-disk sn\n", argv[0]);
		exit(0);
	}
	fd = open(argv[1], 2);
	n = atoi(argv[2]);
	if(fd < 0 || lseek(fd, n*512, 0) < 0) {
		perror("begin");
		exit(1);
	}
foo:
	lseek(fd, n*512, 0);
	if (read(fd, buf, sizeof(buf)) != sizeof(buf))
		perror("read");
	for(i = 0; i < 16; i++) {
		for(j = 0; j < 16; j++)
			printf("%o ", p[16 * i + j] & 0xffff);
		putchar('\n');
	}
	printf("write?\n");
	if((i = getchar()) == 'y') {
wr:
		lseek(fd, n*512, 0);
		if (write(fd, buf, sizeof(buf)) != sizeof(buf))
			perror("write");
		(void) getchar();
		goto foo;
	}
	else if(i == 'c') {
		for(j = 0; j < 512; j++)
			buf[j] = 0;
		goto wr;
	}
}