示例#1
0
int
writetao(struct track_head *thp)
{
	u_char modebuf[70], bdlen;
	struct track_info *tr;
	int r, track = 0;

	if ((r = mode_sense_write(modebuf)) != SCCMD_OK) {
		warnx("mode sense failed: %d", r);
		return (r);
	}
	bdlen = modebuf[7];
	modebuf[2+8+bdlen] |= 0x40; /* Buffer Underrun Free Enable */
	modebuf[2+8+bdlen] |= 0x01; /* change write type to TAO */

	SLIST_FOREACH(tr, thp, track_list) {
		track++;
		switch (tr->type) {
		case 'd':
			modebuf[3+8+bdlen] = 0x04; /* track mode = data */
			modebuf[4+8+bdlen] = 0x08; /* 2048 block track mode */
			modebuf[8+8+bdlen] = 0x00; /* turn off XA */
			break;
		case 'a':
			modebuf[3+8+bdlen] = 0x00; /* track mode = audio */
			modebuf[4+8+bdlen] = 0x00; /* 2352 block track mode */
			modebuf[8+8+bdlen] = 0x00; /* turn off XA */
			break;
		default:
			warn("impossible tracktype detected");
			break;
		}
		while (unit_ready() != SCCMD_OK)
			continue;
		if ((r = mode_select_write(modebuf)) != SCCMD_OK) {
			warnx("mode select failed: %d", r);
			return (r);
		}

		set_speed(tr->speed);
		writetrack(tr, track);
		synchronize_cache();
	}
示例#2
0
void main(int argc, char **argv) {

	int fd = -1, tmp, i, j;
	struct floppy_raw_cmd raw_cmd;
	
	FILE *in;

	if (argc != 2) {
		printf("usage: writedisk <image to write>\n");
		exit(1);
	}

	in = fopen(argv[1], "rb");
	if (!in) {
		printf("could not open %s\n",argv[1]);
		exit(1);
	}

	fd = open("/dev/fd0", O_ACCMODE | O_NDELAY);
	if (!fd) {
		printf("could not open /dev/fd0 for writing\n");
		exit(1);
	}

	seektrack(fd, 0);
	
	for(i = 0; i< 80; i++) {
		printf("track %d\n", i);
		fread(buffer, sizeof(char), 5632, in);
		writetrack(fd, i, buffer);
		seekin(fd);
	}
	printf("done        \n");
	
	close(fd);
	fclose(in);
}